{"version":3,"file":"main.f33324e5ab2ba024.js","mappings":"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ACAA,gFACAA,oFACAA,wFACAA,8EACAA,kFACAA,4FACAA,wDACAA,8DACAA,8DACAA,kEAGAA,sDACAA,oDACAA,sDACAA,oEACAA,oDACAA,gDACAA,gEACAA,8CACAA,wCACAA,4DACAA,0DACAA,gEACAA,0DACAA,sEACAA,gEAGAA,gDACAA,8BACAA,sCACAA,wDACAA,sBAGAA,wDAGAA,wCACAA,8DAGAA,8DACAA,wDAGAA,kDAGAA,sFAGAA,8DACAA,qDACAA,gDACAA,gFACAA,gDACAA,oEACAA,gEACAA,kEACAA,sDACAA,0DACAA,oDACAA,0EACAA,gEACAA,4DACAA,gEACAA,oFACAA,oFACAA,kFACAA,gFACAA,kFACAA,kFACAA,0DACAA,0EACAA,oFACAA,gFACAA,0DACAA,kEACAA,+CACAA,kEACAA,oDACAA,4DACAA,8DACAA,0CACAA,8EACAA,0EACAA,4EACAA,kDACAA,kDACAA,kDACAA,mDACAA,6EACAA,+EACAA,gDACAA,8DACAA,8DACAA,8DACAA,8CACAA,8CACAA,qEACAA,uEACAA,0EACAA,8DACAA,0DACAA,kDACAA,gDACAA,wDACAA,0DACAA,sDACAA,0DACAA,0DACAA,sDACAA,oDACAA,0DAGAA,gEAGAA,kFACAA,gEACAA,kEAGAA,sEACAA,wEACAA,8EACAA,gEACAA,kEACAA,wEAGAA,oCAGAA,wCAGAA,sEAGAA,8CAGAA,uDA3NsB,mICYnB,QAqBHzL,YACYoB,EACAC,EACAG,GAFArB,mBACAA,mBACAA,YAtBJA,sBAAqC,GAWtCA,2BAAwB,IAAIsE,IAAkC,IACrEtE,iCAA8BA,KAAK0rJ,sBAAsBhyI,eAcrD1Z,KAAKS,YAAYwqB,6BAA6BxkB,UAAUnF,IACpDtB,KAAKghB,gBAAkB,GACvBhhB,KAAK2rJ,wBA1BF3qI,sBACP,OAAOhhB,KAAKooG,iBAGLpnF,oBAAgB/f,GACvBjB,KAAKooG,iBAAmBnnG,EACxBjB,KAAK0rJ,sBAAsBptI,KAAKte,KAAKooG,kBAMrCwjD,6BACJ,OAAO,UAAK5rJ,KAAKooG,iBAAiBp5F,IAAI/N,GAAKA,EAA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ptU,qCACAA,mCAGA8tU,iBACA,mCACA9tU,uBAEA+tU,kBACA,4BACA,qBACA,UAAqCjjU,kBACrC9K,4BACAA,+BAGA+nU,4BACA/nU,sGACAA,uGACAA,wBAA+B,QAAKA,uGAEpCirU,uBACAjrU,4BAEAguU,yBACAhuU,qBACA,gBACA,iCACA,4BACA,mBACA,OAEA,mBAEA,YADAA,qBACA,EAGAA,cAAgC,YAChCA,8BACAA,qCAIAgrU,oBACAhrU,aACAA,qBACAA,+BACoB,WACpBA,oCAKAiuU,aACA,eAAwBjuU,uBAAuBA,wBAE/CkuU,eACA,oCACA/8R,6BACAnxC,0CACAA,mCAAgDA,mBAChDA,yCACAA,6CAEAmuU,yBACA,oBACA,OAEA,gBACAj9R,2CACAC,0BAGAD,qCAEA05R,YACA,eACA,OAEA,+BACAz5R,YACA0D,cACA70C,sCACAkqU,kCACAzC,WACA3vI,2BACA4xI,qBACAE,qBACAO,+CAEA,oCACAnqU,+CACAkxC,IACAlxC,oFAEAA,mCACAA,qEACA0yC,wBAGA1yC,oFAEAouU,aACApuU,cACAA,6BACAA,8BAEAA,sBACAA,oBAGAquU,WACAruU,iBACAA,2BACAA,iDACAA,uBAGAsuU,YACAtuU,iDACAA,uBACAA,wBAAmC,QAAI,sCAGvCA,kBAGAuuU,mBACA,gCACA,4BACA,eAEA,CAEAC,gBACA,yBACA,OAGA,cADAC,sBACAC,8BACA75R,8BACAC,wCACA,OACA,OAEA,MACAnC,QADAmC,iCACA,EACAlC,mCACAC,iCACAc,kBACAC,kBACAiB,0BAA2CjB,OAAa,GAASD,OAEjEg7R,eACA,oCACA3uU,yEACAA,qEAEA4uU,mBACA,qDAKAC,uBACA,OACA52S,UACA62S,aACA52S,iBACSl4B,qBAKT+uU,qBACA,qCACA/uU,uCAA4EA,iBAE5EA,cAKA6uJ,yBACA,MAAgB86K,eAAa3pU,WAC7B,OACAm2C,4BACA64R,cACA3rT,+BACS6tB,IAKT+9R,uBACA,uCACAjvU,uCAA4EA,iBAE5EA,cAEAkvU,iBAEA,YADAC,kBACAzmP,WAEA0mP,kBACA,iCACAv6R,IA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E,QACzDknB,GAKA,UACA5rB,sCACA81T,mCACAC,kDACAC,uBACAC,WACAC,gLAMAl/S,eAKA2X,oCACAE,kDAIA,OACAmW,OAWCjW,aAVDiW,iBACAA,mBACAA,wBACAA,wBACAA,sBACAA,wBACAA,sBACAA,kBACAA,wBACAA,sBAKA,iEAYA88E,aACA,gBACA,8DAYAznG,gBACA,eACA,kCACA8qB,+BACAc,gCACA,UACA,OACAC,GADArX,aACAmW,YAGAiB,GAEAC,UAnBA,MACA,oCACA,mFAiBA67E,MAEA,UAKAH,gBACA,mBACAz8E,IACAF,+BASAlzB,OACAwF,OACAvF,OAEAsF,OACA7E,OAEA9P,kBACA+P,YADA,EAIAV,QACA,YACA,oCACA,gBACAgzB,eACAC,iBAGAA,IAEAxyB,QACA,YAEA,OADAiH,OACAnc,aACA0nC,cAEAA,IAEAvyB,QACA,YACA,uBACA,gBACAyyB,OACAF,iBAGAA,IAKAvkC,IACA,UACA,aACA,wBACA,yBACA,2BACA,yBACA,SACA,SACA,QACA,cACA,sBACAk5B,UAIA91B,KAA0BkgU,qBAC1Bh/R,qBACAA,qBAKAnyB,yCAIAwE,mCAIAC,iDAIAC,sDAQA7T,WAJA,uCAIA8V,cAIAE,gDAaA,SAaA,UAMA,aACAvnB,4BACAG,gBACAA,iBACAA,YACAA,eAOAA,+BAIAA,kBAIAA,oBAKAA,gBAA0BkS,eAI1BlS,eAAyBkS,eACzBlS,gBACAA,sBACAA,iBAA2B6vB,MACnB,QAAegK,IACvB75B,kCACAA,+CAAkE6jU,UAAK7jU,gCACvEA,oCACAA,wCAKA2xU,uBACAriN,gDACA,oCACAz8E,0BACAc,+BACA3zC,sBACAA,mBAEAA,qBACAA,kBAEAA,wBAEA2xU,qBACA,4BAKAxB,iBACAnwU,0CACAA,kBAEAmwU,eACA,sBAEAtsK,UACA,sBAEA+tB,qBACA5xL,gDACAA,oHACAA,2BACAA,2CAGAA,oEACA0kB,gCACA1kB,2CACAA,2BAA8C,QAAI,mBAClDA,gDACAA,uHAMA6I,kBACA7I,0BACAA,6CACAA,uCACAA,oDAEAA,iHAGAA,iEACA0kB,6B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SAAK,CAAGA,cACR,SAAO,gBAAiB,SAAK,CAAGA,oBAIpDqhD,GAAU,EACN,iBAAW,iBACXK,GAAU,wBACd0sN,mCACA/sN,GAAU,EACN,iBAAW,aACXK,GAAU,uBACd0sN,4BACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,kCACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,mCACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,gCACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,kCACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,oCACA/sN,GAAU,EACN,aACAK,GAAU,wBACd0sN,oCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,+BACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,6BACA/sN,GAAU,EACN,aACAK,GAAU,uBACd0sN,iCACA/sN,GAAU,EACN,aACAK,GAAU,uBACd0sN,sCACA/sN,GAAU,EACN,aACAK,GAAU,uBACd0sN,mCACA/sN,GAAU,EACN,aACAK,GAAU,cAAgBhkD,gBAC9B0wQ,uCACA/sN,GAAU,EACN,aACAK,GAAU,cAAgBhkD,gBAC9B0wQ,iDACA/sN,GAAU,EACN,aACAK,GAAU,uBACd0sN,uCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,iCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,kCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,kCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,iCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,kCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,gCACA/sN,GAAU,EACN,aACAK,GAAU,yBACd0sN,mCACAA,GAAyB/sN,GAAU,CAAGK,GAAU,wBAChD5mD,GACAD,GACA0zG,GACAjvE,GACAC,GACAruC,EACQwM,uBACR0wQ,IAuBA,aACA/iR,iBACAG,gBACAA,YAIAA,2BAAqCkS,eACrClS,uBAAiC4vB,KACjC5vB,mBACAqsU,oCACAD,iCAEApsU,qBACAA,mDACAyG,+BACA,UACAzG,oDACAyX,MAAkB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0M,0CACA,oCACAi3R,IA+BA,MAyCAj0H,oBACA,oCACA,OAGA,wBACA,WACA,OAGA,SAzoFA,MACA,WACA,YAEA,kDACA,gBACAg0H,GAEAA,qBAioFApyS,KACAmyS,gBACA,wBACA,OAEA,oCAUA+B,yBAEAf,YACA6G,iBACA,gBACAO,UAEApH,oBACAoH,SAEAA,SAKA9pM,YACA,mBACA,YAEA,aACA+hM,SACAC,qBACA,oCAGAA,GAFA,MASA13H,cACA3vM,oEACAinU,gDAQAr3H,YACA5/J,8CACAA,8CASAw1F,QACU,WAAmBxlI,8BAG7BsjC,iDAFA0jS,UASAp9L,YACA,sBACAw9L,gBAGA,sBACA,UAKA,qBACAF,4BACAC,2BAIAJ,eACAe,kBACAgB,iBACA,uBAEA7B,mBACAA,aAEAD,IAKAn3H,+BAuBAlqE,mCAOA0qD,gEAWAvqD,cACA,cAAgC,UAChC,OAEA,sBACA,SACAohM,KACA,yBACAD,sBACAA,uBACAC,OAEAF,mBACAK,MACAH,OAOAx1I,cACA,2BACA,OAEA,+BACAs1I,0BAKA90N,YACA,2BACA,OAEA,8BACA80N,2BAKArzN,YACA,2BACA,OAEA,8BACAqzN,2BAMA,SACAj3U,eACAG,wBAEAkuK,KAAUqxK,kFAEV,0BAAqD90S,OACrD,iBAEAi1K,SACA,iCAEAk5H,0BACA3pT,2DACA2oT,UACAA,oBACY,SAAM53U,oCAAN,CAAMyqC,UAClBzqC,+CAEA,CACA,mCACA44U,qBACAf,wBACAD,mBACA,2CACA53U,iCAGA,yCACAgiH,UAEAw/E,gBAEA21I,2BACAH,uBAIAG,UAEAH,qCACAA,kCAGA7K,QAAaoT,+CACb,kCACAvI,qBAWA,GAVAG,gBAEA13H,kBAEAh8F,mBAEAszN,gBACAA,sBAGAA,QAEAG,qCAEA,iDACAA,cAGAsI,oBACA,oBACAx/U,+BACA+2U,QAEA0I,eACA,OAAe,SAAMz/U,oCAAN,CAAM8/C,QAOrB,aACAjgD,eACAG,WACAA,oBACAA,4BAEA0/U,sBACA,yBACAN,6BACAA,wCACAA,6CACAA,+CACAA,mBACA,oBAIAt4T,gBACA9mB,2BAG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wG,8BAAyBA,aAAmBA,8BAAwB7C,MAC1Zy+H,aAA2C57H,8BAAwB,CAAGm7C,wDAAmFkgR,+TAA0V/C,UAAat4T,oCAChgB2jD,GAAU,EACN,aACAK,GAAU,uBACd43E,gCACAj4E,GAAU,EACN,aACAK,GAAU,uBACd43E,6BACAj4E,GAAU,EACN,aACAK,GAAU,uBACd43E,sCACAj4E,GAAU,EACN,aACAK,GAAU,uBACd43E,mCACAj4E,GAAU,EACN,aACAK,GAAU,uBACd43E,4BACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,oCACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,iCACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,kCACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,kCACAj4E,GAAU,EACN,aACAK,GAAU,sBACVA,GAAU,+BACd43E,+BACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,kCACAj4E,GAAU,EACN,aACAK,GAAU,wBACd43E,iCACAj4E,GAAU,EACN,aACAK,GAAU,uBACVA,GAAU,gCACd43E,gCACAj4E,GAAU,EACN,aACAK,GAAU,uBACVA,GAAU,gCACd43E,gCACAA,GAAwBj4E,GAAU,CAAGK,GAAU,qBAAuBhkD,aACtE9C,GACA0kC,GACAK,GACA4uE,GACQ7wG,YACR7C,MACAy+H,IAOA,aACAjuI,uBACAG,eACAA,yBACAA,yBACAA,iBACAA,yBACAA,mBACAA,uBAAiC4vB,KACjC5vB,oDACAyG,6CACAzG,sDACAyX,MAAkB,QAAMu/T,sBACxBvwU,+DACAzG,qDACAyG,eACAzG,wEAGA0I,eACAo3C,oBACA9/C,iDAEA8/C,SACA9/C,wBAGAgJ,cACAhJ,iCAEAujV,mBACAvjV,2EAEAwjV,wBACAxjV,kCAEAixU,YACA,oCACAjxU,kDAGA8uI,yBAAuF,kBAA+C58H,8BAAyBA,cAAoBA,8BAAwB4hC,IAAqB5hC,8BAAwBiiC,IAAoBjiC,8BAAyBA,eACrS48H,aAAkD58H,8BAAwB,CAAGm7C,+DAAiGk5M,+FAAsGikE,UAAat4T,oCACjS2jD,GAAU,EACN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CAA,wBAKA6rV,mBACA,QAAkC7F,GAAShmV,8BAC3CA,iCACAA,YACAA,6BACAA,sBACAA,kCAEAA,gBACAA,0BAEAA,qBACAA,eAMA6qU,cACA7qU,mBACY,QAAYA,eACxBA,oBACAA,sBAOAulV,aACA,yDAEA,MACArO,GAFAl3U,iDAGA,OACA+2U,6BACAG,8BAGAA,wBAEA,mCACAF,0DACAG,QACAn3U,yCAEAA,kBACA,iCAC0B,QAAYA,eAAiB,QAAYA,kCAEnEA,oBACAi3U,IACAj3U,kCAEAA,mBACAA,yBACAA,uBAIAA,qBAMA48G,cACA58G,aACA08U,YAEA0L,UACApoV,qBACAA,gCAEAsnU,oBACa,YAGbtnU,qDACAyG,cACA,uBACAzG,aACAA,YAEA+2U,GACA/2U,qBAGAA,mGACAA,gGACAA,6BAAsC,OAAKA,4FAC3CA,wFACAA,2FACAA,yFAEA8rV,yBACa,YAAmB9rV,mBAGhCA,iCAEAA,6EACA,iBACAA,uDACAA,mCAIAunU,sBACa,YAGbvnU,sCACAA,0CACAA,qCACAA,qCACAA,mCACAA,2CACAA,qCACAA,+BACAA,iCAGA+rV,oBACA,6CAEA,GADA/rV,4CACagmV,GAASjP,GACtB,OAEA,sDACA/2U,gBAEAgsV,mBACA,sCAEAza,QADAvxU,mDAEAA,mEAGAiqU,cACAjqU,eACAA,qBAEA,8CACA+2U,GAAiCpN,gCACjCuN,IAAgCvN,6BAChC3pU,sCACAkqU,oBACAzC,mCACAsC,uBACAjyI,2BACAqyI,qCACAuF,wBACA9F,cACAF,gBAEA,qCACgB7gQ,eAAW7oE,WAC3Bm3U,4DACAA,qBACAA,kBACAA,4BACAA,sCACAn3U,uCACAA,yBACAA,6DACAA,qBAEAA,wCACAA,qBAEAA,2EAEAoqU,eACApqU,gBACAA,2BACAisV,4DACAjsV,sBACAA,oBAGAgqU,WACAhqU,aACAA,oBACAA,YACAA,mBAGAmrV,sBACA,YAA8Be,GAC9B,SACAlsV,kBAGAA,mBAEA+2U,uBAEAyS,uBACA,2BACA,oDACA1pS,yCAGAA,EAGAqsS,sBACA,gCACApV,IACA,mCACA,aAAqCG,mCACr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E,EAAU,uBACdkvV,iCACA3qV,EAAU,EACN,aACAvE,EAAU,wBACdkvV,+BACA3qV,EAAU,EACN,aACAvE,EAAU,sBACVA,EAAU,+BACdkvV,0BACA3qV,EAAU,EACN,aACAvE,EAAU,sBACVA,EAAU,+BACdkvV,2BACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,iCACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,kCACA3qV,EAAU,EACN,aACAvE,EAAU,sBACVA,EAAU,+BACdkvV,mCACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,kCACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,mCACA3qV,EAAU,EACN,aACAvE,EAAU,wBACdkvV,gCACA3qV,EAAU,EACN,aACAvE,EAAU,wBACVA,EAAU,iCACdkvV,kCACA3qV,EAAU,EACN,aACAvE,EAAU,wBACdkvV,gCACA3qV,EAAU,EACN,aACAvE,EAAU,wBACdkvV,kCACA3qV,EAAU,EACN,aACAvE,EAAU,sBACVA,EAAU,+BACdkvV,6BACA3qV,EAAU,EACN,aACAvE,EAAU,wBACdkvV,kCACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,6BACA3qV,EAAU,EACN,aACAvE,EAAU,uBACVA,EAAU,gCACdkvV,oCACA3qV,EAAU,EACN,aACAvE,EAAU,uBACdkvV,gCACA3qV,EAAU,EACN,WAAK,YACLvE,EAAU,sBACVA,EAAU,+BACdkvV,8BACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,mCACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,oCACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,uCACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,4BACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,8BACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,6BACA3qV,EAAU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9B88U,8BACA3qV,EAAU,EACN,YAAM,SACNvE,E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AClC78T,aAA+B68T,yBAC/B,SAlYAxoV,qBACA,WAAyB,YAAgBioV,WAAkBA,IAAO53V,0BAElE,GADAA,mBACA,QAAyB,aAAkBo4V,YAAoBA,KAASp4V,kCAIxEqP,qCACA,kBACA8oV,WACA,GA7HA,EA6HAA,WACAA,oBACA,4BACA,GAhIA,EAgIAA,UAgBA78T,EAhJA,EA6IM68T,UAGN78T,yBAFAA,mCAbAA,qCAIA,4DACA,oCACAs8T,sBACAD,GACAC,qBACAD,6CACYr8T,cAOZA,GAAiBt7B,4CACjBA,wBAEAA,oBAOAqP,sCACA,iCACAlH,kDA+TA,eACA,8BAAoDuvV,EAAOA,iBAC3D,kDACAS,4BACA78T,iBACAo8T,KACM,QACNp8T,IACM68T,IACN78T,SAxUqE9rB,IACrE,gEACAmoV,kCACA,mCACA33V,mBACAA,gCACI43V,0BACJA,iBAAoC53V,kCACpC43V,qBAA2CF,UAC3C,sCACA,wBACAU,MACAX,UAAuBz3V,6BACjB03V,aAEN,YADA13V,qBAGAA,eACAo4V,IAAgBp4V,cAChBA,wBAEAA,oDAKAqP,sCACA,8DACMrP,wDAINqP,wCAEA,kEACMrP,8CAMNqP,oCACA,cACAhP,cAAyB83V,WAAmBA,KAC5C,iBAA2B,CAC3B,iDACA,MAAmB,WACnB,YAAyB,YAEzB,GADA78T,gEACA,gBACa,MADyBq8T,GACzB,CAGb,UAOAtoV,8CACA,IAEAuoV,QAFAD,OAGAr8T,QACA88T,qCACAqB,OAEMz5V,qCACNA,qBAFA43V,+CAMAW,GADAv4V,iCACA0oF,gBACA1oF,yBAEA,gBAEA,iBACAA,2BACIm4V,EACJn4V,6BACIs7B,aACJt7B,mBACAs7B,wDAAuE,8BACnE,CACJ,wBACA,oBAAyC29T,uBACzC,wBAAgDA,UAChDA,KAAuBA,MACvBj5V,yBACAA,kBAEA43V,IAAc53V,cAAoBA,aAClCu4V,IAAcv4V,+BAOdqP,sCAEA,QADAuoV,OACAQ,kCACAX,gCACAW,OAAmBA,sBACnBp4V,sBACAA,gBACAs7B,iDACQt7B,aAERA,uBAMAqP,mCAEA,QADAisB,IACAq8T,YAA8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mBpiS,SACnBkiS,iCAGAY,cAAgDA,cAAsBA,KAC1DV,GAAOpiS,QAAawhS,qBAChC,gDACAA,2CAEAY,aAA2BpiS,QAAa6hS,oBACxC,gCACA+B,oCAAyEvlU,GAAK+jU,YAC9EoC,MACAZ,2DACA,SAA0B,SAC1BwB,qCAA4DZ,WAE5DA,OAAwBZ,kEACxBz+T,uBAEA,SAEA,4DACA64G,4BACAgnN,cAAoC9tS,UACpC,QAASvY,GAAQq/F,qBACjB74G,GAAoBA,0CACpB,EAFkD,EMqFvCqlM,CAAaq3H,EAAbr3H,CAAa+2H,MACxB,6EACAC,GACAQ,iBAEA78T,OCzPAu5Q,WACA,CAAannS,iBAEN0xV,IACP,CAAMzF,kDACN,CAAMA,iDAECr5B,IACP,CAAMq5B,mDACN,CAAMA,kDAECp5B,IACP,CAAMo5B,oDACN,CAAMA,mDAEC0F,IACP,CAAM1F,qDACN,CAAMA,oDAECxzE,IACP,CAAMwzE,8CACN,CAAMA,6CCiEN,QAtFO2F,IACP,cACA,QACA,WACA,aACA,WACA,WACA,aACA,SACA,cACA,YACA,OACA,YACA,cACA,SACA,UACA,eACA,aACA,gBACA,eACA,iBACA,YACA,YACA,OACA,OACA,UACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,cACA,iBACA,YACA,YACA,cACA,cACA,UACA,UACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,SAGOC,IACP,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAGIC,GAAG,8DACPC,kFAA6ExtP,0BAG7E4gP,KAAgBA,MAAQA,oCAGxB,SAAgBA,OAASA,uBAGzB,UAAiBA,OAASA,KAC1ByM,kCACAC,+BAIA,wDC7FA,IAAIhgC,GAAG,8DAEP,eACA,wCACA,aAA2BjkS,OAE3B,QADA68T,SACAV,KAAkBA,cAAsBA,MACxC,aACA,8BAAuCW,cACvC,qBAAsCD,aACtC,+BAAgDR,aAChD,uBAAwCC,cACxC,k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D4T,IACA,gBACA,wBACAhwU,aAhEA,KACA,IAAoC68T,oCAApCT,UACA,SAAgBuB,YAAuBA,MACvCa,SACAG,IACAsR,qCACAC,wCAEA,mBACArQ,UAEA,GADAnB,eACAA,IACA7B,mBACA2B,sBACAA,wBAEAA,sBAEAA,oBAEA3B,mBAEA,SAGA,GADA4B,qDACAE,mCACA,SAEA,aACA3+T,QACAA,YAEAq8T,UACAA,KACAC,KACAS,yDACAD,mBACAG,uBACAuB,kCACApC,KACAp8T,cAEAm8T,WACAkD,cACAZ,aACAY,uBACAr/T,aACA68T,mBAEAA,SACAwC,kBACAlD,GACAE,OAGAD,OASA+T,KACA/T,aCvJOgU,OACP1T,gBACAA,wCAMO2T,OACP,sBACAD,OAGAE,aACAC,aAIOC,OACP,kDAEA3T,IADA4T,aACA/uT,MACA,cACA06S,gBACAE,wBACA,WACAD,MAAyBC,MAASQ,UAGlCT,WACAA,EACAK,UAGA0T,OAgCOM,WACP,QAOA,GANAtU,mBACAp8T,EAAiB+vU,GAAc/vU,IAE/Bo8T,cACAp8T,EA9EO,QACP08T,6DA6EAiU,iBAEAvU,cACA,sCACAS,cACA9nV,+CA/BA,SACA,mCACA,gCAAiDirB,KAAQA,KACzD,wBACAo8T,UACAA,aAEAA,QACAA,UAGA,8CApBA,KACA,qBACA,MACA,mBACAA,+BAEAA,mBAeAwU,MAmBAC,kBACA7wU,cAEA,UAUA,MACA8wU,0FACA,qDAAoF,KCzH7E,IAA6B32N,GAAS,aCAtC,aAA2BA,GAAS,gBAC3CxoD,IACAo/Q,WAAmBl2U,SACnBm2U,MAAcn2U,SACdo2U,OAAep2U,SACfq2U,OAAer2U,UACfs2U,MAAct2U,UACdu2U,WAAmBv2U,UACnBw2U,WAAmBx2U,WACnBy2U,WAAmBz2U,WAEnB02U,mBACAC,aACA9U,mBAEA+U,8BACAC,UACA,SACAntW,qBACAG,oBACAA,gBACAA,YACAA,oBAEA8oE,SACA,oBACA,SACA,IAAuBmkS,GAAW9U,oDAFlCn4V,IAIA,EAGA,MAwEMktW,GAAe,UAErB,UADA71T,OACAL,+BACA,MACA,SAEA,6BACA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j+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,qCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,iCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,iCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,4BACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,8BACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,kCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,uCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,sCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,iCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,gCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,iCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,sCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,oCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,mCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,uCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,kCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,2CACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,gCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,iCACAj+W,EAAU,EACN,aACAvE,EAAU,uBACdwiX,sCAMA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,0BACA,sCAKAkc,KAAmCyuU,oDACnC,4BACA,4BACA,YACA17O,UAEA34G,gBAKA6lB,QAAsCnc,yCAAgCinS,SACtE,6BACAD,aACA,OACA,mBACA,OACA9qB,SADA,OACAjtK,GAGAw3N,IAEArrT,qBAKArB,QAAsC/Z,yCAAgCinS,SACtE,6BACAD,aACA9qB,aACAuqD,oBACA,4BAKAzsT,0CAuBAE,eACA6sR,MACAnrB,GAEAmrB,MACAK,GAEAL,GAKA/rR,eACA+rR,6CAKA9rR,UAmBAG,eACA9kB,6BAKA+kB,gBACA,MAAY60B,kCAA0B62P,GACtCC,GAnBA,MACA,oCACAD,4BACA,OACAvnS,oEACAF,kEAcA6b,KAGAwsR,IAFAV,uCACAI,4CAEA,0BACA,0BACA,sBAtEA,WACA,MAAYujD,4BAAsBxjD,GAClCH,gBACA,WACA,UAEA,mBACAD,aACA,oBACAprB,GAEAorB,iBACAA,GAEA/3L,IAyDAh1F,SAKAqB,OACAsgQ,2FAKArgQ,OACAxB,gBAKA0B,OACAU,gBAKAX,OACAzB,mBAKA2B,OACAS,mBAKAiuE,QACA,GAAQ7wG,aAASqiS,gBACjB,4FAOA,SACA10S,yBACAG,cACAA,gBACAA,cACAA,iBACAA,cACAA,gBACAA,cACAA,mCAEAwjX,cACA,8CACA9jD,wCACAG,qBACA7/T,sCAAyD6/T,OACzD7/T,sCAEAyjX,mBACA,8CACA,qCAAmEzjX,wBACnEA,qBACAA,uBAGA0jX,gBACA,8CACAhkD,kBACAG,8BACAH,KACAG,qBAGAyjD,aACA,iCACAryU,eAEAjxC,2CAEA2jX,eACA,MAAgB96S,4BAAsB7oE,WACtCggU,gBACAJ,qBACAh4L,gBACA+3L,MACA,SACAy/B,KACA,aAAwB9+B,MAAWA,MAEnC8+B,IADA,kBACAv/B,QAGAA,MAGAu/B,sBACA,2BACAz/B,YACA9qB,OAEA,gBACA8qB,oBAEAA,GAEAikD,kBACA,iDAEA5jD,QADAsjD,aACA5jD,GACA,WACA,2CACAK,uBAAiDH,QAGjDikD,kBACA,MAAgBC,aAAW9jX,WAC3B6/T,wBACA,yCAEAkkD,gBACA,MA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AU,EACN,cACAvE,EAAU,cAAgBoS,iBAC9BktU,mCACA/6U,EAAU,EACN,iBAAW,YACXvE,EAAU,uBACds/U,iCACA/6U,EAAU,EACN,iBAAW,6BACXvE,EAAU,uBACVA,EAAU,yBACds/U,qCACA/6U,EAAU,EACN,iBAAW,2BACXvE,EAAU,uBACVA,EAAU,yBACds/U,mCACA/6U,EAAU,EACN,iBAAW,kBACXvE,EAAU,wBACds/U,mCACA/6U,EAAU,EACN,iBAAW,kBACXvE,EAAU,wBACds/U,mCACA/6U,EAAU,EACN,iBAAW,0BACXvE,EAAU,uBACVA,EAAU,yBACds/U,mCACA/6U,EAAU,EACN,eAAS,QAAW+gF,YACpBtlF,EAAU,cAAgBoS,eAC9BktU,+BACA/6U,EAAU,EACN,eAAS,SAAY+gF,YACrBtlF,EAAU,cAAgBoS,eAC9BktU,6BACA/6U,EAAU,EACN,eAAS,mBAAsB+gF,YAC/BtlF,EAAU,cAAgBoS,eAC9BktU,uCACA/6U,EAAU,EACN,eAAS,SAAYimU,KAAMp4T,aAAUkzE,YACrCtlF,EAAU,cAAgBoS,eAC9BktU,sCACA/6U,EAAU,EACN,eAAS,SAAY+gF,YACrBtlF,EAAU,uBACds/U,6BACA/6U,EAAU,EACN,kBAAY66U,IAA2B95P,YACvCtlF,EAAU,mBACds/U,qCAGA,qBAIA,2BACAv/U,+BACA8jC,yBACA3jC,qBACAA,iBACAA,iBACAA,eACAA,uBACAA,oBAIAA,uBAAgC,YAKhCA,gBAKAA,oBAKAA,oBACAA,qCAIAA,sBACA,mBACA,kDACA,yDACAA,qBAEAstS,6BAKAttS,oBACA,0BACoB24B,eAAWk8Q,GAC/B0rB,+BACA,wBACA,OAEA,gBACAvgU,+BACA2/T,qBAEA3/T,qBACAA,sBACAA,wBACAA,kDAEAA,wBACAA,kDAEAA,qBACAA,mCACAA,oBACgBswB,MAAYtwB,iCAC5BA,qBACAA,iBACAA,mCACAA,sBASAk3D,iBACAl3D,iBAEAk3D,eACA,qBAKA28G,mBACA,+CAiBAlmK,QACA3N,gBACAA,qCACAstS,4BACAttS,sCAMAyzK,OACAzzK,qCACAstS,2BACAttS,kBACAA,qCAEA0I,iBACY,QAAU,mDACtB1I,0CAAqD,QAAI,mBACzDA,yBAIA6I,oBACa,YAGb7I,mBACAA,wFACAA,yFAEAA,uBACAA,YACAA,wBACAwtF,QACA/mF,sCAEAzG,mCAEAgJ,cACAhJ,oBACAA,iCAMAskX,uBACA,sEAKAC,uBACA,sEAKAC,wBACA,wEAKAC,oBACA1kD,kBACAA,kCAEA//T,iFAKA0kX,iBACA1kX,iBACAA,kEAKA2kX,kBACA3kX,iBACAA,8EAMAkvG,eACAlvG,mCACAA,cACAA,iCAKAqvG,qBACArvG,iBAKAuvG,sBACAvvG,kBAKAuwM,gBACA/mK,mBACAxpC,qBACAA,cACAA,kBACAA,0BACAA,iCACAA,qCAOA4kX,kBACA,KAAa,UACb,OAEA,oCACA/kD,4BACAG,sCACAJ,iCACAh4L,qDACAm4L,IACA//T,iFAEAA,+DACA,yBACA60S,kCACAA,iBACA70S,YACA60S,oGAEAA,sBACAA,yBACAkrB,KACA//T,uDACAA,+EAEAA,qBACA60S,mBAGAzjM,gBACApxG,wCACAA,mBAGAg2B,iBACA,+DACA,4CACA6pS,iCACAE,IACA//T,8BACAA,gCAGAA,iCACAA,kCAEAA,mBAGA6kX,8BACA7kX,mCACA,UAA8B,QAAS+/T,gBACvCC,IAA4B,QAASD,cACrCH,IAA6B,QAASG,eACtCn4L,YAAgD,QAAM+3L,sCAA6C,QAAS,KAAO,QAAQ,WAAW,SAAS,IAAM,SAAU,OAAKK,0BACpKhgU,gBACAstS,4BAEAoyB,OAEA1/T,6BAGA8kX,WACA,OACA5sQ,yBACAhsG,uBACA64W,mCACAC,yBACArsV,aACAkwC,aACA0xS,uBACAl2O,qBACAw/L,iCACA0/C,yBACAt3W,uCACA63W,wBAGA73C,6BACA,wCACA,UACApM,MACA7/T,mCAEAA,8DACAA,gBACAA,qBACAA,mCACAA,oBAEAA,qBAIAA,gEACAA,iBAGA0/T,IACAM,kDACAhgU,kBAEA0/T,OAGAG,IACA7/T,sBAIAA,iEACA6/T,SAEA7/T,iEACA6/T,SAEA7/T,8DAEA0/T,GADAM,aAAqC1vS,QA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ACAA,cACAA,kBACAA,0BACAA,qCAIA0mX,wBACA,2BACA,2BACA,0CACoBpvU,mCAA+BooR,IAC/Br8S,iBAAarjB,uBACjC0/T,sEACA1/T,yBAEA,UAEA64C,YACA,2BACA74C,kBA9lBA,MACA,MAAY2mX,mCAA6BpyE,GACzC,IAKA3sK,GALAo4L,gBAMA,MAzBA,MAoBAA,KACAA,YAKAp4L,GADA,OACA,OAGA,cAAsCo4L,gBAAuBA,YAE7D,eARAD,+BAQwCn4L,QAglBxC65D,EACAklL,6BACAd,uBACAh9S,aACA+9S,mCAGA5mX,2BAEA6mX,YACA97U,+BACA/qC,wCACAA,aAnnBA,GAmnBA,EACS0/T,IACT1/T,iBAEAsrO,YACA,sCACAo0F,uBACAA,6BACA1/T,uBACAA,qBAEAusU,oBACAvsU,cACAstS,gDAGAw5E,eACA,UACA,4BACAjlL,4BACA69H,aAEA79H,4BACA69H,cAGAA,GAEAqnD,oBACA,IAAczvU,4CAAoDt3C,gCAClE4/T,MACAh4L,MACA,wBACA,mDACoB/+D,eAAW7oE,KAC/BsgU,UACAC,UACA,UACA++B,MACA,0CACA,OACA/nT,gBACAD,kBACArrC,YAmBA,GAhBAq0T,UACAP,KACA55C,MAGAk5E,MAGA9+B,YACAR,KACAs/B,MAGAl5E,OAGAk5E,IACA,iCACAE,sBACAD,MACA13N,YAGAu+I,IACAnmR,kCACAs/V,8BACAt/B,mBAGAJ,uBACAh4L,0CACA5nI,6DAEA,OACAu3C,qCACAD,kBACArrC,UAGA+6W,mBACA,uCACAhnD,aACAJ,eACA,OACA,0BACAh4L,MAEA5nI,qBACA4nI,OAEAA,GAEAq/O,cACA,4EAEAC,uBACA,oCACA,oDACAxnD,SAEAA,GAEAynD,wBACA,UACA,yBACA,uBACAvnD,cACA,mBACAC,iBAEA,CACA,kBAhvBA,KAivBA,aACAF,mBACAA,mBACAE,iBAA2Cj4L,SAAmB+3L,QAI9D,UAEAynD,qBACA,kBACA,qBACA,YACA1nD,uCAEAA,WAhwBA,IAgwBA1/T,uBAEAqnX,mBACA,OACA,OAIAxnD,GAJA,WAttBA,UACA,OAqtB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CAGA1pW,OACA,OACA2pW,oCACA7kR,4CAGA8kR,OACA,OACAD,kCACA7kR,0CAGA+kR,YACAnoX,mBAEAooX,cACApoX,qBAEAqoX,MACAroX,mBACAA,sBAIA,gCAKA,SACAH,gBACAG,cAEA0xT,cACA,wBACA1xT,eAGAA,kCAIAgP,QACA,0CAGA84W,UACA,iEAEAQ,cACA,uCAMA,MA6EA95O,wBACA,IAAUy5O,SAAOvoD,UACjB,gBACA,MA/GA,OA+GAG,IACAA,kBACA,2BAKA,OAHAG,GAGAD,YAFAA,eAEAL,GAFA,GAOAz7M,KAAmBooM,kCAA2B,YAC9C,IAAU47D,SAAOvoD,UACjB,OACA,OADAG,QACAE,GAEAF,GAFAH,GAEA,GAKAxwL,mBACA,IAAU+4O,SAAOloD,UACjB,OACA,OADAxrB,GACAmrB,GAEA,GAFAK,GAEA,GAcAtpN,0BAJA,oDAIAJ,QARA,+BAQAD,MAIAM,mBACA,qBACA,gBACAgpN,yBAEA,YAMA,aAIA7/T,cACAG,cACAA,gBACAA,aACAA,2BACAA,wBACAA,mBACAA,qBACAA,kBACAA,yBAEA0kG,QAAav0B,6DAAoEo4S,wBACjFvoX,aACAA,eACAA,0BACAA,cACAA,wBACAA,gBAEAwoX,uBACA,UACA,iCACA92D,QACAq2D,UACAroD,iBAEAA,GAEAnoO,gBACA,UACA,8BAGAkf,mBACAi7M,QACAq2D,UACAroD,iBAEAA,GAKA+oD,eACA,UACA,+BAGAhyQ,oBACAi7M,QACAq2D,UACAroD,iBAEAA,GAEAgpD,oBACA,2BACA1oX,2BAEAA,4BAEA2oX,yBACA,UACA/gP,MACA,kCACAitK,0BACA,wCACA6c,QACAq2D,UACAnoD,MACApiR,WACAA,WACAlW,WAEA,CACA0/R,aACA/6T,UAGA28W,sBACA,UACAhpD,MACA,gCACAD,qCACA9qB,yCACA,uCACA6c,WACAq2D,UACAnoD,8BACAI,4BAEA,CACAgH,aACA/6T,UAGA48W,sBACA,gBAEA,OADA7oX,mCACA6/T,iBAGAH,GAFAA,IAEA,CAEAopD,uBACA,UACAlpD,MACA,wBACA,6BACAlO,WACAo2D,W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NA,CAQCj9B,qBA+ED,YAAuB+8B,OACvB,mDAoBA,mBACA,UAEA,IADAA,kBACAE,KAAiB9Q,GAAc8Q,QAC/BA,6BAEAA,KACAA,aAEAA,mCAGA,mBAEA3T,GADAyT,mBACA,cAGA,sBACA,aAAoBiB,cAAa,CACjC,gBACAsE,sBACA3H,UACAqC,WAEAA,YACAgB,KAKA,eACA,8BACAhB,IACAlQ,uBAEA,kCACAmQ,IACAnQ,uBAIA,mBACA,QAAgB,SAAgBiQ,OAChC,YACAE,cACAD,GACAC,kBACU,WACVA,UAGAA,GAGA,mBACA,SACAe,MAgBA,eACAA,cACAhB,KACAgB,OAlBAjB,wBAEA,QADAkG,8BACAO,KAAwBA,eAAmBA,IAC3C,cACAC,cACAxG,KACAwG,4BAKAxG,IACAoF,IAMA,CAKA,kBACA,UACA,gBACA1T,SACAA,UACAsO,aAIAF,2BACA,2BACAiB,WAEA3mB,GACAyrG,GACA7yF,4BAEAzxB,qBACA,gBACAw/B,aAIAwF,aACAjL,8BAIA,iBACA,gBACA8J,OAKAzV,UAGA,QACA0V,KAEArF,wBACA,+BACA,qBACAuG,4BAEAA,UACAA,YACAlB,MAEAkB,aACAA,sBACA7U,YACA2T,SAMA,gBACA,UACA,GACA,aACAtF,iCACAD,2BACMA,MACN,UAGA,sBACAzT,sBACAyT,2BACAilS,WACAzxR,UAEA,gCACA,mBACA,sCACAvS,sCACA,aACA1U,UACA,kBACA,sCACA,aACAA,2CAwCA,gBACA,gBAA0B,iBAC1B,4BACA,0BACA,uBACA0T,gBACA,UAvCAhN,OACA1G,qBACA04S,WACAy4B,WAKA,cACAnxU,6BAGA,gBACA,sBACA,2BACAA,YACAA,YAAgC3jB,cAAkB2jB,gBAElDA,gBAyBA,mBACA,4CAGA,sBACA,+BAYA,OAXA,qBACAogC,UACA1rB,sCACU0rB,WACV1rB,mCACU0rB,SACV1rB,iCACUlW,KACVkW,oCAGAunJ,wCACAtoJ,GAEAe,GAIA,yBACAjB,yBACA2sB,UACA3sB,oCACM2sB,WACN3sB,iCACM2sB,SACN3sB,+BACMjV,KACNiV,gCAIAA,GAHAC,sDACA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O,4BACAq6R,wBACA,oCACA,+BACA,OACAv2S,gBACAF,cACAG,kBACAF,oBACA1jB,iBACAD,mBAMA,UA1FAu/B,KAEAH,KAAgBA,eAAkBA,GAClCS,kCAMA,sEACAre,yCACA,gCACAoe,0BACAnP,6CACA,aAA8B5U,KAC9B2yF,aACAj7F,YACAmQ,WACAG,eACAF,iBACAC,cAEAsR,gBAKA,0EAmVA,cACA,gCACA,cACA,OAEA,oCAEA,gBACAgmF,iBACAjmF,6BACA,0CACA6iP,6BACAA,gCACA,eACAA,qBACAA,uBACAA,4BAEAA,oBAEAD,OACA5iP,kCACA35B,UACA25B,qBAIA,gBACA,8BACAo5O,wCACA,YACA,0BAEA,aAA4B5/J,eAAcA,GAC1C,eACA,wBAKA,eACA,aACA,WACA,SACAD,gBAEAqpK,wBACAA,2BACAA,8BACAA,mCACAA,cACAwoG,cACA/nD,gBACAE,iBACiB54R,MAEjB,UAEA,cACA,uBACA4uE,gBACAF,kBACAwpK,GACA,oCACAA,WAEAD,wBAGA,UAEA,kBACA,cACArpK,gBACAF,gBACAwpK,IAA0B,QAAaA,MACvC,oBACAA,qBAEAD,wBAGA,UAEA,kBACA,kBACA,kBACA,cACArpK,gBACAF,gBACAwpK,UACA,qBACAA,qBAEAD,wBAGA,CAnbAl4O,SAqyBA,gBACA,sDAxxBAxlC,MAEU,iDAEA,mDAEA,oDAdV,cACA,2BACAq0G,OAA0B3yF,KAC1B5e,UACAi4B,cACAA,MACApN,OASA8X,GA6sBA,mBACA,OAEA,yBACAzK,mCACMzP,+EACN,4DACAwQ,4CAEAf,GADAe,mBACAA,qBAEAA,mBAKA,OACA,SAGA,WAAmBra,KACnB0e,qBAEA,kCACA,oBAAmBx8B,OAAa8vT,2BAEhC34R,eAEA,EAruBAthC,SACAqH,UAGA+kB,qBACAiV,0BAGAC,GA8CA,qCACA,aAIA,cAA6BrZ,KAC7BhiB,UACAq7B,cAEA1kB,OACAA,OAGAuoR,OAAmBnrR,KAAI,CACvB0lR,MAAoBtkM,UACpBsxR,cAEAhjE,cACAvkB,sCACAqnF,wCACAA,gCACAA,6BACA5tX,QAEAslR,MACAmiB,4BAGA5rB,MACA4rB,6BA3BA,CAgCA,sBACA,4BAIAywC,IACA9oT,UACAmF,WAGA6uM,OAA2BhoN,KAAI,CAC/B0lR,MAAwBtkM,UACxBsxR,cACaH,YAEbtmX,UAEAmS,cACA+zW,eACAC,iBACAC,aACAC,eAGAx1C,gBACA90G,oDACA5pN,cACA+zW,mBACAC,aACAC,aACAC,aACAK,oBAGA71C,OACA90G,mBACAwqJ,aAGAxqJ,mBACAwqJ,eAGA9iE,uBAkCA,kCACA,kBAIA,mBACA,kBACA7uM,6BACAsqL,4CACAukB,cAAqCvhS,IAAKyyF,sBAGhC,kBAGV,OAFAuqL,4BA2XA,gBACA,uBACA,iCAEA,oBACA,SAGA,uCACA,kBACA,MACAv+P,KACA,UACA,OACAA,cACA,UACA,SACAA,WACA,UACA,QACAA,aACA,UACA,0BACAA,sBACA,UACA,4BACAA,qBACA,UACA,gCACAA,6BACA,UACA,kCACAA,6BAIAvF,aACAuF,cAIAA,eACA,IACAA,eAUA,2DAkCAkB,iCACAC,gCACAK,6BACAC,WACAO,WAIAhC,gCACAyB,OACAO,QAIA,eACAI,gCACA,kBACAyB,GACAA,sBACkBF,UAClBE,4BACkB,OAClBA,KACkBD,wBAClBC,MAEA,QACA2wD,2BACA8pO,WAEA,iBACAn8R,MAEAD,2BACA0C,QACA05R,mDAEAp8R,OAEAA,SAAoC9Y,kBAEpC0a,KAGAgC,iBACAC,iBAGArL,UACgBtnB,cAAaunB,IAC7BmrV,aACAhtF,SAA8BhyO,KAAc,CAC5CxyC,SACA8yB,OACAg+U,SACAY,iBAGA,UACA,SAEA96V,oCACAA,8EAEA,EAlhBA/xB,KAEA,CAGA,4BACA,gBAGAiiO,MAQA,GAPA,mBACAA,8BACAA,0BACc,oBACdA,gCAGA,kCACA,iBACA80G,wBACA90G,cACAm0G,OACA15E,eAEA,YACAq6E,wBACA90G,cACAm0G,OACA15E,WAEA,CACA,wBAGA05E,GADA,iBACAn0G,+BAEA14L,kBAIAmzN,GADA,4BACA05E,MACsB,iBACtBn0G,gCAEA14L,kBAKA,kBAUA,eACA,uBAAgD,UAChD,iBAA6C,UAC7C,kBAA6C,UAC7C,sBAAgD,UAChD,sBAIA,IADAqqT,oBACAp1V,SACAo1V,aAGA,iBACAA,0CAEAA,wBAEA,iBACAA,2CAEAA,wBAGA,WAA2B1pV,IAAQ,sCAMnC,cACA,0BACA4iX,gBAIA,cACA,yBACAA,gBAIA,cACA,2BACA91C,kBACA81C,gBAIA,mBACA91C,kBAEA,eACA+1C,KACA74B,aAEA,eAEA,IADAptH,KACAgmJ,uBACA91C,kBACA81C,wBAGA,cACAC,KACAjmJ,KAEA,QADAswG,qBACA01C,uBACAA,iBACA54B,KACA44B,kBA4GA,sBACA,iCAzRA,gBACA,WAA6B5kW,KAI7B,GAHA5e,0BACAi4B,cAEAsH,IACA,WAA2B5uB,KAAI,CAC/B0lR,MAAwBtkM,sBACxBsxR,cAEA9xQ,0BACA4xQ,wBACAA,2BACAA,0BACA5tX,QACAstC,cAGA,uBAA6CwuE,OAC7C5uE,GACAI,MACApD,OACAC,iBACAC,iBACA0D,iBACAC,kBAoQAd,KAEA,kDACAo4O,8CAeA,2DAMA,+DAGA3hP,4DAEAo4E,QAEA1uE,qBAGA,4BAMA,OALAk4O,mBACA9oL,eACAhvF,qBAEAk1B,aACA,CAOA,2CAGAgB,+CA6CA,OA3CAA,YACAhB,UACA,IAA4BtnB,KAAI,CAChC0yW,QAAsCtgX,iCAEtCmgX,kCACAC,oCAKA5lV,YACAtF,UACA,IAA4BtnB,KAAI,CAChC0yW,QAAsCtgX,iCAEtCmgX,qCACAC,uCAKA9xQ,IACAp5E,UACA,IAA4BtnB,KAAI,CAChC0yW,QAAsCtgX,iCAEtCmgX,kCACAC,2CAKAvoG,IACA3iP,UACA,IAA4BtnB,KAAI,CAChC0yW,QAAsCtgX,iCAEtCmgX,mCACAC,wCASA,0BACA3xQ,SACAsqL,SACAukB,SACArjB,SAGAz6P,YACAI,oCACA6uE,MACA,0BAGAjvE,YACAI,oCACA09Q,MACA,gCAQA99Q,YACAI,qCACAmqS,cACA,8BAGAvqS,YACAI,qCACAmqS,cACA,2BAlHA,CAtBA,CA0HA,gBACA,OAAqBnoT,eAarB,EA+LA,sBACA,cACA2Y,OAAmB18B,IAAQ,uCAC3B28B,OAAoBze,IAAKmZ,OACzBj4B,2BACAk4B,cAGA,mBACA,cACAe,UACAqE,gCACAC,gCACAW,qBACAO,qBACA,4BACA,uDACA,EAEA,cACA,EAEA,aACA,EAEA,EAEA7I,UACA,mBAEAA,UACA,mBAEAqK,8BAoEA,mBACA,gCACA,wDACA,OAzDA,mBACA,IACAhH,MADA/N,OACA,SACAoS,8BACA,qBACArF,UACYtnB,cACZ,IAAoB/P,IAAQ,qBAC5B,2BACAyiX,cAEArrV,YAUAC,WACA,IAAoBtnB,MACpB0yW,eACAH,4BACA5lV,sBACA6lV,4BACA7lV,sBACA6lV,4BACA7lV,wBAIArF,UACA,IAAgB7lB,KAChB,IAAoBrR,IAAU,EAC9Bu8B,qBACAA,qBACA7f,qCACA4lW,cAEArrV,YACAC,UACA,IAAoB7lB,KACpB,IAAwBrR,IAAU,EAClCu8B,qBACAA,qBACA7f,qCACA44Q,wBASAz4R,QAEA,IAGAsgC,GAHAjF,iBACAqE,oBACAC,wBASA,GAPAA,4BACA,cACAA,4BAEA,gCACAA,0BAEA,aACA,eACA,aAA4BkB,uBAA4BA,IACxDP,yBACAsN,qCACAtN,yBACAA,0CACAX,wBAGAW,GAvFA,eACA,uDACAlG,sBAEAA,6BAmFAr6B,KACAugC,KACAX,oCAIAA,wBAEAtE,uBACAsE,4BACAA,0BAIAvF,wBAEAh6B,UACAg6B,oBACAiB,mBAmBA,mBAMA,OALA1U,mCAGAA,8BAEAyT,8BACA,MACAj7B,iBACA,UAEA,MACA,OA5BA,gBACA,kCACA,gCAEA,wEAEA,cADA0rB,sDACAi7V,gBACAnmV,UACAD,kCACAA,oCACApF,4BAGA,UAeAp6B,KAEAf,MADA,8BAAmD,QAAY4hC,MAC/D1G,IACA,UAEA,SACA,IACAl7B,mCACU,CADV,MACUiiC,KAGV,UAEA,eACA,YACA,SACAnhC,UACA,cAIA,QADAq6B,kBACAqF,iBAAyCA,GAAGA,kBAC5C,yBACA,EACA,oBACAr/B,aAEA,WACA,EACA,cACAugC,kBAEA,UADAs/E,kBAEAzgF,YAEA,WACArE,YAEAf,aA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A,MACA,aACAtB,YACAA,YACAA,mBAIAA,oBACAA,oBACAA,oBAGAA,kCACAA,kCACAA,kCAGAk/X,QACA,sBACAh/X,sBACAc,sBACAC,sBAEA,yBAGAk+X,gBACA,iBAEA,0BACAj/X,iBAGAA,qBACAA,kBACAA,sBAEAA,EAGAk/X,iBACA,qBACA,EAGAr/X,YAGAs/X,YACA,4BAGAC,cACA,mBAEA,8CACAt/X,uCACAA,uCAEAA,KAGAu/X,iBACA,2EAGAC,SACA,6BAnFA,GAmFA,kBAGAz/X,SACA,WAAmBuE,KAAKvE,kCAGxBA,SACA,WAAmBuE,KAAGvE,kCAGtBA,SACA,WAAmBuE,KAAGvE,kCAGtBA,SACA,WAAmBuE,KAAGvE,oBAItBsE,YACAsB,kDACAijU,oBACA,OACAnlT,yDAGC,CACD9d,6BACAijU,oBACA,OACAnlT,yDAGC,CACD9d,6BACAijU,oBACA,OACAnlT,uBACAA,uBACAA,2BAKApf,cAAoBiH,IAEpB,QAAejH,oDClFf,QApDA,CACAo7X,uDACAC,kDACAC,uDACAC,iDACAC,0DACAC,0DACAC,iDACAC,2DACAC,uDACAC,gEACAC,yDACAC,iEACAC,qEACAC,2DACAC,sDACAC,6DACAC,wDACAC,+CACAC,kDACAC,sDACAC,8CACAC,4DACAC,6DACAC,oEACAC,0DACAC,kEACAC,wEACAC,sDACAC,gDACAC,oEACAC,uEACAC,6EACAC,4DACAC,qDACAC,mDACAC,mDACAC,iEACAC,8DACAC,0CACAC,iDACAC,2DACAC,sDACAC,kDACAC,uDACAC,sDACAC,8CACAC,oDACAC,8CACAC,sLC7CA,QAAgBn3X,YAEhB,UACA,oBAAmChH,KACnC9C,sBAEA,oDACA,sBAEAC,WAGA,gBAAwBpB,IACxBR,cAAoB8jC,QACpB++V,QAAc,YAEdC,QAAc,YAEdzD,SAAqB,+BAErB0D,UAAgB,YAEhBC,SAAqB,wBAErBC,YACA,uBACA,cAAwBthY,QAAYA,QAAYA,QAAYiwC,yCAG5DsxV,YACA,2BACA/iY,aAEAA,iBAGAgjY,UACA,8DAGAx2H,QACA,YACA,WAGA,uBACA9qQ,cAEA,0CACAutB,0BACAA,2BAGAkjI,QACA,qBACA,kBACA3wJ,0BAGAA,GAIA,kBACA3B,qBACA8jC,QAEA3jC,SACAA,SACAA,SACAA,SAGA0iY,QACA,MAAgB3wE,aAAU/xT,KAC1B2B,kBACAC,kBACA4X,MACA7C,IACA,QAEA,aACA,qBAGA,OACAI,MAEA3B,EADA5T,OACAC,OACcA,MACd,UAEA,UAGA2T,MACAA,MACAA,UAGA2B,IACA3B,MAGA,qBAGA6tX,QACA,MAAgBlxE,aAAU/xT,KAC1B2B,kBACAC,kBACA,kBAEA,SACA4X,UACU,CACV,YAEA,OADA7C,yBACAhV,QACAH,sBAAuD,WACvDC,cAAyC,WACzCC,cACA,CAIA,sCAGAkhY,UACA,uDAIA,kBACA/iY,qBACA8jC,mDAGAg/V,QACA,sDAGAD,QACA,4BAGAO,QACA,4BAGA/D,SACA,0CAEA,oBACAz9X,gCAGAA,EAGAmhY,UACA,aAIA,sBACA,qBACA,iBACAlhY,MAGA,SAGA,kBACA7B,qBACA8jC,QAEA3jC,SACAA,SACAA,SACAA,SAGA2iY,QACA,IACAhhY,OADc+1V,aAAU13V,KAGxB,SACA2B,YACU,CACVH,MAEA,sBACA4T,MACA2B,UACA7E,YACAC,gBAEA,eACA,MAA2BvQ,IAAO4X,IAAO,WACzC,MAA2B5X,IAAO4X,IAAO,WACzC,MAA2B5X,IAAO4X,IAAO,WACzC,MAA2B5X,IAAO4X,IAAO,WACzC,MAA2B5X,IAAO4X,IAAO,cACzC7X,IAA4BC,IAAO4X,IAAO,CAI1C,2BAGAypX,QACA,4BAGAL,UACA,+BAIA,kBACA/iY,qBACA8jC,QAEA3jC,SACAA,SACAA,SACAA,SAGA2iY,QACA,IAGAhhY,MAHAH,aACAC,aACAC,aAGA,SACAC,YACU,CACV,6BACAyT,QACAzT,eACAC,WACA4X,eAGA,2BAGAkpX,QACA,4BAGAE,UACA,+BAIA,kBACA,QAUA,OARAlhY,MACAA,MAGAA,MACAA,MAGAA,MACAH,YAGAG,KACAF,EAGAE,MACAH,kBAGAA,EAGA,cACA,6DAKe,gBACf,QAEA,uBACA,YAGA,kBACA,SAGA,sBACA,UACA,OACAI,EADA,qBACA,eAEAL,EAA+BgD,IAAW7C,SAE1CE,eACAA,EAsCA,IApCAF,kDAAuDwwG,SACvDvwG,0BACA+hB,kBACAA,sBACMhiB,kDACNC,+BACA+hB,uBACAA,2BACMhiB,4DACNC,+BACA+hB,uBACAA,uBACApiB,eACMI,+DAAqEwwG,SAC3EvwG,0BACA+hB,kBACAA,kBACApiB,UACMI,kEACNC,0BACA+hB,kBACAA,sBACMhiB,mFACNC,0BACA+hB,kBACAA,qCACMhiB,gGACNC,6BACA+vC,qBACAA,yBACMhwC,mHACNC,6BACA+vC,qBACAA,wCAGA/vC,EACAA,mBACMF,EACN,0CAGA,4DC3UA,WAaA,QAXA,CACA0hY,cACA,sCAIA53X,EApCA,cACA,SACAizX,4BACAC,gCACAC,gCACAC,4CACAC,wCACAC,yCAGA,SAEA,eACA,wBACA,sBACA,MACA9+X,QACAA,qDACAA,mDAEA,OAKA,SAWAO,8BACAiL,qECnCA,gBAA2BjL,IAC3B8iY,YACA,2CACAnjY,gBAGAojY,eACA,uBAGApjY,wBAFAA,oBAIAA,KAGAqjY,kBACA,yBACAvjY,eACA,cACAkS,cAEAhS,KAGA67F,aACA,wBAEA,uBACA,YAA8B97F,WAAwBA,KACtD,WACAG,MACAA,QAIA,YAGAojY,oBACAj/X,eACArE,gCAGAujY,iBACAvjY,+BACAyuU,eAIA+0D,UACA,8CACAxjY,KAGAyjY,SACA,0DACAzjY,KAGA0jY,oBACA1jY,SACAA,6BAEAA,UACAgS,qBAIA,QAAe1G,yFCjEf,WAAmBwC,SAEnB,gBAA2BxC,IAC3BzL,oBACA8jC,QAEA3jC,cAEA,gBACA,WACAiB,kBACAjB,WAIAO,OACA,qBACA,WAEA,mBAEAS,IADAd,UACA,CAGA,SAGA8oI,SAGAhpI,KAFAO,SAEAL,IACAF,6BACAA,oBACAq0B,oBACApoB,WAKA03X,UACA,0BACA,WACAziY,IAEA,MACA,qBACA,kBAEA,kBACAA,YACAI,SAEA,WAEAC,IACAA,WAA6CD,GAC7CC,oBACAN,QAEAA,IAEAC,OAGAD,YACAA,OAGA2iY,U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BACA91B,6BAEA,aAAsB+O,aAAmBA,KACzC/O,yBAGA,UAeA1R,KAZA,eACA,mCAEA,aAAsB0R,aAAmBA,KACzCpD,cAGA,UAQArO,eCrTA,WAAuBqgB,OACvB,mDAGA,eACA,4CAAiD,eAAepR,gBAIhE,QACAnP,gBACAG,YACAA,8BACAA,+BACAA,gCACAA,kCACAA,+BAGA,QADAwR,kBACA+O,KAAwBA,qBAAqBA,IAC7C,QACAsvU,qBACA65C,uBACAr8D,qBACA3mU,sBAEA8K,eAIAm4X,iBACA,uBACA,OACA,uDAEA,yCAGA14D,WACA,8BAEA1wT,iDACAwE,SACAC,qCACAC,YAEAiC,GAAkB7d,IAClB6d,8BACAA,kBACAA,kBACAA,kBACAA,kBAEA,aACAE,kBACA3hB,QACAC,EAAwB2D,IAExB,iBACA,GAAgBrI,EAAcoN,QAC9B,cAaA,IAXA8Y,mBACAA,gCACAA,iBACAA,wBAEAxhB,YACA,aACAD,OAEA2hB,cAEAA,MACA1hB,eACA0hB,KAKAF,kBACA,IACA3Y,cADAvO,wBAGA,uBACAknB,iBACAA,SAGAwiX,aACAt7X,GAAe/E,EAAY+E,IAE3B,QADAoD,MACApD,UACAoD,kBAEA,sBAIA,QACA3R,mBACAG,mBACAA,sBACAA,sBACAA,aACAA,oBACAA,mBAGA8jW,MACA,mDAGAh1V,UAGA,kBACAA,UACAV,uBACApO,2BACAA,4BACAA,sCACAA,+BACAA,0BACAA,+BACAA,wBACAA,yBAEAA,0BACAA,0BACAA,0BACAA,0BAEAA,6BACAA,kCACAA,uCACAA,sCACAA,qCAGAixU,WACA,OAAkB5nU,IAClB,kCACAmI,4BACAA,gBACAA,+BACAA,0BACAA,+BACAA,uBACAA,wBACAA,0BACAA,0BACAA,0BACAA,0BACAA,6BACAA,kCACAA,uCACAA,mBACAA,qCACAA,UAIA,kBACA1C,UACAV,uBACA,uCAEApO,aADA,OACAoO,kCACA,0BAGAA,oCAIAw7X,aACA,wBAGAC,aACA,2CAGA54D,WAGA,QAFAz/T,GAAkBnI,IAClBkX,yBACAwE,KAAwBA,eAAoBA,GAC5CxE,GACA/O,qBAEAA,wBAGA,OACAorD,cACAmoK,iBAKA,kBACAj2N,UACAV,uBAEApO,2BACAA,4BACAA,6BACAA,6BACAA,oCACAA,wCACAA,yCACAA,gCACAA,oCACAA,mCACAA,iCAEAoO,WAEApO,sCACAA,wCAGAixU,WACA,OAAkB5nU,IAClB,kCACAmI,4BACAA,6BACAA,6BACAA,oCACAA,wCACAA,yCACAA,gCACAA,oCACAA,mCACAA,iCAEAA,4BAEAA,sCACAA,yBACAA,UAIA,kBACA1C,UACAV,uBACApO,2BACAA,8BACAA,8BACAA,gCACAA,uCACAA,yCACAA,6BACAA,sCACAA,+BACAA,oCACAA,uCACAA,qCACAA,0CACAA,yCACAA,sCAGAixU,WACA,OAAkB5nU,IAClB,kCACAmI,yBACAA,8BACAA,gCACAA,uCACAA,yCACAA,6BACAA,sCACAA,+BACAA,oCACAA,uCACAA,qCACAA,0CACAA,yCACAA,sCACAA,UAIA,kBACA1C,UACAV,uBACA,4BACApO,wDACA,OACA8pY,uBACAC,uBAGA,qDACA/pY,iDAGAgqY,aACA,oBACAzpX,aACA,aACA/O,OAEA,CACAs4X,yBACAC,kCAIA94D,WAEA,QADAz/T,GAAkBnI,IAClBkX,KAAwBA,eAAqBA,IAC7C,6BACA/O,0BACAA,uBAEA,iBAIA,iBACA,SACAy4X,eACA,SAGApqY,gBACAG,YAGAixU,SACA,uBAWA,SACAg5D,eACA,SAGApqY,gBACAG,YAGA,QAFAonB,oBACA3hB,uBACA,CACA,qBAIA,GAHAA,qBACA2hB,0BAjBA,GAmBA1hB,GACA,MAGA0L,QAzBA,EAyBA1L,OArBA,IAuBAA,EACA0L,WAzBA,GA0BkB1L,EAClB0L,WA7BA,EA8BkB1L,GAClB0L,YAKA6/T,WAEA,QADA7pT,GAAsB/d,EAAYrJ,gBAClCyF,KAA4BA,0BAA0BA,IACtD,wBACA2hB,8BACAA,qBAEA,iBAIA,uBACAtY,QACA9O,cAGAkqY,aACA,kBACA,GAAgBlpY,EAAcoQ,OAC9B,cAGA,sBACA3L,mBAEA,UACA,mBAGA,mBACAE,+BACAuC,GAAsBmB,EAAY3D,gB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,WAlNA,GAwNA,kBACAjW,UACAV,uBACApO,4BACAA,sCACAA,gCACAA,+BACAA,yBACAA,qCACAA,qCACAA,uCACAA,uCACAA,uCACAA,uCACAA,yCACAA,yCACAA,oCACAA,wCACAA,iCAEAA,qCACAA,uCAEAA,+BACAA,8BACAA,mCACAA,kCAEAA,iBACAA,4BACAA,6BACAA,6BACAA,8BACAA,+BACAA,2CAEAA,iBACAA,4BACAA,8BACAA,gCACAA,8BACAA,iCAKAixU,SACA,mBAIA,UAWA,QACApxU,gBACAG,aACAA,eACAA,iBACAA,gBAA2B,KAC3BA,gBAA2B,KAC3BA,kBACAA,2BACAA,eACAA,YAnBA,aAEA,QADAogB,mBACA5O,KAAoBA,eAAcA,GAClC4O,iDAEA,UACAA,GAaAlO,wBAGA86J,QACA,YACA,uBACA,ODnrBA,eAMA,QAFAjoJ,GACAC,GAJA5W,MACAoD,KACA+O,aAGA/O,QACAuT,yBACA,wBAGA,eADAC,yBAEA5W,0CAIAA,YACAoD,MAGApD,YAGA,UC4pBmB/J,CAAU+J,2BAC7B,2CACa,IAEb,uBACA,QACAmS,aACA/O,iBACAA,mBAIA,gCACA,QACAA,oBACA,yBACA,oBACAA,oBACAA,qBAIA,UAGAg5X,eACA,oBAGAC,WACA,yBAGAC,iBACAl5X,KACAA,OAEA,aAAwB+O,eAAqBA,IAC7C,cACA,YACA,0CACAyE,iBACAhlB,gCAIA,UAGAixU,SACA,uCAGA,iBACA,GAAgBjwU,EAAcoN,SAC9BoD,mBACA,2BACA,sBACAxR,sBACAA,sBAOA,IACAglB,GADA/jB,kBACA+N,iBACA,2BACShP,MAETilB,aACAiC,wCACA9V,8BAEApR,0BAEA,QACA2qY,6CACAC,cACAC,cACAC,wBACAC,wBACAC,wBACA5qY,wBACAsN,iCACA+sV,+BACA,wBAGA,sCAGAwwC,cAEA,QADA78X,GAAkB/E,IAAYmI,KAC9B+O,kBAAuCA,eAAiBA,IACxD,YACAnS,iBACAoD,KAEA,0BACA,OACA,0BACApD,uBAEAA,iBAEAoD,KAEA,iBAIA,QACA3R,mBACA,YACAklB,eAAmC1b,EAAY+E,IAC/C,6BACA,OACA,oBACA2W,cACAxE,YAEA,OACA,qDAEAwE,cAEA,QADAE,iBACAiC,KAA4BA,QAAcA,GAG1C,GAFAlC,iBACAD,qBACAxE,cACA,OAGA,uDAEAwE,aACAxE,WAIAzR,QACA,2CAEA9O,iCACAA,iCACAA,iCACAA,iCACAA,iCACAA,iCACAA,iCACAA,iCACAA,iCACAA,gCAEAA,qCACAA,8CACAA,iDACAA,iDACAA,oCAGAkrY,iBACA,iDAGAC,aACA,oBC9lCO,kBAAgBC,8BCUvB,SAAgB/qY,YAChBuvB,QAEA,SAEA,UACAs9U,qBACA8E,qBACAq5B,qBACAC,oBACAC,mBACAC,mBACAC,mBACAC,mBACAC,kBACAC,kBACAC,kBACAC,qBACAC,qBACAC,qBACAC,qBACAC,oBACAC,kBACAC,kBACAC,mBACAC,mBACAC,mBACAC,mBACAt6B,qBACAe,qBACAw5B,qBACAC,oBACAC,mBACAC,mBACAC,mBACAC,mBACAC,mBACAC,mBACAC,mBACAC,uBACAC,gBACAC,iBACAC,iBACAC,oBAGA,cACA,YAAkCjkY,IAClC,cACA,aAAwBkX,sBAAsBA,IAC9C,qBACA,eACA,kDAEA,oBACAwE,oBACAA,sBAEAyP,OACAI,kBAEAD,OACAE,kBAEA,qBACA,aACA,4CAGA,qBACA7P,qBACAA,4BAEA,WACAA,QAEA5W,uBAEA,iCACAA,2BAEA,0BACAA,mBAEA,sBACA2W,GAGAvT,eAFApD,yBAOA,iCACAA,cAEAoD,6BACA4O,GACAG,SACAH,IAEA5O,qBACAA,wBACAA,0BAEAA,qBACA,oBAEAA,uBACA,+BAEAA,kBACA,iBAEAA,qBACA,WAEAA,GAsBA,gBACA,0BACA,UACA4O,mBACA,2BAGA,6BACA,OACA,SAEA,wBAEA,OADA5O,yBAEA,sCAIAA,gBACAA,gBAEA4O,qBACA5O,IACAyd,sBACAA,wBAIA,oBACA,YACA,yCAEA1O,IAAuB4X,KADvB5X,YACuB0X,2BAEvB1X,IACA4X,mBACAF,iBACAG,qBACAF,wBAGA9X,kBACA5O,wBACAA,0BAGA,CAAak4H,wBAGb,QA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BACAzhT,SAEA,UAGA,mBACA,6BAGA,YAAuBA,OACvB,mDAGA,mCACA,4BAGA,gBACA,0BAGA,mBACAhS,QACAgS,aACAhS,yBACA,aAA4BoD,eAAcA,GAC1CA,cACApD,kBAEAA,iBAMAA,SAGA,mBACAA,SACAy/E,0BACAA,yBACAA,sBACAA,uBACAA,yBACAA,yBACA,MAGA,gBACA,oBAGA,gBACA,iBAGA,gBACA,aAIA,mBACA,uBACA,UAGA,OADA,yBAEAr8E,iDACA,CACA,yBACA,cACA,kBACA+O,GAEA,CACAgyU,MACA1D,MACA6/C,OACiBl9X,WAIjB,YACA,UAEA,yCAKA,SACAm9X,iBAGA,oBACA9uY,mBACA8jC,QACA3jC,cACAA,yBAGAixU,WACA,kBACA,gBACAz/T,GAAkBgB,MAAM,QAAahB,IACrCA,oCACApD,mBACU,CAKV,YACA,aAA4BmS,eAAgBA,IAC5C,8BACA,yBAEAwE,YAEAA,YAEAA,YACA3W,kBAIAN,WACA,mBAIA,oBACAjO,gBACA8jC,UACA3jC,cAGAixU,WACA7iU,QACA,aAAwBoD,uBAAuBA,GAC/CpD,iDAEAA,SAKA,+BACAA,IACA,cAGAvO,gBACA8jC,QACA3jC,aAGAixU,WACA7iU,sBAGAwgY,SACA,sDACA,gDAIA9gY,WACA,kBAIA,UAEA,gBACA,OAAQymB,GAAcgD,OACtBA,OAEAA,kBAKA,oBACA13B,gBACA8jC,QACA3jC,cAGAixU,WACA,wBACA7iU,SACAA,yBACA,iBACoBmmB,GAAc/iB,yBAClC+O,MACAnS,gCAIAmS,IACAnS,YAEAA,UAMA,oBACAvO,sBAEA,GADA8jC,QACA,qBACA,OAAsBt6B,IACtB0b,aACA3W,MAEApO,aACAA,kBACAA,iBAGAixU,WACA,qCACAjxU,gBACAugB,UAEcA,6BACdA,uBAFAA,aAIAA,qCACA/O,GAAmBc,GAAOd,KAE1B+O,oBACAnS,4BACAA,iBACAA,oBAMA,oBACAvO,cACA8jC,OACAiS,qBAIAi5V,aACA7uY,qBAMA,oBACAH,cACA8jC,OACAiS,iBACAk5V,QACAnxF,UAIAxkR,YACAn5B,yBACAA,oBAQA,6DAEA,SACAH,gBAMA,gBAEA,GAHAuO,aAGA,OADAA,eAGA,sCAEA,iBAEA,QADAA,cAEA,sCAEA,qBACAgZ,kBACA,sBAEApC,iBACAzE,kBACA/O,kBACAuT,iBACA,MAEA3W,cAGA,YACA,sCAGA,QACAwnC,mBACAm5V,oBACAr6R,SACA6E,UACAy1R,oBACAC,wBAGA,gBACA,EACAxpY,+BACA,WACA,EACAA,8BACA,WACA,EACAA,+BACAA,4BAIAzF,yBACAoO,aACA,oBACA,qCACA1I,IAOA,SACA7F,yBACAG,2BACA,kBACA41C,mBACAm5V,oBACAr6R,SACA6E,UACAy1R,mBACAE,8BACa,GACbhoX,cACA0uB,mBACAm5V,oBACAr6R,SACA6E,UACAy1R,mBACAE,2BACAC,sBACa,GACb,sCACAjoX,KAOA,mBACArnB,gBACA8jC,OACAiS,gBACAm5V,oBACAK,kBAGApvY,iCAGAwqY,eACA,2BAMA,oBACA3qY,sBACA8jC,WAEApjB,eACAq1B,gBACAr1B,uBACAA,6BAEAvgB,aACAA,cACAA,0BACAA,iCAEA,eAEAA,oBACA,2BACAA,WACA+kB,WACAA,WACAA,WACAA,YAGA/kB,qCACAA,yBACAA,2BACAA,2BACAA,6CACAA,+BACAA,aAEAA,4CACAA,sDACAA,mCAEAA,uCACAA,mBACAA,oBACA,2BACA,GAGAwqY,eACA,gDAGA6E,oBAEA,QADA9uX,gCACAyE,KAA4BA,eAAiBA,IAC7C,6BACAzE,mCAEA,iBAGAouX,eACA,YACAn9X,WAGA+O,eACAwE,UAA2C1b,EAAYkX,KACvD+uX,oBACa,GAEbtqX,0BACA4wB,0BACA25V,4BACAC,iBACAC,eACAC,eACAC,2BACAC,iBACAC,mBACAC,uBACAC,mBACAC,gCAGA/qX,gBACAiC,gBACA9V,eACAgW,OACA,mBACA,WACA,cACA,SACAjf,UAEAsG,IACA2Y,kBAEA3Y,mCACAtG,cAVA,CAaa+e,IAQb,eACA0uB,gBACAm5V,2BACAK,4BACAa,sBACAC,yBACAC,4BACAC,eAEAC,kBACAC,aACAC,YACAC,wCACAC,KACAC,oDAGAhrY,WACAA,8BACAA,uCAIA,+BACAwC,wBACAA,YACAxC,+BAGAirY,mBACA,cAAiCtnY,EAAYrJ,mCAI7C,oBACAH,sBACA8jC,QACA3jC,kBACAA,iBACAA,YAGAixU,WACA7iU,kDACAA,2BACAA,uBACAA,+BACAA,iCACAA,+BACAA,6BACAA,oBACAA,+CACAA,6BACAA,mCACAA,4BACAA,+BAEA,YACAA,qDACAA,yBACA,wBAA4CmS,kBAAuBA,IACnE,IACAyE,GAA0BhT,EAAU,CADpCR,aAEApD,6CACA,aAAgC6W,eAAgBA,GAChD7W,yCAEAA,WAGAA,uBAEAA,qBACAA,2DACAA,iBACAA,kBAMA,eACA,2BACA,oBACA,wDACAA,KACKk5B,UAGL,kCACA,8BACAl2B,6BACA,YACAA,+CACAw/X,eACAC,aACAC,oBACAhxV,IACAu9T,cACAG,kBAGApsW,GAGA,qBACA,kBACA2T,6BACA,YACAA,+CACA6rX,eACAC,aACAC,YACAhxV,IACAu9T,QACAG,YAGAz4V,GAuJA,sBACA,yBACAA,GAtJA,mBACA,IAKAmC,cALA1V,MACA+O,MACAwE,MACAC,MACAC,MAEA,SAAgBiC,eAAkBA,GAClC9V,YACAgW,UACA3hB,YACAC,WACAqf,WACA3E,GACA3a,eACAC,eAEAD,iBACA+L,OAEAwT,mBACAC,aAEA,MACA,SAAoBiC,eAAkBA,GACtC9V,YACAgW,UACA3hB,YACAC,WACA6a,UACAH,cAIA,gBACA,CACA2wX,YACAvlB,cACAwlB,0BAEA,gBACA,oBACA9oY,MAEA,CACA0oY,eACAK,aACAJ,aACAK,UACAC,YAqGAr3W,cACA9U,OACA5W,iCACAA,4BACA,CACAA,sBACAA,mBAEA6W,GAxGA,+BACA,UAIA,QACA,uBACAzT,wBACAJ,sDAEA8V,SACAjC,mBAEA,YACAA,WACA2wB,mBACAw7V,mBACAlC,2BACAmC,UACAR,aACAS,YACAC,iBAEAnxX,cACA6E,2BACAiC,KACA9G,qBAGA6E,GA2EAoX,CACAjc,8CAEA8G,eA3EA,+BACA,UAIA,QACA,uBACA1V,wBACAJ,gCAEA8V,SACAjC,mBAEA,YACAA,WACA2wB,qBACA47V,OACAC,KACAv7P,KACAi5P,OACAv5V,gBACAiK,mBACA1wC,oCACAymC,mBACAm5V,mBACA2C,WACAC,SACA3sX,kDACA,UACAmwB,OACAS,iBACAiK,qBACA+xV,oBACArwY,MAEAswY,WACAC,WACA5kC,IAAkCukC,YAElCM,SACA3hC,IACA8+B,4BACAmC,UACAR,aACAO,mBACAE,YACAC,wBAOAnxX,cACA6E,2BACAiC,KACA9G,qBAGA6E,GAgBAsX,CACAnc,iDACA,KACA,OACA2wX,qBACAiB,WACA1iE,YAMA,oBACAzvU,mBACA8jC,UAEA3jC,aACAA,eACAA,kBACAA,uBACAA,qBACAA,oBACAA,sBACAA,qBACAA,gBACAA,2BACAA,qBAEAA,gBACAA,oBAEAA,uBAEAwR,eACAokC,gBACApkC,YACAinB,UACAA,WACAA,aACAA,aACAA,cAEAjnB,qBACAygY,iCACAH,oCACAI,iCACAC,mCACAJ,oCAEAvgY,4BAGA4gY,OACApyY,yCAGAkpB,8BAwcA,gBACA,yEAxcAxJ,cACA1f,aA4bA,mBACA,0DACAoR,qDACA,OACAI,uBACAuT,uBACAE,8BAlcAxF,yBACAzf,uDAGAA,eAIAoiU,iBACApiU,8BAGAi8H,aACAj8H,8BAGAkkY,WACA,oCACAlkY,iCAGAqyY,YACAryY,kBACAA,mBAGAsyY,UACAtyY,kBACAA,mBAGAuyY,mBACA,mBACA,mEAIAC,eACA,eACA,+DAIAz6W,eACA/3B,wBACA,SACAoO,cACUA,mBACVA,0BAEA,WACAoD,mBAEAxR,yCACAA,cACAA,kBACAA,4CAGAyyY,mBACAzyY,wBACAA,uBAGA0yY,yBACA1yY,wBACAA,uBAGA68X,gBAEA,GADA78X,oBACAoO,2CACA,IACA2W,MADA/kB,2CACA,IACAA,qBAEAA,8CAGA2yY,eACA3yY,oBACAA,6CAGA4yY,eACA,qBAAgCz8W,wBAChCpR,iBAAgCoR,sBAChCn2B,+BACA41C,iBACAm5V,mBACA8D,2BACAC,eACA19X,UACAwgC,kBACAiK,YACAkzV,oBAKAC,yBACAh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AGA,UAIA90Q,GACA,iBACAs+R,IAGA,yBACA,YACA/oF,SAEA+oF,OAEA,cAAoB7oF,MAASA,KAC7B6oF,8BAGA,YA+DA,mBACA,OACA3oF,GACAP,GACAG,GACAE,GACAD,GAEAW,GAEAizG,GACAnrB,GACAixD,GAEAC,GACAnmG,GACAomG,GACAn2D,GACAopC,GACAF,GACAG,GACAmZ,GACA9Y,GAEAF,GACAD,GACAttD,GACAsC,GAGAkrD,MAGAxuH,YAEAyB,cACA+sH,YACAttH,sBACAG,eACAN,aACAQ,wBACAD,yBAEAW,WAEAizG,YACAnrB,YACAixD,YACAC,aACAnmG,WACAomG,WACAn2D,cACAopC,eACAF,qBACAG,sBAMAr9V,EACA,GACAmqX,QACApmG,iBACAomG,MACApmG,iBACAomG,OAGA3T,aAEAvrW,EACA,OAAW,CAKX,GAHA84Q,MADA25E,WAEAysB,OAEA,KADAzsB,gBAKA1tH,4BAEA,OAqKA,IAGA,YACAwmI,iCACA,cAEA,OAEAvnI,QAtSA,GAuSA,QAGAoqF,qCACApqF,QA5SA,GA6SA,QAnLAuuH,aACAE,UAEAysB,QACApmG,iBACAomG,OAEA3sB,iBACAz5E,SACAomG,QAGAA,QACApmG,iBACAomG,MACApmG,iBACAomG,OAEA3T,aAEA3kW,EACA,OAAe,CAMf,GAJAkyQ,MADA25E,WAEAysB,SAGA,IAFAzsB,iBA4HA,IAKA,YACA8Y,iCACA,WAGAn9C,+BACApqF,QA1RA,GA2RA,QAzHA,GAZAsuH,YAEA4sB,IADAzsB,UAEA35E,kBACAomG,OACAzsB,KACA35E,iBACAomG,SAGA5sB,kBAEArsH,IACAmoF,uCACApqF,QApKA,GAqKA,QAOA,GAJA80C,SACAomG,OAGA5sB,IADAG,UACA,CAEA,IADAA,UACA1kC,IACA/pF,SACAoqF,uCACApqF,QAjLA,GAkLA,QA2BA,GAFAghE,KACAsC,MACA,QAEA,GADAtC,UACAytD,OACAF,OACA,GACAxtH,0BACoB0tH,IACpBztD,SACAsC,eAGA03E,OAGA,GAFAh6E,cACAytD,QACAF,IACAA,OACA,GACAxtH,0BACoB0tH,IAEpB,GADAztD,KACAg6E,OAEAzsB,IADAE,MAEA,GACA1tH,0BACsB0tH,IACtBztD,SACAsC,gBAKAtC,UACAytD,OACAF,OACA,GACAxtH,0BACoB0tH,IACpBztD,SACAsC,MAGA,WACAviE,kBACAA,kBACAA,kBACAwtH,MAEAA,KACAxtH,kBACAwtH,OACAxtH,wBAIA,CACAigE,SACA,GACAjgE,kBACAA,kBACAA,kBACAwtH,YACgBA,MAChBA,KACAxtH,kBACAwtH,OACAxtH,oBAeA,MAeA,CAGA,aAEIU,cAIJA,IADA8sH,SAGAz5E,SADAomG,YACA,EAGA9wD,cACAA,eACAA,oCACAA,yCACApqF,WACAA,WAMA,IASArnO,IACA,yCACA,kDAGAsI,IACA,gDACA,8CAGAuT,IACA,2CACA,8CACA,4BAGAwT,IACA,gDACA,8BACA,mBAGA,qCACA,IAYAu/U,GACA9Y,GACAF,GACAD,GACAttD,GAIAjgE,GAMAs0G,SA1BApzG,WAGAizG,KACAnrB,KACAixD,UACAlmG,KACAomG,KACAn2D,KACAopC,KACAF,KACAG,KAMA9qD,QACAkrD,KAGAlsH,UACAH,UACAE,QACAD,KAoCA,SAAgB8yG,IA5FhB,GA4FgCA,KAChC5yG,SAEA,SAAgBynF,MAAaA,KAC7BznF,gBAKA,IADAwyC,MACAmmG,GArGA,GAqGsBA,OACtB,WADgCA,MAMhC,GAHAnmG,QACAA,OAEA,OAIA,yBAMA5zC,kBAEAI,UACA,EAEA,SAAgB05I,OAChB,WAD2BA,MAS3B,IANAlmG,QACAA,OAIAq5E,KACAjZ,KAAgBA,IAnIhB,GAmIgCA,KAGhC,GAFAiZ,QACAA,YACA,EACA,SAGA,UArIA,IAqIA/jC,YACA,SAKA,IADAjoF,QACA+yG,KAAgBA,GAhJhB,GAgJ+BA,KAC/B/yG,uBAIA,SAAgB4nF,MAAaA,KAC7B,gBACAxoF,wBAmEA,GArNA,IAwLA6oF,IACA9mB,SACAviE,OAzLA,IA2LIqpF,IACJ9mB,MACAkrD,QACAnsH,MACAD,QACArB,SAGAuiE,MACAjhE,MACAtB,OAIAqtH,KACArkC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,wBACA,oCACA,uCACAC,WACA,0BAGAG,qBACAC,YACAZ,UACA,KACA,QAEAC,WACA,KAIAY,UACAC,mBACAC,oBACAf,UACAgB,UACAt6Y,oBACA2Q,UACA9Q,WACAo6B,UACAy7S,WACAxkU,8BACAylV,iBACA7oV,oBACA7D,WACA1J,cACAwQ,kCACAlS,oCAEA07Y,iBACAC,oBACAC,oBACApvE,kBACAqvE,iBACAC,kBACA93C,SACA+3C,aACAC,iBACAP,MACAniY,QACA2iY,gBACAC,oBACAC,SACAC,eACAC,cACAC,mBACAC,kBACAprC,SACAqrC,gBACAC,oBACAC,wBACAllD,QACAmlD,OACAroD,YACAvqC,WACA6yF,gBACAC,eACAC,mBACAC,kBACAC,eACAC,cACAj8Y,MACAkuV,SACAguD,aACAC,UACAC,aACAC,iBACAC,eACA,uCACA,yCACAtzG,WACA5uQ,MACAmiX,SACAC,YACAC,gBACAC,aACAC,iBACAC,qBACAC,eACAC,aACAC,eACA,iCACA,qCAGAC,aACArC,sBACAC,mBACApvE,mBACAqvE,gBAEAoC,aACAtC,uBACAC,iBACApvE,kBACAqvE,gBAEAvqO,MACA50G,QACAwhV,aACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEAC,QACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEAtC,OACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEAuC,MACA,SACA,SACA,UACA,YACA,WACA,SACA,aAGA,eACAF,aACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEAC,QACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEAtC,OACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEAuC,MACA,SACA,SACA,UACA,YACA,WACA,SACA,cAIA1uO,QACAhzG,QACAwhV,aACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEAC,QACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEAC,MACA,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aAGA,eACAF,aACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEAC,QACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEAC,MACA,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,cAIAC,UACA3hV,QACAwhV,aACA,KACA,KACA,KACA,MAEAC,QACA,IACA,IACA,IACA,KAEAC,MACA,cACA,cACA,cACA,gBAGA,eACAF,aACA,KACA,KACA,KACA,MAEAC,QACA,IACA,IACA,IACA,KAEAC,MACA,cACA,cACA,cACA,iBAIAE,YACA5hV,QACAwhV,aACAK,oBACAC,QACA,sBACAC,YACApqD,QACA,sBACAqqD,0BACAC,8BACAC,0BACAC,mBAEAV,QACAI,cACAC,OACA,sBACAC,SACApqD,OACA,sBACAqqD,0BACAC,8BACAC,0BACAC,mBAEAT,MACAG,oBACAC,QACA,sBACAC,YACApqD,QACA,sBACAqqD,0BACAC,8BACAC,0BACAC,oBAGA,eACAX,aACAK,oBACAC,QACA,sBACAC,YACApqD,QACA,sBACAqqD,mBACAC,uBACAC,mBACAC,gBAEAV,QACAI,oBACAC,QACA,sBACAC,YACApqD,QACA,sBACAqqD,mBACAC,uBACAC,mBACAC,gBAEAT,MACAG,oBACAC,QACA,sBACAC,YACApqD,QACA,sBACAqqD,mBACAC,uBACAC,mBACAC,kBAIAC,MACApiV,QACA0hV,MACA,kBACA,gBACA,oCACA,8BAEAF,aACA,OACA,OACA,sBACA,sBAEAC,QACA,MACA,MACA,sBACA,wBAIAY,YACAC,KACAZ,YAEArxX,MACAqxX,YACAvC,YACAsC,cAEAc,SACAb,eACAvC,aACAsC,eAEAtwO,OACAuwO,aACAvC,YACAsC,cAEAe,MACAd,YACAvC,YACAsC,cAEApwO,KACAqwO,WACAvC,YACAsC,cAEAl1I,SACAm1I,wBAEAe,WACAf,cAEAxyI,MACAwyI,YACAvC,YACA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AoB/hG,aACpBqtK,GAAgBrtK,QAAqBkkG,IAGrC,qBACAopD,wBAGA3oD,GC3GA,MAAM8oD,GAAY,uBAEX,YAAiBz2E,UACxB,OACA,GAAYt3E,GAAMs3E,IAClB,OAAmBnI,GAAUmI,UACnB,GAASp2E,GAAQo2E,IAC3B,OAAmB02C,GAAY12C,UAI/B,mBAA2Dh5G,EAGpD,sBACP,kBAA0ByvL,GAAY,mBAGtC,OAAeC,GAFfC,oBAEuB5rD,mBAA6D/jI,EAAK6jI,0ICtBzF,iBACA,eAEA,8CAA8D,oCAC9DwwH,sCAAgE,kCAChEA,6CACA,2DAEAA,uCAEA,QADA0pC,6CACAA,gEACAA,mBAEA,qCAEA1pC,2CACA,SAAgC0pC,OAChC,OACAn/D,IAA6Bx8N,gDAC7B,0CACA+6N,kCAEA,CACA,6BACAA,sBACAkB,gCACAO,uBAEAA,qBACAA,uBAEA,sBACAzB,kBACAA,iBACAA,kBACA4gE,KACA5gE,0BACAA,gCACAA,4BACAA,+BAEAA,IAEAk3B,yCACA,SAAgC0pC,OAChC,kCACAn/D,OACA92M,sDADA82M,QAEA92M,uDAEAu2M,IACAh8N,kCACAD,+BACA0jB,kBACAC,wBACAC,qBACAC,wBAEA,YACAo4M,gCACAA,8BACAA,0BACAA,gCACAA,4BACAA,+BAEAA,IAEAg2B,oDACA,kDACA71B,yBACAE,8BACAD,2BACAW,8BACAizG,IACAhwU,kCACAD,+BACA0jB,MACAC,kCACAC,OACAC,gCAEA,eACA,MACAosT,OACAh0G,qDACA,UACA,SACAg0G,wBACA,UACA,OACAA,QACAh0G,oDACA,UACA,QACAg0G,yBAGA,eACA,MACAA,cACA,UACA,SACAA,wCACA,UACA,OACAA,gBACA,UACA,QACAA,wCACA,UACA,SACA,0BACAA,4CAGAA,4CAIA,iCACAA,gCACAA,4BACAA,8BACAA,IAGAh+E,oDACA,UACAz1B,8BACAP,8BACAG,4BACAE,uCACAD,qCACAW,sBACAizG,sBAGA,0BAEAA,gBACA3zG,mBACAvB,8BAGAtvO,yDAGAwwO,mBACAe,eACAX,kBACAtB,6BAEAtvO,wDAIA4wO,uBAEA4zG,gBACA3zG,mBACAvB,+BAGAtvO,0DAGA6wO,yBACAU,eACAX,kBACAtB,gCAEAtvO,2DAEAsvO,IAOAk3B,qEACA,gCAEA0pC,sBACAn/D,qCAEA92M,wDACA82M,kCAQAy1B,qEACA,iCAEAvsO,sDACA82M,kCAEAm/D,oBACAn/D,oCAGAy1B,GA9MA,GAiNAl7P,QCnNA,IAWO0G,EACPw0P,GAZAniQ,EAA4B,WAC5B,qCACA,oCAAiD6rS,MAAOA,KAExD,cADAwpB,iBACAjtT,8CACA+5P,eAEA,WAEAniQ,0BAGAmiQ,GAQCx0P,WAPDw0P,sBACAA,yBACAA,2BACAA,+BACAA,6BACAA,yBACAA,6BAEA,IAuiBOn0P,GAviBPvS,GACAkS,SACAA,YAKO/Q,QACP,kBACA,0FACA,eACA,SAsBA,QApBA4vO,4CACA2zG,eACAnrB,UACAixD,UACAC,KACAnmG,MACAomG,cACA,cACAz5I,qBAAmD,mBACnDw5I,IAgBA,kBACA,wFACA35I,0DACA,mBACA,WACA,uBAEA,WACA,uBAGA,SA3BAvvO,KACAygZ,YACAC,UACA9zO,OACA+zO,aACApnL,aACAE,cAGAspD,aAEAA,OACAomG,KAEA,UAiGO,kBACP,mDACA,8BACA,OA3BA,kBACA,kDACAh6I,mBACAG,YACAE,oBAcA,SAbAF,cAGAE,cAGAF,cAGAH,WACAA,WAGAA,WACAA,WAQAhvO,KAA8CyyF,yCAG9C,kBACA,qDACAu8I,8CACAI,gBACA,OACAv4H,QACA4pS,aACA9zO,kBACA+zO,eACAC,iCAGO,kBAKP,QAJAjyG,0IAAuOkyG,kBAA4BvxK,8CApJnQ,GAoJmQU,GACnQ8nF,2BACAkxD,MACAnmG,MACAA,OACA5zC,qBAA0C,sBAC1C+5I,cAAgDlyQ,0BAEhD+rK,YAEA,UAcA,kBACAs1C,+HACAnoF,iDACA8nF,GAfO,kBAIP,QAHAnpB,uCACA1/D,MACAG,KACAH,QACA,+BACAG,KAEAH,oBAEA,UAKA5uO,KACAygZ,SACAC,SACAC,cAEAj4B,eACAC,MACA9+W,oBAAmC,mBACnCuD,iBACA,OAxGO,kBACP,+GACA4hO,kEACA,eACA,SAEA,SACA,eACA,OACAyoF,GACAzoF,oBACA3vO,EACA,UACA,UACAo4T,mBAGA,iBACAz+F,aACA6mL,WACAc,YACAP,eAEA/yX,eAiFA1tB,KACA0yF,SACAuuT,eACAD,YACAP,eAEAzkD,GA/IA,kBACA,iIACAhsH,wFACA6yC,KACAomG,mBACAt6E,SAGA9rB,GADA,YADAvzC,GAEA2zG,cAIA+lC,wBACAtpX,GAIA,YAIAs8V,QACA,OAJAlpC,MAIAkpC,KACAn5E,WAEAA,UACAxpD,aACA6mL,WACAc,YACAP,gBAEA/gZ,EAgHAK,KACA2yF,SACAo5O,UACAo1E,mBACAF,YACAP,aACAU,qBAEA,OAAiBzuT,8BAEjBxoF,oBAA+B,sBAC/BA,oBAA+B,mBAC/BuD,iBAAgC,OAChCilF,eACAo5O,iBACAs1E,aACAC,mCACAC,mDAEA95Y,qBACA,yCACA,cACAwoO,8DAEAgsH,KAEAn5E,MACAomG,MACA,kCACA,wBACAA,YACA,yBACA9sB,MACAzlV,YACAxM,oBACA,kBACA8xV,iBACA,oBACA,oBACA,YACAsZ,cAEAtZ,eACAitB,aACA,KAGApmG,SACAviN,yBAIAuiN,GAEA,kBACA,qLACAmmG,SACAnhH,YACA05I,gBACAhB,YACAC,YAEA39H,SACAhb,YACAg5I,gBACAG,YACAQ,eACAC,aACAC,aAEAz4B,gEACA,2BACA,aACAhgV,UACA4+N,iBACA05I,gBACAhB,YACAC,UACAmB,iBACAC,eASA,mBACA,+CAAiG,oBACjGrlD,MACAryV,oBAA4C,qBAC5CA,oBACA,gDAEA,mBACAoyV,UAGAjrD,GAGA,OACA2uG,MAtBAh3B,oBACA,oCACA,+CACA,YAAkC33E,IAAav6L,YAE/C,YAA8BulP,IAAUwlD,gBAkBxC/qS,aACA7tE,kCACA,IACAooQ,OADAirD,mDAEA,YAAkCD,IAAWzlU,gCAuI7C,qBACA,8BACA,cACAq4M,oBACA,qBAGAkpF,cAGA3oF,iBAMO,kBACP,yIACAzB,KACAA,OAEA,kHACA+kF,oCACAopC,wCACAF,MACAG,SACAlzT,8BAAiD,mBACjD6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7V,KAAM96C,UACnCs2Y,sBAA4Bx7V,KAAM96C,UAClC81Y,cAAoBh7V,KAAM96C,WAC1Bu2Y,WAAiBz7V,KAAM96C,WACvBw2Y,YAAkB17V,KAAM96C,YAoCxB,4BAOAmnT,OACA,qBACAnrT,2BAEAA,YAMA1O,mBACAG,qBAA+Bqd,KAAUiyN,KAEzC,OAEAkB,GACA,iCACAO,yCACAzB,SACAixG,mBACA44D,mBACAllT,aAGAx0E,KACA+wN,0CACAlB,SACAixG,8BACA44D,8BACAllT,gBAKA,KACA88I,KACAtxN,IACmC+wN,QAG1B/4N,MAAO,WAChBzX,qBAA+Bqd,KAAUiyN,KAEzC,OAEAkB,GACA,iCACAO,yCACAzB,SACAixG,mBACA44D,mBACAllT,aAGAx0E,KACA+wN,yCACAlB,SACAixG,oCACA44D,oCACAllT,gBAKA,KACA88I,KACAtxN,IACmC+wN,QAG1B/4N,MAAO,WAChBzX,mBAA6Bqd,KAAUiyN,KAEvC,OAEAkB,GAEAG,GACA,iCACAI,uCACAzB,SACAixG,mBACA44D,mBACAllT,aAGAx0E,KACA+wN,wCACAlB,SACAixG,qCACA44D,qCACAllT,aAGA08I,2CACArB,SACAixG,qCACA44D,qCACAllT,gBAKA,KACA88I,KACAtxN,KACmC+wN,KACAG,SAG1Bl5N,MAAO,YAwBhB,SAOA5X,yBACAG,iBACAA,gBACAA,aACAA,2BAIAA,oBACAA,uBACAA,kBAA4ByS,MAK5B7M,WACA5F,iCACAA,iDACAA,6CAEAA,+CACAA,wCAEAyf,KACAzf,kDACAA,oEAEgB,QAAKA,qFACrBA,+EAQAgJ,cACAhJ,qBACAA,iCASAgpZ,sBACAtvF,oBACA15T,gCACAA,+FACAA,gFAGAA,gCACAA,+FACAA,8CAGAA,+BACAugV,WACA44D,WACAwO,yBASAsB,iBACAjpZ,iCACAA,6BACAugV,WACA44D,WACAwO,yBAQA50E,gBACA,wDASAm2E,sBACAlpZ,+BACAugV,WACA44D,WACAwO,uBACA1zT,WAOA6xT,4BACAr5Y,8CAC4BzM,iCAC5BA,0BASAmpZ,oBACA,OAAe,QAASnpZ,qC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,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,QAAQ53V,GAAE,CAAC,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,SAAS,KAAK,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,QAAQO,GAAE,CAAC,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO6R,GAAE,CAAC,KAAK,KAAK,KAAK,MAAM5G,GAAEk7Z,iBAAiB,GAAG,IAAIz0G,GAAEzmT,GAAEk7Z,iBAAiBC,wBAAwB,SAASn7Z,IAAG,YAAO,OAAWA,GAAE0tC,WAAW,GAAxB,EAA6B94C,GAAEoL,GAAEk7Z,iBAAiBE,eAAe,SAASp7Z,IAAG,MAAM,iBAAiBA,IAAG,yEAAyE4X,KAAK5X,KAAIjH,GAAEiH,GAAEk7Z,iBAAiBG,kBAAkB,SAASr7Z,IAAG,OAAOpL,GAAEoL,KAAIymT,GAAEzmT,KAAIosV,GAAEpsV,GAAE0tC,WAAW,IAAItyC,QAAQ,GAAG2C,GAAEiC,GAAEk7Z,iBAAiBI,kBAAkB,SAASt7Z,IAAG,OAAOpL,GAAEoL,KAAI,GAAG4G,GAAEnH,QAAQO,GAAE0tC,WAAW,KAAK5mC,IAAG9G,GAAEk7Z,iBAAiBK,4BAA4B,SAASv7Z,IAAG,OAAOpL,GAAEoL,KAAIymT,GAAEzmT,KAAI,GAAGosV,GAAEpsV,GAAE0tC,WAAW,IAAItyC,QAAQ4E,GAAEk7Z,iBAAiBM,yBAAyB,SAASx7Z,IAAG,OAAOpL,GAAEoL,KAAIymT,GAAEzmT,KAAI,GAAGosV,GAAEpsV,GAAE0tC,WAAW,IAAItyC,SAASzF,IAAGqK,GAAEk7Z,iBAAiBO,2BAA2B,SAASz7Z,IAAG,OAAOpL,GAAEoL,KAAIymT,GAAEzmT,KAAI,GAAGosV,GAAEpsV,GAAE0tC,WAAW,IAAItyC,QAAQ4E,GAAEk7Z,iBAAiBQ,0BAA0B,SAAS17Z,IAAG,OAAOpL,GAAEoL,KAAIymT,GAAEzmT,KAAI,MAAKA,GAAE0tC,WAAW,IAAItyC,MAAtB,GAA+B3G,GAAEuL,GAAEk7Z,iBAAiBS,iBAAiB,SAAS37Z,IAAG,IAAIjL,GAAE,EAAE6R,EAAEpS,GAAEiyT,GAAE,EAAE1tT,GAAE,GAAGgF,GAAE,EAAE,IAAIhJ,GAAE,EAAEA,GAAEiL,GAAE5E,OAAOrG,IAAG,OAAE,IAAS6R,EAAE5G,GAAE0tC,WAAW34C,MAAKgJ,KAAI,iBAAiB6I,EAAEA,EAAE5G,GAAE0tC,WAAW34C,QAAO0xT,IAAE,KAAMA,GAAEztT,GAAEgH,GAAEo6E,OAAOrlF,IAAGiL,GAAEo6E,OAAOrlF,GAAEgJ,IAAGiC,GAAEo6E,OAAOrlF,GAAE,KAAK0xT,GAAE,EAAE1tT,IAAG80C,OAAOC,aAAalnC,GAAGA,EAAEpS,GAAEuJ,GAAE,GAAGhJ,KAAIiL,GAAE5E,OAAO,IAAIwL,EAAEpS,GAAEuE,IAAGiH,GAAEo6E,OAAOrlF,IAAGgJ,GAAE,IAAIhJ,IAAGgJ,GAAE,EAAEA,GAAE,KAAK6I,EAAEpS,GAAEuE,IAAGiH,GAAEo6E,OAAOrlF,GAAEgJ,IAAGhJ,IAAGgJ,GAAEA,GAAE,GAAG,OAAOhF,IAAGC,IAAGgH,GAAEk7Z,iBAAiBU,kBAAkB,SAAS57Z,IAAG,YAAO,aAAY,OAAWA,GAAE0tC,WAAW,GAAxB,EAA6B1tC,GAAEk7Z,iBAAiBW,eAAe,SAAS77Z,GAAEjL,GAAE6R,GAAG,OAAOhS,GAAEoL,KAAG,OAAOA,KAAG,GAAI8G,GAAE9G,MAAKpL,GAAEG,MAAKH,GAAEgS,KAAKhS,GAAEgS,IAAI7N,GAAEhE,KAAIgE,GAAEiH,MAAKpL,GAAEG,KAAIgE,GAAEiH,KAAIjC,GAAEhJ,KAAIgE,GAAEiH,KAAIjH,GAAEhE,IAAG,EAAEY,GAAEqK,KAAIpL,GAAEG,MAAKgE,GAAEhE,KAAIH,GAAEgS,IAAIE,GAAEF,GAAG,EAAE7N,GAAEiH,MAAKpL,GAAEgS,GAAG,EAAE,GAAE,IAAKlR,GAAEsK,GAAEk7Z,iBAAiBY,cAAc97Z,GAAE87Z,cAAc,SAAS97Z,IAAG,IAAIjL,GAAE,EAAE6R,EAAE,EAAE6/S,GAAE,EAAE1tT,GAAE,GAAGgF,GAAE,GAAGvJ,GAAE,GAAGsS,IAAG9G,GAAEA,IAAG,IAAI4lB,MAAM,QAAQjwB,GAAE,GAAG,IAAIZ,GAAE,EAAEA,GAAE+R,GAAE1L,OAAOrG,IAAG,EAAE,CAAC,IAAIY,GAAEsG,KAAK,IAAI2K,EAAE,EAAEA,EAAEE,GAAE/R,IAAGqG,OAAOwL,GAAG,EAAE7N,GAAE+N,GAAE/R,IAAG6R,GAAG7I,GAAE+I,GAAE/R,IAAG6R,EAAE,GAAGpS,GAAEsS,GAAE/R,IAAG6R,EAAE,GAAGhS,GAAEmE,KAAI0tT,GAAEztT,GAAED,GAAEgF,GAAEvJ,IAAGmB,GAAEZ,MAAI,OAAO84C,OAAOC,aAAas+S,GAAErzV,GAAE20C,WAAW,IAAI+4Q,KAAI1tT,IAAGpD,GAAEZ,KAAIgE,GAAEpD,GAAEZ,IAAGN,GAAEkB,GAAEZ,KAAI,OAAOY,GAAEqmC,KAAK,MAAMh8B,GAAEk/B,OAAOjjC,KAAK,CAAC,iBAAiB,SAAS+D,IAAG,IAAIjL,GAAEiL,GAAE2tB,KAAK/mB,GAAG5G,GAAE6qB,EAAE7qB,GAAEgwB,EAAEhwB,GAAEqsF,SAAS,IAAIo6N,IAAGzmT,GAAEgtZ,MAAMpmZ,EAAEqvT,KAAK,IAAI,GAAG,0BAA0B1vS,UAAU/jB,SAASgkB,KAAKzxB,IAAG,CAAC,IAAIgE,GAAE,EAAE,IAAI0tT,GAAE,GAAG1tT,GAAE,EAAEA,GAAEhE,GAAEqG,OAAOrC,IAAG,EAAE,mBAAmBoI,OAAOolB,UAAU/jB,SAASgkB,KAAKzxB,GAAEgE,KAAI0tT,GAAExqT,KAAK,CAACvG,GAAEX,GAAEgE,IAAG,IAAIhE,GAAEgE,IAAG,GAAGhE,GAAEgE,IAAG,KAAK0tT,GAAExqT,KAAK,CAACvG,GAAEX,GAAEgE,OAAMiH,GAAE2tB,KAAK84R,QAAOzmT,GAAE2tB,KAAKj4B,GAAEX,OAA57I,CAAm8Io3V,GAAGk9D,KAAKl9D,GAAGk9D,IAAI9+B,UAAU,SAASvqX,IAAG,IAAIjL,GAAqf,MAAlb,iBAAzDiL,GAAEA,IAAG,IAAIkpY,QAAQlpY,GAAEkpY,SAAS,cAAclpY,GAAEkpY,SAA0Bx0Y,KAAKqna,MAAM,eAA8Crna,KAAKq4B,SAASmS,OAAO/jC,UAAU,mBAAmB,WAAWpG,GAAEL,KAAKq4B,SAASq7X,YAAY1zZ,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,aAAaryZ,KAAKq4B,SAASg6X,IAAI,iBAAiBryZ,KAAKq4B,SAASg6X,IAAI,aAAaryZ,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,YAAYryZ,KAAKq4B,SAASmS,OAAO/jC,UAAU,aAAa,WAAWzG,KAAKq4B,SAASg6X,IAAI,eAAehyZ,GAAE,WAAiBL,MAQx+JK,EAAEo3V,GAAGk9D,KAAKziZ,EAAE,WAAW,IAAI7R,QAAE,EAAOoM,OAAOo8E,eAAe7oF,KAAK,MAAM,CAACO,IAAI,WAAW,OAAOF,IAAG2oI,IAAI,SAAS19H,IAAGjL,GAAEiL,MAAK,IAAI4G,GAAE,IAAIzF,OAAOo8E,eAAe7oF,KAAK,QAAQ,CAACO,IAAI,WAAW,OAAO2R,IAAG82H,IAAI,SAAS19H,IAAG4G,GAAEk1B,MAAM97B,MAAI,WAAYilZ,UAAUjlZ,KAAIA,GAAE,EAAE,IAAIA,GAAEtL,KAAKyia,WAAW,MAAM6E,mBAAmBtna,KAAKyia,WAAW,MAAM8E,UAAUr1Z,GAAE,MAAM,IAAI6/S,GAAE,IAAItlT,OAAOo8E,eAAe7oF,KAAK,SAAS,CAACO,IAAI,WAAW,OAAOwxT,IAAG/oL,IAAI,SAAS19H,IAAGymT,GAAE3qR,MAAM97B,MAAI,WAAYilZ,UAAUjlZ,KAAIA,GAAE,EAAE,IAAIA,GAAEtL,KAAKyia,WAAW,MAAM+E,mBAAmBxna,KAAKyia,WAAW,MAAMgF,UAAU11G,GAAE,MAAM,IAAI1tT,GAAE,GAAGoI,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAO8D,IAAG2kI,IAAI,SAAS19H,IAAGjH,GAAEiH,MAAK,IAAIjC,GAAE,GAAGoD,OAAOo8E,eAAe7oF,KAAK,QAAQ,CAACO,IAAI,WAAW,OAAO8I,IAAG2/H,IAAI,SAAS19H,IAAGjC,GAAEiC,MAAKmB,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAM,OAAQsxB,UAAU4wY,WAAW,SAASn3Z,GAAEjL,IAAG,IAAI6R,GAAE,GAAG,QAAQ5G,GAAEA,IAAG,MAAM,OAAO,KAAK,IAAI4G,MAAK7R,GAAEL,KAAKwzX,IAAIk0C,UAAU96Z,eAAesF,MAAKlS,KAAKwzX,IAAIk0C,UAAUx1Z,IAAG7R,GAAE6R,KAAI,OAAOlS,KAAKwzX,IAAIk0C,UAAUC,QAAQ3na,MAAMwzX,IAAIk0C,WAAWx1Z,EAAE2f,UAAU0wY,UAAU,WAAW,MAAM,IAAIl7H,MAAM,kCAAkChnS,EAAEmqC,OAAOjjC,KAAK,CAAC,cAAc,WAAWvH,KAAK4na,OAAO,IAAI11Z,EAAElS,KAAK4na,OAAOp0C,IAAIxzX,QAczpC+W,EAAE0gV,GAAGk9D,IAAIpiZ,EAAE,CAAC4jB,OAAE,EAAOmF,OAAE,EAAO55B,OAAE,EAAOg2V,OAAE,EAAOj4I,QAAG,GAAQ7/J,EAAE,EAAE5+C,EAAE,SAASsK,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAGkO,EAAE,CAAC4jB,EAAE7qB,GAAEgwB,EAAEj7B,GAAEqB,EAAEwQ,GAAEwlV,EAAE3lC,GAAEtyG,GAAGp7M,KAAIs3Y,EAAE,WAAW,OAAOppY,GAAGyuY,EAAE,CAAC7oX,KAAK,EAAEF,IAAI,EAAEC,OAAO,GAAGnhB,EAAE8wZ,kBAAkB,SAASv8Z,IAAGrK,EAAEqK,IAAGyL,EAAE+wZ,kBAAkB,SAASx8Z,GAAEjL,IAAG,IAAI6R,GAAElS,KAAK+na,iBAAiB/na,KAAKq4B,SAASo6X,cAAc1gG,IAAG/xT,KAAKq4B,SAASg2W,UAAU6nB,WAAW71Z,GAAEA,IAAG,IAAI+3Z,aAAap4Z,KAAKq4B,SAAS+/X,aAAa/zZ,GAAE,EAAEgF,GAAE,EAAEvJ,GAAE,EAAE,GAAG,iBAAiBwL,GAAE,IAAIjH,GAAErE,KAAKg5Z,mBAAmB1tZ,IAAG4G,MAAK7I,GAAE,OAAO,CAAC,GAAG,0BAA0BwoB,UAAU/jB,SAASgkB,KAAKxmB,IAAG,MAAM,IAAI+7R,MAAM,yFAAyF,QAAQj1R,GAAE,EAAEA,GAAE9G,GAAE5E,OAAO0L,KAAI/N,IAAGvE,GAAEE,KAAKg5Z,mBAAmB1tZ,GAAE8G,KAAIF,MAAK7N,GAAEvE,IAAG,IAAIuE,KAAIgF,GAAEiC,GAAE5E,QAAQ,MAAM,CAAChF,EAAE2C,IAAG0tT,GAAE2lC,EAAEzoU,KAAK0J,KAAKtvB,GAAE6I,GAAElS,KAAKk6Z,sBAAsBhoZ,IAAGlS,KAAKk6Z,sBAAsB,IAAInoG,GAAE,KAAKh7S,EAAEixZ,YAAY,WAAW,IAAI18Z,GAAEtL,KAAKioa,SAASjnB,EAAEhhZ,KAAKm5B,UAAUn4B,EAAEsK,GAAE6sB,KAAK7sB,GAAE2sB,SAAI,OAAO,GAAQ2nB,GAAG,GAAG7oC,EAAEmxZ,eAAe,WAAW31Z,EAAE,CAAC4jB,OAAE,EAAOmF,OAAE,EAAO55B,OAAE,EAAOg2V,OAAE,EAAOj4I,QAAG,GAAQ7/J,EAAE,GAAG7oC,EAAEoxZ,KAAK,SAAS78Z,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,IAAG,IAAIsS,GAAEupY,IAAI16Y,IAAE,EAAG,QAAG,OAAWw+M,GAAG,GAAGrtM,GAAEqtM,KAAKp2M,GAAEiC,GAAE8G,GAAE+jB,EAAE/jB,GAAE1Q,EAAErB,GAAE+R,GAAEkpB,MAAM,CAAC,IAAIo8T,GAAE13V,KAAKioa,SAASjnB,EAAE5uY,GAAEkpB,EAAElpB,GAAEslV,EAAE3lC,GAAE,IAAI/xT,KAAKq4B,SAASC,SAASE,YAAYk/T,GAAEx/T,SAASl4B,KAAKgoa,cAAc/ma,IAAE,EAAGjB,KAAKooa,cAAcpoa,KAAKqoa,gBAAgBroa,KAAKsoa,eAAej/Z,IAAE,IAAKhJ,GAAEs7Y,IAAIrgX,EAAEqgX,IAAIjkD,EAAEz2V,KAAIZ,GAAE,IAAI,QAAG,OAAW,GAAG,GAAGL,KAAKuoa,kBAAkBvoa,KAAKmtW,KAAK7hW,GAAEjL,GAAE6R,GAAE6/S,GAAE,MAAM/xT,KAAKmtW,KAAK7hW,GAAEjL,GAAE6R,GAAE6/S,IAAG,aAAY,CAAC1tT,cAAagM,QAAQhM,GAAE,CAACA,KAAI,QAAQnE,GAAE,EAAEA,GAAEmE,GAAEqC,OAAOxG,KAAI,CAAC,IAAIH,GAAEsE,GAAEnE,IAAGoE,GAAEtE,KAAKg5Z,mBAAmBj5Z,IAAGC,KAAKq4B,SAASo6X,cAAczyZ,KAAKq4B,SAAS+/X,YAAYp4Z,KAAKi5B,KAAKl5B,GAAEuL,GAAE4G,GAAE5N,GAAE,EAAEjE,GAAEL,KAAKq4B,SAAS2hY,iBAAiB95Z,GAAE,UAAUF,KAAKi5B,KAAK50B,GAAEiH,GAAE,EAAEjL,GAAEL,KAAKq4B,SAAS2hY,iBAAiB,OAAOh5Z,EAAEsK,GAAEjL,GAAE6R,GAAE6/S,GAAE1oT,IAAGrJ,MAAM+W,EAAEyxZ,SAAS,SAASl9Z,GAAEjL,IAAG,IAAI6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEiC,GAAE,GAAG,IAAI4G,GAAE,EAAE6/S,GAAEzmT,GAAE5E,OAAOwL,GAAE6/S,GAAE7/S,IAAG,EAAE7N,GAAEiH,GAAE4G,IAAG7R,IAAE,OAAOgJ,GAAEhF,MAAKgF,GAAEhF,IAAGgF,GAAEhF,KAAIgF,GAAEhF,IAAG,OAAOgF,IAAG0N,EAAEguN,MAAM,SAASz5N,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,IAAI6N,GAAE,KAAK,wBAAwB,IAAI7I,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,GAAE26Y,GAAE3jD,GAAE,GAAGhmV,EAAE,GAAGspB,GAAE,GAAGh6B,GAAE,GAAGI,GAAE,GAAGF,GAAE,GAAG20B,IAAE,EAAG2pB,IAAE,EAAG3tC,EAAE,GAAGiD,GAAE4rY,EAAE,GAAG5rY,GAAEb,MAAMvU,KAAKq4B,SAASC,SAASC,WAAWl0B,MAAI,IAAKA,GAAEqhX,WAAWvvV,IAAE,IAAI,OAAOiyY,eAAetoX,IAAE,GAAIz7C,GAAE0xW,WAAW5jW,EAAE9N,GAAE0xW,UAAU1xW,GAAE44N,UAAK,OAAWA,IAAI,eAAe9qN,EAAE,GAAG9N,GAAE44N,IAAI,cAAc54N,GAAE4ja,UAAU7yZ,GAAE/Q,GAAE4ja,UAAUjoa,KAAKyoa,MAAM,EAAEl2Z,EAAE,CAAC4jB,OAAE,EAAOmF,OAAE,EAAO55B,OAAE,EAAOg2V,OAAE,EAAOj4I,QAAG,GAAQ7/J,EAAE,EAAE5/C,KAAKooa,aAAatoX,GAAE9/C,KAAKioa,QAAQ7yZ,GAAEpV,KAAKg5B,YAAY7mB,GAAGnS,KAAK+na,gBAAgB51Z,EAAE,SAAQ6lV,GAAEvrV,OAAOC,KAAKwF,GAAE,YAAY6/S,GAAE,IAAI,iBAAiBA,GAAE,GAAG,IAAIjyT,GAAE,EAAEsS,GAAE2/S,GAAErrT,OAAO5G,GAAEsS,GAAEtS,IAAG,EAAEuJ,GAAE0oT,GAAEjyT,IAAGk4V,GAAEzwV,KAAK8B,GAAEqE,MAAMsE,EAAEzK,KAAK8B,GAAEgjT,QAAQ/qT,GAAE+H,GAAEqE,MAAMrE,GAAEkL,OAAO,UAAU,WAAWyjV,GAAEjmC,GAAE,GAAG57R,GAAE,IAAIwlX,GAAE,SAASrwY,IAAG,OAAOA,GAAEjC,KAAIvJ,GAAE,EAAEsS,GAAE4lV,GAAEtxV,OAAO5G,GAAEsS,GAAEtS,IAAG,EAAE,CAAC,IAAIw7B,GAAEjyB,GAAE2uV,GAAEl4V,KAAIoS,GAAElD,IAAI2sY,IAAGj6Y,GAAE6F,KAAKvH,KAAK8na,kBAAkB91Z,EAAElS,KAAIuJ,GAAE,CAAC+uZ,YAAY,IAAI12Z,GAAG3B,GAAE,EAAEkB,IAAGf,GAAEo7B,GAAEjyB,KAAI3C,OAAO3G,GAAEkB,GAAElB,IAAG,EAAE23V,GAAEx3V,GAAEH,IAAG2B,GAAE6F,KAAKvH,KAAK8na,kBAAkBpwE,GAAE,CAAC0gE,YAAY,IAAI12Z,GAAGJ,GAAE+H,IAAG0N,EAAEyxZ,SAAS9ma,IAAGA,GAAE,GAAG,GAAGo+C,GAAE,CAAC,IAAID,GAAE7/C,KAAK0oa,oBAAoB1wE,GAAE12V,GAAE0Q,EAAEtL,OAAOsL,EAAEgmV,IAAG,IAAIl4V,GAAE,EAAEsS,GAAE4lV,GAAEtxV,OAAO5G,GAAEsS,GAAEtS,IAAG,EAAEuJ,GAAE2uV,GAAEl4V,IAAG0B,GAAE+F,KAAK,CAAC+D,GAAEjL,GAAEiB,GAAE+H,IAAGw2C,GAAE1G,OAAOnnC,EAAEtL,OAAOsL,EAAElS,IAAGuJ,MAAKrJ,KAAK2oa,kBAAkBnna,IAAGxB,KAAKsoa,eAAe,GAAE,GAAI,IAAIxoa,GAAE,EAAEsS,GAAEF,GAAExL,OAAO5G,GAAEsS,GAAEtS,IAAG,EAAE,IAAIwE,GAAE4N,GAAEpS,IAAG+/C,GAAE7/C,KAAK0oa,oBAAoB1wE,GAAE12V,GAAEgD,IAAGvE,GAAE,EAAEiB,GAAEg3V,GAAEtxV,OAAO3G,GAAEiB,GAAEjB,IAAG,EAAEsJ,GAAE2uV,GAAEj4V,IAAGC,KAAKmoa,KAAK78Z,GAAEjL,GAAEiB,GAAE+H,IAAGw2C,GAAEv7C,GAAE+E,IAAGvJ,GAAE,EAAEuJ,GAAE6vB,OAAO,OAAOl5B,KAAK4oa,YAAYr2Z,EAAEvS,KAAK6oa,QAAQv9Z,GAAEtL,KAAK8oa,QAAQzoa,GAAEL,MAAM+W,EAAE2xZ,oBAAoB,SAASp9Z,GAAEjL,GAAE6R,IAAG,QAAQ6/S,GAAE1tT,GAAE,EAAEgF,GAAE,EAAEA,GAAEiC,GAAE5E,OAAO2C,KAAI,CAAC6I,GAAE6/S,GAAEzmT,GAAEjC,KAAIrJ,KAAKw5B,gBAAgB2f,OAAOjnC,GAAE6/S,KAAI1xT,GAAE0xT,IAAG,GAAG,IAAIjyT,GAAEE,KAAKq4B,SAAS2hY,gBAAgB9nZ,GAAE6/S,IAAGrrT,OAAO,EAAErC,GAAEvE,KAAIuE,GAAEvE,IAAG,OAAOuE,IAAG0S,EAAE4xZ,kBAAkB,SAASr9Z,IAAGtL,KAAKqoa,eAAe/8Z,IAAGyL,EAAEuxZ,eAAe,SAASh9Z,GAAEjL,IAAG,IAAIL,KAAKqoa,eAAe,KAAK,0CAA0C,IAAIn2Z,GAAE6/S,GAAE1tT,GAAEgF,GAAE,GAAGrJ,KAAKuoa,mBAAkB,OAAG,MAAW,CAAC,IAAIzoa,GAAEmB,EAAEjB,KAAK4/C,GAAG5+C,EAAElB,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAGA,GAAE,IAAG,GAAIE,KAAK25Z,aAAa,QAAQ,IAAIvnZ,GAAE,GAAG,IAAI/N,GAAE,EAAEgF,GAAErJ,KAAKqoa,eAAe3ha,OAAOrC,GAAEgF,GAAEhF,IAAG,EAAErE,KAAKmzY,aAAa,IAAI,IAAI,KAAKjhY,GAAElS,KAAKqoa,eAAehka,IAAGhE,KAAIL,KAAKioa,QAAQhwY,IAAI,GAAG/lB,GAAE,GAAGlS,KAAKioa,SAASjoa,KAAKioa,QAAQhwY,KAAK,EAAE7lB,GAAE7K,KAAK2K,KAAI6/S,GAAE,GAAGv0Q,OAAOtrC,IAAGlS,KAAKmoa,KAAKr/V,MAAM9oE,KAAK+xT,GAAEv0Q,OAAOlyC,KAAI,EAAE8G,GAAE1L,QAAQ1G,KAAK2oa,kBAAkBv2Z,IAAGpS,KAAK25Z,aAAa,UAAU35Z,KAAKuoa,mBAAkB,GAMj0H,SAASj9Z,GAAEjL,IAAG,IAAIY,GAAEoD,GAAEgF,GAAEquV,GAAEx3V,GAAEH,GAAE,SAASuL,IAAG,OAAOA,GAAEA,IAAG,GAAGtL,KAAK+oa,oBAAoBz9Z,GAAEy9Z,sBAAqB,EAAG/oa,KAAKgpa,cAAc19Z,GAAE09Z,eAAe,EAAEhpa,KAAKipa,YAAY39Z,GAAE29Z,aAAa,UAAUjpa,KAAKkpa,UAAU59Z,GAAE49Z,WAAW,UAAUlpa,KAAKmpa,kBAAkB79Z,GAAE69Z,oBAAmB,EAAGnpa,KAAKopa,YAAY99Z,GAAE89Z,aAAa,EAAEppa,KAAKu8G,KAAKjxG,GAAEixG,MAAM,kBAAkBv8G,KAAKqpa,aAAa/9Z,GAAE+9Z,cAAc,aAAarpa,KAAKi9Z,UAAU3xZ,GAAE2xZ,WAAW,OAAOj9Z,KAAK85Z,UAAUxuZ,GAAEwuZ,WAAW,EAAE95Z,KAAKspa,SAASh+Z,GAAEg+Z,UAAU,QAAQtpa,KAAKupa,QAAQj+Z,GAAEi+Z,SAAS,OAAOvpa,KAAKo7N,KAAK9vN,GAAE8vN,MAAM,GAAGp7N,KAAKkpB,eAAU,OAAWA,UAAU5d,GAAE4d,UAAUipI,QAAQ,IAAIjxJ,GAAElB,KAAKwpa,yBAAyBl+Z,GAAEk+Z,0BAA0B,SAASxpa,KAAKypa,YAAYn+Z,GAAEm+Z,aAAa,EAAEzpa,KAAK0pa,UAAUp+Z,GAAEo+Z,WAAW,GAAG1pa,KAAK2pa,aAAar+Z,GAAEq+Z,cAAc,IAAIrwY,GAAEt5B,KAAK4pa,WAAWt+Z,GAAEs+Z,YAAY,GAAG5pa,KAAK6pa,UAAUv+Z,GAAEu+Z,WAAW,IAAIvwY,GAAEt5B,KAAK8pa,gBAAgB,kBAAkBx+Z,GAAEw+Z,iBAAiBx+Z,GAAEw+Z,gBAAgB9pa,MAAMsL,GAAEk/B,OAAOjjC,KAAK,CAAC,cAAc,WAAWvH,KAAK0na,UAAU,IAAIx1Z,GAAElS,MAAMiB,GAAEjB,KAAKq4B,SAASq5X,GAAG1xZ,KAAKq4B,SAASs5X,GAAGttZ,GAAErE,KAAKq4B,SAASojY,oBAAoBpyZ,GAAErJ,KAAKq4B,SAASiiY,4BAA4B5iE,GAAE13V,KAAKq4B,SAAS8hY,wBAAwBj6Z,GAAEF,KAAKq4B,SAAS+hY,yBAAyB,IAAIloZ,GAAE,SAAS5G,IAAGmB,OAAOo8E,eAAe7oF,KAAK,SAAS,CAACO,IAAI,WAAW,MAAM,CAACwpa,YAAW,EAAG/sX,OAAM,MAAOvwC,OAAOo8E,eAAe7oF,KAAK,MAAM,CAACO,IAAI,WAAW,OAAO+K,MAAK,IAAIjL,GAAE,EAAGoM,OAAOo8E,eAAe7oF,KAAK,mBAAmB,CAACO,IAAI,WAAW,OAAOF,GAAG2oI,IAAI,SAAS19H,IAAGjL,EAAEkxU,QAAQjmU,OAAM,IAAI4G,IAAE,EAAGzF,OAAOo8E,eAAe7oF,KAAK,mBAAmB,CAACO,IAAI,WAAW,OAAO2R,IAAG82H,IAAI,SAAS19H,IAAG4G,GAAEq/T,QAAQjmU,OAAM,IAAIymT,GAAE,EAAEtlT,OAAOo8E,eAAe7oF,KAAK,OAAO,CAACO,IAAI,WAAW,OAAOwxT,IAAG/oL,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKymT,GAAEzmT,OAAM,IAAIjH,GAAE,EAAEoI,OAAOo8E,eAAe7oF,KAAK,OAAO,CAACO,IAAI,WAAW,OAAO8D,IAAG2kI,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKjH,GAAEiH,OAAM,IAAIjC,IAAE,EAAGoD,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAO8I,IAAG2/H,IAAI,SAAS19H,IAAGjC,GAAEkoU,QAAQjmU,OAAM,IAAIxL,GAAE,EAAE2M,OAAOo8E,eAAe7oF,KAAK,YAAY,CAACO,IAAI,WAAW,OAAOT,IAAGkpI,IAAI,SAAS19H,IAAGxL,GAAEwL,MAAK,IAAI8G,GAAE,GAAG3F,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAO6R,IAAG42H,IAAI,SAAS19H,IAAG8G,GAAE9G,MAAK,IAAIrK,GAAE,IAAIlB,GAAE0M,OAAOo8E,eAAe7oF,KAAK,MAAM,CAACO,IAAI,WAAW,OAAOU,IAAG+nI,IAAI,SAAS19H,IAAGA,cAAavL,KAAIkB,GAAEqK,OAAMmB,OAAOo8E,eAAe7oF,KAAK,OAAO,CAACO,IAAI,WAAW,OAAOU,GAAEm6N,MAAMpyF,IAAI,SAAS19H,IAAGrK,GAAEm6N,KAAK9vN,MAAK,IAAIosV,GAAE,GAAGjrV,OAAOo8E,eAAe7oF,KAAK,WAAW,CAACO,IAAI,WAAW,OAAOm3V,IAAG1uN,IAAI,SAAS19H,IAAGosV,GAAEpsV,MAAKmB,OAAOo8E,eAAe7oF,KAAK,YAAY,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAId,WAAWlgS,IAAI,SAAS19H,IAAG,IAAIjL,GAAEA,GAAEiE,GAAEgH,IAAGtL,KAAKgqa,IAAId,UAAU7oa,GAAE28C,MAAMh9C,KAAKgqa,IAAIb,kBAAkB,OAAMrpa,EAAEE,KAAKgqa,IAAIZ,YAAY/oa,GAAEP,EAAEE,KAAKwzX,IAAI2f,aAAa9yY,GAAE0xT,EAAE1xT,GAAE23V,EAAE33V,GAAEmB,EAAE,CAAC1B,EAAEO,GAAEP,IAAIE,KAAKwzX,IAAIunC,aAAa16Z,GAAE0xT,EAAE1xT,GAAE23V,EAAE33V,GAAEmB,EAAE,CAAC1B,EAAEO,GAAEP,OAAO2M,OAAOo8E,eAAe7oF,KAAK,cAAc,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIf,aAAajgS,IAAI,SAAS19H,IAAG,IAAIjL,GAAEiE,GAAEgH,IAAGtL,KAAKgqa,IAAIf,YAAY5oa,GAAE28C,MAAMh9C,KAAKgqa,IAAIjB,oBAAoB,OAAMjpa,EAAEE,KAAKgqa,IAAIhB,cAAc3oa,GAAEP,EAAE,OAAMA,EAAEE,KAAKwzX,IAAIknC,aAAa,IAAI,IAAI,MAAMr6Z,GAAEP,EAAEE,KAAKwzX,IAAIknC,aAAar6Z,GAAE0xT,EAAE1xT,GAAE23V,EAAE33V,GAAEmB,OAAOiL,OAAOo8E,eAAe7oF,KAAK,UAAU,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIT,SAASvgS,IAAI,SAAS19H,KAAG,IAAK,CAAC,OAAO,QAAQ,UAAUP,QAAQO,MAAKtL,KAAKgqa,IAAIT,QAAQj+Z,GAAEtL,KAAKwzX,IAAIggB,WAAWloY,QAAOmB,OAAOo8E,eAAe7oF,KAAK,YAAY,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIlQ,WAAW9wR,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKtL,KAAKgqa,IAAIlQ,UAAUxuZ,GAAEtL,KAAKwzX,IAAI+f,aAAajoY,QAAOmB,OAAOo8E,eAAe7oF,KAAK,WAAW,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIV,UAAUtgS,IAAI,SAAS19H,KAAG,IAAK,CAAC,QAAQ,QAAQ,SAASP,QAAQO,MAAKtL,KAAKgqa,IAAIV,SAASh+Z,GAAEtL,KAAKwzX,IAAIigB,YAAYnoY,QAAOmB,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIJ,YAAY5gS,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKtL,KAAKgqa,IAAIJ,WAAWt+Z,GAAEtL,KAAKwzX,IAAI8nC,cAAchwZ,QAAOmB,OAAOo8E,eAAe7oF,KAAK,eAAe,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIX,cAAcrgS,IAAI,SAAS19H,IAAGtL,KAAKgqa,IAAIX,aAAa/9Z,MAAKmB,OAAOo8E,eAAe7oF,KAAK,YAAY,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAI/M,WAAWj0R,IAAI,SAAS19H,KAAG,IAAK,CAAC,QAAQ,MAAM,SAAS,OAAO,SAASP,QAAQO,MAAKtL,KAAKgqa,IAAI/M,UAAU3xZ,OAAMmB,OAAOo8E,eAAe7oF,KAAK,OAAO,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIztT,MAAMysB,IAAI,SAAS19H,IAAG,IAAIjL,GAAE,GAAGL,KAAKgqa,IAAIztT,KAAKjxG,GAAE,QAAQjL,GAAE,oVAAoV4xG,KAAK3mG,KAAI,CAAC,IAAI4G,GAAE7R,GAAE,GAAG0xT,IAAG1xT,GAAE,GAAGA,GAAE,IAAIgE,GAAEhE,GAAE,GAAGgJ,GAAEhJ,GAAE,GAAGP,GAAEO,GAAE,GAAGgE,GAAE4qB,KAAcoiB,MAAd,UAAoBI,WAAWptC,IAAI,UAAoBotC,WAAWptC,IAAGrE,KAAKwzX,IAAIi/B,cAA0BhhX,WAAWptC,KAAIrE,KAAKwzX,IAAIx6V,YAAY30B,IAAG,IAAI+N,GAAE,IAAI,SAAS2/S,IAAG,KAAKtuS,SAASsuS,GAAE,KAAK,eAAc3/S,GAAE,QAAQ,gBAAeA,IAAG,UAAU,OAAM1L,SAAS0L,GAAE,UAAU,QAAQnR,GAAE,GAAGy2V,GAAE53V,GAAE+X,cAAc0wB,QAAQ,OAAO,IAAIrX,MAAM,WAAWhxB,GAAE,CAAC+pa,MAAM,YAAYC,QAAQ,YAAYC,UAAU,YAAY,aAAa,YAAYC,MAAM,UAAUz1B,UAAU,UAAU01B,SAAS,UAAUC,QAAQ,UAAUhhC,MAAM,QAAQihC,QAAQ,QAAQC,QAAQ,QAAQ91B,MAAM,SAAS30Y,GAAE,EAAEA,GAAE23V,GAAEhxV,OAAO3G,KAAI,CAAC,QAAG,SAAcyzX,IAAIn7V,SAASg2W,QAAQ32C,GAAE33V,IAAGqS,GAAE,CAAC0kZ,YAAW,EAAGD,gBAAe,IAAK,CAAC51Z,GAAEy2V,GAAE33V,IAAG,MAAM,GAAG,wBAAkB,SAAcyzX,IAAIn7V,SAASg2W,QAAQ32C,GAAE33V,IAAG,OAAO,CAAC+2Z,YAAW,EAAGD,gBAAe,IAAK51Z,GAAEy2V,GAAE33V,IAAGqS,GAAE,oBAAe,SAAcohX,IAAIn7V,SAASg2W,QAAQ32C,GAAE33V,IAAG,SAAS,CAAC+2Z,YAAW,EAAGD,gBAAe,IAAK,CAAC51Z,GAAEy2V,GAAE33V,IAAGqS,GAAE,SAAS,OAAO,GAAG,QAAO,IAAIrS,GAAE,EAAEA,GAAE23V,GAAEhxV,OAAO3G,KAAI,GAAGG,GAAEw3V,GAAE33V,KAAI,CAACkB,GAAEf,GAAEw3V,GAAE33V,KAAI,MAAMkB,GAAE,QAAO,QAAQA,GAAEjB,KAAKwzX,IAAIz7V,QAAQ92B,GAAEmR,QAAO3F,OAAOo8E,eAAe7oF,KAAK,2BAA2B,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIR,0BAA0BxgS,IAAI,SAAS19H,IAAGtL,KAAKgqa,IAAIR,yBAAyBl+Z,MAAKmB,OAAOo8E,eAAe7oF,KAAK,cAAc,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIP,aAAazgS,IAAI,SAAS19H,IAAGtL,KAAKgqa,IAAIP,YAAYn+Z,MAAKmB,OAAOo8E,eAAe7oF,KAAK,kBAAkB,CAACO,IAAI,WAAW,OAAOP,KAAKgqa,IAAIF,iBAAiB9gS,IAAI,SAAS19H,IAAGtL,KAAKgqa,IAAIF,gBAAgBv4F,QAAQjmU,QAAO4G,GAAE2f,UAAUg2Q,KAAK,WAAWkqB,GAAEjgS,KAAK9xB,KAAK,QAAO,IAAKkS,GAAE2f,UAAUgjW,OAAO,WAAW9iE,GAAEjgS,KAAK9xB,KAAK,UAAS,IAAKkS,GAAE2f,UAAU44Y,UAAU,WAAWzqa,KAAKo7N,KAAK,CAAC,CAAC/tK,KAAK,WAAWn7C,GAAE2f,UAAU6iW,OAAO,SAASppX,GAAEjL,GAAG,GAAG+mC,MAAM97B,KAAI87B,MAAM/mC,GAAG,MAAMquC,QAAQ9K,MAAM,4CAA4CouJ,WAAW,IAAIq1G,MAAM,sDAAsD,IAAIn1R,GAAElS,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAEjL,IAAIL,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,KAAKl3B,EAAEjkB,GAAEikB,EAAEmF,EAAEppB,GAAEopB,IAAIt7B,KAAKgqa,IAAIH,UAAU,IAAIvwY,GAAEhuB,GAAEjL,IAAI6R,GAAE2f,UAAU84Y,UAAU,WAAW,IAAIr/Z,GAAE,IAAIguB,GAAE,EAAE,GAAGj5B,EAAE,EAAE,IAAIA,EAAEL,KAAKo7N,KAAK10N,OAAO,GAAE,MAAOrG,IAAI,GAAG,eAAe+6N,KAAK/6N,GAAGgtD,MAAM,aAAcrtD,KAAKo7N,KAAK/6N,EAAE,KAAK,iBAAiBL,KAAKo7N,KAAK/6N,EAAE,GAAG81B,EAAE,CAAC7qB,GAAE,IAAIguB,GAAEt5B,KAAKo7N,KAAK/6N,EAAE,GAAG81B,EAAEn2B,KAAKo7N,KAAK/6N,EAAE,GAAGi7B,GAAGt7B,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,KAAKl3B,EAAE7qB,GAAE6qB,EAAEmF,EAAEhwB,GAAEgwB,IAAI,MAAM,WAAWhpB,EAAGtS,KAAKo7N,KAAK/6N,EAAE,KAAK,iBAAiBL,KAAKo7N,KAAK/6N,EAAE,GAAG81B,GAAGn2B,KAAKo7N,KAAK7zN,KAAKsH,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKo7N,KAAK/6N,EAAE,MAAML,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,UAAUrtD,KAAKgqa,IAAIH,UAAU,IAAIvwY,GAAEhuB,GAAE6qB,EAAE7qB,GAAEgwB,IAAIppB,GAAE2f,UAAU8iW,OAAO,SAASrpX,GAAEjL,GAAG,GAAG+mC,MAAM97B,KAAI87B,MAAM/mC,GAAG,MAAMquC,QAAQ9K,MAAM,4CAA4CouJ,WAAW,IAAIq1G,MAAM,sDAAsD,IAAIn1R,GAAElS,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAEjL,IAAIL,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,KAAKl3B,EAAEjkB,GAAEikB,EAAEmF,EAAEppB,GAAEopB,IAAIt7B,KAAKgqa,IAAIH,UAAU,IAAIvwY,GAAEpnB,GAAEikB,EAAEjkB,GAAEopB,IAAIppB,GAAE2f,UAAUoiX,KAAK,WAAWj0Y,KAAKgqa,IAAIN,UAAU76Z,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKo7N,OAAO22F,GAAEjgS,KAAK9xB,KAAK,MAAK,IAAKkS,GAAE2f,UAAU+4Y,iBAAiB,SAASt/Z,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAMl1B,KAAIk1B,MAAM2qR,KAAI3qR,MAAM97B,KAAI87B,MAAM/mC,GAAG,MAAMquC,QAAQ9K,MAAM,sDAAsDouJ,WAAW,IAAIq1G,MAAM,gEAAgE,IAAIhjS,GAAErE,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEpnB,GAAE6/S,KAAI1oT,GAAErJ,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAEjL,IAAIL,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,MAAMowT,GAAGp0W,GAAE8sB,EAAEgnV,GAAG9zW,GAAEiyB,EAAEnF,EAAE9xB,GAAE8xB,EAAEmF,EAAEj3B,GAAEi3B,IAAIt7B,KAAKgqa,IAAIH,UAAU,IAAIvwY,GAAEj1B,GAAE8xB,EAAE9xB,GAAEi3B,IAAIppB,GAAE2f,UAAUg5Y,cAAc,SAASv/Z,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,GAAG+9B,MAAM/iC,KAAI+iC,MAAM/9B,KAAI+9B,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,IAAG,MAAMrjR,QAAQ9K,MAAM,mDAAmDouJ,WAAW,IAAIq1G,MAAM,6DAA6D,IAAIvnS,GAAEE,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEj1B,GAAEgF,KAAI+I,GAAEpS,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAEjL,IAAIY,GAAEjB,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEpnB,GAAE6/S,KAAI/xT,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,MAAMowT,GAAGrrW,GAAE+jB,EAAEgnV,GAAG/qW,GAAEkpB,EAAEwpW,GAAG7jY,GAAEk1B,EAAE4uW,GAAG9jY,GAAEq6B,EAAEnF,EAAEr2B,GAAEq2B,EAAEmF,EAAEx7B,GAAEw7B,IAAIt7B,KAAKgqa,IAAIH,UAAU,IAAIvwY,GAAEx5B,GAAEq2B,EAAEr2B,GAAEw7B,IAAIppB,GAAE2f,UAAU0lX,IAAI,SAASjsY,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,GAAG+9B,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,KAAI3qR,MAAM/iC,IAAG,MAAMqqC,QAAQ9K,MAAM,yCAAyCouJ,WAAW,IAAIq1G,MAAM,mDAAmD,GAAGh+R,GAAEkoU,QAAQloU,KAAIrJ,KAAKgqa,IAAI9gZ,UAAU4hZ,WAAW,CAAC,IAAIhra,GAAEE,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAEjL,IAAIiL,GAAExL,GAAEq2B,EAAE91B,EAAEP,GAAEw7B,EAAE,IAAIlpB,GAAEpS,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAE,EAAEpnB,KAAIjR,GAAEjB,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAE,EAAE,IAAIpnB,GAAE+c,KAAKoyT,KAAKpyT,KAAK87Y,IAAI34Z,GAAE+jB,EAAEl1B,GAAEk1B,EAAE,GAAGlH,KAAK87Y,IAAI34Z,GAAEkpB,EAAEr6B,GAAEq6B,EAAE,IAAIrM,KAAKshF,IAAIlsG,GAAE0tT,KAAI,EAAE9iS,KAAKypY,KAAK3mG,GAAE,EAAE1tT,GAAE,EAAE4qB,KAAKypY,IAAI14Z,KAAKo7N,KAAK7zN,KAAK,CAAC8lD,KAAK,MAAMl3B,EAAE7qB,GAAEgwB,EAAEj7B,EAAEunY,OAAO11X,GAAEoiX,WAAWviE,GAAEwiE,SAASlwX,GAAE2ma,iBAAiB3ha,MAAK6I,GAAE2f,UAAU2lX,MAAM,SAASlsY,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,IAAG,MAAM,IAAIgjS,MAAM,2BAA2Bn1R,GAAE2f,UAAUs7U,KAAK,SAAS7hW,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,IAAG,MAAMrjR,QAAQ9K,MAAM,0CAA0CouJ,WAAW,IAAIq1G,MAAM,oDAAoDrnS,KAAK00X,OAAOppX,GAAEjL,GAAGL,KAAK20X,OAAOrpX,GAAE4G,GAAE7R,GAAGL,KAAK20X,OAAOrpX,GAAE4G,GAAE7R,EAAE0xT,IAAG/xT,KAAK20X,OAAOrpX,GAAEjL,EAAE0xT,IAAG/xT,KAAK20X,OAAOrpX,GAAEjL,GAAGL,KAAK20X,OAAOrpX,GAAE4G,GAAE7R,GAAGL,KAAK20X,OAAOrpX,GAAEjL,IAAI6R,GAAE2f,UAAUo5Y,SAAS,SAAS3/Z,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,IAAG,MAAMrjR,QAAQ9K,MAAM,8CAA8CouJ,WAAW,IAAIq1G,MAAM,wDAAwD,IAAIvnP,GAAEhuB,KAAK9xB,MAAM,CAAC,IAAIqE,GAAE,GAAG,SAASrE,KAAKupa,UAAUlla,GAAEkla,QAAQvpa,KAAKupa,QAAQvpa,KAAKupa,QAAQ,QAAQ,eAAeD,WAAWjla,GAAEila,SAAStpa,KAAKspa,SAAStpa,KAAKspa,SAAS,SAAStpa,KAAKyqa,YAAYzqa,KAAKmtW,KAAK7hW,GAAEjL,EAAE6R,GAAE6/S,IAAG/xT,KAAK6nS,OAAOxjS,GAAEuI,eAAe,aAAa5M,KAAKupa,QAAQlla,GAAEkla,SAASlla,GAAEuI,eAAe,cAAc5M,KAAKspa,SAASjla,GAAEila,YAAYp3Z,GAAE2f,UAAUq5Y,WAAW,SAAS5/Z,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,IAAG,MAAMrjR,QAAQ9K,MAAM,gDAAgDouJ,WAAW,IAAIq1G,MAAM,0DAA0Dl1R,GAAE2f,KAAK9xB,QAAQA,KAAKyqa,YAAYzqa,KAAKmtW,KAAK7hW,GAAEjL,EAAE6R,GAAE6/S,IAAG/xT,KAAK60X,WAAW3iX,GAAE2f,UAAUs5Y,UAAU,SAAS7/Z,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,IAAG,MAAMrjR,QAAQ9K,MAAM,+CAA+CouJ,WAAW,IAAIq1G,MAAM,yDAAyDrnS,KAAK8pa,kBAAkB9pa,KAAKkpa,UAAU,UAAUlpa,KAAKira,SAAS3/Z,GAAEjL,EAAE6R,GAAE6/S,MAAK7/S,GAAE2f,UAAUkV,KAAK,SAASz7B,IAAGA,GAAE,kBAAkBA,IAAGA,GAAE,QAAQjL,EAAEL,KAAKwzX,IAAIn7V,SAASu/X,qBAAqBhC,WAAW1jZ,GAAE,EAAEA,GAAElS,KAAKwzX,IAAIn7V,SAASu+X,mBAAmB1kZ,KAAIlS,KAAKwzX,IAAIqkC,QAAQ3lZ,GAAE,GAAGlS,KAAKwzX,IAAIn7V,SAASg6X,IAAI,KAAK,GAAGryZ,KAAKwzX,IAAIqkC,QAAQx3Z,GAAGiL,GAAE,CAACtL,KAAKgqa,IAAIj0D,SAAS/1W,KAAKwzX,IAAIn7V,SAASo6X,cAAc,IAAI1gG,GAAE,IAAIhyT,GAAEC,KAAKgqa,KAAKhqa,KAAKora,SAAS7ja,KAAKvH,KAAKgqa,KAAKhqa,KAAKgqa,IAAIj4G,KAAI7/S,GAAE2f,UAAU8hX,QAAQ,SAASroY,IAAGA,GAAE,kBAAkBA,IAAGA,GAAE,QAAQjL,EAAEL,KAAKwzX,IAAIn7V,SAASu/X,qBAAqBhC,WAAW1jZ,GAAE,EAAEA,GAAElS,KAAKwzX,IAAIn7V,SAASu+X,mBAAmB1kZ,KAAIlS,KAAKwzX,IAAIqkC,QAAQ3lZ,GAAE,GAAGlS,KAAKwzX,IAAIn7V,SAASg6X,IAAI,KAAKryZ,KAAKwzX,IAAIqkC,QAAQx3Z,GAAGiL,IAAG,SAAS8/Z,SAAS1ka,SAAS1G,KAAKgqa,IAAIhqa,KAAKora,SAAS/1U,MAAMr1F,KAAKkpa,UAAUlpa,KAAKgqa,IAAId,UAAUlpa,KAAKipa,YAAYjpa,KAAKgqa,IAAIf,YAAYjpa,KAAKu8G,KAAKv8G,KAAKgqa,IAAIztT,KAAKv8G,KAAKupa,QAAQvpa,KAAKgqa,IAAIT,QAAQvpa,KAAK85Z,UAAU95Z,KAAKgqa,IAAIlQ,UAAU95Z,KAAKspa,SAAStpa,KAAKgqa,IAAIV,WAAWp3Z,GAAE2f,UAAU0wY,UAAU,WAAW,MAAM,IAAIl7H,MAAM,+BAA+B,IAAI/iS,GAAE,SAASgH,IAAG,IAAIjL,EAAE6R,GAAE6/S,GAAE1tT,GAAE,IAAG,OAAOgna,mBAAmB//Z,GAAEA,GAAEgga,aAAahga,GAAE,MAAM,CAACymT,EAAE,EAAEimC,EAAE,EAAEx2V,EAAE,EAAE1B,EAAE,EAAEk9C,MAAM1xC,IAAG,GAAG,sEAAsE4X,KAAK5X,IAAGjH,GAAE0tT,GAAE7/S,GAAE7R,EAAE,MAAM,CAAC,IAAIgJ,GAAE,gDAAgD4oG,KAAK3mG,IAAG,GAAG,UAASjL,EAAEojB,SAASpa,GAAE,IAAI6I,GAAEuR,SAASpa,GAAE,IAAI0oT,GAAEtuS,SAASpa,GAAE,IAAIhF,GAAE,UAAU,QAAQgF,GAAE,iEAAiE4oG,KAAK3mG,KAAIjL,EAAEojB,SAASpa,GAAE,IAAI6I,GAAEuR,SAASpa,GAAE,IAAI0oT,GAAEtuS,SAASpa,GAAE,IAAIhF,GAAEotC,WAAWpoC,GAAE,QAAQ,CAAC,GAAGhF,GAAE,EAAE,iBAAiBiH,IAAG,SAAQo6E,OAAO,GAAG,CAAC,IAAI5lF,GAAE,IAAIu0Z,SAAS/oZ,IAAGA,GAAExL,GAAEupC,GAAGvpC,GAAEo/X,QAAQ,UAAU,IAAI5zX,GAAE5E,QAAQrG,EAAEiL,GAAEwJ,UAAU,EAAE,GAAGzU,GAAGA,EAAE6R,GAAE5G,GAAEwJ,UAAU,EAAE,GAAG5C,IAAGA,GAAE6/S,GAAEzmT,GAAEwJ,UAAU,EAAE,GAAGi9S,IAAGA,KAAI1xT,EAAEiL,GAAEwJ,UAAU,EAAE,GAAG5C,GAAE5G,GAAEwJ,UAAU,EAAE,GAAGi9S,GAAEzmT,GAAEwJ,UAAU,EAAE,IAAIzU,EAAEojB,SAASpjB,EAAE,IAAI6R,GAAEuR,SAASvR,GAAE,IAAI6/S,GAAEtuS,SAASsuS,GAAE,KAAK,MAAM,CAACA,EAAE1xT,EAAE23V,EAAE9lV,GAAE1Q,EAAEuwT,GAAEjyT,EAAEuE,GAAE24C,MAAM1xC,KAAIw0C,GAAE,WAAW,OAAO9/C,KAAKgqa,IAAIb,mBAAmB,QAAQM,WAAR,EAAqBt3Z,GAAE,WAAW,OAAOo/T,QAAQvxU,KAAKgqa,IAAIjB,qBAAqB,QAAQU,YAAR,EAAsBv3Z,GAAE2f,UAAU05Y,SAAS,SAASjga,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM/mC,IAAI+mC,MAAMl1B,KAAI,iBAAiB5G,GAAE,MAAMojC,QAAQ9K,MAAM,8CAA8CouJ,WAAW,IAAIq1G,MAAM,wDAAwD,GAAG0qB,GAAE3qR,MAAM2qR,SAAG,EAAOA,IAAGjyQ,GAAEhuB,KAAK9xB,MAAM,CAACkS,GAAEpS,GAAEgyB,KAAK9xB,KAAKkS,IAAG,IAAI7N,GAAEszV,GAAE33V,KAAKgqa,IAAI9gZ,UAAUi8W,UAAU97X,GAAErJ,KAAKgqa,IAAI9gZ,UAAUsiZ,OAAOp5Z,GAAE0f,KAAK9xB,KAAK,CAACi5B,KAAK3tB,GAAE6qB,EAAE91B,EAAEi7B,EAAEppB,GAAE+pH,MAAM5yH,GAAE6qX,MAAM7vX,GAAE60B,MAAMl5B,KAAKi9Z,UAAUvoZ,SAASq9S,OAAM7/S,GAAE2f,UAAU45Y,WAAW,SAASnga,GAAEjL,EAAE6R,GAAE6/S,IAAG,GAAG3qR,MAAM/mC,IAAI+mC,MAAMl1B,KAAI,iBAAiB5G,GAAE,MAAMojC,QAAQ9K,MAAM,gDAAgDouJ,WAAW,IAAIq1G,MAAM,0DAA0D,IAAIl1R,GAAE2f,KAAK9xB,MAAM,CAAC+xT,GAAE3qR,MAAM2qR,SAAG,EAAOA,GAAE7/S,GAAEpS,GAAEgyB,KAAK9xB,KAAKkS,IAAG,IAAI7N,GAAEszV,GAAE33V,KAAKgqa,IAAI9gZ,UAAUi8W,UAAU97X,GAAErJ,KAAKgqa,IAAI9gZ,UAAUsiZ,OAAOp5Z,GAAE0f,KAAK9xB,KAAK,CAACi5B,KAAK3tB,GAAE6qB,EAAE91B,EAAEi7B,EAAEppB,GAAE+pH,MAAM5yH,GAAEyvZ,cAAc,SAAS5kC,MAAM7vX,GAAE60B,MAAMl5B,KAAKi9Z,UAAUvoZ,SAASq9S,OAAM7/S,GAAE2f,UAAU65Y,YAAY,SAASpga,IAAG,GAAG,iBAAiBA,GAAE,MAAMojC,QAAQ9K,MAAM,iDAAiDouJ,WAAW,IAAIq1G,MAAM,2DAA2D,IAAIhnS,EAAEL,KAAKwzX,IAAIthX,GAAElS,KAAKwzX,IAAIn7V,SAAS+/X,YAAYrmG,GAAE1xT,EAAEg4B,SAASo6X,cAAcpuZ,GAAEhE,EAAE24Z,mBAAmB1tZ,IAAGymT,GAAE1xT,EAAEg4B,SAAS+/X,YAAY,OAAO,IAAI,SAAS9sZ,IAAG,IAAIjL,IAAGiL,GAAEA,IAAG,IAAIiJ,OAAO,EAAE,OAAO9H,OAAOo8E,eAAe7oF,KAAK,QAAQ,CAACO,IAAI,WAAW,OAAOF,MAAKL,KAA/G,CAAqH,CAACuU,MAAMlQ,IAAG4qB,KAAKC,MAAM,GAAGhd,GAAE,GAAG,KAAK,OAAOA,GAAE2f,UAAUoqG,MAAM,SAAS3wH,GAAEjL,GAAG,GAAG+mC,MAAM97B,KAAI87B,MAAM/mC,GAAG,MAAMquC,QAAQ9K,MAAM,2CAA2CouJ,WAAW,IAAIq1G,MAAM,qDAAqD,IAAIn1R,GAAE,IAAIhR,GAAEoK,GAAE,EAAE,EAAEjL,EAAE,EAAE,GAAGL,KAAKgqa,IAAI9gZ,UAAUlpB,KAAKgqa,IAAI9gZ,UAAUu9W,SAASv0X,KAAIA,GAAE2f,UAAUqyW,OAAO,SAAS54X,IAAG,GAAG87B,MAAM97B,IAAG,MAAMojC,QAAQ9K,MAAM,4CAA4CouJ,WAAW,IAAIq1G,MAAM,sDAAsD,IAAIhnS,EAAE,IAAIa,GAAE+tB,KAAK0pY,IAAIrtZ,IAAG2jB,KAAK2pY,IAAIttZ,KAAI2jB,KAAK2pY,IAAIttZ,IAAG2jB,KAAK0pY,IAAIrtZ,IAAG,EAAE,GAAGtL,KAAKgqa,IAAI9gZ,UAAUlpB,KAAKgqa,IAAI9gZ,UAAUu9W,SAASpmY,IAAI6R,GAAE2f,UAAUuwS,UAAU,SAAS92T,GAAEjL,GAAG,GAAG+mC,MAAM97B,KAAI87B,MAAM/mC,GAAG,MAAMquC,QAAQ9K,MAAM,+CAA+CouJ,WAAW,IAAIq1G,MAAM,yDAAyD,IAAIn1R,GAAE,IAAIhR,GAAE,EAAE,EAAE,EAAE,EAAEoK,GAAEjL,GAAGL,KAAKgqa,IAAI9gZ,UAAUlpB,KAAKgqa,IAAI9gZ,UAAUu9W,SAASv0X,KAAIA,GAAE2f,UAAU3I,UAAU,SAAS5d,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,GAAG+9B,MAAM97B,KAAI87B,MAAM/mC,IAAI+mC,MAAMl1B,KAAIk1B,MAAM2qR,KAAI3qR,MAAM/iC,KAAI+iC,MAAM/9B,IAAG,MAAMqlC,QAAQ9K,MAAM,+CAA+CouJ,WAAW,IAAIq1G,MAAM,yDAAyD,IAAIvnS,GAAE,IAAIoB,GAAEoK,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAGrJ,KAAKgqa,IAAI9gZ,UAAUlpB,KAAKgqa,IAAI9gZ,UAAUu9W,SAAS3mY,KAAIoS,GAAE2f,UAAU85Y,aAAa,SAASrga,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAGiC,GAAE87B,MAAM97B,IAAG,EAAEA,GAAEjL,EAAE+mC,MAAM/mC,GAAG,EAAEA,EAAE6R,GAAEk1B,MAAMl1B,IAAG,EAAEA,GAAE6/S,GAAE3qR,MAAM2qR,IAAG,EAAEA,GAAE1tT,GAAE+iC,MAAM/iC,IAAG,EAAEA,GAAEgF,GAAE+9B,MAAM/9B,IAAG,EAAEA,GAAErJ,KAAKgqa,IAAI9gZ,UAAU,IAAIhoB,GAAEoK,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,KAAI6I,GAAE2f,UAAUwiX,UAAU,SAAS/oY,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,IAAG,IAAIy2V,GAAE13V,KAAKwzX,IAAIsyC,mBAAmBx6Z,IAAGpL,GAAE,EAAEH,GAAE,EAAEuE,GAAE,EAAEtD,GAAE,OAAE,IAAS+wT,SAAG,SAAaztT,GAAE8N,GAAE2/S,GAAE/wT,GAAEC,GAAEoD,GAAEnE,GAAEw3V,GAAEnjV,MAAMw9S,GAAE3/S,GAAE2/S,GAAEhyT,GAAE23V,GAAEljV,OAAOnQ,GAAEpD,GAAEoD,SAAG,SAAagF,GAAEhJ,EAAEP,GAAEoS,GAAEA,GAAE7R,EAAE,QAAG,aAAY,SAAa+R,GAAE2/S,GAAE9wT,GAAEoD,SAAG,aAAY,SAAa+N,GAAEslV,GAAEnjV,MAAMtT,GAAEy2V,GAAEljV,QAAQ,IAAImnY,GAAE37Y,KAAKgqa,IAAI9gZ,UAAU0iZ,YAAY5zE,GAAEL,GAAEgkD,GAAEzX,OAAO2nC,KAAKlwB,GAAE1/Q,MAAM6vS,GAAGnwB,GAAE1/Q,MAAMo4O,GAAG,QAAQriW,GAAEspB,GAAE,IAAIp6B,GAAEI,KAAIg6B,IAAGA,IAAGA,GAAEA,GAAEmrW,SAASkV,GAAEv5E,YAAYqkE,SAASkV,GAAEowB,OAAOtlC,SAASkV,GAAE1/Q,QAAQyuS,aAAa,IAAIpxY,GAAElnB,GAAEnR,KAAIq6B,GAAE0wY,iBAAiB,IAAIxyZ,GAAEnQ,GAAEhJ,EAAEiE,GAAExE,GAAEoS,GAAElR,GAAE+wT,GAAE7xT,GAAEmE,GAAEtE,MAAK2B,GAAE6Q,GAAEuf,KAAK9xB,KAAKsB,IAAGE,GAAE,GAAG20B,GAAE,EAAEA,GAAEz0B,GAAEgF,OAAOyvB,IAAG,GAAE,IAAK30B,GAAEuJ,QAAQrJ,GAAEy0B,MAAK30B,GAAE+F,KAAK7F,GAAEy0B,KAAI,GAAG30B,GAAEuH,OAAO/I,KAAKisa,WAAW,QAAQnsX,GAAEt+C,GAAE,GAAG2Q,GAAE3Q,GAAEA,GAAEkF,OAAO,GAAG0O,GAAE0qC,GAAE1qC,GAAEjD,GAAE,EAAEiD,KAAI,CAAC,GAAGpV,KAAKwzX,IAAIqkC,QAAQziZ,IAAG,SAAS40Z,IAAIN,UAAUhja,OAAO,CAAC,IAAIm5C,GAAE7/C,KAAKo7N,KAAKppN,GAAEnD,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKgqa,IAAIN,YAAY1pa,KAAKo7N,KAAKx7K,GAAE5tC,GAAEhS,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQY,GAAE,GAAGpV,KAAKmsa,MAAMnrB,EAAElvX,KAAK9xB,KAAK,QAAO,GAAIA,KAAKo7N,KAAKv7K,GAAE,IAAI9oC,GAAElI,KAAKC,MAAMD,KAAKgjC,UAAUvwC,KAAIyV,GAAE6oC,GAAE,CAAC7oC,IAAG/W,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQY,GAAE,GAAGpV,KAAKmsa,MAAM,GAAGnsa,KAAKwzX,IAAInuP,SAAS/5H,GAAE,MAAMyL,GAAEof,EAAEpf,GAAEukB,EAAEvkB,GAAErV,EAAEqV,GAAE2gV,EAAE,KAAK,KAAKM,SAAQh4V,KAAKwzX,IAAInuP,SAAS/5H,GAAE,MAAMhK,GAAE60B,EAAE70B,GAAEg6B,EAAEh6B,GAAEI,EAAEJ,GAAEo2V,EAAE,KAAK,KAAKM,KAAI,IAAIzlV,GAAE,SAASjH,GAAEjL,EAAE6R,IAAG,IAAI6/S,GAAE,GAAG,OAAO1xT,EAAEA,GAAGL,KAAKwzX,IAAIn7V,SAASC,SAAS/jB,MAAMrC,GAAEA,IAAGlS,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,OAAOlJ,GAAE+hD,kBAAkB,SAAS,KAAK0kQ,GAAExqT,KAAK0nB,KAAKoiB,OAAO/lC,GAAEgwB,EAAEt7B,KAAKmsa,MAAMj6Z,IAAG,GAAG,UAAU,MAAM6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAO/lC,GAAEgwB,EAAEt7B,KAAKmsa,KAAK7ga,GAAEs8X,QAAQ11X,IAAG,GAAG6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAO/lC,GAAEgwB,EAAEt7B,KAAKmsa,KAAK7ga,GAAEs8X,QAAQ11X,IAAG,GAAG,UAAU,MAAM,IAAI7N,GAAE3C,GAAE1B,KAAKgqa,IAAIH,UAAU1zY,EAAEn2B,KAAKgqa,IAAIH,UAAUvuY,EAAEhwB,GAAEmyW,GAAGnyW,GAAE6xW,GAAG7xW,GAAE6qB,EAAE7qB,GAAEgwB,GAAGy2R,GAAExqT,KAAK0nB,KAAKoiB,MAAMhtC,GAAEi3B,EAAEppB,IAAG,GAAG6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAOhtC,GAAEi3B,EAAEj3B,GAAEqzV,GAAGxlV,IAAG,GAAG,UAAU,MAAM,IAAI7I,GAAE7H,GAAExB,KAAKgqa,IAAIH,UAAU1zY,EAAEn2B,KAAKgqa,IAAIH,UAAUvuY,EAAEhwB,GAAEmyW,GAAGnyW,GAAE6xW,GAAG7xW,GAAEw5X,GAAGx5X,GAAEy5X,GAAGz5X,GAAE6qB,EAAE7qB,GAAEgwB,GAAGy2R,GAAExqT,KAAK0nB,KAAKoiB,MAAMhoC,GAAEiyB,EAAEppB,IAAG,GAAG6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAOhoC,GAAEiyB,EAAEjyB,GAAEquV,GAAGxlV,IAAG,GAAG,UAAU,OAAO6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAO/lC,GAAEgwB,EAAEt7B,KAAKmsa,MAAMj6Z,IAAG,GAAG6/S,GAAExqT,KAAK0nB,KAAKoiB,OAAO/lC,GAAEgwB,EAAEhwB,GAAEosV,EAAE13V,KAAKmsa,MAAMj6Z,IAAG,GAAG,QAAQpS,GAAE,EAAEA,GAAEiyT,GAAErrT,OAAO5G,IAAG,EAAE,KAAKE,KAAKwzX,IAAIn7V,SAASu+X,mBAAmB7kG,GAAEjyT,KAAIwB,GAAEwwB,KAAK9xB,MAAM,OAAO+xT,IAAGzwT,GAAE,WAAW,IAAIgK,GAAEtL,KAAKkpa,UAAU7oa,EAAEL,KAAKipa,YAAY/2Z,GAAElS,KAAKu8G,KAAKw1M,GAAE/xT,KAAKupa,QAAQlla,GAAErE,KAAK85Z,UAAUzwZ,GAAErJ,KAAKspa,SAAStpa,KAAKwzX,IAAIr6V,UAAUn5B,KAAKkpa,UAAU59Z,GAAEtL,KAAKipa,YAAY5oa,EAAEL,KAAKu8G,KAAKrqG,GAAElS,KAAKupa,QAAQx3G,GAAE/xT,KAAK85Z,UAAUz1Z,GAAErE,KAAKspa,SAASjga,IAAGu2C,GAAE,SAASt0C,GAAEjL,EAAE6R,IAAG,QAAQ6/S,GAAE,EAAEA,GAAEzmT,GAAE5E,OAAOqrT,KAAI,OAAOzmT,GAAEymT,IAAG1kQ,UAAU,MAAM/hD,GAAEymT,IAAG+yE,IAAIzkY,EAAEiL,GAAEymT,IAAGgzE,IAAI7yX,OAAM,MAAM5G,GAAEymT,IAAG0rD,IAAIp9W,EAAEiL,GAAEymT,IAAGorD,IAAIjrW,GAAwB,QAAc5G,GAAEymT,IAAG57R,GAAG91B,EAAEiL,GAAEymT,IAAGz2R,GAAGppB,GAAE,OAAO5G,IAAGymT,GAAE,SAASzmT,GAAEjL,GAAG,QAAQ6R,GAAE6/S,GAAE1tT,GAAErE,KAAKkpa,UAAU7/Z,GAAErJ,KAAKipa,YAAYnpa,IAAGE,KAAKu8G,KAAKv8G,KAAKupa,SAASn3Z,GAAEpS,KAAK85Z,UAAU74Z,GAAEjB,KAAKspa,SAAS5xE,GAAE7oV,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKo7N,OAAOl7N,GAAE2O,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKo7N,OAAOr7N,GAAE,GAAGuE,GAAE,EAAEA,GAAEpE,GAAEwG,OAAOpC,KAAI,QAAG,OAAWA,IAAG6xB,EAAE,QAAQn1B,GAAEuR,GAAEuf,KAAK9xB,KAAKE,GAAEoE,KAAIq3Y,GAAE,EAAEA,GAAE36Y,GAAE0F,OAAOi1Y,IAAG,GAAE,IAAK57Y,GAAEgL,QAAQ/J,GAAE26Y,MAAK57Y,GAAEwH,KAAKvG,GAAE26Y,KAAI,IAAIr3Y,GAAE,EAAEA,GAAEvE,GAAE2G,OAAOpC,KAAI,KAAKtE,KAAKwzX,IAAIn7V,SAASu+X,mBAAmB72Z,GAAEuE,KAAIhD,GAAEwwB,KAAK9xB,MAAM,GAAGD,GAAEgJ,OAAO/I,KAAKisa,WAAW,CAAC,IAAIj0E,GAAEj4V,GAAE,GAAGiS,GAAEjS,GAAEA,GAAE2G,OAAO,GAAG,IAAIpC,GAAE0zV,GAAE1zV,GAAE0N,GAAE,EAAE1N,KAAI,CAAC,GAAGtE,KAAKwzX,IAAIqkC,QAAQvzZ,IAAGtE,KAAKkpa,UAAU7ka,GAAErE,KAAKipa,YAAY5/Z,GAAErJ,KAAKupa,QAAQzpa,GAAEE,KAAK85Z,UAAU1nZ,GAAEpS,KAAKspa,SAASroa,GAAE,SAAS+oa,IAAIN,UAAUhja,OAAO,CAAC,IAAI40B,GAAEt7B,KAAKo7N,KAAKlpN,GAAErD,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKgqa,IAAIN,YAAY1pa,KAAKo7N,KAAKx7K,GAAE1tC,GAAElS,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQlQ,GAAE,GAAGtE,KAAKmsa,MAAMnrB,EAAElvX,KAAK9xB,KAAKsL,IAAE,GAAItL,KAAKo7N,KAAK9/L,GAAEy2R,GAAEljT,KAAKC,MAAMD,KAAKgjC,UAAU6lT,KAAI13V,KAAKo7N,KAAKx7K,GAAEmyQ,GAAE/xT,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQlQ,GAAE,GAAGtE,KAAKmsa,OAAM,OAAQ,QAAOnrB,EAAElvX,KAAK9xB,KAAKsL,GAAEjL,SAAS2gZ,EAAElvX,KAAK9xB,KAAKsL,GAAEjL,GAAGL,KAAKo7N,KAAKs8H,IAAGspD,EAAE,SAAS11Y,GAAEjL,GAAG,IAAI,WAAWiL,IAAGjL,IAAI8R,GAAE2f,KAAK9xB,SAAS,WAAWsL,IAAGjL,IAAIy/C,GAAEhuB,KAAK9xB,OAAO,CAAC,IAAIkS,GAAE,GAAGlS,KAAKgqa,IAAIP,YAAYzpa,KAAKgqa,IAAIZ,YAAY,GAAGppa,KAAKgqa,IAAIZ,YAAY,QAAQr3G,GAAE1tT,GAAErE,KAAKo7N,KAAK/xN,GAAE,EAAEA,GAAEhF,GAAEqC,OAAO2C,KAAI,CAAC,IAAIvJ,GAAEuE,GAAEgF,IAAG,OAAOvJ,GAAEutD,UAAU,QAAQn7C,GAAE3K,KAAK,CAAC6ka,OAAM,IAAK,UAAU,QAAQl6Z,GAAE3K,KAAK,CAACR,OAAM,IAAK,UAAU,KAAKmL,GAAE3K,KAAK,CAAC8b,MAAMvjB,GAAEusa,OAAO,GAAG97T,IAAI,KAAK,UAAU,KAAK,IAAIn+F,GAAEF,GAAExL,OAAO,IAAI0gC,MAAM/iC,GAAEgF,GAAE,GAAG8sB,GAAG,CAAC,IAAIl1B,GAAE,CAACnB,GAAEq2B,EAAE9xB,GAAEgF,GAAE,GAAG8sB,EAAEr2B,GAAEw7B,EAAEj3B,GAAEgF,GAAE,GAAGiyB,GAAG,GAAG,EAAElpB,GAAE,KAAK,GAAGA,GAAEA,KAAI,IAAG,OAAOA,GAAE,GAAGrL,QAAO,OAAOqL,GAAE,GAAGg6Z,MAAM,CAACl6Z,GAAEE,GAAE,GAAGi6Z,OAAO9ka,KAAKtG,IAAGiR,GAAEE,GAAE,GAAGm+F,IAAIhpG,KAAKzH,IAAG,OAAO,UAAU,MAAMmB,GAAE,CAACnB,GAAE29W,GAAGp5W,GAAEgF,GAAE,GAAG8sB,EAAEr2B,GAAEq9W,GAAG94W,GAAEgF,GAAE,GAAGiyB,EAAEx7B,GAAEglY,GAAGzgY,GAAEgF,GAAE,GAAG8sB,EAAEr2B,GAAEilY,GAAG1gY,GAAEgF,GAAE,GAAGiyB,EAAEx7B,GAAEq2B,EAAE9xB,GAAEgF,GAAE,GAAG8sB,EAAEr2B,GAAEw7B,EAAEj3B,GAAEgF,GAAE,GAAGiyB,GAAGppB,GAAEA,GAAExL,OAAO,GAAG2la,OAAO9ka,KAAKtG,IAAG,UAAU,MAAM,IAAIy2V,GAAErzV,GAAEgF,GAAE,GAAG8sB,EAAE,EAAE,GAAGr2B,GAAE29W,GAAGp5W,GAAEgF,GAAE,GAAG8sB,GAAGj2B,GAAEmE,GAAEgF,GAAE,GAAGiyB,EAAE,EAAE,GAAGx7B,GAAEq9W,GAAG94W,GAAEgF,GAAE,GAAGiyB,GAAGv7B,GAAED,GAAEq2B,EAAE,EAAE,GAAGr2B,GAAE29W,GAAG39W,GAAEq2B,GAAG7xB,GAAExE,GAAEw7B,EAAE,EAAE,GAAGx7B,GAAEq9W,GAAGr9W,GAAEw7B,GAAGt6B,GAAElB,GAAEq2B,EAAEwlX,GAAE77Y,GAAEw7B,EAAEr6B,GAAE,CAACy2V,GAAErzV,GAAEgF,GAAE,GAAG8sB,EAAEj2B,GAAEmE,GAAEgF,GAAE,GAAGiyB,EAAEv7B,GAAEsE,GAAEgF,GAAE,GAAG8sB,EAAE7xB,GAAED,GAAEgF,GAAE,GAAGiyB,EAAEt6B,GAAEqD,GAAEgF,GAAE,GAAG8sB,EAAEwlX,GAAEt3Y,GAAEgF,GAAE,GAAGiyB,GAAGppB,GAAEA,GAAExL,OAAO,GAAG2la,OAAO9ka,KAAKtG,IAAG,UAAU,MAAMiR,GAAE3K,KAAK,CAAC8ka,OAAO,GAAG97T,IAAI,GAAGgnS,KAAI,IAAKlnY,MAAMk0D,QAAQryD,GAAEA,GAAExL,OAAO,GAAG6pG,MAAMr+F,GAAEA,GAAExL,OAAO,GAAG6pG,IAAIhpG,KAAKzH,KAA0C,IAAtCiyT,GAAE1xT,EAAE,KAAK,cAAa,SAAS,OAAWgJ,GAAE,EAAEA,GAAE6I,GAAExL,OAAO2C,KAAI,CAAC,GAAG6I,GAAE7I,IAAGkuY,IAAI,QAAQv/C,GAAE9lV,GAAE7I,IAAGknG,IAAIv+F,GAAE,EAAEA,GAAEgmV,GAAEtxV,OAAOsL,KAAI,CAAC,IAAIspB,GAAE08T,GAAEhmV,IAAG,QAAG,OAAWsiX,WAAW,CAAC,IAAIhzX,GAAEq2V,GAAEr8T,GAAEg5V,YAAY5yX,GAAEi2V,GAAEr8T,GAAEi5V,UAAU/yX,GAAE85B,GAAEnF,EAAEA,GAAEmF,GAAEA,EAAElmB,GAAE0c,KAAK9xB,KAAKwB,GAAE20B,GAAEmF,GAAEssW,OAAOtmY,GAAEI,GAAE45B,GAAE0vY,iBAAiBj5G,GAAE1xT,QAAQkB,EAAEuwB,KAAK9xB,KAAKs7B,GAAEnF,EAAEmF,GAAEA,IAAOppB,GAAE7I,IAAGkuY,MAAK,OAAOluY,IAAGtC,QAAO,OAAOsC,IAAG+ia,QAAO5qa,GAAE0Q,GAAE7I,IAAGga,MAAM8S,EAAEA,GAAEjkB,GAAE7I,IAAGga,MAAMiY,EAAE75B,GAAEqwB,KAAK9xB,KAAKkS,GAAE7I,IAAGgja,OAAO7qa,GAAE20B,GAAE,KAAK,OAAO47R,IAAGlyQ,GAAE/tB,KAAK9xB,KAAK+xT,IAAG1xT,GAAG0W,GAAE+a,KAAK9xB,QAAQF,GAAE,SAASwL,IAAG,IAAIjL,EAAEL,KAAKwzX,IAAIn7V,SAASo6X,cAAczyZ,KAAKwzX,IAAIn7V,SAAS+/X,YAAYlmZ,GAAE7R,GAAGL,KAAKwzX,IAAIn7V,SAAS6hY,sBAAsB,GAAG,OAAOl6Z,KAAKgqa,IAAIX,kBAAkB,SAAS,OAAO/9Z,GAAE4G,OAAM,MAAM,OAAO5G,GAAEjL,EAAE6R,OAAM,UAAU,OAAO5G,GAAEjL,EAAE,EAAE6R,OAAM,SAAS,OAAO5G,GAAEjL,EAAE,EAAE6R,GAAiC,QAAqB,OAAO5G,KAAI4G,GAAE2f,UAAUy6Y,qBAAqB,WAAW,IAAIhha,GAAE,WAAU,EAAG,OAAOA,GAAEiha,WAAW,GAAGjha,GAAEkha,aAAa,SAASlha,EAAEjL,IAAGL,KAAKusa,WAAWhla,KAAK,CAAC+D,EAAEjL,MAAKiL,GAAEgga,SAAS,WAAW,OAAO,SAASiB,WAAW7la,OAAO,UAAU1G,KAAKusa,WAAW,GAAG,IAAIjha,GAAE+/Z,kBAAiB,EAAG//Z,IAAG4G,GAAE2f,UAAU46Y,cAAc,WAAW,OAAOzsa,KAAKssa,wBAAwBp6Z,GAAE2f,UAAU66Y,qBAAqB,WAAW,OAAO1sa,KAAKssa,wBAAwB,IAAIl3Z,GAAE,SAAS9J,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,IAAGpS,KAAKwzX,IAAIn7V,SAAS+/X,YAAY,QAAQn3Z,GAAEq6B,GAAEy2R,IAAG2lC,GAAEp8T,GAAEj3B,IAAGnE,GAAE83V,GAAElmU,KAAK9xB,KAAKkS,GAAEjR,GAAEy2V,GAAEruV,IAAGtJ,GAAE,EAAEA,GAAEG,GAAEwG,OAAO3G,KAAI,CAAC,IAAIuE,GAAEpE,GAAEH,IAAG,IAAIA,IAAGiB,GAAE8wB,KAAK9xB,KAAKsE,GAAEm5W,GAAGnyW,GAAEhH,GAAE64W,GAAG98W,GAAGs7Y,GAAE7pX,KAAK9xB,KAAKsL,GAAEjL,EAAEiE,GAAEwgY,GAAGxgY,GAAEygY,GAAGzgY,GAAEo7Z,GAAGp7Z,GAAEqoa,GAAGroa,GAAEm7Z,GAAGn7Z,GAAEsoa,IAAIx6Z,GAAE2E,GAAE+a,KAAK9xB,MAAM6/C,GAAE/tB,KAAK9xB,KAAKF,KAAI+/C,GAAE,SAASv0C,IAAG,OAAOA,QAAO,SAAStL,KAAKwzX,IAAIn7V,SAASg6X,IAAI,KAAK,UAAU,OAAOryZ,KAAKwzX,IAAIn7V,SAASg6X,IAAI,OAAOt7Y,GAAE,WAAW/W,KAAKwzX,IAAIygB,QAAQjzY,GAAE,SAASsK,GAAEjL,GAAGL,KAAKwzX,IAAIn7V,SAASg6X,IAAIhuZ,GAAEiH,IAAG,IAAIjC,GAAEhJ,GAAG,OAAO+R,GAAE,SAAS9G,IAAG,IAAIjL,EAAE,OAAOiL,GAAE4tB,WAAW,YAAY,MAAM74B,EAAE,QAAQ,UAAU,SAASA,EAAE,SAAS,MAAqB,QAAgBA,EAAE,OAAO,IAAI6R,GAAElS,KAAKgqa,IAAI9gZ,UAAUwhZ,aAAa,IAAIpxY,GAAEhuB,GAAE6qB,EAAE7qB,GAAEgwB,IAAIy2R,GAAE/xT,KAAKgqa,IAAI9gZ,UAAU0iZ,YAAYvna,GAAE,IAAInD,GAAEmD,IAAGA,IAAGA,GAAEA,GAAEoiY,SAAS10E,GAAEqQ,YAAYqkE,SAAS10E,GAAEg6G,OAAOtlC,SAAS10E,GAAE91L,OAAO,QAAQ5yH,GAAEvJ,GAAEE,KAAKwzX,IAAIs0C,kBAAkBx8Z,GAAE2tB,MAAM7mB,GAAEpS,KAAKgqa,IAAI9gZ,UAAU8iZ,iBAAiB,IAAIxyZ,GAAElO,GAAE6qB,EAAE7qB,GAAEgwB,EAAEx7B,GAAE4B,EAAE5B,GAAE43V,IAAIz2V,GAAEoD,GAAE2na,iBAAiB,IAAIxyZ,GAAElO,GAAE6qB,EAAE7qB,GAAEgwB,EAAEx7B,GAAE43V,EAAE53V,GAAE4B,EAAE5B,GAAE43V,IAAIA,GAAEnlV,GAAEuf,KAAK9xB,KAAKiB,IAAGf,GAAE,GAAGH,GAAE,EAAEA,GAAE23V,GAAEhxV,OAAO3G,IAAG,GAAE,IAAKG,GAAE6K,QAAQ2sV,GAAE33V,MAAKG,GAAEqH,KAAKmwV,GAAE33V,KAAI,GAAGG,GAAE6I,QAAO,SAAUkja,WAAW,QAAQ3na,GAAEpE,GAAE,GAAGc,GAAEd,GAAEA,GAAEwG,OAAO,GAAGi1Y,GAAEr3Y,GAAEq3Y,GAAE36Y,GAAE,EAAE26Y,KAAI,CAAC,GAAG37Y,KAAKwzX,IAAIqkC,QAAQlc,IAAG,SAASquB,IAAIN,UAAUhja,OAAO,CAAC,IAAIsxV,GAAEh4V,KAAKo7N,KAAK/xN,GAAEwF,KAAKC,MAAMD,KAAKgjC,UAAU7xC,KAAKgqa,IAAIN,YAAY1pa,KAAKo7N,KAAKx7K,GAAEv2C,GAAErJ,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQmnY,GAAE,GAAG37Y,KAAKmsa,MAAMnrB,EAAElvX,KAAK9xB,KAAK,QAAO,GAAIA,KAAKo7N,KAAK48H,GAAE,IAAIhmV,GAAEnD,KAAKC,MAAMD,KAAKgjC,UAAUz/B,KAAI,GAAGJ,GAAE4tC,GAAE,CAAC5tC,IAAGhS,KAAKksa,MAAK,EAAGlsa,KAAKwzX,IAAIn7V,SAASC,SAAS9jB,QAAQmnY,GAAE,GAAG37Y,KAAKmsa,MAAM,GAAG,KAAK7ga,GAAE2wH,MAAM,CAAC,IAAI3gG,GAAEt7B,KAAKwzX,IAAIn7V,SAASo6X,cAAczyZ,KAAKwzX,IAAIx6V,YAAYsC,GAAEhwB,GAAE2wH,OAAOj8H,KAAKwzX,IAAIv6V,KAAK3tB,GAAE2tB,KAAKjnB,GAAEmkB,EAAEnkB,GAAEspB,EAAE,CAAC44V,MAAM5oX,GAAE4oX,MAAMh7V,MAAM74B,EAAEy4Z,cAAcxtZ,GAAEwtZ,cAAcpkZ,SAASpJ,GAAEoJ,WAAW,KAAKpJ,GAAE2wH,OAAOj8H,KAAKwzX,IAAIx6V,YAAYsC,QAAW,KAAKhwB,GAAE2wH,QAAO3gG,GAAEt7B,KAAKwzX,IAAIn7V,SAASo6X,cAAczyZ,KAAKwzX,IAAIx6V,YAAYsC,GAAEhwB,GAAE2wH,QAAOj8H,KAAKwzX,IAAIv6V,KAAK3tB,GAAE2tB,KAAK/mB,GAAEikB,EAAEn2B,KAAKksa,KAAKh6Z,GAAEopB,EAAEt7B,KAAKmsa,KAAK,CAACj4C,MAAM5oX,GAAE4oX,MAAMh7V,MAAM74B,EAAEy4Z,cAAcxtZ,GAAEwtZ,cAAcpkZ,SAASpJ,GAAEoJ,WAAW,KAAKpJ,GAAE2wH,OAAOj8H,KAAKwzX,IAAIx6V,YAAYsC,KAAK/5B,EAAE,SAAS+J,GAAEjL,EAAE6R,GAAE6/S,IAAG7/S,GAAEA,IAAG,EAAE6/S,GAAEA,IAAG,EAAE/xT,KAAKwzX,IAAIn7V,SAASg6X,IAAIhuZ,GAAEiH,GAAE4G,IAAG,IAAI7I,GAAEhJ,EAAE0xT,IAAG,OAAOtwT,GAAE,SAAS6J,GAAEjL,EAAE6R,IAAG,OAAOlS,KAAKwzX,IAAI+lC,MAAMjuZ,GAAEjL,EAAE6R,GAAE,KAAK,OAAOypY,GAAE,SAASrwY,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,IAAGpS,KAAKwzX,IAAIn7V,SAASg6X,IAAI,CAACpxZ,GAAEy2V,GAAExlV,GAAE5G,KAAIrK,GAAEf,GAAE6xT,GAAE1xT,IAAIY,GAAEy2V,GAAErzV,GAAEiH,KAAIrK,GAAEf,GAAEmJ,GAAEhJ,IAAIY,GAAEy2V,GAAE53V,GAAEwL,KAAIrK,GAAEf,GAAEkS,GAAE/R,IAAI,KAAKinC,KAAK,OAAO0wT,GAAE,SAAS1sV,GAAEjL,EAAE6R,GAAE6/S,IAAG,IAAI1tT,GAAE,EAAE4qB,KAAKypY,GAAGrvZ,GAAEhJ,GAAGgJ,GAAEhF,IAAGA,GAAEgF,MAAKA,IAAGhF,IAAG,IAAIvE,GAAEoS,IAAGpS,GAAEuE,IAAGA,GAAEvE,MAAKA,IAAGuE,IAAG,QAAQ+N,GAAE,GAAGnR,GAAEguB,KAAKypY,GAAG,EAAEhhE,GAAE3lC,IAAE,EAAG,EAAE7xT,GAAEG,EAAEN,GAAEkvB,KAAK45C,IAAIxkE,GAAE4qB,KAAKshF,IAAIzwG,GAAEuJ,KAAI,KAAKtJ,IAAG,CAAC,IAAIuE,GAAEpE,GAAEw3V,GAAEzoU,KAAK45C,IAAI9oE,GAAEkB,IAAGmR,GAAE7K,KAAKyK,GAAE8f,KAAK9xB,KAAKsL,GAAEpL,GAAEoE,KAAIvE,IAAGkvB,KAAKshF,IAAIjsG,GAAEpE,IAAGA,GAAEoE,GAAE,OAAO8N,IAAGJ,GAAE,SAAS1G,GAAEjL,EAAE6R,IAAG,IAAI6/S,IAAG7/S,GAAE7R,GAAG,EAAEgE,GAAEiH,GAAE2jB,KAAK0pY,IAAI5mG,IAAG1oT,GAAEiC,GAAE2jB,KAAK2pY,IAAI7mG,IAAGjyT,GAAEuE,GAAE+N,IAAG/I,GAAEpI,GAAEnB,GAAEA,GAAEsS,GAAEA,GAAEslV,GAAEz2V,GAAEnB,GAAEuE,GAAE+N,GAAE/I,GAAEnJ,GAAE,EAAE,GAAG+uB,KAAKoyT,KAAK,EAAEpgV,GAAEy2V,IAAGA,KAAI53V,GAAEuJ,GAAE+I,GAAE/N,IAAGtE,GAAED,GAAEI,GAAEkS,GAAE9N,GAAE8N,GAAElS,GAAEJ,GAAEkB,GAAEjB,GAAE47Y,IAAGr3Y,GAAE0zV,GAAEjmC,GAAE1xT,EAAE2R,GAAEid,KAAK0pY,IAAI3gE,IAAG18T,GAAErM,KAAK2pY,IAAI5gE,IAAG,MAAM,CAACylB,GAAGnyW,GAAE2jB,KAAK0pY,IAAIt4Z,GAAG88W,GAAG7xW,GAAE2jB,KAAK2pY,IAAIv4Z,GAAGykY,GAAG/kY,GAAEiS,GAAE1N,GAAEg3B,GAAEypW,GAAGhlY,GAAEu7B,GAAEh3B,GAAE0N,GAAE0tZ,GAAG1+Z,GAAEgR,GAAE2pY,GAAErgX,GAAEqxY,GAAG3ra,GAAEs6B,GAAEqgX,GAAE3pY,GAAEytZ,GAAGn0Z,GAAE2jB,KAAK0pY,IAAIzmZ,IAAG06Z,GAAGtha,GAAE2jB,KAAK2pY,IAAI1mZ,MAAKylV,GAAE,SAASrsV,IAAG,OAAO,IAAIA,GAAE2jB,KAAKypY,IAAIp9X,GAAE,SAAShwB,IAAG,OAAOA,GAAE2jB,KAAKypY,GAAG,KAAKh3Z,GAAE,SAAS4J,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,IAAIvJ,GAAEwL,GAAE,IAAI4G,GAAE5G,IAAG8G,GAAE/R,EAAE,IAAI0xT,GAAE1xT,GAAGY,GAAEoD,GAAE,IAAI6N,GAAE7N,IAAGqzV,GAAEruV,GAAE,IAAI0oT,GAAE1oT,IAAGnJ,GAAE+uB,KAAK45C,IAAIv9D,GAAEjH,GAAEvE,GAAEmB,IAAGlB,GAAEkvB,KAAK0J,IAAIrtB,GAAEjH,GAAEvE,GAAEmB,IAAGqD,GAAE2qB,KAAK45C,IAAIxoE,EAAEgJ,GAAE+I,GAAEslV,IAAG12V,GAAEiuB,KAAK0J,IAAIt4B,EAAEgJ,GAAE+I,GAAEslV,IAAG,OAAO,IAAIl+U,GAAEtZ,GAAEoE,GAAEvE,GAAEG,GAAEc,GAAEsD,KAAI9C,GAAE,SAAS8J,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,IAAG,QAAQnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,GAAE26Y,GAAE3jD,GAAEhmV,GAAEspB,GAAEh6B,GAAEI,GAAEF,GAAE20B,GAAEjkB,GAAE5G,GAAEw0C,GAAEiyQ,GAAE1xT,EAAE8R,GAAE9N,GAAE6N,GAAEkD,GAAE/L,GAAE0oT,GAAElyQ,GAAE//C,GAAEuE,GAAE0S,GAAE3E,GAAE/I,GAAEkJ,GAAE,EAAEA,GAAE,GAAGA,KAAIylV,IAAGh3V,IAAG02V,GAAEpsV,IAAGrK,GAAEsR,GAAE,IAAI4jB,IAAGl1B,KAAIlB,GAAEmS,GAAEjR,GAAEkR,IAAGulV,KAAIz2V,IAAGlB,GAAEkB,IAAGoD,GAAEpD,GAAE4+C,GAAE9/C,IAAGiB,IAAGgR,IAAG2pY,IAAGz7Y,GAAEG,EAAEY,GAAE6+C,IAAG7+C,KAAIqD,GAAEytT,GAAE9wT,GAAEmU,IAAGlV,KAAIe,IAAGqD,GAAErD,IAAGoI,GAAEpI,GAAE8V,GAAEzS,IAAGq3Y,IAAGn6Y,GAAE,OAAME,GAAE45B,GAAE08T,GAAE12V,GAAE0Q,KAAIspB,GAAErM,KAAK45C,IAAIvtC,GAAE08T,IAAG12V,GAAE2tB,KAAK45C,IAAIvnE,GAAE0Q,IAAGtQ,GAAEutB,KAAK0J,IAAIj3B,GAAEs2V,IAAG/oU,KAAK0J,IAAIn3B,GAAEwQ,KAAI,OAAO,IAAIwH,GAAEyV,KAAKC,MAAMoM,IAAGrM,KAAKC,MAAM5tB,IAAG2tB,KAAKC,MAAMxtB,GAAE45B,IAAGrM,KAAKC,MAAM1tB,GAAEF,MAAKg4B,GAAE,SAAShuB,GAAEjL,GAAG,IAAI6R,GAAE5G,IAAG,EAAEmB,OAAOo8E,eAAe7oF,KAAK,IAAI,CAAC6vZ,YAAW,EAAGtvZ,IAAI,WAAW,OAAO2R,IAAG82H,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAK4G,GAAEu/B,WAAWnmC,QAAO,IAAIymT,GAAE1xT,GAAG,EAAEoM,OAAOo8E,eAAe7oF,KAAK,IAAI,CAAC6vZ,YAAW,EAAGtvZ,IAAI,WAAW,OAAOwxT,IAAG/oL,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKymT,GAAEtgR,WAAWnmC,QAAO,IAAIjH,GAAE,KAAK,OAAOoI,OAAOo8E,eAAe7oF,KAAK,OAAO,CAAC6vZ,YAAW,EAAGtvZ,IAAI,WAAW,OAAO8D,IAAG2kI,IAAI,SAAS19H,IAAGjH,GAAEiH,GAAEwC,cAAc9N,MAAMwZ,GAAE,SAASlO,GAAEjL,EAAE6R,GAAE6/S,IAAGz4R,GAAExH,KAAK9xB,KAAKsL,GAAEjL,GAAGL,KAAKqtD,KAAK,OAAO,IAAIhpD,GAAE6N,IAAG,EAAEzF,OAAOo8E,eAAe7oF,KAAK,IAAI,CAAC6vZ,YAAW,EAAGtvZ,IAAI,WAAW,OAAO8D,IAAG2kI,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKjH,GAAEotC,WAAWnmC,QAAO,IAAIjC,GAAE0oT,IAAG,EAAE,OAAOtlT,OAAOo8E,eAAe7oF,KAAK,IAAI,CAAC6vZ,YAAW,EAAGtvZ,IAAI,WAAW,OAAO8I,IAAG2/H,IAAI,SAAS19H,IAAG87B,MAAM97B,MAAKjC,GAAEooC,WAAWnmC,QAAOtL,MAAMkB,GAAE,SAASoK,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,IAAIvJ,GAAE,GAAG,OAAO2M,OAAOo8E,eAAe7oF,KAAK,KAAK,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,MAAM,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,MAAM,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,KAAK,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,KAAK,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,KAAK,CAACO,IAAI,WAAW,OAAOT,GAAE,IAAIkpI,IAAI,SAAS19H,IAAGxL,GAAE,GAAGmvB,KAAKC,MAAM,IAAI5jB,IAAG,OAAOmB,OAAOo8E,eAAe7oF,KAAK,WAAW,CAACO,IAAI,WAAW,OAAO0uB,KAAK49Y,MAAM7sa,KAAK6ra,IAAI7ra,KAAK8ra,OAAOr/Z,OAAOo8E,eAAe7oF,KAAK,SAAS,CAACO,IAAI,WAAW,OAAOP,KAAK4ra,YAAY3vS,MAAM6vS,MAAMr/Z,OAAOo8E,eAAe7oF,KAAK,SAAS,CAACO,IAAI,WAAW,OAAOP,KAAK4ra,YAAY3vS,MAAMo4O,MAAM5nW,OAAOo8E,eAAe7oF,KAAK,aAAa,CAACO,IAAI,WAAW,OAAO,SAASura,IAAK,SAASgB,KAAM,SAASjB,KAAM,SAASx3D,IAAK,SAAS04D,IAAI,SAAS36D,EAAT,IAAmBpyW,KAAK8ra,GAAG1kY,MAAM97B,IAAG,EAAEA,GAAEtL,KAAK8sa,IAAI1lY,MAAM/mC,GAAG,EAAEA,EAAEL,KAAK6ra,IAAIzkY,MAAMl1B,IAAG,EAAEA,GAAElS,KAAKq0W,GAAGjtU,MAAM2qR,IAAG,EAAEA,GAAE/xT,KAAK+sa,GAAG3lY,MAAM/iC,IAAG,EAAEA,GAAErE,KAAKoyW,GAAGhrU,MAAM/9B,IAAG,EAAEA,GAAErJ,MAAMkB,GAAE2wB,UAAU40W,SAAS,SAASn7X,IAAG,IAAIjL,EAAEiL,GAAEwga,GAAG9ra,KAAK8ra,GAAGxga,GAAEwha,IAAI9sa,KAAK6ra,IAAI35Z,GAAE5G,GAAEwga,GAAG9ra,KAAK8sa,IAAIxha,GAAEwha,IAAI9sa,KAAKq0W,GAAGtiD,GAAEzmT,GAAEuga,IAAI7ra,KAAK8ra,GAAGxga,GAAE+oW,GAAGr0W,KAAK6ra,IAAIxna,GAAEiH,GAAEuga,IAAI7ra,KAAK8sa,IAAIxha,GAAE+oW,GAAGr0W,KAAKq0W,GAAGhrW,GAAEiC,GAAEyha,GAAG/sa,KAAK8ra,GAAGxga,GAAE8mW,GAAGpyW,KAAK6ra,IAAI7ra,KAAK+sa,GAAGjta,GAAEwL,GAAEyha,GAAG/sa,KAAK8sa,IAAIxha,GAAE8mW,GAAGpyW,KAAKq0W,GAAGr0W,KAAKoyW,GAAG,OAAO,IAAIlxW,GAAEb,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,KAAIoB,GAAE2wB,UAAU+5Y,UAAU,WAAW,IAAItga,GAAEtL,KAAK8ra,GAAGzra,EAAEL,KAAK8sa,IAAI56Z,GAAElS,KAAK6ra,IAAI95G,GAAE/xT,KAAKq0W,GAAGhwW,GAAErE,KAAK+sa,GAAG1ja,GAAErJ,KAAKoyW,GAAGtyW,GAAEmvB,KAAKoyT,KAAK/1U,GAAEA,GAAEjL,EAAEA,GAAG+R,IAAG9G,IAAGxL,IAAGoS,IAAG7R,GAAGP,IAAGiyT,GAAE7/S,IAAG5G,GAAE8G,GAAE2/S,IAAG1xT,EAAE+R,GAAE,IAAInR,GAAEguB,KAAKoyT,KAAKnvU,GAAEA,GAAE6/S,GAAEA,IAAG,OAAO3/S,IAAGnR,GAAEqK,IAAGymT,IAAG9wT,IAAGZ,GAAG6R,IAAGjR,MAAKqK,IAAGA,GAAEjL,GAAGA,EAAE+R,IAAGA,GAAEtS,IAAGA,IAAG,CAACm8H,MAAM,IAAI/6H,GAAEpB,GAAE,EAAE,EAAEmB,GAAE,EAAE,GAAGmhU,UAAU,IAAIlhU,GAAE,EAAE,EAAE,EAAE,EAAEmD,GAAEgF,IAAG66X,OAAO,IAAIhjY,GAAEoK,GAAEjL,GAAGA,EAAEiL,GAAE,EAAE,GAAGyga,KAAK,IAAI7qa,GAAE,EAAE,EAAEkR,GAAE,EAAE,EAAE,KAAKlR,GAAE2wB,UAAU64Y,aAAa,SAASp/Z,IAAG,IAAIjL,EAAEiL,GAAE6qB,EAAEn2B,KAAK8ra,GAAGxga,GAAEgwB,EAAEt7B,KAAK6ra,IAAI7ra,KAAK+sa,GAAG76Z,GAAE5G,GAAE6qB,EAAEn2B,KAAK8sa,IAAIxha,GAAEgwB,EAAEt7B,KAAKq0W,GAAGr0W,KAAKoyW,GAAG,OAAO,IAAI94U,GAAEj5B,EAAE6R,KAAIhR,GAAE2wB,UAAUm6Y,iBAAiB,SAAS1ga,IAAG,IAAIjL,EAAEL,KAAK0qa,aAAap/Z,IAAG4G,GAAElS,KAAK0qa,aAAa,IAAIpxY,GAAEhuB,GAAE6qB,EAAE7qB,GAAE5J,EAAE4J,GAAEgwB,EAAEhwB,GAAEosV,IAAI,OAAO,IAAIl+U,GAAEnZ,EAAE81B,EAAE91B,EAAEi7B,EAAEppB,GAAEikB,EAAE91B,EAAE81B,EAAEjkB,GAAEopB,EAAEj7B,EAAEi7B,IAAIp6B,GAAE2wB,UAAUsgI,MAAM,WAAW,IAAI7mJ,GAAEtL,KAAK8ra,GAAGzra,EAAEL,KAAK8sa,IAAI56Z,GAAElS,KAAK6ra,IAAI95G,GAAE/xT,KAAKq0W,GAAGhwW,GAAErE,KAAK+sa,GAAG1ja,GAAErJ,KAAKoyW,GAAG,OAAO,IAAIlxW,GAAEoK,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,KAArz0B,CAA0z0BouV,GAAGk9D,IAAI,oBAAoBnE,MAAMA,MAAM,oBAAoBv2X,QAAQA,QAAQ,oBAAoBw2X,QAAQA,QAAQnf,SAAS,kDAATA,IAA+DA,SAAS,cAATA,IAQx+0BxxY,EAAE23V,GAAGk9D,IAAItrZ,EAAE,SAASiC,IAAG,IAAIymT,GAAE1xT,GAAE6R,GAAE7N,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAE,IAAI,eAAegjB,KAAK5X,IAAGjL,GAAE,GAAG6R,GAAE,EAAE7N,IAAGiH,IAAGymT,GAAE,WAAW95S,MAAM3M,GAAE5E,OAAO,GAAG,IAAIA,OAAOwL,GAAE7N,GAAE6N,IAAG,EAAE,KAAK7I,IAAGiC,GAAE0tC,WAAW9mC,KAAI,KAAK5G,GAAE0tC,WAAW9mC,GAAE,IAAI,KAAK5G,GAAE0tC,WAAW9mC,GAAE,IAAI,GAAG5G,GAAE0tC,WAAW9mC,GAAE,KAAKpS,IAAGuJ,KAAIA,KAAIA,KAAIA,IAAGA,IAAGnJ,GAAEmJ,GAAE,KAAK,KAAKquV,GAAEruV,GAAE,KAAK,KAAKpI,GAAEoI,GAAE,KAAK,KAAK+I,GAAE/I,GAAE,KAAK,IAAI,GAAGhJ,GAAEkH,KAAKzH,GAAE,GAAGsS,GAAE,GAAGnR,GAAE,GAAGy2V,GAAE,GAAGx3V,GAAE,KAAKG,GAAEkH,KAAK,KAAK,OAAO,SAAS+D,GAAEjL,IAAG,QAAQ6R,GAAE6/S,GAAErrT,OAAO,EAAEwL,GAAEA,KAAI5G,GAAE+pF,MAA3C,CAAkDh1F,IAAG84C,OAAOC,aAAa0vB,MAAM3vB,OAAO94C,IAAG,MAAM+R,EAAE,SAAS9G,IAAG,IAAIymT,GAAE1xT,GAAE6R,GAAE7N,GAAEgF,GAAEvJ,GAAEq5C,OAAO/mC,GAAE,SAASnR,GAAE,aAAay2V,GAAE,QAAQx3V,GAAE,UAAU,IAAIoL,GAAEosV,KAAG,GAAIpsV,GAAEA,GAAEosV,IAAG,GAAE,GAAIx3V,IAAG,MAAM,IAAIA,IAAG,IAAI,SAASgS,GAAE,GAAG7N,GAAE,EAAEgF,IAAGiC,IAAGymT,GAAE,QAAQ2lC,IAAGpsV,GAAE8G,IAAG,GAAG,IAAIA,IAAG/N,GAAEgF,GAAEhF,IAAG,EAAEhE,GAAE,UAAUiL,GAAErK,IAAGoD,IAAG,IAAI,QAAQiH,GAAErK,IAAGoD,GAAE,GAAG,IAAI,MAAMiH,GAAErK,IAAGoD,GAAE,GAAG,IAAI,IAAIiH,GAAErK,IAAGoD,GAAE,GAAG,KAAKiH,GAAErK,IAAGoD,GAAE,GAAG,IAAI6N,GAAE3K,KAAK,IAAIlH,IAAG,GAAG,IAAIA,IAAG,GAAG,IAAIA,IAAG,EAAE,IAAIA,IAAG,OAAO,SAASiL,GAAEjL,IAAG,QAAQ6R,GAAE6/S,GAAE3/S,IAAG,EAAEF,GAAEA,KAAI5G,GAAE+pF,MAAvC,CAA8CnjF,IAAGpS,GAAEs5C,aAAa0vB,MAAMhpE,GAAEoS,KAAIwlV,EAAE,SAASpsV,IAAG,QAAQjL,GAAE,GAAG6R,GAAE,EAAEA,GAAE5G,GAAE5E,OAAOwL,IAAG,EAAE7R,KAAI,IAAIiL,GAAE0tC,WAAW9mC,IAAGpE,SAAS,KAAKmK,OAAM,GAAI,OAAO5X,GAAG,KAAKH,EAAE,SAASoL,IAAG,IAAIjL,GAAE,IAAIioC,OAAO,uBAAuB,IAAG,KAAMh9B,GAAEA,GAAEi9B,QAAQ,MAAM,KAAKx9B,QAAQ,OAAOO,GAAEA,GAAEk6E,OAAO,EAAEl6E,GAAEP,QAAQ,OAAOO,GAAE5E,OAAO,IAAI4E,IAAG,MAAK,OAAO4X,KAAK5X,IAAG,MAAM,GAAG,QAAQ4G,GAAE,GAAG6/S,GAAE,EAAEA,GAAEzmT,GAAE5E,OAAOqrT,IAAG,EAAE7/S,IAAGinC,OAAOC,aAAa,MAAM9tC,GAAEymT,IAAGzmT,GAAEymT,GAAE,KAAK,OAAO7/S,IAAGnS,EAAE,SAASuL,GAAEjL,IAAGA,GAAEoM,OAAO6D,OAAO,CAAC08Z,UAAU,EAAExhD,OAAO,EAAEy6C,iBAAiB,EAAE33Z,QAAQ,GAAGjO,IAAG,QAAQ6R,GAAE6/S,GAAE1tT,GAAE,GAAGgF,GAAEiC,GAAE5E,OAAO2C,MAAKhF,GAAEgF,IAAGiC,GAAE0tC,WAAW3vC,IAAG,OAAO6I,GAAEpS,EAAEmta,UAAUp2X,KAAKvrC,KAAIymT,GAAE,IAAIm7G,SAAS,IAAIh1E,OAAO,IAAI/qS,WAAW9oD,KAAIiH,GAAEymT,GAAEof,SAAS9sU,GAAE,IAAI8oD,WAAW7hD,GAAE5E,OAAO,IAAIsiI,IAAI,IAAI77E,WAAW,CAAC,IAAI,OAAO9oD,GAAE2kI,IAAI19H,GAAE,GAAGjH,GAAE2kI,IAAI,IAAI77E,WAAW,CAAC,IAAIj7C,GAAEA,IAAG,EAAE,IAAIA,IAAG,GAAG,IAAIA,IAAG,GAAG,MAAM5G,GAAE5E,OAAO,GAAKyyC,OAAOC,aAAa0vB,MAAM,KAAKzkE,KAAIvE,EAAE80Z,qBAAqB,SAAStpZ,GAAEjL,IAAG,IAAI6R,GAAE,EAAE6/S,GAAEzmT,IAAG,GAAGjH,GAAE,GAAG,IAAI,iBAAiBhE,GAAEA,IAAG,MAAMA,GAAE,CAACA,KAAI6R,GAAE,EAAEA,GAAE7R,GAAEqG,OAAOwL,IAAG,EAAE,OAAO7R,GAAE6R,SAAQ,oBAAoB,iBAAiB6/S,GAAE3/S,EAAE2/S,IAAG1tT,GAAEkD,KAAK,kBAAkB,UAAU,oBAAoB,iBAAiBwqT,GAAE1oT,EAAE0oT,IAAG1tT,GAAEkD,KAAK,kBAAkB,UAAU,qBAAqB,kBAAkBwqT,GAAE7xT,EAAE6xT,IAAG1tT,GAAEkD,KAAK,mBAAmB,UAAU,qBAAqB,kBAAkBwqT,GAAE2lC,EAAE3lC,IAAG1tT,GAAEkD,KAAK,mBAAmB,UAAU,kBAAkB,eAAewqT,GAAEhyT,EAAEgyT,IAAG1tT,GAAEkD,KAAK,gBAAgB,cAAc,KAAK,gBAAgBlH,GAAE6R,IAAG,uBAAuB,MAAM,CAAC9I,KAAK2oT,GAAE8iG,aAAaxwZ,GAAEggI,UAAU/8F,KAAK,QAQ/uEyqR,EAAE0lC,GAAGk9D,KAAK2N,SAAS,SAASh3Z,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1xT,GAAEA,KAAG,EAAG6R,GAAEA,IAAG,WAAU,EAAG,IAAI6/S,GAAE,SAASzmT,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE,IAAIoN,eAAe96T,GAAE,GAAGgF,GAAE,EAAEvJ,GAAE,SAASwL,IAAG,IAAIjL,GAAEiL,GAAE5E,OAAOwL,GAAEinC,OAAOC,aAAa,IAAI/vC,GAAE,EAAEA,GAAEhJ,GAAEgJ,IAAG,EAAEhF,GAAEkD,KAAK2K,GAAE,IAAI5G,GAAE0tC,WAAW3vC,MAAK,OAAOhF,GAAEijC,KAAK,KAAK,GAAGyqR,GAAEvoT,KAAK,MAAM8B,IAAGjL,IAAG0xT,GAAEo7G,iBAAiB,uCAAsC,SAASp7G,GAAEx8N,OAAO,WAAW,OAAOz1F,GAAEE,KAAKota,gBAAgBr7G,GAAEl6E,KAAK,MAAM,SAAQl5K,OAAO,OAAOt+D,GAAEP,GAAEiyT,GAAEq7G,mBAAc,EAAO1+X,QAAQ6F,KAAK,wBAAwBjpC,GAAE,KAAvZ,CAA6ZA,GAAEjL,GAAc,CAAdA,MAASiL,IAAGymT,QAAE,EAAO,OAAOA,IAAGA,EAAEs7G,cAAct7G,EAAEuwG,SAQzhBj+Z,EAAEozV,GAAGk9D,IAAIrwZ,EAAE,oBAAoB21B,QAAQA,QAAQ,oBAAoBw2X,QAAQA,OAAOz4D,EAAE,SAAS1sV,IAAG,IAAIjL,GAAEiS,EAAGhH,IAAG,MAAM,iBAAgB,YAAY,eAAcA,cAAa6tC,OAAO,SAAS,eAAc7tC,cAAaoc,OAAO,SAAS,iBAAgBpc,cAAagmY,SAAS,WAAWhmY,IAAGA,GAAEzL,cAAcwQ,MAAM,QAAQ/E,IAAG,OAAMk8X,SAAS,UAAU,cAAa,SAAS,WAAWx1X,EAAE,SAAS1G,GAAEjL,IAAG,IAAI6R,GAAEkhC,SAASC,cAAc/nC,IAAG,GAAGjL,GAAE08T,YAAY7qT,GAAE6qT,UAAU18T,GAAE08T,WAAW18T,GAAE2lC,UAAU,CAAC9zB,GAAE8zB,UAAU3lC,GAAE2lC,UAAU,QAAQ+rR,GAAE7/S,GAAE6zB,qBAAqB,UAAU1hC,GAAE0tT,GAAErrT,OAAO,EAAErC,KAAI,KAAK0tT,GAAE1tT,IAAG0la,WAAWzrX,YAAYyzQ,GAAE1tT,KAAI,QAAQgF,MAAKhJ,GAAE28C,MAAM9qC,GAAE8qC,MAAM3zC,IAAGhJ,GAAE28C,MAAM3zC,IAAG,OAAO6I,OAAMopB,EAAE,YAAWj7B,IAAG,IAAI6R,GAAEzF,OAAO6D,OAAOhF,GAAE09E,QAAQ8yC,QAAQqgO,WAAWttV,KAAKC,MAAMD,KAAKgjC,UAAUvmC,GAAE+4G,YAAY0tM,GAAEzmT,GAAE09E,QAAQ8yC,QAAQqgO,UAAUjqV,IAAG,OAAU6/S,GAAEA,GAAEu7G,YAAY,EAAEhia,GAAE,EAAE,CAACA,MAAK09H,IAAI3oI,MAAKwxB,UAAUplB,OAAOi8E,OAAOozC,QAAQjqG,YAAYhyB,YAAYy7B,GAAG0tD,QAAQ,SAAS19E,GAAEjL,IAAG,OAAOiL,GAAEgV,UAAUjgB,IAAGi7B,EAAEzJ,UAAUvmB,IAAGgwB,EAAE+oF,SAAS,CAACu/C,KAAK,CAAC6jM,IAAI,KAAKhxU,UAAU,KAAKwiE,QAAQ,KAAK2uU,OAAO,KAAK2F,IAAI,KAAK/5C,IAAI,KAAKl7V,SAAS,KAAK04R,SAAS,WAAU,GAAIw8G,SAAS,CAACC,IAAI,EAAEz6F,MAAM,KAAK9gU,EAAE,EAAEulZ,MAAM,IAAIiW,IAAI,CAACnW,SAAS,WAAW5tR,OAAO,CAAC,EAAE,EAAE,EAAE,GAAGgkS,aAAY,EAAGx3Y,EAAE,EAAEmF,EAAE,EAAEsyY,YAAY,GAAGC,MAAM,KAAKvyY,EAAEzJ,UAAUglB,KAAK,SAASvrC,GAAEjL,IAAG,OAAOL,KAAKm8H,KAAK,WAAW,OAAO97H,GAAEA,IAAG,SAASiL,IAAG,OAAO0sV,EAAE1sV,SAAQ,SAAS,MAAM,aAAa,UAAU,MAAM,cAAawnC,SAASj7B,YAAY,SAAS,kBAAkB,MAAM,WAA5I,CAAwJvM,SAAQ,SAAS,OAAOtL,KAAKgpI,IAAI,CAACy+N,IAAIz1V,EAAE,MAAM,CAACg0B,UAAU16B,WAAU,UAAU,OAAOtL,KAAKgpI,IAAI,CAACy+N,IAAIn8V,SAAQ,SAAS,OAAOtL,KAAKgpI,IAAI,CAAC4+R,OAAOt8Z,SAAQ,MAAM,OAAOtL,KAAKgpI,IAAI,CAACukS,IAAIjia,aAAY,OAAOtL,KAAK4jC,MAAM,4BAA4BtI,EAAEzJ,UAAU4hH,GAAG,SAASnoI,IAAG,OAAOA,QAAO,YAAY,OAAOtL,KAAK8ta,kBAAkB,SAAS,OAAO9ta,KAAK+ta,eAAe,MAAM,OAAO/ta,KAAKgua,YAAY,MAAM,OAAOhua,KAAKiua,gBAAgB,OAAOjua,KAAK4jC,MAAM,qBAAqBtI,EAAEzJ,UAAUi8Y,YAAY,WAAW,OAAO9ta,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAK6jM,KAAKznW,KAAK4jC,MAAM,uCAAuC,WAAW,OAAO5jC,KAAK4jK,KAAKtrI,UAAUt4B,KAAKmua,iBAAiBhyS,KAAK,WAAW,IAAI7wH,GAAE,CAACmoC,SAAS,WAAW5oB,QAAQ,eAAetW,MAAM0a,KAAK0J,IAAI34B,KAAK4jK,KAAK6jM,IAAI+6D,YAAYxia,KAAK4jK,KAAK6jM,IAAIpgR,YAAYrnF,KAAK4jK,KAAK6jM,IAAIn9D,aAAa,KAAKnyQ,KAAK,EAAEC,MAAM,EAAEH,IAAI,EAAE0xG,OAAO,OAAOrvC,gBAAgB,SAASj6F,GAAE,YAAWA,GAAE6R,IAAG,QAAQ6/S,GAAE,OAAMy1E,SAASp0V,SAASg7X,eAAe/ta,GAAEkyC,WAAWlyC,GAAEgua,WAAU,GAAIhqa,GAAEhE,GAAEo2C,WAAWpyC,GAAEA,GAAEA,GAAEiqa,aAAY,IAAKp8Z,IAAG,OAAMs1X,UAAU,cAAa10V,UAAUi/Q,GAAEp7Q,YAAYrrC,GAAEjH,GAAE6N,KAAI,OAAO,OAAMs1X,WAAW,WAAWnnY,GAAEyyC,UAAUi/Q,GAAEx9S,MAAMlU,GAAEkU,MAAMw9S,GAAEv9S,OAAOnU,GAAEmU,OAAOu9S,GAAE0wG,WAAW,MAAMpuB,UAAUh0Y,GAAE,EAAE,IAAI,gBAAeyyC,UAAU,cAAaA,WAAWi/Q,GAAE9lT,MAAM5L,GAAE4L,OAAO8lT,GAAEyB,iBAAiB,OAAO,WAAWzB,GAAEzuK,UAAUjjJ,GAAEijJ,UAAUyuK,GAAE8yF,WAAWxkZ,GAAEwkZ,aAAY,IAAK9yF,GAAzd,CAA4d/xT,KAAK4jK,KAAK6jM,IAAIznW,KAAK0ta,IAAIE,YAAYW,mBAAmB,SAASlua,GAAEswP,UAAUrlP,GAAEkJ,OAAOya,KAAK0J,IAAIya,SAAS8K,KAAKmsP,aAAaj3P,SAAS8K,KAAKkpC,aAAah0C,SAAS8hV,gBAAgB/tS,aAAa/zC,SAAS8hV,gBAAgB7qF,aAAaj3P,SAAS8hV,gBAAgB9tS,cAAc,MAAMpnF,KAAK4jK,KAAK3qE,QAAQjnF,EAAE,MAAM,CAAC+qT,UAAU,oBAAoB//Q,MAAM,CAACvJ,SAAS,QAAQg5C,SAAS,SAASirS,OAAO,IAAIv/V,KAAK,YAAYC,MAAM,EAAEF,OAAO,EAAED,IAAI,KAAKj4B,KAAK4jK,KAAKntI,UAAUzkB,EAAE,MAAM,CAAC+qT,UAAU,sBAAsB//Q,MAAM1xC,KAAItL,KAAK4jK,KAAKntI,UAAUkgB,YAAYt2C,IAAGL,KAAK4jK,KAAKntI,UAAUggB,WAAWE,YAAY3kC,EAAE,MAAM,CAACgrC,MAAM,CAAC2lD,MAAM,OAAOy9P,OAAO,qBAAqBz2N,OAAO,EAAE+gB,QAAQ,EAAEl2I,OAAO,MAAMxU,KAAK4jK,KAAKntI,UAAUumB,MAAMwxX,MAAM,OAAOxua,KAAK4jK,KAAK3qE,QAAQtiD,YAAY32C,KAAK4jK,KAAKntI,WAAW2c,SAAS8K,KAAKvH,YAAY32C,KAAK4jK,KAAK3qE,SAASj5F,KAAK4jK,KAAKntI,UAAUggB,WAAWuG,MAAMvJ,SAAS,WAAWzzC,KAAK4jK,KAAKntI,UAAUjiB,OAAOya,KAAK0J,IAAI34B,KAAK4jK,KAAKntI,UAAUggB,WAAW0wC,aAAannF,KAAK4jK,KAAKntI,UAAUggB,WAAW4zP,aAAarqS,KAAK4jK,KAAKntI,UAAUggB,WAAW2wC,cAAc,QAAQ9rD,EAAEzJ,UAAUk8Y,SAAS,WAAW,IAAIzia,GAAE,CAAC,WAAW,OAAO8nC,SAAS8K,KAAKh+B,SAASlgB,KAAK4jK,KAAKntI,YAAYz2B,KAAK8ta,gBAAgB,OAAO9ta,KAAKkua,SAAS5ia,IAAG6wH,KAAK,WAAW,IAAI7wH,GAAEmB,OAAO6D,OAAO,GAAGtQ,KAAK0ta,IAAIE,aAAa,UAAUtia,GAAEmja,WAAWzua,KAAK0ua,sBAAsB,OAAOd,YAAY5ta,KAAK4jK,KAAKntI,UAAUnrB,MAAK6wH,KAAK,SAAS7wH,KAAItL,KAAK0ta,IAAIE,YAAYa,YAAY,WAAU,GAAInja,IAAGtL,KAAK4jK,KAAKgkQ,OAAOt8Z,GAAE8nC,SAAS8K,KAAKI,YAAYt+C,KAAK4jK,KAAK3qE,YAAY39D,EAAEzJ,UAAU88Y,YAAY,WAAW,IAAIrja,GAAE,CAAC,WAAW,OAAO8nC,SAAS8K,KAAKh+B,SAASlgB,KAAK4jK,KAAKntI,YAAYz2B,KAAK8ta,gBAAgB,OAAO9ta,KAAKkua,SAAS5ia,IAAG6wH,KAAK,WAAW,IAAI7wH,GAAEtL,KAAK0ta,IAAIG,MAAMxta,GAAEoM,OAAO6D,OAAO,CAACs+Z,OAAM,EAAGC,YAAW,EAAGv0U,gBAAgB,UAAUw0U,aAAa,KAAKC,SAAQ,EAAGC,MAAM,KAAKC,iBAAgB,EAAGC,wBAAuB,EAAGC,SAAQ,GAAInva,KAAK0ta,IAAIE,aAAa,UAAUvta,GAAEoua,WAAWnja,GAAEo8Z,UAAUuE,YAAW,EAAG3ga,GAAEo8Z,UAAUwE,KAAKlsa,KAAK0ta,IAAIv3Y,EAAE7qB,GAAEo8Z,UAAUyE,KAAKnsa,KAAK0ta,IAAIpyY,EAAEj7B,GAAE+ua,aAAa/ua,GAAE+ua,cAAc,EAAE/ua,GAAE+ua,aAAa,MAAKA,aAAangZ,KAAK0J,IAAI34B,KAAK4jK,KAAKntI,UAAU0wD,aAAannF,KAAK4jK,KAAKntI,UAAU4zQ,aAAarqS,KAAK4jK,KAAKntI,UAAU2wD,cAAc/mF,GAAE+ua,aAAapva,KAAK0ua,sBAAsB,OAAOd,YAAY5ta,KAAK4jK,KAAKntI,UAAUp2B,MAAK87H,KAAK,SAAS7wH,KAAItL,KAAK0ta,IAAIE,YAAYa,YAAY,WAAU,GAAInja,IAAGtL,KAAK4jK,KAAKgkQ,OAAOt8Z,GAAE8nC,SAAS8K,KAAKI,YAAYt+C,KAAK4jK,KAAK3qE,YAAY39D,EAAEzJ,UAAUm8Y,MAAM,WAAW,OAAOhua,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAKgkQ,QAAQ5na,KAAK+ta,cAAc5xS,KAAK,WAAW,IAAI7wH,GAAEtL,KAAK4jK,KAAKgkQ,OAAOrF,UAAU,SAASvia,KAAK0ta,IAAIt4T,MAAM/nD,KAAKrtD,KAAK0ta,IAAIt4T,MAAMi6T,SAASrva,KAAK4jK,KAAK2pQ,IAAIn6X,SAASC,cAAc,OAAOrzC,KAAK4jK,KAAK2pQ,IAAI9lE,IAAIn8V,MAAKgwB,EAAEzJ,UAAUo8Y,MAAM,WAAW,OAAOjua,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK2ua,iBAAiBxyS,KAAK,WAAWn8H,KAAK4jK,KAAK4vN,IAAIxzX,KAAK4jK,KAAK4vN,KAAKxzX,KAAK0ta,IAAIG,SAASvyY,EAAEzJ,UAAUmI,OAAO,SAAS1uB,GAAEjL,GAAE6R,IAAG,MAAM,SAASA,GAAEA,IAAG,OAAO2F,eAAe,aAAYA,cAAc7X,KAAKsva,UAAUhka,GAAEjL,IAAGL,KAAKuva,UAAUjka,GAAEjL,KAAIi7B,EAAEzJ,UAAU09Y,UAAU,SAASjka,GAAEjL,IAAG,OAAOL,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAK4vN,KAAKxzX,KAAKiua,WAAW9xS,KAAK,WAAW,OAAOn8H,KAAK4jK,KAAK4vN,IAAIx5V,OAAO1uB,GAAEjL,OAAMi7B,EAAEzJ,UAAUy9Y,UAAU,SAAShka,GAAEjL,IAAG,OAAOL,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAK2pQ,KAAKvta,KAAKgua,WAAW7xS,KAAK,WAAW,OAAO7wH,cAAQ,MAAW,MAAM,OAAOtL,KAAK4jK,KAAK2pQ,QAAQ,oBAAoB,gBAAgB,OAAOvta,KAAK4jK,KAAK2pQ,IAAI9lE,QAAQ,cAAc,UAAU,OAAOr0T,SAAS+xB,SAAS7X,KAAKttD,KAAK4jK,KAAK2pQ,IAAI9lE,YAAY,KAAK,sBAAsBn8V,GAAE,0BAA0BgwB,EAAEzJ,UAAU68Y,oBAAoB,WAAW,IAAIpja,QAAE,MAAWsia,YAAY,OAAOtia,IAAGojC,QAAQ9K,MAAM,2BAA2Bt4B,IAAGgwB,EAAEzJ,UAAUkV,KAAK,SAASz7B,IAAG,GAAGtL,KAAK0ua,sBAAsB,OAAO1ua,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAK4vN,KAAKxzX,KAAKiua,WAAWjlS,IAAI19H,GAAE,CAACisZ,SAASjsZ,IAAG,MAAM6wH,KAAK,WAAWn8H,KAAK4jK,KAAK4vN,IAAIzsV,KAAK/mC,KAAK0ta,IAAInW,aAAaj8X,EAAEzJ,UAAU29Y,WAAW,SAASlka,IAAG,GAAGtL,KAAK0ua,sBAAsB,OAAO1ua,KAAKkua,SAAS,CAAC,WAAW,OAAOlua,KAAK4jK,KAAK4vN,KAAKxzX,KAAKiua,WAAW9xS,KAAK,WAAWn8H,KAAK4jK,KAAKotJ,SAAShxT,KAAK4jK,KAAK4vN,QAAQl4V,EAAEzJ,UAAUm3G,IAAI,SAAS3oI,IAAG,GAAG,aAAaA,IAAG,OAAOL,KAAK,IAAIsL,GAAEmB,OAAOC,KAAKrM,IAAG,IAAI2O,IAAI,SAAS1D,IAAG,GAAGA,MAAKgwB,EAAE+oF,SAASu/C,KAAK,OAAO,WAAW5jK,KAAK4jK,KAAKt4J,IAAGjL,GAAEiL,KAAI,OAAOA,QAAO,SAAS,OAAOtL,KAAKyva,UAAUv+S,KAAKlxH,KAAKK,GAAEspI,YAAY,QAAQ,OAAO,WAAW,OAAO3pI,KAAK0ta,IAAIG,MAAMxta,GAAEwta,MAAM7ta,KAAKmua,mBAAmB,WAAW,OAAOnua,KAAKmua,YAAYj9S,KAAKlxH,KAAKK,GAAEi4B,kBAAkB,OAAO,WAAWt4B,KAAK0ta,IAAIpia,IAAGjL,GAAEiL,OAAMtL,MAAM,OAAOA,KAAKm8H,KAAK,WAAW,OAAOn8H,KAAKkua,SAAS5ia,OAAMgwB,EAAEzJ,UAAUtxB,IAAI,SAASF,GAAE6R,IAAG,OAAOlS,KAAKm8H,KAAK,WAAW,IAAI7wH,GAAEjL,MAAKi7B,EAAE+oF,SAASu/C,KAAK5jK,KAAK4jK,KAAKvjK,IAAGL,KAAK0ta,IAAIrta,IAAG,OAAO6R,GAAEA,GAAE5G,IAAGA,MAAKgwB,EAAEzJ,UAAU49Y,UAAU,SAASnka,IAAG,OAAOtL,KAAKm8H,KAAK,WAAW,OAAO67N,EAAE1sV,SAAQ,SAASA,GAAE,CAACA,GAAEA,GAAEA,GAAEA,QAAO,QAAQ,GAAG,OAAM5E,SAAS4E,GAAE,CAACA,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAGA,GAAE,KAAK,OAAM5E,OAAO,cAAc,OAAO1G,KAAK4jC,MAAM,yBAAyB5jC,KAAK0ta,IAAI/jS,OAAOr+H,KAAI6wH,KAAKn8H,KAAKmua,cAAc7yY,EAAEzJ,UAAUs8Y,YAAY,SAAS7ia,IAAG,YAAWA,GAAEjL,IAAG,OAAO4uB,KAAKoiB,MAAM/lC,GAAEjL,GAAE,GAAG,IAAI,OAAOL,KAAKm8H,KAAK,YAAY7wH,GAAEA,IAAGmsV,GAAGi4E,YAAY1va,KAAK0ta,IAAIG,QAAQjha,eAAe,WAAWtB,GAAEqka,MAAM,CAACp7Z,MAAMjJ,GAAEiJ,MAAMvU,KAAK0ta,IAAI/jS,OAAO,GAAG3pI,KAAK0ta,IAAI/jS,OAAO,GAAGn1H,OAAOlJ,GAAEkJ,OAAOxU,KAAK0ta,IAAI/jS,OAAO,GAAG3pI,KAAK0ta,IAAI/jS,OAAO,IAAIr+H,GAAEqka,MAAMC,GAAG,CAACr7Z,MAAMlU,GAAEiL,GAAEqka,MAAMp7Z,MAAMjJ,GAAE01Y,GAAGxsY,OAAOnU,GAAEiL,GAAEqka,MAAMn7Z,OAAOlJ,GAAE01Y,IAAI11Y,GAAEqka,MAAME,MAAMvka,GAAEqka,MAAMn7Z,OAAOlJ,GAAEqka,MAAMp7Z,OAAOvU,KAAK4jK,KAAKtrI,SAAShtB,MAAKgwB,EAAEzJ,UAAUy7Y,YAAY,SAAShia,GAAEjL,GAAE6R,GAAE6/S,IAAG,OAAO,WAAU/xT,KAAKwta,SAASC,IAAInia,IAAG,WAAUtL,KAAKwta,SAASx6F,MAAM3yU,IAAG,WAAUL,KAAKwta,SAASt7Z,EAAEA,IAAG,WAAUlS,KAAKwta,SAAS/V,MAAM1lG,IAAG/xT,KAAKwta,SAASqC,MAAM7va,KAAKwta,SAASC,IAAIzta,KAAKwta,SAASx6F,MAAMhzU,MAAMs7B,EAAEzJ,UAAUi+Y,eAAe,SAASxka,GAAEjL,GAAE6R,GAAE6/S,IAAG,OAAO/xT,KAAKsta,YAAYhia,GAAEtL,KAAKwta,SAASC,IAAInia,GAAE,KAAKjL,IAAG,KAAK6R,GAAElS,KAAKwta,SAASt7Z,EAAEA,GAAE,KAAK6/S,GAAE/xT,KAAKwta,SAAS/V,MAAMj6W,OAAOu0Q,IAAG,OAAOz2R,EAAEzJ,UAAUsqG,KAAK,SAAS7wH,GAAEjL,IAAG,IAAI6R,GAAElS,KAAK,OAAOA,KAAK+va,SAASzka,GAAEjL,GAAE,SAASA,GAAEiL,IAAG,OAAO4G,GAAE49Z,eAAe,KAAK,KAAK,EAAE,CAACzva,KAAIy7H,QAAQjqG,UAAUsqG,KAAKrqG,KAAK9xB,KAAK,SAASsL,IAAG,OAAO4G,GAAE49Z,eAAe,KAAKzva,IAAGiL,KAAI6wH,KAAK97H,GAAEiL,IAAG6wH,KAAK,SAAS7wH,IAAG,OAAO4G,GAAE49Z,eAAe,GAAGxka,QAAOgwB,EAAEzJ,UAAUk+Y,SAAS,SAASzka,GAAEjL,GAAE6R,IAAGA,GAAEA,IAAG4pH,QAAQjqG,UAAUsqG,KAAK,IAAI41L,GAAE/xT,KAAKsL,KAAIA,GAAEA,GAAE4lH,KAAK6gM,KAAI1xT,KAAIA,GAAEA,GAAE6wH,KAAK6gM,KAAI,IAAI1tT,IAAE,YAAayJ,WAAW/C,QAAQ,kBAAkB,oBAAoB2C,KAAKqkT,GAAEz2R,EAAE0tD,QAAQv8E,OAAO6D,OAAO,GAAGyhT,IAAGj2L,QAAQjqG,WAAWxoB,GAAE6I,GAAE4f,KAAKztB,GAAEiH,GAAEjL,IAAG,OAAOi7B,EAAE0tD,QAAQ3/E,GAAE0oT,GAAEzxS,YAAYgb,EAAEzJ,UAAUm+Y,aAAa,SAAS1ka,GAAEjL,IAAG,OAAOy7H,QAAQjqG,UAAUsqG,KAAKrqG,KAAK9xB,KAAKsL,GAAEjL,KAAIi7B,EAAEzJ,UAAUq8Y,SAAS,SAAS5ia,IAAG,IAAIjL,GAAEL,KAAK,OAAOsL,GAAEL,QAAQ,SAASK,IAAGjL,GAAEA,GAAE0va,SAASzka,MAAKjL,IAAGi7B,EAAEzJ,UAAU4uS,MAAM,SAASn1T,IAAGA,KAAIA,GAAEA,GAAE4lH,KAAKlxH,OAAO,IAAIK,GAAEy7H,QAAQjqG,UAAU4uS,MAAM3uS,KAAK9xB,KAAKsL,IAAG,OAAOgwB,EAAE0tD,QAAQ3oF,GAAEL,OAAOs7B,EAAEzJ,UAAUo+Y,cAAc,SAAS3ka,IAAG,OAAOwwH,QAAQjqG,UAAU4uS,MAAM3uS,KAAK9xB,KAAKsL,KAAIgwB,EAAEzJ,UAAU+R,MAAM,SAASt4B,IAAG,OAAOtL,KAAKm8H,KAAK,WAAW,MAAM,IAAIkrK,MAAM/7R,OAAMgwB,EAAEzJ,UAAUq+Y,MAAM50Y,EAAEzJ,UAAUm3G,IAAI1tG,EAAEzJ,UAAUszG,OAAO7pG,EAAEzJ,UAAUkV,KAAKzL,EAAEzJ,UAAUqqG,OAAO5gG,EAAEzJ,UAAUmI,OAAOsB,EAAEzJ,UAAU6/R,IAAIp2R,EAAEzJ,UAAUsqG,KAAKs7N,GAAGi4E,YAAY,SAASpka,GAAEjL,GAAE6R,IAAG,GAAG,aAAc5G,IAAG,CAAC,IAAIymT,GAAEzmT,GAAEA,GAAEymT,GAAE++F,YAAYzwZ,GAAE0xT,GAAEusC,MAAMj+V,GAAE6R,GAAE6/S,GAAEn1P,QAAQ1qD,GAAE7R,GAAEA,IAAG,KAAK6R,GAAEA,IAAG,KAAK5G,IAAG,IAAIA,IAAG,MAAMuM,cAAc,IAAIxT,IAAG,GAAG6N,IAAG2F,cAAcxO,GAAE,CAAC6jW,GAAG,CAAC,QAAQ,SAAS8E,GAAG,CAAC,QAAQ,SAASq5B,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,OAAO,SAASC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,MAAM,QAAQC,GAAG,CAAC,OAAO,OAAOC,IAAI,CAAC,KAAK,QAAQC,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,OAAO,SAASC,GAAG,CAAC,MAAM,QAAQC,GAAG,CAAC,OAAO,OAAOC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,IAAI,CAAC,MAAM,QAAQt6B,GAAG,CAAC,QAAQ,SAASe,GAAG,CAAC,QAAQ,SAASw5B,GAAG,CAAC,QAAQ,SAASC,GAAG,CAAC,OAAO,SAASC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,GAAG,CAAC,OAAO,QAAQC,IAAI,CAAC,MAAM,QAAQ35F,GAAG,CAAC,OAAO,QAAQ+5F,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,KAAKD,MAAM,CAAC,IAAI,MAAM,eAAe,CAAC,IAAI,KAAKmkB,OAAO,CAAC,KAAK,KAAKjkB,QAAQ,CAAC,IAAI,MAAM,cAAc,CAAC,IAAI,MAAM,OAAOjtY,QAAO,KAAK,IAAIP,GAAE,EAAE,UAAU,KAAKA,GAAE,GAAG,KAAK,UAAU,KAAKA,GAAE,GAAG,KAAK,UAAU,KAAKA,GAAE,GAAG,UAAU,KAAKA,GAAE,IAAI,UAAU,SAAS,KAAKA,GAAE,GAAG,UAAU,KAAKA,GAAE,EAAE,cAAc,KAAK,iBAAiBO,GAAE,GAAGgJ,GAAEuD,eAAevI,IAAG,IAAI+N,GAAE/I,GAAEhF,IAAG,GAAGvE,GAAEmB,GAAEoI,GAAEhF,IAAG,GAAGvE,QAAO,IAAIsS,GAAEF,GAAE,GAAGjR,GAAEiR,GAAE,EAA+CA,CAA/C,MAAS5G,IAAG,MAAM,IAAI+7R,MAAM,mBAAmBn1R,IAAG,GAAG,UAAS,iBAAgB,GAAG5G,GAAE,IAAI8G,GAAEnR,GAAE,CAAC,IAAIy2V,GAAEz2V,GAAEA,GAAEmR,GAAEA,GAAEslV,QAAO,CAAC,GAAG,UAAS,iBAAgB,KAAK,wBAAwBpsV,GAAEA,GAAE,IAAIrK,GAAEmR,KAAIslV,GAAEz2V,GAAEA,GAAEmR,GAAEA,GAAEslV,IAAG,MAAM,CAACnjV,MAAMtT,GAAEuT,OAAOpC,GAAEksV,KAAKj+V,GAAE2gZ,EAAElhZ,KAAIuE,EAAEwmJ,KAAK,SAASv/I,GAAEjL,KAAIA,GAAEA,IAAG,IAAI2wT,SAAS3wT,GAAE2wT,UAAU,WAAU,EAAG3wT,GAAEuta,YAAYvta,GAAEuta,aAAa,GAAGvta,GAAEuta,YAAYhG,OAAOvna,GAAEuta,YAAYhG,QAAQ5na,KAAK4na,OAAOvna,GAAEwta,MAAMxta,GAAEwta,OAAO7ta,KAAKK,GAAEwta,MAAM,IAAI37Z,GAAE,IAAIopB,EAAEj7B,IAAG,OAAOA,GAAE8va,OAAOj+Z,GAAEA,GAAE2kC,KAAKvrC,IAAGkka,cAAc/3E,GAAGk9D,IAAI0S,MAAM,SAAS/7Z,IAAG,OAAO9J,GAAE8J,GAAEtL,KAAKq4B,SAASmS,OAAO/jC,UAAU,mBAAmB,SAAS6E,IAAGhK,EAAEtB,KAAKq4B,SAASq7X,YAAY1zZ,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,yBAAyB/wZ,EAAE,GAAG,SAAStB,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,UAAU3wZ,EAAE1B,KAAKq4B,SAASq7X,YAAY1zZ,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,kBAAkBryZ,KAAKq4B,SAASg6X,IAAI,QAAQ7wZ,GAAE,KAAKxB,KAAKq4B,SAASg6X,IAAI,MAAMryZ,KAAKq4B,SAASg6X,IAAI,YAAYryZ,KAAKq4B,SAASmS,OAAO/jC,UAAU,aAAa,gBAAW,IAASnF,QAAG,OAAYtB,KAAKq4B,SAASg6X,IAAI,wBAAwB/wZ,EAAE,YAAYtB,OAQxqXm2B,GAAEshU,GAAGk9D,KAAKnqX,OAAOjjC,KAAK,CAAC,mBAAmB,WAAW,IAAI+D,GAAEtL,KAAKK,GAAE,gBAAgB,GAAG,EAAEL,KAAKowa,QAAQvsE,KAAKttU,SAAS7vB,OAAO,QAAQwL,GAAE5G,GAAE8ka,QAAQn/F,SAAS//S,MAAM,QAAQ6gS,GAAE,EAAEA,GAAE7/S,GAAExL,OAAOqrT,KAAI,CAAC,IAAI1tT,GAAE6N,GAAE6/S,IAAG1oT,GAAEhJ,GAAE4xG,KAAK5tG,IAAG,GAAG,SAAQ,CAAC,IAAIvE,GAAEuJ,GAAE,GAAGiC,GAAE+sB,SAASsjY,uBAAuB77Z,IAAE,GAAIwL,GAAE+sB,SAAS8wW,MAAM9kY,IAAG,GAAGrE,KAAKowa,QAAQC,wBAAwB,CAAC,IAAIj+Z,GAAEpS,KAAKq4B,SAAS6yH,MAAMxkJ,OAAOzF,GAAE,GAAG,IAAI8wT,GAAE,EAAEA,GAAE3/S,GAAE2/S,KAAI,CAAC,IAAI2lC,GAAEpsV,GAAE+sB,SAASq7X,YAAYzyZ,GAAEsG,KAAKmwV,IAAG,IAAIx3V,GAAEoL,GAAE+sB,SAASs/G,YAAYo6K,GAAE,GAAGzmT,GAAE+sB,SAAS8wW,MAAM,SAASjpY,GAAE2zZ,MAAM,sCAAsC,IAAI9zZ,GAAEuL,GAAE+sB,SAASq7X,YAAY,IAAIpoZ,GAAE+sB,SAAS8wW,MAAM,gBAAgBp3E,GAAE,EAAEA,GAAE9wT,GAAEyF,OAAOqrT,KAAIzmT,GAAE+sB,SAAS8wW,MAAM,UAAUp3E,GAAE,GAAG,IAAI9wT,GAAE8wT,IAAG,QAAQzmT,GAAE+sB,SAAS8wW,MAAM,QAAQ,UAAU79X,GAAE+sB,SAASq7X,YAAYpoZ,GAAE+sB,SAAS8wW,MAAM,aAAappY,GAAE,QAAQuL,GAAE+sB,SAAS8wW,MAAM,KAAK,cAAchzW,GAAEqU,OAAOjjC,KAAK,CAAC,aAAa,WAAW,EAAEvH,KAAKowa,QAAQvsE,KAAKttU,SAAS7vB,SAAS1G,KAAKq4B,SAAS8wW,MAAM,YAAYnpY,KAAKowa,QAAQE,QAAQtwa,KAAKowa,QAAQvsE,OAAO7jW,KAAKowa,QAAQC,yBAAyBrwa,KAAKq4B,SAAS8wW,MAAM,UAAUonC,SAAS,YAAYp6Y,GAAEqU,OAAOjjC,KAAK,CAAC,cAAc,WAAW,IAAIzH,GAAEE,KAAKF,GAAEswa,QAAQ,CAACC,yBAAwB,EAAGxsE,KAAK,CAACttU,SAAS,KAAKz2B,GAAEswa,QAAQliQ,IAAI,SAAS5iK,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE,CAACj7O,MAAMz2E,GAAEs3F,QAAQzlF,GAAEqkB,SAAS,IAAI,OAAO,WAAUjrB,GAAEtL,KAAK6jW,MAAMv4V,GAAEirB,SAAShvB,KAAKwqT,IAAGA,IAAGjyT,GAAEswa,QAAQn/F,OAAO,WAAW,OAAOjxU,KAAKgqa,IAAI,GAAGhqa,KAAKgqa,IAAIyD,IAAI,GAAGzta,KAAKgqa,IAAIx2C,IAAI1zX,GAAEE,KAAKwwa,SAASxwa,KAAK6jW,MAAM7jW,KAAKywa,WAAWzwa,KAAK6jW,MAAM7jW,KAAK0wa,YAAY1wa,KAAK6jW,MAAM7jW,KAAKgqa,IAAIyD,KAAK3ta,GAAEswa,QAAQI,SAAS,SAASlla,IAAGA,GAAEyT,GAAGjf,GAAEu4B,SAASs7X,oBAAoB,QAAQtzZ,GAAE,EAAEA,GAAEiL,GAAEirB,SAAS7vB,OAAOrG,KAAIL,KAAKwwa,SAASlla,GAAEirB,SAASl2B,MAAKP,GAAEswa,QAAQK,WAAW,SAASnla,IAAGtL,KAAK2wa,SAASrla,IAAGtL,KAAKs5Z,KAAK,mBAAmB,EAAEhuZ,GAAEirB,SAAS7vB,SAAS1G,KAAKs5Z,KAAK,UAAUt5Z,KAAKswa,QAAQhla,GAAEirB,SAAS,KAAKv2B,KAAKs5Z,KAAK,SAASt5Z,KAAKswa,QAAQhla,GAAEirB,SAASjrB,GAAEirB,SAAS7vB,OAAO,MAAM1G,KAAKs5Z,KAAK,UAAUt5Z,KAAK4wa,QAAQ,CAAC7pP,MAAM,GAAGz7K,KAAItL,KAAK6wa,UAAU/wa,GAAEswa,QAAQM,YAAY,SAASpla,IAAGtL,KAAKgqa,IAAIx2C,IAAIn7V,SAASojY,oBAAoB,QAAQp7Z,GAAEL,KAAKgqa,IAAIx2C,IAAIn7V,SAASiiY,4BAA4BpoZ,GAAE,EAAEA,GAAE5G,GAAEirB,SAAS7vB,OAAOwL,KAAI,CAAC,IAAI6/S,GAAEzmT,GAAEirB,SAASrkB,IAAGlS,KAAK2wa,SAAS5+G,IAAG/xT,KAAKs5Z,KAAK,UAAUt5Z,KAAK8wa,WAAW/+G,GAAEj7O,QAAQ92E,KAAKs5Z,KAAK,WAAWt5Z,KAAKswa,QAAQhla,KAAI,EAAE4G,IAAGlS,KAAKs5Z,KAAK,SAASt5Z,KAAKswa,QAAQhla,GAAEirB,SAASrkB,GAAE,KAAKA,GAAE5G,GAAEirB,SAAS7vB,OAAO,GAAG1G,KAAKs5Z,KAAK,SAASt5Z,KAAKswa,QAAQhla,GAAEirB,SAASrkB,GAAE,KAAK,EAAE6/S,GAAEx7R,SAAS7vB,SAAS1G,KAAKs5Z,KAAK,UAAUt5Z,KAAKswa,QAAQv+G,GAAEx7R,SAAS,KAAKv2B,KAAKs5Z,KAAK,SAASt5Z,KAAKswa,QAAQv+G,GAAEx7R,SAASw7R,GAAEx7R,SAAS7vB,OAAO,MAAM,IAAIrC,GAAErE,KAAK+mL,MAAM/mL,KAAK4wa,QAAQ,CAAC7pP,MAAM,GAAGgrI,IAAG,GAAG,EAAE1tT,IAAGrE,KAAKs5Z,KAAK,UAAUj1Z,IAAG0tT,GAAEp6N,SAASo6N,GAAEp6N,QAAQi+T,WAAW,CAAC,IAAIvsZ,GAAEvJ,GAAEu4B,SAASs/G,YAAYo6K,GAAEp6N,QAAQi+T,YAAY51Z,KAAKs5Z,KAAK,UAAUjwZ,GAAEwqZ,MAAM,eAAexzZ,GAAE,GAAG,OAAOL,KAAK6wa,SAAS,IAAI3+Z,GAAE,EAAEA,GAAE5G,GAAEirB,SAAS7vB,OAAOwL,KAAI6/S,GAAEzmT,GAAEirB,SAASrkB,IAAGlS,KAAK0wa,YAAY3+G,KAAIjyT,GAAEswa,QAAQ9W,KAAK,SAAShuZ,IAAGtL,KAAKgqa,IAAIyD,KAAKnia,GAAE,QAAQxL,GAAEswa,QAAQE,QAAQ,SAAShla,IAAG,OAAOA,GAAEyT,GAAG,QAAQjf,GAAEswa,QAAQU,WAAW,SAASxla,IAAG,MAAM,IAAIxL,GAAEu4B,SAASg+X,UAAU/qZ,IAAG,KAAKxL,GAAEswa,QAAQO,SAAS,SAASrla,IAAGtL,KAAKgqa,IAAIyD,KAAK,OAAOnia,GAAEyT,GAAG,oBAAoBjf,GAAEswa,QAAQS,OAAO,SAASvla,IAAGtL,KAAKgqa,IAAIyD,KAAK,qBAAqB3ta,GAAEswa,QAAQQ,QAAQ,SAAStla,GAAEjL,IAAG,QAAQ6R,GAAE,EAAEA,GAAE7R,GAAEk2B,SAAS7vB,OAAOwL,KAAI5G,GAAEy7K,QAAQ/mL,KAAK4wa,QAAQtla,GAAEjL,GAAEk2B,SAASrkB,KAAI,OAAO5G,GAAEy7K,UAS1jGxlL,EAAEk2V,GAAGk9D,IAAIlzZ,EAAE,WAAW,IAAI6J,GAAE,mBAAmB4ha,SAAS,IAAI5ha,GAAE,MAAM,IAAI+7R,MAAM,uCAAuC,OAAO/7R,IAAGqsV,GAAE,SAASrsV,GAAEjL,GAAE6R,GAAE6/S,IAAG,IAAI1tT,GAAE,EAAEgF,GAAEmQ,GAAE,OAAOu4S,SAAQxwT,EAAEsia,kBAAkBE,KAAK1/Z,GAAE,EAAEgF,GAAEiwB,GAAE,WAAW/3B,EAAEsia,kBAAkBG,OAAO3/Z,GAAE,EAAEgF,GAAEnI,GAAE,WAAWK,EAAEsia,kBAAkBI,KAAK5/Z,GAAE,EAAEgF,GAAE8uV,GAAE7sV,GAAE8J,GAAE9J,GAAEjL,GAAE6R,GAAE7I,IAAG,IAAIvJ,GAAE,IAAIqtD,WAAWrN,GAAEz7C,KAAI+N,GAAED,GAAE7G,IAAGrK,GAAE,IAAIisa,SAAS7oa,IAAGqzV,GAAEz2V,GAAEi3V,OAAO5sV,IAAGpL,GAAEe,GAAEkwU,QAAQpxU,GAAED,GAAE4G,OAAOgxV,GAAEhxV,OAAOxG,GAAEwG,OAAOpC,GAAE,IAAI6oD,WAAWptD,GAAE,GAAG,OAAOuE,GAAE0kI,IAAIlpI,IAAGwE,GAAE0kI,IAAI0uN,GAAE53V,GAAE4G,QAAQpC,GAAE0kI,IAAI9oI,GAAEJ,GAAE4G,OAAOgxV,GAAEhxV,QAAQpC,GAAEvE,MAAKqS,KAAI,GAAG,IAAI9N,GAAEvE,MAAKqS,KAAI,GAAG,IAAI9N,GAAEvE,MAAKqS,KAAI,EAAE,IAAI9N,GAAEvE,MAAK,IAAIqS,GAAE7Q,EAAEqga,0BAA0Bt9Z,KAAIw7C,GAAE,SAASx0C,GAAEjL,IAAG,IAAI6R,GAAE+c,KAAK8hZ,MAAM9hZ,KAAKwf,IAAI,OAAO,GAAG,EAAE,EAAEsjR,GAAE7/S,IAAG,EAAE,OAAO6/S,IAAG9iS,KAAK45C,IAAI,GAAGxoE,GAAE,EAAE,MAAM,IAAI,EAAE0xT,IAAG,EAAE,CAAC7/S,GAAE,KAAK6/S,IAAG,GAAGA,GAAE,MAAM5/S,GAAE,SAAS7G,GAAEjL,IAAG,QAAQ6R,GAAE6/S,GAAE,EAAE1tT,GAAE,EAAEgF,GAAEiC,GAAE5E,OAAO5G,GAAE,EAAE,EAAEuJ,IAAG,CAAC,IAAIA,IAAG6I,GAAE7R,GAAEgJ,GAAEhJ,GAAEgJ,GAAEhF,IAAG0tT,IAAGzmT,GAAExL,QAAOoS,KAAI6/S,IAAG,MAAM1tT,IAAG,MAAM,OAAOA,IAAG,GAAG0tT,MAAK,GAAG38S,GAAE,SAAS9J,GAAEjL,GAAE6R,GAAE6/S,IAAG,QAAQ1tT,GAAEgF,GAAEvJ,GAAEsS,GAAE9G,GAAE5E,OAAOrG,GAAEY,GAAE,IAAIksD,WAAW7hD,GAAE5E,OAAO0L,IAAGslV,GAAE91V,IAAI1B,GAAE,EAAEA,GAAEkS,GAAElS,KAAI,CAAC,GAAGJ,GAAEI,GAAEG,GAAEgE,GAAEiH,GAAEo6Z,SAAS5la,GAAEA,GAAEO,IAAG0xT,GAAE9wT,GAAE+nI,IAAI+oL,GAAE1tT,GAAE6N,GAAE7I,IAAGvJ,GAAEI,QAAO,CAAC,QAAQH,GAAE,EAAEuE,GAAEozV,GAAEhxV,OAAO1F,GAAE,GAAGjB,GAAEuE,GAAEvE,KAAIiB,GAAEjB,IAAG23V,GAAE33V,IAAGsE,GAAE6N,GAAE7I,IAAG,IAAIsyY,GAAEh6Y,GAAEX,GAAEw8C,UAAUv8C,GAAE+nI,IAAIhoI,GAAE26Y,IAAG77Y,GAAEI,IAAGmJ,GAAEhF,GAAE,OAAOpD,IAAG4+C,GAAE,SAASv0C,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1hT,MAAMy4D,MAAM,GAAGx9D,IAAG,OAAOymT,GAAE/hT,QAAQ,GAAG+hT,IAAGz4R,GAAE,SAAShuB,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAE,GAAGgF,GAAE,EAAEvJ,GAAEwL,GAAE5E,OAAO,IAAIrC,GAAE,GAAG,EAAEgF,GAAEvJ,GAAEuJ,KAAI0oT,GAAEzmT,GAAEjC,GAAEhJ,KAAI,EAAEgE,GAAEgF,GAAE,GAAGiC,GAAEjC,IAAG0oT,GAAE,IAAI,IAAI,OAAO1tT,IAAGmV,GAAE,SAASlO,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAE,GAAGgF,GAAE,EAAEvJ,GAAEwL,GAAE5E,OAAO,IAAIrC,GAAE,GAAG,EAAEgF,GAAEvJ,GAAEuJ,KAAI0oT,GAAE7/S,IAAGA,GAAE7I,KAAI,EAAEhF,GAAEgF,GAAE,GAAGiC,GAAEjC,IAAG0oT,GAAE,IAAI,IAAI,OAAO1tT,IAAGnD,GAAE,SAASoK,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAEgF,GAAE,GAAGvJ,GAAE,EAAEsS,GAAE9G,GAAE5E,OAAO,IAAI2C,GAAE,GAAG,EAAEvJ,GAAEsS,GAAEtS,KAAIiyT,GAAEzmT,GAAExL,GAAEO,KAAI,EAAEgE,GAAE6N,IAAGA,GAAEpS,KAAI,EAAEuJ,GAAEvJ,GAAE,GAAGwL,GAAExL,IAAG,KAAKiyT,GAAE1tT,KAAI,GAAG,IAAI,OAAOgF,IAAG8uV,GAAE,SAAS7sV,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAE,GAAGnR,GAAE,EAAEy2V,GAAEpsV,GAAE5E,OAAO,IAAI0L,GAAE,GAAG,EAAEnR,GAAEy2V,GAAEz2V,KAAI8wT,GAAEzmT,GAAErK,GAAEZ,KAAI,EAAEgE,GAAE6N,IAAGA,GAAEjR,KAAI,EAAEoI,GAAE6I,IAAGA,GAAEjR,GAAEZ,KAAI,EAAEP,GAAEqR,GAAE4gT,GAAE1tT,GAAEgF,IAAG+I,GAAEnR,GAAE,GAAGqK,GAAErK,IAAGnB,GAAE,IAAI,IAAI,OAAOsS,IAAGjB,GAAE,SAAS7F,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAEzmT,GAAEjL,GAAE6R,GAAE7N,GAAE4qB,KAAKshF,IAAIwhN,GAAEzmT,IAAGjC,GAAE4lB,KAAKshF,IAAIwhN,GAAE1xT,IAAGP,GAAEmvB,KAAKshF,IAAIwhN,GAAE7/S,IAAG,OAAO7N,IAAGgF,IAAGhF,IAAGvE,GAAEwL,GAAEjC,IAAGvJ,GAAEO,GAAE6R,IAAGtQ,EAAE,WAAW,MAAM,CAACi+C,GAAEvmB,GAAE9f,GAAEtY,GAAEi3V,KAAIx2V,GAAE,SAAS2J,IAAG,QAAQjL,GAAE6R,GAAE6/S,GAAE1tT,GAAE,EAAEgF,GAAEiC,GAAE5E,OAAOrC,GAAEgF,MAAKhJ,GAAEgB,GAAEiK,GAAEjH,IAAG4T,MAAM,KAAK/F,KAAIA,MAAKA,GAAE7R,GAAE0xT,GAAE1tT,IAAGA,KAAI,OAAO0tT,IAAG1wT,GAAE,SAASiK,IAAG,QAAQjL,GAAE,EAAE6R,GAAE5G,GAAE5E,OAAOqrT,GAAE,EAAE1xT,GAAE6R,IAAG6/S,IAAG9iS,KAAKshF,IAAIjlG,GAAEjL,OAAM,OAAO0xT,IAAGxwT,EAAEyva,WAAW,SAAS1la,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,IAAIgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEC,KAAK6ha,aAAac,WAAWr+Z,GAAEtE,KAAKmoY,OAAOk7B,aAAaria,GAAE,EAAE,GAAGhB,KAAK0ka,cAAcp5Z,MAAKA,GAAE,IAAI6hD,WAAW7hD,KAAItL,KAAK2ha,kBAAkBr2Z,IAAG,CAAC,GAAG,mBAAmB61Z,KAAK,mBAAmBxxZ,GAAG,MAAM,IAAI03R,MAAM,2CAA2C,GAAG/7R,IAAGjC,GAAE,IAAI83Z,IAAI71Z,KAAI2la,QAAQjwa,GAAEqI,GAAEovY,KAAK14Y,GAAEsJ,GAAE08Z,WAAW9ka,GAAEoI,GAAEmiX,QAAO,KAAM,EAAE,GAAGzgX,QAAQ1B,GAAE6na,WAAW,CAAC,GAAG,OAAMz4B,KAAK,QAAQkD,GAAE3jD,IAAGjhV,GAAE,OAAMo6Z,eAAe,IAAIxM,YAAYt7Z,GAAE+na,eAAeC,QAAQ,OAAMF,eAAe,IAAIpM,YAAY17Z,GAAE+na,eAAeC,QAAQ,IAAIlkX,WAAW9jD,GAAE+na,eAAeC,SAAS3qa,OAAOsL,EAAE,IAAIm7C,WAAW6qS,GAAE3uV,GAAEmiX,QAAQlwV,GAAE,IAAI6xB,WAAW6qS,IAAG12V,GAAE+H,GAAE8na,eAAe9na,GAAEovY,KAAK/2Y,GAAE,EAAEF,GAAE,EAAEE,GAAEs2V,GAAEt2V,KAAI,CAAC,IAAIy0B,GAAEpf,GAAErV,IAAGi6Y,GAAE,EAAEA,GAAEr6Y,IAAG0Q,EAAExQ,MAAK20B,KAAIwlX,GAAE,IAAIA,IAAGtyY,GAAEovY,KAAKn9W,GAAE55B,IAAGy0B,KAAIwlX,GAAE,IAAI,GAAG,QAAOlD,KAAK,CAACzgD,IAAGjhV,GAAE,IAAI4tZ,YAAYt7Z,GAAE+na,eAAeC,SAAS3qa,OAAOsL,EAAE,IAAIm7C,WAAW6qS,IAAG,GAAG3uV,GAAE8na,gBAAgB9na,GAAEmiX,QAAQlwV,GAAE,IAAI6xB,WAAW6qS,IAAG,GAAG3uV,GAAE8na,iBAAiB,QAAQh7Y,GAAE2pB,GAAE,EAAEz2C,GAAEmiX,OAAOr5W,EAAE3Q,GAAEE,GAAE,EAAEA,GAAEs2V,IAAG7hU,GAAEpf,GAAErV,MAAKsQ,EAAExQ,MAAK20B,KAAI,EAAE,IAAI2pB,KAAI9tC,EAAExQ,MAAK20B,KAAI,GAAG,IAAIA,GAAEpf,GAAErV,MAAKsQ,EAAExQ,MAAK20B,KAAI,EAAE,KAAKmF,GAAEnpB,KAAKgkB,KAAI,GAAG,IAAIn1B,GAAE,EAAE+wT,KAAIxwT,EAAEsia,kBAAkBC,MAAMria,KAAK6J,GAAEqsV,GAAE3lV,EAAE3I,GAAEkL,MAAMlL,GAAEmiX,OAAOniX,GAAEmiX,OAAOz5D,IAAG7xT,GAAEy3V,GAAEr8T,GAAEjyB,GAAEkL,MAAM,EAAEw9S,MAAKzmT,GAAE0G,EAAE9R,GAAEo7B,GAAEh3B,GAAE,MAAM,GAAG,OAAM4sa,YAAYnxa,GAAEC,KAAK6ha,aAAaC,QAAQpqE,GAAEruV,GAAE8kX,QAAQ9kX,GAAEioa,aAAaC,SAAS,CAAC,IAAIn8Z,GAAE/L,GAAEioa,aAAaC,QAAQ1xX,GAAE,EAAE,IAAIn+C,GAAE,EAAEs2V,GAAE5iV,GAAE1O,OAAOhF,GAAEs2V,KAAIt2V,GAAEm+C,IAAGzqC,GAAE1T,IAAG,IAAIm+C,IAAG,MAAMm4S,GAAE,IAAG,OAAOjtV,QAAQ,GAAGqH,GAAE,CAACgD,GAAErK,QAAQ,YAAY80C,KAAIm4S,GAAE,CAAC,IAAIjhV,GAAE1N,GAAE+na,eAAe,IAAI91Y,GAAE,IAAI6xB,WAAWp2C,GAAErQ,QAAQhF,GAAE,EAAEs2V,GAAEjhV,GAAErQ,OAAOhF,GAAEs2V,GAAEt2V,KAAI45B,GAAE55B,IAAG0T,GAAE2B,GAAErV,KAAIxB,GAAEy3V,GAAEr8T,GAAEjyB,GAAEkL,MAAM,IAAI,IAAIhC,GAAE,SAASjH,IAAG,IAAIjL,GAAE,OAAOiL,SAAQ/J,EAAEsia,kBAAkBE,KAAK1ja,GAAE,GAAG,WAAWkB,EAAEsia,kBAAkBG,OAAO3ja,GAAE,GAAG,WAAWkB,EAAEsia,kBAAkBI,KAAK5ja,GAAE,GAAG,cAAcA,GAAE,GAAG,OAAOA,GAA7K,CAAgL0xT,IAAG,OAAOjyT,GAAEwE,KAAItE,KAAKmoY,OAAOk7B,aAAa,cAAc9wZ,GAAE,YAAYtR,GAAE,sBAAsBD,GAAE,aAAaqI,GAAEkL,MAAM,WAAWtT,GAAE,sBAAsBD,GAAE,aAAaqI,GAAEkL,OAAOvU,KAAK0ka,cAAcp5Z,KAAItL,KAAK2ha,kBAAkBr2Z,OAAMA,GAAEtL,KAAK4ha,0BAA0Bt2Z,MAAKpL,IAAGF,KAAK0ka,cAAcxka,KAAIF,KAAK2ha,kBAAkBzha,OAAMA,GAAEF,KAAK4ha,0BAA0B1ha,KAAIF,KAAKsla,gBAAgBh6Z,GAAEjC,GAAEkL,MAAMlL,GAAEmL,OAAOzU,GAAEiB,GAAEsD,GAAEjE,GAAE6R,GAAEpS,GAAEsS,GAAEslV,GAAEx3V,GAAEqS,IAAG,MAAM,IAAI80R,MAAM,yDAQp/HqpH,GAAEj5D,GAAGk9D,KAAK6c,cAAc,SAASlma,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,IAAIgF,GAAE,IAAIspC,GAAGrnC,IAAGxL,GAAEuJ,GAAEkL,MAAMnC,GAAE/I,GAAEmL,OAAOvT,GAAE,GAAGoI,GAAEooa,uBAAuB,EAAExwa,IAAG,IAAIy2V,GAAE,CAACtuV,KAAKnI,GAAEsT,MAAMzU,GAAE0U,OAAOpC,IAAGlS,GAAE,IAAIgwS,GAAG,KAAKk4F,OAAO1wC,GAAE,KAAK,OAAOg5D,GAAEiV,YAAY7zY,KAAK9xB,KAAKE,GAAEG,GAAE6R,GAAE6/S,KAAI2+F,GAAEghB,cAAchhB,GAAE8gB,eAO3Oh/Z,GAAEilV,GAAGk9D,KAAKgd,WAAW,SAASrma,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,IAAIgF,GAAE,IAAIytU,GAAGxrU,IAAE,GAAIxL,GAAEuJ,GAAEkL,MAAMnC,GAAE/I,GAAEmL,OAAOvT,GAAE,CAACmI,KAAKC,GAAEsvW,UAAUpkW,MAAMzU,GAAE0U,OAAOpC,IAAGslV,GAAE,IAAIxnD,GAAG,KAAKk4F,OAAOnnY,GAAE,KAAK,OAAOuR,GAAEmzZ,YAAY7zY,KAAK9xB,KAAK03V,GAAEr3V,GAAE6R,GAAE6/S,KAAI0lC,GAAGk9D,IAAIid,YAAY,SAAStma,IAAG,YAAO,SAAc+sB,SAASw5Y,mBAAmB7xa,KAAKq4B,SAASw5Y,iBAAiB,GAAG7xa,KAAKq4B,SAASw5Y,iBAAiBC,cAAa,QAAI,KAAUnhE,GAAG,YAAYohE,GAAG,WAAWj+X,GAAG,oBAAoB,QAAQ,mBAAmB,QAAQ,mBAAmB,QAAQ,iBAAiB,QAAQ,gBAAgB,QAAQ,kBAAkB,QAAQ,kBAAkB,QAAQ,mBAAmB,QAAQ,iBAAiB,QAAQ,mBAAmB,QAAQ,gBAAgB,QAAQ,iBAAiB,QAAQ,wBAAwB,QAAQ,iBAAiB,QAAQ,mBAAmB,QAAQ,kBAAkB,QAAQ,iBAAiBu4O,GAAG,YAAYwoF,GAAG,WAAW+I,GAAG,WAAWo0D,IAAI,WAAWC,GAAG,cAAc/iF,GAAG,SAASgjF,GAAG,aAAaxoY,GAAG,UAAUyoY,GAAG,UAAU/9C,GAAG,SAAS7jB,GAAG,YAAYkE,GAAG,UAAUv+N,GAAG,UAAUm4N,GAAG,WAAWyK,GAAG,UAAUrnB,GAAG,UAAU,QAAQ,sBAAsB,QAAQ,gBAAgB,QAAQ,sBAAsB,QAAQ,mBAAmBue,GAAG,UAAUn6L,GAAG,WAAWmhK,GAAG,OAAOpjS,GAAG,WAAW69L,GAAG,QAAQkpH,GAAG,SAASy3E,GAAG,mBAAmB,QAAQ,kBAAkB5oY,GAAG,UAAU,QAAQ,sBAAsB,QAAQ,mBAAmB,QAAQ,mBAAmB,QAAQ,oBAAoB,QAAQ,oBAAoB,QAAQ,wBAAwB,QAAQ,wBAAwB,QAAQ,yBAAyB,QAAQ,8BAA8B,QAAQ,2BAA2B,QAAQ,0BAA0B,QAAQ,qBAAqBi4L,GAAG,YAAY5xM,GAAG,WAAW+wP,GAAG,WAAWyxJ,GAAG,SAASrgH,GAAG,UAAUpxF,GAAG,oBAAoB,QAAQ,mBAAmB,QAAQ,kBAAkB,QAAQ,kBAAkB,QAAQ,sBAAsB,QAAQ,kBAAkB,QAAQ,uBAAuBk0I,GAAG,UAAUw9D,IAAI,WAAWn8P,GAAG,iBAAiB,QAAQ,iBAAiBo8P,GAAG,WAAWrsH,GAAG,WAAWrsR,GAAG,oBAAoB,QAAQ,mBAAmB,QAAQ,mBAAmB,QAAQ,yBAAyB,QAAQ,sBAAsB,QAAQ,uBAAuBs2E,GAAG,QAAQ4vP,GAAG,WAAWtwO,GAAG,UAAUvnH,GAAG,SAAS8hH,GAAG,QAAQksD,GAAG,YAAYopK,GAAG,YAAYvgU,GAAG,aAAa85V,GAAG,YAAY1uI,GAAG,QAAQ56G,GAAG,qBAAqB,QAAQ,wBAAwBijT,GAAG,WAAW/wO,GAAG,UAAUgxO,GAAG,WAAWC,GAAG,SAAS3sE,GAAG,QAAQ4sE,GAAG,UAAUC,IAAI,UAAUh6F,GAAG,SAAS,QAAQ,uBAAuB,QAAQ,uBAAuB61B,GAAG,QAAQokE,GAAG,UAAUp7E,GAAG,aAAaq7E,GAAG,gBAAgBC,GAAG,kBAAkB7oI,GAAG,QAAQ8oI,GAAG,YAAYhjZ,GAAG,UAAUukR,GAAG,QAAQylD,GAAG,UAAU3pH,GAAG,YAAY4iM,GAAG,SAASC,GAAG,SAAS/wZ,GAAG,SAASi6U,GAAG,YAAY+2E,GAAG,qBAAqBvwJ,GAAG,sBAAsByxE,GAAG,UAAU91B,GAAG,QAAQ4gC,GAAG,QAAQi0E,GAAG,UAAU,QAAQ,eAAeC,GAAG,SAASvra,GAAG,aAAa,QAAQ,sBAAsB05N,GAAG,UAAU,QAAQ,kBAAkB,QAAQ,qBAAqBy1H,GAAG,UAAUq8E,GAAG,iBAAiBlvJ,GAAG,WAAW,QAAQ,sBAAsBmvJ,GAAG,UAAU,QAAQ,qBAAqBC,GAAG,iBAAiBC,GAAG,QAAQ9/G,GAAG,WAAWyH,GAAG,YAAYa,GAAG,SAASshC,GAAG,aAAa1rC,GAAG,UAAU6hH,GAAG,SAASp4E,GAAG,YAAY1kP,GAAG,SAAS+8T,GAAG,UAAUC,GAAG,UAAU,QAAQ,sBAAsB,QAAQ,oBAAoB,QAAQ,kBAAkB,QAAQ,qBAAqB,QAAQ,uBAAuB,QAAQ,+BAA+B,QAAQ,oBAAoB,QAAQ,wBAAwB,QAAQ,sBAAsB,QAAQ,qBAAqB,QAAQ,mBAAmB,QAAQ,sBAAsB,QAAQ,mBAAmB,QAAQ,qBAAqB,QAAQ,iBAAiB,QAAQ,wBAAwB,QAAQ,kBAAkB,QAAQ,oBAAoB,QAAQ,sBAAsB9H,GAAG,OAAO+H,GAAG,UAAUC,GAAG,UAAU,QAAQ,oBAAoB,QAAQ,mBAAmBtvF,GAAG,QAAQmsE,GAAG,QAAQvhZ,GAAG,SAASqzV,GAAG,OAAOsxE,IAAI,QAAQ30E,GAAG,SAAS5vV,GAAG,SAASmtV,GAAG,UAAUq3E,GAAG,UAAUC,GAAG,YAAYC,IAAI,gBAAgBp7Y,GAAG,OAAOrmB,GAAG,QAAQ+zP,GAAG,aAAa2tK,GAAG,UAAUv+P,GAAG,UAAUy/L,GAAG,QAAQp9D,GAAG,QAAQylD,GAAG,UAAU4I,GAAG,QAAQh7V,MAAKtL,KAAKq4B,SAASw5Y,iBAAiBuC,aAAa9oa,IAAE,SAAU+sB,SAASw5Y,iBAAiBC,eAAe9xa,KAAKq4B,SAASmS,OAAO/jC,UAAU,aAAa,WAAWzG,KAAKq4B,SAAS8wW,MAAM,UAAUnpY,KAAKq4B,SAASw5Y,iBAAiBuC,aAAa,OAAOp0a,KAAKq4B,SAASw5Y,iBAAiBC,cAAa,IAAK9xa,MAS93I68Y,GAAEplD,GAAGk9D,IAAIlkB,GAAEoM,GAAEw3B,mBAAmB,SAAS/oa,GAAEjL,IAAG,IAAI6R,GAAE6/S,GAAE1tT,GAAEgF,IAAGhJ,GAAEA,IAAG,IAAIk8G,MAAMv8G,KAAKq4B,SAASg2W,UAAUvuY,GAAEO,GAAE01W,UAAU/1W,KAAKq4B,SAASo6X,cAAcrgZ,GAAE/R,GAAEw4Z,WAAW74Z,KAAKq4B,SAAS2iY,eAAe/5Z,GAAEZ,GAAEi0a,OAAOj0a,GAAEi0a,OAAOjra,GAAE+sZ,SAASme,QAAQD,OAAO58E,GAAEz2V,GAAEuza,IAAIvza,GAAEuza,IAAI,EAAEt0a,GAAEG,GAAEo0a,QAAQp0a,GAAEo0a,QAAQpra,GAAE+sZ,SAASme,QAAQE,QAAQ10a,GAAEG,GAAEs0a,IAAIt0a,GAAEs0a,IAAI,EAAElwa,GAAE,EAAEtD,GAAEC,GAAE,IAAIy2V,GAAEikD,GAAE,GAAG,IAAIzpY,GAAE,EAAE6/S,GAAEzmT,GAAE5E,OAAOwL,GAAE6/S,GAAE7/S,KAAI7N,GAAEiH,GAAE0tC,WAAW9mC,IAAG,mBAAmB7I,GAAE+sZ,SAASse,cAAc/4B,GAAEp0Y,MAAM8B,GAAE+sZ,SAASlrB,aAAa7hY,GAAE+sZ,SAASue,iBAAiBtwa,KAAI+N,IAAG,IAAItS,KAAI,GAAG,KAAK67Y,GAAEp0Y,MAAMtG,GAAEoD,KAAIrD,IAAG02V,IAAGx3V,GAAEmE,KAAInE,GAAEmE,IAAGC,KAAI,GAAGvE,IAAGuE,GAAED,GAAE,OAAOs3Y,IAAGhlY,GAAEkmY,GAAE+3B,YAAY,SAAStpa,IAAG,QAAQjL,GAAEiL,GAAE5E,OAAOwL,GAAE,EAAE7R,IAAG6R,IAAG5G,KAAIjL,IAAG,OAAO6R,IAAG/C,GAAE0tY,GAAEmc,mBAAmB,SAAS1tZ,GAAEjL,IAAG,IAAI6R,IAAG7R,GAAEA,IAAG,IAAI01W,UAAU/1W,KAAKq4B,SAASo6X,cAAc1gG,GAAE1xT,GAAEk8G,MAAMv8G,KAAKq4B,SAASg2W,UAAUhqY,GAAEhE,GAAEw4Z,WAAW74Z,KAAKq4B,SAAS2iY,eAAe,MAAM,mBAAmBjpG,GAAEqkG,SAASse,cAAc3iH,GAAEqkG,SAASse,cAAcppa,GAAE4G,GAAE7N,IAAG6N,GAAEyE,GAAE85X,GAAE3nU,MAAM9oE,KAAKgyL,aAAa+kJ,GAAE,SAASzrU,GAAEjL,GAAE6R,GAAE6/S,IAAG,QAAQ1tT,GAAE,GAAGgF,GAAE,EAAEvJ,GAAEwL,GAAE5E,OAAO0L,GAAE,EAAE/I,KAAIvJ,IAAGsS,GAAE/R,GAAEgJ,IAAG6I,IAAGE,IAAG/R,GAAEgJ,IAAGA,KAAIhF,GAAEkD,KAAK+D,GAAE2M,MAAM,EAAE5O,KAAI,IAAIpI,GAAEoI,GAAE,IAAI+I,GAAE,EAAE/I,KAAIvJ,IAAGsS,GAAE/R,GAAEgJ,IAAG0oT,KAAI1tT,GAAEkD,KAAK+D,GAAE2M,MAAMhX,GAAEoI,KAAI+I,GAAE,EAAEnR,GAAEoI,IAAG+I,IAAG/R,GAAEgJ,IAAGA,KAAI,OAAOpI,KAAIoI,IAAGhF,GAAEkD,KAAK+D,GAAE2M,MAAMhX,GAAEoI,KAAIhF,IAAGisB,GAAE,SAAShlB,GAAEjL,GAAE6R,IAAGA,KAAIA,GAAE,IAAI,IAAI6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAE,GAAGx3V,GAAE,CAACw3V,IAAG33V,GAAEmS,GAAE2ia,YAAY,EAAEvwa,GAAE,EAAEtD,GAAE,EAAE26Y,GAAErwY,GAAE4lB,MAAM,KAAK8mU,GAAEy4C,GAAE3nU,MAAM9oE,KAAK,CAAC,IAAIkS,KAAI,GAAG,GAAGjR,IAAE,OAAO6za,WAAWn5B,GAAE,GAAGj1Y,OAAO,EAAEwL,GAAE4ia,YAAY,EAAE,CAAC,IAAI9ia,EAAE3B,MAAMpP,IAAGqmC,KAAK,KAAKhM,GAAE,GAAGqgX,GAAE3sY,IAAI,SAAS1D,IAAG,GAAGA,GAAEA,GAAE4lB,MAAM,UAAUxqB,OAAO40B,GAAEA,GAAEkiB,OAAOlyC,GAAE0D,IAAI,SAAS1D,GAAEjL,IAAG,OAAOA,IAAGiL,GAAE5E,OAAO,KAAK,IAAI4E,MAAKgwB,GAAE/zB,KAAK+D,GAAE,MAAMqwY,GAAErgX,GAAEr6B,GAAEkO,GAAE25D,MAAM9oE,KAAK,CAACgS,EAAEE,KAAI,IAAI7I,GAAE,EAAEvJ,GAAE67Y,GAAEj1Y,OAAO2C,GAAEvJ,GAAEuJ,KAAI,CAAC,IAAI/H,GAAE,EAAE,GAAGywT,GAAE4pF,GAAEtyY,IAAGpI,IAAG,SAAQ,KAAK8wT,GAAEA,GAAEvsO,OAAO,GAAGlkF,GAAE,GAAG+C,GAAEosY,GAAE3nU,MAAM9oE,KAAK,CAAC+xT,GAAE7/S,KAAI7R,GAAEN,GAAEuE,IAAGtD,GAAE2V,GAAEtS,MAAK/C,GAAE,CAAC,GAAGjB,GAAEW,GAAE,CAAC,IAAIoR,GAAE2kU,GAAEjuQ,MAAM9oE,KAAK,CAAC+xT,GAAE1tT,GAAEhE,IAAGN,GAAEuE,IAAGjE,KAAIq3V,GAAEnwV,KAAK6K,GAAEukY,SAASj/C,GAAE,CAACtlV,GAAEijF,OAAOjjF,GAAE1L,QAAQxG,GAAEqH,KAAK,CAAC6K,GAAEukY,UAAU31Y,GAAE2V,GAAEtS,GAAE4T,MAAM85S,GAAErrT,QAAQgxV,GAAE,GAAGA,GAAE,GAAGhxV,OAAO,UAAUgxV,GAAE,CAAC3lC,IAAG7xT,GAAEqH,KAAKmwV,IAAG33V,GAAEiB,GAAEC,GAAEqD,GAAE0zV,QAAON,GAAEnwV,KAAKwqT,IAAGhyT,IAAGuE,GAAEtD,GAAEsD,GAAE0zV,GAAE,GAAG/2V,GAAE,IAAIS,GAAE,SAAS4J,GAAEjL,IAAG,OAAOA,GAAE2R,EAAE,IAAI1G,GAAEg8B,KAAK,WAAW5lC,GAAE,SAAS4J,IAAG,OAAOA,GAAEg8B,KAAK,MAAM,OAAOpnC,GAAE8O,IAAItN,KAAIm7Y,GAAErjX,gBAAgB,SAASluB,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,IAAG6N,GAAEA,IAAG,IAAI6jW,UAAU/1W,KAAKq4B,SAASo6X,cAAcppZ,GAAE,SAASiC,IAAG,IAAIjL,GAAE,CAAC,EAAE,GAAG6R,GAAE,GAAG,GAAG5G,GAAEgpa,QAAQhpa,GAAEmpa,QAAQ,MAAM,CAACH,OAAOhpa,GAAEgpa,OAAOG,QAAQnpa,GAAEmpa,SAAS,IAAI1iH,GAAE/xT,KAAKq4B,SAASg2W,QAAQ/iY,GAAE+zW,SAAS/zW,GAAE4qZ,WAAW7xZ,GAAE,UAAU,OAAO0tT,GAAEqkG,SAAS/xZ,IAAG,CAACiwa,OAAOviH,GAAEqkG,SAAS/xZ,IAAGiwa,QAAQj0a,GAAEo0a,QAAQ1iH,GAAEqkG,SAAS/xZ,IAAGowa,SAASvia,IAAG,CAACqqG,KAAKw1M,GAAEqkG,SAASrgD,SAAS/1W,KAAKq4B,SAASo6X,cAAcoG,UAAU74Z,KAAKq4B,SAAS2iY,iBAAiBlpY,KAAK9xB,KAAKkS,IAAG6/S,GAAE1hT,MAAMk0D,QAAQj5D,IAAGA,GAAEA,GAAE4lB,MAAM,SAAS,IAAIpxB,GAAE,EAAEE,KAAKq4B,SAAS+/X,YAAY/3Z,GAAEgE,GAAEgF,GAAEwra,WAAW3ia,GAAE2ia,WAAW,EAAE3ia,GAAE2ia,WAAW70a,KAAKq4B,SAAS+/X,YAAY/zZ,GAAE,EAAEgF,GAAEyra,WAAW5ia,GAAE4ia,WAAW,IAAI1ia,GAAEnR,GAAEy2V,GAAE,GAAG,IAAItlV,GAAE,EAAEnR,GAAE8wT,GAAErrT,OAAO0L,GAAEnR,GAAEmR,KAAIslV,GAAEA,GAAEl6S,OAAOltB,GAAEw4C,MAAM9oE,KAAK,CAAC+xT,GAAE3/S,IAAGtS,GAAEuJ,MAAK,OAAOquV,IAQlkF1zT,GAAEyzT,GAAGk9D,IAAIjvZ,GAAE,CAAC+wZ,UAAU,CAAC,mBAAmBse,iBAAiBn9E,GAAE,SAAStsV,IAAG,QAAQjL,GAAE,mBAAmB6R,GAAE,GAAG6/S,GAAE,EAAEA,GAAE1xT,GAAEqG,OAAOqrT,KAAI7/S,GAAE7R,GAAE0xT,KAAI,mBAAmBA,IAAG,IAAI1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAE,GAAGx3V,GAAE,EAAEH,GAAE23V,GAAEpzV,GAAE,GAAGtD,GAAE,GAAG26Y,GAAE,GAAG3jD,GAAE1sV,GAAE5E,OAAO,EAAE,IAAIqrT,GAAE,EAAEA,IAAGimC,IAAG/2V,GAAEqK,GAAEymT,IAAGA,IAAG,EAAE,QAAO1oT,GAAEA,IAAG+I,GAAE/I,GAAEi+B,KAAK,IAAIjjC,IAAG,GAAGgF,GAAEA,GAAE9B,KAAKtG,IAAG,SAAQqD,GAAEiD,KAAK,CAACxH,GAAEqS,KAAIrS,GAAE,GAAGqS,GAAE/N,IAAG,UAASvE,GAAEwE,GAAE+wF,OAAO,GAAGv1F,GAAE,IAAIC,GAAEqS,GAAE/N,GAAEtE,GAAED,GAAE,IAAI,QAAOI,IAAE,EAAGkS,KAAI/N,GAAE6N,GAAEtF,eAAe3L,KAAID,IAAGkR,GAAEjR,IAAGmR,GAAEqR,SAASziB,GAAE,IAAId,GAAEA,GAAE,EAAEc,GAAE,IAAIA,IAAGC,GAAEiR,GAAEtF,eAAe3L,KAAI06Y,IAAGzpY,GAAEjR,IAAGlB,GAAEqS,IAAGqR,SAASk4X,GAAE,IAAIz7Y,GAAEA,GAAE,EAAEkS,GAAE/N,GAAEs3Y,GAAE,IAAIA,IAAG16Y,GAAE,OAAOy2V,KAAI,+JAA+JhzU,GAAE,CAAC6vZ,QAAQ,CAAC5xG,QAAQj9T,GAAE,eAAeA,GAAE,sBAAsBA,GAAE,kBAAkBA,GAAEk9T,UAAUl9T,GAAE,iBAAiBA,GAAE,wBAAwBA,GAAE,oBAAoBA,GAAE,cAAcA,GAAE,aAAaA,GAAE,mBAAmBA,GAAE,eAAeA,KAAIq6K,GAAE,CAACw0P,QAAQ,CAAC,kBAAkB38E,GAAE,6CAA6C,mBAAmBA,GAAE,kxDAAkxD,iBAAiBA,GAAE,gnDAAgnDj1B,QAAQi1B,GAAE,6CAA6C,sBAAsBA,GAAE,6CAA6C,aAAaA,GAAE,yzDAAyzD/0B,OAAO+0B,GAAE,sNAAsNh1B,UAAUg1B,GAAE,grDAAgrD,wBAAwBA,GAAE,gnDAAgnD90B,aAAa80B,GAAE,iDAAiD,eAAeA,GAAE,6CAA6C,eAAeA,GAAE,qrDAAqrD,cAAcA,GAAE,02DAA02D,oBAAoBA,GAAE,krDAAkrD5zT,GAAEwG,OAAOjjC,KAAK,CAAC,UAAU,SAAS+D,IAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEiH,GAAEixG,KAAKlzG,GAAE,WAAWhJ,GAAE0/K,GAAE12K,IAAGhF,GAAE2xZ,oBAAoB9jZ,GAAE7N,GAAE+xZ,SAAS/sZ,IAAGhF,GAAE+xZ,SAAS/sZ,IAAGhF,GAAE+xZ,SAAS/sZ,IAAG,IAAIira,OAAOj0a,GAAEi0a,OAAOpia,GAAEuia,QAAQp0a,GAAEo0a,UAAU1iH,GAAErtS,GAAErb,IAAGhF,GAAE2xZ,oBAAoB9jZ,GAAE7N,GAAE+xZ,SAAS/sZ,IAAGhF,GAAE+xZ,SAAS/sZ,IAAGhF,GAAE+xZ,SAAS/sZ,IAAG,IAAI4sZ,SAASlkG,IAAG0kG,WAAW1kG,GAAE0kG,UAAU/vZ,SAASrC,GAAE4xZ,SAASlkG,GAAE0kG,UAAU,OAM3jf9F,GAAGl5D,GAAG,oBAAoB+4D,MAAMA,MAAM,oBAAoBC,QAAQA,QAAQ,oBAAoBx2X,QAAQA,QAAQq3W,SAAS,cAATA,GAA0Bqf,GAAGgE,IAAInqX,OAAOjjC,KAAK,CAAC,UAAU,SAAS+D,IAAG,IAAIjL,GAAEiL,GAAEixG,KAAKrqG,GAAE5G,GAAEw5G,SAAS,QAAG,QAAY5yG,GAAE8ia,gBAAgB30a,GAAE21Z,gBAAgB,CAAC,IAAIjkG,GAAE7/S,GAAE+ia,eAAe50a,GAAE21Z,gBAAgB,GAAG,iBAAiBjkG,GAAE,MAAM,IAAI1qB,MAAM,6FAA6FhnS,GAAE21Z,eAAe,OAAO31Z,GAAE+1Z,SAASzF,GAAGgE,IAAIugB,QAAQ1ra,KAAKnJ,GAAE21Z,eAAe31Z,GAAEg/W,SAASttD,GAAE1xT,GAAE41Z,UAAU51Z,GAAE+1Z,SAASme,QAAQl0a,GAAE+1Z,SAASme,SAAS,CAACte,SAAS,GAAGwe,QAAQ,GAAGH,OAAO,IAAIj0a,GAAE+1Z,SAAS+e,WAAW,CAAC,YAAW,OAAOhf,eAAe,MAAM,IAAI9uH,MAAM,+EAA+EhnS,GAAE21Z,eAAe,WAO/vBnmY,GAAG4nU,GAAGk9D,KAAKygB,OAAO,SAAS9pa,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,QAAG,aAAY,OAAW,MAAM,IAAIgjS,MAAM,uCAAuC,YAAW/7R,IAAG,QAAQjL,GAAEoxC,WAAWnmC,GAAE,IAAI4G,GAAEu/B,WAAWnmC,GAAE,IAAIymT,GAAE,GAAG1tT,GAAE,EAAEgF,GAAEiC,GAAE5E,OAAOrC,GAAEgF,IAAG,MAAMiC,GAAEjH,KAAI0tT,GAAExqT,KAAK,CAACkqC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,MAAMA,IAAG,GAAG,SAAQA,KAAI0tT,GAAExqT,KAAK,CAACkqC,WAAWnmC,GAAEjH,GAAE,IAAIotC,WAAWnmC,GAAEjH,GAAE,MAAMA,IAAG,GAAGA,IAAG,EAAE,MAAM,CAAChE,GAAE6R,GAAE6/S,IAAG,IAAIjyT,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,GAA6gBg3V,IAAGl4V,GAAEwL,IAAGrK,KAArgBD,IAAX02V,GAAEtkT,UAAaC,cAAc,UAAUnzC,GAAE,4DAA4DoE,IAAGvE,GAAE23V,IAAGrkT,cAAc,UAAUga,KAAK,WAAW/oD,GAAE+wa,WAAW/wa,GAAE+wa,WAAWC,QAAQp1a,GAAEoE,GAAEqyC,YAAY52C,GAAEqua,eAAelua,KAAIH,GAAEgmC,qBAAqB,QAAQ,GAAG4Q,YAAYryC,IAAGtD,GAAE0M,KAAK,aAAa1M,GAAEsyC,aAAa,QAAQ,GAAGtyC,GAAEsyC,aAAa,SAAS,GAAGtyC,GAAEsyC,aAAa,cAAc,KAAKtyC,GAAEsyC,aAAa,YAAY,MAAMtyC,GAAEsyC,aAAa,WAAW,YAAYtyC,GAAEsyC,aAAa,QAAQ,yBAAyBokT,GAAEx5S,KAAKvH,YAAY31C,IAAkBoR,GAAfpR,IAAoBovP,eAAeh+O,GAAEmja,iBAAiBniY,UAAU+1V,MAAMrpY,IAAGmB,GAAE8F,QAAQ9F,GAAE8kC,qBAAqB,OAAO,IAAI/zB,EAAE,CAAC,EAAE,GAAGspB,GAAEmW,WAAWumT,GAAEhhT,aAAa,UAAU11C,GAAEmwC,WAAWumT,GAAEhhT,aAAa,WAAW1b,IAAGh6B,KAAIywT,IAAG1tT,GAAE2N,EAAE,CAAC+/S,GAAEz2R,GAAEj3B,GAAE/C,IAAGywT,GAAE//S,EAAE,CAAC+/S,GAAEz2R,GAAEy2R,GAAEz2R,IAAGj3B,KAAI2N,EAAE,CAAC3N,GAAE/C,GAAE+C,GAAE/C,MAAK,IAAII,GAAEF,GAAE20B,GAAE2pB,GAAE3tC,EAAE6lV,GAAE3lT,WAAW,IAAI3wC,GAAE,EAAEF,GAAE2Q,EAAEzL,OAAOhF,GAAEF,GAAEE,MAAKy0B,GAAEhkB,EAAEzQ,KAAIivP,SAAS,YAAWA,QAAQrpP,iBAAiBw4C,GAAEz2C,GAAE8sB,GAAE6gB,aAAa,KAAK9lB,MAAM,OAAO,GAAG4uB,GAAE,GAAG9tC,EAAE,GAAG3R,GAAEy/C,GAAE,GAAGA,GAAE,GAAG9tC,EAAE,GAAGE,GAAElS,KAAKu5Z,MAAMznY,KAAK9xB,KAAK8/C,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAG9tC,IAAI,OAAOhS,MAAM6vB,GAAG2lZ,OAAO3lZ,GAAGulZ,OAAOvlZ,GAAG4lZ,cAAc,SAASnqa,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,IAAG,GAAGg1B,MAAM/mC,KAAI+mC,MAAMl1B,IAAG,MAAMw8B,QAAQ9K,MAAM,2CAA2CouJ,WAAW,IAAIq1G,MAAM,qDAAqD,GAAGjgQ,MAAM2qR,KAAI3qR,MAAM/iC,IAAG,MAAMqqC,QAAQ9K,MAAM,4CAA4CouJ,WAAW,IAAIq1G,MAAM,4EAA4E,IAAIpmS,GAAEmyC,SAASC,cAAc,UAAUpyC,GAAEsT,MAAMw9S,GAAE9wT,GAAEuT,OAAOnQ,GAAE,IAAIqzV,GAAEz2V,GAAEwha,WAAW,MAAM,OAAO/qE,GAAEwxE,UAAU,OAAOxxE,GAAEuzE,SAAS,EAAE,EAAEhqa,GAAEsT,MAAMtT,GAAEuT,QAAQkha,MAAMz0a,GAAEqK,GAAE,CAACqqa,aAAY,EAAGC,iBAAgB,EAAGC,kBAAiB,EAAGC,aAAY,IAAK91a,KAAKqlI,SAASpkI,GAAEsha,UAAU,aAAa,GAAGlia,GAAE6R,GAAE6/S,GAAE1tT,GAAEvE,GAAEsS,IAAGpS,MAAMy3V,GAAGk9D,IAAIohB,cAAc,SAASzqa,IAAG,IAAIjL,GAAE6R,GAAE,EAAEA,GAAEuR,SAASzjB,KAAKq4B,SAASg2W,UAAUtvX,GAAGymE,OAAO,GAAG,IAAI,IAAInlF,GAAE,IAAIioC,OAAOh9B,GAAE,KAAKtL,KAAKq4B,SAASu+X,qBAAqBv2Z,GAAE,IAAIioC,OAAOtoC,KAAKg2a,YAAY1qa,GAAEtL,KAAKq4B,SAASg2W,WAAW,KAAKruY,KAAKg2a,YAAYh2a,KAAKq4B,SAASu+X,mBAAmB,GAAG52Z,KAAKq4B,SAASg2W,YAAY,QAAQt8E,GAAE,EAAEA,IAAG/xT,KAAKq4B,SAASu+X,mBAAmB7kG,KAAI,QAAQ1tT,GAAE,EAAEA,GAAErE,KAAKq4B,SAAS6yH,MAAM6mK,IAAGrrT,OAAOrC,KAAIrE,KAAKq4B,SAAS6yH,MAAM6mK,IAAG1tT,IAAGrE,KAAKq4B,SAAS6yH,MAAM6mK,IAAG1tT,IAAGkkC,QAAQloC,GAAE6R,IAAG,OAAOlS,MAAMy3V,GAAGk9D,IAAIshB,kBAAkB,SAAS3qa,GAAEjL,IAAG,IAAI6R,GAAE5G,GAAEA,IAAG,GAAGjL,GAAEA,KAAG,EAAG,IAAI0xT,GAAE1tT,GAAEgF,GAAE,CAAC6sa,YAAY,CAACzjD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKC,YAAY,CAAC7jD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKE,aAAa,CAAC9jD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKG,UAAU,CAAC/jD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKI,aAAa,CAAChkD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKK,gBAAgB,CAACjkD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKM,sBAAsB,CAAClkD,aAAa,UAAUxmX,MAAM,UAAUohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,UAAU,cAAc,YAAY,SAASC,WAAW,KAAK36R,UAAU,CAAC+2O,aAAa,MAAMxmX,MAAM,MAAMohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,MAAM,OAAOC,WAAW,KAAKO,SAAS,CAACnkD,aAAa,UAAUxmX,MAAM,UAAUohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,WAAW,UAAU,UAAU,WAAW,UAAUC,WAAW,KAAKQ,SAAS,CAACpkD,aAAa,UAAUxmX,MAAM,UAAUohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,WAAW,UAAU,UAAU,WAAW,UAAUC,WAAW,KAAKS,UAAU,CAACrkD,aAAa,UAAUxmX,MAAM,UAAUohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,WAAW,UAAU,UAAU,WAAW,UAAUC,WAAW,KAAKU,UAAU,CAACtkD,aAAa,UAAUxmX,MAAM,UAAUohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,WAAW,UAAU,UAAU,WAAW,UAAUC,WAAW,KAAKW,aAAa,CAACvkD,aAAa,aAAaxmX,MAAM,aAAaohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,aAAa,QAAQC,WAAW,KAAKY,OAAO,CAACxkD,aAAa,GAAGxmX,MAAM,OAAOohD,KAAK,OAAO8oX,aAAY,EAAGC,SAAS,CAAC,UAAU,sBAAsB,qBAAqB,QAAQC,WAAW,KAAKa,kBAAkB,CAACzkD,cAAa,EAAGxmX,OAAM,EAAGohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,EAAC,GAAG,GAAIC,WAAW,KAAKc,eAAe,CAAC1kD,aAAa,GAAGxmX,MAAM,GAAGohD,KAAK,QAAQ8oX,aAAY,EAAGC,SAAS,KAAKC,WAAW,KAAKe,UAAU,CAAC3kD,aAAa,EAAExmX,MAAM,EAAEohD,KAAK,UAAU8oX,aAAY,EAAGC,SAAS,KAAKC,WAAW,MAAMv2a,GAAE2M,OAAOC,KAAKrD,IAAG+I,GAAE,GAAGnR,GAAE,EAAEy2V,GAAE,EAAEx3V,GAAE,EAAEH,IAAE,EAAG,YAAWuL,GAAEjL,IAAG,IAAI6R,EAAE6/S,IAAE,EAAG,IAAI7/S,EAAE,EAAEA,EAAE5G,GAAE5E,OAAOwL,GAAG,EAAE5G,GAAE4G,KAAK7R,KAAI0xT,IAAE,GAAI,OAAOA,GAAE,QAAG,SAAc15R,SAASg/Y,oBAAoBr3a,KAAKq4B,SAASg/Y,kBAAkB,GAAGr3a,KAAKq4B,SAASg/Y,kBAAkBC,cAAczoa,KAAKC,MAAMD,KAAKgjC,UAAUxoC,KAAIrJ,KAAKq4B,SAASg/Y,kBAAkBvF,cAAa,GAAI5/Z,GAAElS,KAAKq4B,SAASg/Y,kBAAkBC,cAAc,eAAa,OAAO,CAAC,IAAIt2a,GAAElB,GAAE4G,OAAO,IAAIxG,GAAE,EAAEA,GAAEc,GAAEd,IAAG,EAAEgS,GAAEpS,GAAEI,KAAI+L,MAAMiG,GAAEpS,GAAEI,KAAIuyX,aAAavgX,GAAEpS,GAAEI,KAAIi2a,aAAY,EAAG,GAAG,aAAc7qa,IAAG,IAAIymT,MAAKzmT,GAAE,GAAGjH,GAAEiH,GAAEymT,IAAGztT,GAAExE,GAAEiyT,UAAI,OAAW,CAAC,GAAG,eAAcA,IAAG1kQ,MAAM,kBAAkBhpD,GAAE6N,GAAE6/S,IAAG9lT,MAAM5H,WAAU,YAAW0tT,IAAG1kQ,MAAM/oD,GAAE4N,GAAE6/S,IAAGqkH,SAAS/xa,IAAG6N,GAAE6/S,IAAG9lT,MAAM5H,WAAU,eAAc0tT,IAAG1kQ,MAAM3lC,OAAO6oY,UAAUlsZ,IAAG6N,GAAE6/S,IAAG9lT,MAAM5H,WAAU,aAAY0tT,IAAG1kQ,KAAK,CAAC,IAAIpsD,GAAE,EAAEA,GAAEoD,GAAEqC,OAAOzF,IAAG,EAAE,GAAGlB,IAAE,EAAG,OAAMkB,IAAGyF,QAAQ,iBAAiBrC,GAAEpD,IAAG,GAAGmR,GAAE7K,KAAK4xC,OAAO90C,GAAEpD,IAAG,YAAY,EAAEoD,GAAEpD,IAAGyF,OAAO,CAAC,IAAIgxV,GAAE,EAAEA,GAAErzV,GAAEpD,IAAGyF,OAAOgxV,IAAG,EAAE,iBAAiBrzV,GAAEpD,IAAGy2V,MAAK33V,IAAE,IAAI,IAAKA,IAAGqS,GAAE7K,KAAK,CAAClD,GAAEpD,IAAG,GAAG,EAAEoD,GAAEpD,IAAG,GAAG,GAAGqmC,KAAK,MAAMp1B,GAAE6/S,IAAG9lT,MAAM,IAAImG,GAAEk1B,KAAK,KAAK,SAASp1B,GAAE6/S,IAAG9lT,MAAMiG,GAAE6/S,IAAG0gE,aAAavgX,GAAE6/S,IAAGokH,aAAY,EAAG,OAAM,SAAU99Y,SAASg/Y,kBAAkBvF,eAAe9xa,KAAKq4B,SAASmS,OAAO/jC,UAAU,aAAa,WAAW,IAAI6E,GAAEjL,GAAE,GAAG,IAAIiL,MAAK4G,IAAE,IAAKA,GAAE5G,IAAG6qa,cAAc,SAASjka,GAAE5G,IAAG+hD,KAAKhtD,GAAEkH,KAAK,IAAI+D,GAAE,KAAK4G,GAAE5G,IAAGW,OAAO5L,GAAEkH,KAAK,IAAI+D,GAAE,IAAI4G,GAAE5G,IAAGW,QAAQ,IAAI5L,GAAEqG,QAAQ1G,KAAKq4B,SAAS8wW,MAAM,2BAA2B9oY,GAAEinC,KAAK,MAAM,UAAUtnC,KAAKq4B,SAASg/Y,kBAAkBvF,cAAa,GAAI9xa,KAAKq4B,SAASg/Y,kBAAkBC,cAAcpla,GAAElS,MAQvnMu0B,GAAGkjU,GAAGk9D,IAAI9mU,GAAG0hC,GAAGj4F,GAAG,GAAG/C,GAAGgjZ,YAAY,SAASjsa,GAAEjL,IAAG,OAAOkvH,GAAGlvH,IAAG,qCAAqCi3B,GAAGhsB,GAAEtL,KAAKq4B,SAASmS,OAAO/jC,UAAU,mBAAmB,WAAW,GAAG6wB,GAAG,CAAC,IAAIhsB,GAAE,+GAA+GikH,GAAG,qBAAqBlvH,GAAE45C,SAAS7rB,mBAAmB,yCAAyClc,GAAE+nC,SAAS7rB,mBAAmB9iB,KAAIymT,GAAE93Q,SAAS7rB,mBAAmBkJ,KAAKjzB,GAAE41C,SAAS7rB,mBAAmB,kDAAkD/kB,GAAE4wC,SAAS7rB,mBAAmB,iBAAiBtuB,GAAEoS,GAAExL,OAAOqrT,GAAErrT,OAAOrC,GAAEqC,OAAOrG,GAAEqG,OAAO2C,GAAE3C,OAAOmnF,GAAG7tF,KAAKq4B,SAASq7X,YAAY1zZ,KAAKq4B,SAAS8wW,MAAM,4CAA4CrpY,GAAE,OAAOE,KAAKq4B,SAAS8wW,MAAM,UAAUnpY,KAAKq4B,SAAS8wW,MAAM9oY,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAGrJ,KAAKq4B,SAAS8wW,MAAM,aAAanpY,KAAKq4B,SAAS8wW,MAAM,eAAet7S,GAAG,KAAK7tF,KAAKq4B,SAASmS,OAAO/jC,UAAU,aAAa,WAAWonF,IAAI7tF,KAAKq4B,SAAS8wW,MAAM,aAAat7S,GAAG,UAAU7tF,MAAM,SAASsE,GAAEgH,IAAG,IAAIjL,GAAEiE,GAAEqwZ,IAAQ3iZ,GAAE3R,GAAE21a,YAAY,SAAS1qa,GAAEjL,IAAG,QAAQ6R,GAAE6/S,GAAE1xT,GAAE+1Z,SAASme,QAAQD,OAAOjwa,GAAE,CAAC,GAAG,IAAI,KAAK,MAAM,QAAQgF,GAAE,CAAC,IAAIvJ,GAAE,EAAEsS,GAAE9G,GAAE5E,OAAO5G,GAAEsS,KAAItS,GAAE,CAAC,GAAGoS,GAAE7R,GAAE+1Z,SAASue,iBAAiBrpa,GAAE0tC,WAAWl5C,KAAIO,GAAE+1Z,SAAS+e,WAAW5ta,KAAK2K,IAAG7R,GAAE+1Z,SAASohB,UAAUtla,IAAG5G,GAAE0tC,WAAWl5C,KAAG,MAAMiL,QAAQmH,MAAK6/S,GAAExqT,KAAK2K,IAAG6/S,GAAExqT,KAAK,CAACkc,SAASpjB,GAAE+1Z,SAASlrB,aAAah5X,IAAG,OAAO,QAAO,OAAO7I,GAAEi+B,KAAK,IAAIp1B,GAAEA,GAAEpE,SAAS,IAAIzE,GAAE9B,KAAKlD,GAAE,EAAE6N,GAAExL,QAAQwL,IAAG,OAAO7I,GAAEi+B,KAAK,KAAKtmC,GAAE,SAASsK,IAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAE,IAAI/I,GAAE,iQAAiQ0oT,GAAE,GAAGjyT,GAAE,EAAEsS,IAAGF,GAAEzF,OAAOC,KAAKpB,IAAGvC,KAAK,SAASuC,GAAEjL,IAAG,OAAOiL,GAAEjL,MAAKqG,OAAO5G,GAAEsS,GAAEtS,KAAIO,GAAE6R,GAAEpS,IAAG,KAAKiyT,GAAErrT,SAAS2C,IAAG,KAAK0oT,GAAErrT,OAAO,iBAAiBqrT,GAAEzqR,KAAK,MAAM,cAAcyqR,GAAE,IAAI1tT,IAAG,OAAOiH,GAAEjL,IAAGyN,SAAS,KAAKmK,OAAM,GAAI5X,IAAG,SAASA,IAAGyN,SAAS,KAAKmK,OAAM,GAAI85S,GAAExqT,KAAK,IAAIlH,GAAE,KAAKgE,GAAE,KAAK,OAAO0tT,GAAErrT,SAAS2C,IAAG,KAAK0oT,GAAErrT,OAAO,iBAAiBqrT,GAAEzqR,KAAK,MAAM,iBAAiBj+B,GAAG,oEAAoEhJ,GAAEmqC,OAAOjjC,KAAK,CAAC,UAAU,SAAS+D,KAAI,SAASA,GAAEjL,GAAE6R,GAAE6/S,IAAG,GAAGzmT,GAAE8qZ,oBAAoB9xZ,GAAEqwZ,IAAIugB,SAAS,kBAAiBjf,SAAS,CAAC,QAAQ5xZ,GAAEiH,GAAE8qZ,SAASme,QAAQD,OAAOjra,GAAEiC,GAAE8qZ,SAASqhB,OAAOrvC,OAAO98X,GAAE8qZ,SAAS+e,WAAW,GAAGr1a,GAAE,GAAGsS,GAAE,EAAEA,GAAE/I,GAAE3C,OAAO0L,KAAItS,IAAGq5C,OAAOC,aAAa/vC,GAAE+I,KAAI,IAAInR,GAAEiR,KAAI6/S,GAAE,CAAC3oT,KAAKtJ,GAAE20Z,YAAW,IAAKp0Z,GAAE,UAAU,IAAIq3V,EAAExlV,KAAI6/S,GAAE,CAAC3oT,KAAKpI,GAAEsK,GAAE8qZ,SAASohB,WAAW/iB,YAAW,IAAKp0Z,GAAE,UAAU,IAAIH,GAAEgS,KAAI7R,GAAE,MAAMA,GAAE,yBAAyBA,GAAE,cAAciL,GAAE+zW,UAAUh/W,GAAE,cAAcY,GAAE,QAAQZ,GAAE,aAAaiE,GAAEqwZ,IAAI+iB,UAAU1uV,QAAQ19E,GAAE8qZ,SAASjyB,OAAO9jY,GAAE,UAAUiL,GAAE8qZ,SAAS6B,OAAO53Z,GAAE,UAAUiL,GAAE8qZ,SAASuhB,OAAOt3a,GAAE,gBAAgBiL,GAAE8qZ,SAASwhB,aAAav3a,GAAE,WAAWiL,GAAE8qZ,SAASyhB,UAAUx3a,GAAE,YAAYiL,GAAE8qZ,SAAS0hB,UAAUz3a,GAAE,cAAciL,GAAE8qZ,SAAS2hB,WAAW13a,GAAE,MAAMA,GAAE,UAAU,IAAIN,GAAEmS,KAAI7R,GAAE,MAAMA,GAAE,eAAeA,GAAE,cAAciL,GAAE+zW,UAAUh/W,GAAE,mBAAmBH,GAAE,QAAQG,GAAE,MAAMiE,GAAEqwZ,IAAI+iB,UAAU1uV,QAAQ3kF,KAAIhE,GAAE,0BAA0BA,GAAE,YAAYA,GAAE,0BAA0BA,GAAE,kBAAkBA,GAAE,MAAMA,GAAE,iBAAiBA,GAAE,qBAAqBA,GAAE,cAAciL,GAAE2qZ,SAAS,KAAK51Z,GAAE,MAAMA,GAAE,MAAMA,GAAE,UAAUiL,GAAEyqZ,aAAa7jZ,KAAI7R,GAAE,MAAMA,GAAE,eAAeA,GAAE,mBAAmBA,GAAE,cAAcq3V,EAAE,QAAQr3V,GAAE,cAAciL,GAAE+zW,UAAUh/W,GAAE,cAAciL,GAAE2qZ,UAAU51Z,GAAE,qBAAqBN,GAAE,SAASM,GAAE,MAAMA,GAAE,UAAUiL,GAAEwqZ,iBAAgB,GAA9vC,CAAmwCxqZ,GAAEixG,KAAKjxG,GAAE+mZ,IAAI/mZ,GAAEooZ,UAAUpoZ,GAAEipZ,cAAcl0Z,GAAEmqC,OAAOjjC,KAAK,CAAC,UAAU,SAAS+D,KAAI,SAASA,GAAEjL,GAAE6R,GAAE6/S,IAAG,GAAGzmT,GAAE8qZ,oBAAoB9xZ,GAAEqwZ,IAAIugB,SAAS,uBAAsBjf,SAAS,CAAC3qZ,GAAE8qZ,SAASme,QAAQD,OAAO,QAAQjwa,GAAEiH,GAAE8qZ,SAAS4hB,QAAQ3ua,GAAE,GAAGvJ,GAAE,EAAEA,GAAEuE,GAAEqC,OAAO5G,KAAIuJ,IAAG8vC,OAAOC,aAAa/0C,GAAEvE,KAAI,IAAIsS,GAAEF,KAAI6/S,GAAE,CAAC3oT,KAAKC,GAAEorZ,YAAW,IAAKp0Z,GAAE,UAAU,IAAIY,GAAEiR,KAAI6/S,GAAE,CAAC3oT,KAAKpI,GAAEsK,GAAE8qZ,SAASohB,WAAW/iB,YAAW,IAAKp0Z,GAAE,UAAU,IAAIq3V,EAAExlV,KAAI,IAAI7R,GAAE,MAAMA,GAAE,YAAYiL,GAAE8qZ,SAAS0hB,UAAUz3a,GAAE,cAAciL,GAAE8qZ,SAAS2hB,WAAW13a,GAAE,UAAUiL,GAAE8qZ,SAASuhB,OAAOt3a,GAAE,yBAAyBA,GAAE,cAAc+R,GAAE,QAAQ/R,GAAE,aAAaA,GAAE,aAAaiE,GAAEqwZ,IAAI+iB,UAAU1uV,QAAQ19E,GAAE8qZ,SAASjyB,OAAO9jY,GAAE,cAAciL,GAAE+zW,UAAUh/W,GAAE,gBAAgBiL,GAAE8qZ,SAASwhB,aAAav3a,GAAE,WAAWiL,GAAE8qZ,SAASyhB,UAAUx3a,GAAE,MAAMA,GAAE,UAAUiL,GAAEyqZ,aAAa7jZ,KAAIpS,GAAE,EAAEA,GAAEwL,GAAE8qZ,SAAStrB,KAAKwpC,OAAO5ta,OAAO5G,KAAIwL,GAAE8qZ,SAAStrB,KAAKwpC,OAAOx0a,IAAG2jB,SAASnY,GAAE8qZ,SAAStrB,KAAKwpC,OAAOx0a,KAAI,IAAIwL,GAAE8qZ,SAAS37D,KAAKw9E,aAAa53a,GAAE,2CAA2CY,GAAE,iBAAiBqK,GAAE+zW,SAAS,mBAAmB3nB,EAAE,iBAAiBpsV,GAAE2qZ,SAAS,wCAAwC3xZ,GAAEqwZ,IAAI+iB,UAAU1uV,QAAQ19E,GAAE8qZ,SAAStrB,KAAKwpC,QAAQ,MAAMj0a,GAAE,UAAUiL,GAAEwqZ,iBAAgB,GAApkC,CAAykCxqZ,GAAEixG,KAAKjxG,GAAE+mZ,IAAI/mZ,GAAEooZ,UAAUpoZ,GAAEipZ,cAAc,IAAI78D,GAAE,SAASpsV,IAAG,IAAIjL,GAAE6R,GAAE6/S,GAAEzmT,GAAE2tB,MAAM,GAAG50B,GAAEiH,GAAE6qB,EAAE9sB,GAAEiC,GAAEgwB,EAAEx7B,GAAEwL,GAAEqsF,SAAS,GAAGvlF,GAAE9G,GAAEgtZ,OAAO,GAAGr3Z,GAAEmR,GAAEikZ,UAAU3+D,GAAEtlV,GAAEmmZ,cAAcr4Z,EAAEkS,GAAEomZ,MAAMz4Z,IAAGqS,GAAEqmZ,eAAe,IAAIn0Z,GAAE,EAAEtD,GAAE,GAAG26Y,GAAEz7Y,EAAEgS,GAAEwlV,IAAGu+D,SAAS,GAAG,iBAAiB/jZ,IAAG+jZ,SAAS,MAAM,CAACh9X,KAAK84R,GAAE57R,EAAE9xB,GAAEi3B,EAAEjyB,GAAEsuF,QAAQ73F,GAAEw4Z,MAAMlmZ,IAAG,IAAIpR,GAAE+wT,GAAE7/S,GAAEwlV,GAAE,0BAA0B7lU,UAAU/jB,SAASgkB,KAAKigS,MAAK/wT,GAAE+wT,GAAE,IAAIztT,GAAE,EAAEA,GAAEtD,GAAE0F,OAAOpC,IAAG,EAAEpE,EAAEgS,IAAGkkZ,SAASxpZ,eAAe,UAAUvM,GAAEH,EAAEgS,IAAGkkZ,SAASzrB,KAAKutC,QAAQC,QAAQn3a,GAAEsD,IAAG00C,WAAW,KAAK34C,IAAUW,GAAEsD,IAAG00C,WAAW,GAAG,KAAK94C,EAAEgS,IAAGkkZ,SAASxpZ,eAAe,WAA7D7M,IAAGiB,GAAEsD,IAA2EvE,IAAG,GAAG,IAAIi4V,GAAE,GAAG,OAAOv0U,SAASvR,GAAE+F,MAAM,IAAI,IAAI,uBAAsB+/U,GAAE,SAAS1sV,IAAG,QAAQjL,EAAE,GAAG6R,GAAE,EAAEA,GAAE5G,GAAE5E,OAAOwL,KAAI7R,GAAG,GAAGiL,GAAE0tC,WAAW9mC,IAAGpE,SAAS,IAAI,OAAOzN,EAAtF,CAAyFY,GAAElB,GAAEmS,KAAI,oBAAmB8lV,GAAEhmV,GAAEjS,GAAEG,EAAEgS,MAAKE,GAAE6mZ,OAAM,EAAG,CAAChgY,KAAK++T,GAAE7hU,EAAE9xB,GAAEi3B,EAAEjyB,GAAEsuF,QAAQ73F,GAAEw4Z,MAAMlmZ,KAAI/R,GAAEmqC,OAAOjjC,KAAK,CAAC,kBAAkB,SAAS+D,IAAG,IAAIjL,GAAEiL,GAAE2tB,MAAM,GAAG/mB,GAAE5G,GAAE6qB,EAAE47R,GAAEzmT,GAAEgwB,EAAEj3B,GAAEiH,GAAEqsF,QAAQtuF,GAAEiC,GAAEgtZ,MAAMx4Z,IAAGuE,GAAEk9T,KAAK,IAAInvT,GAAE,CAAC6mB,KAAK54B,GAAE81B,EAAEjkB,GAAEopB,EAAEy2R,GAAEp6N,QAAQtzF,GAAEi0Z,MAAMjvZ,IAAG,GAAG,0BAA0BwoB,UAAU/jB,SAASgkB,KAAKzxB,IAAG,CAAC,IAAIY,GAAE,EAAE,IAAIA,GAAE,EAAEA,GAAEZ,GAAEqG,OAAOzF,IAAG,EAAE,mBAAmBwL,OAAOolB,UAAU/jB,SAASgkB,KAAKzxB,GAAEY,MAAK,OAAMA,IAAGyF,OAAO5G,GAAEyH,KAAK,CAACmwV,GAAEjrV,OAAO6D,OAAO,GAAG8B,GAAE,CAAC6mB,KAAK54B,GAAEY,IAAG,MAAMg4B,KAAK54B,GAAEY,IAAG,GAAGZ,GAAEY,IAAG,KAAKnB,GAAEyH,KAAKmwV,GAAEjrV,OAAO6D,OAAO,GAAG8B,GAAE,CAAC6mB,KAAK54B,GAAEY,OAAMg4B,MAAM3tB,GAAE2tB,KAAKn5B,QAAOwL,GAAE2tB,KAAKy+T,GAAEjrV,OAAO6D,OAAO,GAAG8B,GAAE,CAAC6mB,KAAK54B,MAAK44B,QAAl1J,CAA21Jw+T,GAAG,oBAAoB+4D,MAAMA,MAAM,oBAAoBC,QAAQA,QAAQ,oBAAoBx2X,QAAQA,QAAQq3W,SAAS,cAATA,IAA2BtsW,GAAGyyT,GAAGk9D,IAAIrlZ,GAAG,SAAShE,IAAG,YAAO,cAAa,IAASA,GAAE8sa,MAAM9sa,GAAE8sa,IAAI,KAAI,IAAKpzY,GAAGgwY,gBAAgB,SAAS1pa,IAAG,QAAQgE,GAAGtP,KAAKq4B,gBAAW,SAAcA,SAAS+/Y,IAAI9sa,GAA3B,EAA+B05B,GAAGqzY,aAAa,SAAS/sa,GAAEjL,IAAG,OAAOiP,GAAGtP,KAAKq4B,UAAUr4B,KAAKq4B,SAAS+/Y,IAAI9sa,IAAGjL,GAAEL,MAAMglC,GAAGiwY,eAAe,SAAS3pa,IAAG,OAAOgE,GAAGtP,KAAKq4B,eAAU,SAAcA,SAAS+/Y,IAAI9sa,IAAGtL,KAAKq4B,SAAS+/Y,IAAI9sa,IAAG,MAAMmsV,GAAGk9D,IAAI2jB,QAAQ,SAAShta,GAAEqwY,GAAE3jD,GAAE5lV,GAAEJ,IAAG,GAAG,oBAAoB47Z,aAAa,oBAAoB2K,cAAc,MAAM,IAAIlxI,MAAM,2GAA2G,iBAAiBs0G,KAAIvpY,GAAEupY,GAAE3pY,GAAEgmV,IAAG,mBAAmB5lV,KAAIJ,GAAEI,GAAEA,GAAE,MAAM,mBAAmBJ,KAAIA,GAAE,WAAU,GAAI,IAAI3R,GAAEL,KAAKq4B,SAASiD,GAAEj7B,GAAE+3Z,YAAY92Z,GAAEjB,GAAEi4B,SAASC,WAAW72B,GAAErB,GAAEi4B,SAASE,YAAY,IAAIpmB,GAAEA,IAAG,IAAIq8Z,WAAW,SAASxta,IAAG06Y,GAAEl4X,SAASk4X,KAAI,EAAE3jD,GAAEv0U,SAASu0U,KAAI,EAAE,IAAI1sV,GAAE8G,GAAEoma,KAAK,GAAG9gF,GAAEjrV,OAAO6D,OAAO,CAAC2nB,IAAI,EAAEG,MAAM,EAAEF,OAAO,EAAEC,KAAK,EAAEsgZ,OAAO,WAAWrma,GAAEu3H,QAAQtpI,GAAEiL,GAAEosV,GAAGzoU,KAAK45C,IAAInnE,GAAET,GAAEuT,OAAO8mB,IAAGp7B,GAAEoL,GAAE5J,GAAGutB,KAAK45C,IAAIvnE,GAAEL,GAAEsT,MAAM+mB,IAAGqgX,GAAE57Y,GAAEqS,GAAEwqD,QAAQ,OAAOt4D,EAAE8N,GAAEsma,kBAAkB,OAAO,GAAGz3a,GAAEuT,OAAO9S,GAAEg2V,GAAEz/T,IAAIy/T,GAAEx/T,QAAQ9lB,GAAEuma,UAAU,CAAC,IAAI33a,GAAE,SAASsK,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,IAAG,IAAIgF,GAAE+pC,SAASC,cAAc,UAAUhqC,GAAEmL,OAAOnQ,GAAEgF,GAAEkL,MAAMw9S,GAAE,IAAIjyT,GAAEuJ,GAAEo5Z,WAAW,MAAM,OAAO3ia,GAAE84a,0BAAyB,EAAG94a,GAAE+4a,6BAA4B,EAAG/4a,GAAEg5a,yBAAwB,EAAGh5a,GAAEi5a,uBAAsB,EAAGj5a,GAAEopa,UAAU92Z,GAAEkoF,iBAAiB,UAAUx6F,GAAEmra,SAAS,EAAE,EAAEl5G,GAAE1tT,IAAGvE,GAAEu0Y,UAAU/oY,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAE,EAAE,EAAE0tT,GAAE1tT,IAAGgF,IAAG6I,GAAE,WAAW,QAAQ5G,GAAEjL,EAAE6R,GAAE,EAAE6/S,GAAE,EAAE1tT,GAAE,GAAGgF,IAAE,IAAK,CAAC,IAAIvJ,GAAE,GAAGiyT,GAAE,EAAE1tT,GAAE4zB,IAAI,OAAMy/T,GAAEz/T,IAAI+/T,GAAE3zV,GAAE8zB,KAAK,OAAMu/T,GAAEv/T,KAAKwjX,GAAEtyY,IAAG/H,GAAEo2V,GAAEv/T,KAAKu/T,GAAEt/T,OAAOkD,GAAEr6B,GAAEsT,MAAM,eAAckka,OAAO,QAAOnta,GAAE2jB,KAAK45C,KAAKvnE,GAAEo2V,GAAEv/T,MAAMmD,GAAEr6B,GAAEsT,OAAOlU,EAAE4uB,KAAK45C,KAAKnnE,GAAEg2V,GAAEz/T,KAAKqD,GAAEr6B,GAAEuT,OAAOtC,MAAK5G,GAAE2jB,KAAK45C,IAAIvnE,GAAEg6B,GAAEr6B,GAAEsT,OAAOlU,EAAE4uB,KAAK45C,IAAInnE,GAAE45B,GAAEr6B,GAAEuT,OAAOtC,IAAG7N,GAAE4zB,IAAI,IAAI3sB,GAAE2jB,KAAK45C,KAAKvnE,GAAEo2V,GAAEv/T,KAAKu/T,GAAEt/T,OAAOkD,GAAEr6B,GAAEsT,OAAOlU,EAAE4uB,KAAK45C,KAAKnnE,GAAEg2V,GAAEx/T,OAAOw/T,GAAEz/T,KAAKqD,GAAEr6B,GAAEuT,OAAOtC,KAAI7I,GAAE,OAAO,CAAC,YAAYquV,GAAE+gF,SAAS,IAAI1mH,GAAEzmT,GAAE2jB,KAAK45C,KAAKvnE,GAAEo2V,GAAEv/T,MAAMmD,GAAEr6B,GAAEsT,QAAQjJ,GAAE2jB,KAAK45C,IAAIvnE,GAAEg6B,GAAEr6B,GAAEsT,MAAMw9S,IAAG1tT,GAAE8zB,KAAK,IAAI,IAAI/lB,GAAE,CAACtS,GAAEkB,GAAEC,GAAE8wT,GAAE7/S,GAAE5G,GAAEjL,GAAGgE,GAAE8zB,KAAK9zB,GAAE4zB,IAAIn4B,GAAEyU,MAAM+mB,GAAEx7B,GAAE0U,OAAO8mB,GAAEv7B,GAAE,KAAKuE,GAAG,GAAGtE,KAAKqlI,SAASv8D,MAAM9oE,KAAKoS,KAAI2/S,IAAGzmT,KAAIrK,GAAEsT,MAAM,MAAMvU,KAAKm5B,eAAe/mB,GAAE,CAACtS,GAAEkB,GAAEC,GAAE,EAAEiR,GAAE5G,GAAEjL,GAAGgE,GAAE8zB,KAAK9zB,GAAE4zB,IAAIn4B,GAAEyU,MAAM+mB,GAAEx7B,GAAE0U,OAAO8mB,GAAEv7B,GAAE,KAAKuE,GAAGtE,KAAKqlI,SAASv8D,MAAM9oE,KAAKoS,IAAG,IAAIF,IAAG7R,IAAIY,GAAEuT,OAAO,MAAMxU,KAAKm5B,UAAUnnB,GAAE9R,GAAEgS,GAAE,KAAKE,KAAI8+G,KAAKlxH,MAAM,GAAG,cAAa8yC,SAAS,CAAC,IAAIi/Q,GAAE,IAAI3rK,MAAM2rK,GAAEx8N,OAAOrjF,GAAE6/S,GAAE01C,IAAIxmW,GAAEsha,UAAU,aAAatha,GAAE8wT,QAAO7/S,SAAQ,CAAC,IAAI7N,GAAE4qB,KAAK04D,SAAS75E,SAAS,IAAIzE,GAAE,CAACpI,GAAE06Y,GAAE3jD,GAAE93V,GAAEG,GAAEN,GAAEsE,GAAEC,GAAGtE,KAAKqlI,SAASv8D,MAAM9oE,KAAKqJ,IAAG2I,GAAE9R,GAAEG,GAAEgE,GAAEgF,MAAK6nH,KAAKlxH,MAAM,oBAAoB4ta,cAAcx7Z,GAAE4ma,KAAK,OAAOpL,YAAYtia,GAAE8G,IAAG,GAAG,oBAAoBmma,cAAc,OAAO,KAAK,IAAIrma,GAAE,eAAe,MAAM,iBAAiB5G,KAAI4G,GAAE,QAAQgR,KAAK5X,IAAG,UAAU,YAAY8G,GAAEmC,MAAMnC,GAAEmC,OAAOjT,GAAEg6B,GAAEi9Y,cAAcrma,IAAG5G,QAAE,EAAO8G,IAAG+pH,KAAK,SAAS7wH,IAAG8G,GAAEq8Z,WAAWnja,GAAE8pG,QAAQ,SAAS9pG,IAAG0G,GAAE,KAAK1G,OAczlR,SAASA,IAAG,IAAIs0C,GAAEohW,GAAE38Y,GAAEvE,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEqB,GAAEG,GAAE4C,GAAEvE,GAAEiB,GAAEkR,GAAEzQ,GAAEk2V,EAAEgkD,GAAE3jD,GAAEhmV,GAAEsnB,GAAEsmB,GAAE,WAAW,OAAO,SAASt0C,IAAG,OAAOjL,EAAEwxB,UAAUvmB,GAAE,IAAIjL,GAAG,aAAY,EAAtE,GAA4EqB,GAAE,SAAS4J,GAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAE,IAAIF,GAAE,EAAE6/S,GAAEzmT,EAAE5E,OAAOrG,QAAE,EAAOP,GAAEuE,IAAE,GAAIA,IAAG6N,KAAI6/S,KAAI1xT,GAAEiL,EAAE4G,IAAG5G,EAAE4G,IAAGm+Y,cAAchsZ,IAAE,GAAI6N,KAAI,IAAIA,GAAE6/S,GAAE,EAAEA,KAAIjyT,KAAG,SAASO,GAAEiL,EAAE4G,IAAG5G,EAAE4G,IAAGo+Y,eAAexwZ,IAAE,GAAIoS,KAAI,IAAI7I,GAAE,QAAQ+I,IAAE,EAAGF,GAAE,EAAEA,KAAI6/S,IAAG,UAAUzmT,EAAE4G,MAAK7R,GAAEiL,EAAE4G,IAAGq2B,QAAQ,OAAO,KAAKn2B,KAAI/R,GAAEA,GAAEgwZ,YAAYhwZ,KAAI+R,GAAE/I,GAAE6Z,KAAK7iB,KAAIiL,EAAE4G,IAAG7R,IAAG6R,KAAI,OAAO5G,GAAGvL,GAAE,SAASuL,GAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE,IAAI1xT,QAAE,EAAO6R,IAAG6/S,GAAEzmT,EAAE4lB,MAAM,MAAMylX,SAASt2Y,IAAG6R,IAAG7R,GAAEgE,GAAE6N,GAAEnE,OAAO8J,eAAe3F,GAAE6/S,GAAE4kF,QAAQ,OAAOt2Y,IAAGW,GAAE,SAASsK,GAAG,IAAIjL,GAAE,OAAM,GAAIiL,EAAE,WAAW,MAAMA,GAAGP,QAAQ,QAAQq8B,MAAM1f,OAAOpc,EAAEi9B,QAAQ,KAAK,QAAQj9B,EAAE,OAAOoc,OAAOpc,EAAEi9B,QAAQ,KAAK,KAAK,OAAM,EAAGj9B,EAAEP,QAAQ,QAAQq8B,MAAM1f,OAAOpc,EAAEi9B,QAAQ,KAAK,QAAQj9B,EAAE,MAAMoc,OAAOpc,EAAEi9B,QAAQ,KAAK,KAAK,OAAiBloC,GAAE6R,GAAE5G,IAAIjL,QAAE,KAAUA,GAAE,CAAC,WAAW,EAAE,UAAU,GAAGosU,MAAM,GAAGC,OAAO,GAAGC,MAAM,GAAG,UAAU,GAAG,WAAW,GAAGu+C,KAAK,GAAG5/W,MAAejL,GAAEoxC,WAAWnmC,IAAxB4G,GAAE5G,GAAGjL,GAAE,IAAgCA,GAAEiL,EAAEkoC,MAAM,iBAAiBnjC,MAAMk0D,QAAQlkE,KAAI,OAAMqG,OAAOwL,GAAE5G,GAAGmmC,WAAWpxC,GAAE,IAAI,GAAG6R,GAAE5G,GAAG,IAAI/J,GAAE,SAAS+J,GAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAE,OAAOA,GAAEiC,EAAEjH,GAAE+uC,SAAS6lY,aAAa7lY,SAAS6lY,YAAYnyV,iBAAiB1zC,SAAS6lY,YAAYnyV,iBAAiBz9E,GAAE,MAAMA,GAAE6va,aAAa7va,GAAE6va,aAAa7va,GAAE2zC,MAAM9qC,QAAE,GAAQ7R,GAAE,IAAI,eAAeN,IAAGgyT,GAAE,SAASzmT,IAAG,OAAOA,GAAEA,GAAEi9B,QAAQ,OAAO,SAASj9B,IAAG,OAAOA,GAAEo6E,OAAO,GAAGp+E,gBAAgBjD,GAAEiH,MAAK,iBAAiB,QAAQjL,GAAE,cAAcP,GAAEiyT,GAAE,gBAAgB,SAAS1xT,GAAE,cAAc+R,GAAE2/S,GAAE,gBAAgB,OAAO,UAAU7/S,GAAEjR,GAAE8wT,GAAE,iBAAiB,YAAY,WAAW1xT,GAAE,cAAcA,GAAE,cAAc6R,GAAE7R,GAAE,cAAc6R,GAAE7R,GAAE,eAAeA,GAAE,aAAaW,GAAE+wT,GAAE,eAAe,EAAE1xT,GAAE,eAAeW,GAAE+wT,GAAE,iBAAiB,EAAE1xT,GAAEwqB,QAAQ,cAAa,WAAW,SAAS,QAAQ3Y,GAAE,aAAY2Y,QAAQxqB,GAAE,cAAc6R,IAAGlR,GAAE+wT,GAAE,gBAAgB,EAAE1xT,GAAE,iBAAiB6R,IAAGlR,GAAE+wT,GAAE,mBAAmB,EAAE1xT,GAAE,eAAe6R,IAAGlR,GAAE+wT,GAAE,iBAAiB,EAAE1xT,GAAE,kBAAkB6R,IAAGlR,GAAE+wT,GAAE,oBAAoB,EAAE1xT,GAAE,eAAe6R,IAAGlR,GAAE+wT,GAAE,iBAAiB,EAAE1xT,GAAE,gBAAgB6R,IAAGlR,GAAE+wT,GAAE,kBAAkB,EAAE1xT,GAAE,gBAAgB6R,IAAGlR,GAAE+wT,GAAE,kBAAkB,EAAE1xT,GAAE,iBAAiB6R,IAAGlR,GAAE+wT,GAAE,mBAAmB,EAAE1xT,GAAE,qBAAqB0xT,GAAE,sBAAsB,OAAO1xT,GAAEmua,MAAM92E,GAAE3lC,GAAE,cAAc,OAAO1xT,GAAEsiG,MAAMziG,GAAE6xT,GAAE,WAAW,OAAO1xT,GAAEkjG,MAAMwuN,GAAE,SAAS1xT,IAAGoB,GAAE,SAAS6J,EAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAE,GAAG/I,IAAE,EAAGvJ,GAAEuE,QAAE,EAAO0tT,GAAE7/S,GAAE,IAAI5G,EAAEyT,IAAI,GAAG,mBAAmBgzS,GAAE1oT,GAAE0oT,GAAEzmT,EAAEjL,SAAQ,IAAIgE,GAAE,EAAEvE,GAAEiyT,GAAErrT,QAAQ2C,IAAGhF,KAAIvE,IAAGuJ,GAAE0oT,GAAE1tT,IAAGiH,EAAEjL,IAAGgE,KAAI,GAAG0tT,GAAE7/S,GAAE5G,EAAEwnC,WAAWzpC,IAAG0oT,GAAE,GAAG,mBAAmBA,GAAE1oT,GAAE0oT,GAAEzmT,EAAEjL,SAAQ,IAAIgE,GAAE,EAAEvE,GAAEiyT,GAAErrT,QAAQ2C,IAAGhF,KAAIvE,IAAGuJ,GAAE0oT,GAAE1tT,IAAGiH,EAAEjL,IAAGgE,KAAI,IAAI+N,GAAE,iBAAiB9G,EAAEyxT,UAAUzxT,EAAEyxT,UAAU7rS,MAAM,KAAK,GAAG7sB,GAAE,EAAEA,GAAE+N,GAAE1L,OAAOrC,KAAI,GAAG0tT,GAAE7/S,GAAE,IAAIE,GAAE/N,MAAKgF,IAAG0oT,GAAE,GAAG,mBAAmBA,GAAE1oT,GAAE0oT,GAAEzmT,EAAEjL,SAAQ,IAAIgE,GAAE,EAAEvE,GAAEiyT,GAAErrT,QAAQ2C,IAAGhF,KAAIvE,IAAGuJ,GAAE0oT,GAAE1tT,IAAGiH,EAAEjL,IAAGgE,KAAI,OAAOgF,IAAGiwB,GAAE,SAAShuB,EAAEjL,IAAG,IAAI6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAE,IAAIgS,GAAE,GAAG6/S,GAAE,GAAG1tT,GAAE,EAAEnE,GAAEoL,EAAE00W,KAAK,GAAGC,MAAMv5W,OAAOzF,GAAEqK,EAAEk3Z,YAAYn+Z,GAAEnE,IAAGw3V,GAAEpsV,EAAE00W,KAAK,GAAGC,MAAM57W,IAAG0tT,GAAE1tT,IAAG,CAACqJ,KAAKgqV,GAAE7yN,YAAYhtH,cAAc0wB,QAAQ,OAAO,IAAI8jR,OAAOqrC,GAAE7yN,YAAYt8F,QAAQ,SAAS,IAAIh0B,MAAMmjV,GAAE8qE,YAAYvha,GAAEZ,GAAEmzX,IAAIn7V,SAASC,SAASC,YAAYl0B,KAAI,IAAIA,GAAE,EAAEA,GAAEiH,EAAE00W,KAAKt5W,QAAQ,CAAC,IAAI0L,GAAE9G,EAAE00W,KAAK37W,IAAGvE,GAAE,GAAGuJ,GAAE,EAAEA,GAAE+I,GAAE6tW,MAAMv5W,QAAQ5G,GAAEiyT,GAAE1oT,IAAGqE,MAAM0E,GAAE6tW,MAAM52W,IAAGw7H,YAAYt8F,QAAQ,SAAS,IAAIl/B,KAAI6I,GAAE3K,KAAKzH,IAAGuE,KAAI,MAAM,CAAC27W,KAAK9tW,GAAE0lE,QAAQm6O,KAAI,IAAIv4S,GAAE,CAAC2/Z,OAAO,EAAEC,MAAM,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,OAAO,GAAGt4a,GAAE,EAAE8/Y,GAAE,SAAS11Y,EAAEjH,GAAEhE,IAAG,IAAI6R,GAAE6/S,GAAE1oT,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAE,IAAI6xT,GAAEzmT,EAAE+mC,WAAWngC,QAAE,GAAQE,GAAE,WAAW/I,GAAE9H,GAAE+J,IAAIuf,WAAWxmB,GAAEo1a,mBAAmBp1a,GAAEq1a,cAAcrwa,KAAIvJ,GAAE,EAAEmB,GAAE8wT,GAAErrT,OAAO5G,GAAEmB,IAAG,CAAC,GAAG,aAAciR,GAAE6/S,GAAEjyT,KAAI,CAAC,GAAGuE,GAAEs1a,sBAAsBzna,IAAG,OAAMs1X,UAAU,cAAa10V,SAAS,CAAC,IAAI/yC,GAAEmS,GAAE5N,GAAED,GAAEmvX,IAAIomD,YAAY3hZ,IAAI5zB,GAAEmvX,IAAIn7V,SAASmS,OAAO/jC,UAAU,UAAU,SAAS6E,IAAGjH,GAAEi3B,EAAEh3B,GAAE08Y,GAAEjhZ,GAAEsE,GAAEhE,IAAGgE,GAAEmvX,IAAIomD,YAAY3hZ,IAAI5zB,GAAEi3B,EAAE,GAAGj3B,GAAEi3B,GAAG,KAAI,GAAI,GAAG,OAAMksW,UAAU,gBAAe10V,UAAU5gC,GAAE2yH,YAAY95H,QAAQ,cAAc1G,GAAEmvX,IAAIr6V,UAAU90B,GAAEi3B,EAAEj3B,GAAEmvX,IAAIomD,YAAY3hZ,aAAa,OAAMuvW,UAAUhuX,GAAEtH,GAAE4gC,UAAU,GAAG,OAAM00V,SAAS,CAAC,IAAIxmY,EAAEkR,GAAEqgC,UAAU,GAAGrgC,GAAEqgC,WAAW,UAASw3X,WAAWj3X,SAAS,GAAG,UAASi3X,WAAWA,WAAWj3X,SAAS9xC,EAAEE,KAAI,KAAKF,MAAM,CAAC,IAAI26Y,GAAEtyY,GAAE,aAAa2uV,IAAG,EAAE,IAAI2jD,IAAGt3Y,GAAEmvX,IAAIn7V,SAAS+/X,YAAYpmZ,GAAE,IAAI2pY,GAAEt3Y,GAAEmvX,IAAIn7V,SAAS+/X,YAAY98X,GAAE,KAAKqgX,GAAEt3Y,GAAEmvX,IAAIn7V,SAAS+/X,YAAYl4Z,GAAE,SAASoL,GAAEjL,IAAGL,KAAKwzX,IAAI3mD,OAAOvhU,GAAE0sV,GAAE33V,GAAE2R,GAAEspB,GAAE,OAAO,GAAGppB,GAAE2na,cAAc37X,KAAK47X,wBAAwB5na,KAAI7N,GAAE01a,QAAQ/4a,EAAEqI,QAAO,iBAAiB6I,IAAG7N,GAAE01a,QAAQ7na,GAAE7I,QAAO,CAAC,IAAI/H,GAAE,GAAG,WAAUwxC,SAAS,CAAC,IAAIpxC,GAAEwQ,GAAE8kC,aAAa,OAAO11C,GAAEq2V,EAAEtzV,GAAEmvX,IAAI0wC,UAAUxia,KAAIA,IAAG,GAAGJ,GAAE,CAAC+C,GAAEmvX,IAAIn7V,SAASC,SAASE,YAAYn0B,GAAEmvX,IAAIomD,YAAY1hZ,OAAO7zB,GAAEi3B,EAAEppB,GAAEsC,QAAQnQ,GAAEi3B,EAAEj3B,GAAEmvX,IAAIomD,YAAY3hZ,MAAM5zB,GAAEmvX,IAAIr6V,UAAU90B,GAAEi3B,EAAEj3B,GAAEmvX,IAAIomD,YAAY3hZ,IAAI5zB,GAAEs1a,sBAAsBzna,KAAI,IAAI1Q,GAAED,GAAE2Q,IAAGikB,GAAE9xB,GAAE8xB,EAAE2pB,GAAE,GAAGz7C,GAAEmvX,IAAIn7V,SAAS+/X,YAAYjmZ,IAAG3Q,GAAE,eAAeA,GAAE,iBAAiBs+C,GAAE1qC,IAAG5T,GAAE,gBAAgBA,GAAE,kBAAkBs+C,GAAED,IAAGr+C,GAAE,cAAcA,GAAE,gBAAgBs+C,GAAE/oC,IAAGvV,GAAE,iBAAiBA,GAAE,mBAAmBs+C,QAAE,IAASt+C,GAAEgta,OAAO,aAAYA,MAAMr4Y,IAAG9xB,GAAE21a,SAASzla,MAAMrC,GAAEqC,MAAMa,GAAE+gB,IAAGhkB,GAAE9N,GAAEmvX,IAAInuP,SAAS/jI,GAAE60B,GAAE9xB,GAAEi3B,EAAEukB,GAAE3tC,GAAEqC,MAAMrC,GAAEsC,QAAQlT,QAAE,EAAO,aAAYkta,OAAO,YAAWA,OAAOnqa,GAAE41a,eAAe1ya,KAAK,SAAS+D,GAAEjL,GAAE6R,GAAE6/S,IAAG,OAAO1tT,GAAEi3B,GAAGj7B,IAAGgE,GAAE8xB,GAAG7qB,GAAEjH,GAAE21a,SAASzla,OAAOrC,IAAE,MAAO6/S,IAAG,OAAMy1E,WAAWhuX,GAAEu4S,GAAEj/Q,WAAWzuC,GAAE8xB,EAAE47R,GAAEx9S,MAAMlQ,GAAEmvX,IAAIomD,YAAYzhZ,KAAK9zB,GAAEmvX,IAAIomD,YAAYrla,SAASlQ,GAAE8xB,GAAG7qB,GAAEjH,GAAEi3B,EAAEj7B,GAAEgE,GAAE21a,SAASzla,OAAOrC,IAAE,IAAKg/G,KAAKlxH,KAAK,YAAWwua,OAAOt8Z,GAAEqC,MAAMpC,GAAEiD,GAAE,EAAE/Q,GAAEi3B,EAAEppB,GAAEsC,OAAOqrC,GAAE9oC,GAAE7E,GAAEqC,QAAQlQ,GAAE41a,eAAe1ya,KAAK,SAAS+D,GAAEjL,GAAE6R,IAAG,QAAQ7N,GAAEi3B,EAAEhwB,IAAGjL,KAAIgE,GAAEmvX,IAAIn7V,SAASu+X,qBAAqB,OAAMpvB,UAAU,YAAWt1X,IAAGywF,QAAQt+F,GAAEi3B,EAAEhwB,IAAE,IAAK4lH,KAAKlxH,KAAKqE,GAAEi3B,EAAEppB,GAAEsC,OAAOnQ,GAAEmvX,IAAIn7V,SAASu+X,qBAAqBvyZ,GAAE21a,SAASzla,OAAOrC,GAAEqC,MAAMpC,GAAEiD,GAAE,YAAWo5Z,QAAQnqa,GAAE8xB,GAAGjkB,GAAEqC,MAAMpC,GAAEiD,KAAI/Q,GAAEi3B,GAAGppB,GAAEsC,OAAOqrC,GAAE9oC,WAAU,aAAY+7B,SAAS4kT,GAAEp+T,GAAEpnB,GAAE7N,IAAGA,GAAEi3B,GAAG,GAAGj3B,GAAEmvX,IAAIzuJ,MAAM1gO,GAAE8xB,EAAE9xB,GAAEi3B,EAAEo8T,GAAEsoB,KAAKtoB,GAAE9/Q,QAAQ,CAAC8tS,UAAS,EAAG0iD,aAAa/na,GAAE+na,aAAaH,QAAQ5ja,GAAEmvX,IAAIomD,YAAY38M,IAAI17N,GAAE2Q,MAAK7N,GAAEi3B,EAAEj3B,GAAEmvX,IAAIo1C,YAAYttY,EAAEj3B,GAAEmvX,IAAIo1C,YAAYlxE,EAAE,WAAW,UAAS5kT,UAAU,UAASA,SAAS5xC,GAAE,EAAEO,GAAEyQ,GAAE7N,GAAEhE,KAAI2gZ,GAAE9uY,GAAE7N,GAAEhE,IAAGgE,GAAEi3B,GAAG,WAAW,UAASwX,SAAS,CAAC,IAAIvgC,GAAElO,GAAE8xB,EAAE9xB,GAAE8xB,GAAG,GAAG9xB,GAAEmvX,IAAIn7V,SAAS+/X,YAAY/zZ,GAAEi3B,GAAG,EAAE75B,GAAEyQ,GAAE7N,GAAEhE,KAAI2gZ,GAAE9uY,GAAE7N,GAAEhE,IAAGgE,GAAE8xB,EAAE5jB,OAAM,OAAOL,GAAE4gC,UAAUzuC,GAAEi3B,GAAGjyB,GAAE,aAAahF,GAAEmvX,IAAIn7V,SAAS+/X,YAAY/zZ,GAAE01a,QAAQ,SAASn6X,GAAEv2C,MAAK5H,GAAEyQ,GAAE7N,GAAEhE,KAAI2gZ,GAAE9uY,GAAE7N,GAAEhE,KAAIP,KAAI,GAAGO,GAAE65a,KAAK71a,GAAEi3B,EAAElpB,GAAE,OAAO/N,GAAEo1a,iBAAiBv5a,KAAIy3V,EAAE,GAAGgkD,GAAE,SAASrwY,EAAEjC,GAAEhJ,GAAE6R,IAAG,IAAIpS,GAAEiyT,GAAEzmT,EAAEy6B,qBAAqB,OAAO1hC,GAAE0tT,GAAErrT,OAAO0L,GAAE,EAAE,cAAa/I,GAAEmqX,IAAIn7V,SAASmS,OAAOomX,QAAQ,gBAAgB1+Y,GAAEpS,IAAG,YAAWO,GAAE6R,GAAE6/S,IAAG,GAAG1xT,GAAE,CAAC,IAAIgE,EAAE,IAAI+hJ,MAAMtmJ,KAAIsS,GAAE/N,EAAE81a,YAAY,GAAG91a,EAAE+1a,QAAQ/1a,EAAEkxF,OAAO,WAAW,GAAGlxF,EAAEoR,WAAW,IAAIpR,EAAEojW,IAAI18V,QAAQ,iBAAiB1G,EAAEkQ,MAAMrC,IAAG7N,EAAEkQ,OAAO,EAAElQ,EAAEmQ,OAAOu9S,IAAG1tT,EAAEmQ,QAAQ,GAAGnQ,EAAEkQ,MAAMlQ,EAAEmQ,QAAQ,CAAC,IAAIlJ,GAAEjC,GAAEmqX,IAAI0wC,UAAU7ja,KAAIA,GAAEs3V,EAAErsV,IAAGqsV,EAAErsV,KAAIjH,IAAI+N,IAAGnR,MAAKoD,EAAEojW,IAAIpnW,IAAG,KAAKgE,MAAKqzV,GAAE3lC,GAAE1tT,IAAG2yC,aAAa,OAAO+6Q,GAAE1tT,IAAGkQ,MAAMw9S,GAAE1tT,IAAGmQ,QAAQ,OAAOpC,IAAGnR,MAAK+2V,GAAE,SAAS1sV,EAAEjC,GAAEvJ,IAAG,IAAIsS,GAAE9G,EAAEy6B,qBAAqB,UAAU,GAAG,EAAE3zB,GAAE1L,OAAO,CAAC0L,GAAEA,GAAE,GAAG,IAAI/R,GAAEgJ,GAAEmqX,IAAIn7V,SAAS8wW,MAAMj3X,GAAE7I,GAAEiyB,EAAEjyB,GAAEmqX,IAAIn7V,SAAS8wW,MAAM,WAAU,EAAG6X,GAAE5uY,GAAE/I,GAAEvJ,IAAG,IAAImB,GAAEguB,KAAK6gB,KAAKzmC,GAAEiyB,EAAEppB,IAAG,EAAE7I,GAAEiyB,EAAEppB,GAAE7I,GAAEmqX,IAAIn7V,SAAS8wW,MAAM9oY,GAAEgJ,GAAEmqX,IAAIomD,YAAY1hZ,QAAQj3B,GAAE,QAAQ8wT,GAAE,SAASzmT,IAAG,IAAIjL,QAAE,OAAWiL,GAAEsqZ,WAAW,EAAE1jZ,GAAE7I,GAAEiyB,EAAEjyB,GAAEiyB,EAAEjyB,GAAEmqX,IAAIn7V,SAASC,SAASE,YAAYnvB,GAAEmqX,IAAIomD,YAAY1hZ,OAAO7uB,GAAEmqX,IAAIomD,YAAY1hZ,QAAQj3B,GAAE,QAAQ8wT,EAAE3/S,GAAE2zB,qBAAqB,QAAQ1hC,GAAE,EAAEA,GAAE0tT,EAAErrT,SAASrC,IAAE,GAAI,IAAI0tT,EAAE1tT,IAAG04T,UAAU,KAAKx0R,QAAQ,UAAU,KAAKx9B,QAAQ,mBAAmBgnT,EAAE1tT,IAAG2hC,UAAU3lC,KAAG,GAAI,IAAI0xT,EAAE1tT,IAAG04T,UAAU,KAAKx0R,QAAQ,UAAU,KAAKx9B,QAAQ,kBAAkBgnT,EAAE1tT,IAAG2hC,UAAU,4BAA4Bg7W,GAAE5uY,GAAE/I,GAAEvJ,IAAGuJ,GAAEmqX,IAAIomD,YAAY1hZ,QAAQj3B,GAAEoI,GAAEiyB,EAAEppB,IAAG7N,GAAE+N,GAAE2zB,qBAAqB,QAAQ2xT,GAAE,EAAEA,GAAErzV,GAAEqC,SAASgxV,IAAE,GAAI,IAAIrzV,GAAEqzV,IAAG36B,UAAU,KAAKx0R,QAAQ,UAAU,KAAKx9B,QAAQ,iBAAiB1B,GAAEmqX,IAAIn7V,SAASmS,OAAO/jC,UAAU,wBAAwB4C,GAAEmqX,IAAIuiD,cAAc7kT,KAAK7nH,GAAEmqX,IAAI,6BAA4B,GAAInqX,GAAEmqX,IAAIn7V,SAASmS,OAAO/jC,UAAU,UAAUsrT,IAAE,GAAIA,KAAIv4S,GAAE6ga,OAAO,IAAIroa,GAAE,SAAS1G,EAAEjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,IAAIhJ,GAAE,OAAM,EAAG,IAAIP,GAAEsS,GAAEnR,GAAEy2V,GAAE,iBAAiBr3V,IAAGA,GAAE0pa,aAAa1pa,GAAE,GAAGA,GAAE2lC,WAAW,iBAAiB3lC,KAAIP,GAAEO,GAAEkoC,QAAQ,sBAAsB,IAAImvT,GAAE,gBAAgB5+U,KAAK8hB,MAAM9sB,YAAY,IAAImhB,KAAK04D,UAAUtiC,QAAQ,IAAIpkD,GAAEmyC,SAASC,cAAc,QAAQ2J,MAAMs4X,QAAQ,wOAAwOr0a,GAAE+kC,UAAU,8CAA8C0xT,GAAE,OAAOtkT,SAAS8K,KAAKvH,YAAY11C,KAAImR,GAAE6nB,OAAOqgZ,OAAO5iF,KAAItkT,SAAS5pC,OAAO4I,GAAEghC,SAASmnY,QAAQz6a,IAAGsS,GAAEghC,SAASrsC,QAAQ1G,GAAE+R,GAAEghC,SAAS8K,MAAM,IAAIh+C,GAAEH,GAAE,IAAIuE,GAAEgH,EAAE4G,GAAE6/S,GAAE1tT,IAAG,OAAOs3Y,GAAE7pX,KAAK9xB,KAAKK,GAAEN,GAAEsE,GAAEm2a,gBAAgB,SAASlva,IAAG0sV,GAAE33V,GAAEN,GAAEsE,GAAEm2a,iBAAiBx5B,GAAE3gZ,GAAEN,GAAEsE,GAAEm2a,iBAAiBz6a,GAAEyzX,IAAIn7V,SAASmS,OAAOomX,QAAQ,yBAAyB1wZ,GAAEH,GAAE44F,UAAU,mBAAmBtvF,GAAEA,GAAEnJ,IAAGoL,IAAGojC,QAAQ9K,MAAM,sEAAsE1jC,IAAG,CAACi2B,EAAEp2B,GAAEo2B,EAAEmF,EAAEv7B,GAAEu7B,KAAKh3B,GAAE,SAASgH,EAAEjL,GAAE6R,GAAE6/S,IAAG,OAAO/xT,KAAKwzX,IAAIloX,EAAEtL,KAAKm2B,EAAE91B,GAAEL,KAAKs7B,EAAEppB,GAAElS,KAAKg6a,SAASjoH,GAAE/xT,KAAKi6a,eAAe,GAAGj6a,KAAKi9P,OAAOj9P,OAAO6xB,UAAUorO,KAAK,WAAW,OAAOj9P,KAAKk/V,UAAU,CAACjmU,KAAK,GAAG+jB,MAAM,IAAIh9C,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,MAAM7kY,GAAEutB,UAAU8mE,QAAQ,WAAW,OAAO34F,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,KAAK,CAAChzW,EAAEn2B,KAAKm2B,EAAEmF,EAAEt7B,KAAKs7B,EAAEm/Y,OAAM,IAAKn2a,GAAEutB,UAAU8nZ,sBAAsB,SAASrua,GAAG,IAAIjL,IAAE,EAAG6R,GAAE,GAAG,GAAG,EAAElS,KAAKi6a,eAAevza,OAAO,CAAC,QAAQqrT,GAAE,EAAEA,GAAE/xT,KAAKi6a,eAAevza,SAASqrT,IAAE,IAAK/xT,KAAKi6a,eAAeloH,IAAGzmT,GAAGjL,IAAE,EAAG6R,GAAE3K,KAAKvH,KAAKi6a,eAAeloH,KAAI/xT,KAAKi6a,eAAe/na,GAAE,OAAO7R,IAAGiE,GAAEutB,UAAU6oZ,wBAAwB,SAASpva,EAAEjL,IAAG,IAAI6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,EAAE26Y,GAAE3jD,GAAE,IAAIjjT,GAAK/0C,KAAKwzX,IAAIn7V,SAAS+/X,YAAY/uZ,GAAE,GAAG+I,GAAEnR,GAAEy2V,GAAEM,GAAEl4V,GAAEuE,GAAEnE,GAAE6xT,QAAE,EAAO/wT,EAAE,CAACsD,GAAE,IAAI4N,GAAE,EAAEypY,GAAE37Y,KAAKg6a,SAASzla,MAAMjJ,EAAE5E,QAAQ,GAAG5G,GAAEwL,EAAEqrY,QAAQ3+C,GAAE33V,GAAEs2Y,QAAQ72Y,GAAE,IAAIuE,GAAEgF,IAAG0oT,GAAEimC,GAAE,iBAAiB93V,GAAE83V,GAAE,mBAAmB3zV,GAAErE,KAAKwzX,IAAIn7V,SAASg2W,QAAQt8E,GAAE7xT,IAAGk2Z,SAASme,QAAQlra,GAAE0oT,GAAE7xT,IAAGmE,IAAGqzV,GAAE,CAAC48E,OAAOjwa,GAAEiwa,OAAOG,QAAQpwa,GAAEowa,QAAQ1+D,SAAS,GAAG/d,GAAE,aAAa68E,WAAW3ia,IAAGjR,GAAEjB,KAAKwzX,IAAIwlC,mBAAmBl5Z,GAAE43V,IAAGA,GAAEqe,SAASh2W,GAAE,aAAYuE,GAAE,GAAGtD,EAAEuG,KAAKjD,YAAWq3Y,GAAEzpY,GAAEjR,GAAE,CAAC,IAAImR,GAAEpS,KAAKwzX,IAAIh6V,gBAAgB15B,GAAE67Y,GAAEjkD,IAAGpzV,GAAEiD,KAAK,CAAC6K,GAAEukY,QAAQ3+C,KAAI5lV,GAAE1L,QAAQpC,GAAE,CAAC,CAAC8N,GAAEukY,QAAQ3+C,KAAIh3V,EAAEuG,KAAKjD,IAAG4N,GAAElS,KAAKwzX,IAAIwlC,mBAAmB10Z,GAAE,GAAG,GAAGozV,IAAGA,GAAEqe,SAASh2W,QAAOuE,GAAEiD,KAAK,CAACzH,GAAEk4V,KAAI9lV,IAAGjR,GAAE,QAAG,OAAW,gBAAgB,WAAW+2V,GAAE,eAAe,aAAY,eAAe,eAAc,eAAe,QAAQhmV,GAAE,EAAEA,GAAEhR,EAAE0F,SAASsL,GAAE,CAAC,IAAIspB,GAAEt7B,KAAKwzX,IAAIwlC,mBAAmBh4Z,EAAEgR,IAAG,GAAG,GAAG0lV,IAAGA,GAAEqe,SAASh2W,GAAE,EAAEiS,KAAIhR,EAAEgR,IAAG,GAAG,GAAG4tC,GAAE5+C,EAAEgR,IAAG,GAAG,KAAK,IAAI1Q,GAAEq6Y,GAAErgX,GAAE,GAAG,aAAY,cAAct6B,EAAEgR,IAAG,GAAG,GAAG,eAAe1Q,WAAU,cAAa,cAAcN,EAAEgR,IAAG,GAAG,GAAG,eAAe1Q,GAAE,UAAU,eAAc,cAAc,CAAC,IAAII,GAAEV,EAAEgR,IAAG,GAAG,GAAGkf,MAAM,KAAKxqB,OAAO,EAAE1F,EAAEgR,IAAG,GAAG,GAAG,gBAAgB1Q,GAAEI,GAAEsQ,KAAIhR,EAAE0F,OAAO,IAAI1F,EAAEgR,IAAG,GAAG,GAAG,gBAAgB,IAAI,OAAOhR,GAAGsD,GAAEutB,UAAU8oZ,mBAAmB,SAASrva,EAAEjL,IAAG,IAAI6R,GAAE6/S,GAAEA,GAAE,EAAE/xT,KAAKwzX,IAAIn7V,SAASC,SAASE,YAAYx4B,KAAKwzX,IAAIomD,YAAY1hZ,OAAOl4B,KAAKs7B,EAAEt7B,KAAKwzX,IAAIn7V,SAASo6X,gBAAgBzyZ,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,KAAK,KAAKnpY,KAAKwzX,IAAIr6V,UAAUn5B,KAAKs7B,EAAEt7B,KAAKwzX,IAAIomD,YAAY3hZ,IAAIj4B,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,IAAI,KAAKnpY,KAAK46a,YAAYv6a,GAAEkjG,OAAOvjG,KAAKwzX,IAAIn7V,SAASojY,oBAAoBz7Z,KAAKm2B,GAAGn2B,KAAKwzX,IAAIn7V,SAASiiY,4BAA4Bt6Z,KAAKs7B,GAAG,MAAMy2R,GAAE9iS,KAAK0J,IAAIo5R,GAAE1xT,GAAE,eAAeA,GAAE,cAAcL,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,IAAG,GAAIp3E,IAAG1sQ,QAAQ,GAAG,OAAOnzC,GAAElS,KAAKwzX,IAAIn7V,SAASg2W,QAAQhuY,GAAE,eAAeA,GAAE,eAAe,IAAIgE,GAAErE,KAAK46a,YAAYv6a,GAAEkjG,OAAOl/F,KAAIrE,KAAK66a,gBAAgB76a,KAAKwzX,IAAIn7V,SAAS8wW,MAAM9kY,IAAGrE,KAAK66a,cAAcx2a,SAAG,OAAW,iBAAiB,EAAEhE,GAAE,iBAAiBL,KAAKwzX,IAAIn7V,SAAS8wW,MAAM9oY,GAAE,gBAAgBglD,QAAQ,GAAG,MAAMrlD,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,IAAIj3X,GAAE6M,IAAI,GAAG1e,GAAE,cAAcglD,QAAQ,GAAG,KAAK,IAAIrlD,KAAKwzX,IAAIn7V,SAASg+X,UAAU/qZ,GAAG,aAAQ,OAAW,iBAAiBtL,KAAKwzX,IAAIn7V,SAAS8wW,MAAM,EAAE,OAAO7kY,GAAEutB,UAAU+oZ,YAAY,SAAStva,GAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAE,0CAA0C4tG,KAAK3mG,GAAG,GAAG,SAAQjL,GAAEojB,SAASpf,GAAE,IAAI6N,GAAEuR,SAASpf,GAAE,IAAI0tT,GAAEtuS,SAASpf,GAAE,QAAQ,CAAC,GAAG,iBAAiBiH,GAAG,OAAOo6E,OAAO,GAAG,CAAC,IAAIr8E,GAAE,IAAIgrZ,SAAS/oZ,GAAGA,EAAEjC,GAAEggC,GAAGhgC,GAAE61X,QAAQ,UAAU7+X,GAAEiL,EAAEwJ,UAAU,EAAE,GAAGzU,GAAEojB,SAASpjB,GAAE,IAAI6R,GAAE5G,EAAEwJ,UAAU,EAAE,GAAG5C,GAAEuR,SAASvR,GAAE,IAAI6/S,GAAEzmT,EAAEwJ,UAAU,EAAE,GAAGi9S,GAAEtuS,SAASsuS,GAAE,IAAI,GAAG,iBAAiB1xT,IAAG,oBAAoB6iB,KAAK7iB,IAAG,CAAC,IAAIP,GAAE2jB,SAASpjB,GAAEmlF,OAAO,GAAG,IAAInlF,GAAEP,IAAG,GAAG,IAAIoS,GAAEpS,IAAG,EAAE,IAAIiyT,GAAE,IAAIjyT,GAAE,IAAIsS,GAAEpS,KAAK2xZ,GAAG,OAAO,QAAO,QAAO,aAAO,OAAWv/Y,GAAE/R,GAAE,KAAK,KAAK,CAAC+R,GAAE/R,GAAE,KAAK+R,GAAEF,GAAE,KAAKE,GAAE2/S,GAAE,KAAK,MAAMzqR,KAAK,MAAMhjC,GAAEutB,UAAU8/X,GAAG,SAASrmZ,GAAG,OAAOA,EAAE+5C,QAAQ,IAAI/gD,GAAEutB,UAAUipZ,gBAAgB,SAASxva,GAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,EAAE,GAAG+wT,GAAErwT,GAAE1B,KAAKk/V,UAAUjmU,MAAM30B,GAAEtE,KAAKk/V,UAAUliT,MAAM38C,GAAEL,KAAKk/V,UAAU67E,WAAW/6a,KAAKk/V,UAAU87E,gBAAoBh7a,KAAKk/V,UAAU,CAACjmU,KAAK,GAAG+jB,MAAM,GAAG+9X,WAAW,GAAGC,gBAAgB36a,IAAG0xT,GAAEzqR,KAAK,IAAIv5B,OAAO,CAACqE,GAAEpS,KAAK06a,wBAAwB3oH,GAAEztT,IAAGrD,GAAEnB,QAAE,EAAOoS,GAAE,GAAGlS,KAAKwzX,IAAIn7V,SAAS+/X,YAAYp4Z,KAAKi7a,kBAAkBj7a,KAAKi7a,mBAAmB,EAAEl7a,IAAGkvB,KAAK0J,KAAKt4B,GAAE,eAAe,GAAGL,KAAKi7a,kBAAkB,IAAI56a,GAAE,gBAAgB,IAAI6R,GAAEhS,KAAIG,GAAE,kBAAkB,IAAIA,GAAE,mBAAmB,IAAI6R,GAAElS,KAAKi7a,kBAAkB56a,GAAE,kBAAkB,EAAE,cAAa,uBAAuBL,KAAKwzX,IAAIr6V,UAAUn5B,KAAKs7B,EAAE,EAAEv7B,KAAIM,GAAE,eAAe,IAAIA,GAAE,gBAAgB,IAAI6R,IAAGwlV,GAAE13V,KAAKwzX,IAAIn7V,SAAS8wW,MAAM9/X,GAAEhF,QAAE,EAAOrE,KAAKs7B,GAAGv7B,GAAE23V,GAAE,IAAI,SAAS13V,KAAKwzX,IAAIn7V,SAASojY,oBAAoBz7Z,KAAKm2B,GAAGn2B,KAAKwzX,IAAIn7V,SAASiiY,4BAA4Bt6Z,KAAKs7B,GAAG,MAAM,QAAQqgX,GAAE,EAAEvpY,GAAE1L,QAAQ,CAAC,IAAIrC,GAAEpD,GAAE,EAAEoI,IAAGvJ,GAAEsS,GAAEukY,SAASjwY,OAAOrC,KAAIgF,IAAGvJ,GAAEuE,IAAG,GAAG0J,SAAS9M,GAAEguB,KAAK0J,IAAI13B,GAAEnB,GAAEuE,IAAG,GAAG,eAAevE,GAAEuE,IAAG,GAAG,cAAcrD,EAAE,EAAElB,GAAEuE,IAAG,GAAG,cAAcA,KAAI,IAAI2zV,GAAE,EAAEhmV,GAAE,EAAE,SAAI,OAAW,GAAG,GAAG,gBAAgB,EAAElS,GAAE,GAAG,GAAG,iBAAiBk4V,IAAGhmV,GAAEhS,KAAKwzX,IAAIn7V,SAASojY,oBAAoB37Z,GAAE,GAAG,GAAG,iBAAiB67Y,GAAEA,GAAE3pY,IAAG0lV,GAAEM,GAAE/oU,KAAK0J,IAAIt4B,GAAE,gBAAgB,EAAE,GAAG6R,KAAG,GAAIjR,IAAGokD,QAAQ,GAAG,MAAMhhD,GAAE,EAAEgF,GAAEvJ,GAAE4G,OAAOrC,KAAIgF,IAAGvJ,GAAEuE,IAAG,IAAIrE,KAAK26a,mBAAmB76a,GAAEuE,IAAG,GAAGvE,GAAEuE,IAAG,IAAIA,KAAI,GAAGrE,KAAKs7B,GAAGr6B,GAAEiR,GAAElS,KAAK25a,sBAAsB75a,GAAE,GAAG,KAAK,EAAEsS,GAAE1L,OAAO,CAAC,IAAI40B,GAAE,GAAGh6B,GAAE,GAAG8Q,GAAEnH,QAAQ,SAASK,IAAG,QAAQjL,GAAE,EAAE6R,GAAE5G,GAAE5E,OAAOrG,KAAI6R,IAAG5G,GAAEjL,IAAG,KAAKi7B,GAAE/zB,KAAK+D,GAAEjL,IAAG,GAAG,KAAKiB,GAAEiG,KAAK+D,GAAEjL,IAAG,OAAOA,KAAI+R,GAAEpS,KAAK06a,wBAAwBh5a,GAAE45B,IAAGh6B,IAAGo2V,GAAE,KAAK,KAAKA,GAAE,IAAI,SAAS13V,KAAKwzX,IAAIn7V,SAASojY,oBAAoBz7Z,KAAKm2B,GAAGn2B,KAAKwzX,IAAIn7V,SAASiiY,4BAA4Bt6Z,KAAKs7B,GAAG,OAAO,OAAOhwB,GAAG,mBAAmBA,GAAGA,EAAEwmB,KAAK9xB,KAAKA,KAAKm2B,EAAE,EAAEn2B,KAAKs7B,EAAEt6B,EAAE,GAAG02V,GAAE,KAAK,KAAK13V,KAAKs7B,GAAGp7B,KAAIoE,GAAEutB,UAAU4nZ,iBAAiB,SAASnua,GAAG,OAAOtL,KAAK86a,gBAAgBxva,IAAIhH,GAAEutB,UAAU6nZ,cAAc,SAASpua,GAAG,OAAOtL,KAAKk/V,UAAU67E,WAAWzva,GAAGhH,GAAEutB,UAAUkoZ,QAAQ,SAASzua,EAAEjL,IAAG,OAAOL,KAAKk/V,UAAUjmU,KAAK1xB,KAAK+D,GAAGtL,KAAKk/V,UAAUliT,MAAMz1C,KAAKlH,KAAIgE,GAAE,CAAC8la,UAAU,YAAY,aAAa,YAAY,kBAAkB,QAAQz1B,MAAM,QAAQpL,MAAM,QAAQqL,UAAU,UAAU21B,QAAQ,WAAWrpa,GAAE,CAAC,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO81Z,OAAO,SAASphD,KAAK,OAAOulE,OAAO,OAAOC,QAAQ,UAAUr7a,GAAE,CAACi3Z,OAAO,SAAS9gD,OAAO,SAASmlE,QAAQ,UAAUhpa,GAAE,CAAC+lB,KAAK,OAAOC,MAAM,QAAQ42S,OAAO,SAASqsG,QAAQ,WAAW3jF,GAAE,CAAC7rB,KAAK,OAAOzzS,MAAM,QAAQD,KAAK,QAAQj4B,GAAE,CAAC2rU,KAAK,OAAOo/C,KAAK,QAAQ/4W,GAAE,CAAC6kZ,OAAO,GAAGzrZ,GAAEgwa,SAAS,SAAShwa,EAAEjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,OAAOrJ,KAAK45a,YAAYvwa,IAAG,CAAC4uB,IAAI,EAAEC,OAAO,GAAG65R,KAAIA,GAAE,IAAIA,GAAEyoH,kBAAkBzoH,GAAEyoH,gBAAgB,IAAIxoa,GAAEhS,KAAKsL,EAAE87B,MAAM/mC,IAAG,EAAEA,GAAE+mC,MAAMl1B,IAAG,EAAEA,GAAE6/S,GAAE1tT,KAA3wc,CAAgxcozV,GAAGk9D,KAAKl9D,GAAGk9D,KAAK,oBAAoB16X,QAAQA,QAAQ,oBAAoBw2X,QAAQA,QAAQ8qB,SAAS,SAASjwa,GAAExL,GAAEO,IAAG,IAAI6R,GAAEpS,GAAE8na,OAAO,GAAG11Z,GAAE,CAAC,IAAI6/S,GAAE1tT,GAAE,IAAI6N,GAAEshX,IAAI1zX,IAAG09Z,YAAY,CAAC2I,SAAS,GAAGG,iBAAiB,SAASh7Z,GAAEjL,IAAG,IAAI6R,GAAE6/S,GAAEjyT,GAAE4na,UAAU8T,OAAOn7a,GAAE83B,MAAM9zB,GAAEvE,GAAE4na,UAAU+T,OAAOp7a,GAAE43B,KAAK5uB,IAAGvJ,GAAE4na,UAAUgU,MAAMr7a,GAAE43B,KAAK3sB,GAAEP,QAAQ,MAAMmH,GAAE,GAAG7I,GAAE,CAACqE,KAAKpC,GAAEwJ,UAAUzL,GAAE,IAAI,CAACye,IAAIxc,IAAGxL,GAAE+mW,KAAK90C,GAAE1tT,GAAEhE,GAAE+3B,MAAM/3B,GAAE83B,KAAK93B,GAAE63B,OAAO73B,GAAE43B,IAAI/lB,KAAIypa,QAAQ,SAASrwa,GAAEjL,IAAG,IAAI6R,GAAEpS,GAAE4na,UAAU8T,OAAOn7a,GAAE83B,MAAM45R,GAAEjyT,GAAE4na,UAAU+T,OAAOp7a,GAAE43B,KAAK5zB,GAAEvE,GAAE4na,UAAUgU,MAAMr7a,GAAE43B,KAAKj4B,KAAKmma,SAAS76Z,IAAG,CAACk5G,KAAKngH,GAAE8xB,EAAEjkB,GAAEopB,EAAEy2R,MAAK7/S,GAAEsrZ,YAAY19Z,GAAE09Z,YAAY19Z,GAAE4na,UAAUkU,aAAa,SAAStwa,IAAGtL,KAAK67a,WAAWt0a,KAAK+D,KAAIxL,GAAE4na,UAAUoU,UAAU,SAASxwa,IAAG,KAAKxL,GAAEu4B,SAASu+X,mBAAmBtrZ,IAAGxL,GAAEq5B,UAAUr5B,GAAE+3Z,QAAQvsZ,KAAI,iBAAiBA,GAAE,CAACA,GAAEA,GAAEi9B,QAAQ,sDAAsD,IAAI,IAAIl/B,GAAE+I,GAAEnR,GAAEmyC,SAASC,cAAc,UAAUD,SAAS8K,KAAKvH,YAAY11C,IAAG,OAAOoI,GAAEpI,GAAEs0a,kBAAkB,WAAUlsa,GAAEpI,GAAEmvP,cAAch9M,UAAU/pC,GAAEG,OAAOH,GAAE8/X,MAAM79X,IAAGjC,GAAEtC,QAAQgrT,GAAE1oT,GAAE60C,KAAK9rC,GAAE/I,GAAE60C,MAAM,GAAG5yC,GAAEjC,GAAE6rX,iBAAiB,GAAG7wX,GAAE4qB,KAAK0J,IAAIvmB,GAAEi4R,aAAaj4R,GAAEg1E,aAAa97E,GAAE67E,aAAa77E,GAAE++R,aAAa/+R,GAAE87E,mBAAmBh1E,IAAG2/S,GAAEzmT,IAAG4yC,MAAM,GAAG75C,GAAE4qB,KAAK0J,IAAIvmB,GAAEi4R,aAAaj4R,GAAEg1E,aAAa97E,GAAE67E,aAAa77E,GAAE++R,aAAa/+R,GAAE87E,cAAc,IAAIswQ,GAAE,CAACk3E,OAAM,EAAGC,YAAW,EAAGv0U,gBAAgB,UAAUstU,OAAO11Z,GAAE48Z,aAAa,KAAKC,SAAQ,EAAGC,MAAM,KAAKC,iBAAgB,EAAGC,wBAAuB,EAAGC,SAAQ,EAAGC,aAAa/qa,GAAEvE,GAAEu4B,SAASC,SAASE,YAAYujZ,QAAQ13a,IAAGvE,GAAE4na,UAAUF,kBAAiB,EAAG1na,GAAE4na,UAAUD,UAAU3na,GAAEu4B,SAASC,SAASE,YAAYo1Y,YAAY77G,GAAE2lC,IAAGv7N,KAAK,SAAS7wH,IAAGjL,KAAIY,IAAGA,GAAEm4F,cAAc96C,YAAYr9C,IAAGZ,GAAEP,YAAWskN,MAAM,sCAAsCnqL,OAAOinY,IAAIqa,SAAS,SAASj3a,IAAG,IAAIytT,GAAEztT,GAAE03a,aAAa13a,GAAE23a,mBAAmB33a,GAAE43a,eAAe53a,GAAE63a,eAAe73a,GAAE41B,IAAI51B,GAAE41B,KAAK51B,GAAE83a,WAAW,SAAS9wa,GAAEjL,IAAG,OAAOA,GAAE+yC,SAASC,cAAc,MAAMia,KAAKhiD,GAAEjL,IAAG,IAAI6R,GAAE5N,GAAE8oD,KAAKpsD,GAAEk5B,IAAIC,gBAAgBwhX,GAAEzhX,IAAIsxC,gBAAgBniE,GAAE/E,GAAEu+T,QAAQv+T,GAAEu+T,OAAOw5G,YAAY/wa,IAAE,EAAGjL,IAAE,EAAG23V,KAAI1zV,GAAEiuZ,YAAYluZ,GAAE0tT,IAAGA,GAAElgS,UAAUqmU,QAAQnmC,GAAElgS,UAAUylY,QAAQ,IAAIhsZ,GAAE,QAAQ8hD,KAAK,CAAC,SAAM51B,KAAKn3B,GAAE,QAAQ+sD,KAAK,CAAC,IAAID,WAAW,CAAC,EAAE,MAAM31B,IAAK,CAA3C,MAAiDlsB,IAAN,CAAU,YAAWA,IAAG,OAAOA,GAAE0D,IAAI,SAAS1D,IAAG,GAAGA,GAAE+la,kBAAkB9e,YAAY,CAAC,IAAIlyZ,EAAEiL,GAAE+la,OAAO,GAAG/la,GAAE+5Z,aAAahla,EAAEgla,WAAW,CAAC,IAAInzZ,GAAE,IAAIi7C,WAAW7hD,GAAE+5Z,YAAYnzZ,GAAE82H,IAAI,IAAI77E,WAAW9sD,EAAEiL,GAAEgxa,WAAWhxa,GAAE+5Z,aAAahla,EAAE6R,GAAEm/Z,OAAO,OAAOhxa,EAAE,OAAOiL,KAAI,YAAWA,GAAEjL,IAAGA,GAAEA,IAAG,GAAG,IAAI6R,EAAE,IAAI6/S,GAAE,OAAOjyT,GAAEwL,IAAGL,QAAQ,SAASK,IAAG4G,EAAEgmV,OAAO5sV,MAAKjL,GAAEgtD,KAAKn7C,EAAEolZ,QAAQj3Z,GAAEgtD,MAAMn7C,EAAEolZ,UAAU,YAAWhsZ,GAAEjL,IAAG,OAAO,IAAI6R,GAAEpS,GAAEwL,IAAGjL,IAAG,IAAI,GAAGiE,GAAE8oD,OAAOh7C,GAAEyf,UAAUu7B,KAAKv7B,UAAU5wB,GAAE4wB,UAAUu7B,KAAKv7B,WAAWxoB,GAAE,IAAIyuE,KAAKjmD,UAAUxoB,IAAG,OAAO+jD,KAAKv7B,UAAUxoB,IAAG,OAAO+rF,WAAWvjE,UAAUxoB,IAAG,YAAa,CAAb,MAAmBiC,IAAN,CAAU,cAAa,IAAIA,KAAIhH,GAAEi4a,eAAe,qBAAqBnpY,SAAS8hV,gBAAgBl4U,OAAO,kBAAkB5J,SAAS8hV,gBAAgBl4U,MAAM38C,GAAEiE,GAAE66T,gBAAgB76T,GAAE66T,eAAettS,UAAUgmN,KAAKvsO,IAAGjL,KAAI8+T,eAAettS,UAAUgmN,KAAK,SAASvsO,IAAGA,cAAa8hD,MAAMptD,KAAKw8a,iBAAiB,eAAelxa,GAAE+hD,MAAMhtD,GAAEyxB,KAAK9xB,KAAKsL,MAAK,IAAI,IAAIwsE,KAAK,GAAG,GAAqjB5lE,CAArjB,MAAU5G,IAAG,IAAI,IAAI4G,EAAE,IAAIo/X,SAAS,wRAAb,GAAwShtY,GAAEwzE,KAAK5lE,CAA+OA,CAA/OA,MAAQ5G,IAAG4G,EAAE,SAAS5G,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE,IAAI3kQ,KAAK9hD,GAAE4G,IAAG7N,EAAE6N,SAAG,OAAWuqa,aAAa,IAAI3ja,KAAK5G,GAAEuqa,cAAc,IAAI3ja,KAAK,OAAOi5S,GAAErkT,KAAKrN,GAAE0xT,GAAE2qH,iBAAiBr4a,EAAE0tT,GAAE0qH,cAAcp4a,EAAE0tT,GAAEjkT,SAAS,WAAW,MAAM,iBAAiBzE,KAAI0oT,GAAE1oT,IAAG,QAAQ0oT,IAAGztT,GAAEwzE,KAAK5lE,IAAI5G,IAAGosV,KAAIpzV,GAAE8oD,KAAK/sD,GAAEiE,GAAE8oD,KAAKnsD,IAAGoD,IAAGqzV,KAAIpzV,GAAE8oD,KAAKh7C,IAAG,WAAW,YAAW9G,IAAG,QAAQjL,GAAE,GAAG6R,GAAE,EAAEA,GAAE5G,GAAE5E,OAAOwL,KAAI,CAAC,IAAI6/S,GAAEzmT,GAAE0tC,WAAW9mC,IAAG6/S,GAAE,IAAI1xT,GAAEkH,KAAKwqT,IAAGA,GAAE,KAAK1xT,GAAEkH,KAAK,IAAIwqT,IAAG,EAAE,IAAI,GAAGA,IAAGA,GAAE,OAAO,OAAOA,GAAE1xT,GAAEkH,KAAK,IAAIwqT,IAAG,GAAG,IAAIA,IAAG,EAAE,GAAG,IAAI,GAAGA,KAAI7/S,KAAI6/S,GAAE,QAAQ,KAAKA,KAAI,GAAG,KAAKzmT,GAAE0tC,WAAW9mC,KAAI7R,GAAEkH,KAAK,IAAIwqT,IAAG,GAAG,IAAIA,IAAG,GAAG,GAAG,IAAIA,IAAG,EAAE,GAAG,IAAI,GAAGA,KAAI,OAAO1xT,GAAE,YAAWiL,IAAG,IAAIjL,GAAE6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAE,IAAIO,GAAE,GAAG0xT,GAAEzmT,GAAE5E,OAAOwL,GAAE,EAAEA,GAAE6/S,IAAG,QAAQ1tT,GAAEiH,GAAE4G,QAAO,QAAQ,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,EAAE7R,IAAG84C,OAAOC,aAAa/0C,IAAG,WAAW,QAAQ,GAAGgF,GAAEiC,GAAE4G,MAAK7R,IAAG84C,OAAOC,cAAc,GAAG/0C,KAAI,EAAE,GAAGgF,IAAG,WAAW,GAAGA,GAAEiC,GAAE4G,MAAKpS,GAAEwL,GAAE4G,MAAK7R,IAAG84C,OAAOC,cAAc,GAAG/0C,KAAI,IAAI,GAAGgF,KAAI,GAAG,GAAGvJ,KAAI,GAAG,OAAOO,GAAE,WAAWiL,IAAG,QAAQjL,GAAE,IAAIgQ,MAAM/E,GAAE+5Z,YAAYnzZ,GAAE,IAAIi7C,WAAW7hD,IAAGymT,GAAE1xT,GAAEqG,OAAOqrT,MAAK1xT,GAAE0xT,IAAG7/S,GAAE6/S,IAAG,OAAO1xT,GAAE,YAAWiL,IAAG,QAAQjL,GAAE,iEAAiE6R,GAAE,GAAG6/S,GAAE,EAAEA,GAAEzmT,GAAE5E,OAAOqrT,IAAG,EAAE,CAAC,IAAI1tT,GAAEiH,GAAEymT,IAAG1oT,GAAE0oT,GAAE,EAAEzmT,GAAE5E,OAAO5G,GAAEuJ,GAAEiC,GAAEymT,GAAE,GAAG,EAAE3/S,GAAE2/S,GAAE,EAAEzmT,GAAE5E,OAAOzF,GAAEmR,GAAE9G,GAAEymT,GAAE,GAAG,EAAE2lC,GAAErzV,IAAG,EAAEnE,GAAG,EAAEmE,KAAI,EAAEvE,IAAG,EAAEC,IAAG,GAAGD,KAAI,EAAEmB,IAAG,EAAEqD,GAAE,GAAGrD,GAAEmR,KAAI9N,GAAE,GAAG+E,KAAItJ,GAAE,KAAKmS,GAAE3K,KAAKlH,GAAEq3V,IAAGr3V,GAAEH,GAAGG,GAAEN,IAAGM,GAAEiE,KAAI,OAAO4N,GAAEo1B,KAAK,IAAI,IAAIh8B,GAAEmB,OAAOi8E,QAAQ,SAASp9E,IAAG,cAAY,CAAE,OAAOjL,GAAEwxB,UAAUvmB,GAAE,IAAIjL,IAAG,GAAG23V,GAAE,IAAIjmC,GAAE,CAAC,qBAAqB,sBAAsB,6BAA6B,sBAAsB,uBAAuB,sBAAsB,uBAAuB,wBAAwB,yBAAyB9wT,GAAEsxZ,YAAYoqB,QAAQ,SAASrxa,IAAG,OAAOA,KAAG,EAAGymT,GAAEhnT,QAAQ0B,OAAOolB,UAAU/jB,SAASgkB,KAAKxmB,MAAK,YAAWA,GAAEjL,IAAG,QAAQ6R,GAAE,EAAE6/S,IAAGzmT,GAAEA,IAAG,IAAI5E,OAAOwL,GAAE6/S,GAAE7/S,KAAI,CAAC,IAAI7N,GAAEiH,GAAE4G,IAAG7N,cAAaqzV,GAAEpsV,GAAE4G,IAAG7N,GAAEu4a,QAAQ,iBAAiBv4a,GAAEiH,GAAE4G,IAAGpS,GAAEuE,IAAG2zV,KAAIu6D,YAAY1gY,UAAUgrZ,cAAcx4a,KAAIpD,GAAEoD,KAAIiH,GAAE4G,IAAGE,EAAE/N,IAAG2zV,KAAI3uV,GAAEhF,KAAIy4a,SAASjrZ,UAAUgrZ,cAAcxza,IAAGiC,GAAE4G,IAAGE,EAAE/N,GAAEgta,QAAQ/la,GAAE4G,IAAGpS,GAAEq5C,OAAO90C,KAAI,IAAIgF,GAAErJ,KAAK48a,QAAQ,GAAGp/X,OAAOsrB,MAAM,GAAGx9D,IAAGtL,KAAKw3B,KAAKx3B,KAAK48a,QAAQl2a,OAAO1G,KAAKqtD,KAAKhtD,IAAGA,GAAEgtD,MAAM,GAAG,YAAW/hD,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE2lC,GAAE5lU,KAAK9xB,KAAKsL,GAAE4G,GAAEA,IAAG,KAAKlS,KAAK,OAAO+xT,GAAErkT,KAAKrN,GAAE0xT,GAAE2qH,iBAAiBxqa,GAAEuqa,aAAa,IAAI3ja,KAAK5G,GAAEuqa,cAAc,IAAI3ja,KAAKi5S,GAAE0qH,cAAc1qH,GAAE2qH,iBAAiB3qH,GAAE,GAAG2lC,GAAE7lU,UAAU5Z,MAAM,SAAS3M,GAAEjL,GAAE6R,IAAG,OAAO,IAAIwlV,GAAE,CAAC13V,KAAK48a,QAAQ3ka,MAAM3M,IAAG,EAAEjL,IAAGL,KAAK48a,QAAQl2a,SAAS,CAAC2mD,KAAKn7C,MAAKwlV,GAAE7lU,UAAU/jB,SAAS,WAAW,MAAM,kBAAkBzJ,GAAEwtB,UAAUvmB,GAAEosV,GAAE7lU,YAAYhyB,YAAYwE,GAAEoI,OAAOswa,eAAetwa,OAAOswa,eAAe14a,GAAEqzV,SAAQ,IAAIrzV,GAAEic,UAAUo3U,EAAE,CAAFA,MAAQpsV,IAAN,CAAU,aAAa,KAAKtL,gBAAgBqJ,GAAG,MAAM,IAAI6mZ,UAAU,gIAAgI,IAAIh+Y,GAAEkhC,SAAS4pY,yBAAyBh9a,KAAKwzT,iBAAiBthT,GAAEshT,iBAAiBxzT,KAAKq+C,cAAc,SAAS/yC,IAAG,IAAIjL,GAAEL,KAAK,KAAKsL,GAAE+hD,MAAM,mBAAmBhtD,IAAGA,GAAEiL,IAAG4G,GAAEmsC,cAAc/yC,KAAItL,KAAKisV,oBAAoB/5U,GAAE+5U,oBAAoB,YAAW3gV,GAAEjL,GAAE6R,IAAG,KAAK7R,cAAaq3V,IAAG,MAAM,IAAIw4D,UAAU,sBAAsBh+Y,GAAE,yDAAyD5G,GAAEkqF,OAAO,GAAG7mF,WAAW,WAAW3O,KAAK41F,WAAWvsF,EAAE4za,QAAQ3xa,GAAE+yC,cAAc,IAAIivN,MAAM,SAAShiQ,GAAE+yC,cAAc,IAAIivN,MAAM,cAAcjpQ,GAAEwtB,UAAU/jB,SAAS,WAAW,MAAM,iBAAiBzE,EAAE6za,MAAM,EAAE7za,EAAE4za,QAAQ,EAAE5za,EAAEwsF,KAAK,EAAExsF,EAAEwoB,UAAU+R,MAAM,KAAKv6B,EAAEwoB,UAAUsrZ,QAAQ,KAAK9za,EAAEwoB,UAAUuoZ,QAAQ,KAAK/wa,EAAEwoB,UAAU0jE,OAAO,KAAKlsF,EAAEwoB,UAAU8jE,UAAU,KAAKtsF,EAAEwoB,UAAUurZ,YAAY,KAAK/za,EAAEwoB,UAAUwrZ,WAAW,KAAKh0a,EAAEwoB,UAAU4jE,cAAc,SAASnqF,IAAGpL,GAAEF,KAAKsL,GAAE,iBAAiBtL,KAAKw1F,OAAO,QAAQlqF,GAAE+hD,KAAK,WAAWn7C,GAAE5G,GAAEsxa,UAAUvza,EAAEwoB,UAAUyjE,WAAW,SAAShqF,IAAGpL,GAAEF,KAAKsL,GAAE,cAActL,KAAKw1F,OAAOn1F,GAAEiL,GAAEsxa,UAAUvza,EAAEwoB,UAAUkkE,kBAAkB,SAASzqF,IAAGpL,GAAEF,KAAKsL,GAAE,cAActL,KAAKw1F,OAAOlqF,GAAEsxa,QAAQ3ka,SAAS5O,EAAEwoB,UAAUyrZ,MAAM,WAAU,EAAGpjZ,IAAIC,gBAAgB,SAAS7uB,IAAG,OAAOA,cAAaosV,GAAE,QAAQpsV,GAAE+hD,KAAK,WAAWn7C,GAAE5G,GAAEsxa,SAAS57a,GAAE8wB,KAAKoI,IAAI5uB,KAAI4uB,IAAIsxC,gBAAgB,SAASlgE,IAAGqwY,IAAGA,GAAE7pX,KAAKoI,IAAI5uB,KAAI,IAAIvL,GAAEuE,GAAE66T,gBAAgB76T,GAAE66T,eAAettS,UAAUgmN,KAAK93O,KAAIo/T,eAAettS,UAAUgmN,KAAK,SAASvsO,IAAGA,cAAaosV,IAAG13V,KAAKw8a,iBAAiB,eAAelxa,GAAE+hD,MAAMttD,GAAE+xB,KAAK9xB,KAAKK,GAAEiL,GAAEsxa,WAAW78a,GAAE+xB,KAAK9xB,KAAKsL,MAAKhH,GAAE8wF,WAAW/rF,EAAE/E,GAAEwzE,KAAKzzE,GAAEC,GAAE8oD,KAAKsqS,GAAl1H,EAAk1HA,CAA1uL,CAAgvL,oBAAoB84D,MAAMA,MAAM,oBAAoBv2X,QAAQA,QAAQ,oBAAoBw2X,QAAQA,QAAQnf,SAAS,kDAATA,IAA+DA,SAAS,cAATA,IAA2B,IAAI7hR,GAAGj+G,GAAG4O,GAAGs/L,GAAG53M,GAAGqtI,GAAG/5G,GAAGpL,EAAGozR,GAAGxsR,GAAG3uB,EAAGqnH,GAAG/yF,EAAGmW,GAAGjzB,GAAGskB,GAAGA,IAAI,SAAS3xB,IAAG,UAAK,IAASA,IAAG,oBAAoBw0E,WAAW,eAAe1jE,KAAK0jE,UAAUC,YAAY,CAAC,IAAIv7E,GAAE8G,GAAEghC,SAASnyC,GAAE,WAAW,OAAOmR,GAAE8nB,KAAK9nB,GAAEgqa,WAAWhqa,IAAGslV,GAAEpsV,GAAEiya,gBAAgB,+BAA+B,KAAKr9a,GAAE,aAAaw3V,GAAE33V,GAAE,eAAemjB,KAAK9Q,GAAEwgX,cAAcxgX,GAAEqsX,OAAOn6X,GAAE,eAAe4e,KAAK0jE,UAAUC,WAAW7lF,GAAEoR,GAAEora,cAAcpra,GAAEzD,WAAWgtY,GAAE,SAASrwY,IAAGtK,GAAE,WAAW,MAAMsK,IAAG,IAAI0sV,GAAE,SAAS1sV,IAAGqD,WAAW,WAAW,iBAAiBrD,GAAErK,KAAIuqE,gBAAgBlgE,IAAGA,GAAE6gU,UAAU,MAAMn6T,GAAE,SAAS1G,IAAG,MAAM,6EAA6E4X,KAAK5X,GAAE+hD,MAAM,IAAID,KAAK,CAACjU,OAAOC,aAAa,OAAO9tC,IAAG,CAAC+hD,KAAK/hD,GAAE+hD,OAAO/hD,IAAGymT,GAAE,SAASzmT,GAAE4G,GAAE7R,IAAGA,KAAIiL,GAAE0G,GAAE1G,KAAI,IAAIymT,EAAE1tT,GAAErE,KAAKqJ,GAAE,gCAA+BgkD,KAAKvtD,GAAE,YAAY,SAASwL,GAAEjL,GAAE6R,IAAG,QAAQ6/S,GAAG1xT,GAAE,GAAGm9C,OAAOn9C,KAAIqG,OAAOqrT,KAAK,CAAC,IAAI1tT,GAAEiH,GAAE,KAAKjL,GAAE0xT,IAAI,GAAG,mBAAmB1tT,GAAE,IAAIA,GAAEytB,KAAKxmB,GAAE4G,IAAG5G,GAAcA,CAAdA,MAASA,IAAGqwY,GAAErwY,MAAjI,CAAuIjH,GAAE,qCAAqC6sB,MAAM,OAAO,GAAG7sB,GAAEuxF,WAAWvxF,GAAEo5a,KAAKv9a,GAAE,OAAO6xT,EAAE9wT,KAAIk5B,gBAAgB7uB,SAAQtK,GAAE,WAAW,IAAIsK,GAAEjL,GAAEq3V,GAAEpqS,KAAKykQ,EAAE2lC,GAAElqS,SAASt7C,GAAE5G,GAAEosV,GAAEr3V,GAAE,IAAIm0F,WAAW,SAASlpF,GAAE+yC,cAAch+C,IAAGP,KAAIk4V,GAAEjmC,GAAG1tT,GAAEuxF,WAAWvxF,GAAEwxF,MAAM,IAAI,WAAW,IAAIvxF,IAAG+E,IAAGtJ,KAAIqS,GAAEgjF,WAAW,CAAC,IAAI/0F,GAAE,IAAI+0F,WAAW,OAAO/0F,GAAEs1F,UAAU,WAAW,IAAIrqF,GAAEhH,GAAEjE,GAAEm1F,OAAOn1F,GAAEm1F,OAAOjtD,QAAQ,eAAe,yBAAyBn2B,GAAE5I,KAAK8B,GAAE,YAAY8G,GAAE+yD,SAAS7X,KAAKhiD,IAAGA,QAAE,EAAOjH,GAAEuxF,WAAWvxF,GAAEwxF,KAAK/1F,MAAKO,GAAEo1F,cAAcnqF,IAAGjH,GAAEuxF,WAAWvxF,GAAEo5a,KAAK1rH,IAAIA,EAAE9wT,KAAIk5B,gBAAgB7uB,KAAIjC,GAAE+I,GAAE+yD,SAAS7X,KAAKykQ,EAAE3/S,GAAE5I,KAAKuoT,EAAE,YAAY3/S,GAAE+yD,SAAS7X,KAAKykQ,GAAG1tT,GAAEuxF,WAAWvxF,GAAEwxF,KAAK/1F,KAAIk4V,GAAEjmC,GAAzY,EAAyYA,EAAO1xT,GAAE0xT,GAAElgS,UAAU,MAAM,oBAAoB+0D,WAAWA,UAAU82V,iBAAiB,SAASpya,GAAEjL,GAAE6R,IAAG,OAAO7R,GAAEA,IAAGiL,GAAEoC,MAAM,WAAWwE,KAAI5G,GAAE0G,GAAE1G,KAAIs7E,UAAU82V,iBAAiBpya,GAAEjL,MAAKA,GAAEi9a,MAAM,WAAU,EAAGj9a,GAAEu1F,WAAWv1F,GAAEo9a,KAAK,EAAEp9a,GAAEs9a,QAAQ,EAAEt9a,GAAEw1F,KAAK,EAAEx1F,GAAEujC,MAAMvjC,GAAEu9a,aAAav9a,GAAEg9a,WAAWh9a,GAAEw9a,QAAQx9a,GAAE88a,QAAQ98a,GAAE+5a,QAAQ/5a,GAAEy9a,WAAW,KAAK,SAASxya,GAAEjL,GAAE6R,IAAG,OAAO,IAAI6/S,GAAEzmT,GAAEjL,IAAGiL,GAAEoC,MAAM,WAAWwE,OAA/2D,CAAs3D,oBAAoBs+Y,MAAMA,MAAM,oBAAoBv2X,QAAQA,aAAQ,GAAQ,YAAY9D,IAAG,IAAI7qB,GAAE,EAAE,GAAG,QAAOA,OAAM,QAAOA,OAAM,QAAOA,OAAM,QAAOA,OAAM,KAAK6qB,GAAE7qB,MAAK,EAAE,MAAM,QAAOA,MAAK,KAAK,8BAA8B,IAAIw0C,GAAE3pB,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAEjL,GAAE81B,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAE4G,GAAEikB,GAAE7qB,MAAKymT,GAAE7/S,IAAG,EAAE7N,GAAE,GAAS,GAAL,EAAE6N,IAAKikB,GAAE7qB,MAAK6qB,GAAE7qB,MAAK,IAAIjC,GAAE,KAAK0oT,KAAI1oT,GAAEiC,GAAEA,IAAG,EAAEjH,IAAG,IAAIvE,IAAE,EAAGsS,GAAE,GAAGnR,GAAE,EAAEy2V,GAAE,KAAKx3V,GAAE,EAAEH,GAAE,KAAK,IAAIC,KAAKuU,MAAMurC,GAAE9/C,KAAKwU,OAAOnU,GAAEP,IAAGwL,GAAE6qB,GAAEzvB,QAAQ,OAAOyvB,GAAE7qB,YAAW,GAAG,OAAO6qB,GAAE7qB,YAAW,IAAI,GAAG,QAAOA,KAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,IAAI,OAAMA,GAAE,KAAK,OAAMA,GAAE,KAAK,MAAKA,GAAE,KAAK,MAAKA,GAAE,KAAK,MAAKA,GAAE,IAAIA,IAAG,GAAGvL,GAAEo2B,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAEA,UAAS,IAAIA,IAAG,GAAS,KAAK8J,GAAE+gB,GAAE7qB,QAAYA,IAAG8J,GAAE,WAAW,IAAI,GAAG,OAAM9J,OAAM,OAAMA,GAAE,GAAG,KAAK,oCAAoC,IAAIhH,GAAE6xB,GAAE7qB,MAAKrK,GAAEk1B,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAEosV,GAAEvhU,GAAE7qB,MAAK,IAAI,EAAEhH,MAAKozV,GAAE,MAAMx3V,GAAEoE,IAAG,EAAE,EAAEgH,KAAI,WAAW,IAAI,KAAW,KAAK8J,GAAE+gB,GAAE7qB,QAAYA,IAAG8J,GAAE,cAAc,KAAK,oCAAoC+gB,GAAE7qB,GAAE,GAAGwC,SAAS,IAAI,WAAW,GAAG,IAAI9M,GAAEm1B,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAEqwY,EAAExlX,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAE0sV,GAAE7hU,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAE0G,GAAEmkB,GAAE7qB,MAAK6qB,GAAE7qB,OAAM,EAAEgwB,GAAEnF,GAAE7qB,MAAKhK,GAAEg6B,IAAG,EAAE,EAAE55B,GAAE2H,GAAE7H,IAAE,EAAM85B,IAAG,IAAG95B,IAAE,EAAGE,GAAE4J,GAAEA,IAAG,GAAG,GAAS,GAAL,EAAEgwB,MAAM,IAAInpB,EAAE7G,GAAE,IAAIA,OAAM,CAAC,IAAI8J,GAAE,GAAG,KAAKA,GAAE+gB,GAAE7qB,OAAM,MAAMA,IAAG8J,GAAEhD,GAAE7K,KAAK,CAAC4uB,EAAEn1B,GAAEs6B,EAAEqgX,EAAEpnY,MAAMyjV,GAAExjV,OAAOxC,GAAE+ra,kBAAkBv8a,GAAEw8a,eAAet8a,GAAEu8a,YAAY9ra,EAAE+ra,YAAY5ya,GAAE6G,EAAEgsa,kBAAkBzmF,GAAE0mF,aAAa98a,GAAEo6H,MAAMz6H,GAAEo9a,SAASn+a,KAAI,WAAW,GAAGJ,IAAE,EAAG,cAAc,KAAK,wBAAwBq2B,GAAE7qB,GAAE,GAAGwC,SAAS,IAAI9N,KAAKs+a,UAAU,WAAW,OAAOlsa,GAAE1L,QAAQ1G,KAAKu+a,UAAU,WAAW,OAAOx+a,IAAGC,KAAKw+a,UAAU,SAASlza,IAAG,GAAGA,GAAE,GAAGA,IAAG8G,GAAE1L,OAAO,KAAK,4BAA4B,OAAO0L,GAAE9G,KAAItL,KAAKy+a,uBAAuB,SAASnza,GAAEjL,IAAG,IAAI6R,GAAElS,KAAKw+a,UAAUlza,IAAGymT,GAAE7/S,GAAEqC,MAAMrC,GAAEsC,OAAOnQ,GAAE,IAAI8oD,WAAW4kQ,IAAGxxS,GAAG4V,GAAEjkB,GAAE+ra,YAAY55a,GAAE0tT,IAAG,IAAI1oT,GAAE6I,GAAE8ra,eAAel+a,GAAEoS,GAAEisa,kBAAkB,OAAOr+a,KAAIA,GAAE,KAAK,IAAIsS,GAAEF,GAAEqC,MAAMtT,GAAE6+C,GAAE1tC,GAAEslV,GAAEtlV,GAAElS,GAAE,GAAGgS,GAAEopB,EAAEwkB,GAAE5tC,GAAEikB,GAAGp2B,EAAE,IAAImS,GAAEopB,EAAEppB,GAAEsC,QAAQsrC,GAAE5tC,GAAEikB,GAAG7xB,GAAEpE,GAAEc,GAAE,EAAEC,IAAE,IAAKiR,GAAEksa,aAAap9a,IAAG,GAAGoR,GAAEnR,IAAG,GAAG,QAAQ06Y,GAAE,EAAE3jD,GAAE,EAAEhmV,GAAE3N,GAAEqC,OAAOsxV,GAAEhmV,KAAIgmV,GAAE,CAAC,IAAI18T,GAAEj3B,GAAE2zV,IAAG,GAAG,SAAQN,GAAEtlV,GAAErS,IAAIuE,IAAGtD,MAAKA,GAAEC,GAAE,GAAGmR,GAAEnR,KAAI06Y,GAAE,GAAGr3Y,GAAEpE,IAAGkS,GAAEnR,KAAI06Y,IAAG,GAAGA,KAAI,IAAIrgX,KAAIx7B,GAAEwE,IAAG,MAAM,CAAC,IAAIhD,GAAE60B,GAAE9sB,GAAE,EAAEiyB,IAAG55B,GAAEy0B,GAAE9sB,GAAE,EAAEiyB,GAAE,GAAG95B,GAAE20B,GAAE9sB,GAAE,EAAEiyB,GAAE,GAAGj7B,GAAEiE,MAAK9C,GAAEnB,GAAEiE,MAAK5C,GAAErB,GAAEiE,MAAKhD,GAAEjB,GAAEiE,MAAK,MAAMozV,KAAI13V,KAAKyxa,uBAAuB,SAASnma,GAAEjL,IAAG,IAAI6R,GAAElS,KAAKw+a,UAAUlza,IAAGymT,GAAE7/S,GAAEqC,MAAMrC,GAAEsC,OAAOnQ,GAAE,IAAI8oD,WAAW4kQ,IAAGxxS,GAAG4V,GAAEjkB,GAAE+ra,YAAY55a,GAAE0tT,IAAG,IAAI1oT,GAAE6I,GAAE8ra,eAAel+a,GAAEoS,GAAEisa,kBAAkB,OAAOr+a,KAAIA,GAAE,KAAK,IAAIsS,GAAEF,GAAEqC,MAAMtT,GAAE6+C,GAAE1tC,GAAEslV,GAAEtlV,GAAElS,GAAE,GAAGgS,GAAEopB,EAAEwkB,GAAE5tC,GAAEikB,GAAGp2B,EAAE,IAAImS,GAAEopB,EAAEppB,GAAEsC,QAAQsrC,GAAE5tC,GAAEikB,GAAG7xB,GAAEpE,GAAEc,GAAE,EAAEC,IAAE,IAAKiR,GAAEksa,aAAap9a,IAAG,GAAGoR,GAAEnR,IAAG,GAAG,QAAQ06Y,GAAE,EAAE3jD,GAAE,EAAEhmV,GAAE3N,GAAEqC,OAAOsxV,GAAEhmV,KAAIgmV,GAAE,CAAC,IAAI18T,GAAEj3B,GAAE2zV,IAAG,GAAG,SAAQN,GAAEtlV,GAAErS,IAAIuE,IAAGtD,MAAKA,GAAEC,GAAE,GAAGmR,GAAEnR,KAAI06Y,GAAE,GAAGr3Y,GAAEpE,IAAGkS,GAAEnR,KAAI06Y,IAAG,GAAGA,KAAI,IAAIrgX,KAAIx7B,GAAEwE,IAAG,MAAM,CAAC,IAAIhD,GAAE60B,GAAE9sB,GAAE,EAAEiyB,IAAG55B,GAAEy0B,GAAE9sB,GAAE,EAAEiyB,GAAE,GAAG95B,GAAE20B,GAAE9sB,GAAE,EAAEiyB,GAAE,GAAGj7B,GAAEiE,MAAKhD,GAAEjB,GAAEiE,MAAK5C,GAAErB,GAAEiE,MAAK9C,GAAEnB,GAAEiE,MAAK,MAAMozV,KAAI,YAAYpsV,GAAEjL,GAAE6R,GAAE6/S,IAAG,QAAQ1tT,GAAEiH,GAAEjL,MAAKgJ,GAAE,GAAGhF,GAAEvE,GAAEuJ,GAAE,EAAE+I,GAAEtS,GAAE,EAAEmB,GAAEoD,GAAE,EAAEqzV,IAAG,GAAGz2V,IAAG,EAAEf,GAAE,EAAEH,GAAE,EAAEuE,GAAE,EAAEtD,GAAEsK,GAAEjL,MAAKs7Y,GAAE,IAAIqpB,WAAW,MAAMhtE,GAAE,OAAO,CAAC,KAAK93V,GAAE,IAAI,QAAOH,IAAGuL,GAAEjL,OAAMH,GAAEA,IAAG,EAAE,OAAMc,GAAEsK,GAAEjL,QAAOW,GAAE,GAAGd,GAAEe,GAAE,MAAM,IAAI+Q,EAAEjS,GAAE23V,GAAE,GAAG33V,KAAIkB,GAAEf,IAAGe,GAAE+Q,IAAI3I,GAAE,CAAC,GAAG2I,IAAIlS,GAAE,MAAM,QAAQw7B,GAAEtpB,EAAEI,GAAEJ,EAAEgmV,GAAE12V,GAAE,EAAEI,GAAE45B,GAAEjyB,GAAE3H,IAAGA,GAAEi6Y,GAAEj6Y,KAAI,IAAIJ,GAAE,IAAIE,GAAEE,GAAE,GAAGqwT,GAAEztT,GAAEhD,IAAGg6B,KAAItpB,EAAE,EAAE,GAAG,YAAY08B,QAAQD,IAAI,6CAA6Cv8B,GAAE5N,MAAK9C,GAAE,IAAI20B,GAAE7xB,IAAGhD,GAAE,IAAIg6B,KAAItpB,IAAIE,GAAE5N,MAAK9C,IAAGE,GAAE45B,GAAEh6B,MAAKI,GAAEi6Y,GAAEj6Y,IAAGwQ,KAAIikB,IAAG,IAAIz0B,GAAEA,KAAI,EAAE,OAAOs2V,IAAG5lV,GAAE,OAAOupY,GAAEvpY,MAAK4lV,IAAG,EAAEx2V,GAAEk2V,GAAE,GAAGtlV,IAAGnR,GAAE,OAAOA,GAAEy2V,GAAEA,IAAG,EAAE,IAAIM,GAAEhmV,OAAOI,GAAEtS,GAAE,EAAE43V,IAAG,IAAIz2V,GAAEoD,GAAE,IAAI,EAAE2zV,GAAE,KAAK,OAAO1zV,KAAIytT,IAAGrjR,QAAQD,IAAI,8CAA8Cv8B,GAAE,IAAIwsa,aAAkB,SAASpjZ,GAAEhwB,GAAEjL,GAAE6R,IAAG,IAAI5Q,GAAE,EAAEywT,QAAE,KAAU7/S,QAAE,OAAW,GAAGA,IAAGysa,KAAK,KAAKzsa,GAAEysa,KAAKj9a,QAAE,OAAWysX,QAAQ,KAAKj8W,GAAEi8W,QAAQ,GAAG7iX,IAAG,GAAGjL,IAAG,GAAG,MAAMiL,IAAG,MAAMjL,GAAE,KAAK,wBAAwB,YAAWiL,IAAG,IAAIjL,EAAEiL,GAAE5E,OAAO,GAAGrG,EAAE,GAAG,IAAIA,GAAGA,EAAEA,EAAE,EAAE,KAAK,8DAA8D,OAAOA,EAAEi7B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAG,IAAI+C,GAAE,EAAEgF,GAAE,EAAE,GAAG,UAAS,CAAC,QAAQvJ,GAAE0B,GAAEE,IAAG5B,KAAI,KAAKuE,GAAE,GAAGvE,GAAE,GAAGuE,KAAIA,QAAE,OAAW44C,WAAW,CAAC,GAAGn9C,KAAIuJ,GAAE6I,GAAE+qC,YAAY,KAAK,iCAAiC,GAAG,OAAM,KAAK,4CAA4C,GAAG3hB,GAAEh6B,MAAK,IAAIgK,GAAEgwB,GAAEh6B,MAAKgK,IAAG,EAAE,IAAIgwB,GAAEh6B,MAAK,IAAIjB,GAAEi7B,GAAEh6B,MAAKjB,IAAG,EAAE,IAAIi7B,GAAEh6B,OAAM,OAAOI,GAAE,IAAI,GAAG2C,GAAEi3B,GAAEh6B,MAAK+H,GAAEiyB,GAAEh6B,MAAK,EAAE,UAAS,QAAQ8Q,GAAE,EAAEnR,GAAES,GAAEgF,OAAO0L,GAAEnR,KAAImR,GAAE,CAAC,IAAIslV,GAAEh2V,GAAE0Q,IAAGkpB,GAAEh6B,MAAKo2V,IAAG,GAAG,IAAIp8T,GAAEh6B,MAAKo2V,IAAG,EAAE,IAAIp8T,GAAEh6B,MAAK,IAAIo2V,GAAE,GAAG,UAAS,CAAC,GAAG3lC,GAAE,GAAG,MAAMA,GAAE,KAAK,sBAAsBz2R,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,IAAIg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,EAAEg6B,GAAEh6B,MAAK,EAAEg6B,GAAEh6B,MAAK,IAAIywT,GAAEz2R,GAAEh6B,MAAKywT,IAAG,EAAE,IAAIz2R,GAAEh6B,MAAK,EAAE,IAAI60B,IAAE,EAAGn2B,KAAK4+a,SAAS,SAAStza,GAAEjL,EAAE6R,GAAE6/S,GAAE1tT,GAAEgF,IAAG,IAAG,WAAW/H,GAAE60B,IAAE,GAAI9sB,QAAE,OAAW,GAAGA,GAAEiC,GAAE,GAAGjL,EAAE,GAAG,MAAMiL,IAAG,MAAMjL,EAAE,KAAK,eAAe,GAAG6R,IAAG,GAAG6/S,IAAG,GAAG,MAAM7/S,IAAG,MAAM6/S,GAAE,KAAK,wBAAwB,GAAG1tT,GAAEqC,OAAOwL,GAAE6/S,GAAE,KAAK,wCAAwC,IAAIjyT,IAAE,EAAGsS,GAAE/I,GAAE8kX,QAAQ,GAAG,WAAUruX,IAAE,EAAGsS,GAAE1Q,IAAG,SAAQ,KAAK,gDAAgD,QAAQT,EAAEO,GAAE4Q,IAAGslV,GAAE,EAAEz2V,IAAI,KAAKy2V,GAAEz2V,EAAE,GAAGy2V,GAAE,IAAIx3V,QAAE,OAAWw7H,MAAM,EAAEryH,GAAEqyH,MAAM37H,QAAE,OAAWs+a,SAAS,EAAEh1a,GAAEg1a,SAAS,GAAGt+a,GAAE,GAAG,EAAEA,GAAE,KAAK,yBAAyB,IAAIuE,IAAE,EAAGtD,GAAE,EAAE,QAAG,OAAW69a,aAAa,UAASA,cAAcv6a,IAAE,GAAItD,GAAEqI,GAAEw1a,aAAa,GAAG59a,GAAGD,IAAG,KAAK,2BAA2B,IAAI,IAAIjB,IAAGuE,IAAG,UAASg3B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,IAAIg6B,GAAEh6B,MAAK,EAAEg6B,GAAEh6B,MAAKvB,IAAG,IAAG,IAAKuE,GAAE,EAAE,GAAGg3B,GAAEh6B,MAAK,IAAIpB,GAAEo7B,GAAEh6B,MAAKpB,IAAG,EAAE,IAAIo7B,GAAEh6B,MAAKN,GAAEs6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,GAAGg6B,GAAEh6B,MAAK,IAAIgK,GAAEgwB,GAAEh6B,MAAKgK,IAAG,EAAE,IAAIgwB,GAAEh6B,MAAK,IAAIjB,EAAEi7B,GAAEh6B,MAAKjB,GAAG,EAAE,IAAIi7B,GAAEh6B,MAAK,IAAI4Q,GAAEopB,GAAEh6B,MAAK4Q,IAAG,EAAE,IAAIopB,GAAEh6B,MAAK,IAAIywT,GAAEz2R,GAAEh6B,MAAKywT,IAAG,EAAE,IAAIz2R,GAAEh6B,OAAK,OAAO,IAAIo2V,GAAE,EAAE,GAAE,OAAO,QAAQikD,GAAE,EAAE3jD,GAAE5lV,GAAE1L,OAAOi1Y,GAAE3jD,KAAI2jD,GAAE,CAAC,IAAI3pY,GAAEI,GAAEupY,IAAGrgX,GAAEh6B,MAAK0Q,IAAG,GAAG,IAAIspB,GAAEh6B,MAAK0Q,IAAG,EAAE,IAAIspB,GAAEh6B,MAAK,IAAI0Q,GAAE1Q,GAAE,SAASjB,GAAE6R,GAAE5G,GAAEymT,IAAG1xT,GAAE6R,MAAK5G,GAAE,IAAIjH,EAAE6N,KAAI7I,GAAE,GAAGiC,GAAExL,GAAEuJ,GAAE,EAAE+I,GAAE/I,GAAE,EAAEpI,GAAEmR,GAAE,EAAEslV,GAAEpsV,GAAE,EAAEpL,GAAE,EAAEH,GAAE,EAAE,YAAWuL,IAAG,KAAKA,IAAGpL,IAAGG,GAAE6R,MAAK,IAAInS,GAAEA,KAAI,EAAEG,IAAG,EAAEgS,KAAI7N,EAAE,MAAMhE,GAAEgE,GAAG,IAAIA,EAAE6N,MAAK,YAAW5G,IAAGvL,IAAGuL,IAAGpL,GAAEA,IAAGw3V,GAAEpzV,GAAE,GAAG,IAAIq3Y,GAAE5pF,GAAE,GAAGjyT,GAAEk4V,GAAE,GAAGh3V,GAAEqI,IAAG,QAAQ2I,GAAE,EAAEspB,GAAEy2R,GAAErrT,OAAOsL,GAAEspB,KAAItpB,GAAE,CAAC,IAAI1Q,GAAEywT,GAAE//S,IAAGlS,GAAE4B,GAAEi6Y,IAAG,EAAEr6Y,GAAEE,GAAEw2V,GAAEt2V,IAAG,QAAG,OAAW,CAAC,IAAI3B,IAAG47Y,IAAGz7Y,GAAEA,IAAGw3V,GAAE,GAAGx3V,IAAGG,GAAE6R,MAAK,IAAInS,GAAEA,KAAI,EAAEG,IAAG,EAAEgS,KAAI7N,EAAE,MAAMhE,GAAEgE,GAAG,IAAIA,EAAE6N,MAAK,OAAOjR,IAAGD,GAAEqI,IAAGpI,GAAEmR,GAAE,EAAEslV,GAAEpsV,GAAE,EAAE0sV,GAAE,KAAK,GAAGN,IAAGz2V,MAAKy2V,GAAEM,GAAEt2V,IAAGT,MAAK06Y,GAAEr6Y,QAAOq6Y,GAAEn6Y,GAAE,OAAOR,GAAE26Y,IAAG36Y,GAAEoR,IAAG9N,GAAE,GAAGD,EAAE,IAAI6N,GAAE7R,GAAEgE,GAAG,GAAGhE,GAAEgE,GAAG6N,GAAE7N,EAAE,EAAEhE,GAAE6R,MAAK,GAAGA,GAAxe,CAA2eopB,GAAEh6B,GAAEo2V,GAAE,EAAE,EAAEA,GAAErzV,KAAIrE,KAAKm2C,IAAI,WAAW,OAAM,SAAS7a,GAAEh6B,MAAK,GAAG60B,IAAE,GAAI70B,KAAIo9a,aAAkB/rY,EAAG,CAAHA,MAASrnC,IAAN,CAgC3j7B,YAAYA,IAAG,IAAIw0C,GAAE3tC,GAAEiD,GAAEyqC,GAAEx/C,GAAEN,GAAEkvB,KAAKoiB,MAAMt6B,GAAE,IAAI1G,MAAM,IAAIkC,GAAE,IAAIlC,MAAM,IAAIuvC,GAAE,IAAIvvC,MAAM,IAAI2wY,GAAE,IAAI3wY,MAAM,IAAIirB,GAAE,IAAIjrB,MAAM,OAAO/O,GAAE,IAAI+O,MAAM,OAAO3K,GAAE,IAAI2K,MAAM,IAAI3O,GAAE,IAAI2O,MAAM,IAAI9O,GAAE,GAAGE,EAAE,EAAEk2V,GAAE,EAAEr+T,GAAE,IAAIjpB,MAAM,IAAImJ,GAAE,IAAInJ,MAAM,IAAInP,GAAE,IAAImP,MAAM,IAAI6B,GAAE,IAAI7B,MAAM,KAAK8nV,GAAE,IAAI9nV,MAAM,MAAM7O,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI2P,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAGvP,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAID,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAKN,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAKqvZ,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAGl+Y,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAIqqY,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAKpM,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,YAAWnlY,GAAEjL,IAAG,QAAQ6R,GAAE,EAAE6/S,GAAE,EAAE1tT,GAAE,IAAIgM,MAAMhH,GAAE,EAAEA,IAAG,GAAGA,KAAI,CAAC,QAAQvJ,GAAE,EAAEA,IAAGwL,GAAEjC,IAAGvJ,KAAIuE,GAAEhE,GAAE0xT,KAAI,GAAG1tT,GAAEhE,GAAE0xT,KAAI,GAAG7/S,GAAE7N,GAAEhE,GAAE0xT,KAAI,GAAG1oT,GAAE0oT,KAAI7/S,KAAIA,IAAG,EAAE,OAAO7N,GAAE,YAAWiH,IAAG,QAAQjL,GAAEiL,GAAE,GAAG4G,GAAE5G,GAAE,GAAG,EAAE,GAAG4G,IAAG7R,GAAE,GAAG6R,KAAIzQ,GAAG,GAAGk2V,IAAGzlV,OAAMylV,GAAE,IAAI,KAAKl2V,GAAG0N,GAAE,KAAKA,GAAE,IAAIA,GAAE1N,GAAGk2V,GAAE,EAAEl2V,EAAE,GAAG,YAAW6J,IAAG/J,GAAEgG,KAAK+D,IAAG,YAAWA,IAAG6D,GAAE7D,IAAG,EAAE,KAAK6D,GAAE,IAAI7D,IAAG,WAAWA,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,QAAQgF,GAAEvJ,GAAEuE,GAAE,GAAG+N,GAAE/N,GAAE,KAAKpD,GAAE,SAASqK,GAAEjL,IAAG,IAAI6R,GAAE6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAE,EAAE,IAAIpE,GAAE,EAAEA,GAAE,IAAIA,GAAE,CAACgS,GAAE5G,GAAEhH,IAAGytT,GAAEzmT,GAAEhH,GAAE,GAAGD,GAAEiH,GAAEhH,GAAE,GAAG+E,GAAEiC,GAAEhH,GAAE,GAAGxE,GAAEwL,GAAEhH,GAAE,GAAG8N,GAAE9G,GAAEhH,GAAE,GAAGrD,GAAEqK,GAAEhH,GAAE,GAAG,IAAItD,GAAEkR,IAAGwlV,GAAEpsV,GAAEhH,GAAE,IAAIq3Y,GAAEzpY,GAAEwlV,GAAEM,GAAEjmC,GAAE9wT,GAAE+Q,GAAE+/S,GAAE9wT,GAAEq6B,GAAEj3B,GAAE+N,GAAE9Q,GAAE+C,GAAE+N,GAAE1Q,GAAE2H,GAAEvJ,GAAE0B,GAAE6H,GAAEvJ,GAAEq2B,GAAEn1B,GAAEU,GAAEo+C,GAAE9+C,GAAEU,GAAEyQ,GAAE6lV,GAAE18T,GAAElmB,GAAE4iV,GAAE18T,GAAEhwB,GAAEhH,IAAG6xB,GAAEhkB,GAAE7G,GAAEhH,GAAE,GAAG6xB,GAAEhkB,GAAE,IAAI0tC,GAAE,YAAYzqC,GAAE0qC,IAAGx0C,GAAEhH,GAAE,GAAGw7C,GAAED,GAAEv0C,GAAEhH,GAAE,GAAGw7C,GAAED,GAAE,IAAI9oC,GAAE,aAAaof,GAAE30B,GAAEF,KAAI8T,GAAEpD,GAAE2pY,KAAIppY,GAAE,SAAS4jB,GAAEpf,GAAE6oC,GAAE,YAAYxqC,GAAE2B,GAAEiqY,GAAE,YAAY7uY,GAAE7Q,GAAE0Q,IAAGzQ,GAAEo6Y,GAAEqF,GAAEv/Y,GAAEk6Y,GAAEqF,GAAE11Y,GAAEhH,GAAE,GAAG7C,GAAE8Q,GAAEjH,GAAEhH,GAAE,GAAG7C,GAAE8Q,GAAEjH,GAAEhH,GAAE,GAAG/C,GAAEq+C,GAAEt0C,GAAEhH,GAAE,GAAG/C,GAAEq+C,GAAEt7C,IAAG,EAAE,IAAIpE,GAAEoE,GAAE,EAAEpE,GAAE,IAAIA,GAAE,CAACgS,GAAE5G,GAAEhH,IAAGytT,GAAEzmT,GAAEhH,GAAE,GAAGD,GAAEiH,GAAEhH,GAAE,IAAI+E,GAAEiC,GAAEhH,GAAE,IAAIxE,GAAEwL,GAAEhH,GAAE,IAAI8N,GAAE9G,GAAEhH,GAAE,IAAIrD,GAAEqK,GAAEhH,GAAE,IAAI,IAAIqzV,GAAEzlV,IAAGwlV,GAAEpsV,GAAEhH,GAAE,KAAKg1B,GAAEpnB,GAAEwlV,GAAEl+U,GAAEu4S,GAAE9wT,GAAEC,GAAE6wT,GAAE9wT,GAAEk3V,GAAE9zV,GAAE+N,GAAEjB,GAAE9M,GAAE+N,GAAExQ,GAAEyH,GAAEvJ,GAAE6B,GAAE0H,GAAEvJ,GAAEuB,GAAEs2V,GAAE/1V,GAAE8uZ,GAAE/4D,GAAE/1V,GAAE4Q,GAAEgH,GAAE2+U,GAAE0kD,GAAErjY,GAAE2+U,GAAE7sV,GAAEhH,IAAGjD,GAAEmR,GAAElH,GAAEhH,GAAE,IAAIjD,GAAEmR,GAAE,IAAIi+X,GAAE,YAAYoM,GAAE6T,IAAGplZ,GAAEhH,GAAE,IAAIosZ,GAAEjgB,GAAEnlY,GAAEhH,GAAE,IAAIosZ,GAAEjgB,GAAE,IAAI95X,GAAE,aAAatV,GAAEM,GAAEwP,KAAI0rY,GAAE37Y,GAAEo4B,KAAInqB,GAAE,SAAS9N,GAAEsV,GAAEogU,GAAE,YAAY8lE,GAAElmY,GAAE2Z,GAAE,YAAY9d,GAAErB,GAAEjQ,IAAG8iC,GAAE1K,GAAEhJ,GAAEsnU,GAAEt+T,GAAEhJ,GAAEhlB,GAAEhH,GAAE,IAAIszV,GAAEzoV,GAAE7D,GAAEhH,GAAE,IAAIszV,GAAEzoV,GAAE7D,GAAEhH,GAAE,GAAG0/B,GAAE+yS,GAAEzrU,GAAEhH,GAAE,IAAI0/B,GAAE+yS,GAAEzyU,KAAI,IAAIpE,GAAE,EAAEA,GAAE,KAAKA,GAAEH,GAAEuL,GAAEpL,IAAGG,GAAEH,IAAGwF,GAAExF,IAAG,EAAEH,GAAEA,GAAE,GAAG,EAAEA,GAAE,GAAG,EAAE,OAAO2F,GAAt2B,CAAy2B4F,GAAEjL,IAAGq3V,GAAE,EAAEA,GAAE,KAAKA,GAAEh2V,GAAEF,EAAEk2V,KAAIz2V,GAAEy2V,IAAG,IAAIx3V,GAAEwB,GAAE,GAAGwQ,GAAEA,GAAExQ,GAAE,GAAG,MAAKiV,GAAEo7S,GAAE,KAAKp7S,GAAEo7S,GAAEzwT,GAAE+H,GAAE,MAAMnJ,MAAKyW,GAAE2kB,GAAEjyB,MAAK,QAAQtJ,GAAE,GAAG,EAAEA,IAAG,MAAKA,IAAGA,MAAK,GAAG,MAAK,OAAO4W,GAAE7W,IAAGoS,GAAE,QAAQ5N,GAAEtD,GAAE,EAAEA,IAAGjB,IAAG,CAAC,QAAQ47Y,GAAE36Y,GAAE,MAAKA,KAAIA,IAAGjB,KAAIiB,IAAG,IAAIg3V,GAAEh3V,GAAE26Y,GAAE,GAAG,IAAI3jD,GAAE,CAAC1zV,GAAE0zV,IAAG,EAAE,QAAQhmV,GAAE,EAAEA,IAAG1N,KAAI0N,GAAE2E,GAAEvE,IAAG4lV,IAAG,GAAG3uV,GAAE,MAAM3H,GAAEV,IAAG2V,GAAEtS,IAAG2zV,IAAG,GAAG12V,GAAE+H,MAAKsN,GAAE2kB,GAAEjyB,KAAIrI,KAAI,OAAO,QAAO2V,GAAE7W,IAAGoS,GAAE,YAAW5G,IAAMA,IAAG,IAAIA,GAAE,GAAG,IAAIA,KAAIA,GAAE,KAAKjL,IAAGiL,KAAI,SAASA,IAAG,QAAQjL,GAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI6R,GAAE,EAAEA,GAAE,GAAGA,KAAI,CAAC,IAAI6/S,GAAEhyT,IAAGM,GAAE6R,IAAG5G,GAAE,IAAI,KAAKymT,GAAE,EAAEA,GAAE,EAAE,IAAIA,KAAIA,GAAE,KAAKh7S,GAAEvV,EAAE0Q,KAAI6/S,GAAE,QAAQ1tT,GAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIgF,GAAE,EAAEA,GAAE,GAAGA,KAAI,CAAC,IAAIvJ,GAAEC,IAAGsE,GAAEgF,IAAGiC,GAAE,IAAI,KAAKxL,GAAE,EAAEA,GAAE,EAAE,IAAIA,KAAIA,GAAE,KAAKyS,GAAE/Q,EAAE6H,KAAIvJ,GAAE,QAAQsS,GAAE,CAAC,EAAE,YAAY,YAAY,YAAY,EAAE,WAAW,SAAS,YAAYnR,GAAE,EAAEy2V,GAAE,EAAEA,GAAE,EAAEA,KAAI,QAAQx3V,GAAE,EAAEA,GAAE,EAAEA,KAAI0/C,GAAE3+C,IAAG,GAAG8V,GAAEvV,EAAEP,KAAImR,GAAEslV,IAAGtlV,GAAElS,IAAG,GAAG8gZ,GAAE//Y,IAAG,GAAGsR,GAAE/Q,EAAEP,KAAImR,GAAEslV,IAAGtlV,GAAElS,IAAG,GAAGe,KAAhvB,CAAsvBqK,GAAE,GAAG2jB,KAAKoiB,MAAM,IAAI/lC,IAAG2jB,KAAKoiB,MAAM,IAAI,EAAE/lC,KAAIjL,GAAEiL,IAAGtL,KAAKooY,OAAO,SAAS98X,GAAEjL,IAAG,IAAI6R,GAAE6/S,IAAG,IAAIj5S,MAAMqK,UAAU9iB,IAAG2jC,GAAE3jC,IAAGkB,GAAE,IAAI8O,MAAM5O,EAAE,EAAEk2V,GAAE,EAAE5gB,GAAE,OAAOA,GAAE,OAAOA,GAAE,IAAI5nU,GAAE,IAAIA,GAAE,IAAIA,GAAE,IAAIA,GAAE,IAAIA,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAG4nU,GAAE,GAAGA,GAAE,GAAG5nU,GAAE,GAAGA,GAAE,GAAG,WAAW4nU,GAAE,OAAOA,GAAE,KAAK5nU,GAAE,GAAG,QAAQ7D,GAAE,EAAEA,GAAE,GAAGA,KAAI6D,GAAE4H,GAAEzL,KAAI6D,GAAE,GAAG,QAAQ9O,GAAE,EAAEA,GAAE,GAAGA,KAAI8O,GAAEoD,GAAElS,KAA3F,GAAkG6R,GAAE5G,GAAEiJ,MAAMw9S,GAAEzmT,GAAEkJ,OAAOuiU,GAAE,OAAOA,GAAE,IAAI5nU,GAAE,GAAG4nU,GAAEhlB,IAAGglB,GAAE7kU,IAAG/C,GAAE,GAAGA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAGA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAGA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAG,WAAW4nU,GAAE,OAAOA,GAAE,KAAK5nU,GAAE,GAAG,QAAQ7D,GAAE,EAAEA,GAAE,GAAGA,KAAI6D,GAAEgC,GAAE7F,GAAE,IAAI,QAAQjL,GAAE,EAAEA,IAAG,GAAGA,KAAI8O,GAAEvN,GAAEvB,KAAI8O,GAAE,IAAI,QAAQ+C,GAAE,EAAEA,GAAE,GAAGA,KAAI/C,GAAExN,GAAEuQ,GAAE,IAAI,QAAQ6/S,GAAE,EAAEA,IAAG,IAAIA,KAAI5iT,GAAE9N,GAAE0wT,KAAI5iT,GAAE,GAAG,QAAQ9K,GAAE,EAAEA,GAAE,GAAGA,KAAI8K,GAAEuhZ,GAAErsZ,GAAE,IAAI,QAAQgF,GAAE,EAAEA,IAAG,GAAGA,KAAI8F,GAAEqD,GAAEnJ,KAAI8F,GAAE,IAAI,QAAQrP,GAAE,EAAEA,GAAE,GAAGA,KAAIqP,GAAE0tY,GAAE/8Y,GAAE,IAAI,QAAQsS,GAAE,EAAEA,IAAG,IAAIA,KAAIjD,GAAEshY,GAAEr+X,KAAnS,GAA0S2kU,GAAE,OAAOA,GAAE,IAAI5nU,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAGA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAGA,GAAE,IAAIA,GAAE,GAAG,IAAI9K,GAAE,EAAEgF,GAAE,EAAEvJ,GAAE,EAAE2B,EAAE,EAAEk2V,GAAE,EAAE33V,KAAKooY,OAAO8S,YAAY,WAAW,QAAQ9oY,GAAEnR,GAAEy2V,GAAEx3V,GAAEH,GAAEuE,GAAEtD,GAAE26Y,GAAE3jD,GAAEhmV,GAAE1G,GAAElC,KAAKkyB,GAAEhwB,GAAEiJ,MAAMjT,GAAEgK,GAAEkJ,OAAO9S,GAAE,EAAE45B,GAAE95B,GAAE,EAAEA,GAAEF,IAAG,CAAC,IAAI8Q,GAAE,EAAEA,GAAE1Q,IAAG,CAAC,IAAI4C,GAAEvE,GAAE2B,GAAEF,GAAE4Q,GAAEpR,IAAE,EAAGg3V,GAAE2jD,GAAE,EAAE3jD,GAAE,GAAGA,KAAI1zV,GAAEvE,IAAG47Y,GAAE3jD,IAAG,GAAGt2V,IAAGV,GAAE,GAAG,EAAEg3V,KAAI12V,IAAGE,GAAEm6Y,KAAIr3Y,IAAG5C,IAAGF,GAAE,EAAEm6Y,GAAEr6Y,KAAII,IAAG0Q,GAAEpR,KAAIsD,IAAG8N,GAAEpR,GAAEU,GAAE,GAAGT,GAAE+Q,GAAE1N,MAAKozV,GAAE1lV,GAAE1N,MAAKpE,GAAE8R,GAAE1N,MAAKg1B,GAAE0+T,KAAIG,GAAEl3V,IAAGk3V,GAAET,GAAE,KAAK,GAAGS,GAAEj4V,GAAE,KAAK,IAAI,IAAI,IAAIsZ,GAAEw+U,KAAIG,GAAEl3V,GAAE,KAAK,GAAGk3V,GAAET,GAAE,MAAM,GAAGS,GAAEj4V,GAAE,MAAM,IAAI,IAAI,IAAIgB,GAAE82V,KAAIG,GAAEl3V,GAAE,MAAM,GAAGk3V,GAAET,GAAE,MAAM,GAAGS,GAAEj4V,GAAE,MAAM,IAAI,IAAI,IAAImE,GAAEisB,EAAEgJ,GAAEsmB,GAAEv7C,GAAEy7C,GAAE1qC,IAAG/L,GAAEinB,EAAE9W,GAAEwnY,GAAE33Y,GAAE8I,GAAE0tC,IAAG//C,GAAEwwB,EAAEpvB,GAAE8/Y,GAAElhZ,GAAEqS,GAAE0tC,IAAGztC,IAAG,GAAG5Q,IAAG,EAAE,GAAG,GAAGm2V,GAAE,CAAC,IAAIxhU,GAAE,GAAGA,GAAE,GAAGwhU,GAAE,EAAExhU,GAAE,IAAI,GAAGwhU,GAAE,GAAG,EAAEhhV,GAAEwf,IAAG,OAAO4gT,GAAE,OAAO,IAAI5pR,WAAW5rD,MAAgB,IAAIuX,MAAMqK,UAAU7X,KAAIA,GAAE,IAAI,WAAW,QAAQA,GAAE6tC,OAAOC,aAAa/4C,GAAE,EAAEA,GAAE,IAAIA,KAAI6R,GAAE7R,IAAGiL,GAAEjL,IAA9D,GAAoEy/C,GAAEiyQ,GAAE5gT,GAAEvP,IAAGuQ,GAAE4/S,GAAE2+F,GAAEl+Y,IAAG4C,GAAE28S,GAAEpwT,GAAEN,IAAGw+C,GAAEkyQ,GAAE8qF,GAAEpM,IAAG,WAAW,QAAQnlY,GAAE,EAAEjL,GAAE,EAAE6R,GAAE,EAAEA,IAAG,GAAGA,KAAI,CAAC,QAAQ6/S,GAAEzmT,GAAEymT,GAAE1xT,GAAE0xT,KAAIzwT,GAAE,MAAMywT,IAAG7/S,GAAEopB,GAAE,MAAMy2R,IAAG,GAAGz2R,GAAE,MAAMy2R,IAAG,GAAG7/S,GAAEopB,GAAE,MAAMy2R,IAAG,GAAGA,GAAE,QAAQ1tT,KAAIhE,GAAE,GAAGgE,KAAIiH,GAAEjH,KAAI/C,GAAE,MAAM+C,IAAG6N,GAAEopB,GAAE,MAAMj3B,IAAG,GAAGi3B,GAAE,MAAMj3B,IAAG,GAAG6N,GAAEopB,GAAE,MAAMj3B,IAAG,GAAGhE,GAAE,EAAEgE,GAAEiH,KAAI,EAAEjL,KAAI,GAA7N,GAAmO,WAAW,QAAQiL,GAAE,EAAEA,GAAE,IAAIA,KAAI6sV,GAAE7sV,IAAG,MAAMA,GAAE6sV,GAAE7sV,GAAE,KAAK,GAAG,MAAMA,GAAE6sV,GAAE7sV,GAAE,KAAK,GAAG,KAAKA,GAAE,MAAM6sV,GAAE7sV,GAAE,KAAK,IAAG,MAAOA,GAAE6sV,GAAE7sV,GAAE,MAAM,IAAG,MAAOA,GAAE6sV,GAAE7sV,GAAE,MAAM,GAAG,MAAMA,GAAE,QAAQ6sV,GAAE7sV,GAAE,MAAM,IAAG,MAAOA,GAAE6sV,GAAE7sV,GAAE,MAAM,IAAG,KAAMA,GAA5M,GAAiN04B,GAAE14B,KAAI,IAAIwN,MAAMqK,UAAa,YAAY7X,GAAEjL,IAAG,GAAGL,KAAKi8V,IAAI,EAAEj8V,KAAKqxa,OAAO/la,GAAEtL,KAAK8+a,MAAM,IAAIhC,SAASxxa,GAAE+la,QAAQrxa,KAAK++a,gBAAgB1+a,GAAEL,KAAKg/a,WAAU,EAAGh/a,KAAKi/a,KAAK9lY,OAAOC,aAAap5C,KAAKqxa,OAAO,IAAIl4X,OAAOC,aAAap5C,KAAKqxa,OAAO,IAAIrxa,KAAKi8V,KAAK,GAAE,KAAM,KAAK,KAAK,KAAK,KAAK,KAAK,MAAMlxV,QAAQ/K,KAAKi/a,MAAM,MAAM,IAAI53I,MAAM,oBAAoBrnS,KAAKk/a,cAAcl/a,KAAKm/a,WAAWllZ,OAAOinY,IAAIvuX,GAAG8kT,GAAGk9D,IAAIsY,WAAW93R,GAAG,mBAAmBo9Q,aAAa,mBAAmBplW,WAAW/xB,GAAG,KAAKpL,EAAG,WAAW,IAAImlH,GAAG,OAAO,WAAW,OAAM,GAAI,IAAI,IAAI7pI,GAAE,GAAG,mBAAmBA,GAAE8za,SAAShkZ,GAAG9vB,GAAE8za,OAAQ,CAARA,MAAc9za,IAAN,CAAU,OAAO,SAASA,IAAG,OAAOA,cAAainZ,aAAa,WAAWjnZ,cAAa8vB,IAA5L,GAAmMgoR,GAAG,UAAU,SAAS93S,IAAG,OAAO,IAAI8vB,GAAG9vB,GAAE,QAAQwC,SAAS,WAAW,SAASxC,IAAG,OAAO2uC,SAAS7rB,mBAAmB9iB,MAAKsrB,GAAG,SAAStrB,GAAEjL,IAAG,QAAQ6R,GAAE,MAAM5G,GAAEymT,GAAEzmT,KAAI,GAAGjH,GAAE,EAAEgF,GAAEhJ,GAAEqG,OAAOrC,GAAEgF,GAAEhF,KAAsC0tT,IAAGA,IAArC7/S,IAAGA,IAAG,IAAI7R,GAAE24C,WAAW30C,MAAK,QAAc,MAAM,OAAO0tT,IAAG,GAAG7/S,MAAK,GAAGjK,EAAG,SAASqD,GAAEjL,IAAG,QAAQ6R,GAAE,MAAM5G,GAAEymT,GAAEzmT,KAAI,GAAGjH,GAAE,EAAEgF,GAAEhJ,GAAEqG,OAAOrC,GAAEgF,GAAEhF,KAAqB0tT,IAAGA,IAApB7/S,IAAGA,GAAE7R,GAAEgE,KAAI,QAAc,MAAM,OAAO0tT,IAAG,GAAG7/S,MAAK,GAAGqqB,GAAI+yF,GAAG,IAAI+vT,WAAWv3a,IAAI43M,GAAG,SAASp0M,IAAG,KAAKtL,gBAAgB0/M,IAAI,MAAM,IAAIwwM,UAAU,+CAA+C,IAAI7pU,SAAS/6E,GAAE,SAAQ,GAAGA,IAAG,MAAM,IAAI+7R,MAAM,gDAAgDrnS,KAAK0pY,SAASp+X,KAAI,IAAIumB,UAAU,IAAIhyB,YAAY6/M,IAAI7oK,OAAO44E,GAAG,SAASnkH,IAAG,KAAKtL,gBAAgB0/M,IAAI,MAAM,IAAIwwM,UAAU,+CAA+C,GAAG,SAAQ,MAAM,IAAI7oH,MAAM,wCAAwCrnS,KAAK0pY,SAAS9yW,GAAG,EAAEtrB,GAAEwC,cAAc+jB,UAAU/pB,GAAG2nH,IAAIiwF,GAAG4/N,WAAW9ta,GAAG,SAASlG,IAAG,KAAKtL,gBAAgB0/M,IAAI,MAAM,IAAIwwM,UAAU,+CAA+C,GAAG,SAAQ,MAAM,IAAI7oH,MAAM,wCAAwC,IAAIhnS,GAAE+iT,GAAG93S,GAAEwC,YAAY9N,KAAK0pY,SAAS9yW,GAAG,EAAEv2B,MAAKwxB,UAAU/pB,GAAG0J,IAAI2jI,KAAKuqE,GAAG6/N,aAAan/Z,GAAG,SAAS9U,IAAG,KAAKtL,gBAAgB0/M,IAAI,MAAM,IAAIwwM,UAAU,+CAA+C,IAAIlgY,EAAG1kB,IAAG,MAAM,IAAI+7R,MAAM,2CAA2C,IAAIhnS,GAAE,IAAI8sD,WAAW7hD,IAAG,OAAOtL,KAAK0pY,SAASzhY,EAAG,EAAE5H,MAAKwxB,UAAU/pB,GAAGsY,KAAKtY,GAAG48F,OAAO,SAASp5F,IAAG,GAAG,SAAQ,MAAM,IAAI+7R,MAAM,wCAAwC,OAAO/7R,GAAEA,GAAEwC,WAAW9N,KAAK0pY,SAAS9yW,GAAG52B,KAAK0pY,SAASp+X,KAAIxD,GAAG03a,WAAW,SAASl0a,IAAG,GAAG,SAAQ,MAAM,IAAI+7R,MAAM,wCAAwC,IAAIhnS,GAAE+iT,GAAG93S,GAAEwC,YAAY,OAAO9N,KAAK0pY,SAAS9yW,GAAG52B,KAAK0pY,SAASrpY,KAAI80I,KAAKrtI,GAAG23a,aAAa,SAASn0a,IAAG,IAAI0kB,EAAG1kB,IAAG,MAAM,IAAI+7R,MAAM,2CAA2C,IAAIhnS,GAAE,IAAI8sD,WAAW7hD,IAAG,OAAOtL,KAAK0pY,SAASzhY,EAAGjI,KAAK0pY,SAASrpY,MAAKyH,GAAGqqJ,MAAM,WAAW,OAAO,IAAI51H,EAAGv8B,KAAK0pY,WAAWhqL,IAAIpwF,GAAGz4E,KAAK,SAASvrC,IAAG,GAAG,SAAQ,MAAM,IAAI+7R,MAAM,wCAAwC,OAAOzwQ,GAAG,EAAEtrB,GAAEwC,aAAawhH,GAAGgwT,SAAS,SAASh0a,IAAG,GAAG,SAAQ,MAAM,IAAI+7R,MAAM,wCAAwC,IAAIhnS,GAAE+iT,GAAG93S,GAAEwC,YAAY,OAAO8oB,GAAG,EAAEv2B,KAAI80I,KAAK7lB,GAAGiwT,WAAW,SAASj0a,IAAG,IAAI0kB,EAAG1kB,IAAG,MAAM,IAAI+7R,MAAM,0CAA0C,IAAIhnS,GAAE,IAAI8sD,WAAW7hD,IAAG,OAAOrD,EAAG,EAAE5H,MAAKivH,IAAI,SAAShkH,IAAGA,GAAEo0a,eAAep0a,GAAEumB,UAAU6tZ,eAAe,SAASp0a,IAAG,IAAIqwY,GAAE3jD,GAAEj4V,GAAEuE,GAAED,GAAEgF,GAAEvJ,GAAEsS,GAAE/R,GAAE2R,GAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAIspB,GAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAIh6B,GAAE,CAAC6Q,EAAE,EAAExQ,EAAE,EAAEg+a,GAAG,EAAEC,GAAG,EAAE9/X,EAAE,EAAE63S,EAAE,EAAE93S,EAAE,GAAG5+C,GAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAGy2V,EAAE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAI,OAAI,OAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,SAAI,UAAKx3V,GAAE,IAAIooC,OAAO,qGAAqG5mC,IAAE,EAAGF,GAAE,EAAExB,KAAK0/a,eAAe,GAAG,IAAIvpZ,GAAE,SAAS7qB,IAAG,IAAIjL,GAAEiL,GAAE0tC,aAAa9mC,GAAE7R,IAAG,EAAE0xT,GAAE9wT,GAAEiR,IAAG,YAAO,OAAWE,GAAE,IAAI2/S,IAAG,IAAI1xT,KAAI,UAAS,SAAQ,KAAKH,GAAEgjB,KAAKhR,IAAG,IAAI,OAAM,IAAI,KAAKlR,GAAE,SAASsK,IAAG,QAAQjL,GAAE6R,GAAE,EAAEA,GAAE5G,GAAE5E,OAAOwL,KAAI,CAAC,GAAG,OAAO7R,GAAE81B,GAAE7qB,GAAEo6E,OAAOxzE,MAAK,OAAM,EAAG,GAAG,SAAQ,OAAM,EAAG,OAAM,GAAI4tC,GAAE,SAASx0C,GAAEjL,GAAE6R,GAAE6/S,IAAG,IAAI1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,GAAEZ,GAAE0xT,IAAG,OAAO9wT,QAAO,QAAQ,IAAksB,IAAU,UAAU,UAAU,UAAU,UAAU,MAAMS,IAAE,EAAG,MAAtvB,IAAU,QAAQ,KAAK,UAAU,KAAKA,KAAIT,GAAE,MAAM,UAAU,KAAKS,IAAE,EAAGT,GAAE,IAAI,UAAU,KAAgqB,IAAU,KAAKA,GAAE,UAAtqB,IAAU,KAAK8wT,GAAE,GAAGA,GAAE,GAAG1xT,GAAEqG,QAAQ,QAAQrC,GAAE6N,GAAE6/S,GAAE,KAAK,WAAU,QAAQ1oT,GAAEhJ,GAAE0xT,GAAE,KAAK,UAAS9wT,GAAE,IAAIS,KAAI2H,GAAE,MAAMpI,GAAEoI,KAAIhF,GAAEgF,GAAE,IAAI,UAAU,KAAKpI,GAAE,QAAQoD,GAAE,EAAE0tT,GAAE7/S,GAAE6/S,GAAE,GAAG,MAAMA,GAAE,EAAE1xT,GAAEqG,QAAQ,UAASqrT,GAAE,GAAG,KAAK,IAAI,UAAU,KAAK,GAAG,EAAEA,IAAG,UAASA,GAAE,GAAG,CAAC9wT,GAAE,KAAK,MAAM,GAAGS,GAAE,CAACT,GAAE,IAAI,MAAM,IAAInB,GAAEiyT,GAAE,EAAE3/S,GAAE/R,GAAEqG,OAAO5G,GAAEsS,IAAG,UAAStS,KAAIA,KAAImB,GAAEnB,GAAEsS,IAAG,UAAStS,IAAG,KAAK,IAAI,UAAU,MAAM,GAAGC,KAAIuE,GAAE,CAAC,IAAI8N,GAAE/R,GAAEqG,OAAO5G,GAAEiyT,GAAE,EAAEjyT,GAAEsS,IAAG,WAAUtS,KAAIA,KAAI,GAAGA,GAAEsS,GAAE,CAAC,IAAIslV,EAAEpsV,GAAEymT,IAAG7xT,GAAE,MAAMw3V,GAAGA,GAAG,MAAM,UAAU,GAAGrzV,GAAEhE,GAAEP,IAAGI,KAAI,MAAMmE,IAAG,WAAU,CAACpD,GAAE,IAAI,QAAQA,GAAE8wT,GAAE,GAAG,OAAO1tT,GAAEhE,GAAE0xT,GAAE,IAAI,IAAI7/S,GAAE6/S,GAAE,GAAG,UAAU,IAAI4pF,KAAIj6Y,IAAE,GAAIT,GAAEO,GAAE,UAAU,IAAIw2V,IAAE,EAAG/2V,GAAE,IAAsF,OAAOA,IAAGkR,EAAE,SAAS7G,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAEzmT,GAAE4lB,MAAM,IAAI,OAAOhf,IAAGkD,GAAE28S,GAAE7/S,GAAE,CAAC2ta,QAAQr+a,KAAIuwT,GAAE1tL,UAAUhkI,IAAGA,GAAEgkI,UAAU0tL,GAAEzqR,KAAK,KAAKlyB,GAAE,SAAS9J,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAE1tT,GAAEgF,GAAEvJ,GAAEsS,GAAEnR,IAAE,EAAGy2V,EAAEpsV,GAAE5E,OAAOxG,GAAE,EAAEH,GAAE,GAAGuE,GAAE9C,GAAE85B,GAAEtpB,GAAEhR,GAAE,GAAG,IAAIg3V,GAAE2jD,GAAEj6Y,IAAE,EAAG2C,GAAE,EAAEA,GAAEqzV,EAAErzV,KAAIrD,GAAEqD,IAAG8xB,GAAE7qB,GAAEjH,KAAI,IAAIgF,GAAE,EAAEA,GAAEquV,EAAEruV,KAAI,CAAC,GAAG+I,GAAElS,GAAEH,GAAEsJ,IAAGy2C,GAAEx0C,GAAEtK,GAAEjB,GAAEsJ,IAAG0oT,GAAE,KAAK7xT,GAAEoE,GAAE8N,IAAG9Q,GAAEvB,GAAEsJ,OAAMnJ,IAAG,GAAGG,GAAEgJ,IAAGvJ,GAAEwE,GAAEpE,IAAG,GAAG,EAAE6xT,GAAE,GAAG,QAAO,CAAC,IAAI1tT,GAAEpD,GAAEoD,GAAEgF,GAAEhF,KAAIhE,GAAEgE,IAAG,EAAEpD,IAAE,OAAQA,IAAE,EAAG,GAAGqD,GAAEpE,IAAG,IAAG,IAAKe,KAAIA,GAAEoI,aAAW,EAAGpI,GAAE,CAAC,IAAIoD,GAAEpD,GAAEoD,GAAEgF,GAAEhF,KAAIhE,GAAEgE,IAAGvE,GAAEmB,IAAE,EAAG,MAAMD,GAAEqI,MAAKhJ,GAAEgJ,IAAG,GAAG6I,GAAE2ta,SAAS//a,GAAEk4V,IAAG,SAAS1sV,GAAEjL,GAAE6R,IAAG,QAAQ6/S,GAAE,EAAEA,GAAE7/S,GAAE6/S,KAAI,GAAG,SAAQA,IAAG,CAAC1xT,GAAE0xT,IAAGvwT,GAAE,QAAQ6C,GAAE0tT,GAAE,EAAE,GAAG1tT,IAAG,UAASA,IAAGA,KAAIhE,GAAEgE,IAAG7C,IAAnG,CAAuGR,GAAEX,GAAEq3V,IAAI73S,GAAE,SAASv0C,GAAEjL,GAAE6R,GAAE6/S,GAAE1tT,IAAG,KAAKA,GAAEw7a,QAAQv0a,IAAG,CAAC,GAAG,QAAO,SAAQqwY,GAAE,OAAOt7Y,GAAEgkI,eAAenyH,IAAGA,GAAEmyH,WAAW,QAAQh7H,GAAEvJ,GAAEsS,GAAEnR,GAAEy2V,EAAEr3V,GAAEqG,OAAOxG,GAAE,EAAEA,GAAEw3V,GAAG,CAAC,GAAG3lC,GAAE7xT,KAAIoL,GAAE,CAAC,IAAI8G,GAAElS,GAAE,EAAEkS,GAAEslV,GAAG3lC,GAAE3/S,KAAI9G,IAAG8G,KAAI,IAAInR,GAAEf,GAAEJ,GAAEsS,GAAE,EAAEnR,GAAEnB,GAAEmB,KAAInB,KAAIuJ,GAAEhJ,GAAEY,IAAGZ,GAAEY,IAAGZ,GAAEP,IAAGO,GAAEP,IAAGuJ,GAAE6I,KAAI7I,GAAE6I,GAAEjR,IAAGiR,GAAEjR,IAAGiR,GAAEpS,IAAGoS,GAAEpS,IAAGuJ,IAAGnJ,GAAEkS,GAAElS,QAAO6W,GAAE,SAASzL,GAAEjL,GAAE6R,IAAG,IAAI6/S,GAAEzmT,GAAE4lB,MAAM,IAAI7sB,GAAE,CAACw7a,QAAQr+a,IAAG,OAAO0Q,KAAIA,GAAE,IAAIkD,GAAE28S,GAAE7/S,GAAE7N,IAAG,SAASiH,GAAEjL,GAAE6R,IAAG,GAAG,OAAM2ta,SAAS//a,GAAE,QAAQiyT,GAAE1tT,EAAE,EAAEA,EAAEiH,GAAE5E,OAAOrC,IAAI,IAAIhE,GAAEgE,IAAI,IAAI0tT,GAAE2lC,EAAE3sV,QAAQO,GAAEjH,OAAOiH,GAAEjH,GAAGqzV,EAAE3lC,GAAE,IAA7G,CAAkHA,GAAE7/S,GAAE7N,IAAGw7C,GAAE,EAAEkyQ,GAAE1xT,GAAE6R,GAAE7N,IAAGw7C,GAAE,EAAEkyQ,GAAE1xT,GAAE6R,GAAE7N,IAAG0tT,GAAEzqR,KAAK,KAAK,OAAOtnC,KAAK0/a,eAAeI,cAAc,SAASx0a,GAAEjL,GAAE6R,IAAG,GAAG,SAAS5G,GAAEjL,IAAG,GAAGA,GAAE,QAAQ6R,GAAE,EAAEA,GAAE5G,GAAE5E,OAAOwL,KAAI7R,GAAE6R,IAAGA,QAAE,IAAS5N,KAAIA,GAAEtD,GAAEsK,UAAI,SAAajC,GAAErI,GAAEsK,KAA3F,CAAgGA,GAAEjL,IAAGN,KAAIsE,IAAGgF,GAAE,GAAGtJ,IAAGsE,IAAGC,GAAE+E,GAAE7H,GAAE8C,GAAE,EAAE,EAAEgH,GAAE6G,EAAE7G,GAAEjL,GAAE6R,aAAYnS,IAAGsE,IAAGgF,GAAE7H,GAAE8C,GAAE,EAAE,EAAEgH,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAG5G,GAAE6G,EAAE7G,GAAEjL,aAAYN,IAAGuE,IAAGD,IAAGgF,IAAG,GAAGtJ,KAAIsE,IAAGC,GAAE+E,GAAEiC,GAAE6G,EAAE7G,GAAEjL,IAAGiL,GAAEhH,IAAG9C,GAAE,EAAEuV,GAAEzL,GAAEjL,GAAE6R,MAAK1Q,GAAE,EAAE8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAGC,EAAE7G,GAAEjL,aAAYN,IAAGuE,KAAID,IAAGgF,GAAE7H,GAAE,EAAE8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAG5G,GAAE6G,EAAE7G,GAAEjL,aAAYN,KAAIsE,IAAGC,GAAE+E,GAAE,CAAC,IAAI0oT,GAAEjyT,GAAEwE,IAAG9C,GAAE,EAAE8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAG1Q,GAAE,EAAE1B,IAAE,EAAGwL,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAGpS,GAAEiyT,KAAIvwT,GAAE,EAAE8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAG5G,GAAE6G,EAAE7G,GAAEjL,IAAGP,KAAI0B,GAAE,GAAG8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAGpS,GAAEiyT,GAAEzmT,GAAE6G,EAAE7G,GAAEjL,WAAUmB,GAAE,EAAE8J,GAAEyL,GAAEzL,GAAEjL,GAAE6R,SAAQ1Q,GAAE8C,GAAE,EAAE,EAAEgH,GAAEyL,GAAEzL,GAAEjL,GAAE6R,IAAG,OAAO5G,IAAGtL,KAAK0/a,eAAevhB,WAAW,SAAS7yZ,IAAGA,KAAIvL,GAAEuL,GAAEy0a,cAAc17a,GAAEiH,GAAE00a,eAAe17a,GAAEgH,GAAE20a,WAAW52a,GAAEiC,GAAE40a,YAAYpgb,GAAEwL,GAAE60a,sBAAsBngb,KAAK0/a,eAAevhB,WAAW7yZ,IAAGtL,KAAK0/a,gBAAgB,IAAIr/a,GAAE,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,MAAM,MAAM,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,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AG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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I,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAA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OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,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OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAC1B,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACvE,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IACxD,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACtF,OAAU,IAAM,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IAAK,OAAU,IACtF,OAAU,IAAM,OAAU,IAC1B,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,OAAU,IAAK,OAAU,IACzC,OAAU,IAAM,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oCACA,qCAEAJ,GACA,iEACA,gEACA,4FACA,oCACA,oCACA,qCAEA0lV,GACA,2DACA,0DACA,gFACA,oCACA,8BACA,+BAEAikD,GACA,qDACA,8CACA,oEACA,8BACA,oCACA,yBAEAz6Y,GACA,qDACA,8CACA,oEACA,8BACA,8BACA,yBAEAo6B,GACA,qDACA,8CACA,oEACA,oCACA,oCACA,0BAGAjyB,cACA,yBACA,WACAhI,aACA,eACAA,YAEAA,qBAGAgD,GACA,iCACA,iCACA,2BACA,iCACA,qBACA,2BACA,uCACA,qBACA,uCACA,uCACA,uCACA,wCAGAhE,wBACAuvK,SACAE,cACAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,yBACA4+c,iBACAC,wBACAC,+BAEAR,8BACAC,iBACA,oBAEAC,yBACA,YACA,SAEA,UAGAn1E,UACA01E,sGACAC,gGACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,+BACAC,6BACAt/c,SACAotT,UACAxtT,SACAugV,UACAmF,SACAsmB,UACA29B,SACArhD,UACAp5V,SACAywd,UACAr2b,SACAs2b,WAEAM,uBACA,iCAEA9yE,MACA2yE,MACAC,QAIA,CA1JuC1md,CAAWymT,EAAQ,OA0J1D;;;;CC3JC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uXACA,KAEAE,YACA,gXACA,KAEAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,sGACAC,0FACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,yBACAC,6BACAt/c,6BACAotT,uCACAxtT,mCACAugV,uCACAmF,6BACAsmB,uCACA29B,uBACArhD,iCACAp5V,uBACAywd,iCACAr2b,uBACAs2b,wCAEAxyE,MACA2yE,MACAC,SAIA,CAzDuC1md,CAAWymT,EAAQ,OAyD1D;;;;CCtDC,YAA4B;kCAI7B;IAAAzmT,GACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEAhH,cACA,aACA,EACA,MACA,EACA,MACA,EACAvE,oBACA,EACAA,UACA,EACA,GAEAsJ,GACA+I,GACA,iEACA,gEACA,4FACA,8BACA,oCACA,qCAEAJ,GACA,iEACA,gEACA,4FACA,oCACA,oCACA,qCAEA0lV,GACA,2DACA,0DACA,gFACA,oCACA,8BACA,+BAEAikD,GACA,qDACA,8CACA,oEACA,8BACA,oCACA,yBAEAz6Y,GACA,qDACA,8CACA,oEACA,8BACA,8BACA,yBAEAo6B,GACA,qDACA,8CACA,oEACA,oCACA,oCACA,0BAGAj3B,cACA,yBACA,WACA/C,aACA,eACAA,YAEAA,qBAGA0Q,GACA,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGA3R,wBACAuvK,SACAE,cACAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,yBACA4+c,iBACAC,wBACAC,+BAEAR,8BACAC,iBACA,oBAEAC,yBACA,YACA,SAEA,UAGAn1E,UACA01E,sGACAC,gGACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,+BACAC,6BACAt/c,SACAotT,UACAxtT,SACAugV,UACAmF,SACAsmB,UACA29B,SACArhD,UACAp5V,SACAywd,UACAr2b,SACAs2b,WAEAO,qBACA,iCAEAD,uBACA,SACA3pb,0BACA,cAEAA,wBAEA62W,MACA2yE,MACAC,SAIA,CA7KuC1md,CAAWymT,EAAQ,OA6K1D;;;;;CCzKC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uXACA,KAEAE,YACA,gXACA,KAEAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,sGACAC,0FACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,yBACAC,6BACAt/c,6BACAotT,uCACAxtT,mCACAugV,uCACAmF,6BACAsmB,uCACA29B,uBACArhD,iCACAp5V,uBACAywd,iCACAr2b,uBACAs2b,wCAEAxyE,MACA2yE,MACAC,QAIA,CAzDuC1md,CAAWymT,EAAQ,OAyD1D;;;;CCvDC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,wBACAuvK,qZACA,KAEAE,YACA,8YACA,KAEAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAR,8BACAC,iBACA,oBAEAC,yBACA,YACA,SAEA,UAGAn1E,UACA01E,sGACAC,0FACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,yBACAC,6BACAt/c,6BACAotT,uCACAxtT,mCACAugV,uCACAmF,6BACAsmB,uCACA29B,uBACArhD,iCACAp5V,uBACAywd,iCACAr2b,uBACAs2b,wCAEAO,qBACA,SACA5pb,sFACA,cAEAA,wBAEA2pb,uBACA,SACA3pb,0BACA,cAEAA,wBAEA62W,MACA2yE,MACAC,QAIA,CA3GuC1md,CAAWymT,EAAQ,OA2G1D;;;;CCxGC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,6XACA,KAEAE,YACA,sXACA,KAEAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,sGACAC,0FACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,yBACAC,6BACAt/c,6BACAotT,uCACAxtT,mCACAugV,uCACAmF,6BACAsmB,uCACA29B,uBACArhD,iCACAp5V,uBACAywd,iCACAr2b,uBACAs2b,wCAEAxyE,MACA2yE,MACAC,QAIA,CAzDuC1md,CAAWymT,EAAQ,OAyD1D;;;;;;CCpDC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEA+E,cACA,aACA,EACA,MACA,EACA,MACA,EACAnJ,oBACA,EACAA,UACA,EACA,GAEAmE,GACA+N,GACA,iEACA,gEACA,4FACA,8BACA,oCACA,qCAEAJ,GACA,iEACA,gEACA,4FACA,oCACA,oCACA,qCAEA0lV,GACA,2DACA,0DACA,gFACA,oCACA,8BACA,+BAEAikD,GACA,qDACA,8CACA,oEACA,8BACA,oCACA,yBAEAz6Y,GACA,qDACA,8CACA,oEACA,8BACA,8BACA,yBAEAo6B,GACA,qDACA,8CACA,oEACA,oCACA,oCACA,0BAGAtpB,cACA,yBACA,WACAzQ,aACA,eACAA,YAEAA,qBAGAzB,GACA,iCACA,uCACA,2BACA,iCACA,2BACA,iCACA,iCACA,iCACA,uCACA,uCACA,uCACA,wCAGAO,qBACAuvK,SACAE,cACAK,2SACAE,4NACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,yBACA4+c,iBACAC,wBACAC,+BAEAR,8BACAC,iBACA,oBAEAC,yBACA,YACA,SAEA,UAGAn1E,UACA01E,sGACAC,gGACAC,6EACAC,0FACAC,6EACAC,cAEAC,cACAC,+BACAC,6BACAt/c,SACAotT,UACAxtT,SACAugV,UACAmF,SACAsmB,UACA29B,SACArhD,UACAp5V,SACAywd,UACAr2b,SACAs2b,WAEAO,qBACA,SACA5pb,sFACA,cAEAA,wBAEA2pb,uBACA,SACA3pb,0BACA,cAEAA,wBAEA62W,MACA2yE,MACAC,SAIA,CA7LuC1md,CAAWymT,EAAQ,OA6L1D;;;;CC5LC,YAA4B;kCAI7B;IAAAzmT,GACA,UACA,UACA,UACA,WACA,WACA,SACA,SACA,UACA,UACA,gBACA,gBACA,kBACA,cACA,UACA,WACA,WACA,qBACA,sBAGAjL,qBACAuvK,4FACA,KAEAE,yEACAK,SACA,iLACA,KAEAE,+EACAE,sEACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,6BACAC,0BACAC,4DACAC,6BACAC,0DACAC,cAEAC,cACAC,kBACAC,0BACAt/c,iCACAotT,oBACAxtT,yBACAugV,yBACAmF,aACAsmB,aACA29B,eACArhD,eACAp5V,WACAywd,WACAr2b,WACAs2b,YAEAnB,kEACAC,iBACA,6CAEAC,yBACA,WACA,YACctnd,KACd,kBACcA,KACd,eAEA,cAGAwod,oFACAC,oBACA,SAEA,2BAEA,WACA9/c,UACAlS,kBACA,6BAEAs/Y,MACA2yE,MACAC,QAIA,CAxGuC1md,CAAWymT,EAAQ,OAwG1D;;;;;;CCnGC,YAA4B;kCAI7B;SAAAzmT,OACA,mBACA,0BACAxL,KACAkS,wCACAlS,KACAA,KAEA,kBASA,cACAkS,4FACU,QACVA,4FAEA3N,QAbA,CACAm7T,+PACA+yB,+PACAyrB,+PACA1jB,gFACAq3H,oHACAC,iFAOA9xd,OAIAO,qBACAuvK,QACAhzG,ijBACA,KAEAw1Z,WACA,8hBACA,MAGAtiT,YACA,iSACAK,UACAvzG,4TACA,KAEAw1Z,WACA,qTACA,KAEAC,uJAEAhiT,sHACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,yBACAC,iCACAC,yCAEAz1E,UACA01E,qDACAC,2DACAE,qDACAD,oBACA,mCAEAE,oBACA,wBACA,OACA,OACA,OACA,EACA,kFACA,OACA,OACA,EACA,yEAGAC,cAEAC,cACAC,qCACAC,mCACAt/c,0FACAJ,IACAugV,KACAmF,IACAsmB,KACA29B,mCACArhD,KACAp5V,mCACAywd,KACAr2b,uBACAs2b,MAEAnB,sIACAC,iBACA,6EAEAC,yBACA,WACA,2BACctsd,KACd,uCACcA,KACd,qBAEA,wCAGAwtd,8DACAC,sBACA,cACA,QACA,QACA,UACA,QACA,IACA,yBACAztd,WACAA,UAEAA,YADAA,YACA,IACA,IACA,iCAEA,WAGA+6Y,MACA2yE,MACAC,QAIA,CA9IuC1md,CAAWymT,EAAQ,OA8I1D;;;;CC7IC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,+bACA,KAEAE,6PACAK,wTACA,KAEAE,gKACAE,oHACAqgT,gBACAC,UACAC,cACA3+c,cACA4+c,iBACAC,uBACAC,+BAEAz1E,UACA01E,+CACAC,+CACAC,4BACAC,qDACAC,oBACA,wBACA,OACA,OACA,EACA,iFACA,OACA,OACA,OACA,EACA,wEAGAC,cAEAC,cACAC,qCACAC,yCACAt/c,0FACAotT,mDACAxtT,yCACAugV,6CACAmF,uBACAsmB,iCACA29B,uBACArhD,iCACA54V,+CACA4wd,mDACApxd,mCACAywd,6CACAr2b,yCACAs2b,8CAEAC,iHACAC,oBACA,WACAztd,QACA,aACAC,kBACc,MACdA,kBACcD,WACdC,kBACc,MACdA,kBACc,MACdA,kBACc,aACdA,kBAEAA,mBAGA86Y,MACA2yE,MACAC,QAIA,CAzFuC1md,CAAWymT,EAAQ,OAyF1D;;;;CCtFC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,oLACA,KAEAE,uFACAK,6EACAE,4DACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,sDACAC,6DAEAz1E,UACA01E,iCACAC,mCACAC,wCACAC,mCACAC,sDACAC,cAEAC,cACAC,2BACAC,4BACAt/c,oBACAotT,gBACAxtT,iBACAugV,eACAmF,yBACAsmB,uBACA29B,eACArhD,aACAp5V,eACAywd,aACAr2b,cACAs2b,aAEAxyE,MACA2yE,MACAC,QAIA,CArDuC1md,CAAWymT,EAAQ,OAqD1D;;;;CClDC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,wBACAuvK,meACA,KAEAE,YACA,kVACA,KAEAK,0UACA,KAEAE,sNACAE,sLACAqgT,gBACAC,+BACAC,mCACA3+c,eACA4+c,iBACAC,6CACAC,qDAEAz1E,UACA01E,4BACAC,gEACAC,oBACAC,8CACAC,mCACAC,cAEAC,cACAC,+BACAC,6BACAt/c,wEACAotT,mDACAxtT,gDACAugV,uCACAmF,gDACAsmB,uCACA29B,oCACArhD,2BACAp5V,oCACAywd,2BACAr2b,oCACAs2b,4BAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAIAzB,2MACA8B,2BAIA,OAHA,SACAlud,KAEA,yBACAA,WACc,0BAEA,+BADdA,EAGc,qCACdA,YACc,sCAEA,iDADdA,UACc,CACd,EAIAssd,yBACA,WACA,qBACctsd,IACd,qBACcA,KACd,2BACcA,KACd,iCACcA,KACd,iCACcA,KACd,6CAEA,sBAGA+6Y,MACA2yE,MACAC,QAIA,CAnIuC1md,CAAWymT,EAAQ,OAmI1D;;;;CChIC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,meACA,KAEAE,YACA,kVACA,KAEAK,0UACA,KAEAE,sNACAE,sLACAqgT,gBACAC,+BACAC,mCACA3+c,eACA4+c,iBACAC,6CACAC,qDAEAz1E,UACA01E,4BACAC,gEACAC,oBACAC,8CACAC,mCACAC,cAEAC,cACAC,+BACAC,6BACAt/c,wEACAotT,mDACAxtT,gDACAugV,uCACAmF,gDACAsmB,uCACA29B,oCACArhD,2BACAp5V,oCACAywd,2BACAr2b,oCACAs2b,4BAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGAzB,6IACA8B,2BAIA,OAHA,SACAlud,KAGA,gCACA,2CACA,qCAEAA,KAEAA,GAGAssd,yBACA,WACA,qBACctsd,KACd,2BACcA,KACd,iCACcA,KACd,iCAEA,sBAGA+6Y,MACA2yE,MACAC,QAIA,CAzHuC1md,CAAWymT,EAAQ,OAyH1D;;;;CCtHC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,q0BACA,KAEAE,YACA,2PACA,KAEA0iT,gDACAC,oBACAtiT,SACA,ybACA,KAEAE,+RACA,KAEAE,wJACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,0BACAC,kCAEAz1E,UACA01E,oDACAC,oDACAC,4GACAC,wCACAC,2GACAC,cAEAC,cACAC,yBACAC,yCACAt/c,mCACAotT,6CACAxtT,iEACAugV,uCACAmF,uEACAsmB,6CACA29B,qDACArhD,iCACAp5V,2DACAywd,iCACAr2b,+CACAs2b,sBAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGAzB,2NACA8B,2BAIA,OAHA,SACAlud,KAGA,kDACA,uDACA,iDAEAA,KAEAA,GAGAssd,yBACA,WACA,uCACctsd,KACd,6CACcA,KACd,6CACcA,KACd,6CAEA,wCAGA+6Y,MACA2yE,MACAC,QAIA,CA9HuC1md,CAAWymT,EAAQ,OA8H1D;;;;CC3HC,YAA4B;kCAI7B;SAAAzmT,SAMA,eALA,CACAinV,cACAo/H,SACAr3H,aAEA74V,MAEA,cACA,kBACA,OACA,OACA,OACA,OACA,EACA,0BAEA,mBAGA,cACA,WACA4H,QAEA9H,EAEA,gBACA,aACAyQ,KAEAzQ,EAEA,cACA,OACAyQ,MACAxQ,MACAm6Y,OAEA,+BACAp6Y,EAEAC,8BAGA,OACA,QACA,mBACA,QACA,QACA,QACA,cACA,QACA,QACA,QACA,QACA,OACA,SAEAzB,EACA,uJACAG,EACA,6FACAc,EACA,gEACAC,GACA,QACA,QACA,WACA,sBACA,SACA,WACA,YAEAC,GACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEAG,GACA,OACA,OACA,eACA,QACA,OACA,OACA,QAGAhB,qBACAuvK,kGACA,KAEAE,+EACAK,sEACAE,uDACAE,+CACAmiT,gBACAC,oBACAC,qBACAC,mBAEAC,cACAN,mBACAO,oBACAC,yBACAC,cACAC,kBACAC,mBAEAvC,gBACAC,WACAC,eACA3+c,eACA4+c,yBACAC,gCACAC,wCAEAz1E,UACA01E,wBACAC,kCACAC,wBACAC,6BACAC,8BACAC,cAEAC,cACAC,mBACAC,mBACAt/c,6BACAotT,eACAxtT,gBACAugV,KACAmF,WACAsmB,YACA29B,cACArhD,KACAp5V,WACAywd,KACAr2b,aACAs2b,MAEAC,4CACAC,oBAEA,UADA,oBACA,EAEA1yE,MACA2yE,MACAC,OAEAvB,0BACAC,iBACA,kBAEAC,yBACA,4BAIA,CA1KuCrld,CAAWymT,EAAQ,OA0K1D;;;;;CCtKC,YAA4B;kCAI7B;SAAAzmT,SACA,YACA,cACA,KACA,OACAxL,GADA,MACA,UACkB,oBAClB,UAEA,UAEA,IACA,IACA,2CACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,SAEA,SAEA,IACA,IACA,uCACA,KACA,OACAA,GADA,MACA,MACkB,oBAClB,OAEA,OAEA,IACA,KACA,OACAA,GADA,MACA,MAEA,OAEA,IACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,UAEA,UAEA,IACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,SAEA,SAEA,CAIAO,qBACAuvK,kGACA,KAEAE,YACA,oEACA,KAEA2iT,oBACAtiT,gFACA,KAEAE,mEACAE,mDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,gCAEAz1E,UACA01E,uBACAC,uBACAC,oBACA,wBACA,EACA,mCACA,EACA,kCACA,EACA,iCACA,OACA,OACA,OACA,EACA,0BAGAC,4BACAC,oBACA,wBACA,OACA,EACA,uCACA,EACA,2CACA,OACA,OACA,OACA,EACA,oCAGAC,cAEAC,cACAC,eACAC,gBACAt/c,gBACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,QACArhD,KACAp5V,WACAywd,KACAr2b,WACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAvJuC1md,CAAWymT,EAAQ,OAuJ1D;;;;CCrJC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,QACAwiT,WACA,6FACA,KAEAx1Z,qIACA,KAEAy1Z,4BAEAviT,YACA,uEACA,KAEA2iT,oBACAtiT,SACA,oEACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,sBACAqC,gBACApC,oCACAqC,uBACApC,0CACAqC,6BAEA93E,UACA01E,mBACA,uDAEAC,mBACA,0DAEAC,oBACA,uDAEAC,mBACA,uDAEAC,oBACA,MACA,wBACA,6BACA,QAGAC,cAEAC,cACAC,sBACAC,aACAt/c,eACAotT,eACAxtT,aACAugV,eACAmF,aACAsmB,cACA29B,WACArhD,aACAp5V,WACAywd,cACAr2b,WACAs2b,cAEAC,+CACAC,sBACA,MACA,MACA,IACA,MACA,IACA,MACA,IACA,MACA,IACA,OACA,2BACAztd,OAEAC,KAEA86Y,MACA2yE,MACAC,QAIA,CAtGuC1md,CAAWymT,EAAQ,OAsG1D;;;;CCnGC,YAA4B;kCAI7B;IAAAzmT,GACAsxD,2IACA,KAEAw1Z,WACA,sIACA,MAGA9td,sGACA+E,GACA,QACA,WACA,aACA,QACA,aACA,wCACA,2CACA,QACA,gBACA,gBACA,QACA,SAIAhF,EACA,mPAEA,cACA,6BAEA,oBACA,YACA,cACA,IACA,mDACA,KACA,YACAhD,4BAEAA,kBAEA,IACA,2CACA,KACA,YACAA,0BAEAA,iBAEA,IACA,2CACA,KACA,YACAA,0BAEAA,iBAEA,IACA,6BACA,KACA,YACAA,wBAEAA,YAEA,IACA,kDACA,KACA,YACAA,gDAEAA,uBAEA,IACA,8BACA,KACA,YACAA,sBAEAA,UAKAhB,qBACAuvK,SACAE,cACAgjT,cACAN,mBAGAO,kBACA,gPACAC,uBACA,6FACAC,cACAC,kBACAC,mBACAhjT,uGACAE,2DACAE,yDACAqgT,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,8BACAhwd,gBAEAu6Y,UACA01E,sBACAC,0BACAC,oBACA,wBACA,EACA,kCACA,OACA,EACA,6BACA,EACA,mCACA,EACA,oCACA,EACA,+BACA,EACA,0BAGAC,4BACAC,oBACA,wBACA,EACA,wCACA,OACA,EACA,qCACA,EACA,wCACA,OACA,EACA,qCACA,EACA,gCAGAC,cAEAC,cACAC,eACAC,oBACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAtLuC1md,CAAWymT,EAAQ,OAsL1D;;;;CCnLC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,uUACA,KAEAE,6PACAK,SACA,iXACA,KAEAE,0JACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,oHACAC,4HACAC,oIAEAz1E,UACA01E,qFACAC,qFACAE,qFACAD,iGACAE,iGACAC,cAEAC,cACAC,mBAMA,UALA,2CACA,qBACA,+BACA,qBACA,qBACA,EAEAC,+CACAt/c,+EACAotT,mDACAxtT,sDACAugV,uCACAmF,sDACAsmB,uCACA29B,0CACArhD,2BACAp5V,gDACAywd,iCACAr2b,0CACAs2b,4BAEAC,oDACAC,gCACA1yE,MACA2yE,MACAC,QAIA,CAjEuC1md,CAAWymT,EAAQ,OAiE1D;;;;;CC7DC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,sGACA,KAEAE,uEACA,KAEAK,SACA,qFACA,KAEAE,wDACAE,8CACA0hT,sBAEArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,yBACAC,wBACAC,wBACAC,uBACAC,iCACAC,cAEAC,cACAC,iBACAC,mBACAt/c,qBACAotT,eACAxtT,UACAugV,cACAmF,QACAsmB,YACA29B,YACArhD,gBACAp5V,QACAywd,YACAr2b,aACAs2b,iBAEAC,0DAEAC,oBACA,IACAztd,KAwBA,OAzBAC,EAyBA,GAEAD,EADA,KA1BAC,GA0BA,KA1BAA,GA0BA,KA1BAA,GA0BA,KA1BAA,GA0BA,MA1BAA,EA2BA,MAEA,MA7BAA,EA+Bc,IACdD,EA9BA,CACA,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAvBAC,IAkCAA,KAEA86Y,MACA2yE,MACAC,QAIA,CAnGuC1md,CAAWymT,EAAQ,OAmG1D;;;;CCjGC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,mGACA,KAEAE,yEACAK,+EACAE,6DACAE,oDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,yBACAC,2CAEAz1E,UACA01E,yBACAC,4BACAC,+BACAC,4BACAC,8BACAC,cAEAC,cACAC,eACAC,gBACAt/c,mBACAotT,iBACAxtT,aACAugV,iBACAmF,YACAsmB,cACA29B,WACArhD,aACAp5V,gBACAywd,mBACAr2b,aACAs2b,eAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAvDuC1md,CAAWymT,EAAQ,OAuD1D;;;;;;;CCjDC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA0G,iCACA0lV,iCACAikD,0BACArhD,0BACA54V,+BACAR,8BACAywd,8BACAr2b,4BACAs2b,6BAEA,yBAGAvxd,wBACAuvK,wGACA,KAEAE,YACA,8EACA2iT,oBACAtiT,SACA,oEACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,yBACAC,iCAEAz1E,UACA01E,8BACAK,aACAJ,+BACAC,8BACAC,gCACAC,yCAEAE,cACAC,eACAC,cACAt/c,sBACAotT,iBACAxtT,IACAugV,gBACAmF,IACAsmB,gBACA29B,IACArhD,KACA54V,IACA4wd,eACApxd,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9EuC1md,CAAWymT,EAAQ,OA8E1D;;;;CC9EC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA0G,iCACA0lV,iCACAikD,0BACArhD,0BACA54V,+BACAR,8BACAywd,8BACAr2b,4BACAs2b,6BAEA,yBAGAvxd,wBACAuvK,qGACA,KAEAE,YACA,2EACA2iT,oBACAtiT,SACA,oEACA,KAEAE,gDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,yBACAC,iCAEAz1E,UACA01E,8BACAK,aACAJ,+BACAC,8BACAC,gCACAC,yCAEAE,cACAC,eACAC,cACAt/c,sBACAotT,iBACAxtT,IACAugV,gBACAmF,IACAsmB,gBACA29B,IACArhD,KACA54V,IACA4wd,eACApxd,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9EuC1md,CAAWymT,EAAQ,OA8E1D;;;;;;CCzEC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA0G,iCACA0lV,iCACAikD,0BACArhD,0BACA54V,+BACAR,8BACAywd,8BACAr2b,4BACAs2b,6BAEA,yBAGAvxd,qBACAuvK,qGACA,KAEAE,YACA,2EACA2iT,oBACAtiT,SACA,oEACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,yBACAC,iCAEAz1E,UACA01E,8BACAK,aACAJ,+BACAC,8BACAC,gCACAC,yCAEAE,cACAC,eACAC,cACAt/c,sBACAotT,iBACAxtT,IACAugV,gBACAmF,IACAsmB,gBACA29B,IACArhD,KACA54V,IACA4wd,eACApxd,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9EuC1md,CAAWymT,EAAQ,OA8E1D;;;;CC7EC,YAA4B;kCAI7B;IAAAzmT,GACA,mDACA,+DACA,uCACA,mDACA,eACA,2BACA,uCACA,mDACA,2EACA,+DACA,+DACA,gEAEAhH,GACA,mDACA,2BACA,mDACA,2BACA,+DACA,uCACA,oDAGAjE,qBACAuvK,SACAE,cACAK,WACAE,gBACAE,wMACAqgT,gBACAC,WACAC,eACA3+c,aACA4+c,iBACAC,wBACAC,+BAEAR,0CACAC,iBACA,0BAEAC,yBACA,YACA,eAEA,gBAGAn1E,UACA01E,oDACAC,oDACAC,mBACAC,oDACAC,sEACAC,cAEAC,cACAC,6DACAC,+CACAt/c,yFACAotT,yDACAxtT,qDACAugV,6CACAmF,iEACAsmB,yDACA29B,qDACArhD,6CACAp5V,yCACAywd,iCACAr2b,qDACAs2b,8CAEAO,qBACA,iCAEAD,uBACA,iCAEA9yE,MACA2yE,MACAC,SAIA,CA5FuC1md,CAAWymT,EAAQ,OA4F1D;;;;CCzFC,YAA4B;kCAI7B;SAAAzmT,KACA,MACA,qDACA,wDAIAjL,qBACAkzd,mBACA,8nBACA,KAEAC,iBACA,8nBACA,KAEA5jT,qBACA,SAGA,oBACA,2CAGA5vK,kCAEAA,oCARAA,0BAWA8vK,yQACAK,wTACA,KAEAE,gKACAE,oHACAogT,yBACA,YACA3+c,gCAEAA,iCAGA0+c,iBACA,0CAEAD,6CACAG,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAwC,YACAvC,uDACAC,iDACAC,wBACAC,2CACAC,oBACA,OACA,IADAtxd,WAEA,iGAEA,wGAGAuxd,cAEA/1E,uBACA,0BACA17Y,eACA,cACAkS,cAEAA,eAAqClS,0DAErC0xd,cACAC,yBACAC,mCACAt/c,sGACAotT,iFACAxtT,sDACAugV,uCACAmF,0CACAsmB,iCACA29B,gDACArhD,uCACAp5V,4DACAywd,uCACAr2b,kEACAs2b,8CAEAC,uCACAC,mBACA1yE,MACA2yE,MACAC,QAIA,CA5GuC1md,CAAWymT,EAAQ,OA4G1D;;;;CCzGC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,kBACAC,0BACAC,kCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,GAIA,CAlEuCxmd,CAAWymT,EAAQ,OAkE1D;;;;CC/DC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,GAIA,CAlEuCxmd,CAAWymT,EAAQ,OAkE1D;;;;CC/DC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,qGACA,KAEAE,yEACAK,0EACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAEAC,cACAC,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACAp5V,YACAywd,eACAr2b,WACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;;;;CChEC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,+GACA,KAEAE,gFACAK,wFACAE,mEACAE,mDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,+BACAC,sCACAC,gDACAqC,4CAEA7C,4BACAC,iBACA,uCAEAC,yBACA,YACAtsd,oBAEAA,qBAGAm3Y,UACA01E,8BACAC,8BACAC,yBACAC,8BACAC,oCACAC,cAEAC,cACAC,iBACAC,qBACAt/c,oBACAotT,iBACAxtT,eACAugV,gBACAmF,aACAsmB,cACA29B,aACArhD,cACAp5V,eACAywd,gBACAr2b,aACAs2b,eAEAC,kCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAnEuC1md,CAAWymT,EAAQ,OAmE1D;;;CCpEC,YAA4B;kCAI7B;IAAAzmT,EACA,oEACA,KAEAhH,+DACA+E,GACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,mLAEAhE,wBACAuvK,wGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAOAwnd,cACAN,mBACAO,kBACA,+FACAC,uBACA,0FACAC,cACAC,kBACAC,mBACAhjT,iFACAE,oEACAE,iDACA0hT,sBACArB,gBACAC,YACAC,gBACA3+c,eACA4+c,2BACAC,mCACAC,2CAEAz1E,UACA01E,mBACA,oDAEAC,mBACA,0DAEAC,oBACA,qDAEAC,mBACA,qDAEAC,oBACA,MACA,0BACA,yBACA,QAGAC,cAEAC,cACAC,eACAC,eACAt/c,kBACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,cACArhD,gBACA54V,eACA4wd,gBACApxd,WACAywd,cACAr2b,cACAs2b,iBAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA/GuC1md,CAAWymT,EAAQ,OA+G1D;;;;CC3GC,YAA4B;kCAI7B;IAAAzmT,EACA,oEACA,KAEAhH,+DACA+E,GACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,mLAEAhE,wBACAuvK,wGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAOAwnd,cACAN,mBACAO,kBACA,+FACAC,uBACA,0FACAC,cACAC,kBACAC,mBACAhjT,iFACAE,oEACAE,iDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,2BACAC,iCACAC,yCAEAz1E,UACA01E,mBACA,oDAEAC,mBACA,0DAEAC,oBACA,qDAEAC,mBACA,qDAEAC,oBACA,MACA,0BACA,yBACA,QAGAC,cAEAC,cACAC,eACAC,eACAt/c,kBACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,cACArhD,gBACA54V,eACA4wd,gBACApxd,WACAywd,cACAr2b,cACAs2b,iBAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,OAEAl/S,iCAGA,CAhHuCxnK,CAAWymT,EAAQ,OAgH1D;;;;;CC5GC,YAA4B;kCAI7B;IAAAzmT,EACA,oEACA,KAEAhH,+DACA+E,GACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,mLAEAhE,wBACAuvK,wGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAOAwnd,cACAN,mBACAO,kBACA,+FACAC,uBACA,0FACAC,cACAC,kBACAC,mBACAhjT,iFACAE,oEACAE,iDACA0hT,sBACArB,gBACAC,YACAC,gBACA3+c,eACA4+c,2BACAC,mCACAC,2CAEAz1E,UACA01E,mBACA,oDAEAC,mBACA,0DAEAC,oBACA,qDAEAC,mBACA,qDAEAC,oBACA,MACA,0BACA,yBACA,QAGAC,cAEAC,cACAC,eACAC,eACAt/c,kBACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,cACArhD,gBACA54V,eACA4wd,gBACApxd,WACAywd,cACAr2b,cACAs2b,iBAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA/GuC1md,CAAWymT,EAAQ,OA+G1D;;;;CC7GC,YAA4B;kCAI7B;IAAAzmT,EACA,oEACA,KAEAhH,+DACA+E,GACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,mLAEAhE,qBACAuvK,wGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAOAwnd,cACAN,mBACAO,kBACA,+FACAC,uBACA,0FACAC,cACAC,kBACAC,mBACAhjT,iFACAE,oEACAE,iDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,2BACAC,iCACAC,yCAEAz1E,UACA01E,mBACA,oDAEAC,mBACA,0DAEAC,oBACA,qDAEAC,mBACA,qDAEAC,oBACA,MACA,0BACA,yBACA,QAGAC,cAEAC,cACAC,eACAC,eACAt/c,kBACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,cACArhD,gBACA54V,eACA4wd,gBACApxd,WACAywd,cACAr2b,cACAs2b,iBAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,OAEAl/S,iCAGA,CAhHuCxnK,CAAWymT,EAAQ,OAgH1D;;;;;CC5GC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA8G,uDACAotT,8BACAxtT,mCACAugV,8BACAmF,6CACAsmB,2BACA29B,uCACAz6Y,sCACAywd,wBACAr2b,0CACAs2b,6BAEA,SACA7xd,wBAEAD,kBAGAO,qBACAuvK,6GACA,KAEAE,YACA,2EACAK,SACA,4FACA,KAEAE,yCACAE,uCACAqgT,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,sBACAC,iCACAC,qBACAC,6BACAC,cAEAC,cACAC,sBACAC,iBACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,iBACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA/EuC1md,CAAWymT,EAAQ,OA+E1D;;;;CC7EC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,4GACA,KAEAE,YACA,oEACA,KAEA2iT,oBACAtiT,SACA,4EACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,6BACAC,oCACAC,2CACAhwd,aACAmyd,uBACAC,8BACAC,qCAEA93E,UACA01E,0BACAC,2BACAC,yBACAC,0BACAC,mCACAC,cAEAC,cACAC,kBACAC,gBACAt/c,mBACAotT,gBACAxtT,eACAugV,eACAmF,aACAsmB,aACA29B,aACArhD,aACAp5V,iBACAywd,iBACAr2b,aACAs2b,cAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAnEuC1md,CAAWymT,EAAQ,OAmE1D;;;;CChEC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,uXACA,KAEAE,YACA,gXACA,KAEAK,SACA,uRACA,KAEAE,cACA,uRACA,KAEAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAR,sHACAC,iBACA,oEAEAC,yBACA,YACA,qDAEA,sDAGAn1E,UACA01E,uEACAC,iEACAC,8CACAC,uEACAC,mEACAC,cAEAC,cACAC,yBACAC,6BACAt/c,sDACAotT,uCACAxtT,gDACAugV,uCACAmF,0CACAsmB,iCACA29B,oCACArhD,2BACAp5V,oCACAywd,2BACAr2b,oCACAs2b,4BAEAO,qBACA,SACA5pb,uCACA,cAEAA,wBAEA2pb,uBACA,SACA3pb,0BACA,cAEAA,wBAEAspb,uCACAC,mBACA1yE,MACA2yE,MACAC,SAIA,CAnHuC1md,CAAWymT,EAAQ,OAmH1D;;;;CChHC,YAA4B;kCAI7B;IAAAzmT,EACA,uFACA,KAEAhH,GACA,QACA,QACA,SACA,SACA,YACA,SACA,SACAgH,KACAA,KACAA,MAEA,oBACA,SACA,cACA,IACA,mDACA,KACArK,0BACA,UACA,IACA,mCACA,KACAA,2BACA,UACA,IACA,8BACA,KACAA,sBACA,UACA,IACA,0CACA,KACAA,qCACA,UACA,IACA,oCACA,KACAA,4BACA,UACA,IACA,8BACA,KACAA,sBAGA,qBACA,CAEA,gBACA,YACAlB,EACAuE,KACAgH,KACAxL,EAGAO,qBACAuvK,8HACA,KAEAE,YACA,mFACA,KAEAK,SACA,2EACA,KAEAE,gDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,sBACAC,oCACAC,2CACAhwd,aACAmyd,iBACAC,+BACAC,sCAEA93E,UACA01E,qCACAC,8BACAC,yBACAC,2BACAC,qCACAC,cAEAC,cACAC,4BACAC,iBACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9HuC1md,CAAWymT,EAAQ,OA8H1D;;;;;CC1HC,YAA4B;kCAI7B1xT;EAAAmwd,oBACA5gT,uGACA,KAEAE,yEACAK,wEACA,KAEAE,uDACAE,+CACAqgT,gBACAC,WACAC,eACA3+c,cACA4+c,kBACAC,yBACAC,kCAEAz1E,UACA01E,4BACAC,wBACAC,mCACAC,uBACAC,qCACAC,cAEAC,cACAC,uBACAC,wBACAt/c,kBACAotT,gBACAxtT,iBACAugV,eACAmF,eACAsmB,aACA29B,eACArhD,aACAp5V,gBACAywd,cACAr2b,eACAs2b,cAEAC,iCACAC,oBACA,UAEA1yE,MACA2yE,MACAC,QAIA,CA3DuC1md,CAAWymT,EAAQ,OA2D1D;;;;;CCxDC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,qGACA,KAEAE,yEACAK,SACA,8FACA,KAEAE,mEACAE,uDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,iCAEAz1E,UACA01E,4BACAC,+BACAC,yBACAC,gCACAC,uCACAC,cAEAC,cACAC,eACAC,uBACAt/c,iBACAotT,iBACAxtT,iBACAugV,iBACAmF,gBACAsmB,iBACA29B,cACArhD,cACAp5V,sBACAywd,sBACAr2b,eACAs2b,eAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA1DuC1md,CAAWymT,EAAQ,OA0D1D;;;;CCxDC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,6GACA,KAEAE,YACA,gFACA,KAEA2iT,oBACAtiT,0EACAE,8DACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,qCACAC,2BACAC,0BACAC,yBACAC,kCACAC,cAEAC,cACAC,iBACAC,iBACAt/c,sBACAotT,iBACAxtT,eACAugV,gBACAmF,cACAsmB,eACA29B,YACArhD,cACAp5V,YACAywd,aACAr2b,UACAs2b,aAEAC,uCACAC,sBACA,sBAGA,QACA,QACA,QACA,UACA,IACA,8BAGA,QACA,IACA,6BAKA,CAxEuCxmd,CAAWymT,EAAQ,OAwE1D;;;;CCrEC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,6GACA,KAEAE,YACA,gFACA,KAEA2iT,oBACAtiT,0EACAE,8DACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,qCACAC,2BACAC,0BACAC,yBACAC,kCACAC,cAEAC,cACAC,iBACAC,iBACAt/c,sBACAotT,iBACAxtT,eACAugV,gBACAmF,cACAsmB,eACA29B,YACArhD,cACAp5V,YACAywd,aACAr2b,UACAs2b,aAEAC,uCACAC,sBACA,sBAGA,QACA,QACA,QACA,UACA,IACA,8BAGA,QACA,IACA,4BAGA1yE,MACA2yE,MACAC,QAIA,CA5EuC1md,CAAWymT,EAAQ,OA4E1D;;;;CCzEC,YAA4B;kCAI7B;IAAAzmT,EACA,oGACAhH,EACA,6FACA+E,EACA,2LACAhF,GACA,SACA,YACA,SACA,QACA,QACA,SACA,SACA,YACA,SACA,QACA,QACA,YAGAhE,qBACAuvK,6GACA,KAEAE,YACA,gFACA,KAEAgjT,cACAN,mBACAO,oBACAC,yBACAC,cACAC,kBACAC,mBACAhjT,0EACAE,8DACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,qCACAC,2BACAC,0BACAC,yBACAC,kCACAC,cAEAC,cACAC,iBACAC,iBACAt/c,sBACAotT,iBACAxtT,eACAugV,gBACAmF,cACAsmB,eACA29B,YACArhD,cACA54V,gBACA4wd,iBACApxd,YACAywd,aACAr2b,UACAs2b,aAEAC,sCACAC,sBACA,cAIA,IACA,qCAIA,QACA,QACA,UACA,IACA,8BAGA,QACA,IACA,4BAGA1yE,MACA2yE,MACAC,QAIA,CA9GuC1md,CAAWymT,EAAQ,OA8G1D;;;;CC3GC,YAA4B;kCAI7B;IAAAzmT,EACA,wEACAhH,EACA,6DAEAjE,qBACAuvK,8GACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAOAmnd,oBACAtiT,uEACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,wBACAC,wBACAC,wBACAC,yBACAC,uCACAC,cAEAC,cACAC,gBACAC,cACAt/c,qBACAotT,iBACAxtT,iBACAugV,gBACAmF,aACAsmB,cACA29B,YACArhD,cACAp5V,eACAywd,gBACAr2b,aACAs2b,iBAEAC,yCACAC,oBACA,OACAztd,GACA,iCAGA+6Y,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC1EC,YAA4B;kCAI7B;IAAAzmT,GACA,YACA,UACA,WACA,aACA,YACA,YACA,UACA,YACA,qBACA,sBACA,UACA,WAEAhH,GACA,MACA,QACA,UACA,MACA,OACA,QACA,UACA,SACA,OACA,OACA,OACA,QAEA+E,GACA,kBACA,cACA,iBACA,oBACA,eACA,eACA,kBAEAhF,gEACA2N,+CAEA3R,qBACAuvK,SACAE,cACA2iT,oBACAtiT,WACAE,gBACAE,cACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,6BACAC,wBACAC,0BACAC,oCACAC,cAEAC,cACAC,cACAC,oBACAt/c,qBACAotT,gBACAxtT,kBACAugV,sBACAmF,mBACAsmB,uBACA29B,UACArhD,cACAp5V,UACAywd,kBACAr2b,WACAs2b,gBAEAC,0CACAC,oBAEA,UADA,4BACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAjGuC1md,CAAWymT,EAAQ,OAiG1D;;;;CC9FC,YAA4B;kCAI7B;IAAAzmT,GACA,gBACA,aACA,aACA,aACA,gBACA,kBACA,cACA,iBACA,eACA,gBACA,eACA,mBAEAhH,GACA,OACA,OACA,UACA,OACA,UACA,UACA,OACA,SACA,OACA,UACA,OACA,WAEA+E,GACA,iBACA,UACA,aACA,YACA,YACA,WACA,eAEAhF,8CACA2N,6CAEA3R,qBACAuvK,SACAE,cACA2iT,oBACAtiT,WACAE,gBACAE,cACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,4BACAC,iCACAC,yBACAC,4BACAC,sCACAC,cAEAC,cACAC,mBACAC,qBACAt/c,kBACAotT,eACAxtT,YACAugV,mBACAmF,SACAsmB,gBACA29B,UACArhD,cACAp5V,YACAywd,kBACAr2b,aACAs2b,kBAEAC,0CACAC,oBAEA,UADA,4BACA,EAEA1yE,MACA2yE,MACAC,QAIA,CAjGuC1md,CAAWymT,EAAQ,OAiG1D;;;;CC9FC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,yGACA,KAEAE,YACA,uEACA,KAEA2iT,oBACAtiT,6EACAE,oEACAE,oDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,2BACAC,iCACAC,yCAEAz1E,UACA01E,mBACA,yDAEAC,mBACA,+DAEAC,oBACA,sDAEAC,mBACA,qDAEAC,oBACA,MACA,2DAGAC,cAEAC,cACAC,mBACA,2BACA,MAEA,SAEAC,cACAt/c,iBACAotT,iBACAxtT,cACAugV,gBACAmF,cACAsmB,cACA29B,cACArhD,gBACAp5V,WACAywd,cACAr2b,WACAs2b,cAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC1EC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA8G,sJACAotT,qGACAxtT,4GACAugV,qGACAmF,8EACAsmB,6EACA29B,0FACArhD,6EACAp5V,oIACAywd,iHACAr2b,sGACAs2b,sGAEA,yBAGAvxd,2BACAuvK,QACAwiT,WACA,gdACA,KAEAx1Z,yzBACA,KAEAy1Z,4BAEAviT,YACA,2VACA,KAEA2iT,oBACAtiT,qSACAE,iNACAE,0HACA0hT,sBACArB,gBACAC,mDACAC,uDACA3+c,eACA4+c,iBACAC,gEACAC,0EACAqC,uEAEA93E,UACA01E,kCACAC,0DACAC,uDACAC,kCACAC,uDACAC,cAEAC,cACAC,YACAC,mCACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,qDACAC,sBACA,MAEA,MAFAztd,EAGAgF,uBAQAA,GAGA+1Y,MACA2yE,MACAC,OAEAvB,wJACA8B,2BAIA,OAHA,SACAlpd,KAEA,+BACAA,WACc,2CACdA,EACc,iDACdA,YACc,qCACdA,UADc,CACd,EAGAsnd,yBACA,WACA,2BACctnd,KACd,uCACcA,KACd,6CACcA,KACd,iCAEA,6BAKA,CAhIuCiC,CAAWymT,EAAQ,OAgI1D;;;;CC7HC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA8G,yCACAotT,iCACAxtT,4BACAugV,+BACAmF,yBACAsmB,6BACA29B,yBACArhD,2BACAp5V,+BACAywd,iCACAr2b,4BACAs2b,gCAEA,yBAGAvxd,2BACAuvK,QACAwiT,WACA,kFACA,KAEAx1Z,qJACA,KAEAy1Z,4BAEAviT,YACA,uEACA2iT,oBACAtiT,2EACAE,8DACAE,8CACA0hT,sBACArB,gBACAC,oBACAC,wBACA3+c,eACA4+c,iBACAC,iCACAC,2CACAqC,wCAEA93E,UACA01E,mBACAC,sBACAC,+BACAC,mBACAC,+BACAC,cAEAC,cACAC,YACAC,eACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,qCACAC,sBACA,MAEA,MAFAztd,EAGAgF,OAQAA,GAGA+1Y,MACA2yE,MACAC,OAEAvB,6CACA8B,2BAIA,OAHA,SACAlpd,KAEA,WACAA,WACc,eACdA,EACc,eACdA,YACc,YACdA,UADc,CACd,EAGAsnd,yBACA,WACA,OACctnd,KACd,WACcA,KACd,WACcA,KACd,QAEA,SAKA,CA9HuCiC,CAAWymT,EAAQ,OA8H1D;;;;CC3HC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,6dACA,KAEAE,YACA,yUACA,KAEA2iT,oBACAtiT,kTACA,KAEAE,8LACAE,wGACAqgT,gBACAC,iDACAC,qDACA3+c,eACA4+c,iBACAC,+DACAC,uEAEAz1E,UACA01E,4BACAC,wCACAC,oBACAC,oDACAC,qDACAC,cAEAC,cACAC,yBACAC,yCACAt/c,gDACAotT,uCACAxtT,gDACAugV,uCACAmF,0CACAsmB,iCACA29B,0CACArhD,iCACAp5V,gDACAywd,uCACAr2b,0CACAs2b,kCAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAKAzB,8GACA8B,2BAIA,OAHA,SACAlud,KAEA,yBACAA,WACc,+BACdA,EACc,+BACdA,aACc,+BACdA,UADc,CACd,EAGAssd,yBACA,WACA,qBACctsd,KACd,2BACcA,KACd,2BACcA,KACd,2BAEA,sBAGA+6Y,MACA2yE,MACAC,QAIA,CA5HuC1md,CAAWymT,EAAQ,OA4H1D;;;;;;CCvHC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,mYACA,KAEAE,YACA,6SACAK,iNACAE,sHACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,yBACAC,gCACAC,uCACAhwd,aACAmyd,gBACAC,uBACAC,8BAEA93E,UACA01E,oDACAC,8CACAC,8CACAC,0DACAC,8GACAC,cAEAC,cACAC,qCACAC,mCACAt/c,4DACAotT,uCACAxtT,uBACAugV,iCACAmF,uBACAsmB,eACA,aACA,uCAEA15W,+BAEAq3Y,uBACArhD,eACA,aACA,uCAEAh2V,+BAEApD,6BACAywd,eACA,aACA,6CAEArtd,2CAEAg3B,uBACAs2b,eACA,aACA,uCACkBttd,gBAClBA,wBAEAA,gCAGAmsd,cACA,qTACAC,iBACA,4IAEAC,yBACA,WACA,0DACcrsd,KACd,iCACcA,KACdD,0GACcC,KACdD,oGAEA,6BAKA,CA9FuCiH,CAAWymT,EAAQ,OA8F1D;;;;CC7FC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEA+E,GACA,iBACA,oCACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,gDACA,mCACA,oCACA,iDAEAhF,GACA,iBACA,uBACA,mCACA,mCACA,iBACA,uBACA,uBACA,iBACA,uBACA,mCACA,iBACA,wBAGAhE,qBACAuvK,QACAhzG,2ZACA,KAEAw1Z,WACA,4XACA,MAGAtiT,YACA,sQACAK,iTACAE,wLACAE,wGACAqgT,gBACAC,+BACAC,mCACA3+c,eACA4+c,iBACAC,6CACAC,qDAGAgC,cACAC,kBACAC,mBAEAL,YACA,yuBAEAN,iBACA,yuBAEAO,kBACA,6lBAEAC,uBACA,oRAEAx3E,UACA01E,4BACAC,4BACAC,oBACAC,4BACAC,qDACAC,cAEAC,cACAC,+BACAC,mCACAt/c,6DACAotT,uCACAxtT,0CACAugV,iCACAmF,0CACAsmB,iCACA29B,oCACArhD,2BACAp5V,gDACAywd,uCACAr2b,0CACAs2b,kCAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAKAzB,8GACA8B,2BAIA,OAHA,SACAzyd,KAEA,yBACAA,WACc,+BACdA,EACc,qCACdA,aACc,yBACdA,UADc,CACd,EAGA6wd,yBACA,WACA,qBACc7wd,KACd,2BACcA,KACd,iCACcA,KACd,qBAEA,sBAGAs/Y,MACA2yE,MACAC,QAIA,CA1KuC1md,CAAWymT,EAAQ,OA0K1D;;;;CCvKC,YAA4B;kCAI7B;SAAAzmT,SACA,YACA,cACA,KACA,OACAxL,GADA,MACA,UACkB,oBAClB,UAEA,UAEA,IACA,IACA,2CACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,SAEA,SAEA,IACA,IACA,uCACA,KACA,OACAA,GADA,MACA,MACkB,oBAClB,OAEA,OAEA,IACA,KACA,OACAA,GADA,MACA,MAEA,OAEA,IACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,UAEA,UAEA,IACA,KACA,OACAA,GADA,MACA,SACkB,oBAClB,SAEA,SAEA,CAIAO,qBACAuvK,QACAhzG,gIACA,KAEAw1Z,WACA,qHACA,MAGAtiT,YACA,0EACA,KAEA2iT,oBACAtiT,gFACA,KAEAE,mEACAE,mDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,gCAEAz1E,UACA01E,uBACAC,uBACAC,oBACA,wBACA,EACA,mCACA,EACA,kCACA,EACA,iCACA,OACA,OACA,OACA,EACA,0BAGAC,4BACAC,oBACA,wBACA,EACA,6CACA,EACA,4CACA,EACA,2CACA,OACA,OACA,OACA,EACA,oCAGAC,cAEAC,cACAC,eACAC,gBACAt/c,gBACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,QACArhD,KACAp5V,WACAywd,KACAr2b,WACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9JuC1md,CAAWymT,EAAQ,OA8J1D;;;;;CC1JC,YAA4B;kCAI7B;IAAAzmT,EACA,wGACA,oBACA,QACA,cACA,IACA,YACA,4BACA,iCACA,KACA,gBACA,gBACA,qBACA,IACA,wCACA,KACA,qCACA,IACA,gDACA,KACA,6CACA,IACA,uCACA,KACA,oCACA,IACA,iDACA,KACA,8CACA,IACA,0CACA,KACA,mCAEA,SAEA,cACA,OACA0G,mBACA,IACA1G,cACA,aAIAjL,qBACAuvK,yIACA,KAEAE,YACA,sFACA,KAEA2iT,oBACAtiT,iGACAE,kEACAE,4CACAqgT,gBACAC,UACAC,cACA3+c,gBACA4+c,mBACAC,yBACAC,iCAEAR,uBACAC,iBACA,uCAEAC,yBACA,aACA,iBAEA,iBAGAn1E,UACA01E,wBACAC,4BACAC,oBACA,wBAEAC,4BACAC,oBACA,wBAEAC,cAEAC,cACAC,qBACAC,UACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAvHuC1md,CAAWymT,EAAQ,OAuH1D;;;;CCrHC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,QACAhzG,+kBACA,KAEAw1Z,WACA,ggBACA,MAGAtiT,6PACAK,SACA,yVACA,KAEAE,sKACAE,oKACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,yBACAC,iCACAC,yCAEAz1E,UACA01E,8CACAC,wCACAE,wCACAD,oBACA,+DAEAE,oBACA,gGAEAC,cAEAC,cACAC,qCACAC,mCACAt/c,2FACAotT,yDACAxtT,6BACAugV,iCACAmF,uBACAsmB,2BACA29B,iBACArhD,qBACAp5V,6BACAywd,iCACAr2b,6BACAs2b,kCAEAnB,wMACAC,iBACA,iHAEAC,qBACA,WACA,6CACcrsd,KACd,mDACcA,KACd,6CAEA,oDAGAutd,qEACAC,sBACA,cACA,UACA,QACA,QACA,OACA,aACAxtd,kBAEAA,0BAEA,WAGA86Y,MACA2yE,MACAC,QAIA,CAhGuC1md,CAAWymT,EAAQ,OAgG1D;;;;;CC5FC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,sGACA,KAEAE,yEACAK,iEACAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,gCACAC,wCAEAR,sCACA8B,2BAIA,OAHA,SACAjud,KAEA,WACAA,EACc,YACdA,aACc,wBACdA,UADc,CACd,EAGAqsd,yBACA,YACA,OACcrsd,KACd,QACcA,KACd,OAEA,SAGAk3Y,UACA01E,8BACAC,2BACAC,2BACAC,6BACAC,gCACAC,cAEAC,cACAC,kBACAC,oBACAt/c,mBACAotT,cACAxtT,YACAugV,cACAmF,UACAsmB,YACA29B,WACArhD,aACAp5V,YACAywd,cACAr2b,YACAs2b,eAEAxyE,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC3EC,YAA4B;kCAI7B;SAAAzmT,KACA,kBAEUjH,QAKV,oBACA,YACA,cACA,IACA,YACA,sBACA,0BACA,KACA,YAEAnE,GACA8R,kCAGA9R,mBACA,IACA,2CACA,KACA,YAEAA,yCAEkB8R,EAClB9R,iBAEAA,qBACA,KACA,YAEAA,GACA8R,KACA,gBACA,iBAGA9R,oBACA,IACA,SACA,QAEAH,mBACA,KACA,YACAiS,EACA9R,UAEAA,wBACkB8R,EAClB9R,UAEAA,uBACA,IACA,SACA,gBAEAH,mCACA,KACA,YACAiS,EACA9R,kBAEAA,qCACkB8R,EAClB9R,kBAEAA,uCACA,IACA,iCACA,KACA,YACAA,2BAEAA,2BAIAG,qBACAuvK,qIACA,KAEAE,2FACAK,SACA,wGACA,KAEAE,mEACAE,uDACAqgT,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,8BACAC,sCAEAz1E,UACA01E,4BACAC,+BACAC,yBACAC,+BACAC,yCACAC,cAEAC,cACAC,kBACAC,4BACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,gBACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9IuC1md,CAAWymT,EAAQ,OA8I1D;;;;CC3IC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,6GACA,KAEAE,yEACAK,yFACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,yBACAC,2BACAC,0BACAC,yBACAC,oBACA,OACA,IADAtxd,WAEA,6BAEA,8BAGAuxd,cAEAC,cACAC,mBACA,8CAEAC,aACAt/c,mBACAotT,gBACAxtT,cACAugV,eACAmF,WACAsmB,YACA29B,cACArhD,eACAp5V,YACAywd,aACAr2b,YACAs2b,cAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CAlEuC1md,CAAWymT,EAAQ,OAkE1D;;;;;;CC7DC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,6GACA,KAEAE,yEACAK,yFACA,KAEAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,mBACA,MACA,WACAlxd,kDACA,OAGAmxd,mBACA,MACA,aACAnxd,kDACA,OAGAoxd,oBACA,MACA,WACApxd,kDACA,OAGAqxd,mBACA,MACA,WACArxd,kDACA,OAGAsxd,oBACA,OACA,IADAtxd,WAGA,uBACAA,eACA,OACA,iBACA,IACA,OACA,MAIA,uBACAA,eACA,OACA,iBACA,IACA,OACA,OAIAuxd,cAEAC,cACAC,gBACAC,aACAt/c,mBACAotT,gBACAxtT,cACAugV,eACAmF,WACAsmB,YACA29B,cACArhD,eACA54V,kBACA4wd,kBACApxd,YACAywd,aACAr2b,YACAs2b,cAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA1GuC1md,CAAWymT,EAAQ,OA0G1D;;;;CCzGC,YAA4B;kCAI7B1xT;EAAAmwd,mBACAxxE,MACA,CACA00E,mBACArmJ,SACA3/T,oBACA2wY,gBACAs1E,UAEA,CACAD,mBACAE,mBACAvmJ,SACA3/T,oBACA2wY,gBACAs1E,UAEA,CACAD,mBACAE,mBACAvmJ,SACA3/T,oBACA2wY,gBACAs1E,UAEA,CACAD,mBACAE,mBACAvmJ,SACA3/T,oBACA2wY,gBACAs1E,UAEA,CACAD,mBACAE,mBACAvmJ,SACA3/T,oBACA2wY,gBACAs1E,UAEA,CACAD,mBACAE,mBACAvmJ,SACA3/T,oBACA2wY,YACAs1E,WAEA,CACAD,mBACAE,WACAvmJ,SACA3/T,0BACA2wY,YACAs1E,YAGAE,yCACAC,kCACA,8CAEAlkT,uHACAE,uHACA,KAEAK,2JACAE,4EACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,qCACAC,2CACAhwd,eACAmyd,8BACAC,qCACAC,4CAEA7C,2CACAC,iBACA,0BAEAC,yBACA,YACA,eAEA,gBAGAn1E,UACA01E,4BACAC,4BACAC,qBACA,8BACA,wBAEA,WAGAC,4BACAC,qBACA,8BACA,wBAEA,WAGAC,cAEAM,uCACAC,sBACA,cACA,IACA,2CACA,QACA,QACA,MACA,0BAEA,WAGAN,cACAC,kBACAC,gBACAt/c,iBACAotT,cACAxtT,YACAugV,cACAmF,kBACAsmB,oBACA29B,YACArhD,cACAp5V,kBACAywd,oBACAr2b,YACAs2b,gBAIA,CAtJuCtmd,CAAWymT,EAAQ,OAsJ1D;;;;;CClJC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,sGACA,KAEAE,yEACAK,mEACAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,gCACAC,wCAEAR,2CACA8B,2BAIA,OAHA,SACAjud,KAEA,aACAA,EACc,aACdA,aACc,0BACdA,UADc,CACd,EAGAqsd,yBACA,YACA,SACcrsd,KACd,SACcA,KACd,SAEA,SAGAk3Y,UACA01E,mCACAC,8BACAC,2BACAC,gCACAC,qCACAC,cAEAC,cACAC,uBACAC,4BACAt/c,oBACAotT,cACAxtT,oBACAugV,cACAmF,kBACAsmB,YACA29B,aACArhD,eACAp5V,YACAywd,cACAr2b,WACAs2b,cAEAxyE,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC3EC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,qiBACA,KAEAE,6PACAK,UACAiiT,WACA,yVACA,KAEAx1Z,sWACA,KAEAy1Z,4EAEAhiT,gKACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,uDACAC,uDACAE,6DACAD,yEACAE,2DACAC,cAEAC,cACAC,mBACA,iBACA,+HACA,gBACA,0DAIAC,iBACA,yIACAptd,gEAEA,mCACAA,qFAEAA,GAEA8N,oFACAotT,iCACAxtT,6BACAugV,iCACAmF,mCACAsmB,uCACA29B,uBACArhD,2BACAp5V,uBACAywd,2BACAr2b,6BACAs2b,kCAEAC,8EACAC,oBACA,aACAxtd,EAEA,MACAA,kBAGAA,MACAA,iBACAA,SAEA,kBAEAA,aAEA86Y,MACA2yE,MACAC,QAIA,CA9FuC1md,CAAWymT,EAAQ,OA8F1D;;;;CC3FC,YAA4B;kCAI7B;IAAAzmT,GACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,qBAGAjL,qBACAuvK,qcACA,KAEAE,6PACAK,8TACA,KAEAE,gKACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,6EACAC,6EACAC,oDACAC,uEACAC,gIACAC,cAEAC,cACAC,iDACAC,yCACAt/c,oFACAotT,6CACAxtT,sDACAugV,uCACAmF,sDACAsmB,uCACA29B,0CACArhD,2BACAp5V,oCACAywd,qBACAr2b,0CACAs2b,4BAEAC,6DACAC,oBACA,WACA9/c,kBACA,6BAEAotY,MACA2yE,MACAC,QAIA,CApFuC1md,CAAWymT,EAAQ,OAoF1D;;;;CCjFC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,6XACA,KAEAE,YACA,sXACA,KAEAK,6QACAE,oGACAE,kGACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAR,8EACAC,iBACA,4CAEAC,yBACA,YACA,iCAEA,kCAGAn1E,UACA01E,mFACAC,uEACAC,8CACAC,yFACAC,6GACAC,cAEAC,cACAC,8BACAC,4BACAt/c,yFACAotT,6CACAxtT,+CACAugV,iCACAmF,+CACAsmB,iCACA29B,+CACArhD,iCACAp5V,mCACAywd,qBACAr2b,qDACAs2b,wCAEAC,6CACAC,yBACAK,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGA9yE,MACA2yE,MACAC,QAIA,CAzGuC1md,CAAWymT,EAAQ,OAyG1D;;;;CCtGC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,qfACA,KAEAE,YACA,kYACA,KAEA2iT,oBACAtiT,8TACA,KAEAE,0MACAE,0HACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,0BACAC,kCAEAz1E,UACA01E,wCACAC,wCACAC,oBACAC,oDACAC,2DACAC,cAEAC,cACAC,qCACAC,yCACAt/c,8EACAotT,qEACAxtT,4DACAugV,uCACAmF,sDACAsmB,iCACA29B,gDACArhD,2BACAp5V,kEACAywd,6CACAr2b,sDACAs2b,kCAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGAzB,gLACA8B,2BAIA,OAHA,SACAlud,KAEA,2CACAA,WACc,uDACdA,EACc,uDACdA,aACc,+BACdA,UADc,CACd,EAGAssd,yBACA,WACA,uCACctsd,KACd,mDACcA,KACd,mDACcA,KACd,2BAEA,wCAGAwtd,qDACAC,oBACA,+BAEA1yE,MACA2yE,MACAC,QAIA,CA9HuC1md,CAAWymT,EAAQ,OA8H1D;;;;;CC1HC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,uHACAE,uHACA,KAEAK,2JACAE,4EACAE,0EACAqgT,gBACAC,YACAC,gBACA3+c,gBACA4+c,6BACAC,qCACAC,2CACAhwd,gBACAmyd,6BACAC,qCACAC,4CAEA93E,UACA01E,0BACAC,0BACAC,mBACAC,0BACAC,sCACAC,cAEAC,cACAC,mBACAC,iBACAt/c,kBACAotT,cACAxtT,YACAugV,cACAmF,wBACAsmB,oBACA29B,iBACArhD,cACAp5V,kBACAywd,cACAr2b,kBACAs2b,eAEAC,uDACAC,sBACA,cACA,QACA,QACA,MACA,sBACA,IACA,sBACA,QACA,IACA,0BAEA,WAGArB,0CACAC,iBACA,0BAEAC,yBACA,4CAIA,CA5EuCrld,CAAWymT,EAAQ,OA4E1D;;;;CC1EC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEA+E,GACA,sEACA,iCACA,iCACA,iCACA,iCACA,mDACA,uCACA,qBACA,6CACA,sEACA,sEACA,uEAGAhJ,qBACAuvK,SACAE,cACAK,SACA,qZACA,KAEAE,cACA,gUACAE,0EACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAR,sGACAC,iBACA,4DAEAC,yBACA,YACA,6CAEA,8CAGAn1E,UACA01E,+FACAC,qGACAC,gEACAC,yFACAC,gEACAC,cAEAC,cACAC,+BACAC,UACAt/c,0FACAotT,uCACAxtT,kEACAugV,6CACAmF,wEACAsmB,mDACA29B,gDACArhD,2BACAp5V,sDACAywd,iCACAr2b,gDACAs2b,4BAEAO,qBACA,SACA5pb,sFACA,cAEAA,wBAEA2pb,uBACA,SACA3pb,0BACA,cAEAA,wBAEA62W,MACA2yE,MACAC,SAIA,CAxHuC1md,CAAWymT,EAAQ,OAwH1D;;;;CCrHC,YAA4B;kCAI7B;IAAAzmT,GACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,qBAGAjL,qBACAuvK,mbACA,KAEAE,0QACA,KAEAK,oUACA,KAEAE,gKACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,uEACAC,uEACAC,8CACAC,uEACAC,qJACAC,cAEAC,cACAC,iDACAC,yCACAt/c,oFACAotT,6CACAxtT,sDACAugV,uCACAmF,gDACAsmB,iCACA29B,0CACArhD,2BACAp5V,oCACAywd,qBACAr2b,0CACAs2b,4BAEAC,uFACAC,oBACA,WACA9/c,kBACA,6BAEAotY,MACA2yE,MACAC,QAIA,CAtFuC1md,CAAWymT,EAAQ,OAsF1D;;;;;CClFC,YAA4B;kCAI7B;SAAAzmT,WACA,OACA0G,gCACA0lV,8BACAikD,0BACAz6Y,6BACAo6B,4BAEA,yBAEA,cAEA,SADAx7B,4BAEA,OAEA,QAEA,cAEA,SADAA,4BAEA,UAEA,WASA,cAEA,GADAA,iBACAsnC,SACA,SAEA,OAEA,SACU,QAEV,kBAIU,UAEV,WAEA,eADAtnC,KAIAC,MACUD,OAEV,YACAA,MAEA,YAGA,OACAuE,EADAvE,OACA,CAIAO,qBACAuvK,0GACA,KAEAE,YACA,qEACA,KAEA2iT,oBACAtiT,SACA,kFACA,KAEAE,gEACAE,uDACA0hT,sBACArB,gBACAC,iBACAC,qBACA3+c,eACA4+c,kBACAC,+BACAC,uCAEAz1E,UACA01E,uBACAK,aACAJ,uBACAC,wBACAC,8BACAC,oBAEA,wBACA,OACA,EACA,wCAEA,kCAIAE,cACAC,SACAC,OACAt/c,oBACAotT,iBACAxtT,IACAugV,iBACAmF,IACAsmB,gBACA29B,IACArhD,aACAp5V,IACAywd,iBACAr2b,IACAs2b,cAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA1IuC1md,CAAWymT,EAAQ,OA0I1D;;;;CCxIC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,qZACA,KAEAE,YACA,8YACA,KAEAK,2MACAE,oMACAE,4FACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,iDAEAR,sGACAC,iBACA,kDAEAC,yBACA,YACA,mDAEA,wCAGAn1E,UACA01E,4EACAC,kFACAC,mFACAC,8FACAC,2GACAC,cAEAC,cACAC,+BACAC,8CACAt/c,qGACAotT,6CACAxtT,+BACAugV,iCACAmF,iDACAsmB,mDACA29B,yBACArhD,2BACAp5V,qCACAywd,uCACAr2b,mBACAs2b,sBAEAC,qDACAC,oBACA,+BAIA,CApEuCxmd,CAAWymT,EAAQ,OAoE1D;;;;CCjEC,YAA4B;kCAI7B;IAAAzmT,GACAk0T,+CACAxtT,yCACAugV,4CACAmF,kCACAsmB,oCACA29B,4BACArhD,8BACAp5V,6CACAywd,mDACAr2b,0BACAs2b,4BAEA,oBACA,SACA,uBAEA1wd,qDAGA,oBACA,SACA8Q,QACA9Q,EACA8Q,QACAA,QAEA,cACA,2BAEA,cACA,uBAEA,oBACA,YACA,aAEA3Q,gBAEUL,EACVK,yBAEAH,EACAG,UAEAA,yBAIAhB,qBACAuvK,QACAhzG,8JACA,KAEAw1Z,WACA,iIACA,KAEAC,wEAEAviT,yEACAK,UACAvzG,mJACA,KAEAw1Z,WACA,gHACA,KAEAC,uBAEAhiT,iEACAE,6CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,2BACAC,0CACAC,iDACAhwd,eACAmyd,2BACAC,0CACAC,iDAEA93E,UACA01E,6BACAC,qBACAC,mBACAC,qBACAC,wCACAC,cAEAC,cACAC,eACAC,qBACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,qCACAC,oBACA,iBAEA1yE,MACA2yE,MACAC,QAIA,CA/HuC1md,CAAWymT,EAAQ,OA+H1D;;;;;CC3HC,YAA4B;kCAI7B;IAAAzmT,GACAk0T,wDACAxtT,uEACAugV,wEACAmF,mDACAsmB,oDACA29B,+CACArhD,gDACAp5V,iFACAywd,kFACAr2b,qCACAs2b,uCAKA,kBACA,SAEA1xd,6BAIAA,6BAGA,kBACA,yBAEA,kBACA,mBAEA,gBACA,+DAGAG,qBACAuvK,6IACA,KAEAE,mFACAK,SACA,0FACA,KAEAE,2CACAE,yCACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,gBACA4+c,0BACAC,kCACAC,0CAEAz1E,UACA01E,oCACAC,iCACAC,8BACAC,8BACAC,wDACAC,cAEAC,cACAC,qBACAC,gBACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA/FuC1md,CAAWymT,EAAQ,OA+F1D;;;;CC7FC,YAA4B;kCAI7B;IAAAzmT,GACAiqc,OAEA/1I,kCACAxtT,kCACAugV,+BACAmF,8BACAsmB,yBACA1jB,yBACAq3H,kCACAC,iCAEAmC,qCACA,aACA1vd,KACAgF,WACAhF,KACAA,MAEA+9T,0BACA,iBACA,oBACA/9T,YAGAgF,EACA,IACAiC,gCAMAjL,qBACAuvK,gGACA,KAEAE,YACA,sEACA2iT,oBACAtiT,gFACA,KAEAE,mEACAE,mDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,gCAEAz1E,UACA01E,uBACAC,wBAEAC,oBACA,wBACA,EACA,mCACA,EACA,kCACA,EACA,iCACA,OACA,OACA,OACA,EACA,0BAGAC,2BACAC,oBAUA,MATA,CACA,kCACA,sCACA,iCACA,iCACA,wCACA,gCACA,iCAEAtxd,aAEAuxd,cAEAC,cACAC,eACAC,gBACAt/c,qBACAotT,eACAxtT,cACAugV,eACAmF,cACAsmB,eACA29B,QACArhD,eACAp5V,WACAywd,eACAr2b,WACAs2b,gBAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAvHuC1md,CAAWymT,EAAQ,OAuH1D;;;;CCpHC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,wMACA,KAEAE,YACA,4EACA,KAEAgjT,qDACAC,2DACAP,0DACAQ,gEACA7iT,0FACAE,gEACAE,8DACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,4BACAC,oCAEAz1E,UACA01E,gCACAC,uBACAC,uBACAC,yBACAC,oCACAC,cAEAC,cACAC,qBACAC,gBACAt/c,0BACAotT,oBACAxtT,cACAugV,eACAmF,aACAsmB,cACA29B,UACArhD,WACAp5V,cACAywd,eACAr2b,WACAs2b,aAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA9DuC1md,CAAWymT,EAAQ,OA8D1D;;;;;CC1DC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,idACA,KAEAE,6PACAK,kTACA,KAEAE,gKACAE,qGACAqgT,gBACAC,UACAC,cACA3+c,cACA4+c,iBACAC,uBACAC,+BAEAz1E,UACA01E,2DACAC,qDACAC,iDACAC,2DACAC,oBACA,wBACA,OACA,OACA,EACA,mGACA,OACA,OACA,OACA,EACA,gGAGAC,cAEAC,cACAC,yBACAC,mCACAt/c,0FACAotT,mDACAxtT,kEACAugV,6CACAmF,gDACAsmB,iCACA29B,gDACArhD,iCACAp5V,4DACAywd,6CACAr2b,kEACAs2b,8CAEAC,iHACAC,oBACA,WACAztd,QACA,aACAC,kBACc,MACdA,kBACcD,WACdC,kBACc,MACdA,kBACc,MACdA,kBACc,aACdA,kBAEAA,mBAGA86Y,MACA2yE,MACAC,QAIA,CAvFuC1md,CAAWymT,EAAQ,OAuF1D;;;;CCrFC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,6dACA,KAEAE,YACA,oUACA,KAEA2iT,oBACAtiT,SACA,yYACA,KAEAE,8OACAE,0HACAqgT,gBACAC,0BACAC,8BACA3+c,eACA4+c,iBACAC,wCACAC,gDAEAz1E,UACA01E,8CACAC,wCACAC,oBACAC,oDACAC,2DACAC,cAEAC,cACAC,uDACAC,yCACAt/c,8EACAotT,yDACAxtT,wEACAugV,yDACAmF,wEACAsmB,yDACA29B,sDACArhD,uCACAp5V,gDACAywd,iCACAr2b,gDACAs2b,kCAEAnB,iQACA8B,2BAIA,OAHA,SACAjud,KAGA,kDACA,2EACA,mEAEAA,KAEAA,GAGAqsd,yBACA,WACA,uCACcrsd,KACd,uCACcA,KACd,sEACcA,KACd,+DAEA,yCAKA,CApFuCgH,CAAWymT,EAAQ,OAoF1D;;;;CCjFC,YAA4B;kCAI7B;SAAAzmT,WACA,cACA,IACA,iLACA,KACA,6GACA,QACA,KACA,iGACA,QACA,KACA,+EACA,QACA,KACA,qFACA,QACA,KACA,yEACA,QACA,KACA,mFAEA,UAIAjL,qBACAuvK,2/BACA,KAEAE,YACA,uQACA,KAEA2iT,oBACAtiT,qPACAE,gKACAE,oHACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,gDACAC,uDACAC,+DAEAR,2CACAC,iBACA,0BAEAC,yBACA,YACA,eAEA,gBAGAn1E,UACA01E,0DACAC,0DACAC,8CACAC,0DACAC,sEACAC,cAEAC,cACAC,2CACAC,mCACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,0DACAC,sBACA,cACA,QACA,QACA,MACA,6CAEA,YAKA,CAtGuCxmd,CAAWymT,EAAQ,OAsG1D;;;;;CClGC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGA,oBACA,SACA,KACA,cACA,IACAtD,4DACA,UACA,KACAA,sCACA,UACA,IACAA,gDACA,UACA,KACAA,4CACA,UACA,IACAA,oCACA,UACA,KACAA,0BACA,UACA,IACAA,0CACA,UACA,KACAA,gCACA,UACA,IACAA,gDACA,UACA,KACAA,sCACA,UACA,IACAA,0CACA,UACA,KACAA,2CAIA,cACA,IACAA,wEACA,UACA,KACAA,kDACA,UACA,IACAA,4DACA,UACA,KACAA,kDACA,UACA,IACAA,gDACA,UACA,KACAA,sCACA,UACA,IACAA,sDACA,UACA,KACAA,4CACA,UACA,IACAA,kEACA,UACA,KACAA,wDACA,UACA,IACAA,sDACA,UACA,KACAA,4CAIA,0BAGAX,qBACAuvK,udACA,KAEAE,YACA,oWACA,KAEA2iT,oBACAtiT,iTACAE,wLACAE,wGACAqgT,gBACAC,2CACAC,+CACA3+c,eACA4+c,iBACAC,yDACAC,iEAEAz1E,UACA01E,4BACAC,8CACAC,oBACAC,kCACAC,qDACAC,cAEAC,cACAC,0CACAC,8CACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGAzB,yMACA8B,2BAIA,OAHA,SACAvgd,KAEA,2EACAA,EAEA,4CACA,wDACA,2CAEAA,kBALc,CAKd,EAGA2+c,yBACA,iBACA,iCACc3+c,KACd,iCACcA,KACd,uCACcA,KACd,mDAEA,wCAGAotY,MACA2yE,MACAC,QAIA,CA5MuC1md,CAAWymT,EAAQ,OA4M1D;;;;;CCzMC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,iGACA,KAEAE,yEACAK,iEACAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,gCACAC,wCAEAR,4CACA8B,2BAIA,OAHA,SACAjud,KAEA,WACAA,EACc,gBACdA,aACc,0BACdA,UADc,CACd,EAGAqsd,yBACA,YACA,OACcrsd,KACd,YACcA,KACd,SAEA,SAGAk3Y,UACA01E,8BACAC,0BACAC,2BACAC,8BACAC,iCACAC,cAEAC,cACAC,kBACAC,qBACAt/c,kBACAotT,aACAxtT,YACAugV,cACAmF,UACAsmB,YACA29B,WACArhD,aACAp5V,YACAywd,cACAr2b,YACAs2b,eAEAxyE,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC3EC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,iGACA,KAEAE,yEACAK,iEACAE,uDACAE,8CACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,gCACAC,wCAEAR,4CACA8B,2BAIA,OAHA,SACAjud,KAEA,WACAA,EACc,gBACdA,aACc,0BACdA,UADc,CACd,EAGAqsd,yBACA,YACA,OACcrsd,KACd,YACcA,KACd,SAEA,SAGAk3Y,UACA01E,8BACAC,0BACAC,2BACAC,8BACAC,iCACAC,cAEAC,cACAC,kBACAC,qBACAt/c,kBACAotT,aACAxtT,YACAugV,cACAmF,UACAsmB,YACA29B,WACArhD,aACAp5V,YACAywd,cACAr2b,YACAs2b,eAEAxyE,MACA2yE,MACAC,QAIA,CA7EuC1md,CAAWymT,EAAQ,OA6E1D;;;;CC1EC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,+GACA,KAEAE,mFACAK,SACA,gGACA,KAEAE,sEACAE,6DACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,yBACAC,8BACAC,yBACAC,kCACAC,0CACAC,cAEAC,cACAC,oBACAC,cACAt/c,iBACAotT,gBACAxtT,WACAugV,eACAmF,gBACAsmB,qBACA29B,iBACArhD,oBACAp5V,UACAywd,aACAr2b,SACAs2b,aAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CA1DuC1md,CAAWymT,EAAQ,OA0D1D;;;;;;CCrDC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,yeACA,KAEAE,mQACAK,kTACA,KAEAE,8IACAE,4IAEAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,wDACAC,qFACAC,wCACAC,8DACAC,uGACAC,cAEAC,cACAC,oEACAC,8EACAt/c,0FACAotT,mDACAxtT,qDACAugV,uCACAmF,+CACAsmB,iCACA29B,yCACArhD,2BACAp5V,6BACAywd,eACAr2b,+CACAs2b,kCAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGA9yE,MACA2yE,MACAC,QAIA,CA3FuC1md,CAAWymT,EAAQ,OA2F1D;;;;;;CCxFC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,kGACA,KAEAE,YACA,wEACA2iT,oBACAtiT,+EACAE,6DACAE,oDACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,+BACAC,sCAEAz1E,UACA01E,yBACAC,4BACAC,yBACAC,4BACAC,mCACAC,cAEAC,cACAC,eACAC,gBACAt/c,kBACAotT,iBACAxtT,eACAugV,iBACAmF,YACAsmB,cACA29B,WACArhD,cACA54V,WACA4wd,aACApxd,gBACAywd,mBACAr2b,cACAs2b,eAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA5DuC1md,CAAWymT,EAAQ,OA4D1D;;;;CC3DC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,idACA,KAEAE,YACA,6TACA,KAEA2iT,oBACAtiT,kTACA,KAEAE,qMACAE,+GACA0hT,sBACArB,gBACAC,2CACAC,+CACA3+c,eACA4+c,iBACAC,yDACAC,iEAEAkB,qBACA,+FACA,eAGAD,uBACA,mCACA,eAGAzB,sIACA8B,2BAIA,OAHA,SACAlud,KAEA,+BACAA,WACc,qCACdA,EACc,2CACdA,aACc,+BACdA,UADc,CACd,EAGAssd,yBACA,WACA,2BACctsd,KACd,iCACcA,KACd,uCACcA,KACd,2BAEA,4BAGAm3Y,UACA01E,4BACAC,wCACAC,uDACAC,wCACAC,iDACAC,cAEAC,cACAC,wBACAC,yCACAt/c,sDACAotT,mDACAxtT,gDACAugV,uCACAmF,gDACAsmB,uCACA29B,oCACArhD,2BACAp5V,gDACAywd,uCACAr2b,0CACAs2b,kCAEAxyE,MACA2yE,MACAC,QAIA,CA3HuC1md,CAAWymT,EAAQ,OA2H1D;;;;;CCvHC,YAA4B;kCAI7B;IAAAzmT,EACA,wEACAhH,EACA,6DACA+E,GACA,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,qKAEAhE,wBACAuvK,uGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAQAwnd,cACAN,mBACAO,kBACA,4FACAC,uBACA,mFAEAC,cACAC,kBACAC,mBAEAhjT,SACA,wEACAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,0BACAC,yBACAC,wBACAC,2BACAC,oCACAC,cAEAC,cACAC,iBACAC,kBACAt/c,sBACAotT,iBACAxtT,qBACAugV,gBACAmF,kBACAsmB,YACA29B,kBACArhD,cACAp5V,oBACAywd,gBACAr2b,mBACAs2b,cAEAC,yCACAC,oBACA,OACAhyd,GACA,iCAGAs/Y,MACA2yE,MACAC,QAIA,CAvGuC1md,CAAWymT,EAAQ,OAuG1D;;;;;CCpGC,YAA4B;kCAI7B;IAAAzmT,EACA,wEACAhH,EACA,6DACA+E,GACA,QACA,QACA,iBACA,QACA,SACA,cACA,cACA,QACA,QACA,QACA,QACA,SAEAhF,EACA,qKAEAhE,qBACAuvK,uGACA,KAEAE,0BACA,SAEc,gBACdxrK,aAEAgH,aAJAA,GAQAwnd,cACAN,mBACAO,kBACA,4FACAC,uBACA,mFAEAC,cACAC,kBACAC,mBAEAhjT,SACA,wEACAE,uDACAE,8CACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,0BACAC,yBACAC,wBACAC,2BACAC,oCACAC,cAEAC,cACAC,iBACAC,kBACAt/c,sBACAotT,iBACAxtT,qBACAugV,gBACAmF,kBACAsmB,YACA29B,kBACArhD,cACA54V,mBACA4wd,cACApxd,oBACAywd,gBACAr2b,mBACAs2b,cAEAC,yCACAC,oBACA,OACAhyd,GACA,iCAGAs/Y,MACA2yE,MACAC,QAIA,CAzGuC1md,CAAWymT,EAAQ,OAyG1D;;;;;CCtGC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,kGACA,KAEAE,YACA,wEACA2iT,oBACAtiT,4EACAE,2DACAE,iDACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,kBACAC,8BACAC,sCAEAz1E,UACA01E,4BACAC,+BACAC,4BACAC,+BACAC,+CACAC,cAEAC,cACAC,eACAC,gBACAt/c,iBACAotT,eACAxtT,eACAugV,eACAmF,aACAsmB,cACA29B,YACArhD,cACA54V,YACA4wd,cACApxd,iBACAywd,mBACAr2b,cACAs2b,eAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA5DuC1md,CAAWymT,EAAQ,OA4D1D;;;;CC1DC,YAA4B;kCAI7B1xT;EAAAmwd,uBACA5gT,QACAwiT,WACA,uGACA,KAEAx1Z,+IACA,KAEAy1Z,4BAEAviT,YACA,wEACA,KAEA2iT,oBACAtiT,gFACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,sBACAqC,gBACApC,gCACAqC,uBACApC,sCACAqC,6BAEA93E,UACA01E,wBACAC,uBACAC,uBACAC,wBACAC,8BACAC,cAEAC,cACAC,sBACAC,aACAt/c,kBACAotT,iBACAxtT,eACAugV,gBACAmF,YACAsmB,aACA29B,YACArhD,cACAp5V,WACAywd,cACAr2b,UACAs2b,aAEAC,+CACAC,sBACA,MACA,MACA,IACA,MACA,IACA,MACA,IACA,MACA,IACA,OACA,2BACAztd,OAEAC,KAEA86Y,MACA2yE,MACAC,QAIA,CAvFuC1md,CAAWymT,EAAQ,OAuF1D;;;;CCpFC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,wBAEAuvK,2WACA,KAEAE,YACA,oWACA,KAEAK,wTACA,KAEAE,kLACAE,gLACAqgT,gBACAC,+BACAC,mCACA3+c,eACA4+c,iBACAC,6CACAC,qDAEAz1E,UACA01E,4BACAC,4BACAC,+CACAC,4BACAC,qDACAC,cAEAC,cACAC,qCACAC,yCACAt/c,sDACAotT,uCACAxtT,0CACAugV,iCACAmF,gDACAsmB,iCACA29B,0CACArhD,2BACAp5V,sDACAywd,uCACAr2b,0CACAs2b,4BAEAO,qBACA,+FACA,eAGAD,uBACA,mCACA,eAKAzB,0HACA8B,2BAIA,OAHA,SACAlud,KAEA,yBACAA,WACc,+BACdA,EACc,2CACdA,aACc,+BACdA,UADc,CACd,EAGAssd,yBACA,WACA,qBACctsd,KACd,2BACcA,KACd,uCACcA,KACd,2BAEA,sBAGA+6Y,MACA2yE,MACAC,QAIA,CA5HuC1md,CAAWymT,EAAQ,OA4H1D;;;;CCzHC,YAA4B;kCAI7B;IAAAzmT,EACA,uIACA,KAEAhH,EACA,qHACA,KAEA+E,GACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,aACA,QACA,SAEA,cACA,sCAEA,kBACA,YACA,cACA,KACA,uCACA,IACA,oCACA,KACA,qCACA,IACA,sCACA,KACA,uCACA,KACA,yCACA,KACA,oDACA,KACA,8BAIAhJ,qBACAuvK,qBACA,SAEc,iBACdtrK,aAEAgH,aAJAA,GAOAwkK,8EACAmjT,cACAC,kBACAC,mBACAhjT,SACA,uFACAE,yDACAE,mDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,2BACAC,uBACAC,oBACA,wBACA,EACA,qCAEA,EACA,8BAEA,EACA,sCAEA,EACA,qCAGA,0BAGAC,yBACAC,oBACA,wBACA,EACA,sDACA,EACA,uDACA,EACA,sDAEA,sCAGAC,cAEAC,cACAC,eACAC,eACAt/c,iBACAotT,KACAxtT,EACAugV,KACAmF,IACAsmB,KACA29B,iBACArhD,YACA54V,iBACA4wd,KACApxd,iBACAywd,KACAr2b,QACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9IuC1md,CAAWymT,EAAQ,OA8I1D;;;;CC3IC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,2GACA,KAEAE,yEACAK,SACA,6FACA,KAEAE,0DACAE,gEACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,2BACAC,0CACAC,kDAEAz1E,UACA01E,0BACAC,+BACAC,2BACAC,2BACAC,oBACA,sCACA,8BACA,+BAEAC,cAEAC,cACAC,eACAC,gBACAt/c,oBACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,WACArhD,aACAp5V,cACAywd,cACAr2b,WACAs2b,cAEAC,qCACAC,iBACAh/S,gCAGA,CA5DuCxnK,CAAWymT,EAAQ,OA4D1D;;;;CCzDC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,2GACA,KAEAE,yEACAK,SACA,6FACA,KAEAE,0DACAE,gEACA0hT,sBACArB,gBACAC,WACAC,eACA3+c,eACA4+c,2BACAC,kCACAC,0CAEAz1E,UACA01E,0BACAC,+BACAC,2BACAC,2BACAC,oBACA,sCACA,8BACA,+BAEAC,cAEAC,cACAC,eACAC,gBACAt/c,aACAotT,iBACAxtT,cACAugV,gBACAmF,aACAsmB,cACA29B,WACArhD,aACA54V,eACA4wd,gBACApxd,cACAywd,cACAr2b,WACAs2b,cAEAC,qCACAC,iBACA1yE,MACA2yE,MACAC,QAIA,CAjEuC1md,CAAWymT,EAAQ,OAiE1D;;;;;;CC5DC,YAA4B;kCAI7B;SAAAzmT,SACA,IASAvL,MACA,sCACAA,UAEAsJ,IAbA,CACAm2T,aACA+yB,YACAyrB,SACA1jB,UACAg4H,4BACAX,UACAC,UAMA5/c,GAGA3R,qBACAuvK,iHACA,KAEAE,YACA,qEACA,KAEA2iT,oBACAtiT,6FACAE,0DACAE,iDACAqgT,gBACAC,UACAC,cACA3+c,eACA4+c,iBACAC,uBACAC,+BAEAz1E,UACA01E,sBACAC,2BACAC,wBACAC,uBACAC,gCACAC,cAEAC,cACAC,kBACAC,0BACAt/c,sBACAotT,KACAxtT,aACAugV,KACAmF,eACAsmB,KACA29B,SACArhD,KACA54V,kCACA4wd,KACApxd,gBACAywd,KACAr2b,UACAs2b,MAEAxyE,MACA2yE,MACAC,QAIA,CA5EuC1md,CAAWymT,EAAQ,OA4E1D;;;;;;CCzEC,YAA4B;kCAI7B;SAAAzmT,OACA,mBACA,0BACAvL,KACAD,wCACAC,KACAA,KAEA,kBAUA,cACAD,gFAEAkS,QAZA,CACAwtT,+PACA+yB,2NACAyrB,gFACA1jB,0EACAg4H,oHACAX,oHACAC,qEAKA7xd,OAGA,OACA,uBACA,uBACA,uBACA,uBACA,+BACA,uBACA,uBACA,uBACA,uBACA,uBACA,uBACA,wBAMAM,qBACAuvK,QACAhzG,+bACA,KAEAw1Z,WACA,4aACA,MAGAtiT,aAEAlzG,0RACA,KAEAw1Z,WACA,wRACA,MAGAjiT,UACAiiT,WACA,yVACA,KAEAx1Z,gWACA,KAEAy1Z,mKAEAhiT,sHACAE,oHACA0iT,cACAC,kBACAC,mBAGAL,YACA,+wBAGAN,iBACA,+wBAGAO,kBACA,wgBAGAC,uBACA,8TACApC,gBACAC,UACAC,cACA3+c,eACA4+c,yBACAC,gCACAC,wCAEAz1E,UACA01E,kEACAC,4DACAE,sDACAD,qBACA,0BAcA,sBACA,mCAEA,6BAhBA,wBACA,EACA,+FACA,OACA,OACA,EACA,+FACA,OACA,OACA,EACA,0FAMA,EAIAE,qBACA,0BAcA,sBACA,mCAEA,6BAhBA,wBACA,EACA,mFACA,OACA,OACA,EACA,mFACA,OACA,OACA,EACA,8EAMA,EAIAC,cAEAC,cACAC,2CACAC,yCACAt/c,gGACAotT,KACAxtT,IACAugV,KACAmF,uBACAsmB,KACA29B,6BACArhD,KACA54V,yCACA4wd,KACApxd,mCACAywd,KACAr2b,uBACAs2b,MAEAnB,2HACAC,iBACA,6EAEAC,yBACA,WACA,2BACc3+c,KACd,2BACcA,KACd,qBAEA,wCAGA6/c,8DACAC,sBACA,cACA,QACA,QACA,MACA,uBACA,IACA,6BACA,QACA,IACA,2BAEA,WAGA1yE,MACA2yE,MACAC,QAIA,CArNuC1md,CAAWymT,EAAQ,OAqN1D;;;;CCpNC,YAA4B;kCAI7B;IAAAzmT,GACA,iCACA,6CACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,6CACA,uCACA,iCACA,kCAEAhH,2LAEAjE,qBACAuvK,SACAE,cACAK,WACAE,gBACAE,cACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,qCAEAR,sDACAC,iBACA,gCAEAC,yBACA,YACA,qBAEA,sBAEAn1E,UACA01E,4BACAC,8CACAC,oFACAC,8CACAC,4FACAC,cAEAC,cACAC,+BACAC,uBACAt/c,sDACAotT,uCACAxtT,oCACAugV,2BACAmF,0CACAsmB,iCACA29B,gDACArhD,uCACAp5V,gDACAywd,uCACAr2b,oCACAs2b,4BAEAO,qBACA,iCAEAD,uBACA,iCAEA9yE,MACA2yE,MACAC,QAIA,CAnFuC1md,CAAWymT,EAAQ,OAmF1D;;;;CChFC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,qOACA,KAEAE,YACA,+FACAK,SACA,sGACA,KAEAE,oEACAE,uCACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,uBACAC,oCACAC,4CAEAz1E,UACA01E,uBACAC,yBACAC,wBACAC,uBACAC,iCACAC,cAEAC,cACAC,wBACAC,qBACAt/c,qBACAotT,kBACAxtT,iBACAugV,iBACAmF,gBACAsmB,gBACA29B,gBACArhD,iBACAp5V,kBACAywd,iBACAr2b,eACAs2b,eAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA3DuC1md,CAAWymT,EAAQ,OA2D1D;;;;CCxDC,YAA4B;kCAK7B1xT;EAAAmwd,mBACA5gT,mhBACA,KAEAE,4RACA,KAEAK,SACA,yVACA,KAEAE,4KACAE,wGACA0hT,sBACArB,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,0BACAC,+DAEAz1E,UACA01E,oCACAC,0CACAC,2BACAC,0CACAC,kEACAC,cAEAC,cACAC,oCACAC,yCACAt/c,wEACAotT,uCACAxtT,2DACAugV,yDACAmF,uBACAsmB,2BACA29B,6BACArhD,2BACAp5V,6BACAywd,2BACAr2b,uBACAs2b,4BAEAC,0DACAC,oBACA,sCAEArB,+HACAC,iBACA,yEAEAC,yBACA,YACAtsd,2DAEAA,mEAKA,CAvEuCiH,CAAWymT,EAAQ,OAuE1D;;;;;CCnEC,YAA4B;kCAI7B;IAAAzmT,EACA,+GACA,KAEAhH,wEACA,cACA,gBAEA,oBACA,YACA,cACA,IACA,sDACA,KACA,YACArD,+BAEAA,kBAEA,IACA,oDACA,KACA,YACAA,gCAEAA,oBAEA,IACA,2CACA,KACA,YACAA,6BAEAA,iBAEA,IACA,uCACA,KACA,YACAA,wBAEAA,mBAEA,IACA,oCACA,KACA,YACAA,8BAEAA,iBAEA,IACA,8BACA,KACA,YACAA,wBAEAA,WAKAZ,qBACAuvK,SACAE,cACAK,oFACAE,qDACAE,mDACAqgT,gBACAC,UACAC,cACA3+c,eACA4+c,kBACAC,wBACAC,+BAEAz1E,UACA01E,sBACAC,wBACAC,oBACA,wBACA,EACA,kCACA,OACA,EACA,6BACA,EACA,6BACA,EACA,oCACA,EACA,6BACA,EACA,0BAGAC,4BACAC,oBACA,wBACA,EACA,0CACA,OACA,EAGA,KACA,OACA,EACA,gCALA,KACA,EACA,gCAGA,KACA,EACA,kCAGAC,cAEAC,cACAC,eACAC,eACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAlJuC1md,CAAWymT,EAAQ,OAkJ1D;;;;CChJC,YAA4B;kCAI7B;SAAAzmT,WACA,YACA,cACA,IACA,YACA,eACA,sBACA,KACA,OACAvL,GADA,MACAsE,sBACkB,MAClBA,0BACkBgF,IAClBhF,0BAEA,SAEA,IACA,IACA,uCACA,KACA,OACAtE,GADA,MACAsE,oBACkB,MAClBA,yBACkBgF,IAClBhF,yBAEAA,wBAEA,IACA,IACA,iCACA,KACA,OACAtE,GADA,MACAsE,cACkB,MAClBA,mBACkBgF,IAClBhF,mBAEAA,kBAEA,IACA,IACA,qCACA,KACA,OACAtE,GADA,MACAsE,kBACkB,MAClBA,qBAEAA,mBAEA,IACA,IACA,0CACA,KACA,OACAtE,GADA,MACAsE,uBACkB,MAClBA,yBACkBgF,IAClBhF,uBAEAA,wBAEA,IACA,IACA,wCACA,KACA,OACAtE,GADA,MACAsE,oBACkB,MAClBA,qBACkBgF,IAClBhF,mBAEAA,kBAEA,CAIAhE,qBACAuvK,qGACA,KAEAE,YACA,oEACA,KAEA2iT,oBACAtiT,+EACAE,mEACAE,mDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,iBACA4+c,kBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,wBAEAC,oBACA,wBACA,EACA,mCACA,EACA,iCACA,EACA,kCACA,OACA,OACA,OACA,EACA,2BAGAC,8BACAC,oBACA,wBACA,EACA,+CACA,EACA,6CACA,EACA,8CACA,OACA,OACA,OACA,EACA,uCAGAC,cAEAC,cACAC,qBACAC,eACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA7KuC1md,CAAWymT,EAAQ,OA6K1D;;;;;;CCxKC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,gGACA,KAEAE,4EACAK,6FACA,KAEAE,6DACAE,6CACA0hT,sBACAxB,sBACAC,iBACA,yBAEAC,yBACA,uBAEAC,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,yBACAC,8BACAC,2BACAC,yBACAC,oCACAC,cAEAC,cACAC,kBACAC,wBACAt/c,iBACAotT,gBACAxtT,qBACAugV,eACAmF,kBACAsmB,eACA29B,mBACArhD,gBACAp5V,gBACAywd,aACAr2b,eACAs2b,cAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAjEuC1md,CAAWymT,EAAQ,OAiE1D;;;;;CC/DC,YAA4B;kCAI7B;IAAAzmT,GACAiqc,OAEA/1I,4IACAxtT,gJACAugV,oHACAmF,wHACAsmB,gFACA29B,wHACArhD,gFACAp5V,gJACAywd,oHACAr2b,gJACAs2b,2HAEAmC,qCACA,OACA1qd,SACAA,UACAA,qBAEAA,kBAEAhF,MAEA+9T,4BACA,IACAliU,EADAH,aAGA,oBAEA,iFACAD,gBAGAI,gCAEA,wDACAmJ,0CAGAA,WAIAhJ,0BACAuvK,ybACA,KAEAE,YACA,0PACA2iT,oBACAtiT,2SACAE,uKACAE,oHACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,gBACA4+c,mBACAC,yBACAC,iCAEAz1E,UACA01E,qDACAC,qDACAC,oBACA,wBACA,EACA,yEACA,EACA,mEACA,EACA,yEACA,OACA,OACA,OACA,EACA,oCAGAC,+CACAC,oBAUA,MATA,CACA,4FACA,oHACA,kGACA,sFACA,8GACA,4FACA,6FAEAtxd,aAEAuxd,cAEAC,cACAC,yBACAC,6BACAt/c,gGACAotT,eACAxtT,cACAugV,eACAmF,cACAsmB,eACA29B,cACArhD,eACAp5V,cACAywd,eACAr2b,cACAs2b,gBAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAhIuC1md,CAAWymT,EAAQ,OAgI1D;;;;;CC7HC,YAA4B;kCAI7B;IAAAzmT,GACAiqc,OAEA/1I,mCACAxtT,kCACAugV,+BACAmF,8BACAsmB,yBACA29B,8BACArhD,yBACAp5V,kCACAywd,+BACAr2b,kCACAs2b,iCAEAmC,qCACA,OACA1qd,SACAA,UACAA,qBAEAA,kBAEAhF,MAEA+9T,4BACA,IACAliU,EADAH,aAGA,oBAEA,0BACAD,gBAGAI,gCAEA,0BACAmJ,YAGAA,WAIAhJ,qBACAuvK,gGACA,KAEAE,YACA,sEACA2iT,oBACAtiT,4EACA,KAEAE,mEACAE,mDACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,gBACA4+c,mBACAC,yBACAC,iCAEAz1E,UACA01E,uBACAC,uBACAC,oBACA,wBACA,EACA,kCACA,EACA,gCACA,EACA,iCACA,OACA,OACA,OACA,EACA,0BAGAC,2BACAC,oBAUA,MATA,CACA,iCACA,qCACA,iCACA,+BACA,wCACA,gCACA,iCAEAtxd,aAEAuxd,cAEAC,cACAC,eACAC,cACAt/c,qBACAotT,eACAxtT,cACAugV,eACAmF,cACAsmB,eACA29B,cACArhD,eACAp5V,cACAywd,eACAr2b,cACAs2b,gBAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CAlIuC1md,CAAWymT,EAAQ,OAkI1D;;;;CChIC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,gIACA,KAEAE,yEACAK,SACA,4EACA,KAEAE,uDACAE,8CACA0hT,sBACArB,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,2BACAC,0BACAC,yBACAC,yBACAC,uCACAC,cAEAC,cACAC,gBACAC,sBACAt/c,uBACAotT,iBACAxtT,WACAugV,gBACAmF,WACAsmB,gBACA29B,YACArhD,iBACAp5V,YACAywd,iBACAr2b,YACAs2b,kBAEAnB,iDACAE,yBACA,YACA,UACcrsd,KACd,QACcA,KACd,aAEA,WAGAiud,2BAIA,OAHA,SACAjud,KAEA,cACAA,EACc,YACdA,aACc,gCACd,MACA,EAEAA,UAJc,CAId,EAGAutd,iCACAC,aACA1yE,MACA2yE,MACAC,QAIA,CAtFuC1md,CAAWymT,EAAQ,OAsF1D;;;;CCnFC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,qGACA,KAEAE,yEACAK,iFACAE,gEACAE,uDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,8BACAC,oCACAoC,uBACAC,6BAEA93E,UACA01E,oBACAC,uBACAE,uBACAD,2BACAE,0BACAC,cAEAC,cACAC,eACAC,uBACAt/c,sBACAotT,iBACAxtT,aACAugV,gBACAmF,aACAsmB,eACA29B,WACArhD,cACAp5V,gBACAywd,mBACAr2b,cACAs2b,eAEAC,0CACAC,oBACA,WAWA,UATA,gBACA,KACA,OAEA,MADA,KAIA,KAEA,EAEA1yE,MACA2yE,MACAC,QAIA,CAtEuC1md,CAAWymT,EAAQ,OAsE1D;;;;CCnEC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,mGACA,KAEAE,yEACAK,SACA,oEACA,KAEAE,2DACAE,8CACA0hT,sBACArB,gBACAC,aACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,uBACAC,yBACAC,uCACAC,oBACAC,2CACAC,cAEAC,cACAC,oBACAC,gBACAt/c,eACAotT,gBACAxtT,gBACAugV,eACAmF,eACAsmB,cACA29B,cACArhD,aACAp5V,gBACAywd,cACAr2b,gBACAs2b,eAEAxyE,MACA2yE,MACAC,QAIA,CAzDuC1md,CAAWymT,EAAQ,OAyD1D;;;;CCtDC,YAA4B;kCAI7B;IAAAzmT,GACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAEAhH,GACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAGAjE,qBACAuvK,meACA,KAEAE,YACA,4dACA,KAEAK,SACA,6gBACA,KAEAE,yRACA,KAEAE,8GACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,8CACAC,wCACAC,oBACAC,oDACAC,oFACAC,cAEAC,cACAC,+BACAC,mCACAt/c,iGACAotT,+DACAxtT,kEACAugV,qEACAmF,yEACAsmB,0DACA29B,gDACArhD,mDACAp5V,sDACAywd,yDACAr2b,4DACAs2b,0DAEAC,mDACAC,oBACA,+BAEAK,qBACA,+FACA,eAGAD,uBACA,mCACA,eAIAzB,sNACAE,yBACA,WACA,kCACctsd,IACd,kCACcA,KACd,4BACcA,KACd,8CACcA,KACd,8CACcA,KACd,4BAEA,mCAGAkud,2BAIA,OAHA,SACAlud,KAEA,qCACAA,WACc,sEAEA,kDACdA,MAFAA,EAIAA,MAGA+6Y,MACA2yE,MACAC,QAIA,CArIuC1md,CAAWymT,EAAQ,OAqI1D;;;;CClIC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,udACA,KAEAE,YACA,0SACA,KAEA2iT,oBACAtiT,SACA,6UACA,KAEAE,wLACAE,wGACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,0BACAC,kCAEAz1E,UACA01E,wCACAC,wCACAC,oBACAC,8CACAC,mCACAC,cAEAC,cACAC,yBACAC,+CACAt/c,oFACAotT,mDACAxtT,sDACAugV,yDACAmF,oCACAsmB,uCACA29B,0CACArhD,6CACAp5V,oCACAywd,uCACAr2b,kEACAs2b,sEAEAC,uCACAC,mBACArB,sLACA8B,2BAIA,OAHA,SACAjud,KAEA,2CACAA,WACc,+BACdA,EACc,6DACdA,aACc,uDACdA,UADc,CACd,EAGAqsd,yBACA,WACA,uCACcrsd,KACd,2BACcA,KACd,yDACcA,KACd,mDAEA,wCAGA86Y,MACA2yE,MACAC,QAIA,CA1FuC1md,CAAWymT,EAAQ,OA0F1D;;;;;;CCrFC,YAA4B;kCAI7B1xT;EAAAmwd,oBACA5gT,0GACA,KAEAE,yEACAK,sEACAE,0DACAE,gDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,wBACAC,wBACAC,yBACAC,4BACAC,wCACAC,cAEAC,cACAC,gBACAC,gBACAt/c,kBACAotT,gBACAxtT,eACAugV,eACAmF,aACAsmB,aACA29B,cACArhD,cACAp5V,cACAywd,cACAr2b,cACAs2b,eAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CApEuC1md,CAAWymT,EAAQ,OAoE1D;;;;CCnEC,YAA4B;kCAI7B;IAAAzmT,GACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBACA,qBAGAjL,qBACAuvK,QACAhzG,qcACA,KAEAw1Z,WACA,sXACA,MAGAtiT,6PACAK,wTACA,KAEAE,gKACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,6EACAC,6EACAE,6EACAD,gIACAE,4IACAC,cAEAC,cACAC,2CACAC,6BACAt/c,wEACAJ,sDACAugV,6CACAmF,0CACAsmB,iCACA29B,oCACArhD,2BACAp5V,oCACAywd,2BACAr2b,oCACAs2b,4BAEAnB,8GACA8B,2BAIA,OAHA,SACAlpd,KAEA,yBACAA,WACc,+BACdA,EACc,yBACdA,aACc,qCACdA,UADc,CACd,EAGAsnd,yBACA,WACA,qBACctnd,KACd,2BACcA,KACd,qBACcA,KACd,iCAEA,sBAGAwod,6DACAC,oBACA,WACA9/c,kBACA,6BAEAotY,MACA2yE,MACAC,QAIA,CAvHuC1md,CAAWymT,EAAQ,OAuH1D;;;;CCpHC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,+hBACA,KAEAE,YACA,8MACA,KAEA2iT,oBACAtiT,6QACAE,gQACAE,6FACA0hT,sBACArB,gBACAC,UACAC,cACA3+c,eACA4+c,iBACAC,gDACAC,2FAEAR,0IACAC,iBACA,0EAEAC,yBACA,YACA,+DAEA,gEAGAn1E,UACA01E,6EACAC,yFACAC,sEACAC,2GACAC,4GACAC,cAEAC,cACAC,+BACAC,oDACAt/c,6EACAotT,6CACAxtT,+BACAugV,iCACAmF,iDACAsmB,mDACA29B,yBACArhD,2BACA54V,iDACA4wd,mDACApxd,qCACAywd,uCACAr2b,mBACAs2b,uBAIA,CAnEuCtmd,CAAWymT,EAAQ,OAmE1D;;;;CChEC,YAA4B;kCAI7B;IAAAzmT,GACA,UACA,UACA,UACA,WACA,WACA,SACA,SACA,UACA,UACA,aACA,aACA,eACA,SACA,UACA,WACA,WACA,WACA,YAGAjL,qBACAuvK,iHACA,KAEAE,wFACAK,2GACA,KAEAE,4EACAE,mEACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,8BACAC,2BACAC,oCACAC,0BACAC,sCACAC,cAEAC,cACAC,qBACAC,qBACAt/c,yBACAJ,cACAugV,cACAmF,cACAsmB,cACA29B,eACArhD,eACAp5V,cACAywd,cACAr2b,eACAs2b,gBAEAE,sBACA,cACA,QACA,QACA,SACA,KACA,iBAEA,SAEA,iBAEA,WACAhyd,UACAC,kBACA,8BAGAq/Y,MACA2yE,MACAC,QAIA,CA7FuC1md,CAAWymT,EAAQ,OA6F1D;;;;CC1FC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uGACA,KAEAE,yEACAK,wEACA,KAEAE,uDACAE,+CACAqgT,gBACAC,WACAC,eACA3+c,cACA4+c,kBACAC,yBACAC,kCAEAz1E,UACA01E,4BACAC,wBACAC,mCACAC,uBACAC,qCACAC,cAEAC,cACAC,uBACAC,wBACAt/c,kBACAotT,gBACAxtT,iBACAugV,eACAmF,eACAsmB,aACA29B,eACArhD,aACAp5V,gBACAywd,cACAr2b,eACAs2b,cAEAC,iCACAC,oBACA,UAEA1yE,MACA2yE,MACAC,QAIA,CA3DuC1md,CAAWymT,EAAQ,OA2D1D;;;;CCxDC,YAA4B;kCAI7B;IAAAzmT,wEAEA,cACA,QACA,UACA,qBACApL,qBACA,qBACAA,qBACA,qBACAA,oBACAA,QACA,CAGA,cACA,QACA,UACA,qBACAA,0BACA,qBACAA,qBACA,qBACAA,oBACAA,QACA,CAGA,oBACA,WACA,cACA,KACA,oBACA,KACA,oBACA,KACA,oBACA,KACA,oBACA,KACA,oBACA,KACA,iBAIA,cACA,4BACAc,uBACAC,OACAC,KACA,aACAA,iBAEAF,MACAE,+BAEAD,MACAC,yBAEA,gBAGAb,sBACAuvK,8SACA,KAEAE,YACA,mKACA,KAEA2iT,oBACAtiT,0EACA,KAEAE,cACA,sEACAE,YACA,sEACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,sBACAC,2BACAC,eACAC,gCACAC,eACAC,cAEAC,cACAC,SACAC,OACAt/c,YACAotT,KACAxtT,iBACAugV,KACAmF,iBACAsmB,KACA29B,iBACArhD,KACAp5V,iBACAywd,KACAr2b,iBACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QAIA,CA9HuC1md,CAAWymT,EAAQ,OA8H1D;;;;;CC1HC,YAA4B;kCAI7B;IAAAzmT,GACA,UACA,UACA,UACA,WACA,WACA,SACA,SACA,UACA,UACA,gBACA,gBACA,kBACA,cACA,UACA,WACA,WACA,qBACA,sBAGAjL,qBACAuvK,sHACA,KAEAE,mFACAK,yFACA,KAEAE,0DACAE,iDACAogT,yBACA,YACA3+c,wBAEAA,mBAGAy+c,8CACAC,iBACA,gCAEAE,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,6BACAC,+BACAC,oCACAC,sBACAC,qCACAC,cAEAC,cACAC,kBACAC,kBACAt/c,qBACAotT,eACAxtT,eACAugV,eACAmF,aACAsmB,aACA29B,eACArhD,eACA54V,cACA4wd,cACApxd,WACAywd,WACAr2b,iBACAs2b,kBAEAE,sBACA,cACA,QACA,QACA,SACA,KACA,iBAEA,SAEA,2BAEA,WACAhyd,UACAC,kBACA,8BAGAq/Y,MACA2yE,MACAC,QAIA,CA3GuC1md,CAAWymT,EAAQ,OA2G1D;;;;;CCxGC,YAA4B;kCAiE7B;SAAAztT,WACA,OACA8N,wCACAotT,+BACAxtT,iCACAugV,iCACAmF,kCACAsmB,iCACA29B,4BACArhD,2BACAp5V,yBACAywd,2BACAr2b,uBACAs2b,wBAEA,UAEAvtd,EADAtE,QAGAA,QA9EAM,sBACAuvK,+GACA,KAEAE,4EACAK,kGACAE,yEACAE,0DACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,2BACAC,kCACAC,+CAEAR,2BACAC,iBACA,+BAEAC,yBACA,YACA3+c,cAEAA,eAGAwpY,UACA01E,yBACAC,4BACAC,0BACAC,0BACAC,6CACAC,cAEAC,cACAC,mBACAC,YACAt/c,IACAotT,KACAxtT,IACAugV,KACAmF,IACAsmB,KACA29B,IACArhD,KACAp5V,IACAywd,KACAr2b,IACAs2b,MAEAC,mCACAC,cACA1yE,MACA2yE,MACAC,QA0BA,CA1FuC1md,CAAWymT,EAAQ,OA0F1D;;;;CCxFC,YAA4B;kCAI7B1xT;EAAAmwd,yBACA5gT,kJACA,KAEAE,YACA,2IACA,KAEAK,2EACAE,gFACAE,8EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,uBACAC,sBACAC,uBACAC,wBACAC,uBACAC,cAEAC,cACAC,wBACAC,cACAt/c,SACAotT,aACAxtT,eACAugV,mBACAmF,cACAsmB,sBACA29B,QACArhD,cACAp5V,UACAywd,eACAr2b,UACAs2b,gBAEAxyE,MACA2yE,MACAC,SAIA,CAxDuC1md,CAAWymT,EAAQ,OAwD1D;;;;CCrDC,YAA4B;kCAI7B1xT;EAAAmwd,oBACA5gT,mbACA,KAEAE,YACA,4aACA,KAEAK,mRACAE,wRACAE,sRACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,+BAEAz1E,UACA01E,+CACAC,+CACAC,4BACAC,qDACAC,4BACAC,cAEAC,cACAC,+DACAC,6BACAt/c,6BACAotT,iCACAxtT,mCACAugV,uCACAmF,6BACAsmB,yDACA29B,uBACArhD,kCACAp5V,8BACAywd,6CACAr2b,mCACAs2b,8CAEAxyE,MACA2yE,MACAC,SAIA,CAxDuC1md,CAAWymT,EAAQ,OAwD1D;;;;CCrDC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,2cACA,KAEAE,YACA,ocACA,KAEAK,wTACA,KAEAE,sHACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,mGACAC,gHACAC,6HAEAR,qRACA8B,2BAIA,OAHA,SACAjud,KAGA,+DACA,sCACA,0EAEAA,EACc,oGACdA,KAEAA,cAGAqsd,yBACA,cACA,aACA,0DACc3+c,MACd,iCACcA,OACd,sEACcA,OACd,qBACcA,OACd,sEAEA,sBAGAwpY,UACA01E,6EACAC,uEACAC,iGACAC,0DACAC,uGACAC,cAEAC,cACAC,2CACAC,yCACAt/c,wEACAotT,6CACAxtT,sDACAugV,uCACAmF,sDACAsmB,uCACA29B,0CACArhD,2BACAp5V,0CACAywd,2BACAr2b,0CACAs2b,4BAGAC,gHACAC,sBACA,cACA,QACA,QACA,MACA,yCACA,QACA,IACA,mDAEA,WAGAK,qBACA,iCAEAD,uBACA,iCAEA9yE,MAEA2yE,MACAC,QAIA,CAjHuC1md,CAAWymT,EAAQ,OAiH1D;;;;;CC7GC,YAA4B;kCAI7B;SAAAzmT,OACA,mBACA,0BACApL,KACAH,wCACAG,KACAA,KAEA,kBASA,cACAH,4FACU,QACVA,gFAEAD,QAbA,CACA0/T,+PACA+yB,+PACAyrB,2NACA1jB,0EACAq3H,0HACAC,iFAOA1xd,OAGA,gBACA,OACA8zd,WACA,qTACA,KAEAC,WACA,qTACA,KAEAC,SACA,iUACA,MAKA,aACAh0d,aACA+X,WACAulC,gCAEA19C,EASAI,EALA,iDACA,aACA,8HACA,WACA,cACAJ,SARAI,aAUA,cACA,kBACA,0DAIAG,qBACAuvK,QACAhzG,6dACA,KAEAw1Z,WACA,sgBACA,MAGAtiT,kSACA,KAEAK,WACAE,sHACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,yBACAC,iCACAC,yCAEAz1E,UACA01E,gEACAC,oDACAE,8CACAD,8BACAE,oBACA,wBACA,OACA,OACA,OACA,EACA,gFACA,OACA,OACA,EACA,mFAGAC,cAEAC,cACAC,yBACAC,mCACAt/c,0FACAotT,KACAxtT,IACAugV,KACAmF,yCACAsmB,KACA29B,6BACArhD,KACAp5V,yCACAywd,KACAr2b,uBACAs2b,MAGAnB,gIACAC,iBACA,6EAEAC,yBACA,WACA,2BACc7wd,KACd,iCACcA,KACd,qBAEA,wCAGA+xd,uDACAC,sBACA,cACA,QACA,QACA,UACA,QACA,IACA,uBACA,IACA,iCAEA,WAGA1yE,MACA2yE,MACAC,QAIA,CAxKuC1md,CAAWymT,EAAQ,OAwK1D;;;;;CCrKC,YAA4B;kCAI7B;IAAAzmT,GACA,iCACA,iCACA,2BACA,iCACA,qBACA,qBACA,uCACA,2BACA,iCACA,uCACA,iCACA,kCAEAhH,uMAEAjE,qBACAuvK,SACAE,cACAK,WACAE,gBACAE,cACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,qCAEAR,sDACAC,iBACA,gCAEAC,yBACA,YACA,qBAEA,sBAEAn1E,UACA01E,qDACAC,qDACAC,8CACAC,0FACAC,+EACAC,cAEAC,cACAC,+BACAC,6BACAt/c,sDACAotT,uCACAxtT,0CACAugV,2BACAmF,sDACAsmB,uCACA29B,oCACArhD,qBACAp5V,0CACAywd,2BACAr2b,0CACAs2b,4BAEAO,qBACA,iCAEAD,uBACA,iCAEA9yE,MACA2yE,MACAC,QAIA,CAnFuC1md,CAAWymT,EAAQ,OAmF1D;;;;CCjFC,YAA4B;kCAI7B1xT;EAAAmwd,wBACA5gT,0FACA,KAEAE,2EACAK,SACA,qEACA,KAEAE,2DACAE,gDACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,+BACAC,2BACAC,oCACAC,+BACAC,6CACAC,cAEAC,cACAC,yBACAC,0BACAt/c,WACAotT,eACAxtT,eACAugV,eACAmF,aACAsmB,aACA29B,YACArhD,YACAp5V,WACAywd,WACAr2b,YACAs2b,aAEAxyE,MACA2yE,MACAC,QAIA,CAxDuC1md,CAAWymT,EAAQ,OAwD1D;;;;CCrDC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,6XACA,KAEAE,6PACAK,iTACAE,gKACAE,oHACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,sFACAC,mEACAC,sFACAC,gFACAC,uHACAC,cAEAC,cACAC,oEACAC,qFACAt/c,yCACAotT,6CACAxtT,4DACAugV,6CACAmF,gDACAsmB,iCACA29B,0CACArhD,2BACAp5V,oCACAywd,qBACAr2b,0CACAs2b,4BAEAxyE,MACA2yE,MACAC,QAIA,CArDuC1md,CAAWymT,EAAQ,OAqD1D;;;;;CCjDC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,sJACA,KAEAE,YACA,4FACA,KAEA2iT,oBACAtiT,kIACA,KAEAE,gDACAE,8CACA0hT,sBACAxB,uBACAC,iBACA,uBAEAC,yBACA,YACAtsd,YAEAA,aAGAusd,gBACAC,WACAC,eACA3+c,eACA4+c,4BACAC,mCACAC,0CACAhwd,cACAmyd,gBACAC,uBACAC,8BAEA93E,UACA01E,iCACAC,kCACAC,+CACAC,iCACAC,sDACAC,cAEAC,cACAC,qBACAC,0BACAt/c,mBACAotT,gBACAxtT,qBACAugV,gBACAmF,sBACAsmB,iBACA29B,qBACArhD,gBACA54V,uBACA4wd,kBACApxd,sBACAywd,iBACAr2b,sBACAs2b,kBAEAC,iCACAC,oBACA,UAEA1yE,MACA2yE,MACAC,QAIA,CAjFuC1md,CAAWymT,EAAQ,OAiF1D;;;;CC/EC,YAA4B;kCAI7B1xT;EAAAmwd,yBACA5gT,mOACA,KAEAE,YACA,uHACA,KAEA2iT,oBACAtiT,SACA,gKACA,KAEAE,4FACAE,kEACA0hT,sBACArB,gBACAC,WACA1+c,eACA4+c,iBACAC,wBACAC,gCAEAz1E,UACA01E,sCACAC,0CACAC,2BACAC,iDACAC,sCACAC,cAEAC,cACAC,sBACAC,qBACAt/c,oCACAotT,2BACAxtT,8BACAugV,8BACAmF,0BACAsmB,qBACA29B,oBACArhD,oBACAp5V,uBACAywd,uBACAr2b,wBACAs2b,yBAEAC,8CACAC,oBACA,WAWA,UATA,gBACA,KACA,MACA,KACA,MACA,KACA,MACA,KACA,KACA,EAEA1yE,MACA2yE,MACAC,QAIA,CA3EuC1md,CAAWymT,EAAQ,OA2E1D;;;;CCxEC,YAA4B;kCAI7B1xT;EAAAmwd,mBACA5gT,6PACA,KAEAE,2LACAK,oLACAE,2HACAE,qFACAqgT,gBACAC,YACAC,gBACA3+c,eACA4+c,iBACAC,yBACAC,iCAEAz1E,UACA01E,kCACAC,iCACAC,gEACAC,4BACAC,oEACAC,cAEAC,cACAC,qBACAC,0BACAt/c,0CACAotT,mBACAxtT,+BACAugV,+BACAmF,qBACAsmB,qBACA29B,4BACArhD,4BACAp5V,kBACAywd,kBACAr2b,wBACAs2b,yBAEAC,sDACAC,iCACA1yE,MACA2yE,MACAC,QAIA,CAvDuC1md,CAAWymT,EAAQ,OAuD1D;;;;;;CClDC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uLACA,KAEAE,uHACA,KAEAK,2JACAE,sHACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,+CACAC,oDACAhwd,aACAmyd,8BACAC,qCACAC,2CAEA7C,8FACA8B,2BAIA,OAHA,SACAjud,KAEA,2DACAA,EACc,uCACdA,KAGAA,cAGAqsd,yBACA,cACA,aACA,eACc3+c,MACd,eACcA,OACd,eACcA,OACd,eACcA,OACd,eAEA,gBAGAwpY,UACA01E,2BACAC,2BACAC,qBACA,8BACA,gBAEA,iBAGAC,2BACAC,qBACA,8BACA,gBAEA,iBAGAC,cAEAM,uDACAC,sBACA,cACA,QACA,QACA,MACA,sBACA,IACA,sBACA,QACA,IACA,0BAEA,WAGAN,cACAC,kBACAC,gBACAt/c,iBACAotT,eACAxtT,mBACAugV,qBACAmF,mBACAsmB,qBACA29B,aACArhD,eACA54V,aACA4wd,eACApxd,mBACAywd,qBACAr2b,aACAs2b,gBAEAxyE,MAEA2yE,MACAC,QAIA,CAxHuC1md,CAAWymT,EAAQ,OAwH1D;;;;;;;CCpHC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uLACA,KAEAE,uHACA,KAEAK,2JACAE,sHACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,qCACAC,0CACAhwd,aACAmyd,8BACAC,qCACAC,2CAEA7C,8FACA8B,2BAIA,OAHA,SACAjud,KAEA,2DACAA,EACc,mBACdA,aACc,uCACdA,UADc,CACd,EAGAqsd,yBACA,cACA,aACA,eACc3+c,MACd,eACcA,OACd,eACc,SACd,eACcA,OACd,eAEA,gBAGAwpY,UACA01E,2BACAC,2BACAC,0BACAC,2BACAC,0BACAC,cAEAM,uDACAC,sBACA,cACA,QACA,QACA,MACA,sBACA,IACA,sBACA,QACA,IACA,0BAEA,WAGAN,cACAC,kBACAC,gBACAt/c,iBACAotT,eACAxtT,mBACAugV,qBACAmF,mBACAsmB,qBACA29B,aACArhD,eACAp5V,mBACAywd,qBACAr2b,aACAs2b,iBAIA,CApGuCtmd,CAAWymT,EAAQ,OAoG1D;;;;;;CClGC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uLACA,KAEAE,uHACA,KAEAK,2JACAE,sHACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,qCACAC,0CACAhwd,aACAmyd,8BACAC,qCACAC,2CAEA7C,8FACA8B,2BAIA,OAHA,SACAjud,KAEA,2DACAA,EACc,mBACdA,aACc,uCACdA,UADc,CACd,EAGAqsd,yBACA,cACA,aACA,eACc3+c,MACd,eACcA,OACd,eACcA,OACd,eACcA,OACd,eAEA,gBAGAwpY,UACA01E,4BACAC,4BACAC,2BACAC,4BACAC,2BACAC,cAEAM,uDACAC,sBACA,cACA,QACA,QACA,MACA,sBACA,IACA,sBACA,QACA,IACA,0BAEA,WAGAN,cACAC,kBACAC,gBACAt/c,iBACAotT,eACAxtT,mBACAugV,qBACAmF,mBACAsmB,qBACA29B,aACArhD,eACAp5V,mBACAywd,qBACAr2b,aACAs2b,iBAIA,CApGuCtmd,CAAWymT,EAAQ,OAoG1D;;;;;CClGC,YAA4B;kCAI7B1xT;EAAAmwd,sBACA5gT,uLACA,KAEAE,uHACA,KAEAK,2JACAE,sHACAE,0EACAqgT,gBACAC,WACAC,eACA3+c,eACA4+c,8BACAC,qCACAC,0CACAhwd,aACAmyd,8BACAC,qCACAC,2CAEA7C,8FACA8B,2BAIA,OAHA,SACAjud,KAEA,2DACAA,EACc,mBACdA,aACc,uCACdA,UADc,CACd,EAGAqsd,yBACA,cACA,aACA,eACc3+c,MACd,eACcA,OACd,eACcA,OACd,eACcA,OACd,eAEA,gBAGAwpY,UACA01E,4BACAC,4BACAC,2BACAC,4BACAC,2BACAC,cAEAM,uDACAC,sBACA,cACA,QACA,QACA,MACA,sBACA,IACA,sBACA,QACA,IACA,0BAEA,WAGAN,cACAC,kBACAC,gBACAt/c,iBACAotT,eACAxtT,mBACAugV,qBACAmF,mBACAsmB,qBACA29B,aACArhD,eACAp5V,mBACAywd,qBACAr2b,aACAs2b,iBAIA,CApGuCtmd,CAAWymT,EAAQ,OAoG1D,yCCpGgE2sH,QAG/D,WAAsB,aAEvB,MA6HAl9a,EA3HA,aACA,+BAKA,eACAnB,KAGA,eACA,OACAgjT,qBACA,sDAIA,eAGA,OACA,UACA,uDAIA,kBACA,mDAGA,eACA,8BACA,iDAEA,OACA,aACA,YACA,SAGA,SAIA,eACA,mBAGA,eACA,MACA,qBACA,uDAIA,eACA,OACAA,oBACA,qDAIA,kBACA,IACA+C,GADA5C,MAEAiD,aACA,SAAoBL,QAAYA,GAChC5C,uBAEA,UAGA,kBACA,iBACAxxS,WACAqxS,eAIA,0BACAA,yBAGArxS,kBACAqxS,uBAGAA,GAGA,wBACA,gCAGA,aAEA,OACAm1C,SACA27H,gBACAC,eACA3nY,YACA4nY,gBACAC,aACAC,gBACAC,kBACAC,iBACAC,mBACAC,OACAC,mBACA11E,SACAyxE,cACAkE,WACAC,oBAIA,eACA,sBACAzxK,YAEAA,OAsBA,eACA,sBACA,aACAG,0CACA,kBAEA4C,IACAh/Q,wBACAouQ,gBACAA,WACAA,gBACAA,kBACAA,oBACAA,qBACAA,eACAA,mBACAA,sBACAA,8BAUA,GARA6N,aACA+C,GACAA,IACA,sBACA,iCACA,gBAGA,2CAGA,UAFA/C,cAEA,CAGA,mBAGA,eACA,cACA,gBACAniT,YAEAK,yBAGAi0S,GA7DAh0S,EADA6O,qBACAA,qBAEA,aACA,IAEA+1S,GAFA5Q,gBACAgO,iBAGA,SAAwB4C,MAASA,KACjC,wCACA,SAIA,UAqDA,4BACAxkT,KAEA,kBACA,OACAwkT,GACAK,GACAP,YAiCA,GA/BAnmT,yBACAsjT,yCAEAtjT,WACAsjT,aAEAtjT,WACAsjT,aAEAtjT,WACAsjT,aAEAtjT,gBACAsjT,uBAEAtjT,aACAsjT,iBAEAtjT,eACAsjT,qBAEAtjT,gBACAsjT,uBAEAtjT,YACAsjT,cAEAtjT,gBACAsjT,uBAGA6C,KACA,SAAwB1C,MAAyBA,KAGjDzjT,EADA0mT,MADAL,aAGA/C,WAKA,UAIA,eACA7pS,WACAxZ,kDACAA,iBACAA,wBAIA,QACA4B,KACA0J,qBACA1J,MAIA,eACA,OACAyhT,qDAIA,gBAEA,mCACA,6BACA30Q,cAEAA,yCAIA,kBACA,UAEA,oBAIA,GAHA,4BACApjC,8BAEAk4S,IACA,IACAiD,GACAP,GACAQ,GAHAN,MAIAO,oBACA,SAA4BT,MAAYA,MAExC,GADAO,MACA,gCAEA,UADAA,kBACAz0H,aACAhgL,qBACAy0S,mCAGAA,uBAEAA,iBAEAL,YAEArvS,EACAssS,GACA,gBACAhzS,wCACA,MACA,kBAEAmzS,MAEA,iCACShO,IAGT,IAgFA/iS,GAhFAN,KAEA,kBACA,4BACA7G,4BAEA6G,QACA4E,MACA5E,UAOA,gBACA,MACA,sDACA,yDAIA,gBACA,UACA,aACAH,WAEAK,GADAmjS,WAEAx1S,YAEAA,iBAIAA,gBAIAA,gDACAA,gEACA,IACA,UAAwB6jC,QAIxB,kBACA,IACAuiR,GADA5C,QAA2BH,IAE3B,aACArxS,WACA3N,sBACAm/S,UACAtiT,iBACAA,kBACkB,aAClBsiT,qBAEAA,QAIA,aAEAxxS,WACAA,UACA3N,YAGAm/S,YAAqCA,SAGrC,UAGA,eACA,UACAxjT,aAhEAsL,iCACAA,0BAsEAmH,GADAhG,YACAA,YAEA,aACA,OACA+2S,MACA,aACAxxS,UACAwxS,YAGA,WAIA,QACA0tK,wBACAC,2BACAC,wBACAC,4BACAC,+BACAC,cAGA,sBACA,mDACA,gCAGA,sBACA,uBACA9qK,gBAEA,OADApD,MAEAG,eACAv0R,iDACAm3R,GAIA,OACA,yMACAp2R,gDACA5kB,MACA6kB,MAMA,yBACA,UACA,sBACAw2R,cACA,oBAGApD,KACApzR,WAEAulR,KACAvlR,qBACA,kDAGAuzR,KACAvzR,kBACA,iCACAw2R,yBACApD,MAMA,gBACA,4BACAA,0BAEAA,qBAGA,eACA,IACAG,GACA4C,GAFA5Q,gBAIA,sBAA2CgO,MAAYA,KACvDvzR,WACAulR,kBAEAA,kBAIA,oBACA,IACAkR,GADAR,MAEA,SAAwBQ,MAAYA,KACpCR,eACA1Q,mBACAA,OAEA,WAKA,mBACA,qBAIAA,0BACApqS,OACAA,cAEAA,YAPAi4S,8BAUA,mBACA,SAEA,gBACA,iCAIA,IADArzR,eACAwzR,oBACAH,cACArzR,GACAo2R,IAEAp2R,eACAwzR,MAGA,UAGA,QACAstK,gBACAD,YACA1+c,eACA4+c,kBACAC,0BACAC,kCAGA,gBACA,gCACAztK,0CAEA,eACAhO,IAGAx1S,4BACAwzC,UACAxkC,iBACA,MACA,aACA,WACA,WACA,YAEAo3S,YAEAA,KAEA9+Q,SAEAtnC,0BAGA,sBAEA,cACA,yBAGA,YACA+1B,aAEA,gBACA,sCAGA,QACA07b,eACAC,cACAt/c,kBACAotT,gBACAxtT,aACAugV,gBACAmF,YACAsmB,cACA29B,UACArhD,aACA54V,WACA4wd,cACApxd,YACAywd,eACAr2b,WACAs2b,eAGA,yBACA,8BACA,cACAnrK,gBACAA,qBAGA,mBACA,gDACA,0CAGA,UAEA,mBACA,wBACA7xR,4BAGA,gBACA,0BACAA,kCACA,EAGA,gBACA,IACA4uR,GACA4C,GAFA5Q,MAIA,aACAxjS,WACAwxS,aAEAhO,eAKA,UAGA,UAEA,mBACA5+Q,UAGA,gBACA,IACA4sR,GADAhO,MAEA,aACAxjS,UACAwjS,SAA6B8oD,0BAG7B,+BACA,iCAEA9oD,GAGA,gBACA,qCAGA,gBACA,YAEAvmR,iBAEAA,eAIA,gBACA,WACAu0R,KAEA,8BACAA,WAGAA,GAGA,mBACA,oBACA,iBACA9qR,eACAptB,wBACAtL,MAEAy4B,aAKA,mBACA,oBACA4qR,uCACAzsQ,IAGA,sBACAysQ,2BAEA,iBACA9yS,eACA,gBACA,gBAEAizS,UACAH,qCACAG,GACAH,WACAn7S,oBAGAm7S,0CAOA,gBAEA,eADAA,YAEArjT,WAEAA,KAGA,mBACA,wBAEA,IACAomT,GADA5C,MADAH,WAGAoD,aACA,SAAwBL,MAAoBA,KAC5CpmT,2CAIAqS,QADAgxS,YAEA,oBAGA,YAGA,IAoBA7zL,GApBA12F,QACA5qB,UACA6qB,WACAQ,WACApoB,eACAioB,WACAC,eACAC,kBACAO,aACAnV,YACAoV,kBACAuC,SACAE,cACAE,wBACAC,6BACA6yF,0BAGAgI,GACA,wJAKA,sBACA/H,cACAgmL,GACA,gBACA,qBAIA,mBACA,gBAIAhmL,8BAHA,mBAOA,gBACA,UACA6zL,GACA96Q,iBACAA,QACA,sCACA,yBACA,yBAMA,gBACA,2CAA8C,QAjC9CinF,MAoCA,UAEA,mBACA,OAEAi3L,GADAL,MAWA,IATA,sBACA/C,SAEAnjT,QACAkmT,mBACAM,gBAGAD,aACAjD,KAAoBA,MAAcA,KAClC9jS,cAIA,mBACAS,4BACAsmS,gBACAjR,qBAIA,sBACA,oBACA91R,uBAIA,IAcA/Z,GAdA6L,KACA+O,KACAwE,KACAC,KACAC,KACAiC,KACA9V,KACAgW,KACA3hB,KAEA,kBACA,oBAoBA,mBACA,wBACA,WAEA,gBACA,sBACA,OACA8K,OACA,GACA,GACA,UAxBA5K,GADA0K,wBACAA,wBAEA,aAEA,OACA,SAAwBmlS,iBAAiBA,GACzC,iBACA,UAGA,UAmBAplR,gCACA,wBAGAA,0BACA,gDAGAA,2BACA,2CAKAyE,gBAIAwC,cAIAo4F,WACAA,eACAA,yBACA,iCAEAA,0BACA,4BAGAtvG,8BACAq1R,kBAGAr1R,wCACA,gDAEA,SACAq1R,UAEAj0S,wBAMA,OACA,8FACA,KAEAgN,GACA,6DACAE,mCACAC,MACAS,KAEA,mBACA,UAKA9F,gBACArJ,yBACAA,cACAA,oCACA,SACA,cACAqjT,YAVAh6S,gBACArJ,aACAA,wBAWA,mBACA,UAKAqJ,qBACArJ,8BACAA,kBACAyO,mCACA40S,YARAh6S,qBACArJ,kBACAA,6BA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BACA,cACAiwC,qCACAozQ,GACArjT,4BACAA,kBAGA,sBACA,OACAymT,GACAP,GACAQ,0BACA,wBAKA,IAJA1mT,uBACAA,4BACAA,0BAEAomT,KAAwBA,OAAOA,GAC/BF,sBACAlmT,4CACAkmT,GACA,IACAh6N,oBACAlsF,gDACAkmT,GACA,IACAh6N,oBACAlsF,iEAIA,UACA,aAEA,KADAymT,oCACAA,QACc,YAEd,KADAA,yCACAA,SAGA,KADAA,uCACAA,QAGA,aAEA,KADAA,sCAKA,KADAA,2CAKA,KADAA,uCAFAA,GAGA,KACc,YAEd,KADAA,2CAKA,KADAA,sCAKA,KADAA,uCAFAA,GAGA,MAGA,KADAA,yCAKA,KADAA,sCAKA,KADAA,yCAFAA,GAGA,KAKA,sBACA,aAEA,4BACA,8BAUA,IAPAzmT,sBACAA,uBACAA,0BACAA,4BACAA,4BAGAomT,KAAoBA,KAAOA,MA6B3B,GA1BAK,sBACAjD,mCACAxjT,uCACA,iDACA,KAEAA,wCACA,sDACA,KAEAA,sCACA,oDACA,MAGAA,0BACAkmT,GACA,IACAlmT,qBACA,KACAA,0BACA,KACAA,wBACAA,4DAIAwjT,IACA,aACAxjT,qCAEA,UACc,GACdwjT,IACA,YACAxjT,sCAEA,UACc,GACdwjT,IACA,WACAxjT,oCAEA,UACc,yCACd,WAOA,gBACA,mBACA,yBAEA,wDACA,iBACAqjT,4BACArjT,qBAEAw1S,GAIA,gBACA,mBACA,yBAEA,oDACA,uCAGA,gBACA,mBACA,yBAOA,aACA,gCACA,sCAEA,qBAIA,gBACA,iCACAxjS,0BACA8hC,cAEAuvQ,GACArjT,0BAEAA,sBAGAgS,2BACAhS,wBAEAA,8BACAA,0BACAA,qBAIA,gBACA,iCACAgS,0BACA8hC,cAEAuvQ,GACArjT,+BAEAA,2BAGAgS,gCACAhS,6BAEAA,mCACAA,+BACAA,0BAIA,gBACA,iCACAgS,0BACA8hC,cAEAuvQ,GACArjT,6BAEAA,yBAGAgS,8BACAhS,2BAEAA,iCACAA,6BACAA,wBAIA,cACA,mBACA,2BAGA,IAIAkmT,GACAQ,GACAC,GACA6C,GACAC,GARAjU,MACAgO,MACA4C,MACAK,MAMA,SAAoBP,KAAOA,KAE3BQ,sBACAC,+BACA6C,iCACAC,4BACAjU,YACAgO,YACA4C,YACAK,YACAA,YACAA,YAIAjR,YACAgO,YACA4C,YACAK,YAEAzmT,0DACAA,6CACAA,2CAEAA,qCACA,sBACA,KAEAA,0CACA,sBACA,KAEAA,wCACA,sBACA,KAMA,cACA,2BAGA,cACA,wBAiCA,mBACAowB,qBACA,kCACApwB,aACAA,eACAw1S,MAiBA,mBACA,yBA2DA,gBAGA,4CAnHAplR,0BACAA,sBACAA,sBAEAA,wBACA,+CAGAA,0BACA,MACA,GACA2jB,eACAjsC,qBACAA,uBAIAsoB,wBACA,6CAGAA,0BACA,MACA,GACApwB,aACA8H,qBACAA,uBAcAmsC,WACAA,WAIApf,eAGAwC,cAQAo4F,WACAA,WACAA,WACAA,WACAA,WACAA,eACAA,eACAA,eAEAA,aACAA,cACAA,aACAA,cAEAtvG,kBACAA,iCACA,cACAq1R,sBAEAr1R,gCACAqjS,6BACAA,kBAEArjS,iCACAq1R,cACAj0S,mBAEA4e,4BACA,mBACAq1R,2BACAA,yBACAj0S,mBAEA4e,8BACA,mBACAsmS,eACAjR,2BACAA,2BACAA,yBACAj0S,mBAEA4e,4BACA,mBACAq1R,2BACAA,2BAEAr1R,8BACA,mBACAsmS,eACAjR,2BACAA,2BACAA,2BAWA,uBAKAnhQ,kBAEA,sBACA,aACAmvQ,aAEAA,aAIA,IAuBA5gC,GAvBA//J,IACA24R,YACAo1E,kBACA99S,eACAg/S,WACAD,0BACAL,gBAEA5hT,UACAE,eAEAsvO,QAEAjvO,YACAI,eACAF,iBAEAogT,kBAIArkM,MACAC,MAGA,mBACA,OACA+5B,iCACA,SAAoB5C,MAAUA,MAC9B,mBACA,UAGA,UAGA,gBACA,6CAMA,gBAOA,QALAA,GACA4C,GACAK,GACAP,GAJA1Q,KAMAA,eAKA,IAHAgO,IADA0C,0BACAx/S,OAEA0/S,IADAA,iBACAA,mBACA5C,OAEA,GADAiD,gCAEA,UAEA,GACAL,IACAA,eACApjM,gBAGA,MAEAwgM,KAEAhO,KAEA,UAGA,gBAEA,qCAGA,gBACA,YAGA,QACA,YAEAu6G,IACAA,YACAvhH,OAEA,IACAgH,YAEgBuc,SAAe,KAAW1O,IAC1Cz+C,MAIA,CAJA,MACcwhD,IAGdh6B,YAGA,cAMA,mBACA,OACA,aAEAo3B,GADAzjT,MACAk/U,OAEAC,WAKAt8D,MAEA,2CAEAl0O,aACA,wDAMAk0O,SAGA,mBACA,cACA,OACAwjC,MAEA,GADA5Q,WACA,aACApjS,EACA,uBACA,2OAKAg0S,0BACc,sBACd,6BACAA,uCAGA,OADA5C,wBAIA,6BACAn3B,wBAEAA,0BACA3+Q,QACA6mG,YAEA,KATA6xM,aASA,CAIA,8BAEA/5B,QACAA,4BACA6yD,wBAOAt6E,OAEAwnB,OAGA,qBACA,KAIA,mBACA,aACA,OACAg6B,GACAK,MAEA,wCAEAr6B,kCAIA,OADAg6B,aAEAK,eAEAjR,YACA,WAIAA,aAEAgO,cACAwxK,oBACA5oM,WAIAxnB,YAGA,eACA,2BACAwnB,2BACAi3B,WACAz+C,QAEkB,qBAClBwnB,QAIA,cAIA,gBACA,OAMA,GAJAi3B,mCACAA,sBAGAA,GACA,UAGA,WAGA,GADA7N,UAEA,UAEA6N,QAGA,cAGA,cACA,cAGA,gBACA,OACAG,SAEA,iCACAhO,GACAgO,oBACAjjS,GACAijS,mCACAz+R,GACAy+R,UACAA,WACA,cACA,YACA,YACA,YACAx+R,GACAw+R,oBACAv+R,GACAu+R,oBACAt8R,GACAs8R,qBACApyS,IACA,EAGA7P,2BACAi0S,gBAEAA,OAEAj0S,gCACAi0S,OAEAj0S,kCACAi0S,OAGAj0S,mBAGA8hT,GAKA,OACA,iJACA2xE,GACA,6IACAC,2BACAjmJ,IACA,uCACA,iCACA,kCACA,6BAAiC,GACjC,2BACA,yBAA8B,GAC9B,4BACA,qBACA,6BACA,4BAAsC,GACtC,oBACA,mBAA6B,GAC7B,iBAA2B,IAG3BotH,IACA,wCACA,uCACA,8BACA,sBACA,oCACA,mCACA,0BACA,oBACA,eAEA9c,wBAEAiC,GACA,0LACAf,IACAzzB,KACAkoK,MACAC,SACAC,SACAC,SACAC,SACAC,SACAC,SACAC,SACAC,UAIA,gBACA,OACAjyK,GAGA0C,GACAQ,GACAC,GACA6C,GALApD,SACAK,4BAKAgD,aACAC,aAEA,OAEA,IADAnoT,aACAi0S,WAAyCA,MAAOA,KAChD,0BACAkR,aACAR,kBACA,MAGA,YAEA,YADA7C,gBAGA,UACA,eAA6C7N,MAAOA,KACpD,0BAEAmR,0BACA,MAGA,YAEA,YADAtD,eACA,CAGA,iBAEA,YADAA,gBAGA,SACA,oBAIA,YADAA,gBAFAmG,MAGA,CAGAnG,2BACArhM,YAEAqhM,eAIA,YACAA,GACA7N,GACAgO,GACA4C,GACAK,GACAP,IAEA,QACAzmG,OACAlxM,eACAkV,gBACAA,gBACAA,iBAGA,WACAijS,yBAGAA,GAGA,gBACA,uBACA,cACA,OACUlR,QACV,QAEAA,GAGA,gBAEA,UACAjtQ,kCACAA,wBACAA,qBACAA,qBAGA,sBACA,WAEA4H,iBACA,SACAqlQ,MACAA,MACAA,OACA92F,WAEAn9M,yBACAiiT,gBACA,EAGA,CAGA,sBACA,MACA,cACU,MAEV,SAEA,uBACAiD,UAEA,OADAL,WACA,MAKA,gBACA,IACA5C,GADAhO,sBAEA,OASA,GARAgO,MACAhO,MACAA,MACAA,MACAA,MACAA,MACAA,QAEAlgK,gBACA,OAGA+tK,SACAA,+BAEAA,2BACAA,mDAEA9hT,sBAEA8hT,eAKA,gBACA,sBACA,WAKAvgG,QACA,yBACAugG,YAKA1jG,QACA,yBACA0jG,YAKAA,WACAA,eAGA/3S,iCAtBA+3S,sBAsBA,CAcA,sBACA,gBACAA,GAEA,SACA7N,GAEAgO,GAGA,gBAEA,yBACA,kBACA,CACAhO,oBACAA,iBACAA,iBAGA,8CAOA,gBACA,OACAgO,GAEAiD,GACAP,GACAQ,GAHAN,MAKA,UAgCA,KA5BAK,UAGApD,yCACA7hH,OAIA,sBACAklH,yBAGArD,sBACA,qBAEA9hT,6BAGAiiT,0BACAH,2BACAA,2BAQA7N,KAAoBA,wBAA+BA,GACnD6N,wBAIA,KAAe7N,KAAOA,KACtB6N,iBACA,qCAKA,gBACA,eAC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AK,iCACAP,KAEA,SAAoBQ,MAASA,MAE7BlD,sBACAA,8BAEA0C,KAGA,aAKA,mBACA91R,qBACA,wBACAg2R,OACA,cACA5C,OACA4C,QAGAA,GACAt+S,gBACA0tS,GACA1tS,gBAKA06U,YACAA,YAIA/yN,WACAA,YACAtvG,iCACAqjS,cACAA,oBAQA,yBAEA,mBACA,IAEAiD,GACAP,GAHA1C,sBAKA,iBACA,KAOA,KAFA0C,OADAO,KADAjD,qBACA,0BACA,cAEA,qBAIA,mBACA,UACA,kBACAA,cACA4C,IACAhxS,aACAiuS,aACAl4L,+BAEAq4L,kCACAl4S,sBACAk4S,IAEAr4L,eAIA,gBAGA,6CAqBA,sBACA,IACAs7L,GADAL,mBAEA,mBACA,yBAEA,aACA,wBAEA,WADA/C,cAEA,iBAEcp0R,uBACdo0R,QAEA,yBACAoD,aAEAzmT,gBACAA,eACA,UACAA,iBAEAomT,WACA5Q,2BACArrL,GACAnqH,KACAi8G,cACA,GACA,GAEkBj8G,yBAClBA,0BACAsL,wBACAtL,8BAGAA,KAEA,+BAIA,mBACA,iBACA,sBACAqjT,QAGArjT,sBAEAA,OAEAA,iBAIA,gBACA,4BAGA,gBACA,qBACAA,qBACAA,eAEAqjT,IACArjT,6BAGAA,KAGA,cACA,mBACAA,wCACU,0BACV,sBACA,SACAA,mBAEAA,qBAGA,YAGA,gBACA,yBAGAqjT,4BAEArjT,2BAJA,CAOA,cACA,OACAA,oDACAA,mDAIA,cACA,0BACA,0BAGA,IACAw1S,GADA6N,MAGA,mBACAA,WAEAuc,IACApqB,gCACAx1S,mBACAA,0CAEAA,sBAGAA,mBAGA,cACA,qCAGA,cACA,oCAGA,cACA,sDApJAsL,4BAwJA,+DAIAsrG,GACA,sKAEA,mBACA,IAGA6vM,GACAP,GACAQ,GALAlD,MAEA4C,QAKA,cACA5C,IACAtZ,oBACAyxG,WACAz6Y,cAEUhB,oBACVsjT,MACAhO,GACAgO,WAEAA,sBAEU4C,iBACVK,oBACAjD,IACAloR,IACAqgX,gBACAjkD,gBACA1lV,gBACAI,gBACA83R,4BAEUkc,iBACVK,oBACAjD,IACAloR,eACAp6B,eACAQ,eACAi6Y,eACAjkD,eACA1lV,eACAI,iBAEU,SAEVoxS,MAEA,sBACA,0BAEAkD,MACAv7L,YACAA,YAGAq4L,OACAtZ,mBACAsZ,gBAGA0C,cAEAyN,0BACAzN,uBAGAyN,2BACAzN,yBAGAA,GAMA,mBAIA,2CAEA,0BAGA,mBACA,UAEA,iBACA1Q,+CACA6N,6CACAG,UAGAA,mDAEAA,GAGA,mBACA,OACA,mCAIAhO,aACA6N,gBACAG,eAEAA,cACAk+F,8BACAl+F,sBAGAA,IAZA,CAAqBk+F,yBAgBrB,mBACA,uBACA,OAEA,gCACAtvY,EACAojS,GACA,YACAA,GACA,uDACAA,GACA,kGAGA0Q,MACA1C,MACA4C,OAIAj8L,QADAlO,UACAonM,IACArjT,MAIA,yBACA,wBACAkmT,gBACAQ,mBAEArD,eAKA+C,gBAEAM,IACAh3S,4BAEAw2S,IACAxtR,kCAEA+tR,IACApD,qCAEA+C,IACA96S,2BA5FA2wG,mBACAA,cA+FA,mBACAoO,qBAEA,gBACA,gDAIA,gBACA,OACAj1G,OACApU,OACAopH,QACAlqH,OACAw5T,QACAlzD,QALApxP,MAMAiuS,EACA,CAIA,gBACA,IA4BAoD,GACAP,GA7BA1Q,iBACAgO,MACA4C,IACA,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MAIAM,aAEA,SAAoBD,MAAiBA,MACrCP,UACA1C,gBAGA,cAGA,gBACA,aACAA,MACA,YACAA,GAGiB,IAFjBH,uBACA,uBACiB38S,QAEjB8uS,OAGA,gBACA,IAUAiR,GACAP,GAXA1Q,iBACAgO,MACA4C,IACA,UACA,UACA,UACA,WACA,WACA,YAKA,SAAoBK,aAAuBA,MAC3CP,UACA1C,gBAGA,cAGA,mBACA,6BACA,aACA,WACAA,MACA,WACAA,KACA,UACAA,KACA,UACAA,KACA,UACAA,KACA,WACA,WAGA,mBAEA,uBACAxxH,aAGcywE,kBACd4gD,gBACA7N,WACctF,mBACdsF,gBACA6N,YAPAA,UACA7N,YAWA,gBACA4Q,8BACAK,yCACAP,GACA1Q,KACAnjS,WACAmjS,qBACAA,QAEA,mBACA0Q,gDAIA,cACA,mBAGA,mBACA,uBACA,0CAIA,iBADA1Q,0BAEAx1S,4BAEAwjT,gDANA,CAUA,mBACA,uBACA,0CAIA,iBADAhO,0BAEAx1S,4BAEAA,8CANA,CAUA,yBACA,uBACAkmT,mBACA,uDAKA,OAFAE,aAEA,GACApmT,qBACAA,wBACA,YACAA,sBACAA,oBATA,CAaA,mBACA,IACAomT,GADA5C,mBAEA,0CAIA,iBADAhO,0BAEAx1S,+BAEAomT,gBAEApmT,wCACAomT,sCATA,CAcA,mBACA,+CAGA,mBACA,gDAGA,sBACA,aAEA,mBACA,WAKA,KAFAA,gBAEAvtQ,UACA,WAOA,OAJA4tQ,yCAEAjR,WAEA,IACA,OACA0Q,kBACA,UACA,QACAA,eACA,UACA,UACAA,iBACA,UACA,SACAA,iBACA,UACA,SACAA,iBACA,UACA,OACAA,kBACA,UACA,MACAA,sBACA,UACA,OACAA,uBACA,cAEAA,WAGA,oBAGA,mBACA,uBAGA,iBAGA,IAIAA,GAJA1C,oDAEA4C,+BAIA,OAGAF,GAHA1Q,SAGAA,WAFA6N,gCAMA7N,QAFA6N,8BAEA+C,MAIA5C,UAMA,cACA,4EAGA,gBACA,mBACA,YAEA,eACAA,8BACA,mCACA3tP,GACA2tP,GACAhO,GACA,iCACA,gCAGAnjS,+BAEAmjS,GACAx1S,4BAEA,iDACAq7M,cACA9yK,wBAGAstB,GACA2tP,GACAhO,gEAUA,cACA,mBACA,0CAEA,IAEAgO,GACA4C,GACAK,GACAP,GALA7C,YACA7N,MAKA,wBACA6N,wDACA7N,QAEAgO,gBACA4C,qDACAK,2BACAP,aAEAlmT,yBAGA,gBACAqjT,KACAA,gBACA/3S,mBACAA,iBAEA,mBACA,wCAGA,mBACA,OACAtL,iBACAoV,uCAEA6mG,IAAoCw3B,kBACpC67B,sBACAqmT,cAEA31d,gCAIA,gBACA,0BAGA,mBACA,OACAA,iBACAoV,uCAEA6mG,IAAoCplE,kBACpCy4H,sBACAqmT,cAEA31d,gCAIA,gBACA,wBAMA,gBACA,OAEA,mBACAA,oBAGA,OADAw1S,aAEAx1S,iBAEAA,MA1HAsL,uCACAA,4CA6HA,SACA,kJACA,aACA,mBACAtL,kBAEAA,kBAKA,cACA,oBAGA,WACA89V,SACAztH,SACAuB,cAGA,mBACA,oBAGA,sBAEA,qBAEA,0BAEA,6BAIA,sBAEA,qBAEA94N,0BAEAA,mBAIA,gBACA,UAEA,aADAuqS,YACA,oCACA,YAKA,OAFAG,qBAEAH,QACA,OACA7N,uBACA,UACA,UACAA,MACAx1S,YACAA,4BACA,GAEA,UACA,QACAw1S,kCACA,UACA,OACAA,MACAx1S,YACAA,aACAA,4BAEA,UACA,UACAw1S,MACAx1S,YACAA,aACAA,mCAEA,UACA,UACA,OACAw1S,4CACA,UACA,OACAA,qBACAA,OACAA,uCACAnlE,IAEA,UACA,SACAmlE,qBACAA,cACA,UACA,SACAA,qBACAA,cAIA,2BACAlqS,wBACAtL,KAGA,gBACA,UAEA,aADAqjT,YACA,oCACA,YAKA,OAFAG,qBAEAH,QACA,OACA7N,2BACA,UACA,UACAA,GACAgO,GACAxjT,YACAA,8BACA,GACA,EACA,UACA,QACAw1S,sCACA,UACA,OACAA,GACAgO,GACAxjT,YACAA,aACAA,8BACA,EACA,UACA,UACAw1S,GACAgO,GACAxjT,YACAA,aACAA,qCACA,EACA,UACA,UACA,OACAw1S,gDACA,UACA,OACAA,qBACAA,IACAnlE,GACAoB,GACA+jE,uCACAnlE,IAEA,EACA,UACA,SACAmlE,qBACAA,mBACA,UACA,SACAA,qBACAA,mBAIA,2BACAlqS,wBACAtL,KAGA,cACA,+CAGA,cACA,sCAGA,cACA,gCAGA,cACA,YACA,OACAqjT,UACAA,WACAA,UACAA,UACAA,YACAA,YACAA,kBAIA,cACA,YACA,OACAv+Q,gBACA8qI,kBACAv3D,eACAkpS,iBACAC,qBACAC,qBACAC,gCAIA,cAEA,8CAGA,cACA,eAGA,cACA,YAAwBngZ,SAGxB,cACA,wBAGA,cACA,OACAytG,cACApyC,eACA0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L,yBAGA,WAAsBnhI,aAAmBA,QACzCl0J,UAYA,cACA,4BAGA,cACA,mDAdAm0J,yBAIAlkJ,uBACAA,wBAYA,mBAwGA,gBACA,kBAGA,cACA,4CAGA,gBACA,UA/GAylJ,UACAA,eACAA,YACAA,WACAA,YACAA,aACAA,WACAA,cACAA,SACAA,YACAA,UACAA,gBACAA,cACAA,eACAA,gBACAA,aACAA,oBACAA,qBACAA,cACAA,WACAA,aACAA,iBACAA,UACAA,UACAA,mBACAA,UACAA,cACAA,eACAA,cACAA,eACAA,aACAA,kBACAA,cACA,+CACAA,wDACA,oCAGAA,aACAA,eACAA,WACAA,cACAA,mBACAA,cACAA,gBACAA,cACAA,cACAA,WACAA,gBACAA,eACAA,kBACAA,0BACAA,YACAA,kBACAA,oBACAA,0BACAA,kBACAA,sBACAA,qBACAA,4BACAA,WACAA,kBACAA,cACAA,iBACAA,gBACAA,oBACAA,wBACAA,wBACAA,kCACAA,gBACAA,UACAA,YACAA,gBACAA,2BACAA,YACAA,cACAA,kBACAA,YACAA,YACAA,eACAA,eACAA,WACA,kDACA4L,IAEA5L,YACA,mDACAlmK,IAEAkmK,WACA,iDACAhzG,IAEAgzG,UACA,2GACAhoC,IAEAgoC,kBACA,0GACAz/D,IAeA,mBAuCA,yBACA,YACA8vM,kBACA,qBAGA,sBAQA,GAPAhmT,QACAs1S,MACA6N,WAGAA,UAEA,SACA,4BAGA,OACAoD,MACA,SAAoBL,MAAQA,KAC5BK,4BAEA,UAWA,yBACA,sBACAvmT,QACAsjT,MACAhO,WAGAA,YAGAgO,GADAhO,MAEA6N,MAEAnjT,QACAsjT,MACAhO,WAGAA,WAGA,IAEAkR,GAFAD,QACAP,qBAEAS,MAEA,YACA,iCAGA,SAAoBD,KAAOA,KAC3BC,iCAEA,UAGA,mBACA,0BAGA,mBACA,+BAGA,sBACA,+BAGA,sBACA,oCAGA,sBACA,kCA5HA1wI,eACAA,qBACAA,kBACAA,cACAA,eACAA,iBACAA,mBACAA,iBACAA,UACAA,WACAA,gBACAA,sBACAA,oBACAA,oBACAA,sBAEAA,aACAA,kBACAA,kBACAA,kBACAA,uBACAA,WACAA,qBACAA,qBAEAA,eACAA,kBACAA,oBACAA,oBAEAA,oBACAA,yBACAA,uBAEAA,WACAA,eA4FA2uF,SACAo6I,MACA,CACA00E,mBACAE,UACAvmJ,SACA3/T,mBACA2wY,YACAs1E,WAEA,CACAD,mBACAE,WACAvmJ,SACA3/T,qBACA2wY,YACAs1E,YAGA9B,8CACAC,qBACA,aAWA,WATA,kBACA,KACA,OACA,KACA,OACA,KACA,OACA,KACA,KACA,IAMAxmd,SACA,wDACAs5P,IAEAt5P,aACA,gEACA2zU,IAGA,gBAEA,cACA,kBAEA,iDACAj/U,0BACAA,8BAEAqjT,oCACAA,0BACAA,0BACAA,sBACAA,wBACAA,sBAEArjT,KAGA,yBACA,iBAEA,6CACAqjT,sBACAA,0BAEAA,aAIA,mBACA,wBAIA,mBACA,yBAGA,gBACA,YACAp0R,eAEAA,cAIA,cACA,IAIAw3R,GACAP,GACAQ,GACAC,GACA6C,GARAnG,sBACA7N,cACAgO,gBACA4C,cASA,OAEA/C,qBACAA,sBAGAA,wBACA7N,KACAgO,MAKA4C,uBAEAK,cACAL,iBAEAF,aACAE,iBAEAM,aACAN,eAEA5Q,cAIAgO,IADAgG,cAEAhU,eAGAmR,aACAnD,OAEA4C,WACAA,aACAA,YAEApmT,KAGA,gBAGA,sBAGA,gBAEA,sBAGA,gBACA,mBACA,WAEA,OACAwjT,GACA4C,sBAIA,cAFA/C,YAEA,4BAGA,OAFA7N,uBACAgO,uBACAH,QACA,QACA,cACA,UACA,gBACA,OACA,kBAKA,OADA7N,2CACA6N,QACA,OACA,0BACA,MACA,uBACA,OACA,yBACA,SACA,0BACA,SACA,2BAEA,cACA,uCAEA,qCAMA,cACA,sBAIArjT,mBACA,iBACAA,uBACA,4BANA42C,IAUA,gBACA,kBACA,oBAIA,gBACA8oR,WACAG,WACAG,WACAJ,WACAh4L,WACA+3L,WACA9qB,WACAuqD,WAEA,cACA,gBAGA,gBACA,iBACAp/V,kCAGA,gBACA,kBACA,0CAIA,0BACAs/V,iBACAC,iBACAC,eACAC,cACA5M,gBACAn0B,eAEA,cACA,yBAGA,kBACAo3J,IACAt2J,MACAptT,KACAJ,KACA0lV,KACAikD,KACAj6Y,OACAR,MAIA,4BACA,yCAGA,yBACA,oBACAglT,kBACAQ,kBACAC,kBACA6C,kBACAC,kBACAC,kBACAC,kBACAC,GACA1D,qBACAA,oBACAQ,cACAA,oBACAC,cACAA,oBACA6C,cACAA,mBAEA,oBACAI,GACAA,IACAF,cACAA,qBAEAE,OACAH,cACAA,oBACAE,yBAEA,MACAC,YACAA,SACA+U,kBAIA,gBACA,mBACAY,GAEA,wBACAA,OACA,EAEA,CAIA,mBACA,8BAGA,OACAu2J,QAEAA,UACA,WACAA,aAEA,IAGA,mBACA,mBACA,uCAGA,IAEArvK,GACAP,GAHA1C,MACA4C,MAIA,4BACA5Q,MACA6N,OAEA,uBACAG,OAEA,sBACA4C,oBAAiC0vK,OACjC,0BACA1vK,eAKAF,kBADAO,sBAGAjD,KACA0C,4BAGAO,kBAGA,gBAEA,gBACA,yBAGA,cAQA,mBACA,uCAGA,IAGAL,GACAK,GACAP,GACAQ,GAEA8C,GACAC,GACAC,GACAC,GAXAtG,8BACA7N,kBACAgO,oBAKAmD,oBAMA,WAOAP,aACAK,aACApD,OACA+C,OAGAF,aACA1C,OAGAkD,4CAEA8C,eACAC,oCACAC,kCACAC,0CAGAH,GACA,KACAtD,kBACA1C,kBACAhO,kBACAiR,oBACAA,kBACAL,kBACA/C,kBA9BA,MAkCA;;AA2DA,OAzDAD,cACAA,UACAA,UACAA,eACAA,SACAA,qBACAA,gBACAA,gBACAA,cACAA,aACAA,cACAA,eACAA,iBACAA,cACAA,cACAA,cACAA,YACAA,UACAA,mBACAA,cACAA,cACAA,YACAA,WACAA,YACAA,aACAA,YACAA,eACAA,kBACAA,eACAA,aACAA,aACAA,iBAEAA,iBACA,sFACAD,IAEAC,WAIAhzR,mBACAA,sBAIAq/F,WACAA,WACAtvG,0BACAqjS,qCAEArjS,0BACAqjS,yBAKAl4S,mBAEAhH,MAEAgH,QACAA,SACAA,SACAA,SACAA,QACAA,UACAA,YACAA,WACAA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,oBAEA,6BACAA,oBAEA,6BACAA,oBAGAA,mBAEAA,uBAIA,aAA2BskI,oBAC3BtkI,oBAGA,WAAsBskI,eACtBtkI,uCAKAglC,yBAGA,WACAhlC,oBAKAglC,6BAGA,WACA,wDAEA,qDAEA5J,mDACAp7B,gDACAA,2BACAA,6BAQAglC,wBAKA,qBACA,SAA+B5J,OAC/Bp7B,6BACAA,aACAA,iEAEAA,cACAA,iBAEAA,yBACAA,+BACAA,wBAKAglC,yBAGA,WACAhlC,yBAwCAglC,yBAsCA,gHACAhlC,yBACAA,sBACAA,iBA95BA,cAEA,UACA,gCACAglC,sCAGA,2BACA,aAEAvhB,kDAGA,CAi5BArY,GACApL,0BACAA,4BACAA,uBACAA,sBACAA,uBACAA,uBACAA,wBACAA,0BACAA,2BACAA,4BACAA,6BACAA,wCACAA,0CACAA,mBACAA,sCACAA,mBACAA,uBACAA,uBACAA,uBACAA,2BACAA,2BACAA,8BACAA,4BACAA,4BACAA,gCACAA,6BACAA,kCACAA,wBACAA,6BACAA,8BACAA,iCACAy4B,KACAz4B,0BAEA,gBACAA,uBACAA,0BAEA,YACA,+BACAA,iCAOAglC,0BAIA,aACA,wCACA,QACA,QACA,QAYA,QAEAhlC,yBAZA,IACA,QACA,QACA,YACAA,mBACA,UACA,QACA,QACA,UACAA,mBAGA,EAOAglC,6BAIA,aACAhlC,sBAOAglC,6BAKA,gBACAhlC,sBACAA,wBAQAglC,gCAMA,mBAIA,YAHA,SAA+B5J,YAC/B,SAAiCrF,OAGjC,iEACA83D,uCACA7tF,YACA6tF,qCAIAA,qCAEAA,iBACAA,qDAEAA,KACA7tF,aACAA,yBACA,gEACAA,eAEAA,gCAMAglC,sBAGA,WACA,wBACAhlC,yBAEA,iCACAA,yBAOAglC,uBAIA,aACAhlC,sCAA+Cq4d,oCAM/Crzb,yBAIA,aACAhlC,wCAAiDq4d,oCAMjDrzb,yBAIA,aACAhlC,YACAA,6CACAskI,qDACAtkI,wDACAA,qEAK6D,IAJ7DA,8BAIA,aAA8B,wBAA+B0G,SAC7D1G,wBACAA,wDAGAA,8CACAA,oBACAA,mDAEAA,uDAEAA,0BACAA,0BAQAglC,2BAIA,aACAs/F,qBACAtkI,kBACAA,uDAEA,gCACAA,yBAOAglC,2BAIA,aACAs/F,qBACAtkI,8CACA,iCACAA,oBACAA,mDAEAA,yDACAA,yBAEAA,wCAMAglC,4BAIA,aAEA,sCACAhlC,wBAEA+1B,qDACAqF,UACAp7B,wCAMAglC,2BAIA,aACAhlC,wBACAA,wBACAA,yBACAA,sCACAq4d,mBACApsd,kBACAs3F,yBAEAvjG,sCACAq4d,oBACApsd,kBACAs3F,0BAOAv+D,yBAIA,aACAhlC,wBACAA,yBACAA,yBACAA,sCACAq4d,aACApsd,kBACAs3F,0BAOAv+D,2BAIA,aACAhlC,wBACAA,yBACAA,sCACAq4d,eACApsd,kBACAs3F,0BAOAv+D,2BAIA,aACAhlC,wBACAA,yBACAA,sCACAq4d,eACApsd,kBACAs3F,0BAOAv+D,wBAIA,aACA,aACAhlC,6BAEA,CACAskI,kBACAA,WAGA,wCACA,iCACAlpG,iDAGA,mBACArF,KACAuuG,cACAA,uBACApzG,UACAliB,IAIA,aAAmC,eACnCs4B,UAEA,iCACAg9F,8CAEAtkI,mCAEAA,qCACAgvG,YACAy1M,SACAx4S,SACAs3F,2BAQAv+D,wBAIA,aAEA,0CAEAjP,sCACAA,KACAqF,gBACAp7B,sCACAA,yBACAA,0BAEAA,qCACAgvG,YACAy1M,SACAx4S,WACAs3F,0BAOAv+D,yBAIA,aAEA,0CAEAjP,sCACAA,KACAqF,gBACAp7B,sCACAA,yBACAA,0BAEAA,qCACAgvG,aACAy1M,SACAx4S,WACAs3F,0BAOAv+D,0BAIA,aAEA,0CAEAjP,sCACAA,KACAqF,gBACAp7B,sCACAA,yBACAA,0BAEAA,qCACAgvG,cACAy1M,SACAx4S,WACAs3F,0BAOAv+D,wBAIA,aAEA,0CACA5J,KACAp7B,uBACAA,yBACAA,0BAEAA,qCACAgvG,YACAy1M,SACAx4S,kBACAs3F,0BAOAv+D,0BAIA,aAEA,0CACA5J,KACAp7B,uBACAA,0BAEAA,qCACAgvG,cACAy1M,SACAx4S,kBACAs3F,0BAOAv+D,0BAIA,aAEA,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wL,MCpKY4oB,CAAmB/oB,yBAClDA,aD8KO,sBACP,OAAWtP,QAAc,KACjBiE,EAAWqL,IACXrL,EAAWuL,IACXvL,EAAWwL,IACXxL,EAAWglC,MCnLiBzQ,CAAoBlpB,sCACtC,QAAK,kDEnCvBmqB,gBAEA,cAGA,oBADA,iKACA95B,IACA,CAEA,OAPI,QAAS6P,OAObA,GARA,CASCw3R,OAGDhrQ,gBAEA,cAGA,oBADA,2MACAr8B,IACA,CAEA,OAPI,QAAS6P,OAObA,GARA,CASCw3R,OAGD9qQ,gBAEA,cAGA,oBADA,8QACAv8B,IACA,CAEA,OAPI,QAAS6P,OAObA,GARA,CASCw3R,OAGD5qQ,gBAEA,cAGA,oBADA,0EACAz8B,IACA,CAEA,OAPI,QAAS6P,OAObA,GARA,CASCw3R,OC3CD3qQ,KACA6yF,KACAgI,KACA/H,KACAC,KACA1nG,KACAunG,YACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,UAiGAnvG,IACAjf,eACA,gBACAquH,SACAgI,WACA9H,MACA1nG,MACekI,GAAMyM,QAErB1qB,eACA,iBACAu9G,UACAgI,WACA9H,MACA1nG,MACekI,GAAMyM,QAErBj7B,eACA,gBACA8tH,SACAgI,SACA/H,SACe3/F,GAAiBlgB,sCAEhC5P,eACA,OAAkB8vB,GAAiBlgB,uDACnC,mBACA6/G,YACA9yF,UACA6yF,UACA1/G,IAEAgwC,gBACA,wBACA03E,MACA/H,OAEA,OAAkB3/F,GAAiB6M,+CACnC,gBACA8yF,SACA9yF,SACA6yF,SACA1/G,IAEAuC,gBACA,wBACAmlH,MACA/H,OAEA,OAAkB3/F,GAAiB6M,2DACnC,mBACA8yF,YACA9yF,UACA6yF,UACA1/G,IAEA6U,eACA,gBACA8qG,SACA9yF,SACA6yF,SACev/F,GAAoBrgB,oBAEnCwB,eACA,OAAkB6e,GAAoBrgB,qCACtC,mBACA6/G,YACA9yF,UACA6yF,UACA1/G,IAEAjO,eACA,sBACA21H,MACA/H,QAGA+H,cACA/H,eAEA,OAAkBx/F,GAAoBunG,mBACtC,qBACA/H,cACA9yF,SACA6yF,SACA1/G,IAEAvE,eACA,sBACAisH,MACA/H,QAGA+H,cACA/H,eAEA,OAAkBx/F,GAAoBunG,yBACtC,iBACAhI,UACA1/G,IAEAuF,eACA,oBACA,gBACAm6G,SACA1/G,IAEA/P,eACA6P,UACAA,UACA,oBACA,gBACA4/G,SACA1/G,IAEAsC,eACA,gBACAo9G,SACAgI,WACennG,GAAMsM,QAErBz7B,eACA,iBACAsuH,UACAgI,WACennG,GAAMsM,QAErBmgX,eACA,gBACAtlR,WACennG,GAAMsM,QAErBg7T,eACA,iBACAngO,WACennG,GAAMsM,QAErB/lB,eACA,gBACA4gH,WACennG,GAAMsM,QAErBp7B,eACA,iBACAi2H,WACennG,GAAMsM,QAErBh3B,aACA,OAAkB0F,KAClB,aACAmkH,MACA5/G,IAEA6C,aACA,OAAkBpH,KAClB,aACAmkH,MACA5/G,KAGAyQ,sBAIA,QAHAkpB,8DAEA3E,MACAsB,QAFA73B,8BAEoC63B,aAAoBA,MACxD,cACAuD,uBACA7E,QAAkB9U,cAAuB,OAEzC,WAGAzhB,uCACA,wBACAs2B,gBACAC,gBACA70B,gBACAw5B,gBAGA,QAFAiuF,+BAEAA,YADA/H,+BACAA,WACAvpF,OAEAn2B,IADAm2B,iBAEAqD,QAEA,aACAC,SACAC,UACAC,SACAC,cACAe,cACAqE,eACAC,eAEAkB,OADAnB,gCACA,IACAmB,OACAA,MAEA,qBACA8E,UACA7E,QAEA,6BACAK,yBACAC,2BAEAS,GADAhiB,wBACAuhB,GACAS,aACAA,cAEAA,eACAA,eAIA,QAFAC,6CACAC,MACA0D,KAAoBA,MAAcA,MAClC,mBACAnC,mBACAvB,iCAEA,WAEA3/B,oCACA,YACAsyB,UACAY,SACAC,QACAsB,cACAoC,uCACApZ,aACAsa,mCACAC,mCACAC,mBACAC,mBACAe,sBACAqE,sBASA,MARA,CACA/K,YACAW,YACAX,YACAW,YACAX,YACAW,YAEA,EAEOnkB,gBAA2C,OA1QlD,aAEAmc,oBAGA,QADA7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A,EACA8P,0BACAilC,gBACA,EACA,aAEA,GADA/0C,eACAwle,SAFA,WAGA,EACAzwb,UACAA,gBACA,EACA,YACA,WACA,EACAjlC,2BACAilC,gBACA,EACA,aAEA,GADA/0C,gBACAwle,SAFA,WAGA,EACAzwb,UACAA,gBACA,EACA,YACA,WACA,kBAqBAplC,+BACA,qBAAkCE,QACnB,QAAS7P,8BACxB,qBACA,OAAmB,QAAWA,kBAC9B,sBACA,EACA,mIACwB,QAAQspC,oCACR,QAAQyL,kCACR,QAAQ/Q,+BAChC+Q,wBACA/0C,eACA,sBACA,EACA,iBAEA,IADAspC,GAAoDjpC,KAAkBA,MACtEole,sDAoBA91d,uCACA,qBAAkCE,QACnB,QAAS7P,8BACxB,mBACA,OAAmB,QAAWA,iBAC9B,qBACA,EACA,4CAAmG,QAAM6P,iBACjF,QAAQy5B,0BAChC,uBACA,EACA,mBACAu5B,IAAiC,QAAc9tB,IAC/C,qCAA8E8tB,aAK9ElzD,uCACA,sDACAG,YACAw5B,sBACAtpC,qBACAA,6BACAspC,OAAsBjpC,QAAU,aAChCL,oBACAspC,OAAsBjpC,QAAU,kBAChCL,0BAEA2P,oCACA,0DACA,iBAAoCtP,KACpC,UACA,4BACA,+DACAyP,IAEAH,sCACA,iBACA,UAAsB0sB,GACtB,qBAEA1sB,GA5vBA,GA8vBA,SAAeH,kQChxBf7N,EACAyqR,yBCCA9nR,eAEA,mBACA,IACAutT,4CACA,6BACA,CAEA,OAPI,QAASxlC,OAObA,GARA,CASCgb,OAEDh+R,eAEA,gBACA,IACAikS,4DACA,6BACA,CAEA,OAPI,QAASjhB,OAObA,GARA,CASCgb,OAEDhjS,eAEA,mBACA,IAOAmqS,4BANAn+R,kBACAuyQ,oBAEA,OADA07D,OACA,GAEA,WACAh3S,uCACA07E,yBACA,6BACA,CAEA,OAdI,QAASqpK,OAcbA,GAfA,CAgBCgb,OAEDr1R,eAEA,gBACA,IACAs7R,uCACA,6BACA,CAEA,OAPI,QAASjhB,OAObA,GARA,CASCgb,OAEDvnS,eAEA,mBACA,IACA+xT,gDACA,6BACA,CAEA,OAPI,QAASxlC,OAObA,GARA,CASCgb,OAaDnnS,GAXA,aAEA,gBACA,IACAotS,kCACA,6BACA,EALI,QAASjhB,MAOb,CARA,CASCgb,OAED,aAEA,mBACA,IACAwqB,mCACAjvC,6DACA,6BACA,CAEA,OARI,QAASyJ,OAQbA,GATA,CAUCgb,QAEDrmS,eAEA,mBACA,IACA6wT,yCACAjvC,wDACA,6BACA,CAEA,OARI,QAASyJ,OAQbA,GATA,CAUCgb,OAEDpmS,eAEA,sBACA,IACAutS,6DACA,gCACA,CAEA,OAPI,QAASniB,OAObA,GARA,CASCrrR,GAEDE,eAEA,mBACA,IACA2wT,sEACA,gCACA,CAEA,OAPI,QAASxlC,OAObA,GARA,CASCrrR,GAEDK,eAEA,gBAGA,uBADA,uCACArB,IACA,CAEA,OAPI,QAASqsR,OAObA,GARA,CASCrrR,GAEDM,eAEA,gBAGA,uBADA,+BACAtB,IACA,CAEA,OAPI,QAASqsR,OAObA,GARA,CASCrrR,GAEDO,eAEA,gBAGA,uBADA,qEACAvB,IACA,CAEA,OAPI,QAASqsR,OAObA,GARA,CASCrrR,GAEDQ,eAEA,gBAGA,uBADA,mBACAxB,IACA,CAEA,OAPI,QAASqsR,OAObA,GARA,CASCrrR,GAEDS,eAEA,gBAGA,uBADA,wBACAzB,IACA,CAEA,OAPI,QAASqsR,OAObA,GARA,CASCrrR,GAEDU,eAEA,mBACA,IACAmwT,sCAAsD,QAAa7uM,QACnE,gCACA,CAEA,OAPI,QAASqpK,OAObA,GARA,CASCrrR,IDxLDorR,GA0DCzqR,WAzDDyqR,kBACAA,mBACAA,4BACAA,8BACAA,0CACAA,wBACAA,8CACAA,sBACAA,4BACAA,gCACAA,kCACAA,sBACAA,wBACAA,sBACAA,0BACAA,sCACAA,sBACAA,oBACAA,oBACAA,wBACAA,sBACAA,sBACAA,oBACAA,wBACAA,wBACAA,sBACAA,8BACAA,oCACAA,gBACAA,gBACAA,gBACAA,gBACAA,gBACAA,gBACAA,gBACAA,gDACAA,gCACAA,kDACAA,gBACAA,gBACAA,iBACAA,iBACAA,iBACAA,iBAC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lhB,8CACA,0BAA4B,QAAepsR,eAC3CA,2BAEAosR,2CACA,OAAe,QAASpsR,8BACxB,aACA,OAAmB,QAAWA,kBAC9B,sBACA,2CACA,EAWA,OAVAgjH,aACAsqL,6BACAukB,WACAj8Q,YACAm5V,gBACAK,2BACAy2F,sBACAG,qBACAC,eAEArjN,IACAyJ,iBACA,QAGA,0BAOAD,8BACA,sBAEAA,2CACA,OAAe,QAASpsR,8BACxB,UACA,OAAmB,QAAWA,kBAC9B,sBACA,8CACA,EACA,oBACAgjH,WACAptE,YACAm5V,mDACAK,2BACAa,eACAC,SAA0C9+X,MAAY,SACtD++X,SAA0C/+X,MAAY,YACtDg/X,cAEAC,kBACAI,yBAEA,0BAKArkH,8CACA,OAAe,QAASpsR,8BACxB,8CACAi1X,GACA,OAAmB,QAAWj1X,kBAC9B,sBACA,0CACA,EACA,oBACAgjH,cACAsqL,wFACA8xC,8DACA41C,gBACAp/U,sBACA25V,2BACAE,MAAuCxqX,GAAejlB,WACtDwvY,mCACAG,eACAC,aACAC,cACAC,sBACAC,mBAGAL,UAEA1vY,yCACAi1X,KACA,0BAKA7oG,sCACA,OAAe,QAASpsR,8BACxB,OAAmB,QAAWA,kBAC9B,6BAIAosR,0CACA,OAAe,QAASpsR,8BACxB,aACA,OAAmB,QAAWA,kBAC9B,sBACA,EACA,8BACA,8BACA,EACA,kCACA+uY,+CAEA,0BAKA3iH,2CACA,OHjMO,gBAIP,QAHAxJ,MACA5/J,aACAsqL,MACAukB,kBAA2CA,MAAWA,MACtD,cACAjtD,YACAs6E,UACAE,UACAH,iBAEA,GADA3xC,qCACA,kBACA,UACAoB,IACAl9R,WACAA,YAEAoxQ,iBACA5/J,MACAsqL,OAGA,cG2KmBntR,CAAUngB,kDAC7BgjH,sBACA,wBAEAopK,kCACA,oBAEAA,sCAIA,QAHAC,4BACAzJ,MACA5/J,MACAsqL,kBAA+CA,MAAWA,MAC1D,cACAgxC,YACA15E,oBACAs6E,oBACA,OACAt8D,YAEAhe,WACAge,YACAA,YACA5/J,OAEAA,oCAEA,mBACA4/J,IAEAwJ,GAtNA,GAwNA,SAAehlQ,GC1Nf,mBAEA,mBACA,iCACA,wCACAkmR,aACAA,cAA2BhiS,iBAAiB,WAAe,mBAC3DgiS,sBACAA,GAEA,OATI,QAASjhB,OASbA,uBACA,OAAe,QAASrsR,8BAExB,OAAmB,QAAWA,kBAC9B,sBACA,+BACA,EACA,MACA,UADA6xT,UACA7uM,WAKAqpK,qCAGA,QAFArpK,+BACAsqL,wBACAukB,kBAA+CA,MAAWA,MAC1D,cACAjtD,gCACA5kQ,qBACAA,8BACAstS,QAA4B,QAAsB1oC,MAElD,oCACe78O,MAAeulR,cAE9BjhB,8BACA,wBAEAA,kCACA,yCAEAA,sCACA,YACA,mCACA,UACAzJ,UACAsjN,eACAvxc,uBAA+C,qBAC/CA,oBAAyC,WAAe,QAAgBk9R,OACxEl9R,wBAA8C,mBAG9C03P,GArDA,CAsDE5mR,IACF,SAAeC,EC9Df,IAOAyC,GAPAD,IACA,kBACA,kBACA,kBACA,kBACA,oBAGA,aACAkkR,2BACAA,yBACAA,2BAHA,CAICjkR,aACD,QACA,gBACA,eACA,iBAOAsG,cACA,4BACAzO,kBACAA,yBACAA,cACAA,eACAA,mBAEA,2BACA,OAAe,QAASA,8BACxB,4BACA,OAAmB,QAAWA,kBAG9B,GAFA4iR,2BAEA,QADAA,gBAEA,yCAEA,IADA0qB,KACAA,mBACAukB,oBACAvkB,OACAplS,kBAEAolS,qBAEA,oBACA,gCASA,GARAA,MACAkB,qBACA8vC,oBACAhxC,MACA1oC,oBACA0oC,MACA4xC,uBACAE,WAEA,yCACA,MACA,sBADAA,IACA,MAIAhzD,8CACA,OAAe,QAASpsR,8BACxB,OACA,OAAmB,QAAWA,kBAU9B,OATAgjH,6BACAptE,eACAm5V,gBACAC,uCACAt6R,iBACA6E,mBACA21R,2BACAD,qBAEArsH,IACAyJ,iBACA,QAGA,yBAMAD,GAjEA,GAmEA,SAAe39Q,GC3Ff,iBACA,gBACA,YACAzO,uBACA,4CACA87V,qBACA,uCACAptD,IAEA1uS,2CACA,IACAi1X,GADAD,aAEAhmJ,sBACA4zC,oBACAqyG,sBACAD,KACAhmJ,OAEA,UACAswG,aACAiC,UACAf,KACA19H,KACA,UACA,aACA,wBACArD,YACA28I,YACAA,YACAA,YACAA,yBACAt5I,WAIA,aACA3tE,oBACAinN,kBACAA,kBACAA,kBACAA,yBACAt5I,QAIA9iN,6BASA,QARA0uS,GAAuB/3R,YAAYisQ,YACnCk5E,uBACAk5B,eACAC,gCACAjmJ,aACAotH,KACA9c,KACAiC,KACAjC,QACA,sBAEA,EACA,aAAwCkB,MAAoBA,KAC5Dy0C,kBAEA,WAGA,EACA,SAAwCz0C,MAAoBA,MAC5D,gBACArrM,qBACA8/O,qBAEA,WAGA,EACA,SAAwCz0C,MAAoBA,MAC5D19H,gBAEApD,cADAD,kBACAq8I,SACAxmN,cACA2/O,qBAEA,WAGA,EACA,SAAwCz0C,MAAoBA,MAC5D19H,gBACArD,iBACAtqE,qBACAuqE,yBACApqE,cACA2/O,wCAEA,WAGA,EACA,SAAwCz0C,MAAoBA,MAC5D19H,YACArD,iBACAtqE,qBACAG,UAHA,IAIAoE,UACA,UACApE,YAEA,CACA,IAGA4qD,cACAuf,SACA+gI,MACAlrM,OANA8mN,SACA38I,MACA+gI,OAKA9mM,cAEA,gBACAymD,mBACAvqD,mBACA4rD,mBACAx/E,UAEAA,GADAm+E,eACAhrD,GAEAS,OACAN,GAGAoE,GAEAu7O,qBAEA,cAGA,uDAGA74B,KAEA,WAEAp8V,uBAEA,QADA87V,MACAk5B,KAA4BA,MAAcA,KAC1Cl5B,yBAEA,WAEA97V,2BAKA,OAJA4iR,sBACAA,sBACAA,qBACAA,iBACA,EAEA5iR,8BAMA,QALA0uS,cACAotD,+BACAk5B,uCACAC,KACAjmJ,KACAotH,KAA4BA,aAAoBA,MAChD44B,gBACAA,kBACAA,kBACA,gBACAA,4BAEA,WAEAh1X,aACAA,WACAA,gBACA,UAGA,IAFAA,qBACAA,eACA,CAGA,QAFAstS,qBACAukB,MACArjB,KAA4BA,KAAOA,KACnCqjB,+CAEA,eACA,OAEA7xT,6BACAA,8BACAA,gCACAA,qCACAA,6CACAA,wCACAA,2CACA,UAEA,OACAA,2BACA,UAEA,OACA,SAAoCwuS,MAAeA,KACnDxrL,+BAEA,UAEA,OAIA,OADAhjH,qBACAA,qBACA,EAOA,GAFAA,wCACA,qCACA,EACA,SAAgDwuS,OAASA,KACzDxuS,oCAGA,WAEA,EAGAA,6CACA,WAEA,EAEAA,oCAIA,UAEA,OACA,qBACAk/U,iBACAE,oDACAp/U,+DACA,UAEA,OASAA,YAPA,CACA,IACA,IACA,IACA,IACA,KAEAA,gBACAA,oDACA,8CAOA,OANAA,iCACAA,iBACA,eACA,eACqBA,kBACrBA,iCACA,QAIAA,aAIA,GADAA,YACAA,0BACA,mDAIA,4BAAiC,mBACjCosR,GArRA,GAuRA,SAAej9Q,EChRf,kBACA,gBACAnP,cACAA,kCACAA,yBACAA,sCACAA,8BACAA,4BACAA,sCAQA,2BACA,OAAe,QAASA,8BAExB,OAAmB,QAAWA,kBAC9B,sBACA,WAAiDoP,QAAQi9Q,UACzD,EACA,MACA,UADArpK,YACA,MAKAopK,8CACA,OAAe,QAASpsR,8BACxB,yBACA,OAAmB,QAAWA,kBAC9B,sBACA,EACA,+BACAA,gCACA,mCADA,WAEA,EACA,iBACA,WACA,EACA,kCACA,6BADA,WAEA,EACAo/U,UACAA,gBACA,EA4BA,OA3BAp8N,8BACAsqL,sBACAukB,yBACA,gBACArjB,iCACA8vC,mBACAzsB,6CAEA7xT,6BACA4kQ,IACAuhO,aACAC,yBACAp3F,iCACAh+V,2BAGAkuS,6BACAtpS,eACAm5V,gBACAC,iCACAt6R,uBACA6E,yBACA01R,qBACAE,SACAk3F,eACAn3F,gBAEAtsH,IACAyJ,iBACA,QAGA,0BAOAD,4CACA,qBAEA,0CACAx2O,eACAm5V,gBACAx1R,yBACA7E,uBACAs6R,mBACAE,wBACAo3F,eAEA,yBAEAl6M,0CACA,OAAe,QAASpsR,8BACxB,2CACA,OAAmB,QAAWA,kBAW9B,IAVAqsR,+DACAmiB,6BAEA5pC,SACAs6E,sBAFAt8D,UAGAw8D,sBACAH,KACA90G,KACAukE,KACAotD,aACA7c,OACAC,kBACAA,kBACAA,kBACAE,kBAEA,sBAAiCzoU,YAAYuoU,IAC7Cl/U,qBACA,SA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CAA,iBACAA,oBACAA,wCAEA,oDACAO,eACA,4BAEAsvZ,cACA5mR,kBAEAx8H,8CACAlM,eACA,wBAEAsvZ,cACA5mR,kBAEAmjJ,gCACA,2BACA,EAEApsR,wBAEAosR,kCACA,sBACAxJ,kBACA,wBACA,GAEAyJ,WAEAD,iCAKA,OAJApsR,gBAIA,KAHAA,gBAGA,KAFAA,gBAEA,GADAA,cACA,EAGAosR,2CACA,SAAuCxJ,OACvC,kBACA0qB,YACAukB,YACA,MAKA,CACA,aACAysB,QACAA,OAEAt+U,YACA,0BAEA,uCAZAwuS,sBAEA,wCAaApiB,iCACA,sBACA,kBACAC,IAEAD,4CACA,SAAuCxJ,OACvC,4BACA,2BACA5/J,IAEAopK,+BACAC,KACAA,MAEArsR,cAEAosR,8BACApsR,qBAEAosR,kCACApsR,qBAEAosR,2CACA,iCAEAA,+BACA,mBAEAA,GA7FA,GA+FA,SAAeznP,GCzFf,yBAIA4E,cACA,gBAMA,GALAvpC,WACAA,oBACAA,YACAA,eACAA,yBACAqsR,GAEA,8BACArsR,wBAIA,qDACAO,eACA,uCACAP,iBAEA,8BAEA6vZ,cACA5mR,kBAEAmjJ,gCAEA,QADAC,YACArsR,wBACA,YACA,SAEAA,iBAEA,gCAEAosR,kCACA,sBACAxJ,kBACA,wBACA,GAEAyJ,WAEAD,iCAKA,OAJApsR,gBAIA,KAHAA,gBAGA,KAFAA,gBAEA,GADAA,cACA,EAEAosR,2CACA,SAAuCxJ,OACvC,OACA0qB,YACA,OAGA,IAFAttS,yBACAgjH,UACAhjH,gCACAA,iBAEA,yBACAgjH,QACAA,WAGA,CACA,gBACAhjH,iBAEAgjH,qBAEAhjH,YACA,mCAEA,2CAEAwuS,GADA,yBACA,EAEApiB,iCACA,sBACA,kBACAC,IAEAD,4CACA,SAAuCxJ,OACvC,4BACA,2BACA5/J,IAEAopK,+BACAC,KACAA,MAEArsR,cAEAosR,8BACApsR,YAEAosR,2CAEA,QADAppK,SACAhjH,kCACAA,iBAEA,WAAmBimC,GAAMjmC,oBAEzBosR,+BACA,gBACApsR,iBACA,kDAEAosR,kCACA,UAAkB9nR,EAAyBtE,oCAE3CosR,uCACA,mBACA,qBACA,UAGA,QADAppK,wBACAA,OACAA,MAEA,0BACA,kBACAhjH,gBAEAosR,GA7HA,GA+HA,SAAe7iP,GCvIf,oBACA,0CAEAG,gBAEA,mBACA,8BACA,oBACA4jQ,2BAGAtqL,KACAA,QAEAsqL,GAEA,OAZI,QAASjhB,OAYbA,kCAMA,QAFAwlC,eACArjB,gBACA/kQ,QACA+kQ,gBAEA,IANA,IAMAA,IARA,MAQAA,IAIA,IACA5pC,GACAs6E,GAFAZ,qBAIA,GAfA,MAeA9vC,IAEA,IADA5pC,2BACAs6E,KAAwBA,OAAOA,GAC/Bt6E,YAEA5kQ,yBAEA,CACA,kBAEA,IADAo/U,SACAF,KAAwBA,OAAOA,IAE/B,IADA1wC,gBACA/kQ,QACA+kQ,gBAGA,GADA4wC,WA7BA,IA8BA5wC,IAhCA,MAgCAA,GACA,MAMA,GAHA5pC,8BACA5kQ,wBAEAk/U,MACA,KAAuBA,OAAOA,GAC9BE,WAEAp/U,YAEA,SACA,SAAwBk/U,OAAOA,GAC/BD,qBAEA,SAAwBC,QAAQA,GAChCt6E,iBACAq6E,OAzCA,MADAj/U,WA0CA,EAIAqsR,GArEA,CAsEE7iP,IACF,SAAeE,GC1Ef,oBAEA,mBACA,8BACA,oBACA4jQ,iBAGAtqL,KACAA,QAEAsqL,GAEA,OAZI,QAASjhB,OAYbA,kCACA,IACArpK,wBADA,KAEA,cAQA,QAJAsqL,kBACAukB,2CACArjB,qBACA8vC,mBACA15E,kBAA2CA,MAAQA,MACnD,cACAq6E,UACA,kBAEAA,mBAEAG,iCAEA,IAEA,SAEAp/U,YACA,MAIA,SATAi/U,YASA,CAEAX,KACAA,OAGAzsB,kBACAysB,OAGAA,kBAEAzsB,eACAysB,OAEAt+U,mBACAA,oBAxCA,MADAA,WAyCA,EAEAqsR,GA5DA,CA6DE7iP,IACF,SAAesF,GCrDf,uBACA,iDAGAmB,mBACA,iBACA,oDACA,wDACA,0CAGAC,mBACA,kCACA,wDACA,wDACA,4CAGAC,oBACA,wDACA,wDACA,wDACA,sDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,wDACA,0DACA,GAEAI,oBACA,wDACA,mDACA,wDACA,qDACA,GACAC,gBAEA,mBACA,8BACA88P,aACA,oBACAkB,gBACA,oBACA,+DAEA,cACA,2EAEA,sBACA,2DAEA,SACA,8DAEA,qBACAlB,aACAA,GAEA,OAtBI,QAASjhB,OAsBbA,kCACA,OACArpK,GACAsqL,eAEAukB,mBAKA,GAJA,OACA7xT,aAGA,KADA6xT,QACA,CA6CA,OACAnjB,GACA,UAEAvkE,MACAukE,cAEA,OAkDA,sDAhDA,2BACAsmF,qBACAC,qBAEAjmJ,6BACAotH,UACA,SAAwBA,QAAqBA,GAC7CptH,2BAEA,qCAEAhsH,KACAo5O,KAMA,QALA7a,SACAf,sBACA19H,UACA3tE,UACAsqE,UACA28I,QACA,wBACA,WACAt5I,KACA3tE,KACAsqE,cAEA,QACAqD,KACA3tE,KACAsqE,gBAEA,QAKA,CACA+gI,eACA,SANA19H,KACA3tE,MACAsqE,OAIA,CAGA,QADAnqE,uBACAA,SACAkrM,YAGAr2G,gDACAukE,gDAGA,CAKA,QAFAh1J,IADAkpI,gBACAA,YACAjjE,uBACA,CACA,wBACA,UACAA,WAEAjmE,IADAkpI,4BACAl8Q,QAEAk8Q,gBALA,CAQA,YAEA,YADA5iR,sBAKA,QADAkgM,MADAA,WAEA,GACAzqD,OACAA,qBAEAzyB,iBACAk9E,qBAEAzqD,IADAyqD,YACA,IACA,IACAzqD,qBAEA,qBACAkqE,YAEAjmE,IADAkpI,6BACAl8Q,QAEA,aAA4BkvI,QAASA,QACrCgtI,gBAzBA,CAyBA,CAjGA,KA3CA,CAEA,cACA,0BACA,oDAEA,UACA,0BACA,oDAGA,GADA07D,WACA,sBACA,oDAEA,UACA,0BACA,oDAGA,IADA15E,cACA,6BAEA,iEAEA5kQ,eACAA,gBACA,yBACA4iR,4BACA,aAEA,GADA5iR,qBACA,QACA,oBACAA,kBAIA,cAA2Ci/U,QAASA,IACpD,2BACAj/U,YACA,MAEA4iR,UAGA,CAiGA,EAIAyJ,kCAKA,QADAmiB,GAHAxrL,eACAsqL,iBACAukB,gBAEAvkB,QACA,0BACA,gDAEAukB,WACAvkB,MAEA,uBACAttS,oBACAA,qBACAwuS,IAEAniB,kCAOA,QADAznB,GALA5hJ,eACAsqL,SACAukB,SACArjB,iBACA8vC,gBAEA9vC,QACA,uBAKA8vC,WACA9vC,MAEA,wBACA,qBACA9/P,yBAEA,cACAuwS,YACA,eACA,gDAEA,2BACAj/U,oBACAi/U,IAEA5yD,+CACA,IAGAwlC,GAHA7uM,aAEAsqL,KAEA,SAAoBukB,QAAOA,GAC3BjvC,YACA0qB,WAMA,QAFAkB,SACA8vC,sBACA15E,eAA8CA,SAAeA,iBAC7D,aAA8Bq6E,QAASA,GACvC,gBAEA,SACAvwC,MACA,SAAgCmjB,QAASA,GACzC1nF,cACAukE,OAGA,UAAoCmjB,MAAUA,OAC9CysB,mBAEAY,GAIA,eAEA7yD,GAhQA,CAiQE7iP,IACF,SAAegH,GCtWf,oBAEA,sBACA,8BACAqhR,aACAA,gBACAA,gBAYA,QAVAysB,IACAioJ,eACAC,aACAC,aACAC,gCALA,MAMAC,kCANA,MAOAC,oCAPA,MAQAC,+BARA,MASAC,yBAEAliO,KAAwBA,SAASA,GACjC05E,2BACAA,2BAEA,sBACAzsB,GAEA,OAxBI,QAASxlC,OAwBbA,kCACA,IAGAwlC,GACArjB,GACA8vC,GAJAt7N,QAKA4hJ,iBACA,MAGA,uBACAw6E,eACAH,uBACA90G,wBACAukE,0BACAotD,iBACAk5B,eACAC,sBACAjmJ,4BACAotH,KACA9c,qBACAiC,2CACA,SAAoB1vB,GAtBpB,IAsBmCA,MACnC,yBACA/uG,QACA,eACAmyK,SACAjmJ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CAAuBwwB,GAEtC,4BACA,yBAEA,2BACA,SAGA,mFC/GO9W,aACP,+BACA7K,sBAAiC,YAAmB,iBCG7CyG,cACP,IAcAwO,GAdAiyC,aACA,kBAEA,GADAjyC,yCACA,CACA,WACAsyC,KACA5lC,OACAA,qBACAulC,0DACAK,KACAL,iBAIAjyC,yCACA,KACAA,OAEAiyC,IADAvlC,oBACAxiB,sCAGA,WAEOiJ,cAAiC,0CAajC7E,cAEP,QADA2jD,wBACAjyC,KAAoBA,cAAmBA,KACvCiyC,6BAEA,WCnDO1jD,cACP,+BJCOG,IADAge,EACgCle,KADF3F,gCAA2C,gBAEzE8F,cACP,uBKHOC,cAAgC,iBA0BhC6K,kBACP,kBACA,SACA,sBACA,MACA,cACA,mBACA,cACA,8BACA,eACA,oBACA,cACA,mBACA,cACA,mBACAw4C,WACAvlC,mBACAulC,gBACAvlC,wBACAulC,iBACAvlC,yBACAA,oBAEOV,qBAEP,QADAsmC,wBACAC,kBAA0CA,MAAWA,MACrD,cACA,cACAD,kBACA,mBACAA,uBACA,cACAA,mBACA,cACAA,mBACA,eACAA,oBACA,cACAA,mBACA,cACAA,mBACAouE,WACApuE,kBACAouE,gBACApuE,uBACAouE,iBACApuE,wBAEAA,gBAEA,uBAEA,oEA7EO,YACP,gBACA,YACA,MACA,YACA,mBACA,SACA9uB,SACA,MACA,mBACA,SACA,oBACA,UACA,mBACA,SACA,mBACA,SACA9W,kCACAA,mBACAA,OACAA,OACAA,cACA6oB,sBACAA,UAsDA1mC,MAEO3K,qBACP,0BAA0CouD,MAAWA,KACrD,gBACA,OAEA,kCAEOrmC,qBACP/nB,iCAEOkoB,qBACP,yBAA2CkmC,MAAWA,KACtDpuD,iBAGOsD,wBAKP,GAJAtD,oBACAA,wBACAA,wBACAouD,mBACA5lC,WAEA,2FAGOL,qBAEP,GADAnoB,oBACAwoB,QAEA,6EC9GAF,cACA,eACApwB,iBACAA,kBAEA,qCACA,oBACAA,4BACAA,YAEAswB,kCACAtwB,mBAEAswB,2BAA8C,kBAC9CA,EAdA,GAgBA,SAAeF,gJChBR,kB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0BAC9B38B,KAIA,+CACAE,KAEA,iBADAc,kBAEA,2BACAhB,KAGA,iCACA,wDACA,sBAAgCi5U,0BAChC,uEACAj5U,KACQ,wDACR,sBAAgC2oe,0BAChC,uEACA3oe,MAIA,2BACAA,iBAEAA,uBAEAA,MAGAF,4BACA,kCACA,mCACAE,eAEAA,MAGAF,+BACA,2BAGAA,gCACAE,qBAGAF,4BACA,wBAGAA,kCACA,cACA,iCACAC,UACAwH,UAEA,OAGAzH,iCACA,6BAGAA,oCACA,iCACA,gBACAC,cACMG,SACNH,WAEAA,GACG,IAGHD,8BACA,iCACA,sBACG,IAGHA,gCACAC,OACA,4BAIA,QAHAiB,KACAC,uBACAC,IACAA,mBACA,MACAA,IACAG,eAEAA,cACAL,WAEAE,eAEA,iBAIApB,gCACA,2BACAkB,oBACAC,KACAC,WACA,2DAEA,QADAG,WACA,4CACAA,kBACAJ,iBAEAC,cACAF,mBAIA,QADAM,WACApB,0BACA,2BACAoB,yBACM,wBACNA,qBACM,CACN,8CACAE,YACAC,YACA,8BACA,SACA,0BACAC,WAEAA,kBAGA,gFAKA,GAJAC,oBACAL,WAGAN,yCACA,sBACA,+BAKQ,sDACRM,UAIA,iBAGAxB,+BACA,8BACA,wBACAI,iBACAA,oCAEAA,GAGAJ,+BACA,oBACA,aAEA,+BACA,yBACA,kBACA,2CAGA,kCADAyB,mBACA,mBACK+lC,WAELrmC,QACAC,iBACAG,uBACAC,oBACA,6BAEA,QADAE,cACAA,MACA,QACA,kBACA8J,SACA7J,6BACAR,kBACA,WACAqK,SACA7J,6BACAJ,UACAJ,YACA,WACAqK,QACA7J,4CACA,gBACAE,YACA2C,qBACArD,yDAEAA,oBAIAO,QAGAP,UAGAnB,mCACAI,UAIA,QAHAc,uBACAC,QACAC,IACAF,cACA,kCACA,eACAM,6BACAC,4BACAF,2BACA,OACAJ,yBACMM,IACNN,sBACM,CACN,IAAuD,IAAvDlB,6BAAuDmB,GACvD,OAEAA,KACAD,SAGAA,cACAlB,OAAsBmB,IAItBpB,oCAEA,GADAI,MACA,mBACA,mCAKA,QAHAc,uBACAC,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I,qBACAJ,iBACA,8BACA,wCACA,sBACA,uBACA,8BACA,kCACAiG,IAEG,CACH7F,eACAJ,iBACA,4BACA,2BAEA,CADAjM,0BACAoV,KAEG,CACH/I,eACAJ,iBACA,4CAEG,CACHI,wBACAJ,kBACA,WAEAiG,kCACAkD,oBACAlD,kCAEA,yBACA,cACAM,OACAC,QAEA4K,wBACAuS,uBACA,cACAA,GACUvS,kCACVuS,eAEAA,oBAGAxd,6DACAC,yCACA,wBAEG,CACHhG,sBACAJ,kBACA,8EACA,YAEA,OACAoX,OAAiBs2U,4CACjBxjT,KAAewjT,wCACfkwI,UAEA,0CAGA,QAFA13d,SACAC,aACAD,2CACA,yBACAA,kBACAC,YACYD,wBAIZ,MAFAC,GADAD,yBACA6jY,wCAEA,CAGA9jY,sBAEA6E,IAEG,CACH1K,oBACAJ,kBACA,WAEAiG,mDACAC,KACAC,uBACA,iCACAC,oBACA,aACAG,oBACAC,UACA4K,SACAuS,SACA9nB,0BAEA+nB,WAEAtd,QACAqd,SAEAzd,eAEAA,aACAA,eAEAA,IAEG,CACH9F,qBACAJ,kBACA,qBACA,WACA,wCACA,WACA,8BAEAmG,wCAEAE,GADAhH,OACA,GAEAiH,KACA,eACA,qDAIAA,EAFAjH,OAEA,GAEA,qBACA,kCACA4G,aACAkD,0BACQlD,qBACRkD,sCAGG,CACH/I,qBACAJ,oBACA,+DACAkG,2DACAC,0DAGA,GADA3Q,iCACA,4EAGA,gCACA,YACA,YACAzB,mCACA,mCAAiD6pe,OACjD,kGAEA,kBACA9yd,6CACA3B,gBAEA,kBACAjD,6CACAD,gBAEA,6BACAK,gBACAA,cACAF,qBACAA,qBAGAA,qBACArS,iBACAozC,yBAGG,CACH/mC,eACAJ,kBACA,8DACAiG,+EAOA,GALA,qBACAA,IACA6E,MAEAtV,qBACA,SACA,4BACAzB,sDAEAA,0BAEAA,iBAEG,CACHqM,aACAJ,iBACA,oFAEA8K,iBAEA7E,kBACAC,SACAC,OACAC,QAMA,GAJArS,iBACA,uBACAA,kCAEA,gCACA,QAEAA,qFACAA,sBAEA,IAGAwS,EAHAD,wFACAD,2EACA8C,+BAGA5C,qCAMAgH,EA/ZA,GAkaA,gBACA,IAEA7C,YAEA,CAFA,MACIvB,GACJ,SAIA,2BACAuB,gBAEA6C,cAGAu4S,UACAA,aAIA,cAAiC1xT,GAEjC,aAGAoM,sCACAR,WAGA,iBAAiC,gBAA2C,YAAgB3K,WAAkBA,KAAO,WAA2BC,8BAAwDA,kBAAgC,6BAAuDkL,kCAA+D,uBAAyD,2BAAqEnL,UAA6DJ,GAAzhB,GAEAoD,oBAAsD,iCAAkD,2CAA8D,eAA0B,+BAA4C,qBAAuB,EAA2BrD,SAA4C,eAA4B,eAA4B,YAAuB,uBAA4B,EAAoBQ,WAMzc,cAAuC,0BAAuCqlW,WAE9E,gBAAkD,qBAA0C,yDAE5F,gBAAkD,MAAa,sFAAyF,uDAExJ,gBAA2C,kCAA+D,yFAAuG7lW,0CAAyEpB,aAAeoM,qDAA6E/K,oEAEtX,kBAGA,aACA,iBAEAnB,sEAGA,OARAG,OAQAoL,MACAe,iBACAJ,oBACA,sBACA3H,8FAEAtE,gBAGG,CACHqM,aACAJ,iBACA,WAEG,CACHI,YACAJ,iBACA,YAEG,EACHI,YACAJ,sBAKA/K,EAnCA,CAVA8Q,EAFiB3R,EAAmB,IAgDnCymW,eAED9lW,mBACAA,eAEA+wT,aAIA,cAAiC1xT,GAEjC,aAEA,IACAN,EADAuL,yBACAvL,yBACA,CAAWugB,wBAAgBjQ,qBAAsCnQ,gBACjE,cAA0B,iDAC1B,cAEA,aAAwBF,mBADxBD,OAEAG,wEAGAuM,sCAA+CR,WAC/C,MAAoB5L,EAAmB,IACvCgJ,EAAehJ,EAAmB,IAClCgE,EAAehE,EAAmB,GAClC2R,cAEA,cACA,2BACA,iBACA/Q,EAEA,OANAqK,OAMApL,oCACAF,sBAEAE,8BACAH,8BACAC,kCACAgB,cAGAd,6BACA,WACAF,4BAEA,SACA8xB,8BACAuyG,UACAp5H,oBACA,IACA,WACAjK,yCAMA,CANA,MAEAK,GACA,iCACA,OAEA,YAIAnB,mCACA,4BACA,qBAEAF,4CACAkB,mBAGAhB,qCACA,0CACA,+BACA,iCACA,MAEAmB,eACAA,kBAGA,WAGAnB,6CACA,QAAgCe,UAChC,QAAiCC,oBACjC,SACAI,IACA,oDACA,wBACA,mCACAD,UAEAE,iBACAF,kCAEAC,OAEAD,GAEAnB,8BACAF,kCACAgB,aAEAjB,+BAEAG,uCACAF,4CACAsB,uBAGApB,qCACA,0CACA,KACAoB,sBAEA,CACA,+CACAtB,sBAGAE,uCACA,wCACAF,8CACA,wBAEA,+FAEAgB,sBAEAd,8BACA,0CACA,qBACS,IAETA,uCACAF,kCACAgB,uBAGAd,iCAEA,GADAH,kCACA,yBACA,oCACA,0CACAC,oBACAiB,mBAGAjB,eAIAE,oCACA,QAAoCe,MACpC,4CACAM,aACA,sBACAA,uBAEA,SACAA,cAEAA,IAEArB,oCACAF,yBAEAE,gCACAc,gBACAA,qBAEAjB,kCAEAG,gCAEA,QADA,QAAgCe,OAChCA,GACA,SACA,YACA,qBACA,iBAEA,mBACA,6CACAjB,wDACAqB,eACAH,mBAEAA,GAEAhB,8BACAF,yCACAA,eAEAE,iCACA,WACAmB,KACAC,KACAN,sBACAO,6CACAF,6BACAC,kCAGAA,sBAIA,yBAEA,sBACA8xC,8EAGA,iBACA,UAEA,+DACA5xC,cAGAH,EACAoK,mBACA,iCAEA1C,mBACA,aACA,EACAxH,8DACA,GAEA,IAEA0J,oBACA,WACA,sBACAzJ,yBAEA,YACAC,2BACA,gBACAA,wBAEAP,gCAIAhB,EA7NA,CA8NCmJ,WACD,cACA,gBACA,WACA,IACAnJ,aAWA,CAXA,MAEAc,GACAd,2BACA,gDAEAA,2BAEAH,cACAA,uCAEAG,WAGA,SAEA6xT,aAKA,cAAiC1xT,GAEjC,aAEA,IACAN,EADAuL,yBACAvL,yBACA,CAAWugB,wBAAgBjQ,qBAAsCnQ,gBACjE,cAA0B,iDAC1B,cAEA,aAAwBF,mBADxBD,OAEAG,wEAGAuM,sCAA+CR,WAC/C,MAAmB5L,EAAmB,IACtCgJ,EAAchJ,EAAmB,IACjCgE,EAAkBhE,EAAmB,IACrC2R,EAAe3R,EAAmB,GAClCP,cAEA,cACA,2BACA,6CACAmB,EAEA,OANAqK,OAMApL,sBACA,sCAGAmQ,4BACArP,6BADA,EACA,EAIAd,iCACA,iBACAgB,uBACAlB,+BAEAiB,GACA,6DACAjB,uBAIAE,+BACA,+BACAe,qCACA,iBACAD,4BAEAA,GAEAd,sCACA,6CACA,+BACAgB,GAEAhB,iCACA,WACAH,kCACAiB,mBACA,sDAEAhB,yBAGAE,+BACA,sCACA,6DACAF,wBAEAkB,GAEAhB,EAxDA,CAyDCmE,WACD0tT,aAKA,cAAiC1xT,GAEjC,aAEA,IACA2R,EADA1G,yBACA0G,yBACA,CAAWsO,wBAAgBjQ,qBAAsCvQ,gBACjE,cAA0B,iDAC1B,cAEA,aAAwBE,mBADxBgS,OAEAlS,wEAGA2M,sCAA+CR,WAC/C,MAAe5L,EAAmB,IAClCgJ,EAAehJ,EAAmB,GAClCgE,cAEA,aACA,+CAEA,OAJAiH,OAIAxL,oBACA,UAEAA,gCACA,yBACAE,4EACAivB,eAEA,GAEAnvB,mCACA,mEACA,aACAkB,MACA,yBAEAlB,6BACA,MACA,aAAsBE,+DAEtBF,4BACAA,EA1BA,CA2BCwE,WACDytT,aAKA,cAAiC1xT,GAEjC,MAAYA,EAAmB,IAC/BiE,EAAajE,EAAmB,GAGhCgJ,GACAytC,YACAgzb,wBACA,2BACA,2BACA,cAAsChqe,GAStC,aARAC,IACAG,sCACA,oBACAe,WAEAA,GACS,KAET+Q,OACA,0BACA9R,WAGA,yCAGAssQ,mBACA,2BACA,2BACA,iEACA,sBACAtsQ,8BAEAA,GACO,IACP,yCAGAgpB,0BACA,+BACA,sBACA,gBACA,0CACA,kCACAloB,GACO,IACP,2CAIAivZ,qBACA,iBAGAvpZ,mBACA,gCACAsL,SACM,0BACNA,SAEA,8CAMA,cACAhS,WACAA,aACAA,cAGAqE,+BACA,8BAGAA,6BACA2N,WACA,2BACA,MACA,kBACA9R,cAQA,GAPA8R,QACAA,MACAhS,cACAA,eAEAA,eAEA,0BACA,OAAe28B,UAEf,SACA,sBACA37B,2BAEA,0BACAA,WACQ,0BACRA,8BAGAA,kBAEAA,EAGA,OAAa2ne,aAIbtke,4BACA,6BAGAA,kCACA,4BAEAgF,2CAEA,KAIAhF,gCACA,4BACA,6CACA,SACM,6CACN,SAEA,SAGA,UAGAA,4BACA,kBAEI,oBACJ,kCAEA,kBACAvE,aACAC,cACAG,6BACA,qBACAF,aACA,cAVA,UAeAsvZ,cAKA,eAEA,iBACA,aAEA,gBACA,+BAGA,MASAjmZ,EAOAhF,EAfA,IACAC,KAIA,CAJA,MACEpD,GAGFoD,eAIA,IACA+E,KAEA,CAFA,MACEnI,GACFmI,eAIA,IACAhF,SAEA,CAFA,MACEnD,GACFmD,eAwBA,sBACA,qBACA/C,UACAC,cACAC,yBACAH,cAIA,SACAK,KAEAC,6BASA,gBAEA,YACA,YAEA,SACA,SAEA,MACAoV,EACA,sBACA,SAGA,UACA3B,gBACM9J,OACN8J,gBACM9J,OACN8J,wBACAoE,oBACA6D,eACS,aACTuS,0BAGM5d,eACNoD,aACMpD,gBACNoD,4BACAoE,+CACMxH,cACNoD,4BACM,0BACN,OAEAA,EAFAgqa,mBAEAA,6BAGA,qBAEA5la,UACApE,EACM9J,WACN8J,wBAEA,OACA2B,2BACA3B,qBAGAA,mBACA2B,KAIA,MACA,mBAEA,SACA,YAEAtV,UACAC,UAiBA,aAdA4J,QACAkO,0BACA,iBACAqW,aACAza,eAGA9J,QACAkO,uBACA,iBACApE,YAIAoE,GACA,MACAzC,IACA3E,0CAGAA,kBAGAgD,kBAGA,gCAEA,KADA/C,mCACA,QAAsBF,YAAoBA,KAG1C,cACAI,2CACAA,mBAGA6C,mBACA7C,cACA9F,4BACAojZ,iBAXA,CAiBA,KAEA,KADAr9Y,gCACA,QAAsBL,WAA6BA,KACnD,IACAI,EADAE,SACAF,0CACAA,eAGA6C,mBACA3I,4BACAojZ,iBARA,CAaA,SAGA,YAxIA,QACAxuZ,WAEA,QACAC,OAoIAM,OAqBA,cACA,yCAIA,cACA,iDAIA,cACA,kDAIA,cACA,mDAIA,cACA,SACA,0BACAV,uBACAA,sBACAG,EAEA,OAtCA2Q,6BACA,YACA,YAEA,mBACA,qBACA,OAQAA,eAKAA,aAKAA,cAKAA,eASAA,qBAEAA,EA3PA,GA8PA,kCACAs9Y,eAMA,cAAiCjvZ,GAEjC,aAGAoM,sCACAR,WAGA,iBAAmC,gBAAiC,SAAemG,KAAeC,MAAgBC,UAAoB,IAAM,mCAA0CF,uBAA4CD,iBAAqBD,iBAAlCE,MAAmL,CAAjJ,MAAuCK,IAAcJ,MAAWC,cAAsB,KAAMF,uBAAqD,CAArD,QAAqD,gBAAsB,SAAe,qBAA2B,oBAA0B,SAAc,gCAA2C,cAAuC,6EAAlkB,GAEA9N,aAAiC,gBAA2C,YAAgB6N,WAAkBA,KAAO,WAA2BC,8BAAwDA,kBAAgC,6BAAuD3F,kCAA+D,uBAAyD,2BAAqE0F,UAA6D4E,GAAzhB,GAEA1N,oBAAsD,iCAAkD,2CAA8D,eAA0B,gCAA4C,sBAAuB,EAA2B+L,UAA4C,eAA4B,eAA4B,aAAuB,wBAA4B,EAAoB9C,YAIzcN,IAFiB3R,EAAmB,IAMpCN,IAFeM,EAAmB,IAIlCH,EAAaG,EAAmB,GAEhCW,OAIAE,IAFab,EAAmB,KAMhCiB,IAFYjB,EAAmB,KAM/BmB,IAFiBnB,EAAmB,KAIpC,cAAuC,0BAAuCymW,WAE9E,gBAAkD,qBAA0C,yDAE5F,gBAAkD,MAAa,sFAAyF,uDAExJ,gBAA2C,kCAA+D,yFAAuG1xV,0CAAyEvV,aAAeoM,qDAA6E8K,oEAEtX,cACA,yDAGA,kBAGA,gBACArV,UAEA,mEAEA,2BACA2O,6BACA+B,+CACA,iBACAC,IACO,KAGPD,2DACAA,aACAA,WACAA,EAGA,OArBAxQ,OAqBA0C,MACA+H,iBACAJ,iBACAjM,gBAEG,CACHqM,eACAJ,iBACAjM,cACAA,kBAEG,CACHqM,eACAJ,oBACA,oBACAqG,WACAC,QACAC,QAEAC,kBAEAmd,GADAtkB,QACA,GAGA,GADAjC,4FACA,uBACA,yDAEA,YADArJ,gBAGA,2BACA,qCACA,WACAuS,mBACAqd,GAEA,YADA5vB,eACA,SAGU4vB,yBACV,0BACAC,OACAD,eAGA,mEACArd,sBACAA,WAEAvS,kBAEG,CACHqM,aACAJ,iBACA,iEAEAjM,iDAEG,CACHqM,eACAJ,0BACA,4CACA5C,kGACArJ,mBAEG,CACHqM,eACAJ,uBACA,qDACA,qBACA,6DACA,mDACAjM,qBACA,6BACAoS,iBAEAE,wBACU,CACV,6BACAtS,yBAGAqJ,+FAEArJ,mBAEG,CACHqM,mBACAJ,oBACA,kDACA,mDACAoG,kBACAF,KAEA9I,kGAEG,CACHgD,WACAJ,kBACA,uCAEG,CACHI,WACAJ,kBACA,yBACAjM,eAEAA,uBAEG,CACHqM,YACAJ,iBAiBA,OAbA,oBACA,UACA2jB,MACA,oDACApW,MACA6D,YACYvV,oCACZuV,4BAEAuS,SAEAvS,GAEAhL,MAhBA2/K,yDACAA,wEAeA,GAEG,CACH3lL,eACAJ,iBACA,gEACAmG,6DAEA,iBACA/I,4FACA8I,YACAnS,2DAGG,CACHqM,WACAJ,kBACA,wGAEG,CACHI,aACAJ,kBACA,mBACA,8BACA,qBACAmG,KAEA/B,mBACA8B,+BAEAA,YACAnS,6DAEAqJ,mGACA8I,YACAnS,2DAKA+W,EA7LA,CA8LC/E,kBAED2E,oBACAA,wBACAA,gBACAA,uBACAA,qDAEAo7S,aAIA,cAAiC1xT,GAEjC,aAGAoM,sCACAR,WAEA8lT,4BAEA,+EAAqG,kBAAqB,aAAmB,yGAE7IztT,aAAmC,mBAAiC,SAAeuxD,MAAejyC,MAAgBsyC,UAAoB,IAAM,sCAA0CL,0BAA4CvlC,kBAAqBnO,mBAAlC0zC,OAAmL,CAAjJ,MAAuCyuE,IAAc1gH,MAAWsyC,cAAsB,KAAML,0BAAqD,CAArD,QAAqD,gBAAsB,SAAe,uBAA2B,qBAA0B,UAAc,iCAA2C,iBAAuC,6EAAlkB,GAEAxsD,aAAiC,mBAA2C,YAAgBinB,YAAkBA,KAAO,aAA2BulC,gCAAwDA,mBAAgC,+BAAuDppD,qCAA+D,yBAAyD,+BAAqE6jB,YAA6DF,IAAzhB,GAIApe,IAFa3R,EAAmB,KAMhCN,IAFiBM,EAAmB,KAMpCW,IAFcX,EAAmB,IAMjCa,IAFkBb,EAAmB,IAMrCiB,IAFUjB,EAAmB,KAM7BmB,IAFiBnB,EAAmB,IAMpCqB,IAFarB,EAAmB,IAMhCuB,IAFcvB,EAAmB,KAMjCsW,IAFctW,EAAmB,IAIjC,eAAuC,6BAAuCymW,YAE9E,qBAA4C,gBAAkBr6V,6BAAkCR,qDAAgFgkB,UAAoBA,GAEpM,kBAAkD,uBAA0C,yDAE5F,kBAAkD,OAAa,sFAAyF,4DAExJ,kBAA2C,oCAA+D,0FAAuGA,6CAAyEpwB,aAAeoM,sDAA6EmkB,yEAEtX,uCAEA9d,uDAEAC,eAgBA,kBACAL,WAEA,yEAEA,sBACAzF,sDACA,4EAGAopD,yBACAA,yCAGAA,eAAuBxpD,iCAA0CvE,IACjE+tD,eAAuBxpD,yDAAsE,cAC7F,sCAEAwpD,eAAyBxpD,uBAA8B,CAAIotJ,cAAiBhnJ,IAC5EojD,eAAyBxpD,oBAA2B,CAAIotJ,cAAiBp8I,MAEzEw4C,eAAyBxpD,uBAA8B,CAAIotJ,4BAAiChnJ,IAC5FojD,eAAyBxpD,oBAA2B,CAAIotJ,4BAAiCp8I,KAEzFw4C,eAAuBxpD,uBAA8B,CAAIotJ,cAAkB7pI,IAC3EimC,eAAuBxpD,oBAA2B,CAAIotJ,cAAkB7pI,IACxEimC,eAAuBxpD,2EAA0F,CAAIotJ,uBAA4BhnJ,IACjJojD,YACAA,GAGA,OA9CAzjD,SAEA/I,YACAgD,YACAJ,qBAEA,OADA4pD,WACA,4DACA,yCAIAA,kCAmCAxsD,OACAgD,iBACAJ,kBACA,iEACA2X,6DAEAsyC,SACA,0BACA,+DAEA,wBACAL,IAAoBk0a,aAEpB,wBACAnmd,IAAoBmmd,aAEpB7za,2BACAl2D,gDACAA,iCAEG,CACHqM,aACAJ,iBACA,WAEAjM,wDACA,wBACA,6BACAk2D,4CACA,yBAEA,iBACA,+BACA,gCAEA,kCACAouE,WACAlpG,SACArF,SAEA83D,6BACAt5D,WACAC,SACAG,SAEAC,6DACAC,WACA8B,SACAI,SAEAH,0DACAS,wDACApvB,IACAwxJ,wBACA++L,oCACA57R,6BACAywQ,UACAj9P,UACA45Z,WAEA9za,qBAGA,GAFA,iDACA,qCACA,gDACA,6BAEA,gCACA,6BAEA,iBAEY,0BAEZzpD,0CACA,8CACA,uCACA,4CAEA,SAIA,QADA,6CACA,+CACA,gCAGAopD,6BAMAzlC,GA3IA,CA4ICzZ,WAqLD,kBACA,OAEA2Z,qCACA,OAIGvZ,EAJHoL,IACA9V,OACAilJ,YACA42K,aACG53S,oCACH,gBACAL,oBACAimC,iBAGA,8BAIA,QAHA5xD,QACA,aAEA9C,kBACAyuB,iBACAG,GACApwB,uEAEAA,2DAGAowB,GACApwB,qEAEAA,qEAGA,GAdA,GAeGmiB,GAGH,mBACA,8CAEA,qCAEA0zC,GADAvxD,QACA,GAEAsf,MACA,kBACA,sCAEAohB,GADA1gC,QACA,GAEA,4BACA,oBACA82B,sCACAxX,yCAIA,6DACA5jB,6DACAyM,0BACAzM,gEAEAA,oBAGA,mBAEA,6DACA,0CACA,UACA61D,KAEAjyC,gCAEAuyC,GADA7xD,QACA,GAEA,6BACA,sCAEA82B,GADA92B,QACA,GAEA,OACA,oBACAupF,oCACAv9D,uCACAulC,gBAGA71D,0DACAyM,yBACAzM,kEAIA,gBACA,+BACAmiB,MACA,gBACA,sBACA0zC,6BACA1zC,uCAEAniB,iDACAyM,0BACAzM,4DAEAA,2DACAA,mBAGA,mBACA,YAEAiwB,aACAjwB,+CAEA,oDACA,kFACA61D,sBAEAA,IACG,IACH71D,8DAGAA,6DACAA,mBACAyM,4CACA,cACA4D,8BACA,aACA8R,4DAIA,gBACA,OACA9V,eACAilJ,aACA10F,QAAc,iBACdmta,qBACA,oCACAl0a,YACAjyC,aAEAsyC,sCACAC,WACAnxB,SACAs/F,SAEA,YACA,gCACAvuG,4BACA83D,6BACAt5D,mDACA+vG,KACA/vG,2BACAtE,IACA+U,yBACAs/F,iBACA,OACAzuE,iBAEAjyC,kBAEU4Q,uBACVwQ,gCACAs/F,iBACA,OACAzuE,iBAEAjyC,kBAGA0gH,kBAEAtkI,0CACAA,2DAKA,gBACA,OACAqM,wBACA49d,YACAF,uBACA/pe,6DAKA,gBACA,4CACA,WAAuBqM,SAKvB,GAHA,6CACA4jB,yBAEA,wBACA,sCACAA,4CACM,kBAGN,YAFAA,yCAEA,CAGA,qBACAA,0BACAA,aAEAA,GAtYA1d,QACA23d,YACAC,MACAC,SACAC,UACAC,QACAC,MACAC,SACAC,QACAC,WAGAn4d,YACAo4d,UACAh1H,gBACAM,oBACAI,0BACAh6P,QAEAhwG,eACAuwD,sCACAmta,wBACA,wCACA/pe,0DAGAm3W,SACA9qW,eACAilJ,YACA10F,sCAEAmta,wBACA,wCACA/pe,0DAGA,qBACAqM,qBACAotJ,aACAnI,cACAwyP,aACAzyP,aACA62K,YACAtrQ,yBACAywQ,SACA08J,wBACA,uBACA/pe,wDACU,sBACVA,sDAIA,2BACA,4BACA,cACAqM,eACAilJ,YACAmI,aACArpF,aACA25Z,qBACA/pe,6DAGAsyI,KACAjmI,eACA09d,qBACA/pe,4BACA,uEACAA,qDACAA,4BACAA,+DAGA,oBACAqM,iBACAotJ,aACA78F,gBACA47R,SACAuxI,wBACA/pe,oDACAmiB,kBACAniB,wDAIA,mBACAqM,iBACAotJ,aACA78F,QAAgBu/C,gBAChB4tX,qBACA,oCACAz5c,UACAulC,QACAjyC,QAEAsyC,oBAA8CL,cAAoBsmD,iBAClEhmD,uFAAwIgmD,mBACxIn8G,qDACAA,6DACAA,8BAGA,gBACAqM,iBACAotJ,aACA78F,kBACAota,YACAD,wBACA,mCACAl0a,UACAjyC,SACAsyC,SAEAC,8FAA+IsjB,cAC/Iz5E,qDACAA,6DACAA,8BAGA,iBACAqM,QACAotJ,aACA78F,QAAgBu/C,SAChB/rC,yCACA25Z,wBACA,uBAEAl0a,gCACAjyC,WACAsyC,SACAC,SAEA,iBACA,cACA,6BACA,eACAnxB,eACA,UACA,MACAA,aACA,UACA,YACAA,YACA,cAEAA,aAEAhlC,2DACAA,4BACA,0FAA8Im8G,UAC9In8G,qDACAA,4BACAA,+DAGA,aACAqM,iBACAotJ,aACA78F,sBACAwT,eACA45Z,eACAD,qBACA,oCACAz5c,UACAulC,QACAjyC,QAEAsyC,+DAA4G,oBAAoBv5B,UAChI38B,uDAGA,+BACA,qCACA,iCACA,yCA0NA+xT,YACAA,eAIA,cAAiC1xT,GAEjC,aAGAoM,sCACAR,WAGA,iBAAmC,gBAAiC,SAAevK,KAAeC,KAAgBC,SAAoB,IAAM,mCAA0CF,uBAA4CD,iBAAqBD,iBAAlCE,MAAmL,CAAjJ,MAAuC0T,GAAczT,KAAWC,YAAsB,KAAMF,uBAAqD,CAArD,QAAqD,cAAsB,SAAe,qBAA2B,oBAA0B,SAAc,gCAA2C,cAAuC,6EAAlkB,GAEA4C,oBAAsD,iCAAkD,2CAA8D,eAA0B,+BAA4C,qBAAuB,EA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EAjV,YACA,qBACA4J,EACA1J,IACA+U,WACAjV,IACA,WACArB,EACAsB,IACA6X,WACA9X,IACA,WACA4C,EAEA3C,OACA,eAGA,KADAyT,YAEA1T,SACAD,eACA6C,EACA7C,eACAkV,kBAEAlV,gBACAkV,mBACAjV,KAEAiV,iBACA6C,kBAIA,KADApE,YAEA3T,6BACA2T,WACAuB,yBACAvB,GACAoE,yBACApE,KAIA,MACA3T,aACAE,WACY,MACZF,aACAE,WAEAF,eACAE,UACA,OAEAD,SACAC,kBACU,qBAEVF,mBACAA,eAEAC,IAEAE,IACAD,IACA6X,KACA7C,KAIA,uBACAlV,QAMA,SAGA,IAFAC,IAEAA,cACAD,cACAA,eAEAA,iCACAA,8BAEAA,kBACAA,mCACAA,kBACAA,8BACAA,gBACAsV,MACQtV,uCACRA,YAEAA,qBACAA,QACAA,oCACAA,UACAA,gBACAsV,OAGArV,IAGAqV,GACA9V,KAKA,QAmBA,gBACA,SACA,YAEA,gBAAmCW,WAAkBA,KACrD,WACA,uBACA,oBACA,SACA,cACQ,QAERH,YAEA,UACAsV,yBACA7E,uBACA,yBACA,QAEAvQ,KAIA,gDAqBA,gBACA,aACAC,OACA4X,OACA7C,OACAvB,SAEA,WAGA,SACI,YAGJ,SAEA,kCAGA,yBACA5T,SACM,oCAKNI,mCACA,8BACA,mBACAA,yBAEAJ,SAGA,SAaA,cAQA,QAPAE,KACAC,cACA,uDAEAC,cACA,yEAEA4X,IAAkBA,WAAkBA,KACpC/X,6BACAA,6BACAA,0BACAC,KAEAD,wCACAA,oCAEAA,iCAGA,MACA,SAGA,IADAkV,KACA,QAAkB6C,WAAkBA,KACpC/X,kBACAkV,aAGA,SAYA,kBAEA,gBAAmC/U,aAA0BA,IAC7D,iBACA,WACA+U,SACA6C,aACA/X,+BAIA,SAlKAP,WACAA,WACAA,UAEAouZ,YA8JA,EAMA,eAMA,cACA,SACA,yBACA,UAPAA,0CACA7iZ,eAEAk/d,MAIA,EAMA,eAEA,MAEC,sBAFD,WACA,iDADA,GAOA,cACA,8DAIA,cACA,UACA,oBACA,2BACAl/d,mDACAA,yDACA,GAdAslT,oBAEA65K,YAKA75K,eAOA,EAMA,eAEA,aAEA,sCACAzmT,MASA,cA4BA,kBACAtL,UACAA,eACAA,gBAUA,aACAA,mBACAA,oBAlCAyM,gBACAnI,iCAMA,0BAqCAD,kCACA,IACAtE,EACAG,EAFAJ,KAIA,kCAEA,wBACAO,oCAGA,oCACAP,0CAGAA,GAWAuE,oCACA,cACArD,kBAEA,eACA,eACA,qBAEA,sCAA2DC,IAAOA,IAClEI,aAGA,UAUAgD,uCACA,cAEA,6BAEA,IAEA7C,EACAC,EAHAH,kBACAC,mBAIA,SAGA,OAFAD,8CAEAC,QACA,sCACA,wCACA,0CACA,4CACA,8CACA,2CAGA,yBAA0CE,IAASA,IACnDD,oBAGAF,4BACI,CACJ,IACAK,EADAD,WAGA,QAAgBD,IAAYA,IAG5B,OAFAH,oDAEAC,QACA,6BAA4D,WAC5D,+BAAgE,WAChE,iCAAoE,WACpE,mCAAwE,cAExE,+BAA2DI,IAASA,IACpEH,oBAGAF,+BAKA,UAYA+C,+BACA,uBACApD,UAEA,uBACAjB,mBACAA,oCADAA,yBADAA,uCAIAA,MAYAqE,iCACA,0BACApD,UAEA,uBACAjB,mBACAA,oCADAA,yBADAA,uCAIAA,MAaAqE,6CACA,cAEA,gCACA,MACA,wDACArE,gBACAA,KAGA,sBAEA,QAEAkB,YACAF,cACAd,oBAEA,iDACAF,qBAEI,CACJ,4BAA4DqB,IAAYA,KAExEH,aACAF,eACAd,sBAEAoB,aAOAA,6CACA,iDACAtB,gBAGA,aAUAqE,2CACA,MAEA,UACAtE,UACAC,kBACA,iDACAA,mBAGAA,mBACAA,qBAGAA,MAMAqE,2CACAA,uCAKAA,uCACA,aAMAA,aAKAA,sBAKA,SACAirZ,eAMA,cAAiCjvZ,GAEjC,aAGAoM,sCACAR,WAEA8lT,yFAEA,+EAAqG,kBAAqB,aAAmB,yGAE7IztT,aAAmC,mBAAiC,UAAeswB,MAAeC,MAAgB8B,UAAoB,IAAM,sCAA0C/B,0BAA4CD,mBAAqBH,oBAAlCI,OAAmL,CAAjJ,MAAuCyC,IAAcxC,MAAW8B,cAAsB,KAAM/B,0BAAqD,CAArD,QAAqD,gBAAsB,UAAe,uBAA2B,qBAA0B,UAAc,iCAA2C,iBAAuC,6EAAlkB,GAEAvrB,aAAiC,mBAA2C,aAAgBsrB,aAAkBA,MAAO,cAA2BC,gCAAwDA,mBAAgC,+BAAuDnoB,qCAA+D,0BAAyD,+BAAqEkoB,cAA6DJ,IAAzhB,GAIAviB,IAFe3R,EAAmB,IAMlCN,IAFkBM,EAAmB,IAMrCW,IAFiBX,EAAmB,IAMpCa,IAFab,EAAmB,IAMhCiB,IAFcjB,EAAmB,KAMjCmB,IAFcnB,EAAmB,IAIjCoB,EAAapB,EAAmB,IAEhCqB,EAAkBrB,EAAmB,IAIrCuB,IAFYvB,EAAmB,KAI/BmZ,EAAanZ,EAAmB,IAEhCsW,EAAiBtW,EAAmB,IAEpC+U,EAAY/U,EAAmB,IAE/B0W,EAAY1W,EAAmB,IAE/B,eAAuC,6BAAuCymW,YAE9E,qBAA4C,gBAAkBr6V,6BAAkCR,qDAAgF4hF,UAAoBA,GAEpM,kBAAkD,uBAA0C,yDAE5F,mBAAkD,OAAa,sFAAyF,4DAExJ,mBAA2C,oCAA+D,0FAAuGA,6CAAyEhuF,aAAeoM,sDAA6EsoB,yEAEtX,uCAEA/hB,iBAEAC,oPAEA4K,kEACA,yBACAwwE,IACC,IAEDj+D,iHACA,yBACAi+D,IACC,IAED/lF,gBAGA,mBACAsK,WAEA,2EAEA,mEACAwiB,mDACAA,gDACAA,yCACAA,eACAniB,oDACA,eACAskB,SACAH,UAEAjC,yBACAC,uBAEAA,GAGA,OAvBAtiB,UAuBAjJ,OACAgD,iBACAJ,sBACAjM,8BAEG,CACHqM,cACAJ,mBACA,uBACA,gEACAjM,eAEA,mEACA,2BACA,gCACA,oCACA,8BAAyE4B,4CAGzE,8BACAm1B,WACAH,SACAS,SAEApvB,4BAEA,+DACAA,gEAEAsK,6CACAvS,4BACAiI,KAEG,CACHoE,2BACAJ,sBACA,oFAEA,uBACAjM,4CACAA,wDACQ,CACR,wBACAA,oEACAA,oEAGG,CACHqM,cACAJ,mBACA,YAEA,gDACA,kCACA0qB,oCACAI,2CACA/2B,uBACAA,sDACA2O,sBACAgoB,6CACA/B,mDAEAA,sEACAA,yCACAA,kBACO,MAEJ,CACHvoB,sBACAJ,iBACA,YAEA2oB,MACAC,MACA,0CACA,eACA+B,SACAS,SAEA,gBACAw0c,eACAh3c,YACA,WACAg3c,kBACAj3c,YACA,cAEA,+DAEA3sB,gBACAA,iBAEA,GAGA,YAIAssB,GA3HA,CA4HC/yB,WAOD,sBACA,iDACAiL,uCACA,yBACKohF,IAELA,0BACA,wCACAl5D,YAEAA,qCAA+DxiB,KAAoBoiB,wBAE9E,eAIL,gBACA,4CACA,6BACA,oDAGA,mBAEA,QADAC,MACAG,mBAAqCA,6BAAwCA,IAC7E,kBACA,oCACAH,gBAEA,mCAGA,gBACA,qCACA,cACA,mDAGA,sBAEA,kCACAA,0BACA,kBACK,eACDq5D,8BACJ,iDACA,oBACA,uCACAh5D,6BACA,kBACSA,IACTA,sCACA,kBACSA,KAETF,eACK,eAEL,cAIA,sBACA,oBAGA,kBACA,+CACAA,uCACAC,uCACAC,MACA,qDACA,qDACA,WACAA,6BACAA,mBAGA,OADAkC,aACAA,qCACAlC,sCAGA,OADAkC,aACAA,qCACAA,UACAlC,yCAGApoB,2BACA8nB,cAEAA,GAGA,mBACA,2BACA,sBACA,4CACA,UACAK,gBACA,WACAD,mBACAJ,kDAEI,gCACJA,sCAEA,UAGA,mBACA,oBACAA,gBAEAA,GAGA,cACA,qBAGA,mBACA,2BACA,qDACA,UAIA,QAFAI,MACAC,kBACAA,uCACgD,UAAhD5zB,yBAAgD8qe,WAChDn3c,OAEAC,iBAEA,gBACAL,2DAAyF8nF,aAGzF,mBACA,qBACApsF,4DACAsE,gBAGAA,GAGA,mBACA,wDACA,oFACAs5D,qDACAt5D,gBAGA,UAGA,mBACA,UACAI,gBACA,mDACAH,cAEAG,0FACAH,YAEA/nB,2BACA8nB,cAEAkd,iCAEAld,4CAEAA,GAGA,mBACA,eAEA,iCACA,4BAEA,0EACA,UAEA,oDAEA,uBACA,uCACA7tB,qBAGA8tB,IADAA,+CACA+T,kCACA,iGACA/T,uCAEA,qFACAA,sCAGA,qBA5MA1sB,aACAike,YACAC,gBA6MAj6K,aACAA,oBACAA,eACAA,kBACAA,kBACAA,gBAIA,cAAiC1xT,GAEjC,aAGAoM,sCAC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se,iBACA,eACA,UAAsBrje,IAGtB,8BAGA+ie,cACA,eACA,UAAsB/ie,IAEtB,sBACApI,0BACmBqD,WAEnBtE,gBACAiB,aACmBqD,YAGnBtE,uBACA,IAAuBqE,IAAmBrE,SAG1C0Z,eACA,YAA+BrZ,IAC/B,qBACAY,GAGAlB,gBACA,WAEO,kBACPF,iBACA8jC,QACA3jC,mBACAA,cAEAse,QACA,MAAgB+ud,eAAcrte,KAC9BkB,WACAA,UAGA0iC,SACA,MAAgBypc,eAAcrte,KAC9BkB,YACAlB,0BAGAyV,WACA,MAAgB43d,eAAcrte,KAC9BiB,eACAjB,4BAGAose,cACA,MAAgBvoc,UAAS7jC,KACzB,SACAA,yBAGmBsE,4EC1IZ,gBAAkCjE,IACzCR,iBACA8jC,QACA3jC,eACAA,kBACAA,eAEAgjB,cACA,eACA,OAEAhjB,eACA,qBACAqE,cAEA,GADArE,mBACAqE,uCACA,OAEA,oCACA,OACAA,uICfO,gBAAyBC,IAChCzE,mBAMA,OALA8jC,QACA3jC,yBACAA,wBACAA,2BACAA,kBACAgyL,uBACA,EACAhyL,iBAAmCsL,IACnC,WACA,EACA,OACAtL,iBAAuCsL,IACvC,MAEA,uBACAtK,gBACAhB,6CACAA,mBACAgB,cAGAhB,2BACAA,gCAEA,cAGAA,2BACAA,mCACA,EAGKqJ,OAAwB,0BAC7BrI,OACA,qBACA,+BACAK,EAEAid,QACAte,gBACAA,cAGA4jC,SACA5jC,iBACAA,kBACAA,gBAGAyV,WACAzV,iBACAA,kBACAA,kBAGAgjB,cACAhjB,cAGAA,kBACA2jC,qBAEA2gT,SACAtkV,yBAEAgte,UACAhte,0BACAA,mBAEAskZ,YACAtkZ,4BACAA,mBAEAste,yBACA,MAAgBC,oBAAmBvte,KACnC,kCACAA,mBACAA,eACAA,kBACAA,wBACAA,MAGO,kBACPH,qBACA8jC,QACA3jC,yBACA,MACAuB,QACY,OAAUN,GACtBK,IAEAL,IACAK,SACAJ,UACAG,aACAJ,IAAmCqK,MACnC/J,oBACoB,OAAUA,gBAC9BvB,gCAEAuB,4CAGAvB,gBACAA,aACAA,cACAA,iBAEAse,QACA,gCACA,MAAoBkvd,qBAAoBxte,KACvBqE,2CAA4CpD,qBAG7DjB,sCACAA,mBAHAA,+BAGA,EAIA4jC,SACA,oBACA,MAAoB4pc,qBAAoBxte,MACpByte,yCAA0Cppe,IAC9D,eACAnD,yBAKAlB,sCACAA,qBALAA,iCACAA,yBAIA,GAGAiB,qBAQAC,GACAD,mBACAA,uBAGoB,OAAeD,GAEnChB,uBAfA,CAEA,GADAA,mBACAkB,EACA,SAEgB,OAAeF,KAc/ByU,WACA,oBACA,MAAoB+3d,qBAAoBxte,KACxC,mBACA,+CACqBqE,2CAA4CrD,sBAKjEhB,0BACAA,qBALAA,qBACAA,mBAIA,MAIAA,oBAIA0te,kBACA,IACA1se,uBAQ+B,CAR/B,MAEAE,GAEA,GADAlB,mBACgBqE,0CAChB,SAGgB,OAAenD,IAI/Byse,uBACA,IAAatpe,0CACb,4BAEA,IACApD,uBAUA,CAVA,MAEAI,GACA,OAAgBgD,2CAChBrD,mBACAA,sBACA,OAGgBgR,KAAe3Q,IAC/B,GAGA,SAEAuse,eACA,MAAgBJ,qBAAoBxte,KACpCA,mBACAA,4BACAgB,wGC7MO,QAbP,MACA,cACA,wBACAhB,eACA,GAAeE,oDACbA,gBAA0Be,QAAUD,gBAAesmC,eAAgB,GACrEtnC,gCACAA,cACAA,KAEA,kDACAD,GAXA,GCIO,QACPF,eACAG,eACAA,2BACAA,yBACAE,IACAF,yBACAA,qBAGAgjB,cACA,MACA,eACA,OAEA,IAAcuqd,uEAAmEvte,KAIjF,GAHAA,eACAA,2BACAA,yBACAgB,eACAA,uBAEA,SACA,YAAgCM,aAAiCA,EACjEN,KACAmrU,aAGA,IAAY,OAAUjrU,IACtBD,IACAjB,0BAEA,IACAkB,YAGyD,CAHzD,MAEAI,GACApB,eAAsCmE,EAAmBvE,iBAGzD,IAAY,OAAOuB,IACnB,SACAE,WACA,aACA,aACA,IAAoB,OAAQC,GAC5B,IACAA,eAQA,CARA,MAEAC,GACAvB,QACAuB,aAAyC4C,EACzCnE,wBAGAA,YAMA,KACA,UAAsBmE,EAAmBnE,GAGzCguK,OACA,QACA,MACA,eAEA,qBACA,WACAltK,eACA,SACA,wDACA,SAEA,eACA,uBACAA,EAEA,sBACA,UACAA,QACAA,qBAEA,cAEA,sEAGA,IAAcuse,oBAAmBvse,EACjC,YACAA,gCAEAC,gBACA,YACA,SAEAD,qCAEA,oBAIA,SAHAC,YAGA,CAEA,4BACA,gBACAjB,wBAGAkB,UAEAF,EAEAmrU,UACA,4BACA,MACA,sBACA,OACAnrU,gBAKA,MAIA,cACA,6CAAoEqD,EAAmBrD,gBALvFgR,YAGC,OAFD64B,UACA9qC,EAGuF,mDCtIvF,SACO,SACP+7H,eACA2xW,6CACA,MACA,kBACA/+b,2HAEAruC,GACAquC,oEAEAruC,KAEAote,4CACA,qHCXO,gBAAoCpte,IAC3CR,eACA8jC,QACA3jC,cAEAskV,SACAtkV,0BAEAgte,UACAhte,2BACAA,mBAEAskZ,YACAtkZ,6BACAA,oBAsBO,gBAAoCK,IAC3Cwte,cACA7te,yBAEA8te,eACA9te,0BAEA+te,iBACA/te,6BAcO,gBACP,YACA,OAEA,gBAA0BsL,IAC1B,sBAEA,MACA,IACArK,GAAuB,OAAWf,EAAX,CAAWc,EAGlC,CAHkC,MAElCE,GACAF,WAEA,mHCtEO,gBAAoCsK,IAC3CzL,iBACA8jC,QACA3jC,cACAA,sBACAA,iBACAA,oBAEAose,cACA,sCAEA4B,aACA,sBACA,0BACAhue,qCAEAA,cAEAiue,UACA,uBACA,WACAjue,oBACAiB,uBAAgDqD,IAChDrD,kBACAwF,0CACAxF,WACAjB,sBACAiB,EAA6BqD,YAG7BrD,EAEAite,WACA,OAAe,SAAmBlue,OAG3B,cACP,oBACA,OACA0iE,UAAoBz2D,YACpBkie,WAAqBlie,qBACrBmie,UAAoBnie,wBACpBoie,aAAuBpie,wBACvBmge,YAAsBnge,oBACtBqie,aAAuBrie,iCACvB+he,YAAsB/he,oBACtBgie,SAAmBhie,iBACnBiie,UAAoBjie,oBAXb,GAcP,gBAAoC5L,KACpCR,iBACA8jC,SACA3jC,mBAEAgte,UACAhte,oBACA2jC,gBAEA2gX,YACAtkZ,gCACAA,oBACA2jC,kBAEAi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AA,4BAGA0ue,iBACA,uBACApte,WACAC,mBACA,YAAwBG,IAASA,KACjC,WACA,gDACA,OAGA,SACA,WACA,YAAwBA,IAASA,KACjC,WACAE,WAIA,GAHAD,mBACAH,MAEAI,OAEA,YADAL,aAGAE,gBAEAzB,oBACAA,2BAGAuB,UAEAC,GACAD,aAGAote,sBACA,MACA,IACArte,mCAIA,CAJA,MAEAC,GAEA,YADAvB,yBACA,CAEAA,0BAGA,QACAH,eACAG,gBACAA,yBAEA4ue,WACA,SAEAtwd,OACA,wBACA,4CACAjd,EAEAwte,eACA,wBACA,2BAGA,QACAhve,eACAG,aACAA,aACAA,cACAA,sBAEKqJ,QACL,YAEAiV,QACA,qBACA/c,aACA,sBAAmC0K,oBAA+B,CAAIA,oBAEtE2ie,WACA,oCAEAC,eACA,uCAGA,gBAAgCxqe,KAChCxE,mBACA8jC,SACA3jC,cACAA,kBACAA,0BACAA,eACAA,oBAEKqJ,QACL,YAEAiV,OACA,oBACA,qCACA,CAAqBrS,oBAGrB,CAAqBA,yBAGrB2ie,WACA,4BAEAC,eACA,+CAEAd,iBACA/te,sBACAA,mBACAA,8BAGAA,4BAGA6te,cACA7te,oBACAA,6BAEAyG,YACA,OAAe,QAAczG,oBAAsBqE,KAAqBrE,qFC3LxE,QACAH,eACAG,wBAEA8xB,UACA,oDAGA,gBAA8BxmB,KAC9BzL,iBACA8jC,SACA3jC,wBACAA,iBAEAskV,SAGA,GAFAtkV,aACAA,kBACAA,gBACA,MACA,IACA,MAAwB8ue,oBAAmB9ue,KAC3CgB,MAGA,CAHA,MAEAE,GACA,iCAEA,SAAsC,QAAcF,MAAesK,KAAqBtL,QACxFiB,YACAjB,qBAGAA,4BAIA+ue,gBACA,MAAgB9ie,gCAA6BjM,KAC7CiB,IACAjB,eACAA,sBACAiB,iBAEAD,IACAhB,kBACAA,iBACAA,0BAGA6te,aACA7te,qBAEA+te,iBACA/te,qCCvDO,eAAyCK,KAChD,ODHO,cACP,mBACA,yBCCWiE,CAAK,KAAO,OAAKvE,wECHrB,cACP,mBACA,iBACAG,YACA,mBAGA,QACAL,eACAG,gBAEA8xB,UACA,wDAGA,gBAA8BzxB,KAC9BR,mBACA8jC,SACA3jC,gBACAA,cAEA4jC,SACA,oBACA,MACA,IACA9jC,8BAIA,CAJA,MAEAkB,GAEA,YADA2iC,cACA,CAEA3jC,8BACA,YAAwCK,KAAqBL,MAC7DA,YACA,SAAsC,QAAcF,KACpDI,OACAF,gFCpCO,gBACP,OAAW,QAAQsE,oFCAZ,eAA2CgH,KAClD,6BAEA,QACAzL,iBACAG,eACAA,iBAEA8xB,UACA,0DAGA,gBAAqCzxB,IACrCR,mBACA8jC,SACA3jC,eACAA,iBACAA,gCACAA,oBACAA,iBAEAskV,SACAtkV,qBACAA,iBACAA,iBACAA,kFAEAskZ,YACAtkZ,qBACAA,4BAEAgve,gBAEA,GADAhve,qBACAA,eACA,MAAoBwlN,aAAYxlN,KAChCA,oBACAA,iBACAA,0BAGAive,gBACA,mCACA,WACAjve,eACAD,gBACAC,kCAIA,cACAF,mFCnDO,mBACP,2BAEA,QACAD,eACAG,oBAEA8xB,UACA,gDAGA,gBAAuCzxB,IACvCR,iBACA8jC,SACA3jC,oBACAA,gBAEAskV,SACAtkV,gBACAA,yBAEAskZ,YACAtkZ,cACAA,yCAEAA,yHCtBO,eAAkCK,KAEzC,QCNO,cACP,qCDKAiL,CADgCpL,IAChCA,sBACA,6BAEA,QACAL,iBACAG,aACAA,iBAEA8xB,UACA,wDAGA,gBAA8BxtB,IAC9BzE,mBACA8jC,SACA3jC,aACAA,iBACAA,cACAA,eACAA,gCAEAgB,GACA,iBACAE,UACAG,cACAC,gBACA,uCACAJ,kCAEA,eACA,sCACAlB,wBAGAA,mBACAiB,YAGAiue,aACAlve,eAEAA,KADAqte,YACAn/T,sCACArqI,wDAGAsrc,wBACA,qBACA,OAEA,uBACAjue,8BACAlB,oBACA,iBACAA,kBAGAskV,SACAtkV,0BAAkCqJ,eAAuBrI,IAEzDgse,UACAhte,gBACAA,cACAA,0BACAA,mBAEAskZ,YACAtkZ,0BAAkCqJ,sBAClCrJ,oBAGA,QACAH,iBACAG,YACAA,uFE9EO,gBACP,6BAEA,QACAH,iBACAG,eACAA,mBAEA8xB,UACA,4DAGA,gBAA6CzxB,IAC7CR,mBACA8jC,SACA3jC,mBACAA,eACA,uBACAA,gBAGAysN,aACA,aAEA63H,SACA,MACA,IACA,MAAoB8qJ,eAAcpve,KAClCF,UAGA,CAHA,MAEAI,GACA,iCAEA,SACA,eACA,IACA,MAAwBusN,WAAUzsN,KAClCD,eAGA,CAHA,MAEAG,GACA,sCAIAF,eAEAD,IACAC,WACAA,6FChDO,gBACP,mBACA,2BAGA,QACAH,iBACAG,iBACAA,eAEA8xB,UACA,0DAGA,gBAA+BzxB,IAC/BR,mBACA8jC,SACA3jC,iBACAA,eACAA,aAEAskV,SACA,MACA,IACAxkV,kDAIA,CAJA,MAEAC,GAEA,YADAC,yBACA,CAEAF,GACAE,sGC9BO,cACP,2BAEA,QACAH,eACAG,gBAEA8xB,UACA,4CAGA,gBAAgCzxB,IAChCR,iBACA8jC,SACA3jC,aAAqBsL,IAAYvL,4HCV1B,gBACP,4BACA,oBAA+C,OAAM,iBAAsCiS,KAAU,OAAI,MAAuB,OAAc9R,IAAiB,OAAY,QAAWG,wECP/K,gBACP,mBACA,wBACA,kFAEA,2BAGO,QACPR,iBACAG,eACAA,eAEA8xB,UACA,wDAGA,gBAA4BzxB,IAC5BR,mBACA8jC,SACA3jC,eACAA,aACAA,qBAEAskV,SACA,MACA,IACAxkV,gDAIA,CAJA,MAEAC,GAEA,YADAC,yBACA,CAEAA,sGChCO,uCACP,OAAW,QAASsL,IAAQjC,qGCArB,2CACP,2BACApI,oBAA0D,OAAIlB,cAAqB,OAAG,yBAEtF,qBACAiB,KAEAC,uBAEO,QACPpB,0CACAG,eACAA,kBAEA8xB,UACA,2DAGO,gBAAiCxtB,KACxCzE,4CACA8jC,SACA3jC,eACAA,kBACAA,qBACAA,eACAA,cACAA,aAEAskV,SACAtkV,4BACAA,iBAGAA,oBAGAqve,YACA,MACA,qBACA,IACArue,mBAIA,CAJA,MAEAE,GAEA,YADAlB,yBACA,CAEAA,cACAA,kBAEAsve,aACA,YAAoChre,KAAqBtE,MACzDiB,mBACAA,SACA,SAAkC,QAAcf,KAChDgB,OACAD,SAGAqjZ,YACAtkZ,qBACA,yCACAA,4BAEAA,mBAEA6te,cACA7te,yBAEA+te,iBACA,oBACA/te,cACAE,WACAF,sBAEA,oCACAA,6BAIO,2ECjFA,aACP,wBAEA,QACA8xB,UACA,8BAGA,gBAAiCzxB,IACjCR,eACA8jC,SACA3jC,gBAEAskV,SACA,MACAtkV,aACAF,gBAGAE,gBAEAA,YACAF,GACAE,4FCvBO,aACP,mBACA,yBAGA,QACAH,eACAG,mBAEA8xB,UACA,MAAgBy9c,eAAcvve,KAC9BD,cACA,mBACAiB,iBACA,kBACAd,0BAEAc,GAGA,gBAAiCX,IACjCR,iBACA8jC,SACA3jC,mBAEA4te,eACA,MAAgB2B,eAAcvve,KAC9B,MAEA,YADAA,sBAGAA,sBACA,oBACA,QAEA,YADAA,sBAIA,GADAgS,gBACAlS,IAEA,YADAE,sBAGA,MAAgBwve,cAAaxve,KAC7BE,gBACAF,qBACAE,gBACAA,mFC9CO,gBACP,SACA,6BACAJ,MAEA,YACA,6BAGA,QACAD,sBACAG,mBACAA,YACAA,eAEA8xB,UACA,sEAGA,gBAA6BzxB,IAC7BR,qBACA8jC,SACA3jC,mBACAA,aACAA,eACAA,aAEAyve,WACA,kBAEAA,YACAzve,gBACAA,aAEAskV,SACA,gBAKA,wBAJAtkV,YACAA,wBAGA,CAGAqve,YACA,qBACA,MACA,IACAtve,iCAGA,CAHA,MAEAG,GACAF,0BAEAA,YACAA,4FCjCO,QACPH,iBACAG,sBACAA,gBAEA8xB,UACA,MAAgB49c,YAAW1ve,KAC3BkB,wBACAG,oBACA,6BACAA,6BC5BA,aACA,WAAegD,KAER,aACP,WAAuB,SDNhB,gBACP,mBACA,MASA,GAPAnD,EADA,qBACAnB,EAGA,WACA,UAGA,qBACA,0BAEA,wBAAkDM,KAClD,kBACAgB,mBACAA,GCXkCiK,CAAS0G,EAAT1G,CAASvL,sECNpC,kBACP,MACA,OACAD,EADAuJ,sBACAA,EAGA,CACAsme,aACAC,aACA1B,YACA2B,aAGA9ve,UAEA,YAA+B4ve,qGAC/B,MAEA3ue,EADAd,IAEAe,KACAC,KACA,mBAEA,MADAhB,KAEAH,MACAkB,KACAlB,MAA0BM,IAAagJ,OACvC9H,oBACAP,eACAsd,QACAve,WAEA6jC,SACA3iC,KACAlB,YAEA0V,WACAvU,KACAF,SACAjB,gBAGAmB,IACAF,WAIAO,oBAEAvB,cACAE,IACAqB,gBACAA,SACAP,kBACAA,gBACAA,SACAjB,aA3CAuE,KA2CA,kECxDO,cACP,2BAEA,QACAzE,eACAG,aAEA8xB,UACA,yCAGA,gBAA6BzxB,IAC7BR,iBACA8jC,SACA3jC,aACAA,aAEAskV,WACAtkV,uBACAA,uGClBO,iBACP,sBACA,OAAQ,OAAWqE,IACnBgF,QACA2I,IAA2B,OAAM3I,QAGjC2I,IAA2B,OAAM3I,6FCN1B,gBACP,2BACAnJ,oBAA2D,OAAIJ,cAAqB,OAAG,sBAEvFI,oBAEA,QACAL,eACAG,eAEA8xB,UACA,2CAGA,gBAAkCxtB,KAClCzE,iBACA8jC,SACA3jC,eACAA,aAEAskV,SACA,MACA,qBACA,IACApkV,mBAIA,CAJA,MAEAe,GAEA,YADAjB,yBACA,CAEAA,kBAEAsve,aACA,+BACApve,GACAA,gBAEA,YAAoCoE,KAAqBtE,MACzDiB,mBACAA,SACAjB,wBAAiC,QAAcD,KAC/CC,4BACAiB,8BAGAqjZ,YACA,MAAgBwrF,qBAAoB9ve,OACpCD,cACA4jC,kBAEA3jC,mBAEA4te,eACA5te,8BAEA+te,iBACA/te,8BACAA,gBACA2jC,kBAGAkqc,cACA7te,iHC9DO,cACP,UACA,OACmB,SAGnBD,iBAIA,QACAF,eAEA,GADAG,aACAA,aACA,UAAsBsL,IAGtBwmB,UACA,yCAGA,gBAA6BzxB,IAC7BR,iBACA8jC,SACA3jC,aACAA,aAEAskV,SACA,mBACAtjV,eACAA,OACAhB,yBACAgB,QACAhB,4BACAA,6GClCO,cACP,mBACA,cACmB,SAGnBE,kBAIA,QACAL,eAEA,GADAG,aACAA,aACA,UAAsBsL,IAGtBwmB,UACA,yCAGA,gBAAiCzxB,IACjCR,iBACA8jC,SACA3jC,aACAA,oBACAA,aAEAskV,SACA,kBACAtjV,aACAC,eACA,cACAf,cAEA,CAEAA,EADAe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gd,GAAvEQ,yBAAuEH,GAAvEG,WAAuE/S,8CAA8CuS,KAAS,QAAO2gd,wHAAmHr6a,iGAA2GC,MAAwB,KAAxBnxB,WAAauyD,aAAW1hC,UAAe5pD,uBAAoB,wBAAwBA,YAAW,wCAAmCske,0MAA+Lh8c,8BAAiC3yB,4FAAuF,gBAAgBwxC,4CAA4C,mCAAkC,+BAAgC,cAAc,8BAA8B,sCAAsC,oBAAiC,sIAAsI3mC,sCAAsCR,WAAW,iCAAiC,YAAYrK,mBAAmBA,KAAK,mBAAmB,sEAAsE,UAAS9B,0EAA2E,iBAAgB,YAAa,qGAAqGiyT,YAAY,wOCAvlQ,OACA,aACA,gBACA,WACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,cACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,YACA,eACA,mBACA,sBACA,kBACA,qBACA,aACA,gBACA,aACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,cACA,iBACA,aACA,gBACA,cACA,iBACA,cACA,kBACA,qBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,oBAIA,cACA,WACA,YAEA,cACA,cACA,8CACA,gCACA1tT,EAEA,YAEAiH,kBACA,uBAEAA,YACAykZ,aACAzkZ;;;;;;;;;;;;;;;ACnRA,oBACA,gCACA,CAAWgV,wBAAgBjQ,sBAAsC+B,iBACjE,eAA0B,yDAC1BF,MAGO,gBAEP,aAAoBlS,mBADpBK,OAEA6R,sEAGO,iBACP,oCACA,mCAAiDG,MAAOA,KAExD,aADAD,gBACA3F,uDAEA,UAEAnI,yBAGO,gBACP,SACA,8EACA8N,aACA,4DACA,iDAA6DE,aAAcA,KAC3EH,4EACAC,oBAFA,CAIA,SAGO,qBACP,wFACA,mGACA,sBAA6CK,MAAQA,wDACrD,+CAGO,gBACP,sBAAoCN,WAG7B,gBACP,8FAGO,qBAEP,yCACA,gBAAoC,IAAMyd,eAA2C,CAA3C,MAA+BC,IAAYrd,OACrF,gBAAmC,IAAMod,gBAA+C,CAA/C,MAAmCC,IAAYrd,OACxF,gBAAgC1K,oBAJhC,eAA4B,0CAA+D0K,OAI3DF,uBAChCsd,oCAIO,gBACP,IAAwGvd,UAAxGD,GAAcqkF,wBAA6B,qBAA0B,aAAcg6Y,gBACnF,UAAiBnyd,qCAAoD,0DAAqE,cAAc9L,EACxJ,gBAAuB,oBAAsB,OAC7C,gBACA,6DACA,YACA,6HAEA,OADAF,+BACAsd,YACA,cAAwC,WACxC,mBAAmC,CAAS3jB,0BAC5C,YAAmCqG,SAAWsd,OAAU,cACxD,iBAA0Cxd,aAAc,iBAExD,oEAA8GA,IAAO,SACrH,4CAAiFA,cAAiB,MAClG,4BAAyDA,aAAgBG,KAAQ,MACjF,oBAA+CH,aAAgBA,eAAgB,MAC/EG,kBACAH,aAAkC,SAElCwd,cACsD,CADtD,MACU9nB,IAAY8nB,UAAatd,aAAmBD,OACtD,uBAAoC,OAASpG,kCArBAoR,WAqBA,CAItC,0BACP,eACAnL,WAGO,gBACP,gEAGO,cACP,gEACA,sBACA,uCACAoM,gBACA,mCACA,CAAqBrS,4BAGrB,mFAGO,gBACP,oDACA,eACA,2BACA,IACA,iEAOkB,CAPlB,MAEAwG,IAAoBD,GAAMoxB,kBAE1B,IACAtxB,uCAEkB,CAFlB,QAEkB,oBAElB,SAGO,aACP,iBAA6BH,mBAAsBA,IACnDD,4BACA,SAGO,aACP,mCAAkDC,IAAQA,2BAC1D,6BAAyCA,IAAQA,IACjD,uCAAyDK,KAAQA,SACjEH,YACA,UAGO,cACP,kDAGO,kBACP,qFACA,gCACA,aAAiBG,qEAAuF,aAAcF,GACtH,eAAuBD,6BAAgC,mCAAqCE,uCAC5F,mBAA4B,KAC5B,gBAAuByd,6EADW3S,YAA6B,CAA7B,MAAiB4S,IAAYJ,gBAE/D,gBAA8Bpd,cAC9B,gBAA6BA,eAC7B,mBAA4Bud,gDAGrB,cACP,QACA,YAAiB3d,mCAA6C,WAAUA,2CAAsD,aAAcF,EAC5I,kBAA0BA,wBAA6B,cAAoBlG,sCAAgDsG,UAAkBA,GAGtI,cACP,qFACA,gCACA,gCAA2GF,uEAAuF,aAAcD,GAChN,eAAuBA,uBAA8B,oCACrD,uBAA6C0pH,sCAAsCvpH,GAAUtG,oBAAuBuG,IADfF,oCACe,CAG7G,gBACP,6BAAiC7F,+BAAuCR,UAAwBiG,QAChGA,EAGO,cACP,4BACA,SACA,uEACA,mBACAC,EAGO,cACP,0BAA6C20V,WAGtC,gBACP,aACA,sEAEA,gBAGO,kBACP,aACA,sEAEA,kBACA10V;;;;;;;;;;;;;;;ACxMA,oBACA,gCACA,CAAWkO,wBAAgBjQ,sBAAsC+B,iBACjE,eAA0B,yDAC1BF,MAGO,gBAEP,aAAoBlS,mBADpBK,OAEA6R,sEAGO,iBACP,oCACA,mCAAiDG,MAAOA,KAExD,aADAD,gBACA3F,uDAEA,UAEAnI,yBAGO,gBACP,SACA,8EACA8N,aACA,4DACA,iDAA6DE,aAAcA,KAC3EH,4EACAC,oBAFA,CAIA,SAkBO,qBAEP,yCACA,gBAAoC,IAAMwd,eAA2C,CAA3C,MAA+BC,IAAYrd,OACrF,gBAAmC,IAAMod,gBAA+C,CAA/C,MAAmCC,IAAYrd,OACxF,gBAAgC1K,oBAJhC,eAA4B,0CAA+D0K,OAI3DF,uBAChCsd,oCAIO,gBACP,IAAwGvd,UAAxGD,GAAcqkF,wBAA6B,qBAA0B,aAAcg6Y,gBACnF,UAAiBnyd,qCAAoD,0DAAqE,cAAc9L,EACxJ,gBAAuB,oBAAsB,OAC7C,gBACA,6DACA,YACA,6HAEA,OADAF,+BACAsd,YACA,cAAwC,WACxC,mBAAmC,CAAS3jB,0BAC5C,YAAmCqG,SAAWsd,OAAU,cACxD,iBAA0Cxd,aAAc,iBAExD,oEAA8GA,IAAO,SACrH,4CAAiFA,cAAiB,MAClG,4BAAyDA,aAAgBG,KAAQ,MACjF,oBAA+CH,aAAgBA,eAAgB,MAC/EG,kBACAH,aAAkC,SAElCwd,cACsD,CADtD,MACU9nB,IAAY8nB,UAAatd,aAAmBD,OACtD,uBAAoC,OAASpG,kCArBAoR,WAqBA,CAgDtC,aACP,mCAAkDlL,IAAQA,2BAC1D,6BAAyCA,IAAQA,IACjD,uCAAyDK,KAAQA,SACjEH,YACA,UA8DA;;;;;;ACpKA,SASA;;;;;;;SAeA,YAqJA,gBACA,OAAag7C,wCA4Db,qBACA,OAAaA,2BAmCb,qBACA,OAAaA,0BAmCb,qBACA,OAAaA,0BAyCb,cACA,OAAaA,6BA+Bb,kBACA,OAAaA,kCA+Cb,cACA,OAAaA,gBAoJb,uBACA,OAAaA,qCAqEb,mBACA,OAAaA,kBAuIb,uBACA,OAAaA,0CAkFb,gBACA,OAAaA;;;;;;;SAUb,cACAyuE;;;;;;;SAqBA,QACAj8H,qBACAG,mBACAA,oBACAA,sBACAA,iBACAA,mBACAA,kBACAA,iBACAA,uBACAA,mBAEA0we,YACA1we,iBACAA,kBACAA,gCACAA,oBAGA2we,WACA3we,yBAEA4we,UACA5we,wBAEA6we,aACA7we,2BAEA8we,aACA,qBAEA7zO,QACA27H,OACA54X,oBACAA,gBACAA,yBAEAA,iBAGA+we,mBACAtve,wBAEAuve,WACAhxe,iCACAA,oBAEAixe,SACAC,WACAC,SACAnxe,iBAEA6wU,UACA7wU,kBACAA,mBACAA,mBACAA,gBAEAA,cACAA,mCACAA,uBAGAk+I,QACAl+I,iBAEAq0U,eACAr0U,iDAEAoxe,cACA,sDAGAC,mBACA,oDACAj8d,kBACAA;;;;;;;SAmBA,QACAvV,eACAG,mBACAA,oBACAA,kBACAA,iBACAA,mBACAA,sBACAA,uBACAA,iBACAA,eACA,QACA+W,IACA7E,IACA,4BACA,KACAzQ,wBAGAzB,yBACAoS,gBACAgD,MACApV,mBAGAoS,mBACA2E,MACA/W,oBAGAoS,iBACAF,MACAlS,oBAKAA,uEAEA0we,YACA1we,iBACAA,kBACAA,gCACAA,oBAGAi9P,OACAj9P,kCAEA2we,WACA3we,yBAEAgxe,WACAhxe,oBACAA,iBACAA,iCACAA,qBAGA4we,UACA5we,wBAEA6we,aACA7we,2BAEA8we,aACA,qBAEAl4G,OACA54X,mBACAA,YAEAA,gBACAA,kCAEAixe,QACAjxe,mCAEAkxe,UACAlxe,qCAEAmxe,SACAnxe,iBACAA,oCAEA6wU,UACA7wU,kBAEAsxe,aACAtxe,kBACAA,mBACAA,iBACAA,qCACAA,mCACAA,uBAGAk+I,QACAl+I,mCACAA,mBACAA,kBACAA,iBAEAq0U,eACA,yBACAr0U,yBACA,gDACA+W,mBAGAq6d,cACA,mCACA,OACAh8d,GADA2B,wBACAA,IA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h9Y,eAGA,GAFAG,kBACAA,2FACA,+BAGA,iDACAA,kCACA,kDACA68Y,mBAGA2rK,uBAEA,qDACA,iBACA,yBACA3rK,EASA,kDACA,0BAGA78Y,8BACAA,4BAEAmkjB,GAUAsE,sBACA,qBAEA,sBAAyC,KAAOtD,MAEhD,WADAr6iB,SACA4C,MACA,2CACAkyC,sBAGA,oBACA,SACAukgB,iCACAnkjB,4BACAmkjB,mBAqDA,2EAIAzyN,0IACA,eAEA,OADAsvD,aACAxtW,uBACAwtW,EAIA,YAEA,eACA,oBACA9vX;;;;;;;SAUA,eACA,WACA,4BACA0uB,QACA,SAEA,kBACA,WACA,iBACA,kBACAi9V,uBACAj9V,UAGA,SAOA,sCAGA2yS,wDACAL,eACAC,aAEAC,gNAIAC,2MAGAO,mBAEAsvE,sEAEA9uE,gBACAL,udAMAC,krBAaAC,mBAMAC,+BAKA,SACArzV,cAGAG,2BACAA,YAEA0ojB,oBAIA,mBACAvE,MACA,QAWA,GAVAtnK,+BACAsnK,wBAEAtnK,4BACA78Y,wBAIAA,2BAEAmkjB,iBACAtnK,oBAGA,SAEAA,gCACA78Y,mBAEA,mDACA,OACA68Y,KACA,MAEAA,6CAGA,yBAUA8rK,gBACA,iCACA,yBACA,mCACAz1N,qBAEAlzV,mBACAA,iBACA,sBACA,aAAwBmljB,aAAoBA,MAC5C,qBACAC,WACAI,oBACA,2BACAxljB,2BACA,SAEA,gBAEAkia,SACAujJ,WACAryN,SACAqyN,WACAzljB,sCAEA,2BACA,EAEA4ojB,cACA,iCACAh2N,8CACA5yV,oBACAA,iBACAA,oBAGA23c,SACA33c,qBAEA6ojB,2BACA,OACAjpgB,6BACAisb,2EACA,6EAAyFjsb,eAEzF,UAIA,2CAEA20S,mBAOA,eACA,+BACAhsT,uBAGA,kBAFAqX,gBAEA,QADAA,gBACA,oBAEArX,uBACA,iCAEAA,qBACAA,qBAEA,OAKA,iBACA,WACA,IACAksT,aAEA,sBACAooD,6BAGA,SACAzR,MACA,GACA,UACA,yEAEA+5K,KACAhB,MACA/4K,eACAyR,mCACUsnK,SAMV,WAJA,IADAhxN,IACAu1N,2BAWA,CAPA,QAIA,MACA,kBACA,oBACAvE,gCAKA,eACA,qBAIA,eACA;;;;;;;SALA9vN,IACA2sD,UACA,KAsBA;;;;;;;;AAgCA,eACA,aACA,SACApgI,8BAEAjgR,aACAigR,UAEA8zE,cAaA,eACA,aACA,SACA90S,2BAEAj/C,cACAquV,MAEAvtV,KAkBA,eACA,aACA,SACAm+C,yBAEAj/C,YACAquV,MAEAyC,SAaA,eACA,aACA,KACA,6CAEA,uBACA,iBAKA,gBADA,GACA,CAcA,eACA,aACA,KACA,uCAEA,kBACA,iBAKA,gBADA,GACA,CAeA,eAUA,gBAeA,eAUA,OA95BA,eACA,MACA,mEA45BA5G,OAiCA,mBACA,OAzBA,iBACA,kBACA,qDACA,eACA,qCACAwK,GAEAiP,GAkBAwkN,SAkBA,cACA,aACA,YA92MA,GA82MA;;;;;;;UA/OA,YACA9nK,mBACAA,mBACAA,qBACAA,uBACAA,iBACAA,mCANA,CAOC7rD,aAkPD,2BAQA,eACA,aAKA,oBACA6rD;;;;;;;SAmCA,SACAnhZ,cAIAG,sBAEA6+T,eACA,mCAGAslP,GAlDA,eACA,8BAiDAptN,IACAotN,4BACAtnK,GACAsnK,qCAIA4E,sBACA,eACA,eACAlsK,QAEA;;;;;;;SAmBA,UACAnvY,wBAWAs1V,IACAt1V;;;;;;;;;;;;;;;AAoCA,qDACAkkH,uBACAjjH,YAEAuiH,SAKA,eACA,mCAMA,eACA,uBAMA,eACA,4BAoBA,eACA,6BACA8vR,IAGAA;;;;;;;;;;;;;;;AAgGA,mBAEA,gBACA,QACA,wBACA,WACA,UACA,mCAEA,kBACA,eACAA,wBAEA,UAIAnE;;;;;;;SAWA,MACA5lE,iBASA,mBAOA,SACA,mBACA,eACA,oBAEA,GADAkuO,UACA,6BACA,iBAGA,QAEA,gDAEA,wBACA,SAEA,UAGA,SAOA,eACA,gCAaA,mBAEA,YADA,yBACA,CAWA,mBAEA,SACA,qBAEA/5K,GA0KA,eACA,YAAoBxrV,WAAsBA,KAE1C,MADAohW,MAEA,SAGA,gBAjLAgoK,KAGA,UACA,aAAoBxD,YAAqBA,MACzC,eACA,wBAaA,OAEA,SAEA,GADArB,UACA,sBACA,uBACA,UACA,SACAiB,WAGA,CACA,yBAGA,yBACA,sBACA,UACA,SACAA,MAEA,SAEA,MACAwB,MADA,gBACAzB,YACA,YACA,UACA,SACAC,MACA,SAEA,YACA,OAEAsB,GADAE,MACA,GAQAzB,uBAEA,sBACA,QACA,iBACA,eACA,UACA,SACAC,aA/DA,CAEA,yBACA,SAIA,cACA,SACAA,MACAjB,UACA,CAoDA,CAKA,kBAEA,eACA,gBA+BA,sBACA,YACA,SACA,SACA,WACA,UACA,mBACA,eACA,UACA,UAEA,kBACA/4K,cAEA,gBACA,eAGA,0BACAo6K,WAEA,SAEA,UAEA,MAEA,WAEAL,MACA,UAGAA,WAGA,SAGA,OAgCA,iBACA,mBACA,QAEA,IADAtoK,IACAA,aACA,cAGA,uBACA,SACA,UACA,SACAA,IAGA,SA/CAvtD,MAGA,sBACA,aAAoB60N,YAAqBA,KACzC,iBACA,SAGA,SA6CA,iBACA9jjB,cAAsCw8Y,WAAiBA,KACvD,cACA,wBAGA,cAAwBsoK,YAAqBA,KAC7C,kBACA,WAGA,UAEA,SAEA,iBACA,gCAEA,eACA,WACAtoK,IACAsnK,KACAgB,MACA/5K,MACA,kBACA,YACA,uBACA,SACA,gBACA+5K,IACA,6CAEA,KACAA,WAEA,OACAA,gBAqBA,mBACAvlgB,aACAulgB,OAEAhB,MAGA/4K,eAEAyR,IAEA,gBACAj9V,cAEAA;;;;;;;;AAiEA,SAA+F;;;;;;;SAgC/F,eAEAgkT,wBAEA,sBAIA,OAEA,GADA,QAjoOA,IAkoOA,CACA,8BACA,WACA55O,eAGA,CACA,yBACA,WACAG,aAQA9T;;;;;;;;;;;;;;;AAgDA,iBAGA,kBAEA,eAEA,mBAEA,eAEA,OACA,IADA,IACA,CAQA,eAEA,WAEA,eAEA,oBAEA,iBAGA,gBACAz2D,KAEA,eAEA,OACA,IADA,IACA,CAEA,eAEA,WAitBA,+BAqCA,iBACA,yBACA,YACA,aAAwBukgB,YAA2BA,OACnD,eACA/4K,WACA,YACA,oBAIA3oD,OACA2iO,gCAiBA,wCACA,6BACA,UAngQA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,IACAx3U,cAvgSA,GAwgSAy3U,KAtqBA52G,gBACA,oBAyqBA,mBACA,0BACAs1G,kBAEAC,IADApkK,kBACAnE,SACA2oK,GAzsQA,cACA,uCAwsQA7xP,GACA,IACAt9M,OACA,cAAmCovc,MAAgBA,MACnD,oBACAgB,SACAzpN,QACA,+DACA2tN,UAMA,CANA,QAKAt0c,OACA2mP,QA3rBA4tN,SAOA,sBACA,sBACA,cACA,iBACA,aAAwBx/K,aAAuBA,OAC/C,kBACAo6K,WACA3oK,OACAmE,MACAA,aAWA,eACA,gBAGA,uCAIAA,uGAEAphW,EAeA,wCAEA,SAt4QA,GAs4QAukgB,GAIAyC,SACAF,GA6EA,iBACA,WACA,aAAoBvC,KAAuBA,KAC3CtnK,qBAEA,SAlFAo7E,QACA0uF,iCA0EA,OAzEAD,GAx6QA,GA28QA,CACAr5f,OACAw9f,aACAxmc,WACAxmE,aACAulP,aACA0nR,YACA1hjB,8BACA2hjB,qBACAC,qBACAC,wBACAC,mBACAC,mBACAC,qBACAC,wBACAC,mBACAC,wBACAC,kBACAC,uBACAC,eACAC,oBACAC,kBACAt2L,aACAqvL,oBACAsD,gBACA4D,gDACAC,2CACAr1gB,gBACAwugB,WACAR,UACAsH,wBAqCA,mBACA,UAEA,0BACA,iCAEA,0BACA/qK,mBACAphW,EAMA,yBACAukgB,GAYA,sBACA,eACA,SAMAgB,aAGAA,WACAnkK,mBACAvkG,4BAsFA,mBACA,gBACA,yBACAogG,cAAgDA,EAChD,eACAA,qBACAA,iBAGAA,aAIA,SAkEA,kCAEA,iBACA,IACA4pK,GADAD,aAEAhB,2BACAv+M,iBACAnjU,OAqCA,iBAEA,gBACA,KAzwRA,KA0wRA+4W,EA1wRA,IA0wRA,IAxCA3hC,aAKA,UACAipM,GA7BA,eACA,kBACA,YACA,UACA,UACA,iBACA,aACA,gBACA,YACA,eACA,WACA,eACA,WACAnjK,EAgBA/lC,KAYAkqM,qCACA32Q,OACA48F,yBAEA/xE,SACAosP,qCACAA,YAGA7lgB,OA0IA,sBAIA,UACA,SACA,SA0KA,mBAGA,6BACA,YACA,MACA,aA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,cACA,YACA,YACA,IACAu6M,GADAtnK,UAGA,WAz6UA,GAy6UAxvV,kBACAwvV,KAEA,aA36UA,GA26UA,OAr6UA,EAq6UA,CAaA,eACA,4BAYA,eACA,cACA,YACA,eACA,gBA18UA,GA08UAzzY,kBACA,yBAuDA,eAEA,qBACA,SAEA,cACA,YACA,SAEA,gBACA+6iB,KA5gVA,GA6gVAgB,eACA,0CAGA,mBACAvlgB,0BAIA,0CAPA,GAoBA,eACA,MAAY//C,eAAcmhZ,EAC1B,MACA,2DAIA,cACA,KACA,OACA5oT,gBACAytO,kBACAoB,8BACAtiT,mCACA0S,YAGA,eACA,UACA,CAAiB+gE,qCAEjB,KA8BA,eACA,oBA+CA,eACAwxQ,MACA,cACA,YACA,SACA,gBACAu6M,KA5oVA,GA6oVAgB,KAvoVA,GAwoVA/5K,cACAg6K,MACA,UACA,aAAwBI,cAAoB,CAC5C,kBACAgB,YACA,wBACA,YACAI,aACAF,gBACAC,YAIA/yI,8CACAw5I,4BACApsK,OACAokK,SAAqC32O,uDAKrC,mBACA22O,GAEA,iBACA,sBACA,EACApkK,mBAOA,eACA,uEA6CA,eACA,wDACA;;;;;;;SAoBA,eACAqsK,MACAjjN;;;;;;;SAAA,CA/aA5H,yBACAA,eAEAA,kBACAl8C,SACAx3I,iBACAvqK,qBAMAi+V,wBA4bA,UAOA,cACAuH,KACAA,MAMAC,2BACAA,8BACAA,sBACAA,oBACAA,sBACAA,4BACAA,wBACAA,qBACAA,2BACAA,uBACAA,uBAOA,iBACA,4CAKA,WAEA,MACA,YACAm6M,KACAA,YAEAA;;;;;;;SA+BA,oBAGA,8BACAA,qBACAgB,SACAA,aACAA,WAEA,4BAEAK,MADA3oK,4BACAj9V,6BACA6lgB,iBACA,IACAe,mCACAC,2BACAG,gDACAF,0DAEA,OADA5sa,OAEA,IACA+iQ,SACAA,UAEA8pK,MADA/7M,qBACAu6M,+BAEAqF,eAEAH,mBAKA,CALA,QAGA77a,KACAquQ,OACAA,QAEA,UAcA,4BACA,WA94VA,GAi5VAA,EAt3VA,IAs3VAmE,EAIA,eA13VA,GA03VA,gBACAwlK,8BACA,YACAj+M,aACA,WACAh3H,YACA,mBACAo5G,oBAEA,kBACAH,qBAIA,gCACAo8N,oCAz4VA,IAy4VAnB,wBACA,4BACAh0U,uBACAu6U,UACAzlN,mBAEAp9D,SAEA0zG,EAj5VA,IAi5VA+pK,GAMA,yBACA,WAn7VA,GAq7VAxB,GAlkEA,mBACA,cACApkK,oBACAnE,qBACAA,uBAIAqvK,UAHAoB,eAGAzwK,IAEA,sCACAlzF,SACA,kBACA,WACAA,SAEAw7P,GAkjEAnlQ,SAMA,GALAmkQ,uBACAnjK,EAh7VA,GAg7VAokK,GACAD,6BAGAvlgB,kBACA,cAEAA,yCAEA,cAEA,wBACA,4CACAy2D,aAEA81c,GADAtvK,EAr8VA,GAs8VA2oK,0CACAmF,SAEA,UAEA,iBACA,OACA1C,cACAp4E,gBACA5E,SACAsiF,sBACAt1J,SAgBA,iBAMAluS,GAHA8/L,GAFAm3F,GAl+VA,GAq+VAv/M,KAEA,CAkBA,eACA;;;;;;;SAUA,eACA,sDAQA,eACA,iBACAo7M,KACA,aACA,SACA,OACA,SAEAsoK,gCAEA,CACA,gBAIA,gBADA,GACA,CAGAA,eAEA,OACA,MACAhB,YAGA,WACAiB,uBACAA,uCACAA,yBAEA,yBACAI,aAEA,sBACAgB,qBASA,GARAf,aACAe,aAEA1mjB,sBACAA,sCACAA,wBAGA6kC,2BAGA,gBACA8hhB,2DAIA,qBACA,MACA,aAAgCrB,aAAqBA,MACrD,gBACAI,kBACAA,MASAA,UACA3oK,OAKAj9V,4BAWA,eACA,QACAi9V,OAEA,sBAA8CsnK,MAAQA,MACtD,eAEAgB,2BAEAA,aACA76L,uCAnBApf,KAsBA,eACA,cACA,GAEA81C,OACA,GAGAA,EAGA,iBACA,oBAEAA,YADAnE,EACA,UACAj9V,SACAi9V,UAIAj9V,EAGA,iBACA,yBAEAohW,iBADAnE,EACA,aACAj9V,YACAi9V,aAIAj9V,EAGA,iBACA,uBAEAohW,eADAnE,EACA,UACAj9V,SACAi9V,UAIAj9V;;;;;;;SAeA,UAEA,qBAWA4tgB,IAGA,WACA,QACA,SACA,OACA,SACA,qBAEA,SACA,gBAEA,WAkBA,eACA,IACA3wK,EADAj9V,aAIAi9V,EAFAl4W,MAEAib,YAIAA,YAGA,WAEA,mBACAukgB,aAEA,SAEA,mBACAA;;;;;;;SAYA,YACA,cACA,QACA,kBACA,iBACAz4M,kBAEA,CAEA,kDACA,YAA4BmxC,aAAiBA,GAC7C,cACA,6BACAmuC,4CACAt/E,SAKA;;;;;;;SAUA,iBACA,cACAy4M,SACA,aAqBA,mBACA,mBACAgB,aACA,QACA,mBACAC,aACA,oBACA,SAGA,GAFAh6K,mBAEAyR,qBACA,UA/BA/wC,WAKA+wC,IAFAmE,6CAEAmjK,KADAvkgB,8CAKAnzC,eAIA,eACA,gBAEA4D,oBACA2wY,mBACAr1C,SAHA,CAiCA,eACA;;;;;;;SAYA,mBACA,cAGA,iBAIA,YAeA,mBAIA,cACA,yBAkBAq1C,QACA,GAIA,sBACA,mBACA,wBAGA,yBACA,sBACA,wBAGA,4BACA,sBACA;;;;;;;SAuBA,sBACA,cAEA,SADAvqQ,KACA72F,IACAoiE,KAEAykP,GADAhwP,KACA0uc,aAGA;;;;;;;SAsBA,iBAGA,SACAhB,QACA,aAAoB/4K,YAAmBA,MAEvCyR,sBAGA,GADAr7L,QACAq7L,EACA,UAGA,YACA,aAAoBzR,YAAmBA,MACvC+5K,qBAEA,UASA,sBAEA,UADAnkK,UACAphW,aAKA,4BACA,MACA4lgB,QADAtva,KACA2mQ,MACA,aACA2oK,yBAKA,kCACA,MACAgB,QADAtwa,KACA2mQ,SACA,aACA2pK,GACA5mgB,4BACA+jT,GAKA,wCACA,MACAijN,QADA1wa,KACA2mQ,YACA,aACA+pK,sBACAnljB,kBACAkiW,GAKA,8CACA,cACA,2BACA,4BACArlC,MACAqoP,sBACAlljB,2BACAkiW,GAKA,oDACA,cACA,2BACA,+BACArlC,MACA8uP,GACAxtgB,4BACAn+C,2BACAkiW,GAKA,0DACA,cACA,2BACA,kCACArlC,MACAmvP,sBACAhsjB,2BACAA,kBACAkiW,GAKA,gEACA,cACA,2BACA,qCACArlC,MACAovP,sBACAjsjB,2BACAA,2BACAkiW,GA2BA,4BACA,cACA6hN,i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kCA,iDAGA9vC,SADA0gN,GADApwX,KACAw/M,sCACA,GAoCA,uDAGA9vC,SADA2gN,GADArwX,KACAw/M,4CACA,GAsCA,6DAGA9vC,SADA4gN,GADAtwX,KACAw/M,kDACA,GAyBA,eAGA9vC,SADA6gN,GADAvwX,KACAw/M,IACA;;;;;;;SA+BA,mBAGAlwC,GADAygN,GADA/vX,KACAw/M,OACA,CAyBA,yBAGAlwC,GADA0gN,GADAhwX,KACAw/M,aACA,CA4BA,+BAGAlwC,GADA2gN,GADAjwX,KACAw/M,mBACA,CA8BA,qCAGAlwC,GADA4gN,GADAlwX,KACAw/M,yBACA,CAgCA,2CAGAlwC,GADA6gN,GADAnwX,KACAw/M,+BACA,CAoCA,iDAGAlwC,GADA8gN,GADApwX,KACAw/M,qCACA,CAsCA,uDAGAlwC,GADA+gN,GADArwX,KACAw/M,2CACA,CAwCA,6DAGAlwC,GADAghN,GADAtwX,KACAw/M,iDACA,CA0BA,eAGAlwC,GADAihN,GADAvwX,KACAw/M,GACA;;;;;;;SAoCA,yBAGA,YADAuwK,GADA/vX,KACA5hJ,QACAulgB,OACAlyM,GA8BA,+BAGA,YADAu+M,GADAhwX,KACA5hJ,cACAwlgB,OACA/vM,GAgCA,qCAGA,YADAo8M,GADAjwX,KACA5hJ,oBACA6lgB,OACAhuM,GAkCA,2CAGA,YADAi6M,GADAlwX,KACA5hJ,0BACA6mgB,OACAnyM,GAoCA,iDAGA,YADAq9M,GADAnwX,KACA5hJ,gCACA8mgB,OACAnyM,GAsCA,uDAGA,YADAq9M,GADApwX,KACA5hJ,sCACAg0X,OACAp/D,GAyCA,6DAGA,YADAq9M,GADArwX,KACA5hJ,4CACA+tgB,OACAl5M,GA2CA,mEAGA,YADAq9M,GADAtwX,KACA5hJ,kDACAgugB,OACAl5M,GAgCA,mBAGA,YADAq9M,GADAvwX,KACA5hJ,GACAi9V,MACAloC;;;;;;;SAAA,CAwBA,mBACA,cAEA,SADAl+N,KACA72F,IAGAmmT,GAFA/jP,KACAvL,KACA0tc,mBAGA,UAuBA,mBACA,cAEA,SADA1ta,KACA72F,IACA,cACAwlgB,QA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,4BACAA,GAMAvlgB,kBAA2CwrV,aAC3C+4K,WACAgB,QAPAtoK,uCACAzR,QACA+5K,OAWA,uBACAtoK,EAqCA,4BAEA,SACA,UACAxvV,aACAkmgB,qCACAC,aACA7jB,SACAjnd,UACAyjP,UACAznO,YAqOA,mBACAs8S,qDApOAyyK,UApmCA,mBACA,mBAGA,UACAzyK,YAIAmjK,WA4lCAuP,UACA,mBACA,aAAoBlN,aAAmBA,MAEvC,gBACAI,MACA,aAAwBF,aAAqBA,MAC7C,gBACA,wBAEA,uBAEAD,uBAAsC7yI,kBAGtCwxI,+CACAA,GAEAA,IAmNA,mBACApkK,mBAnNA5hC,UAUA,eACA,WACAy9B,KACA,SACAsoK,KAWA,YAVAnkK,kCACA,OACAmjK,GADA,cACA,EAGA,EAEAgB,6BACA,MAIA,aAAsBC,cAAmB,CACzC,uBACA,SAEAI,yCAEAA,WACA5lgB,WAEA,sBACAA,mBACAi9V,WAIA,OAAaxvV,yCAYb,eACA,MACA,SAEA,QACA,WACA82f,MACAgB,WAGA,OACA,IAFAA,eAEA/5K,gBACA,kBACA,eAEA,GADAyR,QACA,aAEA,2BACAo2K,YACA9O,gBAGAA,YAEAvkgB,YAGA,CACA,gBACA,2BACAukgB,YACAvkgB,OAEAi9V,aAGA,wBACA,mBACAsnK,GAMA,kCACA,YACAqC,MACAC,MAMA7mgB,iBACAA,kBACAA,kBACAA,kBAEA,YADA0tP,MACAk7Q,wBAEA7B,cACA,UACA3nM,iCAGA,EAGA,2CACA,SACA0nM,iBACA,UACA,wBACA,yBACA76E,kBACA,YACAuhF,4BACA,0BACAuG,mBACA3yK,cACA,uBACA,aAAoC8sK,aAAoBA,MACxD,qBACAmC,yBACApC,mBAGA56N,wBACAivE,OACA9nD,gCAEAhnB,OACAgnB,gCAGAA,mCAWAkF,aAIAsnM,uCACAA,GACA3nM,aAEA,WACA4sH,eACA,4BACA4hF,gBACAkG,2BACA10M,aACAwuM,KACA7G,GACAxsM,6BAEA,WACAyxH,kBAEA,qCACA,OACA,MACAiiF,MADArqiB,oBAGAkwiB,SAAwG,UACxGt1M,oBACAa,cAIAwnM,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A,GAeA,CAQA,eACA;;;;;;;SAiBA,iBACA,gCAEA,mBACAh9Y,iBACA8jC,QACA3jC,eAEAA,6BACAA,mBACAA,mBAOAA,2CACA,eAGAA,2CACAA,yBACA,CAAc85F,yBAAwC,CACtDA,WACAC,yCAEAh6F,MAIAC,4CACAA,0BAEAO,6CACA,6BACAP,KAEAA,6BAEA6wU,UAEA,0BACAjxR,yBACA5/C,gCACAA,qBAEA6we,aAEA7we,yBAGA,mBACAH,eACA8jC,QACA3jC,kBAEA,UADA4/C,IAyBAw4S,MAGA1vQ,UACA;;;;;;;SAuCA,mBACA,gBACAy8d,QACA,mBACAn5M,0BACAkpN,UAcA,sBACA,8BAeA,yBACA,iCAgBA,4BACA,oCAiBA,+BACA,uCAkBA,kCACA,gBACA1O,QACAC,wBACA,0BACAz6M,uCACApsT,kBACAs1gB,YAmBA,qCACA,gBACAzO,QACAG,wBACA,6BACA56M,0CACApsT,qBACAs1gB,YAoBA,wCACA,gBACAtO,QACA,4BACA,gCACA56M,6CACApsT,wBACAs1gB,YAqBA,2CACA,gBACAxO,QACAC,wBACA,mCACA36M,gDACApsT,2BACAs1gB,YAiBA,sBACA,8BASA,iBAEA,aACA,uBAcA,4BACA,aACA,mBACAlpN,oCACA1Q,WAeA,+BACA,aACA,sBACA0Q,0CACA1Q,WAgBA,kCACA,aACA,yBACA0Q,gDACA1Q,WAkBA,qCACA,aACA,4BACA0Q,sDACA1Q,WAiBA,4BACA,WACAkqN,MACA,aAAoBC,aAAiBA,KACrC0P,2BAEA,mCACA75N;;;;;;;SAmBA,iBACA,aACA,OACA,WAnrpBA,GAorpBAuhD,mBAGAsnK,GAkCA,iBACA,KACA,qBAA0CtnK,KAAQA,KAClD,cACA,eACA,WAvCA/6C,mBACA+6C,cACAsnK,eACAtnK,4DAIAsnK,cAEA,8CACAiB,UACA,IAGA,gBACAK,QACA,cACA54M,iBACA44M,EAKA,CALA,QAKA5whB,QAwCA,mBACA,WAvvpBA,GAwvpBAswhB,QACA/5K,aACA,iBACAruC,gCACAquC,gBAeA,sBACA,WA5wpBA,GA6wpBAA,QACAg6K,aAC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BACA,WA9trBA,IA8trBAh/V,YACA,sBACA,gBACAungB,aACAI,MACA,aAAwBC,aAA0BA,OAClD,gBACA,QAIAD,kBAEA,CAEA,gBACAA,4CAGAL,cAEA,kBAMA,sBACA,iCACA/5K,cACA,cACA,sBACA,aAAwBo6K,aAA0BA,OAClD,gBACA,QACArB,sBAEA,CACA,kBACAsC,UAGA,WA3yrBA,GA2yrBsDG,aAAkCA,MACxF,gBACAF,GA5wrBA,MA4wrBAA,GA3xrBA,IA4xrBAtya,MA9xrBA,GA8xrBAsya,UAKA,aA1zrBA,GA0zrBA,CACA,YA3zrBA,GA4zrBA,aAAoCA,aAA2BA,MAC/D,gBACAtya,MAvyrBA,GAuyrBAuya,cAMA,UAWA,eACA,aACA9pK,OACAsnK,QACA1hO,SACA,iBACA,YACA2Z,SACA,2BACA,qBACA4kD,gBAEA,CACA,8BACA5sQ,cACAgib,cACAp1K,eACAA,oBAEA,SAEA,SAWA,mBAEA,cACAmjK,qBACAkS,wBACA,WACAlS,0BAGAmS,cAcA,sBAEA,cACA,uBACA,cACAD,+BAkCA,iBACA,gDACAlS,6BACAvkgB,QACAi9V,6BArCA05K,OACA,WACApR,4BAGAmR,cAOA,cACA,OAEA,iBAIA,SAr3rBA,IAq3rBAz4gB,qBANA24gB,YAQA,mBACA,0BACAr7M,sBACA,SA13rBA,MA23rBAv7T,EA33rBA,IA23rBA,QACAA,EA53rBA,IA43rBA/B,yBAEA,mBACA,mBACAmjW,kBACAA,6BASA,gBAEA;;;;;;;SAgBA,gBACA;;;;;;;;;;;;;;SAuBA,SACA,yBACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,+BACA,+BACA,gCACA,8BACA,8BACA,0BACA,+BACA,mCACA,sBACA,+BACA,8BACA,iCACA,mCACA,kCACA,gCACA,qCACA,wCACA,2BACA,6BACA,+BACA,4BACA,8BACA,+BACA,4BACA,0BACA,uBACA,qCACA,mCACA,gCACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,6BACA,8BACA,2BACA,wBACA,0BACA,qCACA,qCACA,yBACA,yBACA,yBACA,yBACA,yBACA,6BACA,4BACA,wBACA,mCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oBACA,4BACA,yBACA,yBACA,4BACA,yBACA,wBACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,wBACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,yBACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,yBACA,uBACA,wBACA,oBACA,+BACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,oBACA,8BACA,uBACA,yBACA,uBACA,yBACA,+BACA,6BACA,+BACA,2BACA,iCACA,gCACA,4BACA,6BACA,mCACA,8BACA,2BACA,wCACA,iCACA,wCACA,uCACAugI,aACA0sC,qBAGA,WAmBA,cACAv9J;;;;;;;SAUA,YAQA,UAMA,cACA,QACA+lK,MACA,IACA,sBAAiDz1K,KAAQA,KACzD,MAAwB01K,yBAAuB/lK,MAC/C9T,2CAEA8T,eACAgmK,SAKA,CALA,QAKAF,QASA,eACA,wBACAz1K,cAEA9/Y,KAOA,oBACA01jB,QA5CA,iBACAjmK,SAAuB+lK,0BAgDvBG,MAQA,sBAGA,gCACA,YACApqjB,4BACAw8H,gBACA1oI,SACA,YAOA4kjB,mCAAgFnkK,sBAAgB,CAChG3zV,OACAoyQ,qCACA4lP,uBACAz4Z,0BACA59I,OACAA,QACA0va,0BACA1va,OACAA,QACAi2iB,qCACAlmiB,gBAMAomiB,aACAA,gBAGAA,MAGA,YACA14iB,2BACAlM,SACA,cACA,cACA6qY,gCAAgF4V,sBAAgB,CAChGtzY,YACA2/C,OACAslH,WACAt7H,iCACA62gB,sBAGA,WAGAjlb,kBAEA,YACAx8H,4BACAlM,SACA,cAGA,UACAmN,YACA2/C,OACAq/F,0BACAE,UACAhtG,uBACAA,wBAIAwlgB,GACA76M,gCAAsEy2C,sBAAgBw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CAvlgB,0BACA,mCAGA,+CACAi9V,IACAmE,KAEA,gDACAmjK,KACAvkgB,MAGA,OAAaq6gB,4DAmIbC,+BAyJA,eACA,cAzCA,eAcAl5K,6DAGAA,yEAUAA,qBACAA,uEACAA,iCACAm5K,MACAn5K,0BACAo5K,MACAp5K,gCACa,SAAsB,SAEnCA,8BAEAm5K,OAIAE,KAEAr5K,wBACAtzY,eACAm3c,YAAsBy1G,kBACtBC,kCACA,IACA,aACA19K,yBAOA,CAPA,SAGAmE,6DACAA,qCACAphW,IAEA46gB,QAGAC,iCACA,IACA,aACA59K,wBAMA,CANA,QAGAmE,oCACAphW,IAEA46gB,QAGAE,yBACA79K,iBACAsnK,UAGA,wBACAnjK,qCACAm5K,MACAC,OAEA,yBACAp5K,uCAIA25K,6BACA99K,qBACAmE,6CACA,KA1MA45K,8BAIA,oGAGA,yBACA,kGAIA,wBACA,kEAeAlpQ,YACA,+BAcAmpQ,mBACA,qBACAzV,uDACA,IACA,0BAGA,CAHA,QAGAh6K,mBAOA0vL,mBACA,sCAeA5gF,qBACA,2BAGA,YACA,eAgBA,uDACA,IACAl5F,aACAA,6BASA,CATA,QAIA,GADAA,cACAA,uBACA,IACAA,8CAGA,CAHA,QAGAA,gBAoGA,eACAA,0BACAA,4EACA,kCACAA,0BAGAA,0BAGA,eACAA,aACAA,aACAA,cACAA,yBAGA,eACAA,aACAo5K,MAMA,SACAv6jB,cACAG,6BACAA,6BACAA,iBACAA,uBACAA,6BACAA,qBACAA,oBAEA0xT,YACA,qBAEAopQ,mBACA,qBAEA5gF,qBACA,WAEA2gF,mBACA;;;;;;;SAiBA,SACAh7jB,eACAG,eACAA,qBACAA,sBAOAA,iBACAA,mBACAA,2BACAA,2BACA4/C,WACA5/C,sBACA,qEAGA+6jB,sBACA/6jB,mCACAse,UACAte,iBACAA,yBAGAA,oCACAA,iCACAse,UACA08iB,4BACAh2L,QACAhlY,sBACAA,mCAUAi7jB,8BACA,6BACAj7jB,iBACAA,mBAMAk7jB,8BAEA,GADAl7jB,sBACAA,qBACA,qDAEA,mCACAA,mBAKAk7e,WACA,sFAEAigF,uBACA,mBAEAn2L,QACA,kCACA,4BACAj6V,0BACA6U,wBAEA5/C,uBAGA,CAEA,6BACAA,2CACA68Y,6BACA9xW,2BACA,IAIA/qC,kBAGAo7jB,kBACA,6BAIAp7jB,yCACA,CACA6jC,gBAGAw3hB,oCACAjyjB,eATA,GAaAkyjB,oBACA,UACAz+K,SACAsoK,mBACAnljB,8DACA4/C,yCACai9V,IAEb78Y,sBAA+Bu7jB,oCAc/BC,mBACA,8BACA,8IAIAx7jB,yBACAA,4BAMAy7jB,yBACA,0BAQAC,sBAEA,UAGAC,yBAAqD,2BACrDA,kBAAuDr1Q,gCAUvD,SACAzmT,cAEAG,2BACA47jB,qBAOAC,yBACA77jB,4BAMA87jB,yBACA97jB,6BAKA+7jB,4BACA/7jB,2BAMAg8jB,kBACA,uCAKAC,sBACA,+CAKAC,qBACA,6CAQAC,8BACA,2CAGAC,yBAAqE,mBACrEA,kBAA+D91Q,sDAiB/D,eACAs1Q,KAEA,WAbA,SACAS,gBACAF,8BACA,cAmBAG;;;;;;;SAKA,sCAOAC,+BACA,mBAEA,mBAGA,2BAoCA,eACA,yBAOA,SACA18jB,iBACAG,YACAA,cASA,eACA,uBAIA,gBADA,GACA,CAGAs8jB,KACA,kBACAz/K,iBACA,UACAA,oBACAj9V,EAaA,sBACA,sBAA8BA,IAC9BulgB,cACA,gBACA,YACA,gCACA,aACAtoK,KACAzR,GACA,CAAkBtxS,yBAElBknT,EACAA,MAGAw7K,GA2BA,oBACA,kBACA9ujB,OACAg/I,WACA,CAAc5yD,gCACd,CAAcA,oCACdknT,KAjCAy7K,SAGA,eAQA,eACA,aACA,OAEA,gBADA,GACA,CAMA,SAsBA,cACA,MACA,yCAOA,cACA,MACA,gEAWA,SAEA58jB,eACAG,iBACAA,iBACAA,0BACAA,mBAQA08jB,4BAKA,MAGAtX,GAyHA,iBACA,MACA,OACAvoK,EADA,WACA,QAGA,iCACAm9K,wBACA2C,8EACAC,4EAGA//K,EArIAggL,CAHAhgL,kBAGA,CAAiDigL,sBAFjDjgL,+BAEiDkgL,oBADjDlgL,+BAEA2oK,KAA6B1rd,yBAK7B,mBACA,oBAAqD4yD,2DACrD85Z,gBACAC,4BACA,QAIA,gBADA,GACA,CAEA,iCACA,+BACAnoiB,UACAmoiB,sBAGAD,kBACAwW,qBACApW,qBA+GA,mBACA,IACA,aACA,cACAzC,cACA,iDAEAgB,KAGAhB,EAKA,CALA,MAEAA,IACA,iDAEAA,IA3HA8Y,YACA,6BACA,4BACArW,yBAGAsW,GADA1W,wBACAliL,IACAtkY,4BACAwmjB,SAqBAhmP,wBACA,eAAyCq8E,GACzC,6BACA1gR,6CAEAghc,sBACA,2BACA,mCACAv9gB,6DAEAA,yBAGA,CAMA,gBADA,GACA,CARAA,2BAQA,CAEA5/C,sBAKA6we,aACA7we,+BAMAg6F,eACA,sBAMA62O,UACA,oBAIA,gBADA,GACA,CAEA7wU,8CACAA,uCACA,oCACA,aACAA,mBAEA4mL,gBACA,wBA2CA,iBACA,OACAo6N,EADA3wY,iBACAuvC,eAGAnzC,+BAA4Cu0Y,KAE5C,CA/CAjiY,yBAAqD,2BACrDA,kBAAuDunS,sDA6IvD,SAEAzmT,uBACAG,aACAA,iBACAA,0BACAA,oBAEAA,4BACAA,eACAA,qBACAA,gBAKAA,uBAIAA,mBACAA,0EACAse,UACAte,oBACAA,iBAIA,aAAsCsE,IAAUkhjB,KAChDxljB,qEACAA,gCACAA,kCACAwljB,sBACAA,kBAGAJ,OAA6B9gjB,IAAUkhjB,KAGvC,OACAxljB,kCACAyljB,sCACAuV,4BAGAh2L,SACAhlY,iDACAA,kCACAA,gBACAwljB,mBAKA,8CACAwV,yBACAh7jB,eACAA,gBACAA,kCACAwljB,iBAIA,WACAC,iBACAe,oBAGAxmjB,eACY,OAAOorY,YAAkC,WAuCrD3rE,eACA,2BAKA,gBADA,GACA,CAEA,OAEA0kP,GADAvkgB,gBACAA,EAIA5/C,KADA+2gB,kBACA33W,2BAEAp/J,2CAEA,6CACAorY,kBACAg6K,+BACAI,6BACAC,4BACAe,2BACA,eACAA,8BAEApB,kBACApljB,6BACAg9jB,uBACAxW,IACAA,+BAGAxmjB,wBAKAoljB,GAYAgY,OACA,sBAIA,gBADA,GACA,CAEA,IACAp9j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klF,uBAohDlG,0BAA0FpzD,4BAphDQozD,CAohDlG,8BAA0FpzD,wBAA1F,MAphDkGozD,2BAohDlG,YAphDkGA,wBAohDlG,6BAphDkGA,CAohDlG,sCAphDkGA,CAohDlG,wCAphDkGA,wBAohDlG,2BAphDkGA,CAohDlG,kCAphDkGA,CAohDlG,uBAphDkGA,CAohDlG,sEAphDkGA,wCAohDlGa,oXAphDkGb,qDAohDokB,iCAphDpkBA,2BAohDuvB,YAphDvvBA,yBAohDuxB,GAphDvxBA,kDAohDw4B,kBAphDx4BA,sBAohD0+B,YAA5kC,MAphDkGA,uBAohD0lB,oBAphD1lBA,sBAohD66B,GAphD76BA,uBAohD66B,kCAphD76BA,sBAohD4hC,GAphD5hCA,uBAohD4hC,wCAphD5hCA,CAohD4hC,qDAA9nCm6O,YAA0mFurR,GAA2G7xF,KAAiF4hF,IAAtyF30f,24CA4EA,UAEAgwf,GAAgBhxf,UAAhB,0BAA4Ggxf,KAC5GA,GAAgB9vf,UAnmDkFhB,6BAmmDlG,MAA6G8wf,KAC7GA,GAAgB7vf,UApmDkFjB,6BAomDlG,UAAwI,CAAC+0f,GAAiB7nC,KAAchsd,EAAiBykgB;;;;;;;;;;;;;;;;;;;;;mCCx5CvF3lgB,2BACi1B,SADj1BA,CACi1B,UADj1BA,mBACukC,GADvkCA,8FAC++B,GAD/+BA,wBAC++B,8BAD/+BA,CAC++B,kCAD/+BA,wBAC68B,sBAD78BA,sBACukC,GADvkCA,+BACukC,6CADvkCA,2BACgqD,UADhqDA,mBACk4D,GADl4DA,+FAC0yD,8BAD1yDA,CAC0yD,kCAD1yDA,wBACgwD,8BADhwDA,sBACk4D,GADl4DA,+BACk4D,qGADl4DA,0DAC0qE,SAD1qEA,CAC0qE,cAD1qEA,uBACikI,gCADjkIA,wBACikI/kF,qBAAU7D,EAD3kI4oF,wBACikI,GAAUingB,sBAD3kIjngB,2BACknI,WADlnIA,mBACy8I,GADz8IA,iDACw/I,YADx/IA,mKACgzE,sBADhzEA,CACgzE,8BADhzEA,CACgzE,kCADhzEA,wBACu6E,kBADv6EA,CACu6E,mBADv6EA,sBAC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,UAGzD4if,qBAMIjllB,KAAKo/f,mBAAmBt4e,iBAGhCs+mB,EAAer4iB,UAAf,0BAA2Gq4iB,GAAVn4iB,8BAA0CA,cAA1CA,8BAAoES,MAApET,8BAAgGA,qBAAhGA,8BAAiI,YAAjIA,8BAAyKg4iB,GAAzKh4iB,8BAAsN0yf,KAAvT,KACAylD,EAAex3iB,UADkFX,8BACjG,MAA+Fm4iB,EAA/Fr9nB,kEADiGklF,wBACjGltF,KADiGktF,wBACjG/sF,KADiG+sF,wBACjGjsF,iBADiGisF,2BACjG96E,EADiG86E,6BACjG/6E,oBADiG+6E,2BACjG96E,EADiG86E,6BACjG/6E,uBADiG+6E,2BACjG96E,EADiG86E,6BACjG/6E,yGADiG+6E,2BACjG,WADiGA,wBACjG,gBADiGA,CACjG,kBADiGA,CACjG,uBADiGA,CACjG,aADiGA,wBACjG,wBADiGA,CACjG,0BADiGA,CACjG,0DADiGA,CACjG,gdADiGA,+BACs0B,CAACk4iB,IADv0Bl4iB,wCACjGa,4uBADiGb,yDACutC,cADvtCA,CACutC,aADvtCA,CACutC,eADvtCA,uBAC89D,4BAAW/6E,qBADz+D+6E,CAC89D,2BAA0D/6E,qBADxhE+6E,sDACwjE,cADxjEA,sBACioE,YADjoEA,2BACurE,YADvrEA,sBAC+gF,cAD/gFA,0DAC2oF,iBAD3oFA,uBACksF,sCAAsB/6E,yBADxtF+6E,2BACozF,cADpzFA,mBACi1F,WADj1FA,oDACo2F,IADp2FA,8BACjG,aADiGA,wBACjG,KADiGA,wBACjG,IADiGA,wBAC8tC,iBAD9tCA,sBACy1C,GADz1CA,wBACy1C,6EADz1CA,sBAC4kD,GAD5kDA,uBAC4kD,eAD5kDA,CAC4kD,sBAD5kDA,CAC4kD,sBAD5kDA,CAC4kD,oBAD5kDA,CAC4kD,uBAD5kDA,wBACuvD,cADvvDA,CACuvD,yBADvvDA,CACuvD,yBADvvDA,CACuvD,mCADvvDA,CACuvD,sCADvvDA,sBAC0wE,GAD1wEA,uBAC0wE,qBAD1wEA,CAC0wE,gDAD1wEA,CAC0wE,uBAD1wEA,CAC0wE,qBAD1wEA,CAC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7V,yDACA97V,mBAEA,gCASA,wBACA1uC,aACAioB,yBACA,eAEA,QADAymB,OACA6wW,IAAgBA,cAAiBA,iCACjC,cACA,UAAoB,WACpB,UAAoB,cACpBv6X,0BAEA,SAEA,gBAAwD,qBAAyB,2BACjF,iBACA,uCACA,uCACAlH,gBAYA,mBACA,sCACA,8DACA,wBACA,qBAEA,wCA5EA,mBAEA,QADAyhY,aACA,4BACA,yDAyEA93X,QACA,8BAlFA,mBACA,2CACA,4CAgFAF,QACA,sCACA,yEACA,MACAw5Y,sCACA,8CACA,sBACA,MAAoB,OAApBzhC,aAAoBA,MACpBA,wDAEA,yBAtDA,mBACA,6DACA6oU,eACA,6HAmDAprsB,WACA,8DACA,kBACA,iIAAyI,mDACzI,4CAGA,GADAioB,8BACA+7Y,2BACA,+HAEA,mCAA2B,uBAC3B,mCACA,+CAvCA,gBACA,kEACA,EAEA,EAmCAxtZ,2DAEA,gEACA,yCACA,4CACA40rB,KACAlprB,wDAA4E,qDAE5E,eACA,MACA,KADAqgX,wBACAjrT,+CAEA,UACA,6CACA,mCACAmrU,+BACAlgB,QAEA,MADAgnL,wBACA/xe,uDACA+qT,uBACAgnL,iBACA/wjB,sEACA+pY,MAGA,+CACA,0DAEAgmL,KADA9lK,gCACA,kHAEA,0BAEA,OADAlgB,UACAt6W,qBACAkD,oCAEA,sCACAo3W,oEACA6oU,kBACA,iDACA,kDAEA,oCACA,6BACAz5pB,sBA5EA,eACA,uDACA,iBA0EA/lB,0BAA+F,oCAAyC,oDAAiE,wBAEzM,cACA,2CACA,cACA,aACA,4BAAiD,4BACjD,iEACA,yDAGA,8CAWA,iBACA,MACA42X,kCACA,2BACA,uBACA,0BACA,sBAAiC,0BACjC,6CAGA,GAFAwhB,gBACAryX,iDACArM,eACA,4CACA,uEACAqM,gBACAA,uBAEAA,6DAAmE,gEAChEA,qBACH,mGACA87V,yDACA97V,mBAEA,mBACA,sCACA,8DACA,wBACA,qBAEA,wCArCA,mBAEA,QADA6wW,aACA,4BACA,yDAkCAn0X,QACA,8BAjCA,mBACA,2CACA,4CA+BAE,QACA,sCA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AJ,uDAGA39I,sCACAC,KAAmBA,SAAUA,4CAC7B,kBAEAH,YACAA,kEACAA,wEACAA,oCACAA,YAEAA,0BAEA,4BACAA,gBA9lCA1B,QAEA,GACA,SAFAzD,OACA/jJ,aACA,OAsyBA,mBACA,cACAwoJ,YACAs+I,SACA39I,2BAGA,cAEAC,UACAnpJ,4CACAqnS,MACA37rB,KAEA,SAAYw7rB,yBAA0BA,GAEtC,GADA99I,sCAA4CtqJ,qBAC5C36Y,oCACA,WAGAyliB,iBACA,SAAak9I,eAAeA,2CAC5Bl9I,oBACAy9I,4EAEA,4DACA,oBAGAR,WACAS,wBACAT,qBACAA,qBACAA,qBAEA/nS,mBACA+nS,oBACAA,iCACAA,mCACAA,2CACAA,4BACAA,oBAEA19I,cACAZ,YACAY,cACAZ,YAMAY,cACAZ,YAGA,QACAs+I,WACAS,uBACAT,4BACAA,oCACA19I,SACAZ,cAIAs+I,WACAS,wBACAT,oBACAA,qBACAA,qBACAA,qBACAA,oBACAA,0BAEAA,4BACAA,oCACAA,4BACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,qBAEAn7rB,SACAu9iB,YACAv9iB,cACAu9iB,cACAg+I,GAIA,kBACAK,yBACAT,oBACAA,oBACAA,qBACAA,qBACAA,qBACAA,qBACAA,oBAEArqrB,uBA74BA+qrB,QAGA,oBAEA,QADAn+I,UACAi+I,KAAiBA,yBAA0BA,IAC3C,wBACA,cACA,0BACA79I,OACAA,qBACA1qJ,gBASA,QANA8qJ,4BAEAK,aACAN,IAFAP,SAEAtqJ,SACA0oS,aACA/uS,qCACAkxJ,2DACA,+BACA,kCACAQ,+EACAA,GArBA,CAsBEpB,IACFE,gBACA49I,UAEA,SAAaA,OAAOA,4BACpB,SAAaA,OAAOA,uBAMpB,IALA59I,qBACAA,oBACAA,wBACAA,oBACAA,oBACA49I,KAAaA,OAAOA,uBAUpB,IATA59I,oBACAA,wBACAA,4CACAA,oBACAA,uBACAA,+CACAA,wBACAA,oCACAA,wBACA49I,KAAaA,SAASA,2CAEtB,SACA,SAAa39I,WAAUA,IACvB,KAAS29I,gBAAmBA,2CAC5B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ACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,EACA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAKAD,IACA,WACA,YACA,aACA,WACA,YACA,WACA,UACA,mBACA,aAGAD,IACA,WACA,YACA,aACA,WACA,YACA,WACA,UACA,mBACA,aAGAs7K,IACA,yBACA,kBACA,mBACA,gBACA,iBACA,iBACA,mBACA,qBACA,iBACA,kBACA,sBACA,wBACA,oBACA,yBAOAtoL,GAA8B,CAE9B,yFACA,mEACA,sEACA,mEACA,4FAGA,qFACA,8CACA,6CAGA,sFACA,+CAGA,mDACA,+CACA,iDACA,6CAGA,wFACA,iDAGA,uFACA,gDAGA,kFACA,2CAGA,yEACA,kFACA,mFAGA,+EACA,oFAGA,sFACA,+CACA,mEACA,+CAGA,2FACA,oDAGA,6CACA,oFAGA,2EAGA,uDAGA,kDAGA,+CAGA,kDACA,yFAGA,qFAGA,2CACA,+CAGA,mDAGA,8CACA,qFAGA,gDACA,uFAGA,uDACA,oDACA,8FACA,2FAGA,6CACA,oFAGA,4CACA,kDACA,8CACA,yFACA,qFACA,mFAGA,mDACA,0FAGA,yCACA,8CACA,6CACA,kDAGA,4CAGA,wCACA,+EAGA,mEAGA,yEAGA,+CACA,oDAGA,6CACA,uDAGA,wDACA,8FAGA,wDAGA,kEAGA,6CAGA,uEACA,iFACA,mFACA,iFACA,mFACA,kFAGA,kEAEA,kEACA,iEAGA,mBAEA6uV,YAGA5uV,IACA0piB,WACAC,kFACAC,4DACAC,+DACAC,4DACAC,sFAEAC,MACAL,qFACAE,+CAEAI,UACAN,gFACAE,0CAEAK,QACAP,iFACAE,2CAEAM,QACAR,kFACAE,4CAEA5tG,SACA0tG,mFACAE,6CAEAO,QACAT,+CACAE,4CAEA/nT,UACA6nT,qFACAE,+CAEApwnB,QACAkwnB,8EACAE,yCAqCA,mBACA,IAEAjsS,GAFAxhB,EAx/DA,eAEA,QADAv6X,YACAu6X,IAAgBA,eAAgBA,EAChC,kCACAv6X,sBAEA,SAk/DsC3mB,KAEtCihY,KAEA5wV,IACA4wV,eACAA,6BACAylS,YACA,mBACA,qBAEAzlS,YACA,0BACA,kEACA,mEACA,oEAEA,oBACA,oBACA,oBACA,sBACA,sBACA,2CACA,2CACA,0BACA,qEACAzhY,iBACA,0BAAsC2vsB,wCAKtC,oBACAhjU,wBACAu2B,YACAzhC,gCACAmuU,gCACAC,gDAMAluT,iBACAhV,gCACAlL,gCACAmuU,gCACAC,iDAMAhoJ,iBACAl7K,gCACAlL,gCACAmuU,gCACAC,0BAKA,uBACAluT,aACAA,aACAkmK,aACA,8BACA,iDACAA,UACAA,eACAA,uBACAA,eACAlmK,eACAkmK,cACAh3gB,gBAAyB4wV,uBAA4BA,6BACrDA,WAGA,QACAquU,wFACAC,2FACAC,sFACAC,qFACAC,6FACAC,gGACAC,yFACAC,qFACAC,2FACAC,oFACAC,mGACAC,oGACAC,mGACAC,wFACAC,iFACAC,kFACAC,kFACAC,yEACAnuU,oFACAsuL,IACA,gFACA,qEAEA8/I,qFACAviJ,yEACAwiJ,gFACAC,mFACAC,2FACAC,kFACAC,0EACAC,uFACAC,yEAIA,eACA,yBACA,oDA2BA,eACA,mCAEArqC,iBAEA,uCACA//oB,kDAEAA,aAAiBA,+BAAoCA,6BACrDA,WAGA,0BAIA,GAHAs6W,UACAkL,wBACAA,yBACAxlX,oBAAqCwlX,oBAA0BxlX,GAO/D,GANAwlX,cACAlL,aACAA,SACAA,WACAyhC,mBACA,2EACAv2B,wDACA,wBACAA,sCACAxlX,EAmCA,mBACA,OACA,0CACA,sGACA,0BACAmR,SAEA,iBACA,OACA,0CACA,2GACA,0BACAA,SAaA,iBACA,+WAIA,QACA,2BACA,qCACA,2BACA,mCACA,iCACA,4BACA,yBACA,wBACA,8BACA,+BACA,2BACA,yBACA,qBACA,yCACA,4CA0BA,uBACA,8BACAmpW,OACAt6W,QACAu6X,iCAGA,iBACA,YACAA,mCAEA,yBACA,iBACA,2BACA,6BACA,sBACEjgB,KACF,kCAEAkL,IACA,gHAAuJ,6BAA4B+U,KACnL,qHAA4J,6BAA4BA,MAGxL,aAAgBwhB,gBAAwBA,IACxC,cACAvhB,iEACA,eACA,cACA,qCACA,gCAEA,oBAAiBD,mCAAwCA,6BACzDA,WAIA,QACA,uCACA,qCACA,+BACA,uCACA,+BACA,iDACA,iCACA,yCACA,iCACA,sCACA,yCAGAl1F,IACA,0BACA,6BACA,4BAsEA,eACA,cACA,iBACAmgF,wBACAxlX,eACAA,kCACA+/oB,mBACA,mBAGAn3U,uBACA,oBACA,OACA,iBACA,+BAAmD,UACnD,qCAEA,kCAIA5oU,8IAAyJqB,6BACzJrB,yEAAkF,yCAAqDmR,UAAa9P,sCACpJrB,aAAiBA,4BAAiCA,6BAClDA,WAgDA,eACA,gCACA+/oB,oBACA,oBAEA,wBACA,QACA,kCAAyCr2nB,EACzC1pB,0BAl8DA,iBACA,qBACA,SACA,4BACA,iCAAiC,YACjC0pB,MACA,+DACA,gDAEA,oDACA,0CAw7DAy1F,WACAkrkB,+CACAC,MACA/ysB,eAGAyoB,aAAiBA,4BAA+BA,6BAChDA,WAGA,QACAouF,cACAxsG,kBACA61X,gBACAC,oBACAhwT,uBACA6ioB,wBACAC,qBACAC,sBAEAC,0BACAv5d,sBACAw5d,yBAIArylB,oBAEAsylB,kBACAC,kBAOAC,qBAEAC,8BACAC,wBACAp2lB,qBAwMA,iBACA,oBAEA,OADAlrE,4BACA87V,QACA,sBAAiD,WACjD,YAAuCg/T,qBAA8B,WACrE,0BAAgE,WAChE,GAAiHjqT,EA3IjH,eACA,IACA7wW,GADA,8CACA18B,0BACAutY,0CACWjgB,OACX,QADAigB,QACAzhY,iBACAijZ,OAAaxhB,kBAAwBjgB,OACrC,aAAqB,2BAAqB6oU,oBAAqBA,GAoIkD35Y,IAA8B,WAC/I,QACA,GAKA,KAHA+wF,yCACAiqT,0BACAjqT,0BACAA,kCACA,cACA,iEAEA,iBA8FA,yFACA,eACA,qBACA,wBACA,gCACA,uBACA,wCAEA,SAEA,mBACA,uBACA4oT,UAEAziJ,kBAOA,GANAA,oBACAA,uBACAJ,oBACAvkJ,YAAgBzhC,WAChB6oU,iBAEAnjrB,IACAsgiB,UACAkkJ,iBACAlqU,cAEA,eAEA,IADAgnL,8BACA9mK,KAAaA,cAAoBA,IACjC,gBAKA,KAJAkmK,4CACA8jJ,oBACA9jJ,8BACAA,4BACAA,qCACAY,YAEAZ,UACA3kJ,eACAonS,gBAGA,SAAY3oT,cAAoBA,GAChC,wBACAhyF,mDACA,eAEA,sBACA,MAEA,SADAi4P,iBAEA,yCAEA,qBACA4iJ,4BAEA3iJ,mBACI,CACJ,eACA,QAAiB4iJ,MAAUD,eAC3B3iJ,aAEA3kJ,aAEAukJ,UACAkkJ,yBACAlqU,WAEA6oU,gBAGA,uBACA,SAAY3oT,eAAiBA,GAAOlgB,wBAA2BsmL,kBAC/D,2BACArmK,2BACA7gY,6BAsCA,oBAAsF4gX,MACtF,mBACAkgB,QACA2oT,wBACAA,oBACAA,4BACAA,sDACAA,wBACAA,2BACAA,0BACA,iBAGA,GAFA3oT,YAEAlgB,GACA,uBACA6oU,4BACAA,+BACA3oT,YAEA,cAaA,iBAA8C,2BAC9C,iBAAmC,oBAAqBx6X,sBAAwBA,EAEhF,eAA8D,2BAC9D,iBAAwC,oBAAqBA,mBAAqBA,EAUlF,mBACA,oBACA0pB,gCACAA,4BACAA,EAIA,mBACA,sCACA4wV,cACAyhC,MACAryX,uBACAA,cAGG,aACH4wV,UAHAkL,kBACkBlL,eAIlB5wV,kCACA,8BACA,YACA8wW,GAuBA,eACA,cAEAD,QACAA,0BACAA,mBAGA,qBAKA,OAJAjgB,sCAIA5gX,GAFA,MAEA,CAIA,mBAEA,MACA,uDACA,iDAGA,WADA8rX,gBACqBA,4BACbA,2BACR,CAIA,mBACA,qCACA,cAAiBA,MAAU,IAC3BlyF,UAGA,mBACA,6BACA,sBACA,cAAiBkyF,MAAU,IAC3BA,uDAGA,mBACA,+BACA97V,0BACAA,mBACAA,8BACAA,EA0DA,iBACA1pB,wBACAA,4BACA,YAAgB0pB,aAAgBA,mCAChC,0BACA1pB,EA6BA,eACA,kBACAu6X,WACA,wCACA,qBACAwhB,cACA,wBAA4B,UAAkB,UAAO,WACrD/7Y,mBAAuBA,oBACvB,sCAA4C,QAAW0pB,cAAiBA,yBACxE,UAEAuqQ,GADAsmG,aACAv6X,WACG,MAEH,IADAmjrB,gEACAz5pB,IAAaA,cAAiBA,sCAC9B,2BAEA,IADA1pB,iCACA0pB,IAAaA,cAAsBA,oCACnC1pB,mBACA,qCACG,CAEH,IADAmjrB,gEACAz5pB,IAAaA,cAAiBA,sCAE9B,QADAg3gB,KACA,gEAGA,IAFA1giB,oBACAA,iCACA0pB,IAAaA,kBAA2BA,4CAIxC,IAHA1pB,mBACAA,uBACAA,uBACA0pB,IAAaA,MAAOA,qBAEpB,sBA4BA,qBACA,oBACA6wW,mBACAA,mBACAA,sBACAA,EAgBA,mBACA,mBAEA,OADA/U,wDACA,CAuBA,eACA,sBACA97V,kBAGA,OAASztC,GAAGrS,EAFZ47Y,gBAEY5pF,KAAsB1xT,GAAKN,EADvC47Y,gBACuC5pF,MAEvC,iBACA,oBACA57R,uBACAA,uBACAA,uBACAA,uBACAA,EAqGA,mBACA,gBACA,uBACA,QAImC,IACnC,YALA,IACA,eAA4Bs6W,IAAO,UACnC,YAA4BA,IAAO,UACnC,YAA4BA,IAAO,UACnC,YAA4BA,IAAO,MACnC,QACA,4CAEA,aACA,2BACAyhC,oBACAzhC,6BACAA,4BACAA,MACAyhC,wBACAA,oBACAA,uBACAA,qBAEAA,GA2DA,iBACA,wBACAxhB,wBACAA,uBACAA,yBACAA,sBACAA,+BACAv6X,8BACAu6X,gEACA,qBACA,eAAcjgB,EAmMd,qBACA,mBACAigB,qCACAA,mBACAA,8BACAjgB,sBACAigB,qDACA,qCACA,oCACAwhB,GAwHA,qBACA,mBACAxhB,mBACAA,mBACA/U,SACA+U,+BACAA,yBAEAA,+BACAA,uBAEA,SACA,mCACAA,oBACAA,mBACAjgB,sBACAigB,mBACAA,EAiBA,eACA,aACA,aACAv6X,4BACAA,QACAA,EAGA,UAyCA,0BACA,aACA,oBACA+vR,YACAozZ,GAoFA,mBAGA,GAFAz5pB,YAEAA,gDAOA,mBACA,sBACA,gBACA,uCAVAl/C,QAEA,QADA+vZ,2CACA,gCAEA,4DACA,SAmEA,qBACA,0BACA,0BACAjgB,mBACAA,6BACAA,iCACAA,EA8GA,eACA,aACA5wV,WACA1pB,qBAA0BA,qBAC1BA,qBAA0BA,qBAE1B,QADAu6X,+DACAjgB,IAAgBA,OAAQA,qCACxB,wBAYA,eACA,mBACA5wV,wBACAA,sBACA,eACAA,qBAA0BA,qBAC1BA,qBAA0BA,qBAC1B,YAAgB4wV,aAAeA,mCAC/B,0BACA5wV,EA4CA,mBACA,gCACA,wBACA4wV,kBACAyhC,mBACAonS,mBACA3oT,mBACAkmK,mBACA,eACA,QAAWzkjB,gCACX,+CACAqkjB,GA0DA,uBACA,oBACA96K,mBACAA,mBACAA,sBACAA,sBACAA,mBACAA,EAoFC,IACDrmD,cACA,OAEA,YACA,aACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,mBACA,oBACA,kBACA,kBAGA,cACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,gBACA,gBACA,gBACA,iBAEA,WAEAn/T,MACA,YACA,aACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,iBACA,mBACA,oBACA,kBACA,kBACA,UA8KA,kBACA,cACAsgiB,kCACA,UA9KA,kBACA,UACAgB,SACA,oBACA,qBAA8C,UAC9C,kBAA+B,UAC/B,aACA,cAEAvob,SAGA,wBACAsqkB,cACA5iJ,YACA,gBACA,OACA,EAEsC,KAGtC,SACA,IACwB,KAExB,UATA,KACA,GAAsC,KACtC,SAAyB4iJ,MAAa,MAItC,KACA,UAAwB,MAExB,QAEA,6DAGA,gBACA,6BACA/hJ,QACA,6BACArjM,qBAEA,6BACA,wBAEA0iM,qBACA,QACAW,SACAA,iBAIA,+BACAA,QAEAA,SAEAwyI,eAMA,QAHA0P,YACAhjJ,kDACAK,YACAS,uBAWA,OAVAiiJ,MACAA,yHACAjiJ,SACAiiJ,8CACA,yCACAA,wBACA,oCACAA,wBACAA,4BACA,wBACAA,aACA,MACA9iJ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uwsB,yBACAA,uBACAA,yBACAD,SACIppS,UACJqpS,yBAAgCA,yBAChCA,yBAEAA,uBACAA,yBAAgCA,0BAEhCA,GAGA,gBAEA,sBACA,2BAEA,IAgBA,sBAEA,uBACAA,sBACAA,qBACAA,qBACAA,qBACA,aAAiBC,eAAcA,IAC/B,yBACAD,gCAEA,2BACAA,GAoBA,sBACA,aACA,gCACAA,qBACAA,qBACAA,2BACAA,GAQA,sBACA,cACA,gCACAA,qBACAA,qBACAA,2BACAA,GAiBA,sBACA,gBACA,OACAsG,eADAA,aACA,mBACAtG,8BAOA,QACA,YAEA,aACA,eACA,cACA,aACA,YACA,YACA,aACA,aACA,aACA,eACA,cACA,cACA,cACA,aACA,aAEA,cACA,eACA,eACA,cACA,cACA,cASA,eACA,cAIA,kBACA,gBACA,aACA,eAEA,aACA,cAMA,cACA,mBACA,iBACA,eACA,eAkBA,gBACA,gBAIA,iBAEA,eAEA,aAGA7kJ,IACA,wBACA,gCACA,8BACA,0BAmEA,gBACA,SAAYj3jB,SAAQ,CAAGuL,WAAU,GACjC,gCAA+B62sB,iBAAuBA,mBACtDA,GASA,yBAEA,uBACArG,qBACAA,qBACAA,qBACAA,qBACA,aAAiB0G,eAAcA,IAC/B,yBACA1G,gCAEA,2BACAA,GAuBA,mBACA,cACAD,oBACAC,oBACA0G,oBACA,aACA,gCAAuChwS,YAAcA,YACrD,yBAA4CA,YAAcA,YAC1DA,UACAA,GAEA,gBAAsB,2BACtBA,0DACAA,GAEA,yBACA,cAIA,GAHAspS,qBACAA,qBACAA,qBACA,MACA,2BACAA,oBACAA,wBACAA,GAEA,sBACA,cAAc0G,KAAO3G,QACrB1jJ,mBAGA,gBADAE,IADAwjJ,yBACA,QACmC1jJ,GAAKE,IAAXwjJ,SAAW,GACxCA,OACAxjJ,eACAA,QAEAD,IADAyjJ,sBACA,EACAC,qBACAA,qBACA3jJ,uBACA2jJ,qBACAA,GAgBA,mBACA,cACAD,wBACA,kBACArpS,GASA,mBACA,oDAiCA,mBACA,uBACAA,uBACAA,qBACA,aAAiBqpS,eAAiBA,IAClC,yBACArpS,wBAEA,oBACAA,GAGA,QACA,GAA0Btga,cAC1B,GAA0BA,SAC1B,GAA0BA,cAC1B,GAA0BA,eAC1B,GAA0BA,WAC1B,GAA0BA,UAC1B,GAA0BA,YAxd1B,sBACA,QAAWE,GAAGrS,SAAQM,GAAIN,UAC1B,uBACA87sB,wBACAD,OACAC,wBACAA,wBACAD,OACAC,wBACAA,KAEAA,wBACAA,wBACA,2BACAA,wBACAA,wBACA,2BACA,+CACAA,MAucA,GAA0B3psB,aAC1B,GAA0BA,WAC1B,GAA0BA,YAC1B,IAA0BA,WAC1B,IAA0BA,UAC1B,IAA0BA,WAC1B,IAA0BA,cAjY1B,sBACA,mBACA,oCACA2psB,KA+XA,IAA0B3psB,aApX1B,sBACA,mBACA,oCACA2psB,KAkXA,IAA0B3psB,YA5a1B,sBACA,eACA4psB,eAEA,GADAA,YACA,wBACAF,OACA,wBACA,wCACAE,GAEA,uBACAA,sCACAA,KAiaA,IAA0B5psB,cAxW1B,sBACA,eACA4psB,eAGA,GADAA,6BACAtpS,oBACA,CACA,yBA6GA,mBACAtjS,SAEA,QADAsjS,mCACAopS,iBACA,kBACA,gBACA,gCAAkD,WAClD,EACA4G,mCACA1G,mCACAtpS,eACM,WACN,EACA,uCACAgmJ,mCACAgqJ,mCACA1G,mCACAtpS,yBACM,WACN,EACA,kBAA4E,YAA5C9jY,2CAChC,WACA,4BAAgD,WAChD,4BAA6C,WAC7C,EAEiB,QAAjBgqhB,MAAiBL,2CACjB7lJ,uCACM,WAEN,wBAA0C,WAC1C,yBAA0C,WAC1C,gCAAmD,WAEnD,WACA4lJ,YAAuBD,YACvB3lJ,+CACM,cAGN,iBACA4lJ,YAAwBD,YACxB3lJ,+BACOmkJ,OAQP,kEACA0B,4DACAA,4DACAA,0EAEA3phB,0DAVA,GADA,KADAmtqB,gBACAA,eACAA,aAAwH,YAA1FntqB,gFAC9B,qBACA8jY,cACAA,uCAOA,GAGA,8BACA9jY,2DAxKAkrqB,4BACAgC,SAEA,YA8VA,IAA0B1psB,WAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,aAC1B,IAA0BA,YAC1B,IAA0BA,aAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,WAC1B,IAA0BA,aAC1B,IAA0BA,cAC1B,IAA0BA,YAC1B,IAA0BA,aAC1B,IAA0BA,WAC1B,IAA0BA,YAC1B,IAA0BA,eAC1B,IAA0BA,iBAC1B,IAA0BA,eAC1B,IAA0BA,YAC1B,IAA0BA,aAxa1B,sBACA,eACA4psB,eAEA,GADAA,YACA,gBACA,wBACA,wCACAA,GAEA,6CACAA,KA+ZA,IAA0B5psB,cAC1B,IAA0BA,YAC1B,IAA0BA,WAC1B,IAA0BA,eAC1B,IAA0BA,WAC1B,IAA0BA,eAC1B,IAA0BA,YAC1B,IAA0BA,eAC1B,IAA0BA,UAC1B,IAA0BA,cAC1B,IAA0BA,YAC1B,IAA0BA,YAC1B,IAA0BA,WAC1B,IAA0BA,WAC1B,IAA0BA,WAC1B,IAA0BA,YAC1B,IAA0BA,WAE1B,KAA0BA,eAC1B,KAA0BA,eAC1B,KAA0BA,aAC1B,KAA0BA,eAS1B,KAA0BA,sBAE1B,KAA0BA,kBAnH1B,mBACA,kBACAsga,mBACc,QAAdqpS,MAAcA,kDACd,YAgHA,KAA0B3psB,cAC1B,OAA0BA,gBAC1B,OAA0BA,OAG1BywsB,IACA,GAA0BzwsB,SAC1B,GAA0BA,SAC1B,GAA0BA,cAC1B,GAA0BA,aAC1B,GAA0BA,eAC1B,GAA0BA,kBAC1B,GAA0BA,iBAC1B,GAA0BA,iBAC1B,GAA0BA,kBAC1B,GAA0BA,eAC1B,IAA0BA,iBAC1B,IAA0BA,eAC1B,IAA0BA,gBAC1B,IAA0BA,cAC1B,IAA0BA,kBAC1B,IAA0BA,eAC1B,IAA0BA,iBAC1B,IAA0BA,eAC1B,IAA0BA,iBAC1B,IAA0BA,QAC1B,IAA0BA,aAC1B,IAA0BA,YAC1B,IAA0BA,cAnQ1B,mBACA,cACA,mBACAsga,mCACAA,KAgQA,IAA0Btga,mBAC1B,IAA0BA,eAhP1B,mBACA,cACAsga,yBACA,kBACA,aACA,kBACA,iBAAiC,WACjC,iBAAgC,WAChC,gBAA+B,WAC/B,iBAAgC,WAChC,iBAAiC,WACjC,iBAAkC,WAClC,gBAA+B,WAC/B,gBAGA,kBACAA,KAgOA,IAA0Btga,gBAjL1B,mBACA,cACA,mBACAsga,KA+KA,IAA0Btga,eAC1B,IAA0BA,cApI1B,mBAEA,QADAsga,MAAYqpS,WACZD,UACA,wBACA,aAGA,IAFAppS,cACAA,2BACAopS,UAA0BppS,yCAA+CopS,OAAYA,QAIrF,YA0HA,IAA0B1psB,iBAC1B,IAA0BA,iBAC1B,IAA0BA,iBAC1B,IAA0BA,SAC1B,IAA0BA,aAC1B,IAA0BA,WAC1B,IAA0BA,iBAC1B,IAA0BA,QAC1B,IAA0BA,eAtL1B,mBACA,cACA2psB,oBACA,qBACArpS,KAmLA,IAA0Btga,QAC1B,IAA0BA,mBAC1B,IAA0BA,gBA3K1B,mBACA,cACA,mBACAsga,KAyKA,KAA0Btga,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,sBAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,KAA0BA,QAC1B,MAA0BA,kBA7N1B,sBACA,qBACA,yBAKA,OAJA0psB,SACAA,QACAA,QAEA,IADAA,4BACA,IAuNA,MAA0B1psB,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,MAA0BA,QAC1B,OAA0BA,QAC1B,OAA0BA,QAC1B,OAA0BA,QAC1B,OAA0BA,QAC1B,OAA0BA,OAI1BypsB,IACA,cACA,WACA,WACA,aACA,oBACA,iBACA,iBACA,cAEA,UACA,oBACA,iBACA,sBAEA,+BAqKA,OACAiH,aAz8BA,kBACA,cAEA,IADApwS,gCACA,mEACA,YACAspS,kBACA0G,qBACArqJ,MAEA39e,QA0EA,gBACA,aACA,4BACA2noB,GA7EA7I,QACA9+nB,QA+HA,gBACA,aACA,gCACA2noB,yBACAA,yBACAA,yBACAA,GArIA1rJ,MAEA,QADA2B,yBACAC,UAAyBA,aAAgBA,iBACzC,kBAAyBE,SAAYA,IACrC,cACA,cAAsBF,aAAgBA,IACtC,kDACA,iBAEA,iBACA,KACA,gEACA79e,uBACA,UACA,IACA,iBACA,oDAAiGlvE,6BACjGkvE,mBAAuDlvE,6BACvD,cAGAkvE,kBADAgqQ,OACAvsU,iBAKA,gBACA4jsB,UAq6BAgH,YAl6BA,mBACA,cAEA,IADArwS,gCACA,mEACA,YAEAh4V,QA2CA,gBACA,cACA2noB,uBACAA,oBACAA,oBAEA,QADA3vS,eACAgwS,KAAiBA,0BAA0BA,IAC3C,yBACApqJ,iBACA,kBACA,MACA,sBACA5lJ,uBACAqpS,wBAEA,0BACAsG,qBACAA,qBACAA,qBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,oBACAA,GApEAxxT,MAEA,kBAA0BmrT,0BAA0BA,sCAA0C,8CAE9F,SACA,SAAaA,0BAA0BA,IACvC,oCACA,kBAKA,SAJAzjJ,kBACAE,qBACAC,MACAE,yBACAC,UAA0BA,SAAYA,GAEtC,QADAplJ,UACA0oS,UAA2BA,aAAgBA,IAC3CtjJ,6BACA,iBACAI,uCACA,iBAEA,aACAv+e,gCACO,CAGPA,qBAFAgqQ,OAEAvsU,kBAIAkgjB,IAGA,gBACA0jJ,UA43BAyF,YAhnCA,kBACA,oBACA,mCACA,gCACA,aACA,wBAEA,kCAymCA,CAhoCA,GA01CA,0BAgEA,OA/pLA,iBAEA,SAAoB,iBAAiBzhqB,KAAc1pB,uBACnDA,mBACAsnU,UACA59S,oBA4pLA,eACA,WACA82D,SAXA,iBACA,oBACAxgF,yBACAA,0BACAA,EAOAmhU,KACA,YAAgBz3S,aAAgBA,oBAEhC,iBACA1pB,QAEA,eACA,yCAEA,QADAA,mBACAu6X,IAAgBA,aAAeA,0BAC/B,SA2LA,eACA,MAEAwhB,GAFA/7Y,IACAu6X,QACAjgB,aAIA,KAFA5wV,SACA,YACAqyX,KAAYA,QAAUA,iBACtB,WAAgBA,QAAQA,GAKxB/7Y,IAHA,kBACAA,YAFA0pB,MAMA,eAyNA,eACA,gBAAkB,OAAM1pB,uCACxB,6CA+CA,SACA,eAA2B,iDAC3B,eAAuB,uCACvB,eAA2B,uCAsB3B,eACAwlX,SACAA,kBACAA,gBACAA,UACGA,OACHA,gBACAA,kBACAA,UACG,yBACHA,kBACAA,kBACAA,UAEAA,oCAIA,eAAqB,YADrB,EACqB,CACrB,eAAqB,OAFrB,GAEqBA,KAibrB,iBACA,IAGE+U,EAHF7wW,4BACAq2nB,YACA,oBAEA,uBAhIA,eACA,oBAIA,MAHA,qDACA,eAAoBxlR,UAAWA,6CAA+DotT,oCAE9F,iBACA3nrB,yBACAA,wBAAqC4wJ,mBAAkBx+I,kBACvDpS,YAwHA2srB,0BACAjjqB,gJACAA,uIACAA,sGACAA,4GACA6wW,EAhEA,eACA,SAMA,OALAv6X,+BACAwlX,sBACAxlX,8BAEAA,yBACA,iBACAA,wBAAmC4wJ,mBAAiBx+I,kBACpDpS,YAuDAiqR,8BACAvgQ,mGACAA,gCACAA,mHAEAA,aAAiBA,4BAAiCA,6BAClDA,WAQA,mBACAA,wBACAA,mBACA49S,QACA,oCACA,iCACAizD,EAgDA,iBACAv6X,eACAA,yBA/8MA,iBACAA,aACA,OACAwlX,eACAA,eACAA,iBACAA,gBACAA,kBACAA,gBACA,0BACAxlX,mBACAA,EAq8MA6sM,MACA7sM,gCACA,QACA,+BACA,gCACAA,mBACAA,gCACAA,6BACAA,8BACAA,mBACAsrM,cACA,QACA,+BACA,yBACAtrM,mBACAsnU,aACAtnU,8BAIA,IAqBA8vU,GArBA88W,IACA,OACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAIAn9W,MACA,iBACAzvU,cACA8vU,gBACA,wBACA,gBACA9vU,mBACA,QACA,SAMA,IAJAsrM,IAAkBypJ,QAAO/0V,GAEzBsrM,IAAkBypJ,QAAO/0V,GAEjBu6X,OAAQA,yBACb,CACH,KAAQA,MAAOA,qBAEf,KAAQA,OAAQA,qBAUhB,qCAWA,mBACA7wW,cACAA,sBACAA,+BACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBAEA,uBADA,GAEAA,mBACAA,mBACAA,mBACAA,EAIA,iBACA,qBACA1pB,mBACAA,mBACAA,mBACAA,mBACAA,EAGA,UA2IA,eAIAwgF,YAHA,IAIAA,QA/IA,iBACA,qBACAxgF,mBACA+uU,QACAA,QACAA,QACAA,QACAA,QACA/uU,8BAuIA6srB,IAEArsmB,UAuBA,eAGAA,YAFA,IAGAA,QAhKA,iBACA,qBACAxgF,wBACAA,mBACAA,8BACAA,mBACAu7M,iBACAv7M,8BAyJA8srB,EACAC,OACAC,YACAz1sB,iBAGAipG,UAWA,eAGAA,SAzKA,mBACA,eACA,0BACA+6H,QACAA,QACAg/K,8BAoKA0yT,CAFA,EAEA,0CAEAzsmB,UASA,iBACA,WACA,iBA/GA,iBACA,KACA,SACA,qDAEA,eAAoB85R,UAAWA,oBAG/B,OACA95R,gBACA,qDAEA,eAAoB85R,UAAWA,oCAE/B95R,YAkGAu8T,UA/FA,eAIAv8T,YAHA,IAIAA,YACA68T,MACAjwU,OAAU2lY,SACVx7d,eACA21sB,SACAC,kBAGA3smB,UAmFA4smB,IAhFA,eAIA5smB,YAHA,IAIAA,YAAuD6smB,sBACvD7smB,YAAuD6smB,yBAEvD7smB,UAyEA8smB,IACAC,MA7DA,eAEA/smB,YADA,IAEAA,YACAmnmB,WACA6F,SACAC,SACAC,YACE,QAEFltmB,UAoDAmtmB,IAjDA,iBACAntmB,uBACAxgF,sBAA4BwgF,mBAE5BA,UA8CAotmB,cACAx5J,MA/BA,eAGA5zc,YAFA,IAIAA,UA2BAwzc,IACA3kN,MAGA7uP,UACA92D,QA8GA,iBACA,qCACA,0CACA,WACA,mHACAA,gCAEAA,0CACAA,2EACAA,uEACAA,uDACAA,uDACAA,+DACAA,+DACAA,+DACAA,+DACAA,+DACAA,+DACAA,2DACAA,iEACAA,6BAEAA,2CACAA,4BACAA,4CACAA,kCACAA,kCACAA,6FACAA,2EACAA,8DACAA,0EACAA,iEACAA,iEACAA,wDACAA,uDACAA,wDACAA,wDACAA,2DACAA,uDACAA,uDACAA,0DACAA,sEACAA,oEACAA,oEACAA,yDACAA,wDACAA,yDACAA,uDACAA,mEACAA,yDACAA,yDACAA,2DACAA,8DACAA,iEACAA,iEACAA,kEACAA,yDACAA,6BACAA,4BACAA,4CACAA,kCACAA,kCACAA,6FACAA,2EACAA,8DACAA,0EACAA,uDACAA,uDACAA,wDACAA,uDACAA,wDACAA,wDACAA,0DACAA,uDACAA,uDACAA,0DACAA,sEACAA,oEACAA,oEACAA,yDACAA,wDACAA,yDACAA,uDACAA,mEACAA,yDACAA,yDACAA,2DACAA,8DACAA,iEACAA,uDACAA,kEACAA,yDACAA,6BACAA,8BAEAA,0CACAA,+BACAA,oEACAA,4CACAA,wBACAA,wHACAA,4HACAA,6HACAA,yBACAA,iDACAA,4BACAA,4CACAA,wBACAA,gJACAA,oJACAA,yBACAA,iDACAA,4BACAA,gCACAA,6BACAA,+MACAA,qJACAA,qJACAA,8BACAA,iCACAA,8BACAA,4BACAA,gKACAA,6BACAA,+BACAA,8BACAA,4BACAA,gKACAA,6BACAA,+BACAA,8BACAA,4BACAA,gKACAA,6BACAA,yMACAA,+DACAA,+BACAA,kCACAA,iCACAA,oEACAA,4CACAA,wBACAA,wHACAA,kJACAA,8HACAA,yBACAA,uGACAA,4BACAA,4CACAA,wBACAA,wHACAA,8HACAA,yBACAA,qGACAA,4BACAA,kCACAA,6BACAA,iCAEAA,iCACAA,wBACAA,+SACAA,yBACAA,wBACAA,+SACAA,yBACAA,kCACAA,qCACAA,yBACAA,WAoLA,cACA,WACA,iBACA82D,gBACAA,SApFA,eACA,6BACA,gCACAxgF,2BACAsnU,aACAtnU,eA+EA8kV,EACAvtW,cACAi2T,aACAs0F,oBAEAthT,UACAA,SAnEA,iBACA,uBACA,0BACA8mP,QACA59S,eA+DAmmT,cACArvP,SACAA,iBACAA,iBACAA,iBACAA,SACAA,SACAA,UACAA,SAjEA,iBACA,YACA,0BACA92D,uBACAA,EA6DAu7T,QACAzkQ,QArFA,eACA,uBACAxgF,0BACA,YAAkB0pB,aAAgBA,EAClC1pB,yBACAA,yBAEA,SA8EA+kV,WACAvkQ,UACAA,UACAglS,QAwPA,mBACA,oBAEAlL,iDACAyhC,IACAzyN,eAA2B,gEAAsFl3K,mBACjHk3K,sCAAyD,wBAA2B,CAAI,kBAGxF65f,WAEA3oT,SACA,8CACAlxM,oBAA+BukgB,oBAC/BvkgB,kBAA6BwkgB,8CAC7B38qB,UAAcvoB,6DAEd4xY,0BAAiC2oT,GAAYpnS,QAK7C,mBACA,eACAzhC,GAAwByzU,kCACxB,qCACA,4CAAyE72pB,yCAAwC,KACjHispB,qBAEA3oT,IAAiBh8X,qBAEjB,OACA,eACA5V,gBACAsuC,oBACArQ,+FAAoF2+V,iCAA+B,IACnHwoU,oBACAC,wBACE,IACF9K,GACA75f,uBACAA,kBAA6B,yBAC7B,6DACA,mCACA,qBACA,qBAEAqD,6DACAA,yBACAA,wBACAA,2BACA64L,8BACA,kBACA,cACAr0W,SArC6Ci/T,WAC7C2rE,kBACAA,YA2GA,eACA,8BAAoDgkQ,eAEpDr2nB,KACA,2BACA87V,sBAA4B+U,yBAA2B,gBACvD,mBACA7wW,WACA1pB,mCAEAs6W,uCACA5wV,mBACA1pB,4CAGA,cAA2B0pB,kBAAyB1pB,oCACpDA,qBACAA,wBACAwlX,sBAEA,mBAOA,GANA+U,gEACAA,0BACA+lK,8BACAA,WACAvkJ,kCAEA,OACAxhB,0BACAv6X,4EACAA,uCACAA,kCAEI,CACJu6X,gEAEAv6X,0DAEA,QADAw6X,+BACAkmK,KAAkBA,eAAeA,kCACjC1giB,uBACAA,+BAGAA,yBACAA,aAAkBA,0BAA+BA,6BACjDA,WA0CA,mBACA,sCAA4D+/oB,iBAAsB3toB,sBAClF,6BACA,WACAkoW,kCACA,SACA6oU,wCACA,QACA5zO,SACA3md,gCAAU,yCAEV,eACA83iB,eACAyiJ,YACAA,gDAA+B,gDAC/B5oT,oDAV2B,aAAb4oT,KAUd,KAGA5oT,8BACAA,WAgCA,eACA,gCACAwlR,eACA,kBACE3toB,sBACF,+BACApS,yBACA+kX,cACAn8X,gCAAS,iCACT+J,SACAu7rB,uBAGAlurB,wBACAA,WAwBA,UACA,eAAwC,yBA0CxC,eACA,WACA0pB,KACA,iBAEA82D,UACAglS,sBACA+U,yBACA7wW,oBACAA,wBACA82D,kBACA85R,uCACA5wV,mBACA82D,+BAIAA,UAEAA,UACAglS,sBACA+U,yBACA,UACAjgB,kCACA,gEACA,2BACAA,aACA,QAAgBr+X,uBAChBukG,SAnFA,iBACA,2BACAxgF,8BACAwqM,WACAxqM,mBACAA,mBACAA,mBACAA,mBACAA,EA2EAm0hB,UACA75K,mCACA95R,iBACA85R,cAGA95R,UAEAA,UACAxgF,QAsBA,4CAOA,kBACA,sFACAA,GAAyB47R,SACzB,sBACA,gBAEA,mBACA,oBAAiC8kQ,MAAa3kJ,mBAE9C,mBACA,oBAAiCvhB,MAAa2oT,mBAE9C,0EAEA,oBAA0B7hJ,GAC1BZ,aAA0BJ,GAC1BhmL,wCAEA,sBACA,YACAA,gBApBA,GAwBAp0F,oLACAC,cACA,qBACA,8CACA,yBACAm7Q,qBAGA,cAFA,kCAEA,KADA,iCACA,IAPA,GAaA,iBACA,6CACA,uEAmBA,eAA4B97K,OAG5B,iBACA,6BACA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A,GAAuBA,gBAnbvB,mBACA,uBACA,cACA,qCAibA,GAAuBA,oBArcvB,mBACAypY,OAIA,QAHA+U,iCACAjgB,KAEAyhC,KAAgBA,QAAaA,0CAC7B,WAgcA,GAAuBhga,kBA5bvB,mBACA,uBACA,cACA,qCA0bA,IAAuBA,iBAhWvB,mBACAypY,wBAgWA,IAAuBzpY,wBACvB,IAAuBA,wBACvB,IAAuBA,mBA9ZvB,eACA,uBACAg7iB,QA6ZA,IAAuBh7iB,uBAzZvB,eACA,uBACAg7iB,QAwZA,KAAuBh7iB,qBApbvB,eACA,uBACA,cACA,sBAkbA,QAIA,qBACA,2BAGA,QAFAu+X,QACAyhC,MACAonS,KAAgBA,gBAAmBA,GACnC,qBACA,WACAz5pB,mBACAqyX,kBACA,UACA,aACAryX,0BACAqyX,kBACA,UACA,SACAxhB,gBACA7wW,4BACAqyX,mBACM,UACN,cACA,qBACA,iBACA,cACA,6BAIA,OAGA,KAHA/7Y,UAGA+7Y,iBACAA,GAIA,mBAGA,QADAzhC,KADAigB,QACA4oT,MACA5oT,QACAv6X,QACA+7Y,UACAzhC,sBACA,iDACAA,OACS6oU,0BADUljmB,QAGnB,UAGA,eAEA,QADAjgF,KACA0pB,IAAgBA,aAAcA,GAE9B,QADA6wW,YACAwhB,KAAiBA,cAAcA,IAC/B,aACA,SAEA,IAFAonS,MAIA7oU,8CACAA,mBACKA,WAELt6W,oBAEA,mBAIA,QACAuurB,WACAC,cACAC,WACAC,UACAC,WACAC,UACAC,WACAC,UACAC,WACAC,WACAC,aACAC,YAIA,iBACA,8CACA,2BACAxlqB,qFACAnR,0CACAitW,SAGA,mBACA,0BACA,wDACA,8BACA,eACA,YACA,yBACAxlX,YACA,mBAEA,0BACA,SACA,oCACA,IACA,4CACAu6X,2CACA,IACA,uCACA,yBACA,QAEA,8BAEA,2BACA,KACA,2DACAA,2CACA,+CAAqE,iBAAmBppX,mBAExF,sBACAmpW,qDACAigB,wCAFA,eAKA,mBACA,gBACA,0BAEA,uBACA,IAEAmmK,YAFA3kJ,gBACAonS,IAA2ClnsB,GAAGrS,SAASM,GAAIN,UA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,SACA,0JAAwJ,OA5IxJ,eACA,YACA5lqB,SACA,0BACAA,oBACAA,qBACAA,0EACAA,mBAEAA,EAmIwJ6lqB,IACxJ,oSAAkS,OA3FlS,eACA,0BAEAh1T,SACAA,oBAGiB,SAAjB7wW,QACA,2BACA6wW,qBACAA,0EACAA,mBAGiBjgB,KAAjB5wV,QACA6wW,oBACAA,qBACAA,0EACAA,mBAGAA,oBAEAA,mBAEAA,EAkEkSzjU,IAClS,ySAAuS,OA9BvS,iBACA,yBACAyjU,eACA/U,eACA,uDACA,YAEAu2B,UACA,4BAEAA,qBACAA,iDAAwD,0BAAyBnna,0BACjFmna,wBACAA,wBACAA,wBACAA,wBAEAA,oBAEAA,GAWuSplE,MACvS,2NAAyN,OAlIzN,iBACA,yBACA4jD,eAEAjgB,KADAkL,gBAEA,uDAEA,cACA,2BACAu2B,qBACAA,iDAAwD,0BAAyBnna,0BACjFmna,sBACAA,2EACAA,oBAEAA,GAmHyNyzS,MACzN,qWAAmW,OAjEnW,iBACA,yBACAj1T,eACA/U,eACA,uDACA,mBAEAu2B,UACAA,qBAGA,sBACA,4BACAA,iDAAwD,0BAAyBnna,0BACjFmna,uBACAA,8EAGiBvhB,MAAjB2oT,SACApnS,qBACAA,iDAAwD,0BAAyBnna,0BACjFmna,uBACAA,8EAGAA,qBAEAA,oBAEAA,GAoCmWrlE,MACnW,8EAA+D3pV,eAjH/D,iBACA,yBACAwtY,eACA/U,eACA,uDAEA,aACA,0BACAlL,oBACAA,gDAAwD,0BAAyB1lY,0BACjF0lY,mBACAA,mBACAA,mBAEAA,EAmG+DhjC,MAC/D,2BAlKA,eACA,YACAt3U,8BACAA,oBACAA,0BAEA,qBACA0pB,sCAEA,YACA,0BAEAhwB,YAsJA+1rB,IACA,iDACA,+CAGA34W,IACA,SACA,SACA,eACA,cACA,SACA,YACA,gBACA,eACA,UACA,kBACA,UACA,gBACA,iBACA,iBACA,iBACA,UACA,WACA,SACA,oBACA,sBACA,oBACA,uBACA,UACA,aACA,sBACA,eACA,aACA,mBACA,iBACA,eACA,aACA,iBACA,kBACA,kBACA,UACA,iBACA,WACA,mBACA,eACA,WACA,YACA,qBACA,kBACA,UACA,SACA,UACA,WACA,WACA,mBACA,iBACA,YACA,gBACA,eACA,iBACA,kBACA,kBACA,kBACA,sBACA,sBACA,kBACA,iBACA,oBACA,kBACA,iBACA,qBACA,iBACA,eACA,iBACA,eACA,mBACA,UACA,YACA,iBACA,eACA,kBACA,sBACA,cACA,gBACA,aACA,WACA,mBACA,iBACA,iBACA,WACA,aACA,UACA,YACA,eACA,aACA,kBACA,mBACA,oBACA,qBACA,wBACA,wBACA,eACA,oBACA,oBACA,oBACA,oBACA,mBACA,aACA,kBACA,oBACA,YACA,YACA,YACA,YACA,cACA,cACA,YACA,UACA,kBACA,qBACA,cACA,iBACA,mBACA,mBACA,iBACA,kBACA,kBACA,sBACA,gBACA,qBACA,kBACA,mBACA,mBACA,gBACA,YACA,gBACA,cACA,oBACA,cACA,iBACA,iBACA,oBACA,gBACA,iBACA,cACA,WACA,kBACA,cACA,gBACA,qBACA,kBACA,wBACA,oBACA,mBACA,qBACA,sBACA,kBACA,yBACA,aACA,kBACA,eACA,eACA,mBACA,mBACA,qBACA,mBACA,sBACA,yBACA,iBACA,gBACA,gBACA,oBACA,kBACA,mBACA,sBACA,wBACA,sBACA,qBACA,cACA,gBACA,gBACA,iBACA,kBACA,cACA,aACA,kBACA,cACA,wBACA,sBACA,YACA,iBACA,gBACA,kBACA,uBACA,wBACA,kBACA,kBACA,uBACA,mBACA,iBACA,mBACA,oBACA,iBACA,kBACA,kBACA,qBACA,gBACA,kBACA,mBACA,iBACA,iBACA,oBACA,mBACA,sBACA,oBACA,yBACA,eACA,WACA,oBACA,sBACA,iBACA,iBACA,mBACA,qBACA,kBACA,qBACA,yBACA,gBACA,wBACA,eACA,kBACA,qBACA,eACA,mBACA,oBACA,oBACA,uBACA,qBACA,mBACA,kBACA,gBACA,sBACA,wBACA,qBACA,gBACA,iBACA,wBACA,iBACA,mBACA,qBACA,sBACA,mBACA,oBACA,oBACA,yBACA,uBACA,yBACA,6BACA,kBACA,iBACA,uBACA,0BACA,mBACA,mBACA,oBACA,kBACA,sBACA,kBACA,oBACA,sBACA,+BACA,mBACA,qBACA,iBACA,qBACA,gBACA,uBACA,kBACA,4BACA,sBACA,yBACA,sBACA,sBACA,sBACA,yBACA,iBACA,qBACA,mBACA,uBACA,iBACA,mBACA,sBACA,oBACA,oBACA,sBACA,sBACA,oBACA,qBACA,2BACA,8BACA,qBACA,mBACA,gBACA,kBACA,iBACA,qBACA,sBACA,sBACA,oBACA,sBACA,oBACA,oBACA,yBACA,kBACA,uBACA,2BACA,uBACA,sBACA,uBACA,kBACA,qBACA,sBACA,mBACA,mBACA,wBACA,0BACA,0BACA,uBACA,yBACA,yBACA,oBACA,iBACA,gBACA,kBACA,uBACA,oBACA,4BACA,yBACA,aACA,sBACA,oBACA,sBACA,oBACA,oBACA,uBACA,uBACA,wBACA,mBACA,wBACA,2BACA,kBACA,eACA,eACA,iBACA,iBACA,mBACA,mBACA,kBACA,yBACA,6BACA,uBACA,eACA,qBACA,qBACA,mBACA,gBACA,uBACA,uBACA,qBACA,sBACA,wBACA,uBACA,kBACA,oBACA,eACA,gBACA,kBACA,kBACA,uBACA,wBACA,qBACA,gBACA,aACA,aACA,oBACA,uBACA,qBACA,eACA,oBACA,oBACA,kBACA,qBACA,qBACA,wBACA,0BACA,iBACA,kBACA,kBACA,wBACA,mBACA,oBACA,yBAEAG,IACA,UACA,OACA,SACA,YACA,QACA,YACA,QACA,QACA,QACA,WACA,QACA,SACA,WACA,YACA,WACA,SACA,SACA,SACA,UACA,QACA,UACA,SACA,QACA,WACA,SACA,SACA,UACA,WACA,YACA,WACA,UACA,SACA,SACA,WACA,UACA,WACA,SACA,QACA,SACA,SACA,YACA,UACA,cACA,UACA,UACA,YACA,SACA,UACA,UACA,YACA,WACA,YACA,YACA,UACA,UACA,YACA,QACA,QACA,UACA,SACA,UACA,UACA,SACA,UACA,WACA,UACA,UACA,SACA,WACA,UACA,aACA,UACA,YACA,YACA,SACA,WACA,UACA,aACA,YACA,YACA,YACA,cACA,YACA,eACA,WACA,UACA,UACA,UACA,cACA,YACA,WACA,aACA,YACA,eACA,iBACA,eACA,YACA,WACA,UACA,UACA,aACA,cACA,cACA,YACA,YACA,YACA,kBACA,eACA,gBACA,UACA,WACA,WACA,YACA,YACA,aACA,WACA,YACA,YACA,WACA,cACA,iBACA,WACA,YACA,gBACA,WACA,WACA,YACA,aACA,eACA,cACA,QACA,QACA,YACA,aACA,YACA,cACA,YACA,eACA,aACA,WACA,gBACA,gBACA,UACA,UACA,UACA,cACA,cACA,cACA,eACA,eACA,WACA,cACA,eACA,kBACA,qBACA,oBACA,qBACA,eACA,kBACA,qBACA,qBACA,iBACA,YACA,cACA,eACA,YACA,YACA,WACA,WACA,aACA,iBACA,UACA,YACA,YACA,WACA,eACA,cACA,WACA,cACA,gBACA,cACA,WACA,cACA,cACA,WACA,eACA,oBACA,iBACA,mBACA,eACA,gBACA,eACA,WACA,aACA,WACA,cACA,YACA,YACA,gBACA,cACA,iBACA,iBACA,eACA,YACA,cACA,eACA,YACA,aACA,WACA,WACA,cACA,gBACA,UACA,WACA,WACA,cACA,cACA,YACA,UACA,WACA,cACA,aACA,eACA,aACA,iBACA,WACA,WACA,WACA,YACA,YACA,YACA,WACA,oBACA,eACA,iBACA,kBACA,oBACA,sBACA,oBACA,eACA,WACA,YACA,iBACA,SACA,YACA,aACA,gBACA,kBACA,qBACA,WACA,oBACA,eACA,kBACA,eACA,qBACA,iBACA,gBACA,mBACA,mBACA,kBACA,iBACA,kBACA,mBACA,aACA,eACA,cACA,cACA,gBACA,cACA,aACA,aACA,iBACA,gBACA,WACA,gBACA,YACA,WACA,aACA,gBACA,YACA,gBACA,eACA,cACA,kBACA,kBACA,aACA,mBACA,eACA,gBACA,cACA,eACA,kBACA,UACA,aACA,cACA,YACA,cACA,cACA,eACA,eACA,cACA,aACA,YACA,eACA,YACA,gBACA,cACA,UACA,YACA,YACA,YACA,WACA,YACA,cACA,cACA,YACA,WACA,WACA,YACA,YACA,YACA,eACA,iBACA,kBACA,WACA,eACA,WACA,oBACA,gBACA,kBACA,YACA,qBACA,sBACA,sBACA,qBACA,cACA,cACA,eACA,YACA,cACA,iBACA,mBACA,wBACA,YACA,cACA,iBACA,mBACA,YACA,kBACA,kBACA,eACA,mBACA,gBACA,eACA,eACA,WACA,WACA,cACA,YACA,aACA,WACA,eACA,oBACA,gBACA,sBACA,mBACA,oBACA,uBACA,kBACA,oBACA,kBACA,eACA,UACA,gBACA,iBACA,yBACA,uBACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,YACA,YACA,cACA,YACA,aACA,WACA,aACA,cACA,YACA,YACA,YACA,iBACA,kBACA,gBACA,aACA,cACA,YACA,gBACA,gBACA,iBACA,aACA,eACA,YACA,aACA,aACA,YACA,aACA,UACA,WACA,cACA,cACA,cACA,cACA,WACA,WACA,eACA,eACA,cACA,eACA,WACA,gBACA,gBACA,cACA,iBACA,iBACA,YACA,YACA,eACA,eACA,cACA,aACA,eACA,cACA,YACA,cACA,eACA,gBACA,eACA,iBACA,cACA,cACA,cACA,eACA,gBACA,gBACA,gBACA,gBACA,gBACA,kBACA,cACA,gBACA,eACA,cACA,cACA,cACA,eACA,cACA,kBACA,UACA,kBACA,UACA,iBACA,oBACA,cACA,mBACA,cACA,eACA,aACA,gBACA,kBAEAM,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SAoBA,eAGA,OAFA,4DAEAnlU,aAAoB,uBAWpB,eACA,4CAGA,IAKAylU,2BAEA,mBACA,mBACA,MACA,yDAEA,QADAkkE,oBACSxhB,cAAmBA,EAC5B,kBAAmC,iBAAcwhB,WAG9C,KAAWxhB,MAASA,EACvB,cAAyB,iBAAcA,EAEvC,aAAcplZ,KAAiBqwY,UAAcA,WAC7C97V,IACAmuT,IACAnuT,sBACAA,mBAEApzC,qDACAozC,eAGA4wV,EAGA,iBACA,OAAW5nU,iBAEX6nV,KACA,yBACA,8BACA,wBACA,uBACAA,MAAgB7wW,cAA2BA,iBAC3C,iCACA1pB,wBACA,gBAAyB0pB,gCACzBA,EAGA,iBACA,KACA,6BACA,+BACA,4BACA,8BACA,0BACA,gCACA,gCACA,iCAGA,mBACA,wCACA4wV,iBACA,kBACA,KAAQA,QAAWA,qBACnBhrY,UAEAo6C,aACAA,kBACA,MAGA,QAAY4wV,QAAUA,gCACtB,cACAqtU,WACA6F,SACAC,SACAC,WACAX,OACA2C,qBAEA3zS,GA0CA,mBACA,iBACA,oBACA,8EA8IA,yEACAt0D,IACA,2CACA,gDACA,6BACA,mCAwHA,6BAEA,GADA+9B,wCACA,6BAAyDmqU,yDACzD,UACAjvJ,cACA,6BACA,mBAAqC,UACrC,IACAzvhB,YAAuBu0W,QAAcgV,eACrCtqU,cACAsqU,WADgChV,QAAcgV,cACtB,UACxB,eAA+B,UAC/B,IACA,mBACA,kBACAA,oBACA8mK,gFAEA97K,SACArwY,MACAqlZ,mCAEA,sBACA,cACAA,OAEA,iDAAqF5+F,KAErF6kQ,qBAEA,OADA,kBACAj7K,SACA,IAGuB,IACvB,UAJA,IACA,aAAuB,UACvB,aAAuB,UACvB,aAAuB,MACvB,QACA,qBAAgCA,IAAe,MAC/C,oFACA,iBACA49T,6CACAC,SAAe,MAEfA,WAGA,GADA79T,UAAsBA,OAAeA,QACrC,2BACA,sCAA2DrwY,mBAAuB,KAClFiusB,wCAEA,aACA59T,mBACA97V,2BAEA87V,eACAl8L,cA4PA,qBACA,IAIA65f,GAJA7oU,2BACAylS,YACA,kBAEAhkQ,yBACA2kJ,gBACA,kBACA,wBACAY,UACA,iCACA,4EACAA,8BACAA,gCACAhB,UAEA/lK,UACAmmK,mBACA,WAvdA,uBACA,UACAyiJ,MAAe3oT,QACf,kCACA,uBACA,IAAQx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wT,QACAx5P,OArkBA,mBACA,+BACA,wCACAi8L,QACA6qD,QACA59S,8BAgkBAowT,UAEA,MACA,IAEA,uCACAqpW,WA/lBA,mBACA,0BACAjpe,QACAozK,UACA5jW,EA2lBAkwT,QACAp5P,OA3mBA,mBACA,2BACAi8L,QACA6wG,UACA5jW,EAumBAgwT,QACKzoU,WACLkyqB,eAAoFhusB,YAAeurjB,KACnGlgd,WAAyErrG,YAAeurjB,KACnFxwe,cAILiznB,WAhoBA,mBACA,2BACAjpe,QACA9O,UACA1hL,EA4nBA4wT,QACA95P,OA5oBA,mBACA,2BACAi8L,QACArxE,UACA1hL,EAwoBA4mqB,QAJAnN,eAAoFhusB,WAAeurjB,KACnGlgd,WAAyErrG,WAAeurjB,MAInF,MACL,IACA,gBACAyiJ,WAhtBA,mBACA,0BACAjpe,QACAxwL,yBACAA,EA4sBA6mqB,QACA/vmB,OA5tBA,mBACA,0BACAi8L,QACA/yP,yBACAA,EAwtBA0/T,SACA,MACA,IACA,gBACA+5V,qBACA3imB,kBACA,EAEA,kBA/uBA,mBACA,0BACA05H,QA6uBAs2e,QACAhwmB,OAxvBA,mBACA,0BACAi8L,QAsvBAw8D,SACA,EA6BA,kBACAj5U,mBACAwgF,SA3iBA,iBACA,0BACAxgF,mBACAA,EAwiBAs6hB,uBACAt6hB,iCAAqCwgF,kBACrCA,WAGA,kBACAxgF,iBACAwgF,UACAxgF,iCAAsC0pB,WApftC,mBACA,oBACA,cACAA,oBACAA,oBACAA,mCACAA,mBACA,QACA,wBACA,iCACA1pB,yBACA0pB,mBACAA,EAwesCgxT,SACtCl6P,WAGA,kBACAxgF,gBACAwgF,UACAA,SApcA,eACA,aACA,0BACAxgF,mBACAwqM,QACAxqM,EA+bA+6U,iBACAv6P,WAGA,mBAEAxgF,gCACA,eACA,wDACAwgF,SAhjBA,iBACA,8DACAgqH,IAAqBvuN,uBAAyCytC,GAC9DiyP,cACA,+BAEA,YADA,iCACA,MACA2rD,uBACAA,SACA59S,eAuiBA6wT,iBAEAv6U,YAqCA,mBACAwgF,UAGAA,SA5gBA,mBACA,oBACA,UACA,gBAAmBsvmB,mBAAmBW,aACtC/mqB,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,mBACAA,qBACAA,mBACAA,mBACAA,mBACAA,mBACAA,EA4fAoxT,OAKAt6P,UAGAA,UAQA,kBACAxgF,eAEAwgF,SAlgBA,iBACA,2BACAxgF,6CACAA,mBACA,CACA,eACA,iBACA,mBACA,qBACA,kBACA,qBACA,kBACA,wBACA,qBACA,kBACA,yBACA,YACA,kBACA,mBACA,4BACAlrB,oBAEA40C,iDACA1pB,8CAEAA,EAyeAg7U,iBAGA,qBACA,WACA+gE,uCACAvhB,MAAuB,IAAM9wW,qDAAmE,CAAnE,MAAmE42gB,KAChG,4BACA,iCACA,4FACAI,8BACAA,gCAEA,uBAEAyiJ,mBACA3imB,WACA92D,oCAp5BA,mBACA,+BACA,UACA1pB,IACAA,kBACAA,mBAEA0pB,mBACA,YAAgB4wV,MAAOA,qBACvB,WAAiBvlB,QAAOrrU,GACxBA,qBACAA,qBACA4xL,QACA5xL,eAu4BAi5gB,qBACAnid,iBACAw6c,mBAEAD,SAvIA,uBACA,0CACAuF,aAAyBurJ,cAAcC,aAAaK,SACpD3rmB,UACA,wBACA4imB,UACApjrB,sDACA,kBAAwBqjrB,SAAUA,IAClC7oT,UAGA5hD,cACA,UACA,gCAA4Ck7V,aAAgBA,IAE5DuP,6BACAF,aACA,yCAGA1iJ,KAFAxiM,IAEApY,0BAGArlQ,UAiHA46P,aAEAu/M,SAzEA,qBACA,oBACA,wBACA5+I,0CAGAryX,yBAAkCklF,YAClCllF,wCACA,wBACA8wW,UACAA,iBAA8BA,yBAA0CuhB,WACxE,aAAgB2kJ,eAAkBA,IAClC,cACA,qCACAJ,YACA,uCAAkF,OAElFI,wBAAoCx+iB,0EAEpCs+F,qBAIAA,WAqDAk6c,WAIAI,SAIAL,WAEA0oJ,yBAjlBA,iBACA,2BACAlrW,MACA0C,uBAAqCvvI,aACrCprM,EA6kBA46U,oBAOA56U,2CAtGA,qBAEA,4BACA,4DACAwgF,sBACAxgF,gBAoGA46hB,WAQAp6c,UACA85R,QAyJA,QACA,gCACA,mCACA,yBACA,iCACA,gBACA,uBACA,gCACA,4BACA,iCACA,gCACA,2BACA,oCACA,qCACA,yCACA,gCACA,sBACA,mCACA,2BAgGA,4BACA,iBACA,IACA,uDACA,oEACA,2HACA,gFACAo2U,uBACA,oBACA,6DAEqC,CAFrC,MAEGhnqB,GAAW,cAAuB,QACrC,SAYA,eACA,oEACA,6DACA,yCAbA,mBACA87V,wBACAnkC,MACA,aAAiB06D,OAAOA,2DACxB,MACA,iCACA,wFAQAp+D,4BACA,YAAgBj0T,wBAA0BA,kDAC1C87V,mCACA,mBACA,yBACA,QACAA,4BACAA,wCACAA,sCAA2C,yDAC3C,2CACA29T,aACA39T,uBAA+BtjY,iDAoQ/B,iBACA,sBACA8d,0BACAA,0BACA27Q,iBACA2rD,yBACAtnU,8BAwPA,iBAEA,iCAGA,SAFA0pB,oBACA6wW,eACOA,aAAmBA,GAC1B7wW,8BACA,+BAEAqyX,OACAv7T,UACAA,SAzBA,iBAUA,OATAxgF,cACAA,oBACAA,sBACAA,uBACAA,uBACAA,qBACAA,mBACAA,mBAEAA,gBADA,KAEAA,8BAcAk/U,KAEA1+P,YAGA,kBACAxgF,+BACAA,qCAA4C,IAC5C,qBACAwgF,QArMA,iBACA,YACA+5S,IACAjgB,SACA9zC,mBAAyC+zD,MAAejgB,cACxD5wV,mBACAA,mBACAA,kDAEA,QACAA,EACA49S,MACAuP,aAEA,wCACA,CACA,aACAssW,6BACApnS,YASA,cA0KA38D,MAEA,CAFA,MACGm7C,GACHhiX,wEAeA,iBACAioE,UACAA,UACAA,SAdA,eACA,0BACA92D,cACAA,qBACAA,mBAAsBA,oBAAsBA,oBAC5CA,mBAAsBA,oBAAsBA,oBAC5C,YAAgB6wW,MAAOA,EACvB7wW,mBAAuBA,mBAAqBA,mBAE5C,SAKA00T,KACA59P,UAwBA,iBACA,WACA,iBACAA,SA7FA,iBACAxgF,eACA,YAAgB,OAAQ0pB,qBACxB,uBACA49S,gBACAA,gBACAA,aACAtnU,8BAsFA88U,IAEAt8P,SAnSA,iBACAxgF,cACA,QACA,WAEAwlX,mBACAA,yBAEAxlX,mBAC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GAAyB/vT,EA7vHzB,eAGA,OAFAgsS,MACAqrG,gBACA,OA2vHA,GAAyBr3Y,EArmHzB,mBACA,YACAmsY,QACAA,cACA,IACA6oU,MADAjlZ,MACA,OACA,kBACAsnF,OACA,qBACA29T,mCAEA39T,MACA,YA0lHA,GAAyBr3Y,EAtnHzB,mBACA,YACAmsY,QACAA,cACA,IACA6oU,MADA14e,MACA,KACA,kBACA+6K,OACA,qBACA29T,mCAEA39T,MACA,YA2mHA,IAAyBr3Y,EAvpHzB,mBACA,YACAmsY,QACAA,cACA,IACA6oU,MADA39T,gBACA,KACA,kBACAA,OACA,qBACA29T,mCAEA39T,MACA,YA4oHA,IAAyBr3Y,EAxoHzB,mBACA,YACAmsY,QACAA,cACA,IACA6oU,MADA39T,gBACA,KACA,kBACAA,OACA,qBACA29T,mCAEA39T,MACA,YA6nHA,IAAyBr3Y,EA/zHzB,eAEA,OADAw5V,MACA,GA8zHA,IAAyBx5V,EAxsHzB,eAGA,OAFAw5V,MACAjZ,MACA,OAssHA,IAAyBvgV,EApxHzB,eAGA,OAFAw5V,MACA69C,gBACA,OAkxHA,IAAyBr3Y,EA7yHzB,eAGA,OAFAw5V,MACA69C,gBACA,OA2yHA,IAAyBr3Y,MACzB,IAAyBA,EA5qHzB,eAGA,OAFAw5V,MACAzpC,MACA,SA0qHA,IAAyB/vT,EA7vHzB,eAGA,OAFAw5V,MACA69C,gBACA,OA2vHA,IAAyBr3Y,MACzB,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,IAAyB1C,KACzB,IAAyBA,MACzB,IAAyBA,KACzB,IAAyBA,MACzB,IAAyB0C,EA10EzB,mBACA,YACAmsY,kBACAkL,OACA,uBACA29T,SACA3oT,aACAkmK,SACA,uBAOAl7K,MACA,QAAatjY,wBACb,mCACAw+iB,oBACAJ,KAwzEA,MACA,MACA,IAAyBnyjB,EA1xRzB,mBACA,SAEAosZ,wBAEA,MAr7MA,eACA,sBAYA,OAXA/U,MACA,CACAwrU,UACAC,YACAC,eACAC,eACAC,cACAC,aACAC,eACAC,cAEA,CAw6MA9kf,IAWA,OAVA6tK,wBACAA,4BACAA,wBACAA,wBACAA,0BACAA,2BAGA,MADAkL,kBACA+U,UAEA/U,sBAEA,4BAAyC,WACzC,0BAGA,uBACA,wBAEA,uBACAgV,oBAEA,uBAMA,OALAkmK,qBAEAl7K,MACA+U,QAjhNA,eACA,SAIAA,EAHA/U,kBAGA,EAEAlL,kBACAyhC,uBACAonS,mBACA3oT,mBACAkmK,mBAGA,OAFAl7K,MAEA+U,QACA,WAAwB,WACxB,EACAv6X,UACA,aAEAsgiB,mBACA,WACA,EAEAtgiB,qBACA,WACA,YAEA,8CAEAA,EAm/MAqrM,IAEAm6K,sBAEA,mBAAgC,WAChC,mBAGA,oBAEA+U,IAivRA,IAAyBpsZ,EA1yRzB,iBAGA,OAFAq3Y,gBACAtnF,MACA,GAwyRA,IAAyB/vT,MACzB,IAAyBA,MACzB,IAAyBA,EApqRzB,iBACA,YACAosZ,kBACAjgB,kBACA,aACA,CAASk3U,qBAgqRT,MACA,IAAyBrjtB,EA19ezB,eACA,6BA09eA,MACA,IAAyBA,EAziQzB,eAGA,QAFA6xB,KACA0pB,kBACAA,QACA1pB,0CACA,WAqiQA,IAAyBv0B,KACzB,IAAyBA,MACzB,IAAyBA,KACzB,IAAyBA,MACzB,IAAyBA,KACzB,IAAyBA,MACzB,MACA,MACA,IAAyB0C,MACzB,IAAyBA,EA1uHzB,eAGA,OAFAgsS,MACAumE,MACA,QAwuHA,IAAyBvyW,EAz2PzB,eACA,SACA6xB,oBACA,SACA0pB,oBACAA,oBACA1pB,UACA,sBACA,sBACA,eACAA,IAg2PA,IAAyB7xB,EA7+GzB,iBA8+GA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,cACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,MA3jHzB,eACA,sBACA,eACA,CAAUgltB,YAyjHV,KAAyBhltB,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyB0C,EA96HzB,iBACA,SACAosZ,SAAuB,YACvB7wW,gBACAA,gBAEA87V,QACA97V,kBACAA,IAu6HA,KAAyBv7C,WACzB,KAAyBA,EApoHzB,iBAqoHA,OACA,KAAyBA,EA76EzB,iBACA,SACAosZ,kBACA7wW,sCACA,mBACA,kCACAA,mCACAA,sBACAA,gCACAA,mBACAA,wBACAA,gCACAA,6BACAA,0BACAA,qCACAA,mCACAA,qCACAA,6BACAA,qDACAA,mCACAA,mDACAA,IAy5EA,OACA,OACA,KAAyBv7C,EAl8EzB,iBACA,SACA,gCACAu7C,yBACAA,qBACAA,aACAA,IA67EA,OACA,OACA,KAAyBj+C,MAx1TzB,eACA,0CAw1TA,KAAyBA,MACzB,KAAyBA,UACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,KAAyB0C,MACzB,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyB0C,EAvxQzB,iBACA,OACA2zZ,sBACAt0F,wBACAj2T,cAoxQA,KAAyB9L,MACzB,KAAyB0C,EArvQzB,eACA,cACA,oBAmvQyB1C,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyB0C,MACzB,OACA,OACA,OACA,KAAyB1C,KACzB,OACA,KAAyB0C,MACzB,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,OACA,KAAyBA,KACzB,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,KAAyBA,KACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,MACzB,KAAyB0C,EAh5HzB,mBACA,YACAmsY,QACAyhC,mBACAonS,OACA,GADgBA,SAChBz5pB,eACA,qBACAy5pB,cACG39T,MACH,YAw4HA,KAAyBr3Y,EAp4HzB,mBACA,YAEA4ta,IADAxxM,UAEA,kBACA,qBACAwxM,SACAv2B,WACGA,MACH,YA43HA,OACA,KAAyB/5Y,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyB0C,EAt5HzB,eACA,SACA,8BAAqC6xB,aACrCA,IAo5HA,OACA,OACA,KAAyBv0B,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyB0C,EAhwIzB,iBAiwIA,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyB0C,EAj/HzB,iBACA,YACAosZ,WACAjgB,QACAyhC,SACAonS,SACA3oT,SACAhV,MACA,QAAWisU,iCACX,2BACA/wJ,KAw+HA,KAAyBj1jB,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,OACA,OACA,KAAyB0C,MACzB,KAAyBA,MACzB,OACA,OACA,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyB0C,MACzB,KAAyB1C,KACzB,KAAyBA,MACzB,KAAyBA,MAn7PzB,eACA,SACAu0B,0BACA,eACA,iBACAA,cACAwlX,QACAxlX,IA66PA,KAAyBv0B,MACzB,KAAyB0C,MACzB,KAAyB1C,KACzB,OACA,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,OACA,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,KACzB,OACA,KAAyBA,MACzB,KAAyB0C,EA53GzB,iBAGA,OAFAq3Y,QAEA,CAAUjuY,KADV2mT,MACU,GA03GV,OACA,KAAyBzyT,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,KAAyBA,KACzB,OACA,KAAyBA,MACzB,OACA,KAAyBA,KACzB,OACA,KAAyBA,MACzB,OACA,OACA,OACA,KAAyBA,KACzB,KAAyBA,MACzB,KAAyBA,KACzB,KAAyBA,MACzB,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,KACzB,MAAyB0C,EAniIzB,iBAoiIA,MAAyB1C,KACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,QACA,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,MACzB,MAAyBA,MACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,MAAyBA,KACzB,MAAyBA,MACzB,QACA,QACA,OAAyBsQ,OA4dzB,qBACA,QACA,aACA,6BACAonsB,aACAA,oBACAA,qBACApnS,wBA0BA,qBACA,YACA,iBACAhsH,eACAuqF,EAYA,iBACAt6W,sBACA,4BAAwC,cAAcmR,SAEtD,kDACAkzC,gDACA,eAAoBi2T,WAAiBA,QACrCj2T,oFAKA,0BACA,SACA,aAEA,IADA8+nB,oCACmB7oU,2BAAkC6oU,+BAErD,SACA,cACA,KAAQ3oT,qBAA4BlgB,iCACpCkgB,sCAAqDmtT,cAErD,6BACA,YACA,sCAaA,YAZA,uCAEAtjoB,OA/nbA,uBACA,aACA,4BACA03V,oBACAA,GA2nbAt7H,gBACAxvQ,UAEAozC,uBACA6L,aAKA7L,OAtpbA,uBACA,cACA,4BACA03V,wBACAA,GAkpbAz9E,gBAHAj6Q,uBAIA,IACA,YAEsE,YAAtEA,wBAAsE,IAEtE,cAGA,YADAA,OArDA,mBACA,uBACA,iBACAk2U,0BACAA,iCACAA,8BAgDAm3T,6CAIArtoB,qBAiCA,iBAKA,QAJA36B,QAEA6wW,OACAjgB,IACAyhC,KAAaA,yBAAuBA,qCACpC,wFACA13V,kDACAmhU,gBAAqBsmU,aAAaK,0BAClCziqB,YAAei+pB,aACfj+pB,6BAAmDA,YACnD,YACA,OA1CA,uBACA,wBACAy5pB,mCACA,6BACA,wFACAA,4BACAA,8BAKA,QAHA7hJ,aAAyBuqJ,cAAcC,aAAaK,SACpD/I,YAEA3iJ,UAAwBA,aAAgBA,iBACxC,kBAAwBqzI,aAAgBA,GAGxC,IAFA/3R,4BACA2kJ,UACAD,UAAqBA,aAAgBA,IACrC,+BACAxiM,KAEA7Y,oBACA6Y,6BAKA1e,SAiBAyC,qCAEAt4T,sCACAA,kBAz1cA,eACA,qBACA,iCACA1pB,iCACAA,EAq1cA2qU,MACAtmR,UAp1cA,eACA,qBACA,cACArkD,0BACAA,iCACAA,EA+0cAmzT,QAEAzpS,+BACA,oBACA,UA9scA,eACA,YACA,cACA1pB,4BACAA,MACAA,EAyscA2xrB,MAA0D,WAC1D,mBAA0D,WAC1D,oBAA0D,UAG1DjoqB,wBAA0BA,iBAAkBA,SAE5C6wW,iBACAl2U,SACAk2U,QAGA,eA2PA,mBACAl2U,QAxqdA,iBACA,sBACAk2U,eACAwhB,MADAxhB,6BAEA,uCACAwhB,oBACAA,sBACAA,oBACAA,oBACAA,2BACAxhB,uBACAwhB,sDACAA,GA4pdA1pJ,EACAgrJ,MACAjwU,OAAU2lY,SACVx7d,aACA21sB,SACAC,gBACEzjqB,IA4CF,iBACA,KACA,SACA1pB,0BACA0pB,WACA26B,SAzmcA,iBACA,aACA36B,mBACAA,mBACAA,6BACAA,mBACA,QACA,wBACAA,mBACA6wW,aACA7wW,mBACAA,mBACAA,EA6lcA+yS,gBAKA,0BACA,4BACA,mBAIA,oCACA,gBACA,YACA,sCACAxrT,wCACAi/C,aAEA7L,SAx9cA,qBACA,aACA,mBACA+mJ,QACAkvK,EAo9cA/sH,aAFAlpM,6BAGA,UACA,YACAA,+BACA,UAEA,cACA,aAEAA,SArudA,qBACA,aACA,mBACAi2T,mBACAA,EAiudA7oD,KADAqmB,oDACAqrW,UACK9+nB,SAttdL,uBACA,qBACA8+nB,6BACA,oBACAA,2BACApnS,wBACAonS,sDACAA,GA+sdKhxX,oDACL,cAEA9tQ,0BAvBAA,oBAuBA,CAKA,mBACA,IAMAi9e,GANA/mK,OACAjgB,qCACA6oU,WAAiC0I,aACjCrxT,0BACAkmK,qBACAJ,aACA8iJ,YACA3iJ,wBACAqzI,kBACA,2BACA,yFACArzI,4BACAA,6BAGAp8e,sBAEAA,eACAA,iBACAA,gBACAA,gBACAA,kBACAA,gBACAA,gBACAA,gBACAA,gBACAA,SApidA,eACA,YACA,0BACArkD,+BACAA,+BACAA,EA+hdAyqP,SAIApmM,iBACAA,iBAEAi8e,sBAEAj8e,SA9sdA,iBACA,4BACAk2U,YACA,8BACAA,yBACAA,uBACAA,yBACAA,mBACAA,EAssdAxkE,QAGA,iBAAyB81X,cAAcC,aAAaK,SACpD7rJ,sBAGA,QAFAgjJ,MACA1iJ,MACAD,UAAwBA,aAAgBA,iBACxC,kBAAwB6iJ,aAAgBA,GAGxC,IAFA9iJ,6BACA0iJ,UACAziJ,UAAqBA,aAAgBA,IACrCW,aACA,yBACAiiJ,KAEAzlJ,oBACAwC,uCACAijJ,6BAGA,+BAEA,UAjWA,iBACA,IACAJ,GADAz5pB,sBAEA1pB,0BACA,UACAojrB,0BAAoC,4BAAiCI,OAAaryqB,WAClFkxU,GAIA,eACAghW,qBACAA,wBACAA,sBAGAA,uBACAA,wBACAA,oBACAA,qBACAA,uBAIAA,sBACAA,wBACAA,qBAEA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F,kCAIA/9V,KADAg+W,0BAt2jBA,eACA,WACAv6X,2HACAA,wJACA,YAAkB0pB,aAAqBA,EACvC1pB,wGACA,sCACAA,WAg2jBAigJ,KAEAv2H;6DAAA,CAIA,kBACA,IAGA,MAFA,qCAEA,kCACA,QACA,gCACA,8BACA,SACA,8FACA,WACA,QAEA,UAEA,CAFA,MACI87V,GACJ,eAfA,GAkBA,eACA,wDAEA,eACA,4EAEA,eACA,2EAEA,eAEA,QADAxlX,IACA0pB,IAAkBA,aAAgBA,EAClC1pB,eACA,wBACAs6W,IACA,QAAc5wV,aAAgBA,GAC9B,yBACA,UACA,aAAsB8wW,QAAOA,GAC7BD,mBAEAA,YACAjgB,MAGA,SAuBA,iBACA,UACAigB,WACArwZ,EACA,iBACAqwZ,iBACA/U,aAEA+U,kBACA/U,cAEA+U,kBACA/U,cAEA+U,+BACA7wW,EACA87V,cAEA+U,+BACA7wW,EACA87V,cAEA+U,+BACA7wW,EACA87V,aACA,QAEA,aACA+U,EAEA,eACA,wBACAv6X,WACA,QACA91B,EACA,UAwBA,GAvBA81B,YACAA,gBACA0pB,EACA87V,WAEAxlX,YACAA,iBACA0pB,EACA87V,cAEAxlX,YACAA,iBACA0pB,EACA87V,gBAEAxlX,YACAA,sBACA0pB,EACA87V,kBAEAxlX,YACAA,wBACA0pB,EACA87V,kBACA,QACAxlX,YACAA,2BACA0pB,EAEA,kBAEA,eAGA,QAFA1pB,GAAcl1B,KACd4+C,KACA1pB,cACA0pB,gBACA,SAEA,eACA,4BACA,gBAGA,eACA,mBAUA,OATA87V,aAEA97V,iBACA87V,cAEA97V,kBACA87V,cAEA97V,kBACA87V,cAEA97V,kBACAA,EAmCA,eAEA,QADA1pB,QAAwBl1B,KACxB4+C,eACA,UACA4wV,UACAyhC,OACAzhC,QACA,OACAkgB,OACA,gBACA,EAEA,oBAEA2oT,iBACAz5pB,OAEA,WACA,EAEAy5pB,kBACAz5pB,SAEA,WACA,EAEA,eACAy5pB,qBACAz5pB,QAEA,WACA,EAEAy5pB,kBACAz5pB,SAEA,cAEA,uFAEA,QAAcz2C,iBACd,aACA+sB,SACAA,cAEA,SAEA,eACA,SACA,+BACA,MAEA0pB,uBACA4wV,SAEAt6W,uBACA,WACAA,0BACAA,oBAGAoqV,MAEA,iBACA,wCACA,qBACG,GAEH,eAGA,QAFApqV,EACA0pB,QAAwB5+C,KACxByvZ,eACA,cACAwhB,wBACAxhB,OACA,QACA3xY,qBACAkpsB,aAEA/1S,2BACA,mBACAukJ,qBACA6iJ,kBACAhwc,QACAlgQ,yBAEAsnZ,WAEA,+BACA4oT,kCACAz5pB,WAEA,SAEA,eACA,SACA,6BACA,OACA,GACA,EAASz2C,uBACT,IAEA,gBACAsnZ,OAAiBtnZ,8BACjB,SACAy2C,gCACA4wV,gBACA6oU,aAAsBjspB,iCACtBqjW,WAAmBtnZ,4BAEnB,aACA+sB,sBACAA,WACAs6W,uBACA,sBAGAlwB,MAEA,iBACA,QACA,2DAKA,QAJA1gU,GAAc5+C,KACdyvZ,UACAjgB,KACAyhC,OACAA,cACA,eACA,UAqBA,cAeA,GAdA,OACAulJ,kBACAhB,oBACAA,cAEAgB,kBACA,OACAhB,oBACAvkJ,QAEAukJ,kDACAvkJ,QAGA,MACA,oCAEA,QADAqnS,oBACAA,yBACAC,mBACAD,GAEA,QACA,UAGA,gDAFAC,iBAEA,CAEA,SACA/oU,0DACA,CAMA,IALA+oU,OACA/oU,mCACAgnL,UAEA8hJ,GACA9hJ,kBACAhnL,cACAgnL,mBACA8hJ,GAEA9hJ,IACAhnL,wBAEAA,cACAA,eAlEA,CACA,kBACA,WACAkgB,OACA,CACA,aACAA,SACAkmK,OACAlmK,gBACAkmK,OACAlmK,iBACAkmK,OACAlmK,iBACAA,QACAA,KACAuhB,OAEAzhC,wBACAyhC,MAgDA,EAIA,QADA0kJ,KACAqzI,KAAoBA,cAAqBA,GACzCrzI,iBACA,SACA,mEACA,SAEA,eACAvmjB,mBACAsrY,qBAGA,QAFAxlX,KACA0pB,IACAA,aACA,aACA4wV,4BACA5wV,KACA1pB,mCACA0pB,KAEA,gBACA,sDACA,8BAEA,eAGA,QAFA1pB,KACA0pB,IACAA,aACA,qCACA4wV,oBACAt6W,UACA,aACAmjrB,aACAnjrB,WACAu6X,OACA4oT,KACAnjrB,kCACMu6X,QACN4oT,MACAnjrB,uCACMu6X,UACN4oT,MACAnjrB,kDACMu6X,aACN4oT,MACAnjrB,8DACMu6X,gBACN4oT,MACAnjrB,2EAEAA,qBACAmjrB,MACA7oU,OACAA,YACAA,eACAA,gBACA5wV,KAEA,aA8SA,iBACA,2CAEA,OADAA,OACA87V,SACA,IACA,iBACA97V,OACA6wW,mEACAwhB,MACAzhC,KACA,MAEA5wV,OAjsBA,mBACA,mEACA4wV,wBACAkL,cACAA,oBACA,aAAkBlL,OAAeyhC,UACjCv2B,cACAA,oBA2rBAj7B,UACAwxD,MACAzhC,MAEA,UACA,IACA5wV,OACA6wW,2BACAwhB,MACAzhC,KACA,UACA,IAEA,gCACA,QACA,qCACA,OACA,4DAEA,QACAt6W,0BAAkD70B,oBAClDu+C,OACA6wW,qBACAwhB,OACAzhC,SACU,CACV,0BACA,QACAt6W,2BACA0pB,OACA6wW,qBACAwhB,MACAzhC,KAGA,UACA,IACA5wV,OACA6wW,0DACAwhB,MACAzhC,KACA,UACA,IACA5wV,OACA,cAEA,kCAEA,aACA1pB,YAqSA,eAEA,QADAA,GAAcr2B,sBACd+/C,IAAkBA,aAAgBA,EAClC,MACA1pB,WACAA,YAEAA,gBAAyBr2B,oBAGzB,SA/SAwiX,OACAouC,kCACAwhB,WACAzhC,MAEAigB,qBACA7wW,WAEA,iBACA,iDAEA,OADAA,OACA87V,SACA,IACA,IACA,IAmBA,IACA,IACA,IACA,IACA,IACA,IACA,MAxBA,IACA,IAGA,GADA29T,4BACA39T,KACA,qCACA,OACA,4DAEA,QACAxlX,0BAAkD70B,oBAClDu+C,OACA6wW,qBACAwhB,QACAzhC,KAIA,MAMA,QAEA,kCAOA,OALAkL,MACA+U,kCACAwhB,SACAzhC,MAEAkL,SACA,IACA97V,OACA6wW,uBACAwhB,OACAzhC,KACA,UACA,IACA5wV,OACA6wW,2BACAwhB,OACAzhC,KACA,UACA,IAGA,GADA6oU,6BACA39T,IACU,CACV,0BACA,QACAxlX,2BACA0pB,OACA6wW,qBACAwhB,OACAzhC,KAGA,UACA,IACA5wV,OACA6wW,0DACAwhB,OACAzhC,KACA,UACA,IACA5wV,OACA,cAEA,kCAEA,4BACAA,WAgBA,eAEA,UADAmhU,MACA,YAEA,eACA,WACA,GACA,EAAO3zT,sBAGP,iBACA,MACAqjW,sFAEA,GADAA,eAEAA,UACA/U,wBAAiCtuV,qBAGjC,iBACA,MACAqjW,qFACA/U,wBAA+BtuV,oCAC/B,iBA+VA,mBACA,WACAispB,IACA,GACA,EAAOjspB,oBACP,EAAOA,oBACP,EAAOA,iCACP,EAAOA,uCAA2C3mD,YAAa,WAC/D,gBAEA,EAAO2mD,oBACP,EAAOA,iCACP,EAAOA,uCAA2C3mD,YAAa,WAC/D,gBAEA,EAAO2mD,qBAEP,kEACA,iDACA,SACA,oCACA,kCACAwpgB,sBACAyiJ,iBAEA,oCACA,kCACA7iJ,sBACA6iJ,iBAKA,QAHA7hJ,gCACAb,gCACA6iJ,SACA1iJ,KAAkBA,cAAiBA,GACnC,mFACAU,4BACAb,6BAFA,CAOA,UACA,OAHAa,4BACAb,4BAEAj7K,aACA,IACA,4BACAm7K,eACA6iJ,eACA,MAEA7iJ,eACA6iJ,eACA,UACA,QACA,QACA,QACA,IACA7iJ,eACA6iJ,eACA,cAEA,4CAEAH,YACAD,cAEAnlV,YACA61U,gBAEAt5S,EA/BA,CAmCA,IAFA2oT,qBACAA,oBACSviJ,4BAA+BA,GACxCU,4BACAb,4BAEA,4BACA0iJ,qBACAA,QAAcjspB,wBACdispB,GAEA,iBACA,OACAhwc,MACA,GACA,EAASj8M,qBAETjkD,QAGA,iBACA+sB,SACAA,eACA,iBAAgC0pB,QAASA,EACzC,SACA,qBACAA,EAEA,qCAuCA,mBACA,WACA,GACA,EAAOwN,oBACP,GACA,EAAOA,gEACP,EAAOA,gEACP,EAAOA,gEACP,EAAOA,4DACP,GACA,GACA,GACA,GACA,GACA,EAAOA,sBAGP,eACA,eACA,EACA,2BACA,EACA,4BACA,EACA,uBAEA,iEAEA,iBACA,kBACA,oEACA,yBAAqCA,gBACrCqjW,EArEA,eACA,SACA7wW,KACA,qCACA,2BACG50C,oBACH,mBACA,aAEAwlY,uBAEA,iBAEAvvB,uCACArhU,cACA1pB,UAAgCw8I,kEAGhCgpO,iCACA+U,uBAEA,iBAEAxvC,sCACAuvB,gCACA,4BACAyhC,aAEAA,iCACA/7Y,yCAMAA,EAkCA+xrB,IACAz3U,WACA,WACA,gEACA,wCACA,eACA,qEACA,4CACAkgB,QA8GA,mBACA,cACAuhB,MACAl6E,wBACA,+BACA04D,yCACAjgB,MAAqC99N,wCAAuDx8I,GAC5F+7Y,QACAnwD,SACA01M,YAAkBpqgB,oBAClB,gBACAkspB,QACApjrB,6BACAsgiB,YAEAz+N,wBACA,qBAEA6+N,6BAEA,UACA7+N,wBAEA,QADAy/N,2BACA8hJ,KAAoBA,SAASA,UAC7B9hJ,OACA,oBACA+hJ,wBACA,mBAEAF,OAAgC3miB,wDAA2Fx8I,GAC3H4rV,UACAmwD,aACAulJ,QAAepqgB,qBACf,oBACAupgB,SACAzgiB,iCACAsgiB,aAEAz+N,qBACA,+BACAL,aACAsyW,6BAEAjyW,yBACA,sBAGA6+N,6BAEA,UACA7+N,yBAGA,QAFAy/N,2BACA8hJ,qBACAC,KAAoBA,SAASA,UAC7BD,OACA,yBACAA,yBACA9hJ,qBACA,yBACAz1M,UAEAD,MADA4uC,OAAgCh+O,mDAAgFx8I,IAEhH+7Y,UACAulJ,qBACA,iBACArjM,SACAj+V,+BACAsgiB,YAEAz+N,yBACA,qBAEA6+N,6BAEA7+N,yBACA,UACAwhX,2BACAvP,yFAKA,GAJAuP,qBACA,2DACA,uBAEAA,QACA,IACAC,MADAz4V,mBACA,YACAgB,iBACAw3V,OAEAA,SAEA,UADAx4V,mBACA,6BACA,mBACA,uBACA,mBACS/1W,qBACT,mBACA,SAEA,0BACA+2W,sBAGAw3V,QAEA,CACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACAvusB,qBACA,UAEA,kCACAuusB,OACAx3V,aAEA,yBAEA,gEACA,OACA,kCAEA,2BACA63V,OAAwClniB,mDAA0Ex8I,GAClH6rV,UACAD,UACAmwD,UACA,iBAEA,GADAilJ,SACAhhiB,+BACAsgiB,gBACA,CACAtgiB,mEACAA,iCACAA,sEACAxwB,gDACA,8FACAqyV,qBACA,+BACA18T,YACAq8T,cACA4/N,6BAGAT,yBAEA,yBAEA,0CACA,mBACA8iJ,OAA0CjniB,mDAA0Ex8I,GACpH6rV,UACAD,UACAmwD,UACA,iBAEA,GADA2nS,SACA1jrB,+BACAsgiB,gBACY,CACZtgiB,mEACAA,iCACAA,sEACAxwB,gDACA,8FACAqyV,qBACA,+BACA18T,YACAq8T,cACAmiX,6BAGAnjJ,iBAGAG,qBACA,yBAEA4iJ,2BACA,mBACAE,qBACAC,UACA,YACAA,OAA4ClniB,uCAA2Dx8I,GACvGA,iEACA+7Y,UACA,iBACAilJ,SACAn1M,UACAD,UACAp8W,yEACAqyV,qBACA,+BACAu/N,YAA8BlqgB,gBAC9B,GACA,EAAmBA,qBACnB,EAAmBA,gCACnB,EAAmBA,4CACnB,EAAmBA,sCACnB,EAAmBA,sCACnB,GACA,GACA,GACA,GACA,EAAmBA,oBACnB,GACA,EAAmBA,wBAEnBkqgB,QAA4BlqgB,mDAC5BsqS,cACAmiX,6BAGA9iJ,qBACAL,iBAGAG,qBAEA0iJ,qBACA3iJ,6BA3VAz+N,WACAq4C,WACAyhC,qCA4VA,0BACA,UACAl6E,sBACA,+BAEAy/N,QAAuBpqgB,oBACvBispB,gBAEA7iJ,6BAEA,IACAI,SADAn/N,aACAuwX,8BACAjwX,yBACA,OAIA,0BACA,qBACAshX,gBACA,UACAA,aACA3oT,MACA2oT,YAEAA,gBACA3oT,MACA2oT,eAEA3oT,IACAjiX,+CACA,UACA,cACAmohB,kBACA,CAEA,QADAJ,MACAgB,KAAqBA,aAAiBA,GACtChB,cACA,aAAqB8iJ,aAAiBA,IACtC1iJ,UACA,iBACA,SAAmBY,aAAiBA,IACpC,qBACAb,KAEAC,iBAIA,QACAsxJ,OAAarotB,iHACbsotB,QACAC,QACAC,QACAC,QACAC,OAAalntB,yCACbmntB,mBAEAr0V,0BAEAA,2BACAA,kCACAA,OACA,yBAEA2iM,oCACA/+N,yBACA,OACA2jX,2BACA,iDACA,aAA2BvoP,eAAkBA,IAC7C,yBACAwoP,qBACAA,gCACAD,WAAmCtupB,gCAEnCg1pB,6BAEA,yBACArqX,yBAEA,QADA2qX,2BACAhH,KAAwBA,aAAgBA,IACxC,yBACAvoP,qBACAA,2BACAuvP,WAAgCt1pB,gCAEhCg1pB,6BAEA,yBACA1I,SACA,yBAEAhjJ,OACA+iJ,QAA0BrspB,qBAC1B,wCACAuspB,IAGA+I,GADA3hW,GADAtpB,SACAuwX,kBACA,uBACA,yCAEA,6DANA,IAGAtF,GAMAh9sB,mCACAqyV,qBACA,+BACAskX,gCACA,wCAjXA,oBACA,4FACApqS,+BACA,UACAulJ,eACA,sCACAn3M,yBACA,wDAIAg5V,qBACAA,QACAA,UACAA,gCACA,uCAEA39T,qBAkWA/jD,aACAyqX,6BAEArgW,SAEA03V,SAEA,QADAG,4BACA1iJ,KAA2BA,QAAeA,IAC1C,WACAxkZ,QACAxtG,YACA9X,WACWl3B,GACXA,iEAYA,QAXAohiB,IACA,GACA,EAAelqgB,oBACf,EAAeA,+CACf,EAAeA,oBACf,EAAeA,qDACf,GACA,EAAeA,oBACf,EAAeA,oBACf,EAAeA,qBAEf8mX,SAAuCA,mCAAoDA,IAC3F,oBAzHA,MA0HAujJ,2BACAH,YAA+BnujB,qBAE/BswsB,YAA8BrspB,gBAC9B,GACA,EAAeA,qBACf,EAAeA,yBAEf,IAIA0tpB,UAJA,CACAh8rB,MACAkpsB,+BAGAtitB,+DACAqyV,qBACA,+BACAskX,YAA4BjvpB,gBAC5B,GACA,EAAiBA,qBACjB,EAAiBA,gCACjB,EAAiBA,4CACjB,EAAiBA,sCACjB,EAAiBA,sCACjB,GACA,GACA,GACA,GACA,EAAiBA,oBACjB,GACA,EAAiBA,yBAEjBivpB,QAA0BjvpB,mDAC1BsqS,cACA0qX,6BAEAtgW,SACA43V,YAA2BtspB,gBAC3B,GACA,EAAeA,wBACf,EAAeA,yBAOf,GAHAospB,qBACAA,qBACAA,SAAqBpspB,iCACrBxN,cACA,WACAwN,UACAslH,UACAxtG,yBACShvC,GACTs6W,QACA1xX,MACAkpsB,sBACA,GACApoqB,8BACA,OAAuBwN,gBACvB,GACA,EAAmBA,gBACnB,GACA,EAAqBA,0EAErB,EAAmBA,gBACnB,GACA,EAAqBA,uGAMrBospB,SAAuBpspB,qBACvB2qS,qBACA,+BACAL,cACA0qX,6BAEAtgW,qBAEA03V,OACA,yBACAzhX,sBACA,+BAEAskX,SACArS,+BACA,OAEAqS,YAA8BjvpB,gBAC9B,GACA,EAAiBA,qBACjB,EAAiBA,oBACjB,EAAiBA,2BAIjBg1pB,6BAEA,0BA0FA,GAzFArqX,sBACA,+BACAskX,SACA,QACA,OACA,OACA,OACA,QAEArS,gCACA,SAEA,SACA,GACA,EAAe58oB,kCACf,GACA,EAAeA,wBAEfuupB,SAA0BvupB,kCAC1BuupB,SAA0BvupB,sDAC1BuupB,QAAyBvupB,2DACzBuupB,QAAyBvupB,6CACzBuupB,QAAyBvupB,mDACzBuupB,QAAyBvupB,2DACzBuupB,QAAyBvupB,2DACzBuupB,SAA0BvupB,mDAC1BuupB,SAA0BvupB,mDAC1B,WAA4CslH,+BAAoCx8I,GAChFq8Y,MACA,SACA,iBACA,GACA,GACA,EAAiBnlX,wBACjB,4BACAuupB,UACA,eACAE,QACAA,UACAA,YAAiCzupB,gBACjC,GACA,EAAiBA,oBACjB,EAAiBA,yBAEjBuupB,WAA8BvupB,oBAC9BmlX,YAEAr6E,2CACAH,sBACA2qX,wBACA,mBAEAnwS,wBACA,qBAGA,iBACA,GACA,EAAenlX,qBACf,GACA,EAAeA,0FACf,4BACA2qS,sBACA,mBAEAskX,YAA6BjvpB,gBAC7B,GACA,EAAeA,qBACf,EAAeA,oBACf,GACA,GACA,GACA,GACA,GACA,GACA,EAAeA,yBAEf00T,UACA/pB,qBACA,+BACAL,cACAA,cACAA,cACAA,cACAwgO,gCAGAkqJ,6BAEApY,kBACA,0BACAwX,MAAwB3G,KACxB9iX,sBACA,+BAEAskX,SACArS,gCACA,SAEA,WACA0Y,YACAA,gCACAlB,eACAA,sBACA,GACA,EAAyBp0pB,2BACzB,EAAyBA,uBACzB,GACA,EAAyBA,qBACzB,6BACA,oBACAyupB,aACA,GACA,EAAuBzupB,2BACvB,EAAuBA,gBACvB,GACA,EAAyBA,6DAEzB,EAAuBA,sBACvB,4BACA2qS,sBACA,mBAEAo7H,YACAp7H,qBACA,+BACAL,cACA6qX,+BAGAf,eACAA,sBACA,GACA,EAAqBp0pB,2BACrB,EAAqBA,uBACrB,GACA,EAAqBA,qBACrB,6BACA,oBACA80pB,aACA,GACA,EAAmB90pB,2BACnB,EAAmBA,gBACnB,GACA,EAAqBA,6DAErB,EAAmBA,qBACnB+la,oBACA,OAA2B/la,sBAE3B,EAAmBA,gBACnB,GACA,EAAqBA,qBACrB,EAAqBA,yBAErB,4BACA2qS,sBACA+pB,UACAqxG,wBACA,qBAGAkpP,YAAiCjvpB,gBACjC,GACA,EAAmBA,qBACnB,EAAmBA,oBACnB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EAAmBA,yBAEnB00T,UACA/pB,qBACA,+BACAL,cACAA,cACAy7H,WACAz7H,cACA66E,gCAIA8pS,mCACA+F,6BAIAjuV,qBAEAs8B,0BAjaAr4D,mBAvWAZ,iCAEA53S,EAEA,oBACA,+BACA,MACA,oEACA,yBAIA6wW,EAHAwhB,qBACA,kBAEAA,IACAzhC,qBACAA,wBAEA,kBACA,+BACA,MACA,oEAKA,OAJAvvB,kBACA95W,kBACA,iBAEA,CAEA,kBACAu0Y,WAAkBtuV,gBAClB,GACA,EAAOA,oBACP,EAAOA,uCACP,EAAOA,oBACP,EAAOA,sCACP,EAAOA,sCACP,GACA,GACA,GACA,GACA,EAAOA,oBACP,GACA,EAAOA,wBAEPsuV,OAAgBtuV,iDAEhB,yBACA6kX,KACAA,OAA4Bv/P,4BAAoC89N,IAChE,0CACAA,+BACA9qY,8BACAoZ,MACAkpsB,4BAEA,0EACA,4BACA,+BACA3srB,eACAu7hB,6BAEA3kJ,GAEA,oBACA,4FACAA,+BACA,UACAulJ,eACA,sCACAn3M,yBACA,wDAIAg5V,qBACAA,QACAA,WACAjpsB,6CACAipsB,YACAjspB,OACAjkD,SACA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A,8BAAuCyR,qBAA8BuhrB,qCAA2CtpqB,8CAAqE87V,cACrL,6BACA,oBACA,+CACAlL,wBAIA,uFAEA,6BACA,yBASA,mBACA5wV,UACA,UACA,mBACA,6BACA,0BACA,sBACA,sCACA,SACA,qBACA,4DACAi9T,MAAqCzvT,gBAAcn8B,0BAA8B,yBAGjF,6CAGA,iBACA,mBACA,gBA5w0BA,cAGA,QAFAiF,KACA0pB,gCACA42gB,KAAkBA,cAClB52gB,sBACA,MACAA,MACAqyX,SACAxhB,sBACA,MACAA,MACA4oT,kBACA7oU,sBACA,MACAA,MACAkgB,kBACAkmK,QACAzvhB,SACAupX,SACMvpX,WACNyvhB,OAEA1giB,uDAEA,SAov0BA/gB,QACA,aACA,sBACA,wCACA,SACA,uBACAumY,4BAA+C,yBAG/C,6CAIA,iBACA,mBACA,aACA,aACA,SAGA,QAFA97V,KAEA6wW,IAAkBA,aAAgBA,+BAClC,yDACA,+BACA,0BACA,8CAaA,iBACA1vZ,IACAqyW,MACA,gBAEA,GADAxzT,eAAoBA,YAAiBA,iBACrC,iBAAyBA,gBAAmB,cAAiD,sBAAkBptC,MAC/G,QACA,aACAg+X,mCACAkL,+BACAA,mFAEA,+BACA,UACA,gCACA,UACA,qEACA,UACA,wDACA,uDACA,gEACA,kEACA,kEACA,kEACA,gBAr7fA,iBACA,wBACA,cACA,gBAGA,QAFAlL,kBACAyhC,0BACAvhB,SAAsBA,YAAYA,IAClC9wW,8BACA,iBAAwBg3gB,YAAYA,GACpCh3gB,yBAIA,IAHAA,wBACAqyX,KACAonS,uBACAziJ,SAAoBA,YAAYA,IAChC,WAAgC9kQ,aAChC0+E,qBACA,uBAIA5wV,+DACAA,kBAJAA,iBAIA,CAEAA,6BAEA,sBA45fA+jT,mCACA,kEACA,gCACA,oEACA,2CACA,+BACA,+BACA,kCAAwCoZ,kBACxC,+BACA,YACA,UACA,gCAjGA,iBACA,YAEA,UADA01M,QACA7ygB,GA8FsCg9T,UACtC,WACA,WACA,WACA,WACA,cACA,aA5IA,iBACA,gBAEA,UADAJ,QACA58T,GAyIA68T,cACA,2DA+C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","names":["constructor","a","c","this","getAdminStudentAttendance","u","http","post","e","getStudentAttendanceCodes","get","getAttendanceCheckInOutByDate","yearService","defaultYear","Id","SchoolID","saveCheckInOutHistoryAttachment","deleteCheckInOutRecordById","getSchoolDaysBetweenDates","p","l","M","saveAdminStudentAttendance","getAttendanceHistoryByStudentIdDate","D","v","I","b","C","w","R","T","saveStudentAttendanceHistory","saveAttendanceHistoryCheckInOutByStudentIdDate","saveMassAttendanceHistoryCheckInOutByStudentIdDate","getAttendanceSelfCheckInOutByStudentId","getCheckInOutHistoryAttachmentById","getAbsentNoticesByStudentIdAndYearId","getAbsentNoticeAttachmentById","processSubmissionRecord","getAttendanceCheckInOutHistoryByStudentId","getAllPeriodsByYear","getAttendanceStepRunHistoryBySiteYearId","runGroupStepRunUsingWorkFlow","SiteYearId","deleteAttendanceStepHistory","getAttendanceLetterTemplates","saveAttendanceLetterTemplate","getAttendanceStepHistoryDetails","getAttendanceStepHistoryDetailsByStudent","getAttendanceHistoryByStudentAndYear","getAttendanceChangeHistoryByStudentAndDate","getAttendancePeriodsByStudentIdAndDailyCalendarId","updateAttendanceStepHistoryById","deleteAttendanceStepHistoryByIds","deleteAttendanceHistoryByStudentIdAndDailyCalendarId","saveAttendanceLetters","getSpecialAttendanceByStudentsAndDates","massUpdateSpecialAttendance","deleteSpecialAttendance","getSpecialAttendanceBySiteSectionIdAndDate","getAttendanceExtraMeetingReadBySiteSectionId","getSpecialAttendanceClassesBySiteYearIdAndFilter","section","subjectCode","courseName","getSpecialAttendanceFilterOptionsBySiteYearId","getSpecialAttendanceCoursesBySiteYearId","getSpecialAttendanceCoursesByStudentIdAndSiteYearId","addSpecialAttendanceExtraMeeting","updateSpecialAttendanceExtraMeeting","deleteSpecialAttendanceExtraMeeting","i","f","factory","getAbsentNoticesByYearAndDate","saveAbsentNotice","getAbsentNoticeByStudentId","getDesignPageByIDs","customizationFrameworkService","saveDesignPage","saveDesignPageTemplate","toggleActiveDesignPageTemplate","saveCustomDataField","getCustomPages","getCustomPage","deleteCustomPage","saveCustomPage","customPageNameExists","getPagesWhereCustomFieldIsUsed","isCustomFieldDisplayNameExists","StateReportingChange","Se","Z","re","ngOnInit","viewOnly","dataDefList","LockSystemCodes","selectedDataDef","IsSysGen","showUseForStateReporting","ShowUsedForStateReporting","codeRequired","CodeNotRequired","StateReportingType","lookupService","getStateReportingCodes","subscribe","length","stateReportingCodes","StateIdentifier","cancelClick","dialog","close","saveClick","validate","errors","dataDef","find","Code","toUpperCase","push","fieldName","fieldRef","codeRef","errorMsg","Description","descriptionRef","pt","selectors","editClick","wt","he","Ie","addClick","subscriptions","addDataDef","saveSequenceClick","saveDataDefinition","Enum","ngOnChanges","DataDefList","getDataDefinition","ngAfterViewInit","dataSource","sort","ngOnDestroy","setColumnsToDisplay","dataDefinitionService","dataDefinitionListValues","data","o","LookupListId","Inactive","open","panelClass","disableClose","componentInstance","afterClosed","dataDefinitionLists","DataDefinitions","sharedService","showGoodSnackbar","showBadSnackbar","clearFilter","removeAllFilters","columnsToDisplay","ReadOnly","IsSortable","ShowCodeField","ShowDescriptionField","ShowAbbreviationField","ShowDefaultField","ShowStatusField","UserCanEdit","rowDrop","item","indexOf","currentIndex","forEach","Sequence","sequenceChanged","Ct","includeArrays","t","displayFields","fields","filter","DisplayOnForm","FormSequence","dataDefId","ColumnName","dynamicFieldForm","setControlValidations","addControl","value","disabled","Editable","minLengthErrorMessage","key","errorMessage","onChanges","valueChanges","Object","keys","controls","hasOwnProperty","minlength","requiredLength","getErrorMessage","getDataSource","dataDefBindings","Field","FieldName","Bindings","Required","MinLength","errorLinkClick","inputControls","nativeElement","name","focus","markAsTouched","allDataDef","toString","trim","DisplayName","clickCallback","Mi","deleteClick","Ee","TableName","columns","ue","saveDynamicDataDefinition","Zt","In","setTimeout","getColumnSettings","JSON","parse","MetaData","map","DataType","ControlType","G","te","We","st","MaxLength","tn","DisplayOnGrid","Rn","kt","GridSequence","qt","Tt","displayedColumns","unshift","getDynamicDataDefinition","LookupValuesJSON","LookupValues","LookupBindings","Array","assign","rn","dataDefCodeInUse","headerLabel","warning","informational","confirmMessage","headerCenterAlign","okButtonLabel","confirmEvent","deleteDynamicDataDefinition","intSequence","getFilterType","q","qe","selectedDataDefList","closeClick","dialogRef","ut","Cell","getDataDefinitionList","deleteDataDefinition","getDataDefinitionCategories","dataDefNameExists","saveDataDefinitionList","deleteDataDefinitionList","m","nextClick","n","L","s","ie","se","F","z","ve","V10","loginService","LoginSettings","markType","statusHistory","comment","Comment","eForm","hasFee","banner","infoLine","commentHeader","newStatus","emailNext","Status","ManualSubmission","saveStatus","saveButtonClick","sendEmail","eFormService","getEformContact","ID","Email","FirstName","LastName","sendEmailService","teacherName","teacherEmailAddress","sendEmailDialogRef","width","height","maxHeight","maxWidth","modal","TemplateType","StudentNames","substring","InstanceName","mailDetail","subject","SaveEformStatusHistory","saveEForm","A","notSubmitted","submitted","rejected","accepted","complete","manualSubmission","NextID","OverrideValue","NotificationGroup_ID","NotificationEvent_ID","NotificationType_ID","User_ID","NotificationEvent","GroupPermissions_ID","hasTypeOfEvent","NotificationGroupEvents","hasChanges","originalAllStaffGrantedAccess","AllStaffGrantedAccess","PermissionCategory","originalPermissionCategory","hasType","V","NotificationTypes","getAreaDisplay","findIndex","_","areaName","setNotificationChecking","ActivateNotificationFramework360","checkForInAppType","beginCheckingNotifications","stopCheckingNotifications","getMyNotifications","getMyNotificationGroups","getNotificationTypes","pipe","checkingNotifications","checkNotifications","TypeName","toLowerCase","showCustomSnackbar","Subject","Message","slice","checkInterval","setInterval","clearInterval","Name","MyNotificationGroupOverrides","getNotificationAreasAndEvents","NotificationEvents","getNotificationGroups","NotificationPermissionGroups","PermissionGroup","getMyNotificationLogs","AddedOn","Date","deleteNotificationGroup","saveNotificationGroups","saveNotificationEvents","saveMyNotifications","saveMyNotificationGroupOverrides","saveFamily","cancel","dialogBox","continueWithoutSaving","E","observableGuard","asObservable","observableSwitchTab","maintainFamilyDataPermission","securityService","IsAllPermissionCodeAssigned","viewReleaseAlertsPrivilege","createReleaseAlertsPrivilege","editDeleteReleaseAlertsPrivilege","freeReducedMealPermission","studentDocumentsPermission","addStudentPermission","viewStudentPortalInfoPermission","editStudentPortalInfoPermission","changeStudentIDPermission","idLessThanPermission","withdrawEnrollmentPermission","deleteHouseholdPermission","getRegistrationSettings","getRegistrationStudentMatchOptions","getRegistrationLookups","searchRegistration","getRegistrationFamily","saveFamilyRegistration","deleteRegistrationHousehold","getAdditionalAddresses","saveAdditionalAddress","getContactWorkInfo","getRegistrationDuplicateParentEmails","getRegistrationDuplicatePhoneNumbers","changeDuplicateRegistrationEmails","changeDuplicateRegistrationPhoneNumbers","getRegistrationPossibleDuplicateStudents","validateStudentIDs","saveQuickRegistration","saveContactWorkInfo","getAddressChangeLogs","getStudentReleaseAlerts","saveStudentReleaseAlerts","getStudentsLeaveWith","saveStudentsLeaveWith","familyRegistrationDetails","Family_ID","saveNonresidentContacts","saveAdditionalContact","saveHouseholdStudent","saveStudentPhoto","getRegistrationAddressByStreetNameOrID","getAddressBlocks","moveStudentsToFamily","markStudentsAsNew","reconcileEdFiStudent","setEmergencyContactCallOrder","sendNotificationEmailToParent","deleteRegistrationContact","swapHouseholdParents","getRegistrationEnrollments","splitStudentEnrollment","deleteStudentEnrollment","getRegistrationEnrollmentDetails","_e","getStudentCoursesByEnrollmentId","updateWithdrawnPastCourses","updatePastCourseDropped","saveRegistrationEnrollmentDetail","saveStudentExternalEnrollment","getEnrollWithdrawDefaultCodes","getStudentEnrollmentTotalFTE","getHouseholdFamilyDocuments","deleteHouseholdFamilyDocumentById","saveHouseholdFamilyDocument","getEnrollmentHomeroomTeacherCourses","updateStudentCourseAssignmentFromEnrollment","getHouseholdStudent","getEnrollmentCalendars","showWarning","unsavedChanges","next","validFamily","hasErrors","errorsExist","getProperMailingName","registrationLookups","PrefixData","PrimaryContacts","Prefix","id","AssessmentDataFields","AssessmentDataField","FullTitle","FULLTITLE","BestOf","BESTOF","DESCRIPTION","SEQUENCE","selectTab","Lt","Kt","displayTabs","tabs","selectedTabs","splice","createSubTableData","subTableData","minTableWidth","contains","mn","ct","includes","__proto__","St","editMode","instanceId","assessmentData","testMasterLayoutVersionId","selectedStudent","studentService","getAssessmentFields","V9UserPermissions","userPermissions","PermissionCode","userCanMarkScore","assessmentDate","assessmentService","getAssessmentFieldsReadByInstIdOrVersionId","assessmentFields","masterName","MasterName","versionName","VersionName","setAssessmentData","FieldData","setAssessmentFields","displayAssessmentFields","VersionId","FieldType","saveAssessment","printOnTranscript","ne","editAssessmentClick","deleteAssessmentClick","_sort","setSorting","fieldsColumns","showActionButton","triggerChanges","triggerChangeSubscription","changeDetector","markForCheck","userCanDelete","userCanProcess","unsubscribe","sortingDataAccessor","test","getTime","defaultSortingAccessor","start","disableClear","fieldTrackBy","TestInstanceId","parseInt","getAssessmentDataEvent","emit","Re","deleteAssessmentById","cn","addScores","getAssessemntData","rowClick","showActionMenu","headerColumns","toggleExpanded","detailOpened","selectedRow","stopPropagation","layoutVersionId","getAssessmentEvent","Q","changeDetection","selectionChange","getAssessemntTabs","addTab","gn","Fn","li","filtered","tableDataV9","selectionIndex","isFiltered","getAssessmentsAndTabs","getTestMastersLookup","selectedStudentStream$","observableStudent360YearStream$","previousTabSelection","selectedTabName","toggleAllRows","expandAll","testMasters","getTestMasterLayoutVersion","testMasterLayoutVersions","setLayoutVersion","testMasterLayoutVersion","TestMasterId","assessmentAndTabSubscriptions","spinnerService","showSpinner","tabNames","processingTabs","getStudentAssessmentTabs","getStudentAssessments","assessments","arrangeTabs","arrangeTabsV9","detectChanges","Display","category","testName","Pt","fullTitle","ge","TestMasterLayoutVersionId","strFieldName","AssessmentsDataRows","AssessmentData","strFieldData","Number","tabTrackBy","studentViewMode","router","url","He","getTeamsByStudentId","deleteTeamByStudentId","getTeamList","saveStudentToTeam","canActivate","UseTID","hasSignedIntoTylerId","authService","isLoggedInObs","myRoute","navigate","sessionStorage","getItem","auth","userId","userType","studentId","isLoggedIn","transform","Meets","startsWith","Term","CourseSection","Course","Instructor","Room","Enrolled","AttStatusNone","TodaysAttendance","AttStatusPartial","AttStatusAll","AttStatusPerfect","GradingNone","TodaysGrading","GradingPartial","GradingAll","RCGNone","GradePostedStatus","RCGAll","RCGEx","pure","observableMyClasses","observableselectedCourse","observableSelectedTerm","observableShowAllClasses","display","viewOptions","observableSelectedView","defaultYearSubscription","observableDefaultYearStream$","selectedCourse","_selectedCourse","unsavedChangesGuard","checkForDeactivation","checkForErrorsGuard","selectedCourseSummary","getCourseSummary","myClasses","_myClasses","selectedTerm","_selectedTerm","showAllClasses","_showAllClasses","selectedView","_selectedView","organizeClasses","SubjectCode","Section","CourseMenuText","TermToDate","TermFromDate","getMyClasses","previousArgs","termId","viewId","isTeacher","includeAllCourses","dateItem","yearId","school","observableMyClassesStream$","year","getUTCMonth","getDate","getUTCFullYear","mergeModalOpened","loadedYear","getClassesForSchoolAndYear","getClassesWithoutBroadcast","getGradebookAttendanceClasses","userService","currentUser","UserIsTeacher","getCourseProfileExistence","getClassroomTermsAndPreferences","terms","preferences","getClassroomPreferences","mergeGradingSections","mergeGradingSectionsV9","encodeURIComponent","unmergeGradingSections","unmergeGradingSectionsV9","mergeAttendanceSections","unmergeAttendanceSections","myClassesExportToExcel","SectionNickName","TermTo","TermFrom","getTeacherClassesByMergedId","getStudentCourses","getLastRefresh","modelAge","Math","round","timeStamp","clearRefreshTimer","setTimer58","setMinutes","getMinutes","editCourseInfo","getMergeSubjectSectionData","updateSectionNickName","CourseName","we","et","observableStaffAssignedPortals","observableSchoolPolicy","mt","ae","UserType","getStaffAssignedPortals","Me","updateStaffAssignedPortals","J","updateSelectedStudent","previousSelectedStudent","previousYear","selectedStudentSubscription","schoolPolicy","_schoolPolicy","staffAssignedPortals","previousPortalArgs","siteId","getUserSchoolYearPolicies","GroupName","split","IsFavorite","GroupNameFavorite","ShowAsTile","userPreferencesService","favoritesPreferences","FavoritePortals","PortalName","PortalModule","ParentModule","Selected","prototype","call","localeCompare","getOnlinePaymentConfiguration","getStudentsForAttendance","getStudentsForAttendanceForDate","getStudentPeriodicAttendanceDetail","updateStudentAttendance","massUpdateStudentAttendanceByClass","PortalDescription","IsAnyPermissionAssigned","S360CourseRequestPages","S360SchedulingCourseRequests","S360ClassSchedulingPages","S360SchedulingClassScheduling","S360StudentSchedulingPages","S360SchedulingStudentScheduling","Url","navigateByUrl","getNewStudentList","getSiteList","getGradingCyclesBySiteYearId","updateGradingCycle","createNewGradeCycle","getClassPostingStatus","getStudentsWithoutTermRecords","saveTermGradesForStudentsWithoutTerm","getGradeCycleGradesByGradeCycleId","getClassPostingGrades","saveClassPostingGrades","getGradingCycleStudentGrades","getValidGradesBySiteYear","enableMassUpdate","dataQueryService","observablePreferencesStream$","observableCurrentQueryStream$","currentQuery","ambiguous","reportFields","checkDisabledField","field","checkEditableField","nt","It","removedFields","continue","on","Ze","Yt","shownFields","filterFields","expandOrCollapseAll","cachedInformation","getInformation","setTableData","observableInformationStream$","information","observableSelectedCoreFileStream$","simpleMode","selectedCoreFile","observableWizardOpenStream$","filterFieldTableData","virtualizedTable","virtualizedDropList","dividerClick","lastDragPosition","Be","dragging","dividerMove","diffX","x","dividerStop","tableData","showChildren","children","fieldDrop","container","previousContainer","Dn","vt","isEqual","Filters","pn","sortFields","getAllFields","CategoryID","CategoryName","getClusters","Ke","rt","Cn","size","queryChanged","SortOrder","addFieldToList","applySearch","fieldSearch","fieldList","setFont","setFontType","top","bottom","left","right","internal","pageSize","getWidth","getHeight","Hn","ai","max","Mn","gi","ur","sn","setFontSize","text","align","addPage","Pe","Le","j","Ye","splitTextToSize","updateShowSpinner","visibleObjects","ObjectName","categories","de","fe","Visible","output","window","URL","createObjectURL","addFieldToQuery","DisplayRestrictedCategories","virtualizedTableData","currentNestedData","click","identifier","lastFieldClicked","lastFieldClickTime","now","disabledFields","validCategories","getCategoriesByCoreFile","getLargestClusterOfQuery","getRelationship","hasRelationship","shownFieldTableData","gt","screenX","y","screenY","updateFilter","openGroupMsgClick","menuItemClick","filters","_filters","hidden","forStudentSearch","forCourseSearch","forStaffSearch","validationTrigger","itemName","FilterID","queryFilterFields","je","Value2","xt","siteSectionId","Je","Dt","delete","filtersChange","disableOptions","IsStudentFilter","IsCourseFilter","disableEdit","setCurrentDate1","dateValue","setCurrentDate2","dateValue2","getStudentDropdownValue","decodeURI","isStudentSearch","UseFilterForStudentSearch","UseFilterForCourseSearch","UseFilterForStaffSearch","isCourseSearch","isStaffSearch","Alias","UseCurrentDate1","UseCurrentDate2","_currentQuery","checkDeactivationAndChange","overwriteOptionString","QueryName","menuName","forFilters","menuNamePlural","checkPermissions","menuClick","currentlyActiveStudentsOnly","openAddEditQuery","saveQuery","StudentSearch","CourseSearch","StaffSearch","SavedFromID","OwnerID","Scope","SelectedSites","Deleted","defaultQuery","recentQueriesInContext","recentQueries","menuItems","EnableDataQueryAddSimpleMode","disabledQueryOptions","getPermissions","permissions","canUserCreatePrivateQuery","canUserCreateSchoolQuery","canUserCreateDistrictQuery","checkUserCanOverwriteQuery","callByEform","filterColumnSql","filterColumnFieldName","allowTab","fieldSelect","keydown","filterColumnSQL","objects","quickStartChange","filterOptionChange","quickStartValues","quickStarts","quickStartLabels","quickStartIds","selectedCoreFileFilterOptionId","selectedCoreFileId","getQuickStarts","getCoreFileFilters","coreFileFilters","observableSelectedQuickStartStream$","selectedQuickStartId","getCoreFiles","coreFiles","coreFileChange","queryExists","showQueryChangeWarning","selectCoreFile","CoreFileId","FilterOptions","Default","selectQuickStart","selectedQuickStart","getObjectFromXML","QueryXML","selectFilterOption","coreFileFilterId","CoreFileFilterId","isDynamicCancelLable","okButtonImage","previousStep","nextStep","queryStepCompleted","fieldStepCompleted","wizardOpen","getSavedQueries","savedQueries","stepper","steps","select","currentStep","validateTab","stepChanged","selectedIndex","OwnerName","MiddleName","observableWizardOpen","queryInfoTab","coreFileField","validateQuery","super","error","source","oe","le","X","PageNumber","Content","overwrite","warningMessage","allowOverwrite","query","existingQueryId","loadQuery","queryClick","ze","Ue","paginator","legacyQueries","years","SchoolCode","at","takeOwnershipClick","setFile","importQuerySelect","selectedSitesClick","headerText","forEdit","forImport","scopeObject","scopeDisabledOptions","originalQuery","import","importOption","DOMParser","parseFromString","getElementsByTagName","innerHTML","Bt","ExportType","Delimiter","OtherDelimiter","IncludeColumnHeadings","importing","importQueryClick","loadDataFromXML","queryChangedSinceLastResult","nameInput","currentTab","importQueryFromLegacy","canUserModifySchoolQuery","canUserModifyDistrictQuery","save","xmlLoaded","getReportTemplateXML","getLegacyQueries","templateName","isNaN","selectedSites","join","SelectedSiteNames","SchoolName","fileName","addFileComponent","browseButton","fileType","deleteButton","templateSelectButton","selectedSitesLink","viewScopeChange","getSyntax","FunctionId","Position","getDescription","Ln","RegExp","replace","_tableData","Categories","PermissionName","PrivilegeId","canUserTakeOwnershipOfQuery","canUserQueryAllYears","canUserViewSQL","canPublishToIntegration","fieldId","categoryId","saveAsNew","userCanOverwrite","unjoinedCategoryGroups","ok","Jt","Yn","en","En","bn","_maximized","observableMaximized","observableCurrentQuery","_information","observableInformation","_preferences","observablePreferences","observableResults","observableNextPageResults","observableCurrentTab","observableSaveResult","observableSelectedCoreFile","observableSelectedQuickStart","events","un","urlAfterRedirects","cancelQuery","currentResultSubscriptions","closed","queryLoadingTimeout","clearTimeout","dataQueryPreferenceChange","cachedPreferences","getPreferences","_isStudentSearch","_isCourseSearch","_isStaffSearch","studentFilters","_studentFilters","courseFilters","_courseFilters","staffFilters","_staffFilters","_savedQueries","savedQueriesInContext","recentStudentFilters","recentStaffFilters","recentCourseFilters","_originalStudentSearchQuery","_originalDataQueryQuery","_currentStudentSearchQuery","_currentDataQueryQuery","organized","maximized","results","_results","_currentTab","_previousTab","initialPageSize","_selectedCoreFile","_selectedQuickStart","_wizardOpen","isInformationCached","schools","getRecentQueries","getObjects","getCategories","getFields","disorganize","organize","getUserCategories","userCategories","getDefaultQuery","getOperators","getRelationships","relationships","getUserPreferences","dataQueryPreferences","getFunctions","functions","operators","getParameters","parameters","object","TransformationFields","postRequest","Category1ID","Category2ID","log","console","getQueryXML","getReportTemplateXMLData","savedQueryModified","Wn","jt","deleteQuery","updateRecentQueries","getFilterOptions","getFilterOptionsByField","validateTransformationFunctions","getPreviewResults","PreviewData","getResults","isHasEdited","nextPageSubscriptions","wn","transFunctionChanged","resetResultProperties","pageCount","ceil","recordCount","blankAlias","An","pi","Xi","duplicateAlias","toLocaleString","secondMessage","yr","Br","sqlErrors","Errors","SQLScript","QueryString","disabledFieldInReport","Data","Wr","Columns","ti","Ae","Fe","fixDataTypes","floor","getRemainingPages","resetPageIndex","saveDataQueryResult","parseFloat","assertOrder","getResultsAsString","getResultPDF","stringify","Template","categoriesByCoreFile","getCategoriesByRelatedCategory","getFieldsByRelatedCategory","FunctionText","blocking","loadingQuery","childNodes","distinct","nodeValue","currentYearOnly","currentSchoolOnly","Nt","At","Qt","_i","nodeName","outerHTML","getField","ObjectID","IsCalculated","TransformationFunction","document","createElement","setAttribute","transFunctionInterpreter","match","position","sql","Oi","hr","aa","ar","$n","ui","Ai","Vr","Lr","xa","ua","ViewName","warn","getTransFunctionText","transFunctionParser","transFunction","ShowOnReport","IsDuplicate","xn","bi","oi","filterFieldId","Operator","Value","Group","StudentFilterId","CourseFilterId","ApplyToAll","CodeDescription","FilterType","toLocaleDateString","Category1Name","Category2Name","Type","SwapPrimaryObject","Object1Name","Object2Name","Visiable","Field1ID","Field2ID","end","argEndIndexes","documentFragment","createRange","createContextualFragment","endIndex","firstChild","nodes","appendChild","NaN","from","attributes","getNamedItem","getAttribute","FunctionError","FormulasTested","addFunctionError","transFunctionKeydown","target","selectionStart","selectionEnd","preventDefault","insertTransField","isCursorOnField","lastIndexOf","transFunctionClicked","IsTransErrorOpen","SortDirection","Break","IsConstant","ConstantValue","IsDefaultFilterField","EnableDataQueryPermissionMetadata","Permission","ViewPermissionsFromMetadata","editableFields","UpdatePermissionsFromMetadata","filterTranslation","IsDefaultStudentSearchFilter","showFilterError1","showFilterError2","isValidDate","isValid","splitFunctionString","addRosterFilter","charCodeAt","generalPreferences","SelectedClassesOptionText","String","fromCharCode","DisplayMenu","setShowOnReportParameters","multiselect","getFilterOperators","queryResultTable","currentPage","retrievedData","reorderResults","reorder","exportResults","validateSyntax","btoa","unescape","checkDefaultFilterFields","duplicate","getStudentSearchSchoolByYearId","SchoolId","validateFilters","validateFunctions","ReturnType","testFormulas","checkRelationships","message","openDialogs","OK","sendSearch","search","searchString","autofills","getAutofills","previousSearchString","getAutofillOptions","Fields","studentFilter","courseFilterFieldName","courseFilter","_field","numericType","_dateValue","setValueFromDate","_dateValue2","displayOperators","getMonth","getFullYear","useCodeDescription","nestedName","_functionErrors","_object","_category","addField","addRelationship","organizeObjects","organizeCategories","organizeFilters","initialized","isUserCategory","UserDefinedTabId","getVisible","visibleInformation","style","background","SQLColumnName","ShowUnrelatedCategories","ariaLabel","displayString","applyString","getLargestCluster","concat","ColumnHeaders","allFields","_queryChanged","selectQuery","queries","expandEmitter","parseXMLText","XMLSerializer","serializeToString","body","createEvent","initEvent","dispatchEvent","removeChild","querySearch","canEditAndDeleteQuery","hasDetailRow","getMenuItems","decls","InvolvementType","InvolvementTypes","statusString","StatusCodes","studentsFilterString","Students","formattedNameWithNumber","studentsNumberFilterString","formattedNumber","studentsGradeFilterString","Grade","processing","Site","sortStudents","NonStudent","UnknownStudent","P","S","N","deleteClassroomDisciplineReferral","getClassroomDisciplineReferralNotes","saveClassroomDisciplingReferralNotes","getDisciplineReferralCourses","saveCategories","deleteAttachment","clearLMSToken","getLMSIntegrationLog","observe","getGradebookIndicators","saveGradebookIndicator","deleteGradebookIndicator","setCommentSmartTags","NickName","GradeLevel","StudentNumber","Gender","observableisProgressCycleChecked","observableGradebookPreferences","observableGradebookTabChange","observableGradebookSettings","observableLookups","observableAssignments","observableAssignmentsSequence","observableGradebookStudents","observableGradebookScoresTab","observableGradebookStandardsTab","observableGradebookIndicator","observableGradebookSGIndicator","observableUserPermission","observableGradebookNonScoredStandards","observableGradebookSpecialMarks","observableGradebookMismatchScores","observableGradebookAssignmentSaveAndNew","observableGradebookRecalculateStandardTotalPoints","observableGradebookToolsMenu","schoolId","siteYearId","selectedTab","selectedStandardTab","selectedReportingTab","selectedReportingStandardTab","selectedAnalysisTab","isProgressCycleChecked","_isProgressCycleChecked","clearAllData","gradebookSettings","showAssignment","showTrends","units","indicators","specialMarks","gradebookStudents","gradebookStudentAlerts","undoStudentMarks","redoStudentMarks","gradebookMismatchScores","gradebookCurriculumStandards","curriculumMarkTypes","validCurriculumMarkTypes","studentDetailCallFromModel","analysisTerm","allAssignments","assignmentFormula","gradebookV9CategoryPointsSummary","clearCourseData","assignments","clearScoreData","scoresAssignments","scoresStudentMarks","assignmentsToStandards","standards","standardsStudentMarks","updateGradebookV9GradebookScoresTab","updateGradebookV9GradebookStandardsTab","updateGradebookTabChange","padZero","getEffectiveScore","ScorePercentValue","EffectiveScoreValue","GradeBookSpecialMarkCodeId","GradeBookSpecialMarkCode","GradeBookSpecialMarkDescription","Operation","ScorePointValue","BasePoints","toFixed","countDecimals","setIndicators","GradeBookStudentMarkId","UseObjectivesForPoints","InvalidMark","ScoreBackgroundColor","ScoreForeColor","SystemGrade","AssignmentIndicator","showIndicators","AssignmentId","GradeBookAssignmentId","SystemGradeFinal","CategoryId","GradeBookAssignmentTypeId","FromRange","ToRange","BackgroundColor","ForegroundColor","ColorCode","updateGradebookPreferences","gradebookPreferences","DefaultForStandardsView","NonScrollingColumns","ScrollingColumns","updateUserPermission","saveGradebookSelectionPreferences","gradebookV9SelectionPreferences","saveUserPreferences","saveGradebookAnalysisSettings","gradebookV9AnalysisSettings","getGradebookV9Settings","course","updateGradebookV9Settings","gradebookRecalculateAssignments","getGradebookV9Terms","getGradebookV9Categories","getGradebookV9CategorySequence","saveGradebookV9Categories","getGradebookV9Units","getGradebookV9SpecialMarks","updateGradebookV9Lookups","updateGradebookV9SpecialMarks","saveStudentSpecialGradeScale","getGradebookV9Assignments","updateGradebookV9Assignments","getGradebookV9AssignmentHomework","getGradebookV9Attachments","getGradebookV9CurriculumStandards","SubjectId","saveGradebookV9Assignments","saveGradebookV9AssignmentShowOnPortal","deleteGradebookV9Assignment","getGradebookV9Formula","saveGradebookV9Formula","getGradebookV9Student","updateGradebookV9GradebookStudents","getGradebookV9ScoresAssignments","selectedCategory","selectedUnit","getGradebookV9ScoresStudentMarks","saveGradebookV9ScoresStudentMarks","saveGradebookV9StudentScoreComment","getGradebookV9StudentMarksByStudentId","getGradebookV9AssignmentsToStandards","getGradebookV9Standards","getGradebookV9StandardsStudentMarks","saveGradebookV9StandardsStudentMarks","getGradebookV9StandardExportBase64","selectedStandardStudentId","selectedStandardAssignmentId","selectedStandardId","StandardAnalysisType","getGradebookV9RCGExportBase64","RCGStandardByStudentId","RCGStandardByStudentTermId","RCGStudentByStandardId","RCGStudentByStandardTermId","getGradebookV9ExportBase64","saveGradebookV9CopyAssignments","getGradebookV9BackupSets","createGradebookV9Backup","restoreGradebookV9Backup","deleteGradebookV9BackupSet","gradebookV9FormulaCopy","getGradebookV9SystemGradeAssignments","gradebookV9ResetFormulas","importObjMarksFromGradebookToStudentCurriculumMarks","CurrentGradeCycleId","saveGradebookV9SpecialMarks","saveGradebookV9Units","deleteGradebookV9Unit","saveGradebookV9StudentSequence","getGradebookV9CategoryPointsSummary","getGradebookV9MismatchScores","updateGradebookV9MismatchScores","gradebookV9CalculateGPA","getSiteSectionByStudentId","getGradeBookAssignmentByStudentId","gradeBookStudentMarksCopy","getReportCardGradesData","getTermGradeListCommentLookup","saveReportCardGrades","getBehaviorSkillRecordForAllTermGradeCycles","getCurriculumnMarksandStandards","getCurriculumMarkTypesReadForSubject","getCurriculumStudentsMarks","getBehaviorSkillRecord","getReportcardViewComments","getGradingPeriodComments","saveGradingPeriodComment","saveBehaviorSkillGrades","saveCurriculumMarks","getGradebookAssignmentLinkedByObjectives","getGradebookAssignmentLinkedObjectivesByObjectiveId","getValidGradeTemplates","getValidGradeTemplatesBySiteYear","finalizeGrades","importGradesFromExternalGradebook","TeacherCanImportObjectiveScores","sharedGradeBookService","saveGradebookV9CopyIndicator","getGradebookV9AnalysisStudentsAttendance","exportBase64ToFile","atob","Uint8Array","Blob","type","href","visibility","download","showAllCoursesClick","selectCourse","allSelected","filteredData","selectedCourses","classroomSummaryService","userIsTeacher","showAllCourses","filterData","observableSelectedTermStream$","observableSelectedViewStream$","classes","classroom360Service","gradebookPortalSelected","disableView","setupCourses","attendancePortalSelected","courseInfoPortalSelected","observableShowAllClassesStream$","setTeacherAdminMode","userHasAdminAccessGetAllClasses","IsAnyPermissionCodeAssigned","getAllCourses","SSEC_ID","HasProfile","CourseHasProfile","UsedForGrading","AttendanceRequired","classSourceFilters","filterClass","filterChange","setSelectedTerm","getClasses","setSelectedView","currentPortal","GradeScaleExists","GradebookAccess","gradebookV9Service","SelectedMainTab","nonScoreStandard","ShowNonScoredStandards","teacherAndAdmin","TeacherAdminShowAllCourses","teacherShowAllCourses","addLinkForm","linkName","linkUrl","nameErrorMessage","invalid","LinkToolTip","OpenAsHTTPS","usingHttps","OpenAsNewWindow","QuickJumpDescription","WebAddress","saveLink","getUserLinks","AYIdentifier","getParentStudentLinks","LinkName","Link_ID","LinkUrl","IsDistrictLevel","links","getLinks","parentAllCheckBoxChange","parentCheckBoxChange","childCheckBoxChange","isMyReportPage","folderName","reportFolder","FolderName","assignedReportFolder","getMyV9Reports","reportingService","getV9Reports","inDebugMode","ReportsList","ReportName","reports","reportModules","ParentId","ReportsInFolder","ReportId","IsSelected","AssignedReportsInFolder","reportsTableData","isReportsRowsExpanded","detailRow","parentAllCheckBox","checkRowIndeterminate","checkIndeterminate","reportingFrameworkService","saveReportsInFolder","saveAssignedReportsInFolder","saveAndNewClick","myReportFolder","errorLists","folderNameRef","saveAndNew","saveReportFolder","saveMyReportFolder","allCheckBoxChange","reportFolders","report","foldersTableData","allCheckBox","addReportInFolders","editFolder","manageReports","deleteFolder","reportClick","folderforthisReportClick","deleteReportClick","rowKeyPress","tylerMatData","myReportsFolders","dialogTitle","myReportFolderSaveEvent","deleteMyReportFolder","manualEntryRostersDialogRef","manualEntryRostersDialog","Report","minWidth","minHeight","ReportTitle","classListAllDialogRef","classListAllDialog","classListAllAttendanceNotMarkedDialogRef","classListAllAttendanceNotMarkedDialog","teacherSummaryPreviewDialogRef","teacherSummaryPreviewDialog","ke","attendanceHistoryByClassDialogRef","attendanceHistoryByClassDialog","gradebookAssignmentsByStandardDialogRef","gradebookAssignmentsByStandardDialog","xe","Ge","selectedReport","deleteReportInFolder","ReportFolderId","isExpandAll","checkExpanded","assignedReportFolders","getTabsData","addFolderClick","openQueueList","getMyReportsPreferences","userPreferenceService","myReportsPreferences","getMyReportsFolders","getAssignedReportFolders","tabIndex","DefaultTab","allReportsClick","reportsDialogRef","closeAll","saveAssignedReportFolder","deleteAssignReportFolder","deleteAssignReportInFolder","savePermissionGroupsInFolder","checkDefaultLandingPage","getAbsencesByCourseCard","getRecentBehaviorCard","getStaffTeamsCard","getSchoolsTodayCard","getProgramEnrollmentCard","getStaffWorkCard","getEFormSurveysForStaffCard","getUpcomingBirthdaysCard","getRecentlyUpdatedGBGradesCard","getImmunizationComplianceCard","deleteStudent","changeStudents","viewMode","addMode","staff","ownerNotInStaff","StaffId","staffId","studentList","Owner","OwnerFirstName","OwnerMiddleName","OwnerLastName","injectedStudents","students","disableStudents","initialOwnerId","allowCreateDistrictLists","allowCreateSchoolLists","admin","getStaffIdByUserId","staffSearchService","getStaffSearch","loginYear","studentEmitter","getStudentListScopes","scopes","getStudentListTypes","types","originalList","initialStudents","studentListsService","getStudentList","SchoolIds","Access","formattedName","saveStudentList","searchEmitter","performRoute","returnSelectedStudents","searchAndSelect","selectedStudents","creatingStudentList","selectStaff","getHint","getDisabled","form","nameField","descriptionField","getElementById","getStudentLists","deleteStudentList","getStudentListSchoolIds","viewStudents","note","addNote","multiAdd","multiStudents","studentNoteService","getStudentNotesCategories","StartDate","EndDate","originalNote","notePaste","StudentID","Nickname","addStudentNotes","addStudentNote","updateStudentNotes","LastUpOn","format","LastUpBy","userSerivce","SNCID","categoryField","Note","noteField","Order","orderField","statusField","startDateField","junkDateString","displayBoldString","DisplayBold","classroomNoteString","ClassroomNote","clearJunkDates","junkDate","deleteStudentNote","previousUrl","studentChange","viewStudent","cellClick","headerFilterChanged","massAdd","studentSearchFilter","clearStudentSearchFilter","cancelFilter","more","actions","student","status","order","studentNumber","_paginator","filteringStudents","filtering","startDateFrom","startDateTo","endDateFrom","endDateTo","applyFilterStudents","v10","loading","numberMask","ShowStudentNumber","removeElement","route","queryParamMap","studentPortal","previousStudentFilters","selectedStudentInfoPortal","arrangeTableData","getStudentNotes","toggleExpandRows","observablegeneralPreferencesStream$","resize","checkErrors","formRef","pristine","studentNotesService","displayedStudentNotes","markAsPristine","showFilterClick","showFilter","clearFilterFromFooter","previousFilter","viewSchools","useLastSelectedSchool","updateStudents","acceptLabel","addEditSchools","userCanEditNotes","endDateField","displayAsBoldCheckbox","classroomNoteCheckbox","columnWidths","studentNotes","cacheExpanded","assertCachedExpanded","clickHandler","row","editNote","deleteNote","getStudent","Picture","StudentInfoDialog","initMenu","getUserPermissionByPrivilegeIds","allDistrictSchools","SiteId","getUserPermissions","column","removeFilter","operator","addFilter","continuedWithoutSave","$t","getStudentNoteCategories","observableBehaviorEvent","observableBehaviorAttachement","observableMassMarkedServed","observableIntervention","observableInterventionAttachmentRefresh","observableAssociateInterventionPopup","observableBehaviorLetterCurrentStep","_filterParam","_filterParamIntervention","behaviorEvent","_behaviorEvent","locations","behaviorSharedService","incidentCodes","contextCodes","reportedByCodes","filterParam","behaviorIntervention","_behaviorIntervention","filterParamIntervention","filterChangeIntervention","behaviorLetterCurrentStep","_behaviorLetterCurrentStep","showActiveLookups","isArray","DelStatus","eventDateFrom","eventDateTo","actionDateFrom","actionDateTo","incidentCode","actionCode","reportedToState","onlyShowSuspensions","offender","victim","location","incidentApproveAction","isFilteredIntervention","nextMeetingDateFrom","nextMeetingDateTo","interventionist","refferedBy","refferedByOther","notes","selectedReasons","enteredBy","getBehaviorEventCount","getBehaviorEvents","getInterventionLookups","getBehaviorIncidents","getEventAttachments","getIncidentAttachments","getIncidentsByEvent","getBehaviorActions","getBehaviorActionCodes","saveAttachment","disciplineAttendanceBulkInsertModify","disciplineTeamAttendanceBulkInsertModify","saveBehaviorAction","getMaxFileSize","getStudentCalendar","isOverlapActionDates","isDisciplineCodeDetSusExpType","isDisciplineCodeSuspensionType","getEndDateFromStartAndDuration","getDurationFromStartAndEndDate","getReferralsByEventId","getAttendanceCodeLookup","getStudentScheduleforSuspensionAttendance","getStudentTeamSchedulebyDate","createNonStudent","deletNonStudent","getBehaviorPolicies","getBehaviorDaysServed","getBehaviorInterventions","saveBehaviorIntervention","getBehaviorLetterTemplates","saveBehaviorLetterTemplate","getBehaviorLetters","saveBehaviorLetters","deleteBehaviorLetters","saveInterventionMeeting","saveInterventionAttachment","saveContract","saveAssociateIntervention","getAssociateInterventions","saveAssociateEvent","saveCommunicaitonLogIntervention","Reason","InformOthers","saveBehaviorIncident","getIncidentDescription","generateNewIncident","min","apply","Incidents","EventId","AlcoholRelated","DefaultAlcoholRelated","DrugRelated","DefaultDrugRelated","GangRelated","DefaultGangRelated","HateCrimeRelated","DefaultHateRelated","WeaponRelated","DefaultWeaponRelated","IncidentCode","DefaultIncidentCodeId","ReportedToPolice","DefaultReportedToPolice","DisciplineIncidentSubCodesId","DisciplineIncidentSubCodeId","AddedBy","DCID","refreshAttachmentGrid","attachmentsComponent","refreshGrid","uniqueStudents","behaviorUniqueStudents","disciplineReferralIncidentLookup","saveBehaviorEvent","getDisciplineLocations","getDisciplineReferralPlacesLookup","getDisciplineReferralLookups","getInterventionById","NextMeetingDate","getCellClass","nextMValue","isBefore","refresInterventionAttachmentGrid","openAssociateInterventionPopup","generateMailingAddresses","reportService","runManualReport","runReportByType","revokeObjectURL","generateV9MailingAddresses","generateLetter","param","studentIds","householdParents","nonresidentParents","ParamName","ParamStringValue","onlyIfRequested","DocumentId","DocumentName","DocumentBase64","DocumentMimeType","DocumentModuleName","ReportParameters","ReportType","localStorage","setItem","observableBehaviorLetterCurrentStepStream$","getEmailAddressessByStudentIds","saveMassMarkSarved","getIncidentActionsForServedStatus","saveSarvedStatus","kendoSelectable","InUse","schoolDisplay","observableRequestsChanged","observableStudentSummaryRequestsChanged","requestsChanged","_requestsChanged","studentSummaryRequestsChanged","_studentSummaryRequestsChanged","isTabSelected","schoolCRM_selectedTab","isDistrictTabSelected","districtCRM_selectedTab","getDistrictGradeLevelCredits","updateDistrictGradeLevelCredits","getCourseRequestGetDistrictGradeLevelRequirementsBySchool","getCourseRequestGetDistrictGradeLevelRequirementsByYear","getSchoolsForRequirementAssignment","assignSchoolToRequirements","deleteDistrictGradeLevelRequirement","getCoursesForDistrictRequirement","getSchoolCourseRequests","deleteSchoolCourseRequests","approveSchoolCourseRequests","updateSchoolCourseRequests","updateDistrictGradeLevelRequirement","getSchoolGradeLevelCreditsOverview","GetSchoolGradeLevelCreditsForAddEdit","UpdateSchoolGradeLevelCredits","GetSchoolGradeLevelRequirements","UpdateSchoolGradeLevelRequirement","GetRequestTallyCourses","scheduleFolderService","selectedScheduleFolder","getRequestConflicts","getSchoolStaff","getSchoolTerms","getCourseRequestStudentSummary","AddRemoveCourseRequestInMass","RebuildRequestConflicts","OverrideConflicts","checkStudentScheduleBatch","createStudentScheduleBatch","getStudentScheduleBatchData","performStudentScheduling","processStudentScheduleBatch","stopStudentScheduleBatch","saveStudentScheduleBatch","rejectStudentScheduleBatch","getNumberMask","guide","mask","prefix","includeThousandsSeparator","integerLimit","allowDecimal","decimalLimit","creditsDecimalPlaces","getCreditFormatPipString","clearStudentSchedule","massAddRequiredCourseRequests","getSchoolsForRemoveGradeLevelRequirements","removeGradeLevelRequirementsForSchools","typeName","IsDefault","nameAndStatus","ScheduleFoldersName","observableSchoolSchedulingFolders","observableDistrictScheduleFolder","observableSelectedScheduleFolder","schoolSchedulingFolders","_schoolSchedulingFolders","districtScheduleFolder","_districtScheduleFolder","_selectedScheduleFolder","maintainSchoolFolders","yearSubscription","resetScheduleFolders","getDistrictScheduleFolder","getScheduleFolders","getScheduleFolderDetails","addEditScheduleFolder","copyScheduleFolder","activateScheduleFolder","deactivateScheduleFolder","deleteScheduleFolder","rolloverScheduleFolder","isClassicFolderActive","periods","dayType","term","greyedOut","PeriodName","DayName","DayTypeName","ShortDescription","SlotName","Displays","Period","Day","ClassName","scheduledSection","StudentsInSlot","StudentsAssignedToSection","SeatsInSlot","MaxSeatsOfSection","TeacherNames","teacherNames","RoomName","ClassRoomName","MeetingPatternName","TermName","Start","End","SubjectArea","Department","CreditCode","SectionLinks","CourseLinks","courseSection","CourseLinkConcatenated","SectionLinkConcatenated","teacherDisplayString","WithdrawalCode","setScheduleSection","getCourseSection","getTeachersDisplayString","initialize","studentLoginSettings","userDefinedFieldsForOnlineReg","portalDataAreas","portalGeneralSettings","portalFamilyDataFields","getStudentLoginSettings","saveStudentLoginSettings","getUserDefinedFieldsForOnlineReg","saveUserDefinedFieldsForOnlineReg","getParentPortalLinks","deleteParentPortalLinks","getPortalDataAreas","savePortalDataAreas","getPortalDataAreasSchoolStatus","getParentStudentPortalDataAreas","getSchoolOverrideDistrictPortalDataAreas","saveParentStudentPortalDataAreas","deleteParentStudentPortalDataAreas","getPortalEmailNotification","savePortalEmailNotification","getPortalGeneralSettings","savePortalGeneralSettings","getImageData","saveParentPortalLink","getPortalFamilyDataFields","savePortalFamilyDataFields","getPortalDataAreasBlocked","savePortalDataAreasBlocked","getAssociatedStudents","programAndServices","title","programsAndServicesService","deleteProgramService","massDeleteProgramService","getProgramsAndServices","getServiceDetailByServiceCodeId","saveProgramAndService","EntryDate","ExitDate","getProgramsAndServiceForMassUpdate","massAddProgramAndService","massEditProgramAndService","getInvalidStudentForSelectedProgramAndServiceCode","importStudentProgramAndServices","headers","YearId","File","FileName","MatchIdOption","ProgramServiceOverrideSetting","ProgramServerOverrideOption","getProgramServiceCodesByUserId","invalidStudent","prepareMessage","back","fieldLengthString","FieldLength","getLength","attachmentClick","editAttachmentClick","deleteAttachmentClick","onProgramCodeChange","onServiceCodeChange","backClick","addAttachmentClick","MyFileBase64String","AttachmentFileName","FileType","AttachmentId","addProgram","programCodes","programAndService","showSteps","header","IsInActive","ProgramCodeId","massEditProgramAndServices","Attachments","originalProgram","filterPredicate","UserHasEditPermission","selectedProgramCode","confirmback","serviceCodes","selectedServiceCodeId","programService","programcode","serviceCode","ps","ServiceCodeId","ProgramServices","getServiceFieldByServiceCodeId","ProgramAndServicesDetail","FieldId","FieldValue","FieldValueId","ProgramServiceField","setCurrent","toDate","FileExtension","OriginalFileName","AttachmentAddedOn","AttachmentDescription","attachment","newAttachment","saved","AttachmentFileMimeType","AttachmentAddedBy","DocumentTypeId","editAttachment","FieldLookupValues","FieldDecimal","programCodeField","serviceCodeField","entryDateField","viewAttachment","editProgram","deleteProgram","applyFilter","closeFilter","shown","selectedProgramName","selectedServiceName","programName","serviceName","observableSelectedProgramAndServiceStream","resizeGrid","openFilter","clearFilterFromNotice","entryDateStart","entryDateEnd","exitDateStart","exitDateEnd","expanded","studentEnrollment","student360Year","showInactiveProgram","programsAndServices","UserHasDeletePermission","originalProgramsAndServices","hasDetails","Comments","onThisDate","ProgramName","userCanEditPrograms","isProgramRowsExpanded","ServiceName","getInactiveChkStyle","regEnrollMode","programAndServiceDetailAttachmentsAriaLabel","toDateString","regEnrollHeight","innerHeight","onResize","getPermissionGroupDescription","getAllUsersAssignedToPermissionsGroups","isPermissionsGroupExists","copyPermissionsGroup","copyPermissions","deletePermissionsGroup","getPermissionsList","savePermissionsGroup","getWhoHasPermissions","saveUserPermissionsGroups","getPermissionsGroupsAssignedToStaffUser","getReportsForPermissionGroup","saveReportsPermissionGroups","copyReportSettings","getHomePageCardsPermissionGroup","saveHomePageCardsPermission","copyHomePageCardSettings","getUserPermissionsHomePageCards","getGlobalSearchCategoriesForPermissionGroup","saveGlobalSearchCategoriesForPermissionGroup","copyGlobalSearchCategories","getReportsFoldersForPermissionGroup","saveReportFoldersPermissionGroups","RoleName","RoleDescription","observableSelectedStaff","observableStateReportingPermition","observableStaffAssignedSchools","observableStaffCurrentMedicalConditionChecked","observableMedicalConditionShowAlert","selectedStaff","_selectedStaff","staffCurrentMedicalConditionChecked","_staffCurrentMedicalConditionChecked","medicalConditionShowAlert","_medicalConditionShowAlert","updateStaff","staffList","updateSelectedStaff","setUnmask","getStaffPicture","getStaffHeaderDetail","getStaffMedicalAlerts","getStaffAssignedSchools","getMedicalConditionReadByStaffId","SaveStaffMedicalCondition","getStaffHealthVisitLogReadByStaffId","getStaffHealthVisitLogReadById","getStaffDocuments","getStaffDocumentType","saveStaffDocument","deleteStaffDocument","getClinicLogVisitCodes","getStaffClassesByStaffId","getOnDutyUsers","getMedicalCodeTreatmentBySiteId","deleteHealthVisitLogById","saveHealthVisitLog","saveTreatmentCode","deleteClinicTreatmentByClinicLogId","getStaffByStaffId","getPrimayAddressByFamilyId","getAditionlaAddressesByFamilyId","saveStaffPrimayAddress","saveStaffAditionalAddress","deleteStaffAddress","isExistStudentAndStaffStrLunchPin","isExistStudentAndStaffStrID","saveFacultyStaff","saveFacultyStaffPhoto","deleteFacultyStafftById","facultyStaffReadByNameDuplicateChk","isStaffInUse","getStaffAttendance","updateStaffAttendance","deleteStaffAttendance","getStaffUser","saveStaffUser","LastSiteYearId","getUserByUserId","getStaffEmergencyContacts","saveStaffEmergencyContactSequence","updateStaffEmergencyContact","deleteStaffEmergencyContact","getStaffSchoolAssignments","saveStaffSchoolAssignments","saveStaffReporting","getCMPComponentValidation","getStaffClassifications","getStaffHeigherEducations","getPhotoIdLayout","copyUserPermissions","getStaffRoles","saveStaffRoles","clearPersmissions","mergeStaffAllSchoolsPermissions","isPhoneValid","isValidEmailAdress","deleteSpousePeopleById","saveUserPermissions","isStaffHasSchoolSpecificPermissions","copyUserPermissionsToAssignedSchools","isUserNameAlreadyExists","getStaffByRoles","copyRolesToAssignedSchools","saveCityStateZip","static","$id","removeIdFields","createNextName","substr","convert12HourTimeTo24HourTime","charAt","setHours","overlappingDates","twelveHourTimeRegexp","twentyFourHourTimeRegexp","validate24HourTime","validate12HourTime","updateValueAndValidity","setSeconds","setMilliseconds","execCommand","isFinite","getTimezoneOffset","getHours","baseUrl","checkEdge","saveFile","mimeTypes","navigator","userAgent","getComputedStyle","offsetParent","getPropertyValue","offsetTop","nextElementSibling","clientHeight","offsetHeight","scrollWidth","host","pathname","iso8601RegEx","fnConverDate","performance","random","Student","protocol","getBaseLocation","Counselor","Admin","Shared","Classroom","Reporting","Management","StateReporting","Health","SpecialEd","SpecialEdEval","Utilities","create","getOwnPropertyNames","getOwnPropertyDescriptor","defineProperty","copyArray","getType","convert","DefaultAllowedFileTypes","originalAttachment","documentTypes","forGradebook","requireDescription","requireDocumentType","allowedFileTypes","fileTypeErrorMessageText","documentTypeId","getDocumentTypePermissions","DocumentType","saveEvent","FileDescription","documentTypeField","courseSearchQuery","fieldsWithoutFilters","setFilterValue","setAllFilters","takeDown","obtainFilterOptions","setFilterField","advancedStudentSearchErrors","studentSearchFilters","ddlSchool","checkCurrentQueryWarning","addDefaultFilterField","getDataQueryFieldLookupReadByFieldId","setFilterPropertiesSwitch","allFilters","EnrollmentDate","DOB","setValueSwitch","genericFilter","scrollTo","scrollToLast","keyCode","_cachedData","setVisible","detailRowVisible","checkVisible","columnIndex","useFilterDataAccessor","filterDataAccessor","dataType","stringFilter","numberFilter","dateFilter","enumerationFilter","booleanFilter","toLocaleLowerCase","endsWith","addRemoveFilter","getFilter","hasFilters","paddingTop","paddingBottom","overflow","borderWidth","_MatToolbarBase","mixinColor","_elementRef","MatToolbarRow","ɵfac","ɵdir","i0","elementRef","_platform","_document","isBrowser","_checkToolbarMixedModes","_toolbarRows","changes","MatToolbar","i1","DOCUMENT","ɵcmp","ot","ngContentSelectors","styles","MatToolbarModule","ɵmod","ɵinj","MatCommonModule","getClassroomDisciplineReferrals","saveClassroomDisciplineReferral","PBISSelectedOthersInvolved","PBISSelectedPriorInterventions","getStudentsFromReferral","Actions","StudentId","MemId","Involvement","Alerts","StudentAlerts","IsUnknownStudent","PhoneNumber","CellPhone","DateOfBirth","IncidentCount","IsNonStudent","IncidentComments","DisciplineCode","MemberId","InvolvingType","EventName","EventNumber","IncidentsFunctionalCodeId","IncidentTime","Location","RoomNumber","ReportedBy","EnteredBy","AddedByStaff","IncidentRefferalId","StaffComment","UserHasPermissionForStudent","setInitialValues","Context","acceptReferrals","ReferralId","setUTCSeconds","getSeconds","setUTCHours","setUTCMinutes","EventComment","StaffName","IncidentCodeId","Time","LocationId","eventCreatedFromReferralPage","acceptReferralsinOpenEventModel","RoomBus","FunctionalMotivationId","ReferralSiteId","referralCreated","syncToServer","confirm","User","currentEmail","changeEmailForm","newEmail","repeatNewEmail","newEmailError","setErrors","repeatNewEmailError","UserName","showNotice","saveEmail","canUserChangeEmail","setUserEmail","viwAttachments","viewSelfCheckHistoryClick","checkInOutHistory","useStudents","angularMatData","isStaff","studentName","formatStudentName","getCheckInOutHistory","attendanceAdminService","CheckInOutDateTimeForTime","CheckInOutDateTime","HistoryId","datePipe","disableConfirmation","UploadedDate","ViewFileOnWebsite","calledFromMenu","legendClick","SubmissionId","attachments","maxFileSizeMessage","chooseFile","droppable","onDragOver","hoverTarget","event","hovering","onDragLeave","onDrop","dataTransfer","files","fileInputRef","MouseEvent","fileChosen","validateFileType","fileString","fileStringChange","fileTypeChange","fileExtension","fileExtensionChange","fileNameChange","fileSize","fileSizeChange","maxFileSize","FileReader","pop","readAsText","onload","result","readAsDataURL","fileNameRegex","onloadend","readyState","DONE","checkPNGBitDepth","readAsArrayBuffer","validateTextFile","xmlRegex","saveButtonEvent","saveServerEvent","toCamelCase","onClick","localDisabled","clickEvent","checkId","label","onKeydown","dataDefEnum","dataDefUpdated","localId","incrementor","_dataDefEnum","_value","useCodeAsValue","_useCodeAsValue","useDefaultValue","_useDefaultValue","setDefaultValue","setValue","rawValue","getDataDef","getDataDefinitionListByEnum","filterOptions","options","valueChangeHandler","sortOptions","processOptions","EnableDataDefinitions","showButton","valueChange","descriptionChange","codeChange","inputs","controlRef","_controlRef","controlEmitter","errorList","dimensions","overlayRef","dispose","errorCircleClick","_errorList","showErrors","hideErrors","hasAttached","overlay","flexibleConnectedTo","_eref","parentElement","withPositions","offsetY","offsetX","originX","originY","overlayX","overlayY","weight","positionStrategy","provide","useValue","injector","attach","clearSubscription","clearHover","filterSubscription","filterHover","backgroundColor","dateValueChange","filterValue","filterValueChange","operation","trueValue","falseValue","indeterminateValue","operationChange","columnName","removeClick","menuTrigger","pusherMenuStyle","operationSelectWidth","operationMarginRight","fieldsMarginBottom","floatLabel","showLabel","marginTop","filterInputFocus","filterContents","filterInputRef","openMenu","trigger","clearFilterEvent","clearFilterSubscription","onAcceptanceClick","showProceed","checkBoxAcceptance","acceptanceMessage","okButtonDisabledImage","secondMessageWarning","checkForAcceptance","okClick","previousEvent","isAccepted","isOkButtonDisabled","assignmentService","getOverrideCodes","overrideCodes","forAssignments","ForAssignments","ForGradeReporting","isEven","topMenuItemClicked","bottomMenuItemClicked","menuItemClicked","closeMenu","isTopMenuItemDisabled","topMenuItems","isBottomMenuItemDisabled","bottomMenuItems","disabledTopMenuItems","disabledTopMenuItemsBoolean","disabledBottomMenuItems","disabledBottomMenuItemsBoolean","selectAll","gradeLevelSelected","yearSelected","includeGradeLevels","moreColumns","getGradeLevels","gradeLevelIds","selectedGradeLevelIds","includeYears","siteYearIds","selectedSiteYearIds","availableSchools","maintainStudentsDistrictWide","getSchoolsBySchoolIds","SchoolDescription","SchoolType","selected","setGridData","sortBy","yearsForC360","Years","GradeLevels","gradeLevelLookups","gradeLevels","updateSchoolGradeLevels","getGradeLevelsLookupByYearId","SiteID","SiteIDs","checkAll","schoolSelected","expandAllClick","itemHeight","_students","getStudentLabels","overrideSort","sortStudentsByPreferences","studentIndex","showNumber","overrideStudent","includeAllOption","getStudentSuffix","studentSelectionName","WithdrawnDate","longestStudentName","studentdropDownWidth","firstStudent","changeStudent","previousStudent","nextStudent","lastStudent","studentChanged","changeStudentById","StudentNameFormat","Suffix","disableToggle","dropdownlist","popupSettings","startingIndex","setIndex","transformLabelsToTitleCase","tabLabels","selectedIndexChange","noEvent","selectionsChangeIndex","tabChange","selectTabByName","clickTabWithoutEvents","checkDisabled","disabledTabs","nameIterator","idIterator","checked","_checked","checkedChange","innerCheckbox","hasContent","contentRef","clear","hint","_hint","determineMarginBottom","hintAlign","_hintAlign","_errorMessage","showError","_showError","control","_control","matFormField","color","stateChanges","updateOutlineGap","_matFormField","_color","ngControl","viewToModelUpdate","clearClickEvent","mouseEnter","mouseLeave","preventCollapse","validator","required","marginBottom","isChecked","model","values","isIndeterminate","toggleSelection","update","matSelect","_matSelect","_selected","originalDataSource","getValue","dropdownIsOpen","sortSelectedItems","selecteByCommaString","valueFieldType","dataSourceIds","moveSelectedToTop","sortedDataSource","valueField","getDisplay","displayField","trackByIndex","openChange","openedChange","selectedChange","ids","nowClick","timeField","_timeField","timeFieldChange","timeValue","_timeValue","timeValueChange","twelveHourFormat","twentyFourHourFormatChange","twelveHourFormatFormatChange","onBlur","change24HoursTo12Hours","schoolName","curriculum","description","getClassSearch","observableexternalFilters","observableSelectedLayoutViewType","observableSavedLayouts","observableSelectedLayout","observableDataQueryFields","observableUserPermissions","observableincidentCode","observableFieldDataLoaded","externalFilters","_externalFilters","savedLayouts","_savedLayouts","selectedLayoutViewType","_selectedLayoutViewType","selectedLayout","_selectedLayout","LayoutTypeID","selectedLayoutType","updateUserLayoutHistory","dataQueryFields","_dataQueryFields","_userPermissions","validActionCodes","_validActionCodes","fieldDataLoaded","_FieldDataLoaded","getLayoutById","getLayoutsByType","getSpecialFields","getLayoutTypes","getDataQueryFields","saveLayout","deleteLayout","TylerDefault","setUserLayoutTypeToDefault","setUserLayoutToDefault","getUserDefaultLayout","getSectionData","getCustomLayoutSchoolDefaults","saveDefaultSchoolLayouts","getSectionDataFromSP","getV10DataQueryFieldLookup","getV9DataQueryFieldLookup","performDataQueryUpdate","getFilterFields","Sections","AvailableFields","RequiredForFilter","DQFieldID","useCurrentYearOnly","v10YearFieldNames","getFieldList","ParentSectionID","SelectedFields","SortByDefault","specialFields","SpecialFieldID","IsSection","SectionId","RequiredForDisplay","AlwaysIncludeInResults","IncludeInResults","getAllFieldsForChildSections","getFieldsForChildSectionFilters","IsGrid","SPName","getAHSubGridParameters","getV9AHSubGridParameters","sectionData","sectionId","ParameterName","DefinesRows","getSpecialColumns","DefinesColumns","storeSectionData","getStoredSectionData","getFilterValueFromParent","getDefaultValueForFilter","numericDataTypes","textDataTypes","dateTimeDataTypes","SaveAsNewClick","enableSave","confirmDialog","ContinueWithoutSaveClick","customLayoutService","layoutTypeChanged","hideSectionChange","drop","isAcademicHistory","layoutTypes","layoutType","layout","previousType","setLayout","ColumnBreak","colBreakFieldId","dqFieldsRetrieved","setFieldsToDefault","checkRequiredFields","filterAvailableFields","reorderAvailableFields","checkColumnCounts","unsavedFieldChanges","getFieldDisplayName","selectedFields","setFieldOrder","previousIndex","removeItemClick","SectionID","AllowEdit","revertChangesClick","rbgScopeRef","txtNameRef","layoutNameChanged","isSpecialFieldDraggable","hideChildSections","Hidden","ParentSectionIsHidden","hideDisableCheck","duplicateClick","getLayouts","observableSavedLayoutsStream$","layouts","setLayoutSource","addLayoutClick","selectLayout","saveFieldValues","debounceTime","input","onChange","writeValue","_renderer","setProperty","registerOnChange","_debounce","registerOnTouched","onTouched","_timer","useExisting","multi","onKeyDown","specialKeys","maxValue","allowNegativeValue","negativeRegex","regex","ngAfterViewChecked","el","querySelectorAll","allowedKeys","disallowedKeys","abs","maxPrecision","maximumEnforce","minimumEnforce","numberOfCharacters","minimumIntegers","maximumIntegers","minimumDecimals","maximumDecimals","boundaries","textMaskConfig","getNumberMaskConfig","onFocus","focused","_setupMask","allowOverriding","extractComponents","handleInput","_handleInput","numberValue","formatWhileTyping","allowNegativeNumbers","placeholderChar","showMask","allowLeadingZeroes","allowNegative","exec","ignoreNumbersOnly","regexWithDecimal","ViewMode","Indent","copyClick","dragStart","dragEnd","rowDropped","controlDropped","eFormDesignerService","connectedDropListAdd","setSelectedStatus","observableselectedElementChangedStream$","observableDragStartStream$","isDragging","observableDragEndStream$","connectedDropLists","observableConnectedDropListsStream$","selectedElementType","selectedColumn","isSelected","columnClick","columnClickEvent","focusOnColumn","openPropertiesTab","assignControlsNewID","Controls","Rows","getAllFormControls","focusOnControl","rowPredicate","columnHasNonRemovableControls","canDeleteColumn","deleteSelectedElement","locationToAdd","cotrolType","addColumn","config","getControlId","getRowId","Width","isDevMode","CustomizationDevMode","basePage","BasePage","controlTypes","radioButtons","setUpRadioButtons","observableRadioOptionsChangedStream$","selectedControl","image","linkToFile","getAttachment","contentTemplates","RefName","CustomFieldRefName","contentTemplate","TemplateRef","Attachment","getEFormAttachment","radioIds","radioValues","radioLabels","DropdownOptions","controlClick","formatControlType","zt","Ot","showDropdownWarning","showTextboxWarning","continueClick","Ri","Ir","Sr","so","HeaderSelectedLogo","getLogos","CalledFromAttendanceLetter","schoolNameTag","schoolAddressTag","schoolCityTag","schoolStateTag","schoolZipTag","schoolPhoneTag","districtLogo","alternateDistrictLogo","siteLogo","alternateSiteLogo","getReportLogos","sanitizer","bypassSecurityTrustResourceUrl","DistrictLogo","AlternateDistrictLogo","SiteLogo","AlternateSiteLogo","viewInitialized","buttons","checkboxWithTextbox","checkbox","date","divider","verticalDivider","dropdown","textbox","component","time","readOnly","CustomFieldsFlag","customFields","generatePalette","IsSurvey","AllowAttachmentControls","LinkedDBField","populateCustomFieldProperties","AllowShowTodayButton","RemoveBottomPadding","nonInputControls","Height","NoteRows","CustomField","CustomFieldName","CustomFieldAllowControlToHandleOwnData","CSTFieldsManageOwnData","CannotBeRemoved","CustomFieldControlTypeID","convertEFormControlTypeToCustomFieldTypeID","enterPredicate","focusControl","displayMergeFields","noDefaultChange","showCriticalCondition","isV10","showNoDefaultCheckbox","noDefault","dbField","idCount","defaultId","setDefaultOptionFlags","observableChoiceMergeFieldClickedStream$","setData","updateDefault","defaultClick","hasBackdrop","noOperation","focusControlindex","tabNameChanged","colWidthChange","labelChanged","getCaretPosition","customFieldSelectChange","locationToSaveChange","locationToSaveCSTChange","choicesClick","fileChanged","stuPortCategoryChange","storeLocationChange","docTypeChange","textProvidedOnInstanceChanged","parentObjectChange","Wa","toolbar","list","script","indent","direction","font","isCustomFieldsActive","EnableCustomizationFramework","C360CustomFieldsImported","selectedPage","pageChange","FixedWidth","controlChange","observableControlsUpdatedStream$","getPromptForDataObjects","observableMergeFieldClickedStream$","mergeFieldClicked","getStudentPortfolioCategories","getDocumentTypes","getDatabaseFields","allDBFields","databaseFields","filterDatabaseFields","observableDatabaseFieldsStream$","selectedTemplate","selectedInstance","selectedForm","customDataFields","availableCSTFields","filterCSTFields","setSelectedCSTField","getCustomDataFieldsByObjectID","getTabPromptForDataObjects","getPagePromptForDataObjects","setSelectedStuPortCategory","setSelectedDocType","showChoicesLink","ConditionalAction","setChooseLikeBackGround","availableCustomFields","ControlTypeID","DataTypeID","IsProcedureBased","ReadSPName","LinkedCSTFieldName","DynamicPagesDataFiledsID","promptForDataObjects","studentPortfolioCategories","lookupsService","getStudentPortfolioCategoryLookup","StuPortCategoryId","selectedStuPortCategory","getDocumentTypeLookup","FormDocTypeId","selectedDocType","observableTabNameChanged","conditions","ParentObjectId","masterControlList","getCustomFieldMetaData","setSelectedCondition","Condition","IsDataDef","DataDef","updateCustomFieldConditions","UseDataDefCode","getCustomFieldDataDef","getCustomDataFieldByFieldName","LookupENUM","CodeDesc","quill","insertMergeTag","quillEditor","getSelection","deleteText","index","insertText","Label","cursorPosition","TextProvidedOnInstance","Instructions","observableRadioOptionsChanged","updateConditionalControls","getEFormDatabaseFieldOptions","isCodeDescriptionValue","IsRequired","isCustomFieldRequired","tabClick","toggleNode","pageClick","dropPage","dropTab","copyRowClick","copyColumnClick","ao","eformService","selectedFormData","Expanded","focusOnTab","focusOnPage","focusOnRow","Tabs","rowHasNonRemovableControls","canDeletePage","pageHasNonRemovableControls","tabHasNonRemovableControls","Pages","Na","addRow","ha","Gn","selectedTabChanged","Ja","observableOpenPropertiesTabStream$","observableOpenControlTabStream$","closeSlideOutPanel","showSlideOutPanel","observableshowSliderPanel","observableshowSliderPanelWidth","vr","setFocusOnTabClick","columnDropped","previousClick","mobilePreviewClick","addTabClick","addPageClick","addColumnClick","Sa","zo","Si","overwriteBasePage","template","IsMobile","Title","page","selectedDesignPage","CSTObjectID","IsDynamicWidth","showBasePageCB","getCustomFieldMetadata","instance","InformationalMessage","setUpForm","setUpCriticalChoices","eform","originalFormData","getTabs","tabNameChangedEvent","selectedPageNumber","getSelectedPageNumber","pageSelected","tabSelected","isLastPage","isFirstPage","getEFormDatabaseFields","observableDatabaseFields","getCustomDataFields","observableFieldMetaDataRetrieved","treeViewExpandAll","observableshowSliderPanelStream$","showSliderPanelValue","observableshowSliderPanelWidthStream$","tabName","observableSelectedPageChangedStream$","checkForWarnings","showTemplateInUseWarning","updateAttachments","updateSurveyFields","saveTemplate","saveFrmaPage","saveInstance","FormData","ParentHandlesSave","closeEvent","InstancesExist","saveChangeHistory","StudentIds","selectPage","checkColumnForTooManyControls","AllowColumnWidth","selectColumn","formatControlNameForErrors","selectControl","FileDataBase64","StoreLocation","rowHasMoreThanTwoControls","attachmentChanges","saveAttachments","inputControlTypes","SurveyFieldID","ForTemplate","TemplateID","InstanceID","QuestionText","EFormControlID","CriticalValues","IsSelectionControl","CriticalQuestion","IsCritical","saveEFormSurveyFields","deleteAttachments","deleteEFormAttachments","saveEFormAttachments","clearAttachments","isFP","isLP","addRowClick","addControlClick","deleteElementClick","moveClick","moveElement","previewClick","AllowConditionalObjects","AllowTabs","AllowPages","AllowInstanceSpecificText","IsMobilePreview","allowStudentSpecificMergeFields","allowAdultSpecificMergeFields","closeMergeFieldWindow","getElementChange","Ui","hi","Za","formatControlName","Jr","ho","Lo","InstructionFormat","saveTemplateChangeHistory","saveInstanceChangeHistory","TemplateId","TemplateAuditId","InstanceId","InstanceAuditId","ObjectType","Property","Language","OldValue","NewValue","columnPredicate","wi","observableselectedElementChanged","observableConnectedDropLists","observablePagesChanged","observableDragStart","observableDragEnd","observableControlsUpdated","observableMergeFieldClicked","observableChoiceMergeFieldClicked","observableCloseMergeFieldWindow","observableOpenPropertiesTab","observableOpenControlTab","observableSelectedPageChanged","_selectedTab","_selectedPage","_selectedColumn","_selectedRow","_selectedControl","_selectedElementType","LastUsedControlId","getMaxControlId","LastUsedTabId","LastUsedPageId","getAllControlsByColumn","getAllControlsByRow","findParentRowForColumn","findParentRowForControl","openControlTab","findParentColumnForRow","findParentColumnForControl","isControlOnPage","isColumnOnPage","isRowOnPage","promptForDataTypes","selectedElementChanged","setExpandAllByColumn","allFormControls","SetRadioValue","getColId","getInstances","getInstancesByTemplateId","instances","getMergeFields","observableCloseMergeFieldWindowStream$","mergeFields","filterMergeFields","organizeMergeFields","UseOnFRMA","PageFlag","UseOnStudentForm","UseOnStudentGPA","UseOnFamilyForm","UseOnBehaviorLetter","UseOnAttendanceLetter","Category","selectedObject","StaffNote","rowInitialized","controlInitialized","masterId","controlViewStatuses","Initialized","rowViewStatuses","checkInitializedStatus","topLevel","valueChanged","attachmentChanged","bt","it","Vn","ht","originalEditableValue","editable","_editable","passedConditionalCheck","_passedConditionalCheck","eFormAttachment","viewType","NewForm","setInitialVisibility","observableControlValueChangedStream$","isConditionMet","PreviousAttachmentId","mergeFieldDependantControlIds","transformMergeTags","pipeTrigger","observableShowConditionalObjectsStream$","showConditionalObjects","observableMergeFieldValuesRetrievedStream$","observablePipeTriggerStream$","getMergeFieldDependantControls","highlightChanges","setMaxFileSize","observableReadOnlyStatusChangedStream$","validateFunction","bind","getElementRef","DesignPageIndex","designPageIndex","loaded","extractMergeTagIds","getControlIdFromMergeTag","controlValueChanged","translateService","linkClick","requestAnimationFrame","startRender","rendered","maxFileSizeByte","maxFileSizeKB","customField","PDFName","submitAndPayClick","showFeeNote","autoAccept","student360Service","parentAssignedPortals","showSubmitAndPayNow","noteMessage","submitClick","acceptClick","rejectClick","notesClick","printClick","isPreview","isReview","IsPreview","eFormData","pdfDataURIs","showCriticalMessage","showNextPreviousButtons","getInstance","observableIsFirstPageStream$","observableIsLastPageStream$","getEFormInstance","Instance_ID","eFormAttachmentForPDF","AllowMultiple","PDFNameOverride","eFormViewer","initGenerateEnglishPDFOnly","EnglishPDF","saveAcceptedForm","DatabaseFields","getLinkedDBFields","getLinkedCustomFields","CustomFields","getSiteYearId","studentHeader","localPrint","addFormToPDFStarted","columnInitializedBuffer","showPrintDiv","TranslatedPDF","DocToFamily_ID","EnglishJSON","validatePage","CheckEformsStatus","Student_ID","ParentMem_ID","PrimaryParentMem_ID","CompletionDue","CompletionDueOption","Frequency","SubmittedDate","SubmittedOn","confirmSubmission","templateProcessType","categoryType","submittedWarningMessage","HasFee","EnableEFormFees","AllowEFormFees","ProcessType","submitEFormFor","rerouteToFeesAfterSubmit","SubmittedByName","getEformCategoryByInstanceId","SubmittedBy","DisplayCriticalMessage","checkForCriticalMessage","CompletionMethod","saveEFormData","Year_ID","initGenerateEFormPDFAndJSON","Non_English","currentLanguage","SurveyAnswers","getSurveyAnswers","saveSurveyAnswers","FormID","Answer","saveEFormSurveyAnswers","notesEdited","columnInitialized","columnViewStatuses","Mt","languageChanged","showConditionalChange","tabsClick","columnInitializedPrint","changesInput","configInput","disableMergeFields","hideKendoBottomPadding","HideTitle","useInstance","UseInstance","pageID","customizationService","initializePage","allYears","selectedYear","setSelectedStudent","setLinkedDBFieldValues","getLanguages","checkConditionalObjects","Incident_ID","TrackingType","BatchRunDate","PageObjectType","getMergeFieldValues","NonresidentParents","showPrintDivInput","Column","TabId","PageId","tabViewStatus","getFormLabels","clearSelectedStudent","clearMergeFieldValues","languageChange","translationService","overrideTranslationPipe","formControls","allCustomFieldControls","showAllConditionalsPrint","AlwaysShowAllConditionals","visibleTabs","findColumn","completFieldName","findRow","mergeFieldPipeTrigger","observableIsFirstPage","observableIsLastPage","showConditionalObjectsChanged","goToErrorTab","getAllControlsByPage","HasError","allowedFileExtensions","allowedImageExtensions","afterLocalPrint","fileNameOverride","fileNameInput","addEFormAttachmentsToPDF","getPdfDataUriAsBase64","observablePageLoadCompleteStream$","generateEnglishPDFOnly","addFormToPDF","generateEFormPDFAndJSON","transformDatabaseMergeTag","convertNonEnglishFormToEnglish","revertToEnglish","delay","observablePageLoadComplete","updateEnglishPDF","roundToTwo","Promise","dropped","pdfExportRef","scale","export","then","renderCompleted","languageIdOverride","languageChangePDF","addFormAndComplete","completeRender","renderedFormData","getControlLabels","labels","getRowLabels","getColumnLabels","serviceControls","languages","selectedLanguageCode","getTranslationsForLanguage","overrideTranslations","showContent","checkVisiblePageCount","getAllCustomFields","getCustomFieldByRefName","setCustomFieldByRefName","getLinkedDBFieldValues","HintLabel","massGetCustomDataFieldValue","NotSubmitted","Submitted","Rejected","Accepted","Complete","observableControlValueChanged","observableShowConditionalObjects","observableMergeFieldValuesRetrieved","observableMergeFieldsRetrieved","observablePipeTrigger","observableeFormHeadLinePermission","observableeFormstrQueryXML","observablesurveyAnswersFilterParam","observableReadOnlyStatusChanged","_eFormSubmissionsFilterParam","availableTo","selectedClasses","deadlineFrom","deadlineTo","showFromFrom","showFromTo","showToFrom","showToTo","createdFrom","createdTo","createdBy","lastUpdatedFrom","lastUpdatedTo","lastUpdatedBy","eFormSubmissionsFilterParam","eFormSubmissionsFilterChange","isEFormSubmissionsFiltered","submittedFrom","submittedTo","surveyAnswersFilterParam","_surveyAnswersFilterParam","isSurveyAnswersFiltered","dateFilterType","specificDate","fromDate","rangeStartDate","rangeEndDate","getAllFormTextToTranslate","English","extractMergeTags","ShowHeader","ShowHeaderSchoolName","ShowHeaderSchoolAddress","mergeFieldValuesRetrieved","saveCategory","getAllTemplates","getEFormTemplate","getEFormAttachments","getManualSubmissionAttachment","saveManualSubmissionAttachment","getInstancesForProcessing","getEForms","populateFormData","getFormDataOnlyByIDs","getFormDataByInstanceId","getStudentParentEforms","getStaffUserEformsByLoginId","checkForAvailableEForms","checkForAvailableStaffEForms","updateEFormPDFData","GetEformStatusHistory","getSchoolsByDomains","getClassesBySectionId","getClassesByTgsId","getUserEformTemplates","getEformPermissions","checkInstanceName","retrieveMergeFieldValues","getEFormStudentsByInstanceId","getSchoolIdsByClassIds","getSchoolIdsByStudentIds","canCreateUserProcessEform","getEformCreateByStaffId","updateLinkedDBFields","translateMergeField","transformFormOnlyMergeTag","sanitize","getTemplateChangeHistory","getTemplateSettingsHistory","getInstanceChangeHistory","getInstanceSettingsHistory","saveTemplateSettingsHistory","saveInstanceSettingsHistory","getEformTemplateByAuditId","getEformInstanceByAuditId","markInstanceAsViewed","getSubmissionCounts","getSchoolsStudentFamilies","getSelectedStaffForEForm","getClassStudentFamilies","getStudentFamilies","getStudentFamiliesByService","getSelectedStudentPopupData","getMassMailByParentId","getDQStudentCount","getStudentIdsFromDynamicQuery","getSurveyQuestionsByTemplateID","getSurveyQuestionsByInstanceID","updateInstanceFormDataOnly","exportEFormsToExcel","padStart","reverse","Ce","strStudentId","ParentName","Cell_number","Home_Number","Address","Email_Address","textContent","innerText","Sheets","SheetNames","bookType","exportService","saveAs","exportInstancesToExcel","addImage","getPageCount","copyPages","saveAsBase64","getSurveySummary","getSurveyNotSubmitted","getSurveyAnswerDetails","getEFormSurveyAnswerSummary","Answers","helpString","pattern","keyRestriction","csv","csvField","validateKey","exportTableData","sortData","exportToExcel","exportMatGridToExcel","favoriteMenu","selectItem","Items","GridData","DialogTitle","ColumnHeader","OKButtonLabel","selectAllGridItems","checkMinAndMaxNumberOfSelected","maxAllowedSelected","minRequiredSelected","selectionChanged","getSelectedIDs","leavePage","preventSave","saveChoice","canDeactivate","currentComponent","urlTreeWorkaround","createUrlTree","go","showWarningWithoutSave","showWarningWithoutSaveRoute","warningDialog","NewFamilyRegistration","familyRegistrationService","householdParent","staffService","canActivateChild","optionalStudentPortal","queryParams","studentSearchSchoolPermissionsV10","studentSearchSchoolPermissionsV9","studentSearchInjectedData","performStudentSearch","returnSingle","returnAll","stayEvent","DynamicProperties","createAccessorsAndMutators","set","configurable","listItems","myOutput","inputValue","pageToPdfTriggerSubscription","observablePageToPdfTrigger$","ignorePrintCall","exportPageToPDF","pdfPrintRef","paperSize","margin","autoScale","pageWidth","landscape","getRelationshipLookup","getLanguageLookup","getMaritalStatusLookup","getStreetDirectionLookup","getStreetTypeLookup","getCountryStateLookup","getCountryLookup","getEthnicityLookup","getGenderLookup","getRaceLookup","getSuffixLookup","getLivesWithLookup","getGradeLevelLookup","getMedicalConditionLookup","getDataDefCode","getCityStateZipCodeLookup","getAttedanceCodeLookup","getDisciplineReferralFunctionalMotivationLookup","getDisciplineReferralContextLookup","getDisciplineReferralReporterLookup","getDisciplineReferralSchoolLookup","getDisciplineReferralPlaceLookup","getDisciplineReferralIncidentCodeLookup","getCommunicationLogLookups","getCommunicationLogTypesLookup","getCommunicationLogPersonCodesLookup","getCommunicationLogResultLookup","getORFormDocumentType","getincidentCodeDetailLookup","getAdditionFieldsLookup","getIncidentWeaponLookup","getStudentRegCodes","getCreditCodes","getAllGradeLevels","getCommunicationLogReasons","getCommunicationLogPreDefinedConfidentialNote","getCommunicationLogPreDefinedComment","getStaffRolesLookup","getRolesForEForms","getSubjectTermTypeLookup","getIncidentSubCodes","getGradeLevelsLookup","getDepartmentCodes","getPhysicianTypeList","getVaccineTypesLookup","getExemptCodeLookup","getDistrictLookup","getSiteLookup","getGradeLevelsReadBySchoolYear","getPermissionGroupLookup","getTerminationReasionLookup","getWithdrawnCodesReadLookup","getTeacherSpecialtyCodesLookUp","getClinicVisitCodesLookup","getMedicalCodeClinicVisitNoShowLookup","getDeliveryResultCodeLookUp","getCourseGradingPurposeLookup","getTermGradeTypesLookup","getMedicationFrequencyLookup","getPractionerLookUp","getMealApplicationConfidentiallyWaiverLookups","getMedicalTestingCodesLookup","Ei","Jn","deSelectedStudents","retValUnselectWarning","studentsWithoutRecipients","loadTableData","noEmailWarningDataSources","sort1","getAriaRow","noEmailWarningDialogRef","retValNoEmailWarning","Rr","loginSettings","classRow","classStudentsCheckAllClick","SelectedClasses","classStudentsCheckAll","er","classStudentClick","SubjectSections","getAriaDetailRow","ki","teamRow","teamStudentsCheckAllClick","SelectedTeams","teamStudentsCheckAll","teamStudentClick","StudentTeams","listRow","MassEmailStudents","listStudentsCheckAllClick","SelectedLists","listStudentClick","listStudentsCheckAll","StudentLists","selectedClassesCheckAllClick","classClick","selectedTeamsCheckAllClick","teamClick","selectedListsCheckAllClick","listClick","selectedStudentsCheckAllClick","studentClick","closeModalClick","testContactType","contactTypeClick","studentRecipientTypeChange","householdRecipientTypeChanged","massEmail","massEmailObj","getStudentInfoForMassEmail","ReferringPage","columnsToDisplayInStudentView","MassEmailClasses","selectedStudentTeams","MassEmailStudentTeams","IsSelectedForMassEmail","selectedStudentLists","MassEmailStudentLists","selectedStudentsCheckAll","selectedClassesCheckAll","selectedTeamsCheckAll","selectedListsCheckAll","SendEmailToTeachers","SendEmailToTeamStaffMembers","StudentRecipientType","HouseholdRecipientType","NonHouseholdRecipientType","IncludeAll","MassEmailContactsGrouped","householdParentLabel","pageHeader","pageHeaderHeight","tab","tabHeight","tblControls","tblControlsHeight","pageFooter","pageFooterHeight","classViewDataSource","teamViewDataSource","listViewDataSource","selectedContactType","SelectedContactTypes","loadDataTable","studentViewDataSource","cvSort","tvSort","lvSort","svSort","massEmailErrorCount","AdditionalRecipients","to","cc","bcc","Recipients","StudentContacts","IsGuardian","IsPrimaryParent","Relationship","BCC","RequestsMailings","To","CC","massEmailService","getTeacherRecipientsForMassEmail","GetTeamStaffMemberRecipientsForMassEmail","retValSelectRecipient","recipientsSelected","selectRecipientDialogRef","ContactTypes","unselectedWarningDialogRef","isBackClick","gridHeight","matTriggerValue","contactTypes","studentClassFilter","OneEmailPerHousehold","dt","emailAttachment","OKClick","Pi","sendAnywayClick","sendEmailsWarningDialogRef","Bn","dialogContent","jobSentToQueueDialogRef","jr","recipients","includeTeachers","includeTeamStaffMembers","Wi","email","ca","userEmailAddress","emailRef","emailRegexp","sendTestClick","retValSelected","EmailAddress","fn","exportAddressesClick","userPreferences","portals","popUpHeight","popUpWidth","innerWidth","referringPage","massEmailPreferences","Signature","Body","getStudentName","selectedStudentTeam","selectedStudentList","From","EmailFrom","DefaultEmailReplyToAddress","getMassEmailPreferences","getPageInfo","MergedForGrading","MergedGradebookSSEC_ID","getStudentsByClass","getStudentsByTeams","getParentTypes","getStudentsByLists","showSelectRecipientsModal","selectRecipiantDialogRef","showViewRecipientsModal","Er","autoFocus","CreateCommunicationLog","ShowNickname","StudentMiddleNameFormat","sendEmailsClick","Base64String","sendEmails","generalConfirmationDialog","$r","attachmentFieldRef","StudentSelection","HouseholdParentsSelection","NonResidentParentsSelection","IncludeAllEvenNotRequestMailing","SendEmailToTeacher","addAdditionalEmails","sendMassEmail","LoginSchoolId","preferencesClick","userPrefDialogRef","pr","massEmailAttachmentDialogRef","sendTestEmail","sendTestEmailDislogRef","Go","isMatching","POBoxLastChange","HouseNumberLastChange","DirectionLastChange","StreetNameLastChange","StreetTypeLastChange","ApartmentNumberLastChange","CityLastChange","StateLastChange","ZipCodeLastChange","ZipCode2LastChange","CountryLastChange","POBoxNew","HouseNumberNew","DirectionNew","StreetNameNew","StreetTypeNew","ApartmentNumberNew","CityNew","StateNew","ZipCodeNew","ZipCode2New","CountryNew","PhoneNew","changed","POBox","HouseNumber","Direction","StreetName","StreetType","ApartmentNumber","City","State","ZipCode","ZipCode2","Country","Phone","HomePhone1New","HomePhone2New","LanguageAtHomeNew","POBoxAddressLine1New","POBoxAddressLine2New","POBoxAddressLine3New","POBoxAddressCityNew","POBoxAddressStateNew","POBoxAddressZipNew","setEqual","setAsBasis","HomePhone1","HomePhone2","LanguageAtHome","POBoxAddressLine1","POBoxAddressLine2","POBoxAddressLine3","POBoxAddressCity","POBoxAddressState","POBoxAddressZip","setAsLastChange","HomePhone1LastChange","HomePhone2LastChange","LanguageAtHomeLastChange","POBoxAddressLine1LastChange","POBoxAddressLine2LastChange","POBoxAddressLine3LastChange","POBoxAddressCityLastChange","POBoxAddressStateLastChange","POBoxAddressZipLastChange","reset","RichText","screenWidth","screen","getPageTitle","pageTitle","bypassSecurityTrustHtml","currentLanguageTranslations","Translation","setupUser","observableCurrentUserStream$","updatePortals","observableStaffPortalMenuPreferencesStream$","isStudent","observableStaffAssignedPortalsStream$","observableStudentPortalMenuPreferencesStream$","observableParentAssignedPortalsStream$","checkEformPermission","portalExpanded","IsGroup","PortalMenus","ParentGroupName","GroupIcon","saveMenuPreferences","expandCollapseClick","studentPortalMenuPreferences","staffPortalMenuPreferences","portalNavigated","navigated","staffUserStudentLocked","getStudentMenuPreferences","getStaffMenuPreferences","eFormHeadLinePermission","allParentPortals","sideNavOpened","portalMenuComponent","observableFavoritesPreferencesStream$","portalPreferences","updatePreferences","defaultPreferences","getFavoritesPreferences","displayPortals","reduce","refreshPreferences","forNavigation","ParentPortalName","autoSave","portalSelected","portal","forSelection","expandFavoritesRecursive","filterFavoritesRecursive","ChildPortals","selections","ShowAsMenu","ParentPortal","MenuIcon","performSearch","expandCollapseButtonClick","menuToggled","portalClick","portalCheckboxChange","_portals","selectedPortalName","selectedPortalUrl","navigable","UseSection504","EnableSped360","onlineRegistrationService","getOnlineRegFamilies","families","isUHD","isMultipleFamiliesPopupOpened","familyId","FamilyId","parentType","ParentType","rosterQuery","menuClicked","selectedPortals","searchValue","expandCollapseAll","searchable","divMenu","scrollTop","NewPortalID","profileService","updateProfileAttachment","FileID","MyFileName","MyFile","downloadAttachment","userCanEdit","loadTable","profile","ProfileAttachments","getAttachmentFile","ContentID","ProfileContentId","deleted","addAttachment","parentViewableAttachments","userCanAdd","DocOwnerID","FolderID","AllowParentToView","TableID","DateAttached","deleteProfileAttachment","sequence","topLevelNode","newSequence","hasChildren","hasParent","parent","checkSelectedRow","getNestedLayers","ParentID","sortChildren","first","last","getOpenedNodes","openNodes","RowId","setStatus","originalTitle","originalStatus","updateProfile","titleField","originalInformation","Image","pictureName","rowId","TopicId","topicId","parentId","DateFromView","DateToView","quillContainer","quillHeight","cleanJunkDates","addProfile","resourceSrc","removePicture","UploadedBy","lastname","firstname","showAttachments","addContent","deleteTopic","inactive","topicColumns","profileColumns","assembleDisplayData","dataChanged","expandCollapseEvent","toggleExpandCollapse","topics","subLevelNodes","editTopic","reload","profiles","editContent","moveContentRowUp","displayInactive","moveContentRowDown","moveRowUp","moveRowDown","openInformation","allColumns","isViewing","profileTableWidth","topic","enforceDates","outsideOfDateRange","SSECID","DelBy","DelOn","getClassInformation","classesWithProfiles","getClassProfile","getClassesWithProfiles","getProfileContent","getAllClassTopics","updateProfileSequences","addTopic","setRelatedTopic","copyClassProfile","teacherProfileClick","courseSSEC_ID","teacherId","showTeacherProfileLink","staffPictureBase64","teacherProfileClickHandler","useCourse","showTeacherProfileLinkWhenTeacherHasProfile","_width","_height","displayBorder","_displayBorder","padding","_padding","quillContentContainer","html","placeholder","formats","getElementsByClassName","modules","pages","PrintStyle","ClassroomPage","RequiredCourse","ShowSchoolDropdown","ShowYearDropdown","DisableYearDropdown","HidePrintButton","observablePermissions","loadUserPermissions","userPermissionGroupIDs","GroupId","some","IsAllPermissionAssigned","every","IsPermissionCategoryAssigned","IsAnyPermissionGroupAssigned","GroupDescriptionId","IsAllPermissionGroupAssigned","getSchoolIdsFromPermissions","getPermissionGroups","selfCheckInOutSubmission","getSelfCheckInOutSubmissionHistory","ngModule","providers","animationDuration","imports","buttonLabel","observableShowAppHeader","observablePageToPdfTrigger","observableProgressBarPercent","observableCurrentMedicalConditionChecked","observableClearStoredCustomFieldData","observableCurrentPortal","observableShowSpinner","observableIsPageLoaded","currentUrl","showAppHeader","_showAppHeader","pageToPdfTrigger","_pageToPdfTrigger","progressBarPercent","_progressBarPercent","currentMedicalConditionChecked","_currentMedicalConditionChecked","_currentPortal","previousPortal","toggleShowSpinner","toggleIsPageLoaded","isPageLoaded","updateIsPageLoaded","getHTMLtoPDFBase64","showSnackbars","snackbarShown","snackbarQueue","snackbar","afterDismissed","queueSnackbar","instant","horizontalPosition","duration","filterTemplate","toggleFilter","getErrorDetails","generateError","saveWebPageAudit","getTylerUToken","getAboutTylerSIS","createPulseKey","getReEnrollStudentsList","getUserDefinedField","getMealService","getStaffInfoByUserId","getDynamicPagesReadForStudentLookup","getGradebookTermsBySiteSectionId","getAllServices","getMedicalConditionByStudentId","deleteMedicalConditionById","saveMedicalCondition","getMedicalConditionCodes","deleteImmunizationById","deleteDoctorById","saveMedicalPhysicianInformation","saveInsurance","deleteInsurance","getHealthNotes","saveHealthNotes","saveImmunization","getCalendarUseAttendanceTypes","createImpersonationLog","createSystemLog","simpleCopy","copiedData","copyIdentifier","complexCopy","paste","getVisibleCMPComponents","isCMPComponentVisible","visibleCMPComponents","ctrlKey","shiftKey","apiCall","showErrorDetails","stackTrace","fullPath","_platformLocation","user","username","loaderService","isLoading","requests","removeRequest","intercept","clone","cardRetrieval","TempExcludedURLs","ExcludedURLs","ExcludedURLsV10","handle","IgnoreErrors","errorDialogRef","observableHideSpinner","hideSpinner","_HideSpinner","_ShowSpinner","originalCurrentSchoolOnly","studentTeam","restoreDefaultsClick","rowSelected","startOverClick","showSelectedStaff","showAllSchoolClick","showAllPermissionsGroupsClick","selectClick","unsavedQueryApplied","todayDate","getPermissionGroup","staffStatus","iseForm","getSearchCriteria","staffSearchCriteria","pageName","Roles","selectedRoleId","isSpedMaintainTeamPage","selectedStaffIds","redirectUrl","setSelectedSchool","schoolIds","obtainedRecentStaffQueries","defaultColumns","UseInScheduling","refreshStaffSearchGrid","searchClick","inputLastName","startOverClicked","saveSearchCriteria","processStaffFilterResults","getStaff","staffSelected","SelectedSchools","staffFiltersClick","selectedSchoolId","teacher","substitute","advisor","counselor","nurse","disciplinarian","administrator","superintendent","principal","other","specialEdTeacher","specialEdServiceProvider","specialEdCaseManager","isBusy","activeToday","employeeNumber","firstName","lastName","selectedPermissionGroupId","userName","showAllSchool","showAllPermissionGroups","StaffStatus","StaffRole","clearSelectedStaff","isDataFiltered","checkAdvancedFilter","EmployeeNumber","StateId","keyDownFunction","permissionGroupService","permissionGroups","Active","columnActive","getColumnHeader","ShowAllSchools","ShowAllPermissionsGroups","checkPriorDate","getStaffSearchWithObject","activeStaff","permissionGroupId","getStaffByStaffIds","programServiceClick","iepClick","alerts","checkAlerts","getStudentDetails","useSection504","getStudentEnrollment","AlertType","UserHasPermisison","parentPortalService","isIEP","Program","Service","portalDialog","showPortal","formWithinDocumentsService","editHtmlFormDialogOpen","callFromAlertDialog","SDMIntegration","studentAlertsClick","showAllAlerts","MaximumAlertIcon","maxAlerts","userHasPermission","processAlerts","displayedAlerts","collapsed","AlertIcon","currentDate","hasIepAlerts","hasMedicalAlerts","hasFamilyAlerts","hasReleaseAlerts","hasProgramsAndServicesAlerts","programsAndServicesAlerts","hasClassroomAlerts","hasSpecialServices504","fromStudentSearch","setMaxAlertsForcefully","addEllipsis","showEllipsis","onRightClick","viewStudentDetails","reEnrollStudentClick","yearChanged","selectedLayoutChange","medicalShowAlertSubscriptions","observableMedicalShowAlertStream$","getStudentAlerts","showDetailsButton","showDetailsButtonOnStudentHeader","totalStudents","_studentId","loadSelectedStudent","showAlerts","hideAlerts","instanceName","observableSelectedLayoutStream$","selectedLayoutId","observableSelectedLayoutViewTypeStream$","selectedLayoutTypeName","customLayouts","ViewlayoutTypes","selectedViewTypeId","observableYearStream$","getYears","Disabled","setPortalYear","useParentPortalYear","hasPermission","studentSummaryService","getStudentNotesForPopup","StudentNotesPopup","DisplayOrder","OncePerSession","acknowledgedStudentNotes","useYear","useYearChange","updateStudent360Year","updateStudentEnrollment","selectedViewTypeChange","showStudent","getStudentPhoto","getStudentEnrollmentYears","enrollmentYears","getStudentReEnrollStatus","getAlerts","studentAlerts","getStudentPicture","showReEnrollButton","getORYears","allowFutureYears","onlinePayment","EnableOnlinePayment","studentYears","showYearSelector","setSelectedYear","getAllEnrolledYears","onlineRegistration","ORYear","showAYLabel","studentInformationView","courseRequestYear","ShowonPastYear","ShowonCurrentYear","ShowonFutureYear","studentImageClicked","studentImage","ReEnrollYears","frYearsDialogRef","reEnrollStudent","isOverlay","studentViewRouteSubscription","observableStudentInfoRouteStream$","hasProgramAndServicePermission","_hasProgramAndServicePermission","componentFactoryResolver","resolveComponentFactory","studentInformation","viewContainerRef","createComponent","flexDirection","flexGrow","staffPortals","portalName","getStaffPortals","isReportsMenu","mealServiceService","ActivateProgramAndService360","sortByLastName","sortByFirstName","viewAllStudentInThisSchoolYear","courseId","listId","enrollmentDate","getStudentHomerooms","initialStudentNumber","initialFirstName","initialLastName","initialGrade","initialEnrollment","initialEnrollDate","initialDOB","initialSchool","initialStatus","EnrollmentSchool","Enrollment","EnrollmentStatus","rbStatus","lastSelectedStudentClick","validateStudentNumberKey","enterStudentNumbers","chooseColumn","selectAllCheckBoxChange","selectCheckBoxChange","onSelectionChanged","createStudentList","showSelectedStudents","zn","studentGridData","active","regEx","MatTableColumn","compareByDate","searchCriteria","_studentList","currentYear","selectedStudentHistory","recentStudents","allSchoolsValue","schoolsForC360","sortSchools","setPreferences","getStudentSearchPreferences","loadSearchCriteria","loadFilterCriteria","addStudentListPrivilegeId","addStudentList","disableSchoolDropdown","currentSchool","viewAllStudentsInThisSchoolYear","headerMessage","referral","hidNextButton","hideSaveButton","showLargeHeaderMessage","checkErrorForStudents","callFromSpedHome","sortOrder","prop","dir","shortingBy","studentSearchService","unsavedStudentFilter","obtainedRecentStudentQueries","defaultMatTableColumns","showStudentAlerts","selectAllContent","closeClicked","saveStudentSearchPreferences","saveFilterCriteria","activeFilters","ActivateClassroom360","checkStudentFilter","studentNumberRegExp","studentNumberKeyRestriction","filterCriteria","studentNumberFilter","firstNameFilter","lastNameFilter","gradeFilter","enrollmentFilter","enrollDateFilter","dateOfBirthFilter","schoolFilter","statusFilter","clearFilters","studentLists","getStudents","getStudentsBySearchCriteria","studentSearchCalled","originalStudentSearchData","studentSearchData","EnrollmentId","EnrollmentDateAsDate","DateOfBirthAsDate","IEP","HomeRoom_Class","Homeroom_CourseSection","Homeroom_Teacher","StudentDOENumber","State_ID","searchCriteriaLoaded","updateSearchCriteria","processFilters","columnSettings","setMatHeader","prepopulateStudentSearch","inputBuffer","allStudentsSelected","processStudentFilterResults","selectedSchoolChanged","selectedStatusChanged","studentFilterChange","clearColumnFilters","studentFiltersClick","updateRegEx","addStudentListEvent","displaySelectedStudentsModal","defaultCursorPosition","DefaultCursorPosition","ShowStudentAlerts","PrepopulateStudent","showColumn","getRegEx","regularExpressions","_SearchCriteria","getStudentsAllYears","resetSearchCriteria","getShowSchool","_showSchool","getEntryDate","_entryDate","getDroppedDate","_droppedDate","DroppedDate","generalPreferencesSubscription","formatName","isComponentInitialized","middleName","nickName","fullName","observableSelectedStudent","observableStudents","observableStudentEnrollment","observableSelectedProgramAndService","observableOnlinePaymentConfiguration","observableStudentDocuments","observablePanelFilter","observableMedicalShowAlert","lastSelectedStudent","getStudentEnrollments","onlinePaymentConfiguration","_onlinePaymentConfiguration","panelFilter","_panelFilter","medicalShowAlert","_medicalShowAlert","_previousSelectedStudent","_selectedStudent","updateRecentStudents","getStudentIsValidForUser","getParentAssignedStudents","_studentEnrollment","clearRecentStudents","getUserYears","loadYears","EnrollmentYears","updateStudentsNFR","FirstNameNew","MiddleNameNew","LastNameNew","getStudentEnrollmentById","getStudentAttendance","getStudentDailyAttendance","getAcademicHistory","getAcademicHistorySummary","getStudentIdsByStudentNumbers","getStudentSchedule","getStudentGrades","getStudentPrimaryContacts","getSpecialAttendance","getExcessiveAttendance","getAttendanceDaysAndHoursInfo","getStudentDiscipline","getStudentAddresses","getStudentDocuments","deleteStudentDocuments","previousArrayForAlerts","updateSelectedProgramAndService","getStudentsByIds","getStudentsInformation","getStudentsBasicInformation","isStudentSpecialEd","saveStudentDigitalContent","saveStudentPortfolio","getStudentNamesByStudentIds","getStudentTeamAttendanceAbsentTardiesCount","getStudentTeams","getStudentIdByNumber","getStudentsByFamilyId","getHouseholdParentsByFamilyID","getStudentPhotoIdLayout","observableCurrentLanguage","_currentLanguage","setTranslationLanguage","getLanguageTranslations","use","getLanguageId","getLanguageCode","getTranslations","getTranslationsWithRichText","getTranslationStatusForLanguages","saveTranslations","dayClicked","nonAttendanceDates","_nonAttendanceDates","_date","eventDates","_eventDates","populateCalendar","calendarDates","month","startOf","day","add","isToday","isCurrentMonth","hasSchool","hasEvents","changeMonth","monthChange","dayClick","moment","_rollupMoment__default","MAT_MOMENT_DATE_ADAPTER_OPTIONS","InjectionToken","providedIn","useUtc","valueFunction","valuesArray","DateAdapter","dateLocale","_options","setLocale","locale","momentLocaleData","localeData","_localeData","firstDayOfWeek","longMonths","months","shortMonths","monthsShort","dates","range","createDate","longDaysOfWeek","weekdays","shortDaysOfWeek","weekdaysShort","narrowDaysOfWeek","weekdaysMin","getYear","getDayOfWeek","getMonthNames","getDateNames","getDayOfWeekNames","getYearName","getFirstDayOfWeek","getNumDaysInMonth","daysInMonth","_createMoment","today","parseFormat","displayFormat","addCalendarYears","addCalendarMonths","addCalendarDays","days","toIso8601","deserialize","isDateInstance","ISO_8601","obj","isMoment","strict","utc","MomentDateAdapter","MAT_DATE_LOCALE","ɵprov","MAT_MOMENT_DATE_FORMATS","dateInput","monthYearLabel","dateA11yLabel","monthYearA11yLabel","MomentDateModule","useClass","deps","MatMomentDateModule","MAT_DATE_FORMATS","invalidDate","todayClick","updateOn","localValue","innerValue","setDate","_dateInput","dateInputChange","setParentValue","updated","enterPressed","blur","calendarDateChanged","displayValue","displayDateChanged","currentValue","clearIfInvalid","isError","termDisplay","ShowSchedulingSlots","periodDisplay","dayDisplay","gradebookPreferencesClick","Ji","Xt","masterScheduleKendoGrid","ActivateKendoGridInMasterSchedule360","menuSelected","expandDetailSection","wr","showStudentNumberCheck","columnDroppedAndSort","editLayoutsClick","resetAllUsersToDefault","changeAllDefaultLayouts","changeGradePreferenceCourse","SyncPreferencesClick","dropAssignmentHeading","validateField","dropAssignmentSort","changeFillBlankScore","switchRCGType","defaultForStandardsViewChange","CustomSortWarningModal","calculationTypeChanged","ea","wa","co","fl","tl","Lc","Es","hu","gd","wd","filler","activateClassroom360","useUnifiedLoginPage","UseUnifiedLoginPage","c360ShowCommunicationLog","C360ShowCommunicationLog","classroom360AttendanceCommentsEditable","Classroom360AttendanceCommentsEditable","activateAttendanceAdministration","ActivateAttendanceAdministration360","initialTab","selectedPreferenceTab","isDefaultPreferences","getMyClass","getUserPermission","getSchoolYearSettings","getGeneralPreferences","getDataQueryPreferences","getAttendancePreferences","getClassroomSummaryPreferences","getCommunicationLogPreferences","getMasterSchedulePreferences","getPeriodStatisticsPreferences","getScheduleStudentListPreferences","getClassesByCoursePreferences","getClassRosterPreferences","getRoomSchedulingSettingsPreferences","scrollToElement","gradebookPreferencesDiv","columnsInScoreGridRow","setGradebookStudentNumberColumn","AvailableColumns","staffAssignedPortalNames","viewAllStaffCommunicationLogs","allowDisciplineQuickEntry","disciplineQuickEntryUserSelectLayout","disciplineQuickEntryUserCreateLayout","disciplineQuickEntrySetDefaultSchoolLayout","disciplineQuickEntrySetDefaultDistrictLayout","getLayoutType","AdditionalTeacher","additionalCourses","getGradebookPreferences","setEmailAddress","sendingEmailAddress","getUserSchoolYear","DefaultYearIdentifier","getCurrentYearSchools","getCurrentYearSchoolsV9","currentYearSchools","userSchoolYearPolicies","schoolYearSettings","PageSize","attendancePreferences","ShowAlert","DisplayStudentAlertsOnAttendance","getBehaviorPreferences","behaviorPreferences","defaultUserLayoutId","Layout_ID","classroomSummaryPreferences","communicationLogPreferences","selectedGradebookClass","SyncPreferencesAcrossCourses","ShowInactiveStudents","ShowDroppedWithdrawn","DisableAutoSave","AutoSave","AllowQuickAddAssignments","UseQuickAddWindow","DefaultParentPublish","DefaultShowOnPortal","singleAdditional","multipleAdditional","additionalTeacher","additionalTeacherClassFocus","IsAllowTeacherToSetFinalGradeCalculation","FGradeCalculationType","SemesterFinalGradeCalculationPoints","SemesterFinalGradeCalculationCombo","SemesterFinalGradeCalculation","IsAllowTeacherToSelectAssignmentRoundingInGB","NumericalGradeRoundTo","IsAllowTeacherToSelectGPRoundingInGB","IsGPCWRoundDown","GPCWRound","IsGPCWRoundUp","GPCWRoundToValue","IsAllowTeacherToSelectSemRoundingInGB","IsSemFinalRoundDown","SemFinalRound","IsSemFinalRoundUp","SemFinalRoundToValue","getWarnIfCalculationPreferencesChanged","warnIfCalculationPreferencesChanged","SiteSubjectListId","AutoSaveDuration","setDefaultForStandardsView","StudentSortOrder","gradebookStudentSortOrderOptions","ResetPreferences","getGradebookPreferencesResetWarningWindow","gradebookSpecialMarks","Locked","IsEdited","OperationDescription","IsUsedInCurrentYear","masterSchedulePreferences","periodStatisticsPreferences","scheduleStudentListPreferences","classesByCoursePreferences","classRosterPreferences","roomSchedulingSettingsPreferences","FillBlankScores","FillBlankScoreValue","scoreValue","FillBlankScoreSpecialMarkId","ReportCardGrades","ShowProgressCycles","ShowTerms","ShowSemesters","ShowYearEnd","ShowAllTerms","appFavorites","SummaryCharacterCount","SummaryCharacterSlideCount","saveBehaviorDefaultLayouts","saveUserDefaultLayout","saveRequests","updateGradebookPReferences","openLayoutEditor","getBehaviorLayout","defaultSchoolLayouts","School_Domain","LayoutType_Id","Layout_Id","allLayoutsId","checkShowPortal","checkForChildPortals","rowDetailExpand","staffAssignedPortalsCopy","LOGIN","STUDENTS","COMMENTS","REPORTCARDGRADES","STANDARDS","ROUNDING","userGBPreferencesPermission","PrimaryTeacherWarningModal","AdditionalTeacherWarningModal","NoGradingClassesModal","AssignmentHeadingCheck","AssignmentHeading","C360GradebookAssignmentsLongSummary","$","isNumeric","setCalculationValues","CalculationPreferencesWarningModal","ProjectFutureScores","projectScoresDialog","syncPrefDialogRef","syncPreferencesAcrossCourses","noGradingClassesDialogRef","customSortWarningDialogRef","additionalTeacherWarningDialogRef","primaryTeacherWarningDialogRef","calculationPreferenceWarningDialogRef","ColumnsToShow","attendanceRestrict","attendanceRestrictNumber","AssignmentSort","LinkOrder","getStaticAttendanceColumnColor","showSchedulingTab","showClassroomSummaryOption","ad","pc","Ws","pu","Xc","_c","observablegeneralPreferences","observableAttendancePreferences","observableClassroomSummaryPreferences","observableCommunicationLogPreferences","observableDataQueryPreferences","observableMassEmailPreferences","observableFavoritesPreferences","observableBehaviorPreferences","observableStudentPortalMenuPreferences","observableStaffPortalMenuPreferences","observableMasterSchedulePreferences","observableClassRosterPreferences","observablePeriodStatisticsPreferences","observableScheduleStudentListPreferences","observableClassesByCoursePreferences","observableRoomSchedulingSettingsPreferences","observableMyReportsPreferences","_generalPreferences","_attendancePreferences","_classroomSummaryPreferences","_communicationLogPreferences","_dataQueryPreferences","_massEmailPreferences","_gradebookPreferences","_favoritesPreferences","_behaviorPreferences","_studentPortalMenuPreferences","_staffPortalMenuPreferences","_masterSchedulePreferences","_classRosterPreferences","_periodStatisticsPreferences","_scheduleStudentListPreferences","_classesByCoursePreferences","_roomSchedulingSettingsPreferences","_myReportsPreferences","saveAttendancePreferences","staffPortalMenuPreferenceObservable","studentPortalMenuPreferenceObservable","favoritesPreferencesObservable","observableCurrentUser","observableStudentInfoRoute","languageId","_currentUser","cards","_cards","logoutUser","password","getUserLanguage","getAllUserSchoolYearPolicies","getUserRoles","emailAlreadyExists","setUserLanguage","changeUserPassword","getDefaultYear","deleteLink","updateLinkSequence","userLinks","getImpersonateByUser","setNotificationPreferencesMenu","markWelcomeAsSeen","updateStudentViewRoute","getUserPermissionBySchoolIds","isGALDSRoleAssigned","isAZEdsRoleAssigned","processADEConnect","getUserIsTeacher","getUserIsNurse","getSchoolYearByFacultyStaffId","allowValidation","emailFormat","falseyRequired","falseyRequried","absentNotices","attachmentMatTable","level","showingChildren","lastChild","parentSelected","parentShowChildren","rowKeydown","_data","_viewContainerRef","destroyed","context","_renderedRange","count","_updateComputedContextProperties","assembleData","flatData","filterShown","trackByID","observableDefaultYear","observableStudent360Year","observableYears","observableSchools","observableSetSchoolDisabled","observableSetYearDisabled","_previousYear","_defaultYear","_student360Year","_years","_studentYears","_yearsForC360","_schools","_schoolsForC360","updateSelectedYear","getSchoolsForSelectedYear","CourseRequestYear","defaultCourseRequestYear","getDefaultCourseRequestYear","updateSelectedSchool","isCurrentYear","isBetween","getCurrentYear","setCurrentAttendanceDate","getSchoolsFromYears","loadYearsForC360","CurrentAttendanceDate","getUserSchools","userSchools","getAllSchoolYearsInDistrict","getDistrictYearsOnly","getDistrictYearbyIdentifier","getAllSchools","getSchoolsStudentIds","isDateWithinCurrentYear","isDateWithinGivenYear","stripHTML","districtMessages","showAttachment","classAnnouncements","showDistrictMessages","inputDate","inputString","student360","getAnnouncements","noAnnouncements","observableIsPageLoadedStream$","schoolNames","schoolExpanded","gotAnnouncements","announcementService","getStudentAnnouncements","announcements","studentEnrollments","virtualize","getStaffAnnouncements","filterAnnouncements","showTableFlags","PrimaryEnrollment","AnnouncementType","studentInfoView","getRevisedDate","RevisedDate","broadcast","checkBroadcast","checkingBroadcast","ActivateBroadcast","BroadcastInterval","toLogDate","fromLogDate","openAddEditAttachmentDialog","AttachmentRecords","CommunicationLogId","getCommunicationLog","getCommunicationLogCount","convertReasons","convertInformOthers","saveCommunicationLog","saveCommunicationLogs","deleteCommunicationLog","saveCommunicationLogAttachment","deleteCommunicationLogAttachment","getCommunicationLogAttachment","getAttachmentById","displayTime","numberValueChanged","telephoneValueChanged","dateValueChanged","_internalIndex","customFieldIncrementor","internalIndex","_fieldName","getFieldMetadata","_label","controlTypeID","_controlTypeID","_readOnly","checkFieldPermissions","_required","transformDataType","textValue","setTelephoneDisplayValue","persistValue","_masterId","dataStore","CustomFieldID","MasterId","allowControlToHandleOwnData","_allowControlToHandleOwnData","DateTime","timeControl","observablePermissionStream$","observableobservableFieldMetaDataRetrievedStream$","metaDataRetrieved","setUpControl","PageIndex","pageIndex","userCanView","allowNegatives","StartRange","DecimalPrecision","userCanViewField","userCanEditField","setReadWriteAccess","getCustomFieldDataObject","customDataFieldValueChanged","telephoneDisplayValue","retrieveValueFromDB","getCustomDataFieldValue","validateCustomField","ignoreRequired","localDateValue","concatDateAndTime","localTimeValue","setLocalDateTime","getTimeFieldWidth","showNowButton","getNewDataStore","isChildTabs","showTabs","_isChildTabs","_dataStore","tabGroup","_tabGroup","selectedTabChange","handleSelectedTabChange","_handleClick","interceptTabChange","_tabs","setTabs","tabGroupIsGettingMetadata","isDirtyChange","getMetadata","isDirty","pageComponent","designPageComponent","designPage","observabledesignPageStream$","getControlsOnAllTabs","massGetCustomDataFieldByFieldName","getValues","CustomFieldMasterId","getAllCustomFieldControls","customPageIndex","observableFieldValuesRetrieved","matTab","_allTabs","ngAfterContentInit","canShowForm","toArray","previousTabIndex","arguments","tabChangeErrors","validateAllPages","validateControls","validateSinglePage","getTabIndexByName","saveAllCustomPages","saveAllCustomFieldsInMemory","showErrorsOnInitialize","textLabel","refreshValuesForAllCustomPages","clearStoredData","updateMasterIDForPersistedData","designPageIndexIncrementor","_canShowForm","loadViewer","showViewer","customPage","_customPage","validationTriggerSubscription","validationErrors","_isDirty","CFDataStore","getControlValues","observableFieldValuesRetrievedStream$","dataInitialized","ShowSubmittedBy","hideTitle","setFormData","reconcileChangesToCustomPage","LocalVersion","SystemVersion","validateButton","_pageComponent","_designPageComponent","_tabGroupIsGettingMetadata","observablesBasePageOnly","observableCustomDataFieldValueChanged","observableClearStoredCustomFieldDataStream$","clearAllStoredCustomFieldData","updateBasePageOnly","basePageOnly","getCustomDataFieldByID","getCustomFieldDataTypes","getCustomFieldControlTypes","updateCustomDataFieldValue","getCSTModules","getCSTObjects","getDataDefinitionListsWithCodes","dataDefListSubjects","dataDefSubjects","importCustomFieldsFromClassic","checkClassicFieldsForDuplicateNames","getCustomPagesByModuleObject","massUpdateCustomDataFieldValue","EndRange","validateAllCustomFieldsInMemory","IsDirty","dataStores","removeCustomFieldDataObject","clearStoredCustomFieldDataByObject","IsSecured","ViewPermissionGroupIDs","WriteSPName","ModifyPermissionGroupIDS","getCustomPageSystemTemplateByID","compareSystemPageToLocalPage","reconcileChangesToDesignPage","Version","BaseVersion","designPageId","showAddButton","viewDesignPagesComponent","allowViewEdit","getSubTitle","subtitle","ModuleName","designPageUpdated","designPageUpdatedHandler","addVersion","editPageClick","initializedEFormViewerEvent","observabledesignPage","userControlsInitialized","systemControlsInitialized","_designPage","_contentTemplates","updateContentTemplates","dataValues","_dataValues","updateDataValues","manualDataUpdateTrigger","_eFormViewer","getCustomDataFieldMetaData","content","getDesignPages","userCanEditPage","securitService","metadataRetrieved","designPageID","getControlByRefName","dataValuesChange","pageLoaded","IgnoreRequiredFields","ignoreRequiredFields","getValueByRefName","setValueByRefName","setEditableByRefName","eFormViewerInitialized","templateChanged","DesignPageID","newTemplate","isDuplicate","viewClick","toggleActiveStatusClick","editDescriptionClick","userDefinedPages","_userDefinedPages","openDesigner","openViewer","updateSelectedPage","updateBasePageFlag","updateBasePageEvent","singlePageMode","HideLanguageDropDown","devMode","HasDetailRows","allDesignPages","DisableSubmission","addUserPageClick","rowsExpanded","revertClick","modalInstanceCloseClick","resetLanguage","saveRegisterParent","registerParent","sendRegisterParentEmail","parentAlreadyExists","getFamilyRegistrationAddressSettings","saveRegisterParentAddress","getFamilyRegistrationStudents","studentAlreadyExists","saveFamilyRegistrationStudents","AyIdentifier","CheckExistingEmail","studentSelect","EnrollmentGradeLevel","angularMatDataStudents","modalInstanceCancelClick","modalInstanceContinueClick","validateStudents","modalInstanceNextClick","modalInstanceOKClick","sampleData","YearID","FamilyID","Programs","Adults","Children","IsStudent","IsEnrolled","PeopleID","IncomeTypeIds","calculateAnnualHouseholdIncome","Income","convertIncomeToAnnual","Per","Hours","Amount","getAdultIncomeTypeByPage","pageHasBeenCompleted","CompletedPages","PageID","IsSingleChildPage","ChildID","IsSingleAdultPage","AdultID","sendAcceptedEmail","getApplicationLunchStatusById","generateEmailBodyAndSend","FamilyLanguageId","SendMailingsInSpanish","selectedLetterTemplate","Body1","Body1Spanish","LunchStatus","Body2","Body2Spanish","EmailTo","SubmittedByEmail","DisplayEmailToOnComment","HtmlBody","checkForStudentChange","EnrollDate","checkForParentChange","getActiveFrmaPageById","getDefaultFrmaPages","getAllFrmaUserTemplates","updateFrmaUserTemplate","setActiveFrmaTemplate","getFrmaPageGroups","getFrmaPages","getFrmaPrograms","getFrmaChildIncomeTypes","getFrmaAdultIncomeTypes","getFrmaAdultIncomeSubTypes","saveFrmaApplication","staffUpdateFrmaApplication","getFrmaAppsByFamilyID","getFrmaAppWithPdf","getFrmaAppsByYearID","getFrmaApplication","getFRMAStudentStatus","deleteFrmaApplication","getFrmaPreviousChildren","getFrmaPreviousAdults","deletFrmaeUserTemplate","getPageChangeHistory","getFrmaFamilies","getFrmaLetterTemplateById","getProjectedLunchStatusById","acceptApplicationAndMergeIntoClassic","getFRMAYearsForParent","getFRMAStudentsByFamilyId","getAcceptanceHistoryByAppID","addAcceptToApplication","ci","$i","person","getSuffixes","suffixes","suffixChange","selectedSuffix","SuffixID","idIncrementor","frmaComment","addChildClick","addAdultClick","saveAndFinishLaterClick","unenrolledStudentClick","signatureBoxClick","fosterCareChange","deleteChildClick","deleteAdultClick","adultHasIncomeClick","shareWithRadioClick","shareInfoClick","certifiedBoxClick","qr","kn","On","xr","Xr","Fa","zi","isDesignMode","appData","application","freeReducedMealAppService","selectedChild","selectedAdult","unenrolledChildren","districtName","DistrictName","observableMergeFieldsRetrievedStream$","updateMergeFieldValues","setConfig","showDesigner","getFamilyStudents","getFamilyParents","setUpApplication","getPrograms","getChildIncomeTypes","getAdultIncomeTypes","getAdultIncomeSubTypes","getMealWaiverLookups","loadDesigner","interceptStepChange","loadTemplateControls","frmaService","adultIncomeClicks","adultIncomeSubTypeClicks","childIncomeClicks","AllowSaveToDB","frmaContainer","setPageData","eFormViewerInstance","printFlag","frmaPagesEnum","CertifyandSubmit","changePage","getNextPageIndex","ApplicationAsPDF","saveApp","pageGroups","allPages","setApplicationData","getPreviousPageIndex","PageGroupID","selectedStepIndex","customTemplateList","generateCustomDataTemplateRef","showFamilyChangedWarning","originalApplication","programs","IsHouseholdProgram","childPrograms","IsChildProgram","ProgramID","normalizeChildPrograms","ContinueorSubmit","childIncomeTypes","adultIncomeTypes","allAdultIncomeSubTypes","filterAdultIncomeSubTypes","mealApplicationConfidentiallyWaiverLookups","normalizeMealWaiverPrograms","InfoSharing","WaiverProgramID","AppID","isSigned","SignedBy","signatureRef","caseNumberRefs","CaseNumber","ShortName","isFosterFamily","IsFosterChild","isMckinneyVento","isMEP","isRunawayYouth","continueOrSubmit","HasIncome","suffixPipe","ChildIncomeTypeID","getChildIncomeElementRef","Question","IsDeployed","adultIncomeSubTypes","AdultIncomeTypeID","AdultIncomeSubTypeID","validateAdultIncome","NoSSN","LastFourSSN","ssnRef","ShareWith","formatErrorFieldname","isCertified","CertifiedBy","iCertifyRef","adultIncomeDetails","childIncomeDetails","forms","FosterCare","YourChildrenCanAlsoQualify","TheNextFewQuestionsAreAboutYourChildrensIncome","childIncomeType","getElementReference","getAdultIncomeElementRef","adultIncomeSubType","checkForPreviousChildren","checkForPreviousAdults","setInfoSharingColumns","setUnenrolledStudentLabel","mergeFieldTrigger","setSelectedChild","setSelectedAdult","familyWarningShown","setCompletedPage","OtherChildrenInTheHousehold","previousChildrenChecked","previousPeople","isChildren","WhatAdultsLiveInYourHousehold","previousAdultsChecked","isAdults","SharingInformationwithOtherPrograms","infoSharingColumns","StudentsInTheHousehold","unenrolledStudentLabel","getPreviousAdultIncomePageIndex","getNextAdultIncomePageIndex","appSaved","ConvertedToAnnual","generatePDF","CreatedBy","SignedDate","SignedByName","CertifiedDate","CertifiedByName","childProgramChange","selectedAdultdHasIncome","adultHasSubTypeClick","addAdultIncome","selectedAdultdHasSubType","canShareStudentInfo","frmaAdultDetailsIncrementor","adult","adultIncome","adultHasIncome","app","txtAmount","ddlFrequency","txtHours","ddlPer","addChildIncome","frmaChildDetailsIncrementor","child","childIncome","childHasIncomeClick","childHasIncome","localIterator","amount","_amount","formattedAmount","decimalPipe","amountChange","frmaPersonIncrementor","authority","OidcSettings","Authority","client_id","ClientId","redirect_uri","RedirectUri","silent_redirect_uri","SilentRedirectUri","post_logout_redirect_uri","PostLogoutRedirectUri","response_type","scope","userManager","addUserSignedOut","removeUser","gotoPostLogoutUrl","addAccessTokenExpired","getUser","login","signinRedirect","renewToken","signinSilent","logout","signoutRedirect","signinCallback","signinRedirectCallback","signinSilentCallback","passwordsMustMatch","Student360StaffPasswordCaseSensitive","PasswordCaseSensitive","PasswordRequiresUpper","mustContainUpperCase","notValidEmail","PasswordRequiresNumeric","mustContainNumeric","PasswordRequiresSpecial","mustContainSpecial","Password","mustBeDifferent","PreventEqualPassUserName","notSameAsUsername","PasswordRequiresMixedLettersAndNumbers","requiresMixedLettersNumbers","ExpiredPasswords","PreventPasswordReuse","preventPasswordReuse","observableLogin","observableLoginError","observableIntegrateWithTylerU","IntegrateWithTylerU","_IntegrateWithTylerU","getDistrictSettings","getOIDCSettings","logonTID","getApplicationVersion","saveDistrictSettings","logon","logonGoogle","getForgetPasswordDetail","getRegisterParent","getRegisterParentInfo","getUserDefaultSchoolYearIsBlocked","saveUserLoginInfo","getClientInformation","sendForgetUserNameEmail","saveForgetPassword","sendForgetPasswordEmail","saveTylerAccessHistory","changeValue","selectClass","prevClick","runClick","reportName","userPreferencePageName","reportParameter","reportType","getLookups","getTerms","getResidencyCodesLookup","reportParameters","ResidencyCodes","getEnrollmentCategoriesLookup","CategoryCodes","getAllGradeLevelsLookup","getAttendanceCodesLookup","AttendanceCodes","populateDataSourceFromLookup","historyCodesToTally","tallyTardiesCodes","daysCodes","todaysCodesToTally","isValueChange","isReportList","PrintDate","AttendanceDate","FromPeriod","MinumumPeriodPerDay","ToPeriod","MaximumPeriodsPerDay","TermId","SelectHistoryDates","pub_blnSelectHistoryDates","pub_datHistoryFrom","HistoryFrom","getMonthDayYear","pub_datHistoryTo","HistoryTo","SelectResidencyCodes","pub_blnSelectResidencyCodes","ResidencyCodeFrom","pub_strResidencyCodeFrom","ResidencyCodeTo","pub_strResidencyCodeTo","SelectCategoryCodes","pub_blnSelectCategoryCodes","CategoryCodeFrom","pub_strCategoryCodeFrom","CategoryCodeTo","pub_strCategoryCodeTo","SelectGradeLevels","pub_blnSelectGradeLevels","GradeLevelRankFrom","pub_strGradeLevelRankFrom","GradeLevelRankTo","pub_strGradeLevelRankTo","setGradeLevelFrom","setGradeLevelTo","setSelectedItemsFromUserPrefereneces","pub_strHistoryCodesToTally","HistoryMinMax","pub_blnSelectHistoryCountMinMax","HistoryCountMin","pub_intHistoryCountMin","HistoryCountMax","pub_intHistoryCountMax","TallyTardies","pub_blnTallyTardies","tallyTardiesCodesIds","pub_strTallyTardiesCodesIds","pub_blnIncludeAllAbsences","IncludeAllAbsences","pub_blnOnlyPeriodsforEachSection","OnlyPeriodsforEachSection","Count1Day","pub_blnCount1PerDay","SplitABDays","pub_blnSplitABDays","historyCodesToTallyIds","pub_strHistoryCodesToTallyIds","pub_strTallyTardiesCodes","pub_blnDaysFullHalfSelect","DaysFullHalf","pub_strDayFullHalfCode","FullDay","pub_blnFullDay","HalfDay","pub_blnHalfDay","dayFullHalfCode","DaysCountMin","pub_intDaysCountMin","DaysCountMax","pub_intDaysCountMax","pub_blnTodaysCurrentTally","TodaysCurrentTally","pub_strTodaysCodesToTally","todaysCodesToTallyIds","pub_strTodaysCodesToTallyIds","CurrentMinMax","pub_blnCurrentMinMax","CurrentCodesTallyCountMin","pub_intCurrentCodesTallyCountMin","CurrentCodesTallyCountMax","pub_intCurrentCodesTallyCountMax","DoubleSpaceAfterStudentName","pub_blnDoubleSpaceAfterStudentName","ShowHistoryRecords","pub_blnShowHistoryRecords","ShowOnlySelectedRecords","pub_blnShowOnlySelectedRecords","ShowComments","pub_blnShowComments","pub_blnIgnoreAttendance","IgnoreAttendance","ShowPresentCount","pub_blnShowPresentCount","pub_strReportTitle","pub_intReportType","pub_blnParentInfo","pub_strStudentSelectionStatus","getSelectedItemsAsDelimitedString","pub_strHistoryPeriodsToTally","hasStringValueNotEmpty","pub_blnShowCurrentAtndSteps","pub_blnNotEnrolled","pub_blnConsecutiveDays","getTermsforCourses","Terms","TermTypeId","LongDescription","cancelShowReportParameters","fromPeriod","toPeriod","ReportGridData","getTeacherPreviewGridData","isDataExist","selectAllReportGridData","Select","workflowReport","reportTitle","historyFrom","historyTo","residencyCodeFrom","residencyCodeTo","categoryCodeFrom","categoryCodeTo","GradeLevelFrom","gradeLevelFrom","GradeLevelTo","gradeLevelTo","historyCountMin","historyCountMax","minIsGreaterThanMax","fullDay","daysCountMin","daysCountMax","currentCodesTallyCountMin","currentCodesTallyCountMax","setReportParameters","SiteSectionId","siteSectionIds","paramname","getSelectedIdsAsCommaDelimitedString","addToReportQueue","openStudentAttachment","setGradeLevelRankFrom","setGradeLevelRankTo","runV9Report","openReportQueueList","openStudentAttachmentReport","handleCheckboxAll","showRun","thisDialogRef","toISOString","radValue","pub_blnPrintNoField","pub_blnPrintStudentId","SkipLineBetweenStudent","pub_blnSkipLinesBetweenStudent","PrintWithGreyHeading","pub_blnPrintWithGreyHeadings","PrintStudentAbsencesAlreadyEntered","pub_blnPrintStudentAbsencesAlreadyEntered","PrintTeacherSignatureLine","pub_blnPrintTeacherSignatureLine","OtherFields","pub_strOtherField","OtherField","teacherUserId","pub_blnPrintOtherField","reportQueueList","termChanged","selectDepartment","selectTeacher","runReportClick","reportTitleInSystem","showDepartment","selectedTeacher","populateParameters","getFilteredCourses","ValueField","filteredCourses","TextField","allCourses","selectedFacultyStaffId","TeacherId","getDepartments","getDistrictDepartmentsReadForGradebookAssignmentsLookup","departments","selectedDepartment","AddTermAll","getUniqueCourses","courses","teachers","addCoreParameters","addCoreParametersV9","v9parameterName","strReportDate","strReportSiteHeader","strReportTitle","strSiteYearCode","lngSiteYearId","strOutputFile_NOFILE","strReportTime","blnCalledFrom360","pub_blnCalledFrom360","getDay","Week1Date","subtract","Week2Date","setReportTitle","week1Date","week2Date","exportCLick","removeItem","Parameters","TabName","IncludeLineAtEndOfGroup","IncludeLineAtStartOfGroup","parameterChanged","selectAllGridRecordsChange","ln","ft","Ii","setParameterRows","getParameterStyle","ParameterStyle","chunkedParameters","RowNumberInTable","IsLetterParameter","ParentValue","DataSource","changingThisBreaksApplicationSecurity","validationFields","getV9ReportParameterValidation","validateRequiredFields","IsVisible","medicalAreaChkChange","dateChange","strStateCode","GridDataSource","MEDICALAREA","areaList","Fileds","FIELDDATATYPE","FIELDTEXT","SUBID","DEFAULTVALUE","Lookup","FROM","TO","FIELDVALUE","Yi","getScreeningToolStr","createNewParam","syncParametersEvent","Hint","ColumnNumberInTable","SpanNumberOfRows","SpanNumberOfColumns","ChildPaddingLeft","ShowOptionsVertically","UserPreferencesParameterName","LookupProcedureName","GridDataSources","ColumnToDisplay","ColumnControlSpec","selectedStaffNames","selectedStaffNumbers","staffpickerControlType","saveRCMessages","parameterDropdownlistSelectChange","getIndex","syncParameters","lr","gridDataMatDatasource","selectedSiteSectionId","selectedSectionId","selectedStudentIds","studentSelection","blnReportCardsGrade","exportOnly","getV9StudentNameFormat","getV9ReportParameters","showExportButton","blnSaveReportCardMessage","reportForSaveRCM","getV9ReportParameterStudentNameFormat","studentNameFormat","studentMiddleNameFormat","WorkflowReport","gridDataSource","includeInOutput","printReportWithValidation","selectedStudentIdsArray","studentListSelectorDialog","alert","selectAllGridRecords","printReport","MinimumStudentsForWorkflow","ReportParameterClassName","ReportValue","getFileName","runV9ReportByParameter","getMilliseconds","getV9ReportParameterSelectionByLookupName","controlConfig","blnIsParameterLink","strParameterLinkName","parameterSelectionChange","imageIconName","parameterLinkClick","_compare","saveReportCardMessage","checkChar","lastIndex","lastValue","getV9ReportParameterBtnRefreshData","changeTerm","MediumDescription","PrintComment","PrintAdds","SiteSectionIds","messageLine1","messageLine2","removeArchivedFiles","exitClick","_reportName","viewArchiveProcessesFromAllUsers","allowCancelArchiveProcesses","allowDeleteArchivedReports","getDateWithoutTime","SelectedReport","getReportBatches","setAddedOnDate_Display","ReportBatches","filteredBatches","getAddedBys","getMinDate","selectedProcess","processes","ProcessingDescription","AddedByName","addedBys","addedBy","AddedOnDate_Display","fromDateChanged","getFilteredItems","processChanged","isThisDateEqualToOrAfterThatDate","itemExistsInArray","confirmCancelArchiveDialogRef","confirmCancelArchiveDialog","cancelBatch","InProcess","cancellingReportBatch","RemoveArchivedFiles","startCancelReportBatchCleanupProcess","getAddedOn","getStatusFontColor","refreshClick","saveChecked","hideChecked","selectedReportToConsole","defintionsToConsole","userHasDistrictPermissions","userHasPrivilegeAddEditDistrictReportDefinitions","isDistrictDefinitions","isFromMenu","getDefaultReportParametersForUser","getReportDefinitions","getReportParameters","ParameterReportDefinition","IsDistrictReportDefinitions","getUnsavedChanges","saveReportOptions","saveAllChanged","reportDefinitions","isDisabled","SaveChecked","hideAllChanged","HideChecked","HasParameterValueDefined","IsDistrictDefinedParameter","CanSave","IsHidden","IsUserDefinedParameter","Login_ID","login_ID","setBackgroundColorForSavedDefinition","saveReportOptionsClick","IsSystem","AllowUserSaveParameter","AllowUserHideParameter","HasReportDefinition","isSaveDisabled","IsDistrictReportDefinitionsChanged","BackgroundColorForSavedDefinition","backgroundColorForDistrictDefinedDefinition","backgroundColorForUserDefinedDefinition","reportLegendDialogRef","reportLegendDialog","howToClick","howToDialogRef","howToDialog","snapshotToDelete","autoRunSnapshot","autoRunDate","TimeStamp","_autoRunDate","AutoRunReportSnapshots_ID","deleteReportSnapshot","snapshotDeleted","ReportFolder","getReportSnapshot","snapshotDeleteClick","IsReportSearch","selectedFolderId","selectedReportFolderId","Reports","allReports","ReportFolders","Snapshots","SelectedSnapshotFolder","selectedFolderName","getReportForAllFolder","allSnapshots","getsortedDistinctReports","sortedReports","compare","isSnapshotVisible","snapshotCheckAllClick","snapshotCheckAll","snapshotCheckClick","selectedFolderChanged","confirmDeleteSnapshot","deleteSnapshotDialogRef","deleteSnapshotDialog","deleteSnapshotAfterClosed","reportSnapshotsClick","reportOptionsClick","reportClicked","reportSettingsClick","autorunSettingsClick","expandAllV9","reportSettingsV9Click","allowAutoRunReport","useReportDefinitions","isForSchedule","showNoFoldersMessage","_showNoFoldersMessage","getMyReportFolders","loadReportData","expandAllFoldersClick","expandAllFolders","expandAllRows","ReportModules","IsDetailRowExpanded","expandCollapseFolder","openReportParametersWindow","reportParametersDialogRef","reportParametersDialog","reportSettingsDialogRef","reportSettingsDialog","AllowAutoRun","reportAutoRunMessageDialogRef","reportAutoRunMessageDialog","AutoRunSchedule_ID","reportOptionsDialogRef","reportOptionsDialog","reportSnapshotsDialogRef","reportSnapshotsDialog","ClassListAllDialogRef","ClassListAllAttendanceNotMarkedDialogRef","TeacherSummaryPreviewDialogRef","TeacherSummaryPreviewDialog","isDistributebyEmail","selectedRecipients","distributeByEmailOption_StudentSelected","distributeByEmailOption_PrimaryContactSelected","distributeByEmailOption_AllElectronicContactsSelected","archiveToStudentDigitalContentChecked","archiveToStudentPortfolioChecked","archiveToTCMChecked","MailServer","emailFrom","emailSubject","allowArchiveToStudentDigitalContent","AllowStudentDigitalContent","allowArchiveToStudentPortfolio","AllowStudentPortfolio","allowArchiveToTCM","AllowTCMArchiving","studentDigitalContent","newFile","fileNameString","descriptionString","batchDescription","populate_TCM_DocumentTypes","studentPortfolio","portfolioService","getPortfolioCategories","portfolioCategories","OnDestroy","DocumentArchivePermissions","PrivilegeType","tcmDocumentTypes","checkInputs","confirmArchiveReportDialogRef","confirmArchiveReportDialog","prepareArchiveReportAsync","archiveToStudentDigitalContent","documentTypeIdString","StudentDigitalContent","ArchiveToStudentDigitalContent","archiveToStudentPortfolio","fileCategoryId","FilePath","StudentPortfolio","ArchiveToStudentPortfolio","archiveToTCM","TCM_DocumentType","selectedTCMdocument","ArchiveToTCM","IsArchiveReport","archiveReportAsync","Operations","getCurrentUserName_FNLN","AddedByLogin_Id","getCurrentUserId","BatchDescription","sendEmailNotification","DistributeByEmailOption","sendEmailStudent","sendEmailPrimaryContact","sendEmailAllElectronicContacts","EmailSubject","EmailBody","emailBody","addReportBatch","reportBatch","startReportBatch","openArchiveProcess","archiveProcessDialogRef","archiveProcessDialog","populateEmailBody","documentTypeInput","fileCategoryInput","documentTypeTCMInput","validateEmailFields","emailSubjectRef","emailFromRef","getEmailRegexp","sendToEmailChecked","studentSearchClick","ddbcblChanged","showHiddenParametersChecked","isDebugModeInProductionChecked","getQueryString","SelectedReportToConsole","archiveReportClick","distributeByEmailClick","runReport","autoRunSaveClick","cancelSendToEmailClick","isTylerAdmin","utilizeDistributebyEmail","UtilizeDistributebyEmail","isDebugModeInProduction","showReportToConsole","AllowAutoRunReport","showReportToPDF","showCancelSendToEmail","showCancelShowReportOptions","showHiddenParameters","hiddenParametersLabel","userEmail","AutoRunReport","isInFolder","utilizeTranscriptTracking","UtilizeTranscriptTracking","IsDistributeByEmail","HasDistributeByEmailParameter","HasUniqueStudentParameter","showDistributebyEmail","EmailsToSendReport","initParameters","setBackgroundColorForSavedDefinitions","isAllReports","isMyReports","maxTableCellsPerRow","maxNumberOfColumns","ParamColWidth","SetBackgroundColorForSavedDefinition","getBackgroundColorForSavedDefinition","ChunkedParameters","chunkParameters","handleDistributeByEmailOption","IsSystemHiddenParameter","Group_ID","getGroup","getParameterRows","IsStartOfVisibleGroup","IncludeGroupLabel","GroupLabel","getParameterRowParameters","handleParameterGroups","HasParameterInGroup","AlreadyCheckedForGroupStart","IsInGroup","AlreadyCheckedForGroupEnd","IsEndOfVisibleGroup","ParameterHasBeenAddedToRow","MaxNumberOfParameters","SpanEntireRow","setParameterHasBeenAddedToRow","confirmReportToEmailDialogRef","confirmReportToEmailDialog","executeDistributeByEmailAsync","archiveReportModalDialogRef","archiveReportModalDialog","ReportDefinitions","radioButtonChange","datePickerChanged","validateFields","SendToEmail","emailsToSendReport","runReportToEmail","executeRunReportToEmailAsync","distributeByEmail","cancelShowReportOptionsClick","ShowReportOptions","AutoRunComponent","getColumnWidth","getFlexDirection","getArrangeDirection","getWrap","NoWrap","ddlChange","MultiValue","handleAllChecked","IsParent","RC_ID","textChanged","ReportFormat","rblChanged","cblChanged","StudentSearchDialogRef","studentSearchDialog","selectedStudentSearch","studentListString","getReportQueueQuery","debugMessage","getBooleanValue","legendItem_1","legendItem_2","startDate","_startDate","endDate","_endDate","setAllCheckbox","deleteReportQueue","formChanged","saveFilter","path","reportQueqe","selectedSchool","GroupPermissionName","ShowAllUsers","ShowCompleted","Running","Completed","ErrorStatus","getReportsQueue","reportsQueue","checkedAll","selectedReportQueue","applyFilters","getCheckedIds","RunDate","deleteReportsQueue","deleteSelected","refreshPage","isPanelPreviousFiltered","ReportStatus","SISCode","isSameOrAfter","isSameOrBefore","gridWidth","initialFilter","isPanelFiltered","printable","documentTitle","css","ignoreElements","targetStyles","yearChange","schoolChange","selectedFolderIds","setFrequency","maxReportSnapshotAllowed","AutoRunTime","convertTime24to12","AutoRunFrequency","AutoRunDate","initFolder","ReportInFolder","foldersChkAll","noFolderSelected","setSelectedFolders","convertTime12to24","hoursNum","autorunForm","AutoRunDay","AutoRunHour_0","AutoRunMinute_0","AutoRunPeriod_0","autoRunTime","AutoRunHour_1","AutoRunMinute_1","AutoRunPeriod_1","AutoRunHour_2","AutoRunMinute_2","AutoRunPeriod_2","saveReportAutoRunSettings","saveFolderReports","checkIsDirty","autoRunReportClick","checkAllFolders","chkFolder","autoRunTime24","MaximumSnapshots","openAutorunDefaultParametersDialog","AutoRun","onLoad_FolderIds","current_FolderIds","userCanAutoRunReports","_userCanAutoRunReports","showAllReportsComponent","MaxReportSnapshotAllowed","defaultAcademicYear","getReportingConfigurationSettings","reportingConfigurationSettings","ReportFolderToEdit","allowArchiveReportPDF","AllowArchiveReportPDF","myReportsComponent","reportFoldersRefreshed","saveReportFolderClick","saveEditClick","Zn","vn","fr","isFolderEdit","folderDescription","reportFolderIdToDelete","reportFolderName","reportFolderNameToDelete","_reportFolderName","_reportFolderIdToDelete","deleteReportFolder","folderEditClick","folderDeleteClick","ma","pa","eo","reportFoldersOnLoad","deleteReportFolderDialogRef","deleteReportFolderDialog","addReportFolderDialogRef","addReportFolderDialog","Ni","setTestArea","setTestSubArea","parameter","parameterName","parameterValue","ParameterValue","testAreas","testSubAreas","testOrder","stepOrder","parentTest_ID","tests","Qo","Test_ID","allAreas","distinctAreas","Ql","Fc","mc","AreaName","action","copyTest","copyTestId","selectedArea","TestAreaName","testSubArea","TestSubAreaName","testArea","editTest","distinctTestAreas","InProgress","ReadyForReview","Approved","IsObsolete","SelectedStatus","CopyTestId","addTest","TestOrder","addSubTest","insertStep","insertStepType","addParameter","editParameter","IsSubTestOnly","toggleStepType","Parameter","saveAutomatedTestParameter","table","SubAreaName","TestArea_ID","Area_ID","saveAutomatedTest","IsInsertedStep","testAreaChanged","testsInArea","testSubAreaChanged","testChanged","copyTestClick","testStatusChange","continueWithoutSavingClick","PageTitle","Test","viewDependentTests","showTestSteps","getSubTestDependentTests","dependentTests","getAutomatedTestQuickView","testSteps","getAutomatedTestParameters","setElementSubArea","setElementControl","Element_ID","ElementArea_ID","ElementName","ElementAreaName","ElementSubAreaName","ElementSubAreas","ControlName","XPath","Action","elementArea","elementSubArea","elementName","elementXPath","elementControlName","elementId","getTestAreas","getControlTypes","createNewElement","updateElement","setElementArea","setElementName","setElementXPath","xpath","getAutomatedTestAreas","getElements","getAutomatedTestElements","allElements","getSubAreas","elemSubAreas","newElement","saveAutomatedTestElement","updateAutomatedTestElement","allControlNames","getAllElements","setElementAreaForUpdate","setElementNameForUpdate","setElementXPathForUpdate","setElementId","showElementAdd","elementAddEditDialogRef","_elementAddEditDialog","showElementEdit","actionMenuClick","setAreaName","areaId","subAreaName","createNewArea","updateArea","setModuleName","newModuleName","module","setPortalName","newPortalName","setAreaId","newArea","saveAutomatedTestArea","showUpdateAreaWindow","updateAutomatedTestArea","showPortalAddWindow","showPageTabAddWindow","ga","getAllModulesAndPortals","getAllPagesAndTabs","setSubAreaName","areaAddEditDialogRef","_areaAddEditDialog","showUpdatePortalWindow","showUpdatePageTabViewWindow","showQuickView","editTestClick","viewTestStepsClick","deleteTest","editParameterClick","deleteParameter","getActions","actionClicked","deleteStep","showTestsClick","showParameterGrid","addStep","saveTestStepsClick","Oc","rd","Kr","hc","modalDialogRef","confirmDialogRef","elementListDialogRef","getAutomatedTests","checkIsSubTestOnly","allIsSubTestOnlyChecked","checkAllIsSubTestOnly","allEventChecked","openModalPopup","testSaved","showTests","getAutomatedTestSteps","quickViewDialogRef","quickViewDialog","TestName","trackByFn","modalDialog","setTestStatus","InnerTest_ID","StepOrder","insertStepNumber","ActionName","Element","Elements","getBackgroundColor","sortChange","_confirmDialog","resetPageForShowingTests","getElementAreas","showParameters","elementAreas","elementSubAreas","elements","elementAreaChanged","getElementByElement_ID","getDataInputs","Step_ID","deleteAutomatedTestStep","saveTest","setIsSubTestOnly","setApproved","saveAutomatedTestSteps","deleteAutomatedTest","getBackgroundColorForTest","deleteAutomatedTestParameter","SelectedStatusDescription","showElementList","_elementListDialog","showModulePortalList","areaListDialogRef","_areaListDialog","showPageTabList","bo","showMyReportsComponent","addMyReportsEntryClick","openAutomatedTestingSetup","openReportFoldersWindow","v9MyReportsClick","Et","getMyReportPageStatus","hideReportToArchiveButton","HideReportToArchiveButton","showAutomatedTestsButton","automatedTestingSetupDialogRef","automatedTestingSetupDialog","myReportsDialogRef","showAsDialog","ReportFoldersDialogRef","refreshedReportFolders","reportModeIsAllReports","reportModeIsMyReports","showReportFoldersDialog","showV9MyReports","mo","getReportModulesByRole","getAllReports","Bi","selectedReportModule","myReportFolders","Qi","Fr","Hr","selectFolder","dn","getReports","filterReports","reportSearch","setSearchMessageVisible","showSearchMessage","searchReport","clearSearchReport","qa","Ec","cs","Cc","js","jo","getMultiValue_Labels","getMultiValue_StringValues","getMultiValue_BoolValues","getMultiValue_Ids","skipRunningReportWhileInDebugMode","useParameterGroups","useParameterFormatting","currentUserSubscription","ReportDefinitionsOption","getReportByIsSysGen","UseParameterGroups","UseParameterFormatting","ReportingSectionName","dateFormat","getGradebookAssignmentTypesLookup","getGradebookAssignmentType","getGradebookAssignments","strReportSiteAddress","bytReportType","strStaffUserName_LNFN","toTimeString","intSiteYearId","getTodaysDate","GetGradeBookSectionListReadbyTeacherId","GetGradeBookAssignmentTypeBySiteSectionIdsLookup","getGradeCyclesReadBySiteYearIdLookup","getTermGradeCycleHeaderRead","getReportCardAttendanceCodesReadBySiteYearIdLookup","updateGradingOptionsTemplate","ReportBatch","deleteReportBatch","getCurrentUserName_LNFN","noSubject","noContent","sendAnyway","setFileSize","originalAttachments","determineMaxFileSize","printAttachments","maxAttachmentSize","totalAttachmentSize","IsFileUpload","allAdvisors","_allAdvisors","getRecipients","allPrincipals","_allPrincipals","allCounselors","_allCounselors","allSiteAdministrators","_allSiteAdministrators","allDistrictAdministrators","_allDistrictAdministrators","viewOption","_viewOption","allCoTeachers","_allCoTeachers","allNurses","_allNurses","toSelections","originalToSelections","CCSelections","originalCCSelections","BCCSelections","originalBCCSelections","additionalTo","additionalCc","additionalBcc","allSiteAdmin","allDistrictAdmin","observableRecipientsStream$","peopleIds","personCodeMother","personCodeFather","toSelectedMailId","CCSelectedMailId","CCDisplayMailId","BCCSelectedMailId","BCCDisplayMailId","toSelected","toMailId","CCMailId","BCCMailId","deselectAll","disableCCTo","CCDisabledEmailId","getRecipientSubscription","getStudentRecipients","TeacherName","checkDefaultMails","canSendTo","canCCTo","validateSelections","getScreenHeight","changeRecipients","viewFile","send","closeWithoutEmailClick","emailAddress","staffUser","noReplyEmail","footerWarning","sendEmailButtonLabel","closeWithoutEmailButtonLabel","includeCloseWithoutEmailButton","optionNotAvailable","emailChanged","yearSettings","createCommLogEntry","AutoAddEmail","bodyContainer","bodyHeight","sendMail","DisplayEmailCcOnComment","DisplayEmailBccOnComment","EmailToCc","EmailToBcc","AddEmailToParentContactLog","PeopleIds","ToMemIds","CCMemIds","BCCMemIds","PersonCode","_recipients","observableRecipients","_teacherName","_teacherEmailAddress","kendoSelectBy","Date1","Date2","Date3","Date4","Date5","Date6","Date7","Date8","Date9","Date10","getHealthConditionReadByStudentId","deleteHealthConditionById","getPregnancyReadByStudentId","deletePregnancyById","getLookUpValuesByEnum","getHealthConditionCode","saveHealthConditions","savePregnancy","getHealthRestrictionReadByStudentId","saveHealthRestriction","getHealthRestrictionAttachementsById","deleteHealthRestrictionById","getHealthConditionAttachementsById","getPregnancyAttachementsById","getPractitionersAndInsuranceReadByStudentId","deletePractitionerAndInsuranceById","getHealthConditionReadByStudentIdForAlert","getHealthRestrictionReadByStudentIdForAlert","getHealthVisitsReadByStudentId","deleteHealthVisitById","savePractitionersAndInsurances","getPhysiciansAttachementsById","getStudentHealthNotes","saveHealthVisit","getHealthVisitMedicationsReadByStudentId","getMedicalMedicationReadByStudentId","deleteMedicationById","getMedicationDoseReadByStudentId","getMedicationDoseHistory","deleteDoseHistory","saveMassAssignMedication","deleteMedicationInventoryById","getHearingScreeningReadByStudentId","saveHearingScreening","deleteHearingScreeningById","getSpinalScreeningReadByStudentId","saveSpinalScreening","deleteSpinalScreeningById","getPhysicalScreeningReadByStudentId","savePhysicalScreening","deletePhysicalScreeningById","getDentalScreeningReadByStudentId","saveDentalScreening","deleteDentalScreeningById","getVisionScreeningReadByStudentId","saveVisionScreening","deleteVisionScreeningById","getImmunizationExemptions","getImmunizationsReadByStudentId","saveImmunizations","observableSelectedValueFromDD","selectedValueFromDD","_selectedValueFromDD","spedStudentCollectionStatusTemplatesItemsRead","spedStudentDocumentCreate","spedStudentDocumentRead","spedStudentDocumentDelete","spedHTMLStudentCollectionStatusTemplatesItemsRead","saveGoalBankData","goalData","spedCopyAllowMultiple","spedDeleteAssignedTemplate","spedEditAssignedCollectionTemplatesRead","spedEditAssignedCollectionRead","checkOutForm","teamMemberPermissionRead","spedTemplateFieldsRead","saveIdentificationData","pickIdentificationData","getXMLCodesvalues","StudentCollectionTemplateVersionId","TemplateName","TemplateVersionId","getSpedStudentCollectionTeamMemberPermission","saveTeamMember","spedUpdateTeamMember","deleteSpedTeamMember","savePlaData","plaMiantenanceData","getPlaXMLvalues","RowIndex","saveCourseOfStudyData","courceOfStudyData","checkSequence","getStudentCollectionTemplate","spedMarkDocumentCompleted","checkAllForm","checkBoxClick","spedFixedPermission","sped360Service","spedUserPermission","getAllOptionalForm","tempStudentCollectionId","collectionId","getOptionalForms","getSelectedOptionalForm","setSelectedForm","selectedOptionalForm","SpedTemplateVersionId","IsEdit","tempOptionalForms","checkPermission","collectionCode","MaintainAllSpEdDocuments","MaintainAll504Documents","CollectionId","Maintain","getOptionalFormsList","isTeamMemberPer","tempStudentId","StatusChecked","allCheck","assignSelectedForms","assignedTemplateVersionIds","TeamMemberId","TeamMemberName","IsCreator","selectMode","loadTeamMemberData","getStudentEnrolledSchools","getTeamMemberName","getSpedStudentCollectionTeamMember","studentEnrolledSchools","spedCollectionToStudentId","studentCollectionTeamMemberPermission","columnToDisplayForm","spedStudentDocumentCradsService","spedCollectionStudentToTeamMember","teamMembers","addStaffClick","UserId","deleteTeamMember","selectedTypeChange","CollectionToStudentId","TeacherUserId","saveData","matDialogRef","typeSelected","headerModelValue","CancelClick","checkAllClick","chkSingleForm","expandAllRowClick","copyOfForm","viewEditForm","viewContent","deleteFormOfDocument","markComplete","viewDocumentClick","deleteImportedDocuments","viewMassContent","addOptionalForms","specialServiceHome","studentDocument","studentCollectionId","collectionToStudentId","spEdcollectionId","SpedCollectionId","SpEdCollectionToIEPStatusId","lngSpEdCollectionToIEPStatusId","collectionName","studentChangeSubscription","previousSelectedStudentId","printWithoutWorkingDraft","AllowPrintWithoutWorkingDraft","checkOutDocument","CheckOutDocument","checkOutDocument504","CheckOut504Document","deleteDocumentPer","DeleteAllSpEdDocuments","collectionCard","Delete","deleteDocumentPer504","DeleteAll504Documents","importDocumentAndAttachToAllSpEdDocuments","ImportDocumentAndAttachToAllSpEdDocuments","ImportDocumentAndAttachToDocument","importDocumentAndAttachToAllSpEdDocuments504","ImportDocumentAndAttachToAll504Documents","maintainTeamMemberPermission","MaintainTeamMemberPermissionsonDocumentsAndForms","maintainTeamMemberPermission504","Maintain504TeamMemberPermissionsonDocumentsAndForms","inactiveSpEdModule","InactiveSpEdModule","columnToDisplayImported","collectionStatus","checkIsTeamMemberPermission","getIepFormsWithinDocumentData","checkOptionalFormLength","getImportedDocuments","getEditFormDropDown","formWithinDocuments","isTeamMember","isDocCreator","saveForm","getIepCollection","formSequence","spedStudentDocumentCardsService","teamMemberRead","showLatestVersion","loadPageData","expandAllRow","formSaveOrDeleted","editFormDropDown","DoumentName","CreatedDate","FileBase64","allowToAddOptionalForm","importedDocuments","loadAttachmentData","matDataSource","sort2","SpedDocumentId","iepService","viewCollectionDocument","SpedCollectionToStudentId","CollectionStatusId","deleteDocument","selectedIds","studentTemplateVersionIds","StudnetXMLId","massAction","disabledActionMenuItems","getUpdatedCheckedByUserId","openForm","canEditForm","continueClicked","AllowCheckInOutSpEdForms","spedStudentCollectionTemplate","CheckOutByUserId","checkOutFormDialog","editViewHtmlForm","formStatus","dataField","ddData","studentFormData","SpEdcollectionId","StudentCollectionId","StudentXMLDataId","CheckedOutByUserId","checkedOutBy","CheckedOutByUserName","allowToEditDelete","deleteForm","addOptionalCheckAll","saveForms","spEdCollectionToIEPStatusId","templateVersionId","callFromHomePage","printType","fileAsBlob","fileAsBlobString","openPrintView","formSrc","maitainTeamClick","allowDeleteFinalStatus","checkAllForms","showgrid","tempCourseOfStudyGrid","formWithinDocumentService","CategoryDescription","categoryDescription","allFormCheck","Checked","studentXMLDataId","onRowSelect","stateCode","combineGoalAndObjective","CombineGoalsAndObjectives","studentDService","MasterTypeId","masterTypeId","getGoalGridData","columnToDisplay","getSimpleGridData","spedManagementService","getObjectiveBankData","DataParentId","DataBankId","childData","showGoalGridData","expandRowDataBankId","showSimpleGridData","DataBankDescription","GoalDescription","objectiveDescription","ObjectiveDescription","selectedMasterDescription","getXmlCode","getIdentificationDropDown","getIdentificationCode","getIdentificationData","xmlIdentificationCode","selectedDataId","DataId","checkSelectedValues","xmlDualIdentificationCode","dualSelectedDataId","xmlTertiaryIdentificationCode","tertiarySelectedDataId","xmlQuaternaryIdentificationCode","quaternarySelectedDataId","xmlFifthIdentificationCode","fifthSelectedDataId","xmlValue","IdentificationCode","DualIdentificationCode","TertiaryIdentificationCode","QuaternaryIdentificationCode","getDroDownGrid","FifthIdentificationCode","dropDownChange","IdentificationId","IdentificationDesc","DualIdentificationId","DualIdentificationDesc","TertiaryIdentificationId","TertiaryIdentificationDesc","QuaternaryIdentificationId","QuaternaryIdentificationDesc","FifthIdentificationId","FifthIdentificationDesc","getIdentificationSubCodeGrid","userNamePLAA","GetChildData","CategoryNote","validationCheck","clickedOnLock","navigateToMaint","navigateToEvalMaint","navigateToGoalORMaint","navigateToPLAMaint","navigateToCOSMaint","callFromNgOnInit","formsInDDL","objectIndex","iconAllowed","studentCollectionTemplateVersionId","loadHtml","navigateToForm","checkInCheckOut","checkInCheckOutDialoge","onlySaveClick","disableNavigationButton","callFromCloseButton","changeStatus","iframe","contentWindow","fnRequiredFieldValidation","previousSelectedForm","PreviousObjectIndex","fillArray","tablename","isdynamic","tagName","spedCardService","saveHTMLDocument","viewPrintPreview","compareObjects","lastObject","nextObject","previousObject","firstObject","ObjFieldName","getSelectedPlaValues","getsingleValue","getCosData","editHtmlFormdropDownValue","viewContentDocument","dialogPB","viewBlankDocument","observableCallForSaveXmlData","observableSelectedSiteId","observableSelectedGradeLevelId","observableselectedSpecialServiceId","observableSelectedDays","observableSelectedPanel","callForSaveXmlData","_callForSaveXmlData","selectedSiteId","_selectedSiteId","selectedGradeLevelId","_selectedGradeLevelId","selectedSpecialServiceId","_selectedSpecialServiceId","selectedDays","_selectedDays","selectedPanel","_selectedPanel","siteReadByUserId","getGradeLevel","getCurrentWorkList","getSpedHomePanelList","getOverDueAlertData","getMySpecialServiceTeam","getSpedHomeMyEvent","studentListRead","getSpedCalenderDetails","spedCollectionRead","documentsWaitingApprovalReadByDocType","studentDocumentStatusUpdate","studentDocumentStatusMassUpdate","getBehaviorAlerts","getComplianceDocument","spedPanelUpdate","editHTMLDocument","getFieldWithinForms","getFieldUsedInTemplates","getIsComplianceFieldById","saveFieldWithinForms","getAccomodation","updateAccommodation","getSpedTemplateVersionRead","getTemplateFieldsReadByTemplateVersionId","spedTemplateVersionUpdate","getCompliance","getComplianceSelectItem","getComplianceGrid","updateCompliance","getCategoryGrid","addNewCategory","dataBankCategoryUpdate","dataBankCategoryDelete","updateDataBank","deleteDataBank","getSpedCollectionsReadByUserId","deleteSpedCollectionById","getSpedCollectionIEPStatusRead","getSpedAvailableTemplates","deleteSpedCollectionTemplateById","assignTemplateToCollection","templateInCollectionUpdate","spedCollectionToIEPStatusUpdate","viewFormSetupDocument","saveSequence","getSpEdFixedPermissionRead","getSpEdUserPermissionByUserId","MaintainAllSpEdDocumentsInFinalStatus","MaintainAll504DocumentsInFinalStatus","MaintainInFinalStatus","MaintainAllSpEdDocumentInCompletedByCaseManagerStatus","getaccommodationData","accommodationData","getComplianceExportData","complianceData","getGoalBankExportData","observableCaseManagerDataLength","observableEvaluationCollectionDataLength","observableDataUpdated","caseManagerDataLength","_caseManagerDataLength","evaluationCollectionDataLength","_evaluationCollectionDataLength","dataUpdated","_dataUpdated","getStudentAssignedCollectionRead","getSpedStudentCollectionStatus","assignCollectionToStudent","deleteAssignedCollection","caseManagerTeamReadByStudent","caseManagerTeamUpdate","caseManagerReadBySiteId","caseManagerTeamDelete","saveSpedCopyCollectionWithStudentData","spedStudentCollectionStatusToCompleted","getStudentSpEdSummary","getSpEdSummaryLegendCodes","getSpedAssessmentsReports","deleteAssessmentReport","updateAssessmentReportStatus","saveReport","loadStudentInfo","student360YearSubscription","academicHistory","clearStudentData","checkStudentGradeLevel","isShowHSTranscript","loadAcademicHistory","generateSemesterColumns","getTotalCounts","academicHistorySummary","attemptedCreditTotal","earnedCreditTotal","AttemptedCredit","EarnedCredit","showAttemptedCreditTotal","showEarnedCreditTotal","semesters","AHSemester","AcademicYear","Final","GPADecimalPlaces","decimalMask","getFormattedGPA","UnWeightedGPA","WeightedGPA","School","Gradelevel","getFormattedDate","FromDueDate","DueDate","ToDueDate","FromAssignedDate","AssignedDate","ToAssignedDate","FromPercentage","Percentage","ToPercentage","isFilterApplied","_FromDueDate","_ToDueDate","_FromAssignedDate","_ToAssignedDate","filterChangeByModel","previousFilterParam","HideS360AssignmentPercentageColumn","showPercentage","filterClose","loadCourseAndTerms","getCoursesFromUPComingAssignments","courseTerms","getTermsFromUPComingAssignments","studentAssignments","getStandardsBasedHeader","gradebookStandard","getGradebookObjective","gradebookObjectives","ShowStandardBasedScore","GradeBookObjectives","standardsBasedHeader","CurriculumCourseObjectiveId","Assignment","Score","Standard","AssignmentShortName","StandardDate","getCellValues","StandardsBasedScores","selectedTermChange","CourseTerms","getStudentAssignments","selectedOrderByOptionChanged","selectedOrderByOption","assignmentSortBy","classInformation_click","teacherProfile_click","courseDescription_click","utilityClass","course_change","gradingPeriod_Change","canSendEmail","AllowParentStudentEmail","init","ShowByClass","studentAssignmentsUPMG","filterbyCard","loadFilterParam","local_filterParam","UsingFinalGrade","UsingSemesterGrades","UsingTermGrades","UsingProgressGrades","selectTermByDates","selectedGP","courseInfo","studentAttachments","getStudentAttachment","showStandardBasedScore","showCategoryWeights","ShowCategoryWeights","ShowOnPortal","EarnedV9","Earned","EffectiveScoreV9","Effective","PercentageV9","IsValid","constructing","selectedViewOption","loadStudentSchedules","studentSchedules","selectedCourseSection","ParentPortalAssignmentsDisplayProfiles","getStudentAttachments","assignmentFilterPipe","showToggleIcon","Summary","AttachmentDetail","isAttachmentExists","getStudentAttachmentByAssignmentId","getSBSScore","getAssignmentStatus","Curriculum","dDescription","TeacherMemId","CourseProfile","HasTeacherProfile","TeacherProfile","TeacherEmail","Possible","EarnedValue","PercentageValue","schoolYearSettingsChange","HideS360AssignmentEffectiveScoreColumn","classInformationClick","ParentPortalAssignmentsShowEffectiveScore","refresh","addDays","getStudentAssignmentUPMG","studentLoaded","preventTabSwitch","missingRetrieved","showClassProfile","EnableClassInformationandTeacherProfiles","HasClassProfile","showTeacherProfile","byCourse","upcomingMissing","getSelectedTabIndex","assignmentFilter","tabComponent","clearFilterClick","showLegends","SpecialMark","SpecialMarkDescription","AssignmentCalcOptions","GradePos","SetSubsequentGPGrades","ExcludeFromCalculation","SetToZero","GradePoints","Inc_GPACalc","overrideLegendDialog","Set","attendanceDetails","S360HideAttendanceComments","calendarUseAttendanceTypes","getAriaDetailRowByDate","Dropped","AttendanceCode","gs","attendance","getAriaRowByDate","Duration","Codes","AttendanceDetails","getAriaDetailRowByCourse","AttendanceCodeDescription","courseSchedules","columnsToDisplayCourse","getAriaRowByCourse","Absences","Tardies","studentSpecialAttendance","getSpecialAttendanceSchools","specialAdditionalAttendanceSchools","SiteName","PrimarySchool","getSpecialAttendanceDataSource","specialAdditionalAttendanceAngularMatData","getSpecialAdditionalAriaRow","MinutesAttended","MinutesPossible","ReasonCode","getAriaDetailRowByTeamAttendanceDetails","attCode","attDescription","ampm","teamAttendance","getAriaRowByTeamAttendance","stName","staffName","aCount","tCount","StudentTeamAttendanceDetails","Sn","selectedViewOptionChange","getStudentAttendanceInfo","selectedExcessiveAttendanceOption","columnsToDisplayExcessiveAttendance","getExcessiveAttendanceAriaRow","Steps","Points","AppealedStatus","viewTrackingGroupsOptions","studentExcessiveAttendance","AttendanceStepsDefinitionId","TrackingId","selectedExcessiveAttendanceOptionValueChange","selectedTrackingGroupOption","excessiveAttendanceAngularMatData","checkExpandedExcessiveAttendance","getExcessiveAttendanceSchools","getExcessiveAttendanceSchoolsViewOptions","excessiveAttendanceSchools","viewExcessiveAttendanceOptions","getExcessiveAttendanceDataSource","showAllCodes","selectedExcessiveAttendanceChange","CodeLegendClick","viewAbsentNoticeClick","allowMultiSelect","initialSelection","vi","loadStudentInfoCall","observableStudentEnrollmentStream$","studentHeaderRef","studentHeaderHeight","tabsRef","tabsHeight","dropdownRef","dropDownHeight","footerRef","footerHeight","footerWidth","getCheckInOutButtnSettings","AcademicYearID","studentTeamAttendance","ReasonDescription","legendDialogRef","attendanceCodes","codeSort","callbyAttendanceComponet","byDateTableRef","byScheduleTableRef","byTeamTableRef","byViewExcessiveTableRef","BySpecialAdditionalRef","attendanceDaysAndHoursInfo","getCheckInOutButtonSettings","AllowParentEnterCheckInOut","AllowParentEnterCheckInOutMobile","AllowStudentEnterCheckInOut","AllowStudentEnterCheckInOutMobile","showSelfCheckButton","AllowParentEnterAbsentNotice","AllowStudentEnterAbsentNotice","showAbsentNoticeButton","viewHistoryClick","getStudentAwards","awards","awardsService","loadStudentAwards","AwardName","AwardDetails","AwardDate","weekday","viewDate","eventType","meta","eventDetails","Assignments","dataBucketId","DataBucket_ID","getV9Attachments","calendarService","getTermsForCourses","attendanceStatus","attachmentDescription","assignedDate","eventClicked","lastSelectedCalendarView","selectedDate","lastSelectedCalendarDate","activatedRoute","view","selectedDay","getCalendarEvents","calendarHeader","viewChange","viewDateChange","scalePDF","studentCalendar","checkAttendance","AttendanceId","AttendanceStatus","checkAttendanceEvents","checkDisciplineEvents","checkAssignmentEvents","setFlexDirection","setEventColor","checkForClasses","eventHasTimes","StartTime","EndTime","dateIndex","DailySchedule","Courses","CalendarAssignments","hour","minute","Events","checkAllDayEvent","allDay","Discipline","Incident","getTimeString","isSame","allDayEvent","diff","asMinutes","checkDayForClasses","disciplines","isStaffMember","useDisciplineEventModel","UseDisciplineEventModel","parentPortalDisciplineShowComments","ParentPortalDisciplineShowComments","BehaviorLetter","BehaviorLetterId","loadStudentDiscipline","ActionDate","Days","Event","InvolvingOthers","EventComments","ActionComments","Form","formStudents","refStudent","LastUpdatedOn","lastUpdatedOn","LastUpdatedByName","CreatedOn","CreatedByName","startOver","formClick","matSort","currentDateString","staffPage","snapshot","paramMap","getEFormPermissions","reSelectStudent","ShowInAllYears","initialS360eFormTab","eForms","eFormPermissions","filteredEForms","StudentsCanComplete","ParentsCanComplete","StaffCanComplete","showCompleted","IsInstanceActive","pastYear","statusDateOverrideCheck","holdReqTabFilters","holdOptTabFilters","showCompletedChange","dueDateCheck","pastDueCheck","shouldShowSelectYearDialog","openFormViewer","openStudentSelector","checkForUnfinished","action_View_Translated","IsLastStatusDelete","CriticalMessage","openYearSelector","SelectedFP","showDialog","feePayments","hideDetails","CheckNumber","CheckDate","dateCheck","NameOnCheck","additionalDetailsDialogRef","Fee","Payment","RunningBalance","onlinePaymentClick","parentPortalShowOnlinePayment","ParentPortalShowOnlinePayment","FeeDialog","FeeCode","AccountCode","studentname","StudentName","StudentIdentifier","AllowFutureFeeBillingPayments","feesAndBilling","getFeesAndBilling","feesAndBillingService","calculateBalance","loadFeesAndBillingData","aYBalance","unappliedPayments","totalBalance","priorBalance","totalUnapplied","V10Flag","Unapplied","AYBalance","BalanceSort","FeePayments","UnappliedPayments","getFutureBalance","futureBalance","Balance","getAllPastCurrentFutureFees","_yearId","getStatus","selectedFamily","CanSee","Expires","textBlock1","newClick","getApplications","UserCanSeeAllStudents","applications","showCurrentStatusMessage","showGrid","showNoAppsMessage","getFamilies","disableAdd","showYearChangeDialog","newAppClick","studentLunchStatus","IsDirectCertification","getUnsubmittedApp","openNewApplication","showDirectCertDialog","getCurriculumMarkTypes","gradesService","InActive","studentSchedule","subjectSection","Teacher","viewAssignment","gradeId","selectedGradeId","gradingTerm","selectedGradingTerm","gradingTermDescription","gradingTermDesc","standard","selectedStandard","isGradeBookGrade","isStandardView","selectedIsStandardView","selectedSubjectCode","selectedSection","isTermSelected","termGrade","behaviorSocialSkillDescription","behaviorLabel","TermDefinitionId","longDescription","gradeScale","gradingScale","courseTerm","ReportCardGradesTerms","DisplayGrade","GradingTerm","grade","Citizenship","citizenship","CitizenshipLabel","citizenshipLabel","Workhabits","workhabits","behaviorSkills","ReportCardGradesStandards","PercentGrade","showStandard","OkClick","viewAttendance","viewCourseProfile","viewTeacherProfile","commentsAndBehaviorMarksClick","enableClassInfoTeacherProfiles","getStandardBasedGrades","standardBasedGrades","ShowStandardTab","ShowOnGradesPage","studentTermsStandardTab","TempReportCardGradesTerms","AngularMatData","viewAssignments","viewCourseDescription","courseDescriptionDialogRef","profileViewerDialogRef","showGradesLink","IsGradeBookGrade","GradingTermDescription","showAssignmentLink","IsGradeBookExists","showCommentsAndBehaviorMarksPopUp","isProgressGrades","gradesBehaviorSocialSkills","commentsAndBehaviorMarksDialogRef","selectedId","GradingCycle","getTraditionalGrades","traditionalGrades","ShowTraditionalTab","studentTerms","getColumnsToDisplay","showCategoryScores","CategoryAverages","getCategoryAverage","CategoryAverage","CreditAttempted","CreditEarned","viewProgressGrades","StandradTabByCurrentGrade","staffAssignedPortalsSubscription","getPortalInfo","parentPortalSubscription","selectedCardCourse","showAttendanceLink","showSendEmailLink","getReportCardTerms","reportCardGradesTerm","reportCardStandardGradesTerm","categoryAverages","getReportCardTermsStandardTab","getReportCardTermsBySiteYear","showProgressGrades","isDualEnrollment","setTabDetails","gradesPreferences","ShowProgressGrades","traditionalGradesComponent","standardsBasedGradesComponent","getReportCardBehaviorSocialSkills","CourseNumber","getReportCardBehaviorSocialSkillDescription","overrideLegendClick","overrideLegendDialogRef","getStudentCategoryAverage","planTypeMap","planTypes","planStatusMap","planStatuses","areaStatusMap","areaStatuses","creditCodeStatusMap","creditCodeStatuses","courseStatusMap","courseStatuses","DefaultDisplay","_init_defaultDisplay","PlanType","_init_PlanType","PlanGroup","_init_PlanGroup","GradPlanStatus","_init_GradPlanStatus","SubjectAreaStatus","_init_SubjectAreaStatus","CreditCodeStatus","_init_CreditCodeStatus","CourseStatus","_init_CourseStatus","CreditDecimalPrecision","_init_CreditDecimalPrecision","GPNeeded","_init_GPNeeded","previousFilterData","gpFilterParam","dataDefTypeOfgradutionPlanType","graduationPlanTypes","filterChanged","closeFilterEvent","creditCodeOverrideClick","refetchData","universalColumns","graduationplanService","getgraduationplanData","graduationPlanFetch_Complete","graduationplanTypes","gradPlans","GraduationPlans","primayGradPlan","getPrimaryGraduationPlan","getTableData","onToggleStatusAll","IsPrimary","previousDisplay","toggleStatusAll","CreditCodeOverrideDialogRef","gpCourseModel_selected","creditcode_Overriden","previousGradPlanStatus","previousSubjectAreaStatus","SubjectAreas","previousCreditCodeStatus","CreditCodes","previousCourseStatus","notInGP","IsExpanded","getAllCoursesByGradPlanID","getGraduationPlanById","Course_ID","DataBucketScore_ID","GradPlan_ID","getAllDistinctGraduationPlans","GradPlanName","getGraduationPlanOverrideCreditCodes","getStudentAndCourseInfo","overrideCreditCode","gradPlan_change","course_Id","gradPlan_Id","fromAcademicProgress","graduationPlans","gpCourses","load_gpGPStudentNCourseInfoModel","saveOrCancel","getSelectedCourseObject","override_creditcode","gpGPStudentNCourseInfoModel","OverrideCreditCode","load_OverrideCreditCodes","gpOverrideCreditCodes","jn","yn","dentalScreenings","getDentalScreenings","previousValue","healthService","fo","doctors","displayDoctorsColumns","getDoctors","loadDoctorHistory","getDoctorsAriaRow","DoctorName","Telephone","healthVisitLog","displayedHealthColumns","getHealthVisitLog","loadHealthVisitLogHistory","getHealthVisitLogAriaRow","TimeIn","TimeOut","VisitReason","SentTo","hearingScreenings","getHearingScreenings","immunizations","getImmunizations","loadImmunizationHistory","getImmunizationsAriaRow","ExemptCode","insurance","getInsurance","loadInsuranceHistory","getInsuranceAriaRow","InsuranceCompany","Policy","InsuranceStartDate","InsuranceEndDate","nn","medications","displayedMedicationColumns","getMedication","toggleMore","medicationSelected","Pharmacy","RxNumber","Doctor","loadMedicationHistory","ShowRow","bc","ac","Rc","Wd","getMedicationAriaRow","Medication","Dose","SchoolAuthorisedToAdminister","physicalExamScreenings","getPhysicalExamScreenings","legendCodes","spinalScreenings","getSpinalScreenings","ro","visionScreenings","getVisionScreenings","md","getHealthCondition","healthConditions","studentHealthSharedService","HealthConditionCodeDesc","HealthConditionCode","HealthConditionDescription","DateConditionStart","DateConditionEnd","DateHomeTeachingEnd","DateHomeTeachingStart","DateReferralReturn","GenerateAlert","NonNurseViewable","GenerateAlertValue","NonNurseViewableValue","od","getPregnancy","pregnancyData","DateOfTest","DateExpecting","DateOfDeliveryOrTermination","Nd","getHealthRestrictions","healthRestrictions","DateRestrictionStart","DateRestrictionEnd","NonNurseViewableAlert","yl","hearingSort","hearingDataSource","spinalSort","spinalDataSource","physicalSort","physicalDataSource","dentalSort","dentalDataSource","visionSort","visionDataSource","getScreenings","physicalScreenings","Bl","ul","getStudentHealthPortals","S360DisplayImmunizations","S360DisplayMedications","S360DisplayHealthVisitLog","S360DisplayDoctors","S360DisplayInsurane","S360DisplayScreenings","routeSelectedTabIndex","medicationsComponent","isCurrentTabFiltered","immunizationsComponent","healthVisitLogComponent","doctorsComponent","insuranceComponent","hearingComponent","visionComponent","dentalComponent","spinalComponent","physicalExamComponent","clearCurrentTabFilters","codeLegendClick","getScreeningCodeLegend","ql","PhysiciansId","PhysicianTypeId","Primary","viewAttachmentClick","getDocumentAttachments","getSpedDocumentAttachments","docAttachments","DocumentDescription","AttachedBy","viewDocumentAttachmentDialog","getSpedCollection","spedCollection","getSpedDocuments","ShowAttachmentColumn","FieldDescription","Documents","CollectionName","Filename","Created","ShowOnSummaryGrid","iepData","columnsToDisplayDetailRow","columnsToDisplayCount","iepDocumentsDialogRef","to_trustedHtml","transactionDate","selectedChoice","MonthlyLunchMenuChoices","getLunchMealChoices","mealService","columnSpanToDisplay","unix","lunchMealChoice","getMealServiceAriaRow","BreakFastMeal","BreakFastALaCarte","LunchMeal","LunchALaCarte","SnackMeal","SnackALaCarte","TotalPurchases","Deposits","Net","lunchMealChoicesDialogRef","angularMatDataMonthlyLunchMenu","getMonthlyLunchMenuHeader","getMonthlyLunchMenuData","columnsToDisplayLunchMenu","Choice","studentMonthlyLunchMenuChoice","showMontlyLunchMenuGrid","ChoiceDescription","getMonthlyLunchMenuAriaRow","getMonthlyLunchMenuRecords","getChoiceNumber","FromDate","ToDate","viewPassword","changeDate","di","an","yearStartDate","yearEndDate","nearestDateCheck","DisabledNxtBtn","DisabledPrvBtn","selectedMonth","monthLabels","byViewMonthlyRef","parentPortal","selectedStudentId","getMothlyLunchMenu","loadMealService","getLunchPin","getLunchPinForStudentAndStaff","lunchPin","getCalculationSummary","byViewChargesRef","getMonthlyLunchMenu","loadMealMonthlyLunchMenu","totalDeposit","totalRollOver","totalPurchases","MealServiceDetailItems","TransactionType","fltAmount","filterFromDate","mealServiceFilter","filterToDate","mealServiceFilterPipe","classesFiltered","showPassword","OnlinePaymentServiceCharges","getForms","OnlineRegistrationForms","ParentPortalDataUpdateForms","currentForm","_currentForm","formChange","currentFormPacket","_currentFormPacket","formPacketChange","calledFromReviewSubmission","_calledFromReviewSubmission","_formStatus","V10Data","isOnlineRegistration","ParentPortalORv10Data","ParentPortalUHDv10Data","isLastForm","getCurrentFormIndex","forcefullyRedirectOnlineRegistration","isFieldRequired","getFieldPhoneRegexp","getFieldEmailRegexp","getFieldZipRegexp","getFormCount","getFormAtIndex","routeToForm","originalForm","originalFormPacket","FormStatus","ScreenName","guardCheck","getFormPacket","getFamilyDataFields","getHouseholdParents","YearDescription","saveHouseholdParents","deleteHouseholdParents","getHouseholdAddresses","OnlineRegistrationHouseholdAddressesDetail","ParentPortalDataUpdateHouseholdAddressesDetail","saveHouseholdAddresses","SameAsPrimaryResidence","deleteHouseholdAddresses","getHouseholdStudents","saveHouseholdStudents","deleteHouseholdStudents","getMatchingStudentAddresses","getMatchingParentAddresses","getMatchingAddresses","syncStudentAddresses","syncParentAddresses","syncAddresses","getEmergencyContact","saveEmergencyContact","deleteEmergencyContact","getNonResidentParents","saveOnlineRegistrationNonResidentParentData","deleteNonResidentParentData","getCustomForm","saveCustomForm","deleteCustomForm","submitOnlineRegistrationPacket","getHouseholdHealth","saveHouseholdHealth","deleteHouseholdHealth","DocumentFileId","checkStudentImmunizationCompliance","OnlineRegistrationActiveStudents","UserIsPrimaryContact","getOnlineRegistrationYears","getORYearGradeLevels","deleteOnlineRegistrationUserPacket","getNewStudentLinkedContacts","saveNewStudentLinkedContacts","radioChange","gradeLevelMessage","gradeLevelData","selectedFamilyId","Desc","Year","AddBy","Added","addDocumentForm","fileCategory","fileDescription","addFile","Size","SizeUnit","fileCategoryErrorMessage","fileDescriptionErrorMessage","markAsDirty","fileError","addFileChanges","editDocumentForm","StuPortCategoryName","StuPortCategory_ID","editStudentPortfolio","viewPortfolio","studentAccessHistoryClick","editPortfolioDocumentClick","deletePortfolioDocumentClick","studentPortfolios","getPortfolios","portfolioSource","filterPortfolio","portfolioFilter","classFiltered","previousPortfolioFilter","auditStudentPortfolioDocument","FileMimeType","getDateFormatted","deleteStudentPortfolio","AccessHistory","RecentAccessHistory","programAndServiceAriaLabel","hasComments","hasCommentsString","hasAttachments","hasAttachmentsString","detailsBySequence","_sortedDetails","entryDateChanged","OldEntryDate","exitDateChanged","OldExitDate","classEntryDateFrom","classEntryDateTo","classExitDateFrom","classExitDateTo","studentListId","studentTeamId","counselorId","getCourseChangeHistory","multipleStudent","scheduleHistorySearchModel","getCourseChangeHistoryData","getStudentsListsDrop","getStudentCounselor","scheduleHistoryService","scheduleHistoryModel","teamsService","teams","counselorService","saveAnywayClick","errorTitle","enforceRule","retVal","crWarningDialogRef","GetConflictsForStudentPortal","getStudentCourseRequest","getCourseRequestOverAllRequirements","saveCourseRequestData","deleteStudentCourseRequest","getCourseRequestSchoolPolicy","getCourseRequestStudent360SchoolPolicy","getCRCourses","getCRPeriods","getCRTerms","getCRTeachers","getStudentCourseRequestPreferredTeachers","DistrictRequirement_ID","CourseId","courseChange","setCreditIndicators","addCourseSpecificAlternateRequest","openCourseDescription","deleteCourseRequest","hoverRow","removehoverRow","redirect","toolsMenuItemClick","counselorCanOverrideConflicts","disabledToolsMenuItems","studentCourseRequests","isHover","getRowSpan","RowNumber","studentCourseRequestService","GradeLevelId","schoolPoliciesCR360ParentStudentView","courseOptions","courseCredits","courseNumber","courseDescriptions","CourseCurriculum","CourseDescription","SubjectIdentifier","termOptions","periodsOptions","teacherOptions","courseRequestSchoolPolicy","preferredTeachers","periodPolicy","ColumnToCheck","teacherPolicy","termPolicy","ColumnsToDisplay","CanDisplay","getStudentCourseRequestInformation","tmpStudentCourseRequestId","overAllRequirement","gradeLevelRequirements","StudentCourseRequest","isHiddenRow","StudentCourseRequest_ID","DistrictCourse_ID","CRType","ParentCR_ID","PreferredTeacher","PreferredTeacherNameSetByCounselor","PreferredTerm","PreferredPeriod","Conflicts","PreferredTeacherStaff_ID","PreferredTeacherName","SchoolRequirement_ID","GradeLevel_ID","RequirementName","RequirementInstructions","RequirementType","ReqMinCredits","ReqMaxCredits","ReqMaxCourses","ReqMinCourses","DefaultNumberOfCourseRequests","AllowGlobalAlternates","AltMinCredits","AltMaxCredits","AltMinCourses","AltMaxCourses","AllowIndividualAlternates","NumberOfIndividualAlternates","RequestedCredits","HighlightMinCredit","HighlightMaxCredit","HighlightMinCourses","HighlightMaxCourses","reinitializeRowNumber","initialStudentCourseRequests","Credits","SubjectTermType","CreditDeliveryTermType","SemestersPerYear","TermsPerSemesters","RequestedCourses","HighlightOverallMinCredit","HighlightOverallMaxCredit","HighlightOverallMinCourses","HighlightOverallMaxCourses","setImagePath","imageUrl","courseRequesrRequirementSource","getChanges","toAdd","toDelete","toKeep","toUpdate","formIsDirty","validateAndSave","CR360PreventParentStudentSubmittingCourseRequests","CR360EnforceRule","student_id","coursesToAdd","RequirementIds","courseRequestMgmtService","addNewRecords","identifiedEnforcedConflicts","identifiedPreferredConflicts","identifiedConflicts","RelationshipEnforcement","ConflictMessage","IsAlreadyRequestedCR","checkHiddenRow","openConflictsInformation","setDirtyFlag","studentInformationClick","displayParentContacts","injectdata","enableGenderPronouns","EnableGenderPronouns","rowExpanded","DisplayEmergencyPhoneNumberInGrid","studentDetails","StudentParentContacts","loadStudenDetails","ShowStudentLogin","maskedLogin","StudentLogin","ShowStudentPassword","maskedPassword","StudentPassword","LockerCombination","maskedLocker","DualEnrolled","onToggleChange","expended","toggle","EmergencyPhone","Homephone","Cellphone","getAriaStudentDetail","PrimaryParent","LivesWith","HasCustody","Restricted","PlaceOfWork","PrimaryAddress","MailingAddress","ECLeaveWithThisPerson","ECComments","hasParentContacts","getParentContactTableData","StudentSiblings","studentInformationClickEvent","sdc","studentDigitalContentService","DocumentOwnerId","getStudentDigitalContent","studentDigitalContentData","addContentDialogRef","deleteConfirmDialogRef","deleteStudentDigitalContent","canAddEdit","topActionMenuItems","canDelete","studentDocumentAccessHistory","getStudentDocumentAccessHistory","studentDocumentsFilterData","setFilter","studentDocuments","documentType","for","DocumentFor","Notes","viewQuery","forOptions","edit","documentTypeIdAsString","attachmentNameRef","documentTypeRef","documentTypeChanged","deleteDocumentClick","onlyBehaviorLettersDocument","onlyAttendanceLettersDocument","showOnlyBehaviorLettersDocument","showOnlyAttendanceLettersDocument","canAddAll","canAddViewAll","canAdd","studentDocumentsLength","loadStudentDocuments","showFormsForEntireFamily","showFormsForEntireFamilyChange","editStudentMode","editRegistrationStudentMode","getPermisionCategory","getStudentFieldsByStudentId","getStudentFieldOptions","validateStudentFieldsData","saveStudentFieldsData","DataFieldId","changeFieldData","validateDate","observableStudentFieldSaved","StudentField","ErrorCollection","showCustomPages","StudentFields","isEdited","validateData","FieldOptions","TabMenus","windowResize","ValidateIdLengthOnly","getTabTitle","SelectedTabId","TabTitle","filterStudentField","ColumnPosition","Row","visibleMiddleColumn","customPagesRetrieved","StudentFieldservice","FieldWidth","DataFieldFormatType","DataTypeFormat","ColumnData","DisplaySize","distinctTabId","TabSequence","MaxRow","studentDateFields","OldColumnData","OldExternalDataId","ExternalDataId","OptionSelected","tabRows","ErrorCount","callbackFunction","Error","validateOtherFields","showErors","ElemAptitudeField","isStudentIdError","isStateIdError","idFields","FieldSize","fill","MinimumFieldValue","observableStudentFieldSavedStream$","customPages","assignmentClick","attendanceClick","emailTeacherClick","gradesClick","getSchedule","includeDropped","_includeDropped","schedule","checkColumns","showProfiles","ParentPortalCourseScheduleProfiles","enableClassInformationandTeacherProfiles","showEmailLink","courseDescriptionClick","studentScheduleService","setGridHeader","Oe","pe","Vi","Pr","initialSort","columnPosition","helpClick","staffOnly","districtCards","showInSettings","checkColumnName","showDetailedOption","hasDetailCard","announcement","viewDetailsClick","moreClick","ra","ms","card","checkOverflow","scrollHeight","offsetWidth","matDialog","hasNewAnnouncements","IsNewSinceLastLogin","getCardAnnouncements","districtAnnouncements","schoolAnnouncements","Announcement","textAreas","Overflow","studentAttendance","yearToDateAbsentCount","totalAbsences","yearToDateTardyCount","totalTardies","DaysPresent","TotalDays","HoursPresent","TotalHours","viewAllClick","cardClick","getAttendance","todaysAbsentCount","todaysTardyCount","attendanceTotals","getCardAttendance","Class","TodaysTardies","TodaysAbsences","TotalAbsences","TotalTardies","dailyAttendanceStatus","DailyAttendanceStatus","mockData","Marked","checkIfMissing","IsMissing","getAssignments","missingCount","dueTomorrowCount","dueTodayCount","getCardAssignments","Due","MissingCount","DueTodayCount","DueTomorrowCount","viewAllGradesClick","standardsClick","ii","dc","ic","getCurrentGrades","Section_ID","selectedCoursebyCard","getCardStudentGrades","gradingPeriodId","currentTerm","studentGrades","gradeDisplayString","linkTileClick","linkTiles","IsMyLinksTile","userIsStaff","hasImage","TileImageFile","OpenInNewWindow","Tr","payClick","Ca","showPay","feesLedger","totalString","creditOrDue","TotalBalanceCreditOrDue","numberWithCommas","checkTotalString","checkIfBalance","observableOnlinePaymentConfigurationStream$","parentAssignedPortalsSubscription","tm","gettFeesBalance","getCardFeesAndBilling","TotalBalance","mealLedger","balance","absBalance","rolloverBalance","Rollover_Balance","deposits","charges","Charges","checkIfNegative","_t","getMealBalance","getCardMealService","viewTermScheduleClick","Ra","DisplayClassMeetsOnStudentScheduleCard","getCardStudentSchedule","LunchStartTime","LunchEndTime","tab1Schedule","MeetsToday","tab2Schedule","MeetsNextSchoolDay","nextSchoolDayDate","validSchoolNextDay","scheduleInfoMessage","tab1Title","TodayAfterLastDayOfSchool","NoSchoolNextSchoolDate","TodayBeforeFirstDayOfSchool","tab1Date","TodaysDate","showTab2Schedule","tab2Date","NextSchoolDate","tab2Title","Withdrawn","viewCalendarClick","hl","getUpcomingEvents","getCardUpcomingEvents","upcomingEvents","EventStartDate","EventEndDate","eventsByMonth","getDayString","getWeekDayString","multiDayEvent","getDateRangeString","getTimeLocationString","EventLocation","hasTimeLocation","Vo","goToCalendarClick","calendarClick","endOf","getCardStudentCalendar","HasEvent","HasSchool","getEventForDateRange","updateView","cdr","dl","hideShowDropped","goToAttendance","getStudentAttendanceHistory","getCardStudentAttendance","attendanceRecords","showDropped","recordsToDisplay","IsDropped","ClassMeets","attendanceRecordClick","getAttendanceHistoryDetail","viewStudentTeams","$u","getTeams","getCardStudentTeams","studentTeams","mi","viewStudentNotesClick","getNotes","getCardStudentNotes","Definition","viewBehaviorClick","Po","getBehavior","getCardStudentBehavior","behaviorEvents","viewProgramsAndServices","Fu","getCardProgramsAndServices","displayItems","program","service","ServiceEntryDate","Ht","enrolledSchools","yd","RSNY_ID","membershipCode","getMembershipCodes","membershipDetails","getEnrollmentHistory","getCardStudentEnrollment","enrollmentHistory","enrollmentDetails","IsCurrent","openMembershipCodeDetails","Vt","contacts","IsHeader","Contact_Name","HomeNumber","CellNumber","studentContacts","Mu","getStudentContacts","getCardStudentContacts","mp","goToStudentSchedule","termChange","Tc","selectedTermId","Zu","fd","hideShowStaffCol","goToCommunication","communicationLogs","isShowStaffOption","showAllStaffEntries","communicationLogService","isLookupExists","communicationLogPersonCodes","isShow","getContectPerson","toTrustedHtml","xh","announcementCard","attendanceCard","assignmentsCard","currentGradesCard","districtDefinedLinksCard","feesAndBillingCard","mealServiceCard","studentScheduleCard","upcomingEventsCard","calendarCard","attendanceHistoryCard","studentTeamsCard","studentNotesCard","behaviorCard","programsAndServicesCard","studentDetailsCard","enrollmentCard","contactsCard","staffStudentScheduleCard","communicationLogCard","loadCards","getComponentForCardType","templateMapper","ju","refreshCards","filterCards","cardsSorted","cardsLeft","cardsRight","Hu","Jp","allAnnouncementsClick","sortAnnouncementsV9","hasSeenNewAnnouncementModal","siteDailyAnnouncement","ShowDaily","siteDailyAnnouncementTable","IsNewAnnouncement","siteAnnouncement","schoolNameDaily","tableDailyData","virtualizeDaily","showTableDailyFlags","Mm","checkInOutSubmissionRequest","checkInOutRequest","loadAttachmentTable","SubmissionAttachment","Xh","J_","Tv","validateCheck","convertTime","saveCheckInOutSubmissionRequest","timeRef","validateTime","Dh","Eh","absentNotice","absentNoticesService","startDateRef","isAfter","endDateRef","T_","eventViewClick","markEventsAsSeen","rh","Zf","Su","Km","Gm","Om","Qm","Gc","getOnlineRegistrationStatus","cardContainer","getCourseRequestStatus","getBehaviorLetterEvents","enableCheckInOut","enableAbsentNotice","checkPortals","checkEFormAvailable","getAnnouncementsPopup","notificationsService","observableeFormHeadLinePermissionStream$","displayBehaviorLetterHeadline","getStudentRecentEvents","optionalInstanceIds","recentBehaviorLetters","Count","displayORHeadline","onlineRegistrationStatus","displayCourseRequestHeadline","displayWelcome","LastLoggedInDate","getStudentsNewAnnouncements","onlineRegService","Iv","studentDocumentIds","getRecentEvents","eFormsActivated","ActivateEForms","requiredEFormAvailable","eFormsAvailable","optionalEFormAvailable","optionaleFormAvailable","recentDisciplineEvents","recentHealthEvents","recentOptionalEFormEvents","unmarkedOptionalEFormsEvents","behaviorlatterStudentDocuments","attendancelatterStudentDocuments","defaultCards","showCard","hideCard","disabledMessage","DisabledMessage","PreviousAngularLogin","settingsClick","hasPrivilege","checkInOutButtonClick","getCheckInOutSubmissionRequest","Op","absentNoticeButtonClick","E_","SubmittedPeopleId","bf","tu","b_","Pm","Cf","xf","hasSummaryCard","_defaultCards","getCardCourseRequestStatus","getCardOnlineRegistrationStatus","getGradingPeriodDetails","observableParentAssignedPortals","observableAcademicYearAttention","updateParentAssignedPortals","getParentAssignedPortals","_lastSelectedCalendarDate","_lastSelectedCalenderView","NoSchoolPolicy","getStudentSummary","chunk1","chunk2","updateAcademicYearAttention","academicYearAttention","includeInactiveTeams","_includeInactiveTeams","showStudentTeams","ParentPortalShowStudentTeams","teamService","getStudentTransportation","transportation","showTraversaBusRoute","ShowTraversaBusRoute","traversaEnabled","TraversaEnabled","versatransEnabled","VersatransEnabled","ShowTraversaBusNumber","showErrorMessage","transportationService","getTransportation","ErrorMessage","loadStudentTransportation","getPadding","detailPadding","destinationRef","moreRef","daysRef","pickUpPadding","pickUpTimeRef","pickUpLocationRef","pickUpBusRef","Tn","yt","Te","processDynamicProperties","statusText","ri","isDebug","IsChangePasswordUrl","requiredCurrentPassword","passwordValidation","newPassword","repeatNewPassword","currentPassword","currentPasswodRef","newPasswordRef","repeatNewPasswordRef","MinimumPasswordLength","ForceChangeExpiredPass","ForceChangePassword","forgotUserNameForm","OnChanges","forgotUserName","valid","isEmailSent","duplicateRecords","firstNameError","lastNameError","emailAddressError","forgotUserNameClick","forgotPasswordForm","forgotUsernameDialogRef","forgotPassword","formErrors","isProcessBusy","classicSetPassword","studentResetPasswordWarningDialogRef","currentApplicationClick","copyrightYear","setUserType","defaultTabIndex","ParentPortalShowParentTab","ParentPortalShowStudentTab","forgotPasswordClick","ShowForgotUserNameLink","check","getCookieRegExp","getAll","ka","toUTCString","Zi","deleteAll","token","args","decorators","Or","uo","ls","enableSelfRegistrationCode","EnableSelfRegistrationCode","registerNewFamily","showPopupOnly","displayAsPopupOnly","verifyCode","invalidCombination","codeExpire","redirectQR","cancelButtonLabel","setDefaultLang","inputCode","verifyEmail","inputEmail","alreadyHaveCodeClick","interpolatedString","modalInstanceYesClick","modalInstancePreviousClick","dialogWidth","dialogWindow","linkAlreadySentDialogRef","loginExistsDialogRef","duplicateEmailDialogRef","emailNotSentDialogRef","emailSentDialogRef","language","auditLogin","IsAdminLogin","loginservice","yournameRef","typeRef","isLinkExpired","resetPasswordMessage","forgotPasswordParams","resetPasswordForm","validators","newPasswordError","repeatNewPasswordError","LoginButton360Click","staffGoogleAuthenticationChange","staffTIDChange","registerNewFamilyClick","googleUserAuthentication","LoginButtonClick","Us","kl","wc","zl","Wc","jm","Lu","yp","Yp","Hm","isResetPasswordSaved","forgotPasswordDialogRef","op","activateGoogleAuthenticationForStaff","staffGoogleAuthentication","staffTID","showUserType","loginError","_loginError","checkVersions","cookieAccessToken","cookieService","cookieMemId","cookieUserType","useTID","googleAuthentication","GoogleAuthentication","GoogleClientId","ActivateGoogleAuthenticationForStaff","activateGoogleAuthenticationForStudent","ActivateGoogleAuthenticationForStudent","impersonateAccessToken","impersonateUser","detectIE","badBrowser","expired","v9TIDAuthentication","userNameRef","DisplayGoogleClassroom","googleScope","EnableGoogleIdentityServices","gapi","load","auth2","cookiepolicy","prompt","ux_mode","googleError","details","endCheckVersions","versionCheckInterval","OneSISVersion","loginFromLegacy","code","EA","UT","IT","SP","GALDSAuth","NavigateToEForms","redirectToEForms","manageEformsFilter","getClassicCurrentUser","opener","forgetPasswordParams","getForgotPasswordDetail","replaceState","setEFormsConfig","setTime","cookie","usingCookie","redirectingToClassic","isLoggedInError","resetPasswordDetail","DisplaySeparateUserTypes","StaffUserUseADPassword","StudentUserUseADPassword","ActiveDirectoryAgentURL","activeDirectoryAddressNotSet","setLocalStorage","access_token","ForceSDMADMINAudit","forceUserToClassic","forceToClassic","UserIsLocked","UserIsDisabled","UserCanAccessClassroom","redirectUserTo360","LegacyURL","ActivateStudent360","RedirectTeachersTo360","showOverlay","legacySelectedStudentId","getUserFavorites","getDistrictSchools","ActivateBehavior360","queryStringAction","referrallink","referralStatus","redirectFromClassic","BlockClassroom360","legacySelectedStaffId","DefaultLoginScreen","forgetPassword","setUserIndex","ResetPasswordDialogRef","openNewFamilyRegistrationPopup","selectLanguageDialogRef","registerFamilyMessageDialogRef","registerNewFamilyDialogRef","LoginYearId","ForceTeachersDate","loginOnly360DialogRef","EFormNonResident","EFormUseRoles","loginWithGoogle","google","accounts","oauth2","initTokenClient","callback","expiresDateTime","googleUser","validateGoogleToken","requestAccessToken","getAuthInstance","signIn","getAuthResponse","id_token","zone","run","hasSignedIntoGoogle","onEnterKeyDown","sr","loadChildren","r","fi","FamilyRegistrationModule","StudentAttachmentModule","Classroom360Module","Student360Module","Counselor360Module","Admin360Module","StateReportingModule","Management360Module","Health360Module","Sped360Module","SpecialServiceEvaluationsModule","Utilities360Module","TylerUModule","redirectTo","pathMatch","onSameUrlNavigation","relativeLinkResolution","anchorScrolling","setHeaders","Authorization","La","inactiveTime","logoutStartTime","addEventListener","closeDialog","secondCount","sa","revertToStudentSummary","legacyVersion","LegacyVersion","aboutTyler","editFavorites","clearFocus","ViewSpEdHome","ViewSpecialServicesHome","clearStudentInFocusClick","yi","courseSelected","studentInFocusClick","pulseLinkClick","openReportsWindow","addFavoriteClick","editFavoriteClick","favoritesMenuTriggerRef","addLinkClick","editLinkClick","linkSelected","linksClick","TylerUClick","aboutTylerSISClick","documentationClick","setNotificationPreferencesClick","changeEmailAddressClick","changePasswordClick","mealServiceClick","userPreferencesClick","toggleClick","homeClick","languageClick","toggleEvent","userInitials","getUserLoginFromLegacy","EnablePulseSSO","getPulseList","showNotificationPreferencesLink","studentSubscription","observableStudentsStream$","parentPortalsDeepCopy","getSelectedSchoolYearStatus","schoolsSubscription","observableSchoolsStream$","isLoggedInSubscription","isLoggedInStream$","staffAssignedPortalSubscription","isPageLoadedSubscription","myClassesSubscription","getAttendanceClasses","getGradebookClasses","parentPortalsSubscription","logAccessDeniedInfo","portalAccessDeniedDialog","PrimaryContact","setSchoolDisabledSubscription","observableSetSchoolDisabledStream$","showSchoolDropdown","setYearDisabledSubscription","observableSetYearDisabledStream$","disableYearDropdown","loginSettingSubscription","observableIntegrateWithTylerUStream$","UserID","Timestamp","MachineName","StackTrace","showMenuButton","getUserName","revoke","userLoginFromLegacy","stopImpersonating","stopImpersonateClick","changeEmailDialogRef","ChangePasswordDialogRef","expandGroup","menuPortalClick","studentMenuPortalClick","parseUrl","favoritesDialogRef","districtLinks","myLinks","addLinkDialogRef","studentInFocus","studentInFocusDialog","showLanguageLinks","languageLinkVisible","showUserLinks","EnableMyReports","Va","guard","courseCategory","gradebookClasses","attendanceClasses","ee","showYearDropdown","enableClassDropdown","hidePrintButton","windowWidth","ActiveDirectoryUser","showChangePassword","AllowStudentsToChangeTheirPassword","impersonateByUserId","PulseURL","getJSON","PulsePages","FavoritePages","pulsePageList","pulseFavoriteList","pulseWindow","showFavorites","favoritesShown","aboutTylerSISDialog","helpContextId","IsOverride","addEditLinkPrivilege","redirectTo360","tylerUSetttingError","TylerUSettingDialog","currentURL","sc","So","Co","submit","$l","pageWidthCenter","pageHeightCenter","showSpinnerSharedSubscription","observableShowSpinnerStream$","hideSpinnerSubscription","observableHideSpinnerStream$","showSpinnerSubscription","loadingChain","sd","kr","sideNaveOpened","closeSideNav","setCurrentComponent","showAppHeaderSubscription","observableShowAppHeaderStream$","loginSubscription","observableLoginStream$","setTimeoutSettings","resetIdleTimeout","addOverlayClickListener","usertype","configureLinksForQuill","className","elementFromPoint","initMouseEvent","showLoadingImage","appTimeout","TimeoutTime","tracking","ActivateApplicationMonitoring","instrumentationKey","loadingPageUrl","pageLoading","startPageLoadTime","clearLoadTimer","loadedPageUrl","origin","startViewTime","sidenav","applicationMenuComponent","idleTimeout","showTimeoutModal","startLogoutCountdown","inactivityDialog","stopLogoutTimer","Nn","or","getTranslation","logOutClick","Iu","hd","observableLoginErrorStream$","handleError","noInternetDialogRef","checkingNetworkConnection","onLine","canContactServer","showNoInternetModal","XMLHttpRequest","hostname","continuousChecking","connectionRestored","Vd","ss","bootstrap","Ut","Yo","_a","Fi","useFactory","$e","Ar","loader","missingTranslationHandler","currentLang","translations","missingTranslations","il","Qs","bootstrapModule","catch","interpolate","interpolateFunction","interpolateString","compile","compileTranslations","onTranslationChange","onLangChange","onDefaultLangChange","defaultLang","langs","getDefaultLang","retrieveTranslations","setTranslation","lang","getLangs","addLangs","updateLangs","getParsedResult","getStreamOnTranslationChange","stream","changeLang","changeDefaultLang","reloadLang","resetLang","getBrowserLang","getBrowserCultureLang","translate","translateParams","checkNodes","updateValue","getContent","setContent","_dispose","Courier","Helvetica","Symbol","ZapfDingbats","WinAnsi","templateRef","$implicit","onItemClick","keyDownHandler","keyPressHandler","keyUpHandler","onRemoveClick","setButtonLook","productName","productCodes","publishDate","version","licensingDocsUrl","rtl","togglable","icon","iconClass","isFocused","classButton","classPrimary","isToggleable","isFlat","isBare","isOutline","isClear","roleSetter","classDisabled","classActive","getDirection","removeAttribute","setSelected","toggleAriaPressed","hasText","addImgIcon","addIcon","prependChild","defer","iconSetter","removeImageNode","removeIconNode","updateIconNode","setIconTextClasses","toggleClass","_onButtonClick","toggleable","outputs","exportAs","isDefaultPrevented","wrapperClass","disabledClass","stretchedClass","getRole","ariaDisabled","wrapperWidth","wrapperTabIndex","focusout","ngAfterContentChecked","navigateFocus","deactivate","activate","defocus","verifySettings","isSelectionSingle","hostVars","selection","encapsulation","getText","getIconClasses","directives","resetFocus","subscribeEvents","unsubscribeEvents","templateContext","animate","popupClasses","openState","togglePopupVisibility","subscribeListItemFocusEvent","subscribeComponentBlurredEvent","subscribeNavigationEvents","enterHandler","keyHandler","altKey","current","keyEvent","emitItemClickHandler","focusFirstItem","focusWrapper","wrapperContains","blurWrapper","focusButton","handleTab","process","step","isEnter","useLeftRightArrows","componentTabIndex","widgetClasses","onButtonFocus","onArrowButtonClick","toggleButtonActiveState","toggleArrowButtonActiveState","onButtonClick","onButtonBlur","keypress","keyup","anchorAlign","horizontal","popupAlign","isOpen","updateButtonText","appendTo","_toggle","createPopup","anchor","popupClass","destroyPopup","buttonClick","read","splitButtonLabel","features","override","mousedown","mouseup","openPopup","handleFocus","onNavigationEnterUp","onNavigationOpen","onNavigationClose","onArrowKeyNavigate","itemClick","ariaChecked","outlineClass","solidClass","hasIconClass","selectedClass","focusedClass","iconClasses","selectedIconClasses","removeIconClasses","typeClass","none","success","info","sender","attachElementEventHandlers","look","remove","single","multiple","selectedChips","setSelection","clearSelection","small","medium","large","pill","circle","rectangle","square","rounded","fixedClass","absoluteClass","themeColor","shape","offset","toggleDial","role","ariaExpanded","ariaHasPopup","flipNavigation","focusHandler","blurHandler","handleClasses","onEnterPressed","emitItemClick","onNavigationEnterPress","alignClass","applyClasses","toggleDialWithEvents","closePopup","openDial","closeDial","isValidAnimation","positionPopup","element","getBoundingClientRect","offsetStyles","hasDialItems","verticalPosition","middle","verticalOffset","center","horizontalOffset","playerFor","builder","playAnimation","gap","opacity","optional","durationSettings","animationGap","positionMode","bottomClass","topClass","dialItems","attrs","indexAttr","itemTitle","getTextDirectionClass","ltr","cssClass","toggleDraggable","drag","press","release","destroyDraggable","enableDrag","kendoPress","acceptSize","checkChanges","destroy","checkSize","initSize","measure","render","isScheduled","flush","rateLimit","actionTemplate","buttonClass","Boolean","closeButtonTitle","onCloseClick","originalEvent","htmlAttributes","initDomEvents","setServiceClasses","handleInitialFocus","handleActionButtonFocus","keepFocusWithinComponent","shouldFocusPrimary","getAllFocusableChildren","getFirstAndLastFocusable","generateTitleId","generateContentId","bubble","actionsLayout","animation","descendants","initializeDialog","applyOptions","contentFrom","componentRef","draggable","resizable","state","pageX","originalX","originalY","pageY","onDrag","handleDrag","handleResize","restoreAction","defaultState","storeOptions","maximizeAction","maximizeState","minimizeAction","minimizeState","applyManualState","closeAction","ensureWidth","clearHeight","currentOffsetAndPosition","currentPosition","setPosition","setRestoreOption","nextPossibleZIndex","nextZIndex","windowViewPort","hostClass","setDisplay","subscribeDrag","subscribeStateChange","unsubscribeDrag","unsubscribeState","touchAction","isDraggable","handleArrow","handleEscape","handleStateChange","restoreButtonTitle","maximizeButtonTitle","minimizeButtonTitle","hostClasses","bringToFront","setDimension","setOffset","showDefaultTitleBar","styleMinWidth","styleMinHeight","stylePosition","wrapperMaximizedClass","wrapperMinimizedClass","onComponentFocus","onComponentBlur","setNextZIndex","setInitialOffset","updateAllOffset","setStyle","removeStyle","setOption","keepContent","visible","closeTitle","Ga","Ft","Y","cr","va","Gt","Qn","notify","expand","dataItem","collapse","nodeIndex","indexForLevel","lastLevelIndex","notifyLoaded","Jo","Ds","doesnotcontain","startswith","doesnotstartwith","endswith","doesnotendwith","firstVisibleNode","lastVisibleNode","closestNode","prev","firstFocusableNode","findNode","findParent","findVisibleChild","findVisiblePrev","ko","findVisibleNext","registerItem","unregisterItem","childLevel","insert","visibleSibling","activeIndex","isActiveExpanded","isLoadMoreButton","focusableItem","activateParent","activateIndex","activateClosest","activateFocusable","checkIndex","selectIndex","notifyLoadMore","isActive","isFocusable","move","moveToParent","moveToFirstVisibleChild","notifyExpand","notifyMove","navigationState","handleEnter","handleSpace","childrenLoaded","isFirstSelected","setFirstSelected","registerChildren","replaceItem","itemLookup","hasItem","addToParent","mapChildren","nodeTemplateRef","loadMoreButtonTemplateRef","isExpanded","rebindChildren","expandNode","collapseNode","getNodePageSize","setNodePageSize","preloadChildNodes","attachDomHandlers","keydownHandler","verifyLoadMoreService","registerLookupItems","filterInputPlaceholder","moreNodesAvailable","loadMoreButtonIndex","totalNodesCount","hasTemplate","checkNode","nodeText","fetchChildren","nextFields","loadMoreNodes","loadMoreLocalNodes","fetchMoreNodes","skip","take","setNodeChildren","mapToTreeItem","emitChildrenLoaded","subscribeToNodesChange","reselectItemAt","registerLoadedNodes","loadOnDemand","checkedKeys","checkChildren","checkParents","enabled","mode","isItemChecked","isIndexChecked","itemKey","checkSingle","checkMultiple","toggleCheckOnClick","unsubscribeClick","addCheckedItemsChildren","checkedKeysChange","disabledKeys","maxAutoExpandResults","expandMatches","expandedOnClear","filterExpandSettings","ni","expandedKeys","toggleExpand","handleAutoExpand","ws","expandOnFilter","expandedKeysChange","selectedKeys","getAriaMultiselectable","selectSingle","selectMultiple","na","Ti","selectedKeysChange","gr","setValid","is","sourceItem","getParentNodes","childrenFor","statusIconClass","show","hide","animateDragClueToElementPosition","cancelReturnAnimation","updateDragClueData","updateText","scrollIntoView","cancelScroll","updateDropHintData","interval","scrollSettings","handlePress","clientX","Wo","handleRelease","updateDropHintState","updateDragClueState","initalizeDraggable","notifyDragStart","notifyDrag","destinationItem","notifyDrop","notifyDragEnd","getTargetTreeView","disableAnimationsForNextTick","shouldInitiateDragStart","sqrt","initiateDragStart","No","allowCopy","ignoreCase","filterSettings","handleFilterChange","matchCount","updateVisibleNodes","resetNodesVisibility","Di","childrenField","isVisible","getLastVisibleChildNodeIndex","addChildNodes","removeChildNodes","fetchAllDescendantNodes","fetchChildNodes","rebindData","za","qo","isButton","treeItem","parentTreeItem","registerNavigationItem","activateItem","focusItem","moveLookupItem","moveNavigationItem","updateNodeAvailability","setAriaAttributes","setDisabledClass","setClass","updateTabIndex","updateFocusClass","updateSelectionClass","classWrapper","indeterminate","ngDoCheck","handleChange","checkStateChange","editService","handleAdd","handleRemove","getInitialPageSize","getGroupSize","setGroupSize","getTotalNodesCount","getInitalPageSize","_next","tryCallPredicate","ta","onCheckedChange","listResize","uc","Al","kc","clearValue","filterText","handleFilter","onFilterFocus","blurFilterInput","clearAll","updateHeaderPadding","handleFilterInputChange","handleKeydown","handleBlur","onSelectionChange","nodeExpand","nodeCollapse","handleCheckedItemsChange","toggleCheckAll","handleNodeClick","deleteTag","Ud","lo","Uc","zc","qc","Gp","Sp","vs","xp","gh","bp","Qp","Hd","gc","Xd","Hh","Nu","Bu","Dp","vh","Tu","userInput","jd","writeInputValue","setInputSelection","setInputSize","Rl","Hl","Jc","Yc","Jl","getTotal","indices","newSelection","added","unselect","removed","change","resetSelection","Sl","itemsCount","isGrouped","getGroupIndices","closestGroup","flatIndex","itemAt","groupAt","groupField","itemGroup","flatten","offsetIndex","Sc","isIndexDisabled","isItemDisabled","vc","ec","clampIndex","firstFocusableIndex","jc","yu","overflowY","firstVisibleItem","hf","findCurrentGroup","prefetchData","scrollToItem","scrollToIndex","scroll","hasScrollbar","setOverflow","hasVirtualScrollbar","positionItems","firstGroupHeaderInTargetedPage","Il","Kc","dm","zm","Ic","cp","listContainerClasses","suggestion","suggest","clearButtonVisiblity","togglePopup","triggerPopupEvents","activeDescendant","noDataLabel","clearTitle","itemDisabled","virtual","setDisabledState","focusItemAt","emitChange","handleNavigate","searchBarChange","subscribeTouchEvents","handleItemChange","handleItemFocus","removeEventListener","Im","findIndexPredicate","setMessages","highlightFirst","valuePrimitive","clearable","popupWidth","popupHeight","createValueStream","custom","attachStreams","isEmpty","buttonClasses","setState","updateState","clearState","findDataItem","getSuggestion","selectionService","handleNavigationOpen","emitValueChange","preventEventDefault","focusedItemText","restoreItemFocus","useSuggestion","attachSelectClickHandler","al","focusableId","zd","widgetTabIndex","ariaOwns","ariaActivedescendant","blurComponent","focusComponent","filterable","isDisabledDefaultItem","getDefaultItemText","itemFromEvent","currentOrDefault","componentBlur","onMouseDown","onKeyPress","selectNext","cm","lp","assignAriaDescribedBy","zs","$p","eu","Td","Md","Cm","y_","onSearchBarFocus","onSearchBarBlur","wrapperMousedown","checkboxes","Wh","handleRemoveTag","tag","addCustomValue","differ","onTagMapperChange","removeGroupTag","removeSingleTag","pf","disabledItemsMapper","createCustomValueStream","handleClose","handleEnd","handleHome","handleUp","handleBackspace","handleDelete","handleLeftKey","handleDownKey","handleRightKey","searchTextAndFocus","resolveDataItemFromTags","tags","nextTick","Js","wp","um","Tm","Vf","yc","zh","Uf","textFrom","h_","addWindowResizeListener","updateColumnsMediaState","xd","pd","lu","Cu","ff","f_","Yh","treeview","mm","tabindex","handleClick","popupContainerClasses","messageFor","ol","Vc","clearButton","_f","jf","__","Q_","$_","up","checkableSettings","dataItems","focusedTagId","isTagFocused","isTreeViewActive","isWrapperActive","isFilterActive","isCheckAllActive","navigationService","handleTagMapperChange","handleTabKey","handleUpKey","removeTreeViewFromTabOrder","setTags","Xs","valueDepth","oc","Uu","pm","hm","ld","fm","tagProp","isTagDisabled","itemId","isGroupTag","tagAriaHidden","getPropField","disabledIndices","removeTag","lc","noDataText","_m","cd","caseSensitive","matchesAnyField","checkItem","normalizeValue","qd","Wm","Jd","focusedClassName","selectedClassName","addItem","updateItems","gm","checkedItems","getCheckedState","handleCheckedChange","checkable","isItemIndeterminate","checkedItemsChange","allChecked","someChecked","Pu","lastAction","vm","createTagMapper","Tp","showAfter","qu","Ju","Mp","g_","yh","Pp","v_","ym","lt","h","B","K","addToStart","addToEnd","addBefore","g","prepend","append","O","De","hn","childCount","Rt","empty","fromJSON","fromArray","copy","maxOpen","doc","textOffset","nodeAfter","nodeBefore","xi","isText","startIndex","nodeSize","isBlock","isTextblock","inlineContent","isInline","isLeaf","isAtom","node","defaultType","edgeCount","Ki","zr","mr","Ua","isRequired","schemaRules","fromSchema","address","dd","footer","h6","head","currentPos","da","dom","before","docChanged","stepType","gapFrom","depth","sliceDepth","Ho","ys","Rs","sl","Mo","_s","Kl","nd","ud","$from","$to","Ha","between","$cursor","pos","isSelectable","resolve","no","selectionSet","storedMarksSet","isGeneric","scrolledIntoView","schema","plugins","tr","after","storedMarks","dispatch","Vl","ia","except","rr","hasNodesWithoutMarks","marks","altStyle","mark","si","ranges","_n","ji","blocksInSelection","Aa","Gr","Uo","Mr","contentMatch","orderedList","bulletList","listItem","listType","rtlStyle","unit","listsTypes","clearIncompatible","Enter","Backspace","Bc","rp","wu","Ld","su","Ul","fu","paragraph","om","ts","qs","jl","Bd","vd","sm","props","handleKeyDown","contentEditable","sp","Em","gu","Uh","jh","Kp","$head","border","posBefore","posAtStart","posAfter","posAtEnd","contentLost","domAtom","ignoreForCoords","ignore","pmIsDeco","wm","Xu","Zd","Cl","Xp","Vu","topNode","topMatch","topOpen","preserveWhitespace","editableContent","findPositions","ruleFromNode","Zp","tp","np","Rh","Gu","contentMatchAt","matchType","thead","tbody","tfoot","caption","colgroup","col","td","th","childList","characterData","characterDataOldValue","attributeOldValue","subtree","typeOver","Hf","addAttr","setUneditable","gf","vf","X_","Ch","spec","inline","widget","removeOverlap","Dl","Yd","root","raw","refDOM","S_","Vh","Bh","preventScroll","Dm","Nl","Ym","eh","nh","Mc","colspan","rowspan","colwidth","Qh","Sh","Kf","nextCell","Cd","xu","bm","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Qf","tableStart","w0","Lg","Zh","zg","Pv","km","Kg","Kd","createAndFill","T0","useDeprecatedLogic","Fl","zu","P_","M_","Pd","inclusive","parseDOM","toDOM","link","default","class","getAttrs","Tl","group","div","blockquote","defining","horizontal_rule","heading","code_block","src","alt","hard_break","selectable","ordered_list","bullet_list","list_item","tableRole","isolating","table_row","table_cell","table_header","wv","tableGroup","Hc","Ou","remaining","O_","ed","Xm","Bv","redo","jv","k0","ev","newGroupDelay","qg","Vv","P0","handleDOMEvents","beforeinput","Jg","altMarks","F0","L0","tv","qf","Gv","Qv","Zm","Ny","ah","dg","zv","ou","Eu","xc","xl","Kv","applyToWord","N0","$v","iv","rv","V0","U0","Xv","Zv","qv","k1","A1","B0","datalist","datalevel","O1","Jf","e_","H0","ug","L1","ownerElement","Ih","j0","mg","t_","tf","southeast","east","south","north","west","southwest","northwest","northeast","yg","r0","z0","Y0","Cg","a0","rect","xg","setDragging","startX","activeHandle","nodePosition","oh","N1","B1","attachResize","removeResize","decorations","sh","r_","o0","Am","lh","a_","ch","inside","Xe","Un","la","Ba","iframeOnLoad","Is","hp","V1","F_","Sg","By","onValueChange","openDialog","H1","handleValueChange","handleActiveColorClick","onOpen","onClose","K1","onCellClick","onTableWizardClick","cx","PC","o_","rf","cv","L_","dv","e1","s0","t1","n1","bg","kC","Z1","AC","af","dx","r1","Bm","q1","If","of","Th","Ky","Qy","Gy","$y","Xy","eC","table_body","table_foot","table_head","table_col","atom","table_colgroup","tC","a1","o1","c0","d0","ty","iy","u0","dh","ny","findCell","m0","colCount","rectBetween","cellsInRect","positionAt","Au","ly","c1","rowSelection","colSelection","l1","Mh","replaceWith","forEachCell","isColSelection","isRowSelection","eq","toJSON","getBookmark","s1","Dg","ay","sf","nC","iC","h0","oy","sy","N_","f0","uy","my","py","d1","rC","hy","fy","Eg","VC","UC","_y","u1","mv","cy","jC","aC","oC","pv","ZC","bold","cleanFormatting","createLink","fontFamily","fontSize","insertFile","italic","strikethrough","subscript","superscript","underline","unlink","foreColor","backColor","alignCenter","alignJustify","alignLeft","alignRight","dr","getHTML","insertImage","setMeta","insertOrderedList","insertUnorderedList","outdent","setHTML","replaceSelectionWith","undo","insertTable","ry","dy","addColumnBefore","addColumnAfter","addRowBefore","addRowAfter","deleteRow","deleteColumn","mergeCells","splitCell","deleteTable","uC","print","viewSource","mC","Od","ds","onCancelAction","onConfirmAction","getData","textFor","iu","ce","editor","Rm","normalizeDimension","Pf","titleText","textForWithPrefix","setLinkText","Ph","wf","g0","fv","Bs","JC","convertMsLists","removeAttributes","removeHtmlComments","removeInvalidHTML","removeMsClasses","removeMsStyles","stripTags","ex","wg","J0","parseOptions","readonly","resizableClass","isReadonly","isIE","RC","selectionText","getSource","Wg","I0","kv","Ov","Av","Yg","Ap","Gg","Lv","Dx","filterTransaction","w1","ap","createSelectionBetween","e0","mount","dispatchTransaction","transformPastedHTML","FC","fC","normalizeSize","attributeFilter","normalizeProperties","ns","Nr","fh","mu","Pg","Iy","vv","Ty","v1","Qu","vC","K_","d_","yv","y1","My","C0","Cv","Py","C1","x1","S1","xv","as","Rf","bu","Fm","hh","kh","Nm","kf","Lp","Gd","lf","Z0","Oh","_d","outerWidth","uv","dialogService","defaultItem","canFocus","handleKey","qm","Qd","Of","j1","Jm","fontName","ep","W1","editorCommand","paletteSettings","du","q0","getButton","Bp","$0","Y1","rows","cells","resetState","openTableWizard","pointerdownHandler","onStateChange","fp","xm","Vp","Af","df","uh","Zs","Ah","Yl","s_","Ps","_p","gp","mh","Up","Vm","V_","Ff","Ig","U_","jp","Lf","ph","Ol","uu","Du","Um","vp","j_","H_","uf","W_","_l","mf","Tg","Y_","l_","Mg","mousewheel","handleHexInputBlur","handleHexValueChange","rgba","handleRgbaInputBlur","handleRgbaValueChange","handleAlphaSliderChange","handlePopupBlur","handlePopupKeyDown","handleCellSelection","trackWidth","smallStep","resizeTrack","resizeTicks","resizeWrapper","getTickSizes","adjustPadding","elementOffset","vertical","elementSize","positionHandle","positionSelection","horizontalClass","verticalClass","keyBinding","resetStyles","incrementMessage","decrementMessage","dragHandleMessage","handleDragPress","onHandleDrag","onHandleRelease","sizeComponent","setValueChangeInterval","getProps","fixedTickWidth","largeStep","valueText","ieClass","ariaReadonly","onLabelMessage","offLabelMessage","isEnabled","setHostClasses","elementValue","setElementProperty","autoSize","textareaElementClass","invalidClass","decimals","minError","minValue","maxError","registerOnValidatorChange","notifyValueChange","incrementTitle","decrementTitle","decimalSeparator","intl","decimal","hasDecimals","arrowPress","replaceNumpadDotValue","autoCorrect","separator","spin","limitValue","limitInputValue","tryPadValue","isInRange","restrictModelValue","restrictDecimals","formatInputValue","formatValue","setInputValue","verifyValue","intlChange","hasTrailingZeros","selectCaret","numberOfLeadingZeroes","adjustSignificantChars","decrement","chain","fold","eof","char","peek","eat_input","eat_control","eat","isLiteral","includeLiterals","validationValue","maskRaw","maskInput","maskInRange","maskRemoved","adjustPosition","maskInserted","maskTokenCreator","literal","unmaskTokenCreator","rawTokenCreator","validationTokenCreator","tokenize","hostDisabledClass","rules","handleDragDrop","pasteHandler","inputHandler","patternError","maskedValue","updateInput","extractChanges","updateService","promptPlaceholder","emptyMask","setFocusSelection","createTicks","endTickClasses","tickTitle","dragHandleStart","Do","po","$o","checkClearButton","showErrorsInitial","showSuccessInitial","successIconClasses","errorIconClasses","clearButtonClasses","isSuccessful","inputFocus","both","auto","flowCol","flowRow","preventOpen","isOpenPrevented","basic","colors","office","apex","austin","clarity","slipstream","metro","flow","hardcover","trek","verve","monochrome","accessible","Gs","Dd","rgbaInputValid","toggleFormatView","fc","readonlyAttribute","hostTabindex","gradientId","alphaSliderValue","gradientRect","contrastToolVisible","onKeyboardAction","changePosition","handleHueSliderChange","handleInputsValueChange","colorGradientHandleTitle","colorGradientHandleAriaLabel","hueSliderTitle","opacitySliderTitle","clearButtonTitle","moveDragHandle","updateUI","setDragHandleElementPosition","setAlphaSliderBackground","setHostElementAriaLabel","addEventListeners","subscribeChanges","unsubscribeChanges","gradientSettings","iconStyles","palette","tileSize","handleWrapperClick","handleWrapperFocus","handleWrapperBlur","handleWrapperKeyDown","toggleWithEvents","setColorMatrix","getCellCoordsFor","getColorAt","getNextCell","paletteId","tileLayout","colorRows","handleHostBlur","handleCellFocusOnBlur","setRows","handleCellNavigation","colorPaletteNoColor","focusOnNextTick","passMessage","failMessage","contrastText","formatedRatio","contrastRatioMessage","satisfiesAACondition","satisfiesAAACondition","contrastRatio","startClass","endClass","idAttribute","Zc","errorClass","hasHints","disabledKendoInput","disabledControl","disabledElement","controlElementRefs","validateFormControl","isControlGroup","isRadioControl","updateDescription","findControlElements","generateDescriptionIds","showHintsInitial","setDescription","showHints","NoCurrency","NoCurrencyDisplay","NoCurrencyRegion","NoDateFieldNames","NoFirstDay","NoGMTInfo","NoLocale","NoValidCurrency","NoWeekData","localeId","formatDate","parseDate","parseNumber","formatNumber","dateFieldName","dateFormatNames","splitDateFormat","numberSymbols","firstDay","weekendRange","normalize","register","notifyChanges","defaultValue","wrapper","labelFor","HTMLElement","setAriaLabelledby","querySelector","getFocusableComponent","labelPosition","setLabelFor","handleAutofill","addHandlers","validateSetup","positionChange","rawBBox","matches","pdf","multiPage","_ignoreMargin","pageNum","totalPages","tableLayout","insertBefore","boxSizing","paddingLeft","paddingRight","angle","stops","br","bl","startAngle","endAngle","radiusX","radiusY","moveTo","lineTo","disc","stroke","anticlockwise","userSpace","_o","yo","documentElement","matrix","drawMargin","exportElement","cleanup","drawOptions","avoidLinks","forcePageBreak","keepTogether","repeatHeaders","pdfOptions","autoPrint","author","creator","imgDPI","keywords","producer","saveOptions","forceProxy","proxyData","proxyTarget","proxyURL","drawElement","exportGroup","saveDataUri","addOffset","addScroll","boundingOffset","getFontStyles","getWindow","hasOffsetParent","offsetAtPoint","removeScroll","restrictToView","scrollPosition","scrollableParents","stackingElementOffset","stackingElementScroll","getRelativeContextElement","useRelativePosition","zIndex","zoomLevel","isZoomed","alignElement","anchorRect","elementAlign","elementRect","absoluteRect","elementScrollPosition","relativeRect","positionElement","collisions","viewPort","flip","flipped","isUnsubscribed","forElement","transformOrigin","play","playStates","stopPlayer","onAnimationStart","onAnimationEnd","currentOffset","setZIndex","reposition","currentLocation","onScroll","copyFontStyles","updateFixedClass","setContainerStyle","unsubscribeReposition","anchorViewportLeave","rootViewContainer","rootViewContainerNode","popup","popupAnchorViewportLeave","popupClose","popupElement","popupOpen","popupPositionChange","appendPopup","getComponentRootNode","getComponentFactory","projectComponentInputs","onRendererClick","showPopup","pointerdown","selectedChangeHandler","onNavigate","onButtonListClick","onMainButtonClick","renderedTool","setRenderedTools","moveFocusToToolBar","moveFocusToPopup","focusNext","focusPrev","resetNavigation","focusFirst","getFocusableTools","blurOverflowButton","focusOverflowButton","isOverflowButtonVisible","toolbarDisplay","overflowDisplay","responsive","onFocusOut","getDir","moreToolsTitle","onPopupOpen","onPopupClose","displayAnchor","overflowAnchorWidth","childrenWidth","visibleTools","overflowTools","shrink","stretch","hideLastVisibleTool","renderedTools","showFirstHiddenTool","setPopupContentDimensions","showText","buttonElements","getButtonGroup","overflowButtons","getElement","findFocusable","findFocusableChild","findNextFocusableSibling","findPrevFocusableSibling","isDisplayed","tool","rendererClick","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","ios","flat","edge","webkit","safari","opera","msie","mozilla","omini","omobile","firefox","mobilesafari","chrome","toHex","resolveColor","normalizeByte","padDigit","brightness","percBrightness","isDark","aliceblue","aquamarine","bisque","blue","burlywood","chocolate","cornsilk","darkblue","darkgray","darkkhaki","darkorange","darksalmon","darkslategray","darkviolet","dimgray","firebrick","fuchsia","gold","grey","honeydew","indigo","lavender","lemonchiffon","lightcyan","lightgrey","lightsalmon","lightslategray","lightyellow","linen","mediumaquamarine","mediumpurple","mediumspringgreen","midnightblue","moccasin","oldlace","orange","palegoldenrod","palevioletred","peru","powderblue","rosybrown","salmon","seashell","skyblue","slategrey","steelblue","thistle","violet","whitesmoke","toHSV","toRGB","toBytes","toCss","toCssRgba","toDisplay","equals","toHSL","browser","observers","addObserver","removeObserver","optionsChange","geometryChange","suspend","resume","_observerField","_set","_clear","_wrap","setCenter","getCenter","pointAt","curvePoints","rotate","bbox","_arcInterval","_intervalCurvePoints","p1","cp1","cp2","p2","_derivativeAt","containsPoint","_isOnPath","xRotation","x2","y2","rx","largeArc","swipe","rotation","_pointAt","multiplyCopy","invert","translateWith","scaleCopy","transformCopy","distanceTo","ZERO","setOrigin","getOrigin","setCornerRadius","getCornerRadius","setSize","getSize","topLeft","bottomRight","topRight","bottomLeft","expandCopy","addConstant","negate","multiply","multiplyConstant","nthRoot","isReal","bboxTo","_lineBoundingBox","_curveBoundingBox","_curveExtremesFor","_curveExtremes","_intersectionsTo","_isOnCurveTo","_isOnLineTo","_isOnPathTo","_optionsChange","_change","nodeType","_createStops","addStop","removeStop","radius","fallbackFill","traverse","controlOut","controlIn","isRelative","previousCommand","decode","encode","readByte","writeByte","readShort","writeShort","readLong","writeLong","readFixed","writeFixed","readShort_","writeShort_","readLong_","writeLong_","readFixed_","writeFixed_","write","readString","writeString","times","saveExcursion","writeBase64","base64","checksum","readTable","offsetOf","lengthOf","advance","lsb","forGlyph","compound","glyphFor","offsets","platformID","platformSpecificID","languageID","nameID","encodeText","glyphIds","glyphsFor","cmap","glyf","loca","hmtx","hhea","maxp","cidToGidMap","widthOfGlyph","makeSubset","Wt","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c2","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","jpegQuality","keepPNG","Names","JS","Producer","Author","Keywords","Creator","CreationDate","Contents","Parent","MediaBox","Root","Info","getFont","getImage","getOpacityGS","_resourceName","dict","in","beforeRender","escape","setPages","Kids","Subtype","BitsPerComponent","Filter","ColorSpace","SMask","BaseFont","getTextWidth","Length1","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","W","CIDToGIDMap","_makeCidToGidMap","FunctionType","Domain","Range","hasAlpha","opacities","Functions","Bounds","Encode","ShadingType","Coords","Function","Extend","AIS","CA","FormType","BBox","CS","Resources","ExtGState","Shading","shading","Font","XObject","Pattern","_out","beginText","endText","_requireTextMode","_requireFont","setTextLeading","setTextRenderingMode","showTextNL","addLink","Rect","Border","URI","setStrokeColor","setOpacity","setStrokeOpacity","setFillColor","setFillOpacity","gradient","setDashPattern","setLineWidth","setLineCap","setLineJoin","setMitterLimit","restore","bezier","bezier1","bezier2","ellipse","nop","clip","clipStroke","closeStroke","fillStroke","drawImage","_context","_toPage","variant","lineHeight","serif","monospace","zapfdingbats","fillAndStroke","invisible","fillAndClip","strokeAndClip","fillStrokeClip","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","butt","miter","bevel","Path","MultiPath","Circle","Arc","Text","addMargin","_bbox","_containsPoint","_initOptions","parentTransform","currentTransform","clippedBBox","_hasFill","_hasStroke","_clippedBBox","shift","_splice","_add","_remove","_setObserver","_clearObserver","childrenChange","items","insertAt","removeAt","_reparent","curveTo","arc","arcTo","_addArcSegments","put","baselineMarkerSize","_baselineMarker","anchorSize","viewPortSize","anchorAlignPoint","elementAlignPoint","fitted","fit","arraySet","flattenChunks","Buf8","Buf16","Buf32","wsize","bits","wrap","chunkSize","windowBits","onData","onEnd","pending","method","memLevel","strategy","clientY","isTouch","which","bindTo","_bindToCurrent","_unbindFromCurrent","_usePointers","formatMessage","NoSupplementalCurrency","identity","_number","_cldrVersion","territory","numbers","symbols","percentSign","plusSign","minusSign","exponential","superscriptingExponent","perMille","infinity","nan","timeSeparator","patterns","groupSize","scientific","percent","currency","currencies","BGN","displayName","symbol","EUR","USD","localeCurrency","accounting","calendar","gmtFormat","gmtZeroFormat","d","dateTimeFormats","full","long","short","availableFormats","Bhm","Bhms","EBhm","EBhms","Ed","Ehm","EHm","Ehms","EHms","GyMMM","GyMMMd","GyMMMEd","H","hms","Hms","hmsv","Hmsv","hmv","Hmv","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","yQQQ","yQQQQ","timeFormats","dateFormats","abbreviated","narrow","wide","quarters","dayPeriods","midnight","am","noon","morning1","afternoon1","evening1","night1","eras","dateFields","era","quarter","week","dayperiod","second","millisecond","supplemental","likelySubtags","currencyData","region","US","_from","weekData","weekendStart","weekendEnd","eraAbbr","eraNames","eraNarrow","minimumFractionDigits","fractions","maximumFractionDigits","number","negative","negativeZero","numeric","specifier","getSpecifier","nameType","standAlone","lower","k","shortHours","optionalMinutes","localizedName","zZeroOffset","idx","valueIdx","hours","minutes","seconds","milliseconds","noSeparator","zLiteral","minLength","dayStart","dayEnd","precision","isPast","isFuture","isWeekend","weekStartsOn","date1","date2","excluded","startOfWeek","startOfWeekDate","totalDaysInView","span","startsBeforeWeek","endsAfterWeek","hourSegments","weekendDays","viewStart","viewEnd","segmentHeight","eventWidth","segments","periodStart","periodEnd","startsBeforeDay","endsAfterDay","nc","allDayEvents","period","isStart","allowUpdate","metaKey","button","relatedTarget","down","maxSpeed","point","scrolling","_tryPredicate","_complete","activeLongPressDrag","longPressConfig","timerBegin","currentDrag$","transformX","transformY","scrollLeft","cancelDrag$","autoScroll","cursor","willChange","pointerEvents","dragCancelled","dropData","checkEventListeners","onMouseUp","onTouchStart","passive","onTouchEnd","onMouseEnter","onMouseLeave","canDrag","setCursor","unsubscribeEventListeners","setElementStyles","getScrollElement","getScrollPosition","shouldBeginDrag","delta","timeLongPress","enableScroll","disableScroll","dragAxis","dragPointerDown","dragSnapGrid","ghostDragEnabled","showOriginalElementWhileDragging","validateDrag","dragCursor","dragActiveClass","ghostElementAppendTo","ghostElementTemplate","touchStartLongPress","ghostElementCreated","updateCache","dragOverClass","dragEnter","validateDrop","dragLeave","dragOver","leftOrRight","topOrBottom","edges","elm","allowedEdges","cursorPrecision","initialRectangle","newRectangle","startingRect","currentRect","setElementClass","resizeEdges","resizeStart","validateResize","enableGhostResize","resizeSnapGrid","resizeCursors","resizeCursorPrecision","ghostElementPositioning","allowNegativeResizes","mouseMoveThrottleMS","resizing","resizeEnd","onMousedown","onMouseup","onMousemove","listenOnTheHost","resizableContainer","contents","toggleDayHighlight","eventDropped","allDayEventResizeStarted","allDayEventResizeEnded","dragStarted","allDayEventDragMove","timeEventResizing","timeEventResizeEnded","dragMove","hourSegmentClicked","dayHeaderClicked","weekEvent","segment","resizeEnded","dragEnded","dayEvent","customTemplate","pipes","placement","onMouseOver","onMouseOut","positionTooltip","appendToBody","excludeDays","daysInWeek","monthViewColumnHeader","monthViewDayNumber","monthViewTitle","weekViewColumnHeader","weekViewColumnSubHeader","weekViewTitle","weekViewHour","dayViewHour","dayViewTitle","monthTooltip","weekTooltip","dayTooltip","getMonthView","rowOffsets","totalDaysVisibleInWeek","getWeekViewHeader","getWeekView","allDayEventRows","absolutePositionedEvents","eventsInPeriod","hourColumns","getDayView","getDayViewHourGrid","newStart","newEnd","refreshHeader","refreshBody","checkActiveDayIsOpen","refreshAll","emitBeforeViewRender","beforeViewRender","activeDayIsOpen","tooltipPlacement","tooltipTemplate","tooltipAppendToBody","headerTemplate","cellTemplate","openDayEventsTemplate","eventTitleTemplate","eventActionsTemplate","eventTimesChanged","highlightDay","openDay","unhighlightDay","resizeStarted","timeEventResizeStarted","originalOffset","originalSpan","allDayEventResizing","getDayColumnWidth","snapDraggedEvents","dragAlreadyMoved","getDragMovedEventTimes","restoreOriginalEvents","getTimeEventResizedDates","eventTemplate","hourSegmentHeight","dayStartHour","dayStartMinute","dayEndHour","dayEndMinute","hourSegmentTemplate","eventSnapSize","allDayEventsLabelTemplate","tooltipDisabled","isTimeLabel","originalTop","originalHeight","refreshHourGrid","refreshView","hourGrid","ye","keepCharPositions","inputElement","conformToMask","ApplicationInsights","downloadAndSetup","_defineLazyMethods","enumerable","autoBom","Xn","define","iterator","TypeError","writable","propertyIsEnumerable","trimLeft","trimRight","isInteger","self","global","U","tt","publish","getTopics","orientation","compress","compressPdf","userUnit","putOnlyUsedFonts","__private__","PubSub","getPdfVersion","setPdfVersion","ledger","getPageFormats","getPageFormat","f2","f3","getFileId","setFileId","convertDateToPDFDate","convertPDFDateToDate","setCreationDate","getCreationDate","padd2","setCustomOutputDestination","resetCustomOutputDestination","out","getArrayBuffer","ArrayBuffer","getStandardFonts","getFontSize","R2L","setR2L","getR2L","setZoomMode","getZoomMode","setPageMode","getPageMode","setLayoutMode","getLayoutMode","setDisplayMode","getDocumentProperty","getDocumentProperties","setDocumentProperties","setProperties","setDocumentProperty","hotfixes","newObject","newObjectDeferred","newAdditionalObject","objId","decodeColorString","encodeColorString","ch1","ch2","ch3","ch4","pdfColorType","RGBColor","getFilters","putStream","alreadyAppliedFilters","addLength1","additionalKeyValues","API","processDataByFilters","reverseChain","putPage","mediaBox","contentsObjId","topRightX","bottomLeftX","topRightY","bottomLeftY","rootDictionaryObjId","resourceDictionaryObjId","cropBox","bleedBox","trimBox","artBox","pageContext","pageNumber","putPages","isAlreadyPutted","objectNumber","postScriptName","encoding","fontStyle","isStandardFont","metadata","pdfEscape","sourceEncoding","outputEncoding","autoencode","codePages","noBOM","beginPage","getNumberOfPages","disableWarning","noFallback","normal","putInfo","putCatalog","putTrailer","putHeader","putXRef","buildDocument","getBlob","filename","foo","stack","bar","getPageInfoByObjId","getCurrentPageInfo","setPage","insertPage","movePage","deletePage","flags","lineHeightFactor","TabLen","scaleFactor","baseline","mutex","activeFontKey","fonts","activeFontSize","PI","cos","sin","charSpace","renderingMode","usedRenderingMode","getStringUnitWidth","isHex","lstext","clip_fixed","isValidStyle","getStyle","line","lines","triangle","roundedRect","SQRT2","setFontStyle","getFontList","addFont","lineWidth","setLineDash","getLineHeight","setLineHeightFactor","getLineHeightFactor","getHorizontalCoordinate","getVerticalCoordinate","getHorizontalCoordinateString","getVerticalCoordinateString","strokeColor","getStrokeColor","getDrawColor","setDrawColor","fillColor","getFillColor","textColor","getTextColor","setTextColor","getCharSpace","setCharSpace","CapJoinStyles","but","projecting","project","setMiterLimit","returnPromise","unload","getCoordinateString","collections","newObjectDeferredBegin","setWidth","setHeight","getPDFVersion","hasHotfix","dictionary","__acroform__","setBit","clearBit","getBit","getBitForPdf","setBitForPdf","clearBitForPdf","calculateCoordinates","lowerLeft_X","lowerLeft_Y","upperRight_X","upperRight_Y","appearanceStreamContent","DV","maxFontSize","multiline","textAlign","xForms","acroFormDictionaryRoot","printedOut","isInitialized","acroformPlugin","hasAnnotation","annotations","_eventID","DA","createDefaultAppearanceStream","getKeyValueListForStream","hasAppearanceStream","FieldNum","arrayToPdfArray","writeable","FT","getOptions","setOptions","addOption","removeOption","combo","pushButton","radio","optionName","appearanceState","_AppearanceType","RadioButton","createAppearanceStream","setAppearance","getCA","createOption","CheckBox","YesNormal","YesPushDown","Off","OffPushDown","Bezier_C","Cross","calculateCross","x4","x3","addButton","addTextField","addChoiceField","ChoiceField","ListBox","ComboBox","EditBox","Button","PushButton","PasswordField","AcroForm","Appearance","AcroFormChoiceField","AcroFormListBox","AcroFormComboBox","AcroFormEditBox","AcroFormButton","AcroFormPushButton","AcroFormRadioButton","AcroFormCheckBox","AcroFormTextField","AcroFormPasswordField","AcroFormAppearance","tmp","PNG","TIFF","JPEG","JPEG2000","GIF87a","GIF89a","BMP","getImageFileTypeByImageData","isArrayBufferView","arrayBufferToBinaryString","color_spaces","INDEXED","pal","DEVICE_CMYK","bpc","dp","trns","smask","hasAttribute","loadFile","toDataURL","clientWidth","getContext","alias","DEVICE_RGB","DEVICE_GRAY","CAL_GREY","CAL_RGB","LAB","ICC_BASED","PATTERN","SEPARATION","DEVICE_N","DCT_DECODE","FLATE_DECODE","LZW_DECODE","JPX_DECODE","JBIG2_DECODE","ASCII85_DECODE","ASCII_HEX_DECODE","RUN_LENGTH_DECODE","CCITT_FAX_DECODE","image_compression","NONE","FAST","MEDIUM","SLOW","sHashCode","isString","validateStringAsBase64","extractInfoFromBase64DataURI","extractImageFromDataUrl","mimeType","charset","supportsArrayBuffer","isArrayBuffer","Uint32Array","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","binaryStringToUint8Array","arrayBufferToBase64","byteLength","createImageInfo","imageData","compression","convertStringToImageData","subarray","processJPEG","numcomponents","processJPG","getImageProperties","colorSpace","compressionMode","bitsPerComponent","bounds","_nameMap","magFactor","zoom","createAnnotation","textWithLink","__arabicParser__","isInArabicSubstitutionA","isArabicLetter","isArabicEndLetter","isArabicAlfLetter","arabicLetterHasIsolatedForm","arabicLetterHasFinalForm","arabicLetterHasInitialForm","arabicLetterHasMedialForm","resolveLigatures","isArabicDiacritic","getCorrectForm","processArabic","addJS","pageWrapXEnabled","pageWrapX","pageWrapYEnabled","pageWrapY","context2d","_canvas","canvas","setHeaderFunction","getTextDimensions","table_font_size","cellAddPage","margins","cellInitialize","cell","printHeaders","tableHeaderRow","printHeaderRow","printingHeaderRow","arrayMax","lnMod","calculateLineHeight","setTableHeaderRow","lastCellPos","table_x","table_y","isStrokeTransparent","strokeOpacity","strokeStyle","fillStyle","isFillTransparent","fillOpacity","textBaseline","lineJoin","lineCap","globalCompositeOperation","globalAlpha","clip_path","currentPoint","miterLimit","lastPoint","ignoreClearRect","parentNode","ctx","arial","verdana","helvetica","fixed","terminal","courier","cursive","fantasy","beginPath","applyToPoint","closePath","quadraticCurveTo","bezierCurveTo","isIdentity","pow","counterclockwise","fillRect","strokeRect","clearRect","ctxStack","isCanvasGradient","getColor","fillText","scaleX","strokeText","measureText","setTransform","decompose","shx","sx","skew","applyToRectangle","autoPaging","posX","posY","begin","deltas","createLinearGradient","colorStops","addColorStop","createPattern","createRadialGradient","y3","y4","atan2","shy","tx","predictor","adler32cs","Deflater","overrideMimeType","responseText","loadImageFile","setProgress","img","progress","val","opt","enableLinks","html2canvas","jsPDF","toContainer","toCanvas","toImg","toPdf","thenList","setPageSize","createTextNode","cloneNode","nextSibling","javascriptEnabled","float","onrendered","isHtml2CanvasLoaded","toContext2d","async","allowTaint","imageTimeout","logging","proxy","removeContainer","foreignObjectRendering","useCORS","windowHeight","quality","outputImg","outputPdf","doCallback","setMargin","getPageSize","inner","px","ratio","updateProgress","thenCore","thenExternal","catchExternal","using","worker","outline","createNamedDestinations","makeRef","namesOid","genIds_r","renderRoot","renderItems","objStart","count_r","objEnd","makeString","LOG2E","processPNG","imgData","colorType","pixelBitlength","decodePixels","buffer","transparency","indexed","processGIF89A","decodeAndBlitFrameRGBA","processGIF87A","processBMP","setLanguage","languageSettings","isSubscribed","sq","ast","az","be","bs","nl","fj","fur","gl","ja","ks","kk","ky","tlh","lv","lb","mk","ml","nv","ng","nb","fa","pl","rm","ru","sz","sg","sk","sb","es","sw","sv","tig","tk","uk","hsb","vo","languageCode","getCharWidthsArray","widths","Unicode","fof","kerning","widthOfString","characterToGlyph","getArraySum","textIndent","lineIndent","WinAnsiEncoding","existsFileInVFS","getFileFromVFS","TTFFont","glyIdsUsed","addSvg","styleSheet","cssText","contentDocument","addSVG","addSvgAsImage","canvg","ignoreMouse","ignoreAnimation","ignoreDimensions","ignoreClear","putTotalPages","pdfEscape16","viewerPreferences","HideToolbar","explicitSet","valueSet","pdfVersion","HideMenubar","HideWindowUI","FitWindow","CenterWindow","DisplayDocTitle","NonFullScreenPageMode","ViewArea","ViewClip","PrintArea","PrintClip","PrintScaling","Duplex","PickTrayByPDFSize","PrintPageRange","NumCopies","viewerpreferences","configuration","addMetadata","toUnicode","subset","PDFObject","stemV","italicAngle","ascender","decender","capHeight","rawData","unitsPerEm","unicode","codeMap","vFS","addFileToVFS","addHTML","rasterizeHTML","dim","useFor","imageCompression","pagesplit","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","rstz","defaultView","currentStyle","SCRIPT","STYLE","NOSCRIPT","OBJECT","EMBED","SELECT","setBlockBoundary","setBlockStyle","executeWatchFunctions","margins_doc","ownerDocument","compareDocumentPosition","addText","settings","watchFunctions","outY","crossOrigin","onerror","FOOTER","frames","writeln","elementHandlers","ready","splitFragmentsIntoLines","RenderTextFragment","getPdfColor","lastTextColor","renderParagraph","blockstyle","priorblockstyle","priorMarginBottom","bolder","lighter","oblique","justify","fromHTML","html2pdf","_wrapX","_wrapY","_page","setName","_pageBreakAt","pageBreaks","_gotoPage","scrollY","BlobBuilder","WebKitBlobBuilder","MSBlobBuilder","MozBlobBuilder","webkitURL","toStringTag","byteOffset","ActiveXObject","setRequestHeader","lastModified","lastModifiedDate","isView","_buffer","isPrototypeOf","DataView","setPrototypeOf","createDocumentFragment","LOADING","EMPTY","onabort","onloadstart","onprogress","abort","createElementNS","setImmediate","INIT","msSaveOrOpenBlob","WRITING","onwritestart","onwrite","onwriteend","has_local_palette","palette_offset","data_offset","data_length","transparent_index","interlaced","disposal","numFrames","loopCount","frameInfo","decodeAndBlitFrameBGRA","exports","loop","addFrame","transparent","datav","is_with_alpha","bottom_up","flag","parseHeader","parseBGR","Buffer","Adler32","fromUtf8","fromBuffer","updateUtf8","updateBuffer","__bidiEngine__","EN","AN","hiLevel","doBidiReorder","isInputVisual","isOutputVisual","isInputRtl","isOutputRtl","isSymmetricSwapping","getUint32","reserved","headerSize","getInt32","planes","getUint16","bitPP","rawSize","importantColors","getUint8","red","green","quad","bit1","bit4","bit8","bit15","bit16","bit24","bit32","build_tree","dyn_tree","stat_desc","static_tree","elems","heap_len","heap_max","heap","opt_len","static_len","max_code","pqdownheap","extra_bits","extra_base","max_length","bl_count","good_length","max_lazy","nice_length","max_chain","func","_length_code","base_length","base_dist","d_code","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","static_l_desc","static_d_desc","static_bl_desc","pending_buf","flush_pending","avail_in","read_buf","total_in","total_out","msg","pending_out","deflateInit","dstate","deflateEnd","deflateParams","deflate","deflateSetDictionary","next_out","next_in","avail_out","next_in_index","next_out_index","zip","_jzlib_Deflater","antiquewhite","aqua","azure","beige","black","blanchedalmond","blueviolet","brown","cadetblue","chartreuse","coral","cornflowerblue","crimson","cyan","darkcyan","darkgoldenrod","darkgreen","darkmagenta","darkolivegreen","darkorchid","darkred","darkseagreen","darkslateblue","darkturquoise","deeppink","deepskyblue","dodgerblue","feldspar","floralwhite","forestgreen","gainsboro","ghostwhite","goldenrod","gray","greenyellow","hotpink","indianred","ivory","khaki","lavenderblush","lawngreen","lightblue","lightcoral","lightgoldenrodyellow","lightgreen","lightpink","lightseagreen","lightskyblue","lightslateblue","lightsteelblue","lime","limegreen","magenta","maroon","mediumblue","mediumorchid","mediumseagreen","mediumslateblue","mediumturquoise","mediumvioletred","mintcream","mistyrose","navajowhite","navy","olive","olivedrab","orangered","orchid","palegreen","paleturquoise","papayawhip","peachpuff","pink","plum","purple","royalblue","saddlebrown","sandybrown","seagreen","sienna","silver","slateblue","slategray","snow","springgreen","tan","teal","tomato","turquoise","violetred","wheat","white","yellow","yellowgreen","example","registerTTF","directory","Map","os2","exists","lineGap","xMin","yMin","xMax","yMax","italic_angle","xHeight","familyClass","isSerif","isScript","isFixedPitch","readUInt32","writeUInt32","readInt32","writeInt32","readUInt16","writeUInt16","readInt16","writeInt16","readLongLong","writeLongLong","readInt","writeInt","scalarType","tableCount","searchRange","entrySelector","rangeShift","tables","__super__","file","revision","checkSumAdjustment","magicNumber","created","modified","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","encodingID","isUnicode","old","new","charMap","subtable","maxGlyphID","LN2","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","charRange","vendorID","firstCharIndex","lastCharIndex","ascent","descent","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContext","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","numGlyphs","strings","copyright","fontSubfamily","uniqueSubfamily","postscriptName","trademark","manufacturer","designer","vendorUrl","designerUrl","license","licenseUrl","preferredFamily","preferredSubfamily","compatibleFull","sampleText","maxPoints","maxContours","maxCompositePoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","metrics","leftSideBearings","cache","numberOfContours","glyphIDs","glyphOffsets","unicodes","generateCmap","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","compressionMethod","filterMethod","interlaceMethod","numPlays","xOffset","yOffset","disposeOp","blendOp","grayscale","rgb","hasAlphaChannel","responseType","response","mozResponseArrayBuffer","getBytes","decodePalette","copyToImageData","_decodedPalette","putImageData","decodeFrames","createImageData","renderFrame","_timeout","stopAnimation","_png","bufferLength","ensureBuffer","getByte","readBlock","lookChar","getChar","makeSubStream","Stream","getBits","codeSize","codeBuf","bytes","bytesPos","getCode","generateHuffmanTable","undefined","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","binding","nodeIsArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","array","setter","iteratee","accumulator","predicate","resIndex","baseIndexOf","comparator","initAccum","asciiSize","baseProperty","collection","eachFunc","fromIndex","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseSum","NAN","string","trimmedEndIndex","arrayMap","has","strSymbols","chrSymbols","deburrLetter","basePropertyOf","escapeHtmlChar","chr","arg","hasUnicode","unicodeSize","unicodeToArray","asciiToArray","unescapeHtmlChar","uid","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","allocUnsafe","getPrototype","overArg","getPrototypeOf","objectCreate","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","entries","entry","__data__","MapCache","ListCache","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","isIndex","baseRandom","shuffleSelf","baseClamp","baseAssignValue","objValue","baseEach","copyObject","paths","upper","bitmask","customizer","isDeep","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","baseAssign","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","cloneSymbol","initCloneByTag","Stack","stacked","subValue","baseClone","getAllKeysIn","getAllKeys","arrayEach","assignValue","wait","arrayIncludes","isCommon","valuesLength","baseUnary","Gi","arrayIncludesWith","cacheHas","SetCache","outer","computed","valuesIndex","lodash","templateSettings","evaluate","variable","baseLodash","Hash","assocIndexOf","hash","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","isSymbol","isStrict","isFlattenable","baseFlatten","arrayPush","baseFor","createBaseFor","baseForRight","arrayFilter","isFunction","castPath","toKey","keysFunc","symbolsFunc","isOwn","unmasked","getRawTag","objectToString","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseGetTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","mapToArray","isPartial","setToArray","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsEqual","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isMasked","baseMatchesProperty","baseMatches","property","isPrototype","nativeKeysIn","isProto","isArrayLike","getMatchData","matchesStrictComparable","baseIsMatch","isKey","isStrictComparable","hasIn","COMPARE_UNORDERED_FLAG","srcIndex","mergeFunc","safeGet","assignMergeValue","newValue","isTyped","nu","toPlainObject","baseMergeDeep","baseMerge","iteratees","orders","baseGet","getIteratee","comparer","baseSortBy","baseMap","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","baseSet","baseIndexOfWith","indexes","previous","baseUnset","setToString","overRest","arraySample","nested","baseSetData","baseSetToString","constant","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","Xa","oo","MAX_ARRAY_INDEX","baseToString","createSet","seenIndex","updater","isDrop","baseSlice","arrayReduce","baseUniq","baseDifference","assignFunc","valsLength","isArrayLikeObject","stringToPath","castRest","baseRest","arrayBuffer","typedArray","valIsDefined","valIsReflexive","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","isNew","initializer","arrayAggregator","baseAggregator","assigner","sources","isIterateeCall","iterable","methodName","stringToArray","trailing","castSlice","words","deburr","thisBinding","findIndexFunc","flatRest","funcs","prereq","thru","getFuncName","funcName","isLaziable","plant","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","WRAP_CURRY_FLAG","isFlip","createCtor","getHolder","holdersCount","countHolders","composeArgs","composeArgsRight","newHolders","replaceHolders","createRecurry","createHybrid","toIteratee","baseInverter","baseToNumber","arrayFunc","chars","charsLength","baseRepeat","stringSize","toFinite","baseRange","toNumber","wrapFunc","isCurry","newData","setWrapToString","toInteger","pair","noop","setToPairs","baseToPairs","srcBitmask","newBitmask","WRAP_BIND_FLAG","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsMerge","isPlainObject","arrLength","arrStacked","arrValue","arraySome","baseGetAllKeys","otherFunc","baseIteratee","isKeyable","baseIsNative","stubArray","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","intersection","mapped","castArrayLikeObject","baseIntersection","intersectionBy","intersectionWith","pull","pullAll","basePullAll","pullAt","baseAt","basePullAt","union","unionBy","unionWith","unzip","without","xor","baseXor","xorBy","xorWith","zipWith","unzipWith","interceptor","wrapperAt","countBy","createAggregator","createFind","findLast","findLastIndex","arrayEachRight","groupBy","invokeMap","baseInvoke","keyBy","partition","baseOrderBy","createWrap","bindKey","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","timerExpired","invokeFunc","timeSinceLastCall","shouldInvoke","trailingEdge","timeWaiting","remainingWait","isInvoking","leadingEdge","debounced","baseDelay","resolver","memoized","Cache","overArgs","transforms","funcsLength","partial","partialRight","rearg","createRelationalOperation","baseGt","gte","baseIsArguments","proxyTag","baseLt","lte","done","iteratorToArray","remainder","baseTrim","isBinary","createAssigner","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","mergeWith","hasPath","baseHasIn","createInverter","invertBy","invoke","arrayLikeKeys","baseKeys","baseKeysIn","merge","omit","CLONE_DEEP_FLAG","customOmitClone","basePickBy","basePick","toPairs","createToPairs","toPairsIn","baseValues","camelCase","createCompounder","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","createCaseFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","createFlow","flowRight","methodOf","baseFunctions","over","createOver","overEvery","arrayEvery","overSome","basePropertyDeep","rangeRight","createMathOperation","augend","addend","createRound","divide","dividend","divisor","multiplier","multiplicand","minuend","subtrahend","castArray","chunk","compact","cond","conforms","baseConformsTo","baseConforms","properties","curry","curryRight","debounce","dropRight","dropRightWhile","baseWhile","dropWhile","toLength","baseFill","baseFilter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","WRAP_FLIP_FLAG","fromPairs","functionsIn","initial","mapKeys","mapValues","matchesProperty","mixin","nthArg","baseNth","omitBy","pickBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","rest","sampleSize","arraySampleSize","baseSampleSize","setWith","shuffle","arrayShuffle","baseShuffle","sortedUniq","baseSortedUniq","sortedUniqBy","limit","spread","tail","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","Sd","unary","uniq","uniqBy","uniqWith","unset","baseUpdate","castFunction","updateWith","valuesIn","zipObject","baseZipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","CLONE_SYMBOLS_FLAG","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","escapeRegExp","baseEvery","findKey","baseFindKey","findLastKey","forEachRight","forIn","forInRight","forOwn","forOwnRight","baseHas","inRange","baseInRange","isBoolean","isElement","isEqualWith","isMatch","isMatchWith","isNumber","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","weakSetTag","strictLastIndexOf","baseExtremum","maxBy","mean","baseMean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","createPadding","padEnd","radix","floating","temp","baseReduce","reduceRight","arrayReduceRight","repeat","runInContext","sample","baseSample","baseSome","sortedIndex","baseSortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sum","sumBy","customDefaultsAssignIn","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","escapeStringChar","toLower","toSafeInteger","toUpper","charsStartIndex","charsEndIndex","trimEnd","trimStart","truncate","omission","uniqueId","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","baseWrapperValue","iterIndex","commit","wrapped","defineLocale","meridiemParse","isPM","meridiem","longDateFormat","LT","LTS","LL","LLL","LLLL","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","MM","yy","dayOfMonthOrdinalParse","ordinal","dow","doy","weekdaysParseExact","postformat","preparse","standalone","isFormat","ww","meridiemHour","monthsShortRegex","monthsParseExact","weekdaysParse","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","monthsRegex","monthsStrictRegex","monthsShortStrictRegex","monthsParse","longMonthsParse","shortMonthsParse","ll","lll","llll","monthsNominativeEl","monthsGenitiveEl","calendarEl","since","abbr","until","eraYearOrdinalRegex","eraYearOrdinalParse","correctGrammaticalCase","nominative","accusative","genitive","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","rfc2822","weekdayMismatch","dayOfYear","parentLocale","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","GG","humanize","isUTC","Fd","$d","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","onColorChange","onDragStart","onDragEnd","onAcceptColor","onAlphaInput","onCyanInput","onMagentaInput","onYellowInput","onBlackInput","onHueInput","onSaturationInput","onLightnessInput","onRedInput","onGreenInput","onBlueInput","onHexInput","onValueInput","onFormatToggle","onRemovePresetColor","setColorFromString","onCancelColor","HEX","RGBA","HSLA","CMYK","rg","inputChange","rgX","rgY","slider","mouseDown","touchStart","dialogElement","hueSlider","alphaSlider","handleEsc","hostBindings","colorPicker","cpWidth","cpHeight","cpToggle","cpDisabled","cpIgnoredElements","cpFallbackColor","cpColorMode","cpCmykEnabled","cpOutputFormat","cpAlphaChannel","cpDisableInput","cpDialogDisplay","cpSaveClickOutside","cpCloseClickOutside","cpUseRootViewContainer","cpPosition","cpPositionOffset","cpPositionRelativeToArrow","cpOKButton","cpOKButtonText","cpOKButtonClass","cpCancelButton","cpCancelButtonText","cpCancelButtonClass","cpPresetLabel","cpPresetColors","cpPresetColorsClass","cpMaxPresetColorsLength","cpPresetEmptyMessage","cpPresetEmptyMessageClass","cpAddColorButton","cpAddColorButtonText","cpAddColorButtonClass","cpRemoveColorButtonClass","cpInputChange","cpToggleChange","cpSliderChange","cpSliderDragEnd","cpSliderDragStart","colorPickerOpen","colorPickerClose","colorPickerCancel","colorPickerSelect","colorPickerChange","cpCmykColorChange","cpPresetColorsChange","sortArray","transformObject","multiExpressionTransform","debug","jws","nonce","session_state","sub","lib","mixIn","_append","_process","_minBufferSize","cfg","finalize","blockSize","_createHmacHelper","Word","toX32","_map","_doReset","_doProcessBlock","_doFinalize","ommit_long_octet","sha1","md5","alg","digestString","digestHex","curve","ecprvhex","bigint","getEncodedHex","proc","eproc","keylen","getKeyAndUnusedIvByPasscodeAndIvsalt","decryptKeyB64","getDecryptedKeyHex","getEncryptedPKCS5PEMFromPrvKeyHex","parseHexOfEncryptedPKCS8","getPBKDF2KeyHexFromParam","keySize","_getPlainPKCS8HexFromEncryptedPKCS8PEM","getKeyFromEncryptedPKCS8PEM","parsePlainPrivatePKCS8Hex","algparam","getKeyFromPlainPrivatePKCS8PEM","getKeyFromPlainPrivatePKCS8Hex","_getKeyFromPublicPKCS8Hex","parsePublicRawRSAKeyHex","parsePublicPKCS8Hex","pub","prv","ecparams","setPublicKeyHex","prvKeyObj","generateKeyPairHex","seq","int","octstr","hex","oid","bitstr","null","critical","extname","rfc822","dns","uri","ip","ocsp","caissuer","HS256","useReplaceToNavigate","startUrl","store","gzip","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","Degrees","cmd","xScale","yScale","A0","A2","A3","A4","A5","A6","A7","A8","A9","A10","B2","B3","B4","B5","B6","B7","B8","B9","B10","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","Executive","Folio","Legal","Letter","Tabloid","xSkew","ySkew","borderColor","thickness","embed","forContext","ref","copyBytesInto","Encrypt","Encoding","fixedPitch","symbolic","DescendantFonts","ToUnicode","encodeStream","Predictor","Colors","DecodeParms","Decode","earlyChange","codeLength","nextCode","dictionaryValues","dictionaryLengths","dictionaryPrevCodes","currentSequence","currentSequenceLength","endobj","xref","trailer","startxref","true","false","streamEOF1","streamEOF2","streamEOF3","streamEOF4","endstream","EOF1endstream","EOF2endstream","EOF3endstream","firstObjectNumber","inObjectStream","eval","Container","Format","Leaf","Embed","Scroll","Block","Inline","Attributor","Attribute","Style","Store","retain","emitter","whitelist","classList","clipboard","keyboard","history","theme","scrollingContainer","parchment","EDITOR_CHANGE","SCROLL_BEFORE_UPDATE","SCROLL_OPTIMIZE","SCROLL_UPDATE","SELECTION_CHANGE","TEXT_CHANGE","SILENT","USER","native","compose","handler","suffix","shortKey","BACKSPACE","TAB","ENTER","ESCAPE","LEFT","UP","RIGHT","DOWN","DELETE","bindings","startNode","startOffset","endNode","endOffset","blot","clean","formula","ordered","bullet","strike","video","maxStack","userOnly","handlers","DOMTokenList","shim","supported","Node","blotName","matchers","matchVisual","throwOnError","errorColor","highlight","_subscribe","NEXT","do","accept","toObservable","lift","_trySubscribe","toPromise","execute","requestAsyncId","notification","scheduleMessage","_error","nextInfiniteTimeWindow","nextTimeWindow","_getNow","_trimBufferThenGetEvents","destination","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","useDeprecatedSynchronousErrorHandling","__tryOrUnsub","__tryOrSetError","_unsubscribe","notifyNext","notifyError","notifyComplete","getSubject","connect","refCount","_refCount","_subject","_connection","_isComplete","_tryResultSelector","subscriber","notifyInactive","checkIterators","_tryresultSelector","hasValue","hasCompleted","durationSelector","clearThrottle","debouncedNext","clearDebounce","_schedule","scheduleNotification","keySelector","_tryNext","_innerSub","connectable","connection","seed","selector","bufferSize","windowTime","scheduler","innerSubscription","nextOrComplete","recycleAsyncId","_execute","cancelAnimationFrame","clearImmediate","conformedValue","someCharsRejected","maskWithoutCaretTraps","previousConformedValue","currentCaretPosition","trys","_onFinish","onStart","onDone","onDestroy","hasStarted","triggerMicrotask","_onStart","pause","restart","finish","getPosition","triggerCallback","_onDestroy","beforeDestroy","attr","CDK_DESCRIBEDBY_ID_PREFIX","CDK_DESCRIBEDBY_HOST_ATTRIBUTE","nextId","_messageRegistry","_messagesContainer","_id","describe","hostElement","_canBeDescribed","getKey","setMessageId","messageElement","referenceCount","_createMessageElement","_isElementDescribedByMessage","_addMessageReference","removeDescription","_isElementNode","_removeMessageReference","registeredMessage","_deleteMessageElement","describedElements","_removeCdkDescribedByReferenceIds","_createMessagesContainer","_b","containerClassName","serverContainers","messagesContainer","originalReferenceIds","getAriaReferenceIds","existingId","ID_DELIMITER","addAriaReferencedId","filteredIds","removeAriaReferencedId","referenceIds","messageId","trimmedMessage","ELEMENT_NODE","AriaDescriber","_items","_activeItemIndex","_activeItem","_letterKeyStream","_typeaheadSubscription","Subscription","_vertical","_allowedModifierKeys","_homeAndEnd","_skipPredicateFn","_pressedLetters","tabOut","QueryList","newItems","newIndex","itemArray","skipPredicate","withWrap","shouldWrap","withVerticalOrientation","withHorizontalOrientation","_horizontal","withAllowedModifierKeys","withTypeAhead","debounceInterval","_getItemsArray","getLabel","setActiveItem","withHomeAndEnd","previousActiveItem","updateActiveItem","isModifierAllowed","modifiers","modifier","DOWN_ARROW","setNextItemActive","UP_ARROW","setPreviousItemActive","RIGHT_ARROW","LEFT_ARROW","HOME","setFirstItemActive","END","setLastItemActive","hasModifierKey","toLocaleUpperCase","NINE","activeItemIndex","activeItem","isTyping","_setActiveItemByIndex","_setActiveItemByDelta","_setActiveInWrapMode","_setActiveInDefaultMode","fallbackDelta","ListKeyManager","setInactiveStyles","setActiveStyles","_origin","setFocusOrigin","getClientRects","hasGeometry","isTabbable","frameElement","getFrameElement","getTabIndexValue","tabIndexValue","WEBKIT","IOS","inputType","isPotentiallyTabbableIOS","FIREFOX","isInputElement","isHiddenInput","isNativeFormElement","isAnchorElement","isAnchorWithHref","hasValidTabIndex","isPotentiallyFocusable","ignoreVisibility","InteractivityChecker","_element","_checker","_ngZone","deferAnchors","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","_enabled","attachAnchors","_startAnchor","_endAnchor","_toggleAnchorTabIndex","startAnchor","endAnchor","runOutsideAngular","_createAnchor","focusInitialElementWhenReady","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","bound","markers","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","tabbableChild","toggleAnchors","isStable","onStable","deferCaptureElements","FocusTrap","FocusTrapFactory","_focusTrapFactory","_previouslyFocusedElement","focusTrap","coerceBooleanProperty","autoCapture","_autoCapture","_captureFocus","autoCaptureChange","firstChange","_getFocusedElementPierceShadowDom","CdkTrapFocus","_focusTrapManager","_inertStrategy","deregister","_enable","preventFocus","_disable","allowFocus","FOCUS_TRAP_INERT_STRATEGY","_listener","_trapFocus","focusTrapRoot","closest","activeElement","_focusTrapStack","FocusTrapManager","EventListenerFocusTrapInertStrategy","configObject","ConfigurableFocusTrap","touch","touches","changedTouches","ConfigurableFocusTrapFactory","INPUT_MODALITY_DETECTOR_OPTIONS","INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS","ignoreKeys","ALT","CONTROL","MAC_META","META","SHIFT","modalityEventListenerOptions","normalizePassiveListenerOptions","capture","ngZone","_mostRecentTarget","_modality","BehaviorSubject","_lastTouchMs","_onKeydown","_getEventTarget","_onMousedown","isFakeMousedownFromScreenReader","_onTouchstart","isFakeTouchstartFromScreenReader","modalityDetected","modalityChanged","distinctUntilChanged","mostRecentModality","InputModalityDetector","LIVE_ANNOUNCER_ELEMENT_TOKEN","LIVE_ANNOUNCER_DEFAULT_OPTIONS","elementToken","_defaultOptions","_liveElement","_createLiveElement","announce","defaultOptions","politeness","_previousTimeout","_currentPromise","_currentResolve","elementClass","previousElements","liveEl","LiveAnnouncer","_liveAnnouncer","_contentObserver","_politeness","_subscription","elementText","_previousAnnouncedText","CdkAriaLive","i1$1","FOCUS_MONITOR_DEFAULT_OPTIONS","captureEventListenerOptions","_inputModalityDetector","_windowFocused","_originFromTouchInteraction","_elementInfo","_monitoredElementCount","_rootNodeFocusListenerCount","_windowFocusListener","_windowFocusTimeoutId","_stopInputModalityDetector","_rootNodeFocusAndBlurListener","_onFocus","_onBlur","_detectionMode","detectionMode","monitor","coerceElement","rootNode","_getShadowRoot","_getDocument","cachedInfo","_registerGlobalListeners","stopMonitoring","elementInfo","_setClasses","_removeGlobalListeners","focusVia","_getClosestElementsInfo","currentElement","_originChanged","_setOrigin","_info","_getWindow","_getFocusOrigin","focusEventTarget","_shouldBeAttributedToTouch","_lastFocusOrigin","isFromInteraction","_originTimeoutId","_emitOrigin","rootNodeFocusListeners","takeUntil","modality","FocusMonitor","_focusMonitor","cdkFocusChange","EventEmitter","_monitorSubscription","CdkMonitorFocus","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","getHighContrastMode","testElement","documentWindow","computedStyle","computedColor","_applyBodyHighContrastModeCssClasses","_hasCheckedHighContrastMode","bodyClasses","HighContrastModeDetector","highContrastModeDetector","A11yModule","ObserversModule","DIR_DOCUMENT","inject","RTL_LOCALE_PATTERN","bodyDir","htmlDir","_resolveDirectionality","Directionality","_dir","_isInitialized","_rawDir","Dir","BidiModule","isObservable","disconnect","applyChanges","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","insertContext","createEmbeddedView","detach","viewCacheSize","_viewCache","viewArgsFactory","_insertView","_detachAndCacheView","_moveView","cachedView","_insertViewFromCache","viewArgs","detachedView","_maybeCacheView","_multiple","initiallySelectedValues","_emitChanges","_selection","_deselectedToEmit","_selectedToEmit","_markSelected","_verifyValueAssignment","_emitChangeEvent","deselect","_unmarkSelected","_unmarkAll","isMultipleSelection","_listeners","listener","listen","registered","UniqueSelectionDispatcher","_VIEW_REPEATER_STRATEGY","dest","importantProperties","removeProperty","enable","userSelect","extendStyles","initialTransform","part","clientRect","threshold","pointerX","pointerY","xThreshold","yThreshold","positions","getViewportScrollPosition","getMutableClientRect","handleScroll","cachedPosition","newTop","newLeft","viewportScrollPosition","topDifference","leftDifference","adjustClientRect","scrollX","descendantsWithId","transferCanvasData","transferInputData","transferData","descendantElements","cloneElements","cloneUniqueId","passiveEventListenerOptions","activeEventListenerOptions","dragImportantProperties","_config","_viewportRuler","_dragDropRegistry","_passiveTransform","_activeTransform","_hasStartedDragging","_moveEvents","_pointerMoveSubscription","_pointerUpSubscription","_scrollSubscription","_resizeSubscription","_boundaryElement","_nativeInteractionsEnabled","_handles","_disabledHandles","_direction","dragStartDelay","_disabled","beforeStarted","started","released","ended","entered","exited","moved","_pointerDown","targetHandle","_getTargetHandle","_initializeDragSequence","_rootElement","_pointerMove","pointerPosition","_getPointerPositionOnPage","_pickupPositionOnPage","dragStartThreshold","isDelayElapsed","_dragStartTime","_getDragStartDelay","_dropContainer","_endDragSequence","isReceiving","_startDragSequence","constrainedPointerPosition","_getConstrainedPointerPosition","_hasMoved","_lastKnownPointerPosition","_updatePointerDirectionDelta","_updateActiveDropContainer","activeTransform","_applyRootElementTransform","distance","_getDragDistance","_pointerDirectionDelta","_pointerUp","_nativeDragStart","withRootElement","withParent","parentDragRef","_parentPositions","ParentPositionTracker","registerDragItem","_toggleNativeDragInteractions","toggleNativeDragInteractions","getPlaceholderElement","_placeholder","getRootElement","getVisibleElement","withHandles","handles","disabledHandles","withPreviewTemplate","_previewTemplate","withPlaceholderTemplate","_placeholderTemplate","rootElement","_removeRootElementListeners","_initialTransform","SVGElement","_ownerSVGElement","ownerSVGElement","withBoundaryElement","boundaryElement","_containInsideBoundaryOnResize","_parentDragRef","_anchor","_destroyPreview","_destroyPlaceholder","removeDragItem","_removeSubscriptions","disableHandle","enableHandle","withDirection","_withDropContainer","getFreeDragPosition","setFreeDragPosition","withPreviewContainer","_previewContainer","_sortFromLastPointerPosition","_preview","_previewRef","_placeholderRef","stopDragging","webkitTapHighlightColor","_rootElementTapHighlight","_stopScrolling","_animatePreviewToPlaceholder","_cleanupDragArtifacts","_cleanupCachedDimensions","dropPoint","isTouchEvent","_lastTouchEventTime","dropContainer","_createPlaceholderElement","createComment","shadowRoot","_createPreviewElement","toggleVisibility","replaceChild","_getPreviewInsertionPoint","_initialContainer","_initialIndex","getItemIndex","getScrollableParents","referenceElement","isTouchSequence","isAuxiliaryMouseButton","isSyntheticEvent","isFakeEvent","rootStyles","pointerMove","pointerUp","scrolled","scrollEvent","_updateOnScroll","_boundaryRect","previewTemplate","_pickupPositionInElement","matchSize","_getPointerPositionInElement","_pointerPositionAtLastDirectionChange","startDragging","_previewRect","isPointerOverContainer","_isOverContainer","rawX","rawY","newContainer","_getSiblingContainerFromPosition","exit","enter","sortingDisabled","_startScrollingIfNecessary","_sortItem","_applyPreviewTransform","previewConfig","previewClass","preview","rootRect","viewRef","viewContainer","getRootNode","matchElementSize","getTransform","deepCloneNode","placeholderRect","transitionedProperties","parseCssPropertyValue","propertyIndex","rawDurations","rawDelays","parseCssTimeUnitsToMs","getTransformTransitionDurationInMs","propertyName","timeout","placeholderConfig","placeholderTemplate","handleElement","referenceRect","targetTouches","_getViewportScrollPosition","svgMatrix","getScreenCTM","svgPoint","createSVGPoint","matrixTransform","inverse","dropContainerLock","lockAxis","constrainPosition","pickupX","pickupY","boundaryRect","previewWidth","previewHeight","_getPreviewRect","minY","maxY","clamp$1","pointerPositionOnPage","positionSinceLastChange","changeX","changeY","pointerDirectionChangeThreshold","shouldEnable","combineTransforms","pickupPosition","leftOverflow","rightOverflow","topOverflow","bottomOverflow","mouse","scrollDifference","_cachedShadowRoot","initialParent","previewContainer","documentRef","fullscreenElement","webkitFullscreenElement","mozFullScreenElement","msFullscreenElement","rootNodes","sourceRect","toIndex","currentArray","targetArray","targetIndex","autoScrollDisabled","autoScrollStep","sortPredicate","sorted","_isDragging","_itemPositions","_previousSwap","overlaps","_draggables","_siblings","_orientation","_activeSiblings","_viewportScrollSubscription","_verticalScrollDirection","_horizontalScrollDirection","_stopScrollTimers","_startScrollInterval","animationFrameScheduler","_scrollNode","scrollStep","scrollBy","withScrollableParents","registerDropContainer","removeDropContainer","_draggingStarted","_notifyReceivingSiblings","_getItemIndexFromPointerPosition","activeDraggables","_activeDraggables","newPositionReference","_shouldEnterAsFirstChild","_cacheItemPositions","_cacheParentPositions","_reset","withItems","previousItems","draggedItems","_cacheItems","connectedTo","withOrientation","_scrollableElements","currentItem","pointerDelta","_clientRect","isPointerNearClientRect","siblings","isHorizontal","siblingAtNewPosition","newPosition","itemOffset","_getItemOffsetPx","siblingOffset","_getSiblingOffsetPx","oldOrder","moveItemInArray","sibling","isDraggedItem","elementToOffset","isInsideClientRect","scrollNode","verticalScrollDirection","horizontalScrollDirection","computedVertical","getVerticalScrollDirection","computedHorizontal","getHorizontalScrollDirection","getElementScrollDirections","getViewportSize","_initialScrollSnap","msScrollSnapType","scrollSnapType","_listenToScrollEvents","elementToMeasure","_stopReceiving","immediateSibling","itemPositions","lastItemRect","firstItemRect","_canReceive","_startReceiving","activeSiblings","activeCapturingEventOptions","_dropInstances","_dragInstances","_activeDragInstances","_globalListeners","_draggingPredicate","_preventDefaultWhileDragging","_persistentTouchmoveListener","_clearGlobalListeners","streams","Observable","observer","eventOptions","DragDropRegistry","DEFAULT_CONFIG","createDrag","DragRef","createDropList","DropListRef","DragDrop","CDK_DRAG_PARENT","CDK_DROP_LIST_GROUP","CdkDropListGroup","CDK_DRAG_CONFIG","_uniqueIdCounter","CDK_DROP_LIST","dragDrop","_changeDetectorRef","_scrollDispatcher","_group","_destroyed","_unsortedItems","_dropListRef","_assignDefaults","_setupInputSyncSubscription","_handleEvents","CdkDropList","_dropLists","_syncItemsWithRef","getSortedItems","documentPosition","_dragRef","DOCUMENT_POSITION_FOLLOWING","startWith","coerceArray","correspondingDropList","_scrollableParentsResolved","getAncestorScrollContainers","scrollable","coerceNumberProperty","draggingDisabled","listAutoScrollDisabled","listOrientation","i3","CDK_DRAG_HANDLE","parentDrag","_stateChanges","_parentDrag","CdkDragHandle","CDK_DRAG_PLACEHOLDER","CdkDragPlaceholder","CDK_DRAG_PREVIEW","_matchSize","CdkDragPreview","_selfHandle","subscription","movedEvent","CdkDrag","_syncInputs","_updateRootElement","_setupHandlesListener","freeDragPosition","rootSelectorChange","rootElementSelector","_getBoundaryElement","boundary","childHandleElements","switchMap","handleInstance","dragRef","DragDropModule","CdkScrollableModule","LayoutModule","mediaQueriesForWebkitCompatibility","mediaQueryStyleNode","_matchMedia","matchMedia","noopMatchMedia","BLINK","sheet","insertRule","createEmptyStyleRule","media","addListener","removeListener","MediaMatcher","_mediaMatcher","_zone","_queries","_destroySubject","isMatched","mediaQuery","_registerQuery","mql","observables","observable","stateObservable","combineLatest","breakpointStates","breakpoints","BreakpointObserver","Breakpoints","XSmall","Small","Medium","Large","XLarge","Handset","Tablet","Web","HandsetPortrait","TabletPortrait","WebPortrait","HandsetLandscape","TabletLandscape","WebLandscape","MutationObserver","MutationObserverFactory","_mutationObserverFactory","_observedElements","_cleanupObserver","elementOrRef","_observeElement","_unobserveElement","mutations","ContentObserver","_currentSubscription","CdkObserveContent","scrollBehaviorSupported","supportsScrollBehavior","_previousHTMLStyles","_isEnabled","_canBeEnabled","_previousScrollPosition","coerceCssPixelValue","disable","htmlStyle","bodyStyle","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","viewport","_detach","_overlayRef","_initialScrollPosition","updatePosition","scrollContainers","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","scrollThrottle","autoClose","overlayRect","overlayElement","isElementScrolledOutsideView","NoopScrollStrategy","CloseScrollStrategy","block","BlockScrollStrategy","RepositionScrollStrategy","ScrollStrategyOptions","scrollStrategy","backdropClass","disposeOnNavigation","configKeys","connectionPair","scrollableViewProperties","_portalOutlet","_host","_pane","_keyboardDispatcher","_location","_outsideClickDispatcher","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","_backdropClickHandler","_backdropTransitionendHandler","_disposeBackdrop","_keydownEvents","_outsidePointerEvents","_scrollStrategy","_positionStrategy","backdropElement","_previousHostParent","attachResult","_updateStackingOrder","_updateElementSize","_updateElementDirection","_togglePointerEvents","_attachBackdrop","_toggleClasses","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","backdropClick","detachments","keydownEvents","outsidePointerEvents","getConfig","updatePositionStrategy","updateSize","sizeConfig","setDirection","addPanelClass","removePanelClass","updateScrollStrategy","enablePointer","showingClass","backdropToDetach","_backdropTimeout","cssClasses","isAdd","backdrop","_containerElement","getContainerElement","_createContainer","containerClass","_isTestEnvironment","oppositePlatformContainers","OverlayContainer","boundingBoxClass","cssUnitPattern","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","_scrollables","_preferredPositions","_positionChanges","_offsetX","_offsetY","_appliedPanelClasses","positionChanges","_validatePositions","_boundingBox","_isDisposed","_isInitialRender","_lastPosition","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","_containerRect","originRect","viewportRect","containerRect","flexibleFits","fallback","originPoint","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","score","_previousPushAmount","alignItems","justifyContent","lastPosition","withScrollableContainers","scrollables","withViewportMargin","withFlexibleDimensions","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","isLocked","withDefaultOffsetX","withDefaultOffsetY","withTransformOriginOn","_transformOriginSelector","_isRtl","endX","overlayStartX","overlayStartY","rawOverlayRect","getRoundedBoundingClientRect","_getOffset","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","verticalFit","horizontalFit","_pushOverlayOnScreen","overflowRight","overflowBottom","overflowTop","overflowLeft","pushX","pushY","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","_getScrollVisibility","changeEvent","ConnectedOverlayPositionChange","xOrigin","yOrigin","isRtl","smallestDistanceToViewportEdge","previousHeight","isBoundedByRightViewportEdge","previousWidth","_hasExactPosition","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","documentHeight","horizontalStyleProperty","documentWidth","originBounds","overlayBounds","scrollContainerBounds","isOriginClipped","isElementClippedByScrolling","isOriginOutsideView","isOverlayClipped","isOverlayOutsideView","overflows","currentOverflow","axis","ElementRef","_cssPosition","_topOffset","_bottomOffset","_leftOffset","_rightOffset","_alignItems","_justifyContent","centerHorizontally","centerVertically","parentStyles","shouldBeFlushHorizontally","shouldBeFlushVertically","marginLeft","marginRight","GlobalPositionStrategy","FlexibleConnectedPositionStrategy","OverlayPositionBuilder","_attachedOverlays","BaseOverlayDispatcher","_keydownListener","overlays","_isAttached","OverlayKeyboardDispatcher","_cursorStyleIsSet","_pointerDownListener","_pointerDownEventTarget","_clickListener","_addEventListeners","_cursorOriginalValue","OverlayOutsideClickDispatcher","nextUniqueId","scrollStrategies","_componentFactoryResolver","_positionBuilder","_injector","_directionality","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","OverlayConfig","OverlayRef","_appRef","ApplicationRef","DomPortalOutlet","Overlay","i5","i6","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CdkOverlayOrigin","_overlay","scrollStrategyFactory","_hasBackdrop","_lockPosition","_flexibleDimensions","_push","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","overlayKeydown","overlayOutsideClick","_templatePortal","TemplatePortal","_scrollStrategyFactory","_position","_updatePositionStrategy","lockPosition","_attachOverlay","_detachOverlay","_createOverlay","_buildConfig","_createPositionStrategy","_getFlexibleConnectedPositionStrategyOrigin","transformOriginSelector","CdkConnectedOverlay","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","OverlayModule","ScrollingModule","platform","_fullScreenEventName","_fullScreenListener","_adjustParentForFullscreenChange","_addFullscreenChangeListener","getFullscreenElement","eventName","_getEventName","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","FullscreenOverlayContainer","hasV8BreakIterator","supportedInputTypes","Intl","v8BreakIterator","_platformId","isPlatformBrowser","EDGE","TRIDENT","CSS","ANDROID","SAFARI","Platform","PLATFORM_ID","PlatformModule","candidateInputTypes","featureTestInput","supportsPassiveEvents","rtlScrollAxisType","shadowDomIsSupported","supportsPassiveEventListeners","scrollToFunction","scrollContainer","containerStyle","contentStyle","createShadowRoot","attachShadow","_supportsShadowDom","ShadowRoot","newActiveElement","composedPath","__karma__","jasmine","jest","Mocha","_attachedHost","setAttachedHost","Portal","attachDomPortal","_attachedPortal","ComponentPortal","attachComponentPortal","attachTemplatePortal","DomPortal","_invokeDisposeFn","setDisposeFn","_disposeFn","BasePortalOutlet","outletElement","_defaultInjector","anchorNode","componentFactory","Injector","attachView","hostView","viewCount","detachView","_getComponentRootNode","CdkPortal","TemplatePortalDirective","attached","_getRootNode","attachedRef","_attachedRef","CdkPortalOutlet","PortalHostDirective","notFoundValue","VIRTUAL_SCROLL_STRATEGY","itemSize","minBufferPx","maxBufferPx","_scrolledIndexChange","scrolledIndexChange","_viewport","_itemSize","_minBufferPx","_maxBufferPx","_updateTotalContentSize","_updateRenderedRange","updateItemAndBufferSize","onContentScrolled","onDataLengthChanged","onContentRendered","onRenderedOffsetChanged","behavior","scrollToOffset","setTotalContentSize","getDataLength","renderedRange","getRenderedRange","newRange","viewportSize","dataLength","scrollOffset","measureScrollOffset","firstVisibleIndex","maxVisibleItems","newVisibleIndex","startBuffer","expandStart","endBuffer","expandEnd","setRenderedRange","setRenderedContentOffset","FixedSizeVirtualScrollStrategy","CdkFixedSizeVirtualScroll","fixedSizeDir","forwardRef","_scrolled","_globalSubscription","_scrolledCount","elementScrolled","scrollableReference","auditTimeInMs","_addGlobalListener","auditTime","_removeGlobalListener","ancestorScrolled","elementOrElementRef","ancestors","scrollingContainers","_scrollableContainsElement","scrollableElement","fromEvent","ScrollDispatcher","scrollDispatcher","_elementScrolled","getRtlScrollAxisType","_applyScrollToOptions","CdkScrollable","i2","_changeListener","_viewportSize","_updateViewportSize","getViewportRect","documentRect","throttleTime","ViewportRuler","SCROLL_SCHEDULER","asapScheduler","viewportRuler","_detachedSubject","_renderedRangeSubject","_appendOnly","renderedRangeStream","_totalContentSize","_totalContentWidth","_totalContentHeight","_dataLength","_renderedContentOffset","_renderedContentOffsetNeedsRewrite","_isChangeDetectionPending","_runAfterChangeDetection","_viewportChanges","checkViewportSize","_calculateSpacerSize","appendOnly","_measureViewportSize","_markChangeDetectionNeeded","forOf","_forOf","dataStream","newLength","_doChangeDetection","r2","rangesEqual","getOffsetToRenderedContentStart","_renderedContentTransform","measureRenderedContentSize","contentEl","_contentWrapper","measureRangeSize","viewportEl","runAfter","runAfterChangeDetection","CdkVirtualScrollViewport","_template","_differs","_viewRepeater","_dataSourceChanges","pairwise","cur","_changeDataSource","shareReplay","_differ","_needsUpdate","_onRenderedDataChange","cdkVirtualForOf","_cdkVirtualForOf","isDataSource","ArrayDataSource","cdkVirtualForTrackBy","_cdkVirtualForTrackBy","cdkVirtualForTemplate","cdkVirtualForTemplateCacheSize","renderedStartIndex","rangeLen","firstNode","lastNode","getOffset","_renderedItems","_applyChanges","_updateContext","oldDs","newDs","_adjustedPreviousIndex","_getEmbeddedViewArgs","forEachIdentityChange","even","odd","CdkVirtualForOf","_RecycleViewRepeaterStrategy","base","_sticky","_hasStickyChanged","sticky","prevValue","hasStickyChanged","resetStickyChanged","CDK_TABLE","TEXT_COLUMN_OPTIONS","CdkCellDef","CdkHeaderCellDef","CdkFooterCellDef","_CdkColumnDefBase","mixinHasStickyInput","_table","_stickyEnd","_name","_setNameInput","stickyEnd","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","CdkColumnDef","columnDef","BaseCdkCell","CdkHeaderCell","CdkFooterCell","CdkCell","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_currentSchedule","task","_createScheduleIfNeeded","scheduleEnd","_Schedule","_getScheduleObservable","_CoalescedStyleScheduler","CDK_ROW_TEMPLATE","_columnsDiffer","getColumnsDiff","extractCellTemplate","CdkHeaderRowDef","headerCell","CdkFooterRowDef","footerCell","BaseRowDef","_CdkHeaderRowDefBase","_CdkFooterRowDefBase","CdkRowDef","_viewContainer","CdkCellOutlet","mostRecentCellOutlet","CdkHeaderRow","CdkFooterRow","CdkRow","_contentClassName","CdkNoDataRow","STICKY_DIRECTIONS","_isNativeHtmlTable","_stickCellCss","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","clearStickyPositioning","stickyDirections","elementsToClear","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","stickyColumnsUpdated","sizes","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","firstStickyEnd","_addStickyStyle","stickRows","rowsToStick","stickyStates","states","stickyOffsets","stickyCellHeights","elementsToStick","rowIndex","stickyOffset","borderedRowIndex","isBorderedRowIndex","stickyHeaderRowsUpdated","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","_getCalculatedZIndex","dirValue","isBorderElement","zIndexIncrements","firstRowCells","nextPosition","STICKY_POSITIONING_LISTENER","CdkRecycleRows","DataRowOutlet","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CDK_TABLE_TEMPLATE","_stickyPositioningListener","_columnDefsByName","_customColumnDefs","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","contentChanged","MAX_VALUE","trackBy","_trackByFn","_dataSource","_switchDataSource","multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","dataRow","dataIndex","_cacheRowDefs","_cacheColumnDefs","_headerRowDefs","_footerRowDefs","_rowDefs","rowDefsChanged","columnsChanged","_renderUpdatedColumns","_forceRenderHeaderRows","_forceRenderFooterRows","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","_headerRowOutlet","_footerRowOutlet","def","_defaultRowDef","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","NgZone","addColumnDef","removeColumnDef","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","_stickyStyler","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","prevCachedRenderRows","renderRowsForData","_getRenderRowsForData","renderRow","rowDefs","_getRowDefs","cachedRenderRows","columnDefs","_getOwnDefs","_contentColumnDefs","mergeArrayAndSet","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","when","columnsDiffReducer","acc","dataColumnsChanged","headerColumnsChanged","footerColumnsChanged","_renderRow","rowOutlet","renderedRows","outlet","_getCellTemplates","renderIndex","columnId","sections","outlets","_noDataRowOutlet","stickyCheckReducer","StickyStyler","_noDataRow","shouldShow","CdkTable","_DisposeViewRepeaterStrategy","_syncColumnDefName","_createDefaultHeaderText","dataAccessor","defaultDataAccessor","defaultHeaderTextTransform","CdkTextColumn","CdkTableModule","_DOM","adapter","historyGo","relativePosition","PlatformLocation","ɵɵinject","BrowserPlatformLocation","useBrowserPlatformLocation","LOCATION_INITIALIZED","_doc","_init","_history","getBaseHrefFromDOM","getDOM","getBaseHref","onPopState","getGlobalEventTarget","onHashChange","port","newPath","pushState","supportsState","forward","getState","slashes","pathEndIdx","droppedSlashIdx","params","createBrowserPlatformLocation","LocationStrategy","platformLocation","PathLocationStrategy","provideLocationStrategy","APP_BASE_HREF","_removeListenerFns","_baseHref","prepareExternalUrl","joinWithSlash","includeHash","normalizeQueryParams","externalUrl","HashLocationStrategy","platformStrategy","_urlChangeListeners","_platformStrategy","browserBaseHref","stripTrailingSlash","_stripIndexHtml","isCurrentPathEqualTo","baseHref","_stripBaseHref","_notifyUrlChangeListeners","onUrlChange","_urlChangeSubscription","onNext","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","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","RUR","RWF","SBD","SEK","SGD","SHP","SLL","SOS","SRD","SSP","STD","STN","SYP","THB","TMM","TND","TOP","TRL","TRY","TTD","TWD","TZS","UAH","UGX","UYI","UYU","UYW","UZS","VEF","VND","VUV","XAF","XCD","XOF","XPF","XXX","YER","ZAR","ZMK","ZMW","ZWD","NumberFormatStyle","Plural","FormStyle","TranslationWidth","FormatWidth","NumberSymbol","WeekDay","getLastDefinedValue","ɵfindLocaleData","ɵLocaleDataIndex","res","CurrencyDecimal","Decimal","CurrencyGroup","Percent","Currency","Scientific","Zero","One","Two","Few","Many","Other","Standalone","Narrow","Abbreviated","Wide","Short","Long","Full","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","TimeSeparator","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","getLocalePluralCase","ɵgetLocalePluralCase","getLocaleCurrencies","symbolNarrow","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","DateType","TranslationType","timezone","parsedNb","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","isoStringToDate","namedFormat","parts","dateTimezoneOffset","timezoneToOffset","reverseValue","timezoneOffset","addDateMinutes","convertTimezoneToLocal","dateFormatter","DATE_FORMATS","formatter","dateStrGetter","Eras","dateGetter","FullYear","weekNumberingYearGetter","Month","Months","weekGetter","DayPeriods","Minutes","Seconds","FractionalSeconds","timeZoneGetter","Extended","ShortGMT","getDateFormatter","newDate","getLocaleId","getLocaleDateFormat","getLocaleTimeFormat","shortTime","getNamedFormat","shortDate","formatDateTime","getLocaleDateTimeFormat","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","str","opt_values","num","digits","negWrap","neg","strNum","getDatePart","strMs","formatFractionalSeconds","localeMinus","getLocaleNumberSymbol","padNumber","extended","formStyle","getLocaleMonthNames","getLocaleDayNames","currentHours","currentMinutes","checkFullData","rule","extractTime","getLocaleExtraDayPeriodRules","getLocaleExtraDayPeriods","afterFrom","beforeTo","amPm","getLocaleDayPeriods","getLocaleEraNames","unexpected","getDateTranslation","datetime","monthBased","nbDaysBefore1stDayOfMonth","thisThurs","getThursdayThisWeek","firstThurs","firstDayOfYear","THURSDAY","getFirstThursdayOfYear","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","groupSymbol","decimalSymbol","digitsInfo","isPercent","formattedText","isZero","parsedNumber","integerLen","zeros","numStr","exponent","MAX_DIGITS","fractionLen","toPercent","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","fractionSize","roundAt","digit","dropTrailingZeros","minLen","carry","roundNumber","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","currencyCode","parseNumberFormat","getLocaleNumberFormat","DEFAULT_NB_OF_CURRENCY_DIGITS","getNumberOfCurrencyDigits","formatNumberToLocaleString","patternParts","positive","positiveParts","integer","fraction","trunkLen","cases","ngLocalization","getPluralCategory","NgLocalization","LOCALE_ID","NgLocaleLocalization","cookieStr","eqIndex","cookieName","cookieValue","decodeURIComponent","_iterableDiffers","_keyValueDiffers","_ngEl","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","klass","_removeClasses","_applyClasses","ngClass","ɵisListLikeIterable","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","ɵstringify","rawClassVal","addClass","removeClass","NgClass","_componentRef","_moduleRef","ngComponentOutlet","elInjector","ngComponentOutletInjector","parentInjector","ngComponentOutletNgModuleFactory","parentModule","NgModuleRef","ComponentFactoryResolver","ngComponentOutletContent","NgComponentOutlet","ngForOf","_ngForOf","_ngForOfDirty","ngForTrackBy","ngForTemplate","NgForOfContext","applyViewChange","ilen","NgForOf","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","condition","_updateView","ngIfThen","assertTemplate","ngIfElse","NgIf","_templateRef","_created","enforceState","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_addCase","_addDefault","_defaultViews","_matchCase","matched","useDefault","NgSwitch","_view","SwitchView","ngSwitchCase","NgSwitchCase","NgSwitchDefault","_localization","_caseViews","ngPlural","_switchValue","addCase","switchView","_clearViews","_activateView","_activeView","NgPlural","isANumber","NgPluralCase","_ngStyle","ngStyle","_setStyle","nameAndUnit","NgStyle","_viewRef","ngTemplateOutletContext","ngTemplateOutlet","NgTemplateOutlet","ɵRuntimeError","_promiseStrategy","createSubscription","updateLatestValue","_subscribableStrategy","_ref","_latestValue","_obj","_strategy","_selectStrategy","_updateLatestValue","ɵisPromise","ɵisSubscribable","invalidPipeArgumentError","AsyncPipe","ɵpipe","LowerCasePipe","unicodeWordMatch","txt","TitleCasePipe","UpperCasePipe","DATE_PIPE_DEFAULT_TIMEZONE","defaultTimezone","DatePipe","_INTERPOLATION_REGEXP","pluralMap","I18nPluralPipe","mapping","I18nSelectPipe","JsonPipe","differs","keyValues","compareFn","defaultComparator","differChanges","compareFnChanged","forEachItem","makeKeyValuePair","keyValueA","keyValueB","aString","bString","KeyValuePipe","_locale","isValue","strToNumber","DecimalPipe","formatPercent","PercentPipe","_defaultCurrencyCode","getCurrencySymbol","formatCurrency","CurrencyPipe","DEFAULT_CURRENCY_CODE","supports","SlicePipe","CommonModule","PLATFORM_BROWSER_ID","platformId","PLATFORM_SERVER_ID","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","supportsScrolling","pageXOffset","pageYOffset","scrollToPosition","scrollToAnchor","elSelected","documentResult","getElementsByName","createTreeWalker","treeWalker","NodeFilter","SHOW_ELEMENT","currentNode","nextNode","findAnchorFromDocument","setHistoryScrollRestoration","scrollRestoration","supportScrollRestoration","scrollRestorationDescriptor","getScrollRestorationProperty","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","lcName","HttpHeaders","copyFrom","applyUpdate","existing","encodeKey","standardEncoding","encodeValue","decodeKey","decodeValue","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","updates","cloneFrom","encoder","HttpUrlEncodingCodec","fromString","fromObject","rawParams","codec","eqIdx","paramParser","appendAll","eKey","HttpParams","valueToString","third","fourth","reportProgress","withCredentials","HttpContext","urlWithParams","qIdx","sep","serializeBody","isBlob","isFormData","URLSearchParams","isUrlSearchParams","detectContentTypeHeader","setParams","HttpRequest","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","defaultStatus","defaultStatusText","HttpResponseBase","HttpHeaderResponse","HttpResponse","request","req","events$","concatMap","res$","jsonp","callbackParam","patch","addBody","HttpClient","HttpHandler","HTTP_INTERCEPTORS","NoopInterceptor","foreignDocument","nextRequestId","callbackMap","resolvedPromise","nextCallback","finished","HttpErrorResponse","removeListeners","implementation","createHTMLDocument","adoptNode","JsonpClientBackend","JsonpCallbackContext","JsonpInterceptor","XSSI_PREFIX","xhrFactory","xhr","build","detectedType","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","responseURL","getResponseHeader","getResponseUrl","onLoad","originalBody","onError","sentHeaders","onDownProgress","progressEvent","lengthComputable","total","partialText","onUpProgress","upload","HttpXhrBackend","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","lastCookieString","lastToken","parseCount","getToken","cookieString","ɵparseCookieValue","HttpXsrfCookieExtractor","tokenService","headerName","lcUrl","HttpXsrfInterceptor","HttpXsrfTokenExtractor","backend","interceptors","HttpInterceptorHandler","HttpInterceptingHandler","HttpBackend","HttpClientXsrfModule","HttpClientModule","withOptions","HttpClientJsonpModule","XhrFactory$1","__forward_ref__","me","ngInjectableDef","ngInjectorDef","__NG_ELEMENT_ID__","providersResolver","vars","consts","hostAttrs","contentQueries","declaredInputs","onPush","directiveDefs","pipeDefs","setInput","schemas","tView","Qe","Kn","declarations","transitiveCompileScopes","isFirstChange","Ci","Hi","createRenderer","lFrame","bindingsEnabled","currentTNode","isParent","lView","contextLView","elementDepthCount","currentNamespace","currentDirectiveIndex","bindingRootIndex","bindingIndex","currentQueryIndex","inI18n","Dr","Yr","$a","xo","ba","attributeName","Ac","isReflectionEnabled","_zipTypesAndAnnotations","_ownParameters","_ownAnnotations","_ownPropMetadata","propMetadata","ownPropMetadata","hasLifecycleHook","guards","getter","importUri","resourceUri","resolveIdentifier","resolveEnum","annotationCls","attribute","skipSelf","localRefs","components","projection","createHTML","createScript","createScriptURL","createPolicy","getTypeName","getInertBodyElement","stripCustomNsAttrs","sanitizeChildren","startElement","endElement","checkClobberedElement","Kh","_findOriginalError","kp","insertBeforeIndex","injectorIndex","directiveStart","directiveEnd","directiveStylingLast","propertyBindings","providerIndexes","mergedAttrs","localNames","initialInputs","tViews","projectionNext","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","jg","$g","Jh","Qg","Gf","Sf","M0","Xf","wh","E1","blueprint","declTNode","bindingStartIndex","expandoStartIndex","hostBindingOpCodes","firstCreatePass","firstUpdatePass","staticViewQueries","staticContentQueries","preOrderHooks","preOrderCheckHooks","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","directiveRegistry","pipeRegistry","incompleteFirstPass","Fv","Rv","Yu","og","k_","Ve","Hg","Df","bd","cg","_resolveInjectorDefTypes","assertNotDestroyed","processInjectorType","processProvider","lg","hydrate","Fy","injectableDefInScope","Rp","Ry","As","Nv","qh","playerHandler","F1","vl","Pl","Hs","us","Rd","$c","ef","w_","resolveForwardRef","typeArgumentCount","K0","kg","numberOfKeys","updateCapabilities","rs","G0","resolveAndCreateChild","createChildFromResolved","resolveAndInstantiate","instantiateResolved","getProviderAtIndex","_new","_getMaxNumberOfObjects","_instantiateProvider","_instantiate","_getByReflectiveDependency","_getByKey","_getObjByKeyId","_throwOrNull","_getByKeySelf","_getByKeyDefault","wl","pp","$f","Ad","im","IC","Wl","TC","__ngNextListenerFn__","p_","Ay","Wf","z1","zf","textEnd","keyEnd","valueEnd","OC","Yy","Ku","Zy","qy","BC","NC","LC","J1","l0","Jy","ey","q_","$m","i_","hg","Fp","fg","Ef","_g","cu","nf","A_","m1","hv","gy","marker","vy","Np","KC","fx","gx","B_","$C","Sy","_0","mx","hx","dC","XC","pC","qC","Ex","hC","YC","yx","currentCaseLViewIndex","anchorIdx","by","vx","_v","xy","Dy","_C","gC","cf","_1","cC","Xl","f1","xx","Sx","y0","gv","reattach","checkNoChanges","attachToViewContainerRef","detachFromAppRef","attachToAppRef","propName","Gh","c_","Z_","pg","nm","notifyOnChanges","setDirty","_adjustIndex","insertView","dirtyQueriesWithMatches","elementStart","elementEnd","embeddedTView","getByIndex","track","isApplyingToNode","matchTNode","matchTNodeWithReadOption","addMatch","Tx","Ux","Mx","Hx","Ax","uS","jx","qn","moduleType","wo","qi","Pn","Qr","Cr","Eo","compilation","exported","Ka","lm","Ll","typeSourceSpan","io","Nc","ei","Zo","lifecycle","usesOnChanges","usesInheritance","viewQueries","$s","emitDistinctChangesOnly","compilePipe","pipeName","Ta","xs","fs","bindingPropertyName","Gl","tc","hostPropertyName","cl","Qc","Hp","runInitializers","Uy","Vs","u_","_h","Pc","Fh","S0","Wx","xC","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","compileModuleAndAllComponentsAsync","clearCache","clearCacheFor","getModuleId","SC","Zone","enableLongStackTrace","nativeRequestAnimationFrame","Yx","ox","ax","Gx","isAngularZone","onInvokeTask","Fx","onInvoke","onHasTask","onHandleError","Qx","runTask","runGuarded","_watchAngularEvents","m_","increasePendingRequestCount","decreasePendingRequestCount","_runCallbacksIfReady","getPendingTasks","creationLocation","addCallback","doneCb","whenStable","getPendingRequestCount","findProviders","D0","ya","registerApplication","unregisterApplication","unregisterAllApplications","getTestability","getAllTestabilities","getAllRootElements","findTestabilityInTree","Zr","addToWindow","Ea","Oo","Ss","Ns","bootstrapModuleFactory","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","Lh","ngZoneEventCoalescing","ngZoneRunCoalescing","E0","Sm","WC","_moduleDoBootstrap","tick","_loadComponent","Bf","mS","G_","MS","$x","Hv","listeners","references","M1","providerTokens","Ly","RS","AS","FS","queryAll","queryAllNodes","triggerEventHandler","Oy","qx","Zx","gS","eS","xS","forEachPreviousItem","forEachMovedItem","_mismatch","_verifyReinsertion","_truncate","_reinsertAfter","_moveAfter","_addAfter","_insertAfter","_unlink","_addToMoves","_addToRemovals","_addIdentityChange","_insertBeforeOrAppend","_getOrCreateRecordForKey","_maybeAddToChanges","_addToAdditions","_addToChanges","_forEach","bv","Dv","WS","zS","YS","KS","EC","compileDirectiveDeclaration","compileComponentDeclaration","qS","compileFactoryDeclaration","compileInjectableDeclaration","compileInjectorDeclaration","compileNgModuleDeclaration","compilePipeDeclaration","BaseControlValueAccessor","BuiltInControlValueAccessor","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","renderer","_compositionMode","_composing","ɵgetDOM","getUserAgent","_isAndroid","normalizedValue","_compositionStart","_compositionEnd","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","minValidator","maxValidator","requiredValidator","requiredTrueValidator","emailValidator","minLengthValidator","maxLengthValidator","patternValidator","composeAsync","isEmptyInputValue","actual","hasValidLength","actualLength","maxlength","nullValidator","regexStr","requiredPattern","actualValue","obs","ɵisObservable","arrayOfErrors","isValidatorFn","presentValidators","isPresent","mergeErrors","executeValidators","normalizeValidators","forkJoin","controlValidators","dirValidator","_rawValidators","_rawAsyncValidators","currentValidators","makeValidatorsArray","validatorsToAdd","hasValidator","_onDestroyCallbacks","dirty","touched","untouched","statusChanges","_setValidators","_composedValidatorFn","composeValidators","_setAsyncValidators","_composedAsyncValidatorFn","composeAsyncValidators","asyncValidator","_registerOnDestroy","_invokeOnDestroyCallbacks","hasError","errorCode","getError","AbstractControlDirective","_parent","valueAccessor","formDirective","_cd","AbstractControlStatus","NgControlStatus","NgControl","NgControlStatusGroup","ControlContainer","setUpValidators","_pendingValue","_pendingChange","_pendingDirty","updateControl","setUpViewChangePipeline","emitModelEvent","_unregisterOnChange","setUpModelChangePipeline","_pendingTouched","setUpBlurPipeline","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","setUpDisabledChangeHandler","validateControlPresenceOnChange","cleanUpValidators","_registerOnCollectionChange","getControlValidators","setValidators","mergeValidators","asyncValidators","getControlAsyncValidators","setAsyncValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","emitModelToViewChange","viewModel","_syncPendingControls","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","VALID","INVALID","PENDING","DISABLED","validatorOrOpts","isOptionsObj","isFormControl","FormControl","isFormGroup","FormGroup","isFormArray","FormArray","getRawValue","isGroup","_forEachChild","_hasOwnPendingAsyncValidator","_onCollectionChange","_onDisabledChange","coerceToValidator","coerceToAsyncValidator","validatorFn","asyncValidatorFn","_updateOn","addValidators","addAsyncValidators","removeValidators","removeAsyncValidators","hasAsyncValidator","clearValidators","clearAsyncValidators","opts","onlySelf","markAllAsTouched","markAsUntouched","_updateTouched","_updatePristine","markAsPending","emitEvent","skipPristineCheck","_parentMarkedDirty","_updateValue","_updateAncestors","changeFn","setParent","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","_updateControlsErrors","delimiter","controlToFind","_find","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_setUpdateStrategy","parentDirty","AbstractControl","pickValidators","pickAsyncValidators","_onChange","_applyFormState","initialValueIsDefault","emitViewToModelChange","patchValue","removeListItem","cb","_setUpControls","registerControl","removeControl","setControl","controlName","assertAllValuesPresent","assertControlPresent","_reduceChildren","subtreeUpdated","_reduceValue","initValue","_registerControl","formDirectiveProvider$1","NgForm","resolvedPromise$1","_directives","ngSubmit","_findContainer","getControl","addFormGroup","setUpFormContainer","removeFormGroup","getFormGroup","updateModel","onSubmit","$event","syncPendingControls","onReset","resetForm","_checkParentType","controlPath","AbstractFormGroupDirective","modelGroupProvider","NgModelGroup","formControlBinding$1","NgModel","_registered","selectValueAccessor","_checkForErrors","_checkName","oldName","_getPath","_setUpControl","_updateDisabled","isPropertyUpdated","_isStandalone","_setUpStandalone","disabledValue","ChangeDetectorRef","ɵNgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistryModule","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","RadioControlRegistry","_registry","_state","_fn","formControlName","RANGE_VALUE_ACCESSOR","RangeValueAccessor","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding","FormControlDirective","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","previousForm","cleanUpControl","_ngModelWarningSentOnce","formDirectiveProvider","FormGroupDirective","_updateDomValue","_checkFormPresent","_updateValidators","_updateRegistrations","_oldForm","_setUpFormContainer","_cleanUpFormContainer","addFormArray","removeFormArray","getFormArray","oldCtrl","newCtrl","cleanUpFormContainer","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","FormControlName","_added","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_optionMap","_idCounter","_compareWith","compareWith","valueString","_buildValueString$1","_getOptionId","_getOptionValue","_registerOption","_extractId$1","_select","ngValue","_setElementValue","NgSelectOption","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","optionSelectedStateSetter","_setSelected","selectedOptions","_extractId","_buildValueString","ɵNgSelectMultipleOption","_validator","inputName","normalizeInput","createValidator","AbstractValidatorDirective","MAX_VALIDATOR","MaxValidator","toFloat","MIN_VALIDATOR","MinValidator","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","toBoolean","EMAIL_VALIDATOR","EmailValidator","MIN_LENGTH_VALIDATOR","MinLengthValidator","MAX_LENGTH_VALIDATOR","MaxLengthValidator","PATTERN_VALIDATOR","PatternValidator","ɵInternalFormsSharedModule","FormsModule","ReactiveFormsModule","warnOnNgModelWithFormControl","controlsConfig","_reduceControls","isAbstractControlOptions","_createControl","FormBuilder","_uniqueAutocompleteIdCounter","option","_MatAutocompleteMixinBase","mixinDisableRipple","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","autoActiveFirstOption","_activeOptionChanges","showPanel","_isOpen","displayWith","optionSelected","opened","optionActivated","_classList","inertGroups","_autoActiveFirstOption","coerceStringArray","_setVisibilityClasses","_keyManager","ActiveDescendantKeyManager","_setVisibility","_setScrollTop","panel","_getScrollTop","_emitSelectEvent","MatAutocompleteSelectedEvent","_getPanelAriaLabelledby","labelId","labelExpression","ariaLabelledby","_visibleClass","_hiddenClass","_MatAutocompleteBase","MatAutocomplete","MAT_OPTGROUP","MatOption","MAT_OPTION_PARENT_COMPONENT","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","MatAutocompleteTrigger","_formField","_defaults","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","_canOpenOnNextFocus","_closeKeyEventStream","_windowBlurHandler","panelOpen","_onTouched","autocompleteAttribute","_overlayAttached","optionSelections","autocomplete","autocompleteDisabled","_setStrategyPositions","_destroyPanel","openPanel","_floatLabel","closePanel","_resetLabel","_closingActionsSubscription","panelClosingActions","_getOutsideClickStream","MatOptionSelectionChange","activeOption","clickTarget","formField","customOrigin","_setTriggerValue","_handleKeydown","hasModifier","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","_canOpen","_scrollToOption","_previousValue","_handleFocus","shouldAnimate","_animateAndLockLabel","_subscribeToClosingActions","firstStable","optionChanges","wasOpen","_setValueAndClose","_clearPreviousSelectedOption","_getConnectedElement","_getPanelWidth","_portal","getLabelId","_getOverlayConfig","_getOverlayPosition","overlayPanelClass","belowPositions","_aboveClass","abovePositions","getConnectedOverlayOrigin","panelWidth","_getHostWidth","labelCount","_countGroupLabelsBeforeOption","optionGroups","_getHostElement","newScrollPosition","_getOptionScrollPosition","_MatAutocompleteTriggerBase","i2$1","MAT_FORM_FIELD","_MatAutocompleteOriginBase","MatAutocompleteOrigin","MatAutocompleteModule","MatOptionModule","_MatBadgeBase","mixinDisabled","BADGE_CONTENT_CLASS","_ariaDescriber","_animationMode","_overlap","_setColor","overlap","_content","newContent","_updateRenderedContent","_description","newDescription","_updateHostAriaDescription","_hidden","isAbove","getBadgeElement","_badgeElement","_clearExistingBadges","_createBadgeElement","destroyNode","badgeElement","activeClass","newContentNormalized","colorPalette","badges","MatBadge","ANIMATION_MODULE_TYPE","MatBadgeModule","MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","MAT_BUTTON_TOGGLE_GROUP","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","MatButtonToggleGroup","uniqueIdCounter","_changeDetector","_controlValueAccessorChangeFn","appearance","_buttonToggles","_markForCheck","_selectionModel","_setSelectionByValue","SelectionModel","MatButtonToggleChange","_syncButtonToggle","isUserInput","deferEvents","_updateModelValue","_isSelected","_isPrechecked","_rawValue","_clearSelection","_selectValue","correspondingOption","MatButtonToggle","_MatButtonToggleBase","toggleGroup","_isSingleSelector","parsedTabIndex","buttonToggleGroup","buttonId","_appearance","_buttonElement","newChecked","MatButtonToggleModule","MatRippleModule","BUTTON_HOST_ATTRIBUTES","_MatButtonBase","isRoundButton","_hasHostAttributes","isIconButton","DEFAULT_ROUND_BUTTON_COLOR","_isRippleDisabled","disableRipple","MatButton","MatRipple","focusMonitor","animationMode","_haltDisabledEvents","stopImmediatePropagation","MatAnchor","MatButtonModule","MatCardContent","MatCardTitle","MatCardSubtitle","MatCardActions","MatCardFooter","MatCardImage","MatCardSmImage","MatCardMdImage","MatCardLgImage","MatCardXlImage","MatCardAvatar","MatCard","MatCardHeader","MatCardTitleGroup","MatCardModule","MAT_CHECKBOX_DEFAULT_OPTIONS","MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY","clickAction","MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR","MatCheckbox","_MatCheckboxBase","mixinTabIndex","_uniqueId","indeterminateChange","_currentAnimationClass","_currentCheckState","_indeterminate","defaultColor","inputId","focusOrigin","_syncIndeterminate","_transitionCheckState","_onLabelTextChange","_getAriaChecked","newState","oldState","_getAnimationClassForCheckStateTransition","animationClass","MatCheckboxChange","_inputElement","_onInputClick","_onInteractionEvent","animSuffix","nativeCheckbox","MAT_CHECKBOX_REQUIRED_VALIDATOR","MatCheckboxRequiredValidator","_MatCheckboxRequiredValidatorModule","MatCheckboxModule","MAT_CHIP_REMOVE","MAT_CHIP_AVATAR","MAT_CHIP_TRAILING_ICON","_MatChipMixinBase","MatChipAvatar","MatChipTrailingIcon","globalRippleOptions","_hasFocus","chipListSelectable","_chipListMultiple","_chipListDisabled","_selectable","_removable","_addHostClassName","_chipRippleTarget","_chipRipple","RippleRenderer","setupTriggerEvents","rippleConfig","_animationsDisabled","rippleDisabled","coercedValue","_dispatchSelectionChange","removable","ariaSelected","basicChipAttrName","chip","_removeTriggerEvents","selectViaInteraction","toggleSelected","SPACE","_blur","MatChip","MAT_RIPPLE_GLOBAL_OPTIONS","_parentChip","parentChip","MatChipRemove","MAT_CHIPS_DEFAULT_OPTIONS","nextUniqueId$1","_addOnBlur","separatorKeyCodes","chipEnd","chipList","_chipList","registerInput","addOnBlur","_focusLastChipOnBackspace","_keydown","_allowFocusEscape","_emitChipEnd","_keyup","_focus","_isSeparatorKey","chipInput","_onInput","MatChipInput","_MatChipListBase","mixinErrorState","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","controlType","_lastDestroyedChipIndex","_uid","_tabIndex","_userTabIndex","o2","ariaOrientation","_syncChipsState","_initializeSelection","_chipInput","Validators","_hasFocusedChip","chips","shouldLabelFloat","chipSelectionChanges","chipFocusChanges","chipBlurChanges","chipRemoveChanges","FocusKeyManager","_resetChips","_updateTabIndex","_updateFocusForDestroyedChips","updateErrorState","_dropSubscriptions","setDescribedByIds","_ariaDescribedby","onContainerClick","_originatesFromChip","_focusInput","newChipIndex","_isValidIndex","_sortValues","correspondingChip","_propagateChanges","fallbackValue","valueToEmit","MatChipListChange","_markAsTouched","_listenToChipsFocus","_listenToChipsSelection","_listenToChipsRemoved","_chipFocusSubscription","_chipBlurSubscription","_chipSelectionSubscription","_chipRemoveSubscription","chipIndex","MatChipList","MatFormFieldControl","MatChipsModule","ErrorStateMatcher","AnimationCurves","STANDARD_CURVE","DECELERATION_CURVE","ACCELERATION_CURVE","SHARP_CURVE","AnimationDurations","COMPLEX","ENTERING","EXITING","MATERIAL_SANITY_CHECKS","_sanityChecks","_hasDoneGlobalChecks","_checkIsEnabled","_disableRipple","errorState","matcher","errorStateMatcher","isErrorState","_pendingSubscribers","_notifySubscriber","_markInitialized","_localeChanges","localeChanges","getValidDateOrNull","compareDate","sameDate","firstValid","secondValid","clampDate","ISO_8601_REGEX","matDateLocale","useUtcForDisplay","dtf","DateTimeFormat","timeZone","_format","_createDateWithOverflow","_2digit","NativeDateAdapter","NativeDateModule","MatNativeDateModule","ShowOnDirtyErrorStateMatcher","MatLine","MatLineModule","fadeOut","fadeOutRipple","defaultRippleAnimationConfig","enterDuration","exitDuration","passiveEventOptions","pointerDownEvents","pointerUpEvents","_target","_isPointerDown","_activeRipples","_pointerUpEventsRegistered","fadeInRipple","animationConfig","centered","distX","distY","distanceToFurthestCorner","ripple","transitionDuration","enforceStyleRecalculation","rippleRef","RippleRef","persistent","_mostRecentTransientRipple","_runTimeoutOutsideZone","isMostRecentTransientRipple","wasActive","rippleEl","fadeOutAll","fadeOutAllNonPersistent","_triggerElement","_registerEvents","handleEvent","_onTouchStart","_onPointerUp","isFakeMousedown","_lastTouchStartEvent","terminateOnPointerUp","eventTypes","globalOptions","_globalOptions","_rippleRenderer","_setupTriggerEventsIfEnabled","_trigger","launch","configOrX","MatPseudoCheckbox","MatPseudoCheckboxModule","_MatOptgroupMixinBase","_uniqueOptgroupIdCounter","_labelId","_inert","_MatOptgroupBase","MatOptgroup","_active","_mostRecentViewValue","viewValue","_emitSelectionChangeEvent","_getAriaSelected","_getTabIndex","_MatOptionBase","changeDetectorRef","optionIndex","optionsArray","groupCounter","optionOffset","optionHeight","currentScrollPosition","panelHeight","_cellClicked","activeDate","_dateSelected","_monthSelectedInYearView","_goToDateInView","_yearSelectedInMultiYearView","compareValue","numCols","activeCell","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","previewChange","_enterHandler","_skipNextFocus","_getCellFromElement","_leaveHandler","startValue","endValue","columnChanges","_firstRowOffset","_cellPadding","_cellWidth","_isActiveCell","colIndex","cellNumber","_focusActiveCell","movePreview","_isRangeStart","_isRangeEnd","isEnd","_isInRange","_isComparisonStart","comparisonStart","comparisonEnd","_isComparisonBridgeStart","previousCell","previousRow","_isComparisonBridgeEnd","_isComparisonEnd","nextRow","_isInComparisonRange","_isComparisonIdentical","_isPreviewStart","_isPreviewEnd","_isInPreview","isTableCell","rangeEnabled","MatCalendarBody","_adapter","_selectionChanged","updateSelection","oldValue","_isValidDateInstance","MatDateSelectionModel","isComplete","MatSingleDateSelectionModel","DateRange","MatRangeDateSelectionModel","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","Optional","SkipSelf","MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER","MAT_DATE_RANGE_SELECTION_STRATEGY","_dateAdapter","selectionFinished","currentRange","createPreview","DefaultMatCalendarRangeStrategy","MAT_CALENDAR_RANGE_STRATEGY_PROVIDER","_dateFormats","_rangeStrategy","_rerenderSubscription","_userSelection","activeDateChange","_activeDate","oldActiveDate","validDate","minDate","maxDate","_hasSameMonthAndYear","_setRanges","_minDate","_maxDate","comparisonChange","_getDateInCurrentMonth","_previewStart","_previewEnd","_handleCalendarBodyKeydown","PAGE_UP","PAGE_DOWN","_selectionKeyPressed","_canSelect","_handleCalendarBodyKeyup","_todayDate","_getCellCompareValue","_monthLabel","monthLabel","firstOfMonth","_firstWeekOffset","_initWeekdays","_createWeekCells","_matCalendarBody","_previewChanged","previewRange","narrowWeekdays","longWeekdays","_weekdays","dateNames","_weeks","_shouldEnableDate","cellClasses","dateClass","MatCalendarCell","d2","selectedValue","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","MatMonthView","isSameMultiYearView","_setSelectedYear","_todayYear","minYearOfPage","activeYear","getActiveOffset","_createCellForYear","_yearSelected","yearsPerPage","_getActiveCell","yearName","_shouldEnableYear","_selectedYear","dateAdapter","year1","year2","startingYear","getStartingYear","euclideanModulo","maxYear","MatMultiYearView","monthSelected","_setSelectedMonth","_monthSelected","normalizedDate","_todayMonth","_getMonthInCurrentYear","_yearLabel","monthNames","_months","_createCellForMonth","monthName","_shouldEnableMonth","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxMonth","minYear","minMonth","_selectedMonth","MatYearView","calendarLabel","openCalendarLabel","closeCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","formatYearRange","MatDatepickerIntl","_intl","_buttonDescriptionId","periodButtonText","currentView","maxYearOfPage","minYearName","maxYearName","periodButtonLabel","prevButtonLabel","nextButtonLabel","currentPeriodClicked","previousClicked","nextClicked","previousEnabled","_isSameView","nextEnabled","MatCalendarHeader","MatCalendar","_moveFocusOnNextTick","startView","viewChanged","_intlChanges","startAt","_startAt","_clampedActiveDate","_currentView","viewChangedResult","_calendarHeaderPortal","headerComponent","focusActiveCell","minDateChange","maxDateChange","_getCurrentViewComponent","updateTodaysDate","normalizedYear","normalizedMonth","monthView","yearView","multiYearView","i7","i8","matDatepickerAnimations","transformPanel","transition","keyframes","fadeInCalendar","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","_MatDatepickerContentBase","_globalModel","_rangeSelectionStrategy","_subscriptions","_animationDone","_actionsPortal","_closeButtonText","_model","_animationState","datepicker","touchUi","_calendar","_handleUserSelection","_startExitAnimation","_getSelected","_applyPendingSelection","MatDatepickerContent","_inputStateChanges","_touchUi","xPosition","yPosition","_restoreFocus","openedStream","closedStream","_opened","_focusedElementBeforeOpen","_backdropHarnessClass","datepickerInput","getStartValue","getThemePalette","restoreFocus","_panelClass","_getMinDate","_getMaxDate","_getDateFilter","_setConnectedPositions","_destroyOverlay","_selectYear","_selectMonth","_viewChanged","registerActions","removeActions","_openOverlay","completeClose","_forwardContentValues","_dialogLabelId","getOverlayLabelId","isDialog","_getDialogStrategy","_getDropdownStrategy","_getCloseStream","primaryX","secondaryX","primaryY","secondaryY","MatDatepickerBase","i9","MatDatepicker","targetElement","_validatorOnChange","_cvaOnChange","_valueChangesSubscription","_localeSubscription","_parseValidator","_lastValueValid","matDatepickerParse","_filterValidator","controlValue","_matchesFilter","matDatepickerFilter","_minValidator","matDatepickerMin","_maxValidator","matDatepickerMax","_assignValueProgrammatically","_getValueFromModel","_parentDisabled","_getValidators","_registerModel","_assignValue","_shouldHandleChangeEvent","_isValidValue","_formatValue","MatDatepickerInputEvent","dateInputsHaveChanged","isAltDownArrow","_openPopup","lastValueWasValid","hasChanged","_assignValueToModel","MatDatepickerInputBase","MAT_DATEPICKER_VALUE_ACCESSOR","MatDatepickerInput","MAT_DATEPICKER_VALIDATORS","_closedSubscription","matDatepicker","_datepicker","_min","validValue","_max","_dateFilter","wasMatchingValue","modelValue","MAT_INPUT_VALUE_ACCESSOR","MatDatepickerToggleIcon","_watchStateChanges","_open","datepickerStateChanged","inputStateChanged","datepickerToggled","MatDatepickerToggle","MAT_DATE_RANGE_INPUT_PARENT","_rangeInput","InjectFlags","_getPlaceholder","_handleChildValueChange","_openDatepicker","_groupDisabled","_startInput","_endInput","opposite","MatDateRangeInputPartBase","i2$2","_MatDateRangeInputBase","rangeInput","defaultErrorStateMatcher","parentForm","parentFormGroup","_startValidator","matStartDateInvalid","getMirrorValue","MatStartDate","_endValidator","matEndDateInvalid","MatEndDate","_ariaDescribedBy","rangePicker","_rangePicker","wasMatchingStart","wasMatchingEnd","_revalidate","startEmpty","endEmpty","_getInputMirrorValue","_shouldHidePlaceholders","_shouldHideSeparator","_shouldLabelFloat","_getAriaLabelledby","_hasFloatingLabel","_updateFocus","MatDateRangeInput","MatDateRangePicker","_applySelection","MatDatepickerApply","MatDatepickerCancel","MatDatepickerActions","MatDatepickerModule","ariaDescribedBy","ariaLabelledBy","delayFocusTrap","closeOnNavigation","matDialogAnimations","dialogContainer","animateChild","_interactivityChecker","_animationStateChanged","_elementFocusedBeforeDialogWasOpened","_closeInteractionType","_ariaLabelledBy","_initializeWithAttachedContent","_focusTrap","_recaptureFocus","_containsFocus","_forceFocus","_focusByCssSelector","elementToFocus","focusedSuccessfully","_focusDialogContainer","previousElement","_MatDialogContainerBase","MatDialogConfig","_onAnimationDone","toState","totalTime","_onAnimationStart","MatDialogContainer","_containerInstance","_afterOpened","_afterClosed","_beforeClosed","_closeFallbackTimeout","_finishDialogClose","_result","_closeDialogVia","dialogResult","afterOpened","beforeClosed","_getPositionStrategy","interactionType","MAT_DIALOG_DATA","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","MAT_DIALOG_SCROLL_STRATEGY_PROVIDER","_parentDialog","_dialogRefConstructor","_dialogContainerType","_dialogDataToken","_openDialogsAtThisLevel","_afterAllClosedAtThisLevel","_afterOpenedAtThisLevel","_ariaHiddenElements","afterAllClosed","_getAfterAllClosed","componentOrTemplateRef","_applyConfigDefaults","getDialogById","_attachDialogContainer","_attachDialogContent","_hideNonDialogContentFromAssistiveTechnology","_removeOpenDialog","_closeDialogs","dialogConfig","userInjector","containerPortal","containerRef","_createInjector","overlayContainer","dialogs","_MatDialogBase","parentDialog","MatDialogRef","MatDialog","dialogElementUid","_dialog","getClosestDialog","proxiedChange","_matDialogClose","_matDialogCloseResult","MatDialogClose","_dialogRef","MatDialogTitle","MatDialogContent","MatDialogActions","MatDialogModule","_inset","inset","MatDivider","MatDividerModule","nextId$1","CDK_ACCORDION","_openCloseAllActions","_multi","openAll","CdkAccordion","accordion","_expansionDispatcher","_openCloseAllSubscription","expandedChange","_expanded","_removeUniqueSelectionListener","accordionId","_subscribeToOpenCloseAllActions","CdkAccordionItem","CdkAccordionModule","MAT_ACCORDION","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","indicatorRotate","bodyExpansion","MatExpansionPanelContent","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","_uniqueSelectionDispatcher","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","fromState","hideToggle","togglePosition","_togglePosition","_hasSpacing","displayMode","_getExpandedState","_lazyContent","_body","focusedElement","bodyElement","MatExpansionPanel","MatExpansionPanelActionRow","_MatExpansionPanelHeaderMixinBase","_parentChangeSubscription","accordionHideToggleChange","expandedHeight","collapsedHeight","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","_handleHeaderKeydown","_handleHeaderFocus","MatExpansionPanelHeader","MatExpansionPanelDescription","MatExpansionPanelTitle","_ownHeaders","_headers","MatAccordion","MatExpansionModule","nextUniqueId$2","MAT_ERROR","ariaLive","MatError","matFormFieldAnimations","transitionMessages","_MAT_HINT","MatHint","MatLabel","MatPlaceholder","MAT_PREFIX","MatPrefix","MAT_SUFFIX","MatSuffix","_MatFormFieldBase","MAT_FORM_FIELD_DEFAULT_OPTIONS","_outlineGapCalculationNeededImmediately","_outlineGapCalculationNeededOnStable","_showAlwaysAnimate","_subscriptAnimationState","_hintLabel","_hintLabelId","_getDefaultFloatLabelState","_animationsEnabled","_hideRequiredMarker","hideRequiredMarker","_shouldAlwaysFloat","_canLabelFloat","hintLabel","_processHints","_explicitFormFieldControl","_controlNonStatic","_controlStatic","_connectionContainerRef","_validateControlChild","_validatePlaceholders","_syncDescribedByIds","_prefixChildren","_suffixChildren","_hintChildren","_errorChildren","_shouldForward","_hasPlaceholder","_placeholderChild","_hasLabel","_labelChildNonStatic","_labelChildStatic","_hideControlPlaceholder","_getDisplayedMessages","_validateHints","userAriaDescribedBy","startHint","endHint","labelEl","outlineStartSelector","outlineGapSelector","gapElements","_isAttachedToDOM","startWidth","gapWidth","startEls","gapEls","containerStart","_getStartEnd","labelChildren","labelStart","labelWidth","outlineGapPadding","MatFormField","i4","MatFormFieldModule","rowCount","lastRowMax","tracker","numColumns","tiles","tile","_trackTile","gapStartIndex","_findMatchingGap","_markTilePosition","TilePosition","tileCols","gapEndIndex","_nextRow","_findGapEndIndex","MAT_GRID_LIST","_gridList","_rowspan","_colspan","MatGridTile","setLines","_lines","MatGridTileText","MatGridAvatarCssMatStyler","MatGridTileHeaderCssMatStyler","MatGridTileFooterCssMatStyler","cssCalcAllowedValue","_rows","gutterSize","cols","_gutterSize","normalizeUnits","_cols","getBaseTileSize","sizePercent","gutterFraction","getTilePosition","baseSize","calc","getTileSize","percentWidthPerTile","gutterWidthFractionPerTile","setColStyles","setRowStyles","percentWidth","gutterWidth","baseTileWidth","side","getGutterSpan","getTileSpan","tileHeight","getComputedHeight","TileStyler","fixedRowHeight","_setListStyle","_tiles","_parseRatio","percentHeightPerTile","rowHeightRatio","baseTileHeight","ratioParts","gutterHeightPerTile","exp","_gutter","rowHeight","_rowHeight","_setTileStyler","_checkCols","_checkRowHeight","_layoutTiles","_tileStyler","FitTileStyler","RatioTileStyler","FixedTileStyler","_tileCoordinator","TileCoordinator","MatGridList","MatGridListModule","policy","ttWindow","trustedTypes","getPolicy","iconName","svgText","_httpClient","_sanitizer","_errorHandler","_svgIconConfigs","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_resolvers","_defaultFontSetClass","addSvgIcon","addSvgIconInNamespace","addSvgIconLiteral","addSvgIconLiteralInNamespace","namespace","_addSvgIconConfig","SvgIconConfig","addSvgIconResolver","cleanLiteral","SecurityContext","getMatIconFailedToSanitizeLiteralError","trustedLiteral","trustedHTMLFromString","addSvgIconSet","addSvgIconSetInNamespace","addSvgIconSetLiteral","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","registerFontClassAlias","classNameForFontAlias","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","getMatIconFailedToSanitizeUrlError","cachedIcon","cloneSvg","_loadSvgIconFromConfig","svg","getNamedSvgIcon","iconKey","_getSvgFromConfig","_getIconConfigFromResolvers","iconSetConfigs","_getSvgFromIconSetConfigs","throwError","getMatIconNameNotFoundError","_svgElementFromConfig","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","iconSetConfig","_loadSvgIconSetFromConfig","catchError","err","foundIcon","_extractSvgIconFromSet","_fetchIcon","iconSet","iconSource","iconElement","_setSvgAttributes","_toSvgElement","_svgElementFromString","viewBox","iconConfig","getMatIconNoHttpProviderError","inProgressFetch","share","configNamespace","svgElement","MatIconRegistry","DomSanitizer","ErrorHandler","_MatIconBase","MAT_ICON_LOCATION","getPathname","funcIriAttributes","funcIriAttributeSelector","funcIriPattern","_iconRegistry","ariaHidden","_inline","_currentIconFetch","svgIcon","_svgIcon","_updateSvgIcon","_clearSvgElement","fontSet","_fontSet","_cleanupFontValue","_updateFontIconClasses","fontIcon","_fontIcon","_splitIconName","cachedElements","_elementsWithExternalReferences","_previousPath","_prependPathToReferences","_usingFontIcon","_setSvgElement","_cacheChildrenWithExternalReferences","layoutElement","elem","fontSetClass","_previousFontSetClass","_previousFontIconClass","elementsWithFuncIri","elementWithReference","rawName","_svgNamespace","_svgName","MatIcon","MatIconModule","listenerOptions","_monitoredElements","animationName","isAutofilled","unlisten","AutofillMonitor","_autofillMonitor","cdkAutofill","CdkAutofill","_previousMinRows","_isViewInited","_handleFocusEvent","_textareaElement","minRows","_minRows","_setMinHeight","maxRows","_maxRows","_setMaxHeight","resizeToFitContent","_cachedPlaceholderHeight","_cacheTextareaPlaceholderHeight","_cachedLineHeight","_initialHeight","_cacheTextareaLineHeight","textareaClone","_measureScrollHeight","previousMargin","isFirefox","needsMarginFiller","measuringClass","force","textarea","_scrollToCaretPosition","_noopInputHandler","isStopped","setSelectionRange","CdkTextareaAutosize","TextFieldModule","MAT_INPUT_INVALID_TYPES","_MatInputBase","inputValueAccessor","autofilled","_type","_readonly","_neverEmptyInputTypes","getSupportedInputTypes","_iOSKeyupListener","_inputValueAccessor","_previousNativeValue","_isServer","_isNativeSelect","_isTextarea","_isInFormField","_validateType","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","_focusChanged","_previousPlaceholder","_isNeverEmpty","_isBadInput","validity","badInput","selectElement","firstOption","_isInlineSelect","MatInput","MatInputModule","_MatListBase","_MatListItemMixinBase","MAT_LIST","MAT_NAV_LIST","MatNavList","_getListType","MatList","MatListAvatarCssMatStyler","MatListIconCssMatStyler","MatListSubheaderCssMatStyler","navList","_isInteractiveList","_list","MatListItem","_MatSelectionListBase","_MatListOptionBase","MAT_SELECTION_LIST_VALUE_ACCESSOR","MatSelectionList","selectionList","checkboxPosition","_inputsInitialized","_reportValueChange","wasSelected","hadFocus","newActiveItem","_removeOptionFromList","_text","_setFocusedOption","_handleBlur","MatListOption","_contentInitialized","_markOptionsForCheck","_setOptionsFromValues","toFocus","disableRippleChanges","colorChanges","_isDestroyed","_setAllOptionsSelected","_getOptionIndex","manager","previousFocusIndex","_toggleFocusedOption","shouldSelect","_getSelectedOptionValues","MatSelectionListChange","focusedIndex","focusedOption","skipDisabled","changedOptions","MatListModule","matMenuAnimations","transformMenu","fadeInItems","MAT_MENU_CONTENT","_attached","_outlet","_MatMenuContentBase","MatMenuContent","MAT_MENU_PANEL","_MatMenuItemBase","_parentMenu","_hovered","_focused","_highlighted","_triggersSubmenu","_checkDisabled","_handleMouseEnter","icons","_setHighlighted","isHighlighted","MatMenuItem","MAT_MENU_DEFAULT_OPTIONS","overlapTrigger","menuPanelUid","_xPosition","_yPosition","_directDescendantItems","_tabSubscription","_panelAnimationState","_overlapTrigger","panelId","setPositionClasses","previousPanelClass","_previousPanelClass","_updateDirectDescendants","focusedItem","itemsList","itemChanges","_item","parentMenu","menuPanel","resetActiveItem","setElevation","elevation","_baseElevation","newElevation","_elevationPrefix","customElevation","_previousElevation","_startAnimation","_resetAnimation","_isAnimating","_allItems","_MatMenuBase","MatMenu","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","_menuItemInstance","_menuOpen","_hoverSubscription","_menuCloseSubscription","_handleTouchStart","_openedBy","menuOpened","onMenuOpen","menuClosed","onMenuClose","_parentMaterialMenu","triggersSubmenu","_deprecatedMatMenuTriggerFor","menu","_menu","reason","_destroyMenu","_checkMenu","_handleHover","menuOpen","toggleMenu","_setPosition","_getPortal","lazyContent","menuData","_menuClosingActions","_initMenu","_setIsMenuOpen","_setMenuElevation","_subscribeToPositions","originFallbackX","overlayFallbackY","originFallbackY","overlayFallbackX","parentClose","hover","_handleMousedown","_MatMenuTriggerBase","i3$1","MatMenuTrigger","MatMenuModule","_changePageSize","firstPage","lastPage","itemsPerPageLabel","nextPageLabel","previousPageLabel","firstPageLabel","lastPageLabel","getRangeLabel","MatPaginatorIntl","MAT_PAGINATOR_INTL_PROVIDER","parentIntl","MAT_PAGINATOR_DEFAULT_OPTIONS","_MatPaginatorMixinBase","mixinInitialized","_pageIndex","_length","_pageSizeOptions","_hidePageSize","_showFirstLastButtons","pageSizeOptions","hidePageSize","showFirstLastButtons","_pageSize","_updateDisplayedPageSizeOptions","_initialized","nextPage","hasNextPage","previousPageIndex","_emitPageEvent","previousPage","hasPreviousPage","maxPageIndex","_nextButtonsDisabled","_previousButtonsDisabled","_displayedPageSizeOptions","_MatPaginatorBase","formFieldAppearance","_formFieldAppearance","MatPaginator","MatPaginatorModule","MatSelectModule","MatTooltipModule","_MatProgressBarBase","MAT_PROGRESS_BAR_LOCATION","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","progressbarId","_isNoopAnimation","_bufferValue","animationEnd","_animationEndSubscription","_rectangleFillValue","bufferValue","_primaryTransform","_bufferTransform","_primaryValueBar","MatProgressBar","MatProgressBarModule","_MatProgressSpinnerBase","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS","diameter","BASE_SIZE","INDETERMINATE_ANIMATION_TEMPLATE","_diameter","trackedDiameters","MatProgressSpinner","_diameters","_spinnerAnimationLabel","_getSpinnerAnimationLabel","_noopAnimations","_forceAnimations","strokeWidth","_styleRoot","_attachStyleNode","_strokeWidth","_getCircleRadius","_getViewBox","_getStrokeCircumference","_getStrokeDashOffset","_getCircleStrokeWidth","_getCircleTransformOrigin","currentScale","styleRoot","currentDiameter","diameters","diametersForElement","styleTag","_getAnimationText","strokeCircumference","MatProgressSpinnerModule","MAT_RADIO_DEFAULT_OPTIONS","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MatRadioGroup","MAT_RADIO_GROUP","_labelPosition","_updateRadioButtonNames","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","_touch","_radios","isAlreadySelected","MatRadioChange","_MatRadioGroupBase","MatRadioButton","_MatRadioButtonMixinBase","radioGroup","_radioDispatcher","_providerOverride","newCheckedState","_setDisabled","_onInputInteraction","groupValueChanged","_previousTabIndex","_MatRadioButtonBase","radioDispatcher","providerOverride","MatRadioModule","_panelDoneAnimatingStream","matSelectAnimations","transformPanelWrap","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","_MatSelectMixinBase","MAT_SELECT_TRIGGER","MatSelectTrigger","_parentFormField","_panelOpen","_triggerAriaLabelledBy","_destroy","_valueId","_overlayPanelClass","_disableOptionCentering","disableOptionCentering","optionSelectionChanges","_openedStream","_closedStream","typeaheadDebounceInterval","_typeaheadDebounceInterval","hasAssigned","_panelDoneAnimating","_initKeyManager","_resetOptions","newAriaLabelledby","_getTriggerAriaLabelledby","_previousControl","_highlightCorrectOption","triggerValue","_handleOpenKeydown","_handleClosedKeydown","isOpenKey","previouslySelectedOption","selectedOption","hasDeselectedOptions","previouslyFocusedIndex","_onAttached","_overlayDir","_positioningSettled","_getPanelTheme","_selectOptionByValue","_scrollOptionIntoView","changedOrDestroyed","_onSelect","sortComparator","_getChangeEvent","_getAriaActiveDescendant","_MatSelectBase","_scrollTop","_triggerFontSize","_transformOrigin","_positions","_calculateOverlayScroll","scrollBuffer","maxScroll","_getItemHeight","optimalScrollPosition","_triggerRect","_calculateOverlayPosition","SELECT_PANEL_MAX_HEIGHT","_calculateOverlayOffsetX","MatSelectChange","paddingWidth","SELECT_MULTIPLE_PANEL_PADDING_X","SELECT_PANEL_PADDING_X","_calculateOverlayOffsetY","optionHeightAdjustment","maxOptionsDisplayed","optionOffsetFromPanelTop","_getItemCount","partialItemHeight","_checkOverlayWithinViewport","topSpaceAvailable","bottomSpaceAvailable","panelHeightTop","panelHeightBottom","totalPanelHeight","_adjustPanelUp","_adjustPanelDown","_getOriginBasedOnOption","distanceBelowViewport","distanceAboveViewport","scrollContainerHeight","selectedOptionOffset","SELECT_ITEM_HEIGHT_EM","MatSelect","_onBackdropClicked","matDrawerAnimations","transformDrawer","MAT_DRAWER_DEFAULT_AUTOSIZE","MAT_DRAWER_CONTAINER","_container","_contentMarginChanges","MatDrawerContent","MatDrawerContainer","_elementFocusedBeforeDrawerWasOpened","_enableAnimations","_mode","_disableClose","_animationStarted","_animationEnd","openedStart","mapTo","closedStart","onPositionChanged","_modeChanged","_takeFocus","_isFocusWithinDrawer","_openedVia","_updatePositionInParent","_updateFocusTrapState","_autoFocus","hasMovedFocus","activeEl","openedVia","_closeViaBackdropClick","_setOpen","_getWidth","MatDrawer","defaultAutosize","_drawers","_doCheckSubject","_contentMargins","_validateDrawers","updateContentMargins","_autosize","_start","_end","autosize","_backdropOverride","_userContent","_allDrawers","drawer","_watchDrawerToggle","_watchDrawerPosition","_watchDrawerMode","_isDrawerOpen","_left","_right","_setContainerClass","onMicrotaskEmpty","_closeModalDrawersViaBackdrop","_canHaveBackdrop","_isShowingBackdrop","MatSidenavContent","MatSidenavContainer","_fixedInViewport","_fixedTopGap","_fixedBottomGap","fixedInViewport","fixedTopGap","fixedBottomGap","MatSidenav","MatSidenavModule","MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS","disableToggleValue","MAT_SLIDE_TOGGLE_VALUE_ACCESSOR","MatSlideToggle","_MatSlideToggleBase","toggleChange","_onChangeEvent","MatSlideToggleChange","MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR","MatSlideToggleRequiredValidator","_MatSlideToggleRequiredValidatorModule","MatSlideToggleModule","activeEventOptions","MAT_SLIDER_VALUE_ACCESSOR","MatSlider","_MatSliderBase","_invert","_step","_thumbLabel","_tickInterval","_percent","_isSliding","_isActive","_tickIntervalPercent","_sliderDimensions","_dirChangeSubscription","_touchId","sliderHost","getTouchIdForSlider","getPointerPositionOnPage","_lastPointerEvent","_focusHostElement","_onMouseenter","_bindGlobalEvents","_updateValueFromPosition","_valueOnSlideStart","cancelable","_emitInputEvent","findMatchingTouch","_removeGlobalEvents","_windowBlur","_calculatePercentage","_roundToDecimal","thumbLabel","tickInterval","_blurHostElement","_clamp","_shouldInvertAxis","_isMinValue","_getThumbGap","_getTrackBackgroundStyles","_shouldInvertMouseCoords","_getTrackFillStyles","_getTicksContainerStyles","_getDirection","_getTicksStyles","tickSize","backgroundSize","shouldInvertAxis","_getThumbContainerStyles","_getSliderDimensions","_updateTickIntervalPercent","_increment","_onKeyup","triggerEvent","moveEventName","endEventName","numSteps","clampedValue","posComponent","exactValue","_calculateValue","closestValue","_createChangeEvent","tickIntervalPercent","trackSize","pixelsPerStep","pixelsPerTick","isSafeNumber","MatSliderChange","percentage","_sliderWrapper","MatSliderModule","MAT_SNACK_BAR_DATA","announcementMessage","MAX_TIMEOUT","containerInstance","_afterDismissed","_onAction","_dismissedByAction","_onExit","_finishDismiss","dismiss","_durationTimeoutId","dismissWithAction","closeWithAction","_dismissAfter","dismissedByAction","_onEnter","onAction","snackBarRef","hasAction","SimpleSnackBar","MatSnackBarRef","matSnackBarAnimations","snackBarState","snackBarConfig","_announceDelay","_onAnnounce","_assertNotAttached","_applySnackBarClasses","_live","_role","_completeExit","onEnter","_screenReaderAnnounce","_announceTimeoutId","panelClasses","inertElement","liveElement","MatSnackBarContainer","MatSnackBarConfig","MatSnackBarModule","MAT_SNACK_BAR_DEFAULT_OPTIONS","_breakpointObserver","_parentSnackBar","_defaultConfig","_snackBarRefAtThisLevel","_openedSnackBarRef","openFromComponent","_attach","openFromTemplate","simpleSnackBarComponent","_attachSnackBarContainer","snackBarContainerComponent","userConfig","handsetCssClass","_animateSnackBar","isLeft","_MatSnackBarBase","i3$2","live","breakpointObserver","parentSnackBar","defaultConfig","MatSnackBar","_disableViewStateAnimation","SORT_ANIMATION_TRANSITION","matSortAnimations","indicator","leftPointer","rightPointer","arrowOpacity","arrowPosition","allowChildren","MatSortHeaderIntl","MAT_SORT_HEADER_INTL_PROVIDER","MAT_SORT_DEFAULT_OPTIONS","_MatSortBase","sortables","_disableClear","sortable","getNextSortDirection","sortDirectionCycle","getSortDirectionCycle","nextDirectionIndex","MatSort","_MatSortHeaderBase","_columnDef","_showIndicatorHint","_viewState","_arrowDirection","_sortActionDescription","_handleStateChanges","sortActionDescription","_updateSortActionDescription","_updateArrowDirection","_setAnimationTransitionState","_isSorted","_sortButton","_setIndicatorHintVisible","_isDisabled","viewState","_toggleOnInteraction","_getArrowDirectionState","_getArrowViewState","_getAriaSortAttribute","_renderArrow","MatSortHeader","MatSortModule","CdkStepHeader","CdkStepLabel","STEP_STATE","STEPPER_GLOBAL_OPTIONS","_stepper","stepperOptions","interacted","interactedStream","_optional","_completedOverride","_customError","_stepperOptions","_displayDefaultIndicatorType","displayDefaultIndicatorType","completed","_getDefaultCompleted","stepControl","_getDefaultError","_stateChanged","_markAsInteracted","CdkStep","CdkStepper","_sortedHeaders","_linear","_selectedIndex","_groupId","linear","_steps","_anyControlsInvalidOrPending","_updateSelectedItemIndex","_stepHeader","_layoutDirection","_getStepLabelId","_getStepContentId","_getAnimationDirection","_getIndicatorType","isCurrentStep","_isCurrentStep","_getDefaultIndicatorLogic","_getGuidelineLogic","_getFocusIndex","stepsArray","previouslySelectedIndex","selectedStep","previouslySelectedStep","stepperElement","CdkStepperNext","CdkStepperPrevious","CdkStepperModule","MatStepLabel","optionalLabel","completedLabel","editableLabel","MatStepperIntl","MAT_STEPPER_INTL_PROVIDER","_MatStepHeaderBase","_intlSubscription","_stringLabel","_templateLabel","_getIconContext","_getDefaultTextForState","MatStepHeader","matStepperAnimations","horizontalStepTransition","verticalStepTransition","MatStepperIcon","MatStepContent","_errorStateMatcher","originalErrorState","customErrorState","MatStep","MatStepper","_MatProxyStepperBase","MatHorizontalStepper","MatVerticalStepper","animationDone","_iconOverrides","_icons","_stepIsNavigable","MatStepperNext","MatStepperPrevious","MatStepperModule","MatRecycleRows","MatTable","MatCellDef","MatHeaderCellDef","MatFooterCellDef","MatColumnDef","MatHeaderCell","MatFooterCell","MatCell","MatHeaderRowDef","MatFooterRowDef","MatRowDef","MatHeaderRow","MatFooterRow","MatRow","MatNoDataRow","MatTextColumn","MatTableModule","initialData","_renderData","_filter","_internalPageChanges","_renderChangesSubscription","sortHeaderId","_isNumberValue","valueA","valueB","valueAType","valueBType","comparatorResult","dataStr","transformedFilter","_updateChangeSubscription","_filterData","orderedData","_orderData","paginatedData","_pageData","_updatePaginator","filteredDataLength","lastPageIndex","newPageIndex","_MatTableDataSource","_tabFocusChanged","_removeTabBodyWrapperHeight","_setTabBodyWrapperHeight","_MAT_INK_BAR_POSITIONER","offsetLeft","_inkBarPositioner","alignToElement","inkBar","MatInkBar","MAT_TAB_CONTENT","MatTabContent","MAT_TAB_LABEL","MAT_TAB","_closestTab","MatTabLabel","_MatTabBase","MAT_TAB_GROUP","_closestTabGroup","_contentPortal","templateLabel","_setTemplateLabelInput","_explicitContent","_implicitContent","MatTab","matTabsAnimations","translateTab","_centeringSub","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_afterLeavingCenter","MatTabBodyPortal","MatTabBody","_translateTabComplete","_onCentering","_onCentered","_computePositionAnimationState","_positionIndex","_computePositionFromOrigin","_onTranslateTabStarted","_getLayoutDirection","_MatTabBodyBase","MAT_TABS_CONFIG","_MatTabLabelWrapperBase","getOffsetLeft","getOffsetWidth","MatTabLabelWrapper","_scrollDistance","_selectedIndexChanged","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","disablePagination","selectFocusedIndex","indexFocused","_stopInterval","_previousPaginator","_handlePaginatorPress","_nextPaginator","dirChange","realign","updatePagination","_alignInkBarToSelectedTab","_itemsResized","_getMaxScrollDistance","newFocusIndex","_setTabFocus","ResizeObserver","tabItems","resizeObserver","_tabLabelCount","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","focusIndex","_itemSelected","_onContentChanges","_currentTextContent","_checkPaginationEnabled","containerEl","_tabListContainer","scrollDistance","translateX","_tabList","_scrollTo","_scrollHeader","scrollAmount","_handlePaginatorClick","labelIndex","selectedLabel","viewLength","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","EXAGGERATED_OVERSCROLL","selectedItem","selectedLabelWrapper","_inkBar","mouseEvent","timer","maxScrollDistance","MatPaginatedTabHeader","_MatTabHeaderBase","MatTabHeader","_MatTabGroupMixinBase","_indexToSelect","_lastFocusedTabIndex","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","headerPosition","focusChange","dynamicHeight","contentTabIndex","_dynamicHeight","_animationDuration","_contentTabIndex","_backgroundColor","indexToSelect","_clampTabIndex","isFirstRun","_tabBodyWrapper","_subscribeToAllTabChanges","_subscribeToTabLabels","realignInkBar","_tabHeader","focusTab","MatTabChangeEvent","_getTabLabelId","_getTabContentId","tabHeader","_MatTabGroupBase","MatTabGroup","i7$1","updateActiveLink","tabPanel","_activeTabId","_getRole","_MatTabNavBase","MatTabNav","MatTabLink","_MatTabLinkMixinBase","_tabNavBar","_getAriaControls","_getAriaCurrent","_MatTabLinkBase","tabNavBar","_tabLinkRipple","MatTabNavPanel","MatTabsModule","PANEL_CLASS","passiveListenerOptions","MAT_TOOLTIP_SCROLL_STRATEGY","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","SCROLL_THROTTLE_MS","MAT_TOOLTIP_DEFAULT_OPTIONS","showDelay","hideDelay","touchendHideDelay","_viewInitialized","_pointerExitEventsInitialized","_cssClassPrefix","_showDelay","_hideDelay","touchGestures","_message","_passiveListeners","_updatePosition","_tooltipInstance","_setupPointerEnterEventsIfNeeded","_mouseLeaveHideDelay","_isTooltipVisible","_updateTooltipMessage","tooltipClass","_tooltipClass","_setTooltipClass","_touchstartTimeout","_showTimeoutId","_hideTimeoutId","_tooltipComponent","afterHidden","scrollableAncestors","_updateCurrentPositionClass","_handleBodyInteraction","disableTooltipInteractivity","_getOrigin","_addOffset","main","isLtr","originPosition","_invertPosition","overlayPosition","_currentPosition","classPrefix","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","LONGPRESS_DELAY","_addListeners","exitListeners","newTarget","_wheelListener","touchendListener","elementUnderPointer","gestures","msUserSelect","webkitUserSelect","MozUserSelect","webkitUserDrag","_MatTooltipBase","ariaDescriber","TooltipComponent","MatTooltip","_visibility","_closeOnInteraction","_isVisible","_onHide","_toggleVisibility","_handleMouseLeave","_onShow","_handleAnimationEnd","_showAnimation","_hideAnimation","_finalizeAnimation","toVisible","tooltip","_tooltip","showClass","hideClass","_TooltipComponentBase","_isHandset","NG_DEV_MODE$1","players","NoopAnimationPlayer","ɵAnimationGroupPlayer","driver","normalizer","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","isSameOffset","normalizedKeyframe","normalizedProp","normalizePropertyName","ɵPRE_STYLE","AUTO_STYLE","normalizeStyleValue","LINE_START","animationFailed","player","copyAnimationEvent","phaseName","makeAnimationEvent","triggerName","command","separatorPos","_contains","elm1","elm2","_query","_documentElement","isNode","getParentElement","_CACHED_BODY","_IS_WEBKIT","getBodyNode","containsVendorPrefix","camelProp","containsElement","invokeQuery","validateStyleProperty","matchesElement","_selector","computeStyle","easing","previousPlayers","scrubberAccessRequested","NoopAnimationDriver","AnimationDriver","NOOP","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","_convertTimeValueToMS","timings","allowNegativeValues","invalidTimingValue","delayMatch","easingVal","containsErrors","negativeStepValue","negativeDelayValue","parseTimeExpression","readPrototype","copyObj","styleAttrValue","getStyleAttributeString","camelCaseToDashCase","formerStyles","dashCaseToCamelCase","writeStyleAttribute","extractStyleParams","varName","invalidStyleParams","PARAM_REGEX","original","localVal","invalidParamValue","arr","DASH_CASE_REGEXP","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","invalidNodeType","transitionValue","expressions","eventStr","invalidTransitionAlias","parseAnimationAlias","expr","invalidExpression","makeLambdaFromStates","isFullAnyStateExpr","parseInnerTransitionStr","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN","SELF_TOKEN_REGEX","warnings","AnimationAstBuilderVisitor","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","visitDslNode","normalizeAnimationEntry","unsupportedCSSPropertiesFound","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","transitions","invalidTrigger","definitions","stateDef","invalidDefinition","styleAst","astParams","containsDynamicStyles","missingSubs","stylesObj","metadataName","invalidState","missingSubsArr","parseTransitionExpr","normalizeAnimationOptions","furthestTime","innerAst","timingAst","makeTimingAst","resolveTiming","strValue","dynamic","constructTimingAst","currentAnimateTimings","styleMetadata","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","invalidStyleValue","collectedEasing","styleData","styleMap","endTime","startTime","tuple","collectedEntry","updateCollectedStyle","firstStart","firstEnd","secondStart","secondEnd","invalidParallelAnimation","validateStyleParams","invalidKeyframes","totalKeyframesWithOffsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","invalidOffset","keyframeOffsetsOutOfOrder","generatedOffset","keyframesMissingOffsets","animateDuration","durationUpToThisFrame","parentSelector","includeSelf","hasAmpersand","normalizeSelector","getOrSetAsInMap","originalSelector","invalidStagger","currentTransition","normalizeParams","preStyleProps","postStyleProps","subTimeline","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","ElementInstructionMap","AnimationTimelineContext","currentTimeline","setStyles","timelines","timeline","containsAnimation","lastRootTimeline","allowOnlyTimelineStyles","createTimelineInstruction","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","resolveTimingValue","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","interpolateParams","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","parentContext","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate","_copyOptions","oldParams","newTime","fork","updatedTimings","SubTimelineBuilder","stretchStartingKeyframe","invalidQuery","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","allStyles","allProperties","copyStyles","flattenStyles","getFinalKeyframe","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","timeAtKeyframe","decimalPoints","mult","AnimationStyleNormalizer","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","invalidCssUnitValue","makeBooleanMap","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","_triggerName","_stateStyles","currentState","nextState","matchFns","oneOrMoreTransitionsMatch","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","buildAnimationTimelines","createTransitionInstruction","queriedElementsList","defaultParams","combinedParams","styleObj","_normalizer","transitionFactories","AnimationStateStyles","balanceProperties","AnimationTransitionFactory","fallbackTransition","createFallbackTransition","containsQueries","matchTransition","matchStyles","key1","key2","EMPTY_INSTRUCTION_MAP","bodyNode","_animations","_playersById","buildAnimationAst","registerFailed","_buildPlayer","normalizeKeyframes","autoStylesMap","inst","missingOrDestroyedAnimation","createAnimationFailed","optimizeGroupPlayer","_getPlayer","missingPlayer","baseEvent","listenOnPlayer","QUEUED_CLASSNAME","DISABLED_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","isObj","normalizeTriggerValue","absorbOptions","VOID_VALUE","DEFAULT_STATE_VALUE","StateValue","_engine","_triggers","_queue","_elementListeners","_hostClassName","phase","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","triggersWithStates","statesByElement","afterFlush","_getTrigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","k2","objEquals","reportError","eraseStyles","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","stateMap","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","namespaces","fetchNamespacesByElement","triggerLeaveAnimation","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","previousTriggersValues","markElementAsRemoved","processLeaveNode","prepareLeaveAnimationListeners","elementStates","visitedTriggers","removeNode","engine","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","removalFlag","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","markedForDestroy","elementContainsData","containsData","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","queuedPlayers","createNamespace","AnimationTransitionNamespace","_balanceNamespaceList","collectEnterElement","namespaceList","found","ancestor","ancestorNs","nextNamespace","registerTrigger","_fetchNamespace","nsId","isElementNode","markElementAsDisabled","isHostElement","hostNS","_buildInstruction","subTimelines","skipBuildAst","containerElement","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","whenRenderingDone","STAR_CLASSNAME","cleanupFns","_flushAnimations","quietFns","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","nodeIsOrphaned","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","parentPlayer","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","finalPlayers","_flattenGroupPlayersRecur","flattenGroupPlayers","wrappedPlayer","currentValues","deleteOrUnsetInMap","_player","_containsRealPlayer","_queuedCallbacks","_queueEvent","valuesMap","elementPropsMap","defaultStyle","cloakVals","cloakElement","failedElements","roots","rootMap","nodeSet","localRootMap","getRoot","postEntry","preEntry","_triggerCache","_transitionEngine","TransitionAnimationEngine","_timelineEngine","TimelineAnimationEngine","componentId","cacheKey","triggerBuildFailed","AnimationTrigger","buildTrigger","onInsert","onRemove","disableAnimations","parseTimelineCommand","eventPhase","_startStyles","_endStyles","initialStyles","SpecialCasedStyles","initialStylesByElement","_initialStyles","isNonAnimatableStyle","_specialStyles","_onDoneFns","_onStartFns","_onDestroyFns","_finished","_started","currentSnapshot","_duration","_delay","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","methods","playerOptions","previousStyles","previousWebAnimationPlayers","WebAnimationsPlayer","allowPreviousPlayerStylesMerge","previousStyleProps","startingKeyframe","missingStyleProps","balancePreviousStylesIntoKeyframes","specialStyles","startStyles","endStyles","filterNonAnimatableStyles","packageNonAnimatableStyles","AnimationBuilder","rootRenderer","_nextAnimationId","typeData","ViewEncapsulation","issueAnimationCommand","BrowserAnimationFactory","BrowserAnimationBuilder","AnimationFactory","RendererAnimationPlayer","_command","_listen","DISABLE_ANIMATIONS_FLAG","delegate","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","promise","BaseAnimationRenderer","animationTriggers","AnimationRenderer","_scheduleCountTask","scheduleListenerCallback","AnimationRendererFactory","createText","newChild","refChild","isMove","oldChild","selectRootElement","selectorOrNode","preserveContent","resolveElementFromTarget","dotIndex","parseTriggerCallbackName","countId","ɵAnimationEngine","InjectableAnimationEngine","SHARED_ANIMATION_PROVIDERS","ɵAnimationStyleNormalizer","ɵWebAnimationsStyleNormalizer","RendererFactory2","ɵDomRendererFactory2","BROWSER_ANIMATIONS_PROVIDERS","ɵWebAnimationsDriver","BROWSER_NOOP_ANIMATIONS_PROVIDERS","ɵNoopAnimationDriver","BrowserAnimationsModule","BrowserModule","NoopAnimationsModule","ɵDomAdapter","supportsDOMEvents","GenericBrowserDomAdapter","ɵsetRootDomAdapter","BrowserDomAdapter","onAndCancel","evt","getDefaultDocument","createHtmlDocument","isShadowRoot","DocumentFragment","baseElement","getBaseElementHref","urlParsingNode","pathName","relativePath","resetBaseElement","getCookie","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","APP_INITIALIZER","transitionId","ApplicationInitStatus","donePromise","setTestabilityGetter","BrowserGetTestability","registry","ɵglobal","findInAncestors","testability","testabilities","didWork","didWork_","whenAllStable","BrowserXhr","EVENT_MANAGER_PLUGINS","_eventNameToPlugin","_plugins","plugin","_findPluginFor","addGlobalEventListener","getZone","EventManager","_stylesSet","addStyles","additions","onStylesAdded","getAllStyles","SharedStylesHost","_hostNodes","_addStylesToHost","styleNodes","styleEl","addHost","hostNode","removeHost","styleNode","DomSharedStylesHost","NAMESPACE_URIS","xhtml","xlink","xml","xmlns","math","COMPONENT_REGEX","COMPONENT_VARIABLE","HOST_ATTR","CONTENT_ATTR","componentShortId","compId","eventHandler","allowDefaultBehavior","returnValue","eventManager","sharedStylesHost","appId","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","DomRendererFactory2","APP_ID","namespaceUri","setAttributeNS","removeAttributeNS","RendererStyleFlags2","decoratePreventDefault","contentAttr","shimContentAttribute","hostAttr","shimHostAttribute","hostEl","nodeOrShadowRoot","EventManagerPlugin","DomEventsPlugin","MODIFIER_KEYS","_keyMap","Del","Esc","Left","Right","Down","Menu","Win","_chromeNumKeyPadMap","MODIFIER_KEY_GETTERS","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","modifierName","keyIdentifier","getEventKey","modifierGetter","getEventFullKey","keyName","makeCurrent","INTERNAL_BROWSER_PLATFORM_PROVIDERS","ɵPLATFORM_BROWSER_ID","PLATFORM_INITIALIZER","initDomAdapter","ɵsetDocument","platformBrowser","createPlatformFactory","platformCore","BROWSER_MODULE_PROVIDERS","ɵINJECTOR_SCOPE","Testability","XhrFactory","ApplicationModule","_dom","addTag","forceCreation","_getOrCreateElement","addTags","attrSelector","getTags","updateTag","_parseSelector","_setMetaElementAttributes","removeTagElement","_containsAttributes","_getMetaKeyMap","META_KEYS_MAP","Meta","createMeta","httpEquiv","getTitle","setTitle","newTitle","createTitle","COMPILED","win","msPerTick","numTicks","appRef","timeChangeDetection","profileName","isProfilerAvailable","performanceNow","profileEnd","ChangeDetectionPerfRecord","PROFILER_GLOBAL_NAME","exportNgVar","AngularProfiler","escapedText","onSerializeCallbacks","initState","transferState","TransferState","hasKey","onSerialize","toJson","BrowserTransferStateModule","initialState","unescapedText","unescapeHtml","debugElement","msMatchesSelector","webkitMatchesSelector","elementMatches","debugNode","EVENT_NAMES","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","pressup","rotatestart","rotatemove","rotateend","rotatecancel","swipeleft","swiperight","swipeup","swipedown","doubletap","HAMMER_GESTURE_CONFIG","HAMMER_LOADER","overrides","buildHammer","Hammer","HammerGestureConfig","_loaderPromise","isCustomEvent","cancelRegistration","eventObj","off","HammerGesturesPlugin","HammerModule","ɵConsole","DomSanitizerImpl","ɵallowSanitizationBypassAndThrow","ɵunwrapSafeValue","ɵ_sanitizeHtml","ɵgetSanitizationBypassType","ɵ_sanitizeUrl","ɵbypassSanitizationTrustHtml","bypassSecurityTrustStyle","ɵbypassSanitizationTrustStyle","bypassSecurityTrustScript","ɵbypassSanitizationTrustScript","bypassSecurityTrustUrl","ɵbypassSanitizationTrustUrl","ɵbypassSanitizationTrustResourceUrl","domSanitizerImplFactory","RouterEvent","navigationTrigger","restoredState","shouldActivate","routeConfig","routerEvent","PRIMARY_OUTLET","ParamsAsMap","NAVIGATION_CANCELING_ERROR","segmentGroup","posParams","consumed","equalArraysOrString","aSorted","bSorted","pathCompareMap","exact","containee","matrixParams","equalPath","matrixParamsMatch","numberOfChildren","equalSegmentGroups","containsSegmentGroup","paramCompareMap","shallowEqual","ignored","fragment","containsSegmentGroupHelper","containeePaths","containerPaths","containeeSegment","_queryParamMap","convertToParamMap","DEFAULT_SERIALIZER","serialize","serializePaths","parameterMap","_parameterMap","serializePath","UrlParser","UrlTree","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","strParams","encodeUriQuery","serializeQueryParams","encodeURI","encodeUriFragment","DefaultUrlSerializer","primary","childOutlet","mapChildrenIntoArray","encodeUriString","encodeUriSegment","serializeMatrixParams","SEGMENT_RE","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","UrlSegmentGroup","parseChildren","parseQueryParam","parseSegment","parseParens","matchSegments","UrlSegment","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodeQuery","decodedVal","currentVal","allowPrimary","outletName","_root","pathFromRoot","findPath","Tree","setRouterState","urlTree","rootComponent","activated","ActivatedRouteSnapshot","RouterStateSnapshot","TreeNode","createEmptyStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","RouterState","futureSnapshot","_futureSnapshot","_routerState","_paramMap","paramsInheritanceStrategy","inheritingStartingFrom","curr","_resolvedData","flattenInherited","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","nextSnapshot","shallowEqualArrays","equalUrlParams","equalSegments","parentsMismatch","equalParamsAndUrlSegments","routeReuseStrategy","prevState","shouldReuseRoute","createNode","createOrReuseChildren","shouldAttach","detachedRouteHandle","retrieve","createActivatedRoute","commands","nav","Navigation","numberOfDoubleDots","isAbsolute","cmdIdx","segmentPath","urlPart","partIndex","computeNavigation","toRoot","startingPosition","processChildren","isMatrixParams","createPositionApplyingDoubleDots","findStartingPosition","updateSegmentGroupChildren","updateSegmentGroup","oldRoot","oldSegmentGroup","newSegmentGroup","qp","newRoot","replaceSegment","oldSegment","newSegment","cmdWithOutlet","isCommandWithOutlets","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","prefixedWith","slicedCommands","createNewSegmentGroup","getOutlets","createNewSegmentChildren","futureState","currState","forwardEvent","parentContexts","futureRoot","currRoot","deactivateChildRoutes","advanceActivatedRoute","activateChildRoutes","futureNode","currNode","contexts","nodeChildrenAsMap","futureChild","childOutletName","deactivateRoutes","childName","deactivateRouteAndItsChildren","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","onOutletDeactivated","attachRef","activateRoutes","ActivationEnd","ChildActivationEnd","getOrCreateContext","stored","onOutletReAttached","_loadedConfig","parentLoadedConfig","cmpFactoryResolver","activateWith","routes","INITIAL_VALUE","scan","isPending","innerAcc","isUrlTree","ChildrenOutletContexts","onChildOutletCreated","onChildOutletDestroyed","OutletContext","_activatedRoute","activateEvents","deactivateEvents","attachEvents","detachEvents","isActivated","activatedRouteData","cmp","childContexts","OutletInjector","RouterOutlet","parentPath","validateNode","getFullPath","validateConfig","currentRoute","standardizeConfig","ɵEmptyOutletComponent","sortedConfig","getOutlet","noMatch$1","consumedSegments","remainingSegments","positionalParamSegments","defaultUrlMatcher","slicedSegments","emptyPathMatch","containsEmptyPathMatchesWithNamedOutlets","primarySegment","_sourceSegment","_segmentIndexShift","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","rawSegment","NoMatch$1","newTree","AbsoluteRedirect","moduleInjector","configLoader","urlSerializer","allowRedirects","splitGroup","rootSegmentGroup","urlTrees$","expandSegmentGroup","squashSegmentGroup","noMatchError","mapped$","rootCandidate","expandChildren","expandSegment","childOutlets","sortedRoutes","sortByMatchingOutlets","expandedChild","last$1","expanded$","expandSegmentAgainstRoute","EmptyError","noLeftoversInUrl","isImmediateMatch","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","absoluteRedirect","lineralizeSegments","mergeMap","newSegments","rawSegmentGroup","childConfig$","getChildConfig","routerConfig","childModule","childConfig","splitSegmentGroup","matchedOnOutlet","LoadedRouterConfig","runCanLoadGuards","shouldLoadResult","navigationCancelingError","canLoadFails","canLoad","canLoadObservables","injectionToken","guardVal","isCanLoad","wrapIntoObservable","prioritizedGuardValue","applyRedirectCreatreUrlTree","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","newChildren","childCandidate","mergeTrivialChildren","ApplyRedirects","applyRedirects$1","extractedUrl","getChildRouteGuards","getClosestLoadedConfig","futurePath","checks","canDeactivateChecks","canActivateChecks","prevChildren","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","CanActivate","CanDeactivate","getRouteGuards","targetSnapshot","guardsResult","futureRSS","currRSS","currARS","canDeactivateObservables","isCanDeactivate","runCanDeactivate","runCanDeactivateChecks","ChildActivationStart","fireChildActivationStart","ActivationStart","fireActivationStart","futureARS","canActivateChildGuardsMapped","canActivateChildGuards","getCanActivateChild","guardsMapped","isCanActivateChild","runCanActivateChild","canActivateObservables","isCanActivate","runCanActivate","runCanActivateChecks","rootComponentType","recognize","processSegmentGroup","freeze","routeState","inheritParamsAndData","routeNode","inheritedParamsDataResolve","processSegment","outletChildren","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","processSegmentAgainstRoute","getSourceSegmentGroup","getPathIndexShift","getResolve","mergedNodes","hasEmptyPathConfig","duplicateEmptyPathNode","resultNode","mergedNode","serializer","Recognizer","newObservableError","NoMatch","recognize$1","canActivateChecksResolved","getDataKeys","getResolver","takeLast","resolveNode","resolvedData","runResolve","nextResult","detachedTree","ROUTES","compiler","onLoadStartListener","onLoadEndListener","_loader$","loadRunner","moduleFactory$","loadModuleFactory","ConnectableObservable","NgModuleFactory","shouldProcessUrl","extract","newUrlPart","wholeUrl","runExtras","exactMatchOptions","subsetMatchOptions","rootContexts","lastSuccessfulNavigation","currentNavigation","disposed","navigationId","currentPageId","isNgZoneEnabled","errorHandler","defaultErrorHandler","malformedUriErrorHandler","defaultMalformedUriErrorHandler","lastSuccessfulId","hooks","beforePreactivation","defaultRouterHook","afterPreactivation","urlHandlingStrategy","DefaultUrlHandlingStrategy","DefaultRouteReuseStrategy","urlUpdateStrategy","canceledNavigationResolution","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","browserUrlTree","RouterConfigLoader","RouteConfigLoadStart","RouteConfigLoadEnd","routerState","createEmptyState","targetPageId","currentRawUrl","rawUrl","extras","currentRouterState","targetRouterState","navigations","setupNavigations","processNavigations","browserPageId","ɵrouterPageId","eventsSubject","errored","initialUrl","previousNavigation","urlTransition","isBrowserTriggeredNavigation","NavigationStart","serializeUrl","applyRedirects","finalUrl","skipLocationChange","setBrowserUrl","routesRecognized","RoutesRecognized","navStart","replaceUrl","switchTap","appliedUrlTree","guardsStart","GuardsCheckStart","getAllRouteGuards","checkGuards","guardsEnd","GuardsCheckEnd","restoreHistory","cancelNavigationTransition","resolveStart","ResolveStart","dataResolved","resolveData","resolveEnd","ResolveEnd","createRouterState","ActivateRoutes","cancelationReason","isNavigationCancelingError","redirecting","navCancel","NavigationCancel","mergedTree","scheduleNavigation","navError","NavigationError","resetRootComponentType","setTransition","initialNavigation","setUpLocationChangeListener","locationSubscription","stateCopy","getCurrentNavigation","navigationExtras","relativeTo","queryParamsHandling","preserveFragment","removeEmptyProps","validateCommands","matchOptions","containsTree","NavigationEnd","priorPromise","rej","generateNgRouterState","restoringFromCaughtError","targetPagePosition","resetUrlToCurrentUrlTree","routerPageId","Router","tabIndexAttribute","setTabIndexIfNotOnNativeEl","newTabIndex","routerLink","attrBoolValue","RouterLink","locationStrategy","updateTargetUrlAndHref","RouterLinkWithHref","linkWithHref","routerLinkActiveOptions","isActiveChange","routerEventsSubscription","linksWithHrefs","mergeAll","subscribeToEachLinkOnChanges","linkInputChangesSubscription","allLinkChanges","isLinkActive","routerLinkActive","hasActiveLinks","isActiveMatchOptions","isActiveCheckFn","RouterLinkActive","preload","preloadingStrategy","onEndLoad","setUpPreloading","processRoutes","preloadConfig","RouterPreloader","PreloadingStrategy","viewportScroller","lastId","lastSource","restoredId","scrollPositionRestoration","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","scheduleScrollEvent","RouterScroller","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","UrlSerializer","assignExtraOptionsToRouter","enableTracing","groupEnd","Compiler","NoPreloading","NgProbeToken","RouterModule","provideRoutes","provideForRootGuard","Inject","createRouterScroller","routerNgProbeToken","RouterInitializer","getAppInitializer","ROUTER_INITIALIZER","getBootstrapListener","APP_BOOTSTRAP_LISTENER","provideRouterInitializer","platformLocationStrategy","useHash","ANALYZE_FOR_ENTRY_COMPONENTS","initNavigation","resultOfPreactivationDone","appInitializer","bootstrapListener","bootstrappedComponentRef","preloader","routerScroller","componentTypes","NGX_MASK_CONFIG","NEW_CONFIG","INITIAL_CONFIG","initialConfig","thousandSeparator","decimalMarker","clearIfNotMatch","showTemplate","showMaskTyped","placeHolderCharacter","dropSpecialCharacters","hiddenInput","shownMaskExpression","separatorLimit","validation","specialCharacters","leadZeroDateTime","apm","leadZero","keepCharacterPositions","triggerOnMaskChange","inputTransformFn","outputTransformFn","maskFilled","timeMasks","withoutValidation","_shift","maskExpression","showKeepCharacterExp","deletedSpecialCharacter","_formatWithSeparators","thousandSeparatorChar","decimalChars","decimalChar","regExp","rgx","sanitizedStr","getPrecision","checkAndRemoveSuffix","checkInputPrecision","precisionRegEx","_charToRegExpExpression","precisionMatch","precisionMatchLength","_compareOrIncludes","applyMaskWithPattern","maskAndPattern","customPattern","applyMask","justPasted","backspaced","_j","_k","_q","_r","backspaceShift","stepBack","inputArray","valuesIP","ipError","_validIP","cpfCnpjError","_stripToDecimal","_splitPercentZero","thousandSeparatorCharEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","inputSymbol","symbolStarInPattern","_checkSymbolMask","_shiftStep","daysCount","inputValueCursor","inputValueCursorPlusOne","inputValueCursorPlusTwo","inputValueCursorMinusOne","inputValueCursorMinusTwo","inputValueCursorMinusThree","inputValueSliceMinusThreeMinusOne","inputValueSliceMinusOnePlusOne","inputValueSliceCursorPlusTwo","inputValueSliceMinusTwoCursor","maskStartWithMonth","startWithMonthInput","withoutDays","monthsCount","specialChart","day1monthInput","day2monthInput","day2monthInputDot","day1monthPaste","day2monthPaste","_findSpecialChar","actualShift","onlySpecial","_findDropSpecialChar","maskSymbol","isDecimalMarker","charsToEscape","inputLength","comparedValue","excludedValue","decimalIndex","parsedValue","integerPart","decimalPart","integerString","NgxMaskApplierService","isNumberValue","maskIsShown","selStart","selEnd","writingValue","maskChanged","_maskExpressionArray","_emitValue","_currentValue","showMaskInInput","formControlResult","getSymbol","newInputValue","actualResult","removeMask","shiftTypedSymbols","getActualValue","hideInput","resLen","prefNmask","countSkipedSymbol","_numberSkipedSymbols","applyValueChanges","formElement","_getActiveElement","clearIfNotMatchFn","maskChar","symbolToReplace","currSymbol","replaceSymbol","numberToString","useGrouping","inputVal","_checkForIp","_checkForCpfCnpj","formElementProperty","checkDropSpecialCharAmount","_removeMask","_removeSuffix","_removePrefix","cpf","cnpj","shadowRootEl","_toNumber","_checkSymbols","specialCharactersForRemove","_regExpForRemove","_retrieveSeparatorValue","_replaceDecimalMarkerToDot","separatorPrecision","_retrieveSeparatorPrecision","separatorValue","_checkPrecision","maskExpretion","separatorExpression","_repeatPatternSymbols","maskExp","accum","currVal","repeatNumber","currentLocaleDecimalMarker","NgxMaskService","_maskService","_maskValue","_justPasted","_isComposing","onTouch","_setMask","_applyMask","_createValidationError","_validateTime","counterOfOpt","lastIndexArray","special","onPaste","onModelChange","onInput","transformedValue","_inputValue","prefixLength","checkSymbols","checkSpecialCharacter","selectRangeBackspace","_code","part1","part2","caretShift","_backspaceShift","positionToApply","_getActualInputLength","onCompositionStart","onCompositionEnd","nextValue","checkSelectionOnDeletion","cursorStart","__awaiter","localeDecimalMarker","rowMaskLen","requiredMask","expression","character","indexMask","NgxMaskDirective","__rest","currentConfig","initConfig","configValue","NgxMaskPipe","NgxMaskModule","_configFactory","defaultModules","getFormat","configFormat","passedFormat","QUILL_CONFIG_TOKEN","quill$","Quill","maybePatchedAddEventListener","__zone_symbol__addEventListener","quillImport","customOptions","customOption","newCustomOption","suppressGlobalRegisterWarning","customModules","getQuill","QuillService","domSanitizer","customToolbarPosition","trimOnValidation","compareValues","filterNull","defaultEmptyValue","onEditorCreated","onEditorChanged","onContentChanged","preserve","toolbarPosition","quillSubscription","valueGetter","editorElement","getContents","valueSetter","selectionChangeHandler","oldRange","shouldTriggerOnModelTouched","onModelTouched","textChangeHandler","oldDelta","editorElem","trackChanges","shouldTriggerOnModelChange","editorChangeHandler","trimmed","isPlatformServer","toolbarElem","addClasses","linkPlaceholder","dataset","setText","setContents","getModule","addQuillEventListeners","onValidatorChanged","currentStyling","previousStyling","currentClasses","previousClasses","removeClasses","QuillEditorBase","normalizeClassNames","currentEditorValue","textLength","deltaOperations","ops","onlyEmptyOperation","minLengthError","given","maxLengthError","requiredError","textChange$","editorChange$","QuillEditorComponent","Renderer2","themeClass","QuillViewHTMLComponent","QuillViewComponent","QuillModule","Ne","ir","Li","nr","Ia","Ur","oa","Ma","Qa","Pa","Xo","Ro","Oa","Fo","FileIndex","FullPaths","Os","Ao","clsid","Nh","Zl","write_shift","zx","Sv","Ml","Cs","MAXREGSECT","DIFSECT","FATSECT","ENDOFCHAIN","FREESECT","HEADER_SIGNATURE","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","HEADER_CLSID","EntryTypes","rl","Da","Ya","Ko","zp","Nf","au","Ru","usz","csz","Rx","Ks","bC","unsafe","htm","gif","jpg","png","mso","thmx","sh33tj5","Kx","cfb_new","cfb_add","cfb_del","cfb_mov","cfb_gc","ReadShift","CheckField","prep_blob","bconcat","use_zlib","_deflateRaw","_inflateRaw","_bufs","numFmtId","ich","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","sheets","charts","macros","Extension","PartName","ContentType","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","CORE_PROPS","EXT_PROPS","CUST_PROPS","SST","STY","THEME","CHART","CHARTEX","DS","IMG","DRAW","XLMETA","TCMNT","PEOPLE","CONN","VBA","fmtid","pid","LastAuthor","RevNumber","Application","LastPrinted","ModifiedDate","Manager","Company","AppVersion","ContentStatus","Identifier","wch","DBF","to_workbook","to_sheet","from_sheet","Fs","AA","AE","AI","AO","AU","DN","Workbook","WBProps","Sheet","Io","codepage","Bo","date1904","Wu","Ls","Ms","Wp","Ts","sheet_to_wk1","book_to_wk3","$h","Fg","Mv","Ng","xfId","builtinId","tg","family","scheme","ig","patternType","bh","Vg","fontId","fillId","borderId","Ug","D_","joinstyle","gradientshapeok","color2","fillcolor","strokecolor","providerId","biff","Xg","P1","ixti","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","R_","Jv","t0","vg","n0","W0","ov","applyNumberFormat","sheetStubs","summaryBelow","workbookViewId","Views","defaultRowHeight","baseColWidth","outlineLevelRow","hs","Dc","numberStoredAsText","Q1","X1","MC","jy","RTL","p0","iTabID","_x","revssf","General","zC","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","ixfe","rfx","bx","Ep","Target","dense","messages","Ey","cmnt","ferr","fmla","nfmt","ofmt","rsst","sst","rels","coreprops","calcchains","TODO","uniqueCount","codeName","I_","kd","ih","nodebuffer","encode_col","encode_row","encode_cell","encode_range","decode_col","decode_row","split_cell","decode_cell","decode_range","format_cell","sheet_add_aoa","sheet_add_json","sheet_add_dom","aoa_to_sheet","json_to_sheet","table_to_sheet","table_to_book","sheet_to_csv","sheet_to_txt","sheet_to_json","sheet_to_html","sheet_to_formulae","sheet_to_row_object_array","sheet_get_cell","book_new","book_append_sheet","book_set_sheet_visibility","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN"],"sourceRoot":"webpack:///","sources":["./src/app/admin360/attendance-administration/attendance-administration.service.ts","./src/app/admin360/attendance-administration/review-absent-notices/absent-notice.model.ts","./src/app/admin360/attendance-administration/review-absent-notices/review-absent-notices.service.ts","./src/app/admin360/customization/customization.service.ts","./src/app/admin360/data-definition/data-definition-static/add-edit-data-definition/add-edit-data-definition.component.html","./src/app/admin360/data-definition/data-definition-static/add-edit-data-definition/add-edit-data-definition.component.ts","./src/app/admin360/data-definition/data-definition-static/data-definition-static.component.html","./src/app/admin360/data-definition/data-definition-static/data-definition-static.component.ts","./src/app/admin360/data-definition/data-definition-dynamic/add-edit-dynamic-data-definition/add-edit-dynamic-data-definition.component.html","./src/app/admin360/data-definition/data-definition-dynamic/add-edit-dynamic-data-definition/add-edit-dynamic-data-definition.component.ts","./src/app/admin360/data-definition/data-definition-dynamic/data-definition-dynamic.component.html","./src/app/admin360/data-definition/data-definition-dynamic/data-definition-dynamic.component.ts","./src/app/admin360/data-definition/data-definition.component.html","./src/app/admin360/data-definition/data-definition.component.ts","./src/app/admin360/data-definition/data-definition.model.ts","./src/app/admin360/data-definition/data-definition.service.ts","./src/app/admin360/e-forms/e-form-instances/e-form-instances-filter-param.ts","./src/app/admin360/e-forms/e-form-submissions/e-form-mark-submission/e-form-mark-submission.component.html","./src/app/admin360/e-forms/e-form-submissions/e-form-mark-submission/e-form-mark-submission.component.ts","./src/app/admin360/e-forms/e-form-submissions/e-form-submissions-filter-param.ts","./src/app/admin360/notifications/models/my-notification-group-override.model.ts","./src/app/admin360/notifications/models/my-notification.model.ts","./src/app/admin360/notifications/models/notification-event-permission-category.model.ts","./src/app/admin360/notifications/models/notification-group-event.model.ts","./src/app/admin360/notifications/models/notification-group-permission-group.model.ts","./src/app/admin360/notifications/models/notification-group.model.ts","./src/app/shared-components/security/permission-group.model.ts","./src/app/admin360/notifications/models/notification-area.model.ts","./src/app/admin360/notifications/models/notification-event.model.ts","./src/app/admin360/notifications/notifications.service.ts","./src/app/admin360/registration/modals/registration-unsaved-changes-dialog/registration-unsaved-changes-dialog.component.html","./src/app/admin360/registration/modals/registration-unsaved-changes-dialog/registration-unsaved-changes-dialog.component.ts","./src/app/admin360/registration/registration-enrollment.service.ts","./src/app/student360/assessment/assessment.model.ts","./src/app/admin360/student-info/assessment/add-assessment-tab-dialog/add-assessment-tab-dialog.component.html","./src/app/admin360/student-info/assessment/add-assessment-tab-dialog/add-assessment-tab-dialog.component.ts","./src/app/admin360/student-info/assessment/assessment-data-category.ts","./src/app/admin360/student-info/assessment/assessment-data-category-table/add-assessment-scores/add-assessment-scores.component.html","./src/app/admin360/student-info/assessment/assessment-data-category-table/add-assessment-scores/add-assessment-scores.component.ts","./src/app/admin360/student-info/assessment/assessment-data-table/assessment-data-table.component.html","./src/app/admin360/student-info/assessment/assessment-data-table/assessment-data-table.component.ts","./src/app/admin360/student-info/assessment/assessment-data-category-table/assessment-data-category-table.component.html","./src/app/admin360/student-info/assessment/assessment-data-category-table/assessment-data-category-table.component.ts","./src/app/admin360/student-info/assessment/assessment.component.html","./src/app/admin360/student-info/assessment/assessment.component.ts","./src/app/admin360/student-info/teams/teams.service.ts","./src/app/auth.guard.ts","./src/app/classroom360/classroom-summary/classFilter.pipe.ts","./src/app/classroom360/classroom-summary/classroom-summary.service.ts","./src/app/classroom360/classroom-summary/models/classroom-summary-filter.ts","./src/app/classroom360/classroom-summary/models/classroom-summary.model.ts","./src/app/classroom360/classroom360.service.ts","./src/app/classroom360/data-query/data-query-field-label/data-query-field-label.component.html","./src/app/classroom360/data-query/data-query-field-label/data-query-field-label.component.ts","./src/app/classroom360/data-query/data-query-fields/drop-field-warning-dialog/drop-field-warning-dialog.component.html","./src/app/classroom360/data-query/data-query-fields/drop-field-warning-dialog/drop-field-warning-dialog.component.ts","./src/app/classroom360/data-query/data-query-fields/data-query-fields.component.html","./src/app/classroom360/data-query/data-query-fields/data-query-fields.component.ts","./src/app/classroom360/data-query/data-query-filters/group-condition-info-dialog/group-condition-info-dialog.component.ts","./src/app/classroom360/data-query/data-query-filters/group-condition-info-dialog/group-condition-info-dialog.component.html","./src/app/classroom360/data-query/data-query-filters/data-query-filter-table/data-query-filter-table.component.html","./src/app/classroom360/data-query/data-query-filters/data-query-filter-table/data-query-filter-table.component.ts","./src/app/classroom360/data-query/data-query-queries-button/view-query-properties-dialog/view-query-properties-dialog.component.ts","./src/app/classroom360/data-query/data-query-queries-button/view-query-properties-dialog/view-query-properties-dialog.component.html","./src/app/classroom360/data-query/data-query-queries-button/data-query-queries-button.component.ts","./src/app/classroom360/data-query/data-query-queries-button/data-query-queries-button.component.html","./src/app/classroom360/data-query/data-query-settings-for-export/insert-field-dialog/insert-field-dialog.component.html","./src/app/classroom360/data-query/data-query-settings-for-export/insert-field-dialog/insert-field-dialog.component.ts","./src/app/classroom360/data-query/data-query-wizard/data-query-wizard-query-info/data-query-wizard-query-info.component.html","./src/app/classroom360/data-query/data-query-wizard/data-query-wizard-query-info/data-query-wizard-query-info.component.ts","./src/app/classroom360/data-query/data-query-wizard/data-query-wizard.component.html","./src/app/classroom360/data-query/data-query-wizard/data-query-wizard.component.ts","./node_modules/rxjs/_esm2015/internal/operators/retry.js","./src/app/shared-components/models/pagedContent.model.ts","./src/app/classroom360/data-query/warning-dialog/warning-dialog.component.html","./src/app/classroom360/data-query/warning-dialog/warning-dialog.component.ts","./src/app/classroom360/data-query/add-edit-query-dialog/templates-from-classic-dialog/templates-from-classic-dialog.component.html","./src/app/classroom360/data-query/add-edit-query-dialog/templates-from-classic-dialog/templates-from-classic-dialog.component.ts","./src/app/classroom360/data-query/add-edit-query-dialog/add-edit-query.component.html","./src/app/classroom360/data-query/add-edit-query-dialog/add-edit-query.component.ts","./src/app/classroom360/data-query/add-edit-query-dialog/import-error-dialog/import-error-dialog.component.html","./src/app/classroom360/data-query/add-edit-query-dialog/import-error-dialog/import-error-dialog.component.ts","./src/app/classroom360/data-query/models/data-query-function.model.ts","./src/app/classroom360/data-query/models/data-query-object.model.ts","./src/app/classroom360/data-query/models/data-query-operator.model.ts","./src/app/classroom360/data-query/models/data-query-parameter.model.ts","./src/app/classroom360/data-query/models/data-query-permissions.ts","./src/app/classroom360/data-query/models/data-query-transformation-field.model.ts","./src/app/classroom360/data-query/data-query-unsaved-changes-dialog/data-query-unsaved-changes-dialog.component.html","./src/app/classroom360/data-query/data-query-unsaved-changes-dialog/data-query-unsaved-changes-dialog.component.ts","./src/app/classroom360/data-query/no-relationships-warning-dialog/no-relationships-warning-dialog.component.html","./src/app/classroom360/data-query/no-relationships-warning-dialog/no-relationships-warning-dialog.component.ts","./src/app/classroom360/data-query/data-query.service.ts","./src/app/classroom360/data-query/delete-row-dialog/delete-row-dialog.component.ts","./src/app/classroom360/data-query/delete-row-dialog/delete-row-dialog.component.html","./src/app/classroom360/data-query/errors-exist-dialog/errors-exist-dialog.component.ts","./src/app/classroom360/data-query/errors-exist-dialog/errors-exist-dialog.component.html","./src/app/classroom360/data-query/field-search/field-search.component.html","./src/app/classroom360/data-query/field-search/field-search.component.ts","./src/app/classroom360/data-query/models/data-query-category.model.ts","./src/app/classroom360/data-query/models/data-query-field-filter.model.ts","./src/app/classroom360/data-query/models/data-query-field.model.ts","./src/app/classroom360/data-query/field-search/field-autofill-option.ts","./src/app/classroom360/data-query/models/data-query-cluster.model.ts","./src/app/classroom360/data-query/models/data-query-information.ts","./src/app/classroom360/data-query/models/data-query-result-page.ts","./src/app/classroom360/data-query/models/data-query-result.model.ts","./src/app/classroom360/data-query/models/data-query.model.ts","./src/app/classroom360/data-query/delete-query-dialog/delete-query-dialog.component.ts","./src/app/classroom360/data-query/delete-query-dialog/delete-query-dialog.component.html","./src/app/classroom360/data-query/view-queries-dialog/view-queries-dialog.component.html","./src/app/classroom360/data-query/view-queries-dialog/view-queries-dialog.component.ts","./src/app/classroom360/discipline-referral/discipline-referral-student.model.ts","./src/app/classroom360/discipline-referral/discipline-referral.model.ts","./src/app/classroom360/discipline-referral/discipline-referral.service.ts","./src/app/classroom360/gradebook/shared/models/preferences/gradebook-preferences.model.ts","./src/app/classroom360/gradebook/shared/shared-gradebook.service.ts","./src/app/classroom360/gradebook/v9/gradebook-v9.service.ts","./src/app/classroom360/gradebook/v9/modals/gradebook-access-denied/gradebook-access-denied.component.html","./src/app/classroom360/gradebook/v9/modals/gradebook-access-denied/gradebook-access-denied.component.ts","./src/app/classroom360/grading-cycles/graging-cycles.model.ts","./src/app/classroom360/guards/select-course/no-class-selected-warning-dialog/no-class-selected-warning-dialog.component.ts","./src/app/classroom360/guards/select-course/no-class-selected-warning-dialog/no-class-selected-warning-dialog.component.html","./src/app/classroom360/guards/select-course/select-course-dialog/select-course-dialog.component.html","./src/app/classroom360/guards/select-course/select-course-dialog/select-course-dialog.component.ts","./src/app/classroom360/links/add-link/add-link.component.html","./src/app/classroom360/links/add-link/add-link.component.ts","./src/app/classroom360/links/link.model.ts","./src/app/classroom360/reporting-framework/my-reports/manage-reports-in-folder/manage-reports-in-folder.component.html","./src/app/classroom360/reporting-framework/my-reports/manage-reports-in-folder/manage-reports-in-folder.component.ts","./src/app/classroom360/reporting-framework/my-reports/add-my-report-folder-dialog/add-my-report-folder-dialog.component.html","./src/app/classroom360/reporting-framework/my-reports/add-my-report-folder-dialog/add-my-report-folder-dialog.component.ts","./src/app/classroom360/reporting-framework/my-reports/folders-this-report-dialog/folders-this-report-dialog.component.html","./src/app/classroom360/reporting-framework/my-reports/folders-this-report-dialog/folders-this-report-dialog.component.ts","./src/app/classroom360/reporting-framework/my-reports/my-reports-tab/my-reports-tab.component.html","./src/app/classroom360/reporting-framework/my-reports/my-reports-tab/my-reports-tab.component.ts","./src/app/classroom360/reporting-framework/my-reports/assigned-reports-tab/assigned-reports-tab.component.html","./src/app/classroom360/reporting-framework/my-reports/assigned-reports-tab/assigned-reports-tab.component.ts","./src/app/classroom360/reporting-framework/my-reports/my-reports.component.html","./src/app/classroom360/reporting-framework/my-reports/my-reports.component.ts","./src/app/classroom360/reporting-framework/reporting-framework.model.ts","./src/app/classroom360/reporting-framework/reporting-framework.service.ts","./src/app/classroom360/staff-home/staff-cards/staff-cards.service.ts","./src/app/classroom360/student-lists/add-edit-student-list-dialog/add-edit-student-list-dialog.component.html","./src/app/classroom360/student-lists/add-edit-student-list-dialog/add-edit-student-list-dialog.component.ts","./src/app/classroom360/student-lists/student-list.model.ts","./src/app/classroom360/student-lists/student-lists.service.ts","./src/app/classroom360/student-notes/add-edit-note-dialog/add-edit-note-dialog.component.html","./src/app/classroom360/student-notes/add-edit-note-dialog/add-edit-note-dialog.component.ts","./src/app/classroom360/student-notes/student-note.model.ts","./src/app/classroom360/student-notes/student-note-filter.ts","./src/app/classroom360/student-notes/delete-note-dialog/delete-note-dialog.component.ts","./src/app/classroom360/student-notes/delete-note-dialog/delete-note-dialog.component.html","./src/app/classroom360/student-notes/no-categories-warning-dialog/no-categories-warning-dialog.component.ts","./src/app/classroom360/student-notes/no-categories-warning-dialog/no-categories-warning-dialog.component.html","./src/app/classroom360/student-notes/student-notes.component.html","./src/app/classroom360/student-notes/student-notes.component.ts","./src/app/classroom360/student-notes/student-notes.service.ts","./src/app/counselor360/behavior/behavior-events/behavior-events-filter-param.ts","./src/app/counselor360/behavior/behavior-interventions/behavior-interventions-filter-param.ts","./src/app/counselor360/behavior/behavior.service.ts","./src/app/counselor360/behavior/models/behavior-event.model.ts","./src/app/counselor360/behavior/models/behavior-incident.model.ts","./src/app/counselor360/behavior/models/behavior-letter.model.ts","./src/app/counselor360/behavior/models/behavior-student.model.ts","./src/app/counselor360/scheduling/course-request-mgmt/district-course-request/remove-requirements/schools-for-remove-grade-level-requirements.model.ts","./src/app/counselor360/scheduling/course-request-mgmt/course-request-mgmt.service.ts","./src/app/counselor360/scheduling/course-request-mgmt/models/courserequestStudentSummary.model.ts","./src/app/counselor360/scheduling/course-request-mgmt/models/school-course-request-model.ts","./src/app/counselor360/scheduling/schedule-folder/schedule-folder.model.ts","./src/app/counselor360/scheduling/schedule-folder/schedule-folder.service.ts","./src/app/counselor360/scheduling/schedule-student-list/schedule-slot.ts","./src/app/health360/staff-health/staff-health.model.ts","./src/app/management360/district/models/program-service.model.ts","./src/app/management360/district/parent-student-portal-settings/parent-student-portal-settings.service.ts","./src/app/management360/program-and-service/delete-program-service-dialog/delete-program-service-dialog.component.html","./src/app/management360/program-and-service/delete-program-service-dialog/delete-program-service-dialog.component.ts","./src/app/management360/program-and-service/program-and-service.service.ts","./src/app/student360/programs-and-services/programs-and-services-detail.model.ts","./src/app/management360/program-and-service/single-student/invalid-selection-dialog/invalid-selection-dialog.component.ts","./src/app/management360/program-and-service/single-student/invalid-selection-dialog/invalid-selection-dialog.component.html","./src/app/shared-components/program-and-service-fields/program-and-service-fields.component.html","./src/app/shared-components/program-and-service-fields/program-and-service-fields.component.ts","./src/app/management360/program-and-service/single-student/add-edit-program-service-single-student/add-edit-program-service-single-student.component.html","./src/app/management360/program-and-service/single-student/add-edit-program-service-single-student/add-edit-program-service-single-student.component.ts","./src/app/management360/program-and-service/single-student/single-student.component.html","./src/app/management360/program-and-service/single-student/single-student.component.ts","./src/app/management360/staff/permissions-groups/permissions-groups.service.ts","./src/app/management360/staff/staff.service.ts","./src/app/shared-components/System.ts","./src/app/shared-components/add-attachment-dialog/add-attachment-dialog.component.html","./src/app/shared-components/add-attachment-dialog/add-attachment-dialog.component.ts","./src/app/shared-components/advanced-filter/advanced-filter.component.ts","./src/app/shared-components/angular-material/extended.class.ts","./src/app/shared-components/angular-material/mat-animations.ts","./node_modules/@angular/material/fesm2015/toolbar.mjs","./src/app/shared-components/angular-material/material.module.ts","./src/app/shared-components/behavior/behavior-shared.service.ts","./src/app/shared-components/change-email/change-email-message/change-email-message.component.ts","./src/app/shared-components/change-email/change-email-message/change-email-message.component.html","./src/app/shared-components/change-email/change-email.component.ts","./src/app/shared-components/change-email/change-email.component.html","./src/app/shared-components/attendance-check-in-out-legend/attendance-check-in-out-legend.component.ts","./src/app/shared-components/attendance-check-in-out-legend/attendance-check-in-out-legend.component.html","./src/app/shared-components/check-in-out-view-history-dialog/check-in-out-view-history-dialog.component.html","./src/app/shared-components/check-in-out-view-history-dialog/check-in-out-view-history-dialog.component.ts","./src/app/shared-components/controls/add-file/file-too-large-warning-dialog/file-too-large-warning-dialog.component.ts","./src/app/shared-components/controls/add-file/file-too-large-warning-dialog/file-too-large-warning-dialog.component.html","./src/app/shared-components/controls/add-file/add-file.component.html","./src/app/shared-components/controls/add-file/add-file.component.ts","./src/app/shared-components/controls/buttons/expand-collapse-buttons/expand-collapse-buttons.component.ts","./src/app/shared-components/controls/buttons/expand-collapse-buttons/expand-collapse-buttons.component.html","./src/app/shared-components/controls/buttons/save-cancel-buttons/save-cancel-buttons.component.html","./src/app/shared-components/controls/buttons/save-cancel-buttons/save-cancel-buttons.component.ts","./src/app/shared-components/controls/buttons/tyl-button.component.html","./src/app/shared-components/controls/buttons/tyl-button.component.ts","./src/app/shared-components/controls/data-def-control/data-def-button/data-def-button.component.html","./src/app/shared-components/controls/data-def-control/data-def-button/data-def-button.component.ts","./src/app/shared-components/controls/data-def-control/data-def-control.directive.ts","./src/app/shared-components/controls/data-def-control/data-def-dropdown/data-def-dropdown.component.html","./src/app/shared-components/controls/data-def-control/data-def-dropdown/data-def-dropdown.component.ts","./src/app/shared-components/controls/error-prompt/error-list.model.ts","./src/app/shared-components/controls/error-prompt/errors.ts","./src/app/shared-components/controls/error-prompt/dimensions.ts","./src/app/shared-components/controls/error-prompt/error-prompt-messages.component.html","./src/app/shared-components/controls/error-prompt/error-prompt-messages.component.ts","./src/app/shared-components/controls/error-prompt/error-prompt.component.html","./src/app/shared-components/controls/error-prompt/error-prompt.component.ts","./src/app/shared-components/controls/filter/filter-notification/filter-notification.component.html","./src/app/shared-components/controls/filter/filter-notification/filter-notification.component.ts","./src/app/shared-components/controls/filter/has-filter.ts","./src/app/shared-components/controls/filter/filter-contents/filter-contents.component.html","./src/app/shared-components/controls/filter/filter-contents/filter-contents.component.ts","./src/app/shared-components/controls/filter/filter.component.html","./src/app/shared-components/controls/filter/filter.component.ts","./src/app/shared-components/controls/filter/filter.model.ts","./src/app/shared-components/controls/general-confirmation/general-confirmation.component.html","./src/app/shared-components/controls/general-confirmation/general-confirmation.component.ts","./src/app/shared-components/controls/grade-override-legend/grade-override-legend.component.html","./src/app/shared-components/controls/grade-override-legend/grade-override-legend.component.ts","./src/app/shared-components/controls/menus/menu-item.model.ts","./src/app/shared-components/controls/menus/tyl-general-mat-menu.component.html","./src/app/shared-components/controls/menus/tyl-general-mat-menu.component.ts","./src/app/shared-components/controls/menus/tyl-mat-menu.component.html","./src/app/shared-components/controls/menus/tyl-mat-menu.component.ts","./src/app/shared-components/controls/selected-sites-dialog/selected-site.ts","./src/app/shared-components/controls/selected-sites-dialog/selected-sites-dialog.component.html","./src/app/shared-components/controls/selected-sites-dialog/selected-sites-dialog.component.ts","./src/app/shared-components/controls/student-selection/student-selection.component.html","./src/app/shared-components/controls/student-selection/student-selection.component.ts","./src/app/shared-components/controls/tabs/tabs.ts","./src/app/shared-components/controls/tabs/tabs.component.html","./src/app/shared-components/controls/tabs/tabs.component.ts","./src/app/shared-components/controls/tyl-checkbox/tyl-checkbox.component.html","./src/app/shared-components/controls/tyl-checkbox/tyl-checkbox.component.ts","./src/app/shared-components/controls/tyl-form-field/tyl-form-field.component.html","./src/app/shared-components/controls/tyl-form-field/tyl-form-field.component.ts","./src/app/shared-components/controls/tyl-multiple-select-list/tyl-select-check-all.component.ts","./src/app/shared-components/controls/tyl-multiple-select-list/tyl-multiple-select-list.component.html","./src/app/shared-components/controls/tyl-multiple-select-list/tyl-multiple-select-list.component.ts","./src/app/shared-components/controls/tyl-radio-group/tyl-radio-group.component.html","./src/app/shared-components/controls/tyl-radio-group/tyl-radio-group.component.ts","./src/app/shared-components/controls/tyl-time-field/tyl-time-field.component.html","./src/app/shared-components/controls/tyl-time-field/tyl-time-field.component.ts","./src/app/shared-components/course-description-dialog/course-description-dialog.component.html","./src/app/shared-components/course-description-dialog/course-description-dialog.component.ts","./src/app/shared-components/course-section-search/course-section-search.service.ts","./src/app/shared-components/custom-layouts/Models/custom-layout-type.model.ts","./src/app/shared-components/custom-layouts/Models/custom-layout.model.ts","./src/app/shared-components/custom-layouts/custom-layouts.service.ts","./src/app/shared-components/custom-layouts/Models/custom-layout-field.model.ts","./src/app/shared-components/custom-layouts/layout-editor/layout-unsaved-changes-dialog/layout-unsaved-changes-dialog.component.html","./src/app/shared-components/custom-layouts/layout-editor/layout-unsaved-changes-dialog/layout-unsaved-changes-dialog.component.ts","./src/app/shared-components/custom-layouts/pipes/get-field-display-name.pipe.ts","./src/app/shared-components/custom-layouts/layout-editor/layout-editor.component.html","./src/app/shared-components/custom-layouts/layout-editor/layout-editor.component.ts","./src/app/shared-components/custom-layouts/saved-layouts-dialog/saved-layouts-dialog.component.html","./src/app/shared-components/custom-layouts/saved-layouts-dialog/saved-layouts-dialog.component.ts","./src/app/shared-components/custom-page/custom-page.service.ts","./src/app/shared-components/directives/aria.directive.ts","./src/app/shared-components/directives/debounce.directive.ts","./src/app/shared-components/directives/decimal-format-validator.directive.ts","./src/app/shared-components/directives/external-link.directive.ts","./src/app/shared-components/directives/max-precision.directive.ts","./src/app/shared-components/directives/maximum-enforce.directive.ts","./src/app/shared-components/directives/minimum-enforce.directive.ts","./src/app/shared-components/directives/number-mask.directive.ts","./src/app/shared-components/directives/numbers-only.directive.ts","./src/app/shared-components/e-forms/e-form-attachment.model.ts","./src/app/shared-components/e-forms/e-form-change-history.model.ts","./src/app/shared-components/e-forms/e-form-column.model.ts","./src/app/shared-components/e-forms/e-form-config.model.ts","./src/app/shared-components/e-forms/e-form-control.model.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-column/e-form-column.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-column/e-form-column.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-control/e-form-control.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-control/e-form-control.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-format-warning/e-form-format-warning.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-format-warning/e-form-format-warning.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-header/e-form-header.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-header/e-form-header.component.ts","./src/app/shared-components/pipes/get-control-image.pipe.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-available-controls/e-form-available-controls.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-available-controls/e-form-available-controls.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-choices-dialog/e-form-choices-dialog.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-choices-dialog/e-form-choices-dialog.component.ts","./src/app/shared-components/pipes/format-eform-control-type.pipe.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-properties-panel/e-form-properties-panel.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-properties-panel/e-form-properties-panel.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-navigation-panel/e-form-navigation-panel.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-navigation-panel/e-form-navigation-panel.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-side-panel.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-side-panel/e-form-side-panel.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-designer.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-designer.component.ts","./src/app/shared-components/e-forms/e-form-tab.model.ts","./src/app/shared-components/e-forms/e-form-page.model.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-designer.service.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-row-column-location/e-form-row-column-location.html","./src/app/shared-components/e-forms/e-form-designer/e-form-row-column-location/e-form-row-column-location.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-row/e-form-row.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-row/e-form-row.component.ts","./src/app/shared-components/e-forms/e-form-designer/e-form-template-in-use-warning/e-form-template-in-use-warning.component.html","./src/app/shared-components/e-forms/e-form-designer/e-form-template-in-use-warning/e-form-template-in-use-warning.component.ts","./src/app/shared-components/e-forms/e-form-designer/merge-field-dialog/merge-field-dialog.component.html","./src/app/shared-components/e-forms/e-form-designer/merge-field-dialog/merge-field-dialog.component.ts","./src/app/shared-components/e-forms/e-form-designer/value-from-another-field-dialog/value-from-another-field-dialog.component.html","./src/app/shared-components/e-forms/e-form-designer/value-from-another-field-dialog/value-from-another-field-dialog.component.ts","./src/app/shared-components/e-forms/e-form-notes/e-form-notes.component.ts","./src/app/shared-components/e-forms/e-form-notes/e-form-notes.component.html","./src/app/shared-components/e-forms/e-form-row.model.ts","./src/app/shared-components/e-forms/e-form-survey-field-critical-value.model.ts","./src/app/shared-components/e-forms/e-form-survey-field.model.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-column/e-form-viewer-column.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-column/e-form-viewer-column.component.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-control/e-form-viewer-control.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-control/e-form-viewer-control.component.ts","./src/app/shared-components/e-forms/e-form-survey-answer.model.ts","./src/app/admin360/e-forms/e-form-submissions/e-Form-PDF-Name/e-form-pdf-name.component.html","./src/app/admin360/e-forms/e-form-submissions/e-Form-PDF-Name/e-form-pdf-name.component.ts","./src/app/shared-components/e-forms/e-form-confirm-submit/e-form-confirm-submit.component.html","./src/app/shared-components/e-forms/e-form-confirm-submit/e-form-confirm-submit.component.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-row/e-form-viewer-row.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-row/e-form-viewer-row.component.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-header/e-form-viewer-header.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer-header/e-form-viewer-header.component.ts","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer.component.html","./src/app/shared-components/e-forms/e-form-viewer/e-form-viewer.component.ts","./src/app/shared-components/e-forms/e-form.model.ts","./src/app/shared-components/e-forms/e-form-database-field.model.ts","./src/app/shared-components/e-forms/e-form.service.ts","./src/app/shared-components/e-forms/e-formDataObject.model.ts","./src/app/shared-components/e-forms/merge-field.pipe.ts","./src/app/shared-components/e-forms/survey-answers-popup/get-survey-answer-by-field-id.pipe.ts","./src/app/shared-components/e-forms/survey-answers-popup/survey-answer-is-critical.pipe.ts","./src/app/shared-components/enter-csv-dialog/enter-csv-dialog.component.ts","./src/app/shared-components/enter-csv-dialog/enter-csv-dialog.component.html","./src/app/shared-components/export.service.ts","./src/app/shared-components/favorites/favorites.component.html","./src/app/shared-components/favorites/favorites.component.ts","./src/app/shared-components/generic-list-selector/generic-list-selector.component.html","./src/app/shared-components/generic-list-selector/generic-list-selector.component.ts","./src/app/shared-components/generic-list-selector/generic-list.model.ts","./src/app/shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component.html","./src/app/shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component.ts","./src/app/shared-components/guards/check-for-errors/check-for-errors.guard.ts","./src/app/shared-components/guards/new-family-registration/new-family-registration.guard.ts","./src/app/shared-components/guards/require-staff/require-staff.guard.ts","./src/app/shared-components/guards/require-student/require-student.guard.ts","./src/app/shared-components/guards/unsaved-changes/unsaved-changes-message/unsaved-changes-message.component.ts","./src/app/shared-components/guards/unsaved-changes/unsaved-changes-message/unsaved-changes-message.component.html","./src/app/shared-components/guards/unsaved-changes/unsaved-changes.guard.ts","./src/app/shared-components/has-dynamic-data/has-dynamic-data.model.ts","./src/app/shared-components/kendo/tyl-kendo-html-editor/tyl-kendo-html-editor.component.ts","./src/app/shared-components/kendo/tyl-kendo-html-editor/tyl-kendo-html-editor.component.html","./src/app/shared-components/kendo/tyl-kendo-pdf-export/tyl-kendo-pdf-export.component.ts","./src/app/shared-components/kendo/tyl-kendo-pdf-export/tyl-kendo-pdf-export.component.html","./src/app/shared-components/lookup/lookup.model.ts","./src/app/shared-components/lookup/lookup.service.ts","./src/app/shared-components/mass-email-view/unselected-warning/unselected-warning.component.html","./src/app/shared-components/mass-email-view/unselected-warning/unselected-warning.component.ts","./src/app/shared-components/mass-email-view/no-email-warning/no-email-warning.component.html","./src/app/shared-components/mass-email-view/no-email-warning/no-email-warning.component.ts","./src/app/shared-components/mass-email-view/select-recipients/by-class-row-student/by-class-row-student.component.html","./src/app/shared-components/mass-email-view/select-recipients/by-class-row-student/by-class-row-student.component.ts","./src/app/shared-components/mass-email-view/select-recipients/by-team-row-student/by-team-row-student.component.html","./src/app/shared-components/mass-email-view/select-recipients/by-team-row-student/by-team-row-student.component.ts","./src/app/shared-components/mass-email-view/select-recipients/by-list-row-student/by-list-row-student.component.html","./src/app/shared-components/mass-email-view/select-recipients/by-list-row-student/by-list-row-student.component.ts","./src/app/shared-components/mass-email-view/select-recipients/select-recipients.pipe.ts","./src/app/shared-components/mass-email-view/select-recipients/select-recipients.component.html","./src/app/shared-components/mass-email-view/select-recipients/select-recipients.component.ts","./src/app/shared-components/mass-email-view/mass-email-attachment/mass-email-attachment.component.ts","./src/app/shared-components/mass-email-view/mass-email-attachment/mass-email-attachment.component.html","./src/app/shared-components/mass-email-view/send-emails-warning/send-emails-warning.component.html","./src/app/shared-components/mass-email-view/send-emails-warning/send-emails-warning.component.ts","./src/app/shared-components/job-sent-to-queue/job-sent-to-queue.component.ts","./src/app/shared-components/mass-email-view/view-recipients-modal/view-recipients-modal.component.html","./src/app/shared-components/job-sent-to-queue/job-sent-to-queue.component.html","./src/app/shared-components/mass-email-view/view-recipients-modal/view-recipients-modal.component.ts","./src/app/shared-components/mass-email-view/view-recipients-modal/email-recipient.ts","./src/app/shared-components/mass-email-view/send-test-email/send-test-email.component.ts","./src/app/shared-components/mass-email-view/send-test-email/send-test-email.component.html","./src/app/shared-components/mass-email-view/mass-email-view.component.html","./src/app/shared-components/mass-email-view/mass-email-view.component.ts","./src/app/shared-components/mass-email-view/mass-email.model.ts","./src/app/shared-components/mass-email-view/mass-email.service.ts","./src/app/shared-components/models/address.ts","./src/app/shared-components/models/attachment.model.ts","./src/app/shared-components/models/tyl-translation.model.ts","./src/app/shared-components/overlay-header/overlay-header.component.html","./src/app/shared-components/overlay-header/overlay-header.component.ts","./src/app/shared-components/page-header/page-header.component.html","./src/app/shared-components/page-header/page-header.component.ts","./src/app/shared-components/pipes/calculate-percent.pipe.ts","./src/app/shared-components/pipes/ellipsis.pipe.ts","./src/app/shared-components/pipes/get-designer-control-name.pipe.ts","./src/app/shared-components/pipes/incident-type.pipe.ts","./src/app/shared-components/pipes/phone-number.pipe.ts","./src/app/shared-components/pipes/replace.pipe.ts","./src/app/shared-components/pipes/safe-html.pipe.ts","./src/app/shared-components/pipes/safe-resource-url.pipe.ts","./src/app/shared-components/pipes/tyl-translate.pipe.ts","./src/app/shared-components/portal-menu/application-menu/application-menu.component.ts","./src/app/shared-components/portal-menu/application-menu/application-menu.component.html","./src/app/shared-components/portal-menu/favorite-menu/favorite-menu.component.ts","./src/app/shared-components/portal-menu/favorite-menu/favorite-menu.component.html","./src/app/shared-components/portal-menu/portal-menu-helper.ts","./src/app/shared-components/pipes/highlight-search.pipe.ts","./src/app/shared-components/portal-menu/portal-menu.component.html","./src/app/shared-components/portal-menu/portal-menu.component.ts","./src/app/shared-components/portal.model.ts","./src/app/shared-components/profile-table/add-profile-attachment-dialog/add-profile-attachment-dialog.component.html","./src/app/shared-components/profile-table/add-profile-attachment-dialog/add-profile-attachment-dialog.component.ts","./src/app/shared-components/profile-table/attachment-table/attachment-table.component.html","./src/app/shared-components/profile-table/attachment-table/attachment-table.component.ts","./src/app/shared-components/profile-table/attachments-menu-dialog/attachments-menu-dialog.component.html","./src/app/shared-components/profile-table/attachments-menu-dialog/attachments-menu-dialog.component.ts","./src/app/shared-components/profile-table/delete-profile-attachment-dialog/delete-profile-attachment-dialog.component.ts","./src/app/shared-components/profile-table/delete-profile-attachment-dialog/delete-profile-attachment-dialog.component.html","./src/app/shared-components/profile-table/profile-attachment.model.ts","./src/app/shared-components/profile-table/topic.ts","./src/app/shared-components/profile-table/profile-node.ts","./src/app/shared-components/profile-table/edit-topic-dialog/edit-topic-dialog.component.html","./src/app/shared-components/profile-table/edit-topic-dialog/edit-topic-dialog.component.ts","./src/app/shared-components/profile-table/delete-topic-dialog/delete-topic-dialog.component.html","./src/app/shared-components/profile-table/delete-topic-dialog/delete-topic-dialog.component.ts","./src/app/shared-components/profile-table/add-edit-content-dialog/add-edit-content-dialog.component.html","./src/app/shared-components/profile-table/add-edit-content-dialog/add-edit-content-dialog.component.ts","./src/app/shared-components/profile-table/profile-table.component.html","./src/app/shared-components/profile-table/profile-table.component.ts","./src/app/shared-components/profile-table/profile.model.ts","./src/app/shared-components/profile-table/profile.service.ts","./src/app/shared-components/profile-viewer-dialog/profile-viewer-dialog.component.html","./src/app/shared-components/profile-viewer-dialog/profile-viewer-dialog.component.ts","./src/app/shared-components/quill-text-only/quill-text-only.component.ts","./src/app/shared-components/quill-text-only/quill-text-only.component.html","./src/app/shared-components/routeInfo.ts","./src/app/shared-components/security/permissions.enums.ts","./src/app/shared-components/security/security.service.ts","./src/app/shared-components/self-check-in-out-history-dialog/self-check-in-out-history-dialog.component.html","./src/app/shared-components/self-check-in-out-history-dialog/self-check-in-out-history-dialog.component.ts","./src/app/admin360/registration/detailed-registration/household-registration/household-family-document/select-student.pipe.ts","./src/app/shared-components/shared-components.module.ts","./src/app/admin360/student-info/health-information/medical-condition/medical-condition.model.ts","./src/app/shared-components/shared.service.ts","./src/app/shared-components/error-dialog/error-dialog.component.html","./src/app/shared-components/error-dialog/error-dialog.component.ts","./src/app/shared-components/spinner/loader-intercept.component.ts","./src/app/shared-components/spinner/loader-service.component.ts","./src/app/shared-components/spinner/spinner.service.ts","./src/app/shared-components/staff-search/advanced-staff-search/advanced-staff-search.component.html","./src/app/shared-components/staff-search/advanced-staff-search/advanced-staff-search.component.ts","./src/app/shared-components/staff-search/staff-list-dialog/staff-list-dialog.component.html","./src/app/shared-components/staff-search/staff-list-dialog/staff-list-dialog.component.ts","./src/app/shared-components/staff-search/staff-search.component.html","./src/app/shared-components/staff-search/staff-search.component.ts","./src/app/shared-components/staff-search/staff-search.service.ts","./src/app/shared-components/staff-search/staff.model.ts","./src/app/shared-components/student-alerts/alerts-dialog/alerts-dialog.component.html","./src/app/shared-components/student-alerts/alerts-dialog/alerts-dialog.component.ts","./src/app/shared-components/student-alerts/student-alerts.component.html","./src/app/shared-components/student-alerts/student-alerts.component.ts","./src/app/student360/student-summary/student-notes-popup/student-notes-popup.component.html","./src/app/student360/student-summary/student-notes-popup/student-notes-popup.component.ts","./src/app/shared-components/student-header/student-header.component.html","./src/app/shared-components/student-header/student-header.component.ts","./src/app/shared-components/student-header/student-image-dialog/student-image-dialog.component.ts","./src/app/shared-components/student-header/student-image-dialog/student-image-dialog.component.html","./src/app/shared-components/student-information/student-information.directive.ts","./src/app/shared-components/student-information/student-info-portal/student-info-portal.component.ts","./src/app/shared-components/student-information/student-info-portal/student-info-portal.component.html","./src/app/shared-components/student-information/student-information.component.html","./src/app/shared-components/student-information/student-information.component.ts","./src/app/shared-components/student-notes-shared/student-notes-shared.component.ts","./src/app/shared-components/student-notes-shared/student-notes-shared.component.html","./src/app/shared-components/student-search/student-list-modal/student-list-modal.component.html","./src/app/shared-components/student-search/student-list-modal/student-list-modal.component.ts","./src/app/shared-components/student-search/student-search-criteria.model.ts","./src/app/shared-components/directives/regex.directive.ts","./src/app/shared-components/student-search/advanced-student-search/advanced-student-search.component.html","./src/app/shared-components/student-search/advanced-student-search/advanced-student-search.component.ts","./src/app/shared-components/student-search/student-search-preferences.ts","./src/app/shared-components/student-search/student-search-warning/student-search-warning.component.ts","./src/app/shared-components/student-search/student-search-warning/student-search-warning.component.html","./src/app/shared-components/student-search/student-search.component.html","./src/app/shared-components/student-search/student-search.component.ts","./src/app/shared-components/student-search/student-search.service.ts","./src/app/shared-components/student/academic-history-summary.model.ts","./src/app/shared-components/student/course-schedule.model.ts","./src/app/shared-components/student/student-documents.model.ts","./src/app/shared-components/student/student-name/student-name.component.ts","./src/app/shared-components/student/student.model.ts","./src/app/shared-components/student/student.service.ts","./src/app/shared-components/students-to-add-dialog/students-to-add-dialog.component.html","./src/app/shared-components/students-to-add-dialog/students-to-add-dialog.component.ts","./src/app/shared-components/translation/translation.service.ts","./src/app/shared-components/tyl-cal-widget/tyl-cal-widget.component.html","./src/app/shared-components/tyl-cal-widget/tyl-cal-widget.component.ts","./node_modules/@angular/material-moment-adapter/fesm2015/material-moment-adapter.mjs","./src/app/shared-components/tyl-datepicker/date.validator.ts","./src/app/shared-components/tyl-datepicker/tyl-datepicker.component.html","./src/app/shared-components/tyl-datepicker/tyl-datepicker.component.ts","./src/app/shared-components/user-preferences/classroom-summary-preferences.model.ts","./src/app/shared-components/user-preferences/data-query-preferences.model.ts","./src/app/shared-components/user-preferences/schedule-student-list-preferences.model.ts","./src/app/shared-components/user-preferences/user-preferences-window/gradebook-preferences-reset-warnings/gradebook-preferences-reset-warnings.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/gradebook-preferences-reset-warnings/gradebook-preferences-reset-warnings.component.html","./src/app/shared-components/custom-layouts/Models/custom-layout-school-default.model.ts","./src/app/shared-components/user-preferences/behavior-preferences.model.ts","./src/app/shared-components/user-preferences/general-preferences.model.ts","./src/app/shared-components/user-preferences/user-preferences-window/additional-teacher-warning-dialog/additional-teacher-warning-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/additional-teacher-warning-dialog/additional-teacher-warning-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/calculation-preference-warning-dialog/calculation-preference-warning-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/calculation-preference-warning-dialog/calculation-preference-warning-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/custom-sort-warning-dialog/custom-sort-warning-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/custom-sort-warning-dialog/custom-sort-warning-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/no-grading-classes-dialog/no-grading-classes-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/no-grading-classes-dialog/no-grading-classes-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/primary-teacher-warning-dialog/primary-teacher-warning-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/primary-teacher-warning-dialog/primary-teacher-warning-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/project-scores-info/project-scores-info.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/sync-preferences-dialog/sync-preferences-dialog.component.html","./src/app/shared-components/user-preferences/user-preferences-window/project-scores-info/project-scores-info.component.html","./src/app/shared-components/user-preferences/user-preferences-window/sync-preferences-dialog/sync-preferences-dialog.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/scheduling-tab/scheduling-tab.component.html","./src/app/shared-components/user-preferences/user-preferences-window/scheduling-tab/scheduling-tab.component.ts","./src/app/shared-components/user-preferences/user-preferences-window/user-preferences-window.component.html","./src/app/shared-components/user-preferences/user-preferences-window/user-preferences-window.component.ts","./src/app/shared-components/user-preferences/room-scheduling-settings-preferences.model.ts","./src/app/shared-components/user-preferences/user-preferences.service.ts","./src/app/shared-components/user/user-school-year-policies.model.ts","./src/app/shared-components/user/user-type.ts","./src/app/shared-components/user/user.service.ts","./src/app/shared-components/validators/email-format-validator.directive.ts","./src/app/shared-components/validators/falsey-required-validator.directive.ts","./src/app/shared-components/view-absent-notice-history-dialog/view-absent-notice-history-dialog.component.html","./src/app/shared-components/view-absent-notice-history-dialog/view-absent-notice-history-dialog.component.ts","./src/app/shared-components/view-attachments/view-attachments.component.html","./src/app/shared-components/view-attachments/view-attachments.component.ts","./src/app/shared-components/virtualized-table/nested-data.ts","./src/app/shared-components/virtualized-table/virtualized-table.component.html","./src/app/shared-components/virtualized-table/virtualized-table.component.ts","./src/app/shared-components/year/school.model.ts","./src/app/shared-components/year/year.model.ts","./src/app/shared-components/year/year.service.ts","./src/app/shared-modules/announcement/announcement-filter.pipe.ts","./src/app/shared-modules/announcement/announcement-message/announcement-message.component.html","./src/app/shared-modules/announcement/announcement-message/announcement-message.component.ts","./src/app/shared-modules/announcement/announcement-table/announcement-table.component.html","./src/app/shared-modules/announcement/announcement-table/announcement-table.component.ts","./src/app/shared-modules/announcement/announcement.component.html","./src/app/shared-modules/announcement/announcement.component.ts","./src/app/shared-modules/announcement/announcement.model.ts","./src/app/shared-modules/announcement/broadcast-dialog/broadcast-dialog.component.ts","./src/app/shared-modules/announcement/broadcast-dialog/broadcast-dialog.component.html","./src/app/shared-modules/announcement/announcement.service.ts","./src/app/shared-modules/communication-log/communication-log-param.ts","./src/app/shared-modules/communication-log/communication-log.service.ts","./src/app/shared-modules/communication-log/models/communication-log.model.ts","./src/app/shared-components/controls/data-def-control/data-def-radio-buttons/data-def-radio-buttons.component.ts","./src/app/shared-components/controls/data-def-control/data-def-radio-buttons/data-def-radio-buttons.component.html","./src/app/shared-components/controls/data-def-control/data-def-button-list/data-def-button-list.component.html","./src/app/shared-components/controls/data-def-control/data-def-button-list/data-def-button-list.component.ts","./src/app/shared-modules/customization-framework/custom-data-field/custom-data-field.component.html","./src/app/shared-modules/customization-framework/custom-data-field/custom-data-field.component.ts","./src/app/shared-modules/customization-framework/custom-page-tab-group/custom-page-tab-group.component.ts","./src/app/shared-modules/customization-framework/custom-page-tab-group/custom-page-tab-group.component.html","./src/app/shared-modules/customization-framework/custom-page-viewer/custom-page-viewer.component.html","./src/app/shared-modules/customization-framework/custom-page-viewer/custom-page-viewer.component.ts","./src/app/shared-modules/customization-framework/custom-page-tab/custom-page-tab.component.html","./src/app/shared-modules/customization-framework/custom-page-tab/custom-page-tab.component.ts","./src/app/shared-modules/customization-framework/customization-framework.service.ts","./src/app/shared-modules/customization-framework/view-design-pages/view-design-pages-modal/view-design-pages-modal.component.html","./src/app/shared-modules/customization-framework/view-design-pages/view-design-pages-modal/view-design-pages-modal.component.ts","./src/app/shared-modules/customization-framework/design-page-viewer/design-page-viewer.component.html","./src/app/shared-modules/customization-framework/design-page-viewer/design-page-viewer.component.ts","./src/app/shared-modules/customization-framework/models/custom-data-control-type.model.ts","./src/app/shared-modules/customization-framework/models/custom-data-field-type.model.ts","./src/app/shared-modules/customization-framework/models/custom-data-field.model.ts","./src/app/shared-modules/customization-framework/models/custom-data-module.model.ts","./src/app/shared-modules/customization-framework/models/custom-data-object.model.ts","./src/app/shared-modules/customization-framework/models/custom-data-template-ref.model.ts","./src/app/shared-modules/customization-framework/pipes/cst-user-design-pages-by-id.pipe.ts","./src/app/admin360/customization/design-pages/add-edit-design-page-description/add-edit-design-page-description.component.html","./src/app/admin360/customization/design-pages/add-edit-design-page-description/add-edit-design-page-description.component.ts","./src/app/admin360/customization/models/custom-design-page.model.ts","./src/app/shared-modules/customization-framework/view-design-pages/design-page-details/design-page-details.component.html","./src/app/shared-modules/customization-framework/view-design-pages/design-page-details/design-page-details.component.ts","./src/app/shared-modules/customization-framework/view-design-pages/view-design-pages.component.html","./src/app/shared-modules/customization-framework/view-design-pages/view-design-pages.component.ts","./src/app/shared-modules/family-registration/email-not-sent/email-not-sent.component.ts","./src/app/shared-modules/family-registration/email-not-sent/email-not-sent.component.html","./src/app/shared-modules/family-registration/family-registration.service.ts","./src/app/shared-components/student-header/re-enroll-students/re-enroll-students.component.html","./src/app/shared-components/student-header/re-enroll-students/re-enroll-students.component.ts","./src/app/shared-modules/family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component.html","./src/app/shared-modules/family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app.service.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-household-program.model.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-add-person/frma-add-person.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-add-person/frma-add-person.component.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-info-sharing.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-completed-pages.model.ts","./src/app/shared-modules/free-reduced-meal-app/frma-change-history-comment/frma-change-history-comment.component.ts","./src/app/shared-modules/free-reduced-meal-app/frma-change-history-comment/frma-change-history-comment.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/free-reduced-meal-app.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/free-reduced-meal-app.component.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-adult-income-details/frma-adult-income-details.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-adult-income-details/frma-adult-income-details.component.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-child-income.model.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-child-income-details/frma-child-income-details.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-child-income-details/frma-child-income-details.component.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-currency-input/frma-currency-input.component.ts","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-currency-input/frma-currency-input.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-previous-person-selector/frma-previous-person-selector.component.html","./src/app/shared-modules/free-reduced-meal-app/free-reduced-meal-app/frma-previous-person-selector/frma-previous-person-selector.component.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-adult-income.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-adult.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-child-program.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-child.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-income.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-person.model.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app.enum.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app.model.ts","./src/app/shared-modules/free-reduced-meal-app/pipes/frma-suffix.pipe.ts","./src/app/shared-modules/login/LoginSetting.model.ts","./src/app/shared-modules/login/auth.service.ts","./src/app/shared-modules/login/change-password/password-validator.ts","./src/app/shared-modules/login/login.service.ts","./src/app/shared-modules/reporting/V9/attendance-history-by-class/attendance-history-by-class.model.ts","./src/app/shared-modules/reporting/V9/attendance-history-by-class/attendance-history-by-class.component.html","./src/app/shared-modules/reporting/V9/attendance-history-by-class/attendance-history-by-class.component.ts","./src/app/shared-modules/reporting/V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component.ts","./src/app/shared-modules/reporting/V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component.html","./src/app/shared-modules/reporting/V9/class-list-all/class-list-all.component.ts","./src/app/shared-modules/reporting/V9/class-list-all/class-list-all.component.html","./src/app/shared-modules/reporting/V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component.html","./src/app/shared-modules/reporting/V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component.ts","./src/app/shared-modules/reporting/V9/gradebook-statistical-analysis-report/gradebook-statistical-analysis-report.model.ts","./src/app/shared-modules/reporting/V9/manual-entry-rosters/manual-entry-rosters.component.html","./src/app/shared-modules/reporting/V9/manual-entry-rosters/manual-entry-rosters.component.ts","./src/app/shared-modules/reporting/V9/parameters/v9-report-parameter-tabs-filter.pipe.ts","./src/app/shared-modules/reporting/V9/parameters/v9-letter-report-parameters/v9-letter-report-parameters.component.html","./src/app/shared-modules/reporting/V9/parameters/v9-letter-report-parameters/v9-letter-report-parameters.component.ts","./src/app/shared-modules/reporting/V9/medical-data-listing-grid/medical-data-listing-grid.component.html","./src/app/shared-modules/reporting/V9/medical-data-listing-grid/medical-data-listing-grid.component.ts","./src/app/shared-modules/reporting/V9/parameters/v9-report-parameters.component.html","./src/app/shared-modules/reporting/V9/parameters/v9-report-parameters.component.ts","./src/app/shared-modules/reporting/V9/teacher-summary-preview/teacher-summary-preview.component.html","./src/app/shared-modules/reporting/V9/teacher-summary-preview/teacher-summary-preview.component.ts","./src/app/shared-modules/reporting/archive-report/confirm-cancel-archive.component.ts","./src/app/shared-modules/reporting/archive-report/confirm-cancel-archive.component.html","./src/app/shared-modules/reporting/archive-report/archive-process.component.html","./src/app/shared-modules/reporting/archive-report/archive-process.component.ts","./src/app/shared-modules/reporting/definitions/report-options-how-to.component.ts","./src/app/shared-modules/reporting/definitions/report-options-how-to.component.html","./src/app/shared-modules/reporting/definitions/report-options.component.html","./src/app/shared-modules/reporting/definitions/report-options.component.ts","./src/app/shared-modules/reporting/models/data-source.model.ts","./src/app/shared-modules/reporting/models/report-folder.model.ts","./src/app/shared-modules/reporting/models/report-parameter-v9.model.ts","./src/app/shared-modules/reporting/models/report-v9.model.ts","./src/app/shared-modules/reporting/models/report.model.ts","./src/app/shared-modules/reporting/models/v9-parameter-row.model.ts","./src/app/shared-modules/reporting/report-snapshots/confirm-delete-snapshot.component.ts","./src/app/shared-modules/reporting/report-snapshots/confirm-delete-snapshot.component.html","./src/app/shared-modules/reporting/filters/report-in-folder-filter.ts","./src/app/shared-modules/reporting/filters/snapshot-in-folder-filter.ts","./src/app/shared-modules/reporting/report-snapshots/report-snapshots.component.html","./src/app/shared-modules/reporting/report-snapshots/report-snapshots.component.ts","./src/app/shared-modules/reporting/my-reports/my-reports.component.html","./src/app/shared-modules/reporting/my-reports/my-reports.component.ts","./src/app/shared-modules/reporting/models/parameter-row-model.ts","./src/app/shared-modules/reporting/models/parameter-rows.model.ts","./src/app/shared-modules/reporting/parameters/confirm-report-to-email.component.html","./src/app/shared-modules/reporting/parameters/confirm-report-to-email.component.ts","./src/app/shared-modules/reporting/archive-report/confirm-archive-report.component.ts","./src/app/shared-modules/reporting/archive-report/confirm-archive-report.component.html","./src/app/shared-modules/reporting/models/report-batch.model.ts","./src/app/shared-modules/reporting/archive-report/archive-report-modal.component.html","./src/app/shared-modules/reporting/archive-report/archive-report-modal.component.ts","./src/app/shared-modules/reporting/parameters/report-parameters.component.html","./src/app/shared-modules/reporting/parameters/report-parameters.component.ts","./src/app/shared-modules/reporting/report-legend/report-legend.component.ts","./src/app/shared-modules/reporting/report-legend/report-legend.component.html","./src/app/shared-modules/reporting/report-queue/reportqueue-filter.ts","./src/app/shared-modules/reporting/report-queue/report-queue.component.html","./src/app/shared-modules/reporting/report-queue/report-queue.component.ts","./src/app/shared-modules/reporting/report-settings/report-autorun-message.component.html","./src/app/shared-modules/reporting/report-settings/report-autorun-message.component.ts","./src/app/shared-modules/reporting/report-settings/report-settings-autorun.component.html","./src/app/shared-modules/reporting/report-settings/report-settings-autorun.component.ts","./src/app/shared-modules/reporting/report-settings/report-settings.folders.component.html","./src/app/shared-modules/reporting/report-settings/report-settings.folders.component.ts","./src/app/shared-modules/reporting/reporting.component.html","./src/app/shared-modules/reporting/reporting.component.ts","./src/app/shared-modules/reporting/report-folders/add-folder/add-folder.component.html","./src/app/shared-modules/reporting/report-folders/add-folder/add-folder.component.ts","./src/app/shared-modules/reporting/report-folders/delete-folder/delete-folder.component.ts","./src/app/shared-modules/reporting/report-folders/delete-folder/delete-folder.component.html","./src/app/shared-modules/reporting/report-folders/report-folders.component.html","./src/app/shared-modules/reporting/report-folders/report-folders.component.ts","./src/app/shared-modules/reporting/models/ast-element.model.ts","./src/app/shared-modules/reporting/automated-testing-setup/automated-testing-modal.component.html","./src/app/shared-modules/reporting/automated-testing-setup/automated-testing-modal.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/confirm.component.html","./src/app/shared-modules/reporting/automated-testing-setup/confirm.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/quickview.component.html","./src/app/shared-modules/reporting/automated-testing-setup/quickview.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/element-add-edit-modal.component.html","./src/app/shared-modules/reporting/automated-testing-setup/element-add-edit-modal.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/element-list.component.html","./src/app/shared-modules/reporting/automated-testing-setup/element-list.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/area-add-edit-modal.component.html","./src/app/shared-modules/reporting/automated-testing-setup/area-add-edit-modal.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/area-list.component.html","./src/app/shared-modules/reporting/automated-testing-setup/area-list.component.ts","./src/app/shared-modules/reporting/automated-testing-setup/automated-testing-setup.component.html","./src/app/shared-modules/reporting/automated-testing-setup/automated-testing-setup.component.ts","./src/app/shared-modules/reporting/footer/report-footer.component.html","./src/app/shared-modules/reporting/footer/report-footer.component.ts","./src/app/shared-modules/reporting/models/report-module.model.ts","./src/app/shared-modules/reporting/all-reports/all-reports.component.html","./src/app/shared-modules/reporting/all-reports/all-reports.component.ts","./src/app/shared-modules/reporting/reporting.module.ts","./src/app/shared-modules/reporting/models/report-definition.model.ts","./src/app/shared-modules/reporting/models/report-parameter.model.ts","./src/app/shared-modules/reporting/models/reporting-configuration-settings.model.ts","./src/app/shared-modules/reporting/reporting.service.ts","./src/app/shared-modules/send-email/email-attachment.model.ts","./src/app/shared-modules/send-email/mail-detail.ts","./src/app/shared-modules/send-email/mail-paremeters.ts","./src/app/shared-modules/send-email/option-not-available-dialog/option-not-available-dialog.component.ts","./src/app/shared-modules/send-email/option-not-available-dialog/option-not-available-dialog.component.html","./src/app/shared-modules/send-email/send-email-warning-dialog/send-email-warning-dialog.component.html","./src/app/shared-modules/send-email/send-email-warning-dialog/send-email-warning-dialog.component.ts","./src/app/shared-modules/send-email/add-attachments-dialog/add-attachments-dialog.component.html","./src/app/shared-modules/send-email/add-attachments-dialog/add-attachments-dialog.component.ts","./src/app/shared-modules/send-email/recipient-change-warning-dialog/recipient-change-warning-dialog.component.ts","./src/app/shared-modules/send-email/recipient-change-warning-dialog/recipient-change-warning-dialog.component.html","./src/app/shared-modules/send-email/recipient.model.ts","./src/app/shared-modules/send-email/change-recipients-dialog/change-recipients-dialog.component.html","./src/app/shared-modules/send-email/change-recipients-dialog/change-recipients-dialog.component.ts","./src/app/shared-modules/send-email/enrollment-warning-dialog/enrollment-warning-dialog.component.ts","./src/app/shared-modules/send-email/enrollment-warning-dialog/enrollment-warning-dialog.component.html","./src/app/shared-modules/send-email/send-email.component.html","./src/app/shared-modules/send-email/send-email.component.ts","./src/app/shared-modules/send-email/send-email.service.ts","./src/app/shared-modules/student-attachment/student-attachment.model.ts","./src/app/shared-modules/student-health-shared/student-health-shared.model.ts","./src/app/shared-modules/student-health-shared/student-health-shared.service.ts","./src/app/sped360/forms-within-documents/form-within-documents.service.ts","./src/app/sped360/forms-within-documents/modals/add-optional-forms/add-optional-forms.component.html","./src/app/sped360/forms-within-documents/modals/add-optional-forms/add-optional-forms.component.ts","./src/app/sped360/forms-within-documents/modals/manage-team/pipes/header-model-value.pipe.ts","./src/app/sped360/forms-within-documents/modals/manage-team/pipes/maintain-team-member-header-name.pipe.ts","./src/app/sped360/forms-within-documents/modals/manage-team/pipes/is-form-creator.pipe.ts","./src/app/sped360/forms-within-documents/modals/manage-team/pipes/maintain-team-member-cell-value.pipe.ts","./src/app/sped360/forms-within-documents/modals/manage-team/manage-team.component.html","./src/app/sped360/forms-within-documents/modals/manage-team/manage-team.component.ts","./src/app/sped360/forms-within-documents/forms-within-documents.component.html","./src/app/sped360/forms-within-documents/forms-within-documents.component.ts","./src/app/sped360/forms-within-documents/formwithin-document-modal.ts","./src/app/sped360/forms-within-documents/modals/check-in-check-out/check-in-check-out.component.html","./src/app/sped360/forms-within-documents/modals/check-in-check-out/check-in-check-out.component.ts","./src/app/sped360/forms-within-documents/maintenance-modals/pick-course-of-study/pick-course-of-study.component.html","./src/app/sped360/forms-within-documents/maintenance-modals/pick-course-of-study/pick-course-of-study.component.ts","./src/app/sped360/forms-within-documents/maintenance-modals/pick-goal-maintenance/pick-goal-maintenance.component.html","./src/app/sped360/forms-within-documents/maintenance-modals/pick-goal-maintenance/pick-goal-maintenance.component.ts","./src/app/sped360/forms-within-documents/maintenance-modals/pick-identification-maintenance/pick-identification-maintenance.component.html","./src/app/sped360/forms-within-documents/maintenance-modals/pick-identification-maintenance/pick-identification-maintenance.component.ts","./src/app/sped360/forms-within-documents/maintenance-modals/present-level-maintenance/present-level-maintenance.component.ts","./src/app/sped360/forms-within-documents/maintenance-modals/present-level-maintenance/present-level-maintenance.component.html","./src/app/sped360/forms-within-documents/modals/edit-html-form/edit-html-form.component.html","./src/app/sped360/forms-within-documents/modals/edit-html-form/edit-html-form.component.ts","./src/app/sped360/forms-within-documents/modals/indeterminate-progress-bar/indeterminate-progress-bar.component.ts","./src/app/sped360/forms-within-documents/modals/indeterminate-progress-bar/indeterminate-progress-bar.component.html","./src/app/sped360/sped-home/sped-cards/sped-cards.service.ts","./src/app/sped360/sped-management/sped-management.model.ts","./src/app/sped360/sped-management/sped-management.service.ts","./src/app/sped360/sped-user-permissions.model.ts","./src/app/sped360/sped360.service.ts","./src/app/sped360/student-document-home/sped-student-document-cards/sped-student-collection-common-card/view-document/view-document.component.ts","./src/app/sped360/student-document-home/sped-student-document-cards/sped-student-collection-common-card/view-document/view-document.component.html","./src/app/sped360/student-document-home/sped-student-document-cards/sped-student-document-cards.model.ts","./src/app/sped360/student-document-home/sped-student-document-cards/sped-student-document-cards.service.ts","./src/app/student360/academic-history/academic-history.component.html","./src/app/student360/academic-history/academic-history.component.ts","./src/app/student360/assessment/assessment-data-category-table/add-assessment-scores/add-assessment-scores.component.ts","./src/app/student360/assessment/assessment-data-category-table/add-assessment-scores/add-assessment-scores.component.html","./src/app/student360/assessment/assessment-data-category-table/assessment-data-category-table.component.html","./src/app/student360/assessment/assessment-data-category-table/assessment-data-category-table.component.ts","./src/app/student360/assessment/assessment-data-table/assessment-data-table.component.html","./src/app/student360/assessment/assessment-data-table/assessment-data-table.component.ts","./src/app/student360/assessment/assessment-data-category.ts","./src/app/student360/assessment/assessment.component.html","./src/app/student360/assessment/assessment.component.ts","./src/app/student360/assessment/assessment.service.ts","./src/app/student360/assignment/assignment-filter.pipe.ts","./src/app/student360/assignment/assignment-filter-param.ts","./src/app/student360/assignment/assignment-filter/assignment-filter.component.html","./src/app/student360/assignment/assignment-filter/assignment-filter.component.ts","./src/app/student360/assignment/standards-based-scores/standards-based-scores.component.html","./src/app/student360/assignment/standards-based-scores/standards-based-scores.component.ts","./src/app/student360/assignment/Utility.ts","./src/app/student360/assignment/by-course/by-course.component.html","./src/app/student360/assignment/by-course/by-course.component.ts","./src/app/student360/assignment/upcoming-missing/upcoming-missing.component.html","./src/app/student360/assignment/upcoming-missing/upcoming-missing.component.ts","./src/app/student360/assignment/assignment.component.html","./src/app/student360/assignment/assignment.component.ts","./src/app/student360/assignment/assignment.service.ts","./src/app/student360/attendance/by-date-details/by-date-details.component.html","./src/app/student360/attendance/by-date-details/by-date-details.component.ts","./src/app/student360/attendance/by-date-table/by-date-table.component.html","./src/app/student360/attendance/by-date-table/by-date-table.component.ts","./src/app/student360/attendance/by-schedule-details/by-schedule-details.component.html","./src/app/student360/attendance/by-schedule-details/by-schedule-details.component.ts","./src/app/student360/attendance/by-schedule-table/by-schedule-table.component.html","./src/app/student360/attendance/by-schedule-table/by-schedule-table.component.ts","./src/app/student360/attendance/by-special-additional/by-special-additional.component.html","./src/app/student360/attendance/by-special-additional/by-special-additional.component.ts","./src/app/student360/attendance/by-team-details/by-team-details.component.html","./src/app/student360/attendance/by-team-details/by-team-details.component.ts","./src/app/student360/attendance/by-team-table/by-team-table.component.html","./src/app/student360/attendance/by-team-table/by-team-table.component.ts","./src/app/student360/attendance/by-view-excessive/by-view-excessive.component.html","./src/app/student360/attendance/by-view-excessive/by-view-excessive.component.ts","./src/app/student360/attendance/code-legend/code-legend.component.html","./src/app/student360/attendance/code-legend/code-legend.component.ts","./src/app/student360/attendance/attendance.component.html","./src/app/student360/attendance/attendance.component.ts","./src/app/student360/awards/awards.service.ts","./src/app/student360/awards/awards.component.html","./src/app/student360/awards/awards.component.ts","./src/app/student360/calendar/calendar-header/calendar-header.component.html","./src/app/student360/calendar/calendar-header/calendar-header.component.ts","./src/app/student360/calendar/calendar-event-modal/calendar-event-modal.component.html","./src/app/student360/calendar/calendar-event-modal/calendar-event-modal.component.ts","./src/app/student360/calendar/district-event.pipe.ts","./src/app/student360/calendar/calendar.component.html","./src/app/student360/calendar/calendar.component.ts","./src/app/student360/calendar/calendar.service.ts","./src/app/student360/discipline/discipline.component.html","./src/app/student360/discipline/discipline.component.ts","./src/app/student360/e-forms/e-form-select-student-dialog/e-form-select-student-dialog.component.html","./src/app/student360/e-forms/e-form-select-student-dialog/e-form-select-student-dialog.component.ts","./src/app/student360/e-forms/e-form-unfinished-dialog/e-form-unfinished-dialog.component.html","./src/app/student360/e-forms/e-form-unfinished-dialog/e-form-unfinished-dialog.component.ts","./src/app/student360/e-forms/e-form-critical-message-dialog/e-form-critical-message-dialog.component.ts","./src/app/student360/e-forms/e-form-critical-message-dialog/e-form-critical-message-dialog.component.html","./src/app/student360/e-forms/e-form-select-year-dialog/e-form-select-year-dialog.component.html","./src/app/student360/e-forms/e-form-select-year-dialog/e-form-select-year-dialog.component.ts","./src/app/shared-components/pipes/year-description.pipe.ts","./src/app/student360/e-forms/e-forms.component.html","./src/app/student360/e-forms/e-forms.component.ts","./src/app/student360/fees-and-billing/additional-details/additional-details.component.html","./src/app/student360/fees-and-billing/additional-details/additional-details.component.ts","./src/app/student360/fees-and-billing/fee-payment-details/fee-payment-details.component.html","./src/app/student360/fees-and-billing/fee-payment-details/fee-payment-details.component.ts","./src/app/student360/fees-and-billing/fees-and-billing.component.html","./src/app/student360/fees-and-billing/fees-and-billing.component.ts","./src/app/student360/fees-and-billing/fees-and-billing.service.ts","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-student-status/free-reduced-meal-app-student-status.component.html","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-student-status/free-reduced-meal-app-student-status.component.ts","./src/app/shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-family.model.ts","./src/app/student360/free-reduced-meal-app-parent/frma-unsubmitted-app-dialog/frma-unsubmitted-app-dialog.component.ts","./src/app/student360/free-reduced-meal-app-parent/frma-unsubmitted-app-dialog/frma-unsubmitted-app-dialog.component.html","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-year-selector/free-reduced-meal-app-year-selector.component.ts","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-year-selector/free-reduced-meal-app-year-selector.component.html","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-summary/free-reduced-meal-app-summary.component.html","./src/app/student360/free-reduced-meal-app-parent/free-reduced-meal-app-summary/free-reduced-meal-app-summary.component.ts","./src/app/student360/grades/code-legend/code-legend.component.html","./src/app/student360/grades/code-legend/code-legend.component.ts","./src/app/student360/grades/course-description/course-description.component.ts","./src/app/student360/grades/course-description/course-description.component.html","./src/app/student360/grades/comments-and-behavior-marks/comments-and-behavior-marks.component.html","./src/app/student360/grades/comments-and-behavior-marks/comments-and-behavior-marks.component.ts","./src/app/student360/grades/standards-based-grades/standards-based-grades.component.html","./src/app/student360/grades/standards-based-grades/standards-based-grades.component.ts","./src/app/student360/grades/traditional-grades/traditional-grades.component.html","./src/app/student360/grades/traditional-grades/traditional-grades.component.ts","./src/app/student360/grades/grades.component.html","./src/app/student360/grades/grades.component.ts","./src/app/student360/grades/grades.service.ts","./src/app/student360/grades/standards-based-grades/standards-based-grades-filter.pipe.ts","./src/app/student360/grades/traditional-grades/traditional-grades-filter.pipe.ts","./src/app/student360/graduation-plan/gp-filter-param.ts","./src/app/student360/graduation-plan/gp-filter/gp-filter.component.ts","./src/app/student360/graduation-plan/gp-filter/gp-filter.component.html","./src/app/student360/graduation-plan/graduation-plan.component.html","./src/app/student360/graduation-plan/graduation-plan.component.ts","./src/app/student360/graduation-plan/graduation-plan.model.ts","./src/app/student360/graduation-plan/graduation-plan.service.ts","./src/app/student360/graduation-plan/override-creditcode/override-creditcode.component.html","./src/app/student360/graduation-plan/override-creditcode/override-creditcode.component.ts","./src/app/student360/graduation-plan/shared/gp-credit-format.pipe.ts","./src/app/student360/health/dental/dental.component.html","./src/app/student360/health/dental/dental.component.ts","./src/app/student360/health/doctors/doctors.component.html","./src/app/student360/health/doctors/doctors.component.ts","./src/app/student360/health/health-visit-log/health-visit-log.component.html","./src/app/student360/health/health-visit-log/health-visit-log.component.ts","./src/app/student360/health/hearing/hearing.component.html","./src/app/student360/health/hearing/hearing.component.ts","./src/app/student360/health/immunizations/immunizations.component.html","./src/app/student360/health/immunizations/immunizations.component.ts","./src/app/student360/health/insurance/insurance.component.html","./src/app/student360/health/insurance/insurance.component.ts","./src/app/student360/health/medications/medications.component.html","./src/app/student360/health/medications/medications.component.ts","./src/app/student360/health/physical-exam/physical-exam.component.html","./src/app/student360/health/physical-exam/physical-exam.component.ts","./src/app/student360/health/screening/code-legend/code-legend.component.html","./src/app/student360/health/screening/code-legend/code-legend.component.ts","./src/app/student360/health/spinal/spinal.component.html","./src/app/student360/health/spinal/spinal.component.ts","./src/app/student360/health/vision/vision.component.html","./src/app/student360/health/vision/vision.component.ts","./src/app/student360/health/health-condition/health-condition.component.html","./src/app/student360/health/health-condition/health-condition.component.ts","./src/app/student360/health/pregnancy/pregnancy.component.html","./src/app/student360/health/pregnancy/pregnancy.component.ts","./src/app/student360/health/restrictions/restrictions.component.html","./src/app/student360/health/restrictions/restrictions.component.ts","./src/app/student360/health/screening/screening.component.html","./src/app/student360/health/screening/screening.component.ts","./src/app/student360/health/health.component.html","./src/app/student360/health/health.component.ts","./src/app/student360/health/health.model.ts","./src/app/student360/health/health.service.ts","./src/app/student360/iep/iep-documents/iep-documents.component.html","./src/app/student360/iep/iep-documents/iep-documents.component.ts","./src/app/student360/iep/iep.component.html","./src/app/student360/iep/iep.component.ts","./src/app/student360/iep/iep.service.ts","./src/app/student360/meal-service/lunch-pin-filter.pipe.ts","./src/app/student360/meal-service/meal-service-filter.pipe.ts","./src/app/student360/meal-service/meal-service.model.ts","./src/app/student360/meal-service/lunch-menu-choices/lunch-menu-choices.component.html","./src/app/student360/meal-service/lunch-menu-choices/lunch-menu-choices.component.ts","./src/app/student360/meal-service/charges-and-deposits/charges-and-deposits.component.html","./src/app/student360/meal-service/charges-and-deposits/charges-and-deposits.component.ts","./src/app/student360/meal-service/monthly-lunch-menu/monthly-lunch-menu.component.html","./src/app/student360/meal-service/monthly-lunch-menu/monthly-lunch-menu.component.ts","./src/app/student360/meal-service/meal-service-filter/meal-service-filter.component.ts","./src/app/student360/meal-service/meal-service-filter/meal-service-filter.component.html","./src/app/student360/meal-service/meal-service.component.html","./src/app/student360/meal-service/meal-service.component.ts","./src/app/student360/meal-service/meal-service.service.ts","./src/app/student360/meal-service/monthly-lunch-menu-filter.pipe.ts","./src/app/student360/online-payment/models/online-payment-config.model.ts","./src/app/student360/online-registration/form-packet.model.ts","./src/app/student360/online-registration/online-registration.service.ts","./src/app/student360/online-registration/student-update/multiple-families/multiple-families.component.html","./src/app/student360/online-registration/student-update/multiple-families/multiple-families.component.ts","./src/app/student360/portfolio/portfolio-filter.pipe.ts","./src/app/student360/portfolio/add-portfolio-modal/add-portfolio-modal.component.html","./src/app/student360/portfolio/add-portfolio-modal/add-portfolio-modal.component.ts","./src/app/student360/portfolio/delete-portfolio-modal/delete-portfolio-modal.component.ts","./src/app/student360/portfolio/delete-portfolio-modal/delete-portfolio-modal.component.html","./src/app/student360/portfolio/edit-portfolio-modal/edit-portfolio-modal.component.html","./src/app/student360/portfolio/edit-portfolio-modal/edit-portfolio-modal.component.ts","./src/app/student360/portfolio/portfolio-filter.ts","./src/app/student360/portfolio/portfolio.component.html","./src/app/student360/portfolio/portfolio.component.ts","./src/app/student360/portfolio/portfolio.model.ts","./src/app/student360/portfolio/portfolio.service.ts","./src/app/student360/programs-and-services/programs-and-services-filter.ts","./src/app/student360/programs-and-services/programs-and-services.component.html","./src/app/student360/programs-and-services/programs-and-services.component.ts","./src/app/student360/programs-and-services/programs-and-services.model.ts","./src/app/student360/programs-and-services/programs-and-services.service.ts","./src/app/student360/schedule-history/schedule-history.model.ts","./src/app/student360/schedule-history/schedule-history.service.ts","./src/app/student360/schedule-history/schedule-history.component.html","./src/app/student360/schedule-history/schedule-history.component.ts","./src/app/student360/student-course-request/crwarning/crwarning.component.html","./src/app/student360/student-course-request/crwarning/crwarning.component.ts","./src/app/student360/student-course-request/student-course-request.model.ts","./src/app/student360/student-course-request/student-course-request.service.ts","./src/app/student360/student-course-request/shared/scr-course-filter.ts","./src/app/student360/student-course-request/shared/scr-term-filter.ts","./src/app/student360/student-course-request/shared/scr-period-filter.ts","./src/app/student360/student-course-request/shared/scr-teacher-filter.ts","./src/app/student360/student-course-request/student-course-request.component.html","./src/app/student360/student-course-request/student-course-request.component.ts","./src/app/student360/student-details/student-detail.model.ts","./src/app/student360/student-details/student-details.component.html","./src/app/student360/student-details/student-details.component.ts","./src/app/student360/student-digital-content/models/student-digital-content.model.ts","./src/app/student360/student-digital-content/add-content-modal/add-content-modal.component.html","./src/app/student360/student-digital-content/add-content-modal/add-content-modal.component.ts","./src/app/student360/student-digital-content/student-digital-content.component.html","./src/app/student360/student-digital-content/student-digital-content.component.ts","./src/app/student360/student-digital-content/student-digital-content.service.ts","./src/app/student360/student-documents/student-document-access-history/student-document-access-history.component.html","./src/app/student360/student-documents/student-document-access-history/student-document-access-history.component.ts","./src/app/student360/student-documents/student-documents-filter.ts","./src/app/student360/student-documents/student-documents-filtered.component.ts","./src/app/student360/student-documents/add-edit-document/add-edit-document.component.html","./src/app/student360/student-documents/add-edit-document/add-edit-document.component.ts","./src/app/student360/student-documents/student-documents-v9/student-documents-v9.component.html","./src/app/student360/student-documents/student-documents-v9/student-documents-v9.component.ts","./src/app/student360/student-documents/student-documents.component.ts","./src/app/student360/student-documents/student-documents.component.html","./src/app/student360/student-fields/student-field.service.ts","./src/app/student360/student-fields/student-field.model.ts","./src/app/student360/student-fields/student-fields.pipe.ts","./src/app/student360/student-fields/student-fields.component.html","./src/app/student360/student-fields/student-fields.component.ts","./src/app/student360/student-schedule/course-term.model.ts","./src/app/student360/student-schedule/student-schedule.component.html","./src/app/student360/student-schedule/student-schedule.component.ts","./src/app/student360/student-schedule/student-schedule.service.ts","./src/app/student360/student-summary/new-announcements-modal/new-announcements-modal-filter.pipe.ts","./src/app/student360/student-summary/help-menu-modal/help-menu-modal.component.ts","./src/app/student360/student-summary/help-menu-modal/help-menu-modal.component.html","./src/app/student360/student-summary/settings-menu-modal/settings-menu-modal.component.html","./src/app/student360/student-summary/settings-menu-modal/settings-menu-modal.component.ts","./src/app/student360/student-summary/cards/student/announcement-card/card-announcement-modal/card-announcement-modal.component.ts","./src/app/student360/student-summary/cards/student/announcement-card/card-announcement-modal/card-announcement-modal.component.html","./src/app/student360/student-summary/cards/student/announcement-card/announcement-card.component.html","./src/app/student360/student-summary/cards/student/announcement-card/announcement-card.component.ts","./src/app/student360/student-summary/cards/student/attendance-card/card-attendance.ts","./src/app/student360/student-summary/cards/student/attendance-card/attendance-card-modal/attendance-card-modal.component.html","./src/app/student360/student-summary/cards/student/attendance-card/attendance-card-modal/attendance-card-modal.component.ts","./src/app/student360/student-summary/cards/student/attendance-card/attendance-card.component.html","./src/app/student360/student-summary/cards/student/attendance-card/attendance-card.component.ts","./src/app/student360/student-summary/cards/student/assignments-card/assignments-card-modal/assignments-card-modal.component.html","./src/app/student360/student-summary/cards/student/assignments-card/assignments-card-modal/assignments-card-modal.component.ts","./src/app/student360/student-summary/cards/student/assignments-card/assignments-card.component.html","./src/app/student360/student-summary/cards/student/assignments-card/assignments-card.component.ts","./src/app/student360/student-summary/cards/student/current-grades-card/current-grades-card.component.html","./src/app/student360/student-summary/cards/student/current-grades-card/current-grades-card.component.ts","./src/app/student360/student-summary/cards/student/district-defined-links-card/district-defined-links-card.component.html","./src/app/student360/student-summary/cards/student/district-defined-links-card/district-defined-links-card.component.ts","./src/app/student360/student-summary/cards/student/fees-billing-card/fees-and-billing-card-modal/fees-and-billing-card-modal.component.html","./src/app/student360/student-summary/cards/student/fees-billing-card/fees-and-billing-card-modal/fees-and-billing-card-modal.component.ts","./src/app/student360/student-summary/cards/student/fees-billing-card/fees-billing-card.component.html","./src/app/student360/student-summary/cards/student/fees-billing-card/fees-billing-card.component.ts","./src/app/student360/student-summary/cards/student/meal-service-card/meal-service-card-modal/meal-service-card-modal.component.html","./src/app/student360/student-summary/cards/student/meal-service-card/meal-service-card-modal/meal-service-card-modal.component.ts","./src/app/student360/student-summary/cards/student/meal-service-card/meal-service-card.component.html","./src/app/student360/student-summary/cards/student/meal-service-card/meal-service-card.component.ts","./src/app/student360/student-summary/cards/student/student-schedule-card/student-schedule-card.component.html","./src/app/student360/student-summary/cards/student/student-schedule-card/student-schedule-card.component.ts","./src/app/student360/student-summary/cards/student/upcoming-events-card/upcoming-events-card.component.html","./src/app/student360/student-summary/cards/student/upcoming-events-card/upcoming-events-card.component.ts","./src/app/student360/student-summary/cards/student/calendar-card/event-details-modal/event-details-modal.component.html","./src/app/student360/student-summary/cards/student/calendar-card/event-details-modal/event-details-modal.component.ts","./src/app/student360/student-summary/cards/student/calendar-card/calendar-card.component.html","./src/app/student360/student-summary/cards/student/calendar-card/calendar-card.component.ts","./src/app/student360/student-summary/cards/staff/attendance-history-card/attendance-details-modal/attendance-details-modal.component.html","./src/app/student360/student-summary/cards/staff/attendance-history-card/attendance-details-modal/attendance-details-modal.component.ts","./src/app/student360/student-summary/cards/staff/attendance-history-card/attendance-history-card.component.html","./src/app/student360/student-summary/cards/staff/attendance-history-card/attendance-history-card.component.ts","./src/app/student360/student-summary/cards/staff/student-teams-card/student-teams-card.component.html","./src/app/student360/student-summary/cards/staff/student-teams-card/student-teams-card.component.ts","./src/app/student360/student-summary/cards/staff/student-notes-card/student-notes-card.component.html","./src/app/student360/student-summary/cards/staff/student-notes-card/student-notes-card.component.ts","./src/app/student360/student-summary/cards/staff/behavior-card/behavior-card.component.html","./src/app/student360/student-summary/cards/staff/behavior-card/behavior-card.component.ts","./src/app/student360/student-summary/cards/staff/programs-and-services-card/programs-and-services-card.component.html","./src/app/student360/student-summary/cards/staff/programs-and-services-card/programs-and-services-card.component.ts","./src/app/student360/student-summary/cards/staff/student-details-card/student-details-card.component.html","./src/app/student360/student-summary/cards/staff/student-details-card/student-details-card.component.ts","./src/app/student360/student-summary/cards/staff/enrollment-card/membership-code-details-modal/membership-code-details-modal.component.html","./src/app/student360/student-summary/cards/staff/enrollment-card/membership-code-details-modal/membership-code-details-modal.component.ts","./src/app/student360/student-summary/cards/staff/enrollment-card/enrollment-card.component.html","./src/app/student360/student-summary/cards/staff/enrollment-card/enrollment-card.component.ts","./src/app/student360/student-summary/cards/staff/contacts-card/card-student-contact.ts","./src/app/student360/student-summary/cards/staff/contacts-card/contacts-v9/contacts-v9.component.html","./src/app/student360/student-summary/cards/staff/contacts-card/contacts-v9/contacts-v9.component.ts","./src/app/student360/student-summary/cards/staff/contacts-card/contacts-card.component.html","./src/app/student360/student-summary/cards/staff/contacts-card/contacts-card.component.ts","./src/app/student360/student-summary/cards/staff/staff-student-schedule-card/staff-student-schedule-card.component.html","./src/app/student360/student-summary/cards/staff/staff-student-schedule-card/staff-student-schedule-card.component.ts","./src/app/student360/student-summary/cards/staff/communication-log-card/communication-log-card.component.html","./src/app/student360/student-summary/cards/staff/communication-log-card/communication-log-card.component.ts","./src/app/student360/student-summary/card-container/card/card.component.ts","./src/app/student360/student-summary/card-container/card-container.component.html","./src/app/student360/student-summary/card-container/card/card.component.html","./src/app/student360/student-summary/card-container/card-container.component.ts","./src/app/student360/student-summary/welcome-modal/welcome-modal.component.ts","./src/app/student360/student-summary/welcome-modal/welcome-modal.component.html","./src/app/student360/student-summary/new-announcements-modal/new-announcements-modal.component.html","./src/app/student360/student-summary/new-announcements-modal/new-announcements-modal.component.ts","./src/app/student360/student-summary/check-in-out-submission-request-modal/check-in-out-submission-request-modal.component.html","./src/app/student360/student-summary/check-in-out-submission-request-modal/check-in-out-submission-request-modal.component.ts","./src/app/student360/student-summary/check-in-out-submission-request-modal/check-in-out-submission-request-modal.model.ts","./src/app/student360/student-summary/absent-notice-submission-modal/non-school-day-warning/non-school-day-warning.component.html","./src/app/student360/student-summary/absent-notice-submission-modal/non-school-day-warning/non-school-day-warning.component.ts","./src/app/student360/student-summary/absent-notice-submission-modal/absent-notice-submission-modal.component.html","./src/app/student360/student-summary/absent-notice-submission-modal/absent-notice-submission-modal.component.ts","./src/app/student360/student-summary/student-summary.component.html","./src/app/student360/student-summary/student-summary.component.ts","./src/app/student360/student-summary/student-summary.service.ts","./src/app/student360/student360.service.ts","./src/app/student360/teams/team.model.ts","./src/app/student360/teams/teams.component.html","./src/app/student360/teams/teams.component.ts","./src/app/student360/teams/teams.service.ts","./src/app/student360/transportation/transportation.component.html","./src/app/student360/transportation/transportation.component.ts","./src/app/student360/transportation/transportation.service.ts","./src/app/shared-components/has-dynamic-data/dynamic-data.interceptor.ts","./src/app/shared-components/logout/logout.component.ts","./src/app/shared-modules/login/callback/callback.component.ts","./src/app/shared-modules/login/change-password/change-password.component.html","./src/app/shared-modules/login/change-password/change-password.component.ts","./src/app/shared-modules/login/forgot-password/student-reset-password-warning/student-reset-password-warning.component.ts","./src/app/shared-modules/login/forgot-password/student-reset-password-warning/student-reset-password-warning.component.html","./src/app/shared-modules/login/forgot-username/confirmation-modal/confirmation-modal.component.html","./src/app/shared-modules/login/forgot-username/confirmation-modal/confirmation-modal.component.ts","./src/app/shared-modules/login/forgot-username/forgot-username.component.html","./src/app/shared-modules/login/forgot-username/forgot-username.component.ts","./src/app/shared-modules/login/forgot-password/forgot-password.component.html","./src/app/shared-modules/login/forgot-password/forgot-password.component.ts","./src/app/shared-modules/login/footer/login-footer.component.html","./src/app/shared-modules/login/footer/login-footer.component.ts","./src/app/shared-modules/login/login-assist/login-assist.component.html","./src/app/shared-modules/login/login-assist/login-assist.component.ts","./node_modules/ngx-cookie-service/__ivy_ngcc__/ngx-cookie-service.js","./src/app/shared-modules/family-registration/email-sent/email-sent.component.html","./src/app/shared-modules/family-registration/email-sent/email-sent.component.ts","./src/app/shared-modules/family-registration/register-new-family-verify-code/register-new-family-verify-code.component.ts","./src/app/shared-modules/family-registration/register-new-family-message/register-new-family-message.component.html","./src/app/shared-modules/family-registration/register-new-family-verify-code/register-new-family-verify-code.component.html","./src/app/shared-modules/family-registration/register-new-family-message/register-new-family-message.component.ts","./src/app/shared-modules/family-registration/link-already-sent/link-already-sent.component.html","./src/app/shared-modules/family-registration/link-already-sent/link-already-sent.component.ts","./src/app/shared-modules/family-registration/login-exists/login-exists.component.html","./src/app/shared-modules/family-registration/login-exists/login-exists.component.ts","./src/app/shared-modules/family-registration/duplicate-email-address/duplicate-email-address.component.ts","./src/app/shared-modules/family-registration/duplicate-email-address/duplicate-email-address.component.html","./src/app/shared-modules/family-registration/register-new-family/register-new-family.component.ts","./src/app/shared-modules/family-registration/register-new-family/register-new-family.component.html","./src/app/shared-modules/family-registration/select-language/select-language.component.html","./src/app/shared-modules/family-registration/select-language/select-language.component.ts","./src/app/shared-modules/login/access-message/access-message.component.ts","./src/app/shared-modules/login/access-message/access-message.component.html","./src/app/classroom360/system-settings/system-settings-v9/upgrade-access-history/access-history-sub-tab/access-history-sub-tab.model.ts","./src/app/shared-modules/login/audit-logins/audit-logins.component.ts","./src/app/shared-modules/login/audit-logins/audit-logins.component.html","./src/app/shared-modules/login/login-only360/login-only360.component.ts","./src/app/shared-modules/login/reset-password/reset-password.component.html","./src/app/shared-modules/login/login-only360/login-only360.component.html","./src/app/shared-modules/login/reset-password/reset-password.component.ts","./src/app/shared-modules/login/unsupported-browser-warning-dialog/unsupported-browser-warning-dialog.component.ts","./src/app/shared-modules/login/unsupported-browser-warning-dialog/unsupported-browser-warning-dialog.component.html","./src/app/shared-modules/login/login.component.html","./src/app/shared-modules/login/login.component.ts","./src/app/shared-modules/login/silentcallback/silentcallback.component.ts","./src/app/app-routing.module.ts","./src/app/shared-modules/login/login.module.ts","./src/app/authIntercepter.ts","./src/app/index.ts","./src/app/shared-modules/login/inactivity-timeout/inactivity-timeout.component.ts","./src/app/shared-modules/login/inactivity-timeout/inactivity-timeout.component.html","./src/app/student360/portal-access-denied/portal-access-denied.component.html","./src/app/student360/portal-access-denied/portal-access-denied.component.ts","./src/app/shared-components/controls/about-panel/about-panel.component.html","./src/app/shared-components/controls/about-panel/about-panel.component.ts","./src/app/shared-components/favorites/favorites-modal/favorites-modal.component.html","./src/app/shared-components/favorites/favorites-modal/favorites-modal.component.ts","./src/app/shared-components/models/system-log.model.ts","./src/app/shared-components/student/student-in-focus/student-in-focus.component.ts","./src/app/shared-components/student/student-in-focus/student-in-focus.component.html","./src/app/shared-components/user-preferences/portal-menu-preferences.model.ts","./src/app/shared-components/portal-menu/student-in-focus-menu/student-in-focus-menu.component.html","./src/app/shared-components/portal-menu/student-in-focus-menu/student-in-focus-menu.component.ts","./src/app/shared-components/header/header.component.html","./src/app/shared-components/header/header.component.ts","./src/app/shared-components/spinner/spinner.component.html","./src/app/shared-components/spinner/spinner.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./node_modules/@ngx-translate/http-loader/__ivy_ngcc__/fesm2015/ngx-translate-http-loader.js","./src/app/shared-components/no-internet-connection-modal/no-internet-connection-modal.component.html","./src/app/shared-components/no-internet-connection-modal/no-internet-connection-modal.component.ts","./src/app/error-handler.ts","./src/app/app.module.ts","./src/app/shared-modules/translation/missing-translation-handler.component.ts","./src/main.ts","./node_modules/@biesbjerg/ngx-translate-extract-marker/__ivy_ngcc__/fesm2015/biesbjerg-ngx-translate-extract-marker.js","./node_modules/@ngx-translate/core/__ivy_ngcc__/fesm2015/ngx-translate-core.js","./node_modules/@pdf-lib/standard-fonts/es/Font.js","./node_modules/@pdf-lib/standard-fonts/es/utils.js","./node_modules/@pdf-lib/standard-fonts/es/Encoding.js","webpack:///tslib?8340","./node_modules/@progress/kendo-angular-buttons/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?94b0","./node_modules/@progress/kendo-angular-common/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?4e20","./node_modules/@progress/kendo-angular-dialog/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?b96c","webpack:///tslib?6e01","./node_modules/@progress/kendo-angular-treeview/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/util/not.js","./node_modules/rxjs/_esm2015/internal/operators/skipWhile.js","./node_modules/@progress/kendo-angular-dropdowns/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/rxjs/_esm2015/internal/operators/partition.js","webpack:///tslib?0ab0","./node_modules/orderedmap/dist/index-es.js","./node_modules/prosemirror-model/dist/index.es.js","./node_modules/prosemirror-transform/dist/index.es.js","./node_modules/prosemirror-state/dist/index.es.js","./node_modules/@progress/kendo-editor-common/dist/es2015/source.js","./node_modules/@progress/kendo-editor-common/dist/es2015/utils.js","./node_modules/@progress/kendo-editor-common/dist/es2015/mark.js","./node_modules/@progress/kendo-editor-common/dist/es2015/inline-style.js","./node_modules/@progress/kendo-editor-common/dist/es2015/link.js","webpack:///tslib?1414","./node_modules/@progress/kendo-editor-common/dist/es2015/blockNode.js","./node_modules/@progress/kendo-editor-common/dist/es2015/align.js","./node_modules/@progress/kendo-editor-common/dist/es2015/cleanFormatting.js","./node_modules/prosemirror-schema-list/dist/index.es.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/list-settings.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/indent-rules.js","./node_modules/prosemirror-commands/dist/index.es.js","./node_modules/@progress/kendo-editor-common/dist/es2015/blockquote.js","./node_modules/@progress/kendo-editor-common/dist/es2015/indent.js","./node_modules/@progress/kendo-editor-common/dist/es2015/lists.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/align-rules.js","./node_modules/w3c-keyname/index.js","./node_modules/prosemirror-keymap/dist/index.es.js","./node_modules/prosemirror-view/dist/index.es.js","./node_modules/prosemirror-tables/dist/index.es.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/schema.js","./node_modules/rope-sequence/dist/index.js","./node_modules/prosemirror-history/dist/index.es.js","./node_modules/prosemirror-inputrules/dist/index.es.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/commands.js","./node_modules/@progress/kendo-editor-common/dist/es2015/config/keymap.js","./node_modules/@progress/kendo-editor-common/dist/es2015/listConvert.js","./node_modules/@progress/kendo-editor-common/dist/es2015/paste.js","./node_modules/@progress/kendo-editor-common/dist/es2015/plugins/highlight.js","./node_modules/@progress/kendo-editor-common/dist/es2015/plugins/image-resize.js","./node_modules/prosemirror-dropcursor/dist/index.es.js","./node_modules/prosemirror-gapcursor/dist/index.es.js","./node_modules/@progress/kendo-angular-editor/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-editor-common/dist/es2015/text.js","./node_modules/@progress/kendo-editor-common/dist/es2015/image.js","./node_modules/@progress/kendo-editor-common/dist/es2015/plugins/placeholder.js","webpack:///tslib?fe30","./node_modules/@progress/kendo-angular-inputs/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?1eaf","./node_modules/@progress/kendo-angular-intl/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?382b","./node_modules/@progress/kendo-angular-l10n/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?81f1","./node_modules/@progress/kendo-angular-label/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?6f71","./node_modules/@progress/kendo-drawing/dist/es2015/html/core.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/template.js","./node_modules/@progress/kendo-angular-pdf-export/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?da83","./node_modules/@progress/kendo-angular-popup/__ivy_ngcc__/dist/fesm2015/index.js","webpack:///tslib?3519","./node_modules/@progress/kendo-angular-toolbar/__ivy_ngcc__/dist/fesm2015/index.js","./node_modules/@progress/kendo-common/dist/es2015/util.js","./node_modules/@progress/kendo-common/dist/es2015/support.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/field-list.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/getter.js","./node_modules/@progress/kendo-common/dist/es2015/accessors/setter.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/class.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/color.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/named-colors.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/color/parse-color.js","./node_modules/@progress/kendo-drawing/dist/es2015/common/support.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/has-observers.js","./node_modules/@progress/kendo-drawing/dist/es2015/core/options-store.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close-or-less.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/arc.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersection.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/circle.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/ellipse-extreme-angles.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersections-count.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/point.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/rect.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/is-out-of-end-point.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/calculate-curve-at.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/to-cubic-polynomial.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/complex-number.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/solve-cubic-equation.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/has-roots-in-range.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/segment.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/curve-intersections-count.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/size.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/to-matrix.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transformation.js","./node_modules/@progress/kendo-drawing/dist/es2015/geometry/transform.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-options.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient-stop.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/stops-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/linear-gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/gradients/radial-gradient.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/measurable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/paintable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/traversable.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-accessors.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-geometry.js","./node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-points.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/shape-map.js","./node_modules/@progress/kendo-drawing/dist/es2015/parsing/parse-path.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/utils.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/ttf.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/deflate.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/core.js","./node_modules/@progress/kendo-drawing/dist/es2015/pdf/drawing.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/circle.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/element.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/group.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/image.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/geometry-elements-array.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/points-to-curve.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/path.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/text.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-bounding-box.js","./node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-clippend-bounding-box.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/lru-cache.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/measure-text.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/text-metrics.js","./node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/util.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/append.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/arabic-to-roman.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/constants.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/create-promise.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/defined.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/definition-id.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/deg.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-base64.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/encode-utf.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/is-transparent.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/last.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/limit-value.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/merge-sort.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/rad.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/round.js","./node_modules/@progress/kendo-drawing/dist/es2015/util/value-or-default.js","./node_modules/@progress/kendo-file-saver/dist/es2015/save-as.js","./node_modules/@progress/kendo-file-saver/dist/es2015/base64.js","./node_modules/@progress/kendo-licensing/dist/index-esm.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align-point.js","./node_modules/@progress/kendo-popup-common/dist/es2015/align.js","./node_modules/@progress/kendo-popup-common/dist/es2015/add-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/owner-document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window.js","./node_modules/@progress/kendo-popup-common/dist/es2015/document.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scrollbar-width.js","./node_modules/@progress/kendo-popup-common/dist/es2015/window-viewport.js","./node_modules/@progress/kendo-popup-common/dist/es2015/bounding-offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parents.js","./node_modules/@progress/kendo-popup-common/dist/es2015/scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/element-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent.js","./node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/parent-scroll-position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position-with-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position.js","./node_modules/@progress/kendo-popup-common/dist/es2015/remove-scroll.js","./node_modules/@progress/kendo-popup-common/dist/es2015/collision.js","./node_modules/@progress/kendo-popup-common/dist/es2015/restrict-to-view.js","./node_modules/@progress/kendo-popup-common/dist/es2015/siblings.js","./node_modules/@progress/kendo-popup-common/dist/es2015/sibling-container.js","./node_modules/@progress/kendo-popup-common/dist/es2015/utils.js","./node_modules/@progress/kendo-popup-common/dist/es2015/position-element.js","./node_modules/@progress/pako-esm/dist/pako-esm2015.js","./node_modules/@telerik/kendo-draggable/dist/es2015/main.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-string.js","./node_modules/@telerik/kendo-intl/dist/es2015/error-details.js","./node_modules/@telerik/kendo-intl/dist/es2015/errors.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/info.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/default-data.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load-numbers.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load-dates.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/territory.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/load.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-field-name.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-format-names.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/parse-range-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/currency.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/first-day.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/weekend-range.js","./node_modules/@telerik/kendo-intl/dist/es2015/cldr/number-symbols.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-negative-zero.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-currency-symbol.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/group-integer.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/is-currency-style.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/pad.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/round.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/standard-number-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/utils.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/custom-number-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-options.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/numbers/parse-number.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/format-string.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/date-pattern.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/date-name-type.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/format-names.js","./node_modules/@telerik/kendo-intl/dist/es2015/common/is-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/constants.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/format-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/time-utils.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/parse-date.js","./node_modules/@telerik/kendo-intl/dist/es2015/dates/split-date-format.js","./node_modules/@telerik/kendo-intl/dist/es2015/format.js","./node_modules/positioning/dist/positioning.js","./node_modules/calendar-utils/calendar-utils.js","./node_modules/@mattlewis92/dom-autoscroller/dist/bundle.es.js","./node_modules/rxjs/_esm2015/internal/operators/count.js","./node_modules/angular-draggable-droppable/__ivy_ngcc__/fesm2015/angular-draggable-droppable.js","./node_modules/angular-resizable-element/__ivy_ngcc__/fesm2015/angular-resizable-element.js","./node_modules/angular-calendar/__ivy_ngcc__/fesm2015/angular-calendar.js","./node_modules/angular2-text-mask/__ivy_ngcc__/dist/angular2TextMask.js","./node_modules/applicationinsights-js/bundle/ai.module.js","./node_modules/base64-arraybuffer/lib/base64-arraybuffer.js","./node_modules/file-saver/dist/FileSaver.min.js","./node_modules/jspdf/dist/jspdf.min.js","./node_modules/lodash/lodash.js","./node_modules/moment/locale/af.js","./node_modules/moment/locale/ar-dz.js","./node_modules/moment/locale/ar-kw.js","./node_modules/moment/locale/ar-ly.js","./node_modules/moment/locale/ar-ma.js","./node_modules/moment/locale/ar-sa.js","./node_modules/moment/locale/ar-tn.js","./node_modules/moment/locale/ar.js","./node_modules/moment/locale/az.js","./node_modules/moment/locale/be.js","./node_modules/moment/locale/bg.js","./node_modules/moment/locale/bm.js","./node_modules/moment/locale/bn-bd.js","./node_modules/moment/locale/bn.js","./node_modules/moment/locale/bo.js","./node_modules/moment/locale/br.js","./node_modules/moment/locale/bs.js","./node_modules/moment/locale/ca.js","./node_modules/moment/locale/cs.js","./node_modules/moment/locale/cv.js","./node_modules/moment/locale/cy.js","./node_modules/moment/locale/da.js","./node_modules/moment/locale/de-at.js","./node_modules/moment/locale/de-ch.js","./node_modules/moment/locale/de.js","./node_modules/moment/locale/dv.js","./node_modules/moment/locale/el.js","./node_modules/moment/locale/en-au.js","./node_modules/moment/locale/en-ca.js","./node_modules/moment/locale/en-gb.js","./node_modules/moment/locale/en-ie.js","./node_modules/moment/locale/en-il.js","./node_modules/moment/locale/en-in.js","./node_modules/moment/locale/en-nz.js","./node_modules/moment/locale/en-sg.js","./node_modules/moment/locale/eo.js","./node_modules/moment/locale/es-do.js","./node_modules/moment/locale/es-mx.js","./node_modules/moment/locale/es-us.js","./node_modules/moment/locale/es.js","./node_modules/moment/locale/et.js","./node_modules/moment/locale/eu.js","./node_modules/moment/locale/fa.js","./node_modules/moment/locale/fi.js","./node_modules/moment/locale/fil.js","./node_modules/moment/locale/fo.js","./node_modules/moment/locale/fr-ca.js","./node_modules/moment/locale/fr-ch.js","./node_modules/moment/locale/fr.js","./node_modules/moment/locale/fy.js","./node_modules/moment/locale/ga.js","./node_modules/moment/locale/gd.js","./node_modules/moment/locale/gl.js","./node_modules/moment/locale/gom-deva.js","./node_modules/moment/locale/gom-latn.js","./node_modules/moment/locale/gu.js","./node_modules/moment/locale/he.js","./node_modules/moment/locale/hi.js","./node_modules/moment/locale/hr.js","./node_modules/moment/locale/hu.js","./node_modules/moment/locale/hy-am.js","./node_modules/moment/locale/id.js","./node_modules/moment/locale/is.js","./node_modules/moment/locale/it-ch.js","./node_modules/moment/locale/it.js","./node_modules/moment/locale/ja.js","./node_modules/moment/locale/jv.js","./node_modules/moment/locale/ka.js","./node_modules/moment/locale/kk.js","./node_modules/moment/locale/km.js","./node_modules/moment/locale/kn.js","./node_modules/moment/locale/ko.js","./node_modules/moment/locale/ku.js","./node_modules/moment/locale/ky.js","./node_modules/moment/locale/lb.js","./node_modules/moment/locale/lo.js","./node_modules/moment/locale/lt.js","./node_modules/moment/locale/lv.js","./node_modules/moment/locale/me.js","./node_modules/moment/locale/mi.js","./node_modules/moment/locale/mk.js","./node_modules/moment/locale/ml.js","./node_modules/moment/locale/mn.js","./node_modules/moment/locale/mr.js","./node_modules/moment/locale/ms-my.js","./node_modules/moment/locale/ms.js","./node_modules/moment/locale/mt.js","./node_modules/moment/locale/my.js","./node_modules/moment/locale/nb.js","./node_modules/moment/locale/ne.js","./node_modules/moment/locale/nl-be.js","./node_modules/moment/locale/nl.js","./node_modules/moment/locale/nn.js","./node_modules/moment/locale/oc-lnc.js","./node_modules/moment/locale/pa-in.js","./node_modules/moment/locale/pl.js","./node_modules/moment/locale/pt-br.js","./node_modules/moment/locale/pt.js","./node_modules/moment/locale/ro.js","./node_modules/moment/locale/ru.js","./node_modules/moment/locale/sd.js","./node_modules/moment/locale/se.js","./node_modules/moment/locale/si.js","./node_modules/moment/locale/sk.js","./node_modules/moment/locale/sl.js","./node_modules/moment/locale/sq.js","./node_modules/moment/locale/sr-cyrl.js","./node_modules/moment/locale/sr.js","./node_modules/moment/locale/ss.js","./node_modules/moment/locale/sv.js","./node_modules/moment/locale/sw.js","./node_modules/moment/locale/ta.js","./node_modules/moment/locale/te.js","./node_modules/moment/locale/tet.js","./node_modules/moment/locale/tg.js","./node_modules/moment/locale/th.js","./node_modules/moment/locale/tk.js","./node_modules/moment/locale/tl-ph.js","./node_modules/moment/locale/tlh.js","./node_modules/moment/locale/tr.js","./node_modules/moment/locale/tzl.js","./node_modules/moment/locale/tzm-latn.js","./node_modules/moment/locale/tzm.js","./node_modules/moment/locale/ug-cn.js","./node_modules/moment/locale/uk.js","./node_modules/moment/locale/ur.js","./node_modules/moment/locale/uz-latn.js","./node_modules/moment/locale/uz.js","./node_modules/moment/locale/vi.js","./node_modules/moment/locale/x-pseudo.js","./node_modules/moment/locale/yo.js","./node_modules/moment/locale/zh-cn.js","./node_modules/moment/locale/zh-hk.js","./node_modules/moment/locale/zh-mo.js","./node_modules/moment/locale/zh-tw.js","./node_modules/moment/moment.js","./node_modules/ngx-auto-unsubscribe/dist/auto-unsubscribe.js","./node_modules/ngx-color-picker/__ivy_ngcc__/dist/ngx-color-picker.es5.js","./node_modules/ngx-order-pipe/__ivy_ngcc__/fesm2015/ngx-order-pipe.js","./node_modules/oidc-client/lib/oidc-client.min.js","./node_modules/pako/index.js","./node_modules/pako/lib/deflate.js","./node_modules/pako/lib/inflate.js","./node_modules/pako/lib/utils/common.js","./node_modules/pako/lib/utils/strings.js","./node_modules/pako/lib/zlib/adler32.js","./node_modules/pako/lib/zlib/constants.js","./node_modules/pako/lib/zlib/crc32.js","./node_modules/pako/lib/zlib/deflate.js","./node_modules/pako/lib/zlib/gzheader.js","./node_modules/pako/lib/zlib/inffast.js","./node_modules/pako/lib/zlib/inflate.js","./node_modules/pako/lib/zlib/inftrees.js","./node_modules/pako/lib/zlib/messages.js","./node_modules/pako/lib/zlib/trees.js","./node_modules/pako/lib/zlib/zstream.js","./node_modules/pdf-lib/es/api/rotations.js","./node_modules/pdf-lib/es/api/objects.js","./node_modules/pdf-lib/es/api/operators.js","./node_modules/pdf-lib/es/api/colors.js","./node_modules/pdf-lib/es/api/StandardFonts.js","./node_modules/pdf-lib/es/api/errors.js","./node_modules/pdf-lib/es/api/svgPath.js","./node_modules/pdf-lib/es/api/operations.js","./node_modules/pdf-lib/es/api/sizes.js","./node_modules/pdf-lib/es/api/PDFFont.js","./node_modules/pdf-lib/es/api/PDFImage.js","./node_modules/pdf-lib/es/api/PDFPage.js","./node_modules/pdf-lib/es/api/PDFDocument.js","./node_modules/pdf-lib/es/core/syntax/CharCodes.js","./node_modules/pdf-lib/es/core/errors.js","./node_modules/pdf-lib/es/core/document/PDFHeader.js","./node_modules/pdf-lib/es/core/objects/PDFObject.js","./node_modules/pdf-lib/es/core/objects/PDFArray.js","./node_modules/pdf-lib/es/core/objects/PDFBool.js","./node_modules/pdf-lib/es/core/objects/PDFDict.js","./node_modules/pdf-lib/es/core/syntax/Delimiters.js","./node_modules/pdf-lib/es/core/syntax/Whitespace.js","./node_modules/pdf-lib/es/core/syntax/Irregular.js","./node_modules/pdf-lib/es/core/objects/PDFName.js","./node_modules/pdf-lib/es/core/objects/PDFNull.js","./node_modules/pdf-lib/es/core/objects/PDFNumber.js","./node_modules/pdf-lib/es/core/objects/PDFStream.js","./node_modules/pdf-lib/es/core/objects/PDFRawStream.js","./node_modules/pdf-lib/es/core/objects/PDFRef.js","./node_modules/pdf-lib/es/core/operators/PDFOperator.js","./node_modules/pdf-lib/es/core/structures/PDFFlateStream.js","./node_modules/pdf-lib/es/core/structures/PDFContentStream.js","./node_modules/pdf-lib/es/core/PDFContext.js","./node_modules/pdf-lib/es/core/structures/PDFPageLeaf.js","./node_modules/pdf-lib/es/core/PDFObjectCopier.js","./node_modules/pdf-lib/es/core/document/PDFCrossRefSection.js","./node_modules/pdf-lib/es/core/document/PDFTrailer.js","./node_modules/pdf-lib/es/core/document/PDFTrailerDict.js","./node_modules/pdf-lib/es/core/structures/PDFObjectStream.js","./node_modules/pdf-lib/es/core/writers/PDFWriter.js","./node_modules/pdf-lib/es/core/objects/PDFInvalidObject.js","./node_modules/pdf-lib/es/core/structures/PDFCrossRefStream.js","./node_modules/pdf-lib/es/core/writers/PDFStreamWriter.js","./node_modules/pdf-lib/es/core/objects/PDFHexString.js","./node_modules/pdf-lib/es/core/embedders/StandardFontEmbedder.js","./node_modules/pdf-lib/es/core/embedders/CMap.js","./node_modules/pdf-lib/es/core/embedders/FontFlags.js","./node_modules/pdf-lib/es/core/objects/PDFString.js","./node_modules/pdf-lib/es/core/embedders/CustomFontEmbedder.js","./node_modules/pdf-lib/es/core/embedders/CustomFontSubsetEmbedder.js","./node_modules/pdf-lib/es/core/embedders/JpegEmbedder.js","./node_modules/png-ts/es/png.js","./node_modules/pdf-lib/es/core/embedders/PngEmbedder.js","./node_modules/pdf-lib/es/core/structures/PDFCatalog.js","./node_modules/pdf-lib/es/core/structures/PDFPageTree.js","./node_modules/pdf-lib/es/core/syntax/Numeric.js","./node_modules/pdf-lib/es/core/parser/BaseParser.js","./node_modules/pdf-lib/es/core/streams/Stream.js","./node_modules/pdf-lib/es/core/streams/DecodeStream.js","./node_modules/pdf-lib/es/core/streams/Ascii85Stream.js","./node_modules/pdf-lib/es/core/streams/AsciiHexStream.js","./node_modules/pdf-lib/es/core/streams/FlateStream.js","./node_modules/pdf-lib/es/core/streams/LZWStream.js","./node_modules/pdf-lib/es/core/streams/RunLengthStream.js","./node_modules/pdf-lib/es/core/streams/decode.js","./node_modules/pdf-lib/es/core/parser/ByteStream.js","./node_modules/pdf-lib/es/core/syntax/Keywords.js","./node_modules/pdf-lib/es/core/parser/PDFObjectParser.js","./node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js","./node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js","./node_modules/pdf-lib/es/core/parser/PDFParser.js","./node_modules/pdf-lib/es/utils/base64.js","./node_modules/pdf-lib/es/utils/objects.js","./node_modules/pdf-lib/es/utils/arrays.js","./node_modules/pdf-lib/es/utils/async.js","./node_modules/pdf-lib/es/utils/numbers.js","./node_modules/pdf-lib/es/utils/errors.js","./node_modules/pdf-lib/es/utils/validators.js","./node_modules/pdf-lib/es/utils/Cache.js","./node_modules/pdf-lib/es/utils/strings.js","./node_modules/pdf-lib/es/utils/unicode.js","./node_modules/print-js/dist/print.js","./node_modules/quill/dist/quill.js","./node_modules/rxjs/_esm2015/internal/BehaviorSubject.js","./node_modules/rxjs/_esm2015/internal/Notification.js","./node_modules/rxjs/_esm2015/internal/Observable.js","./node_modules/rxjs/_esm2015/internal/util/toSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/canReportError.js","./node_modules/rxjs/_esm2015/internal/Observer.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/queue.js","./node_modules/rxjs/_esm2015/internal/operators/observeOn.js","./node_modules/rxjs/_esm2015/internal/ReplaySubject.js","./node_modules/rxjs/_esm2015/internal/Subject.js","./node_modules/rxjs/_esm2015/internal/SubjectSubscription.js","./node_modules/rxjs/_esm2015/internal/Subscriber.js","./node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js","./node_modules/rxjs/_esm2015/internal/Subscription.js","./node_modules/rxjs/_esm2015/internal/config.js","./node_modules/rxjs/_esm2015/internal/innerSubscribe.js","./node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js","./node_modules/rxjs/_esm2015/internal/OuterSubscriber.js","./node_modules/rxjs/_esm2015/internal/InnerSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js","./node_modules/rxjs/_esm2015/internal/observable/combineLatest.js","./node_modules/rxjs/_esm2015/internal/observable/concat.js","./node_modules/rxjs/_esm2015/internal/operators/concatAll.js","./node_modules/rxjs/_esm2015/internal/observable/defer.js","./node_modules/rxjs/_esm2015/internal/observable/empty.js","./node_modules/rxjs/_esm2015/internal/observable/forkJoin.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js","./node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js","./node_modules/rxjs/_esm2015/internal/util/isIterable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/_esm2015/internal/observable/from.js","./node_modules/rxjs/_esm2015/internal/observable/fromArray.js","./node_modules/rxjs/_esm2015/internal/observable/fromEvent.js","./node_modules/rxjs/_esm2015/internal/observable/interval.js","./node_modules/rxjs/_esm2015/internal/observable/merge.js","./node_modules/rxjs/_esm2015/internal/observable/of.js","./node_modules/rxjs/_esm2015/internal/observable/throwError.js","./node_modules/rxjs/_esm2015/internal/observable/timer.js","./node_modules/rxjs/_esm2015/internal/observable/zip.js","./node_modules/rxjs/_esm2015/internal/operators/audit.js","./node_modules/rxjs/_esm2015/internal/operators/auditTime.js","./node_modules/rxjs/_esm2015/internal/operators/catchError.js","./node_modules/rxjs/_esm2015/internal/operators/concatMap.js","./node_modules/rxjs/_esm2015/internal/operators/debounceTime.js","./node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/_esm2015/internal/operators/delay.js","./node_modules/rxjs/_esm2015/internal/util/isDate.js","./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","./node_modules/rxjs/_esm2015/internal/operators/filter.js","./node_modules/rxjs/_esm2015/internal/operators/finalize.js","./node_modules/rxjs/_esm2015/internal/operators/first.js","./node_modules/rxjs/_esm2015/internal/operators/map.js","./node_modules/rxjs/_esm2015/internal/operators/mergeAll.js","./node_modules/rxjs/_esm2015/internal/operators/mergeMap.js","./node_modules/rxjs/_esm2015/internal/operators/pairwise.js","./node_modules/rxjs/_esm2015/internal/operators/refCount.js","./node_modules/rxjs/_esm2015/internal/operators/scan.js","./node_modules/rxjs/_esm2015/internal/operators/multicast.js","./node_modules/rxjs/_esm2015/internal/operators/share.js","./node_modules/rxjs/_esm2015/internal/operators/shareReplay.js","./node_modules/rxjs/_esm2015/internal/operators/skip.js","./node_modules/rxjs/_esm2015/internal/operators/startWith.js","./node_modules/rxjs/_esm2015/internal/operators/switchMap.js","./node_modules/rxjs/_esm2015/internal/operators/take.js","./node_modules/rxjs/_esm2015/internal/operators/takeLast.js","./node_modules/rxjs/_esm2015/internal/operators/takeUntil.js","./node_modules/rxjs/_esm2015/internal/operators/takeWhile.js","./node_modules/rxjs/_esm2015/internal/util/noop.js","./node_modules/rxjs/_esm2015/internal/operators/tap.js","./node_modules/rxjs/_esm2015/internal/operators/throttle.js","./node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","./node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js","./node_modules/rxjs/_esm2015/internal/scheduler/Action.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js","./node_modules/rxjs/_esm2015/internal/Scheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js","./node_modules/rxjs/_esm2015/internal/util/Immediate.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/asap.js","./node_modules/rxjs/_esm2015/internal/scheduler/async.js","./node_modules/rxjs/_esm2015/internal/symbol/iterator.js","./node_modules/rxjs/_esm2015/internal/symbol/observable.js","./node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js","./node_modules/rxjs/_esm2015/internal/util/EmptyError.js","./node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/_esm2015/internal/util/hostReportError.js","./node_modules/rxjs/_esm2015/internal/util/identity.js","./node_modules/rxjs/_esm2015/internal/util/isArray.js","./node_modules/rxjs/_esm2015/internal/util/isArrayLike.js","./node_modules/rxjs/_esm2015/internal/util/isFunction.js","./node_modules/rxjs/_esm2015/internal/util/isNumeric.js","./node_modules/rxjs/_esm2015/internal/util/isObject.js","./node_modules/rxjs/_esm2015/internal/util/isObservable.js","./node_modules/rxjs/_esm2015/internal/util/isPromise.js","./node_modules/rxjs/_esm2015/internal/util/isScheduler.js","./node_modules/rxjs/_esm2015/internal/util/pipe.js","./node_modules/rxjs/_esm2015/internal/util/subscribeTo.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js","./node_modules/text-mask-addons/dist/createNumberMask.js","./node_modules/text-mask-core/dist/textMaskCore.js","./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack:///tslib?ca4a","tslib","./node_modules/@angular/animations/fesm2015/animations.mjs","./node_modules/@angular/cdk/fesm2015/a11y.mjs","./node_modules/@angular/cdk/fesm2015/bidi.mjs","./node_modules/@angular/cdk/fesm2015/coercion.mjs","./node_modules/@angular/cdk/fesm2015/collections.mjs","./node_modules/@angular/cdk/fesm2015/drag-drop.mjs","./node_modules/@angular/cdk/fesm2015/keycodes.mjs","./node_modules/@angular/cdk/fesm2015/layout.mjs","./node_modules/@angular/cdk/fesm2015/observers.mjs","./node_modules/@angular/cdk/fesm2015/overlay.mjs","./node_modules/@angular/cdk/fesm2015/platform.mjs","./node_modules/@angular/cdk/fesm2015/portal.mjs","./node_modules/@angular/cdk/fesm2015/scrolling.mjs","./node_modules/@angular/cdk/fesm2015/table.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/material/fesm2015/autocomplete.mjs","./node_modules/@angular/material/fesm2015/badge.mjs","./node_modules/@angular/material/fesm2015/button-toggle.mjs","./node_modules/@angular/material/fesm2015/button.mjs","./node_modules/@angular/material/fesm2015/card.mjs","./node_modules/@angular/material/fesm2015/checkbox.mjs","./node_modules/@angular/material/fesm2015/chips.mjs","./node_modules/@angular/cdk/fesm2015/cdk.mjs","./node_modules/@angular/material/fesm2015/core.mjs","./node_modules/@angular/material/fesm2015/datepicker.mjs","./node_modules/@angular/material/fesm2015/dialog.mjs","./node_modules/@angular/material/fesm2015/divider.mjs","./node_modules/@angular/cdk/fesm2015/accordion.mjs","./node_modules/@angular/material/fesm2015/expansion.mjs","./node_modules/@angular/material/fesm2015/form-field.mjs","./node_modules/@angular/material/fesm2015/grid-list.mjs","./node_modules/@angular/material/fesm2015/icon.mjs","./node_modules/@angular/cdk/fesm2015/text-field.mjs","./node_modules/@angular/material/fesm2015/input.mjs","./node_modules/@angular/material/fesm2015/list.mjs","./node_modules/@angular/material/fesm2015/menu.mjs","./node_modules/@angular/material/fesm2015/paginator.mjs","./node_modules/@angular/material/fesm2015/progress-bar.mjs","./node_modules/@angular/material/fesm2015/progress-spinner.mjs","./node_modules/@angular/material/fesm2015/radio.mjs","./node_modules/@angular/material/fesm2015/select.mjs","./node_modules/rxjs/_esm2015/internal/operators/mapTo.js","./node_modules/@angular/material/fesm2015/sidenav.mjs","./node_modules/@angular/material/fesm2015/slide-toggle.mjs","./node_modules/@angular/material/fesm2015/slider.mjs","./node_modules/@angular/material/fesm2015/snack-bar.mjs","./node_modules/@angular/material/fesm2015/sort.mjs","./node_modules/@angular/cdk/fesm2015/stepper.mjs","./node_modules/@angular/material/fesm2015/stepper.mjs","./node_modules/@angular/material/fesm2015/table.mjs","./node_modules/@angular/material/fesm2015/tabs.mjs","./node_modules/@angular/material/fesm2015/tooltip.mjs","./node_modules/@angular/animations/fesm2015/browser.mjs","./node_modules/@angular/platform-browser/fesm2015/animations.mjs","./node_modules/@angular/platform-browser/fesm2015/platform-browser.mjs","./node_modules/@angular/router/fesm2015/router.mjs","./node_modules/rxjs/_esm2015/internal/operators/last.js","./node_modules/ngx-mask/fesm2015/ngx-mask.mjs","./node_modules/ngx-quill/fesm2015/ngx-quill.mjs","./node_modules/xlsx/xlsx.mjs","./node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../../shared-components/System';\r\nimport { Observable } from 'rxjs';\r\nimport { AdminAttendanceStudentPeriod, AttendanceMassEditFilter } from './attendance-mass-edit/attendance-mass-edit/attendance-mass-edit.model';\r\nimport { StudentAttendanceCodes } from './attendance-codes/attendance-codes.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { AttendanceCheckInOut, CheckInOutSettings } from './attendance-check-in-out/attendance-check-in-out.model';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { AllStudentsAttendanceHistory, AttendanceByStudent } from './attendance-by-student/attendance-by-student.model';\r\nimport { CheckInOutSubmissionRequest } from '../../student360/student-summary/check-in-out-submission-request-modal/check-in-out-submission-request-modal.model';\r\nimport { AbsentNotice } from './review-absent-notices/absent-notice.model';\r\nimport { AttendanceGenerateLetter, AttendanceLetters, AttendanceStepHistoryDetails } from './attendance-letters/attendance-letters.model';\r\nimport { EFormTemplate } from '../../shared-components/e-forms/e-form-template.model';\r\nimport { AttendanceHistory, AttendanceHistoryBySchool, AttendanceHistoryPeriod } from './attendance-history/attendance-history-by-school.model';\r\nimport { SpecialAdditionalAttendanceFilter } from './special-additional-attendance/special-attendance-filter.model';\r\nimport { SpecialAdditionalAttendance, SpecialAttendanceByClass, SpecialAttendanceCourse, SpecialAttendanceExtraMeetings, SpecialAttendanceFilterOptions } from './special-additional-attendance/special-additional-attendance.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AttendanceAdministrationService {\r\n\r\n attendanceMassEditFilter: AttendanceMassEditFilter;\r\n specialAdditionalAttendanceFilter: SpecialAdditionalAttendanceFilter;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) { }\r\n\r\n getAdminStudentAttendance(siteYearId: number, searchParams: AttendanceMassEditFilter): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Admin + 'GetAdminStudentAttendance' + queryString, searchParams);\r\n }\r\n\r\n getStudentAttendanceCodes(yearId: number, siteId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.Admin + 'GetStudentAttendanceCodes' + queryString);\r\n }\r\n\r\n getAttendanceCheckInOutByDate(attendanceDate: string): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&date=' + attendanceDate;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceCheckInOutByDate' + queryString);\r\n }\r\n\r\n saveCheckInOutHistoryAttachment(historyId: number, attachment: Attachment[]): Observable {\r\n const queryString = '?historyId=' + historyId;\r\n return this.http.post(System.apiURL.Admin + 'SaveCheckInOutHistoryAttachment' + queryString, attachment);\r\n }\r\n\r\n deleteCheckInOutRecordById(recordId: number, type: string): Observable {\r\n const queryString = '?recordId=' + recordId +\r\n '&type=' + type;\r\n return this.http.get(System.apiURL.Admin + 'DeleteCheckInOutRecordById' + queryString);\r\n }\r\n\r\n getSchoolDaysBetweenDates(siteYearId: number, startDate: string, endDate: string, studentId: number = 0, actionDays: number = 0): Observable {\r\n const queryString = '?siteYearId=' + siteYearId +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate +\r\n '&studentId=' + studentId +\r\n '&actionDays=' + actionDays;\r\n return this.http.get(System.apiURL.Admin + 'GetSchoolDaysBetweenDates' + queryString);\r\n }\r\n\r\n saveAdminStudentAttendance(siteYearId: number, attendance: AdminAttendanceStudentPeriod[]): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Admin + 'SaveAdminStudentAttendance' + queryString, attendance);\r\n }\r\n\r\n getAttendanceHistoryByStudentIdDate(studentId: number, attendanceDate: string, time: string, type: string, attendanceCodeId: number, dailyComment: string, overwritePriorPeriods: boolean, updatePeriodComment: boolean, periodCommentAppOROver: string, updateDailyComment: boolean, dailyCommentAppOROver: string, clearAtt = false, includeAttendanceHistoryLogs = false): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&studentId=' + studentId +\r\n '&attendanceDate=' + attendanceDate +\r\n '&time=' + time +\r\n '&type=' + type +\r\n '&attendanceCodeId=' + attendanceCodeId +\r\n '&dailyComment=' + dailyComment +\r\n '&overwritePriorPeriods=' + overwritePriorPeriods +\r\n '&updatePeriodComment=' + updatePeriodComment +\r\n '&periodCommentAppOROver=' + periodCommentAppOROver +\r\n '&updateDailyComment=' + updateDailyComment +\r\n '&dailyCommentAppOROver=' + dailyCommentAppOROver +\r\n '&clearAtt=' + clearAtt +\r\n '&includeAttendanceHistoryLogs=' + includeAttendanceHistoryLogs;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceHistoryByStudentIdDate' + queryString);\r\n }\r\n\r\n saveStudentAttendanceHistory(studentAttendance: AllStudentsAttendanceHistory[]): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Admin + 'SaveStudentAttendanceHistory' + queryString, studentAttendance);\r\n }\r\n\r\n saveAttendanceHistoryCheckInOutByStudentIdDate(studentId: number, attendanceDate: string, time: string, type: string, attendanceCodeId: number, dailyComment: string, missedMinutes: number, studentAttendance: AllStudentsAttendanceHistory, clearAtt = false): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&studentId=' + studentId +\r\n '&attendanceDate=' + attendanceDate +\r\n '&time=' + time +\r\n '&type=' + type +\r\n '&attendanceCodeId=' + attendanceCodeId +\r\n '&dailyComment=' + dailyComment +\r\n '&missedMinutes=' + missedMinutes +\r\n '&clearAtt=' + clearAtt;\r\n return this.http.post(System.apiURL.Admin + 'SaveAttendanceHistoryCheckInOutByStudentIdDate' + queryString, studentAttendance);\r\n }\r\n\r\n saveMassAttendanceHistoryCheckInOutByStudentIdDate(attendanceDate: string, checkInOutSettings: CheckInOutSettings[], clearAtt = false): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&attendanceDate=' + attendanceDate +\r\n '&clearAtt=' + clearAtt;\r\n return this.http.post(System.apiURL.Admin + 'SaveMassAttendanceHistoryCheckInOutByStudentIdDate' + queryString, checkInOutSettings);\r\n }\r\n\r\n getAttendanceSelfCheckInOutByStudentId(studentId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceCheckInOutSubmissionByStudentId' + queryString);\r\n }\r\n\r\n getCheckInOutHistoryAttachmentById(historyId: number, type: string): Observable {\r\n const queryString = '?historyId=' + historyId +\r\n '&type=' + type;\r\n return this.http.get(System.apiURL.Admin + 'GetCheckInOutHistoryAttachmentById' + queryString);\r\n }\r\n\r\n getAbsentNoticesByStudentIdAndYearId(studentId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetAbsentNoticesByStudentIdAndYearId' + queryString);\r\n }\r\n\r\n getAbsentNoticeAttachmentById(id: number): Observable {\r\n const queryString = '?id=' + id;\r\n return this.http.get(System.apiURL.Admin + 'GetAbsentNoticeAttachmentById' + queryString);\r\n }\r\n\r\n processSubmissionRecord(historyId: number, submissionId: number): Observable {\r\n const queryString = '?historyId=' + historyId +\r\n '&submissionId=' + submissionId;\r\n return this.http.get(System.apiURL.Admin + 'ProcessSubmissionRecord' + queryString);\r\n }\r\n\r\n getAttendanceCheckInOutHistoryByStudentId(schoolId: number, studentId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + schoolId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceCheckInOutHistoryByStudentId' + queryString);\r\n }\r\n\r\n getAllPeriodsByYear(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetAllPeriodsByYear' + queryString);\r\n }\r\n\r\n getAttendanceStepRunHistoryBySiteYearId(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceStepRunHistoryBySiteYearId' + queryString);\r\n }\r\n\r\n runGroupStepRunUsingWorkFlow(startDate: string, endDate: string, attendanceStepDefinitionId: number, studentIds: string): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate +\r\n '&attendanceStepDefinitionId=' + attendanceStepDefinitionId +\r\n '&studentIds=' + studentIds;\r\n return this.http.get(System.apiURL.Admin + 'RunGroupStepRunUsingWorkFlow' + queryString);\r\n }\r\n\r\n deleteAttendanceStepHistory(stepHistory: AttendanceLetters[]): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId;\r\n return this.http.post(System.apiURL.Admin + 'DeleteAttendanceStepHistory' + queryString, stepHistory);\r\n }\r\n\r\n getAttendanceLetterTemplates(templateId: number = 0): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&templateId=' + templateId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceLetterTemplates' + queryString);\r\n }\r\n\r\n saveAttendanceLetterTemplate(template: EFormTemplate): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveAttendanceLetterTemplate', template);\r\n }\r\n\r\n getAttendanceStepHistoryDetails(trackingType: number, gradeId: number, attendanceStepHistoryId: number, batchRunDate: Date, stepSequence: number, attendanceStepDefId: number, filterByBatchDate: boolean): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId +\r\n '&trackingType=' + trackingType +\r\n '&gradeId=' + gradeId +\r\n '&attendanceStepHistoryId=' + attendanceStepHistoryId +\r\n '&batchRunDate=' + batchRunDate +\r\n '&stepSequence=' + stepSequence +\r\n '&attendanceStepDefId=' + attendanceStepDefId +\r\n '&filterByBatchDate=' + filterByBatchDate;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceStepHistoryDetails' + queryString);\r\n }\r\n\r\n getAttendanceStepHistoryDetailsByStudent(studentId: number): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceStepHistoryDetailsByStudent' + queryString);\r\n }\r\n\r\n getAttendanceHistoryByStudentAndYear(studentId: number, yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceHistoryByStudentAndYear' + queryString);\r\n }\r\n\r\n getAttendanceChangeHistoryByStudentAndDate(studentId: number, attendanceDate: Date): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&attendanceDate=' + attendanceDate;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceChangeHistoryByStudentAndDate' + queryString);\r\n }\r\n\r\n getAttendancePeriodsByStudentIdAndDailyCalendarId(studentId: number, dailyCalendarId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&dailyCalendarId=' + dailyCalendarId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendancePeriodsByStudentIdAndDailyCalendarId' + queryString);\r\n }\r\n\r\n updateAttendanceStepHistoryById(id: number, appealedStatus: number, approveByPeopleId: number, comment: string, aprrovedDate: string, reviewdDate: string): Observable {\r\n const queryString = '?id=' + id +\r\n '&appealedStatus=' + appealedStatus +\r\n '&approveByPeopleId=' + approveByPeopleId +\r\n '&comment=' + comment +\r\n '&aprrovedDate=' + aprrovedDate +\r\n '&reviewdDate=' + reviewdDate;\r\n return this.http.get(System.apiURL.Admin + 'UpdateAttendanceStepHistoryById' + queryString);\r\n }\r\n\r\n deleteAttendanceStepHistoryByIds(ids: number[], trackingType: number, batchRunDate: Date): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId +\r\n '&trackingType=' + trackingType +\r\n '&batchRunDate=' + batchRunDate;\r\n return this.http.post(System.apiURL.Admin + 'DeleteAttendanceStepHistoryByIds' + queryString, ids);\r\n }\r\n\r\n deleteAttendanceHistoryByStudentIdAndDailyCalendarId(studentId: number, dailyCalendarId: number, siteYearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&dailyCalendarId=' + dailyCalendarId +\r\n '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteAttendanceHistoryByStudentIdAndDailyCalendarId' + queryString);\r\n }\r\n\r\n public saveAttendanceLetters(attendanceLetters: AttendanceGenerateLetter[]): Observable {\r\n const queryString = '?siteYearId=' + this.yearService.defaultYear.SiteYearId;\r\n return this.http.post(System.apiURL.Admin + 'SaveAttendanceLetters' + queryString, attendanceLetters);\r\n }\r\n\r\n getSpecialAttendanceByStudentsAndDates(siteYearId: number, startDate: string, endDate: string, lastName: string, firstName: string, studentNumber: string, codeId: number = 0): Observable {\r\n const queryString = '?siteYearId=' + siteYearId\r\n + '&startDate=' + startDate\r\n + '&endDate=' + endDate\r\n + '&lastName=' + lastName\r\n + '&firstName=' + firstName\r\n + '&studentNumber=' + studentNumber\r\n + '&codeId=' + codeId;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceByStudentsAndDates' + queryString);\r\n }\r\n\r\n massUpdateSpecialAttendance(specialAttendance: SpecialAdditionalAttendance[], action: number): Observable {\r\n const queryString = '?action=' + action;\r\n return this.http.post(System.apiURL.Admin + 'MassUpdateSpecialAttendanceLogs' + queryString, specialAttendance);\r\n }\r\n\r\n deleteSpecialAttendance(specialAttendanceIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'DeleteSpecialAttendance', specialAttendanceIds);\r\n }\r\n\r\n getSpecialAttendanceBySiteSectionIdAndDate(siteSectionId: number, meetingDate: string): Observable {\r\n const queryString = '?siteSectionId=' + siteSectionId\r\n + '&meetingDate=' + meetingDate;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceBySiteSectionIdAndDate' + queryString);\r\n }\r\n\r\n getAttendanceExtraMeetingReadBySiteSectionId(siteSectionId: number): Observable {\r\n const queryString = '?siteSectionId=' + siteSectionId;\r\n return this.http.get(System.apiURL.Admin + 'GetAttendanceExtraMeetingReadBySiteSectionId' + queryString);\r\n }\r\n\r\n getSpecialAttendanceClassesBySiteYearIdAndFilter(siteYearId: number, startDate: string, endDate: string, filter: SpecialAdditionalAttendanceFilter): Observable {\r\n const queryString = '?siteYearId=' + siteYearId\r\n + '§ion=' + filter.section\r\n + '&code=' + filter.subjectCode\r\n + '&title=' + filter.courseName\r\n + '&startDate=' + startDate\r\n + '&endDate=' + endDate;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceClassesBySiteYearIdAndFilter' + queryString);\r\n }\r\n\r\n getSpecialAttendanceFilterOptionsBySiteYearId(siteYearId: number): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceFilterOptionsBySiteYearId' + queryString);\r\n }\r\n\r\n getSpecialAttendanceCoursesBySiteYearId(siteYearId: number): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceCoursesBySiteYearId' + queryString);\r\n }\r\n\r\n getSpecialAttendanceCoursesByStudentIdAndSiteYearId(studentId: number, siteYearId: number): Observable {\r\n const queryString = '?studentId=' + studentId\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'GetSpecialAttendanceCoursesByStudentIdAndSiteYearId' + queryString);\r\n }\r\n\r\n addSpecialAttendanceExtraMeeting(extraMeeting: SpecialAttendanceExtraMeetings): Observable {\r\n return this.http.post(System.apiURL.Admin + 'AddSpecialAttendanceExtraMeeting', extraMeeting);\r\n }\r\n\r\n updateSpecialAttendanceExtraMeeting(extraMeeting: SpecialAttendanceExtraMeetings): Observable {\r\n return this.http.post(System.apiURL.Admin + 'UpdateSpecialAttendanceExtraMeeting', extraMeeting);\r\n }\r\n\r\n deleteSpecialAttendanceExtraMeeting(extraMeetingId: number): Observable {\r\n const queryString = '?extraMeetingId=' + extraMeetingId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteSpecialAttendanceExtraMeeting' + queryString);\r\n }\r\n}","import { Attachment } from \"../../../shared-components/models/attachment.model\";\r\n\r\nexport class AbsentNotice {\r\n Id: number;\r\n StudentId: number;\r\n SubmittedPeopleId: number;\r\n SubmittedName: string;\r\n StudentNumber: string;\r\n FirstName: string;\r\n MiddleName: string;\r\n LastName: string;\r\n NickName: string;\r\n Deleted: boolean;\r\n StartDate: Date;\r\n EndDate: Date;\r\n Reason: string;\r\n Status: string;\r\n LastUpdated: Date;\r\n LastUpdatedBy: number;\r\n Attachment: boolean;\r\n Attachments: Attachment[] = [];\r\n\r\n // Non DTO Field\r\n StudentName: string;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../../shared-components/System';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { AbsentNotice } from './absent-notice.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReviewAbsentNoticesService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) { }\r\n\r\n getAbsentNoticesByYearAndDate(startDate: string, endDate: string): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate;\r\n return this.http.get(System.apiURL.Admin + 'GetAbsentNoticesByYearAndDate' + queryString);\r\n }\r\n\r\n saveAbsentNotice(notice: AbsentNotice): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveAbsentNotice', notice);\r\n }\r\n\r\n getAbsentNoticeByStudentId(studentId: number): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n\r\n return this.http.get(System.apiURL.Admin + 'GetAbsentNoticeByStudentId' + queryString);\r\n } \r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../../shared-components/System';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomDesignPage } from './models/custom-design-page.model';\r\nimport { CSTField } from '../../shared-modules/customization-framework/models/custom-data-field.model';\r\nimport { CSTCustomPage } from '../../shared-modules/customization-framework/models/cst-custom-page.model';\r\nimport { CustomizationFrameworkService } from '../../shared-modules/customization-framework/customization-framework.service';\r\nimport { CSTFieldInUse } from './models/cst-field-in-use.model';\r\n\r\n@Injectable()\r\nexport class CustomizationService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) { }\r\n\r\n getDesignPageByIDs(basePageOnly: boolean = false, pageIDs: number[] = [], includeAllUserPagesForID: boolean = false): Observable {\r\n return this.customizationFrameworkService.getDesignPageByIDs(basePageOnly, pageIDs, includeAllUserPagesForID);\r\n }\r\n\r\n saveDesignPage(designPage: CustomDesignPage, basePageOnly: boolean): Observable {\r\n const queryString = '?basePageOnly=' + basePageOnly;\r\n return this.http.post(System.apiURL.Admin + 'SaveDesignPage' + queryString, designPage);\r\n }\r\n\r\n saveDesignPageTemplate(designPageTemplate: CustomDesignPage): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveDesignPageTemplate', designPageTemplate);\r\n }\r\n\r\n toggleActiveDesignPageTemplate(designPageTemplateId: number): Observable {\r\n const queryString = '?designPageTemplateId=' + designPageTemplateId;\r\n return this.http.get(System.apiURL.Admin + 'ToggleActiveDesignPageTemplate' + queryString);\r\n }\r\n\r\n saveCustomDataField(field: CSTField): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveCustomDataField', field);\r\n }\r\n\r\n getCustomPages(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetCustomPages');\r\n }\r\n\r\n getCustomPage(customPageId: number): Observable {\r\n const queryString = '?customPageId=' + customPageId;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomPage' + queryString);\r\n }\r\n\r\n deleteCustomPage(customPageId: number): Observable {\r\n const queryString = '?customPageId=' + customPageId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteCustomPage' + queryString);\r\n }\r\n\r\n saveCustomPage(page: CSTCustomPage): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveCustomPage', page);\r\n }\r\n\r\n customPageNameExists(page: CSTCustomPage): Observable {\r\n return this.http.post(System.apiURL.Admin + 'CustomPageNameExists', page);\r\n }\r\n\r\n getPagesWhereCustomFieldIsUsed(fieldName: string): Observable {\r\n const queryString = '?fieldName=' + fieldName;\r\n return this.http.get(System.apiURL.Admin + 'GetPagesWhereCustomFieldIsUsed' + queryString);\r\n }\r\n\r\n isCustomFieldDisplayNameExists(displayName: string, objectId: number, fieldId: number): Observable {\r\n const queryString = '?displayName=' + displayName\r\n + '&objectId=' + objectId\r\n + '&fieldId=' + fieldId;\r\n return this.http.get(System.apiURL.Admin + 'IsCustomFieldDisplayNameExists' + queryString);\r\n }\r\n}","

{{selectedDataDef != null && selectedDataDef.Id > 0 ? 'Edit' : 'Add'}} Code

\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n {{ code.CodeDescription }}\r\n \r\n \r\n \r\n State\r\n Reporting\r\n \r\n Default\r\n \r\n \r\n \r\n Active\r\n Inactive\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\nimport { LookupService } from '../../../../shared-components/lookup/lookup.service';\r\nimport { DataDefinition, DataDefinitionList } from '../../data-definition.model';\r\nimport { DataDefinitionService } from '../../data-definition.service';\r\n\r\n@Component({\r\n selector: 'app-add-edit-data-definition',\r\n templateUrl: './add-edit-data-definition.component.html'\r\n})\r\nexport class AddEditDataDefinitionComponent implements OnInit {\r\n dataDefList: DataDefinitionList;\r\n dataDef: DataDefinition[];\r\n selectedDataDef: DataDefinition;\r\n showUseForStateReporting: boolean;\r\n codeRequired: boolean;\r\n stateReportingCodes: Lookup[];\r\n errors: ErrorList[] = [];\r\n viewOnly: boolean;\r\n @ViewChild('codeRef', { read: ElementRef }) codeRef: ElementRef;\r\n @ViewChild('descriptionRef', { read: ElementRef }) descriptionRef: ElementRef;\r\n\r\n constructor(\r\n private lookupService: LookupService,\r\n private dataDefinitionService: DataDefinitionService,\r\n private dialog: MatDialogRef\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.viewOnly = (this.dataDefList.LockSystemCodes && this.selectedDataDef.IsSysGen) ? true : false;\r\n this.showUseForStateReporting = this.dataDefList.ShowUsedForStateReporting;\r\n this.codeRequired = !this.dataDefList.CodeNotRequired;\r\n if (this.dataDefList.StateReportingType > 0) {\r\n this.lookupService.getStateReportingCodes(this.dataDefList.StateReportingType, 0, 'MO', false).subscribe(codes => {\r\n if (codes && codes.length > 0) {\r\n this.stateReportingCodes = codes;\r\n }\r\n });\r\n }\r\n }\r\n\r\n StateReportingChange() {\r\n this.selectedDataDef.StateIdentifier = '';\r\n }\r\n\r\n cancelClick() {\r\n this.dialog.close('cancel');\r\n }\r\n\r\n saveClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n if (this.codeRequired) {\r\n const codeExists = this.dataDef.find(o => o.Code != null && o.Code.toUpperCase() == this.selectedDataDef.Code.toUpperCase() && o.Id != this.selectedDataDef.Id);\r\n if (codeExists) {\r\n this.errors.push({\r\n fieldName: 'Code',\r\n fieldRef: this.codeRef,\r\n errorMsg: 'Code already exists.'\r\n });\r\n } else {\r\n this.dialog.close('save');\r\n }\r\n }\r\n else {\r\n this.dialog.close('save');\r\n }\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n if (this.codeRequired && !this.selectedDataDef.Code) {\r\n this.errors.push({\r\n fieldName: 'Code',\r\n fieldRef: this.codeRef,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n if (!this.selectedDataDef.Description) {\r\n this.errors.push({\r\n fieldName: 'Description',\r\n fieldRef: this.descriptionRef,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \"Re-Order\"\r\n \r\n \r\n\r\n \r\n \r\n \r\n Code\r\n \r\n \r\n {{element.Code}} \r\n \r\n\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n {{element.Description}} \r\n \r\n\r\n \r\n \r\n \r\n Abbreviation\r\n \r\n \r\n {{element.Abbreviation}} \r\n \r\n\r\n \r\n \r\n \r\n State Reporting\r\n \r\n \r\n {{element.IsStateReporting ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n \r\n Default\r\n \r\n \r\n {{element.IsDefault ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n \r\n Inactive\r\n \r\n \r\n {{element.Inactive ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n Actions \r\n \r\n {{(element.IsSysGen)? 'View' :\r\n 'Edit'}}\r\n Edit\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Drag rows up or down to change the display\r\n order\r\n
\r\n
","/* eslint-disable camelcase */\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport * as _ from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { CustomizationFrameworkService } from '../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { DataDefinition, DataDefinitionList } from '../data-definition.model';\r\nimport { DataDefinitionService } from '../data-definition.service';\r\nimport { AddEditDataDefinitionComponent } from './add-edit-data-definition/add-edit-data-definition.component';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'data-definition-static',\r\n templateUrl: './data-definition-static.component.html',\r\n styleUrls: ['./data-definition-static.component.css']\r\n})\r\nexport class DataDefinitionStaticComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n dataDefList: DataDefinitionList;\r\n dataDef: DataDefinition[] = [];\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource(this.dataDef);\r\n columnsToDisplay: string[];\r\n subscriptions: Subscription[] = [];\r\n sequenceChanged: boolean;\r\n\r\n @Input() DataDefList: DataDefinitionList;\r\n @Input() set addClick(trigger: EventEmitter) {\r\n this.subscriptions.push(trigger.subscribe(o => {\r\n this.addDataDef();\r\n }));\r\n }\r\n\r\n @Input() set saveSequenceClick(trigger: EventEmitter) {\r\n this.subscriptions.push(trigger.subscribe(o => {\r\n this.saveDataDefinition(this.dataDefList.Enum, this.dataDef);\r\n }));\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n // --------------LifeCycle---------------------------------------\r\n constructor(\r\n private dialog: MatDialog,\r\n private sharedService: SharedService,\r\n private lookupService: LookupService,\r\n private dataDefinitionService: DataDefinitionService,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) { }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges() {\r\n if (this.DataDefList) {\r\n this.dataDefList = this.DataDefList;\r\n this.getDataDefinition();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n getDataDefinition() {\r\n this.setColumnsToDisplay();\r\n this.subscriptions.push(this.dataDefinitionService.getDataDefinition(this.dataDefList.Enum, 0, 0, 0).subscribe(res => {\r\n if (res && res.length > 0) {\r\n this.dataDef = res;\r\n } else {\r\n this.dataDef = [];\r\n }\r\n this.customizationFrameworkService.dataDefinitionListValues[this.dataDefList.Enum] = this.dataDef;\r\n this.dataSource.data = this.dataDef;\r\n }));\r\n }\r\n\r\n addDataDef() {\r\n const newDataDef = new DataDefinition();\r\n newDataDef.LookupListId = this.dataDefList.Id;\r\n newDataDef.Inactive = false;\r\n\r\n const dialogRef = this.dialog.open(AddEditDataDefinitionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n dialogRef.componentInstance.dataDefList = this.dataDefList;\r\n dialogRef.componentInstance.dataDef = this.dataDef;\r\n dialogRef.componentInstance.selectedDataDef = newDataDef;\r\n\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n const dataDefRows: DataDefinition[] = [];\r\n dataDefRows.push(dialogRef.componentInstance.selectedDataDef);\r\n this.saveDataDefinition(this.dataDefList.Enum, dataDefRows);\r\n }\r\n }));\r\n }\r\n\r\n editClick(dataDef: DataDefinition) {\r\n const dialogRef = this.dialog.open(AddEditDataDefinitionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n dialogRef.componentInstance.dataDefList = this.dataDefList;\r\n dialogRef.componentInstance.dataDef = this.dataDef;\r\n dialogRef.componentInstance.selectedDataDef = _.cloneDeep(dataDef);\r\n\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n const dataDefRows: DataDefinition[] = [];\r\n dataDefRows.push(dialogRef.componentInstance.selectedDataDef);\r\n this.saveDataDefinition(this.dataDefList.Enum, dataDefRows);\r\n }\r\n }));\r\n }\r\n\r\n saveDataDefinition(enum_value: string, dataDefRows: DataDefinition[]) {\r\n this.subscriptions.push(this.dataDefinitionService.saveDataDefinition(enum_value, dataDefRows).subscribe(result => {\r\n if (result) {\r\n // clear in-memory value to force data def dropdown to get new values\r\n this.customizationFrameworkService.dataDefinitionListValues[enum_value] = null;\r\n if (this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == enum_value)) {\r\n this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == enum_value).DataDefinitions = null;\r\n }\r\n this.sharedService.showGoodSnackbar();\r\n this.getDataDefinition();\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n\r\n clearFilter() {\r\n this.dataSource.removeAllFilters();\r\n }\r\n\r\n setColumnsToDisplay() {\r\n this.columnsToDisplay = [];\r\n if (!this.dataDefList.ReadOnly && this.dataDefList.IsSortable) {\r\n this.columnsToDisplay.push('drag-handle');\r\n }\r\n if (this.dataDefList.ShowCodeField) {\r\n this.columnsToDisplay.push('Code');\r\n }\r\n if (this.dataDefList.ShowDescriptionField) {\r\n this.columnsToDisplay.push('Description');\r\n }\r\n if (this.dataDefList.ShowAbbreviationField) {\r\n this.columnsToDisplay.push('Abbreviation');\r\n }\r\n if (this.dataDefList.ShowUsedForStateReporting) {\r\n this.columnsToDisplay.push('IsStateReporting');\r\n }\r\n if (this.dataDefList.ShowDefaultField) {\r\n this.columnsToDisplay.push('IsDefault');\r\n }\r\n if (this.dataDefList.ShowStatusField) {\r\n this.columnsToDisplay.push('Inactive');\r\n }\r\n if (this.dataDefList.UserCanEdit && !this.dataDefList.ReadOnly) {\r\n this.columnsToDisplay.push('Actions');\r\n }\r\n }\r\n\r\n rowDrop(event: CdkDragDrop) {\r\n // PRE: one of the row is dragged and dropped within the table\r\n // POST: rearranges the order of the sort fields and sets the query to changed\r\n // NOTE: we have to manually obtain the previous index because the event.previousIndex is wrong\r\n\r\n const field = event.item.data;\r\n const previousIndex = this.dataDef.indexOf(field);\r\n moveItemInArray(this.dataDef, previousIndex, event.currentIndex);\r\n this.dataDef.forEach((ec, index) => {\r\n ec.Sequence = index;\r\n });\r\n this.dataSource.data = this.dataDef;\r\n this.sequenceChanged = true;\r\n }\r\n}","

{{dataDefId != null && dataDefId > 0 ? 'Edit' : 'Add'}} Code

\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{field.DisplayName}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n {{ row.Code }} - {{ row.Description }}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n","import { Component, OnInit, QueryList, ViewChildren } from '@angular/core';\r\nimport { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { DataDefinitionDynamicColumn, DataDefinitionList } from '../../data-definition.model';\r\n\r\n@Component({\r\n selector: 'app-add-edit-dynamic-data-definition',\r\n templateUrl: './add-edit-dynamic-data-definition.component.html',\r\n styleUrls: ['./add-edit-dynamic-data-definition.component.css']\r\n})\r\nexport class AddEditDynamicDataDefinitionComponent implements OnInit {\r\n dataDefList: DataDefinitionList;\r\n dataDefId: number; // Primary Key Column Value\r\n dataDef: any;\r\n allDataDef: any;\r\n dataDefBindings: any;\r\n fields: DataDefinitionDynamicColumn[] = [];\r\n displayFields: DataDefinitionDynamicColumn[] = [];\r\n errors: ErrorList[] = [];\r\n dynamicFieldForm: FormGroup;\r\n minLengthErrorMessage: { key: string, errorMessage: string }[] = [];\r\n viewOnly = false;\r\n\r\n @ViewChildren('input') inputControls: QueryList;\r\n\r\n constructor(\r\n private dialog: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.displayFields = this.fields.filter(f => f.DisplayOnForm).sort((a, b) => a.FormSequence - b.FormSequence);\r\n this.viewOnly = (this.dataDefList.LockSystemCodes && this.dataDef.IsSysGen == true) ? true : false;\r\n this.dataDefId = this.dataDef[this.fields[0].ColumnName];\r\n this.dynamicFieldForm = new FormGroup({});\r\n this.displayFields.forEach(field => {\r\n const validators = this.setControlValidations(field);\r\n if (validators.length > 0) {\r\n this.dynamicFieldForm.addControl(field.ColumnName, new FormControl({ value: '', disabled: !field.Editable || this.viewOnly }, validators));\r\n } else {\r\n this.dynamicFieldForm.addControl(field.ColumnName, new FormControl({ value: '', disabled: !field.Editable || this.viewOnly }, null));\r\n }\r\n\r\n this.minLengthErrorMessage.push({ key: field.ColumnName, errorMessage: 'Required Field' });\r\n });\r\n\r\n this.onChanges();\r\n }\r\n\r\n onChanges(): void {\r\n this.dynamicFieldForm.valueChanges.subscribe(val => {\r\n Object.keys((this.dynamicFieldForm).controls).forEach(key => {\r\n if (this.dynamicFieldForm.get(key).errors != null) {\r\n if (this.dynamicFieldForm.get(key).errors.hasOwnProperty('minlength')) {\r\n const requiredLength = this.dynamicFieldForm.get(key).errors.minlength.requiredLength;\r\n const errorMessage = ' Should be atleast ' + requiredLength + ' characters long';\r\n this.minLengthErrorMessage.filter(x => x.key === key)[0].errorMessage = errorMessage;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n getErrorMessage(fieldName: string): string {\r\n return this.minLengthErrorMessage.filter(x => x.key === fieldName)[0].errorMessage;\r\n }\r\n\r\n getDataSource(fieldName: string): any {\r\n if (this.dataDefBindings.hasOwnProperty('length')) {\r\n for (let i = 0; i < this.dataDefBindings.length - 1; i++) {\r\n if (this.dataDefBindings[i].Field.FieldName === fieldName) {\r\n return this.dataDefBindings[i].Bindings;\r\n }\r\n }\r\n } else {\r\n if (this.dataDefBindings.Field.FieldName === fieldName) {\r\n return this.dataDefBindings.Bindings;\r\n }\r\n }\r\n }\r\n\r\n // add validation to control based on field setting\r\n setControlValidations(field: DataDefinitionDynamicColumn): ValidatorFn[] {\r\n const validators: ValidatorFn[] = [];\r\n if (field.Required) { validators.push(Validators.required); }\r\n if (field.MinLength) { validators.push(Validators.minLength(field.MinLength)); }\r\n\r\n return validators;\r\n }\r\n\r\n errorLinkClick(fieldName: string) {\r\n const control = this.inputControls.find(x => x.nativeElement.name == fieldName);\r\n if (control) {\r\n control.nativeElement.focus();\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n Object.keys((this.dynamicFieldForm).controls).forEach(control => {\r\n this.dynamicFieldForm.get(control).markAsTouched();\r\n const field = this.displayFields.filter(x => x.ColumnName === control)[0];\r\n const fieldValue = this.dataDef[field.ColumnName] != null ? this.dataDef[field.ColumnName] : '';\r\n let codeExists = null;\r\n if (typeof fieldValue === 'string' && fieldValue.length > 0) {\r\n codeExists = this.allDataDef.find(o => (this.dataDefId == null || o[this.fields[0].ColumnName] != this.dataDefId) && o[field.ColumnName] != null && o[field.ColumnName].toUpperCase() == fieldValue.toUpperCase());\r\n }\r\n if (typeof fieldValue === 'boolean' || typeof fieldValue === 'number') {\r\n codeExists = this.allDataDef.find(o => (this.dataDefId == null || o[this.fields[0].ColumnName] != this.dataDefId) && o[field.ColumnName] != null && o[field.ColumnName] == fieldValue);\r\n }\r\n if ((field && field.Required) && (fieldValue.toString().trim().length === 0)) {\r\n this.errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: null,\r\n errorMsg: 'is required.',\r\n clickCallback: () => {\r\n this.errorLinkClick(control);\r\n }\r\n });\r\n }\r\n if ((field && field.Required) && (codeExists)) {\r\n this.errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: null,\r\n errorMsg: 'already exists.',\r\n clickCallback: () => {\r\n this.errorLinkClick(control);\r\n }\r\n });\r\n }\r\n if ((field && field.MinLength > 0) && (fieldValue.toString().trim().length < field.MinLength)) {\r\n this.errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: null,\r\n errorMsg: field.DisplayName + ' must be at least ' + field.MinLength + ' characters.',\r\n clickCallback: () => {\r\n this.errorLinkClick(control);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n saveClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.dialog.close('save');\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialog.close('cancel');\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \"Re-Order\"\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n {{ column.DisplayName }}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n {{column.Cell(row)}}\r\n
\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n {{ column.DisplayName }}\r\n \r\n \r\n \r\n
{{column.Cell(row) === 'true' ? 'Y' : ''}}
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \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 { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport * as _ from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { CustomizationFrameworkService } from '../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { AddEditDynamicDataDefinitionComponent } from '../data-definition-dynamic/add-edit-dynamic-data-definition/add-edit-dynamic-data-definition.component';\r\nimport { DataDefinitionDynamicColumn, DataDefinitionList } from '../data-definition.model';\r\nimport { DataDefinitionService } from '../data-definition.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'data-definition-dynamic',\r\n templateUrl: './data-definition-dynamic.component.html',\r\n styleUrls: ['./data-definition-dynamic.component.css']\r\n})\r\nexport class DataDefinitionDynamicComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n dataDefList: DataDefinitionList;\r\n dataDef: any = [];\r\n dataDefBindings: any;\r\n subscriptions: Subscription[] = [];\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource(this.dataDef);\r\n displayedColumns: string[] = [];\r\n cols: string[] = [];\r\n columns: DataDefinitionDynamicColumn[] = [];\r\n columnMappings: any;\r\n\r\n @Input() DataDefList: DataDefinitionList;\r\n @Input() set addClick(trigger: EventEmitter) {\r\n this.subscriptions.push(trigger.subscribe(o => {\r\n this.addDataDef();\r\n }));\r\n }\r\n\r\n @Input() set saveSequenceClick(trigger: EventEmitter) {\r\n this.subscriptions.push(trigger.subscribe(o => {\r\n this.dataDef.forEach(row => {\r\n const tableName = this.dataDefList.TableName;\r\n const keyColName = this.columns[0].ColumnName;\r\n const keyColValue = row[this.columns[0].ColumnName];\r\n\r\n this.subscriptions.push(this.dataDefinitionService.saveDynamicDataDefinition(tableName, keyColName, keyColValue, row).subscribe(result => {\r\n // clear in-memory value to force data def dropdown to get new values\r\n this.customizationFrameworkService.dataDefinitionListValues[this.dataDefList.Enum] = null;\r\n if (this.customizationFrameworkService.dataDefinitionLists.find(d => d.Enum == this.dataDefList.Enum)) {\r\n this.customizationFrameworkService.dataDefinitionLists.find(d => d.Enum == this.dataDefList.Enum).DataDefinitions = null;\r\n }\r\n\r\n }));\r\n });\r\n\r\n setTimeout(() => {\r\n this.sharedService.showGoodSnackbar();\r\n }, 300);\r\n }));\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private sharedService: SharedService,\r\n private dataDefinitionService: DataDefinitionService,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) { }\r\n\r\n ngOnInit() { }\r\n\r\n ngOnChanges() {\r\n if (this.DataDefList && this.DataDefList.Id > 0) {\r\n this.dataDefList = this.DataDefList;\r\n this.getDataDefinition();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.dataSource && this.dataSource.data != null) {\r\n this.dataSource.sort = this.sort;\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n getColumnSettings() {\r\n this.columns = [];\r\n const columnSetting = JSON.parse(this.dataDefList.MetaData);\r\n const cols = columnSetting.map(c => c.ColumnName);\r\n cols.forEach((element, index) => {\r\n const columnName = columnSetting[index].ColumnName;\r\n const displayName = columnSetting[index].DisplayName;\r\n const dataType = columnSetting[index].DataType;\r\n const controlType = columnSetting[index].ControlType;\r\n const required = columnSetting[index].Required;\r\n const editable = columnSetting[index].Editable;\r\n const minLength = columnSetting[index].MinLength;\r\n const maxLength = columnSetting[index].MaxLength;\r\n const displayOnGrid = columnSetting[index].DisplayOnGrid;\r\n const displayOnForm = columnSetting[index].DisplayOnForm;\r\n const gridSequence = columnSetting[index].GridSequence;\r\n const formSequence = columnSetting[index].FormSequence;\r\n const cell = columnSetting[index].ColumnName;\r\n\r\n this.columns.push(new DataDefinitionDynamicColumn(columnName, displayName, dataType, controlType, required,\r\n editable, minLength, maxLength, displayOnGrid, displayOnForm, gridSequence, formSequence, cell));\r\n });\r\n\r\n // display columns in the order defined in MetaData\r\n this.columns.sort((a, b) => a.GridSequence - b.GridSequence);\r\n\r\n // display columns that should be visible on grid\r\n this.displayedColumns = this.columns.filter(c => c.DisplayOnGrid).map(c => c.ColumnName);\r\n this.displayedColumns.push('Actions');\r\n\r\n if (this.dataDefList.IsSortable) {\r\n this.displayedColumns.unshift('drag-handle');\r\n }\r\n }\r\n\r\n getDataDefinition() {\r\n this.dataDefinitionService.getDynamicDataDefinition(this.dataDefList.Id, 0).subscribe(res => {\r\n if (res) {\r\n const data = JSON.parse(res.LookupValuesJSON);\r\n if (data != null) {\r\n // if lockup table has atleast one row\r\n this.dataDef = data.LookupValues;\r\n this.dataDefBindings = data.LookupBindings;\r\n\r\n this.getColumnSettings();\r\n\r\n if (!(this.dataDef instanceof Array)) {\r\n // if not an array, convert object into an array\r\n this.dataDef = [this.dataDef];\r\n }\r\n\r\n this.dataDef.forEach(element => {\r\n this.columns.filter(c => c.DataType === 'boolean').map(c => c.ColumnName).forEach(x => {\r\n {\r\n element[x] = (element[x] === ('0' || 'false') ? false : true);\r\n }\r\n });\r\n });\r\n\r\n // assign datasource to table\r\n this.dataSource.data = this.dataDef;\r\n } else {\r\n // if lookup table is empty\r\n this.getColumnSettings();\r\n // assign datasource to table\r\n this.dataSource.data = [];\r\n }\r\n }\r\n });\r\n }\r\n\r\n addDataDef() {\r\n const newDataDef: any = {};\r\n this.columns.forEach(x => {\r\n newDataDef[x.ColumnName] = null;\r\n });\r\n\r\n const dialogRef = this.dialog.open(AddEditDynamicDataDefinitionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n dialogRef.componentInstance.dataDefList = _.cloneDeep(this.dataDefList);\r\n dialogRef.componentInstance.dataDef = Object.assign({}, newDataDef);\r\n dialogRef.componentInstance.allDataDef = _.cloneDeep(this.dataDef);\r\n dialogRef.componentInstance.dataDefBindings = _.cloneDeep(this.dataDefBindings);\r\n dialogRef.componentInstance.fields = this.columns;\r\n\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n this.saveDynamicDataDefinition(dialogRef.componentInstance.dataDef);\r\n }\r\n }));\r\n }\r\n\r\n editClick(dataDef: any) {\r\n const dialogRef = this.dialog.open(AddEditDynamicDataDefinitionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n dialogRef.componentInstance.dataDefList = _.cloneDeep(this.dataDefList);\r\n dialogRef.componentInstance.dataDef = _.cloneDeep(dataDef);\r\n dialogRef.componentInstance.allDataDef = _.cloneDeep(this.dataDef);\r\n dialogRef.componentInstance.dataDefBindings = _.cloneDeep(this.dataDefBindings);\r\n dialogRef.componentInstance.fields = this.columns;\r\n\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n this.saveDynamicDataDefinition(dialogRef.componentInstance.dataDef);\r\n }\r\n }));\r\n }\r\n\r\n deleteClick(dataDef: any) {\r\n const tableName = this.dataDefList.TableName;\r\n const colIdName = this.columns[0].ColumnName;\r\n const colIdValue = dataDef[this.columns[0].ColumnName];\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n\r\n this.dataDefinitionService.dataDefCodeInUse(this.dataDefList.Enum, colIdValue).subscribe(res => {\r\n if (res && res == true) {\r\n deleteConfirmDialog.componentInstance.headerLabel = ' DELETION NOT ALLOWED';\r\n deleteConfirmDialog.componentInstance.warning = true;\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'The record cannot be deleted because it is in use.';\r\n deleteConfirmDialog.componentInstance.headerCenterAlign = true;\r\n } else {\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Code';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete the record?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.dataDefinitionService.deleteDynamicDataDefinition(tableName, colIdName, colIdValue).subscribe(r => {\r\n if (r === 'Success') {\r\n this.sharedService.showGoodSnackbar();\r\n this.getDataDefinition();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n saveDynamicDataDefinition(dataDef: any) {\r\n const tableName = this.dataDefList.TableName;\r\n const keyColName = this.columns[0].ColumnName;\r\n const keyColValue = dataDef[this.columns[0].ColumnName];\r\n\r\n this.subscriptions.push(this.dataDefinitionService.saveDynamicDataDefinition(tableName, keyColName, keyColValue, dataDef).subscribe(result => {\r\n if (result) {\r\n // clear in-memory value to force data def dropdown to get new values\r\n this.customizationFrameworkService.dataDefinitionListValues[this.dataDefList.Enum] = null;\r\n if (this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == this.dataDefList.Enum)) {\r\n this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == this.dataDefList.Enum).DataDefinitions = null;\r\n }\r\n this.sharedService.showGoodSnackbar();\r\n this.getDataDefinition();\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n\r\n clearFilter() {\r\n this.dataSource.removeAllFilters();\r\n }\r\n\r\n rowDrop(event: CdkDragDrop) {\r\n // PRE: one of the row is dragged and dropped within the table\r\n // POST: rearranges the order of the sort fields and sets the query to changed\r\n // NOTE: we have to manually obtain the previous index because the event.previousIndex is wrong\r\n\r\n const field = event.item.data;\r\n const previousIndex = this.dataDef.indexOf(field);\r\n moveItemInArray(this.dataDef, previousIndex, event.currentIndex);\r\n this.dataDef.forEach((ec, index) => {\r\n ec.intSequence = index;\r\n });\r\n this.dataSource.data = this.dataDef;\r\n }\r\n\r\n getFilterType(dataType: string): 'string' | 'number' | 'date' | 'boolean' | 'enumeration' | 'nullable boolean' {\r\n switch (dataType) {\r\n case 'float':\r\n case 'number': return 'number';\r\n case 'date': return 'date';\r\n case 'boolean': return 'boolean';\r\n case 'enumeration': return 'enumeration';\r\n case 'nullable boolean': return 'nullable boolean';\r\n default: return 'string';\r\n }\r\n }\r\n}\r\n","

{{selectedDataDefList.Name}}

\r\n\r\n \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, OnInit, OnDestroy, Inject, EventEmitter } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { DataDefinitionList } from './data-definition.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'data-definition',\r\n templateUrl: './data-definition.component.html',\r\n styleUrls: ['./data-definition.component.css']\r\n})\r\nexport class DataDefinitionComponent implements OnInit, OnDestroy {\r\n // dataDef: DataDefinition[] = [];\r\n // selectedDataDefListCategoryId: number;\r\n // selectedDataDefListId: number;\r\n selectedDataDefList: DataDefinitionList;\r\n // dataDefList: DataDefinitionList[] = [];\r\n // dataDefFilteredList: DataDefinitionList[] = [];\r\n // dataDefListCategories: DataDefinitionList[] = [];\r\n subscriptions: Subscription[] = [];\r\n addClick: EventEmitter = new EventEmitter();\r\n saveSequenceClick: EventEmitter = new EventEmitter();\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: DataDefinitionList,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n this.selectedDataDefList = data;\r\n }\r\n\r\n ngOnInit() {\r\n // this.getDataDefinitionList();\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n // getDataDefinitionList() {\r\n // this.subscriptions.push(this.dataDefinitionService.getDataDefinitionList().subscribe(dataDefList => {\r\n // if (dataDefList && dataDefList.length > 0) {\r\n // this.dataDefList = dataDefList;\r\n // this.dataDefListCategories = dataDefList.filter((value, i, arr) => {\r\n // return arr.indexOf(arr.find(t => t.LookupListCategoryName === value.LookupListCategoryName)) === i;\r\n // });\r\n\r\n // this.selectedDataDefListCategoryId = dataDefList[0].LookupListCategoryId;\r\n // this.selectedDataDefListId = dataDefList[0].Id;\r\n // this.selectedDataDefList = dataDefList[0];\r\n // this.dataDefFilteredList = this.dataDefList.filter(lst => lst.LookupListCategoryId === this.selectedDataDefListCategoryId);\r\n // }\r\n // }));\r\n // }\r\n\r\n // selectedDataDefListCategoryChanged(selectedDataDefListCategoryId: any) {\r\n // this.dataDefFilteredList = this.dataDefList.filter(lst => lst.LookupListCategoryId === selectedDataDefListCategoryId);\r\n // this.selectedDataDefListId = this.dataDefFilteredList[0].Id;\r\n // this.selectedDataDefList = this.dataDefFilteredList[0];\r\n // }\r\n\r\n // selectedDataDefListChanged(selectedLookupListId: any) {\r\n // this.selectedDataDefListId = selectedLookupListId;\r\n // this.selectedDataDefList = this.dataDefFilteredList.filter(lst => lst.Id === this.selectedDataDefListId)[0];\r\n // }\r\n}\r\n","export class DataDefinition {\r\n Id: number;\r\n LookupListId?: number;\r\n Code: string;\r\n Description?: string;\r\n Inactive?: boolean;\r\n IsDefault?: boolean;\r\n Abbreviation?: string;\r\n IsStateReporting?: boolean;\r\n StateReportingCodeId?: string;\r\n StateIdentifier?: string;\r\n Sequence?: number;\r\n YearId?: number;\r\n SiteYearId?: number;\r\n MasterId?: number;\r\n IsSysGen?: boolean;\r\n IsSelected?: boolean;\r\n}\r\n\r\nexport class DataDefinitionList {\r\n Id: number;\r\n Name: string;\r\n LookupListCategoryId: number;\r\n LookupListCategoryName = '';\r\n TableName = '';\r\n GetSPName = '';\r\n SetSPName = '';\r\n DeleteSPName = '';\r\n IsSysGen = false;\r\n ShowUsedForStateReporting = false;\r\n StateReportingType: number;\r\n CodeMinLength = 0;\r\n CodeMaxLength = 50;\r\n IsDynamic = false;\r\n MetaData = '';\r\n Enum = '';\r\n DataDefinitions: DataDefinition[];\r\n Type = '';\r\n NotVisible = false;\r\n InUse = false;\r\n CodeNotRequired = false;\r\n ReadOnly = false;\r\n IsSortable = false;\r\n ExclusiveTo360: boolean;\r\n ImportedFromClassic: boolean;\r\n DescriptionMaxLength = 50;\r\n UserCanEdit: boolean;\r\n ShowCodeField: boolean;\r\n ShowDescriptionField: boolean;\r\n ShowStatusField: boolean;\r\n ShowDefaultField: boolean;\r\n ShowAbbreviationField: boolean;\r\n LockSystemCodes: boolean;\r\n}\r\n\r\nexport class DataDefinitionDynamic {\r\n LookupValuesJSON: string;\r\n}\r\n\r\nexport class DataDefinitionDynamicColumn {\r\n ColumnName: string;\r\n DisplayName: string;\r\n DataType: string;\r\n ControlType: string;\r\n Required: boolean;\r\n Editable: boolean;\r\n MinLength: number;\r\n MaxLength: number;\r\n DisplayOnGrid: boolean;\r\n DisplayOnForm: boolean;\r\n GridSequence: number;\r\n FormSequence: number;\r\n Cell: any;\r\n\r\n constructor(columnName: string, displayName: string, dataType: string, controlType: string, required: boolean, editable: boolean,\r\n minLength: number, maxLength: number, displayOnGrid: boolean, displayOnForm: boolean,\r\n gridSequence: number, formSequence: number, cell: string) {\r\n this.ColumnName = columnName;\r\n this.DisplayName = displayName;\r\n this.DataType = dataType;\r\n this.ControlType = controlType;\r\n this.Required = required;\r\n this.Editable = editable;\r\n this.MinLength = minLength;\r\n this.MaxLength = maxLength;\r\n this.DisplayOnGrid = displayOnGrid;\r\n this.DisplayOnForm = displayOnForm;\r\n this.GridSequence = gridSequence;\r\n this.FormSequence = formSequence;\r\n this.Cell = (element: any) => `${element[cell]}`;\r\n }\r\n}\r\n\r\nexport class DataDefinitionCategory {\r\n Id: number;\r\n Name: string;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { DataDefinition, DataDefinitionCategory, DataDefinitionDynamic, DataDefinitionList } from './data-definition.model';\r\nimport { CustomizationFrameworkService } from '../../shared-modules/customization-framework/customization-framework.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DataDefinitionService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private yearService: YearService\r\n ) { }\r\n\r\n getDataDefinitionList(): Observable {\r\n return this.customizationFrameworkService.getDataDefinitionList(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID);\r\n }\r\n\r\n getDataDefinition(enum_value: string, yearId: number, siteYearId: number, masterId: number): Observable {\r\n let queryString = '';\r\n queryString += '?enum_value=' + enum_value +\r\n '&yearId=' + yearId +\r\n '&siteYearId=' + siteYearId +\r\n '&masterId=' + masterId;\r\n return this.http.get(System.apiURL.Admin + 'GetDataDefinition' + queryString);\r\n }\r\n\r\n getDynamicDataDefinition(lookuplistId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?lookuplistId=' + lookuplistId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetDynamicDataDefinition' + queryString);\r\n }\r\n\r\n saveDataDefinition(enum_value: string , dataDefRows: DataDefinition[]): Observable {\r\n let queryString = '';\r\n queryString += '?enum_value=' + enum_value;\r\n return this.http.post(System.apiURL.Admin + 'SaveDataDefinition' + queryString, dataDefRows);\r\n }\r\n\r\n saveDynamicDataDefinition(tableName: string, keyColName: string, keyColValue: number, dataDef: any): Observable {\r\n let queryString = '';\r\n queryString += '?tableName=' + tableName +\r\n '&keyColName=' + keyColName + '&keyColValue=' + keyColValue;\r\n return this.http.post(System.apiURL.Admin + 'SaveDynamicDataDefinition' + queryString, dataDef);\r\n }\r\n\r\n deleteDataDefinition(id: number): Observable {\r\n let queryString = '';\r\n queryString += '?id=' + id;\r\n return this.http.get(System.apiURL.Admin + 'DeleteDataDefinition' + queryString);\r\n }\r\n\r\n deleteDynamicDataDefinition(tableName: string, keyColName: string, keyColValue: number): Observable {\r\n let queryString = '';\r\n queryString += '?tableName=' + tableName +\r\n '&keyColName=' + keyColName + '&keyColValue=' + keyColValue;\r\n return this.http.get(System.apiURL.Admin + 'DeleteDynamicDataDefinition' + queryString);\r\n }\r\n\r\n getDataDefinitionCategories(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetDataDefinitionCategories');\r\n }\r\n\r\n dataDefNameExists(list: DataDefinitionList): Observable {\r\n return this.http.post(System.apiURL.Admin + 'DataDefNameExists', list);\r\n }\r\n\r\n saveDataDefinitionList(list: DataDefinitionList): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveDataDefinitionList', list);\r\n }\r\n\r\n dataDefCodeInUse(dataDefEnum: string, id: number): Observable {\r\n let queryString = '';\r\n queryString += '?dataDefEnum=' + dataDefEnum + '&id=' + id;\r\n return this.http.get(System.apiURL.Admin + 'IsDataDefinitionCodeInUse' + queryString);\r\n }\r\n\r\n deleteDataDefinitionList(id: number): Observable {\r\n let queryString = '';\r\n queryString += '?id=' + id;\r\n return this.http.get(System.apiURL.Admin + 'DeleteDataDefinitionList' + queryString);\r\n }\r\n}\r\n","import { Student } from '../../../shared-components/student/student.model';\r\n\r\nexport class EFormInstancesFilterParam {\r\n availableTo: string;\r\n selectedSites: boolean;\r\n selectedClasses: boolean;\r\n selectedStudents: boolean;\r\n deadlineFrom: Date;\r\n deadlineTo: Date;\r\n showFromFrom: Date;\r\n showFromTo: Date;\r\n showToFrom: Date;\r\n showToTo: Date;\r\n category: string;\r\n template: string;\r\n createdFrom: Date;\r\n createdTo: Date;\r\n createdBy: string;\r\n lastUpdatedFrom: Date;\r\n lastUpdatedTo: Date;\r\n lastUpdatedBy: string;\r\n schoolIds: number[];\r\n classIds: number[];\r\n students: Student[];\r\n}\r\n","

{{banner}}

\r\n\r\n
\r\n
\r\n
\r\n {{infoLine}}\r\n
\r\n
\r\n {{commentHeader}}\r\n
\r\n
\r\n
\r\n
\r\n {{statusHistory.CreatedOn | date:'MM/dd/yy hh:mm a'}}  {{statusHistory.Status}}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n NOTE: This will not delete the fee records created for this submission. Those will need to be manually reconciled.\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormStatusHistory } from '../../../../shared-components/e-forms/e-form-status-history.model';\r\nimport { EForm } from '../../../../shared-components/e-forms/e-form.model';\r\nimport { SendEmailService } from '../../../../shared-modules/send-email/send-email.service';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { Router } from '@angular/router';\r\nimport { EFormContact } from '../../../../shared-components/e-forms/e-form-contact.model';\r\nimport { SendEmailComponent } from '../../../../shared-modules/send-email/send-email.component';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n\tselector: 'app-e-form-mark-submission',\r\n\ttemplateUrl: './e-form-mark-submission.component.html',\r\n\t// styleUrls: ['./e-form-mark-submission.component.scss']\r\n})\r\nexport class EFormMarkSubmissionComponent implements OnInit {\r\n\r\n\tbanner: string;\r\n\tinfoLine: string;\r\n\tcommentHeader: string;\r\n\tnewStatus: string;\r\n\tmarkType: string;\r\n\temailNext: boolean;\r\n\tstatusHistory: EFormStatusHistory;\r\n\teForm: EForm;\r\n\tcomment = '';\r\n\tsendEmailDialogRef: MatDialogRef;\r\n\tsaveButtonClick: boolean;\r\n\tV10: boolean;\r\n\thasFee = false;\r\n\r\n\tconstructor(\r\n\t\tprivate dialogRef: MatDialogRef,\r\n\t\tprivate dialog: MatDialog,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: any,\r\n\t\tprivate eFormService: EFormService,\r\n\t\tprivate sendEmailService: SendEmailService,\r\n\t\tprivate userService: UserService,\r\n\t\tprivate router: Router,\r\n\t\tprivate loginService: LoginService\r\n\t) {\r\n\t\tthis.V10 = this.loginService.LoginSettings.V10;\r\n\t\tthis.markType = this.data.markType;\r\n\t\tif (this.data.statusHistory) {\r\n\t\t\tthis.statusHistory = this.data.statusHistory;\r\n\t\t\tthis.comment = this.statusHistory.Comment;\r\n\t\t}\r\n\t\tif (this.data.eForm) {\r\n\t\t\tthis.eForm = this.data.eForm;\r\n\t\t}\r\n\t\tif (this.data.hasFee) {\r\n\t\t\tthis.hasFee = this.data.hasFee;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n\t\tthis.banner = this.markType;\r\n\r\n\t\tswitch (this.markType) {\r\n\t\t\tcase 'Re-Open':\r\n\t\t\t\tthis.infoLine = 'This submission will be re-opened, allowing the user to make changes and re-submit.';\r\n\t\t\t\tthis.commentHeader = 'Comments regarding why this changes is being made:';\r\n\t\t\t\t// if (this.V10) {\r\n\t\t\t\t\tthis.newStatus = 'Re-Opened';\r\n\t\t\t\t// }\r\n\t\t\t\t// else {\r\n\t\t\t\t// \tthis.newStatus = 'Not Submitted';\r\n\t\t\t\t// }\r\n\t\t\t\tthis.emailNext = true;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Mark Complete':\r\n\t\t\t\tthis.infoLine = 'This submission will be marked as complete.';\r\n\t\t\t\tthis.commentHeader = 'Comments regarding why this change is being made:';\r\n\t\t\t\tthis.newStatus = 'Complete';\r\n\t\t\t\tthis.emailNext = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Delete':\r\n\t\t\t\tthis.infoLine = 'This submission will be marked as deleted.';\r\n\t\t\t\tthis.commentHeader = 'Comments regarding why this change is being made:';\r\n\t\t\t\t// if (this.V10) {\r\n\t\t\t\t\tthis.newStatus = 'Deleted';\r\n\t\t\t\t// }\r\n\t\t\t\t// else {\r\n\t\t\t\t// \tthis.newStatus = this.eForm.AllowMultiple == false ? 'Not Submitted' : 'Deleted';\r\n\t\t\t\t// }\r\n\t\t\t\tthis.emailNext = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Edit Submission History':\r\n\t\t\t\tthis.infoLine = '';\r\n\t\t\t\tthis.commentHeader = '';\r\n\t\t\t\tthis.emailNext = false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Rejected':\r\n\t\t\t\tthis.banner = 'Reject';\r\n\t\t\t\tthis.infoLine = 'This submission will be rejected, allowing the user to make changes and re-submit.';\r\n\t\t\t\tthis.commentHeader = 'Comments regarding why this change is being made:';\r\n\t\t\t\tthis.newStatus = 'Rejected';\r\n\t\t\t\tthis.emailNext = true;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tnextClick() {\r\n\t\tif (this.markType == 'Re-Open') {\r\n\t\t\tthis.eForm.Status = 'Re-Opened';\r\n\t\t\tthis.eForm.ManualSubmission = false;\r\n\t\t\t// if (this.V10) {\r\n\t\t\t\tthis.saveStatus(true);\r\n\t\t\t// }\r\n\t\t\t// else {\r\n\t\t\t// \t// Save with Re-Opened status to create record in status history, then save again with Not Submitted status\r\n\t\t\t// \tthis.eFormService.saveEForm(this.eForm, this.comment).subscribe(result => {\r\n\t\t\t// \t\tthis.eForm.Status = this.newStatus;\r\n\t\t\t// \t\tthis.saveStatus(true);\r\n\t\t\t// \t});\r\n\t\t\t// }\r\n\t\t}\r\n\t\telse if (this.markType == 'Rejected') {\r\n\t\t\tthis.saveButtonClick = false;\r\n\t\t\tthis.eForm.Status = this.newStatus;\r\n\t\t\tthis.saveStatus();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.eForm.Status = this.newStatus;\r\n\t\t\tthis.saveStatus(true);\r\n\t\t}\r\n\t}\r\n\r\n\tsendEmail() {\r\n\t\tthis.eFormService.getEformContact(this.eForm.ID).subscribe(result => {\r\n\t\t\tconst contact: EFormContact = result;\r\n\t\t\tconst email: string = contact.Email;\r\n\t\t\tconst name: string = contact.FirstName + ' ' + contact.LastName;\r\n\r\n\t\t\tif (contact.Email != null && contact.Email != '') {\r\n\t\t\t\tthis.sendEmailService.teacherName = name;\r\n\t\t\t\tthis.sendEmailService.teacherEmailAddress = email;\r\n\t\t\t\tthis.sendEmailDialogRef = this.dialog.open(SendEmailComponent, {\r\n\t\t\t\t\twidth: '80%',\r\n\t\t\t\t\theight: '80%',\r\n\t\t\t\t\tmaxHeight: '80vh',\r\n\t\t\t\t\tmaxWidth: '80vw',\r\n\t\t\t\t\tdata: {\r\n\t\t\t\t\t\tmodal: true,\r\n\t\t\t\t\t\tbanner: 'Re-Open e-Form Submission'\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tlet subject = '';\r\n\t\t\t\t\tif (this.eForm.TemplateType == 'student') {\r\n\t\t\t\t\t\tconst lastIndex = this.eForm.StudentNames[0].indexOf('-');\r\n\t\t\t\t\t\tconst studentname = this.eForm.StudentNames[0].substring(0, lastIndex - 1);\r\n\t\t\t\t\t\tsubject = this.eForm.InstanceName + ' - ' + studentname ;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tsubject = this.eForm.InstanceName;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.sendEmailDialogRef.componentInstance.mailDetail.subject = subject;\r\n\t\t\t\t}, 100);\r\n\t\t\t\tthis.sendEmailDialogRef.afterClosed().subscribe(() => {\r\n\t\t\t\t\tthis.dialogRef.close(true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (this.markType == 'Re-Open' && !this.sendEmailService.teacherEmailAddress && !this.loginService.LoginSettings.V10) {\r\n\t\t\t\tthis.dialogRef.close(true);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsaveClick() {\r\n\t\tif (this.banner == 'Edit Submission History') {\r\n\t\t\tthis.statusHistory.Comment = this.comment;\r\n\t\t\tthis.eFormService.SaveEformStatusHistory(this.statusHistory).subscribe(result => {\r\n\t\t\t\tthis.dialogRef.close();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.markType == 'Delete') {\r\n\t\t\t\tthis.eForm.Status = 'Deleted';\r\n\t\t\t\tthis.eForm.ManualSubmission = false;\r\n\t\t\t\t// if (this.V10) {\r\n\t\t\t\t\tthis.saveStatus();\r\n\t\t\t\t// }\r\n\t\t\t\t// else {\r\n\t\t\t\t// \t// Save with Delete status to create record in status history, then save again with Not Submitted status\r\n\t\t\t\t// \tthis.eFormService.saveEForm(this.eForm, this.comment).subscribe(result => {\r\n\t\t\t\t// \t\tthis.eForm.Status = this.newStatus;\r\n\t\t\t\t// \t\tthis.saveStatus();\r\n\t\t\t\t// \t});\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t\telse if (this.markType == 'Re-Open') {\r\n\t\t\t\tthis.eForm.Status = 'Re-Opened';\r\n\t\t\t\tthis.eForm.ManualSubmission = false;\r\n\t\t\t\t// if (this.V10) {\r\n\t\t\t\t\tthis.saveStatus();\r\n\t\t\t\t// }\r\n\t\t\t\t// else {\r\n\t\t\t\t// \tthis.eFormService.saveEForm(this.eForm, this.comment).subscribe(result => {\r\n\t\t\t\t// \t\tthis.eForm.Status = this.newStatus;\r\n\t\t\t\t// \t\tthis.saveStatus();\r\n\t\t\t\t// \t});\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t\telse if (this.markType == 'Rejected') {\r\n\t\t\t\tthis.saveButtonClick = true;\r\n\t\t\t\tthis.eForm.Status = this.newStatus;\r\n\t\t\t\tthis.saveStatus();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.eForm.Status = this.newStatus;\r\n\t\t\t\tthis.saveStatus();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsaveStatus(sendEmail: boolean = false) {\r\n\t\tthis.eFormService.saveEForm(this.eForm, this.comment).subscribe(result => {\r\n\t\t\tif (sendEmail) {\r\n\t\t\t\tthis.sendEmail();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!this.saveButtonClick && this.markType == 'Rejected') {\r\n\t\t\t\t\tthis.dialogRef.close('SendMailTrue');\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.saveButtonClick && this.markType == 'Rejected') {\r\n\t\t\t\t\tthis.dialogRef.close('SendMailFalse');\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.dialogRef.close(true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tcloseClick() {\r\n\t\tthis.dialogRef.close(false);\r\n\t}\r\n\r\n}\r\n","\r\nexport class EFormSubmissionsFilterParam {\r\n notSubmitted: boolean;\r\n submitted: boolean;\r\n rejected: boolean;\r\n accepted: boolean;\r\n complete: boolean;\r\n submittedFrom: Date;\r\n submittedTo: Date; \r\n notSubmittedDate:Date;\r\n manualSubmission: string;\r\n \r\n constructor () {\r\n this.notSubmitted = false; \r\n this.submitted = true;\r\n this.rejected = true;\r\n this.accepted = true;\r\n this.complete = true;\r\n this.manualSubmission = '0'; // Include manual submissions\r\n }\r\n}\r\n","export class MyNotificationGroupOverride {\r\n\r\n // Static Properties\r\n public static NextID = -1;\r\n\r\n // Server Properties\r\n ID: number;\r\n NotificationGroup_ID: number;\r\n NotificationEvent_ID: number;\r\n NotificationType_ID: number;\r\n User_ID: number;\r\n OverrideValue: boolean;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n\r\n // Constructor\r\n constructor(value?: boolean, groupId?: number, eventId?: number, typeId?: number, userId?: number) {\r\n this.ID = MyNotificationGroupOverride.NextID;\r\n MyNotificationGroupOverride.NextID -= 1;\r\n this.OverrideValue = value;\r\n if (groupId) {\r\n this.NotificationGroup_ID = groupId;\r\n }\r\n if (eventId) {\r\n this.NotificationEvent_ID = eventId;\r\n }\r\n if (typeId) {\r\n this.NotificationType_ID = typeId;\r\n }\r\n if (userId) {\r\n this.User_ID = userId;\r\n }\r\n }\r\n}\r\n","export class MyNotification {\r\n\r\n // Static Properties\r\n public static NextID = -1;\r\n\r\n // Server Properties\r\n ID: number;\r\n NotificationEvent_ID: number;\r\n NotificationType_ID: number;\r\n User_ID: number;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n\r\n // Constructor\r\n constructor(eventId?: number, typeId?: number, userId?: number) {\r\n this.ID = MyNotification.NextID;\r\n MyNotification.NextID -= 1;\r\n this.NotificationEvent_ID = eventId;\r\n this.NotificationType_ID = typeId;\r\n this.User_ID = userId;\r\n }\r\n}\r\n","export class NotificationEventPermissionCategory {\r\n\r\n // Static Properties\r\n public static NextID = -1;\r\n\r\n // Server Properties\r\n ID: number;\r\n NotificationEvent_ID: number;\r\n PermissionCategory: string;\r\n AddedBy: number;\r\n AddedOn: Date;\r\n LastUpdatedBy: number;\r\n LastUpdatedOn: Date;\r\n\r\n // Local Properties\r\n originalPermissionCategory: string;\r\n\r\n // Constructor\r\n constructor() {\r\n this.ID = NotificationEventPermissionCategory.NextID;\r\n NotificationEventPermissionCategory.NextID -= 1;\r\n }\r\n}\r\n","import {NotificationEvent} from './notification-event.model';\r\n\r\nexport class NotificationGroupEvent {\r\n\r\n // Server Properties\r\n ID: number;\r\n NotificationGroup_ID: number;\r\n NotificationType_ID: number;\r\n NotificationEvent_ID: number;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n\r\n // Local Properties\r\n NotificationEvent: NotificationEvent;\r\n\r\n // Constructors\r\n constructor(\r\n notificationEvent?: NotificationEvent,\r\n notificationGroupId?: number,\r\n notificationTypeId?: number\r\n ) {\r\n if (notificationEvent) {\r\n this.NotificationEvent_ID = notificationEvent.ID;\r\n this.NotificationEvent = notificationEvent;\r\n }\r\n if (notificationGroupId) {\r\n this.NotificationGroup_ID = notificationGroupId;\r\n }\r\n if (notificationTypeId) {\r\n this.NotificationType_ID = notificationTypeId;\r\n }\r\n }\r\n}\r\n","import {PermissionGroup} from '../../../shared-components/security/permission-group.model';\r\n\r\nexport class NotificationGroupPermissionGroup {\r\n\r\n // Server Properties\r\n ID: number;\r\n NotificationGroup_ID: number;\r\n GroupPermissions_ID: number;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n PermissionGroup: PermissionGroup;\r\n\r\n // Constructors\r\n constructor(\r\n notificationGroupId?: number,\r\n groupPermissionsId?: number\r\n ) {\r\n this.NotificationGroup_ID = notificationGroupId;\r\n this.GroupPermissions_ID = groupPermissionsId;\r\n }\r\n}\r\n","import {NotificationGroupEvent} from './notification-group-event.model';\r\nimport {NotificationGroupPermissionGroup} from './notification-group-permission-group.model';\r\nimport {MyNotificationGroupOverride} from './my-notification-group-override.model';\r\n\r\nexport class NotificationGroup {\r\n\r\n // Server Properties\r\n ID: number;\r\n Name: string;\r\n Description: string;\r\n AllowOverride: boolean;\r\n Status: string;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n NotificationGroupEvents: NotificationGroupEvent[] = [];\r\n NotificationPermissionGroups: NotificationGroupPermissionGroup[] = [];\r\n MyNotificationGroupOverrides: MyNotificationGroupOverride[] = [];\r\n\r\n // Local Properties\r\n eventsDisplay: string;\r\n permissionGroupsDisplay: string;\r\n\r\n // Constructor\r\n constructor() {\r\n this.ID = -1;\r\n this.Status = 'Active';\r\n }\r\n\r\n // Functions\r\n hasTypeOfEvent(eventID: number, typeID: number) {\r\n return !!this.NotificationGroupEvents.find(notificationGroupEvent =>\r\n notificationGroupEvent.NotificationEvent_ID == eventID && notificationGroupEvent.NotificationType_ID == typeID\r\n );\r\n }\r\n}\r\n","export class PermissionGroup {\r\n ID: number;\r\n Description: string;\r\n Status: number;\r\n PermissionsXML: string;\r\n}\r\n","import {NotificationEvent} from './notification-event.model';\r\n\r\nexport class NotificationArea {\r\n ID: number;\r\n Name: string;\r\n Description: string;\r\n ValidForStaff: boolean;\r\n ValidForStudents: boolean;\r\n ValidForParents: boolean;\r\n NotificationEvents: NotificationEvent[] = [];\r\n}\r\n","import {NotificationEventPermissionCategory} from './notification-event-permission-category.model';\r\nimport {NotificationType} from './notification-type.model';\r\n\r\nexport class NotificationEvent {\r\n\r\n // Sever Properties\r\n ID: number;\r\n NotificationArea_ID: number;\r\n Name: string;\r\n Description: string;\r\n EnumerationValue: string;\r\n StoredProcedureName: string;\r\n Status: string;\r\n AllStaffGrantedAccess: boolean;\r\n ValidForStaff: boolean;\r\n ValidForStudents: boolean;\r\n ValidForParents: boolean;\r\n PermissionCategory: NotificationEventPermissionCategory;\r\n NotificationTypes: NotificationType[] = [];\r\n\r\n // Local Properties\r\n originalAllStaffGrantedAccess: boolean;\r\n areaName: string;\r\n groupNameDisplay: string;\r\n\r\n // Class Functions\r\n get hasChanges() {\r\n return this.originalAllStaffGrantedAccess != this.AllStaffGrantedAccess\r\n || (\r\n this.PermissionCategory\r\n && this.PermissionCategory.originalPermissionCategory != this.PermissionCategory.PermissionCategory\r\n );\r\n }\r\n\r\n // Methods\r\n hasType(typeID: number) {\r\n return this.NotificationTypes.find(o => o.ID == typeID);\r\n }\r\n\r\n getAreaDisplay(array: NotificationEvent[]) {\r\n const index = array.findIndex(o => o.ID == this.ID);\r\n let previousArea: string;\r\n if (index > 0) {\r\n previousArea = array[index - 1].areaName;\r\n }\r\n if (previousArea == null || previousArea != this.areaName) {\r\n return this.areaName;\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { forkJoin, Observable } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { PermissionGroup } from '../../shared-components/security/permission-group.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { MyNotificationGroupOverride } from './models/my-notification-group-override.model';\r\nimport { MyNotification } from './models/my-notification.model';\r\nimport { NotificationArea } from './models/notification-area.model';\r\nimport { NotificationEventPermissionCategory } from './models/notification-event-permission-category.model';\r\nimport { NotificationEvent } from './models/notification-event.model';\r\nimport { NotificationGroupEvent } from './models/notification-group-event.model';\r\nimport { NotificationGroupPermissionGroup } from './models/notification-group-permission-group.model';\r\nimport { NotificationGroup } from './models/notification-group.model';\r\nimport { NotificationLog } from './models/notification-log.model';\r\nimport { NotificationType } from './models/notification-type.model';\r\n\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n // Properties\r\n checkingNotifications = false;\r\n checkInterval: any;\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n public setNotificationChecking(\r\n notificationTypes: NotificationType[] = null,\r\n myNotifications: MyNotification[] = null,\r\n myNotificationGroups: NotificationGroup[] = null\r\n ) {\r\n // PRE: optionally, the notification types, notifications, and notification groups the user has\r\n // POST: stops or starts checking if the user should\r\n\r\n // Checking if we are already checking notifications\r\n if (this.loginService.LoginSettings.ActivateNotificationFramework360) {\r\n\r\n // We need to make sure we even have in-app notifications first\r\n if (!notificationTypes || !myNotifications || !myNotificationGroups) {\r\n forkJoin(\r\n this.getMyNotifications(),\r\n this.getMyNotificationGroups(),\r\n this.getNotificationTypes()\r\n ).pipe(take(1)).subscribe(results => {\r\n if (this.checkForInAppType(results[2], results[0], results[1])) {\r\n this.beginCheckingNotifications();\r\n } else {\r\n this.stopCheckingNotifications();\r\n }\r\n });\r\n } else {\r\n if (this.checkForInAppType(notificationTypes, myNotifications, myNotificationGroups)) {\r\n this.beginCheckingNotifications();\r\n } else {\r\n this.stopCheckingNotifications();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Methods\r\n private beginCheckingNotifications() {\r\n // POST: waits for notifications and displays them as snackbars\r\n if (!this.checkingNotifications) {\r\n\r\n // Setting that we are now checking notifications\r\n this.checkingNotifications = true;\r\n\r\n // Helper function to perform the check\r\n const check = () => {\r\n this.checkNotifications().pipe(take(1)).subscribe(\r\n notifications => {\r\n if (notifications) {\r\n\r\n // Showing snackbars for the notifications\r\n notifications.forEach(notification => {\r\n if (notification.TypeName.toLowerCase() == 'on screen notification') {\r\n this.sharedService.showCustomSnackbar(\r\n (notification.Subject + ': ' + notification.Message).slice(0, 200),\r\n 'notification'\r\n );\r\n }\r\n });\r\n }\r\n }\r\n );\r\n };\r\n\r\n // Checking the notifications upon initialization\r\n check();\r\n\r\n // Setting the interval for checking notifications\r\n this.checkInterval = setInterval(() => {\r\n check();\r\n }, 60000);\r\n }\r\n }\r\n\r\n private stopCheckingNotifications() {\r\n if (this.checkingNotifications) {\r\n clearInterval(this.checkInterval);\r\n this.checkInterval = null;\r\n this.checkingNotifications = false;\r\n }\r\n }\r\n\r\n private checkForInAppType(notificationTypes: NotificationType[], myNotifications: MyNotification[], myNotificationGroups: NotificationGroup[]) {\r\n // PRE: the notification types, the users notifications, and the users groups\r\n // POST: returns true if the user has a notification that should who up in the app\r\n if (notificationTypes) {\r\n const inAppType = notificationTypes.find(type => type.Name.toLowerCase() == 'on screen notification');\r\n return inAppType\r\n && (\r\n (\r\n myNotifications\r\n && myNotifications.find(notificationSetting => notificationSetting.NotificationType_ID == inAppType.ID)\r\n ) || (\r\n myNotificationGroups\r\n && myNotificationGroups.find(notificationGroup =>\r\n !!notificationGroup.NotificationGroupEvents.find(event =>\r\n event.NotificationType_ID == inAppType.ID\r\n && !notificationGroup.MyNotificationGroupOverrides.find(override =>\r\n override.NotificationEvent_ID == event.NotificationEvent_ID\r\n && override.NotificationType_ID == inAppType.ID\r\n && !override.OverrideValue\r\n )\r\n ) || notificationGroup.MyNotificationGroupOverrides.find(override =>\r\n override.NotificationType_ID == inAppType.ID\r\n && override.OverrideValue\r\n )\r\n )\r\n )\r\n );\r\n }\r\n }\r\n\r\n public getNotificationTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetNotificationTypes');\r\n }\r\n\r\n public getNotificationAreasAndEvents(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetNotificationAreasAndEvents').pipe(\r\n map(areas => {\r\n for (let i = 0; i < areas.length; i++) {\r\n areas[i] = System.convert(areas[i], new NotificationArea());\r\n for (let j = 0; j < areas[i].NotificationEvents.length; j++) {\r\n areas[i].NotificationEvents[j] = System.convert(areas[i].NotificationEvents[j], new NotificationEvent());\r\n areas[i].NotificationEvents[j].areaName = areas[i].Name;\r\n if (areas[i].NotificationEvents[j].PermissionCategory) {\r\n areas[i].NotificationEvents[j].PermissionCategory = System.convert(areas[i].NotificationEvents[j].PermissionCategory, new NotificationEventPermissionCategory());\r\n }\r\n }\r\n }\r\n return areas;\r\n })\r\n );\r\n }\r\n\r\n public getNotificationGroups(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetNotificationGroups').pipe(\r\n map(groups => {\r\n for (let i = 0; i < groups.length; i++) {\r\n groups[i] = System.convert(groups[i], new NotificationGroup());\r\n for (let j = 0; j < groups[i].NotificationGroupEvents.length; j++) {\r\n groups[i].NotificationGroupEvents[j] = System.convert(groups[i].NotificationGroupEvents[j], new NotificationGroupEvent());\r\n }\r\n for (let j = 0; j < groups[i].NotificationPermissionGroups.length; j++) {\r\n groups[i].NotificationPermissionGroups[j] = System.convert(groups[i].NotificationPermissionGroups[j], new NotificationGroupPermissionGroup());\r\n }\r\n }\r\n return groups;\r\n })\r\n );\r\n }\r\n\r\n public getMyNotificationGroups(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetMyNotificationGroups').pipe(\r\n map(groups => {\r\n if (groups) {\r\n for (let i = 0; i < groups.length; i++) {\r\n groups[i] = System.convert(groups[i], new NotificationGroup());\r\n for (let j = 0; j < groups[i].NotificationGroupEvents.length; j++) {\r\n groups[i].NotificationGroupEvents[j] = System.convert(groups[i].NotificationGroupEvents[j], new NotificationGroupEvent());\r\n }\r\n for (let j = 0; j < groups[i].NotificationPermissionGroups.length; j++) {\r\n groups[i].NotificationPermissionGroups[j] = System.convert(groups[i].NotificationPermissionGroups[j], new NotificationGroupPermissionGroup());\r\n groups[i].NotificationPermissionGroups[j].PermissionGroup = System.convert(groups[i].NotificationPermissionGroups[j].PermissionGroup, new PermissionGroup());\r\n }\r\n for (let j = 0; j < groups[i].MyNotificationGroupOverrides.length; j++) {\r\n groups[i].MyNotificationGroupOverrides[j] = System.convert(groups[i].MyNotificationGroupOverrides[j], new MyNotificationGroupOverride());\r\n }\r\n }\r\n }\r\n return groups;\r\n })\r\n );\r\n }\r\n\r\n public getMyNotifications(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetMyNotifications').pipe(\r\n map(myNotifications => {\r\n for (let i = 0; i < myNotifications.length; i++) {\r\n myNotifications[i] = System.convert(myNotifications[i], new MyNotification());\r\n }\r\n return myNotifications;\r\n })\r\n );\r\n }\r\n\r\n public checkNotifications(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'CheckNotifications');\r\n }\r\n\r\n public getMyNotificationLogs(number = 10, uniqueInstances = false): Observable {\r\n const queryString = '?number=' + number + '&uniqueInstances=' + uniqueInstances;\r\n return this.http.get(System.apiURL.Admin + 'GetMyNotificationLogs' + queryString).pipe(\r\n map(logs => {\r\n logs.forEach(log => {\r\n log.AddedOn = new Date(log.AddedOn);\r\n });\r\n return logs;\r\n })\r\n );\r\n }\r\n\r\n public deleteNotificationGroup(notificationGroupId): Observable {\r\n const queryString = '?notificationGroupId=' + notificationGroupId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteNotificationGroup' + queryString);\r\n }\r\n\r\n public saveNotificationGroups(notificationGroups: NotificationGroup[]): Observable<{ [previousId: number]: number }> {\r\n return this.http.post<{ [previousId: number]: number }>(System.apiURL.Admin + 'SaveNotificationGroups', notificationGroups).pipe(\r\n map(idMap => {\r\n notificationGroups.forEach(notificationGroup => {\r\n notificationGroup.ID = idMap[notificationGroup.ID];\r\n });\r\n return idMap;\r\n })\r\n );\r\n }\r\n\r\n public saveNotificationEvents(notificationEvents: NotificationEvent[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveNotificationEvents', notificationEvents);\r\n }\r\n\r\n public saveMyNotifications(myNotifications: MyNotification[]): Observable<{ [previousId: number]: number }> {\r\n return this.http.post<{ [previousId: number]: number }>(System.apiURL.Admin + 'SaveMyNotifications', myNotifications);\r\n }\r\n\r\n public saveMyNotificationGroupOverrides(notificationEvent_ID, myNotificationGroupOverrides: MyNotificationGroupOverride[]): Observable<{ [previousId: number]: number }> {\r\n const queryString = '?notificationEvent_ID=' + notificationEvent_ID;\r\n return this.http.post<{ [previousId: number]: number }>(\r\n System.apiURL.Admin + 'SaveMyNotificationGroupOverrides' + queryString,\r\n myNotificationGroupOverrides\r\n );\r\n }\r\n}\r\n","\r\n

\r\n WARNING\r\n

\r\n\r\n\r\n\r\n\r\n
\r\n Changes have been entered but not saved.\r\n
\r\n\r\n
\r\n
\r\n A new household does not become official until information for household contacts has been entered.\r\n If you leave this process now, the information you have entered will be lost.\r\n
\r\n
\r\n\r\n
\r\n
\r\n If you continue without saving, the changes will be lost.\r\n
\r\n
\r\n Due to errors, saving is not possible.
\r\n Either Continue without Saving
\r\n or select Cancel and correct the errors.\r\n
\r\n
\r\n\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, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-registration-unsaved-changes-dialog',\r\n templateUrl: './registration-unsaved-changes-dialog.component.html',\r\n styleUrls: ['./registration-unsaved-changes-dialog.component.css']\r\n})\r\nexport class RegistrationUnsavedChangesDialogComponent implements OnDestroy {\r\n\r\n validFamily: boolean = false;\r\n hasErrors: boolean = false;\r\n\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef\r\n\t) {\r\n }\r\n\r\n\tngOnDestroy() {\r\n\t}\r\n\r\n\tcancel() {\r\n\t\tthis.dialogBox.close(-1);\r\n\t}\r\n\r\n\tcontinueWithoutSaving() {\r\n\t\tthis.dialogBox.close(0);\r\n\t}\r\n\r\n\tsaveFamily() {\r\n\t\tthis.dialogBox.close(2);\r\n\t}\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { DistrictLookup } from '../../shared-components/lookup/lookup.model';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { FamilyAddress } from './detailed-registration/address-registration/family-address.model';\r\nimport { ContactWorkInfo } from './detailed-registration/household-contacts-registration/contact-work-information/contact-work-info.model';\r\nimport { FamilyContact } from './detailed-registration/household-contacts-registration/family-contacts.model';\r\nimport { HouseholdFamilyDocument } from './detailed-registration/household-registration/household-registration.model';\r\nimport { AddressChangeLog } from './modals/address-change-log/address-change-log.model';\r\nimport { RegistrationUnsavedChangesDialogComponent } from './modals/registration-unsaved-changes-dialog/registration-unsaved-changes-dialog.component';\r\nimport { StudentLeavesWith } from './modals/student-leaves-with/student-leaves-with.model';\r\nimport { StudentReleaseAlert } from './modals/student-release-alerts/student-release-alert.model';\r\nimport { AddressBlock } from './models/address-block.model';\r\nimport { EnrollmentCalendar } from './models/enrollment-calendar.model';\r\nimport { EnrollmentCourse } from './models/enrollment-course.model';\r\nimport { EnrollmentHomeroomTeacher } from './models/enrollment-homeroom-teacher.model';\r\nimport { QuickRegistrationParent1Info } from './models/quick-registration-parent1-info.model';\r\nimport { QuickRegistration } from './models/quick-registration.model';\r\nimport { RegistrationDuplicateParentEmail } from './models/registration-duplicate-parent-email.model';\r\nimport { RegistrationDuplicatePhoneNumber } from './models/registration-duplicate-phone-number.model';\r\nimport { RegistrationLookups } from './models/registration-lookups.model';\r\nimport { RegistrationSettings } from './models/registration-settings.model';\r\nimport { RegistrationStudentMatchOptions } from './models/registration-student-match-options.model';\r\nimport { RegistrationStudent } from './models/registration-student.model';\r\nimport { StudentEnrollmentDetail } from './models/student-enrollment-detail.model';\r\nimport { StudentEnrollment } from './models/student-enrollment.model';\r\nimport { FamilyRegistrationDetails } from './registration-search/registration-family-details/registration-family-details.model'; // TODO: Rename the file\r\nimport { RegistrationFamilySearch } from './registration-search/registration-family.model';\r\nimport { RegistrationSearchCriteria } from './registration-search/registration-search-critera.model';\r\n\r\n@Injectable()\r\nexport class RegistrationEnrollmentService {\r\n\r\n registrationSettings: RegistrationSettings;\r\n registrationStudentMatchOptions: RegistrationStudentMatchOptions;\r\n registrationLookups: RegistrationLookups;\r\n familyRegistrationDetails: FamilyRegistrationDetails;\r\n selectedStep = 0;\r\n selectedOtherContactTab = 'Nonresident Parents';\r\n newEmergencyContactTrigger = false;\r\n studentsLeaveWith: StudentLeavesWith[];\r\n districtLookup: DistrictLookup[] = [];\r\n registrationSearchParams: RegistrationSearchParams = new RegistrationSearchParams();\r\n expandAllNonresident = false;\r\n unsavedChanges = false;\r\n errorsExist = false;\r\n\r\n viewReleaseAlertsPrivilege = false;\r\n createReleaseAlertsPrivilege = false;\r\n editDeleteReleaseAlertsPrivilege = false;\r\n maintainFamilyDataPermission = false;\r\n freeReducedMealPermission = false;\r\n studentDocumentsPermission = false;\r\n addStudentPermission = false;\r\n viewStudentPortalInfoPermission = false;\r\n editStudentPortalInfoPermission = false;\r\n changeStudentIDPermission = false;\r\n idLessThanPermission = false;\r\n withdrawEnrollmentPermission = false;\r\n deleteHouseholdPermission = false;\r\n\r\n editStudentId: number;\r\n editContactId: number;\r\n\r\n observableGuard = new Subject();\r\n observableGuardStream$ = this.observableGuard.asObservable();\r\n\r\n observableSwitchTab = new Subject();\r\n observableSwitchTabStream$ = this.observableSwitchTab.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private securityService: SecurityService,\r\n private dialog: MatDialog\r\n ) {\r\n this.maintainFamilyDataPermission = this.securityService.IsAllPermissionCodeAssigned('SD_MFD');\r\n this.viewReleaseAlertsPrivilege = this.securityService.IsAllPermissionCodeAssigned('SD_VSRA');\r\n this.createReleaseAlertsPrivilege = this.securityService.IsAllPermissionCodeAssigned('SD_ASRA');\r\n this.editDeleteReleaseAlertsPrivilege = this.securityService.IsAllPermissionCodeAssigned('SD_MSRA');\r\n this.freeReducedMealPermission = this.securityService.IsAllPermissionCodeAssigned('LA_VFRMA') || this.securityService.IsAllPermissionCodeAssigned('LA_MFRMA');\r\n this.studentDocumentsPermission = this.securityService.IsAllPermissionCodeAssigned('DSF_MADFSF');\r\n this.addStudentPermission = this.securityService.IsAllPermissionCodeAssigned('SD_ASTF');\r\n this.viewStudentPortalInfoPermission = this.securityService.IsAllPermissionCodeAssigned('SD_VSPLIAP');\r\n this.editStudentPortalInfoPermission = this.securityService.IsAllPermissionCodeAssigned('SD_MSPLIAP');\r\n this.changeStudentIDPermission = this.securityService.IsAllPermissionCodeAssigned('SD_CSI');\r\n this.idLessThanPermission = this.securityService.IsAllPermissionCodeAssigned('SD_ESILDM');\r\n this.withdrawEnrollmentPermission = this.securityService.IsAllPermissionCodeAssigned('SD_WS');\r\n this.deleteHouseholdPermission = this.securityService.IsAllPermissionCodeAssigned('SD_DH');\r\n }\r\n\r\n getRegistrationSettings(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationSettings?yearId=' + this.yearService.defaultYear.Id);\r\n }\r\n\r\n getRegistrationStudentMatchOptions(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationStudentMatchOptions');\r\n }\r\n\r\n getRegistrationLookups(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationLookups?siteYearId=' + this.yearService.defaultYear.SiteYearId);\r\n }\r\n\r\n searchRegistration(searchCriteria: RegistrationSearchCriteria): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SearchRegistration?yearId=' + this.yearService.defaultYear.Id, searchCriteria);\r\n }\r\n\r\n getRegistrationFamily(familyId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationFamily?yearId=' + this.yearService.defaultYear.SiteYearId + '&familyId=' + familyId);\r\n }\r\n\r\n saveFamilyRegistration(family: FamilyRegistrationDetails): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveFamilyRegistration?yearId=' + this.yearService.defaultYear.SiteYearId, family);\r\n }\r\n\r\n deleteRegistrationHousehold(familyId: number, studentId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'DeleteRegistrationHousehold?familyId=' + familyId + '&yearId=' + this.yearService.defaultYear.SiteYearId + '&studentId=' + studentId);\r\n }\r\n\r\n getAdditionalAddresses(familyId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetAdditionalAddresses?familyId=' + familyId);\r\n }\r\n\r\n saveAdditionalAddress(familyId: number, transportation: boolean, deleteOperation: boolean, address: FamilyAddress): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveAdditionalAddress?familyId=' + familyId + '&transportation=' + transportation + '&deleteOperation=' + deleteOperation, address);\r\n }\r\n\r\n getContactWorkInfo(familyId: number) {\r\n return this.http.get(System.apiURL.Admin + 'GetContactWorkInfo?familyId=' + familyId);\r\n }\r\n\r\n getRegistrationDuplicateParentEmails(familyId: number, emailAdded: boolean, emailData: any): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetRegistrationDuplicateParentEmails?familyId=' + familyId + '&emailAdded=' + emailAdded, emailData);\r\n }\r\n\r\n getRegistrationDuplicatePhoneNumbers(familyId: number, phoneData: any): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetRegistrationDuplicatePhoneNumbers?familyId=' + familyId, phoneData);\r\n }\r\n\r\n changeDuplicateRegistrationEmails(emailData: any): Observable {\r\n return this.http.post(System.apiURL.Admin + 'ChangeDuplicateRegistrationEmails', emailData);\r\n }\r\n\r\n changeDuplicateRegistrationPhoneNumbers(phoneData: any): Observable {\r\n return this.http.post(System.apiURL.Admin + 'ChangeDuplicateRegistrationPhoneNumbers', phoneData);\r\n }\r\n\r\n getRegistrationPossibleDuplicateStudents(student: RegistrationStudent): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetRegistrationPossibleDuplicateStudents', student);\r\n }\r\n\r\n validateStudentIDs(studentId: number, studentIdentifier: string, stateId: string, lunchPIN: string, idLessThanPermission: boolean): Observable {\r\n return this.http.get(System.apiURL.Admin + 'ValidateStudentIDs?studentId=' + studentId + '&studentIdentifier=' + studentIdentifier + '&stateId=' + stateId + '&lunchPIN=' + lunchPIN + '&idLessThanPermission=' + idLessThanPermission);\r\n }\r\n\r\n saveQuickRegistration(schoolId: number, yearId: number, data: QuickRegistration): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveQuickRegistration?schoolId=' + schoolId + '&yearId=' + yearId, data);\r\n }\r\n\r\n saveContactWorkInfo(workInfo: ContactWorkInfo, deleteOperation: boolean) {\r\n return this.http.post(System.apiURL.Admin + 'SaveContactWorkInfo?delete=' + deleteOperation, workInfo);\r\n }\r\n\r\n getAddressChangeLogs(familyId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetAddressChangeLogs?familyId=' + familyId);\r\n }\r\n\r\n getStudentReleaseAlerts(familyId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetStudentReleaseAlerts?familyId=' + familyId);\r\n }\r\n\r\n saveStudentReleaseAlerts(releaseAlerts: StudentReleaseAlert[], deleteOperation: boolean) {\r\n return this.http.post(System.apiURL.Admin + 'SaveStudentReleaseAlerts?delete=' + deleteOperation, releaseAlerts);\r\n }\r\n\r\n getStudentsLeaveWith(familyId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetStudentsLeaveWith?familyId=' + familyId);\r\n }\r\n\r\n saveStudentsLeaveWith(leaveWithHousehold: boolean, leaveWithNonresident: boolean, studentsLeaveWith: StudentLeavesWith[]) {\r\n return this.http.post(System.apiURL.Admin + 'SaveStudentsLeaveWith?familyId=' + this.familyRegistrationDetails.Family_ID + '&leaveWithHousehold=' + leaveWithHousehold + '&leaveWithNonresident=' + leaveWithNonresident, studentsLeaveWith);\r\n }\r\n\r\n saveNonresidentContacts(familyId: number, deleteOperation: boolean, contacts: FamilyContact[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveNonresidentContacts?yearId=' + this.yearService.defaultYear.SiteYearId + '&familyId=' + familyId + '&delete=' + deleteOperation, contacts);\r\n }\r\n\r\n saveAdditionalContact(familyId: number, deleteOperation: boolean, contact: FamilyContact): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveAdditionalContacts?familyId=' + familyId + '&delete=' + deleteOperation, contact);\r\n }\r\n\r\n saveHouseholdStudent(familyId: number, student: RegistrationStudent): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveHouseholdStudent?siteYearId=' + this.yearService.defaultYear.SiteYearId + '&familyId=' + familyId, student);\r\n }\r\n\r\n saveStudentPhoto(studentId: number, base64Photo: string) {\r\n return this.http.post(System.apiURL.Admin + 'SaveStudentPhoto?studentId=' + studentId, [base64Photo]);\r\n }\r\n\r\n getRegistrationAddressByStreetNameOrID(byName: boolean, streetName: string, streetId: number) {\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationAddressByStreetNameOrID?byName=' + byName + '&streetName=' + streetName + '&streetId=' + streetId);\r\n }\r\n\r\n getAddressBlocks(block: string) {\r\n return this.http.get(System.apiURL.Admin + 'GetAddressBlocks?yearId=' + this.yearService.defaultYear.Id + '&block=' + block);\r\n }\r\n\r\n moveStudentsToFamily(familyId: number, studentIds: number[]) {\r\n return this.http.post(System.apiURL.Admin + 'MoveStudentsToFamily?familyId=' + familyId, studentIds);\r\n }\r\n\r\n markStudentsAsNew(markNew: boolean, studentIds: number[]) {\r\n return this.http.post(System.apiURL.Admin + 'MarkStudentsAsNew?yearId=' + this.yearService.defaultYear.Id + '&markNew=' + markNew, studentIds);\r\n }\r\n\r\n reconcileEdFiStudent(studentId: number, reconcile: boolean) {\r\n return this.http.get(System.apiURL.Admin + 'ReconcileEdFiStudent?yearId=' + this.yearService.defaultYear.Id + '&studentId=' + studentId + '&reconcile=' + reconcile);\r\n }\r\n\r\n setEmergencyContactCallOrder(contacts: FamilyContact[]) {\r\n return this.http.post(System.apiURL.Admin + 'SetEmergencyContactCallOrder', contacts);\r\n }\r\n\r\n sendNotificationEmailToParent(peopleId: number, updateDate: boolean, sendEmailInSpanish: boolean) {\r\n return this.http.get(System.apiURL.Admin + 'SendNotificationEmailToParent?peopleId=' + peopleId + '&updateNotifyDate=' + updateDate + '&sendEmailInSpanish=' + sendEmailInSpanish);\r\n }\r\n\r\n deleteRegistrationContact(contact: FamilyContact) {\r\n return this.http.post(System.apiURL.Admin + 'DeleteRegistrationContact', contact);\r\n }\r\n\r\n swapHouseholdParents(familyId: number, nonresident: boolean) {\r\n return this.http.get(System.apiURL.Admin + 'SwapHouseholdParents?familyId=' + familyId + '&siteYearId=' + this.yearService.defaultYear.SiteYearId + '&nonresident=' + nonresident);\r\n }\r\n\r\n getRegistrationEnrollments(schoolId: number, yearId: number, familyId: number, studentId: number, includeAllYearsEnrollment: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&familyId=' + familyId +\r\n '&studentId=' + studentId +\r\n '&includeAllYearsEnrollment=' + includeAllYearsEnrollment;\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationEnrollments' + queryString);\r\n }\r\n\r\n splitStudentEnrollment(entryCodeId: number, studentEnrollment: StudentEnrollment) {\r\n let queryString = '';\r\n queryString += '?entryCodeId=' + entryCodeId;\r\n return this.http.post(System.apiURL.Admin + 'SplitStudentEnrollment' + queryString, studentEnrollment);\r\n }\r\n\r\n deleteStudentEnrollment(studentEnrollmentId: number, externalEnrollment: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?studentEnrollmentId=' + studentEnrollmentId +\r\n '&externalEnrollment=' + externalEnrollment;\r\n return this.http.get(System.apiURL.Admin + 'DeleteStudentEnrollment' + queryString);\r\n }\r\n\r\n getRegistrationEnrollmentDetails(schoolId: number, yearId: number, studentId: number, studentEnrollmentId: number, externalEnrollment: boolean, newEnrollment: boolean, primaryEnrollments: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&studentId=' + studentId +\r\n '&studentEnrollmentId=' + studentEnrollmentId +\r\n '&externalEnrollment=' + externalEnrollment +\r\n '&newEnrollment=' + newEnrollment +\r\n '&primaryEnrollments=' + primaryEnrollments;\r\n return this.http.get(System.apiURL.Admin + 'GetRegistrationEnrollmentDetails' + queryString);\r\n }\r\n\r\n getStudentCoursesByEnrollmentId(studentEnrollmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentEnrollmentId=' + studentEnrollmentId;\r\n return this.http.get(System.apiURL.Admin + 'GetStudentCoursesByEnrollmentId' + queryString);\r\n }\r\n\r\n updateWithdrawnPastCourses(studentEnrollmentId: number, siteSectionIds: string): Observable {\r\n return this.http.get(System.apiURL.Admin + 'UpdateWithdrawnPastCourses?studentEnrollmentId=' + studentEnrollmentId + '&siteSectionIds=' + siteSectionIds);\r\n }\r\n\r\n updatePastCourseDropped(courseAssignmentId: number, dropped: boolean): Observable {\r\n return this.http.get(System.apiURL.Admin + 'UpdatePastCourseDropped?courseAssignmentId=' + courseAssignmentId + '&dropped=' + dropped);\r\n }\r\n\r\n saveRegistrationEnrollmentDetail(screenName: string, enrollmentDetail: StudentEnrollmentDetail, selectedWithdrawalOptionIds: string): Observable {\r\n let queryString = '';\r\n queryString += '?screenName=' + screenName;\r\n queryString += '&selectedWithdrawalOptionIds=' + selectedWithdrawalOptionIds;\r\n return this.http.post(System.apiURL.Admin + 'SaveRegistrationEnrollmentDetail' + queryString, enrollmentDetail);\r\n }\r\n\r\n saveStudentExternalEnrollment(enrollmentDetail: StudentEnrollmentDetail): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveStudentExternalEnrollment', enrollmentDetail);\r\n }\r\n\r\n getEnrollWithdrawDefaultCodes(statusChange: boolean) {\r\n return this.http.get(System.apiURL.Admin + 'GetEnrollWithdrawDefaultCodes?statusChange=' + statusChange);\r\n }\r\n\r\n\r\n getStudentEnrollmentTotalFTE(schoolId: number, yearId: number, studentId: number, studentEnrollmentId: number, fte: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&studentId=' + studentId +\r\n '&studentEnrollmentId=' + studentEnrollmentId +\r\n '&fte=' + fte;\r\n return this.http.get(System.apiURL.Admin + 'GetStudentEnrollmentTotalFTE' + queryString);\r\n }\r\n\r\n getHouseholdFamilyDocuments(familyId: number, blnShowAllDocuments: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?familyId=' + familyId +\r\n '&blnShowAllDocuments=' + blnShowAllDocuments;\r\n return this.http.get(System.apiURL.Admin + 'GetHouseholdFamilyDocuments' + queryString);\r\n }\r\n\r\n deleteHouseholdFamilyDocumentById(documentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?documentId=' + documentId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteHouseholdFamilyDocumentById' + queryString);\r\n }\r\n\r\n saveHouseholdFamilyDocument(familyDocument: HouseholdFamilyDocument): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveHouseholdFamilyDocument', familyDocument);\r\n }\r\n\r\n getEnrollmentHomeroomTeacherCourses(yearId: number, schoolId: number, studentId: number, staffId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&siteId=' + schoolId +\r\n '&studentId=' + studentId +\r\n '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Admin + 'GetEnrollmentHomeroomTeacherCourses' + queryString);\r\n }\r\n\r\n updateStudentCourseAssignmentFromEnrollment(yearId: number, enrollmentId: number, siteSectionIds: string, staffId: number, courseGroupId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&studentEnrollmentId=' + enrollmentId +\r\n '&siteSectionIds=' + siteSectionIds +\r\n '&staffId=' + staffId +\r\n '&courseGroupId=' + courseGroupId;\r\n return this.http.get(System.apiURL.Admin + 'UpdateStudentCourseAssignmentFromEnrollment' + queryString);\r\n }\r\n\r\n getHouseholdStudent(studentId: number): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Admin + 'GetHouseholdStudent' + queryString);\r\n }\r\n\r\n getEnrollmentCalendars(schoolId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetEnrollmentCalendars' + queryString);\r\n }\r\n\r\n showWarning(): Observable | Promise | boolean {\r\n // PRE: the user tries to perform an action which may need to be blocked\r\n // POST: Shows the warning dialog. Then, performs the following functions:\r\n // \t\tIf 2, saves the family and continues and returns true\r\n // \t\tIf 0, continues without saving the query and returns true\r\n // \t\tIf -1, returns false\r\n\r\n if (this.unsavedChanges && this.maintainFamilyDataPermission) {\r\n this.observableGuard.next();\r\n const dialogBox = this.dialog.open(RegistrationUnsavedChangesDialogComponent, { panelClass: 'tyl-mat-dialog', disableClose: true, maxWidth: '450px' });\r\n dialogBox.componentInstance.validFamily = this.familyRegistrationDetails.Family_ID > 0;\r\n dialogBox.componentInstance.hasErrors = this.errorsExist;\r\n return dialogBox.afterClosed().pipe(\r\n map(result => {\r\n switch (result) {\r\n // Save query\r\n case 2:\r\n if (this.maintainFamilyDataPermission) {\r\n this.saveFamilyRegistration(this.familyRegistrationDetails).subscribe(() => {\r\n return true;\r\n });\r\n }\r\n break;\r\n case 0:\r\n return true;\r\n // Cancel\r\n case -1:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n })\r\n );\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n getProperMailingName() {\r\n let properMailingName = '';\r\n const prefixLookups = this.registrationLookups.PrefixData;\r\n\r\n const parent1 = this.familyRegistrationDetails.PrimaryContacts[0];\r\n const parent2 = this.familyRegistrationDetails.PrimaryContacts[1];\r\n const parent1Prefix = (parent1.Prefix && parent1.Prefix > 0) ? prefixLookups.filter(p => p.Id == parent1.Prefix.toString())[0].Code.trim() : '';\r\n const parent2Prefix = (parent2 && parent2.Prefix && parent2.Prefix > 0) ? prefixLookups.filter(p => p.Id == parent2.Prefix.toString())[0].Code.trim() : '';\r\n if (parent1Prefix.length > 0 && parent2Prefix.length > 0) {\r\n properMailingName = parent1Prefix + ' & ' + parent2Prefix;\r\n properMailingName += ' ' + parent1.LastName;\r\n }\r\n else if (parent2 && parent2.LastName && parent1.LastName.toUpperCase() == parent2.LastName.toUpperCase()) {\r\n properMailingName = parent1.FirstName.trim() + ' and ' + parent2.FirstName.trim() + ' ' + parent1.LastName.trim();\r\n }\r\n else if (parent2 && parent2.LastName && parent2.LastName.trim().length > 0) {\r\n properMailingName = parent1.FirstName.trim() + ' ' + parent1.LastName.trim() + ' and ' + parent2.FirstName.trim() + ' ' + parent2.LastName.trim();\r\n }\r\n else {\r\n if (parent1.Prefix && parent1.Prefix > 0) {\r\n properMailingName = parent1Prefix + ' ';\r\n }\r\n properMailingName += parent1.FirstName.trim() + ' ' + parent1.LastName.trim();\r\n }\r\n return properMailingName;\r\n }\r\n}\r\n\r\nexport class RegistrationSearchParams {\r\n selectedTab: string;\r\n searchByStudent: SearchByStudentFields;\r\n searchByContact: SearchByContactFields;\r\n searchByAddress: SearchByAddressFields;\r\n}\r\n\r\nexport class SearchByStudentFields {\r\n lastName: string;\r\n firstName: string;\r\n middleName: string;\r\n suffixId: number;\r\n stateId: number;\r\n everyoneLessThan: boolean;\r\n age: number;\r\n birthDate: string;\r\n}\r\n\r\nexport class SearchByContactFields {\r\n lastName: string;\r\n firstName: string;\r\n email: string;\r\n phone: string;\r\n includeNonResidentParents: boolean;\r\n includeEmergencyContacts: boolean;\r\n}\r\n\r\nexport class SearchByAddressFields {\r\n houseNumber: string;\r\n direction: number;\r\n streetName: string;\r\n streetType: number;\r\n aptLot: string;\r\n city: string;\r\n zipCode: string;\r\n}\r\n","import {AssessmentDataField} from './assessment-data-field.model';\r\nimport {AssessmentDataRow} from './assessment-data-row.model';\r\n\r\nexport class Assessment {\r\n\r\n\t// Properties\r\n\tid: number;\r\n\tAssessmentDataField: AssessmentDataField[];\r\n\tAssessmentsDataRows: AssessmentDataRow[];\r\n\tBESTOF: boolean;\r\n\tDESCRIPTION: string;\r\n\tDisplay: boolean;\r\n\tFULLTITLE: string;\r\n\tMasterId: number;\r\n\tSEQUENCE: number;\r\n\tSubTypeTestId: number;\r\n\tget Id(): number {\r\n\t\treturn this.id;\r\n\t}\r\n\tget AssessmentDataFields(): AssessmentDataField[] {\r\n\t\treturn this.AssessmentDataField;\r\n\t}\r\n\tget FullTitle(): string {\r\n\t\treturn this.FULLTITLE;\r\n\t}\r\n\tget BestOf(): boolean {\r\n\t\treturn this.BESTOF;\r\n\t}\r\n\tget Description(): string {\r\n\t\treturn this.DESCRIPTION;\r\n\t}\r\n\tget Sequence(): number {\r\n\t\treturn this.SEQUENCE;\r\n\t}\r\n\r\n\t// Class Functions\r\n\tconstructor () {}\r\n}\r\n\r\nexport class TestMasterLayoutVersion {\r\n\tVersionId: number;\r\n\tDescription: string;\r\n\tTestMasterId: number;\r\n\tTestSubTypeId: number;\r\n}\r\n\r\nexport class AssessmentField {\r\n\tTakenDate: Date;\r\n\tMasterName: string;\r\n\tVersionName: string;\r\n\tVersionId: number;\r\n\tTestFieldId: number;\r\n\tFieldName: string;\r\n\tFieldData: string;\r\n\tPOSStart: number;\r\n\tLength: number;\r\n\tSubTypeId: number;\r\n\tFieldType: number;\r\n\tNumericDigits: number;\r\n\tNumericDecimals: number;\r\n\tMaxNumeric: number;\r\n\tPrintOnTranscript: boolean;\r\n}\r\n","

Add Assessment

\r\n
Tabs will be added for the selected assessments
\r\n\r\n
\r\n {{tab.Code}}\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, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\n\r\n@Component({\r\n selector: 'app-add-assessment-tab-dialog',\r\n templateUrl: './add-assessment-tab-dialog.component.html'\r\n})\r\nexport class AddAssessmentTabDialogComponent implements OnInit {\r\n displayTabs: Lookup[] = [];\r\n selectedTabs: Lookup[] = [];\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.displayTabs = this.data.tabs;\r\n }\r\n\r\n selectTab(tab: Lookup) {\r\n if (this.selectedTabs.indexOf(tab) > -1) {\r\n this.selectedTabs.splice(this.selectedTabs.indexOf(tab), 1);\r\n } else {\r\n this.selectedTabs.push(tab);\r\n }\r\n }\r\n\r\n saveClick() {\r\n this.dialogRef.close(this.selectedTabs);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","import { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\n// This class exists purely for making the data work with the mattable\r\nexport class AssessmentDataCategory {\r\n\r\n\t// Properties\r\n\tcategory: string;\r\n\ttestName: string;\r\n\tfullTitle: string;\r\n\tfields: string[] = [];\r\n\tdata: object[] = [];\r\n\tsubTableData: TylerMatTableDataSource;\r\n\tinstanceId: number;\r\n\tlayoutVersionId: number;\r\n\r\n\t// Methods\r\n\tcreateSubTableData() {\r\n\t\t// POST: constructs the sub-table data source from the data\r\n\t\tthis.subTableData = new TylerMatTableDataSource(this.data);\r\n\t}\r\n\r\n\tminTableWidth() {\r\n\t\t// POST: gives you the minimum width for the corresponding table\r\n\t\treturn (this.fields.length * 150) + 50;\r\n\t}\r\n\r\n\tcontains(checkedDatum: { [key: string]: string }): boolean {\r\n\t\t// PRE: a dictionary to check\r\n\t\t// POST: returns true if the checked dictionary is in the data\r\n\t\tfor (let i = 0; i < this.data.length; i++) {\r\n\t\t\tconst datum = this.data[i];\r\n\t\t\tlet equivalent = true;\r\n\t\t\tfor (let j = 0; j < this.fields.length; j++) {\r\n\t\t\t\tconst field = this.fields[j];\r\n\t\t\t\tif (datum[field] != checkedDatum[field]) {\r\n\t\t\t\t\tequivalent = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (equivalent) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsort(field: string, object = null, direction = 'desc') {\r\n\t\t// POST: sorts the data in order of a specified field\r\n\t\tif (this.fields.includes(field)) {\r\n\t\t\tthis.data.sort((a, b) => {\r\n\t\t\t\tif (object) {\r\n\t\t\t\t\tconst objectA = object.__proto__.constructor(a);\r\n\t\t\t\t\tconst objectB = object.__proto__.constructor(b);\r\n\t\t\t\t\tif ((objectA < objectB && direction == 'desc') ||\r\n\t\t\t\t\t\t(objectA > objectB && direction == 'asc')) {\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t} else if ((objectB < objectA && direction == 'desc') ||\r\n\t\t\t\t\t\t(objectB > objectA && direction == 'asc')) {\r\n\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ((a[field] < b[field] && direction == 'desc') ||\r\n\t\t\t\t\t\t(a[field] > b[field] && direction == 'asc')) {\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t} else if ((b[field] < a[field] && direction == 'desc') ||\r\n\t\t\t\t\t\t(b[field] > a[field] && direction == 'asc')) {\r\n\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","

{{editMode ? \"Edit\" : \"Add\"}} Assessment Scores

\r\n\r\n - {{masterName}} -\r\n {{versionName}}\r\n\r\n\r\n
\r\n \r\n \r\n\r\n Do not\r\n print on Transcript\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\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, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AssessmentService } from '../../../../../student360/assessment/assessment.service';\r\nimport { AssessmentField } from '../../../../../student360/assessment/assessment.model';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { formatDate } from '@angular/common';\r\nimport { Student } from '../../../../../shared-components/student/student.model';\r\nimport { UserPermission } from '../../../../../shared-components/user/user-permission.model';\r\nimport { SecurityService } from '../../../../../shared-components/security/security.service';\r\n\r\n@Component({\r\n selector: 'app-add-assessment-scores',\r\n templateUrl: './add-assessment-scores.component.html',\r\n styleUrls: ['./add-assessment-scores.component.css']\r\n})\r\nexport class AddAssessmentScoresComponent implements OnInit {\r\n instanceId: number;\r\n testMasterLayoutVersionId: number;\r\n assessmentFields: AssessmentField[] = [];\r\n assessmentData: any;\r\n printOnTranscript = false;\r\n assessmentDate: Date;\r\n masterName = '';\r\n versionName = '';\r\n displayAssessmentFields = [];\r\n selectedStudent: Student;\r\n V9UserPermissions: UserPermission[] = [];\r\n userCanMarkScore: boolean;\r\n\r\n editMode: boolean;\r\n constructor(\r\n private assessmentService: AssessmentService,\r\n private studentService: StudentService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private securityService: SecurityService,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.editMode = this.data.editMode;\r\n this.instanceId = this.data.instanceId;\r\n this.assessmentData = this.data.assessmentData;\r\n this.testMasterLayoutVersionId = this.data.testMasterLayoutVersionId;\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.getAssessmentFields();\r\n\r\n this.V9UserPermissions = this.securityService.userPermissions;\r\n const isDelete = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'AS_BUEFT');\r\n if ((isDelete != undefined && isDelete != null && isDelete.length > 0)) {\r\n this.userCanMarkScore = true;\r\n }\r\n }\r\n\r\n getAssessmentFields() {\r\n this.assessmentDate = new Date();\r\n this.assessmentService.getAssessmentFieldsReadByInstIdOrVersionId(this.instanceId, this.testMasterLayoutVersionId).subscribe(result => {\r\n this.assessmentFields = result;\r\n if (this.assessmentFields.length > 0) {\r\n this.masterName = this.assessmentFields[0].MasterName;\r\n this.versionName = this.assessmentFields[0].VersionName;\r\n }\r\n this.setAssessmentData();\r\n });\r\n }\r\n\r\n setAssessmentData() {\r\n this.assessmentDate = (this.assessmentData['Test Date'] != undefined) ? new Date(this.assessmentData['Test Date']) : new Date();\r\n\r\n this.assessmentFields.forEach(f => {\r\n f.FieldData = this.assessmentData[f.FieldName];\r\n });\r\n this.setAssessmentFields();\r\n }\r\n\r\n setAssessmentFields() {\r\n this.displayAssessmentFields = [];\r\n let assFields: AssessmentField[] = [];\r\n for (let i = 0; i < this.assessmentFields.length; i++) {\r\n assFields.push(this.assessmentFields[i]);\r\n\r\n if ((assFields.length == 3) || ((i + 1) == this.assessmentFields.length)) {\r\n this.displayAssessmentFields.push(assFields);\r\n assFields = [];\r\n }\r\n }\r\n }\r\n\r\n saveClick() {\r\n let instanceId = 0;\r\n if (this.editMode == true) {\r\n instanceId = this.instanceId;\r\n }\r\n const versionId = this.assessmentFields[0].VersionId;\r\n const isImportedData = false;\r\n const assDate = formatDate(this.assessmentDate, 'MM/dd/yyyy', 'en-US');\r\n this.assessmentFields.filter(o => o.FieldType == 1).forEach(obj => {\r\n if (obj.FieldData) {\r\n obj.FieldData = formatDate(obj.FieldData, 'MM/dd/yyyy', 'en-US');\r\n }\r\n });\r\n\r\n this.assessmentService.saveAssessment(this.studentService.selectedStudent.Id, instanceId, versionId, assDate, this.printOnTranscript, isImportedData, this.assessmentFields).subscribe(obj => {\r\n this.dialogRef.close('save');\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close('cancel');\r\n }\r\n\r\n}\r\n","\r\n\r\n\r\n \r\n \r\n \r\n \r\n {{field}}\r\n \r\n \r\n \r\n \r\n \r\n {{field}}\r\n \r\n \r\n \r\n {{assessmentData[field]}}\r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \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, OnInit, AfterViewInit, OnChanges, EventEmitter, ChangeDetectorRef, ViewChild, Input, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { AddAssessmentScoresComponent } from '../assessment-data-category-table/add-assessment-scores/add-assessment-scores.component';\r\nimport { AssessmentDataCategory } from '../assessment-data-category';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { AssessmentService } from '../../../../student360/assessment/assessment.service';\r\nimport { SharedService } from '../../../../shared-components/shared.service';\r\nimport { UserPermission } from '../../../../shared-components/user/user-permission.model';\r\nimport { SecurityService } from '../../../../shared-components/security/security.service';\r\n\r\n@Component({\r\n selector: 'app-assessment-data-table',\r\n templateUrl: './assessment-data-table.component.html',\r\n styleUrls: ['./assessment-data-table.component.css']\r\n})\r\nexport class AssessmentDataTableComponent implements OnInit, AfterViewInit, OnChanges {\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n @Input() data: TylerMatTableDataSource;\r\n @Input() fields: string[];\r\n @Input() dataCategory: AssessmentDataCategory;\r\n @Input() minTableWidth: number;\r\n @Input() showFilters = true;\r\n @Input() showActionButton = true;\r\n @Input() triggerChanges: EventEmitter;\r\n @Output() getAssessmentDataEvent = new EventEmitter();\r\n triggerChangeSubscription: Subscription;\r\n fieldsColumns: string[] = [];\r\n V9UserPermissions: UserPermission[] = [];\r\n userCanDelete: boolean;\r\n userCanProcess = false;\r\n\r\n constructor(\r\n private assessmentService: AssessmentService,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialog: MatDialog,\r\n private sharedService: SharedService,\r\n private securityService: SecurityService,\r\n ) { }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.data) {\r\n this.data.sort = this._sort;\r\n this.setSorting();\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.fields.forEach(f => {\r\n this.fieldsColumns.push(f);\r\n });\r\n if (this.showActionButton == true) {\r\n this.fieldsColumns.push('Actions');\r\n }\r\n // POST: subscribes to manual changes\r\n if (this.triggerChanges) {\r\n this.triggerChangeSubscription = this.triggerChanges.subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n this.V9UserPermissions = this.securityService.userPermissions;\r\n const isDelete = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'AS_DSTS');\r\n if ((isDelete != undefined && isDelete != null && isDelete.length > 0)) {\r\n this.userCanDelete = true;\r\n }\r\n // Maintain Scores for Individual Students\r\n const userCanAdd = this.V9UserPermissions.filter(permission => (permission.PermissionCode == 'AS_MSFIS'))[0];\r\n if (userCanAdd != undefined && userCanAdd != null) {\r\n this.userCanProcess = true;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the table data's sort\r\n this.setSorting();\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: unsubscribes to manual changes and sets the table data's sort\r\n if (this.triggerChangeSubscription) {\r\n this.triggerChangeSubscription.unsubscribe();\r\n }\r\n this.setSorting();\r\n }\r\n\r\n // Methods\r\n setSorting() {\r\n // PRE: table data\r\n // POST: sets the table data's sort\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n this.data.sortingDataAccessor = (data: any, sortHeaderId: string): string | number => {\r\n let value = data[sortHeaderId];\r\n const dateRegex = /\\d{2}\\/\\d{2}\\/\\d{2}/y;\r\n if (value) {\r\n if (dateRegex.test(value)) {\r\n value = new Date(value);\r\n return value.getTime();\r\n } else {\r\n return this.data.defaultSortingAccessor(data, sortHeaderId);\r\n }\r\n } else {\r\n return '';\r\n }\r\n };\r\n this.sort.sort({\r\n id: this.fields[0],\r\n start: 'asc',\r\n disableClear: true\r\n });\r\n }\r\n }\r\n\r\n fieldTrackBy(index: number, item: string) {\r\n return item + index;\r\n }\r\n\r\n editAssessmentClick(assessmentData: any) {\r\n let testInstanceId = 0;\r\n if (assessmentData && assessmentData.TestInstanceId) {\r\n testInstanceId = parseInt(assessmentData.TestInstanceId, 10);\r\n }\r\n const dialogRef = this.dialog.open(AddAssessmentScoresComponent, {\r\n height: '100vh',\r\n width: '60vw',\r\n disableClose: true,\r\n data: {\r\n instanceId: testInstanceId,\r\n testMasterLayoutVersionId: 0,\r\n assessmentData: assessmentData,\r\n editMode: true\r\n }\r\n });\r\n dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n this.getAssessmentDataEvent.emit(true);\r\n }\r\n });\r\n }\r\n\r\n deleteAssessmentClick(assessmentData: any) {\r\n let testInstanceId = 0;\r\n if (assessmentData && assessmentData.TestInstanceId) {\r\n testInstanceId = parseInt(assessmentData.TestInstanceId, 10);\r\n }\r\n\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Assessment';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this record? ';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.assessmentService.deleteAssessmentById(testInstanceId).subscribe(res => {\r\n this.sharedService.showGoodSnackbar();\r\n this.getAssessmentDataEvent.emit(true);\r\n });\r\n }\r\n });\r\n }\r\n}","\r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Test\r\n \r\n \r\n \r\n {{dataCategory.fullTitle}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n Add Scores\r\n \r\n \r\n \r\n\r\n \r\n \r\n \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, OnInit, AfterViewInit, OnChanges, Input, Output, EventEmitter, ChangeDetectorRef, ViewChild, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { AssessmentDataCategory } from '../assessment-data-category';\r\nimport { Subscription } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { AddAssessmentScoresComponent } from './add-assessment-scores/add-assessment-scores.component';\r\nimport { UserPermission } from '../../../../shared-components/user/user-permission.model';\r\nimport { SecurityService } from '../../../../shared-components/security/security.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-assessment-data-category-table',\r\n templateUrl: './assessment-data-category-table.component.html',\r\n styleUrls: ['./assessment-data-category-table.component.css'],\r\n animations: [detailExpand],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AssessmentDataCategoryTableComponent implements OnInit, AfterViewInit, OnChanges {\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n @Input() data: TylerMatTableDataSource;\r\n @Input() tabIndex: number;\r\n @Output() detailOpened = new EventEmitter();\r\n @Input() showChildFilters = true;\r\n @Input() showActionMenu = true;\r\n @Input() triggerChanges: EventEmitter;\r\n @Output() getAssessmentEvent = new EventEmitter();\r\n triggerChangeSubscription: Subscription;\r\n selectedRow: AssessmentDataCategory;\r\n headerColumns: string[] = ['More', 'fullTitle', 'action'];\r\n V9UserPermissions: UserPermission[] = [];\r\n userCanProcess: boolean;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private changeDetector: ChangeDetectorRef,\r\n private router: Router,\r\n private securityService: SecurityService,\r\n ) { }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.data) {\r\n this.data.sort = this._sort;\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n if (this.showActionMenu == false) {\r\n this.headerColumns = ['More', 'fullTitle'];\r\n }\r\n // POST: subscribes to manual changes\r\n if (this.triggerChanges) {\r\n this.triggerChangeSubscription = this.triggerChanges.subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n this.V9UserPermissions = this.securityService.userPermissions;\r\n // Maintain Scores for Individual Students\r\n const userCanAdd = this.V9UserPermissions.filter(permission => (permission.PermissionCode == 'AS_MSFIS'))[0];\r\n if (userCanAdd != undefined && userCanAdd != null) {\r\n this.userCanProcess = true;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the sort of the data\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: sets the sort of the data\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n }\r\n }\r\n\r\n rowClick(row: AssessmentDataCategory) {\r\n // PRE: a row is clicked\r\n // POST: toggles that row and detects changes\r\n this.data.toggleExpanded(row);\r\n this.detailOpened.emit(row);\r\n this.selectedRow = row;\r\n setTimeout(() => {\r\n this.triggerChanges.emit();\r\n }, 0);\r\n }\r\n\r\n addScores(event, dataCategory: AssessmentDataCategory) {\r\n event.stopPropagation();\r\n let layoutVersionId = 0;\r\n if (dataCategory.layoutVersionId != undefined && dataCategory.layoutVersionId > 0) {\r\n layoutVersionId = dataCategory.layoutVersionId;\r\n }\r\n const dialogRef = this.dialog.open(AddAssessmentScoresComponent, {\r\n height: '100vh',\r\n width: '60vw',\r\n disableClose: true,\r\n data: {\r\n instanceId: 0,\r\n testMasterLayoutVersionId: layoutVersionId,\r\n assessmentData: [],\r\n editMode: false\r\n }\r\n });\r\n dialogRef.afterClosed().subscribe(action => {\r\n if (action == 'save') {\r\n this.getAssessmentEvent.emit(true);\r\n }\r\n });\r\n }\r\n\r\n getAssessemntData(value) {\r\n if (value) {\r\n this.getAssessmentEvent.emit(true);\r\n }\r\n }\r\n\r\n}\r\n"," 0 ? dataCategoriesV10[0].minTableWidth() : 0\"> \r\n \r\n 0 && !processingTabs\" [tabNames]=\"tabNames\"\r\n [transformLabelsToTitleCase]=\"false\" (selectionsChangeIndex)=\"selectionChange($event)\"\r\n [startingIndex]=\"selectionIndex\">\r\n\r\n \r\n
\r\n No assessment scores exist for this student.\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n {{tab.DESCRIPTION}}\r\n - {{tab.FULLTITLE}}\r\n
\r\n\r\n \r\n
i\">\r\n = 1\"\r\n [showChildFilters]=\"tab.DESCRIPTION != 'Best Of'\" [data]=\"tableDataV9[i]\" [tabIndex]=\"i\"\r\n [showActionMenu]=\"tab.DESCRIPTION != 'Best Of'\" [triggerChanges]=\"triggerChanges\" (getAssessmentEvent)=\"getAssessemntTabs($event)\">\r\n
\r\n
\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 { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { SpinnerService } from '../../../shared-components/spinner/spinner.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserPermission } from '../../../shared-components/user/user-permission.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Assessment, TestMasterLayoutVersion } from '../../../student360/assessment/assessment.model';\r\nimport { AssessmentService } from '../../../student360/assessment/assessment.service';\r\nimport { AddAssessmentTabDialogComponent } from './add-assessment-tab-dialog/add-assessment-tab-dialog.component';\r\nimport { AssessmentDataCategory } from './assessment-data-category';\r\n\r\n\r\n@Component({\r\n selector: 'app-assessment',\r\n templateUrl: './assessment.component.html',\r\n styleUrls: ['./assessment.component.css']\r\n})\r\nexport class AssessmentComponent implements OnInit, OnDestroy {\r\n\r\n tabs: Assessment[];\r\n assessments: Assessment[];\r\n subscriptions: Subscription[] = [];\r\n tabNames: string[];\r\n tableDataV9: TylerMatTableDataSource[] = [];\r\n openDetailRows: Array = new Array();\r\n dataCategoriesV10: AssessmentDataCategory[];\r\n selectionIndex = 0;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n selectedRow: AssessmentDataCategory;\r\n assessmentAndTabSubscriptions: Subscription[] = [];\r\n selectedTabName = '';\r\n previousTabSelection = '';\r\n processingTabs = false;\r\n triggerChanges = new EventEmitter();\r\n testMasters: Lookup[] = [];\r\n testMasterLayoutVersions: TestMasterLayoutVersion[] = [];\r\n testMasterLayoutVersion: TestMasterLayoutVersion[] = [];\r\n TestMasterId: number;\r\n TestMasterLayoutVersionId: number;\r\n V9UserPermissions: UserPermission[] = [];\r\n userCanProcess: boolean;\r\n\r\n constructor(\r\n private assessmentService: AssessmentService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private changeDetector: ChangeDetectorRef,\r\n private spinnerService: SpinnerService,\r\n private lookupService: LookupService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private securityService: SecurityService,\r\n ) { }\r\n\r\n get filtered(): boolean {\r\n if (this.tableDataV9[this.selectionIndex]) {\r\n let filtered = this.tableDataV9[this.selectionIndex].isFiltered();\r\n for (let i = 0; i < this.tableDataV9[this.selectionIndex].data.length; i++) {\r\n const subTable = this.tableDataV9[this.selectionIndex].data[i];\r\n if (subTable instanceof AssessmentDataCategory && subTable.subTableData.isFiltered()) {\r\n filtered = true;\r\n break;\r\n }\r\n }\r\n return filtered;\r\n }\r\n return false;\r\n }\r\n\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: subscribing to the necessary services\r\n this.getAssessmentsAndTabs();\r\n this.getTestMastersLookup();\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.getAssessmentsAndTabs();\r\n }),\r\n this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.previousTabSelection = this.selectedTabName;\r\n this.getAssessmentsAndTabs();\r\n }),\r\n this.toggleAllRows.subscribe(toggle => {\r\n if (this.tableDataV9[this.selectionIndex]) {\r\n this.tableDataV9[this.selectionIndex].expandAll(toggle);\r\n this.triggerChanges.emit();\r\n }\r\n })\r\n );\r\n\r\n this.V9UserPermissions = this.securityService.userPermissions;\r\n // Maintain Scores for Individual Students\r\n const userCanAdd = this.V9UserPermissions.filter(permission => (permission.PermissionCode == 'AS_MSFIS'))[0];\r\n if (userCanAdd != undefined && userCanAdd != null) {\r\n this.userCanProcess = true;\r\n }\r\n }\r\n\r\n getTestMastersLookup() {\r\n this.lookupService.getTestMastersLookup().subscribe(result => {\r\n this.testMasters = result;\r\n this.getTestMasterLayoutVersion();\r\n });\r\n }\r\n\r\n getTestMasterLayoutVersion() {\r\n this.assessmentService.getTestMasterLayoutVersion().subscribe(result => {\r\n this.testMasterLayoutVersions = result;\r\n });\r\n }\r\n\r\n setLayoutVersion(testMasterId: number) {\r\n this.testMasterLayoutVersion = this.testMasterLayoutVersions.filter(x => x.TestMasterId == testMasterId);\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n this.assessmentAndTabSubscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n selectionChange(selectionIndex: number) {\r\n // PRE: the tab selection changes and this is passed the index of the tab\r\n // POST: sets the current tab\r\n this.spinnerService.showSpinner = true;\r\n setTimeout(() => {\r\n this.selectionIndex = selectionIndex;\r\n this.selectedTabName = this.tabNames[selectionIndex];\r\n setTimeout(() => {\r\n this.spinnerService.showSpinner = false;\r\n }, 100);\r\n }, 500);\r\n }\r\n\r\n clearFilter() {\r\n // POST: clears the filters from the current tab's table\r\n if (this.tableDataV9[this.selectionIndex]) {\r\n this.tableDataV9[this.selectionIndex].removeAllFilters();\r\n for (let i = 0; i < this.tableDataV9[this.selectionIndex].data.length; i++) {\r\n const subTable = this.tableDataV9[this.selectionIndex].data[i];\r\n if (subTable instanceof AssessmentDataCategory) {\r\n subTable.subTableData.removeAllFilters();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Methods\r\n getAssessmentsAndTabs(saveCall = false) {\r\n // POST: obtains the assessments and tabs, setting tab names and assessments\r\n // Preparing for processing\r\n this.processingTabs = true;\r\n this.assessmentAndTabSubscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n this.assessmentAndTabSubscriptions = [];\r\n\r\n // Obtaining data\r\n const yearId = this.yearService.defaultYear.Id;\r\n this.assessmentAndTabSubscriptions.push(\r\n\r\n // Obtaining tabs\r\n this.assessmentService.getStudentAssessmentTabs(yearId).subscribe(tabs => {\r\n this.tabNames = [];\r\n tabs.forEach(tab => {\r\n this.tabNames.push(tab.DESCRIPTION);\r\n });\r\n this.tabs = tabs;\r\n\r\n // Changing to the first tab\r\n if (saveCall == false) {\r\n this.selectionIndex = 0;\r\n this.selectedTabName = this.tabNames[0];\r\n }\r\n\r\n\r\n // Obtaining assessments\r\n this.assessmentAndTabSubscriptions.push(\r\n this.assessmentService.getStudentAssessments(tabs).subscribe(assessments => {\r\n this.assessments = assessments;\r\n this.arrangeTabs(saveCall);\r\n this.processingTabs = false;\r\n })\r\n );\r\n })\r\n );\r\n }\r\n\r\n arrangeTabs(saveCall = false) {\r\n // PRE: the tabs and data are obtained\r\n // POST: arranges the data for display and sets the initial grid size\r\n this.arrangeTabsV9(saveCall);\r\n\r\n // If this is V9 and the first tab, we expand all\r\n setTimeout(() => {\r\n if (this.selectionIndex == 0) {\r\n this.toggleAllRows.emit(true);\r\n }\r\n }, 10);\r\n\r\n // Running change detection manually because we made a ton of changes\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n arrangeTabsV9(saveCall = false) {\r\n // PRE: Your user MUST be in V9, or this doesn't make sense\r\n // POST: finds the tabs and arranges the data for each tab\r\n this.tableDataV9 = [];\r\n const dataArrays: Array> = new Array>();\r\n\r\n // Creating a data category for each tab\r\n for (let i = 0; i < this.tabNames.length; i++) {\r\n dataArrays.push(new Array());\r\n }\r\n\r\n for (let i = 0; i < this.assessments.length; i++) {\r\n\r\n // Only operating on the assessment if we should display this\r\n if (this.assessments[i].Display) {\r\n\r\n // Determining where to place this data\r\n const tableIndex = this.tabNames.indexOf(this.assessments[i].FULLTITLE);\r\n const dataCategories = dataArrays[tableIndex];\r\n let categoryExists = false;\r\n let categoryIndex = -1;\r\n for (let j = 0; j < dataCategories.length; j++) {\r\n if (categoryIndex < 0 &&\r\n dataCategories[j].category == this.assessments[i].DESCRIPTION &&\r\n dataCategories[j].testName == this.assessments[i].FULLTITLE) {\r\n categoryExists = true;\r\n categoryIndex = j;\r\n }\r\n }\r\n const bestOfTableIndex = this.tabNames.indexOf('Best Of');\r\n const bestOfCategories = bestOfTableIndex >= 0 ? dataArrays[bestOfTableIndex] : null;\r\n let bestOfCategoryExists = false;\r\n let bestOfIndex = -1;\r\n if (bestOfCategories && this.assessments[i].BESTOF) {\r\n for (let j = 0; j < bestOfCategories.length; j++) {\r\n if (bestOfIndex < 0 &&\r\n bestOfCategories[j].category == this.assessments[i].DESCRIPTION &&\r\n bestOfCategories[j].testName == this.assessments[i].FULLTITLE) {\r\n bestOfCategoryExists = true;\r\n bestOfIndex = j;\r\n }\r\n }\r\n }\r\n\r\n // If not place was found, creating a new category for it\r\n if (!categoryExists) {\r\n dataCategories.push(new AssessmentDataCategory());\r\n categoryIndex = dataCategories.length - 1;\r\n const assessment = this.assessments[i];\r\n dataCategories[categoryIndex].category = assessment.DESCRIPTION;\r\n dataCategories[categoryIndex].testName = assessment.FULLTITLE;\r\n dataCategories[categoryIndex].fullTitle = assessment.DESCRIPTION;\r\n const dataFields = assessment.AssessmentDataField;\r\n if (dataFields != null && dataFields.length > 0) {\r\n dataCategories[categoryIndex].layoutVersionId = dataFields[0].TestMasterLayoutVersionId;\r\n dataCategories[categoryIndex].instanceId = dataFields[0].TestInstanceId;\r\n }\r\n }\r\n if (this.assessments[i].BESTOF && !bestOfCategoryExists) {\r\n bestOfCategories.push(new AssessmentDataCategory());\r\n bestOfIndex = bestOfCategories.length - 1;\r\n const assessment = this.assessments[i];\r\n bestOfCategories[bestOfIndex].category = this.assessments[i].DESCRIPTION;\r\n bestOfCategories[bestOfIndex].testName = this.assessments[i].FULLTITLE;\r\n bestOfCategories[bestOfIndex].fullTitle = this.assessments[i].FULLTITLE + ' - ' + this.assessments[i].DESCRIPTION;\r\n const dataFields = assessment.AssessmentDataField;\r\n if (dataFields != null && dataFields.length > 0) {\r\n bestOfCategories[categoryIndex].layoutVersionId = dataFields[0].TestMasterLayoutVersionId;\r\n bestOfCategories[categoryIndex].instanceId = dataFields[0].TestInstanceId;\r\n }\r\n }\r\n\r\n // Ensuring the correct category names\r\n this.assessments[i].AssessmentDataField.forEach(field => {\r\n if (!dataCategories[categoryIndex].fields.includes(field.strFieldName)) {\r\n dataCategories[categoryIndex].fields.push(field.strFieldName);\r\n }\r\n if (this.assessments[i].BESTOF) {\r\n if (!bestOfCategories[bestOfIndex].fields.includes(field.strFieldName)) {\r\n bestOfCategories[bestOfIndex].fields.push(field.strFieldName);\r\n }\r\n }\r\n });\r\n\r\n // Iterating through the data rows\r\n this.assessments[i].AssessmentsDataRows.forEach(dataRow => {\r\n\r\n // Creating dictionary for each data row\r\n const dictionaryData: { [key: string]: string } = {};\r\n dictionaryData['TestInstanceId'] = dataRow.AssessmentData[0].TestInstanceId.toString();\r\n dataRow.AssessmentData.forEach(data => {\r\n dictionaryData[data.strFieldName] = data.strFieldData;\r\n });\r\n\r\n // Adding it to our categories if it's not there (preventing duplicates)\r\n if (!dataCategories[categoryIndex].contains(dictionaryData)) {\r\n dataCategories[categoryIndex].data.push(dictionaryData);\r\n }\r\n if (this.assessments[i].BESTOF) {\r\n if (!bestOfCategories[bestOfIndex].contains(dictionaryData)) {\r\n bestOfCategories[bestOfIndex].data.push(dictionaryData);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // for new tab\r\n for (let t = 0; t < dataArrays.length; t++) {\r\n // *********************************************\r\n const temptestMaster = this.testMasters.find(x => x.Code == this.tabNames[t]);\r\n let temptestMasterLayoutVersion: TestMasterLayoutVersion[] = [];\r\n if (temptestMaster != null) {\r\n temptestMasterLayoutVersion = this.testMasterLayoutVersions.filter(x => x.TestMasterId == Number(temptestMaster.Id));\r\n }\r\n // *******************************************\r\n\r\n if (dataArrays[t].length == 0 || temptestMasterLayoutVersion.length != dataArrays[t].length) {\r\n\r\n // Determining where to place this data\r\n const tableIndex = t;\r\n const dataCategories = dataArrays[tableIndex];\r\n let categoryIndex = -1;\r\n\r\n const testMaster = this.testMasters.find(x => x.Code == this.tabNames[t]);\r\n let testMasterLayoutVersion: TestMasterLayoutVersion[] = [];\r\n if (testMaster != null) {\r\n testMasterLayoutVersion = this.testMasterLayoutVersions.filter(x => x.TestMasterId == Number(testMaster.Id));\r\n }\r\n\r\n for (let c = 0; c < testMasterLayoutVersion.length; c++) {\r\n const isExists = dataArrays[t].find(aa => aa.fullTitle == testMasterLayoutVersion[c].Description);\r\n if (!isExists) {\r\n dataCategories.push(new AssessmentDataCategory());\r\n categoryIndex = dataCategories.length - 1;\r\n dataCategories[categoryIndex].category = testMasterLayoutVersion[c].Description;\r\n dataCategories[categoryIndex].testName = testMasterLayoutVersion[c].Description;\r\n dataCategories[categoryIndex].fullTitle = testMasterLayoutVersion[c].Description;\r\n dataCategories[categoryIndex].instanceId = 0;\r\n dataCategories[categoryIndex].layoutVersionId = testMasterLayoutVersion[c].VersionId;\r\n }\r\n }\r\n }\r\n\r\n if (saveCall == true) {\r\n this.selectionChange(this.selectionIndex);\r\n }\r\n }\r\n\r\n // Making data arrays MatTableDataSources\r\n dataArrays.forEach(dataArray => {\r\n // Sorting them alphabetically initially\r\n dataArray.sort((a, b) => {\r\n if (a.fullTitle < b.fullTitle) {\r\n return -1;\r\n } else if (b.fullTitle < a.fullTitle) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n\r\n // Sorting each one by date\r\n dataArray.forEach(dataCategory => {\r\n dataCategory.sort('Test Date', new Date());\r\n });\r\n\r\n // Constructing the subtable data\r\n dataArray.forEach(data => {\r\n data.createSubTableData();\r\n });\r\n\r\n // Inserting into table data\r\n this.tableDataV9.push(new TylerMatTableDataSource(dataArray));\r\n });\r\n }\r\n\r\n tabTrackBy(index: number, item: Assessment) {\r\n return item.Id;\r\n }\r\n\r\n addTab() {\r\n const unSelectedTabs: Lookup[] = [];\r\n this.testMasters.forEach(t => {\r\n if (this.tabNames.indexOf(t.Code) == -1) {\r\n unSelectedTabs.push(t);\r\n }\r\n });\r\n const dialogRef = this.dialog.open(AddAssessmentTabDialogComponent, {\r\n height: '80vh',\r\n width: '25vw',\r\n disableClose: true,\r\n data: {\r\n tabs: unSelectedTabs\r\n }\r\n });\r\n dialogRef.afterClosed().subscribe((data: Lookup[]) => {\r\n if (data != undefined && data.length > 0) {\r\n data.forEach(tab => {\r\n const newtab = new Assessment();\r\n if (this.tabNames.indexOf(tab.Code) == -1) {\r\n this.tabNames.push(tab.Code);\r\n newtab.FULLTITLE = tab.Code;\r\n newtab.DESCRIPTION = tab.Code;\r\n newtab.Display = true;\r\n this.tabs.push(newtab);\r\n }\r\n });\r\n\r\n // Sorting them\r\n if (data.length > 0) {\r\n let tempTabs: Assessment[];\r\n tempTabs = this.tabs;\r\n this.tabs = [];\r\n\r\n let tampTabName = [];\r\n tampTabName = this.tabNames;\r\n this.tabNames = [];\r\n\r\n setTimeout(() => {\r\n this.tabs.push(tempTabs[0]);\r\n tempTabs = _.orderBy(tempTabs, ['DESCRIPTION'], ['asc']);\r\n tempTabs.forEach(tb => {\r\n if (this.tabs.find(x => x.DESCRIPTION == tb.DESCRIPTION) == null) {\r\n this.tabs.push(tb);\r\n }\r\n });\r\n\r\n this.tabNames.push(tampTabName[0]);\r\n tampTabName = tampTabName.sort((a, b) => (a > b ? 1 : -1));\r\n tampTabName.forEach(t => {\r\n if (this.tabNames.indexOf(t) == -1) {\r\n this.tabNames.push(t);\r\n }\r\n });\r\n this.arrangeTabs();\r\n }, 0);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getAssessemntTabs(value) {\r\n if (value) {\r\n this.getAssessmentsAndTabs(true);\r\n }\r\n }\r\n\r\n studentViewMode() {\r\n if (this.router.url.toLowerCase().indexOf('registrationenrollment') > -1) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { StudentTeams } from '../../../classroom360/student-teams/student-teams.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TeamsService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getTeamsByStudentId(studentId: number, yearId: number, schoolId: number): Observable {\r\n const queryString = '?studentId=' + studentId\r\n + '&yearId=' + yearId\r\n + '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Admin + 'GetTeamsByStudentId' + queryString);\r\n }\r\n\r\n deleteTeamByStudentId(studentId: number, teamId: number): Observable {\r\n const queryString = '?studentId=' + studentId + '&teamId=' + teamId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteTeamByStudentId' + queryString);\r\n }\r\n\r\n getTeamList(schoolId: number, yearId: number): Observable {\r\n const queryString = '?siteId=' + schoolId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetTeamList' + queryString);\r\n }\r\n\r\n saveStudentToTeam(studentId: number, data: StudentTeams): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.post(System.apiURL.Admin + `SaveStudentToTeam` + queryString, data);\r\n}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport {\r\n CanActivate,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n} from \"@angular/router\";\r\nimport { Observable } from \"rxjs\";\r\nimport { UserService } from \"./shared-components/user/user.service\";\r\nimport { Router } from \"@angular/router\";\r\nimport { AuthService } from \"./shared-modules/login/auth.service\";\r\nimport { LoginService } from \"./shared-modules/login/login.service\";\r\n@Injectable()\r\nexport class AuthGuard implements CanActivate {\r\n constructor(\r\n private auth: UserService,\r\n private authService: AuthService,\r\n private loginService: LoginService,\r\n private myRoute: Router\r\n ) {}\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable | Promise | boolean {\r\n if (this.loginService.LoginSettings.UseTID && this.loginService.hasSignedIntoTylerId) {\r\n const isLoggedIn = this.authService.isLoggedInObs();\r\n isLoggedIn.subscribe((loggedin) => {\r\n if (!loggedin) {\r\n this.myRoute.navigate([\"\"]);\r\n }\r\n });\r\n const accessToken = sessionStorage.getItem(\"accessToken\");\r\n if (\r\n accessToken != null &&\r\n (this.auth.userId !== 0 ||\r\n (this.auth.userType == 3 && this.auth.studentId != 0)) &&\r\n this.auth.isLoggedIn\r\n ) {\r\n return isLoggedIn;\r\n } else {\r\n this.myRoute.navigate([\"\"]);\r\n return false;\r\n } \r\n } else {\r\n const accessToken = sessionStorage.getItem(\"accessToken\");\r\n if (\r\n accessToken != null &&\r\n (this.auth.userId !== 0 ||\r\n (this.auth.userType == 3 && this.auth.studentId != 0)) &&\r\n this.auth.isLoggedIn\r\n ) {\r\n return true;\r\n } else {\r\n this.myRoute.navigate([\"\"]);\r\n return false;\r\n }\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ClassroomSummary } from './models/classroom-summary.model';\r\n\r\n@Pipe({\r\n name: 'filterClass',\r\n pure: false\r\n})\r\n\r\nexport class FilterClass implements PipeTransform {\r\n\r\n transform(classes: ClassroomSummary[], filter?): any {\r\n return classes.filter(\r\n course =>\r\n (!filter.Meets || (course.Meets && (course.Meets.toLowerCase().startsWith(filter.Meets.toLowerCase()) || (filter.Meets.startsWith('%') && course.Meets.toLowerCase().indexOf(filter.Meets.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.Term || (course.Term && (course.Term.toLowerCase().startsWith(filter.Term.toLowerCase()) || (filter.Term.startsWith('%') && course.Term.toLowerCase().indexOf(filter.Term.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.CourseSection || (course.CourseSection && (course.CourseSection.toLowerCase().startsWith(filter.CourseSection.toLowerCase()) || (filter.CourseSection.startsWith('%') && course.CourseSection.indexOf(filter.CourseSection.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.Course || (course.Course && (course.Course.toLowerCase().startsWith(filter.Course.toLowerCase()) || (filter.Course.startsWith('%') && course.Course.indexOf(filter.Course.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.Instructor || (course.Instructor && (course.Instructor.toLowerCase().startsWith(filter.Instructor.toLowerCase()) || (filter.Instructor.startsWith('%') && course.Instructor.indexOf(filter.Instructor.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.Room || (course.Room && (course.Room.toLowerCase().startsWith(filter.Room.toLowerCase()) || (filter.Room.startsWith('%') && course.Room.indexOf(filter.Room.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n (!filter.Enrolled || (course.Enrolled && (course.Enrolled.toString().toLowerCase().startsWith(filter.Enrolled.toLowerCase()) || (filter.Enrolled.startsWith('%') && course.Enrolled.toString().indexOf(filter.Enrolled.toLowerCase().substring(1)) > -1)))) &&\r\n\r\n ((filter.AttStatusNone && course.TodaysAttendance == 0) ||\r\n (filter.AttStatusPartial && course.TodaysAttendance == 1) ||\r\n (filter.AttStatusAll && (course.TodaysAttendance == 2 || course.TodaysAttendance == 4)) ||\r\n (filter.AttStatusPerfect && course.TodaysAttendance == 3)) &&\r\n\r\n ((filter.GradingNone && course.TodaysGrading == 0) ||\r\n (filter.GradingPartial && course.TodaysGrading == 1) ||\r\n (filter.GradingAll && course.TodaysGrading == 2)) &&\r\n\r\n ((filter.RCGNone && course.GradePostedStatus == 2) ||\r\n (filter.RCGAll && course.GradePostedStatus == 1) ||\r\n (filter.RCGEx && (course.GradePostedStatus == 0 || course.GradePostedStatus == 3)))\r\n );\r\n }\r\n}","import { formatDate } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, forkJoin as observableForkJoin, Observable, Subject, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { FilterModel } from '../../shared-components/controls/filter/filter.model';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { Portal } from '../../shared-components/portal.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { CheckForErrorsGuard } from './../../shared-components/guards/check-for-errors/check-for-errors.guard';\r\nimport { UnsavedChangesGuard } from './../../shared-components/guards/unsaved-changes/unsaved-changes.guard';\r\nimport { System } from './../../shared-components/System';\r\nimport { LoginService } from './../../shared-modules/login/login.service';\r\nimport { ClassroomSummaryFilter } from './models/classroom-summary-filter';\r\nimport { ClassroomSummary } from './models/classroom-summary.model';\r\nimport { ClassroomTerm } from './models/classroom-term.model';\r\nimport { CourseHasProfile } from './models/course-has-profile';\r\n\r\n@Injectable()\r\nexport class ClassroomSummaryService {\r\n\r\n displayedBulletins = false; // Announcements modal that displays at first login of the day.\r\n private _selectedCourse: ClassroomSummary;\r\n public get selectedCourse(): ClassroomSummary {\r\n return this._selectedCourse;\r\n }\r\n public set selectedCourse(value: ClassroomSummary) {\r\n const canContinue = this.unsavedChangesGuard.checkForDeactivation() && this.checkForErrorsGuard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n this._selectedCourse = value;\r\n this.observableselectedCourse.next(this._selectedCourse);\r\n }\r\n });\r\n } else if (canContinue) {\r\n this._selectedCourse = value;\r\n this.observableselectedCourse.next(this._selectedCourse);\r\n }\r\n }\r\n\r\n public get selectedCourseSummary(): string {\r\n return this.getCourseSummary(this.selectedCourse);\r\n }\r\n private _myClasses: ClassroomSummary[];\r\n public get myClasses(): ClassroomSummary[] {\r\n return this._myClasses;\r\n }\r\n public set myClasses(value: ClassroomSummary[]) {\r\n this._myClasses = value;\r\n this.observableMyClasses.next(value);\r\n }\r\n public observableMyClasses = new BehaviorSubject([]);\r\n observableMyClassesStream$ = this.observableMyClasses.asObservable();\r\n private previousArgs: any;\r\n gradebookClassesSet = false;\r\n\r\n public terms: ClassroomTerm[];\r\n\r\n StaffAssignedPortals: Portal[];\r\n defaultYear: Year;\r\n defaultYearSubscription: Subscription;\r\n public observableselectedCourse = new Subject();\r\n observableselectedCourseStream$ = this.observableselectedCourse.asObservable();\r\n\r\n filterData: ClassroomSummaryFilter;\r\n classSourceFilters: FilterModel[];\r\n filterChange = new EventEmitter();\r\n\r\n timeStamp: Date = new Date();\r\n refreshInterval: Subscription;\r\n modelAge = 0;\r\n lastRefresh: string;\r\n loadedYear: number;\r\n mergeModalOpened: boolean;\r\n gradebookClasses: ClassroomSummary[];\r\n\r\n private _selectedTerm: ClassroomTerm;\r\n public get selectedTerm(): ClassroomTerm {\r\n return this._selectedTerm;\r\n }\r\n public set selectedTerm(value: ClassroomTerm) {\r\n this._selectedTerm = value;\r\n this.observableSelectedTerm.next(this._selectedTerm);\r\n }\r\n observableSelectedTerm = new Subject();\r\n observableSelectedTermStream$ = this.observableSelectedTerm.asObservable();\r\n\r\n private _showAllClasses: boolean;\r\n public get showAllClasses(): boolean {\r\n return this._showAllClasses;\r\n }\r\n public set showAllClasses(value: boolean) {\r\n this._showAllClasses = value;\r\n this.observableShowAllClasses.next(this._showAllClasses);\r\n }\r\n observableShowAllClasses = new Subject();\r\n observableShowAllClassesStream$ = this.observableShowAllClasses.asObservable();\r\n\r\n viewOptions = [\r\n {\r\n value: '1',\r\n display: 'Unmerged'\r\n },\r\n {\r\n value: '2',\r\n display: 'Merged For Attendance'\r\n },\r\n {\r\n value: '3',\r\n display: 'Merged For Grading'\r\n }\r\n ];\r\n private _selectedView = this.viewOptions[0];\r\n public get selectedView() {\r\n return this._selectedView;\r\n }\r\n public set selectedView(value) {\r\n this._selectedView = value;\r\n this.observableSelectedView.next(this._selectedView);\r\n }\r\n observableSelectedView = new Subject();\r\n observableSelectedViewStream$ = this.observableSelectedView.asObservable();\r\n\r\n\r\n constructor(private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private userPreferencesService: UserPreferencesService,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private unsavedChangesGuard: UnsavedChangesGuard) {\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.defaultYearSubscription = yearService.observableDefaultYearStream$.subscribe(\r\n defaultYear => {\r\n this.defaultYear = defaultYear;\r\n }\r\n );\r\n }\r\n\r\n organizeClasses(courses: ClassroomSummary[]) {\r\n // POST organizes the courses properties\r\n courses.forEach(course => {\r\n if (!course.CourseSection) {\r\n course.CourseSection = course.SubjectCode + '-' + course.Section;\r\n }\r\n if (!course.CourseMenuText) {\r\n course.CourseMenuText = this.getCourseSummary(course);\r\n }\r\n if (course.TermToDate) {\r\n course.TermToDate = new Date(course.TermToDate);\r\n }\r\n if (course.TermFromDate) {\r\n course.TermFromDate = new Date(course.TermFromDate);\r\n }\r\n });\r\n }\r\n\r\n getMyClasses(termId: number, viewId: number, isTeacher: boolean, includeAllCourses: boolean, dateItem: Date): Observable {\r\n if (this.previousArgs &&\r\n this.previousArgs.termId == termId &&\r\n this.previousArgs.viewId == viewId &&\r\n this.previousArgs.isTeacher == isTeacher &&\r\n this.previousArgs.includeAllCourses == includeAllCourses &&\r\n this.previousArgs.dateItem == dateItem &&\r\n this.previousArgs.yearId == this.defaultYear.Id &&\r\n this.previousArgs.school == this.defaultYear.SchoolID) {\r\n return this.observableMyClassesStream$;\r\n } else {\r\n this.previousArgs = {\r\n termId: termId,\r\n viewId: viewId,\r\n isTeacher: isTeacher,\r\n includeAllCourses: includeAllCourses,\r\n dateItem: dateItem,\r\n year: this.defaultYear.Id,\r\n school: this.defaultYear.SchoolID\r\n };\r\n }\r\n const currentDate = new Date();\r\n const dateString = (currentDate.getUTCMonth() + 1) + '/' + currentDate.getDate() + '/' + currentDate.getUTCFullYear();\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.defaultYear.SchoolID +\r\n '&yearId=' + this.defaultYear.Id +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + isTeacher +\r\n '&dateItem=' + dateItem +\r\n '&includeAllCourses=' + includeAllCourses +\r\n '¤tDate=' + dateString;\r\n if (!this.mergeModalOpened) {\r\n this.myClasses = null;\r\n }\r\n return this.http.get(System.apiURL.Classroom + 'GetMyClasses' + queryString).pipe(\r\n map(result => {\r\n this.organizeClasses(result);\r\n if (!this.mergeModalOpened) {\r\n this.myClasses = result;\r\n }\r\n this.loadedYear = this.defaultYear.Id;\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n getClassesForSchoolAndYear(yearId: number, schoolId: number, termId: number, viewId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + true +\r\n '&dateItem=' + new Date() +\r\n '&includeAllCourses=' + false +\r\n '¤tDate=' + formatDate(new Date, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Classroom + 'GetMyClasses' + queryString).pipe(\r\n map(result => {\r\n this.myClasses = result;\r\n this.organizeClasses(this.myClasses);\r\n return this.myClasses;\r\n })\r\n );\r\n }\r\n\r\n getClassesWithoutBroadcast(yearId: number, schoolId: number, termId: number, viewId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + true +\r\n '&dateItem=' + new Date() +\r\n '&includeAllCourses=' + false +\r\n '¤tDate=' + formatDate(new Date, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Classroom + 'GetMyClasses' + queryString).pipe(\r\n map(courses => {\r\n this.organizeClasses(courses);\r\n return courses;\r\n })\r\n );\r\n }\r\n\r\n\r\n getGradebookAttendanceClasses(forGradebook: boolean, termId: number) {\r\n const currentDate = new Date();\r\n const dateString = (currentDate.getUTCMonth() + 1) + '/' + currentDate.getDate() + '/' + currentDate.getUTCFullYear();\r\n let queryString = '';\r\n const viewId = (forGradebook) ? 3 : 2;\r\n queryString += '?schoolId=' + this.defaultYear.SchoolID +\r\n '&yearId=' + this.defaultYear.Id +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + this.userService.currentUser.UserIsTeacher +\r\n '&dateItem=' + null +\r\n '&includeAllCourses=' + false +\r\n '¤tDate=' + dateString;\r\n return this.http.get(System.apiURL.Classroom + 'GetMyClasses' + queryString).pipe(\r\n map(courses => {\r\n this.organizeClasses(courses);\r\n return courses;\r\n })\r\n );\r\n }\r\n\r\n getCourseProfileExistence(ssecIds: number[]) {\r\n return this.http.post(System.apiURL.Classroom + 'GetCourseHasProfile', ssecIds);\r\n }\r\n\r\n getClassroomTermsAndPreferences(): Observable {\r\n let paramString = '';\r\n paramString += '?studentId=0';\r\n paramString += '&pageURL=/OneSISClassroomSummary';\r\n paramString += '&subjectListId=0';\r\n paramString += '&subjectSection=';\r\n paramString += '&isDefaultPreferences=' + false;\r\n return observableForkJoin(\r\n this.http.get(System.apiURL.Classroom + 'GetClassroomTerms?schoolId=' + this.defaultYear.SchoolID + '&yearId=' + this.defaultYear.Id),\r\n this.http.get(System.apiURL.Student + 'GetUserPreferences' + paramString),\r\n (terms, preferences) => ({ terms, preferences })\r\n );\r\n }\r\n\r\n getClassroomPreferences(): Observable {\r\n let paramString = '';\r\n paramString += '?studentId=0';\r\n paramString += '&pageURL=/OneSISClassroomSummary';\r\n paramString += '&subjectListId=0';\r\n paramString += '&subjectSection=';\r\n paramString += '&isDefaultPreferences=' + false;\r\n return this.http.get(System.apiURL.Student + 'GetUserPreferences' + paramString);\r\n }\r\n\r\n mergeGradingSections(tgsId: number, mergeSectionName: string, primarySection: number, mergedIds: string) {\r\n return this.http.get(System.apiURL.Classroom + 'MergeGradingSections?tgsId=' + tgsId + '&mergeSectionName=' + mergeSectionName + '&primarySection=' + primarySection + '&mergedIds=' + mergedIds);\r\n }\r\n\r\n mergeGradingSectionsV9(mergeSectionName: string, primarySection: number, mergedIds: string) {\r\n return this.http.get(System.apiURL.Classroom + 'MergeGradingSectionsV9?mergeSectionName=' + encodeURIComponent(mergeSectionName) + '&primarySection=' + primarySection + '&mergedIds=' + mergedIds);\r\n }\r\n\r\n unmergeGradingSections(tgsId: number, mergeId: number) {\r\n return this.http.get(System.apiURL.Classroom + 'UnmergeGradingSections?tgsId=' + tgsId + '&mergeSSEC_ID=' + mergeId);\r\n }\r\n\r\n unmergeGradingSectionsV9(mergeId: number) {\r\n return this.http.get(System.apiURL.Classroom + 'UnmergeGradingSectionsV9?mergeSSEC_ID=' + mergeId);\r\n }\r\n\r\n mergeAttendanceSections(tgsId: number, mergeSectionName: string, primarySection: number, mergedIds: string) {\r\n return this.http.get(System.apiURL.Classroom + 'MergeAttendanceSections?tgsId=' + tgsId + '&mergeSectionName=' + mergeSectionName + '&primarySection=' + primarySection + '&mergedIds=' + mergedIds);\r\n }\r\n\r\n unmergeAttendanceSections(mergeId: number) {\r\n return this.http.get(System.apiURL.Classroom + 'UnmergeAttendanceSection?mergedId=' + mergeId);\r\n }\r\n\r\n myClassesExportToExcel(sheetName: string, includeHeaders: boolean, classes: ClassroomSummary[]) {\r\n return this.http.post(System.apiURL.Classroom + 'MyClassesExportToExcel?worksheetName=' + sheetName + '&includeColumnHeading=' + includeHeaders, classes);\r\n }\r\n\r\n getCourseSummary(course: ClassroomSummary): string {\r\n let courseSummary = '';\r\n if (course != null) {\r\n if (!this.loginService.LoginSettings.V10 && this.userService.currentUser.UserIsTeacher && course.SectionNickName) {\r\n courseSummary = course.Course + ' (' + course.SubjectCode + '-' + course.SectionNickName + ') ';\r\n }\r\n else {\r\n courseSummary = course.Course + ' (' + course.SubjectCode + '-' + course.Section + ') ';\r\n }\r\n if (this.loginService.LoginSettings.V10) {\r\n if (course.TermTo == course.TermFrom) {\r\n courseSummary += course.TermTo + ' ';\r\n } else {\r\n courseSummary += course.TermFrom + '-' + course.TermTo + ' ';\r\n }\r\n courseSummary += 'M: ' + course.Meets;\r\n }\r\n else {\r\n courseSummary += course.Meets;\r\n }\r\n }\r\n return courseSummary;\r\n }\r\n\r\n getTeacherClassesByMergedId(schoolId, yearId, termId, viewId, mergedIds, dateItem) {\r\n const queryString = 'schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&dateItem=' + dateItem;\r\n return this.http.post(System.apiURL.Classroom + 'GetTeacherClassesByMergedId?' + queryString, mergedIds);\r\n }\r\n\r\n getStudentCourses(studentId: number, ssecId: number, yearId: number) {\r\n return this.http.get(System.apiURL.Classroom + 'GetSectionByTeacherAndStudent?studentId=' + studentId + '&ssecId=' + ssecId + '&yearId=' + yearId);\r\n }\r\n\r\n getLastRefresh() {\r\n const currentTime = new Date();\r\n this.modelAge = Math.round((currentTime.getTime() - this.timeStamp.getTime()) / 60000);\r\n return this.modelAge;\r\n }\r\n\r\n clearRefreshTimer() {\r\n this.timeStamp = new Date();\r\n }\r\n\r\n setTimer58() {\r\n this.timeStamp = new Date();\r\n this.timeStamp.setMinutes(this.timeStamp.getMinutes() - 59);\r\n }\r\n\r\n editCourseInfo(operation: string, courseId: number, nickname: string, attachment: Attachment) {\r\n return this.http.post(System.apiURL.Classroom + 'EditCourseInfo?operation=' + operation + '&courseId=' + courseId + '&nickname=' + nickname, attachment);\r\n }\r\n\r\n getMergeSubjectSectionData(subjectSectionIds: number[]) {\r\n return this.http.post(System.apiURL.Classroom + 'GetMergeSubjectSectionData', subjectSectionIds);\r\n }\r\n\r\n updateSectionNickName(siteSectionId: number, sectionNickName: string): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + siteSectionId +\r\n '§ionNickName=' + sectionNickName;\r\n return this.http.get(System.apiURL.Classroom + 'UpdateSectionNickName' + queryString);\r\n }\r\n\r\n}\r\n","export class ClassroomSummaryFilter {\r\n AttStatusNone = true;\r\n AttStatusPartial = true;\r\n AttStatusAll = true;\r\n AttStatusPerfect = true;\r\n GradingNone = true;\r\n GradingPartial = true;\r\n GradingAll = true;\r\n RCGNone = true;\r\n RCGAll = true;\r\n RCGEx = true;\r\n Meets: string = '';\r\n MeetsOperation: string = '0';\r\n Term: string = '';\r\n TermOperation: string = '0';\r\n CourseSection: string = '';\r\n CourseSectionOperation: string = '0';\r\n Course: string = '';\r\n CourseOperation: string = '0';\r\n Room: string = '';\r\n RoomOperation: string = '0';\r\n Enrolled: string = '';\r\n EnrolledOperation: string = '0';\r\n Instructor: string = '';\r\n InstructorOperation: string = '0';\r\n\r\n get CourseName(): string {\r\n return this.Course;\r\n }\r\n}","import { GradingPeriod } from '../../gradebook/v9/models/grading-period.model';\r\n\r\nexport class ClassroomSummary {\r\n\r\n Id: number;\r\n Meets: string;\r\n MeetsOrder: number;\r\n TermId: number;\r\n Term: string;\r\n TermTo: string;\r\n TermToDate = new Date();\r\n TermFrom: string;\r\n TermFromDate = new Date();\r\n Course: string;\r\n CourseHasProfile: boolean;\r\n CourseSection: string;\r\n Instructor: string;\r\n SubjectCode: string;\r\n Section: string;\r\n TodaysAttendance: number;\r\n TodaysGrading: number;\r\n Room: string;\r\n Enrolled: number;\r\n AttendanceRequired: boolean;\r\n MergedForAttendance: boolean;\r\n MergedForGrading: boolean;\r\n MergedStandardsConflict: boolean;\r\n MergedAddTeacherConflict: boolean;\r\n MergedOverrideDateConflict: boolean;\r\n MergedAttendanceSection: boolean;\r\n MergedGradebookSection: boolean;\r\n MergedSectionName: string;\r\n MergedTGS_ID: number;\r\n MergedGradebookSSEC_ID: number;\r\n MergedAttendanceSSEC_ID: number;\r\n PeriodNumber: number;\r\n LunchIndicator: boolean;\r\n UpdatedDate = new Date();\r\n UsedForGrading: boolean;\r\n SubjectId: number;\r\n SiteSubjectListId: number;\r\n CourseSelected: boolean;\r\n TeacherId: number;\r\n PriorToStartofYear = new Date();\r\n BeyondEndofYear = new Date();\r\n SSEC_ID: number;\r\n StartDate = new Date();\r\n EndDate = new Date();\r\n IsCurrentCourse: boolean;\r\n GradebookMustAlignToObjective: boolean;\r\n DataBucket_ID: number;\r\n AdditionalTeacher: boolean;\r\n AdditionalTeacherSearchAttendance: boolean;\r\n AdditionalTeacherSubmitAttendance: boolean;\r\n AdditionalTeacherAccessGradebook: boolean;\r\n SeatingCharts: number;\r\n DefaultSeatingChart: string;\r\n GradeCycleId: number;\r\n GradePostedStatus: number;\r\n IsHomeRoom: boolean;\r\n MergedAttendancePrimarySubjectID: number;\r\n ProjectedStudent: number;\r\n GT_ID: number;\r\n GradingType: string;\r\n GBDisplayConfigExists: boolean;\r\n GBViewExists: boolean;\r\n RelatedTopic: number;\r\n ScoreStandardsByAssignment: boolean;\r\n HybridGradebook: boolean;\r\n ColumnsToExport: string[];\r\n GradebookAutoCalcObjScores: boolean;\r\n HasDefaultAttendanceCode: boolean;\r\n ObjectiveReportCardUsesSubjectGrades: boolean;\r\n ObjectiveReportCardUsesObjectiveGrades: boolean;\r\n AttendanceToday: boolean;\r\n GradeScaleExists: boolean;\r\n StandardsForReportCardsOnly: boolean;\r\n SectionNickName: string;\r\n GradebookAccess: boolean;\r\n GBCurrMarksNumericForStandards: boolean;\r\n StudentIds: number[] = [];\r\n ReportingSectionName: string; // THIS IS PURLEY THE SubjectSection.SSECName\r\n TeacherPeopleId: number;\r\n GradebookAssignmentsMustAlignToStandards: boolean;\r\n Department: string;\r\n\r\n // Non DTO Fields\r\n Selected: boolean;\r\n Primary: boolean;\r\n CourseMenuText: string;\r\n courseSelected: boolean;\r\n IsSelectedForMassEmail: boolean;\r\n Students: any[];\r\n classStudentsCheckAll: boolean;\r\n copyChecked: boolean;\r\n copyPeriods: GradingPeriod[];\r\n selectedCopyPeriod: GradingPeriod;\r\n Merged: string;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { BehaviorSubject, forkJoin, Observable, of, Subscription } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { GeneralConfirmationComponent } from '../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { Portal } from '../shared-components/portal.model';\r\nimport { PermissionEnum } from '../shared-components/security/permissions.enums';\r\nimport { SecurityService } from '../shared-components/security/security.service';\r\nimport { SharedService } from '../shared-components/shared.service';\r\nimport { StudentService } from '../shared-components/student/student.service';\r\nimport { System } from '../shared-components/System';\r\nimport { UserPreferencesService } from '../shared-components/user-preferences/user-preferences.service';\r\nimport { UserSchoolYearPolicies } from '../shared-components/user/user-school-year-policies.model';\r\nimport { UserService } from '../shared-components/user/user.service';\r\nimport { YearService } from '../shared-components/year/year.service';\r\nimport { LoginService } from '../shared-modules/login/login.service';\r\nimport { OnlinePaymentConfiguration } from '../student360/online-payment/models/online-payment-config.model';\r\nimport { ClassroomAttendance } from './attendance/models/attendance.model';\r\nimport { StudentPeriodicAttendanceDetail } from './attendance/models/student-periodic-attendance-detail.model';\r\nimport { ClassPostingStatus, CurrentGradingCycleInfo, GradingCycleClassPostingGrade, GradingCycleCValidGrades, GragingCycles, StudentsWithoutTermRecords, ViewGradingCycleGrades } from './grading-cycles/graging-cycles.model';\r\nimport { NewStudent, Sites } from './new-students-alert-dialog/model';\r\n\r\n@Injectable()\r\nexport class Classroom360Service {\r\n\r\n defaultYearSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n\r\n public staffAssignedPortals: Portal[];\r\n observableStaffAssignedPortals = new BehaviorSubject([]);\r\n observableStaffAssignedPortalsStream$ = this.observableStaffAssignedPortals.asObservable();\r\n gradebookPortalSelected: boolean;\r\n attendancePortalSelected: boolean;\r\n courseInfoPortalSelected: boolean;\r\n previousPortalArgs: { [key: string]: any } = {};\r\n redirectToEForms: boolean;\r\n performed = false;\r\n V10: boolean;\r\n currentGradingCycleInfo: CurrentGradingCycleInfo = new CurrentGradingCycleInfo();\r\n private _schoolPolicy: UserSchoolYearPolicies;\r\n observableSchoolPolicy = new BehaviorSubject(new UserSchoolYearPolicies());\r\n observableSchoolPolicyStream$ = this.observableSchoolPolicy.asObservable();\r\n get schoolPolicy(): UserSchoolYearPolicies {\r\n return this._schoolPolicy;\r\n }\r\n set schoolPolicy(value: UserSchoolYearPolicies) {\r\n this._schoolPolicy = value;\r\n this.observableSchoolPolicy.next(value);\r\n }\r\n\r\n // TODO: this is for discovering inactive modules and should be removed in the future\r\n S360CourseRequestPages = [\r\n '/scheduling/districtCourseRequestSetup',\r\n '/scheduling/schoolCourseRequestSetup'\r\n ];\r\n S360ClassSchedulingPages = [\r\n '/scheduling/classesByCourse',\r\n '/scheduling/customSchedulingProperties',\r\n '/scheduling/bellSchedule/districtBellSchedule',\r\n '/scheduling/masterschedule',\r\n '/scheduling/roomSchedulingSettings',\r\n '/scheduling/bellSchedule/schoolBellSchedule',\r\n '/scheduling/schoolSchedulingFolders',\r\n '/scheduling/sections',\r\n '/scheduling/teacherSchedulingSettings',\r\n '/scheduling/bellSchedule/editSchoolBellSchedule',\r\n '/scheduling/bellSchedule/editDistrictBellSchedule',\r\n '/scheduling/studentSchedulingSettings'\r\n ];\r\n S360StudentSchedulingPages = [\r\n '/scheduling/scheduleStudentList'\r\n ];\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private userPreferencesService: UserPreferencesService,\r\n private studentService: StudentService,\r\n private securityService: SecurityService,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) {\r\n this.V10 = loginService.LoginSettings.V10;\r\n\r\n const getNewStaffPortals = (studentId = 0, from = '') => {\r\n if (this.yearService.defaultYear && this.userService.currentUser && this.userService.currentUser.UserType != 2) {\r\n this.getStaffAssignedPortals(studentId).pipe(take(1)).subscribe(portals => {\r\n\r\n // Updating the portals OR resetting if the user wishes to go back\r\n const allowedChange = this.updateStaffAssignedPortals(portals);\r\n allowedChange.pipe(take(1)).subscribe(result => {\r\n if (!result) {\r\n\r\n // Resetting student\r\n if (from == 'Student') {\r\n this.studentService.updateSelectedStudent(this.studentService.previousSelectedStudent.Id);\r\n }\r\n\r\n // Resetting year\r\n if (from == 'Year') {\r\n this.yearService.defaultYear = this.yearService.previousYear;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n };\r\n this.defaultYearSubscription = yearService.observableDefaultYearStream$.subscribe(() => {\r\n if (this.userService.userType == 1) {\r\n const studentId = this.studentService.selectedStudent ? this.studentService.selectedStudent.Id : 0;\r\n getNewStaffPortals(studentId, 'Year');\r\n }\r\n });\r\n this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (this.userService.userType == 1) {\r\n getNewStaffPortals(studentId, 'Student');\r\n }\r\n });\r\n }\r\n\r\n getStaffAssignedPortals(studentId: number = 0, forceGetPortals: boolean = false): Observable {\r\n if (\r\n !this.yearService.defaultYear\r\n || (this.yearService.defaultYear.SchoolID <= 0 && (this.V10 || studentId <= 0))\r\n || this.yearService.defaultYear.SchoolID == null\r\n ) {\r\n return of([]);\r\n }\r\n if (this.staffAssignedPortals\r\n && this.staffAssignedPortals.length > 0\r\n && !forceGetPortals\r\n && (this.previousPortalArgs['studentId'] ? this.previousPortalArgs['studentId'] : 0) == (studentId ? studentId : 0) // All falsey values become 0, preventing the case of null != 0 => true\r\n && (this.previousPortalArgs['yearId'] ? this.previousPortalArgs['yearId'] : 0) == this.yearService.defaultYear.Id\r\n && (this.previousPortalArgs['siteId'] ? this.previousPortalArgs['siteId'] : 0) == this.yearService.defaultYear.SchoolID\r\n ) {\r\n return of(this.staffAssignedPortals);\r\n } else {\r\n this.previousPortalArgs['studentId'] = studentId;\r\n this.previousPortalArgs['yearId'] = this.yearService.defaultYear.Id;\r\n this.previousPortalArgs['siteId'] = this.yearService.defaultYear.SchoolID;\r\n\r\n // We obtain the school policy here because we need a modal popup for when a feature has not yet been activated\r\n // TODO: Obtaining the school policy is temporary and should be removed in the future\r\n return forkJoin(\r\n this.http.get(System.apiURL.Classroom + 'GetStaffAssignedPortals?schoolId=' + this.yearService.defaultYear.SchoolID + '&yearId=' + this.yearService.defaultYear.Id + '&studentId=' + studentId),\r\n this.userService.getUserSchoolYearPolicies(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID)\r\n ).pipe(\r\n map(results => {\r\n\r\n // Setting the respective properties\r\n const portals = results[0];\r\n this.schoolPolicy = results[1];\r\n\r\n // We need to separate the portals in multiple groups into separate portals because GroupName is a CSV\r\n for (let i = 0; i < portals.length; i++) {\r\n\r\n // If multiple groups are found, split the portals\r\n if (portals[i].GroupName.includes(',')) {\r\n const groups = portals[i].GroupName.split(',');\r\n const portalDuplicates = [];\r\n for (let j = 0; j < groups.length; j++) {\r\n groups[j] = groups[j].trim();\r\n\r\n // If this is the first element, alter our current portal\r\n if (j == 0) {\r\n portals[i].GroupName = groups[0];\r\n if (this.V10) {\r\n portals[i].IsFavorite = portals[i].GroupNameFavorite && portals[i].GroupNameFavorite.includes(groups[0]);\r\n }\r\n portalDuplicates.push(portals[i]);\r\n }\r\n\r\n // After the first element, create new portals\r\n else {\r\n const portalInGroup = new Portal();\r\n Object.assign(portalInGroup, portals[i]);\r\n portalInGroup.GroupName = groups[j];\r\n if (this.V10) {\r\n portalInGroup.IsFavorite = portals[i].GroupNameFavorite && portalInGroup.GroupNameFavorite.includes(portalInGroup.GroupName);\r\n }\r\n portals.push(portalInGroup);\r\n portalDuplicates.push(portalInGroup);\r\n }\r\n }\r\n\r\n // The first one that isn't student group should show as tile\r\n if (portals[i].ShowAsTile && portalDuplicates.length > 0) {\r\n let showAsTileSet = false;\r\n for (let j = 0; j < portalDuplicates.length; j++) {\r\n if (!showAsTileSet && !portalDuplicates[j].GroupName.toLowerCase().includes('student')) {\r\n portalDuplicates[j].ShowAsTile = true;\r\n showAsTileSet = true;\r\n } else {\r\n portalDuplicates[j].ShowAsTile = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.userPreferencesService.favoritesPreferences) {\r\n for (let i = 0; i < portals.length; i++) {\r\n const index: number = this.userPreferencesService.favoritesPreferences.FavoritePortals.findIndex(x =>\r\n (x.PortalName == portals[i].PortalName && x.PortalModule == portals[i].ParentModule &&\r\n (x.GroupName == portals[i].GroupName\r\n || (x.GroupName == 'Students' && portals[i].GroupName == 'My Students')\r\n || (x.GroupName == 'Classes' && portals[i].GroupName == 'My Classes')\r\n || (x.GroupName == 'My Students' && portals[i].GroupName == 'Students')\r\n || (x.GroupName == 'My Classes' && portals[i].GroupName == 'Classes')\r\n ))\r\n );\r\n portals[i].Selected = index != -1 &&\r\n (this.userPreferencesService.favoritesPreferences.FavoritePortals[index].GroupName == portals[i].GroupName\r\n || (this.userPreferencesService.favoritesPreferences.FavoritePortals[index].GroupName == 'Students' && portals[i].GroupName == 'My Students')\r\n || (this.userPreferencesService.favoritesPreferences.FavoritePortals[index].GroupName == 'Classes' && portals[i].GroupName == 'My Classes')\r\n || (this.userPreferencesService.favoritesPreferences.FavoritePortals[index].GroupName == 'My Students' && portals[i].GroupName == 'Students')\r\n || (this.userPreferencesService.favoritesPreferences.FavoritePortals[index].GroupName == 'My Classes' && portals[i].GroupName == 'Classes')\r\n ) &&\r\n this.userPreferencesService.favoritesPreferences.FavoritePortals[index].PortalModule == portals[i].ParentModule;\r\n }\r\n }\r\n\r\n this.staffAssignedPortals = Array.prototype.sort.call(portals, (a, b) => a.PortalName.localeCompare(b.PortalName));\r\n return _.cloneDeep(this.staffAssignedPortals);\r\n })\r\n );\r\n }\r\n }\r\n\r\n getOnlinePaymentConfiguration(): Observable {\r\n return this.sharedService.getOnlinePaymentConfiguration();\r\n }\r\n\r\n public getStudentsForAttendance(objYearId: number, schoolId: number, siteSectionId: number, defaultDate: string, showStudentPhoto: boolean, showSeatingChart: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + objYearId +\r\n '&schoolId=' + schoolId +\r\n '&siteSectionId=' + siteSectionId +\r\n '¤tDate=' + defaultDate +\r\n '&showStudentPhoto=' + showStudentPhoto +\r\n '&showSeatingChart=' + showSeatingChart;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentsForAttendance' + queryString);\r\n }\r\n\r\n public getStudentsForAttendanceForDate(objYearId: number, schoolId: number, siteSectionId: number, attendanceDate: string, showStudentPhoto: boolean, showSeatingChart: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + objYearId +\r\n '&schoolId=' + schoolId +\r\n '&siteSectionId=' + siteSectionId +\r\n '&attendanceDate=' + attendanceDate +\r\n '&showStudentPhoto=' + showStudentPhoto +\r\n '&showSeatingChart=' + showSeatingChart;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentsForAttendanceForDate' + queryString);\r\n }\r\n\r\n public getStudentPeriodicAttendanceDetail(studentId: number, schoolId: number, AYIdentifier, AttDate: string): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&schoolId=' + schoolId +\r\n '&AYIdentifier=' + AYIdentifier +\r\n '&AttDate=' + AttDate;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentPeriodicAttendanceDetail' + queryString);\r\n }\r\n\r\n public updateStudentAttendance(schoolId: number, yearId: number, userId: number, data: ClassroomAttendance[], attDate: string, siteSectionId: number, markPerfectAttendance: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId +\r\n '&attDate=' + attDate +\r\n '&siteSectionId=' + siteSectionId +\r\n '&markPerfectAttendance=' + markPerfectAttendance;\r\n return this.http.post(System.apiURL.Classroom + 'UpdateStudentAttendance' + queryString, data);\r\n }\r\n\r\n public massUpdateStudentAttendanceByClass(schoolId: number, yearId: number, userId: number, data: ClassroomAttendance[], attDate: string, siteSectionId: number, markPerfectAttendance: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId +\r\n '&attDate=' + attDate +\r\n '&siteSectionId=' + siteSectionId +\r\n '&markPerfectAttendance=' + markPerfectAttendance;\r\n return this.http.post(System.apiURL.Classroom + 'MassUpdateStudentAttendanceByClass' + queryString, data);\r\n }\r\n\r\n updateStaffAssignedPortals(portals: Portal[]): Observable {\r\n // POST: updates the list of assigned portals to the supplied portals, showing a warning dialog if the current page is not valid\r\n\r\n // Checking if we have permissions to view the current page in the new portals\r\n let url = this.router.url;\r\n const queryParamIndex = url.indexOf('?');\r\n if (queryParamIndex >= 0) {\r\n url = url.substring(0, queryParamIndex);\r\n }\r\n let hasPortal = false;\r\n\r\n // Hard-coded URLs shouldn't be checked because there is nothing to check against\r\n if (\r\n url.toLowerCase().includes('login')\r\n || url.toLowerCase().includes('/classroom360/classroomsummary')\r\n || url.toLowerCase().includes('/classroom360/cards')\r\n || url.toLowerCase().includes('/student360/studentsummary')\r\n || url.toLowerCase().includes('/eforms/submissions')\r\n || url.toLowerCase().includes('/changepassword')\r\n || url.toLowerCase().includes('/editschoolbellschedule')\r\n || url.toLowerCase().includes('/editdistrictbellschedule')\r\n || url.toLowerCase().includes('/registrationenrollment/detailedregistration')\r\n || url.toLowerCase().includes('/student360/eformsstaff/:staffpage')\r\n || url.toLowerCase().includes('/healthvisitsummary/healthvisitsummaryondate')\r\n ) {\r\n hasPortal = true;\r\n }\r\n\r\n // For all other portals\r\n else {\r\n portals.forEach(portal => {\r\n if ((portal.ParentModule + portal.PortalDescription).toLowerCase() == url.toLowerCase()) {\r\n hasPortal = true;\r\n }\r\n });\r\n }\r\n // Programs and services does not have a portal in v10\r\n // TODO: This is a hacky fix and we need to consider adding a permission checker in the router\r\n if (url.toLowerCase().includes('programsandservices')) {\r\n if (this.loginService.LoginSettings.V10 && this.securityService.IsAnyPermissionAssigned(PermissionEnum.StudentGeneralProfileStudentPrograms)) {\r\n hasPortal = true;\r\n }\r\n }\r\n\r\n // If we have permissions, just continue\r\n if (hasPortal) {\r\n this.staffAssignedPortals = portals;\r\n this.observableStaffAssignedPortals.next(portals);\r\n return of(true);\r\n }\r\n\r\n // If we do not have permissions, inform the user\r\n else {\r\n let dialogBox;\r\n // We show a \"feature has not yet been enabled\" here because scheduling can be activate or deactivated\r\n // TODO: This is temporary and should be removed in the future\r\n const counselorIndex = url.indexOf('/counselor360');\r\n let counselorPageUrl = url;\r\n if (counselorIndex >= 0) {\r\n counselorPageUrl = url.substring(counselorIndex + '/counselor360'.length, url.length);\r\n }\r\n if (\r\n counselorIndex >= 0\r\n && this.schoolPolicy\r\n && (\r\n (\r\n this.S360CourseRequestPages.includes(counselorPageUrl)\r\n && !this.schoolPolicy.S360SchedulingCourseRequests\r\n )\r\n || (\r\n this.S360ClassSchedulingPages.includes(counselorPageUrl)\r\n && !this.schoolPolicy.S360SchedulingClassScheduling\r\n )\r\n || (\r\n this.S360StudentSchedulingPages.includes(counselorPageUrl)\r\n && !this.schoolPolicy.S360SchedulingStudentScheduling\r\n )\r\n )\r\n ) {\r\n dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'Module Not Activated',\r\n confirmMessage: 'The module has not been activated for this school and year. If you continue, you will be redirected to the Classroom Summary.',\r\n okButtonLabel: 'Continue',\r\n warning: true,\r\n informational: (url.toLowerCase() == '/eforms/submissions' || url.toLowerCase() == '/admin360/eForms/processing') ? true : false,\r\n Url: url.toLowerCase()\r\n }\r\n });\r\n }\r\n\r\n // If this is not a counselor page or the school policy is active, then the user does not have proper permissions\r\n else {\r\n dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'Insufficient Permissions',\r\n confirmMessage: (this.userService.userType == 1 && !this.loginService.LoginSettings.V10 && (url.toLowerCase().includes('/eforms/submissions') || url.toLowerCase().includes('/admin360/eForms/processing'))) ? ('You do not have permission to view the current page for the selected year.') : ('You do not have permission to view the current page for this student, school, and year. If you continue, you will be redirected to the Classroom Summary.'),\r\n okButtonLabel: 'Continue',\r\n warning: true,\r\n informational: (url.toLowerCase() == '/eforms/submissions' || url.toLowerCase() == '/admin360/eForms/processing') ? true : false,\r\n Url: url.toLowerCase()\r\n }\r\n });\r\n }\r\n // Responding to results\r\n if (this.userService.userType == 1 && !this.loginService.LoginSettings.V10 && (url.toLowerCase().includes('/eforms/submissions') || url.toLowerCase().includes('/admin360/eForms/processing'))) {\r\n return;\r\n } else {\r\n return dialogBox.afterClosed().pipe(\r\n take(1),\r\n map(result => {\r\n\r\n\r\n // If the user continues, set the portals and redirect to the classroom summary\r\n if (result) {\r\n this.staffAssignedPortals = portals;\r\n this.observableStaffAssignedPortals.next(portals);\r\n this.router.navigateByUrl('/classroom360/cards');\r\n }\r\n\r\n // Return the result for processing elsewhere\r\n return result;\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n getNewStudentList(familyId = 0, yearId = 0): Observable {\r\n let queryString = '';\r\n queryString += '?familyId=' + familyId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Classroom + 'GetNewStudentsList' + queryString);\r\n }\r\n\r\n getSiteList(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetSiteList');\r\n }\r\n\r\n getGradingCyclesBySiteYearId(siteYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradeCyclesBySiteYearId' + queryString);\r\n }\r\n\r\n public updateGradingCycle(siteYearId: number, bytAction: number, gradindCycles: GragingCycles[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&bytAction=' + bytAction;\r\n return this.http.post(System.apiURL.Classroom + 'UpdateGradingCycle' + queryString, gradindCycles);\r\n }\r\n\r\n public createNewGradeCycle(siteYearId: number, deleteAnyExistingGrades: boolean, keepNotNullGrades: boolean, createAHRecordsBased: boolean, setAsCurrent: boolean, withinDays: number, gradindCycle: GragingCycles): Observable {\r\n let queryString = '';\r\n if (!withinDays) {\r\n withinDays = 0;\r\n }\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&deleteAnyExistingGrades=' + deleteAnyExistingGrades +\r\n '&keepNotNullGrades=' + keepNotNullGrades +\r\n '&createAHRecordsBased=' + createAHRecordsBased +\r\n '&setAsCurrent=' + setAsCurrent +\r\n '&withinDays=' + withinDays;\r\n return this.http.post(System.apiURL.Classroom + 'CreateNewGradeCycle' + queryString, gradindCycle);\r\n }\r\n\r\n getClassPostingStatus(siteYearId: number, termGradeCycleId: number, sorting: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&termGradeCycleId=' + termGradeCycleId +\r\n '&sorting=' + sorting;\r\n return this.http.get(System.apiURL.Classroom + 'GetClassPostingStatus' + queryString);\r\n }\r\n\r\n getStudentsWithoutTermRecords(siteYearId: number, gradeCycleId: number, termStartDate: Date, termStopDate: Date): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&gradeCycleId=' + gradeCycleId +\r\n '&termStartDate=' + termStartDate +\r\n '&termStopDate=' + termStopDate;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentsWithoutTermRecords' + queryString);\r\n }\r\n\r\n saveTermGradesForStudentsWithoutTerm(siteYearId: number, termGradesPostOpen: Date, termGradesPostClose: Date, selectedRows: StudentsWithoutTermRecords[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&termGradesPostOpen=' + termGradesPostOpen +\r\n '&termGradesPostClose=' + termGradesPostClose;\r\n // '&selectedRows=' + selectedRows;\r\n return this.http.post(System.apiURL.Classroom + 'SaveTermGradesForStudentsWithoutTerm' + queryString, selectedRows);\r\n }\r\n\r\n getGradeCycleGradesByGradeCycleId(termGradeCycleId: number): Observable {\r\n let queryString = '';\r\n queryString += '?termGradeCycleId=' + termGradeCycleId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradeCycleGradesByGradeCycleId' + queryString);\r\n }\r\n\r\n getClassPostingGrades(siteYearId: number, termGradeCycleId: number, siteSectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&termGradeCycleId=' + termGradeCycleId +\r\n '&siteSectionId=' + siteSectionId;\r\n return this.http.get(System.apiURL.Classroom + 'GetClassPostingGrades' + queryString);\r\n }\r\n\r\n saveClassPostingGrades(classPostingGrades: GradingCycleClassPostingGrade[]): Observable {\r\n const ClassPostingGrades = classPostingGrades;\r\n return this.http.post(System.apiURL.Classroom + 'SaveClassPostingGrades', ClassPostingGrades);\r\n }\r\n\r\n getGradingCycleStudentGrades(siteYearId: number, StudentId: number, termGradeCycleId: number, termGradeDetailTypeId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&StudentId=' + StudentId +\r\n '&termGradeCycleId=' + termGradeCycleId +\r\n '&termGradeDetailTypeId=' + termGradeDetailTypeId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradingCycleStudentGrades' + queryString);\r\n }\r\n\r\n getValidGradesBySiteYear(siteYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Classroom + 'GetValidGradesBySiteYear' + queryString);\r\n }\r\n}\r\n","
\r\n \r\n \"Insufficient\r\n  \r\n \r\n \r\n \"No\r\n  \r\n \r\n \r\n {{field.DisplayName}}\r\n \r\n  [{{field.Alias}}]\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n  {{field.CategoryName}}\r\n \r\n \r\n  {{field.ObjectName}}\r\n \r\n \r\n
\r\n \"Editable\r\n
\r\n
\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DataQueryPreferences } from '../../../shared-components/user-preferences/data-query-preferences.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { DataQueryField } from '../models/data-query-field.model';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'data-query-field-label',\r\n templateUrl: './data-query-field-label.component.html',\r\n styleUrls: ['./data-query-field-label.component.css']\r\n})\r\nexport class DataQueryFieldLabelComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n preferences: DataQueryPreferences;\r\n currentQuery: DataQuery;\r\n V10: boolean;\r\n @Input() field: DataQueryField;\r\n @Input() editable = false;\r\n @Input() fieldId = 'columnNameField';\r\n @Input() hideEditableIcon = false;\r\n enableMassUpdate = false;\r\n\r\n // Class Functions\r\n constructor(\r\n private dataQueryService: DataQueryService,\r\n private loginService: LoginService,\r\n private securityService: SecurityService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: performs initialization\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.enableMassUpdate = this.dataQueryService.enableMassUpdate;\r\n\r\n // Syncing data\r\n this.dataQueryService.observablePreferencesStream$.subscribe(preferences => {\r\n this.preferences = preferences;\r\n });\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this.currentQuery = currentQuery;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: implemented for @AutoUnsubscribe\r\n }\r\n\r\n // Methods\r\n ambiguous(field: DataQueryField): boolean {\r\n let ambiguous = false;\r\n for (let i = 0; i < this.currentQuery.reportFields.length; i++) {\r\n if (this.currentQuery.reportFields[i].DisplayName == field.DisplayName && this.currentQuery.reportFields[i] != field) {\r\n ambiguous = true;\r\n break;\r\n }\r\n }\r\n return ambiguous;\r\n }\r\n\r\n checkDisabledField(): boolean {\r\n return this.dataQueryService.checkDisabledField(this.field);\r\n }\r\n\r\n checkEditableField(): boolean {\r\n return this.dataQueryService.checkEditableField(this.field);\r\n }\r\n}\r\n","\r\n
\r\n WARNING\r\n
\r\n\r\n\r\n\r\n
\r\n The\r\n {{field.DisplayName}}\r\n field is needed to relate other fields to this query.\r\n
\r\n
If you continue, the following fields will be removed.
\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n
\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, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DataQueryCluster } from '../../models/data-query-cluster.model';\r\nimport { DataQueryField } from '../../models/data-query-field.model';\r\n\r\n@Component({\r\n selector: 'app-drop-field-warning-dialog',\r\n templateUrl: './drop-field-warning-dialog.component.html',\r\n styleUrls: ['./drop-field-warning-dialog.component.css']\r\n})\r\nexport class DropFieldWarningDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n field: DataQueryField;\r\n removedFields: DataQueryField[];\r\n\r\n // Constructor\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n this.field = this.data.field;\r\n this.removedFields = this.data.removedFields;\r\n }\r\n\r\n // UI Functions\r\n continue() {\r\n // PRE: the continue button is clicked\r\n // POST: closes the dialog with true, initiating dropping\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog with false, doing nothing\r\n this.dialogRef.close(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 Show in Results\r\n
\r\n\r\n \r\n
\r\n Use as Filters\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n Field\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n Field\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n Drag field to the Show in Results box to add columns to the Results view\r\n Drag Fields to the Use in Filters box to use them when filtering the data\r\n
\r\n\r\n \r\n
\r\n Drag fields up or down to change the order in which they display in Results\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n More\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n Field\r\n \r\n\r\n \r\n \r\n Category\r\n \r\n\r\n \r\n \r\n Object\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n {{datum.data.DisplayName}}\r\n \r\n\r\n \r\n \r\n {{datum.data.DisplayName}}\r\n \r\n
\r\n
\r\n
","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { DataQueryInformation } from '../models/data-query-information';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { DataQueryObject } from '../models/data-query-object.model';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DataQueryField } from '../models/data-query-field.model';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DataQueryPreferences } from '../../../shared-components/user-preferences/data-query-preferences.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { NestedData } from '../../../shared-components/virtualized-table/nested-data';\r\nimport * as jsPDF from 'jspdf';\r\nimport { DataQueryFieldFilter } from '../models/data-query-field-filter.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { CdkDragDrop, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { VirtualizedTableComponent } from '../../../shared-components/virtualized-table/virtualized-table.component';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { take } from 'rxjs/operators';\r\nimport { DataQueryCoreFile } from '../models/data-query-core-file.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { DropFieldWarningDialogComponent } from './drop-field-warning-dialog/drop-field-warning-dialog.component';\r\nimport { DataQueryCategory } from '../models/data-query-category.model';\r\n\r\n@Component({\r\n selector: 'data-query-fields',\r\n templateUrl: './data-query-fields.component.html',\r\n styleUrls: [\r\n '../data-query-shared-style.css',\r\n './data-query-fields.component.css',\r\n '../virtualized-table.css'\r\n ],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class DataQueryFieldsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // Interface Properties\r\n @Input() simpleMode = false;\r\n @Input() simpleValidationErrors: ErrorList[] = [];\r\n\r\n // Properties\r\n dragging = false;\r\n lastDragPosition: MousePosition;\r\n diffX = 0;\r\n fieldSearch = '';\r\n toggleAllRows = new EventEmitter();\r\n\r\n // State Properties\r\n private currentQuery: DataQuery;\r\n private selectedCoreFile: DataQueryCoreFile;\r\n V10: boolean;\r\n information = new DataQueryInformation();\r\n preferences = new DataQueryPreferences();\r\n subscriptions: Subscription[] = [];\r\n\r\n // Table Properties\r\n tableData: NestedData[] = [];\r\n shownFieldTableData = new TylerMatTableDataSource();\r\n filterFieldTableData = new TylerMatTableDataSource();\r\n virtualizedTableColumns = DataQueryInformation.virtualizedTableColumns;\r\n selectedRow: DataQueryObject;\r\n lastFieldClicked: DataQueryField;\r\n lastFieldClickTime: Date;\r\n\r\n // View Properties\r\n @ViewChild(VirtualizedTableComponent, { static: true }) virtualizedTable: VirtualizedTableComponent;\r\n virtualizedDropList: CdkDropList;\r\n\r\n // Class Functions\r\n constructor(\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private dataQueryService: DataQueryService,\r\n private loginService: LoginService,\r\n private yearService: YearService\r\n ) { }\r\n\r\n get shownFields(): DataQueryField[] {\r\n return this.currentQuery ? this.currentQuery.reportFields : [];\r\n }\r\n\r\n get filterFields(): DataQueryField[] {\r\n return this.currentQuery ? this.currentQuery.filterFields : [];\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: performs initialization and initial subscriptions\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n\r\n // Performing subscriptions\r\n this.subscriptions.push(\r\n\r\n // Responding to the expand or collapse events\r\n this.toggleAllRows.subscribe(expand => {\r\n this.expandOrCollapseAll(expand);\r\n }),\r\n\r\n // Syncing data\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n\r\n // Eliminating the cache\r\n this.dataQueryService.cachedInformation = false;\r\n\r\n // Obtaining data from the server\r\n this.dataQueryService.getInformation().subscribe();\r\n }),\r\n\r\n // Syncing this with the current query and information\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this.currentQuery = currentQuery;\r\n this.setTableData();\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this.information = information;\r\n this.setTableData();\r\n }),\r\n this.dataQueryService.observablePreferencesStream$.subscribe(preferences => {\r\n this.preferences = preferences;\r\n this.setTableData();\r\n }),\r\n this.dataQueryService.observableSelectedCoreFileStream$.subscribe(selectedCoreFile => {\r\n if (this.simpleMode) {\r\n this.selectedCoreFile = selectedCoreFile;\r\n this.setTableData();\r\n }\r\n }),\r\n this.dataQueryService.observableWizardOpenStream$.subscribe(() => {\r\n this.filterFieldTableData.data = this.filterFields;\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the virtualized drop list\r\n if (this.virtualizedTable) {\r\n this.virtualizedDropList = this.virtualizedTable.virtualizedDropList;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n dividerClick(event: MouseEvent) {\r\n // PRE: the divider is clicked\r\n // POST: sets the starting position of the drag\r\n this.lastDragPosition = new MousePosition(event);\r\n this.dragging = true;\r\n }\r\n\r\n dividerMove(event: MouseEvent) {\r\n // PRE: the mouse is moved over the draggable area and dragging is true\r\n // POST: moves the divider with the mouse\r\n if (this.dragging && this.lastDragPosition) {\r\n const currentDragPosition = new MousePosition(event);\r\n this.diffX += this.lastDragPosition.x - currentDragPosition.x;\r\n this.lastDragPosition = currentDragPosition;\r\n }\r\n }\r\n\r\n dividerStop() {\r\n // PRE: the mouse leaves the draggable area or releases\r\n // POST: stops dragging the divider\r\n this.dragging = false;\r\n }\r\n\r\n expandOrCollapseAll(expand: boolean) {\r\n // PRE: the expand all or collapse all button is clicked\r\n // POST: expand or collapses all the rows\r\n // NOTE: we must force change detection because the virtualized table uses OnPush\r\n const previousTableData = Object.assign([], this.tableData);\r\n this.tableData = [];\r\n const expandData = (data: NestedData[]) => {\r\n data.forEach(datum => {\r\n datum.showChildren = expand;\r\n if (datum.children) {\r\n expandData(datum.children);\r\n }\r\n });\r\n };\r\n expandData(previousTableData);\r\n this.tableData = previousTableData;\r\n }\r\n\r\n fieldDrop(event: CdkDragDrop) {\r\n // PRE: a field is dropped into either the shown or filter fields\r\n // POST: moves the data from the available fields to the shown fields\r\n const field: DataQueryField = event.item.data;\r\n const droppingList = event.container.data;\r\n const dropFromList = event.previousContainer.data;\r\n\r\n // Returning if there is no field, because we can't do anything\r\n if (!field) {\r\n return;\r\n }\r\n\r\n // Returning if there is only filter field & container is \"Show in Result\".\r\n if (event.container.id == '#cdkDropListShowInResults' && (field.FieldName == 'Filter Any Period Attendance Code' || field.FieldName == 'Filter Any Period Room Number' || field.FieldName == 'Filter Any Period Subject Code' || field.FieldName == 'Filter Any Period Course' || field.FieldName == 'Filter Any Period Teacher' || field.FieldName == 'StudentsTeamfilter' || field.FieldName == 'StudentsListfilter')) {\r\n return;\r\n }\r\n\r\n // If there is no dropping list, then we remove it\r\n if (!droppingList && dropFromList) {\r\n\r\n // Helper function to perform the drop\r\n const performDrop = (droppedField = field) => {\r\n dropFromList.splice(dropFromList.findIndex(dropFromField => dropFromField.isEqual(droppedField)), 1);\r\n\r\n // If the drop from list is filter fields, remove the filters\r\n if (dropFromList == this.filterFields) {\r\n droppedField.Filters = [];\r\n }\r\n\r\n // If the drop from list is shown fields, remove it from the sort fields as well\r\n const indexOfSort = this.currentQuery.sortFields.findIndex(sortField => sortField.isEqual(droppedField));\r\n if (dropFromList == this.shownFields && indexOfSort >= 0) {\r\n this.currentQuery.sortFields.splice(indexOfSort, 1);\r\n }\r\n };\r\n\r\n // We always perform the drop on V10\r\n if (this.V10) {\r\n performDrop();\r\n } else {\r\n\r\n // Before we remove it, check the relationships\r\n const allFields = this.dataQueryService.getAllFields();\r\n const newFieldSet = allFields.filter(fieldOfSet =>\r\n field.ID != fieldOfSet.ID\r\n || field.CategoryID != fieldOfSet.CategoryID\r\n || field.CategoryName != fieldOfSet.CategoryName\r\n );\r\n const clustersBefore = this.information.getClusters(allFields);\r\n const clustersAfter = this.information.getClusters(newFieldSet);\r\n\r\n // Showing the warning if we have more clusters, i.e. this was needed to join them\r\n if (clustersAfter.length > clustersBefore.length) {\r\n\r\n // Finding the largest cluster\r\n const largestCluster = clustersAfter.sort((a, b) => b.size - a.size)[0];\r\n\r\n // Creating the warning\r\n const removedFields = dropFromList.filter(dropFromField =>\r\n !largestCluster.fields.find(clusterField =>\r\n clusterField.isEqual(dropFromField)\r\n )\r\n );\r\n const confirmDialog = this.dialog.open(DropFieldWarningDialogComponent, {\r\n data: {\r\n field: field,\r\n removedFields: removedFields\r\n }\r\n });\r\n\r\n // If the user confirms, perform the drop\r\n confirmDialog.afterClosed().pipe(take(1)).subscribe(confirmed => {\r\n if (confirmed) {\r\n\r\n // Dropping all but the largest cluster\r\n removedFields.forEach(removedField => {\r\n performDrop(removedField);\r\n });\r\n\r\n // We must mark the query as changed\r\n this.currentQuery.queryChanged = true;\r\n\r\n // Resetting table data\r\n setTimeout(() => {\r\n this.setTableData();\r\n });\r\n }\r\n });\r\n\r\n // We need to return to prevent the end of this process from happening\r\n return;\r\n }\r\n\r\n // Otherwise, just dropping\r\n else {\r\n performDrop();\r\n }\r\n }\r\n }\r\n\r\n // If we're dropping into the same list, just reorder\r\n else if (dropFromList == droppingList) {\r\n\r\n // Rearrange their sort orders so it is reflected in results\r\n const previousIndex = droppingList.indexOf(field);\r\n droppingList[event.currentIndex].SortOrder = previousIndex;\r\n droppingList[previousIndex].SortOrder = event.currentIndex;\r\n\r\n // Moving the item in the array\r\n // NOTE: event.previousIndex is wrong, so we don't use it here\r\n moveItemInArray(droppingList, droppingList.indexOf(field), event.currentIndex);\r\n }\r\n\r\n // If we are dropping into a different list, add\r\n else {\r\n\r\n // If the dropping list is the shown fields and the field is a roster filer, we can't add it to the sort fields\r\n if (\r\n droppingList == this.shownFields &&\r\n field.DisplayName.includes(DataQueryFieldFilter.courseFilterDisplayName) ||\r\n field.FieldName.includes(DataQueryFieldFilter.studentFilterFieldName)\r\n ) {\r\n return;\r\n }\r\n\r\n // Otherwise, go ahead and add it\r\n this.addFieldToList(field, droppingList);\r\n }\r\n\r\n // We must mark the query as changed\r\n this.currentQuery.queryChanged = true;\r\n\r\n // Resetting table data\r\n setTimeout(() => {\r\n this.setTableData();\r\n });\r\n }\r\n\r\n applySearch(searchString: string) {\r\n // PRE: the available fields textbox is blurred\r\n // POST: applies the search criteria and expands all the fields\r\n setTimeout(() => {\r\n if (this.fieldSearch != searchString) {\r\n this.fieldSearch = searchString;\r\n this.setTableData();\r\n if (searchString) {\r\n this.expandOrCollapseAll(true);\r\n } else {\r\n this.expandOrCollapseAll(false);\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n fieldList() {\r\n // PRE: the field list button is clicked\r\n // POST: opens a new window with a PDF for the fields available\r\n\r\n // Declaring the document\r\n const doc = new jsPDF('p', 'pt', 'letter');\r\n doc.setFont('helvetica');\r\n doc.setFontType('normal');\r\n\r\n // Setting constant values\r\n const ptPerInch = 72;\r\n const printMargins = .25 * ptPerInch;\r\n const margins = {\r\n top: 20 + printMargins,\r\n bottom: 10 + printMargins,\r\n left: printMargins,\r\n right: printMargins\r\n };\r\n const pageWidth = doc.internal.pageSize.width || (doc.internal.pageSize).getWidth();\r\n const pageHeight = doc.internal.pageSize.height || (doc.internal.pageSize).getHeight();\r\n const columns = 2;\r\n const colPadding = 10;\r\n const colWidth = ((pageWidth - margins.left - margins.right) / columns) - (colPadding * 2);\r\n const fontSize = 10;\r\n const headerFontSize = 12;\r\n const headerStartY = margins.top;\r\n const headerHeight = fontSize + 4;\r\n const tabIndent = 15;\r\n\r\n // Setting iterative values\r\n let x = margins.left;\r\n let y = Math.max(headerStartY + headerHeight + colPadding, margins.top);\r\n let col = 1;\r\n let pageCount = 1;\r\n let firstPage = true;\r\n\r\n // Creating helper functions\r\n const makeNewPage = () => {\r\n // POST: makes a new page\r\n col = 1;\r\n doc.setFontSize(fontSize);\r\n doc.setFontType('normal');\r\n doc.text(pageCount + '', pageWidth / 2, pageHeight - margins.bottom + 16, { align: 'center' });\r\n doc.addPage();\r\n pageCount += 1;\r\n firstPage = false;\r\n };\r\n const checkNewPage = () => {\r\n // POST: checks to see if we need to make a new page. If we do, does so.\r\n if (y > pageHeight - margins.bottom) {\r\n if (col < columns) {\r\n col += 1;\r\n }\r\n else {\r\n makeNewPage();\r\n }\r\n if (firstPage) {\r\n y = Math.max(headerStartY + headerHeight + colPadding, margins.top);\r\n } else {\r\n y = margins.top;\r\n }\r\n }\r\n };\r\n const printValues = (values: string[], indents = 0) => {\r\n // PRE: a list of string values to print and how indented you want it\r\n // POST: prints the values onto the document\r\n for (let i = 0; i < values.length; i++) {\r\n y += fontSize + 4;\r\n checkNewPage();\r\n x = margins.left + (tabIndent * indents) + colPadding + ((col - 1) * colWidth);\r\n doc.text(values[i], x, y);\r\n }\r\n };\r\n const splitAndPrint = (str: string, indents = 0, fontWeight = 'normal') => {\r\n // PRE: a string to print and how indented yo uwant it\r\n // POST: splits the string into properly sized components and prints them\r\n doc.setFontSize(fontSize);\r\n doc.setFontType(fontWeight);\r\n const splitStr = doc.splitTextToSize(str, colWidth - (tabIndent * indents));\r\n printValues(splitStr, indents);\r\n };\r\n\r\n // Creating the header\r\n doc.setFontSize(headerFontSize);\r\n doc.setFontType('normal');\r\n doc.text('Data Query Field List', pageWidth / 2, headerStartY, null, null, 'center');\r\n\r\n // Showing the spinner due to the time this takes\r\n this.sharedService.updateShowSpinner(true);\r\n\r\n // Giving the dom a second to update\r\n setTimeout(() => {\r\n\r\n // Adding each object\r\n this.information.visibleObjects.forEach(object => {\r\n splitAndPrint(object.ObjectName, 0, 'bold');\r\n\r\n // Adding object categories\r\n const categories = object.categories;\r\n categories.forEach(category => {\r\n splitAndPrint(category.CategoryName, 1);\r\n\r\n // Adding category fields\r\n const fields = category.fields;\r\n fields.forEach(field => {\r\n if (field.Visible == true) {\r\n splitAndPrint(field.DisplayName, 2);\r\n }\r\n });\r\n y += colPadding;\r\n });\r\n });\r\n\r\n // Hiding the spinner now that we're done\r\n this.sharedService.updateShowSpinner(false);\r\n\r\n // Printing it to the user\r\n const blob = doc.output('blob');\r\n window.open(URL.createObjectURL(blob), '_blank');\r\n }, 100);\r\n }\r\n\r\n // Methods\r\n addFieldToList(field: DataQueryField, fieldList: DataQueryField[]) {\r\n // POST: Adds the field to the specified field list\r\n\r\n // If the list is filter fields, add a filter\r\n if (fieldList == this.filterFields) {\r\n this.dataQueryService.addFieldToQuery(field, 'filter');\r\n }\r\n\r\n // If the list is shown fields, remove all filters and add it to the sort fields\r\n if (fieldList == this.shownFields) {\r\n this.dataQueryService.addFieldToQuery(field, 'shown');\r\n }\r\n }\r\n\r\n setTableData() {\r\n // POST: sets the table data and detects changes to update the table\r\n if (this.information) {\r\n\r\n // If we don't show restricted categories, then we need to calculate the disabled fields ahead of time\r\n // NOTE: v9 only\r\n if (!this.V10 && this.preferences && !this.preferences.DisplayRestrictedCategories) {\r\n this.information.fields.forEach(field => {\r\n this.dataQueryService.checkDisabledField(field);\r\n });\r\n }\r\n\r\n // List of available fields\r\n const fetchFields = (categories?: DataQueryCategory[]) => {\r\n this.tableData = this.information.virtualizedTableData({\r\n fieldSearch: this.fieldSearch,\r\n V10: this.loginService.LoginSettings.V10,\r\n currentQuery: this.currentQuery,\r\n currentNestedData: this.tableData,\r\n click: (event: MouseEvent, nestedData: NestedData) => {\r\n if (nestedData.identifier == 'field') {\r\n\r\n // If this is a double click, add the field\r\n if (\r\n this.lastFieldClicked\r\n && this.lastFieldClicked.ID == nestedData.data.ID\r\n && this.lastFieldClicked.CategoryID == nestedData.data.CategoryID\r\n && this.lastFieldClicked.CategoryName == nestedData.data.CategoryName\r\n && this.lastFieldClickTime\r\n && Date.now() - this.lastFieldClickTime.getTime() < 2000\r\n ) {\r\n\r\n // Adding the field\r\n this.addFieldToList(this.lastFieldClicked, this.shownFields);\r\n\r\n // Resetting our double click\r\n this.lastFieldClicked = null;\r\n this.lastFieldClickTime = null;\r\n\r\n // Resetting the table data\r\n this.setTableData();\r\n }\r\n\r\n // If this is a single click, keep that in mind\r\n else {\r\n this.lastFieldClicked = nestedData.data;\r\n this.lastFieldClickTime = new Date();\r\n }\r\n }\r\n },\r\n preferences: this.preferences,\r\n disabledFields: this.preferences && !this.preferences.DisplayRestrictedCategories ? this.dataQueryService.disabledFields : null,\r\n validCategories: categories\r\n });\r\n };\r\n if (this.simpleMode) {\r\n if (this.selectedCoreFile) {\r\n this.dataQueryService.getCategoriesByCoreFile(this.selectedCoreFile.ID).subscribe(categories => {\r\n fetchFields(categories);\r\n });\r\n }\r\n } else {\r\n fetchFields();\r\n }\r\n\r\n // Helper Function\r\n const largestCluster = this.information.getLargestClusterOfQuery(this.currentQuery);\r\n const hasRelationship = (field: DataQueryField) => {\r\n return !!largestCluster.fields.find(clusterField =>\r\n clusterField.key == field.key\r\n || !!this.information.getRelationship(clusterField, field)\r\n );\r\n };\r\n\r\n // Calculating the shown fields\r\n if (!this.V10) {\r\n this.shownFields.forEach(field => {\r\n field.hasRelationship = hasRelationship(field);\r\n });\r\n }\r\n this.shownFieldTableData.data = this.shownFields;\r\n\r\n // Calculating the filter fields\r\n if (!this.V10) {\r\n this.filterFields.forEach(field => {\r\n field.hasRelationship = hasRelationship(field);\r\n });\r\n }\r\n this.filterFieldTableData.data = this.filterFields;\r\n }\r\n }\r\n}\r\n\r\n// This class is for tracking mouse position\r\nclass MousePosition {\r\n\r\n // Properties\r\n x: number;\r\n y: number;\r\n\r\n // Constructor\r\n constructor(mousePos: MouseEvent) {\r\n this.x = mousePos.screenX;\r\n this.y = mousePos.screenY;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-group-condition-info-dialog',\r\n templateUrl: './group-condition-info-dialog.component.html'\r\n})\r\nexport class GroupConditionInfoDialogComponent implements OnInit {\r\n\r\n constructor(\r\n private dialogBox: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n\t\t this.dialogBox.close();\r\n\t}\r\n}\r\n","\r\n

\r\n\tGroups\r\n

\r\n\r\n\r\n\r\n\tRows with the same group letter are joined with AND.\r\n\t
\r\n\t
\r\n\tRows with different group letters are joined with OR.\r\n
\r\n\r\n\r\n\r\n\t\r\n","\r\n\r\n\r\n\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Field\r\n \r\n \r\n \r\n \r\n {{filter.field.Alias}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Operator\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{operator}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n =\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Value\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n  and \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n Yes\r\n \r\n \r\n \r\n No\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n (Current\r\n )\r\n \r\n
\r\n\r\n \r\n  and \r\n\r\n \r\n
\r\n \r\n \r\n \r\n (\r\n Current\r\n )\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{option.Code}}\r\n {{option.Code && option.CodeDescription ? ' - ' : ''}}\r\n {{option.CodeDescription}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{getStudentDropdownValue(option.Code)}}\r\n \r\n \r\n \r\n \r\n\r\n {{filter.Value}}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n Apply to All Groups\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Group\r\n ?\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\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 ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { DataQueryFieldFilter } from '../../models/data-query-field-filter.model';\r\nimport { DataQueryService } from '../../data-query.service';\r\nimport { DataQueryField } from '../../models/data-query-field.model';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MenuItem } from '../../../../shared-components/controls/menus/menu-item.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport * as _ from 'lodash';\r\nimport { GroupConditionInfoDialogComponent } from '../group-condition-info-dialog/group-condition-info-dialog.component';\r\n\r\n@Component({\r\n selector: 'data-query-filter-table',\r\n templateUrl: './data-query-filter-table.component.html',\r\n styleUrls: ['./data-query-filter-table.component.css']\r\n})\r\nexport class DataQueryFilterTableComponent implements OnInit, OnDestroy {\r\n\r\n // Interface Properties\r\n @Input() forStudentSearch = false;\r\n @Input() forCourseSearch = false;\r\n @Input() forStaffSearch = false;\r\n @Input() queryFilterFields: DataQueryField[] = [];\r\n @Output() filtersChange = new EventEmitter();\r\n\r\n // Properties\r\n private _filters: DataQueryFieldFilter[] = [];\r\n V10: boolean;\r\n subscriptions: Subscription[] = [];\r\n @ViewChild('validationTrigger', { read: ElementRef, static: true }) validationTrigger: ElementRef;\r\n\r\n // Table Properties\r\n tableData = new TylerMatTableDataSource();\r\n columns = [\r\n 'field',\r\n 'operator',\r\n 'value',\r\n 'apply-to-all-groups',\r\n 'group',\r\n 'actions'\r\n ];\r\n\r\n // Class Functions\r\n constructor(\r\n private dataQueryService: DataQueryService,\r\n private loginService: LoginService,\r\n private changeDetector: ChangeDetectorRef,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n get filters(): DataQueryFieldFilter[] {\r\n return this._filters;\r\n }\r\n\r\n @Input() set filters(value: DataQueryFieldFilter[]) {\r\n this._filters = value;\r\n this.tableData.data = value.filter(x => !x.hidden);\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n\r\n // Resetting the query (because we want to, I guess???)\r\n\r\n // Setting initial properties\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (this.forStudentSearch || this.forCourseSearch || this.forStaffSearch) {\r\n this.columns.unshift('selector');\r\n this.columns.splice(this.columns.indexOf('apply-to-all-groups'), 1);\r\n }\r\n\r\n // Triggering validation for initial errors\r\n this.validationTrigger.nativeElement.click();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n menuItemClick(item: MenuItem) {\r\n // PRE: an item that contains the filter that was selected and what option was selected\r\n // POST: performs the proper action\r\n\r\n // Ensuring we have a filter\r\n const filter: DataQueryFieldFilter = item.data;\r\n if (!filter) {\r\n return;\r\n }\r\n\r\n // Performing the proper action\r\n switch (item.itemName) {\r\n\r\n // Duplicating the field\r\n case 'Duplicate':\r\n\r\n // Creating the new filter\r\n const newFilter = new DataQueryFieldFilter();\r\n Object.assign(newFilter, filter);\r\n if (filter.field && filter.field.Filters) {\r\n filter.field.Filters.push(newFilter);\r\n }\r\n newFilter.FilterID = DataQueryService.filterFieldId;\r\n DataQueryService.filterFieldId += 1;\r\n\r\n // Adding the filter\r\n const indexOfFilter = this.filters.indexOf(filter);\r\n this.filters.splice(indexOfFilter, 0, newFilter);\r\n this.tableData.data = this.filters;\r\n break;\r\n\r\n // Deleting it\r\n case 'Delete':\r\n if (this.V10 == false) {\r\n if (this.queryFilterFields != undefined && this.queryFilterFields.length > 0) {\r\n this.queryFilterFields.forEach(queryFilterField => {\r\n if (queryFilterField.FieldName == 'StudentsActivelyEnrolledTodayInClass') {\r\n queryFilterField.Filters.forEach(queryFilter => {\r\n if (queryFilter.Value2.toString() == item.data.Value2.toString()) {\r\n const siteSections = this.dataQueryService.currentQuery.siteSectionId.toString().split(',');\r\n const idx = _.indexOf(siteSections, item.data.Value2.toString());\r\n if (idx > -1) {\r\n siteSections.splice(idx, 1);\r\n }\r\n this.dataQueryService.currentQuery.siteSectionId = '';\r\n siteSections.forEach(siteSection => {\r\n this.dataQueryService.currentQuery.siteSectionId = this.dataQueryService.currentQuery.siteSectionId + (this.dataQueryService.currentQuery.siteSectionId.toString().length == 0 ? '' : ',') + siteSection;\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n filter.delete(\r\n this.dialog,\r\n this.filters,\r\n this.queryFilterFields,\r\n false,\r\n this.tableData,\r\n () => {\r\n this.dataQueryService.updateFilter();\r\n }\r\n );\r\n break;\r\n\r\n // Expanding the filter\r\n case 'Expand':\r\n // TODO\r\n break;\r\n\r\n // Default just does nothing (maybe we should show an error here?)\r\n default:\r\n break;\r\n }\r\n\r\n // Updating the filter translation and the table\r\n this.changeDetector.detectChanges();\t// We do this to prevent an expression changed error\r\n this.filtersChange.emit(this.filters);\r\n this.dataQueryService.updateFilter();\r\n this.dataQueryService.currentQuery.queryChanged = true;\r\n }\r\n\r\n // Local Methods\r\n disableOptions(filter: DataQueryFieldFilter, isOperator: boolean) {\r\n // PRE: a field to check if the options can be edits\r\n // POST: returns true if the dropdowns should be disabled\r\n return filter.field.FieldName == DataQueryFieldFilter.courseFilterFieldName\r\n || (this.V10 == true && isOperator == true && filter.field.FieldName == DataQueryFieldFilter.enrollmentFilterFieldName)\r\n || (this.V10 == false && isOperator == true && filter.field.FieldName == DataQueryFieldFilter.enrollmentFilterFieldName)\r\n || filter.IsStudentFilter\r\n || filter.IsCourseFilter\r\n || filter.disableEdit\r\n || filter.field.FieldName == DataQueryFieldFilter.studentListFilterFieldName\r\n || filter.field.FieldName == DataQueryFieldFilter.studentTeamFilterFieldName;\r\n }\r\n\r\n setCurrentDate1(filter: DataQueryFieldFilter) {\r\n filter.dateValue = new Date();\r\n }\r\n\r\n setCurrentDate2(filter: DataQueryFieldFilter) {\r\n filter.dateValue2 = new Date();\r\n }\r\n\r\n // Service Methods\r\n checkDisabledField(field: DataQueryField) {\r\n return this.dataQueryService.checkDisabledField(field);\r\n }\r\n\r\n getStudentDropdownValue(value: string): string {\r\n return decodeURI(value);\r\n }\r\n\r\n updateFilter(filter: DataQueryFieldFilter, filterField: string, updatedValue: any, field = null) {\r\n if (filter[filterField] != updatedValue) {\r\n if (updatedValue) {\r\n if (this.dataQueryService.isStudentSearch) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.UseFilterForCourseSearch = false;\r\n filter.UseFilterForStaffSearch = false;\r\n } else if (this.dataQueryService.isCourseSearch) {\r\n filter.UseFilterForStudentSearch = false;\r\n filter.UseFilterForCourseSearch = true;\r\n filter.UseFilterForStaffSearch = false;\r\n } else if (this.dataQueryService.isStaffSearch) {\r\n filter.UseFilterForStudentSearch = false;\r\n filter.UseFilterForCourseSearch = false;\r\n filter.UseFilterForStaffSearch = true;\r\n }\r\n }\r\n filter[filterField] = updatedValue;\r\n this.dataQueryService.updateFilter(filter, field);\r\n this.dataQueryService.currentQuery.queryChanged = true;\r\n }\r\n\r\n if (filter.field.Alias == 'Enrollment Date' && (updatedValue == 'Is Not Blank' || updatedValue == 'Is Blank')) {\r\n filter.dateValue = null;\r\n filter.dateValue2 = null;\r\n filter.UseCurrentDate1 = false;\r\n filter.UseCurrentDate2 = false;\r\n }\r\n\r\n if (filter.field.Alias == 'Birth Date' && (updatedValue == 'Is Not Blank' || updatedValue == 'Is Blank')) {\r\n filter.dateValue = null;\r\n filter.dateValue2 = null;\r\n filter.UseCurrentDate1 = false;\r\n filter.UseCurrentDate2 = false;\r\n }\r\n }\r\n\r\n openGroupMsgClick() {\r\n this.dialog.open(GroupConditionInfoDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQuery } from '../../models/data-query.model';\r\nimport { DataQueryService } from '../../data-query.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-view-query-properties-dialog',\r\n templateUrl: './view-query-properties-dialog.component.html',\r\n styleUrls: ['./view-query-properties-dialog.component.css']\r\n})\r\nexport class ViewQueryPropertiesDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n currentQuery: DataQuery;\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private dataQueryService: DataQueryService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: syncs the current query\r\n this.subscriptions.push(\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this.currentQuery = currentQuery;\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n
\r\n\tProperties of Current Query\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n\t\t\t{{currentQuery.QueryName}}\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n\t\t\t{{currentQuery.Scope}}\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n\t\t\t{{currentQuery.OwnerName}}\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n\t\t\t{{currentQuery.UpdatedOn | date: 'MM/dd/yy'}}\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t
\r\n\t\t\t{{currentQuery.Description}}\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n","import { Component, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DataQueryPermissions } from '../models/data-query-permissions';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { MenuItem } from '../../../shared-components/controls/menus/menu-item.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ViewQueryPropertiesDialogComponent } from './view-query-properties-dialog/view-query-properties-dialog.component';\r\nimport { DataQueryInformation } from '../models/data-query-information';\r\nimport { Subscription } from 'rxjs';\r\nimport { ViewQueriesDialogComponent } from '../view-queries-dialog/view-queries-dialog.component';\r\nimport { System } from '../../../shared-components/System';\r\nimport { take } from 'rxjs/operators';\r\nimport { DataQueryWizardComponent } from '../data-query-wizard/data-query-wizard.component';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'data-query-queries-button',\r\n templateUrl: './data-query-queries-button.component.html',\r\n styleUrls: ['./data-query-queries-button.component.css']\r\n})\r\nexport class DataQueryQueriesButtonComponent implements OnInit, OnChanges {\r\n\r\n // Interface Properties\r\n @Input() forFilters = false;\r\n\r\n // Properties\r\n private _currentQuery: DataQuery;\r\n information: DataQueryInformation;\r\n disabledQueryOptions: string[] = [];\r\n permissions: DataQueryPermissions;\r\n currentUser: User;\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private dataQueryService: DataQueryService,\r\n private userService: UserService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n get currentQuery(): DataQuery {\r\n return this._currentQuery;\r\n }\r\n\r\n set currentQuery(value: DataQuery) {\r\n this.dataQueryService.checkDeactivationAndChange(value);\r\n }\r\n\r\n get overwriteOptionString(): string {\r\n let returnString = 'Overwrite ';\r\n if (this.currentQuery && this.currentQuery.QueryName) {\r\n returnString += this.currentQuery.QueryName;\r\n } else {\r\n returnString += 'Current ' + this.menuName;\r\n }\r\n return returnString;\r\n }\r\n\r\n get menuName(): string {\r\n return this.forFilters ? 'Filter' : 'Query';\r\n }\r\n\r\n get menuNamePlural(): string {\r\n return this.forFilters ? 'Filters' : 'Queries';\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n\r\n // Initializing data members\r\n this.currentUser = this.userService.currentUser;\r\n\r\n // Maintaining the current query\r\n this.subscriptions.push(\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this._currentQuery = currentQuery;\r\n\r\n // Checking permissions of the query\r\n this.checkPermissions();\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this.information = information;\r\n })\r\n );\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: rechecks the permissions\r\n this.checkPermissions();\r\n }\r\n\r\n menuClick(menuItem: MenuItem) {\r\n // PRE: a menu button is clicked\r\n // POST: performs the appropriate action\r\n switch (menuItem.itemName) {\r\n\r\n // New Query loads a new query\r\n case 'New ' + this.menuName:\r\n this.currentQuery = new DataQuery();\r\n this.dataQueryService.currentlyActiveStudentsOnly = true;\r\n break;\r\n\r\n // New Query - Wizard loads a new query\r\n case 'New ' + this.menuName + ' Wizard':\r\n this.dataQueryService.checkDeactivationAndChange(new DataQuery()).pipe(take(1)).subscribe(queryChanged => {\r\n if (queryChanged) {\r\n this.dialog.open(DataQueryWizardComponent, {\r\n width: '100vw',\r\n maxWidth: '100vw',\r\n height: '100vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n });\r\n break;\r\n\r\n // Import Query opens the import dialog\r\n case 'Import ' + this.menuName:\r\n this.dataQueryService.openAddEditQuery(new DataQuery(), false, true);\r\n break;\r\n\r\n // Overwrite query saves the current query\r\n case this.overwriteOptionString:\r\n this.dataQueryService.saveQuery(this.currentQuery, () => { });\r\n break;\r\n\r\n // Save as new query opens the save dialog\r\n case 'Save As New ' + this.menuName:\r\n if (this.dataQueryService.isStudentSearch) {\r\n this.currentQuery.StudentSearch = this.forFilters;\r\n } else if (this.dataQueryService.isCourseSearch) {\r\n this.currentQuery.CourseSearch = this.forFilters;\r\n } else if (this.dataQueryService.isStaffSearch) {\r\n this.currentQuery.StaffSearch = this.forFilters;\r\n }\r\n this.dataQueryService.openAddEditQuery(\r\n this.currentQuery,\r\n false,\r\n false,\r\n () => { }\r\n );\r\n break;\r\n\r\n // Save as My Defaults sets up a default query and saves it\r\n case 'Save As My Default':\r\n const query = new DataQuery();\r\n Object.assign(query, this.currentQuery);\r\n query.SavedFromID = query.ID;\r\n query.ID = -1;\r\n query.QueryName = 'My Defaults';\r\n query.Description = this.currentQuery.Description;\r\n query.OwnerID = this.userService.currentUser.Id;\r\n query.Scope = 'Private';\r\n query.SelectedSites = this.currentQuery.SelectedSites;\r\n query.Deleted = false;\r\n query.StudentSearch = false;\t// $scope.isStudentSearch\r\n this.dataQueryService.saveQuery(query, () => {\r\n query.QueryName = 'My Default';\t\t\t// It's supposed to 'My Defaults' on the server, but it's 'My Default' on the client\r\n this.dataQueryService.currentQuery = query;\r\n this.information.defaultQuery = query;\r\n });\r\n break;\r\n\r\n // Opens the properties dialog for viewing\r\n case 'View Properties of Current ' + this.menuName:\r\n this.dialog.open(ViewQueryPropertiesDialogComponent, {\r\n disableClose: true\r\n });\r\n break;\r\n\r\n // Opens a dialog to view all the save queries\r\n case 'View Saved ' + this.menuNamePlural:\r\n const dialogBox = this.dialog.open(ViewQueriesDialogComponent, {\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(selectedQuery => {\r\n if (selectedQuery) {\r\n const convertedQuery = System.convert(selectedQuery, new DataQuery());\r\n let recents: DataQuery[] = [];\r\n if (this.forFilters) {\r\n recents = this.dataQueryService.recentQueriesInContext;\r\n } else {\r\n recents = this.information.recentQueries;\r\n }\r\n if (recents) {\r\n for (let i = 0; i < recents.length; i++) {\r\n if (recents[i].ID == convertedQuery.ID) {\r\n recents[i] = convertedQuery;\r\n }\r\n }\r\n }\r\n this.currentQuery = convertedQuery;\r\n }\r\n })\r\n );\r\n break;\r\n\r\n // Defaults to nothing\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // Methods\r\n menuItems(): string[] {\r\n // POST: obtains the menu items\r\n const menuItems = [\r\n 'New ' + this.menuName,\r\n this.overwriteOptionString,\r\n 'Save As New ' + this.menuName,\r\n 'View Saved ' + this.menuNamePlural\r\n ];\r\n if (!this.forFilters) {\r\n menuItems.splice(1, 0, 'Import ' + this.menuName);\r\n menuItems.splice(4, 0, 'Save As My Default');\r\n menuItems.splice(5, 0, 'View Properties of Current ' + this.menuName);\r\n }\r\n if (this.loginService.LoginSettings.EnableDataQueryAddSimpleMode) {\r\n menuItems.splice(1, 0, 'New ' + this.menuName + ' Wizard');\r\n }\r\n return menuItems;\r\n }\r\n\r\n checkPermissions() {\r\n this.disabledQueryOptions = [];\r\n this.dataQueryService.getPermissions().subscribe(permissions => {\r\n this.permissions = permissions;\r\n\r\n // Checking if user can import query\r\n if (\r\n !this.permissions.canUserCreatePrivateQuery &&\r\n !this.permissions.canUserCreateSchoolQuery &&\r\n !this.permissions.canUserCreateDistrictQuery\r\n ) {\r\n this.disabledQueryOptions.push('Import Query');\r\n }\r\n\r\n // Checking if user can overwrite query\r\n if (!this.dataQueryService.checkUserCanOverwriteQuery() || (this.currentQuery && this.currentQuery.ID < 0)) {\r\n this.disabledQueryOptions.push(this.overwriteOptionString);\r\n }\r\n\r\n // Check if user can save as a new query\r\n if (\r\n !this.permissions.canUserCreatePrivateQuery &&\r\n !this.permissions.canUserCreateSchoolQuery &&\r\n !this.permissions.canUserCreateDistrictQuery\r\n ) {\r\n this.disabledQueryOptions.push('Save As New Query');\r\n }\r\n\r\n // Check if user can save as default\r\n if (!this.permissions.canUserCreatePrivateQuery) {\r\n this.disabledQueryOptions.push('Save As My Default');\r\n }\r\n });\r\n }\r\n}\r\n","","\r\n
\r\n\t\r\n\tInsert Field\r\n\tSelect Field\t \r\n\t\r\n\t\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\tMore\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tField\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tCategory\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tObject\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{datum.data.CategoryName}}\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{datum.data.ObjectName}}\r\n\t\t\t\r\n\t\t\r\n\t\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { DataQueryInformation } from '../../models/data-query-information';\r\nimport { Subscription } from 'rxjs';\r\nimport { NestedData } from '../../../../shared-components/virtualized-table/nested-data';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQueryField } from '../../models/data-query-field.model';\r\nimport { DataQueryPreferences } from '../../../../shared-components/user-preferences/data-query-preferences.model';\r\nimport { DataQuery } from '../../models/data-query.model';\r\n\r\n@Component({\r\n selector: 'app-insert-field-dialog',\r\n templateUrl: './insert-field-dialog.component.html',\r\n styleUrls: [\r\n './insert-field-dialog.component.css',\r\n '../../data-query-shared-style.css',\r\n '../../virtualized-table.css'\r\n ]\r\n})\r\nexport class InsertFieldDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n information: DataQueryInformation;\r\n isStudentSearch: boolean;\r\n isCourseSearch: boolean;\r\n isStaffSearch: boolean;\r\n callByEform: boolean;\r\n disabledFields: { [fieldId: string]: boolean } = null;\r\n preferences = new DataQueryPreferences();\r\n currentQuery: DataQuery;\r\n\r\n // Properties\r\n subscriptions: Subscription[] = [];\r\n tableData: NestedData[] = [];\r\n fieldSearch = '';\r\n columns = DataQueryInformation.virtualizedTableColumns;\r\n V10: boolean;\r\n filterColumnSql: string[] = [];\r\n filterColumnFieldName: string[];\r\n\r\n // Class Functions\r\n constructor(\r\n private loginService: LoginService,\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: syncs the data\r\n this.information = this.data.information;\r\n this.isStudentSearch = this.data.isStudentSearch;\r\n this.isCourseSearch = this.data.isCourseSearch;\r\n this.isStaffSearch = this.data.isStaffSearch;\r\n this.disabledFields = this.data.disabledFields;\r\n this.callByEform = this.data.callByEform;\r\n this.preferences = this.data.preferences;\r\n this.currentQuery = this.data.currentQuery;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n\r\n // If this is staff search, we need a column filter for staff_id\r\n if (this.isStaffSearch) {\r\n this.filterColumnSql = this.V10 ? ['staff_id'] : null;\r\n this.filterColumnFieldName = null;\r\n }\r\n\r\n // If this is course search, we need a column filter for c_id\r\n else if (this.isCourseSearch) {\r\n this.filterColumnSql = this.V10 ? ['c_id'] : null;\r\n this.filterColumnFieldName = null;\r\n }\r\n\r\n // If this is student search, we need a column filter\r\n else if (this.isStudentSearch) {\r\n this.filterColumnSql = this.V10 ? ['student_id'] : null;\r\n this.filterColumnFieldName = null;\r\n }\r\n\r\n // If this isn't student search, show everything\r\n else {\r\n this.filterColumnSql = null;\r\n this.filterColumnFieldName = null;\r\n }\r\n\r\n // Setting up the grid\r\n this.tableData = this.information.virtualizedTableData({\r\n fieldSearch: this.fieldSearch,\r\n V10: this.loginService.LoginSettings.V10,\r\n allowTab: true,\r\n click: (event: MouseEvent, nestedData: NestedData) => {\r\n this.fieldSelect(nestedData.data);\r\n },\r\n keydown: (event: KeyboardEvent, nestedData: NestedData) => {\r\n if (event.key == 'Enter') {\r\n this.fieldSelect(nestedData.data);\r\n }\r\n },\r\n filterColumnSQL: this.filterColumnSql,\r\n filterColumnFieldName: this.filterColumnFieldName,\r\n disabledFields: this.disabledFields,\r\n preferences: this.preferences,\r\n currentQuery: this.currentQuery\r\n });\r\n\r\n // default expand if only one object is available...\r\n if (this.information != null && this.information.objects.length == 1) {\r\n this.expandAll();\r\n }\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box with nothing\r\n this.dialogBox.close();\r\n }\r\n\r\n fieldSelect(field: DataQueryField) {\r\n // PRE: a field is clicked or has entered pressed while focused on it on the table\r\n // POST: closes the dialog box with the field\r\n this.dialogBox.close(field);\r\n }\r\n\r\n // Methods\r\n applySearch(searchString: string) {\r\n // POST: applies the search to the available fields\r\n if (this.fieldSearch != searchString) {\r\n this.fieldSearch = searchString;\r\n this.tableData = this.information.virtualizedTableData({\r\n fieldSearch: this.fieldSearch,\r\n V10: this.loginService.LoginSettings.V10,\r\n allowTab: true,\r\n click: (event: MouseEvent, nestedData: NestedData) => {\r\n this.fieldSelect(nestedData.data);\r\n },\r\n keydown: (event: KeyboardEvent, nestedData: NestedData) => {\r\n if (event.key == 'Enter') {\r\n this.fieldSelect(nestedData.data);\r\n }\r\n },\r\n filterColumnSQL: this.filterColumnSql,\r\n filterColumnFieldName: this.filterColumnFieldName,\r\n disabledFields: this.disabledFields\r\n });\r\n if (this.fieldSearch) {\r\n this.expandAll();\r\n }\r\n }\r\n }\r\n\r\n expandAll() {\r\n // POST: expand all the rows\r\n // NOTE: we must force change detection because the virtualized table uses OnPush\r\n const previousTableData = Object.assign([], this.tableData);\r\n this.tableData = [];\r\n const expandData = (data: NestedData[]) => {\r\n data.forEach(datum => {\r\n datum.showChildren = true;\r\n if (datum.children) {\r\n expandData(datum.children);\r\n }\r\n });\r\n };\r\n expandData(previousTableData);\r\n this.tableData = previousTableData;\r\n }\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 the area around which this query will be focused.\r\n \r\n \r\n \r\n {{coreFile.Name}}\r\n \r\n \r\n \r\n\r\n \r\n 0\">\r\n Quick Starts\r\n Preselected fields and filters\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n {{filterOption.Name}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\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, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { DataQueryCoreFile } from '../../models/data-query-core-file.model';\r\nimport { DataQuery } from '../../models/data-query.model';\r\nimport { DataQueryService } from '../../data-query.service';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { DataQueryQuickStart } from '../../models/data-query-quick-start.model';\r\nimport { cloneDeep, isEqual } from 'lodash';\r\nimport { DataQueryCoreFileFilter } from '../../models/data-query-core-file-filter.model';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'data-query-wizard-query-info',\r\n templateUrl: './data-query-wizard-query-info.component.html',\r\n styleUrls: [\r\n '../../data-query-shared-style.css',\r\n './data-query-wizard-query-info.component.css'\r\n ]\r\n})\r\nexport class DataQueryWizardQueryInfoComponent implements OnInit, OnDestroy {\r\n\r\n // Interace Properties\r\n @Input() savedQueries: DataQuery[] = [];\r\n @Input() simpleValidationErrors: ErrorList[] = [];\r\n @Input() queryExists: boolean;\r\n\r\n // Data Properties\r\n coreFiles: DataQueryCoreFile[] = [];\r\n quickStarts: DataQueryQuickStart[] = [];\r\n selectedQuickStartId: number = null;\r\n coreFileFilters: DataQueryCoreFileFilter[] = [];\r\n selectedCoreFileFilterOptionId: number;\r\n\r\n // State Properties\r\n currentQuery: DataQuery = new DataQuery();\r\n subscriptions: Subscription[] = [];\r\n selectedCoreFileId: number;\r\n\r\n // View Properties\r\n @ViewChild('coreFileField', { read: ElementRef }) coreFileField: ElementRef;\r\n\r\n // Constructor\r\n constructor(\r\n private dataQueryService: DataQueryService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n get quickStartValues(): number[] {\r\n return this.quickStarts.map(quickStart => quickStart ? quickStart.ID : null);\r\n }\r\n\r\n get quickStartLabels(): string[] {\r\n return this.quickStarts.map(quickStart => quickStart ? quickStart.Name : 'None');\r\n }\r\n\r\n get quickStartIds(): string[] {\r\n return this.quickStarts.map(quickStart => 'quickStartRadio' + (quickStart ? quickStart.ID : 'None'));\r\n }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n this.selectedCoreFileFilterOptionId = this.dataQueryService.selectedCoreFileFilterOptionId;\r\n // Getting state subscriptions\r\n this.subscriptions.push(\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(query => {\r\n this.currentQuery = query;\r\n }),\r\n this.dataQueryService.observableSelectedCoreFileStream$.subscribe(selectedCoreFile => {\r\n if (selectedCoreFile) {\r\n this.selectedCoreFileId = selectedCoreFile.ID;\r\n this.dataQueryService.getQuickStarts(this.selectedCoreFileId).subscribe(quickStarts => {\r\n this.quickStarts = cloneDeep(quickStarts);\r\n this.quickStarts.unshift(null);\r\n });\r\n this.dataQueryService.getCoreFileFilters(this.selectedCoreFileId).subscribe(coreFileFilters => {\r\n this.coreFileFilters = coreFileFilters;\r\n });\r\n }\r\n }),\r\n this.dataQueryService.observableSelectedQuickStartStream$.subscribe(selectedQuickStart => {\r\n const quickStart = this.quickStarts.find(q => q && q.ID == this.selectedQuickStartId);\r\n if (!isEqual(quickStart, selectedQuickStart)) {\r\n this.selectedQuickStartId = selectedQuickStart ? selectedQuickStart.ID : null;\r\n }\r\n }),\r\n );\r\n\r\n // Getting data\r\n this.dataQueryService.getCoreFiles().subscribe(coreFiles => {\r\n this.coreFiles = coreFiles;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void { }\r\n\r\n coreFileChange(coreFileId: number) {\r\n if (this.queryExists && this.dataQueryService.selectedCoreFile && this.dataQueryService.selectedCoreFile.ID != coreFileId) {\r\n // User has already started the query. Show warning.\r\n this.showQueryChangeWarning().pipe(take(1)).subscribe(continueClicked => {\r\n if (continueClicked) {\r\n this.queryExists = false;\r\n this.selectCoreFile(coreFileId);\r\n }\r\n else {\r\n // revert change if use clicks cancel\r\n this.selectedCoreFileId = this.dataQueryService.selectedCoreFile ? this.dataQueryService.selectedCoreFile.ID: null;\r\n }\r\n });\r\n }\r\n else {\r\n this.selectCoreFile(coreFileId);\r\n }\r\n }\r\n\r\n // UI Functions\r\n selectCoreFile(coreFileId: number) {\r\n // PRE: the user changes the core file\r\n // POST: sets the core file to the selected core file\r\n if (!this.dataQueryService.selectedCoreFile || this.dataQueryService.selectedCoreFile.ID != coreFileId) {\r\n\r\n // Selecting a core file resets your query\r\n this.dataQueryService.currentQuery = new DataQuery();\r\n\r\n // Setting the selected core file globally and sending corresponding events\r\n this.dataQueryService.selectedCoreFile = this.coreFiles.find(coreFile => coreFile.ID == coreFileId);\r\n\r\n // set core file filter to default if core file changed\r\n const filter = this.coreFileFilters.find(o => o.CoreFileId == coreFileId);\r\n if (filter) {\r\n if (!filter.FilterOptions.find(o => o.ID == this.selectedCoreFileFilterOptionId)) {\r\n const def = filter.FilterOptions.find(o => o.Default);\r\n if (def) {\r\n this.selectedCoreFileFilterOptionId = def.ID;\r\n }\r\n else {\r\n this.selectedCoreFileFilterOptionId = null;\r\n }\r\n }\r\n }\r\n else {\r\n this.selectedCoreFileFilterOptionId = null;\r\n }\r\n\r\n // clear quick start selection\r\n if (!this.quickStarts.find(o => o && o.CoreFileId == coreFileId && o.ID == this.selectedQuickStartId)) {\r\n this.selectQuickStart(null);\r\n }\r\n }\r\n }\r\n\r\n quickStartChange(quickStartId: number) {\r\n const quickStart = this.quickStarts.find(q => q && q.ID == quickStartId);\r\n if (this.queryExists && !isEqual(this.dataQueryService.selectedQuickStart, quickStart)) {\r\n // User has already started the query. Show warning.\r\n this.showQueryChangeWarning().pipe(take(1)).subscribe(continueClicked => {\r\n if (continueClicked) {\r\n this.queryExists = false;\r\n this.selectQuickStart(quickStartId);\r\n }\r\n else {\r\n // revert change if use clicks cancel\r\n this.selectedQuickStartId = this.dataQueryService.selectedQuickStart ? this.dataQueryService.selectedQuickStart.ID : null;\r\n }\r\n });\r\n }\r\n else {\r\n this.selectQuickStart(quickStartId);\r\n }\r\n }\r\n\r\n selectQuickStart(quickStartId: number) {\r\n // PRE: the user changes the quick start\r\n // POST: sets the quick start to the selected quick start, then updates the query accordingly\r\n const quickStart = this.quickStarts.find(q => q && q.ID == quickStartId);\r\n if (!isEqual(this.dataQueryService.selectedQuickStart, quickStart)) {\r\n\r\n // Setting the query to the quick start query\r\n this.dataQueryService.selectedQuickStart = quickStart;\r\n this.selectedQuickStartId = quickStartId;\r\n if (quickStart) {\r\n this.dataQueryService.currentQuery = this.dataQueryService.getObjectFromXML(quickStart.QueryXML);\r\n } else {\r\n this.dataQueryService.currentQuery = null;\r\n }\r\n\r\n // Reapply filter portion of query\r\n this.selectFilterOption(this.selectedCoreFileFilterOptionId, true);\r\n }\r\n }\r\n\r\n filterOptionChange(filterOptionId: number, force = false) {\r\n if (this.queryExists && this.dataQueryService.selectedCoreFileFilterOptionId != filterOptionId) {\r\n // User has already started the query. Show warning.\r\n this.showQueryChangeWarning().pipe(take(1)).subscribe(continueClicked => {\r\n if (continueClicked) {\r\n this.queryExists = false;\r\n this.selectFilterOption(filterOptionId, force);\r\n }\r\n else {\r\n // revert change if use clicks cancel\r\n this.selectedCoreFileFilterOptionId = filterOptionId;\r\n setTimeout(() => {\r\n this.selectedCoreFileFilterOptionId = this.dataQueryService.selectedCoreFileFilterOptionId;\r\n }, 0);\r\n }\r\n });\r\n }\r\n else {\r\n this.selectFilterOption(filterOptionId, force);\r\n }\r\n }\r\n\r\n selectFilterOption(filterOptionId: number, force = false) {\r\n // PRE: the user changes a filter option selection\r\n // POST: sets the query up based on the filter option selected\r\n const filter = this.coreFileFilters.find(o => o.CoreFileId = this.selectedCoreFileId);\r\n if (filter) {\r\n const filterOption = filter.FilterOptions.find(o => o.ID == filterOptionId);\r\n if (\r\n filterOption\r\n && (\r\n force\r\n || this.selectedCoreFileFilterOptionId != filterOptionId\r\n )\r\n ) {\r\n\r\n // Removing the filters that were set by an option\r\n this.currentQuery.filterFields = this.currentQuery.filterFields.filter(filterField =>\r\n filterField.coreFileFilterId && filterField.coreFileFilterId != filterOption.CoreFileFilterId\r\n );\r\n\r\n // Setting the filter based on the option\r\n this.selectedCoreFileFilterOptionId = filterOptionId;\r\n const filterQuery = this.dataQueryService.getObjectFromXML(filterOption.QueryXML);\r\n filterQuery.filterFields.forEach(filterField => {\r\n filterField.coreFileFilterId = filterOption.CoreFileFilterId;\r\n this.currentQuery.filterFields.push(filterField);\r\n });\r\n this.currentQuery.currentlyActiveStudentsOnly = filterQuery.currentlyActiveStudentsOnly;\r\n this.dataQueryService.selectedCoreFileFilterOptionId = filterOptionId;\r\n }\r\n }\r\n }\r\n\r\n showQueryChangeWarning(): Observable {\r\n const warningDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n width: '530px'\r\n });\r\n warningDialog.componentInstance.headerLabel = 'WARNING';\r\n warningDialog.componentInstance.headerCenterAlign = true;\r\n warningDialog.componentInstance.confirmMessage = 'The options selected on this page will cause any existing field and filter selections to be overwritten.

If that is okay, select Continue.

If you do not want the existing selections overwritten, select Do Not Overwrite.';\r\n warningDialog.componentInstance.okButtonLabel = 'Continue';\r\n warningDialog.componentInstance.isDynamicCancelLable = 'Do Not Overwrite';\r\n warningDialog.componentInstance.okButtonImage = 'next arrow.png';\r\n return warningDialog.afterClosed();\r\n }\r\n}\r\n","\r\n\r\n New Data Query Wizard\r\n\r\n\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\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 { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DataQueryWizardQueryInfoComponent } from './data-query-wizard-query-info/data-query-wizard-query-info.component';\r\nimport { DataQueryFieldsComponent } from '../data-query-fields/data-query-fields.component';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatStepper } from '@angular/material/stepper';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-data-query-wizard',\r\n templateUrl: './data-query-wizard.component.html',\r\n styleUrls: ['./data-query-wizard.component.css']\r\n})\r\nexport class DataQueryWizardComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // Data Properties\r\n savedQueries: DataQuery[] = [];\r\n\r\n // State Properties\r\n currentStep = 0;\r\n currentQuery = new DataQuery();\r\n subscriptions: Subscription[] = [];\r\n errors: ErrorList[] = [];\r\n queryExists: boolean;\r\n\r\n // View Properties\r\n @ViewChild(DataQueryWizardQueryInfoComponent) queryInfoTab: DataQueryWizardQueryInfoComponent;\r\n @ViewChild(DataQueryFieldsComponent) fieldsTab: DataQueryFieldsComponent;\r\n @ViewChild(MatStepper) stepper: MatStepper;\r\n\r\n // Constructors\r\n constructor(\r\n private dataQueryService: DataQueryService,\r\n private dialogBox: MatDialogRef,\r\n private userService: UserService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n get queryStepCompleted(): boolean {\r\n return !!this.dataQueryService.selectedCoreFile;\r\n }\r\n\r\n get fieldStepCompleted(): boolean {\r\n return this.currentQuery.reportFields.length > 0;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n // Resetting our state\r\n this.dataQueryService.selectedCoreFile = null;\r\n this.dataQueryService.selectedQuickStart = null;\r\n this.dataQueryService.selectedCoreFileFilterOptionId = null;\r\n this.dataQueryService.wizardOpen = true;\r\n\r\n // Obtaining data needed throughout the wizard\r\n this.dataQueryService.getSavedQueries().subscribe(savedQueries => {\r\n this.savedQueries = savedQueries;\r\n });\r\n\r\n // Subscribing to state changes\r\n this.subscriptions.push(\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this.currentQuery = currentQuery;\r\n })\r\n );\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Currently this behavior isn't supported normally\r\n // https://stackoverflow.com/questions/55497836/angular-material-stepper-before-selection-change-prevent-step-change-for-some\r\n // https://github.com/angular/components/issues/9733\r\n this.stepper.steps.forEach((step, idx) => {\r\n step.select = () => { // We override each step to require validation before moving on\r\n if (idx < this.currentStep) {\r\n this.errors = [];\r\n this.currentStep = idx;\r\n } else if (idx > this.currentStep) {\r\n let maxTab = 0;\r\n if (this.queryStepCompleted) {\r\n maxTab = 1;\r\n }\r\n if (this.fieldStepCompleted) {\r\n maxTab = 3;\r\n }\r\n this.validateTab(\r\n () => {\r\n if (idx > maxTab) {\r\n this.currentStep = maxTab;\r\n this.validateTab();\r\n } else {\r\n this.currentStep = idx;\r\n }\r\n }\r\n );\r\n }\r\n };\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dataQueryService.wizardOpen = false;\r\n }\r\n\r\n // UI Functions\r\n close() {\r\n // PRE: the close button was clicked\r\n // POST: closes the dialog\r\n this.dialogBox.close();\r\n }\r\n\r\n nextStep() {\r\n // PRE: the user clicks on the next arrow\r\n // POST: goes to the next step\r\n this.validateTab(\r\n () => {\r\n this.currentStep += 1;\r\n this.queryExists = true;\r\n }\r\n );\r\n }\r\n\r\n previousStep() {\r\n // PRE: the user clicks on the previous arrow\r\n // POST: goes to the previous step\r\n this.errors = [];\r\n this.currentStep -= 1;\r\n }\r\n\r\n stepChanged(event: StepperSelectionEvent) {\r\n // PRE: the user changed the stepper's step\r\n // POST: changes the content accordingly\r\n this.currentStep = event.selectedIndex;\r\n this.queryExists = true;\r\n }\r\n\r\n saveQuery() {\r\n // PRE: the user clicks \"save\" on the Results step\r\n // POST: saves the query and closes the dialog\r\n this.currentQuery.OwnerID = 1;\r\n const currentUser = this.userService.currentUser;\r\n this.currentQuery.OwnerName = currentUser.LastName\r\n + ', '\r\n + currentUser.FirstName\r\n + (currentUser.MiddleName ? ' ' + currentUser.MiddleName.slice(0, 1) : '');\r\n this.dataQueryService.observableWizardOpen.next(null);\r\n this.dialogBox.close();\r\n }\r\n\r\n // Other Functions\r\n validateTab(callback?: Function) {\r\n // POST: validates the current tab\r\n this.errors = [];\r\n switch (this.currentStep) {\r\n\r\n // Validing the query info\r\n case 0:\r\n\r\n // The core file is required\r\n if (!this.dataQueryService.selectedCoreFile) {\r\n this.errors.push({\r\n fieldName: 'Area',\r\n fieldRef: this.queryInfoTab.coreFileField,\r\n errorMsg: 'Required.'\r\n });\r\n }\r\n\r\n // If we don't have errors, call the callback\r\n if (this.errors.length == 0 && callback) {\r\n callback();\r\n }\r\n break;\r\n\r\n // Validating the Fields tab\r\n case 1:\r\n\r\n // The query requires at least one field\r\n if (this.currentQuery.reportFields.length == 0) {\r\n this.errors.push({\r\n fieldName: 'Shown Fields',\r\n errorMsg: 'At least one shown field is required.',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n // If we don't have errors, call the callback\r\n if (this.errors.length == 0 && callback) {\r\n callback();\r\n }\r\n break;\r\n\r\n // Validating the Results tab\r\n case 3:\r\n this.dataQueryService.validateQuery(\r\n callback,\r\n (tab: string) => {\r\n switch (tab) {\r\n case 'Filters':\r\n this.currentStep = 2;\r\n break;\r\n default:\r\n this.currentStep = 1;\r\n break;\r\n }\r\n }\r\n );\r\n break;\r\n\r\n // By default, just call the callback\r\n default:\r\n if (callback) {\r\n callback();\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n","import { Subscriber } from '../Subscriber';\nexport function retry(count = -1) {\n return (source) => source.lift(new RetryOperator(count, source));\n}\nclass RetryOperator {\n constructor(count, source) {\n this.count = count;\n this.source = source;\n }\n call(subscriber, source) {\n return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));\n }\n}\nclass RetrySubscriber extends Subscriber {\n constructor(destination, count, source) {\n super(destination);\n this.count = count;\n this.source = source;\n }\n error(err) {\n if (!this.isStopped) {\n const { source, count } = this;\n if (count === 0) {\n return super.error(err);\n }\n else if (count > -1) {\n this.count = count - 1;\n }\n source.subscribe(this._unsubscribeAndRecycle());\n }\n }\n}\n","export class PagedContent {\r\n PageNumber: number;\r\n Content: T;\r\n\r\n constructor(pageNumber: number, content: T) {\r\n this.PageNumber = pageNumber;\r\n this.Content = content;\r\n }\r\n }\r\n\r\n","\r\n
\r\n\tWARNING\r\n
\r\n\r\n\r\n\r\n\t
\r\n\t\t{{warningMessage}}\r\n\t
\r\n\t
\r\n\t\tDo you want to overwrite this query?\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQuery } from '../models/data-query.model';\r\n\r\n@Component({\r\n selector: 'app-warning-dialog',\r\n templateUrl: './warning-dialog.component.html',\r\n styleUrls: ['./warning-dialog.component.css']\r\n})\r\nexport class WarningDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n warningMessage: string;\r\n allowOverwrite = false;\r\n query: DataQuery;\r\n existingQueryId: number;\r\n dataQueryService: any;\t// This is an instance of the data query service and must be any to prevent circular dependency issues\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.warningMessage = this.data.warningMessage;\r\n this.allowOverwrite = this.data.allowOverwrite;\r\n this.dataQueryService = this.data.dataQueryService;\r\n this.query = this.data.query;\r\n this.existingQueryId = this.data.existingQueryId;\r\n }\r\n\r\n overwrite() {\r\n // PRE: the overwrite button is clicked, and there is query and existingQueryId\r\n // POST: attempts to overwrites the query. Closes with true on success. Closes with false on failure.\r\n this.query.ID = this.existingQueryId;\r\n this.dataQueryService.saveQuery(this.query,\r\n (result) => {\r\n if (result) {\r\n this.dataQueryService.loadQuery(this.query);\r\n }\r\n this.dialogBox.close(true);\r\n },\r\n () => {\r\n this.dialogBox.close(false);\r\n }\r\n );\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close(false);\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n

\r\n\tTemplates from Classic\r\n

\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tName\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tDescription\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tScope\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tOwner\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{query.QueryName}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{query.Description}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{query.Scope}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{query.OwnerName}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t
\r\n
","import { Component, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { DataQuery } from '../../models/data-query.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-templated-from-class-dialog',\r\n templateUrl: './templates-from-classic-dialog.component.html',\r\n styleUrls: ['./templates-from-classic-dialog.component.css']\r\n})\r\nexport class TemplatesFromClassicDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n legacyQueries: DataQuery[] = [];\r\n\r\n // Properties\r\n tableData = new TylerMatTableDataSource();\r\n columns = ['Name', 'Description', 'Scope', 'Owner'];\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n @ViewChild(MatPaginator, { static: true }) set paginator(value: MatPaginator) {\r\n this.tableData.paginator = value;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: performs initialization\r\n\r\n // Obtaining the legacy queries\r\n this.legacyQueries = this.data.legacyQueries;\r\n this.tableData.data = this.legacyQueries;\r\n\r\n // Setting which columns to display\r\n if (this.loginService.LoginSettings.V10) {\r\n this.columns.splice(this.columns.indexOf('Scope'), 1);\r\n this.columns.splice(this.columns.indexOf('Owner'), 1);\r\n } else {\r\n this.columns.splice(this.columns.indexOf('Description'), 1);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: implemented for @AutoUnsubscribe\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n queryClick(query: DataQuery) {\r\n // PRE: a data query row is clicked\r\n // PST: sets the imported query to the legacy query\r\n const returnQuery = Object.assign(new DataQuery(), query);\r\n if (!this.loginService.LoginSettings.V10 && query.Scope != 'Private' && query.Scope != 'District') {\r\n query.Scope = 'Selected Sites';\r\n\r\n const querySchool = this.yearService.years.find(school => school.SchoolCode == query.SelectedSites);\r\n if (querySchool) {\r\n returnQuery.SelectedSites = querySchool.Id.toString();\r\n }\r\n this.dialogBox.close(returnQuery);\r\n } else {\r\n this.dialogBox.close(returnQuery);\r\n }\r\n }\r\n\r\n // Methods\r\n\r\n}\r\n","\r\n

\r\n {{headerText | translate}}\r\n
\r\n \r\n Save As New Query\r\n \r\n \r\n Edit Query\r\n \r\n \r\n Import Query\r\n \r\n
\r\n

\r\n\r\n\r\n\r\n\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n Publish to Integration Services\r\n \r\n \r\n \r\n {{query.OwnerName}}\r\n Take Ownership\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n Available to \r\n \r\n Selected Sites\r\n \r\n
\r\n
","import { Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport * as _ from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { AddFileComponent } from '../../../shared-components/controls/add-file/add-file.component';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { SelectedSite } from '../../../shared-components/controls/selected-sites-dialog/selected-site';\r\nimport { SelectedSitesDialogComponent } from '../../../shared-components/controls/selected-sites-dialog/selected-sites-dialog.component';\r\nimport { System } from '../../../shared-components/System';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { DataQueryInformation } from '../models//data-query-information';\r\nimport { DataQuery } from '../models//data-query.model';\r\nimport { DataQueryPermissions } from '../models/data-query-permissions';\r\nimport { WarningDialogComponent } from '../warning-dialog/warning-dialog.component';\r\nimport { TemplatesFromClassicDialogComponent } from './templates-from-classic-dialog/templates-from-classic-dialog.component';\r\n\r\n@Component({\r\n selector: 'add-edit-query-dialog',\r\n templateUrl: './add-edit-query.component.html',\r\n styleUrls: ['./add-edit-query.component.css']\r\n})\r\nexport class AddEditQueryDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n headerText = '';\r\n forEdit = false;\r\n forImport = false;\r\n query = new DataQuery();\r\n dataQueryService: any;\t// This is an instance of data query service and must be any to prevent circular dependency issues\r\n\r\n // Properties\r\n importOption = 0;\r\n permissions: DataQueryPermissions;\r\n scopeOptions = ['Private', 'Selected Sites', 'District'];\r\n scopeLabels = ['Private', null, 'Available to District'];\r\n scopeIds = ['scopeRadio0', 'scopeRadio1', 'scopeRadio2'];\r\n scopeDisabledOptions = [];\r\n fileName: string;\r\n fileType: string;\r\n templateName: string;\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n currentQuery: DataQuery;\r\n originalQuery: DataQuery;\r\n information: DataQueryInformation;\r\n currentUser: User;\r\n scopeObject: string;\r\n\r\n // Template Properties\r\n @ViewChild('nameInput', { read: ElementRef, static: true }) nameInput: ElementRef;\r\n @ViewChild('selectedSitesLink', { read: ElementRef }) selectedSitesLink: ElementRef;\r\n @ViewChild('templateSelectButton', { read: ElementRef }) templateSelectButton: ElementRef;\r\n @ViewChild('addFileComponent', { read: AddFileComponent }) addFileComponent: AddFileComponent;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the component\r\n this.currentUser = this.userService.currentUser;\r\n // Getting injected properties\r\n this.headerText = this.data.headerText;\r\n this.forEdit = this.data.forEdit;\r\n this.forImport = this.data.forImport;\r\n this.dataQueryService = this.data.dataQueryService;\r\n if (this.data.query && this.data.query instanceof DataQuery) {\r\n if (this.forEdit == true && this.forImport == false) {\r\n this.query = _.cloneDeep(this.data.query);\r\n }\r\n else {\r\n this.query = this.data.query;\r\n }\r\n\r\n this.scopeObject = this.query.Scope;\r\n }\r\n // Setting up which options are disabled\r\n this.subscriptions.push(\r\n this.dataQueryService.getPermissions().subscribe(permissions => {\r\n this.permissions = permissions;\r\n\r\n // Determining what scopes are available\r\n this.scopeDisabledOptions = [];\r\n if (!this.permissions.canUserCreatePrivateQuery) {\r\n this.scopeDisabledOptions.push('Private');\r\n }\r\n if (!this.permissions.canUserCreateSchoolQuery) {\r\n this.scopeDisabledOptions.push('Selected Sites');\r\n }\r\n if (!this.permissions.canUserCreateDistrictQuery) {\r\n this.scopeDisabledOptions.push('District');\r\n }\r\n\r\n // Setting the scope of the query\r\n if (this.permissions.canUserCreatePrivateQuery) {\r\n this.query.Scope = 'Private';\r\n } else if (this.permissions.canUserCreateSchoolQuery) {\r\n this.query.Scope = 'Selected Sites';\r\n } else {\r\n this.query.Scope = 'District';\r\n }\r\n }),\r\n\r\n // Syncing properties\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(currentQuery => {\r\n this.currentQuery = currentQuery;\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this.information = information;\r\n })\r\n );\r\n\r\n // Setting query default variables\r\n if (!this.forEdit) {\r\n this.query.SavedFromID = this.query.ID;\r\n this.query.ID = -1;\r\n this.query.OwnerID = this.userService.currentUser.Id;\r\n this.query.SelectedSites = '';\r\n this.query.Deleted = false;\r\n }\r\n\r\n // Setting the original query for cancelling\r\n this.originalQuery = new DataQuery();\r\n Object.assign(this.originalQuery, this.query);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: resets the query and closes the dialog box\r\n Object.assign(this.query, this.originalQuery);\r\n this.dialogBox.close();\r\n }\r\n\r\n import() {\r\n // PRE: the import button is clicked\r\n // POST: validates and, if valid, tries to save.\r\n\r\n // Checking for errors\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n\r\n // File Importing\r\n if (this.importOption == 0) {\r\n\r\n // Parsing out export settings\r\n if (this.query.QueryXML.indexOf('') > -1) {\r\n const parser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(this.query.QueryXML, 'text/xml');\r\n const exportType = xmlDoc.getElementsByTagName('ExportType')[0].innerHTML;\r\n const delimeter = xmlDoc.getElementsByTagName('Delimeter')[0].innerHTML;\r\n const otherDelimeter = xmlDoc.getElementsByTagName('OtherDelimeter')[0].innerHTML;\r\n const includeColumnHeadings = xmlDoc.getElementsByTagName('IncludeColumnHeadings')[0].innerHTML;\r\n this.query.ExportType = exportType;\r\n this.query.Delimiter = delimeter;\r\n this.query.OtherDelimiter = otherDelimeter;\r\n this.query.IncludeColumnHeadings = includeColumnHeadings == 'true';\r\n }\r\n\r\n // Loading the data from the query\r\n this.dataQueryService.importing = true;\r\n this.dataQueryService.importQueryClick = true;\r\n this.dataQueryService.loadDataFromXML(this.query, this.dataQueryService.importQueryClick);\r\n\r\n // Validating the query manually to load the data on a failure\r\n this.query.queryChangedSinceLastResult = false;\t// We do this to prevent results tab from validating, too\r\n this.dataQueryService.validateQuery(\r\n () => {\r\n\r\n // Saving the query with loaded data\r\n this.dataQueryService.saveQuery(\r\n this.query,\r\n results => {\r\n\r\n // If successful, trim the query XML and set it to the current query\r\n if (results[0] == 'Success') {\r\n this.query.queryChangedSinceLastResult = true;\r\n this.dataQueryService.currentQuery = this.query;\r\n this.query.QueryXML = this.query.QueryXML.substring(0, this.query.QueryXML.indexOf('') + 7);\r\n this.dialogBox.close();\r\n }\r\n\r\n // Otherwise, show warning circle\r\n else {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: this.nameInput,\r\n errorMsg: 'A query with this name already exists.'\r\n });\r\n }\r\n this.dataQueryService.importing = false;\r\n },\r\n results => {\r\n if (results[0] != 'Success') {\r\n this.errors.push({\r\n fieldRef: this.nameInput,\r\n fieldName: 'Query Name',\r\n errorMsg: results[0]\r\n });\r\n }\r\n this.dataQueryService.importing = false;\r\n },\r\n false\t\t// We don't include validation because we want the user to be able to fix it after importing\r\n );\r\n },\r\n () => {\r\n\r\n // Moving to Settings for Export to fix problems\r\n this.dataQueryService.currentTab = 'Settings for Export';\r\n\r\n // We need to wait for the tab change to occur so we don't get multiple errors from results tab\r\n setTimeout(() => {\r\n\r\n // Setting this as the current query to fix the errors\r\n this.query.queryChangedSinceLastResult = true;\r\n this.dataQueryService.currentQuery = this.query;\r\n\r\n // Closing the dialog\r\n this.dialogBox.close();\r\n this.dataQueryService.importing = false;\r\n }, 100);\r\n },\r\n true,\r\n this.query\r\n );\r\n }\r\n\r\n // Classic Importing\r\n else {\r\n this.subscriptions.push(\r\n this.dataQueryService.importQueryFromLegacy(this.query).subscribe(importResults => {\r\n\r\n // Loading the imported query data\r\n this.query = System.convert(importResults, new DataQuery());\r\n this.dataQueryService.loadDataFromXML(this.query);\r\n\r\n // Saving the query with loaded data\r\n this.dataQueryService.saveQuery(\r\n this.query,\r\n (saveResults) => {\r\n\r\n // If successful, set this query as the current query\r\n if (saveResults[0] == 'Success') {\r\n this.query.queryChangedSinceLastResult = true;\r\n this.dataQueryService.loadQuery(this.query);\r\n this.dataQueryService.currentQuery = this.query;\r\n this.dialogBox.close(this.query);\r\n }\r\n\r\n // If unsuccessful, show warnings\r\n else {\r\n\r\n // Show warning dialog in V10 with certain permissions\r\n if (!this.loginService.LoginSettings.V10\r\n && saveResults && saveResults.length >= 2\r\n && ((this.query.Scope == 'Private' && this.query.OwnerID == this.userService.currentUser.Id)\r\n || (this.query.Scope == 'Selected Sites' && this.permissions.canUserModifySchoolQuery)\r\n || (this.query.Scope == 'District' && this.permissions.canUserModifyDistrictQuery)\r\n )\r\n ) {\r\n const dialogBox = this.dialog.open(WarningDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n warningMessage: 'A query with this name already exists.',\r\n allowOverwrite: true,\r\n query: this.query,\r\n existingQueryId: saveResults[1],\r\n dataQueryService: this.dataQueryService\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n this.dialogBox.close();\r\n })\r\n );\r\n }\r\n\r\n // Otherwise, show error circle\r\n else {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: this.nameInput,\r\n errorMsg: 'A query with this name already exists.'\r\n });\r\n }\r\n }\r\n this.dataQueryService.importing = false;\r\n },\r\n () => {\r\n this.dataQueryService.importing = false;\r\n },\r\n false\t\t// We don't include validation because it's guaranteed to be valid from classic\r\n );\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: validates and, if valid, saves the query then closes the dialog box\r\n\r\n // We must load the query before we save it\r\n if (!this.query.xmlLoaded) {\r\n this.dataQueryService.loadDataFromXML(this.query);\r\n }\r\n\r\n // Helper Function\r\n const serverCall = () => {\r\n this.dataQueryService.saveQuery(\r\n this.query,\r\n (result) => {\r\n if (result && result[0] != 'A query with the same name already exists.') {\r\n this.dialogBox.close(this.query);\r\n } else {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: this.nameInput,\r\n errorMsg: 'A query with this name already exists.'\r\n });\r\n }\r\n }\r\n );\r\n };\r\n\r\n // Validation\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n\r\n // If we're not editing, we have to add the report template\r\n if (!this.forEdit) {\r\n this.subscriptions.push(\r\n this.dataQueryService.getReportTemplateXML(this.currentQuery.ID).subscribe(reportXML => {\r\n this.query.QueryXML += reportXML;\r\n serverCall();\r\n })\r\n );\r\n }\r\n\r\n // Otherwise, just save\r\n else {\r\n serverCall();\r\n }\r\n }\r\n }\r\n\r\n setFile(XML: string) {\r\n // PRE: a file has been added\r\n // POST: sets up the imported query's XML based on the file\r\n this.query.QueryXML = XML;\r\n }\r\n\r\n importQuerySelect() {\r\n // PRE: the select button under the import query option is clicked\r\n // POST: opens the dialog to select a legacy query\r\n this.dataQueryService.getLegacyQueries().subscribe(legacyQueries => {\r\n const legacyDialogBox = this.dialog.open(TemplatesFromClassicDialogComponent, {\r\n disableClose: true,\r\n width: '80vw',\r\n height: '80vh',\r\n data: {\r\n legacyQueries: legacyQueries\r\n }\r\n });\r\n legacyDialogBox.afterClosed().subscribe(legacyQuery => {\r\n if (legacyQuery) {\r\n this.templateName = legacyQuery.QueryName;\r\n this.query = legacyQuery;\r\n }\r\n });\r\n });\r\n }\r\n\r\n selectedSitesClick() {\r\n // PRE: the selected sites link is clicked\r\n // POST: opens the selected sites\r\n const selectedSites: SelectedSite[] = [];\r\n this.query.SelectedSites.split(',').forEach(siteIdString => {\r\n const siteId = Number(siteIdString.trim());\r\n if (!isNaN(siteId)) {\r\n const ss = new SelectedSite();\r\n ss.Id = siteId;\r\n selectedSites.push(ss);\r\n }\r\n });\r\n const selectedSitesDialogBox = this.dialog.open(SelectedSitesDialogComponent, {\r\n disableClose: true,\r\n width: '700px',\r\n data: {\r\n selectedSites: selectedSites\r\n }\r\n });\r\n selectedSitesDialogBox.afterClosed().subscribe((results: SelectedSite[]) => {\r\n if (results) {\r\n this.query.SelectedSites = results.map(o => o.Id).join(', ');\r\n this.query.SelectedSiteNames = results.map(o => o.SchoolName).join(', ');\r\n }\r\n });\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets up the errors\r\n this.errors = [];\r\n\r\n // File name is required if our option is 0\r\n if (this.forImport && this.importOption == 0 && !this.fileName) {\r\n const elementRef = this.addFileComponent ? this.addFileComponent.browseButton : null;\r\n this.errors.push({\r\n fieldName: 'File Name',\r\n fieldRef: elementRef,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // File type Only XML is required if our option is 0\r\n if (this.forImport && this.importOption == 0 && this.addFileComponent && this.addFileComponent.fileType != undefined && this.addFileComponent.fileType != 'text/xml' && this.addFileComponent.fileType != 'application/xml') {\r\n const elementRef = this.addFileComponent ? this.addFileComponent.deleteButton : null;\r\n this.errors.push({\r\n fieldName: 'File',\r\n fieldRef: elementRef,\r\n errorMsg: 'Invalid type. File must be one created from export of existing query.'\r\n });\r\n }\r\n\r\n // Template name is required if our option is 1\r\n if (this.forImport && this.importOption == 1 && !this.templateName) {\r\n this.errors.push({\r\n fieldName: 'Classic Application Query',\r\n fieldRef: this.templateSelectButton,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // Sites is required if this is selected site scope\r\n if (this.query.Scope == 'Selected Sites' && !this.query.SelectedSites) {\r\n this.errors.push({\r\n fieldName: 'Selected Sites',\r\n fieldRef: this.selectedSitesLink,\r\n errorMsg: 'No Sites selected.'\r\n });\r\n }\r\n\r\n // Query name is required\r\n if (!this.query.QueryName) {\r\n this.errors.push({\r\n fieldName: 'Query Name',\r\n fieldRef: this.nameInput,\r\n errorMsg: 'Field is required'\r\n });\r\n }\r\n }\r\n viewScopeChange() {\r\n this.query.Scope = this.scopeObject;\r\n }\r\n\r\n takeOwnershipClick() {\r\n this.query.OwnerID = this.currentUser.Id;\r\n this.query.OwnerName = this.currentUser.LastName + ', ' + this.currentUser.FirstName;\r\n }\r\n}\r\n","\r\n
\r\n\tErrors Exist\r\n
\r\n\r\n\r\n\r\n\t
\r\n\t\tThe query being imported contains the following fields that do not exist in the database:\r\n\t
\r\n\t
    \r\n\t\t
  • \r\n\t\t\t{{field.Alias ? field.Alias : field.FieldName}}\r\n\t\t
  • \r\n\t
\r\n\t
\r\n\t\tThese fields will need to be removed or corrected before results can be displayed.\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { DataQueryField } from '../../models//data-query-field.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-import-error-dialog',\r\n templateUrl: './import-error-dialog.component.html',\r\n styleUrls: ['./import-error-dialog.component.css']\r\n})\r\nexport class ImportErrorDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n fields: DataQueryField[];\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.fields = this.data.fields;\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\nimport { DataQueryParameter } from './data-query-parameter.model';\r\n\r\nexport class DataQueryFunction {\r\n\r\n\t// Properties\r\n\tDescription: string;\r\n\tDisplayName: string;\r\n\tId: number;\r\n\tName: string;\r\n\tReturnType: string;\r\n\tSQL: string;\r\n\r\n\t// Methods\r\n\tgetSyntax(parameters: DataQueryParameter[]) {\r\n\t\t// POST: obtains the syntax for the function\r\n\t\tlet syntax = '';\r\n\t\tconst params = parameters.filter(parameter => parameter.FunctionId == this.Id);\r\n\t\tsyntax += this.Name + '(';\r\n\t\tfor (let i = 0; i < params.length; i++) {\r\n\t\t\tconst param = params.find(parameter => parameter.Position == i + 1);\r\n\t\t\tif (param != null) {\r\n\t\t\t\tif (i > 0) {\r\n\t\t\t\t\tsyntax += ', ';\r\n\t\t\t\t}\r\n\t\t\t\tif (this.Name.toLowerCase() == 'date' && param.Name.toLowerCase() == 'format') {\r\n\t\t\t\t\tsyntax += '' + '\"' + param.Name + '\"' + '';\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tsyntax += '' + param.Name + '';\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\tsyntax += ')';\r\n\t\treturn syntax;\r\n\t}\r\n\r\n\tgetDescription(parameters: DataQueryParameter[]) {\r\n\t\t// POST: obtains the description for the function\r\n\t\tlet desc = this.Description;\r\n\t\tconst params = parameters.filter(parameter => parameter.FunctionId == this.Id);\r\n\t\tfor (let i = 0; i < params.length; i++) {\r\n\t\t\tconst param = params.find(parameter => parameter.Position == i + 1);\r\n\t\t\tif (param != null) {\r\n\t\t\t\tconst stringToMatch = '\\\\{' + (i + 1) + '\\\\}';\r\n\t\t\t\tconst regExp = new RegExp(stringToMatch, 'g');\r\n\t\t\t\tdesc = desc.replace(regExp, '' + param.Name + '');\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn desc;\r\n\t}\r\n}","import { DataQueryCategory } from './data-query-category.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\nexport class DataQueryObject {\r\n\r\n // Server Properties\r\n Categories: DataQueryCategory[] = [];\r\n Deleted: boolean;\r\n ID: number;\r\n ObjectName: string;\r\n DisplayName: string;\r\n\r\n // Local Properties\r\n private _tableData: TylerMatTableDataSource;\r\n\r\n // class functions\r\n get tableData(): TylerMatTableDataSource {\r\n if (!this._tableData) {\r\n this._tableData = new TylerMatTableDataSource(this.categories);\r\n }\r\n if (this._tableData.data != this.categories) {\r\n this._tableData.data = this.categories;\r\n }\r\n return this._tableData;\r\n }\r\n\r\n get categories(): DataQueryCategory[] {\r\n return this.Categories;\r\n }\r\n\r\n set categories(value: DataQueryCategory[]) {\r\n this.Categories = value;\r\n }\r\n}","export class DataQueryOperator {\r\n\r\n\t// Properties\r\n ID: number;\r\n OperatorName: string;\r\n Display: string;\r\n SqlTemplate: string;\r\n ReturnTypes: string;\r\n}","export class DataQueryParameter {\r\n\tDataType: string;\r\n\tFunctionId: number;\r\n\tId: number;\r\n\tName: string;\r\n\tPosition: number;\r\n}","import { UserPermission } from '../../../shared-components/user/user-permission.model';\r\n\r\nexport class DataQueryPermissions {\r\n\r\n // Properties\r\n canUserCreatePrivateQuery = false;\r\n canUserCreateSchoolQuery = false;\r\n canUserCreateDistrictQuery = false;\r\n canUserTakeOwnershipOfQuery = false;\r\n canUserQueryAllYears = false;\r\n canUserViewSQL = false;\r\n canPublishToIntegration = false;\r\n canUserModifySchoolQuery = false;\r\n canUserModifyDistrictQuery = false;\r\n\r\n // Methods\r\n constructor(\r\n permissions: UserPermission[],\r\n V10: boolean\r\n ) {\r\n // Copied from JS app\r\n if (V10) {\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Take Ownership of Existing Query' &&\r\n permission.PrivilegeId == 2507\r\n )) {\r\n this.canUserCreatePrivateQuery = true;\r\n this.canUserCreateSchoolQuery = true;\r\n this.canUserCreateDistrictQuery = true;\r\n this.canUserTakeOwnershipOfQuery = true;\r\n this.canUserQueryAllYears = true;\r\n this.canUserModifySchoolQuery = true;\r\n this.canUserModifyDistrictQuery = true;\r\n }\r\n else {\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Add Edit Private Query' &&\r\n permission.PrivilegeId == 2504\r\n )) {\r\n this.canUserCreatePrivateQuery = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Publish Query to School' &&\r\n permission.PrivilegeId == 2505\r\n )) {\r\n this.canUserCreateSchoolQuery = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Publish Query to District' &&\r\n permission.PrivilegeId == 2506\r\n )) {\r\n this.canUserCreateDistrictQuery = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Can Query All Years' &&\r\n permission.PrivilegeId == 2508\r\n )) {\r\n this.canUserQueryAllYears = true;\r\n }\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'View SQL Query' &&\r\n permission.PrivilegeId == 2522\r\n )) {\r\n this.canUserViewSQL = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionName == 'Publish to Integration Services' &&\r\n permission.PrivilegeId == 2524\r\n )) {\r\n this.canPublishToIntegration = true;\r\n }\r\n }\r\n else {\r\n this.canUserModifySchoolQuery = false;\r\n this.canUserModifyDistrictQuery = false;\r\n if (permissions.find(permission =>\r\n permission.PermissionCode == 'SD_ESDG' || permission.PermissionCode == 'SD_VSDG'\r\n )) {\r\n this.canUserCreatePrivateQuery = true;\r\n this.canUserCreateSchoolQuery = true;\r\n this.canUserCreateDistrictQuery = true;\r\n if (permissions.find(permission =>\r\n permission.PermissionCode == 'SD_MSLDGT'\r\n )) {\r\n this.canUserTakeOwnershipOfQuery = true;\r\n this.canUserModifySchoolQuery = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionCode == 'SD_MDWDGT'\r\n )) {\r\n this.canUserModifyDistrictQuery = true;\r\n this.canUserTakeOwnershipOfQuery = true;\r\n }\r\n if (permissions.find(permission =>\r\n permission.PermissionCode == 'SUI_DQVS'\r\n )) {\r\n this.canUserViewSQL = true;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { DataQueryField } from './data-query-field.model';\r\nexport class DataQueryTransformationField {\r\n\r\n // Properties\r\n\tfieldId: number;\r\n\tcategoryId: number;\r\n\tposition: number;\r\n\tsql: string;\r\n\r\n // Constructor\r\n constructor(field?: DataQueryField) {\r\n if (field) {\r\n this.fieldId = field.ID;\r\n this.categoryId = field.CategoryID;\r\n }\r\n }\r\n}","\r\n
\r\n\tWARNING\r\n
\r\n\r\n\r\n\r\n\t
\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\tChanges have been made to the query\r\n\t\t\t\r\n\t\t
\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{{currentQuery.QueryName == 'My Defaults' ? 'My Default' : currentQuery.QueryName}}\r\n\t\t\t\r\n\t\t
\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\tbut not saved.\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n\t
\r\n\t\t
\r\n\t\t\tChanges have been entered but not saved.\r\n\t\t
\r\n\t\t
\r\n\t\t\tIf you continue without saving, the changes will be lost.\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\t\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-data-query-unsaved-changes-dialog',\r\n templateUrl: './data-query-unsaved-changes-dialog.component.html',\r\n styleUrls: ['./data-query-unsaved-changes-dialog.component.css']\r\n})\r\nexport class DataQueryUnsavedChangesDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n currentQuery: DataQuery;\r\n userCanOverwrite: boolean;\r\n unsavedChanges: boolean;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data with the injected properties\r\n // POST: initializes the data\r\n this.currentQuery = this.data.currentQuery;\r\n this.userCanOverwrite = this.data.userCanOverwrite;\r\n this.unsavedChanges = this.data.unsavedChanges;\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: this is implemented for @AutoUnsubscribe()\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog with -1\r\n this.dialogBox.close(-1);\r\n }\r\n\r\n continueWithoutSaving() {\r\n // PRE: the continue without saving button is clicked\r\n // POST: closes the dialog box with 0\r\n this.dialogBox.close(0);\r\n }\r\n\r\n saveAsNew() {\r\n // PRE: the save as new button is clicked\r\n // POST: closes the dialog box with 1\r\n this.dialogBox.close(1);\r\n }\r\n\r\n saveQuery() {\r\n // PRE: the save query button is clicked\r\n // POST: closes the dialog box with 2\r\n this.dialogBox.close(2);\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n
\r\n\tRESULTS CANNOT BE DISPLAYED\r\n
\r\n\r\n\r\n\r\n\t
\r\n\t\tThis query cannot be processed because there is no way to connect fields from following areas:\r\n\t
\r\n\t\r\n\t\t
\r\n\t\t\t[\r\n\t\t\t\r\n\t\t\t\t{{category.CategoryName}}{{i == group.length - 1 ? '' : ', '}}\r\n\t\t\t\r\n\t\t\t]\r\n\t\t
\r\n\t
\r\n\t\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t[{{category.ObjectName}}].[{{category.CategoryName}}]\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQueryCategory } from '../models/data-query-category.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-no-relationships-warning-dialog',\r\n templateUrl: './no-relationships-warning-dialog.component.html',\r\n styleUrls: ['./no-relationships-warning-dialog.component.css']\r\n})\r\nexport class NoRelationshipsWarningDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n unjoinedCategoryGroups: DataQueryCategory[][] = [];\r\n\r\n // Properties\r\n V10: boolean;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: sets the injected properties\r\n this.unjoinedCategoryGroups = this.data.unjoinedCategoryGroups;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n ok() {\r\n // PRE: the OK button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}\r\n","/* eslint-disable complexity */\r\n/* eslint-disable spaced-comment */\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { cloneDeep, isEqual } from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { BehaviorSubject, forkJoin, Observable, of, ReplaySubject, Subject, Subscription } from 'rxjs';\r\nimport { catchError, map, retry, take } from 'rxjs/operators';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { CheckForErrorsGuard } from '../../shared-components/guards/check-for-errors/check-for-errors.guard';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport { PagedContent } from '../../shared-components/models/pagedContent.model';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { DataQueryPreferences } from '../../shared-components/user-preferences/data-query-preferences.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserPermission } from '../../shared-components/user/user-permission.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { ClassroomSummaryService } from '../classroom-summary/classroom-summary.service';\r\nimport { ClassroomSummary } from '../classroom-summary/models/classroom-summary.model';\r\nimport { SelectCourseDialogComponent } from '../guards/select-course/select-course-dialog/select-course-dialog.component';\r\nimport { AddEditQueryDialogComponent } from './add-edit-query-dialog/add-edit-query.component';\r\nimport { ImportErrorDialogComponent } from './add-edit-query-dialog/import-error-dialog/import-error-dialog.component';\r\nimport { DataQueryCategory } from './models/data-query-category.model';\r\nimport { DataQueryCoreFile } from './models/data-query-core-file.model';\r\nimport { DataQueryFieldFilter } from './models/data-query-field-filter.model';\r\nimport { DataQueryField } from './models/data-query-field.model';\r\nimport { DataQueryFunction } from './models/data-query-function.model';\r\nimport { DataQueryInformation } from './models/data-query-information';\r\nimport { DataQueryObject } from './models/data-query-object.model';\r\nimport { DataQueryOperator } from './models/data-query-operator.model';\r\nimport { DataQueryParameter } from './models/data-query-parameter.model';\r\nimport { DataQueryPermissions } from './models/data-query-permissions';\r\nimport { DataQueryRelationship } from './models/data-query-relationship.model';\r\nimport { DataQueryResult } from './models/data-query-result.model';\r\nimport { PrintParameters } from './data-query-results/print-results-dialog/print-parameters.model';\r\nimport { InsertFieldDialogComponent } from './data-query-settings-for-export/insert-field-dialog/insert-field-dialog.component';\r\nimport { DataQueryTransformationField } from './models/data-query-transformation-field.model';\r\nimport { DataQueryUnsavedChangesDialogComponent } from './data-query-unsaved-changes-dialog/data-query-unsaved-changes-dialog.component';\r\nimport { DataQuery } from './models/data-query.model';\r\nimport { ErrorsExistDialogComponent } from './errors-exist-dialog/errors-exist-dialog.component';\r\nimport { NoRelationshipsWarningDialogComponent } from './no-relationships-warning-dialog/no-relationships-warning-dialog.component';\r\nimport { WarningDialogComponent } from './warning-dialog/warning-dialog.component';\r\nimport KeyDownEvent = JQuery.KeyDownEvent;\r\nimport ClickEvent = JQuery.ClickEvent;\r\nimport { DataQueryQuickStart } from './models/data-query-quick-start.model';\r\nimport { DataQueryCoreFileFilter } from './models/data-query-core-file-filter.model';\r\nimport { DataQueryCoreFileFilterOption } from './models/data-query-core-file-filter-option.model';\r\n\r\n@Injectable()\r\nexport class DataQueryService {\r\n\r\n // Static Properties\r\n static filterFieldId = 0;\r\n\r\n // Local Properties\r\n private blocking = false;\r\n distinct = true;\r\n currentYearOnly = true;\r\n currentSchoolOnly = true;\r\n currentlyActiveStudentsOnly = true;\r\n private loadingQuery = false;\r\n private savedQueryModified: boolean;\r\n private FormulasTested: boolean;\r\n private _studentFilters: DataQuery[];\r\n private _courseFilters: DataQuery[];\r\n private _staffFilters: DataQuery[];\r\n private _savedQueries: DataQuery[];\r\n private _isStudentSearch = false;\r\n private _isCourseSearch = false;\r\n private _isStaffSearch = false;\r\n V10: boolean;\r\n studentSearchFilters: any = {};\r\n courseSearchFilters: any = {};\r\n importing = false;\t// This is used to prevent double validations when on the results tab\r\n rosterQuery = false;\r\n obtainedRecentStudentQueries = false; // This is used for student search because we don't want to initially get all info\r\n obtainedRecentCourseQueries = false; // This is used for course search because we don't want to initially get all the info\r\n obtainedRecentStaffQueries = false; // This is used for staff search because we don't want to initially get all the info\r\n nextPageSubscriptions: Subscription[] = [];\r\n\r\n // Result Properties\r\n queryResultTable = [];\r\n currentPage = 1;\r\n sqlErrors: any;\r\n disabledFieldInReport: boolean;\r\n resetPageIndex: boolean;\r\n recordCount: number;\r\n pageCount: number;\r\n pageSize: number;\r\n retrievedData: string[][];\r\n importQueryClick = false;\r\n cancelQuery = new Subject();\r\n currentResultSubscriptions: Subscription[] = [];\r\n queryLoadingTimeout = null\r\n queryCanceled = false;\r\n resultsLoading = false;\r\n\r\n // Cached Server Properties\r\n private permissions: DataQueryPermissions;\r\n private legacyQueries: DataQuery[];\r\n private functions: DataQueryFunction[];\r\n private operators: DataQueryOperator[];\r\n private parameters: DataQueryParameter[];\r\n public userPermissions: UserPermission[];\r\n public disabledFields: { [fieldId: string]: boolean } = {};\r\n public editableFields: { [fieldId: string]: boolean } = {};\r\n public userCategories: number[];\r\n public studentSearchQuery: DataQuery;\r\n public courseSearchQuery: DataQuery;\r\n public cachedInformation = false;\r\n private cachedPreferences = false;\r\n private coreFiles: DataQueryCoreFile[] = [];\r\n private categoriesByCoreFile: { [coreFileId: number]: DataQueryCategory[] } = {};\r\n private quickStarts: { [coreFileId: number]: DataQueryQuickStart[] } = {};\r\n private coreFileFilters: { [coreFileId: number]: DataQueryCoreFileFilter[] } = {};\r\n\r\n // Permission Properties\r\n public enableMassUpdate = false;\r\n public unsavedChanges = false;\r\n public isHasEdited = false;\r\n\r\n // Sync Properties\r\n private _maximized = false;\r\n private observableMaximized = new BehaviorSubject(this._maximized);\r\n observableMaximizedStream$ = this.observableMaximized.asObservable();\r\n\r\n private _originalDataQueryQuery = new DataQuery();\r\n private _currentDataQueryQuery = new DataQuery();\r\n private _originalStudentSearchQuery = new DataQuery();\r\n private _currentStudentSearchQuery = new DataQuery();\r\n private observableCurrentQuery = new BehaviorSubject(this.currentQuery);\r\n observableCurrentQueryStream$ = this.observableCurrentQuery.asObservable();\r\n\r\n private _information = new DataQueryInformation();\r\n private observableInformation = new BehaviorSubject(this._information);\r\n observableInformationStream$ = this.observableInformation.asObservable();\r\n\r\n private _preferences = new DataQueryPreferences();\r\n private observablePreferences = new BehaviorSubject(this._preferences);\r\n observablePreferencesStream$ = this.observablePreferences.asObservable();\r\n\r\n private _results: DataQueryResult;\r\n private observableResults = new Subject();\r\n observableResultsStream$ = this.observableResults.asObservable();\r\n\r\n private _nextPageResults: PagedContent;\r\n private observableNextPageResults = new Subject>();\r\n observableNextPageResultsStream$ = this.observableNextPageResults.asObservable();\r\n\r\n private _currentTab: string;\r\n private _previousTab: string;\r\n private observableCurrentTab = new BehaviorSubject('Fields');\r\n observableCurrentTabStream$ = this.observableCurrentTab.asObservable();\r\n\r\n private observableSaveResult = new Subject();\r\n observableSaveResultStream$ = this.observableSaveResult.asObservable();\r\n\r\n private _selectedCoreFile: DataQueryCoreFile;\r\n private observableSelectedCoreFile = new BehaviorSubject(null);\r\n observableSelectedCoreFileStream$ = this.observableSelectedCoreFile.asObservable();\r\n\r\n private _selectedQuickStart: DataQueryQuickStart;\r\n private observableSelectedQuickStart = new BehaviorSubject(null);\r\n observableSelectedQuickStartStream$ = this.observableSelectedQuickStart.asObservable();\r\n\r\n selectedCoreFileFilterOptionId: number;\r\n\r\n private _wizardOpen = false;\r\n public observableWizardOpen = new Subject();\r\n observableWizardOpenStream$ = this.observableWizardOpen.asObservable();\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private router: Router,\r\n private userPreferencesService: UserPreferencesService,\r\n private dialog: MatDialog,\r\n private sharedService: SharedService,\r\n private securityService: SecurityService,\r\n private guard: CheckForErrorsGuard\r\n ) {\r\n\r\n // Whenever we change the year, the cache is invalidated\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.cachedInformation = false;\r\n });\r\n\r\n // Whenever we route away, reset current query\r\n router.events.subscribe(routerEvent => {\r\n if (routerEvent instanceof NavigationEnd && !routerEvent.urlAfterRedirects.includes('dataQuery')) {\r\n this.currentQuery = new DataQuery();\r\n }\r\n });\r\n\r\n // If we cancel the current query, we cancel any result call we're holding\r\n this.cancelQuery.subscribe(() => {\r\n this.currentResultSubscriptions.forEach(subscription => {\r\n if (!subscription.closed) {\r\n subscription.unsubscribe();\r\n }\r\n });\r\n if (this.queryLoadingTimeout) {\r\n clearTimeout(this.queryLoadingTimeout);\r\n }\r\n });\r\n\r\n // Whenever data query preferences are saved, remove the cache\r\n this.userPreferencesService.dataQueryPreferenceChange.subscribe(() => {\r\n this.cachedPreferences = false;\r\n this.getPreferences().pipe(take(1)).subscribe();\r\n });\r\n\r\n // Setting our V10 flag\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n get isStudentSearch(): boolean {\r\n return this._isStudentSearch;\r\n }\r\n\r\n set isStudentSearch(value: boolean) {\r\n if (this._isStudentSearch != value) {\r\n this._isStudentSearch = value;\r\n if (value == true) {\r\n this._isCourseSearch = false;\r\n this._isStaffSearch = false;\r\n }\r\n this.currentQuery = new DataQuery();\r\n this.observableCurrentQuery.next(this.currentQuery);\r\n }\r\n }\r\n\r\n get isCourseSearch(): boolean {\r\n return this._isCourseSearch;\r\n }\r\n\r\n set isCourseSearch(value: boolean) {\r\n if (this._isCourseSearch != value) {\r\n this._isCourseSearch = value;\r\n if (value == true) {\r\n this._isStudentSearch = false;\r\n this._isStaffSearch = false;\r\n }\r\n this.currentQuery = new DataQuery();\r\n this.observableCurrentQuery.next(this.currentQuery);\r\n }\r\n }\r\n\r\n get isStaffSearch(): boolean {\r\n return this._isStaffSearch;\r\n }\r\n\r\n set isStaffSearch(value: boolean) {\r\n if (this._isStaffSearch != value) {\r\n this._isStaffSearch = value;\r\n if (value == true) {\r\n this._isCourseSearch = false;\r\n this._isStudentSearch = false;\r\n }\r\n this.currentQuery = new DataQuery();\r\n this.observableCurrentQuery.next(this.currentQuery);\r\n }\r\n }\r\n\r\n get studentFilters(): Observable {\r\n if (this._studentFilters) {\r\n return of(this._studentFilters);\r\n } else {\r\n return this.getSavedQueries(true, false, false);\r\n }\r\n }\r\n\r\n get courseFilters(): Observable {\r\n if (this._courseFilters) {\r\n return of(this._courseFilters);\r\n } else {\r\n return this.getSavedQueries(false, true, false);\r\n }\r\n }\r\n\r\n get staffFilters(): Observable {\r\n if (this._staffFilters) {\r\n return of(this._staffFilters);\r\n } else {\r\n return this.getSavedQueries(false, false, true);\r\n }\r\n }\r\n\r\n get savedQueries(): Observable {\r\n if (this._savedQueries) {\r\n return of(this._savedQueries);\r\n } else {\r\n return this.getSavedQueries(false, false, false);\r\n }\r\n }\r\n\r\n get savedQueriesInContext(): Observable {\r\n if (this.isStudentSearch) {\r\n return this.studentFilters;\r\n } else if (this.isStaffSearch) {\r\n return this.staffFilters;\r\n } else if (this.isCourseSearch) {\r\n return this.courseFilters;\r\n } else {\r\n return this.savedQueries;\r\n }\r\n }\r\n\r\n get recentQueriesInContext(): DataQuery[] {\r\n if (this.isStudentSearch) {\r\n return this.information.recentStudentFilters;\r\n } else if (this.isStaffSearch) {\r\n return this.information.recentStaffFilters;\r\n } else if (this.isCourseSearch) {\r\n return this.information.recentCourseFilters;\r\n } else {\r\n return this.information.recentQueries;\r\n }\r\n }\r\n\r\n set recentQueriesInContext(value: DataQuery[]) {\r\n if (this.isStudentSearch) {\r\n this.information.recentStudentFilters = value;\r\n } else if (this.isStaffSearch) {\r\n this.information.recentStaffFilters = value;\r\n } else if (this.isCourseSearch) {\r\n this.information.recentCourseFilters = value;\r\n } else {\r\n this.information.recentQueries = value;\r\n }\r\n }\r\n\r\n get originalQuery(): DataQuery {\r\n if (this.isStudentSearch) {\r\n return this._originalStudentSearchQuery;\r\n } else {\r\n return this._originalDataQueryQuery;\r\n }\r\n }\r\n\r\n set originalQuery(value: DataQuery) {\r\n if (this.isStudentSearch) {\r\n this._originalStudentSearchQuery = value;\r\n } else {\r\n this._originalDataQueryQuery = value;\r\n }\r\n }\r\n\r\n get currentQuery(): DataQuery {\r\n if (this.isStudentSearch) {\r\n return this._currentStudentSearchQuery;\r\n } else {\r\n return this._currentDataQueryQuery;\r\n }\r\n }\r\n\r\n set currentQuery(value: DataQuery) {\r\n if (value == null) {\r\n value = new DataQuery();\r\n }\r\n if (value.QueryName == 'My Defaults') {\r\n value.QueryName = 'My Default';\r\n }\r\n value.organized = true;\r\n this.loadQuery(value);\r\n }\r\n\r\n get maximized(): boolean {\r\n return this._maximized;\r\n }\r\n\r\n set maximized(value: boolean) {\r\n this._maximized = value;\r\n this.observableMaximized.next(this._maximized);\r\n }\r\n\r\n get information(): DataQueryInformation {\r\n return this._information;\r\n }\r\n\r\n set information(value: DataQueryInformation) {\r\n this._information = value;\r\n this.observableInformation.next(this._information);\r\n }\r\n\r\n get preferences(): DataQueryPreferences {\r\n return this._preferences;\r\n }\r\n\r\n set preferences(value: DataQueryPreferences) {\r\n this._preferences = value;\r\n this.observablePreferences.next(this._preferences);\r\n }\r\n\r\n get results(): DataQueryResult {\r\n return this._results;\r\n }\r\n\r\n set results(value: DataQueryResult) {\r\n this._results = value;\r\n this.observableResults.next(this._results);\r\n }\r\n\r\n get currentTab(): string {\r\n return this._currentTab;\r\n }\r\n\r\n set currentTab(value: string) {\r\n this._previousTab = this._currentTab;\r\n this._currentTab = value;\r\n this.observableCurrentTab.next(this._currentTab);\r\n }\r\n\r\n get initialPageSize() {\r\n return 100;\r\n }\r\n\r\n get selectedCoreFile() {\r\n return this._selectedCoreFile;\r\n }\r\n\r\n set selectedCoreFile(value: DataQueryCoreFile) {\r\n this._selectedCoreFile = value;\r\n this.observableSelectedCoreFile.next(value);\r\n }\r\n\r\n get selectedQuickStart() {\r\n return this._selectedQuickStart;\r\n }\r\n\r\n set selectedQuickStart(value: DataQueryQuickStart) {\r\n this._selectedQuickStart = value;\r\n this.observableSelectedQuickStart.next(value);\r\n }\r\n\r\n get wizardOpen() {\r\n return this._wizardOpen;\r\n }\r\n\r\n set wizardOpen(value: boolean) {\r\n this._wizardOpen = value;\r\n // this.observableWizardOpen.next(value);\r\n }\r\n\r\n /////////// Method /////////////////\r\n isInformationCached() {\r\n // POST: returns whether or not information is cached\r\n return this.cachedInformation;\r\n }\r\n\r\n ////////// Server Calls //////////\r\n getSavedQueries(isStudentSearch = this.isStudentSearch, isCourseSearch = this.isCourseSearch, isStaffSearch = this.isStaffSearch): Observable {\r\n // PRE: whether or not this is within the student search component or for student filters\r\n // POST: obtains the saved queries from the DB\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&isStudentSearch=' + isStudentSearch +\r\n '&isCourseSearch=' + isCourseSearch +\r\n '&isStaffSearch=' + isStaffSearch;\r\n return this.http.get(System.apiURL.Classroom + 'DataQueryGetSavedQueries' + queryString).pipe(\r\n take(1),\r\n map(queries => {\r\n if (!queries) {\r\n queries = [];\r\n }\r\n for (let i = 0; i < queries.length; i++) {\r\n queries[i] = System.convert(queries[i], new DataQuery());\r\n\r\n // Changing My Defaults => My Default...lovely\r\n if (queries[i].QueryName == 'My Defaults') {\r\n queries[i].QueryName = 'My Default';\r\n }\r\n\r\n // Setting up selected sites\r\n if (queries[i].Scope == 'Selected Sites') {\r\n queries[i].SelectedSiteNames = '';\r\n const schoolIds = queries[i].SelectedSites.split(',');\r\n schoolIds.forEach(schoolId => {\r\n const schoolIdNumber = parseInt(schoolId.trim(), 10);\r\n const school = this.yearService.schools.find(o => o.Id == schoolIdNumber);\r\n if (school) {\r\n if (queries[i].SelectedSiteNames.length != 0) {\r\n queries[i].SelectedSiteNames += ', ';\r\n }\r\n queries[i].SelectedSiteNames += school.SchoolName;\r\n }\r\n });\r\n }\r\n }\r\n if (isStudentSearch) {\r\n this._studentFilters = queries;\r\n } else if (isCourseSearch) {\r\n this._courseFilters = queries;\r\n } else if (isStaffSearch) {\r\n this._staffFilters = queries;\r\n } else {\r\n this._savedQueries = queries;\r\n }\r\n return queries;\r\n })\r\n );\r\n }\r\n\r\n getRecentQueries(isStudentSearch = this.isStudentSearch, isCourseSearch = this.isCourseSearch, isStaffSearch = this.isStaffSearch): Observable {\r\n // PRE: whether or not this is within the student search component\r\n // POST: obtains the recent recentQueries from the DB\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&isStudentSearch=' + isStudentSearch +\r\n '&isCourseSearch=' + isCourseSearch +\r\n '&isStaffSearch=' + isStaffSearch;\r\n return this.http.get(System.apiURL.Classroom + 'DataQueryGetRecentQueries' + queryString).pipe(\r\n map(queries => {\r\n // NOTE: we do this to overwrite 'My Defaults' with 'My Default'\r\n let returnedQueries = queries;\r\n if (!returnedQueries) {\r\n returnedQueries = [];\r\n }\r\n for (let i = 0; i < returnedQueries.length; i++) {\r\n returnedQueries[i] = System.convert(returnedQueries[i], new DataQuery());\r\n }\r\n returnedQueries.forEach(query => {\r\n if (query.QueryName == 'My Defaults') {\r\n query.QueryName = 'My Default';\r\n }\r\n });\r\n return returnedQueries;\r\n })\r\n );\r\n }\r\n\r\n getObjects(): Observable {\r\n // POST: obtains the data query objects from the DB\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryObjects' + queryString);\r\n }\r\n\r\n getCategories(): Observable {\r\n // POST: obtains the data query categories from the DB\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryCategories' + queryString);\r\n }\r\n\r\n getFields(): Observable {\r\n // POST: obtains the data query fields from the DB\r\n let reorganize = false;\r\n if (this.information.organized) {\r\n this.information.disorganize();\r\n reorganize = true;\r\n }\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFields' + queryString).pipe(\r\n map(results => {\r\n if (reorganize) {\r\n this.information.organize();\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getUserCategories(): Observable {\r\n // POST: obtains the user's category numbers in V10 or an empty array in V9\r\n\r\n // Checking the cache\r\n if (this.userCategories) {\r\n return of(this.userCategories);\r\n }\r\n\r\n // If not cached, feting from the server\r\n if (this.loginService.LoginSettings.V10) {\r\n return this.http.get(System.apiURL.Classroom + 'GetV10UserCategoryIds').pipe(\r\n map(results => {\r\n this.userCategories = results;\r\n return this.userCategories;\r\n })\r\n );\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n\r\n getDefaultQuery(): Observable {\r\n // POST: obtains the default query from the server\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Classroom + 'DataQueryGetMyDefaultsQuery' + queryString);\r\n }\r\n\r\n getInformation(): Observable {\r\n // POST: obtains all the relevant information from the server\r\n const serverCalls = forkJoin(\r\n this.getRecentQueries(false, false, false),\r\n this.getObjects(),\r\n this.getCategories(),\r\n this.getFields(),\r\n this.getUserCategories(),\r\n this.getDefaultQuery(),\r\n this.getRecentQueries(true, false, false),\r\n this.getRecentQueries(false, true, false),\r\n this.getRecentQueries(false, false, true),\r\n this.getOperators(), // We call this to cache the result\r\n this.getRelationships([], false)\r\n );\r\n if (this.cachedInformation) {\r\n return of(this.information).pipe(take(1));\r\n } else {\r\n return serverCalls.pipe(\r\n retry(9),\r\n map(results => {\r\n const information = new DataQueryInformation();\r\n\r\n // Performing conversions\r\n for (let i = 0; i < results[0].length; i++) {\r\n results[0][i] = System.convert(results[0][i], new DataQuery());\r\n }\r\n for (let i = 0; i < results[1].length; i++) {\r\n results[1][i] = System.convert(results[1][i], new DataQueryObject());\r\n }\r\n for (let i = 0; i < results[2].length; i++) {\r\n results[2][i] = System.convert(results[2][i], new DataQueryCategory());\r\n }\r\n for (let i = 0; i < results[3].length; i++) {\r\n results[3][i] = System.convert(results[3][i], new DataQueryField());\r\n }\r\n results[5] = System.convert(results[5], new DataQuery());\r\n const defaultQuery = System.convert(results[5], new DataQuery());\r\n for (let i = 0; i < results[6].length; i++) {\r\n results[6][i] = System.convert(results[6][i], new DataQuery());\r\n }\r\n for (let i = 0; i < results[7].length; i++) {\r\n results[7][i] = System.convert(results[7][i], new DataQuery());\r\n }\r\n for (let i = 0; i < results[8].length; i++) {\r\n results[8][i] = System.convert(results[8][i], new DataQuery());\r\n }\r\n\r\n // Setting information\r\n information.recentQueries = results[0];\r\n information.objects = results[1];\r\n information.categories = results[2];\r\n information.fields = results[3];\r\n if (this.V10 == false) {\r\n information.fields.forEach(field => {\r\n if (field.DisplayName.indexOf('.') > -1) {\r\n field.DisplayName = field.DisplayName.replace('.', '');\r\n }\r\n });\r\n }\r\n\r\n information.userCategories = results[4];\r\n information.recentStudentFilters = results[6];\r\n information.recentCourseFilters = results[7];\r\n information.recentStaffFilters = results[8];\r\n const recentDefault = information.recentQueries.find(query => query.ID == defaultQuery.ID);\r\n if (recentDefault) {\r\n information.defaultQuery = recentDefault;\r\n } else {\r\n information.defaultQuery = defaultQuery;\r\n this.information.recentQueries.push(defaultQuery);\r\n }\r\n information.relationships = results[10];\r\n information.organize();\r\n\r\n // Returning the information\r\n this.information = information;\r\n this.cachedInformation = true;\r\n\r\n // Returning the information\r\n return this.information;\r\n }),\r\n take(1)\r\n );\r\n }\r\n }\r\n\r\n getPermissions(): Observable {\r\n // POST: sets the permissions of the data query\r\n\r\n // If we've already set the permissions, simply return that\r\n if (this.permissions) {\r\n return of(this.permissions);\r\n }\r\n\r\n // Otherwise, get the permissions from the server and set it\r\n this.userPermissions = this.securityService.userPermissions;\r\n this.permissions = new DataQueryPermissions(this.userPermissions, this.loginService.LoginSettings.V10);\r\n return of(this.permissions);\r\n }\r\n\r\n getPreferences(): Observable {\r\n // POST: obtains the preferences from the server\r\n // NOTE: this is implemented this way so that it only needs to be called from DataQueryComponent\r\n if (this.cachedPreferences) {\r\n return of(this.preferences);\r\n } else {\r\n return this.userPreferencesService.getUserPreferences(0,\r\n '/OneSISDataQuery',\r\n 0,\r\n '',\r\n false\r\n ).pipe(\r\n map(results => {\r\n this.preferences = JSON.parse(results[0]);\r\n this.userPreferencesService.dataQueryPreferences = this.preferences;\r\n this.cachedPreferences = true;\r\n return this.preferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getLegacyQueries(): Observable {\r\n // POST: obtains the legacy queries from the server\r\n\r\n // If we already have the legacy queries, just use that\r\n if (this.legacyQueries) {\r\n return of(this.legacyQueries);\r\n }\r\n\r\n // Otherwise, get the queries from the server\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetSavedQueriesFromLegacy' + queryString).pipe(\r\n map(results => {\r\n this.legacyQueries = results;\r\n for (let i = 0; i < this.legacyQueries.length; i++) {\r\n System.convert(this.legacyQueries[i], new DataQuery());\r\n }\r\n return this.legacyQueries;\r\n })\r\n );\r\n }\r\n\r\n getFunctions(): Observable {\r\n // POST: obtains the functions from the server\r\n if (this.functions) {\r\n return of(this.functions);\r\n } else {\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFunctions').pipe(\r\n map(functions => {\r\n this.functions = functions;\r\n for (let i = 0; i < this.functions.length; i++) {\r\n this.functions[i] = System.convert(this.functions[i], new DataQueryFunction());\r\n }\r\n return this.functions;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getOperators(): Observable {\r\n // POST: obtains the operators from the server\r\n if (this.operators) {\r\n return of(this.operators);\r\n } else {\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryOperators').pipe(\r\n map(operators => {\r\n this.operators = operators;\r\n for (let i = 0; i < this.operators.length; i++) {\r\n this.operators[i] = System.convert(this.operators[i], new DataQueryOperator());\r\n }\r\n return this.operators;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getParameters(): Observable {\r\n // POST: obtain the parameters from the server\r\n if (this.parameters) {\r\n return of(this.parameters);\r\n } else {\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryParameters').pipe(\r\n map(parameters => {\r\n this.parameters = parameters;\r\n for (let i = 0; i < this.parameters.length; i++) {\r\n this.parameters[i] = System.convert(this.parameters[i], new DataQueryParameter());\r\n }\r\n return this.parameters;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getRelationships(fields?: DataQueryField[], forCurrentQuery = true): Observable {\r\n // PRE: a list of fields to get relationships for\r\n // POST: returns a list of data query relationships\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n if (!fields) {\r\n if (forCurrentQuery) {\r\n fields = this.getAllFields(this.currentQuery);\r\n } else {\r\n fields = [];\r\n }\r\n } else {\r\n fields.forEach(field => {\r\n field.object = null;\r\n field.category = null;\r\n });\r\n }\r\n\r\n // We have to preserve the filters because the following can eliminate them\r\n const filters = [];\r\n if (forCurrentQuery) {\r\n for (let i = 0; i < this.currentQuery.filterFields.length; i++) {\r\n filters.push(this.currentQuery.filterFields[i].Filters);\r\n }\r\n }\r\n\r\n // We have to remove the transformation fields to avoid a null error on the DTO\r\n const transformationFields = [];\r\n for (let i = 0; i < fields.length; i++) {\r\n transformationFields[i] = fields[i].TransformationFields;\r\n delete fields[i].TransformationFields;\r\n }\r\n\r\n // Returning the request\r\n return this.postRequest('GetDataQueryRelationships', queryString, fields).pipe(\r\n map(relationships => {\r\n // NOTE: we do this processing to prevent overwriting whatever relationships are present\r\n\r\n // We only do this if we're manipulating the query\r\n if (forCurrentQuery) {\r\n\r\n // Resetting the transformation fields\r\n for (let i = 0; i < fields.length; i++) {\r\n fields[i].TransformationFields = transformationFields[i];\r\n }\r\n\r\n // Using the right relationship array\r\n let retRelationships = [];\r\n if (forCurrentQuery) {\r\n retRelationships = this.currentQuery.relationships;\r\n for (let i = 0; i < this.currentQuery.filterFields.length; i++) {\r\n this.currentQuery.filterFields[i].Filters = filters[i];\r\n }\r\n }\r\n\r\n // Removing erroneous relationships from the current query\r\n let l = retRelationships.length;\r\n while (l) {\r\n l -= 1;\r\n if (!relationships.find(rel => rel.ID == this.currentQuery.relationships[l].ID)) {\r\n retRelationships.splice(l, 1);\r\n }\r\n }\r\n\r\n // Adding new relationships\r\n relationships.forEach(relationship => {\r\n if (!this.currentQuery.relationships.find(rel =>\r\n (rel.Category1ID == relationship.Category1ID && rel.Category2ID == relationship.Category2ID)\r\n || (rel.Category2ID == relationship.Category1ID && rel.Category1ID == relationship.Category2ID))\r\n ) {\r\n retRelationships.push(relationship);\r\n }\r\n });\r\n\r\n // Returning the relationships\r\n this.currentQuery.relationships = retRelationships;\r\n return retRelationships;\r\n } else {\r\n return relationships;\r\n }\r\n }),\r\n catchError(err => {\r\n\r\n // Resetting the transformation fields\r\n for (let i = 0; i < fields.length; i++) {\r\n fields[i].TransformationFields = transformationFields[i];\r\n }\r\n\r\n // Throwing the error to higher handlers\r\n console.log('Error');\r\n console.log(err);\r\n throw (err);\r\n })\r\n );\r\n }\r\n\r\n saveQuery(query: DataQuery, _callback: Function, _error?: Function, includeValidation = true, forImport = false): void {\r\n // PRE: a query to save\r\n // POST: performs the validation (if includeValidation is true) then saves the query to the server\r\n\r\n // The service call as a utility function\r\n const serverCall = () => {\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&siteSectionId=' + query.siteSectionId;\r\n\r\n // Setting the XML for saving\r\n let exportSettings = query.QueryXML.substring(query.QueryXML.indexOf(''), query.QueryXML.indexOf(''));\r\n const reportXML = query.QueryXML.substring(query.QueryXML.indexOf(''), query.QueryXML.indexOf(''), exportSettings.indexOf(''));\r\n exportSettings = exportSettings.replace(exportTypeXML + '', '');\r\n exportSettings += '' + query.ExportType + '';\r\n query.QueryXML = query.QueryXML.replace('', exportSettings + '
' + '');\r\n }\r\n query.QueryXML = query.QueryXML;\r\n\r\n if (reportXML != undefined && reportXML != '') {\r\n const rtXML = this.getReportTemplateXMLData(reportXML);\r\n query.QueryXML = query.QueryXML + rtXML;\r\n }\r\n\r\n // The default query is \"my default\"\r\n // but the DTO expects my defaults for some reason\r\n if (query.QueryName == 'My Default') {\r\n query.QueryName = 'My Defaults';\r\n }\r\n if (query.ID <= 0) {\r\n query.OwnerName = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n }\r\n\r\n // Sending the save request\r\n const saveSubscription = this.postRequest('DataQuerySaveQuery', queryString, query).subscribe(results => {\r\n if (results[0] == 'Success') {\r\n\r\n // The default query is \"my default\"\r\n // but the DTO expects my defaults for some reason\r\n if (query.QueryName == 'My Defaults') {\r\n query.QueryName = 'My Default';\r\n }\r\n\r\n // Setting the query's data\r\n query.ID = parseInt(results[1], 10);\r\n this.savedQueryModified = false;\r\n query.queryChanged = false;\r\n\r\n // Setting the query as a recent query (to preserve data) (context-sensitive)\r\n if (!query.Deleted) {\r\n let queryFound = false;\r\n this.recentQueriesInContext.forEach((recentQuery: DataQuery) => {\r\n if (recentQuery.ID == query.ID) {\r\n Object.assign(recentQuery, query);\r\n queryFound = true;\r\n }\r\n });\r\n if (!queryFound) {\r\n this.recentQueriesInContext.unshift(query);\r\n }\r\n }\r\n\r\n // If the current query is the deleted query, set it's ID to -1\r\n if (this.currentQuery.Deleted && this.currentQuery == query) {\r\n this.currentQuery.ID = -1;\r\n }\r\n\r\n if (this._savedQueries == undefined || this._savedQueries == null) {\r\n this._savedQueries = [];\r\n }\r\n\r\n // Performing manipulations of saved queries (context-sensitive)\r\n this.savedQueriesInContext.pipe(take(1)).subscribe(queries => {\r\n\r\n // Adding or removing it to the saved queries\r\n if (!query.Deleted) {\r\n\r\n // When Overwrite query, delete it and then readd it\r\n const indexOfSavedQuery = queries.findIndex(savedQuery => savedQuery.ID == query.ID);\r\n if (indexOfSavedQuery >= 0) {\r\n queries.splice(indexOfSavedQuery, 1);\r\n }\r\n\r\n // Adding it if we cannot find it\r\n if (queries && !queries.find(savedQuery => savedQuery.ID == query.ID)) {\r\n queries.push(query);\r\n }\r\n } else {\r\n if (queries) {\r\n const indexOfSavedQuery = queries.findIndex(savedQuery => savedQuery.ID == query.ID);\r\n if (indexOfSavedQuery >= 0) {\r\n queries.splice(indexOfSavedQuery, 1);\r\n }\r\n }\r\n }\r\n });\r\n // Showing confirmation\r\n this.sharedService.showGoodSnackbar();\r\n } else {\r\n\r\n // Showing error notice\r\n this.sharedService.showBadSnackbar();\r\n }\r\n if (_callback) {\r\n _callback(results);\r\n }\r\n saveSubscription.unsubscribe();\r\n });\r\n };\r\n\r\n // Performing validation if we need to\r\n if (includeValidation) {\r\n this.validateQuery(\r\n () => {\r\n serverCall();\r\n },\r\n () => {\r\n // this.sharedService.showBadSnackbar();\r\n if (_error) {\r\n _error();\r\n }\r\n },\r\n forImport,\r\n query\r\n );\r\n } else {\r\n serverCall();\r\n }\r\n }\r\n\r\n deleteQuery(query: DataQuery, _callback: Function, _error?: Function): void {\r\n // PRE: a query to delete\r\n // POST: flags the query for deletion and saves it\r\n query.Deleted = true;\r\n this.saveQuery(query, _callback, _error, false);\r\n }\r\n\r\n updateRecentQueries(query: DataQuery): Observable {\r\n // PRE: a queryId to set as recent\r\n // POST: sets the query as a recent query\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&queryId=' + query.ID +\r\n '&isStudentSearch=' + this.isStudentSearch +\r\n '&isCourseSearch=' + this.isCourseSearch +\r\n '&isStaffSearch=' + this.isStaffSearch;\r\n return this.http.get(System.apiURL.Classroom + 'DataQueryUpdateRecentQueries' + queryString).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.length; i++) {\r\n if (results[i].QueryName == 'My Defaults') {\r\n results[i].QueryName = 'My Default';\r\n }\r\n if (results[i].ID == query.ID) {\r\n results[i] = query;\r\n } else {\r\n results[i] = System.convert(results[i], new DataQuery());\r\n }\r\n }\r\n this.recentQueriesInContext = results;\r\n if (!this.recentQueriesInContext.find(recentFilter => recentFilter.ID == this.currentQuery.ID)) {\r\n this.recentQueriesInContext.push(this.currentQuery);\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n importQueryFromLegacy(importedQuery): Observable {\r\n // PRE: a query object that is used for persistence of the server\r\n // POST: returns the legacy query while maintaining some persistence with this query\r\n // NOTE: this does not perform the object assignment for you, in case you want to maintain some of your data\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.postRequest('ImportQueryFromLegacy', queryString, importedQuery);\r\n }\r\n\r\n getFilterOptions(filter: DataQueryFieldFilter, categoryId = 0, eForm = false): Observable {\r\n // PRE: a filter to obtain the filter options for. The filter must have a field or the categoryId must be set.\r\n // POST: returns a list of lookups and automatically sets the filter options of the filter\r\n // NOTE: this will just return the filter options of the filter if its set\r\n if (filter.FilterOptions && filter.FilterOptions.length > 0) {\r\n return of(filter.FilterOptions);\r\n }\r\n let queryString = '';\r\n // TODO: this shouldn't exist. Ever. We shouldn't add context dependent variables to the service.\r\n if (eForm == true) {\r\n queryString = '?dataQueryFieldId=' + (filter ? filter.ID : filter.FilterID) +\r\n '&dataQueryCategoryId=' + (filter ? filter.CategoryID : categoryId) +\r\n '&userId=' + this.userService.currentUser.Id;\r\n } else {\r\n queryString = '?dataQueryFieldId=' + (filter.field ? filter.field.ID : filter.FilterID) +\r\n '&dataQueryCategoryId=' + (filter.field ? filter.field.CategoryID : categoryId) +\r\n '&userId=' + this.userService.currentUser.Id;\r\n }\r\n\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFieldLookupReadByFieldId' + queryString).pipe(\r\n map(results => {\r\n results.sort((a: Lookup, b: Lookup) => {\r\n return a.Sequence - b.Sequence;\r\n });\r\n filter.FilterOptions = results;\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getFilterOptionsByField(field: DataQueryField): Observable {\r\n if (field.FilterOptions && field.FilterOptions.length > 0) {\r\n return of(field.FilterOptions);\r\n }\r\n let queryString = '';\r\n queryString = '?dataQueryFieldId=' + (field.ID) +\r\n '&dataQueryCategoryId=' + (field.CategoryID) +\r\n '&userId=' + this.userService.currentUser.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFieldLookupReadByFieldId' + queryString).pipe(\r\n map(results => {\r\n results.sort((a: Lookup, b: Lookup) => {\r\n return a.Sequence - b.Sequence;\r\n });\r\n field.FilterOptions = results;\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n validateTransformationFunctions(xml, index): Observable {\r\n // PRE: XML to be validates\r\n // POST: validates the transformation functions found within the supplied XML\r\n xml = xml.replace(/Age /g, 'Age ');\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&index=' + index +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId;\r\n return this.http.post(System.apiURL.Classroom + 'ValidateTransformationFunctions' + queryString, [xml]);\r\n }\r\n\r\n getPreviewResults(): Observable {\r\n // POST: obtains a single set of results for preview\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&index=' + 0 +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId;\r\n let xml = this.getQueryXML(this.getAllFields());\r\n xml = xml.replace(/Age /g, 'Age ');\r\n return this.http.post(System.apiURL.Classroom + 'DataQueryPreviewResults' + queryString, [xml]).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.length; i++) {\r\n if (this.currentQuery.reportFields.length > i) {\r\n this.currentQuery.reportFields[i].PreviewData = results[i];\r\n }\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getResults(getChunkedResults: boolean, _callback?: Function, _error?: Function, getRelationshipsBeforeResults = false, callFromStudentSearch = false, siteIds = '') {\r\n // POST: obtains a page of results from the server or composes a page based on the data we have\r\n // Getting relationships before we try to get results\r\n\r\n // Removing subscriptions we've closed\r\n this.currentResultSubscriptions = this.currentResultSubscriptions.filter(subscription => !subscription.closed);\r\n\r\n // Obtaining results if we need to\r\n if (this.currentQuery.queryChangedSinceLastResult || (!this.loginService.LoginSettings.V10 && this.isHasEdited == true)) {\r\n let pageToGet = 0;\r\n let resultsPerPage = 0;\r\n this.nextPageSubscriptions.forEach(sub => {\r\n sub.unsubscribe();\r\n });\r\n let observable = of(this.currentQuery.relationships);\r\n if (getRelationshipsBeforeResults) {\r\n observable = this.getRelationships();\r\n }\r\n this.currentResultSubscriptions.push(\r\n observable.pipe(take(1)).subscribe(() => {\r\n\r\n // Enforcing transformation fields (in case we haven't until this point)\r\n this.currentQuery.reportFields.forEach(field => {\r\n if (!field.TransformationFields || field.TransformationFields.length == 0) {\r\n this.transFunctionChanged(field);\r\n }\r\n });\r\n\r\n // Starting from the query XML\r\n let xml = this.getQueryXML(this.getAllFields(), true);\r\n xml = xml.replace(/Age /g, 'Age ');\r\n\r\n // Resetting result properties if we've changed the query since the last results\r\n if (this.currentQuery.queryChangedSinceLastResult) {\r\n this.resetResultProperties();\r\n pageToGet = 1;\r\n }\r\n\r\n // Creating helper functions\r\n const updateResultsPerPage = () => {\r\n this.pageCount = Math.ceil(this.recordCount / resultsPerPage);\r\n };\r\n\r\n // Initializing the calls\r\n let errorCount = 0;\r\n\r\n let queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&page=' + pageToGet +\r\n '&recordsPerPage=' + resultsPerPage +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId +\r\n '&callFromStudentSearch=' + callFromStudentSearch +\r\n '&siteIds=' + siteIds;\r\n\r\n // Checking for errors\r\n const dataQueryFormError: any = {};\r\n if (!this.loginService.LoginSettings.V10) {\r\n for (let i = 0; i < this.currentQuery.reportFields.length; i++) {\r\n if (this.currentQuery.reportFields[i].Alias == '') {\r\n dataQueryFormError.blankAlias = true;\r\n }\r\n const upperAlias = (this.currentQuery.reportFields[i].Alias == null ? this.currentQuery.reportFields[i].DisplayName : this.currentQuery.reportFields[i].Alias);\r\n for (let j = i + 1; j < this.currentQuery.reportFields.length; j++) {\r\n const innerAlias = (this.currentQuery.reportFields[j].Alias == null ? this.currentQuery.reportFields[j].DisplayName : this.currentQuery.reportFields[j].Alias);\r\n if (upperAlias.toLowerCase() == innerAlias.toLowerCase()) {\r\n errorCount = 1;\r\n dataQueryFormError.duplicateAlias = upperAlias;\r\n }\r\n }\r\n }\r\n if (dataQueryFormError.blankAlias == '') {\r\n errorCount += 1;\r\n }\r\n }\r\n\r\n // If there are no errors, get the results\r\n if (errorCount == 0) {\r\n // const xml = this.getQueryXML(this.currentQuery.reportFields);\r\n let isGetResultsFinished = false;\r\n const isGetCountFinished = false;\r\n\r\n // ONE-6403: If more than 10,000 records, warn the user\r\n this.currentResultSubscriptions.push(\r\n this.http.post(System.apiURL.Classroom + 'GetDataQueryResultCount' + queryString, [xml]).pipe(take(1)).subscribe((count: number) => {\r\n let dialogChoice = of(true);\r\n\r\n // Showing a dialog if we got a negative number (indicating an error)\r\n if (count < 0) {\r\n const dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'Too Many Records',\r\n informational: true,\r\n confirmMessage: 'Your request will pull too many records. Update your filters to return less records.'\r\n }\r\n });\r\n dialogChoice = dialogBox.afterClosed().pipe(map(() => { return false; }));\r\n }\r\n\r\n // Showing a dialog if there are more than 10,000 records\r\n if (count > 10000) {\r\n const dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'WARNING',\r\n warning: true,\r\n confirmMessage: 'Your request will pull ' + count.toLocaleString() + ' records. This process may take several minutes.',\r\n secondMessage: 'Do you want to proceed?',\r\n okButtonLabel: 'Continue'\r\n }\r\n });\r\n dialogChoice = dialogBox.afterClosed();\r\n }\r\n dialogChoice.subscribe(choice => {\r\n\r\n // If the user chooses to continue (or no dialog was shown), obtain the results\r\n if (choice) {\r\n\r\n // Updating the record count\r\n this.recordCount = count;\r\n updateResultsPerPage();\r\n\r\n // Setting the timeout for the notification\r\n if (this.queryLoadingTimeout) {\r\n clearTimeout(this.queryLoadingTimeout);\r\n }\r\n this.queryLoadingTimeout = setTimeout(() => {\r\n this.sharedService.showCustomSnackbar(\r\n 'The query is still loading. Adding filters can speed up the query.',\r\n 'notification'\r\n );\r\n }, 10000);\r\n\r\n // Obtaining the results by page\r\n if (this.recordCount > 10000 && getChunkedResults) {\r\n pageToGet = 1;\r\n resultsPerPage = 100000;\r\n queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&page=' + pageToGet +\r\n '&recordsPerPage=' + resultsPerPage +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId +\r\n '&callFromStudentSearch=' + callFromStudentSearch +\r\n '&siteIds=' + siteIds;\r\n }\r\n this.currentResultSubscriptions.push(\r\n this.postRequest('GetDataQueryResults', queryString, [xml]).subscribe(\r\n (results) => {\r\n clearTimeout(this.queryLoadingTimeout);\r\n\r\n // Ensuring results exist\r\n if (!results) {\r\n return;\r\n }\r\n\r\n // Converting the results\r\n results = System.convert(results, new DataQueryResult());\r\n\r\n // Setting query SQL based on result SQL\r\n this.sqlErrors = results.Errors;\r\n this.currentQuery.SQLScript = results.QueryString;\r\n this.currentQuery.SQLScript.replace('\\r\\n', '
');\r\n this.currentQuery.SQLScript.replace('\\t', '    ');\r\n\r\n // Checking for disable fields\r\n this.disabledFieldInReport = false;\r\n if (results.Data && results.Data.length > 0) {\r\n for (let i = 0; i < results.Data[0].length; i++) {\r\n if (results.Data[0][i] == '[-[-**Disabled**-]-]') {\r\n this.disabledFieldInReport = true;\r\n }\r\n }\r\n }\r\n\r\n // Ensuring the headers have the right semantic data type\r\n // TODO: this change is for ONE-3481, where a column that only has numbers is VARCHAR. Ultimately, we should change the data types to be semantically correct.\r\n if (this.V10) {\r\n for (let i = 0; i < results.Columns.length; i++) {\r\n if (results.Columns[i].DataType == 'VARCHAR' || results.Columns[i].DataType == 'NVARCHAR') {\r\n let onlyNumbers = true;\r\n let allBlank = true;\r\n for (let j = 0; j < results.Data.length; j++) {\r\n if (results.Data[j][i] && results.Data[j][i] != '') {\r\n allBlank = false;\r\n }\r\n if (results.Data[j][i] && Number.isNaN(Number(results.Data[j][i]))) {\r\n onlyNumbers = false;\r\n break;\r\n }\r\n }\r\n if (onlyNumbers && allBlank == false) {\r\n results.Columns[i].DataType = 'NUMERIC';\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!this.loginService.LoginSettings.V10) {\r\n results.Data.forEach(datum => {\r\n for (let i = 0; i < datum.length; i++) {\r\n if (datum[i]) {\r\n datum[i] = datum[i].trim();\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Converting the result data to the right data time\r\n this.fixDataTypes(results);\r\n\r\n this.results = results;\r\n if (getChunkedResults && resultsPerPage > 0) {\r\n let totalPages = Math.floor(this.recordCount / resultsPerPage);\r\n if (this.recordCount % resultsPerPage > 0) {\r\n totalPages++;\r\n }\r\n if (totalPages > 1) {\r\n this.getRemainingPages(2, resultsPerPage, totalPages, xml);\r\n }\r\n }\r\n\r\n // Resetting query data\r\n if (this.currentQuery.queryChangedSinceLastResult) {\r\n this.resetPageIndex = true;\r\n }\r\n updateResultsPerPage();\r\n this.currentQuery.queryChangedSinceLastResult = false;\r\n if (_callback != null) {\r\n _callback(results);\r\n }\r\n },\r\n () => {\r\n if (_error != null) {\r\n _error();\r\n }\r\n },\r\n () => {\r\n isGetResultsFinished = true;\r\n }\r\n )\r\n );\r\n }\r\n\r\n // If the user decides to cancel, take them to the filters tab\r\n else {\r\n this.currentTab = 'Filters';\r\n }\r\n });\r\n })\r\n );\r\n } else {\r\n if (_error != null) {\r\n _error(dataQueryFormError);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n // If we don't need to get new results, reassert the existing ones\r\n else {\r\n this.results = cloneDeep(this.results);\r\n _callback(this.results);\r\n }\r\n }\r\n\r\n saveDataQueryResult(data: DataQueryResult): Observable {\r\n let queryString = '';\r\n queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.postRequest('SaveDataQueryResults', queryString, data);\r\n }\r\n\r\n fixDataTypes(results: DataQueryResult) {\r\n // Converting the result data to the right data time\r\n results.Data.forEach(datum => {\r\n for (let i = 0; i < datum.length; i++) {\r\n if (results.Columns[i].Visible) {\r\n switch (results.Columns[i].DataType) {\r\n\r\n // Booleans\r\n case 'BIT':\r\n datum[i] = datum[i] == '1';\r\n break;\r\n\r\n // PHONE\r\n case 'PHONE':\r\n if (datum[i] && datum[i].trim().length >= 10) {\r\n datum[i] = '(' + datum[i].substring(0, 3) + ') ' + datum[i].substring(3, 6) + '-' + datum[i].substring(6, datum[i].length);\r\n } else {\r\n datum[i] = datum[i];\r\n }\r\n break;\r\n\r\n // Decimals\r\n case 'DECIMAL':\r\n case 'NUMERIC':\r\n case 'FLOAT':\r\n case 'REAL':\r\n if (datum[i] && datum[i].trim() != '') {\r\n datum[i] = Number.parseFloat(datum[i] as string);\r\n }\r\n break;\r\n\r\n // Integers\r\n case 'INT':\r\n case 'BIGINT':\r\n case 'TINYINT':\r\n if (datum[i]) {\r\n datum[i] = Number.parseInt(datum[i] as string, 10);\r\n }\r\n break;\r\n\r\n // Dates (WE DON'T CONVERT BECAUSE YOU CAN CHANGE HOW THEY DISPLAY)\r\n case 'SMALLDATETIME':\r\n case 'DATETIME':\r\n case 'DATE':\r\n case 'DATETIME2':\r\n case 'DATETIMEOFFSET':\r\n break;\r\n\r\n // They are natively strings, so do nothing\r\n case 'IMAGE':\r\n case 'VARCHAR':\r\n case 'CHAR':\r\n case 'NVARCHAR':\r\n case 'NCHAR':\r\n case 'NTEXT':\r\n case 'BINARY':\r\n case 'VARBINARY':\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n getRemainingPages(pageToGet: number, recordsPerPage: number, totalPages: number, xml: string) {\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&page=' + pageToGet +\r\n '&recordsPerPage=' + recordsPerPage +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId;\r\n const subscription = this.postRequest('GetDataQueryNextPage', queryString, [xml])\r\n .subscribe(results => {\r\n results = System.convert(results, new DataQueryResult());\r\n this.fixDataTypes(results);\r\n this.results.assertOrder(results);\r\n const page = new PagedContent(pageToGet, results);\r\n this.observableNextPageResults.next(page);\r\n if (pageToGet < totalPages) {\r\n this.getRemainingPages(pageToGet + 1, recordsPerPage, totalPages, xml);\r\n }\r\n });\r\n this.currentResultSubscriptions.push(subscription);\r\n this.nextPageSubscriptions.push(\r\n subscription\r\n );\r\n }\r\n\r\n getResultsAsString(): Observable {\r\n // POST: obtains the results of the query as a string\r\n\r\n // Setting the query XML\r\n this.currentQuery.QueryXML = this.getQueryXML(this.getAllFields(), true);\r\n const currentQuery = cloneDeep(this.currentQuery);\r\n currentQuery.QueryXML = currentQuery.QueryXML.replace(/Age /g, 'Age ');\r\n\r\n // ONE-7785 CouldFlare blocks the request which contains SQL string.\r\n if (this.loginService.LoginSettings.V10 == false) {\r\n currentQuery.SQLScript = '';\r\n\r\n // Remove circular structure to JSON\r\n if (currentQuery.reportFields != undefined && currentQuery.reportFields.length > 0) {\r\n currentQuery.reportFields.forEach(rField => {\r\n if (rField.object != undefined) {\r\n rField.object = null;\r\n }\r\n if (rField.category != undefined) {\r\n rField.category = null;\r\n }\r\n });\r\n }\r\n if (currentQuery.sortFields != undefined && currentQuery.sortFields.length > 0) {\r\n currentQuery.sortFields.forEach(sField => {\r\n // Remove circular structure to JSON\r\n if (sField.object != undefined) {\r\n sField.object = null;\r\n }\r\n if (sField.category != undefined) {\r\n sField.category = null;\r\n }\r\n });\r\n }\r\n if (currentQuery.filterFields != undefined && currentQuery.filterFields.length > 0) {\r\n currentQuery.filterFields.forEach(fField => {\r\n // Remove circular structure to JSON\r\n if (fField.object != undefined) {\r\n fField.object = null;\r\n }\r\n if (fField.category != undefined) {\r\n fField.category = null;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Composing the service call\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId;\r\n return this.postRequest('DataQueryGetResultsAsString', queryString, currentQuery);\r\n }\r\n\r\n getResultPDF(printParameters: PrintParameters): Observable {\r\n // POST: obtains a string representing a result pdf\r\n\r\n // Setting the query XML\r\n this.currentQuery.QueryXML = this.getQueryXML(this.getAllFields(), true);\r\n let xml = this.currentQuery.QueryXML;\r\n xml = xml.replace(/Age /g, 'Age ');\r\n\r\n // Composing the service call\r\n this.information.disorganize(); // We have to manually disorganize because we have to stringify it beforehand\r\n this.currentQuery.disorganize();\r\n const postParams = [\r\n xml,\r\n JSON.stringify(printParameters),\r\n JSON.stringify(this.currentQuery.reportFields),\r\n this.yearService.defaultYear.SchoolName,\r\n this.yearService.defaultYear.Description\r\n ];\r\n this.information.organize(); // We have to manually reorganize because we have to stringify it beforehand\r\n this.currentQuery.organize(this.information, this.V10);\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&page=1' +\r\n '&recordsPerPage=0' +\r\n '&siteSectionId=' + this.currentQuery.siteSectionId;\r\n return this.http.post(System.apiURL.Classroom + 'DQGeneratePDF' + queryString, postParams).pipe(\r\n map(results => {\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getReportTemplateXML(queryId: number): Observable {\r\n let xml = '';\r\n if (queryId) {\r\n const queryString = '?queryId=' + queryId;\r\n return this.http.get(System.apiURL.Classroom + 'DQGetReportTemplate' + queryString).pipe(\r\n map(report => {\r\n if (report.Id > 0) {\r\n xml += '';\r\n xml += '' + report.Name + '';\r\n xml += '';\r\n xml += '';\r\n }\r\n return xml;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getCoreFiles(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryCoreFiles').pipe(take(1));\r\n }\r\n\r\n getCategoriesByCoreFile(coreFileId: number): Observable {\r\n if (this.categoriesByCoreFile[coreFileId]) {\r\n return of(this.categoriesByCoreFile[coreFileId]);\r\n } else {\r\n const queryString = '?siteId=' + this.yearService.defaultYear.SchoolID\r\n + '&yearId=' + this.yearService.defaultYear.Id\r\n + '&coreFileId=' + coreFileId;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryCategoriesByCoreFile' + queryString)\r\n .pipe(\r\n take(1),\r\n map(categories => {\r\n this.categoriesByCoreFile[coreFileId] = categories;\r\n return this.categoriesByCoreFile[coreFileId];\r\n })\r\n );\r\n }\r\n }\r\n\r\n getQuickStarts(coreFileId: number): Observable {\r\n if (this.quickStarts[coreFileId]) {\r\n return of(this.quickStarts[coreFileId]);\r\n } else {\r\n const queryString = '?coreFileId=' + coreFileId;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryQuickStarts' + queryString)\r\n .pipe(\r\n take(1),\r\n map(quickStarts => {\r\n this.quickStarts[coreFileId] = quickStarts;\r\n return this.quickStarts[coreFileId];\r\n })\r\n );\r\n }\r\n }\r\n\r\n getCoreFileFilters(coreFileId: number): Observable {\r\n if (this.coreFileFilters[coreFileId]) {\r\n return of(this.coreFileFilters[coreFileId]);\r\n } else {\r\n const queryString = '?coreFileId=' + coreFileId;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryCoreFileFilters' + queryString)\r\n .pipe(\r\n take(1),\r\n map(coreFileFilters => {\r\n this.coreFileFilters[coreFileId] = coreFileFilters;\r\n return this.coreFileFilters[coreFileId];\r\n })\r\n );\r\n }\r\n }\r\n\r\n getCategoriesByRelatedCategory(categoryId: number): Observable {\r\n const queryString = '?siteId=' + this.yearService.defaultYear.SchoolID\r\n + '&yearId=' + this.yearService.defaultYear.Id\r\n + '&categoryId=' + categoryId;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryCategoriesByRelatedCategory' + queryString)\r\n .pipe(take(1));\r\n }\r\n\r\n getFieldsByRelatedCategory(categoryId: number): Observable {\r\n const queryString = '?siteId=' + this.yearService.defaultYear.SchoolID\r\n + '&yearId=' + this.yearService.defaultYear.Id\r\n + '&categoryId=' + categoryId;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFieldsByRelatedCategory' + queryString)\r\n .pipe(\r\n take(1),\r\n map(fields => {\r\n for (let i = 0; i < fields.length; i++) {\r\n fields[i] = System.convert(fields[i], new DataQueryField());\r\n\r\n // We set these properties because they need to exist on the field\r\n fields[i].Filters = [];\r\n fields[i].FunctionText = '';\r\n fields[i].TransformationFields = [];\r\n }\r\n return fields;\r\n })\r\n );\r\n }\r\n\r\n ////////// Utility Methods //////////\r\n postRequest(urlExtension, queryString, data): Observable {\r\n // PRE: a url extension to send the request to, the query string, and the data to send\r\n // POST: performs the request and ensures there there is no circular data\r\n // NOTE: this is intended to be used on any post request where you send fields or queries\r\n // \t \t This was decided between the trade-off of bi-directional references or manual searching\r\n\r\n // Reorganize utility function\r\n const organize = () => {\r\n this.information.organize();\r\n this.currentQuery.organize(this.information, this.loginService.LoginSettings.V10);\r\n if (data instanceof DataQuery) {\r\n data.organize(this.information, this.loginService.LoginSettings.V10);\r\n }\r\n };\r\n\r\n // Checking for organization\r\n let reorganize = false;\r\n if (this.cachedInformation) {\r\n if (this.information.organized) {\r\n this.information.disorganize();\r\n reorganize = true;\r\n }\r\n if (this.currentQuery.organized) {\r\n this.currentQuery.disorganize();\r\n reorganize = true;\r\n }\r\n if (data instanceof DataQuery && data.organized) {\r\n data.disorganize();\r\n reorganize = true;\r\n }\r\n }\r\n return this.http.post(System.apiURL.Classroom + urlExtension + queryString, data).pipe(\r\n map(results => {\r\n if (reorganize) {\r\n organize();\r\n }\r\n return results;\r\n }),\r\n catchError(err => {\r\n if (reorganize) {\r\n organize();\r\n }\r\n console.log('Error');\r\n console.log(err);\r\n throw (err);\r\n })\r\n );\r\n }\r\n\r\n checkDeactivationAndChange(value: DataQuery): Observable {\r\n // POST: checks if the query has unsaved changes, then changes if the dialog allows\r\n // NOTE: this should be the only way the current query changes outside of the service and synchronization\r\n // NOTE: this also doesn't do ANYTHING if another instance of this hasn't resolved\r\n const queryChanged = new ReplaySubject(1);\r\n if (value != this.currentQuery && !this.blocking) {\r\n this.blocking = true;\r\n if (value == null) {\r\n value = new DataQuery();\r\n }\r\n const canDeactivate = this.showWarning();\r\n if (canDeactivate instanceof Observable) {\r\n const subscription = canDeactivate.subscribe(result => {\r\n if (subscription) { // Sometimes, this is undefined ???\r\n subscription.unsubscribe();\r\n }\r\n if (result) {\r\n this.currentQuery = value;\r\n }\r\n queryChanged.next(result);\r\n this.blocking = false;\r\n });\r\n } else {\r\n if (canDeactivate) {\r\n this.currentQuery = value;\r\n queryChanged.next(true);\r\n } else {\r\n queryChanged.next(false);\r\n }\r\n this.blocking = false;\r\n }\r\n }\r\n return queryChanged.asObservable();\r\n }\r\n\r\n showWarning(): Observable | Promise | boolean {\r\n // PRE: the user tries to perform an action which may need to be blocked\r\n // POST: Shows the warning dialog. Then, performs the following functions:\r\n // \t\tIf 2, saves the query and continues and returns true\r\n // \t\tIf 1, saves the query as a new query and returns true\r\n // \t\tIf 0, continues without saving the query and returns true\r\n // \t\tIf -1, returns false\r\n if (\r\n this.currentQuery.queryChanged\r\n && this.unsavedChanges == false\r\n && (\r\n this.permissions.canUserCreateDistrictQuery\r\n || this.permissions.canUserCreateSchoolQuery\r\n || this.permissions.canUserCreatePrivateQuery\r\n )\r\n ) {\r\n const dialogBox = this.dialog.open(DataQueryUnsavedChangesDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n userCanOverwrite: this.checkUserCanOverwriteQuery(),\r\n currentQuery: this.currentQuery,\r\n unsavedChanges: false\r\n }\r\n });\r\n return dialogBox.afterClosed().pipe(\r\n map(result => {\r\n switch (result) {\r\n\r\n // Save query\r\n case 2:\r\n if (this.currentQuery.QueryName != undefined) {\r\n this.currentQuery.QueryXML = this.getQueryXML(this.getAllFields());\r\n this.saveQuery(\r\n this.currentQuery,\r\n (results) => {\r\n const returnMessage = results[0];\r\n if (returnMessage == 'Success') {\r\n this.currentQuery.ID = parseInt(results[1], 10);\r\n this.currentQuery.queryChanged = false;\r\n this.currentQuery.queryChangedSinceLastResult = false;\r\n } else {\r\n this.dialog.open(WarningDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n query: this.currentQuery,\r\n warningMessage: results[0],\r\n allowOverwrite: false\r\n }\r\n });\r\n }\r\n }\r\n );\r\n } else {\r\n\r\n // If it was an existing query, open it for editing\r\n if (this.currentQuery.ID > 0) {\r\n this.openAddEditQuery(\r\n this.currentQuery,\r\n true,\r\n false\r\n );\r\n }\r\n\r\n // If it was not an existing query, open it for adding\r\n else {\r\n this.openAddEditQuery(\r\n this.currentQuery,\r\n false,\r\n false,\r\n (returnedQuery: DataQuery) => {\r\n if (returnedQuery) {\r\n Object.assign(this.currentQuery, returnedQuery);\r\n this.updateRecentQueries(this.currentQuery).pipe(take(1)).subscribe();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n return true;\r\n\r\n // Save query as new\r\n case 1:\r\n const savedQuery = cloneDeep(this.currentQuery);\r\n this.openAddEditQuery(\r\n savedQuery,\r\n false,\r\n false,\r\n (returnedQuery: DataQuery) => {\r\n if (returnedQuery) {\r\n\r\n // If it was a new query, set that to the returned query and update the recents with the current\r\n if (this.currentQuery.ID <= 0) {\r\n Object.assign(this.currentQuery, returnedQuery);\r\n this.updateRecentQueries(this.currentQuery).pipe(take(1)).subscribe();\r\n }\r\n\r\n // If it was an existing query, set the current to the new query and update the recents with the new\r\n else {\r\n this.currentQuery = returnedQuery;\r\n }\r\n }\r\n }\r\n );\r\n return true;\r\n\r\n // Continue\r\n case 0:\r\n return true;\r\n\r\n // Cancel\r\n case -1:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n })\r\n );\r\n } else if (this.loginService.LoginSettings.V10 == false && this.unsavedChanges == true) {\r\n\r\n const dialogBox = this.dialog.open(DataQueryUnsavedChangesDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n userCanOverwrite: false,\r\n currentQuery: this.currentQuery,\r\n unsavedChanges: true\r\n }\r\n });\r\n return dialogBox.afterClosed().pipe(\r\n map(result => {\r\n switch (result) {\r\n\r\n // Save query\r\n case 2:\r\n this.observableSaveResult.next(true);\r\n this.unsavedChanges = false;\r\n return true;\r\n\r\n // Save query as new\r\n case 1:\r\n this.unsavedChanges = false;\r\n return true;\r\n\r\n // Continue\r\n case 0:\r\n this.unsavedChanges = false;\r\n return true;\r\n\r\n // Cancel\r\n case -1:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n })\r\n );\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n openAddEditQuery(query = new DataQuery(), forEdit = false, forImport = false, callback?: Function) {\r\n // POST: opens the add-edit query dialog with the right data\r\n const dialogBox = this.dialog.open(AddEditQueryDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n query: query,\r\n forEdit: forEdit,\r\n forImport: forImport,\r\n dataQueryService: this\r\n }\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(returnedQuery => {\r\n subscription.unsubscribe();\r\n if (callback) {\r\n callback(returnedQuery);\r\n }\r\n });\r\n }\r\n\r\n checkUserCanOverwriteQuery() {\r\n // POST: returns true if the user can overwrite this query\r\n if (!this.currentQuery) {\r\n return false;\r\n } else {\r\n if (this.currentQuery.OwnerID == this.userService.currentUser.Id) {\r\n if (this.currentQuery.Scope == 'Private') {\r\n return this.permissions.canUserCreatePrivateQuery;\r\n } else if (this.currentQuery.Scope == 'Selected Sites') {\r\n return this.permissions.canUserCreateSchoolQuery;\r\n } else if (this.currentQuery.Scope == 'District') {\r\n return this.permissions.canUserCreateDistrictQuery;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n loadQuery(query: DataQuery) {\r\n // POST: loads a query\r\n if (this.isStudentSearch) {\r\n this._currentStudentSearchQuery = query;\r\n } else {\r\n this._currentDataQueryQuery = query;\r\n }\r\n\r\n // Mark as loading\r\n this.loadingQuery = true;\r\n\r\n // Setting the initial settings\r\n if (query.ID >= 0) {\r\n if (this.isStaffSearch) {\r\n query.StaffSearch = true;\r\n }\r\n if (this.isCourseSearch) {\r\n query.CourseSearch = true;\r\n }\r\n if (this.isStudentSearch) {\r\n query.StudentSearch = true;\r\n }\r\n const updateSubscription = this.updateRecentQueries(query).subscribe(() => {\r\n updateSubscription.unsubscribe();\r\n });\r\n }\r\n\r\n // Loading the query\r\n if (query && this.permissions) {\r\n this.loadDataFromXML(query, this.importQueryClick);\r\n this.importQueryClick = false;\r\n }\r\n\r\n // Unmark as loading\r\n this.loadingQuery = false;\r\n query.xmlLoaded = true;\r\n\r\n // Setting the current query to its original state if it has unsaved changes\r\n if (this.currentQuery.queryChanged && this.originalQuery.ID == this.currentQuery.ID) {\r\n Object.assign(this.currentQuery, this.originalQuery);\r\n }\r\n\r\n // Maintaining the original data\r\n Object.assign(this.originalQuery, this.currentQuery);\r\n\r\n // Setting the current query with the now-loaded data\r\n this.observableCurrentQuery.next(this.currentQuery);\r\n }\r\n\r\n loadDataFromXML(query: DataQuery, importQueryClick?: boolean) {\r\n // POST: obtains the query object from the query's XML\r\n\r\n // Checking the XML exists\r\n if (!query.QueryXML) {\r\n return;\r\n }\r\n const xml = query.QueryXML;\r\n query.xmlLoaded = true;\r\n\r\n // Loading the query\r\n this.getObjectFromXML(xml, query, importQueryClick);\r\n }\r\n\r\n getObjectFromXML(xml, query?: DataQuery, importQueryClick?: boolean): DataQuery {\r\n // POST: returns a query object from an xml string\r\n\r\n // Creating query object\r\n if (!query) {\r\n query = new DataQuery();\r\n } else {\r\n query.reportFields = [];\r\n query.filterFields = [];\r\n query.sortFields = [];\r\n query.relationships = [];\r\n }\r\n\r\n // Loading the query XML\r\n const parser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(xml, 'text/xml');\r\n const distinctNode = xmlDoc.getElementsByTagName('Distinct')[0];\r\n if (distinctNode && distinctNode.childNodes.length > 0) {\r\n query.distinct = distinctNode.childNodes[0].nodeValue == 'true';\r\n } else {\r\n query.distinct = false;\r\n }\r\n const currentYearOnlyNode = xmlDoc.getElementsByTagName('CurrentYearOnly')[0];\r\n if (currentYearOnlyNode && currentYearOnlyNode.childNodes.length > 0) {\r\n query.currentYearOnly = currentYearOnlyNode.childNodes[0].nodeValue == 'true';\r\n } else {\r\n query.currentYearOnly = true;\r\n }\r\n if (xmlDoc.getElementsByTagName('CurrentSchoolOnly').length > 0 && xmlDoc.getElementsByTagName('CurrentSchoolOnly')[0].childNodes.length > 0) {\r\n query.currentSchoolOnly = xmlDoc.getElementsByTagName('CurrentSchoolOnly')[0].childNodes[0].nodeValue != 'false';\r\n } else {\r\n query.currentSchoolOnly = true;\r\n }\r\n if (xmlDoc.getElementsByTagName('CurrentlyActiveStudentsOnly') != undefined && xmlDoc.getElementsByTagName('CurrentlyActiveStudentsOnly').length > 0 && xmlDoc.getElementsByTagName('CurrentlyActiveStudentsOnly')[0].childNodes.length > 0) {\r\n query.currentlyActiveStudentsOnly = xmlDoc.getElementsByTagName('CurrentlyActiveStudentsOnly')[0].childNodes[0].nodeValue != 'false';\r\n } else {\r\n query.currentlyActiveStudentsOnly = true;\r\n }\r\n\r\n if (this.V10 == false) {\r\n query.currentSchoolOnly = true;\r\n query.currentYearOnly = true;\r\n }\r\n\r\n this.distinct = query.distinct;\r\n this.currentYearOnly = query.currentYearOnly;\r\n this.currentSchoolOnly = query.currentSchoolOnly;\r\n this.currentlyActiveStudentsOnly = query.currentlyActiveStudentsOnly;\r\n\r\n\r\n // Getting query header information\r\n if (xmlDoc.getElementsByTagName('CourseName').length > 0 && xmlDoc.getElementsByTagName('CourseName')[0].childNodes.length > 0 && xmlDoc.getElementsByTagName('SiteSectionID').length > 0 && xmlDoc.getElementsByTagName('SiteSectionID')[0].childNodes.length > 0) {\r\n const courseNameNode = xmlDoc.getElementsByTagName('CourseName')[0];\r\n if (courseNameNode && courseNameNode.childNodes.length > 0) {\r\n query.courseName = System.xmlToText(courseNameNode.childNodes[0].nodeValue);\r\n } else {\r\n query.courseName = '';\r\n }\r\n // this.siteSectionId = parseInt(xmlDoc.getElementsByTagName(\"SiteSectionID\")[0].childNodes[0].nodeValue, 10);\r\n const siteSectionNode = xmlDoc.getElementsByTagName('SiteSectionID')[0];\r\n if (siteSectionNode && siteSectionNode.childNodes.length > 0) {\r\n query.siteSectionId = System.xmlToText(siteSectionNode.childNodes[0].nodeValue);\r\n } else {\r\n query.siteSectionId = 0;\r\n }\r\n if (typeof query.siteSectionId == 'string' && query.siteSectionId.length == 0) {\r\n query.siteSectionId = 0;\r\n }\r\n } else {\r\n query.courseName = '';\r\n query.siteSectionId = 0;\r\n }\r\n if (!this.permissions || !this.permissions.canUserQueryAllYears) {\r\n query.currentYearOnly = true;\r\n }\r\n\r\n // Obtaining the objects from the xml, starting at the fields\r\n const fieldNodes = xmlDoc.getElementsByTagName('Field');\r\n for (let i = 0; i < fieldNodes.length; i++) {\r\n\r\n // Getting base values\r\n let fieldName = '';\r\n let categoryName = '';\r\n let objectName = '';\r\n let object: DataQueryObject = null;\r\n let category: DataQueryCategory = null;\r\n let field: DataQueryField = null;\r\n\r\n // Helper Function\r\n const getNodeValue = (nodeName: string, dataType?: string): (string | number | boolean) => {\r\n const nodes = fieldNodes[i].getElementsByTagName(nodeName);\r\n if (nodes.length > 0 && nodes[0].childNodes.length > 0) {\r\n let value = '';\r\n if (nodes[0].childNodes[0].nodeName.includes('text')) {\r\n value = System.xmlToText(nodes[0].childNodes[0].nodeValue);\r\n } else {\r\n value = System.xmlToText(nodes[0].childNodes[0]['outerHTML']) as string;\r\n }\r\n switch (dataType) {\r\n case 'number':\r\n return parseInt(value, 10);\r\n case 'boolean':\r\n return value == 'true';\r\n default:\r\n return value && value != 'undefined' && value != 'null' ? value : '';\r\n }\r\n } else {\r\n return null;\r\n }\r\n };\r\n const processNode = (nodeName: string, dataType?: string) => {\r\n field[nodeName] = getNodeValue(nodeName, dataType);\r\n };\r\n\r\n // Setting values\r\n const fieldID = getNodeValue('FieldID', 'number') as number;\r\n const catID = getNodeValue('CategoryID', 'number') as number;\r\n const fieldCategory = this.information.getField(f => f.ID == fieldID && f.CategoryID == catID);\r\n fieldName = getNodeValue('FieldName') as string;\r\n if (!fieldName) {\r\n fieldName = '';\r\n }\r\n categoryName = getNodeValue('CategoryName') as string;\r\n if (!this.loginService.LoginSettings.V10 && fieldCategory != null && categoryName != null && (categoryName == 'null' || categoryName == 'undefined' || categoryName.trim() == '')) {\r\n categoryName = fieldCategory.CategoryName;\r\n }\r\n if (!categoryName) {\r\n categoryName = '';\r\n }\r\n objectName = getNodeValue('ObjectName') as string;\r\n if (!objectName) {\r\n objectName = '';\r\n }\r\n\r\n // Finding the appropriate field and setting it's names\r\n object = this.information.objects.find(o => o.ObjectName == objectName);\r\n if (object != null) {\r\n category = this.information.categories.find(c => c.CategoryName == categoryName && c.ObjectID == object.ID);\r\n if (category == null) {\r\n category = this.information.categories.find(c =>\r\n c.ID == catID\r\n && c.ObjectID == object.ID\r\n && c.fields\r\n && c.fields.find(f =>\r\n f.ID == fieldID\r\n )\r\n );\r\n }\r\n }\r\n if (category != null) {\r\n field = this.information.getField(f => f.FieldName == fieldName && f.CategoryID == category.ID);\r\n }\r\n if (field != null) {\r\n field.CategoryName = category.CategoryName;\r\n field.ObjectName = object.ObjectName;\r\n } else {\r\n\r\n // If we haven't found a field yet, try from the bottom up\r\n field = this.information.getField(f => f.ID == fieldID && f.CategoryID == catID);\r\n category = this.information.categories.find(c => c.ID == catID);\r\n if (!this.loginService.LoginSettings.V10 && field != null) {\r\n category = this.information.categories.find(c => c.ID == catID && c.CategoryName == field.CategoryName);\r\n }\r\n\r\n // If we have a category and a field, set up the object\r\n if (field != null && category != null) {\r\n field.CategoryName = category.CategoryName;\r\n const obj = this.information.objects.find(o => o.ID == category.ObjectID);\r\n if (obj != null) {\r\n field.ObjectName = obj.ObjectName;\r\n }\r\n }\r\n\r\n // If the names don't match, create a new data query field with the right properties\r\n if (field == null || (\r\n fieldName != null && fieldName != '' &&\r\n field.FieldName != fieldName\r\n ) || (\r\n category != null &&\r\n categoryName != null && categoryName != '' &&\r\n category.CategoryName != categoryName\r\n )) {\r\n\r\n // Already set data\r\n field = new DataQueryField();\r\n field.FieldName = fieldName;\r\n field.CategoryName = categoryName;\r\n field.ObjectName = objectName;\r\n field.CategoryID = catID;\r\n field.ID = fieldID;\r\n if (importQueryClick && fieldName != '') {\r\n field.IsCalculated = true;\r\n }\r\n }\r\n }\r\n\r\n // Getting data from the XML\r\n if (field.DisplayName) {\r\n field.Alias = field.DisplayName;\r\n }\r\n processNode('SortDirection');\r\n processNode('SortOrder', 'number');\r\n processNode('Break');\r\n processNode('Alias');\r\n processNode('ShowOnReport', 'boolean');\r\n processNode('IsConstant', 'boolean');\r\n processNode('ConstantValue');\r\n if (importQueryClick != true || field.IsCalculated == undefined || field.IsCalculated == null) {\r\n processNode('IsCalculated', 'boolean');\r\n }\r\n processNode('DataType');\r\n processNode('IsDefaultFilterField', 'boolean');\r\n processNode('IsDuplicate', 'boolean');\r\n processNode('TransformationFunction');\r\n\r\n // We perform old operations if the transformation function isn't an XML\r\n const transFunctionNodes = fieldNodes[i].getElementsByTagName('TransformationFunction');\r\n let transFunctionIsXML = transFunctionNodes.length > 0 && transFunctionNodes[0].children.length > 0;\r\n\r\n // If we don't have a transformation function, just create a default one\r\n if (\r\n !field.TransformationFunction\r\n && field\r\n && category\r\n ) {\r\n const fieldNode = document.createElement('Field');\r\n fieldNode.setAttribute('Id', field.ID.toString());\r\n fieldNode.setAttribute('FieldName', field.FieldName.toString());\r\n fieldNode.setAttribute('CategoryId', field.CategoryID.toString()); // We have to supply this because V9 has id collisions...\r\n fieldNode.setAttribute('CategoryName', category.CategoryName.toString()); // We have to supply this because V9 has id collisions...\r\n fieldNode.setAttribute('ObjectId', category.ObjectID.toString());\r\n fieldNode.setAttribute('ObjectName', field.ObjectName.toString());\r\n field.TransformationFunction = fieldNode.outerHTML;\r\n transFunctionIsXML = true;\r\n }\r\n\r\n // Setting up the initial function text\r\n if (transFunctionIsXML) {\r\n field.FunctionText = this.transFunctionInterpreter(field.TransformationFunction);\r\n } else {\r\n field.FunctionText = field.TransformationFunction;\r\n }\r\n if (field.FunctionText == null || field.FunctionText == 'undefined') {\r\n field.FunctionText = '';\r\n }\r\n if (field.FunctionText.match(/\\[.+\\]/)) {\r\n field.IsCalculated = false; // We do this because some fields are erroneously \"IsCalculated\" and they can't be if they have a field\r\n }\r\n // Below code is not doing anything\r\n // if (field.DisplayName == DataQueryFieldFilter.courseFilterDisplayName && typeof query.siteSectionId == 'string' && query.siteSectionId.toString().length > 0) {\r\n // const sSIds = query.siteSectionId.toString().split(',');\r\n // for (let x = 0; x < sSIds.length; x++) {\r\n // const tmpCourse = this.classroomSummaryService.myClasses.find(c => c.Id == parseInt(sSIds[x], 10));\r\n // if (tmpCourse == null) {\r\n // // TODO: tmpCourse = _.findWhere(this.classroomSummaryService.allTermClasses, { Id: parseInt(sSIds[x]) });\r\n // }\r\n // if (tmpCourse != null) {\r\n // // TODO: this.classroomSummaryService.rosterFilteredClasses.push(tmpCourse);\r\n // }\r\n // }\r\n // }\r\n\r\n // Setting the fields transformation function\r\n field.TransformationFields = [];\r\n if (field.TransformationFunction) {\r\n\r\n // ONE-10973: We now use XML, so we only use the old process if we find no XML children\r\n if (!transFunctionIsXML) {\r\n\r\n // Getting the trans fields\r\n const transFields = [];\r\n const transNodes = fieldNodes[i].getElementsByTagName('TransformationField');\r\n for (let t = 0; t < transNodes.length; t++) {\r\n const transField = {\r\n fieldId: -1,\r\n categoryId: -1,\r\n position: 0,\r\n sql: ''\r\n };\r\n let tf: DataQueryField = null;\r\n let transFieldName = '';\r\n let transCategoryName = '';\r\n let transObjectName = '';\r\n let categoryFromName: DataQueryCategory = null;\r\n let objectFromName: DataQueryObject = null;\r\n if (transNodes[t].getElementsByTagName('FieldName').length > 0 && transNodes[t].getElementsByTagName('FieldName')[0].childNodes.length > 0) {\r\n transFieldName = System.xmlToText(transNodes[t].getElementsByTagName('FieldName')[0].childNodes[0].nodeValue);\r\n }\r\n if (transNodes[t].getElementsByTagName('CategoryName').length > 0 && transNodes[t].getElementsByTagName('CategoryName')[0].childNodes.length > 0) {\r\n transCategoryName = System.xmlToText(transNodes[t].getElementsByTagName('CategoryName')[0].childNodes[0].nodeValue);\r\n }\r\n if (transNodes[t].getElementsByTagName('ObjectName').length > 0 && transNodes[t].getElementsByTagName('ObjectName')[0].childNodes.length > 0) {\r\n transObjectName = System.xmlToText(transNodes[t].getElementsByTagName('ObjectName')[0].childNodes[0].nodeValue);\r\n }\r\n objectFromName = this.information.objects.find(o => o.ObjectName.toLowerCase() == transObjectName.toLowerCase());\r\n if (objectFromName != null) {\r\n categoryFromName = objectFromName.categories.find(c => c.CategoryName.toLowerCase() == transCategoryName.toLowerCase());\r\n }\r\n if (categoryFromName != null) {\r\n tf = categoryFromName.fields.find(f => f.FieldName.toLowerCase() == transFieldName.toLowerCase());\r\n }\r\n\r\n // If the tf is null, we ought to do some processing to check for previous versions\r\n if (tf == null) {\r\n let transFieldId = -1;\r\n let transCategoryId = -1;\r\n if (transNodes[t].getElementsByTagName('FieldID')[0].childNodes.length > 0) {\r\n transFieldId = (parseInt(transNodes[t].getElementsByTagName('FieldID')[0].childNodes[0].nodeValue, 10));\r\n if (transNodes[t].getElementsByTagName('CategoryID').length > 0) {\r\n if (transNodes[t].getElementsByTagName('CategoryID')[0].childNodes.length > 0) {\r\n transCategoryId = (parseInt(transNodes[t].getElementsByTagName('CategoryID')[0].childNodes[0].nodeValue, 10));\r\n\r\n tf = this.information.getField(f => f.ID == transFieldId && f.CategoryID == transCategoryId);\r\n let tc = this.information.categories.find(c => c.ID == transCategoryId);\r\n if (!this.loginService.LoginSettings.V10 && tf != null) {\r\n tc = this.information.categories.find(c => c.ID == transCategoryId && c.CategoryName == tf.CategoryName);\r\n }\r\n if ((tf != null && transFieldName != '' && tf.FieldName != transFieldName) || (tc != null && transCategoryName != '' && transCategoryName != 'null' && tc.CategoryName != transCategoryName)) {\r\n tf = null;\r\n }\r\n if (tf != null && tc != null && (objectFromName == null || objectFromName == undefined || categoryFromName == null || categoryFromName == undefined)) {\r\n categoryFromName = tc;\r\n const transObject = this.information.objects.find(o => o.ID == categoryFromName.ObjectID);\r\n if (transObject != null) {\r\n objectFromName = transObject;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If the transformation field isn't null, set up it's properties and add it to the list\r\n // NOTE: we set the function text here because, otherwise, it won't actually match a field\r\n if (tf != null) {\r\n transField.fieldId = tf.ID;\r\n transField.categoryId = tf.CategoryID;\r\n const tfCategory = this.information.categories.find(c => c.ID == tf.CategoryID);\r\n let viewName = '';\r\n if (tfCategory != null) {\r\n viewName = tfCategory.ViewName;\r\n } else {\r\n console.warn('No tfCategory for transField sql');\r\n }\r\n if (field.FunctionText) {\r\n if (this.loginService.LoginSettings.V10) {\r\n // ONE-5786 - we shouldn't be converting the user entered text to lowercase. Use a case-insensitive regEx instead\r\n // field.FunctionText = field.FunctionText.toLowerCase().replace('vw' + viewName.toLowerCase() + '.[' + tf.FieldName.toLowerCase() + ']', this.getTransFunctionText(tf));\r\n let searchString = 'vw' + viewName + '.[' + tf.FieldName + ']';\r\n // escape regex special characters\r\n searchString = searchString.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n const regEx = new RegExp(searchString, 'ig');\r\n const replaceString = this.getTransFunctionText(tf);\r\n field.FunctionText = field.FunctionText.replace(regEx, replaceString);\r\n field.FunctionText = field.FunctionText.replace(searchString, replaceString);\r\n } else {\r\n field.FunctionText = field.FunctionText.replace('vw' + viewName + '.[' + tf.FieldName + ']', '[' + tf.ObjectName + '.' + tf.CategoryName + '.' + tf.DisplayName + ']');\r\n }\r\n } else {\r\n field.FunctionText = this.getTransFunctionText(tf);\r\n }\r\n transField.sql = 'vw' + viewName + '.[' + tf.FieldName + ']';\r\n if (transNodes[t].getElementsByTagName('Position')[0].childNodes.length > 0) {\r\n transField.position = (parseInt(transNodes[t].getElementsByTagName('Position')[0].childNodes[0].nodeValue, 10));\r\n }\r\n transFields.push(transField);\r\n }\r\n\r\n // If, after all this processing, TF is null, then we're in error\r\n if (tf == null) {\r\n field.FunctionText = this.getTransFunctionText(field);\r\n }\r\n }\r\n\r\n // Adding the transformation fields to the data query field\r\n for (let x = 0; x < transFields.length; x++) {\r\n const tr = transFields.find(f => f.position == x);\r\n if (tr != null) {\r\n field.TransformationFields.push(tr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Setting up the field's function text if not transformation function is present\r\n else {\r\n field.FunctionText = this.getTransFunctionText(field);\r\n if (category == null) {\r\n console.warn('No category for field.TransformationField sql');\r\n }\r\n field.TransformationFields.push({\r\n fieldId: field.ID,\r\n categoryId: field.CategoryID,\r\n position: 0,\r\n sql: null\r\n });\r\n }\r\n\r\n // ONE-12636: Always parse the function text to get the XML\r\n const parseResult = this.transFunctionParser(field.FunctionText);\r\n field.TransformationFunction = parseResult.transFunction;\r\n\r\n // ONE-14123: The field must always match a field within the transformation function\r\n if (!parseResult.fields.find(transField => transField.ID == field.ID)) {\r\n if (parseResult.fields.length > 0) {\r\n field.ID = parseResult.fields[0].ID;\r\n field.CategoryID = parseResult.fields[0].CategoryID;\r\n field.CategoryName = parseResult.fields[0].CategoryName;\r\n field.ObjectName = parseResult.fields[0].category.ObjectName;\r\n } else {\r\n field.ID = -1;\r\n field.CategoryID = -1;\r\n field.CategoryName = '';\r\n field.ObjectName = '';\r\n }\r\n }\r\n\r\n // Putting the field in the reports and sorts if it should be there\r\n if (field.ShowOnReport) {\r\n query.reportFields.push(cloneDeep(field));\r\n if (!field.IsDuplicate) {\r\n query.sortFields.push(field);\r\n }\r\n }\r\n\r\n // Obtaining its filters\r\n const filters: DataQueryFieldFilter[] = [];\r\n const filterNodes = fieldNodes[i].getElementsByTagName('Filter');\r\n for (let f = 0; f < filterNodes.length; f++) {\r\n const filter = new DataQueryFieldFilter();\r\n if (filterNodes[f].getElementsByTagName('FilterID')[0].childNodes.length > 0) {\r\n filter.FilterID = parseInt(filterNodes[f].getElementsByTagName('FilterID')[0].childNodes[0].nodeValue, 10);\r\n DataQueryService.filterFieldId = Math.max(filter.FilterID + 1, DataQueryService.filterFieldId);\r\n }\r\n if (filterNodes[f].getElementsByTagName('Operator')[0].childNodes.length > 0) {\r\n filter.Operator = System.xmlToText(filterNodes[f].getElementsByTagName('Operator')[0].childNodes[0].nodeValue);\r\n }\r\n if (filterNodes[f].getElementsByTagName('Value')[0].childNodes.length > 0) {\r\n filter.Value = System.xmlToText(filterNodes[f].getElementsByTagName('Value')[0].childNodes[0].nodeValue);\r\n }\r\n if (filterNodes[f].getElementsByTagName('Value2')[0] && filterNodes[f].getElementsByTagName('Value2')[0].childNodes.length > 0) {\r\n filter.Value2 = System.xmlToText(filterNodes[f].getElementsByTagName('Value2')[0].childNodes[0].nodeValue);\r\n }\r\n if (filterNodes[f].getElementsByTagName('Group')[0].childNodes.length > 0) {\r\n filter.Group = System.xmlToText(filterNodes[f].getElementsByTagName('Group')[0].childNodes[0].nodeValue);\r\n }\r\n if (filterNodes[f].getElementsByTagName('UseCurrentDate1')[0].childNodes.length > 0) {\r\n filter.UseCurrentDate1 = filterNodes[f].getElementsByTagName('UseCurrentDate1')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('UseCurrentDate2')[0].childNodes.length > 0) {\r\n filter.UseCurrentDate2 = filterNodes[f].getElementsByTagName('UseCurrentDate2')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('UseFilterForStudentSearch').length > 0 && filterNodes[f].getElementsByTagName('UseFilterForStudentSearch')[0].childNodes.length > 0) {\r\n filter.UseFilterForStudentSearch = filterNodes[f].getElementsByTagName('UseFilterForStudentSearch')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('IsStudentFilter').length > 0 && filterNodes[f].getElementsByTagName('IsStudentFilter')[0].childNodes.length > 0) {\r\n filter.IsStudentFilter = filterNodes[f].getElementsByTagName('IsStudentFilter')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('StudentFilterId').length > 0 && filterNodes[f].getElementsByTagName('StudentFilterId')[0].childNodes.length > 0) {\r\n filter.StudentFilterId = parseInt(filterNodes[f].getElementsByTagName('StudentFilterId')[0].childNodes[0].nodeValue, 10);\r\n }\r\n if (filterNodes[f].getElementsByTagName('UseFilterForCourseSearch').length > 0 && filterNodes[f].getElementsByTagName('UseFilterForCourseSearch')[0].childNodes.length > 0) {\r\n filter.UseFilterForCourseSearch = filterNodes[f].getElementsByTagName('UseFilterForCourseSearch')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('UseFilterForStaffSearch').length > 0 && filterNodes[f].getElementsByTagName('UseFilterForStaffSearch')[0].childNodes.length > 0) {\r\n filter.UseFilterForStaffSearch = filterNodes[f].getElementsByTagName('UseFilterForStaffSearch')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('IsCourseFilter').length > 0 && filterNodes[f].getElementsByTagName('IsCourseFilter')[0].childNodes.length > 0) {\r\n filter.IsCourseFilter = filterNodes[f].getElementsByTagName('IsCourseFilter')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n if (filterNodes[f].getElementsByTagName('CourseFilterId').length > 0 && filterNodes[f].getElementsByTagName('CourseFilterId')[0].childNodes.length > 0) {\r\n filter.CourseFilterId = parseInt(filterNodes[f].getElementsByTagName('CourseFilterId')[0].childNodes[0].nodeValue, 10);\r\n }\r\n\r\n if (filterNodes[f].getElementsByTagName('ApplyToAll').length > 0 && filterNodes[f].getElementsByTagName('ApplyToAll')[0].childNodes.length > 0) {\r\n filter.ApplyToAll = filterNodes[f].getElementsByTagName('ApplyToAll')[0].childNodes[0].nodeValue == 'true';\r\n }\r\n const filterOptions = [];\r\n const filterOptionNodes = filterNodes[f].getElementsByTagName('FilterOptions');\r\n for (let o = 0; o < filterOptionNodes.length; o++) {\r\n const filterOption = {\r\n Id: '',\r\n Code: '',\r\n CodeDescription: '',\r\n Sequence: ''\r\n };\r\n if (\r\n filterOptionNodes[o].getElementsByTagName('Id')[0]\r\n && filterOptionNodes[o].getElementsByTagName('Id')[0].childNodes.length > 0\r\n ) {\r\n filterOption.Id = System.xmlToText(filterOptionNodes[o].getElementsByTagName('Id')[0].childNodes[0].nodeValue);\r\n }\r\n if (\r\n filterOptionNodes[o].getElementsByTagName('Code')[0]\r\n && filterOptionNodes[o].getElementsByTagName('Code')[0].childNodes.length > 0\r\n ) {\r\n filterOption.Code = System.xmlToText(filterOptionNodes[o].getElementsByTagName('Code')[0].childNodes[0].nodeValue);\r\n }\r\n if (\r\n filterOptionNodes[o].getElementsByTagName('CodeDescription')[0]\r\n && filterOptionNodes[o].getElementsByTagName('CodeDescription')[0].childNodes.length > 0\r\n ) {\r\n filterOption.CodeDescription = System.xmlToText(filterOptionNodes[o].getElementsByTagName('CodeDescription')[0].childNodes[0].nodeValue);\r\n }\r\n if (\r\n filterOptionNodes[o].getElementsByTagName('Sequence')[0]\r\n && filterOptionNodes[o].getElementsByTagName('Sequence')[0].childNodes.length > 0\r\n ) {\r\n filterOption.Sequence = System.xmlToText(filterOptionNodes[o].getElementsByTagName('Sequence')[0].childNodes[0].nodeValue);\r\n }\r\n filterOptions.push(filterOption);\r\n }\r\n filter.FilterOptions = filterOptions;\r\n\r\n // date filter for v9\r\n if (!this.loginService.LoginSettings.V10 && field.FilterType != undefined && field.FilterType != null && field.FilterType == 1) {\r\n if (filter.Value != undefined && filter.Value != null && filter.Value != '') {\r\n filter.dateValue = new Date(filter.Value.toString());\r\n }\r\n if (filter.Value2 != undefined && filter.Value2 != null && filter.Value2 != '') {\r\n filter.dateValue2 = new Date(filter.Value2.toString());\r\n }\r\n }\r\n\r\n if (\r\n this.loginService.LoginSettings.V10\r\n || this.isStudentSearch || filter.UseFilterForStudentSearch\r\n || this.isCourseSearch || filter.UseFilterForCourseSearch\r\n || this.isStaffSearch || filter.UseFilterForStaffSearch\r\n ) {\r\n filters.push(filter);\r\n }\r\n\r\n // If the filter is using current dates, set the date values accordingly\r\n if (filter.UseCurrentDate1) {\r\n filter.dateValue = new Date();\r\n filter.Value = filter.dateValue.toLocaleDateString();\r\n }\r\n if (filter.UseCurrentDate2) {\r\n filter.dateValue2 = new Date();\r\n filter.Value2 = filter.dateValue2.toLocaleDateString();\r\n }\r\n }\r\n\r\n // Setting the filters to the field, now that it's complete\r\n for (let j = 0; j < filters.length; j++) {\r\n if (j == 0) {\r\n field.Filters = [filters[0]];\r\n query.filterFields.push(field);\r\n filters[0].field = field;\r\n } else {\r\n const newFilterField = cloneDeep(field);\r\n newFilterField.Alias = field.Alias + ' (' + (j) + ')';\r\n newFilterField.Filters = [filters[j]];\r\n query.filterFields.push(newFilterField);\r\n filters[j].field = newFilterField;\r\n }\r\n }\r\n }\r\n\r\n // Setting up the relationships in the query\r\n const relationshipNodes = xmlDoc.getElementsByTagName('Relationship');\r\n query.relationships = [];\r\n for (let r = 0; r < relationshipNodes.length; r++) {\r\n const relationship = {\r\n ID: parseInt(relationshipNodes[r].getElementsByTagName('RelationshipID')[0].childNodes[0].nodeValue, 10),\r\n Category1ID: parseInt(relationshipNodes[r].getElementsByTagName('Category1ID')[0].childNodes[0].nodeValue, 10),\r\n Category1Name: '',\r\n Category2ID: parseInt(relationshipNodes[r].getElementsByTagName('Category2ID')[0].childNodes[0].nodeValue, 10),\r\n Category2Name: '',\r\n Type: System.xmlToText(relationshipNodes[r].getElementsByTagName('JoinType')[0].childNodes[0].nodeValue),\r\n Deleted: false,\r\n SwapPrimaryObject: false,\r\n Object1Name: '',\r\n Object2Name: '',\r\n Visiable: true,\r\n Field1ID: undefined,\t// TODO: This should be something\r\n Field2ID: undefined\t\t// TODO: This should be something\r\n };\r\n const category1 = this.information.categories.find(c => c.ID == relationship.Category1ID);\r\n const category2 = this.information.categories.find(c => c.ID == relationship.Category2ID);\r\n if (category1 != undefined) {\r\n const object = this.information.objects.find(o => o.ID == category1.ObjectID);\r\n if (object != null) {\r\n if (!this.loginService.LoginSettings.V10 && (object.ObjectName == 'Student User-Defined' || object.ObjectName == 'Programs and Services' || object.ObjectName == 'Assessments' || object.ObjectName == 'Assessments Best')) {\r\n relationship.Category1Name = object.ObjectName;\r\n relationship.Object1Name = object.ObjectName;\r\n } else {\r\n if (this.loginService.LoginSettings.V10) {\r\n relationship.Category1Name = category1.CategoryName;\r\n } else {\r\n relationship.Category1Name = category1.CategoryName;\r\n relationship.Object1Name = object.ObjectName;\r\n }\r\n\r\n }\r\n }\r\n }\r\n if (category2 != undefined) {\r\n const object = this.information.objects.find(o => o.ID == category2.ObjectID);\r\n if (object != null) {\r\n if (!this.loginService.LoginSettings.V10 && (object.ObjectName == 'Student User-Defined' || object.ObjectName == 'Programs and Services' || object.ObjectName == 'Assessments' || object.ObjectName == 'Assessments Best')) {\r\n relationship.Category2Name = object.ObjectName;\r\n relationship.Object2Name = object.ObjectName;\r\n } else {\r\n if (this.loginService.LoginSettings.V10) {\r\n relationship.Category2Name = category2.CategoryName;\r\n } else {\r\n relationship.Object2Name = object.ObjectName;\r\n relationship.Category2Name = category2.CategoryName;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // use for display .. ONE-6879\r\n if ((relationship.Object1Name == relationship.Object2Name) || (query.relationships.filter(o => (o.Object1Name == relationship.Object1Name && o.Object2Name == relationship.Object2Name) || (o.Object1Name == relationship.Object2Name && o.Object2Name == relationship.Object1Name)).length > 0)) {\r\n relationship.Visiable = false;\r\n } else {\r\n relationship.Visiable = true;\r\n }\r\n\r\n query.relationships.push(relationship);\r\n }\r\n\r\n // Returning the query\r\n return query;\r\n }\r\n\r\n transFunctionParser(functionText: string): { transFunction: string, fields: DataQueryField[], errors: string[] } {\r\n // PRE: function text, which is pseudo-SQL\r\n // POST: parses the function text to create an XML string representing the transformation function\r\n const xml = document.createElement('TransformationFunction');\r\n const fields: DataQueryField[] = [];\r\n const errors: string[] = [];\r\n\r\n // If we don't have any function text, return nothing\r\n if (!functionText) {\r\n return {\r\n transFunction: '',\r\n fields: [],\r\n errors: []\r\n };\r\n }\r\n\r\n // Helper functions\r\n const findParenthetical = (start: number): { start: number, end: number, argEndIndexes: number[] } => {\r\n // PRE: the start index in our current function text\r\n // POST: returns the first set of matching parenthesis, as well as the indexes for its commas\r\n\r\n // Finding the outermost parentheses\r\n const parenthesisIndexPairs: { [currentParenthesis: number]: { start: number, end: number, argEndIndexes: number[] } } = {};\r\n let parenthesisDepth = 0;\r\n let isQuote = false;\r\n let isField = false;\r\n for (let i = start; i < functionText.length; i++) {\r\n if (!parenthesisIndexPairs[parenthesisDepth]) {\r\n parenthesisIndexPairs[parenthesisDepth] = { start: -1, end: -1, argEndIndexes: [] };\r\n }\r\n\r\n // We need to maintain a escaped state\r\n if (functionText[i] == '\"') {\r\n isQuote = !isQuote;\r\n }\r\n if (!isQuote) {\r\n if (functionText[i] == '[') {\r\n isField = true;\r\n }\r\n if (functionText[i] == ']' && isField) {\r\n isField = false;\r\n }\r\n }\r\n if (!isField && !isQuote) {\r\n\r\n // Start of parenthesis means we need to set that as a start and increment our depth\r\n if (functionText[i] == '(') {\r\n parenthesisIndexPairs[parenthesisDepth].start = i;\r\n parenthesisDepth += 1;\r\n }\r\n\r\n // End of parenthesis means we need to set that as the end and decrement our depth\r\n else if (functionText[i] == ')') {\r\n parenthesisDepth -= 1;\r\n parenthesisIndexPairs[parenthesisDepth].end = i;\r\n\r\n // If our current parenthsis is 0, we've found a complete node, so it's ready for parsing\r\n if (parenthesisDepth == 0) {\r\n\r\n // The last parenthesis also forms a function arg\r\n parenthesisIndexPairs[0].argEndIndexes.push(i);\r\n\r\n // Returning the current parenthesis pair\r\n return parenthesisIndexPairs[0];\r\n }\r\n }\r\n\r\n // This parses function args for the current parenthesis\r\n else if (functionText[i] == ',' && parenthesisDepth > 0) {\r\n parenthesisIndexPairs[parenthesisDepth - 1].argEndIndexes.push(i);\r\n }\r\n }\r\n }\r\n\r\n // If we made it out here, we didn't find a matching parenthesis, so log an error\r\n errors.push('No matching parenthesis');\r\n return null;\r\n };\r\n const parseParenthetical = (start: number): { documentFragment: DocumentFragment, endIndex: number } => {\r\n\r\n // Finding the parenthetical\r\n const parenthetical = findParenthetical(start);\r\n\r\n // parsing the parenthetical\r\n if (parenthetical) {\r\n const parseResult = this.transFunctionParser(\r\n functionText.substring(\r\n parenthetical.start + 1,\r\n parenthetical.end\r\n )\r\n );\r\n fields.push(...parseResult.fields);\r\n errors.push(...parseResult.errors);\r\n return {\r\n documentFragment: document.createRange().createContextualFragment(\r\n parseResult.transFunction\r\n ),\r\n endIndex: parenthetical.end\r\n };\r\n }\r\n\r\n // If no parenthetical was found, return nothing\r\n else {\r\n return null;\r\n }\r\n };\r\n const parseFunctionArgs = (start: number): { nodes: ChildNode[], endIndex: number } => {\r\n\r\n // Finding the parenthetical\r\n const parenthetical = findParenthetical(start);\r\n\r\n // Finding the distinct args, separated by columns\r\n if (parenthetical) {\r\n\r\n // Extracting the arguments\r\n const args: string[] = [];\r\n if (parenthetical.argEndIndexes) {\r\n for (let i = 0; i < parenthetical.argEndIndexes.length; i++) {\r\n let argStart = parenthetical.start + 1;\r\n if (i > 0) {\r\n argStart = parenthetical.argEndIndexes[i - 1] + 1;\r\n }\r\n if (argStart < parenthetical.argEndIndexes[i]) { // Only substring valid indexes (prevents reading () as having a \"\" argument)\r\n args.push(functionText.substring(argStart, parenthetical.argEndIndexes[i]));\r\n }\r\n }\r\n }\r\n\r\n // Parsing each arg text\r\n const argXML: ChildNode[] = [];\r\n args.forEach(arg => {\r\n const parseResult = this.transFunctionParser(arg);\r\n const documentFragment = document.createRange().createContextualFragment(parseResult.transFunction);\r\n argXML.push(documentFragment.firstChild); // We should only ever have one child\r\n fields.push(...parseResult.fields);\r\n errors.push(...parseResult.errors);\r\n });\r\n\r\n // Returning the elements and the end of the parenthetical\r\n return { nodes: argXML, endIndex: parenthetical.end };\r\n }\r\n\r\n // If no parenthetical was found, return nothing\r\n else {\r\n return null;\r\n }\r\n };\r\n\r\n // Reading until we find [, ], (, ), \", a number, or an operator\r\n let currentRead = '';\r\n let openBracket = false;\r\n let openQuote = false;\r\n let openNumber = false;\r\n for (let i = 0; i < functionText.length; i++) {\r\n\r\n // If we encountered a parenthesis first, our current read should be a function\r\n if (functionText[i] == '(' && !openBracket && !openQuote) {\r\n\r\n // If this isn't a function, then we should parse it as a unit\r\n if (currentRead == '') {\r\n const parsedParenthetical = parseParenthetical(i);\r\n if (parsedParenthetical) {\r\n i = parsedParenthetical.endIndex;\r\n parsedParenthetical.documentFragment.childNodes.forEach(node => {\r\n xml.appendChild(node);\r\n });\r\n }\r\n\r\n // If no parse could be made, then end this loop\r\n else {\r\n break;\r\n }\r\n }\r\n\r\n // If we have a read, then this is a function\r\n else {\r\n let functionFound = false;\r\n for (let j = 0; j < this.functions.length; j++) {\r\n if (this.functions[j].Name.trim().toLowerCase() == currentRead.trim().toLowerCase()) {\r\n functionFound = true;\r\n\r\n // Creating and appending a node for our function\r\n const functionNode = document.createElement('Function');\r\n functionNode.setAttribute('Id', this.functions[j].Id.toString());\r\n\r\n // Parsing the args\r\n const parsedFunctionArgs = parseFunctionArgs(i);\r\n if (parsedFunctionArgs) {\r\n i = parsedFunctionArgs.endIndex;\r\n parsedFunctionArgs.nodes.forEach(node => {\r\n if (node) {\r\n functionNode.appendChild(node);\r\n } else {\r\n errors.push('Function ' + this.functions[j].DisplayName + ' has invalid arguments.');\r\n }\r\n });\r\n\r\n // Appending the function node to our document\r\n xml.appendChild(functionNode);\r\n }\r\n\r\n // If no parse could be made, then end this loop\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If we haven't found a function, then we have a syntax error\r\n if (!functionFound) {\r\n errors.push('Function not found: ' + currentRead.trim() + '.');\r\n }\r\n\r\n // Resetting the current read for future elements\r\n currentRead = '';\r\n }\r\n }\r\n\r\n // If we find a ) and we're not parsing, then that's a syntax error\r\n else if (functionText[i] == ')' && !openBracket && !openQuote) {\r\n errors.push('No matching parenthesis.');\r\n }\r\n\r\n // Quotes become string literals\r\n else if (functionText[i] == '\"') {\r\n\r\n // If we just hit a quotation, we're starting a string literal\r\n if (!openQuote) {\r\n\r\n // If we have a current read before this, then we've hit a syntax error\r\n if (currentRead.trim() != '') {\r\n errors.push('Unknown element: ' + currentRead + '.');\r\n }\r\n\r\n // Resetting the current read to get its value\r\n currentRead = '';\r\n openQuote = true;\r\n }\r\n\r\n // If we're in a quote, the current read becomes a string literal\r\n else {\r\n const stringElement = document.createElement('string');\r\n stringElement.innerHTML = currentRead;\r\n stringElement.setAttribute('value', currentRead);\r\n xml.appendChild(stringElement);\r\n\r\n // Resetting the current read to get future elements\r\n currentRead = '';\r\n openQuote = false;\r\n }\r\n }\r\n\r\n // If we've encountered a [, we're looking for a field\r\n else if (functionText[i] == '[' && !openQuote) {\r\n\r\n // If we have a current read, we've hit a syntax error\r\n if (currentRead.trim() != '') {\r\n errors.push('Unknown element: ' + currentRead + '.');\r\n }\r\n\r\n // Resetting the current read to find the field\r\n currentRead = '';\r\n openBracket = true;\r\n }\r\n\r\n // If we've encountered a ], we can begin parsing a field\r\n else if (functionText[i] == ']' && !openQuote) {\r\n\r\n // If we're not looking for a field already, then we hav a syntax error\r\n if (!openBracket) {\r\n errors.push('No matching bracket.');\r\n }\r\n\r\n // If we are looking for a field, parse it and add that to the document\r\n else {\r\n\r\n // Looking for the field\r\n const components = currentRead.split('.');\r\n if (components.length == 3) {\r\n const object = this.information.objects.find(o => o.ObjectName.toLowerCase() == components[0].toLowerCase());\r\n let category: DataQueryCategory;\r\n let field: DataQueryField;\r\n if (object) {\r\n category = object.categories.find(c => c.CategoryName.toLowerCase() == components[1].toLowerCase());\r\n }\r\n if (category) {\r\n field = category.fields.find(f => f.DisplayName == components[2]);\r\n if (field == null) {\r\n field = category.fields.find(f => f.DisplayName.toLowerCase() == components[2].toLowerCase());\r\n }\r\n }\r\n\r\n // If we find a field, create a node for the field and appending that\r\n if (field) {\r\n const fieldNode = document.createElement('Field');\r\n fieldNode.setAttribute('Id', field.ID.toString());\r\n fieldNode.setAttribute('FieldName', field.FieldName.toString());\r\n fieldNode.setAttribute('CategoryId', field.CategoryID.toString()); // We have to supply this because V9 has id collisions...\r\n fieldNode.setAttribute('CategoryName', category.CategoryName.toString()); // We have to supply this because V9 has id collisions...\r\n fieldNode.setAttribute('ObjectId', object.ID.toString());\r\n fieldNode.setAttribute('ObjectName', field.ObjectName.toString());\r\n xml.appendChild(fieldNode);\r\n fields.push(field);\r\n }\r\n\r\n // If we haven't found a node, then we have a syntax error\r\n else {\r\n errors.push(currentRead + ' field must be chosen from the dialog.');\r\n }\r\n }\r\n\r\n // Resetting the current read\r\n currentRead = '';\r\n openBracket = false;\r\n }\r\n }\r\n\r\n // If we encounter a number and we're not in another context, this is a number literal\r\n else if (\r\n !isNaN(Number.parseInt(functionText[i], 10))\r\n && !openQuote\r\n && !openBracket\r\n && !openNumber\r\n ) {\r\n openNumber = true;\r\n if (currentRead.trim() != '') {\r\n errors.push('Unknown element: ' + currentRead + '.');\r\n }\r\n currentRead = functionText[i];\r\n }\r\n\r\n // Adding to the current read since we haven't encountered a special character\r\n else {\r\n currentRead += functionText[i];\r\n }\r\n\r\n // If we're in a number context and the next element is not a number, try to parse out a number\r\n if (\r\n openNumber\r\n && (\r\n functionText.length - 1 == i\r\n || (\r\n isNaN(Number.parseInt(functionText[i + 1], 10))\r\n && functionText[i + 1] != '.'\r\n )\r\n )\r\n ) {\r\n\r\n // If the current read is not a number, this is a syntax error\r\n if (Number.parseFloat(currentRead) != NaN) {\r\n\r\n // Adding the number element\r\n const numberElement = document.createElement('number');\r\n numberElement.innerHTML = currentRead;\r\n xml.appendChild(numberElement);\r\n } else {\r\n errors.push('Number literal not completed: ' + currentRead + '.');\r\n }\r\n\r\n // Resetting the number context\r\n openNumber = false;\r\n currentRead = '';\r\n }\r\n\r\n // If we've encountered an operator, everything here becomes the left and everything after becomes the right\r\n const matchingOperator = this.operators != null ? this.operators.find(operator => operator.Display.trim().toLowerCase() == currentRead.trim().toLowerCase()) : null;\r\n if (matchingOperator && !openBracket && !openQuote) {\r\n\r\n // Make sure we capture the largest operator, as some operators are composites (>= composed of > and =)\r\n let potentialComposite: DataQueryOperator = null;\r\n let checkText = currentRead;\r\n let jumpAhead = 0;\r\n if (i < functionText.length - 1) {\r\n for (let j = i + 1; j < functionText.length; j++) {\r\n if (functionText[j] != ' ') {\r\n checkText += functionText[j];\r\n potentialComposite = this.operators.find(operator => operator.Display == checkText.trim().toLowerCase());\r\n if (potentialComposite != null) {\r\n jumpAhead = j - i;\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Appending a node for operator. ALl current nodes become LHS.\r\n const operatorNode = document.createElement('Operator');\r\n operatorNode.setAttribute('Id', matchingOperator.ID.toString());\r\n xml.childNodes.forEach(childNode => {\r\n operatorNode.appendChild(childNode);\r\n });\r\n xml.appendChild(operatorNode);\r\n\r\n // Appending the rest of the document as the right side\r\n const rightHandString = functionText.substring(i + 1 + jumpAhead, functionText.length);\r\n const rightHandParseResult = this.transFunctionParser(rightHandString);\r\n fields.push(...rightHandParseResult.fields);\r\n errors.push(...rightHandParseResult.errors);\r\n const rightSideFragment = document.createRange().createContextualFragment(rightHandParseResult.transFunction);\r\n rightSideFragment.childNodes.forEach(node => {\r\n operatorNode.appendChild(node);\r\n });\r\n\r\n // We're done the function text now, so we can break the loop\r\n currentRead = '';\r\n break;\r\n }\r\n }\r\n\r\n // If we've got here with a current read, then there's a syntax error. Something wasn't parsed.\r\n if (currentRead.trim() != '') {\r\n errors.push('Unknown element: ' + currentRead + '.');\r\n }\r\n\r\n // If we have any open contexts, we know we haven't matched something\r\n if (openBracket) {\r\n errors.push('No matching bracket.');\r\n }\r\n if (openQuote) {\r\n errors.push('No matching quote.');\r\n }\r\n\r\n // If we hit a syntax error, throw an error in the console\r\n if (errors.length > 0) {\r\n console.warn('Syntax errors found: ' + errors.toString());\r\n }\r\n\r\n // Returning the XML, distinct fields, and distinct errors\r\n return {\r\n transFunction: xml.innerHTML,\r\n fields: fields.filter((field, index, self) => self.findIndex(subField => subField.ID == field.ID) == index),\r\n errors: errors.filter((error, index, self) => self.findIndex(subError => subError == error) == index)\r\n };\r\n }\r\n\r\n transFunctionInterpreter(transFunctionXML: string) {\r\n // PRE: XML that is formatted as a transformation function according to our functions, operators, and parameters\r\n // There must be a top level element, like \"root\" or \"transformation function\" if withRoot is true\r\n // POST: parses the XML to create pseudo-SQL function text\r\n let transFunction = '';\r\n let invalidXML = false;\r\n\r\n // Creating XML doc\r\n const parser = new DOMParser();\r\n transFunctionXML = transFunctionXML.replace(/&/g, '&');\r\n const xml = parser.parseFromString(transFunctionXML, 'text/xml');\r\n\r\n // Creating a helper function to parse the node\r\n const parseNode = (xmlNode: Element): string => {\r\n const childElements = Array.from(xmlNode.children);\r\n const nodeName = xmlNode.nodeName.toLowerCase();\r\n const idNode = xmlNode.attributes.getNamedItem('id');\r\n const fieldNameNode = xmlNode.attributes.getNamedItem('fieldname');\r\n const categoryIdNode = xmlNode.attributes.getNamedItem('categoryid');\r\n const categoryNameNode = xmlNode.attributes.getNamedItem('categoryname');\r\n const objectIdNode = xmlNode.attributes.getNamedItem('objectid');\r\n const objectNameNode = xmlNode.attributes.getNamedItem('objectname');\r\n let id = -1;\r\n let categoryId = -1;\r\n let objectId = -1;\r\n if (idNode != null && Number.parseInt(idNode.value, 10) != NaN) {\r\n id = Number.parseInt(idNode.value, 10);\r\n }\r\n if (categoryIdNode != null && Number.parseInt(categoryIdNode.value, 10) != NaN) {\r\n categoryId = Number.parseInt(categoryIdNode.value, 10);\r\n }\r\n if (objectIdNode != null && Number.parseInt(objectIdNode.value, 10) != NaN) {\r\n objectId = Number.parseInt(objectIdNode.value, 10);\r\n }\r\n\r\n // Operator\r\n if (nodeName == 'operator') {\r\n\r\n // Find the operator\r\n const operator = this.operators.find(o => o.ID == id);\r\n\r\n // Adding the operator and its arguments on either side\r\n if (operator && childElements.length == 2) {\r\n return parseNode(childElements[0]) + ' ' + operator.Display + ' ' + parseNode(childElements[1]);\r\n } else {\r\n invalidXML = true;\r\n }\r\n }\r\n\r\n // Function\r\n if (nodeName == 'function') {\r\n\r\n // Find the function\r\n const funct = this.functions.find(o => o.Id == id);\r\n\r\n // Adding the function and it's args\r\n if (funct) {\r\n let result = funct.Name + '(';\r\n for (let i = 0; i < childElements.length; i++) {\r\n result += parseNode(childElements[i]);\r\n if (i != childElements.length - 1) {\r\n result += ', ';\r\n }\r\n }\r\n result += ')';\r\n return result;\r\n } else {\r\n invalidXML = true;\r\n }\r\n }\r\n\r\n // Field\r\n if (nodeName == 'field') {\r\n\r\n // Finding the field\r\n const field = this.information.fields.find(o =>\r\n (this.V10 || !fieldNameNode ? o.ID == id : o.FieldName == fieldNameNode.value)\r\n && (\r\n this.V10 || !categoryNameNode ?\r\n (categoryId == -1 || o.CategoryID == categoryId) :\r\n (o.CategoryName == categoryNameNode.value)\r\n )\r\n && (\r\n this.V10 || !objectNameNode ?\r\n true :\r\n (o.ObjectName == objectNameNode.value)\r\n )\r\n );\r\n\r\n // Adding the field in brackets\r\n if (field) {\r\n if (field.category) {\r\n return '['\r\n + field.category.ObjectName + '.'\r\n + field.category.CategoryName + '.'\r\n + field.DisplayName\r\n + ']';\r\n }\r\n else {\r\n return '['\r\n + field.ObjectName + '.'\r\n + field.CategoryName + '.'\r\n + field.DisplayName\r\n + ']';\r\n }\r\n } else {\r\n invalidXML = true;\r\n }\r\n }\r\n\r\n // Literals\r\n if (nodeName == 'string') {\r\n let value = xmlNode.getAttribute('value');\r\n if (!value) {\r\n value = xmlNode.innerHTML;\r\n }\r\n return '\"' + (value ? value : '') + '\"';\r\n }\r\n if (nodeName == 'number') {\r\n return xmlNode.innerHTML;\r\n }\r\n };\r\n\r\n // Iterating through the node's children\r\n // NOTE: this will probably just be the one node usually\r\n for (let i = 0; i < xml.children.length; i++) {\r\n transFunction += parseNode(xml.children.item(i));\r\n if (i != xml.children.length - 1) {\r\n transFunction += ' ';\r\n }\r\n }\r\n\r\n // Returning the transformation function\r\n return transFunction;\r\n }\r\n\r\n transFunctionChanged(field: DataQueryField, resetErrors = true, markAsChanged = true, force = true) {\r\n // PRE: the field's transformation function is changed\r\n // POST: sets the fields errors and related data\r\n if (!this.loadingQuery) {\r\n\r\n // Setting the field and query data for processing\r\n this.savedQueryModified = true;\r\n if (markAsChanged) {\r\n this.currentQuery.queryChangedSinceLastResult = true;\r\n }\r\n if (resetErrors) {\r\n field.FunctionError = [];\r\n }\r\n field.PreviewData = '';\r\n this.FormulasTested = false;\r\n if (field.FunctionText == null) {\r\n field.FunctionText = '';\r\n }\r\n field.TransformationFields = [];\r\n field.TransformationFunction = '';\r\n\r\n // Setting the transformation function and errors\r\n if (!field.FunctionText && !field.FunctionError.includes('Value is required.')) {\r\n field.addFunctionError('Value is required.');\r\n } else {\r\n const parseResult = this.transFunctionParser(field.FunctionText);\r\n field.TransformationFunction = parseResult.transFunction;\r\n for (let i = 0; i < parseResult.fields.length; i++) {\r\n const transField = new DataQueryTransformationField(parseResult.fields[i]);\r\n transField.position = i;\r\n field.TransformationFields.push(transField);\r\n if (i == 0) {\r\n field.category = this.information.categories.find(category => category.ID == transField.categoryId);\r\n if (field.category) {\r\n field.ID = transField.fieldId;\r\n field.CategoryID = transField.categoryId;\r\n field.ObjectName = field.category.ObjectName;\r\n }\r\n }\r\n }\r\n for (let i = 0; i < parseResult.errors.length; i++) {\r\n field.addFunctionError(parseResult.errors[i]);\r\n }\r\n field.IsCalculated = parseResult.fields.length == 0;\r\n }\r\n }\r\n }\r\n\r\n transFunctionKeydown(field: DataQueryField, event: KeyDownEvent) {\r\n // PRE: a field's function is input into\r\n // POST: opens a selection dialog if [ is input\r\n // \t\t prevents ] from being input\r\n // \t\t allows all others\r\n\r\n // Extracting important information\r\n const key = event.key;\r\n const element = event.target;\r\n const fnText = element.value;\r\n const selectedText = fnText.substring(element.selectionStart, element.selectionEnd);\r\n\r\n // Unsetting the preview data\r\n field.PreviewData = '';\r\n\r\n // Opening dialogs for bracket\r\n if (key == '[') {\r\n event.preventDefault();\r\n const dialogBox = this.dialog.open(InsertFieldDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n information: this.information,\r\n preferences: this.preferences,\r\n currentQuery: this.currentQuery\r\n }\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(selectedField => {\r\n this.insertTransField(selectedField, field, element);\r\n this.transFunctionChanged(field);\r\n subscription.unsubscribe();\r\n });\r\n } else if (key == ']') {\r\n event.preventDefault();\r\n }\r\n\r\n // Erasing the previous field on a backspace\r\n else if (key == 'Backspace') {\r\n if (selectedText == '') {\r\n let fieldArrayPosition = 0;\r\n if (this.isCursorOnField(field, element.selectionStart, -1)) {\r\n element.selectionStart = element.selectionStart - 1;\r\n if (fnText[element.selectionStart] == '[') {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n } else if (fnText[element.selectionStart] == ']') {\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n } else {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n }\r\n for (let i = 0; i < element.selectionStart - 1; i++) {\r\n if (fnText[i] == ']') {\r\n fieldArrayPosition += 1;\r\n }\r\n }\r\n field.TransformationFields.splice(fieldArrayPosition, 1);\r\n }\r\n } else {\r\n let fieldPosition = field.TransformationFields.length;\r\n for (let i = fnText.length - 1; i > element.selectionStart; i--) {\r\n if (fnText[i] == ']') {\r\n fieldPosition -= 1;\r\n if (i <= element.selectionEnd) {\r\n field.TransformationFields.splice(fieldPosition, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Erasing the next field on a delete\r\n else if (key == 'Delete') {\r\n if (selectedText == '') {\r\n let fieldArrayPosition = 0;\r\n if (this.isCursorOnField(field, element.selectionStart, 0)) {\r\n if (fnText[element.selectionStart] == '[') {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n } else if (fnText[element.selectionStart] == ']') {\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n } else {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n }\r\n for (let i = 0; i < element.selectionStart - 1; i++) {\r\n if (fnText[i] == ']') {\r\n fieldArrayPosition += 1;\r\n }\r\n }\r\n field.TransformationFields.splice(fieldArrayPosition, 1);\r\n }\r\n } else {\r\n let fieldPosition = field.TransformationFields.length;\r\n for (let i = fnText.length - 1; i > element.selectionStart; i--) {\r\n if (fnText[i] == ']') {\r\n fieldPosition -= 1;\r\n if (i <= element.selectionEnd) {\r\n field.TransformationFields.splice(fieldPosition, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Special keys\r\n else if (!Number.isNaN(Number.parseInt(key, 10)) ||\r\n key == ' ' ||\r\n /[a-z]/.test(key) ||\r\n key == ';' ||\r\n key == '=' ||\r\n key == ',' ||\r\n key == '-' ||\r\n key == '.' ||\r\n key == '/' ||\r\n key == '\\\\' ||\r\n key == '\\'') {\r\n\r\n if (selectedText == '') {\r\n let fieldArrayPosition = 0;\r\n if (fnText[element.selectionStart] == '[') {\r\n\r\n } else if (this.isCursorOnField(field, element.selectionStart, 0)) {\r\n if (fnText[element.selectionStart] == '[') {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n } else if (fnText[element.selectionStart] == ']') {\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n } else {\r\n const nextText = fnText.substring(element.selectionStart);\r\n element.selectionEnd = element.selectionStart + nextText.indexOf(']') + 1;\r\n const prevText = fnText.substring(0, element.selectionStart);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n }\r\n for (let i = 0; i < element.selectionStart - 1; i++) {\r\n if (fnText[i] == ']') {\r\n fieldArrayPosition += 1;\r\n }\r\n }\r\n field.TransformationFields.splice(fieldArrayPosition, 1);\r\n }\r\n } else {\r\n let fieldPosition = field.TransformationFields.length;\r\n for (let i = fnText.length - 1; i > element.selectionStart; i--) {\r\n if (fnText[i] == ']') {\r\n fieldPosition -= 1;\r\n if (i <= element.selectionEnd) {\r\n field.TransformationFields.splice(fieldPosition, 1);\r\n }\r\n }\r\n }\r\n }\r\n } else if (key == 'ArrowLeft') {\r\n if (this.isCursorOnField(field, element.selectionStart, -1)) {\r\n if (fnText[element.selectionStart - 1] == '[') {\r\n const nextText = fnText.substring(element.selectionStart - 1);\r\n element.selectionEnd = element.selectionStart - 1 + nextText.indexOf(']') + 1;\r\n } else if (fnText[element.selectionStart - 1] == ']') {\r\n const prevText = fnText.substring(0, element.selectionStart - 1);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n } else {\r\n const nextText = fnText.substring(element.selectionStart - 1);\r\n element.selectionEnd = element.selectionStart - 1 + nextText.indexOf(']') + 1;\r\n const prevText = fnText.substring(0, element.selectionStart - 1);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n }\r\n }\r\n } else if (key == 'ArrowRight') {\r\n if (this.isCursorOnField(field, element.selectionStart, 1)) {\r\n if (fnText[element.selectionStart + 1] == '[') {\r\n const nextText = fnText.substring(element.selectionStart + 1);\r\n element.selectionEnd = element.selectionStart + 1 + nextText.indexOf(']') + 1;\r\n } else if (fnText[element.selectionStart + 1] == ']') {\r\n const prevText = fnText.substring(0, element.selectionStart + 1);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n } else {\r\n const nextText = fnText.substring(element.selectionStart + 1);\r\n element.selectionEnd = element.selectionStart + 1 + nextText.indexOf(']') + 1;\r\n const prevText = fnText.substring(0, element.selectionStart + 1);\r\n element.selectionStart = prevText.lastIndexOf('[');\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n transFunctionClicked(field: DataQueryField, event: ClickEvent) {\r\n // PRE: a transformation function input field is clicked into\r\n // POST: highlights a field is one is clicked on\r\n field.IsTransErrorOpen = false;\r\n event.stopPropagation();\r\n const elem = event.target;\r\n if (elem != null) {\r\n event.preventDefault();\r\n const fnText = elem.value;\r\n let previousText = fnText.substring(0, elem.selectionStart);\r\n if (previousText.indexOf('[') >= 0) {\r\n previousText = previousText.substring(previousText.lastIndexOf('['));\r\n if (previousText.indexOf(']') < 0) {\r\n elem.selectionStart = elem.selectionStart - previousText.length;\r\n }\r\n }\r\n let nextText = fnText.substring(elem.selectionEnd);\r\n if (nextText.indexOf(']') >= 0) {\r\n nextText = nextText.substring(0, nextText.indexOf(']'));\r\n if (nextText.indexOf('[') < 0) {\r\n elem.selectionEnd = elem.selectionEnd + nextText.length + 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n isCursorOnField(field: DataQueryField, cursorPosition: number, modifier: number): boolean {\r\n // PRE: the field, a cursor position, and modifier for the cursor position\r\n // POST: returns true if the cursor is on the specified field\r\n const functionText = field.FunctionText == null ? '' : field.FunctionText;\r\n let isField = false;\r\n for (let i = 0; i < functionText.length; i++) {\r\n if (functionText[i] == '[') {\r\n isField = true;\r\n } else if (i > 0) {\r\n if (functionText[i - 1] == ']') {\r\n isField = false;\r\n }\r\n }\r\n if (cursorPosition + modifier == i) {\r\n return isField;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getTransFunctionText(field: DataQueryField): string {\r\n // PRE: the field must be organized\r\n // POST: obtains the text to be put in the function text\r\n if (field.DisplayName && field.ObjectName && field.CategoryName) {\r\n return '[' + field.ObjectName + '.' + field.CategoryName + '.' + field.DisplayName + ']';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n insertTransField(selectedField: DataQueryField, fieldToUpdate: DataQueryField, element?: HTMLInputElement, insertIndex?: number) {\r\n // PRE: a selected field from the insert field dialog, a field to update, and (optionally) the element of that field\r\n // POST: updates the field's function text. If an element is provided, inserts it at the cursor. Otherwise, at 0.\r\n let viewName = '';\r\n if (selectedField != null) {\r\n\r\n // Updating the field\r\n let category = selectedField.category;\r\n if (category == null) {\r\n category = this.information.categories.find(c => c.ID == selectedField.CategoryID);\r\n }\r\n if (category != null) {\r\n viewName = category.ViewName;\r\n } else {\r\n console.warn('No category for insertTransField');\r\n }\r\n const textToInsert = this.getTransFunctionText(selectedField);\r\n const sqlToInsert = 'vw' + viewName + '.[' + selectedField.FieldName + ']';\r\n // ONE-13145\r\n if (this.V10 == false) {\r\n fieldToUpdate.category = category;\r\n fieldToUpdate.ID = selectedField.ID;\r\n fieldToUpdate.ObjectName = selectedField.ObjectName;\r\n fieldToUpdate.CategoryID = selectedField.CategoryID;\r\n }\r\n\r\n const updateField = fieldToUpdate;\r\n const selectionStart = element ? element.selectionStart : (insertIndex ? insertIndex : 0);\r\n const selectionEnd = element ? element.selectionEnd : (insertIndex ? insertIndex : 0);\r\n if (updateField.TransformationFields == null) {\r\n updateField.TransformationFields = [];\r\n }\r\n let transFieldArrayPosition = cloneDeep(updateField.TransformationFields.length);\r\n if (selectionStart == 0) {\r\n transFieldArrayPosition = 0;\r\n }\r\n const trans = {\r\n fieldId: selectedField.ID,\r\n categoryId: selectedField.CategoryID,\r\n position: 0,\r\n sql: sqlToInsert\r\n };\r\n updateField.TransformationFields.splice(transFieldArrayPosition, 0, trans);\r\n updateField.FunctionText = updateField.FunctionText.substring(0, selectionStart) + textToInsert + updateField.FunctionText.substring(selectionEnd);\r\n\r\n // Updating the element\r\n if (element) {\r\n let i = 0;\r\n if (selectionStart != selectionEnd) {\r\n let fieldPosition = updateField.TransformationFields.length;\r\n for (i = updateField.FunctionText.length - 1; i > element.selectionStart; i--) {\r\n if (updateField.FunctionText[i] == ']') {\r\n fieldPosition -= 1;\r\n if (i <= element.selectionEnd) {\r\n updateField.TransformationFields.splice(fieldPosition, 1);\r\n }\r\n }\r\n }\r\n }\r\n i = this.loginService.LoginSettings.V10 ? 0 : -1;\r\n while (i++ < element.selectionStart) {\r\n if (updateField.FunctionText[i] == '[') {\r\n transFieldArrayPosition += 1;\r\n }\r\n }\r\n setTimeout(() => {\r\n element.selectionStart = selectionStart + textToInsert.length;\r\n element.selectionEnd = selectionStart + textToInsert.length;\r\n element.focus();\r\n }, 0);\r\n\r\n if (this.V10 == false) {\r\n if (updateField.Alias == null || updateField.Alias == '') {\r\n updateField.Alias = selectedField.FieldName;\r\n }\r\n this.transFunctionChanged(updateField);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getQueryXML(fields: DataQueryField[], forResults = false): string {\r\n // PRE: the fields for the query\r\n // POST: gets the xml of the current query based on the fields\r\n let xml = '';\r\n xml += '';\r\n\r\n // XML Fields\r\n for (let i = 0; i < fields.length; i++) {\r\n xml += '';\r\n xml += '' + fields[i].ID + '';\r\n xml += '' + System.textToXML(fields[i].FieldName) + '';\r\n xml += '' + fields[i].CategoryID + '';\r\n xml += '' + System.textToXML(fields[i].CategoryName) + '';\r\n xml += '' + System.textToXML(fields[i].ObjectName) + '';\r\n xml += '' + fields[i].SortDirection + '';\r\n xml += '' + fields[i].SortOrder + '';\r\n xml += '' + (fields[i].Break ? fields[i].Break : '') + '';\r\n xml += '' + System.textToXML(fields[i].Alias) + '';\r\n xml += '' + !!fields[i].ShowOnReport + '';\r\n xml += '' + !!fields[i].IsConstant + '';\r\n xml += '' + System.textToXML(fields[i].ConstantValue) + '';\r\n xml += '' + !!fields[i].IsCalculated + '';\r\n xml += '' + System.textToXML(fields[i].DataType) + '';\r\n xml += '' + !!fields[i].IsDefaultFilterField + '';\r\n xml += '' + !!fields[i].IsDuplicate + '';\r\n\r\n // XML Filters\r\n if (fields[i].Filters != undefined && fields[i].Filters != null) {\r\n for (let x = 0; x < fields[i].Filters.length; x++) {\r\n let setupFilter = false;\r\n if (this.isStudentSearch) {\r\n if (!forResults || (!this.V10 && fields[i].IsDefaultFilterField) || (this.V10 && !fields[i].IsDefaultFilterField) || fields[i].Filters[x].UseFilterForStudentSearch) {\r\n setupFilter = true;\r\n }\r\n } else if (this.isCourseSearch) {\r\n if (!forResults || !fields[i].IsDefaultFilterField || fields[i].Filters[x].UseFilterForCourseSearch) {\r\n setupFilter = true;\r\n }\r\n } else if (this.isStaffSearch) {\r\n if (!forResults || !fields[i].IsDefaultFilterField || fields[i].Filters[x].UseFilterForStaffSearch) {\r\n setupFilter = true;\r\n }\r\n } else {\r\n if (!forResults || !fields[i].IsDefaultFilterField || !this.V10) {\r\n setupFilter = true;\r\n }\r\n }\r\n if (setupFilter) {\r\n xml += '';\r\n xml += '' + fields[i].Filters[x].FilterID + '';\r\n xml += '' + System.textToXML(fields[i].Filters[x].Operator) + '';\r\n const value: any = (fields[i].Filters[x].Value == '\"\"' || fields[i].Filters[x].Value == '\\'\\'') ? '' : fields[i].Filters[x].Value;\r\n const value2: any = (fields[i].Filters[x].Value2 == '\"\"' || fields[i].Filters[x].Value2 == '\\'\\'') ? '' : fields[i].Filters[x].Value2;\r\n if (fields[i].DataType != undefined && (fields[i].DataType.toLowerCase() == 'datetime' || fields[i].DataType.toLowerCase() == 'smalldatetime')) {\r\n // if (value) {\r\n // value = System.convertDateToUTC(value);\r\n // value = (value.getMonth() + 1) + '/' + value.getDate() + '/' + value.getFullYear();\r\n // }\r\n // if (value2) {\r\n // value2 = System.convertDateToUTC(value2);\r\n // value2 = (value2.getMonth() + 1) + '/' + value2.getDate() + '/' + value2.getFullYear();\r\n // }\r\n }\r\n xml += '' + System.textToXML(value) + '';\r\n xml += '' + System.textToXML(value2) + '';\r\n xml += '' + fields[i].Filters[x].Group + '';\r\n xml += '' + !!fields[i].Filters[x].UseCurrentDate1 + '';\r\n xml += '' + !!fields[i].Filters[x].UseCurrentDate2 + '';\r\n for (let y = 0; y < fields[i].Filters[x].FilterOptions.length; y++) {\r\n xml += '';\r\n xml += '' + fields[i].Filters[x].FilterOptions[y].Id + '';\r\n xml += '' + fields[i].Filters[x].FilterOptions[y].Code + '';\r\n xml += '' + System.textToXML(fields[i].Filters[x].FilterOptions[y].CodeDescription) + '';\r\n xml += '' + fields[i].Filters[x].FilterOptions[y].Sequence + '';\r\n xml += '';\r\n }\r\n xml += '' + !!fields[i].Filters[x].UseFilterForStudentSearch + '';\r\n xml += '' + !!fields[i].Filters[x].IsStudentFilter + '';\r\n xml += '' + fields[i].Filters[x].StudentFilterId + '';\r\n xml += '' + !!fields[i].Filters[x].UseFilterForCourseSearch + '';\r\n xml += '' + !!fields[i].Filters[x].UseFilterForStaffSearch + '';\r\n xml += '' + !!fields[i].Filters[x].IsCourseFilter + '';\r\n xml += '' + !!fields[i].Filters[x].CourseFilterId + '';\r\n xml += '' + fields[i].Filters[x].ApplyToAll + '';\r\n xml += '';\r\n }\r\n }\r\n }\r\n if (!fields[i].TransformationFunction && fields[i].FunctionText) {\r\n this.transFunctionChanged(fields[i], false, false);\r\n }\r\n if (fields[i].TransformationFunction) {\r\n xml += '' + fields[i].TransformationFunction + ''; // Note: we deliberately don't use textToXml here because the transformation function is xml\r\n } else {\r\n xml += '';\r\n }\r\n if (fields[i].TransformationFields) {\r\n for (let t = 0; t < fields[i].TransformationFields.length; t++) {\r\n xml += '';\r\n const field = this.information.getField(f => f.ID == fields[i].TransformationFields[t].fieldId && f.CategoryID == fields[i].TransformationFields[t].categoryId);\r\n const category = this.information.categories.find(c => c.ID == fields[i].TransformationFields[t].categoryId);\r\n const object = this.information.objects.find(o => o.ID == category.ObjectID);\r\n xml += '' + fields[i].TransformationFields[t].fieldId + '';\r\n xml += '' + (field != undefined ? System.textToXML(field.FieldName) : System.textToXML(fields[i].FieldName)) + '';\r\n xml += '' + fields[i].TransformationFields[t].categoryId + '';\r\n xml += '' + (this.loginService.LoginSettings.V10 && category != undefined ? category.CategoryName : (field != undefined ? System.textToXML(field.CategoryName) : System.textToXML(fields[i].CategoryName))) + '';\r\n xml += '' + (object != undefined ? System.textToXML(object.ObjectName) : System.textToXML(fields[i].ObjectName)) + '';\r\n xml += '' + t + '';\r\n xml += '';\r\n }\r\n }\r\n xml += '';\r\n }\r\n\r\n // XML Relationships\r\n for (let r = 0; r < this.currentQuery.relationships.length; r++) {\r\n xml += '';\r\n xml += '' + this.currentQuery.relationships[r].ID + '';\r\n xml += '' + this.currentQuery.relationships[r].Category1ID + '';\r\n xml += '' + this.currentQuery.relationships[r].Category2ID + '';\r\n xml += '' + this.currentQuery.relationships[r].Type + '';\r\n xml += '';\r\n }\r\n\r\n // XML Query\r\n xml += '' + this.distinct + '';\r\n xml += '' + this.currentYearOnly + '';\r\n xml += '' + this.currentSchoolOnly + '';\r\n xml += '' + this.currentlyActiveStudentsOnly + '';\r\n xml += '' + System.textToXML(this.currentQuery.siteSectionId) + '';\r\n xml += '' + System.textToXML(this.currentQuery.courseName) + '';\r\n xml += '';\r\n return xml;\r\n }\r\n\r\n getReportTemplateXMLData(rtXML) {\r\n if (rtXML == undefined || rtXML == null || rtXML.trim() == '') {\r\n return '';\r\n }\r\n const parser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(rtXML, 'text/xml');\r\n let xml = '';\r\n xml += '';\r\n xml += '' + xmlDoc.getElementsByTagName('Name')[0].childNodes[0].nodeValue + '';\r\n xml += '';\r\n xml += '';\r\n return xml;\r\n }\r\n\r\n checkDisabledField(field: DataQueryField): boolean {\r\n // PRE: a field to check for disabled\r\n // POST: returns if the field should be disabled\r\n const fieldKey = field.ObjectName + '-' + field.CategoryID + '-' + field.ID;\r\n\r\n // Checking cache\r\n if (this.disabledFields[fieldKey] != undefined) {\r\n return this.disabledFields[fieldKey];\r\n }\r\n\r\n // Creating helper functions\r\n const checkDisabledByCode = (...args): boolean => {\r\n for (let i = 0; i < args.length; i++) {\r\n if (this.userPermissions.find(permission => permission.PermissionCode == args[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n const checkDisabledByName = (...args): boolean => {\r\n for (let i = 0; i < args.length; i++) {\r\n if (this.userPermissions.find(permission => permission.PermissionName == args[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n // The information must be organized for any of this to work\r\n if (!this.information.organized) {\r\n this.information.organize();\r\n }\r\n\r\n // If this is V10, we merely see if the category is fine\r\n if (this.loginService.LoginSettings.V10) {\r\n if (this.userCategories) {\r\n let hasCategory = false;\r\n for (let i = 0; i < this.userCategories.length; i++) {\r\n if (this.userCategories[i] == field.CategoryID) {\r\n hasCategory = true;\r\n break;\r\n }\r\n }\r\n this.disabledFields[fieldKey] = !field.IsConstant && !field.IsCalculated && !hasCategory;\r\n return this.disabledFields[fieldKey];\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n // If this is V9, we have to check a bunch of permissions\r\n else {\r\n\r\n // If we have permission metadata turned on, use that\r\n if (this.loginService.LoginSettings.EnableDataQueryPermissionMetadata) {\r\n\r\n // Checking dynamic permissions\r\n if (field.Permission) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_M_' + field.Permission, 'SD_V_' + field.Permission, 'SD_VASDDS', 'SD_MASDDS');\r\n }\r\n if (this.disabledFields[fieldKey]) {\r\n return this.disabledFields[fieldKey]; // If we're disabled here, the metadata checks won't matter\r\n }\r\n\r\n // Checking static permissions\r\n if (field.ViewPermissionsFromMetadata) {\r\n\r\n // Extracting permissions into permission groups\r\n const permissions = field.ViewPermissionsFromMetadata.split(',').map(permission => permission.trim());\r\n const permissionGroups: { [permissionGroup: string]: string[] } = {};\r\n permissions.forEach(permission => {\r\n let group = 'NOGROUP';\r\n let permissionToAdd = permission;\r\n if (permission.includes('>')) {\r\n const permissionWithGrouping = permission.split('>');\r\n group = permissionWithGrouping[0];\r\n permissionToAdd = permissionWithGrouping[1];\r\n }\r\n else if (permission.includes('>')) {\r\n const permissionWithGrouping = permission.split('>');\r\n group = permissionWithGrouping[0];\r\n permissionToAdd = permissionWithGrouping[1];\r\n }\r\n if (!permissionGroups[group]) {\r\n permissionGroups[group] = [];\r\n }\r\n permissionGroups[group].push(permissionToAdd);\r\n });\r\n\r\n // Checking each permission group\r\n // We need one from each group\r\n Object.keys(permissionGroups).forEach(group => {\r\n if (!this.disabledFields[fieldKey]) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode(...permissionGroups[group]);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Otherwise, use static checks\r\n else {\r\n\r\n // Performing special case object checks\r\n switch (field.ObjectName) {\r\n case 'Staff':\r\n case 'Staff User-Defined':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SUI_VDSD', 'SUI_MDSD');\r\n break;\r\n case 'Student Data for Reporting':\r\n this.disabledFields[fieldKey] = checkDisabledByName('Maintain Student Fields', 'View Student Fields');\r\n break;\r\n case 'Special Education':\r\n this.disabledFields[fieldKey] = checkDisabledByName('View Student IEP Alert Icon');\r\n }\r\n if (this.disabledFields[fieldKey] == true) {\r\n return true;\r\n }\r\n\r\n // If this isn't a staff field, perform a bunch of checks\r\n if (field.ObjectName != 'Staff' && field.ObjectName != 'Staff User-Defined') {\r\n\r\n // Performing field checks\r\n if (field.IsConstant || field.IsCalculated || field.FieldName == null || field.FieldName == undefined) {\r\n this.disabledFields[fieldKey] = false;\r\n return this.disabledFields[fieldKey];\r\n }\r\n switch (field.FieldName) {\r\n case 'Student Portal ID':\r\n case 'Student Portal Password':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VSPLIAP', 'SD_MSPLIAP');\r\n break;\r\n case 'LunchBalance':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('LA_VSLAH', 'LA_MSLAH');\r\n break;\r\n case 'Attd Changes':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('A_VAH', 'A_CAH');\r\n break;\r\n case '#Medical Alerts':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('MR_VMC', 'MR_VAMD', 'MR_CAMD');\r\n break;\r\n case '#Release Alerts':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VSRA', 'SD_ASRA');\r\n break;\r\n case 'SSN':\r\n case 'Former SIS Id':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('GO_VSSSN');\r\n break;\r\n }\r\n if (field.FieldName.includes('LunchStatus') || field.FieldName.includes('LunchEffectiveDate')) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('GO_VSFRS', 'LA_MSLSP');\r\n } else if (field.FieldName.includes('LunchPIN')) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('LA_VSLSP', 'LA_MSLSP');\r\n } else if (field.FieldName.includes('IEPStatus')) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SEIEP_VSISISH');\r\n } else if (field.FieldName.includes('Locker')) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('LM_VLD');\r\n }\r\n if (this.disabledFields[fieldKey] == true) {\r\n return true;\r\n }\r\n\r\n // Performing category checks\r\n switch (field.CategoryName) {\r\n case 'Courses':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VSCAAS', 'SD_MSCAAS');\r\n break;\r\n case 'Family':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VFD', 'SD_MFD');\r\n break;\r\n case 'GPA':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('GR_VG', 'GR_MGHNFT');\r\n break;\r\n case 'Graduation':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VS4YP', 'SD_MS4YP');\r\n break;\r\n case 'Fields':\r\n switch (field.ObjectName) {\r\n case 'Student Schedules':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_VSCAAS', 'SD_MSCAAS');\r\n break;\r\n case 'Teacher Schedules':\r\n case 'Sections':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('CD_VSCSAR', 'CD_MSSFS');\r\n break;\r\n }\r\n break;\r\n }\r\n if (this.disabledFields[fieldKey] == true) {\r\n return true;\r\n }\r\n\r\n // Performing object checks\r\n switch (field.ObjectName) {\r\n case 'Assessments':\r\n case 'Assessments Best':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('AS_VAS', 'AS_MSFIS', 'AS_DSTS') || field.Permission == 'No';\r\n break;\r\n case 'Courses':\r\n this.disabledFields[fieldKey] = checkDisabledByCode('CD_VDSL', 'CD_MDSL');\r\n break;\r\n case 'Behavior':\r\n if (field.CategoryName == 'Incidents' || field.CategoryName == 'Events' || field.CategoryName == 'Actions') {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('PD_VDSU', 'PD_VDAU');\r\n }\r\n break;\r\n default:\r\n if (field.Permission) {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('SD_M_' + field.Permission, 'SD_V_' + field.Permission, 'SD_VASDDS', 'SD_MASDDS');\r\n break;\r\n }\r\n }\r\n if (field.ObjectName == 'Programs and Services') {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('PS_VASPAS', 'PS_MASPAS', 'PS_VPAS', 'PS_MPAS');\r\n }\r\n\r\n if (field.ObjectName == 'Sections') {\r\n if (field.FieldName != 'Teacher SSN' && field.FieldName != 'Substitute Teacher SSN') {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('CD_VSCSAR', 'CD_MSSFS');\r\n }\r\n else {\r\n this.disabledFields[fieldKey] = checkDisabledByCode('GO_VFSSSN');\r\n }\r\n }\r\n if (this.disabledFields[fieldKey] == true) {\r\n return true;\r\n }\r\n } else {\r\n if (field.FieldName == 'SSN' && checkDisabledByCode('GO_VFSSSN')) {\r\n this.disabledFields[fieldKey] = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If it hasn't been set yet, set it to false\r\n if (this.disabledFields[fieldKey] == undefined) {\r\n this.disabledFields[fieldKey] = false;\r\n }\r\n\r\n // Returns that disabled field\r\n return this.disabledFields[fieldKey];\r\n }\r\n\r\n checkEditableField(field: DataQueryField): boolean {\r\n // PRE: a field to check for editability\r\n // POST: returns if the field should be editable\r\n const fieldKey = field.ObjectName + '-' + field.CategoryID + '-' + field.ID;\r\n\r\n // Checking cache\r\n if (this.editableFields[fieldKey] != undefined) {\r\n return this.editableFields[fieldKey];\r\n }\r\n\r\n // Creating helper functions\r\n const hasPermissionsByCode = (...args): boolean => {\r\n let ret = true;\r\n for (let i = 0; i < args.length; i++) {\r\n if (this.userPermissions.find(permission => permission.PermissionCode == args[i])) {\r\n ret = false;\r\n }\r\n }\r\n return ret;\r\n };\r\n\r\n // The information must be organized for any of this to work\r\n if (!this.information.organized) {\r\n this.information.organize();\r\n }\r\n\r\n // V10 is never editable, so always return false for v10\r\n if (this.loginService.LoginSettings.V10) {\r\n this.editableFields[fieldKey] = false;\r\n }\r\n\r\n // If this is V9, we check the fields and possibly the permissions\r\n else {\r\n\r\n // Fields are marked as editable on the database.\r\n this.editableFields[fieldKey] = field.Editable;\r\n\r\n // If we have permission metadata turned on, also use that\r\n if (\r\n field.Editable\r\n && this.loginService.LoginSettings.EnableDataQueryPermissionMetadata\r\n && field.UpdatePermissionsFromMetadata\r\n ) {\r\n const permissions = field.UpdatePermissionsFromMetadata.split(',').map(permission => permission.trim());\r\n this.editableFields[fieldKey] = hasPermissionsByCode(...permissions);\r\n }\r\n }\r\n\r\n // If it hasn't been set yet, set it to false\r\n if (this.editableFields[fieldKey] == undefined) {\r\n this.editableFields[fieldKey] = false;\r\n }\r\n\r\n // Returns that disabled field\r\n return this.editableFields[fieldKey];\r\n }\r\n\r\n updateFilter(filter = null, field = null) {\r\n // POST: updates the filter translation of the data query\r\n\r\n // Checking that we have a field somewhere\r\n if (filter != null && field == null) {\r\n field = filter.field;\r\n }\r\n\r\n // Setting the filter translation\r\n const groups = [];\r\n const applyToAllGroup = [];\r\n this.currentQuery.filterTranslation = '';\r\n let groupCount = 0;\r\n for (let x = 0; x < this.currentQuery.filterFields.length; x++) {\r\n const filterField = this.currentQuery.filterFields[x];\r\n for (let n = 0; n < filterField.Filters.length; n++) {\r\n if (filterField.IsDefaultStudentSearchFilter == false\r\n || filterField.Filters[n].UseFilterForStudentSearch == true\r\n || filterField.Filters[n].UseFilterForCourseSearch == true\r\n || filterField.Filters[n].UseFilterForStaffSearch == true\r\n ) {\r\n if (groups[filterField.Filters[n].Group] == null && (filterField.Filters[n].ApplyToAll == null || filterField.Filters[n].ApplyToAll == false)) {\r\n groups[filterField.Filters[n].Group] = [];\r\n }\r\n let value = (filterField.Filters[n].Value == '' ? '\"\"' : filterField.Filters[n].Value);\r\n const value2 = (filterField.Filters[n].Value2 == '' ? '\"\"' : filterField.Filters[n].Value2);\r\n\r\n if ((value != '') && (filterField.FieldName == 'StudentsListfilter' || filterField.FieldName == 'StudentsTeamfilter')) {\r\n const teamListValue = filterField.Filters[n].FilterOptions.find(w => w.Id == value).Code;\r\n if (teamListValue != undefined) {\r\n value = teamListValue;\r\n }\r\n }\r\n\r\n if (filterField.Filters[n].Operator != 'Between' && filterField.DisplayName != DataQueryFieldFilter.courseFilterDisplayName) {\r\n filterField.Filters[n].Value2 = '';\r\n filterField.Filters[n].dateValue2 = null;\r\n }\r\n if (filterField.Filters[n].Operator == 'Is Blank' || filterField.Filters[n].Operator == 'Is Not Blank') {\r\n filterField.Filters[n].Value = '';\r\n filterField.Filters[n].dateValue = null;\r\n }\r\n\r\n // We only perform updates to the filter translation for filters that are included\r\n if (\r\n (!this.isStudentSearch && !this.isCourseSearch && !this.isStaffSearch)\r\n || (!this.V10 && !this.isStudentSearch && !this.isStaffSearch && !filterField.IsDefaultFilterField)\r\n || (this.V10 && !filterField.IsDefaultFilterField)\r\n || filterField.Filters[n].UseFilterForStudentSearch\r\n || filterField.Filters[n].UseFilterForCourseSearch\r\n || filterField.Filters[n].UseFilterForStaffSearch\r\n ) {\r\n if (filterField.Filters[n].ApplyToAll == null || filterField.Filters[n].ApplyToAll == false) {\r\n groups[filterField.Filters[n].Group].push({\r\n DisplayName: filterField.DisplayName,\r\n Operator: filterField.Filters[n].Operator,\r\n Value: value,\r\n Value2: value2,\r\n DataType: filterField.DataType\r\n });\r\n } else {\r\n applyToAllGroup.push({\r\n DisplayName: filterField.DisplayName,\r\n Operator: filterField.Filters[n].Operator,\r\n Value: value,\r\n Value2: value2,\r\n DataType: filterField.DataType\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const groupIds = Object.keys(groups);\r\n for (let i = 0; i < groupIds.length; i++) {\r\n const g = groupIds[i];\r\n groupCount += 1;\r\n if (groupCount > 1) {\r\n this.currentQuery.filterTranslation += ' OR ';\r\n }\r\n this.currentQuery.filterTranslation += '(';\r\n for (let j = 0; j < groups[g].length; j++) {\r\n if (j > 0) {\r\n this.currentQuery.filterTranslation += ' AND ';\r\n }\r\n\r\n let value = groups[g][j].Value;\r\n let value2 = groups[g][j].Value2;\r\n\r\n if (groups[g][j].DataType.toLowerCase() == 'char' || groups[g][j].DataType.toLowerCase() == 'varchar' || groups[g][j].DataType.toLowerCase() == 'datetime' || groups[g][j].DataType.toLowerCase() == 'smalldatetime') {\r\n value = '\\'' + groups[g][j].Value + '\\'';\r\n value2 = '\\'' + groups[g][j].Value2 + '\\'';\r\n }\r\n\r\n if (groups[g][j].Operator == 'Between') {\r\n this.currentQuery.filterTranslation += groups[g][j].DisplayName + ' is between ' + value + ' and ' + value2;\r\n } else if (groups[g][j].Operator == 'Is Blank' || groups[g][j].Operator == 'Is Not Blank') {\r\n this.currentQuery.filterTranslation += groups[g][j].DisplayName + ' ' + groups[g][j].Operator;\r\n } else if (groups[g][j].Operator == 'In List' || groups[g][j].Operator == 'Not In List') {\r\n this.currentQuery.filterTranslation += groups[g][j].DisplayName + ' ' + groups[g][j].Operator + '(' + value + ')';\r\n } else {\r\n this.currentQuery.filterTranslation += groups[g][j].DisplayName + ' ' + groups[g][j].Operator + ' ' + value;\r\n }\r\n }\r\n this.currentQuery.filterTranslation += ')';\r\n }\r\n if (applyToAllGroup.length > 0) {\r\n this.currentQuery.filterTranslation = '(' + this.currentQuery.filterTranslation + ')';\r\n if (this.currentQuery.filterTranslation.length > 0) {\r\n this.currentQuery.filterTranslation += ' AND ';\r\n }\r\n this.currentQuery.filterTranslation += '(';\r\n for (let a = 0; a < applyToAllGroup.length; a++) {\r\n if (a > 0) {\r\n this.currentQuery.filterTranslation += ' OR ';\r\n }\r\n\r\n let value = applyToAllGroup[a].Value;\r\n let value2 = applyToAllGroup[a].Value2;\r\n\r\n if (applyToAllGroup[a].DataType.toLowerCase() == 'char' || applyToAllGroup[a].DataType.toLowerCase() == 'varchar' || applyToAllGroup[a].DataType.toLowerCase() == 'datetime' || applyToAllGroup[a].DataType.toLowerCase() == 'smalldatetime') {\r\n value = '\\'' + applyToAllGroup[a].Value + '\\'';\r\n value2 = '\\'' + applyToAllGroup[a].Value2 + '\\'';\r\n }\r\n\r\n if (applyToAllGroup[a].Operator == 'Between') {\r\n this.currentQuery.filterTranslation += applyToAllGroup[a].DisplayName + ' is between ' + value + ' and ' + value2;\r\n } else if (applyToAllGroup[a].Operator == 'Is Blank' || applyToAllGroup[a].Operator == 'Is Not Blank') {\r\n this.currentQuery.filterTranslation += applyToAllGroup[a].DisplayName + ' ' + applyToAllGroup[a].Operator;\r\n } else if (applyToAllGroup[a].Operator == 'In List' || applyToAllGroup[a].Operator == 'Not In List') {\r\n this.currentQuery.filterTranslation += applyToAllGroup[a].DisplayName + ' ' + applyToAllGroup[a].Operator + '(' + value + ')';\r\n } else {\r\n this.currentQuery.filterTranslation += applyToAllGroup[a].DisplayName + ' ' + applyToAllGroup[a].Operator + ' ' + value;\r\n }\r\n }\r\n this.currentQuery.filterTranslation += ')';\r\n }\r\n\r\n // Setting the errors on the filter\r\n if (field != null && filter != null) {\r\n if (field.DataType.toLowerCase() == 'int' || field.DataType.toLowerCase() == 'decimal' || field.DataType.toLowerCase() == 'float'\r\n || field.DataType.toLowerCase() == 'money' || field.DataType.toLowerCase() == 'bigint' || field.DataType.toLowerCase() == 'smallint'\r\n || field.DataType.toLowerCase() == 'tinyint' || field.DataType.toLowerCase() == 'numeric'\r\n || field.DataType.toLowerCase() == 'smalldatetime') {\r\n filter.showFilterError1 = false;\r\n filter.showFilterError2 = false;\r\n\r\n if (field.DataType.toLowerCase() == 'smalldatetime') {\r\n if (this.isValidDate(filter.Value) == false) {\r\n filter.showFilterError1 = true;\r\n }\r\n if (this.isValidDate(filter.Value2) == false && filter.Operator == 'Between') {\r\n filter.showFilterError2 = true;\r\n }\r\n } else {\r\n if (isNaN(filter.Value)) {\r\n filter.showFilterError1 = true;\r\n }\r\n if (isNaN(filter.Value2) && filter.Operator == 'Between') {\r\n filter.showFilterError2 = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n isValidDate(d) {\r\n if (d != undefined && d != '') {\r\n if (moment(d).isValid() == false) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n return true;\r\n }\r\n\r\n splitFunctionString(fnText) {\r\n const operatorList = this.operators.map(operator => operator.Display);\r\n let parenCount = 0;\r\n const result = [];\r\n let currentString = '';\r\n let isStringLiteral = false;\r\n let isFieldName = false;\r\n for (let i = 0; i < fnText.length; i++) {\r\n currentString += fnText[i];\r\n\r\n // Catching string literals\r\n if (fnText[i] == '\"') {\r\n if (isStringLiteral == true && parenCount == 0) {\r\n result.push(currentString.trim());\r\n currentString = '';\r\n }\r\n isStringLiteral = !isStringLiteral;\r\n }\r\n if (isStringLiteral == false) {\r\n\r\n // Catching field names\r\n if (parenCount == 0) {\r\n if (fnText[i] == '[') {\r\n isFieldName = true;\r\n if (currentString.substring(0, currentString.length - 1).trim() != '') {\r\n result.push(currentString.substring(0, currentString.length - 1));\r\n }\r\n currentString = fnText[i];\r\n } else if (fnText[i] == ']') {\r\n isFieldName = false;\r\n result.push(currentString);\r\n currentString = '';\r\n }\r\n }\r\n if (isFieldName == false) {\r\n\r\n // Catching parenthesis\r\n if (fnText[i] == '(') {\r\n parenCount++;\r\n } else if (parenCount > 0) {\r\n if (fnText[i] == ')') {\r\n parenCount--;\r\n if (parenCount == 0) {\r\n if (currentString.trim() != '') {\r\n result.push(currentString.trim());\r\n }\r\n currentString = '';\r\n }\r\n }\r\n }\r\n\r\n // Catching operands\r\n else if (currentString.trim() != '' && this.operators.find(op => op.Display == currentString)) {\r\n let operatorText = currentString;\r\n let operator: DataQueryOperator;\r\n\r\n // Looking ahead as well\r\n let j = i;\r\n let moveIndex = i;\r\n while (this.operators.find(op => op.Display.includes(operatorText))) {\r\n const lookAheadOperator = this.operators.find(op => op.Display == operatorText);\r\n if (lookAheadOperator) {\r\n operator = lookAheadOperator;\r\n moveIndex = j;\r\n }\r\n j += 1;\r\n operatorText += fnText[j];\r\n }\r\n\r\n // Adding the operator and moving ahead\r\n result.push(operator.Display);\r\n currentString = '';\r\n i = moveIndex;\r\n }\r\n\r\n // Catching other literals\r\n else if (\r\n fnText[i] == ' '\r\n && currentString.trim() != ''\r\n ) {\r\n result.push(currentString.trim());\r\n currentString = '';\r\n }\r\n }\r\n }\r\n\r\n // Catches the remaining contents of the string\r\n if (i + 1 == fnText.length) {\r\n if (currentString.trim() != '') {\r\n result.push(currentString.trim());\r\n }\r\n currentString = '';\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n addRosterFilter(rosterFilterCourses?: ClassroomSummary[], _callback?: Function, query?: DataQuery) {\r\n // PRE: optionally, a list of courses or a callback function\r\n // POST: if courses are provided, uses those to add roster filters\r\n // \t\tIf no courses are provided, opens a dialog to select a number of courses.\r\n // \t\t\tThen, adds those courses as a filter and calls the callback.\r\n\r\n // If a query is not supplied, use the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Utility function for handling courses\r\n const handleCourses = (courses: ClassroomSummary[]) => {\r\n\r\n // We only do anything if we have some courses\r\n if (courses && courses.length > 0) {\r\n\r\n // Obtaining the right object and category\r\n const studentObject = this.information.objects.find(object => object.ObjectName.toLowerCase() == 'student');\r\n if (studentObject) {\r\n const demographicsCategory = studentObject.categories.find(category =>\r\n category.CategoryName.toLowerCase() == (this.loginService.LoginSettings.V10 ? 'student demographics' : 'demographics')\r\n );\r\n if (demographicsCategory) {\r\n\r\n // Creating a helper function to add the fields to the correct spots\r\n const addStudentField = (field: DataQueryField) => {\r\n if (field) {\r\n field.SortDirection = 'None';\r\n field.ShowOnReport = true;\r\n if (query.reportFields.length > 0) {\r\n for (let i = 0; i < query.reportFields.length; i++) {\r\n const studentField = query.reportFields.find(f =>\r\n f.ID == field.ID && f.CategoryID == field.CategoryID\r\n );\r\n if (studentField == null) {\r\n query.reportFields.push(field);\r\n }\r\n if (\r\n !query.reportFields[i].TransformationFields ||\r\n query.reportFields[i].TransformationFields.length == 0\r\n ) {\r\n query.reportFields[i].FunctionText = this.getTransFunctionText(query.reportFields[i]);\r\n query.reportFields[i].TransformationFields = [\r\n {\r\n fieldId: query.reportFields[i].ID,\r\n categoryId: query.reportFields[i].CategoryID,\r\n position: 0,\r\n sql: ''\r\n }\r\n ];\r\n }\r\n }\r\n } else {\r\n query.reportFields.push(field);\r\n }\r\n query.sortFields.push(field);\r\n }\r\n };\r\n\r\n // Performing the additions on each student field\r\n const studentFields = [];\r\n studentFields.push(\r\n demographicsCategory.fields.find(field =>\r\n (this.loginService.LoginSettings.V10 && field.FieldName.toLowerCase() == 'studentname')\r\n || (!this.loginService.LoginSettings.V10 && field.DisplayName == 'Name - Full')\r\n ),\r\n demographicsCategory.fields.find(field =>\r\n (this.loginService.LoginSettings.V10 && field.FieldName.toLowerCase() == 'student_number')\r\n || (!this.loginService.LoginSettings.V10 && field.DisplayName == 'Student #')\r\n )\r\n );\r\n\r\n // ONE-5675\r\n if ((this.loginService.LoginSettings.V10) || (!this.loginService.LoginSettings.V10 && query.reportFields.length == 0)) {\r\n studentFields.forEach(studentField => {\r\n if (!query.reportFields.includes(studentField)) {\r\n addStudentField(studentField);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Finding the filter for roster classes\r\n let courseFilterField = query.filterFields.find(field =>\r\n field.DisplayName == DataQueryFieldFilter.courseFilterDisplayName && field.CategoryID == demographicsCategory.ID\r\n );\r\n if (courseFilterField == null) {\r\n courseFilterField = this.information.getField(field =>\r\n field.DisplayName == DataQueryFieldFilter.courseFilterDisplayName && field.CategoryID == demographicsCategory.ID\r\n );\r\n if (courseFilterField != null) {\r\n courseFilterField.Visible = true;\r\n courseFilterField.Filters = [];\r\n query.filterFields.push(courseFilterField);\r\n }\r\n }\r\n\r\n // If we have a filter, then set it up\r\n if (courseFilterField) {\r\n query.queryChanged = true;\r\n let strGroup;\r\n let intAscii;\r\n let intTmpAscii = 64;\r\n for (let l = 0; l < query.filterFields.length; l++) {\r\n for (let j = 0; j < query.filterFields[l].Filters.length; j++) {\r\n strGroup = query.filterFields[l].Filters[j].Group;\r\n intAscii = strGroup.charCodeAt(0);\r\n if (intAscii > intTmpAscii) {\r\n intTmpAscii = intAscii;\r\n }\r\n }\r\n }\r\n\r\n // Creating the filters for each course\r\n for (let i = 0; i < courses.length; i++) {\r\n\r\n // Setting up the course name\r\n let courseName = this.userPreferencesService.generalPreferences.SelectedClassesOptionText;\r\n if (courseName == null || courseName == '') {\r\n courseName = this.loginService.LoginSettings.V10 == false ? 'Course Name (Course Number-Section) Meets' : 'Course Name (Course Number-Section) M: Meets';\r\n }\r\n courseName = courseName.replace('Course Name', courses[i].Course);\r\n courseName = courseName.replace('Course Number', courses[i].SubjectCode);\r\n courseName = courseName.replace('Section', courses[i].Section);\r\n if (courses[i].Meets != null) {\r\n courseName = courseName.replace('Meets', courses[i].Meets);\r\n } else {\r\n courseName = courseName.replace('M: Meets', '');\r\n }\r\n\r\n // Setting up the course menu text\r\n courses[i].CourseMenuText = courseName;\r\n\r\n // Creating the filter\r\n intTmpAscii += 1;\r\n const filter = new DataQueryFieldFilter();\r\n filter.FilterID = DataQueryService.filterFieldId;\r\n filter.Operator = '=';\r\n filter.Value = courseName;\r\n filter.Value2 = courses[i].Id;\r\n filter.Group = String.fromCharCode(intTmpAscii);\r\n filter.DisplayMenu = false;\r\n filter.UseCurrentDate1 = false;\r\n filter.UseCurrentDate2 = false;\r\n filter.FilterOptions = [];\r\n filter.UseFilterForStudentSearch = true;\r\n filter.IsStudentFilter = false;\r\n filter.StudentFilterId = 0;\r\n filter.IsCourseFilter = false;\r\n filter.CourseFilterId = 0;\r\n filter.ApplyToAll = true;\r\n filter.field = courseFilterField;\r\n\r\n // Incrementing the filter Id\r\n DataQueryService.filterFieldId = DataQueryService.filterFieldId + 1;\r\n\r\n // Adding the course name so it registers as a roster query\r\n query.siteSectionId = query.siteSectionId + ',' + courses[i].Id;\r\n query.courseName = courseName;\r\n\r\n }\r\n this.originalQuery.siteSectionId = query.siteSectionId;\r\n // Setting the query as changed to force reloading results and saving\r\n query.queryChanged = true;\r\n\r\n // Setting up the report parameters\r\n this.setShowOnReportParameters();\r\n }\r\n }\r\n }\r\n };\r\n\r\n // If courses are provided, use those\r\n if (rosterFilterCourses) {\r\n handleCourses(rosterFilterCourses);\r\n }\r\n\r\n // If no courses are provided, fetch them\r\n else {\r\n const dialogBox = this.dialog.open(SelectCourseDialogComponent, {\r\n disableClose: true,\r\n // hasBackdrop: false,\r\n panelClass: 'tyl-mat-dialog',\r\n data: {\r\n multiselect: true,\r\n headerText: 'Add Roster Filter'\r\n }\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(courses => {\r\n\r\n // Unsubscribing to prevent memory leaks\r\n subscription.unsubscribe();\r\n\r\n // Setting the roster filter on the service\r\n handleCourses(courses);\r\n\r\n // Re-establishing filter fields\r\n this.currentQuery.filterFields.forEach(field => {\r\n field.Filters.forEach(filter => {\r\n\r\n // Ensuring the filter is associated\r\n filter.field = field;\r\n\r\n // Setting the operator to the first viable one if one doesn't exist\r\n if (!filter.Operator) {\r\n const operators = filter.getFilterOperators();\r\n filter.Operator = operators[0];\r\n }\r\n });\r\n });\r\n\r\n // Setting table data\r\n if (_callback) {\r\n _callback(courses);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getAllFields(query?: DataQuery, forSave = false, forSortOrder = false): DataQueryField[] {\r\n // PRE: the information and either a query is supplied or the current query is set\r\n // POST: obtains the fields for results\r\n\r\n // Setting the query to the current query if none is supplied\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Enforcing sort orders by index\r\n if (forSortOrder == true) {\r\n for (let i = 0; i < query.sortFields.length; i++) {\r\n query.sortFields[i].SortOrder = i; // Input -1 to make this identical to JS\r\n }\r\n }\r\n\r\n // Duplicating rFields and fFields to prevent changes from propagating outside results\r\n const rFields: DataQueryField[] = [];\r\n const fFields: DataQueryField[] = [];\r\n if (query != null) {\r\n\r\n // Setting report fields to a copy\r\n query.reportFields.forEach(field => {\r\n const object = field.object;\r\n const category = field.category;\r\n field.object = null;\r\n field.category = null;\r\n field.Filters.forEach(filter => {\r\n filter.field = null;\r\n });\r\n\r\n // ONE-8014..\r\n if (query.sortFields != null && query.sortFields.length > 0) {\r\n const sortField = query.sortFields.find(x => x.ID == field.ID);\r\n if (sortField != null) {\r\n field.SortDirection = sortField.SortDirection;\r\n field.SortOrder = sortField.SortOrder;\r\n field.Break = sortField.Break;\r\n }\r\n }\r\n\r\n rFields.push(cloneDeep(field));\r\n field.object = object;\r\n field.category = category;\r\n if (this.loginService.LoginSettings.V10) {\r\n field.Filters.forEach(filter => {\r\n filter.field = field;\r\n });\r\n }\r\n });\r\n\r\n // Setting the filter fields to a copy\r\n query.filterFields.forEach(field => {\r\n const object = field.object;\r\n const category = field.category;\r\n field.object = null;\r\n field.category = null;\r\n field.Filters.forEach(filter => {\r\n filter.field = null;\r\n });\r\n fFields.push(cloneDeep(field));\r\n field.object = object;\r\n field.category = category;\r\n if (this.loginService.LoginSettings.V10) {\r\n field.Filters.forEach(filter => {\r\n filter.field = field;\r\n });\r\n }\r\n });\r\n }\r\n\r\n // Getting all filters from student filter or course filter\r\n for (let f = 0; f < fFields.length; f++) {\r\n const field = fFields[f];\r\n const studentFilters = field.Filters.filter(filter => filter.IsStudentFilter);\r\n const courseFilters = field.Filters.filter(filter => filter.IsCourseFilter);\r\n for (let sf = 0; sf < studentFilters.length; sf++) {\r\n const filter = studentFilters[sf];\r\n if (filter.StudentFilterId != null) {\r\n const filterId = parseInt(filter.StudentFilterId.toString(), 10);\r\n const studentFilterQuery = this._studentFilters.find(studentFilter => studentFilter.ID == filterId);\r\n if (studentFilterQuery != null) {\r\n let filterGroup = 'A';\r\n for (let i = field.Filters.length - 1; i >= 0; i--) {\r\n if (field.Filters[i].FilterID == filter.FilterID) {\r\n filterGroup = field.Filters[i].Group;\r\n field.Filters.splice(i, 1);\r\n fFields.splice(f, 1);\r\n break;\r\n }\r\n }\r\n const queryObj = this.getObjectFromXML(studentFilterQuery.QueryXML);\r\n for (let qf = 0; qf < queryObj.filterFields.length; qf++) {\r\n // NOTE: We unset the references for safety\r\n for (let x = 0; x < queryObj.filterFields[qf].Filters.length; x++) {\r\n queryObj.filterFields[qf].Filters[x].Group = filterGroup;\r\n queryObj.filterFields[qf].Filters[x].field = null;\r\n }\r\n queryObj.filterFields[qf].ShowOnReport = false;\r\n queryObj.filterFields[qf].object = null;\r\n queryObj.filterFields[qf].category = null;\r\n fFields.push(queryObj.filterFields[qf]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let cf = 0; cf < courseFilters.length; cf++) {\r\n const filter = courseFilters[cf];\r\n if (filter.CourseFilterId != null) {\r\n const filterId = parseInt(filter.CourseFilterId.toString(), 10);\r\n const courseFilterQuery = this._courseFilters.find(courseFilter => courseFilter.ID == filterId);\r\n if (courseFilterQuery != null) {\r\n let filterGroup = 'A';\r\n for (let i = field.Filters.length - 1; i >= 0; i--) {\r\n if (field.Filters[i].FilterID == filter.FilterID) {\r\n filterGroup = field.Filters[i].Group;\r\n field.Filters.splice(i, 1);\r\n fFields.splice(cf, 1);\r\n break;\r\n }\r\n }\r\n const queryObj = this.getObjectFromXML(courseFilterQuery.QueryXML);\r\n for (let qf = 0; qf < queryObj.filterFields.length; qf++) {\r\n // NOTE: We unset the references for safety\r\n for (let x = 0; x < queryObj.filterFields[qf].Filters.length; x++) {\r\n queryObj.filterFields[qf].Filters[x].Group = filterGroup;\r\n queryObj.filterFields[qf].Filters[x].field = null;\r\n }\r\n queryObj.filterFields[qf].ShowOnReport = false;\r\n queryObj.filterFields[qf].object = null;\r\n queryObj.filterFields[qf].category = null;\r\n fFields.push(queryObj.filterFields[qf]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Setting the report parameters for the results\r\n this.setShowOnReportParameters(query);\r\n\r\n // We enforce transformation fields here, but the JS app sets them before this\r\n rFields.forEach(rField => {\r\n if (!rField.TransformationFields || rField.TransformationFields.length == 0 && rField.ID > 0 && rField.CategoryID > 0) {\r\n rField.TransformationFields = [\r\n {\r\n fieldId: rField.ID,\r\n categoryId: rField.CategoryID,\r\n position: 0,\r\n sql: ''\r\n }\r\n ];\r\n }\r\n });\r\n\r\n // Seeing up the report fields based on the transformation fields\r\n // NOTE: we don't want to do this while we are saving or we'll get some bunk fields\r\n if (!forSave) {\r\n for (let n = 0; n < rFields.length; n++) {\r\n if (rFields[n].TransformationFields != null) {\r\n for (let t = 0; t < rFields[n].TransformationFields.length; t++) {\r\n const fieldId = rFields[n].TransformationFields[t].fieldId;\r\n let field = rFields.find(rField =>\r\n rField.ID == rFields[n].TransformationFields[t].fieldId &&\r\n rField.CategoryID == rFields[n].TransformationFields[t].categoryId\r\n );\r\n if (field == null) {\r\n field = this.information.getField(f =>\r\n f.ID == rFields[n].TransformationFields[t].fieldId &&\r\n f.CategoryID == rFields[n].TransformationFields[t].categoryId\r\n );\r\n }\r\n if (field != null &&\r\n rFields.find(rField => rField.ID == field.ID && rField.CategoryID == field.CategoryID) == null) {\r\n const category = this.information.categories.find(c => c.ID == field.CategoryID);\r\n if (category != null && (field.ObjectName == null || field.ObjectName == undefined)) {\r\n const object = this.information.objects.find(o => o.ID == category.ObjectID);\r\n if (object != null) {\r\n field.ObjectName = object.ObjectName;\r\n }\r\n }\r\n field.IsDuplicate = field.IsDuplicate == undefined ? false : field.IsDuplicate;\r\n rFields.push(field);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Adding filter fields to the returned fields\r\n rFields.forEach(rField => {\r\n rField.Filters = [];\r\n });\r\n for (let i = 0; i < fFields.length; i++) {\r\n const field = rFields.find(rField => rField.ID == fFields[i].ID && rField.CategoryID == fFields[i].CategoryID);\r\n if (field != null) {\r\n if (this.loginService.LoginSettings.V10 == false) {\r\n fFields[i].Filters.forEach(object => {\r\n object.field = null;\r\n });\r\n }\r\n fFields[i].Filters.forEach(filter => {\r\n const matchingFieldFilter = field.Filters.find(fieldFilter =>\r\n filter.Value == fieldFilter.Value\r\n && filter.Value2 == fieldFilter.Value2\r\n && filter.Operator == fieldFilter.Operator\r\n && filter.Group == fieldFilter.Group\r\n && filter.FilterID == fieldFilter.FilterID\r\n );\r\n if (!matchingFieldFilter) {\r\n field.Filters.push(filter);\r\n }\r\n });\r\n } else {\r\n rFields.push(fFields[i]);\r\n }\r\n }\r\n\r\n return rFields;\r\n }\r\n\r\n resetResultProperties() {\r\n // POST: resets all the properties used for results\r\n this.results = null;\r\n this.recordCount = null;\r\n this.pageCount = null;\r\n this.queryResultTable = [];\r\n if (this.currentQuery) {\r\n this.currentQuery.SQLScript = '';\r\n }\r\n this.currentPage = 1;\r\n this.retrievedData = [];\r\n this.currentQuery.queryChangedSinceLastResult = true;\r\n }\r\n\r\n setShowOnReportParameters(query?: DataQuery) {\r\n // POST: sets up the fields for the reports\r\n\r\n // Defaulting to the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Setting rport parameters\r\n for (let i = 0; i < query.filterFields.length; i++) {\r\n query.filterFields[i].ShowOnReport = false;\r\n }\r\n for (let i = 0; i < query.reportFields.length; i++) {\r\n const reportField = query.reportFields[i];\r\n reportField.ShowOnReport = true;\r\n if (reportField.FunctionText == null || reportField.FunctionText == '') {\r\n reportField.TransformationFields = [];\r\n let viewName = '';\r\n const category = this.information.categories.find(cat => cat.ID == reportField.CategoryID);\r\n if (category != null) {\r\n viewName = category.ViewName;\r\n } else {\r\n console.warn('No category for reportField.TransformationField sql');\r\n }\r\n const textToInsert = this.getTransFunctionText(reportField);\r\n const sqlToInsert = (reportField.FieldName && reportField.FieldName != '') ? ('vw' + viewName + '.[' + reportField.FieldName + ']') : '';\r\n reportField.FunctionText = textToInsert;\r\n const trans = {\r\n fieldId: reportField.ID,\r\n categoryId: reportField.CategoryID,\r\n sql: sqlToInsert,\r\n position: 0\r\n };\r\n reportField.TransformationFields.push(trans);\r\n this.transFunctionChanged(reportField);\r\n }\r\n }\r\n }\r\n\r\n reorderResults(indexA, indexB) {\r\n // PRE: two indexes to switch\r\n // POST: switches the indexes on all results\r\n this.results.reorder(indexA, indexB);\r\n }\r\n\r\n exportResults(callback?: Function) {\r\n // POST: exports the results to the client based on the export settings on the query\r\n\r\n // Validating our syntax\r\n let validSyntax = true;\r\n this.currentQuery.reportFields.forEach(rField => {\r\n // Remove circular structure to JSON\r\n if (rField.object != undefined) {\r\n rField.object = null;\r\n }\r\n if (rField.category != undefined) {\r\n rField.category = null;\r\n }\r\n const reportField = cloneDeep(rField);\r\n this.validateSyntax(reportField, reportField.FunctionText);\r\n if (reportField.FunctionError && reportField.FunctionError.length > 0) {\r\n validSyntax = false;\r\n }\r\n });\r\n\r\n // If the syntax is valid, exporting results\r\n if (validSyntax) {\r\n this.getResultsAsString().pipe(take(1)).subscribe(\r\n fileData => {\r\n\r\n // Setting the variables required for the file\r\n let fileType: string;\r\n let fileName = this.currentQuery.QueryName ? this.currentQuery.QueryName : 'Data Query';\r\n\r\n // Composing excel file\r\n if (this.currentQuery.ExportType == 'Excel') {\r\n fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset-utf-8;';\r\n fileName += '.xlsx';\r\n System.saveFile(fileData, fileType, fileName);\r\n }\r\n\r\n // Composing text file\r\n else {\r\n fileType = this.currentQuery.Delimiter != 'Comma' ? 'text/plain' : 'application/csv' + ';charset-utf-8;';\r\n fileName += this.currentQuery.Delimiter != 'Comma' ? '.txt' : '.csv';\r\n System.saveFile(btoa(unescape(encodeURIComponent(fileData))), fileType, fileName);\r\n }\r\n\r\n // Calling the callback\r\n if (callback) {\r\n callback(true);\r\n }\r\n }\r\n );\r\n } else {\r\n callback(false);\r\n }\r\n }\r\n\r\n checkDefaultFilterFields(fields?: DataQueryField[], fieldMutator = (field: DataQueryField) => {\r\n }) {\r\n // PRE: the fields in the information is set or fields are provided. The information must also be organized.\r\n // POST: checks the fields and sets the default filter fields\r\n\r\n // Determining which fields to use\r\n if (!fields) {\r\n fields = this.information.fields;\r\n }\r\n\r\n // V10 uses different fields\r\n if (this.loginService.LoginSettings.V10) {\r\n\r\n // Helper Function to mutate fields\r\n const mutateField = (columnName: string, category: DataQueryCategory) => {\r\n const field = category.fields.find(f =>\r\n f.FieldName.toLowerCase() == columnName.toLowerCase()\r\n );\r\n if (field) {\r\n if (columnName != 'PrimaryJob') {\r\n field.IsDefaultFilterField = true;\r\n }\r\n fieldMutator(field);\r\n }\r\n };\r\n const mutateAllFields = (columnNames: string[], category: DataQueryCategory) => {\r\n for (let i = 0; i < columnNames.length; i++) {\r\n mutateField(columnNames[i], category);\r\n }\r\n };\r\n\r\n // Student Search\r\n if (this.isStudentSearch) {\r\n\r\n // Set demographic fields\r\n let demographicsCategory = null;\r\n const studentObject = this.information.objects.find(object => object.ObjectName == 'Student');\r\n if (studentObject) {\r\n demographicsCategory = studentObject.categories.find(category =>\r\n category.CategoryName == (this.loginService.LoginSettings.V10 ? 'Student Demographics' : 'Demographics')\r\n );\r\n if (demographicsCategory) {\r\n mutateAllFields(\r\n [\r\n 'STUDENT_NUMBER',\r\n 'student_id',\r\n 'FIRST_NAME',\r\n 'LAST_NAME',\r\n 'DOB'\r\n ],\r\n demographicsCategory\r\n );\r\n }\r\n\r\n\r\n // Set enrollment fields\r\n const enrollmentObject = this.information.objects.find(object => object.ObjectName == 'Enrollment');\r\n if (enrollmentObject) {\r\n const enrollmentCategory = enrollmentObject.categories.find(category => category.CategoryName == 'Student Enrollment' && category.ObjectID == enrollmentObject.ID);\r\n if (enrollmentCategory) {\r\n mutateAllFields(\r\n [\r\n 'GRADE_LEVEL',\r\n 'SCHOOL_NAME',\r\n 'Primary',\r\n 'Entry_Date',\r\n 'ENROLLMENT_STATUS'\r\n ],\r\n enrollmentCategory\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Course Search\r\n else if (this.isCourseSearch) {\r\n\r\n // Set course search fields\r\n const districtCourseObject = this.information.objects.find(object => object.ObjectName == 'Course - District');\r\n let districtCourseCategory = null;\r\n if (districtCourseObject) {\r\n districtCourseCategory = districtCourseObject.categories.find(category => category.CategoryName == 'District Course Master' && category.ObjectID == districtCourseObject.ID);\r\n }\r\n const schoolCourseObject = this.information.objects.find(object => object.ObjectName == 'Course - School');\r\n let schoolCourseCategory = null;\r\n if (schoolCourseObject) {\r\n schoolCourseCategory = schoolCourseObject.categories.find(category => category.CategoryName == 'School Course Master');\r\n }\r\n if (districtCourseCategory) {\r\n mutateAllFields(\r\n [\r\n 'COURSE_NAME',\r\n 'COURSE_NUMBER',\r\n 'DEPARTMENT',\r\n 'SubjectAreas',\r\n 'CreditCodes',\r\n 'COURSE_CREDITS',\r\n 'Max_Seats',\r\n 'QUALIFYING_GRADE_LEVELS',\r\n 'Include_In_GPA',\r\n 'CourseRequirement'\r\n ],\r\n districtCourseCategory\r\n );\r\n }\r\n if (schoolCourseCategory) {\r\n mutateAllFields(\r\n [\r\n 'GenderRestriction',\r\n 'Sped',\r\n 'GAT',\r\n 'SchoolName'\r\n ],\r\n schoolCourseCategory\r\n );\r\n }\r\n }\r\n\r\n // Staff Search\r\n else if (this.isStaffSearch) {\r\n\r\n // Staff Fields\r\n const staffObject = this.information.objects.find(object => object.ObjectName == 'Employee');\r\n if (staffObject) {\r\n\r\n // Setting demographic fields\r\n const staffDemographicsCategory = staffObject.categories.find(category => category.CategoryName == 'Employee Demographics' && category.ObjectID == staffObject.ID);\r\n if (staffDemographicsCategory) {\r\n mutateAllFields(\r\n [\r\n 'Staff_ID',\r\n 'Employee_Number',\r\n 'Employee_First_Name',\r\n 'Employee_Middle_Name',\r\n 'Employee_Last_Name',\r\n ],\r\n staffDemographicsCategory\r\n );\r\n }\r\n\r\n // Setting job fields\r\n const staffJobsCategory = staffObject.categories.find(category => category.CategoryName == 'Employee Jobs' && category.ObjectID == staffObject.ID);\r\n if (staffJobsCategory) {\r\n mutateAllFields(\r\n [\r\n 'School_Name',\r\n 'JobDesc',\r\n 'PrimaryJob'\r\n ],\r\n staffJobsCategory\r\n );\r\n }\r\n }\r\n\r\n // Scheduling Specific Fields\r\n const schedulingObject = this.information.objects.find(object => object.ObjectName == 'Scheduling');\r\n if (schedulingObject) {\r\n\r\n // Teacher Info Fields\r\n const teacherInformationCategory = schedulingObject.categories.find(category => category.CategoryName == 'Teacher Information' && category.ObjectID == schedulingObject.ID);\r\n if (teacherInformationCategory) {\r\n mutateAllFields(\r\n [\r\n 'UseForScheduling',\r\n 'Departments',\r\n 'Certifications',\r\n 'DefaultBellSchedule',\r\n 'PreferredRoom',\r\n 'PreferredSubjectAreas',\r\n 'SchedulingGroups',\r\n 'ScheduledInCourse',\r\n 'SubjectAreas'\r\n ],\r\n teacherInformationCategory\r\n );\r\n }\r\n }\r\n }\r\n\r\n // V9 uses different fields\r\n } else {\r\n if (this.isStudentSearch) {\r\n // Both enrollment and demographics come from student object\r\n const studentObject = this.information.objects.find(object => object.ObjectName == 'Student');\r\n if (studentObject) {\r\n\r\n // Setting demographic fields\r\n const demographicsCategory = studentObject.categories.find(category =>\r\n category.CategoryName == (this.loginService.LoginSettings.V10 ? 'Student Demographics' : 'Demographics')\r\n );\r\n if (demographicsCategory) {\r\n let studentField = fields.find(field => field.DisplayName == 'Student #' && field.CategoryID == demographicsCategory.ID);\r\n if (studentField) {\r\n studentField.IsDefaultFilterField = true;\r\n fieldMutator(studentField);\r\n }\r\n\r\n // studentField = fields.find(field => field.FieldName.toLowerCase() == 'lngstudentid' && field.CategoryID == demographicsCategory.ID);\r\n // if (studentField) {\r\n // studentField.IsDefaultFilterField = true;\r\n // fieldMutator(studentField);\r\n // }\r\n studentField = fields.find(field => field.DisplayName == 'lngStudentId' && field.CategoryID == demographicsCategory.ID);\r\n if (studentField) {\r\n studentField.IsDefaultFilterField = false;\r\n fieldMutator(studentField);\r\n }\r\n\r\n studentField = fields.find(field => field.DisplayName == 'Name - First' && field.CategoryID == demographicsCategory.ID);\r\n if (studentField) {\r\n studentField.IsDefaultFilterField = true;\r\n fieldMutator(studentField);\r\n }\r\n\r\n studentField = fields.find(field => field.DisplayName == 'Name - Last' && field.CategoryID == demographicsCategory.ID);\r\n if (studentField) {\r\n studentField.IsDefaultFilterField = true;\r\n fieldMutator(studentField);\r\n }\r\n\r\n studentField = fields.find(field => field.DisplayName == 'Birth Date' && field.CategoryID == demographicsCategory.ID);\r\n if (studentField) {\r\n studentField.IsDefaultFilterField = true;\r\n fieldMutator(studentField);\r\n }\r\n }\r\n\r\n // Setting enrollment fields\r\n const enrollmentCategory = studentObject.categories.find(category => category.CategoryName == 'Current Enrollment' && category.ObjectID == studentObject.ID);\r\n if (enrollmentCategory) {\r\n\r\n let enrollmentField = fields.find(field => field.DisplayName == 'Grade' && field.CategoryID == enrollmentCategory.ID);\r\n if (enrollmentField) {\r\n enrollmentField.IsDefaultFilterField = true;\r\n fieldMutator(enrollmentField);\r\n }\r\n\r\n enrollmentField = fields.find(field => field.DisplayName == 'Primary Enrollment Site Name' && field.CategoryID == enrollmentCategory.ID);\r\n if (enrollmentField) {\r\n enrollmentField.IsDefaultFilterField = true;\r\n fieldMutator(enrollmentField);\r\n }\r\n\r\n enrollmentField = fields.find(field => field.DisplayName == 'Enrollment Date' && field.CategoryID == enrollmentCategory.ID);\r\n if (enrollmentField) {\r\n enrollmentField.IsDefaultFilterField = true;\r\n fieldMutator(enrollmentField);\r\n }\r\n\r\n enrollmentField = fields.find(field => field.DisplayName == 'Enrollment Status' && field.CategoryID == enrollmentCategory.ID);\r\n if (enrollmentField) {\r\n enrollmentField.IsDefaultFilterField = true;\r\n fieldMutator(enrollmentField);\r\n }\r\n\r\n enrollmentField = fields.find(field => field.DisplayName == 'Primary' && field.CategoryID == enrollmentCategory.ID);\r\n if (enrollmentField) {\r\n enrollmentField.IsDefaultFilterField = false;\r\n fieldMutator(enrollmentField);\r\n }\r\n }\r\n }\r\n }\r\n // Staff Search\r\n else if (this.isStaffSearch) {\r\n // Staff Fields\r\n const staffObject = this.information.objects.find(object => object.ObjectName == 'Staff');\r\n if (staffObject) {\r\n\r\n // Setting demographic fields\r\n const staffDemographicsCategory = staffObject.categories.find(category => category.CategoryName == 'Demographics' && category.ObjectID == staffObject.ID);\r\n if (staffDemographicsCategory) {\r\n let staffField = fields.find(field => field.DisplayName == 'ID' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'lngFacultyStaffId' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = false;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Name - First' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Name - Last' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Name - Middle' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Roles' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Pri Assign Site Name' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Username' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Perm Group' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'Name' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n\r\n staffField = fields.find(field => field.DisplayName == 'State ID' && field.CategoryID == staffDemographicsCategory.ID);\r\n if (staffField) {\r\n staffField.IsDefaultFilterField = true;\r\n fieldMutator(staffField);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addFieldToQuery(field: DataQueryField, type: 'shown' | 'filter'): DataQueryField {\r\n // POST: adds the field to the query as the specified type\r\n\r\n // Determinine what the field list we're dropping into is\r\n let fieldList: DataQueryField[] = [];\r\n switch (type) {\r\n case 'shown':\r\n fieldList = this.currentQuery.reportFields;\r\n break;\r\n\r\n case 'filter':\r\n fieldList = this.currentQuery.filterFields;\r\n break;\r\n }\r\n\r\n // We always duplicate the field before adding it\r\n field = field.duplicate();\r\n\r\n // Updating the transformation field in case we're dragging from available\r\n if (!field.FunctionText) {\r\n this.insertTransField(field, field);\r\n }\r\n\r\n // If the field exists, add a number to it's alias\r\n const duplicates = fieldList.filter(f => f.DisplayName == field.DisplayName);\r\n if (duplicates.length > 0) {\r\n field.Alias = field.DisplayName + '(' + duplicates.length + ')';\r\n }\r\n field.ShowOnReport = true;\r\n\r\n // Adding the field to list of fields\r\n fieldList.push(field);\r\n field.SortOrder = fieldList.length - 1;\r\n this.currentQuery.queryChanged = true;\r\n\r\n // If the list is filter fields, add a filter\r\n if (type == 'filter') {\r\n if (!field.Filters) {\r\n field.Filters = [];\r\n }\r\n if (field.Filters.length == 0) {\r\n const filter = new DataQueryFieldFilter(field);\r\n filter.FilterID = DataQueryService.filterFieldId;\r\n DataQueryService.filterFieldId += 1;\r\n\r\n // Obtaining the filter options\r\n if (this.V10 || (field.FilterType == 3 && field.FieldName != 'Pri Enrl Site Name')) {\r\n this.getFilterOptions(filter, field.CategoryID).pipe(take(1)).subscribe(options => {\r\n filter.FilterOptions = options;\r\n if (filter.FilterOptions.length == 0 && !this.V10) {\r\n filter.FilterType = 0;\r\n }\r\n });\r\n } else {\r\n this.yearService.getStudentSearchSchoolByYearId(this.yearService.defaultYear.Id).pipe(take(1)).subscribe(schools => {\r\n filter.FilterOptions = [];\r\n const allSchoolsOption = new Lookup();\r\n allSchoolsOption.Id = '0';\r\n allSchoolsOption.Code = '';\r\n allSchoolsOption.CodeDescription = 'All';\r\n allSchoolsOption.Sequence = 1;\r\n filter.FilterOptions.push(allSchoolsOption);\r\n for (let i = 0; i < schools.length; i++) {\r\n const schoolOption = new Lookup();\r\n schoolOption.Id = schools[i].SchoolId.toString();\r\n schoolOption.Code = '';\r\n schoolOption.CodeDescription = schools[i].SchoolName;\r\n schoolOption.Sequence = i + 2;\r\n filter.FilterOptions.push(schoolOption);\r\n }\r\n });\r\n\r\n // If the field is a course filter, the filters value is the course name\r\n if (field.DisplayName == DataQueryFieldFilter.courseFilterDisplayName) {\r\n filter.Value = this.currentQuery.courseName;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If the list is shown fields, remove all filters and add it to the sort fields\r\n if (type == 'shown') {\r\n field.Filters = [];\r\n if (!this.currentQuery.sortFields.includes(field)) {\r\n this.currentQuery.sortFields.push(field);\r\n }\r\n\r\n let viewName = '';\r\n const category = this.information.categories.find(cat => cat.ID == field.CategoryID);\r\n if (category != null) {\r\n viewName = category.ViewName;\r\n } else {\r\n console.warn('No category for reportField.TransformationField sql');\r\n }\r\n // const textToInsert = this.getTransFunctionText(reportField);\r\n const sqlToInsert = (field.FieldName && field.FieldName != '') ? ('vw' + viewName + '.[' + field.FieldName + ']') : '';\r\n\r\n // Setting the transformation field of the report field\r\n field.TransformationFields = [\r\n {\r\n fieldId: field.ID,\r\n categoryId: field.CategoryID,\r\n position: 0,\r\n sql: sqlToInsert\r\n }\r\n ];\r\n }\r\n\r\n // Returning the duplicated field we added\r\n return field;\r\n }\r\n\r\n //////////// Validation Methods //////////\r\n validateFilters(query?: DataQuery) {\r\n // POST: determines if the filter fields are set correctly\r\n\r\n // Defaulting to the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Validating\r\n let isValid = true;\r\n for (let i = 0; i < query.filterFields.length; i++) {\r\n for (let n = 0; n < query.filterFields[i].Filters.length; n++) {\r\n if (query.filterFields[i].DataType != undefined) {\r\n query.filterFields[i].Filters[n].showFilterError1 = false;\r\n query.filterFields[i].Filters[n].showFilterError2 = false;\r\n if (query.filterFields[i].DataType.toLowerCase() == 'int'\r\n || query.filterFields[i].DataType.toLowerCase() == 'decimal'\r\n || query.filterFields[i].DataType.toLowerCase() == 'float'\r\n || query.filterFields[i].DataType.toLowerCase() == 'money'\r\n || query.filterFields[i].DataType.toLowerCase() == 'bigint'\r\n || query.filterFields[i].DataType.toLowerCase() == 'smallint'\r\n || query.filterFields[i].DataType.toLowerCase() == 'tinyint'\r\n || query.filterFields[i].DataType.toLowerCase() == 'numeric'\r\n || query.filterFields[i].DataType.toLowerCase() == 'smalldatetime') {\r\n\r\n if (query.filterFields[i].DataType.toLowerCase() == 'smalldatetime') {\r\n if (this.isValidDate(query.filterFields[i].Filters[n].Value) == false\r\n && query.filterFields[i].DisplayName != DataQueryFieldFilter.courseFilterDisplayName) {\r\n query.filterFields[i].Filters[n].showFilterError1 = true;\r\n isValid = false;\r\n }\r\n if (this.isValidDate(query.filterFields[i].Filters[n].Value2) == false\r\n && query.filterFields[i].Filters[n].Operator == 'Between') {\r\n query.filterFields[i].Filters[n].showFilterError2 = true;\r\n isValid = false;\r\n }\r\n } else {\r\n if (isNaN(query.filterFields[i].Filters[n].Value)\r\n && query.filterFields[i].DisplayName != DataQueryFieldFilter.courseFilterDisplayName) {\r\n query.filterFields[i].Filters[n].showFilterError1 = true;\r\n isValid = false;\r\n }\r\n\r\n if (isNaN(query.filterFields[i].Filters[n].Value2)\r\n && query.filterFields[i].Filters[n].Operator == 'Between') {\r\n query.filterFields[i].Filters[n].showFilterError2 = true;\r\n isValid = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n validateFunctions(query?: DataQuery) {\r\n // POST: validates the report field's functions\r\n\r\n // Defaulting to the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Validating\r\n let isValid = true;\r\n for (let i = 0; i < query.reportFields.length; i++) {\r\n query.reportFields[i].FunctionError = [];\r\n if (!query.reportFields[i].FunctionError.find(error => error == 'Column Name is required.')\r\n && query.reportFields[i].IsCalculated\r\n && ((query.reportFields[i].Alias != null\r\n && query.reportFields[i].Alias.trim() == '')\r\n || (query.reportFields[i].DisplayName != null\r\n && query.reportFields[i].DisplayName.trim() == '')\r\n || ((query.reportFields[i].Alias == undefined || query.reportFields[i].Alias == null)\r\n && (query.reportFields[i].DisplayName == undefined\r\n || query.reportFields[i].DisplayName == null)))) {\r\n query.reportFields[i].addFunctionError('Column Name is required.');\r\n }\r\n const upperAlias = (query.reportFields[i].Alias == null ? (query.reportFields[i].DisplayName != null ? query.reportFields[i].DisplayName : '') : query.reportFields[i].Alias);\r\n for (let j = i + 1; j < query.reportFields.length; j++) {\r\n const innerAlias = (query.reportFields[j].Alias == null ? (query.reportFields[j].DisplayName != null ? query.reportFields[j].DisplayName : '') : query.reportFields[j].Alias);\r\n if (upperAlias != null && innerAlias != null\r\n && upperAlias != '' && innerAlias != ''\r\n && upperAlias.toLowerCase() == innerAlias.toLowerCase()\r\n && !query.reportFields[i].FunctionError.find(error => error == 'Ambiguous Column Name.')) {\r\n query.reportFields[i].addFunctionError('Ambiguous Column Name.');\r\n }\r\n }\r\n if (query.reportFields[i].IsCalculated\r\n && query.reportFields[i].FunctionText.trim() == ''\r\n && !query.reportFields[i].FunctionError.find(error => error == 'Value is required.')) {\r\n query.reportFields[i].addFunctionError('Value is required.');\r\n }\r\n if (query.reportFields[i].Alias != null\r\n && (query.reportFields[i].Alias.trim()[0] == '['\r\n && query.reportFields[i].Alias.trim()[query.reportFields[i].Alias.length - 1] == ']')) {\r\n query.reportFields[i].addFunctionError('Character \"[\" is not allowed at start and end position of Alias name');\r\n }\r\n if (query.reportFields[i].FunctionError == null\r\n || query.reportFields[i].FunctionError.length == 0) {\r\n this.validateSyntax(query.reportFields[i], query.reportFields[i].FunctionText);\r\n }\r\n if (query.reportFields[i].FunctionError != null\r\n && query.reportFields[i].FunctionError.length > 0) {\r\n isValid = false;\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n validateSyntax(field: DataQueryField, fnText: string) {\r\n // POST: validates the function syntax\r\n const operatorList = this.operators.map(operator => operator.Display.trim().toLowerCase());\r\n if (field != null) {\r\n field.FunctionError = [];\r\n if (!fnText) {\r\n field.addFunctionError('Column Name is required.');\r\n } else {\r\n const fnParts = this.splitFunctionString(fnText);\r\n for (let i = 0; i < fnParts.length; i++) {\r\n const fnPart = fnParts[i];\r\n\r\n // If this is an operator and either the next or the previous is also an operator, there is an error\r\n if (\r\n operatorList.includes(fnPart.trim().toLowerCase())\r\n && (\r\n i == 0\r\n || i == fnParts.length - 1\r\n || operatorList.includes(fnParts[i - 1].trim().toLowerCase())\r\n || operatorList.includes(fnParts[i + 1].trim().toLowerCase())\r\n )\r\n ) {\r\n field.addFunctionError('Missing conditional operand near ' + fnPart + '.');\r\n }\r\n\r\n // If this isn't an operator and the next or the previous is also not, there is an error\r\n else if (\r\n !operatorList.includes(fnParts[i].trim().toLowerCase())\r\n && (\r\n (\r\n i < fnParts.length - 1\r\n && !operatorList.includes(fnParts[i + 1].trim().toLowerCase())\r\n )\r\n || (\r\n i > 0\r\n && !operatorList.includes(fnParts[i - 1].trim().toLowerCase())\r\n )\r\n )\r\n ) {\r\n field.addFunctionError('Missing conditional operator near ' + fnPart + '.');\r\n }\r\n\r\n // If the string isn't closed, there is an error\r\n if (fnPart.substring(0, 1) == '\"') {\r\n if (fnPart.substring(fnPart.length - 1) != '\"') {\r\n field.addFunctionError('Missing Closing \".');\r\n }\r\n }\r\n\r\n // If the bracket isn't closed, there is an error\r\n else if (fnPart.substring(0, 1) == '[') {\r\n if (fnPart.substring(fnPart.length - 1) != ']') {\r\n field.addFunctionError('Missing Closing ].');\r\n }\r\n }\r\n\r\n // Evaluating parentheses\r\n else if (fnPart.includes('(')) {\r\n const fnName = fnPart.substring(0, fnPart.indexOf('(')).trim();\r\n if (fnPart.substring(fnPart.length - 1) != ')') {\r\n field.addFunctionError('Missing closing ) on ' + fnName + '.');\r\n } else {\r\n const paramString = fnPart.substring(fnPart.indexOf('(') + 1, fnPart.lastIndexOf(')')).trim();\r\n const parameters: string[] = [];\r\n let currentParam = '';\r\n let parenCount = 0;\r\n let isStringLiteral = false;\r\n const fn = this.functions.find(f => f.Name.toLowerCase() == fnName.toLowerCase());\r\n if (fn == null) {\r\n field.addFunctionError(fnName + ' is not a function.');\r\n } else {\r\n for (let c = 0; c < paramString.length; c++) {\r\n currentParam += paramString[c];\r\n if (paramString[c] == '\"' && parenCount == 0) {\r\n isStringLiteral = !isStringLiteral;\r\n }\r\n if (isStringLiteral == false) {\r\n if (paramString[c] == '(') {\r\n parenCount++;\r\n } else if (parenCount > 0) {\r\n if (paramString[c] == ')') {\r\n parenCount--;\r\n }\r\n } else if (paramString[c] == ',') {\r\n if (currentParam.indexOf('[') > -1\r\n && currentParam.indexOf(']') < 0) {\r\n // do nothing\r\n } else {\r\n if (currentParam.substring(0, currentParam.length - 1).trim() != '') {\r\n parameters.push(currentParam.substring(0, currentParam.length - 1).trim());\r\n }\r\n currentParam = '';\r\n }\r\n }\r\n if (c + 1 == paramString.length) {\r\n if (currentParam.trim() != '') {\r\n parameters.push(currentParam.trim());\r\n }\r\n currentParam = '';\r\n }\r\n } else {\r\n if (c + 1 == paramString.length) {\r\n if (currentParam.trim() != '') {\r\n parameters.push(currentParam.trim());\r\n }\r\n currentParam = '';\r\n }\r\n }\r\n }\r\n // check number of params\r\n const dqParams = this.parameters.filter(p => p.FunctionId == fn.Id);\r\n if (dqParams.length != parameters.length) {\r\n let er = '';\r\n er = 'Incorrect syntax for ' + fnName + '. Format expected is ' + fnName + '(';\r\n for (let n = 0; n < dqParams.length; n++) {\r\n const param = dqParams.find(p => p.Position == n + 1);\r\n if (param != null) {\r\n if (n > 0) {\r\n er += ', ';\r\n }\r\n er += param.Name;\r\n }\r\n }\r\n er += ').';\r\n field.addFunctionError(er);\r\n } else {\r\n if (fnName.toLowerCase() == 'formatphone') {\r\n const formatParam = this.parameters.find(p => p.FunctionId == fn.Id && p.Name == 'format');\r\n if (formatParam != null) {\r\n const format = parameters[formatParam.Position - 1];\r\n if (format.split('x').length - 1 != 10) {\r\n field.addFunctionError('Phone number format requires 10 digits (indicated by \"x\").');\r\n }\r\n }\r\n }\r\n // ONE-7965\r\n if (fnName.toLowerCase() == 'date' && field.DataType != null && field.DataType.toLowerCase() != 'smalldatetime' && field.DataType.toLowerCase() != 'datetime') {\r\n field.addFunctionError('Date formula requires a date field.');\r\n }\r\n // check param data type\r\n for (let x = 0; x < parameters.length; x++) {\r\n const param = dqParams.find(p => p.Position == x + 1);\r\n const paramParts = this.splitFunctionString(parameters[x]);\r\n if (param != null && fnName.toLowerCase() != 'if') {\r\n for (let y = 0; y < paramParts.length; y++) {\r\n if (param.DataType == 'varchar' || param.DataType == 'char') {\r\n if (paramParts[y][0] != '\"' && paramParts[y] != '+' && paramParts[y][0] != '[') {\r\n if (paramParts[y].indexOf('(') < 0\r\n || !this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase())) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n const funct = this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase());\r\n if (funct.ReturnType != 'varchar' && funct.ReturnType != 'char') {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n }\r\n }\r\n }\r\n } else if (param.DataType == 'int') {\r\n if (paramParts[y][0] != '[' && paramParts[y] != '+' && paramParts[y] != '-' && paramParts[y] != '*' && paramParts[y] != '^' && !System.isNumeric(paramParts[y][0])) {\r\n if (paramParts[y].indexOf('(') < 0\r\n || !this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase())) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n const funct = this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase());\r\n if (funct.ReturnType != 'integer' && funct.ReturnType != 'int') {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n }\r\n }\r\n }\r\n } else if (param.DataType == 'number') {\r\n if (paramParts[y][0] != '[' && paramParts[y] != '+' && paramParts[y] != '-' && paramParts[y] != '*' && paramParts[y] != '^' && !System.isNumeric(paramParts[y][0])) {\r\n if (paramParts[y].indexOf('(') < 0\r\n || !this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase())) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n const funct = this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase());\r\n if (funct.ReturnType != 'integer' && funct.ReturnType != 'int' && funct.ReturnType != 'number') {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n }\r\n }\r\n }\r\n } else if (param.DataType == 'datetime') {\r\n if (paramParts[y][0] != '\"' && paramParts[y][0] != '[') {\r\n if (paramParts[y].indexOf('(') < 0\r\n || !this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase())) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n const funct = this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase());\r\n if (funct.ReturnType != 'datetime' && funct.ReturnType != 'date') {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n }\r\n }\r\n }\r\n } else if (param.DataType == 'field') {\r\n if (paramParts[y][0] != '[') {\r\n if (this.loginService.LoginSettings.V10 == true) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n if (paramParts[y].indexOf('(') < 0\r\n || !this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase())) {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n } else {\r\n const funct = this.functions.find(f => f.Name.toLowerCase() == paramParts[y].substring(0, paramParts[y].indexOf('(')).toLowerCase());\r\n if (funct.ReturnType != 'varchar' && funct.ReturnType != 'varchar') {\r\n field.addFunctionError('Incorrect datatype for parameter ' + (x + 1) + ' in ' + fnName + '.');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!field.FunctionError || field.FunctionError.length == 0) {\r\n this.validateSyntax(field, parameters[x]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else if (fnPart.substring(0, 1) != '['\r\n && !operatorList.map(operator => operator.toLowerCase()).includes(fnPart.toLowerCase())\r\n && isNaN(fnPart)) {\r\n field.addFunctionError(fnPart + ' is not a function.');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n testFormulas(isExport, _callback, query?: DataQuery) {\r\n // POST: tests the formulas for the report fields in the current query\r\n\r\n // Initializing\r\n let formulasValid = true;\r\n\r\n // Defaulting to the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Keeping track of our check relationships\r\n let calledCallback = false;\r\n const checkFields = [];\r\n const checkFieldsXMLFields = [];\r\n\r\n // Validating each report field\r\n query.reportFields.forEach((field, i) => {\r\n if (field.FunctionError == null || field.FunctionError.length == 0) {\r\n if (!field.TransformationFields || field.TransformationFields.length == 0) {\r\n this.transFunctionChanged(field);\r\n }\r\n const xmlFields = [];\r\n if (field.FunctionText != null\r\n && field.FunctionText != ''\r\n && (\r\n this.loginService.LoginSettings.V10\r\n || field.FunctionText != '[' + field.ObjectName + '.' + field.CategoryName + '.' + field.DisplayName + ']'\r\n )\r\n ) {\r\n if (field.Filters == null) {\r\n field.Filters = [];\r\n }\r\n if (field.TransformationFields == null) {\r\n field.TransformationFields = [];\r\n }\r\n xmlFields.push(field);\r\n for (let x = 0; x < field.TransformationFields.length; x++) {\r\n if (!xmlFields.find(xmlField => xmlField.ID == field.TransformationFields[x].fieldId)) {\r\n const tField = this.information.getField(f => f.ID == field.TransformationFields[x].fieldId && f.CategoryID == field.TransformationFields[x].categoryId);\r\n // if (!tField.TransformationFields || tField.TransformationFields.length == 0) {\r\n // \tthis.transFunctionChanged(tField);\r\n // }\r\n if (tField != null) {\r\n // tField.FunctionText = '[' + tField.ObjectName + '.' + tField.CategoryName + '.' + tField.FieldName + ']';\r\n // tField.TransformationFunction = 'vw' + tField.category.ViewName + '.[' + tField.FieldName + ']';\r\n // tField.TransformationFields = [\r\n // {\r\n // fieldId: tField.ID,\r\n // categoryId: tField.CategoryID,\r\n // position: 0,\r\n // sql: ''\r\n // }\r\n // ];\r\n xmlFields.push(tField);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If there is XML for this, we need to validate it\r\n if (xmlFields.length > 0) {\r\n checkFields.push(field);\r\n checkFieldsXMLFields.push(xmlFields);\r\n }\r\n }\r\n });\r\n\r\n // Checking observables\r\n if (checkFields.length > 0) {\r\n let finishedChecks = 0;\r\n for (let i = 0; i < checkFields.length; i++) {\r\n this.checkRelationships(checkFieldsXMLFields[i], () => {\r\n if (checkFields[i].FunctionError == null) {\r\n checkFields[i].FunctionError = [];\r\n }\r\n const xml = this.getQueryXML(checkFieldsXMLFields[i]);\r\n this.currentResultSubscriptions.push(\r\n this.validateTransformationFunctions(xml, i).subscribe(\r\n result => {\r\n if (result != null && result != '') {\r\n checkFields[i].addFunctionError(result);\r\n formulasValid = false;\r\n }\r\n finishedChecks += 1;\r\n if (\r\n finishedChecks == checkFields.length\r\n && formulasValid\r\n && _callback != null\r\n && !calledCallback\r\n ) {\r\n calledCallback = true;\r\n _callback();\r\n }\r\n if (\r\n finishedChecks == checkFields.length\r\n && !formulasValid\r\n ) {\r\n this.dialog.open(ErrorsExistDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n message: (this.currentTab == 'Settings for Export' ?\r\n 'Errors on this tab must be corrected before Results can be exported.' :\r\n 'Errors on the Settings for Export tab must be corrected before Results can be viewed.')\r\n }\r\n });\r\n this.currentTab = 'Settings for Export';\r\n }\r\n }\r\n )\r\n );\r\n });\r\n }\r\n } else if (_callback != null && !calledCallback) {\r\n calledCallback = true;\r\n _callback();\r\n }\r\n }\r\n\r\n checkRelationships(fields: DataQueryField[], _callBack?, _errorCallback?) {\r\n let joinsExistForAllCategories = true;\r\n const unjoinedCategoryGroups: DataQueryCategory[][] = [];\r\n\r\n // Obtaining distinct category groups of fields\r\n const shownFields = fields.filter(f => !f.IsConstant && !f.IsCalculated);\r\n const distinctCategoryGroup: { [key: number]: DataQueryField[] } = {};\r\n shownFields.forEach(field => {\r\n if (field.CategoryID > 0) {\r\n if (!distinctCategoryGroup[field.CategoryID]) {\r\n distinctCategoryGroup[field.CategoryID] = [];\r\n }\r\n distinctCategoryGroup[field.CategoryID].push(field);\r\n }\r\n });\r\n if (Object.keys(distinctCategoryGroup).length > 1) {\r\n this.currentResultSubscriptions.push(\r\n this.getRelationships(fields).pipe(take(1)).subscribe(\r\n relationships => {\r\n const categoryRelationshipGroups = [];\r\n const unconfirmedCategoryRelationships = [];\r\n let confirmedCategoryRelationships = [];\r\n for (const category in distinctCategoryGroup) {\r\n if (distinctCategoryGroup.hasOwnProperty(category)) {\r\n unconfirmedCategoryRelationships.push(category);\r\n }\r\n }\r\n\r\n while (unconfirmedCategoryRelationships.length > 0) {\r\n confirmedCategoryRelationships.push(unconfirmedCategoryRelationships[0]);\r\n unconfirmedCategoryRelationships.splice(0, 1);\r\n for (let i = 0; i < confirmedCategoryRelationships.length; i++) {\r\n let u = unconfirmedCategoryRelationships.length;\r\n while (u--) {\r\n let relations = relationships.filter(rel =>\r\n rel.Category1ID == parseInt(unconfirmedCategoryRelationships[u], 10) &&\r\n rel.Category2ID == parseInt(confirmedCategoryRelationships[i], 10)\r\n );\r\n if (relations.length == 0) {\r\n relations = relationships.filter(rel =>\r\n rel.Category1ID == parseInt(confirmedCategoryRelationships[i], 10) &&\r\n rel.Category2ID == parseInt(unconfirmedCategoryRelationships[u], 10)\r\n );\r\n }\r\n if (relations.length > 0) {\r\n confirmedCategoryRelationships.push(unconfirmedCategoryRelationships[u]);\r\n unconfirmedCategoryRelationships.splice(u, 1);\r\n }\r\n }\r\n }\r\n if (unconfirmedCategoryRelationships.length > 0) {\r\n joinsExistForAllCategories = false;\r\n }\r\n categoryRelationshipGroups.push(confirmedCategoryRelationships);\r\n confirmedCategoryRelationships = [];\r\n }\r\n\r\n if (categoryRelationshipGroups.length > 0) {\r\n for (let g = 0; g < categoryRelationshipGroups.length; g++) {\r\n const catGroup = [];\r\n for (let c = 0; c < categoryRelationshipGroups[g].length; c++) {\r\n const category = this.information.categories.find(cat =>\r\n cat.ID == parseInt(categoryRelationshipGroups[g][c], 10)\r\n );\r\n if (category != null) {\r\n const catObject = this.information.objects.find(o =>\r\n o.ID == category.ObjectID\r\n );\r\n if (catObject != null) {\r\n category.ObjectName = catObject.ObjectName;\r\n }\r\n catGroup.push(category);\r\n break;\r\n }\r\n }\r\n unjoinedCategoryGroups.push(catGroup);\r\n }\r\n }\r\n },\r\n () => { },\r\n () => {\r\n if (joinsExistForAllCategories) {\r\n if (_callBack != null) {\r\n _callBack();\r\n }\r\n } else {\r\n const dialogBox = this.dialog.open(NoRelationshipsWarningDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n unjoinedCategoryGroups: unjoinedCategoryGroups\r\n }\r\n });\r\n const dialogBoxSubscription = dialogBox.afterClosed().subscribe(() => {\r\n dialogBoxSubscription.unsubscribe();\r\n if (_errorCallback) {\r\n _errorCallback();\r\n }\r\n });\r\n }\r\n }\r\n )\r\n );\r\n } else {\r\n if (_callBack != null) {\r\n _callBack();\r\n }\r\n }\r\n }\r\n\r\n validateQuery(success: Function, failure?: Function, forImport = false, query?: DataQuery) {\r\n // PRE: the current query is set\r\n // POST: validates the query\r\n\r\n // Defaults to the current query\r\n if (!query) {\r\n query = this.currentQuery;\r\n }\r\n\r\n // Removing subscriptions that we've closed\r\n this.currentResultSubscriptions = this.currentResultSubscriptions.filter(subscription => !subscription.closed);\r\n\r\n // Running validators\r\n if (this.validateFilters(query)) {\r\n if (this.validateFunctions(query)) {\r\n this.testFormulas(false,\r\n () => {\r\n this.checkRelationships(\r\n this.getAllFields(query),\r\n () => {\r\n success();\r\n },\r\n () => {\r\n setTimeout(() => {\r\n this.currentTab = this._previousTab;\r\n if (failure) {\r\n failure('Relationships');\r\n }\r\n }, 10);\r\n }\r\n );\r\n },\r\n query\r\n );\r\n } else {\r\n if (forImport) {\r\n this.dialog.open(ImportErrorDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n fields: query.reportFields.filter(field => field.FunctionError.length != 0)\r\n }\r\n });\r\n } else {\r\n if (!this.dialog.openDialogs.find(dialog => dialog.componentInstance instanceof ErrorsExistDialogComponent)) {\r\n this.dialog.open(ErrorsExistDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n message: (this.currentTab == 'Settings for Export' ?\r\n 'Errors on this tab must be corrected before Results can be exported.' :\r\n 'Errors on the Settings for Export tab must be corrected before Results can be viewed.')\r\n }\r\n });\r\n }\r\n }\r\n this.currentTab = 'Settings for Export';\r\n if (failure) {\r\n failure('Settings for Export');\r\n }\r\n }\r\n } else {\r\n this.currentTab = 'Filters';\r\n if (failure) {\r\n failure('Filters');\r\n }\r\n }\r\n }\r\n}\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tselector: 'app-delete-filter-row',\r\n\ttemplateUrl: './delete-row-dialog.component.html',\r\n\tstyleUrls: ['./delete-row-dialog.component.css']\r\n})\r\nexport class DeleteRowDialogComponent implements OnInit {\r\n\r\n\t// Injected Properties\r\n\tmessage: string;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate dialogBox: MatDialogRef\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// PRE: injected data with the injected properties\r\n\t\tthis.message = this.data.message;\r\n\t}\r\n\r\n\tOK() {\r\n\t\t// PRE: OK is clicked\r\n\t\t// POST: closes the dialog box with true\r\n\t\tthis.dialogBox.close(true);\r\n\t}\r\n\r\n\tcancel() {\r\n\t\t// PRE: cancel is clicked\r\n\t\t// POST: closes the dialog box with false\r\n\t\tthis.dialogBox.close(false);\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","\r\n

\r\n\tDelete Row?\r\n

\r\n\r\n\r\n\r\n\t\r\n\t\t{{message}}\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
","import {Component, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tselector: 'app-errors-exist-dialog',\r\n\ttemplateUrl: './errors-exist-dialog.component.html',\r\n\tstyleUrls: ['./errors-exist-dialog.component.css']\r\n})\r\nexport class ErrorsExistDialogComponent implements OnInit {\r\n\r\n\t// Injected Properties\r\n\tmessage: string;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate dialogBox: MatDialogRef\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// POST: sets the injected properties\r\n\t\tthis.message = this.data.message;\r\n\t}\r\n\r\n\tclose() {\r\n\t\t// PRE: the close button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","\r\n
\r\n\tERRORS EXIST\r\n
\r\n\r\n\r\n\r\n\t{{message}}\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n","\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\t{{option.displayString}}\r\n\t\r\n","import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DataQueryInformation } from '../models/data-query-information';\r\nimport { Subscription } from 'rxjs';\r\nimport { FieldAutofillOption } from './field-autofill-option';\r\n\r\n@Component({\r\n selector: 'field-search',\r\n templateUrl: './field-search.component.html',\r\n styleUrls: ['./field-search.component.css']\r\n})\r\nexport class FieldSearchComponent implements OnInit, OnDestroy {\r\n\r\n // Interface Properties\r\n @Output() search = new EventEmitter();\r\n\r\n // Properties\r\n searchString = '';\r\n previousSearchString = '';\r\n information: DataQueryInformation;\r\n subscriptions: Subscription[] = [];\r\n autofills: FieldAutofillOption[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private dataQueryService: DataQueryService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.subscriptions.push(\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this.information = information;\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n sendSearch() {\r\n // PRE: the user presses enter in the text field or unfocuses the input\r\n // POST: emits the search and clears the autofill\r\n setTimeout(() => {\t// We do this in a set timeout in case an option is clicked\r\n this.search.emit(this.searchString);\r\n this.autofills = [];\r\n }, 100);\r\n }\r\n\r\n // Methods\r\n getAutofills() {\r\n // POST: obtains the autofills for the user\r\n if (this.previousSearchString != this.searchString) {\r\n this.previousSearchString = this.searchString;\r\n this.autofills = this.information.getAutofillOptions(this.searchString);\r\n }\r\n }\r\n}\r\n","import { DataQueryField } from './data-query-field.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { DataQueryObject } from './data-query-object.model';\r\n\r\nexport class DataQueryCategory {\r\n\r\n // Server Properties\r\n CategoryName: string;\r\n DisplayName: string;\r\n Deleted: boolean;\r\n Fields: DataQueryField[] = [];\r\n ID: number;\r\n ObjectID: number;\r\n ObjectName: string;\r\n ViewName: string;\r\n isDynamicView: boolean;\r\n isLargeView: boolean;\r\n UserDefinedTabId: number;\r\n\r\n // Local Properties\r\n isUserCategory = true;\r\n private _tableData: TylerMatTableDataSource;\r\n selectedRow: DataQueryField;\r\n object: DataQueryObject;\r\n\r\n // Class Functions\r\n get fields(): DataQueryField[] {\r\n return this.Fields;\r\n }\r\n\r\n set fields(value: DataQueryField[]) {\r\n this.Fields = value;\r\n }\r\n\r\n get tableData(): TylerMatTableDataSource {\r\n if (!this._tableData) {\r\n this._tableData = new TylerMatTableDataSource(this.fields);\r\n }\r\n if (this._tableData.data.length != this.fields.length) {\r\n this._tableData.data = this.fields;\r\n }\r\n return this._tableData;\r\n }\r\n}\r\n","import { DataQueryField } from './data-query-field.model';\r\nimport { DataQueryOperator } from './data-query-operator.model';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { DeleteRowDialogComponent } from '../delete-row-dialog/delete-row-dialog.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\nexport class DataQueryFieldFilter extends DataQueryField {\r\n\r\n // Static Properties\r\n static courseFilterDisplayName = '(Students Actively Enrolled Today in) Class';\r\n static courseFilterFieldName = 'StudentsActivelyEnrolledTodayInClass';\r\n static studentFilterFieldName = 'UserDefinedStudentFilter';\r\n static enrollmentFilterFieldName = 'StudentsEnrolledAsOf';\r\n static enrollmentFilterDisplayName = '(Include only students enrolled as of) Date';\r\n static studentListFilterFieldName = 'StudentsListfilter';\r\n static studentListFilterDisplayName = 'Students in Student List';\r\n static studentTeamFilterFieldName = 'StudentsTeamfilter';\r\n static studentTeamFilterDisplayName = 'Students in Student Team';\r\n static displayOperators = [\r\n '=',\r\n 'Not=',\r\n '>',\r\n '>=',\r\n '<',\r\n '<=',\r\n 'Between',\r\n 'Is Blank',\r\n 'Is Not Blank',\r\n 'Contains',\r\n 'In List',\r\n 'Not In List',\r\n 'Starts With'\r\n ];\r\n\r\n // Server Properties\r\n ApplyToAll = false;\r\n DisplayMenu = false;\r\n FilterID: number;\r\n FilterOptions: Lookup[] = [];\r\n Group = 'A';\r\n IsStudentFilter = false;\r\n IsCourseFilter = false;\r\n Operator: string;\r\n UseCurrentDate1 = false;\r\n UseCurrentDate2 = false;\r\n UseFilterForStudentSearch = true;\r\n UseFilterForCourseSearch = false;\r\n UseFilterForStaffSearch = false;\r\n Value: boolean | number | string = '';\r\n Value2: boolean | number | string = '';\r\n numericType: boolean;\r\n\r\n // Local Properties\r\n private _field: DataQueryField;\r\n private _dateValue: Date;\r\n private _dateValue2: Date;\r\n showFilterError1: boolean;\r\n showFilterError2: boolean;\r\n disableEdit: boolean;\r\n hidden: boolean;\r\n\r\n // Class Functions\r\n get studentFilter(): boolean {\r\n return this.IsStudentFilter || (this.field && this.field.FieldName == DataQueryFieldFilter.courseFilterFieldName);\r\n }\r\n\r\n get courseFilter(): boolean {\r\n return this.IsCourseFilter;\r\n }\r\n\r\n get field(): DataQueryField {\r\n return this._field;\r\n }\r\n\r\n set field(value: DataQueryField) {\r\n this._field = value;\r\n if (this._field && this._field.DataType) {\r\n\r\n // Making sure this filter is a part of the field\r\n if (this._field.Filters) {\r\n const indexOfThis = this._field.Filters.indexOf(this);\r\n if (indexOfThis < 0) {\r\n this._field.Filters.push(this);\r\n }\r\n } else {\r\n this._field.Filters = [];\r\n this._field.Filters.push(this);\r\n }\r\n\r\n // Determining if the filter is a numeric type\r\n this.numericType = this._field.DataType.toLowerCase() == 'int'\r\n || this._field.DataType.toLowerCase() == 'decimal'\r\n || this._field.DataType.toLowerCase() == 'float'\r\n || this._field.DataType.toLowerCase() == 'money'\r\n || this._field.DataType.toLowerCase() == 'bigint'\r\n || this._field.DataType.toLowerCase() == 'smallint'\r\n || this._field.DataType.toLowerCase() == 'tinyint'\r\n || this._field.DataType.toLowerCase() == 'numeric';\r\n\r\n // Setting the initial operator if none is present or it is invalid\r\n if (!this.Operator || !this.getFilterOperators().includes(this.Operator)) {\r\n this.Operator = this.getFilterOperators()[0];\r\n }\r\n }\r\n }\r\n\r\n get dateValue(): Date {\r\n return this._dateValue;\r\n }\r\n\r\n set dateValue(value: Date) {\r\n this._dateValue = value;\r\n this.setValueFromDate(this._dateValue, 1);\r\n }\r\n\r\n get dateValue2(): Date {\r\n return this._dateValue2;\r\n }\r\n\r\n set dateValue2(value: Date) {\r\n this._dateValue2 = value;\r\n this.setValueFromDate(this._dateValue2, 2);\r\n }\r\n\r\n constructor(field?: DataQueryField) {\r\n // POST: sets the operator to the first viable operator\r\n super();\r\n\r\n // If a field is provided, add the field to the filter and the filter to the field\r\n if (field) {\r\n this.field = field;\r\n }\r\n }\r\n\r\n // Methods\r\n duplicate(field?: DataQueryField): DataQueryFieldFilter {\r\n const newFilter = new DataQueryFieldFilter();\r\n Object.assign(newFilter, this);\r\n newFilter.field = field;\r\n return newFilter;\r\n }\r\n\r\n getFilterOperators(): string[] {\r\n // PRE: a field to get the operators for\r\n // POST: returns the operators for a field's filters\r\n switch (this.field.FilterType) {\r\n case 0:\r\n if (this.field.DataType.toLowerCase() == 'bit') {\r\n return DataQueryFieldFilter.displayOperators.filter(operator =>\r\n operator != 'Between'\r\n && operator != 'Contains'\r\n && operator != 'In List'\r\n && operator != 'Not In List'\r\n && operator != 'Starts With'\r\n );\r\n } else {\r\n return DataQueryFieldFilter.displayOperators;\r\n }\r\n case 1:\r\n return DataQueryFieldFilter.displayOperators.filter(operator =>\r\n operator != 'Contains'\r\n && operator != 'In List'\r\n && operator != 'Not In List'\r\n && operator != 'Starts With'\r\n );\r\n case 3:\r\n return DataQueryFieldFilter.displayOperators.filter(operator =>\r\n operator != 'Between'\r\n && operator != 'In List'\r\n && operator != 'Not In List'\r\n );\r\n default:\r\n return DataQueryFieldFilter.displayOperators;\r\n }\r\n }\r\n\r\n setValueFromDate(date: Date, value = 1) {\r\n // PRE: a date to extract a value from and the value we want to set (either 1 or 2)\r\n // POST: sets the value based on the date\r\n if (date == null) {\r\n if (value == 1) {\r\n this.Value = '';\r\n } else {\r\n this.Value2 = '';\r\n }\r\n } else {\r\n if (value == 1) {\r\n this.Value = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();\r\n } else {\r\n this.Value2 = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();\r\n }\r\n }\r\n }\r\n\r\n useCodeDescription(V10: boolean) {\r\n // PRE: whether or not this is V10. Also, must have a field.\r\n // POST: determines whether this should use the code or the code description\r\n if (!V10) {\r\n return this.field.FieldName == 'Lives With'\r\n || this.field.FieldName == 'Student Suffix'\r\n || this.field.FieldName == 'Graduation Plan'\r\n || this.field.FieldName == 'Subject Type'\r\n || this.field.FieldName == 'Language of Instruction'\r\n || this.field.FieldName == 'District Department'\r\n || this.field.FieldName == 'Graduation Department'\r\n || this.field.FieldName == 'Additional Graduation Department'\r\n || this.field.FieldName == 'Subject Term Type'\r\n || this.field.FieldName == 'Credit Delivery Term Type'\r\n || this.field.FieldName == 'Pri Enrl Site Name'\r\n || this.field.FieldName == 'EnrollmentStatus';\r\n } else {\r\n return this.field.FieldName != 'Grade';\r\n }\r\n }\r\n\r\n disabled() {\r\n // POST: returns true if this should be disabled\r\n return this.Operator == 'Is Blank' || this.Operator == 'Is Not Blank';\r\n }\r\n\r\n delete(\r\n dialog: MatDialog,\r\n filterArray: DataQueryFieldFilter[] = [],\r\n filterFields: DataQueryField[] = [],\r\n forceDelete = false,\r\n tableData?: TylerMatTableDataSource,\r\n callback: Function = null\r\n ) {\r\n // PRE: a filter that is in the filter data\r\n // \t\tThe filters field must not be null and the field must have a filters array that the filter is a part of\r\n // POST: deletes the filter from the filter data\r\n\r\n // Creating helper function to update table data\r\n const updateTableData = () => {\r\n if (tableData) {\r\n tableData.data = filterArray;\r\n }\r\n };\r\n\r\n // Checking that we have a field\r\n if (this.field && this.field.Filters) {\r\n\r\n // If this is the only filter for that field, we need to perform additional checks\r\n if (this.field.Filters.length == 1) {\r\n\r\n // Creating a helping function\r\n const removeFilter = () => {\r\n if (this.field) {\r\n this.field.Filters.splice(this.field.Filters.indexOf(this), 1);\r\n }\r\n if (filterFields) {\r\n filterFields.splice(filterFields.indexOf(this.field), 1);\r\n }\r\n filterArray.splice(filterArray.indexOf(this), 1);\r\n };\r\n\r\n // If we are forcing deletion, just go ahead and remove it\r\n if (forceDelete) {\r\n removeFilter();\r\n updateTableData();\r\n }\r\n\r\n // If we're not forcing deletion, prompt the user\r\n else {\r\n const dialogBox = dialog.open(DeleteRowDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n message: 'This will delete ' + this.field.DisplayName + ' from the filter.'\r\n }\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(result => {\r\n if (result) {\r\n removeFilter();\r\n updateTableData();\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n\r\n // If there are multiple filters for the field, remove it from the field and this component\r\n else {\r\n this.field.Filters.splice(this.field.Filters.indexOf(this), 1);\r\n filterArray.splice(filterArray.indexOf(this), 1);\r\n updateTableData();\r\n }\r\n }\r\n\r\n // If there isn't a field, then we just remove it from this component\r\n else {\r\n filterArray.splice(filterArray.indexOf(this), 1);\r\n updateTableData();\r\n }\r\n }\r\n}\r\n","import { DataQueryObject } from './data-query-object.model';\r\nimport { DataQueryCategory } from './data-query-category.model';\r\nimport { DataQueryFieldFilter } from './data-query-field-filter.model';\r\nimport { DataQueryTransformationField } from './data-query-transformation-field.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { ElementRef } from '@angular/core';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\n\r\nexport class DataQueryField {\r\n\r\n // Server Properties\r\n Alias: string;\r\n Break: string;\r\n CategoryID: number;\r\n CategoryName: string;\r\n ColumnName: string;\r\n ConstantValue: string;\r\n DataType: string;\r\n Deleted: boolean;\r\n DisplayName: string;\r\n Editable: boolean;\r\n Field: string;\r\n FieldName: string;\r\n FilterType: number;\r\n Filters: DataQueryFieldFilter[] = [];\r\n FunctionText: string;\r\n ID: number;\r\n IsCalculated: boolean;\r\n IsConstant: boolean;\r\n IsDefaultFilterField: boolean;\r\n IsDefaultStudentSearchFilter: boolean;\r\n IsDefaultCourseSearchFilter: boolean;\r\n IsDuplicate: boolean;\r\n IsStudentFilter: boolean;\r\n IsCourseFilter: boolean;\r\n IsTransErrorOpen: boolean;\r\n LookupIDColumnName: string;\r\n LookupTableName: string;\r\n LookupValueColumnName: string;\r\n LookupFilter: string;\r\n LookupProcedure: string;\r\n LookupParams: string;\r\n ObjectName: string;\r\n Permission: string;\r\n PreviewData = '';\r\n SQLColumnName: string;\r\n SQLTableName: string;\r\n ShowOnReport: boolean;\r\n SortDirection: string;\r\n SortOrder = -1;\r\n SortByDefault: boolean;\r\n StudentFilterId: number | string;\r\n CourseFilterId: number | string;\r\n TransformationFields: DataQueryTransformationField[] = [];\r\n TransformationFunction: string;\r\n Visible: boolean;\r\n IncludeInResults: boolean;\r\n ShowTimeForDates: boolean;\r\n UserDefinedTabId: number;\r\n FieldSize: number;\r\n ViewPermissionsFromMetadata: string;\r\n UpdatePermissionsFromMetadata: string;\r\n // For Mass Edit\r\n FilterOptions: Lookup[] = [];\r\n // -------Used for editable custom layouts --------//\r\n Value: any;\r\n CustomLayoutFieldId: number;\r\n TemplateRef: ElementRef;\r\n Required: boolean;\r\n // ------- end Used for editable custom layouts --------//\r\n\r\n // Local Properties\r\n private _functionErrors: string[] = [];\r\n private _object: DataQueryObject;\r\n private _category: DataQueryCategory;\r\n errors: ErrorList[] = [];\r\n hasRelationship = true;\r\n coreFileFilterId: number;\r\n\r\n // Class Functions\r\n get nestedName(): string {\r\n return this.ObjectName + '.' + this.CategoryName + '.' + this.FieldName;\r\n }\r\n\r\n get FunctionError() {\r\n return this._functionErrors;\r\n }\r\n\r\n set FunctionError(value: string[]) {\r\n this._functionErrors = value;\r\n if (!value || value.length == 0) {\r\n this.errors = [];\r\n }\r\n }\r\n\r\n get object(): DataQueryObject {\r\n return this._object;\r\n }\r\n\r\n set object(value: DataQueryObject) {\r\n this._object = value;\r\n if (value) {\r\n this.ObjectName = value.ObjectName;\r\n }\r\n }\r\n\r\n get category(): DataQueryCategory {\r\n return this._category;\r\n }\r\n\r\n set category(value: DataQueryCategory) {\r\n this._category = value;\r\n if (value) {\r\n this.CategoryName = value.CategoryName;\r\n }\r\n }\r\n\r\n get key(): string {\r\n return this.ObjectName + '>' + this.CategoryName + '>' + this.FieldName\r\n }\r\n\r\n // Methods\r\n duplicate() {\r\n // POST: returns a duplicate of this object\r\n const newField = new DataQueryField();\r\n Object.assign(newField, this);\r\n newField.Filters = [];\r\n this.Filters.forEach(filter => {\r\n newField.Filters.push(filter.duplicate(newField));\r\n });\r\n return newField;\r\n }\r\n\r\n addFunctionError(error: string, reference?: ElementRef) {\r\n // POST: Adds the error to the FunctionErrors and also composes an ErrorList object\r\n this.FunctionError.push(error);\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: error,\r\n fieldRef: reference\r\n });\r\n }\r\n\r\n isEqual(compareField: DataQueryField) {\r\n return this.ID == compareField.ID\r\n && this.CategoryID == compareField.CategoryID\r\n && this.CategoryName == compareField.CategoryName\r\n }\r\n}\r\n","export class FieldAutofillOption {\r\n\tdisplayString: string;\r\n\tapplyString: string;\r\n}","import { DataQueryField } from './data-query-field.model';\r\nimport { DataQueryRelationship } from './data-query-relationship.model';\r\n\r\nexport class DataQueryCluster {\r\n\r\n // Properties\r\n fields: DataQueryField[] = [];\r\n relationships: DataQueryRelationship[] = [];\r\n\r\n // Constructor\r\n constructor(\r\n fields: DataQueryField[] = [],\r\n relationships: DataQueryRelationship[] = []\r\n ) {\r\n this.fields = fields;\r\n this.relationships = relationships;\r\n }\r\n\r\n // Accessors\r\n get size() {\r\n return this.fields.length;\r\n }\r\n\r\n // Functions\r\n addField(field: DataQueryField) {\r\n this.fields.push(field);\r\n }\r\n\r\n addRelationship(relationship: DataQueryRelationship) {\r\n this.relationships.push(relationship);\r\n }\r\n}","import { DataQueryCategory } from './data-query-category.model';\r\nimport { DataQueryField } from './data-query-field.model';\r\nimport { DataQueryObject } from './data-query-object.model';\r\nimport { DataQuery } from './data-query.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { NestedData } from '../../../shared-components/virtualized-table/nested-data';\r\nimport { FieldAutofillOption } from '../field-search/field-autofill-option';\r\nimport { DataQueryRelationship } from './data-query-relationship.model';\r\nimport { DataQueryPreferences } from '../../../shared-components/user-preferences/data-query-preferences.model';\r\nimport { DataQueryCluster } from './data-query-cluster.model';\r\n\r\ninterface VirtualizedTableParameters {\r\n fieldSearch?: string;\r\n V10?: boolean;\r\n allowTab?: boolean;\r\n click?: (event: MouseEvent, nestedData: NestedData) => void,\r\n keydown?: (event: KeyboardEvent, nestedData: NestedData) => void;\r\n filterColumnSQL?: string[];\r\n filterColumnFieldName?: string[];\r\n disabledFields?: { [fieldId: string]: boolean };\r\n currentQuery?: DataQuery;\r\n currentNestedData?: NestedData[];\r\n preferences?: DataQueryPreferences;\r\n validCategories?: DataQueryCategory[];\r\n}\r\n\r\nexport class DataQueryInformation {\r\n\r\n // Static Properties\r\n static virtualizedTableColumns = {\r\n 'field': ['data'],\r\n 'category': ['more', 'data'],\r\n 'object': ['more', 'data']\r\n };\r\n\r\n // Properties\r\n categories: DataQueryCategory[] = [];\r\n fields: DataQueryField[] = [];\r\n objects: DataQueryObject[] = [];\r\n recentQueries: DataQuery[] = [];\r\n recentStudentFilters: DataQuery[] = [];\r\n recentCourseFilters: DataQuery[] = [];\r\n recentStaffFilters: DataQuery[] = [];\r\n relationships: DataQueryRelationship[] = [];\r\n userCategories: number[] = [];\r\n visibleInformation: DataQueryInformation;\r\n defaultQuery: DataQuery;\r\n organized = false;\r\n initialized = false;\r\n\r\n // Class Functions\r\n get visibleObjects() {\r\n // PRE: the information is organized\r\n // POST: returns the visible objects\r\n return this.objects.filter(object =>\r\n !!object.categories.find(category =>\r\n !!category.fields.find(field => field.Visible)\r\n )\r\n );\r\n }\r\n\r\n // Methods\r\n getField(searchFunction: (value: DataQueryField) => boolean) {\r\n // POST: returns a duplicate of the field specified by the search function\r\n const field = this.fields.find(searchFunction);\r\n if (field) {\r\n return field.duplicate();\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n organize() {\r\n // PRE: the categories, fields, and objects are set, and the preconditions of each organize function\r\n // POST: aligns the data such that each one references the others\r\n this.organized = true;\r\n this.organizeObjects();\r\n this.organizeCategories();\r\n this.organizeFilters();\r\n this.initialized = true;\r\n }\r\n\r\n organizeObjects() {\r\n // PRE: if an object has categories, ALL OBJECTS HAVE CATEGORIES\r\n // POST: organizes the objects with the categories\r\n let resetCategories = false;\r\n this.objects.forEach(object => {\r\n\r\n // If it is not initialized, it needs to go through the process of setting the downward references\r\n if (!this.initialized) {\r\n\r\n // If it already has categories, treat those as authoritative\r\n if (object.categories && object.categories.length > 0) {\r\n\r\n // Removing old categories because we no longer need them\r\n if (!resetCategories) {\r\n this.categories = [];\r\n resetCategories = true;\r\n }\r\n\r\n // Setting new categories\r\n for (let i = 0; i < object.categories.length; i++) {\r\n object.categories[i] = System.convert(object.categories[i], new DataQueryCategory());\r\n object.categories[i].object = object;\r\n if (!object.categories[i].ObjectName) {\r\n object.categories[i].ObjectName = object.ObjectName;\r\n }\r\n this.categories.push(object.categories[i]);\r\n }\r\n }\r\n\r\n // If it does not have categories, compose new ones\r\n else {\r\n object.categories = [];\r\n this.categories.forEach(category => {\r\n if (category.ObjectID == object.ID) {\r\n object.categories.push(category);\r\n category.object = object;\r\n if (!category.ObjectName) {\r\n category.ObjectName = object.ObjectName;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // If it is initialized, it just needs to reset the upward references\r\n else {\r\n object.categories.forEach(category => {\r\n category.object = object;\r\n });\r\n }\r\n });\r\n }\r\n\r\n organizeCategories() {\r\n // PRE: if an category has fields, ALL CATEGORIES HAVE FIELDS\r\n // POST: organizes the categories with the fields\r\n let resetFields = false;\r\n this.categories.forEach(category => {\r\n\r\n // If it is not initialized, it needs to compose the downward references\r\n if (!this.initialized) {\r\n\r\n // If it has fields, treat those as authoritative\r\n if (category.fields && category.fields.length > 0) {\r\n\r\n // Removing fields because we no longer need them\r\n if (!resetFields) {\r\n this.fields = [];\r\n resetFields = true;\r\n }\r\n\r\n // Setting the new fields\r\n for (let i = 0; i < category.fields.length; i++) {\r\n category.fields[i] = System.convert(category.fields[i], new DataQueryField());\r\n category.fields[i].category = category;\r\n category.fields[i].object = category.object;\r\n if (!category.fields[i].CategoryName) {\r\n category.fields[i].CategoryName = category.CategoryName;\r\n }\r\n if (!category.fields[i].ObjectName) {\r\n category.fields[i].ObjectName = category.ObjectName;\r\n }\r\n this.fields.push(category.fields[i]);\r\n }\r\n }\r\n\r\n // If it does not have fields, compose new ones\r\n else {\r\n category.fields = [];\r\n category.isUserCategory = this.userCategories.length == 0 || this.userCategories.includes(category.ID);\r\n this.fields.forEach(field => {\r\n if (field.CategoryID == category.ID && field.UserDefinedTabId == category.UserDefinedTabId) {\r\n category.fields.push(field);\r\n field.category = category;\r\n field.object = category.object;\r\n if (!field.CategoryName) {\r\n field.CategoryName = category.CategoryName;\r\n }\r\n if (!field.ObjectName) {\r\n field.ObjectName = category.ObjectName;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // If it is initialized, it just needs to set the upward references\r\n else {\r\n category.fields.forEach(field => {\r\n field.category = category;\r\n field.object = category.object;\r\n });\r\n }\r\n });\r\n }\r\n\r\n organizeFilters() {\r\n // POST: organizes the filters with the fields\r\n this.fields.forEach(field => {\r\n field.Filters = [];\r\n if (field.Filters) {\r\n field.Filters.forEach(filter => {\r\n filter.field = field;\r\n });\r\n }\r\n });\r\n }\r\n\r\n disorganize() {\r\n // POST: resets data to its unaligned state\r\n // NOTE: maintains a downward hierarchy\r\n this.organized = false;\r\n\r\n // Disorganizing objects\r\n this.objects.forEach(object => {\r\n // delete object.categories;\r\n });\r\n\r\n // Disorganizing categories\r\n this.categories.forEach(category => {\r\n // delete category.fields;\r\n delete category.object;\r\n });\r\n\r\n // Disorganizing fields\r\n this.fields.forEach(field => {\r\n delete field.object;\r\n delete field.category;\r\n if (field.Filters) {\r\n field.Filters.forEach(filter => {\r\n delete filter.field;\r\n });\r\n }\r\n });\r\n }\r\n\r\n getVisible(V10, searchString = '', changed = false): DataQueryInformation {\r\n // PRE: V10. Optionally, a search string and whether or not the data has been changed\r\n // POST: returns this data structure panelFiltered for all of the non-visible fields\r\n\r\n // Returning the visible information if it's there\r\n if (this.visibleInformation && !searchString && !changed) {\r\n return this.visibleInformation;\r\n }\r\n\r\n // Initializing visible information\r\n this.visibleInformation = new DataQueryInformation();\r\n Object.assign(this.visibleInformation, this);\r\n\r\n // Removing categories\r\n this.categories.forEach(category => {\r\n category.isUserCategory = this.userCategories.length == 0 || this.userCategories.includes(category.ID);\r\n });\r\n this.visibleInformation.categories = this.visibleInformation.categories.filter(\r\n function (category) {\r\n return category.fields.length > 0 && !category.Deleted && category.isUserCategory;\r\n }\r\n );\r\n\r\n // Removing fields\r\n this.visibleInformation.fields = this.visibleInformation.fields.filter(\r\n function (field) {\r\n return field.Visible &&\r\n !field.Deleted &&\r\n field.DisplayName &&\r\n (!searchString || field.DisplayName.toLowerCase().indexOf(searchString.toLowerCase()) >= 0) &&\r\n (!V10 || (field.DisplayName != '(Students Actively Enrolled Today in) Class' && V10));\r\n }\r\n );\r\n\r\n // Removing objects\r\n this.visibleInformation.objects = this.visibleInformation.objects.filter(\r\n function (object) {\r\n return object.categories.length > 0 && !object.Deleted;\r\n }\r\n );\r\n\r\n // Returning information\r\n return this.visibleInformation;\r\n }\r\n\r\n virtualizedTableData(params: VirtualizedTableParameters = {\r\n fieldSearch: '',\r\n V10: false,\r\n allowTab: false,\r\n click: (event: MouseEvent, nestedData: NestedData) => { },\r\n keydown: (event: KeyboardEvent, nestedData: NestedData) => { },\r\n filterColumnSQL: null,\r\n filterColumnFieldName: null,\r\n disabledFields: null,\r\n currentQuery: null,\r\n currentNestedData: null,\r\n preferences: null,\r\n validCategories: null\r\n }): NestedData[] {\r\n // PRE: the information is organized\r\n // POST: returns the nested data for a virtualized table\r\n const newTableData = [];\r\n\r\n // Obtaining our partial searches\r\n // If we have two or more, apply it as object.category.field\r\n if (!params.fieldSearch) {\r\n params.fieldSearch = '';\r\n }\r\n const searchComponents = params.fieldSearch.split('.');\r\n const partialSearches = searchComponents.length > 1;\r\n\r\n // Getting all the query fields for filtering out categories\r\n const largestCluster = params.currentQuery ? this.getLargestClusterOfQuery(params.currentQuery) : null;\r\n\r\n // Filtering data\r\n this.objects.sort((a, b) => a.DisplayName.localeCompare(b.DisplayName)).forEach(object => {\r\n\r\n // Composing nested data objects\r\n const objectRoot = new NestedData(object, null, object.ObjectName + object.ID, 'object');\r\n const objectNameMatch = object.ObjectName.toLowerCase().includes(searchComponents[0].toLowerCase());\r\n objectRoot.style = {\r\n 'background': objectNameMatch && params.fieldSearch ? 'lightyellow' : 'inherit'\r\n };\r\n let matchingCurrentObject: NestedData = null;\r\n if (params.currentNestedData) {\r\n matchingCurrentObject = params.currentNestedData.find(data => data.ID == objectRoot.ID);\r\n if (matchingCurrentObject) {\r\n objectRoot.showChildren = matchingCurrentObject.showChildren;\r\n }\r\n }\r\n\r\n // Checking if we can see the object\r\n if (!object.Deleted && (!partialSearches || objectNameMatch)) {\r\n object.categories.sort((a, b) => a.DisplayName.localeCompare(b.DisplayName)).forEach(category => {\r\n\r\n // Composing the categories\r\n const categoryRoot = new NestedData(category, objectRoot, category.CategoryName + category.ID, 'category');\r\n const categoryNameMatch = searchComponents.length >= 2 ? category.CategoryName.toLowerCase().includes(searchComponents[1].toLowerCase()) : false;\r\n categoryRoot.style = {\r\n 'background': categoryNameMatch && params.fieldSearch ? 'lightyellow' : 'inherit'\r\n };\r\n let matchingCurrentCategory: NestedData = null;\r\n if (matchingCurrentObject) {\r\n matchingCurrentCategory = matchingCurrentObject.children.find(data => data.ID == categoryRoot.ID);\r\n if (matchingCurrentCategory) {\r\n categoryRoot.showChildren = matchingCurrentCategory.showChildren;\r\n }\r\n }\r\n\r\n // Checking Relationships\r\n const hasRelationship: boolean =\r\n !this.relationships\r\n || this.relationships.length == 0\r\n || !largestCluster\r\n || !!largestCluster.fields.find(f =>\r\n f.CategoryID == category.ID\r\n || this.relationships.find(rel =>\r\n rel.Category1ID == f.CategoryID\r\n && rel.Category2ID == category.ID\r\n )\r\n || this.relationships.find(rel =>\r\n rel.Category2ID == f.CategoryID\r\n && rel.Category1ID == category.ID\r\n )\r\n );\r\n\r\n // Checking if we can see the category\r\n if (\r\n !category.Deleted\r\n && ( // Checking the search\r\n !partialSearches\r\n || (searchComponents.length < 2 || categoryNameMatch)\r\n )\r\n && ( // Checking the SQL filter\r\n !params.filterColumnSQL\r\n || params.filterColumnSQL.length == 0\r\n || category.Fields.find(f => params.filterColumnSQL.map(o => o.toLowerCase()).includes(f.SQLColumnName.toLowerCase()))\r\n )\r\n && ( // Checking the column filter\r\n !params.filterColumnFieldName\r\n || params.filterColumnFieldName.length == 0\r\n || category.Fields.find(f => params.filterColumnFieldName.map(o => o.toLowerCase()).includes(f.FieldName.toLowerCase()))\r\n ) && ( // Checking our current query for relationships\r\n params.V10\r\n || (\r\n !params.preferences\r\n || params.preferences.ShowUnrelatedCategories\r\n || hasRelationship\r\n )\r\n ) && ( // Checking our valid categories\r\n !params.validCategories\r\n || params.validCategories.find(validCategory =>\r\n validCategory.ID == category.ID\r\n && validCategory.CategoryName == category.CategoryName\r\n )\r\n )\r\n ) {\r\n category.fields.sort((a, b) => a.DisplayName.localeCompare(b.DisplayName)).forEach(field => {\r\n\r\n // Checking the search\r\n // NOTE: we add if either the object matches OR the field matches when no . are present\r\n let fieldNameMatch = false;\r\n if (partialSearches) {\r\n if (searchComponents.length >= 3) {\r\n fieldNameMatch = field.DisplayName.toLowerCase().includes(searchComponents[2].toLowerCase());\r\n } else {\r\n fieldNameMatch = false;\r\n }\r\n } else {\r\n fieldNameMatch = field.DisplayName.toLowerCase().includes(params.fieldSearch.toLowerCase());\r\n }\r\n\r\n // Checking if we can see the field\r\n if (\r\n (\r\n (partialSearches && (searchComponents.length < 3 || fieldNameMatch)) ||\r\n (!partialSearches && (!params.fieldSearch || objectNameMatch || fieldNameMatch))\r\n )\r\n && (!params.V10 || field.DisplayName != '(Students Actively Enrolled Today in) Class')\r\n && (params.disabledFields ? !params.disabledFields[field.ObjectName + '-' + field.CategoryID + '-' + field.ID] : true)\r\n && field.Visible\r\n && !field.Deleted\r\n ) {\r\n\r\n // Composing the field;\r\n field.hasRelationship = hasRelationship;\r\n const fieldRoot = new NestedData(field, categoryRoot, field.DisplayName + field.ID, 'field');\r\n fieldRoot.style = {\r\n 'background': fieldNameMatch && params.fieldSearch ? 'lightyellow' : 'inherit'\r\n };\r\n fieldRoot.allowTab = params.allowTab;\r\n fieldRoot.ariaLabel = object.ObjectName + ', ' + category.CategoryName + ', ' + field.DisplayName;\r\n fieldRoot.click = params.click;\r\n fieldRoot.keydown = params.keydown;\r\n categoryRoot.children.push(fieldRoot);\r\n }\r\n });\r\n\r\n // Pushing the category if it is not empty\r\n if (categoryRoot.children.length != 0) {\r\n objectRoot.children.push(categoryRoot);\r\n }\r\n }\r\n });\r\n\r\n // Pushing the object to the table data if it is not empty or there is a name match for partial searches\r\n if (objectRoot.children.length != 0) {\r\n newTableData.push(objectRoot);\r\n }\r\n }\r\n });\r\n\r\n // Resetting the reference to trigger changes\r\n return newTableData;\r\n }\r\n\r\n getAutofillOptions(fieldSearch: string, V10 = false): FieldAutofillOption[] {\r\n // PRE: the search field for autofill\r\n // POST: obtains a list of autofill options for the field search\r\n const autofills: FieldAutofillOption[] = [];\r\n\r\n // Obtaining our partial searches\r\n // If we have two or more, apply it as object.category.field\r\n const searchComponents = fieldSearch.split('.');\r\n\r\n // Don't do any autofilling if there is a period without a letter behind it\r\n // This prevents some weirdness with '.' and '..'\r\n for (let i = 0; i < searchComponents.length; i++) {\r\n if (searchComponents[i] == '' && (i == 0 || searchComponents[i - 1] == '')) {\r\n return [];\r\n }\r\n }\r\n\r\n // Obtaining qualifying objects\r\n this.objects.forEach(object => {\r\n if (object.ObjectName.toLowerCase().includes(searchComponents[0].toLowerCase())) {\r\n\r\n // Pushing object autofills if the length is equal to 1\r\n if (searchComponents.length == 1) {\r\n const objectAutofill = new FieldAutofillOption();\r\n objectAutofill.displayString = object.ObjectName;\r\n objectAutofill.applyString = object.ObjectName;\r\n autofills.push(objectAutofill);\r\n }\r\n\r\n // Obtaining qualifying categories\r\n else {\r\n object.categories.forEach(category => {\r\n if (searchComponents.length >= 2 && category.CategoryName.toLowerCase().includes(searchComponents[1].toLowerCase())) {\r\n\r\n // Pushing category autofills if the length is equal to 2\r\n if (searchComponents.length == 2) {\r\n const categoryAutofill = new FieldAutofillOption();\r\n categoryAutofill.displayString = category.CategoryName;\r\n categoryAutofill.applyString = object.ObjectName + '.' + category.CategoryName;\r\n autofills.push(categoryAutofill);\r\n }\r\n\r\n // Obtaining qualifying fields if the length is equal to 3\r\n else {\r\n category.fields.forEach(field => {\r\n\r\n // Composing autofills for qualifying fields\r\n if (field.DisplayName.toLowerCase().includes(searchComponents[2].toLowerCase()) &&\r\n (!V10 || field.DisplayName != '(Students Actively Enrolled Today in) Class') &&\r\n field.Visible) {\r\n const fieldAutofill = new FieldAutofillOption();\r\n fieldAutofill.displayString = field.DisplayName;\r\n fieldAutofill.applyString = object.ObjectName + '.' + category.CategoryName + '.' + field.DisplayName;\r\n autofills.push(fieldAutofill);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n // Returning the discovered autofill\r\n return autofills;\r\n }\r\n\r\n getRelationship(field1: DataQueryField, field2: DataQueryField): DataQueryRelationship {\r\n // PRE: the relationships are initialized\r\n // POST: returns a relationship if there is a relationship between the two fields\r\n return this.relationships.find(rel =>\r\n !rel.Deleted\r\n && (\r\n (\r\n rel.Category1ID == field2.CategoryID\r\n && rel.Category2ID == field1.CategoryID\r\n ) || (\r\n rel.Category1ID == field1.CategoryID\r\n && rel.Category2ID == field2.CategoryID\r\n )\r\n )\r\n );\r\n }\r\n\r\n getClusters(fields: DataQueryField[]): DataQueryCluster[] {\r\n // PRE: the relationships are initialized\r\n // POST: determines the clusters of fields\r\n const clusters: DataQueryCluster[] = [];\r\n\r\n // A field is only a part of one cluster, so we iterate through the fields until we've accounted for them all\r\n const fieldsAccounted: DataQueryField[] = [];\r\n let fieldsNeeded = System.clone(fields);\r\n while (fieldsAccounted.length != fields.length) { // While we haven't accounted for every field\r\n\r\n // Start from the first unaccounted field\r\n const currentCluster = new DataQueryCluster(\r\n [fieldsNeeded[0]]\r\n );\r\n fieldsAccounted.push(fieldsNeeded[0]);\r\n fieldsNeeded = fieldsNeeded.slice(1);\r\n\r\n // Finding all the fields we can get to from the current cluster\r\n let foundFields = false;\r\n do {\r\n\r\n // We haven't found any fields at the start of each iteration\r\n foundFields = false;\r\n\r\n // From field needed A and cluster field B, is there a relationship A -> B?\r\n for (let i = 0; i < fieldsNeeded.length; i++) {\r\n for (let j = 0; j < currentCluster.size; j++) {\r\n const relationship = this.getRelationship(fieldsNeeded[i], currentCluster.fields[j]);\r\n if (relationship && !currentCluster.relationships.includes(relationship)) {\r\n currentCluster.addRelationship(relationship);\r\n }\r\n if (\r\n relationship\r\n || (\r\n fieldsNeeded[i].CategoryID == currentCluster.fields[j].CategoryID\r\n && fieldsNeeded[i].CategoryName == currentCluster.fields[j].CategoryName\r\n )\r\n ) {\r\n currentCluster.addField(fieldsNeeded[i]);\r\n fieldsAccounted.push(fieldsNeeded[i]);\r\n foundFields = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Resetting the fields we need after each iteration\r\n fieldsNeeded = fieldsNeeded.filter(field =>\r\n !fieldsAccounted.includes(field)\r\n )\r\n } while (foundFields)\r\n\r\n // Adding the cluster to our list of clusters\r\n clusters.push(currentCluster);\r\n }\r\n\r\n // Returning the clusters we've found\r\n return clusters;\r\n }\r\n\r\n getLargestCluster(fields: DataQueryField[]): DataQueryCluster {\r\n const clusters = this.getClusters(fields);\r\n if (clusters && clusters.length > 0) {\r\n return clusters.sort((a, b) => b.size - a.size)[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n getLargestClusterOfQuery(query: DataQuery): DataQueryCluster {\r\n let queryFields: DataQueryField[] = [];\r\n if (query.reportFields) {\r\n queryFields = queryFields.concat(query.reportFields);\r\n }\r\n if (query.filterFields) {\r\n queryFields = queryFields.concat(query.filterFields);\r\n }\r\n if (query.sortFields) {\r\n queryFields = queryFields.concat(query.sortFields);\r\n }\r\n return this.getLargestCluster(queryFields);\r\n }\r\n}\r\n","import {DataQueryResult} from './data-query-result.model';\r\n\r\nexport class DataQueryResultPage {\r\n\r\n\t// Static Properties\r\n\tstatic pageSizeOptions = [\r\n\t\t10,\r\n\t\t20,\r\n\t\t30,\r\n\t\t40,\r\n\t\t50,\r\n\t\t60,\r\n\t\t70,\r\n\t\t80,\r\n\t\t90,\r\n\t\t100,\r\n\t\t500,\r\n\t\t1000\r\n\t];\r\n\r\n\t// Properties\r\n\tpageNumber: number;\r\n\tqueryResult: DataQueryResult;\r\n}\r\n","import { DataQueryField } from './data-query-field.model';\r\nimport * as _ from 'lodash';\r\nimport { moveItemInArray } from '@angular/cdk/drag-drop';\r\n\r\nexport class DataQueryResult {\r\n\r\n // Server Properties\r\n Columns: DataQueryField[] = [];\r\n Data: any[][] = [];\r\n Errors: string;\r\n QueryString: string;\r\n RecordCounts: number;\r\n\r\n // Local Properties\r\n get ColumnHeaders(): string[] {\r\n const header: string[] = [];\r\n for (let i = 0; i < this.Columns.length; i++) {\r\n const alias = this.Columns[i].Alias != '' ? this.Columns[i].Alias : ('blankheader' + i);\r\n header.push(alias);\r\n }\r\n return header;\r\n }\r\n\r\n // Methods\r\n assertOrder(otherResults: DataQueryResult) {\r\n // PRE: another set of results with the same columns\r\n // POST: asserts this results order on that result set\r\n const columnOrder: number[] = [];\r\n otherResults.Columns.forEach(column => {\r\n const index = this.Columns.findIndex(o => _.isEqual(column, o));\r\n columnOrder.push(index);\r\n });\r\n const newColumns: DataQueryField[] = [];\r\n for (let i = 0; i < otherResults.Columns.length; i++) {\r\n newColumns[columnOrder[i]] = otherResults.Columns[i];\r\n }\r\n otherResults.Columns = newColumns;\r\n const newData: any[][] = [];\r\n otherResults.Data.forEach(dataRow => {\r\n const newDataRow: any[] = [];\r\n for (let j = 0; j < dataRow.length; j++) {\r\n newDataRow[columnOrder[j]] = dataRow[j];\r\n }\r\n newData.push(newDataRow);\r\n });\r\n otherResults.Data = newData;\r\n }\r\n\r\n reorder(indexA, indexB) {\r\n // PRE: moves the item from index A to index B, pushing \"out\" all the others\r\n // POST: switches the indexes on all results\r\n\r\n // Gathering excluded columns\r\n const excludedColumnAliases = ['lngStudentId', 'MassTools'];\r\n excludedColumnAliases.forEach(columnAlias => {\r\n const index = this.Columns.findIndex(column => column.Alias == columnAlias);\r\n if (index >= 0) {\r\n if (indexA >= index) {\r\n indexA += 1;\r\n }\r\n if (indexB >= index) {\r\n indexB += 1;\r\n }\r\n }\r\n });\r\n\r\n // Column Swap\r\n moveItemInArray(this.Columns, indexA, indexB);\r\n\r\n // Data Swap\r\n for (let i = 0; i < this.Data.length; i++) {\r\n moveItemInArray(this.Data[i], indexA, indexB);\r\n }\r\n }\r\n}\r\n","import { DataQueryField } from './data-query-field.model';\r\nimport { DataQueryRelationship } from './data-query-relationship.model';\r\nimport { DataQueryInformation } from './data-query-information';\r\n\r\nexport class DataQuery {\r\n\r\n\t// Server Properties\r\n\tCourseSearch: boolean;\r\n\tCreatedBy: number;\r\n\tCreatedOn: string;\r\n\tDeleted = false;\r\n\tDelimiter = 'Comma';\r\n\tDescription: string;\r\n\tDisplayMenu: boolean;\r\n\tExportType = 'Excel';\r\n\tID = -1;\r\n\tIncludeColumnHeadings = true;\r\n\tOtherDelimiter: string;\r\n\tOwnerID: number;\r\n\tOwnerName: string;\r\n\tPublished: boolean;\r\n\tQueryName: string;\r\n\tQueryXML = '';\r\n\tSQLScript = '';\r\n\tScope = 'Private';\r\n\tSelectedSites = '';\r\n\tSelectedSiteNames: string;\r\n\tStaffSearch: boolean;\r\n\tStudentSearch: boolean;\r\n\tUpdatedBy?: Date;\r\n\tUpdatedOn?: Date;\r\n SavedFromID: number;\r\n\r\n\t// Local Properties\r\n\tprivate _queryChanged = false;\r\n\tdistinct: boolean;\r\n\tcurrentYearOnly = true;\r\n\tcurrentSchoolOnly: boolean;\r\n\tcurrentlyActiveStudentsOnly: boolean;\r\n\tstudentEnrolledOnDate: boolean;\r\n\tstudentEnrollmentDate: Date;\r\n\tcourseName: string;\r\n\tsiteSectionId: string | number = 0;\r\n\treportFields: DataQueryField[] = [];\r\n\tsortFields: DataQueryField[] = [];\r\n\tfilterFields: DataQueryField[] = [];\r\n\trelationships: DataQueryRelationship[] = [];\r\n\tretrievedPages = [];\r\n\tresultColumnHeaders = [];\r\n\tresultData = [];\r\n\tisUnsaved = false;\r\n\txmlLoaded = false;\r\n\tfilterTranslation = '';\r\n\tqueryChangedSinceLastResult = true;\r\n\torganized = true;\r\n\tadvancedFilterApplied = false;\r\n\r\n\t// Class Functions\r\n\tget allFields(): DataQueryField[] {\r\n\t\t// POST: obtains all of the fields\r\n\t\treturn this.reportFields.concat(this.filterFields).concat(this.sortFields);\r\n\t}\r\n\r\n\tget queryChanged(): boolean {\r\n\t\treturn this._queryChanged;\r\n\t}\r\n\r\n\tset queryChanged(value: boolean) {\r\n\t\tthis._queryChanged = value;\r\n\t\tif (value) {\r\n\t\t\tthis.queryChangedSinceLastResult = true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Methods\r\n\tduplicate() {\r\n\t\t// POST: returns a duplicate of this query\r\n\t\tconst newQuery = new DataQuery();\r\n\t\tObject.assign(newQuery, this);\r\n\t\treturn newQuery;\r\n\t}\r\n\r\n\tdisorganize() {\r\n\t\t// POST: dissociates all of the objects and categories\r\n\t\tthis.organized = false;\r\n\t\tconst disorganizeCallback = (field: DataQueryField) => {\r\n\t\t\tfield.object = null;\r\n\t\t\tfield.category = null;\r\n\t\t\tfield.Filters.forEach(filter => {\r\n\t\t\t\tfilter.field = null;\r\n\t\t\t});\r\n\t\t};\r\n\t\tthis.reportFields.forEach(disorganizeCallback);\r\n\t\tthis.sortFields.forEach(disorganizeCallback);\r\n\t\tthis.filterFields.forEach(disorganizeCallback);\r\n\t}\r\n\r\n\torganize(information: DataQueryInformation, V10: boolean) {\r\n\t\t// PRE: organized information\r\n\t\t// POST: sets the fields properly\r\n\t\tthis.organized = true;\r\n\t\tif (!information.organized) {\r\n\t\t\tinformation.organize();\r\n\t\t}\r\n\t\tconst organizeCallback = (field: DataQueryField) => {\r\n\t\t\t// V9 has duplicate field ID's, so we need another criterion\r\n\t\t\tlet infoField: DataQueryField;\r\n\t\t\tif (V10) {\r\n\t\t\t\tinfoField = information.fields.find(f => f.ID == field.ID && f.FieldName == field.FieldName);\r\n\t\t\t} else {\r\n\t\t\t\tinfoField = information.fields.find(f => f.ID == field.ID && f.FieldName == field.FieldName && f.CategoryID == field.CategoryID);\r\n\t\t\t}\r\n\r\n\t\t\tif (infoField) {\r\n\t\t\t\tfield.category = infoField.category;\r\n\t\t\t\tfield.object = infoField.object;\r\n\t\t\t\tfield.Permission = infoField.Permission;\t// We do this to preserve user permissions\r\n\t\t\t}\r\n\t\t\t// field.category = information.categories.find(category => category.ID == field.CategoryID);\r\n\t\t\t// field.object = information.objects.find(object => object.ID == field.category.ObjectID);\r\n\t\t\tfield.Filters.forEach(filter => {\r\n\t\t\t\tfilter.field = field;\r\n\t\t\t});\r\n\t\t};\r\n\t\tthis.reportFields.forEach(organizeCallback);\r\n\t\tthis.sortFields.forEach(organizeCallback);\r\n\t\tthis.filterFields.forEach(organizeCallback);\r\n\t}\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQuery } from '../models/data-query.model';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\n\r\n@Component({\r\n selector: 'app-delete-query-dialog',\r\n templateUrl: './delete-query-dialog.component.html',\r\n styleUrls: ['./delete-query-dialog.component.css']\r\n})\r\nexport class DeleteQueryDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n query: DataQuery;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dataQueryService: DataQueryService,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data with the injected properties\r\n // POST: sets the injected properties\r\n this.query = this.data.query;\r\n }\r\n\r\n delete() {\r\n // PRE: the delete button is clicked\r\n // POST: deletes the query and closes the dialog box with true\r\n this.dataQueryService.deleteQuery(this.query,\r\n () => {\r\n this.dialogBox.close(true);\r\n },\r\n () => {\r\n this.sharedService.showBadSnackbar('Failed to delete query');\r\n }\r\n );\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box with false\r\n this.dialogBox.close(false);\r\n }\r\n\r\n // Methods\r\n\r\n}\r\n","\r\n

\r\n\tWARNING\r\n

\r\n\r\n\r\n\r\n\tThis will delete the query\r\n\t
\r\n\t{{query.QueryName}}\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
","\r\n
\r\n\r\n\t\r\n\t
\r\n\t\t

\r\n\t\t\tSaved Filters\r\n\t\t

\r\n\t\t

\r\n\t\t\tSaved Queries\r\n\t\t

\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tMore\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tName\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{query.QueryName}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tScope\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{query.Scope}}\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tOwner\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{query.OwnerName}}\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tAvailable to
Integration Services\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t{{query.Published ? 'Y' : ''}}\r\n\t\t\t\r\n\t\t
\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tLast Updated\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{query.LastUpdated | date: 'MM/dd/yy'}}\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tActions\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tDescription\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{{query.Description}}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t \r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tSelected Sites\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{{query.SelectedSiteNames}}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t
\r\n\r\n
\r\n
\r\n\t\r\n\t\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t
\r\n
","import { AfterViewInit, Component, ElementRef, EventEmitter, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { MenuItem } from '../../../shared-components/controls/menus/menu-item.model';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { DataQueryService } from '../data-query.service';\r\nimport { DeleteQueryDialogComponent } from '../delete-query-dialog/delete-query-dialog.component';\r\nimport { DataQueryPermissions } from '../models/data-query-permissions';\r\nimport { DataQueryResultPage } from '../models/data-query-result-page';\r\nimport { DataQuery } from '../models/data-query.model';\r\n\r\n@Component({\r\n selector: 'view-queries-dialog',\r\n templateUrl: './view-queries-dialog.component.html',\r\n styleUrls: ['./view-queries-dialog.component.css'],\r\n providers: [],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class ViewQueriesDialogComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // Injected Properties\r\n isStudentSearch: boolean;\r\n isCourseSearch: boolean;\r\n isStaffSearch: boolean;\r\n\r\n // Properties\r\n subscriptions: Subscription[] = [];\r\n queries: DataQuery[];\r\n V10: boolean;\r\n currentUser: User;\r\n permissions: DataQueryPermissions;\r\n querySearch = '';\r\n columns = ['more', 'name', 'scope', 'owner', 'last-updated', 'actions'];\r\n\r\n // Table Properties\r\n tableData = new TylerMatTableDataSource();\r\n pageSizeOptions = DataQueryResultPage.pageSizeOptions;\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n expandEmitter = new EventEmitter();\r\n @ViewChild('nameHeader', { read: ElementRef }) nameHeader: ElementRef;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private dataQueryService: DataQueryService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n get initialPageSize(): number {\r\n return this.dataQueryService.initialPageSize;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data with the injected properties\r\n // POST: initializes the data\r\n\r\n // Setting the injected and service properties\r\n if (this.data && this.data.isStudentSearch != undefined) {\r\n this.isStudentSearch = this.data.isStudentSearch;\r\n } else {\r\n this.isStudentSearch = this.dataQueryService.isStudentSearch;\r\n }\r\n\r\n if (this.data && this.data.isCourseSearch != undefined) {\r\n this.isCourseSearch = this.data.isCourseSearch;\r\n } else {\r\n this.isCourseSearch = this.dataQueryService.isCourseSearch;\r\n }\r\n\r\n if (this.data && this.data.isStaffSearch != undefined) {\r\n this.isStaffSearch = this.data.isStaffSearch;\r\n } else {\r\n this.isStaffSearch = this.dataQueryService.isStaffSearch;\r\n }\r\n\r\n // Setting local variables\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.currentUser = this.userService.currentUser;\r\n\r\n // Obtaining saved queries\r\n let observer;\r\n if (this.isStudentSearch) {\r\n observer = this.dataQueryService.studentFilters;\r\n } else if (this.isCourseSearch) {\r\n observer = this.dataQueryService.courseFilters;\r\n } else if (this.isStaffSearch) {\r\n observer = this.dataQueryService.staffFilters;\r\n } else {\r\n observer = this.dataQueryService.savedQueries;\r\n }\r\n observer.pipe(take(1)).subscribe(queries => {\r\n this.queries = queries;\r\n this.tableData.data = this.queries;\r\n });\r\n\r\n // Obtaining permissions\r\n this.dataQueryService.getPermissions().subscribe(permissions => {\r\n this.permissions = permissions;\r\n if (this.permissions.canPublishToIntegration) {\r\n this.columns.splice(4, 0, 'published');\r\n }\r\n });\r\n\r\n // Observing expand and collapse events\r\n this.expandEmitter.subscribe(expand => {\r\n this.tableData.expandAll(expand);\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets up the data source and sets the initial sorting\r\n this.tableData.paginator = this.paginator;\r\n this.tableData.sort = this.sort;\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes from all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n selectQuery(query: DataQuery) {\r\n // PRE: a query's name is click and provided to this function\r\n // POST: closes the dialog box with the query\r\n this.dialogBox.close(query);\r\n }\r\n\r\n menuItemClick(item: MenuItem) {\r\n // PRE: an item on an action menu is clicked\r\n // POST: performs the proper action\r\n let query: DataQuery = item.data;\r\n switch (item.itemName) {\r\n\r\n // Edit Action\r\n case 'Edit':\r\n if (query.ID == this.dataQueryService.currentQuery.ID) {\r\n query = this.dataQueryService.currentQuery;\r\n }\r\n this.dataQueryService.openAddEditQuery(\r\n query,\r\n true,\r\n false,\r\n (returnedQuery) => {\r\n if (returnedQuery) {\r\n for (let i = 0; i < this.queries.length; i++) {\r\n if (this.queries[i].ID == returnedQuery.ID) {\r\n Object.assign(this.queries[i], returnedQuery);\r\n this.tableData.data = this.queries;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n );\r\n break;\r\n\r\n // Export Action\r\n case 'Export Query':\r\n this.subscriptions.push(\r\n\r\n // Getting the report xml\r\n this.dataQueryService.getReportTemplateXML(query.ID).subscribe(reportXML => {\r\n\r\n // We reload the query XML to capture changes to how we interpret it\r\n this.dataQueryService.loadDataFromXML(query);\r\n query.QueryXML = this.dataQueryService.getQueryXML(\r\n this.dataQueryService.getAllFields(query)\r\n );\r\n\r\n // Setting up the XML document\r\n const xml = this.parseXMLText(query.QueryXML);\r\n const parser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(xml, 'text/xml');\r\n const exportSettings = xmlDoc.createElement('ExportSettings');\r\n const exportType = xmlDoc.createElement('ExportType');\r\n exportType.innerHTML = query.ExportType;\r\n const delimeter = xmlDoc.createElement('Delimeter');\r\n delimeter.innerHTML = query.Delimiter;\r\n const otherDelimeter = xmlDoc.createElement('OtherDelimeter');\r\n otherDelimeter.innerHTML = query.OtherDelimiter;\r\n const includeColumnHeadings = xmlDoc.createElement('IncludeColumnHeadings');\r\n includeColumnHeadings.innerHTML = query.IncludeColumnHeadings.toString();\r\n xmlDoc.getElementsByTagName('root')[0].appendChild(exportSettings);\r\n xmlDoc.getElementsByTagName('ExportSettings')[0].appendChild(exportType);\r\n xmlDoc.getElementsByTagName('ExportSettings')[0].appendChild(delimeter);\r\n xmlDoc.getElementsByTagName('ExportSettings')[0].appendChild(otherDelimeter);\r\n xmlDoc.getElementsByTagName('ExportSettings')[0].appendChild(includeColumnHeadings);\r\n\r\n // Organizing the query XML\r\n let queryXML = new XMLSerializer().serializeToString(xmlDoc);\r\n queryXML += reportXML;\r\n\r\n // Downloading the XML document\r\n const a = document.createElement('a');\r\n a.setAttribute('href', 'data:text/xml;charset=utf-16,' + encodeURIComponent(queryXML));\r\n a.setAttribute('download', query.QueryName + '.xml');\r\n a.style.display = 'none';\r\n document.body.appendChild(a);\r\n if (document.createEvent) {\r\n const event = document.createEvent('MouseEvents');\r\n event.initEvent('click', true, true);\r\n a.dispatchEvent(event);\r\n } else {\r\n a.click();\r\n }\r\n document.body.removeChild(a);\r\n })\r\n );\r\n break;\r\n\r\n // Delete Action\r\n case 'Delete':\r\n const dialogBox = this.dialog.open(DeleteQueryDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n query: item.data\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(del => {\r\n if (del) {\r\n if (this.queries.indexOf(item.data) > -1) {\r\n this.queries.splice(this.queries.indexOf(item.data), 1);\r\n }\r\n this.tableData.data = this.queries;\r\n this.applySearch();\r\n }\r\n })\r\n );\r\n break;\r\n\r\n // If we haven't found the proper action, simply do nothing\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n parseXMLText(text: any) {\r\n if (!text) {\r\n return '';\r\n }\r\n if (typeof text != 'string') {\r\n text = text.toString();\r\n }\r\n text = text.replace(/ /g, ' ');\r\n text = text.replace(/'/g, '\\'');\r\n text = text.replace(/"/g, '\"');\r\n text = text.replace(/"/g, '\"');\r\n text = text.replace(/=/g, '=');\r\n // Convert ampersands\r\n text = text.replace(/&/g, '&');\r\n text = text.replace(/&/g, '&');\r\n return text;\r\n }\r\n\r\n applySearch() {\r\n // PRE: the user blurs the search input, presses enter while focused on it, or clicks the magnifying glass\r\n // POST: applies the search criterion to the filters\r\n if (this.querySearch) {\r\n this.tableData.data = this.queries.filter(\r\n query => query.QueryName.toLowerCase().includes(this.querySearch.toLowerCase())\r\n );\r\n } else {\r\n this.tableData.data = this.queries;\r\n }\r\n }\r\n\r\n // Methods\r\n canEditAndDeleteQuery(query: DataQuery) {\r\n // PRE: a query to check against\r\n // POST: returns true if the user can save or delete the query\r\n return this.permissions && (\r\n query.OwnerID == this.currentUser.Id\r\n || (\r\n query.Scope == 'Selected Sites'\r\n && this.permissions.canUserModifySchoolQuery\r\n )\r\n || (\r\n query.Scope == 'District'\r\n && this.permissions.canUserModifyDistrictQuery\r\n )\r\n );\r\n }\r\n\r\n hasDetailRow(query: DataQuery) {\r\n // POST: returns if a query has a detail row\r\n return query.Description || (query.SelectedSites && query.Scope == 'Selected Sites');\r\n }\r\n\r\n getMenuItems(query: DataQuery) {\r\n // POST: returns the menu items for a query\r\n const menuItems: string[] = [];\r\n if (this.canEditAndDeleteQuery(query)) {\r\n return [\r\n 'Edit',\r\n 'Export Query',\r\n 'Delete'\r\n ];\r\n } else {\r\n return [\r\n 'Export Query'\r\n ];\r\n }\r\n }\r\n}\r\n","import { Student } from '../../shared-components/student/student.model';\r\n\r\nexport class DisciplineReferralStudent extends Student {\r\n\r\n // Static Properties\r\n static InvolvementTypes: {[key: number]: string} = {\r\n 1: 'Offender',\r\n 2: 'Victim',\r\n 3: 'Witness'\r\n };\r\n\r\n // Static Properties\r\n static V9InvolvementTypes: {[key: number]: string} = {\r\n 2: 'Offender',\r\n 0: 'Victim',\r\n 1: 'Witness'\r\n };\r\n // Server Properties\r\n IncidentComments: string;\r\n DeletedFromReferral = false;\r\n isSelected = false;\r\n StudentId: number;\r\n InvolvingType: string;\r\n CanSee: boolean;\r\n StudentsToReferralsId: number;\r\n\r\n // Class Functions\r\n constructor() {\r\n super();\r\n this.InvolvementType = Object.keys(DisciplineReferralStudent.InvolvementTypes)[0];\r\n }\r\n\r\n // Methods\r\n}\r\n","import { DisciplineReferralStudent } from './discipline-referral-student.model';\r\nimport { GeneralPreferences } from './../../shared-components/user-preferences/general-preferences.model';\r\nimport { Lookup } from './../../shared-components/lookup/lookup.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { StudentAlerts } from '../../shared-components/models/student-alerts.model';\r\n\r\nexport class DisciplineReferral {\r\n\r\n // Class Functions\r\n get statusString(): string {\r\n if (this.Status) {\r\n return DisciplineReferral.StatusCodes[this.Status];\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n get studentsFilterString(): string {\r\n let studentFilterString = '';\r\n if (this.Students) {\r\n this.Students.forEach(student => {\r\n if (studentFilterString) {\r\n studentFilterString += ', ';\r\n }\r\n studentFilterString += student.formattedNameWithNumber(this.generalPreferences);\r\n });\r\n } else {\r\n const student = new DisciplineReferralStudent();\r\n Object.assign(student, this);\r\n studentFilterString = student.formattedNameWithNumber(this.generalPreferences);\r\n }\r\n return studentFilterString;\r\n }\r\n get studentsNumberFilterString(): string {\r\n let studentsNumberFilterString = '';\r\n if (this.Students) {\r\n this.Students.forEach(student => {\r\n if (studentsNumberFilterString) {\r\n studentsNumberFilterString += ' ';\r\n }\r\n studentsNumberFilterString += student.formattedNumber(this.generalPreferences);\r\n });\r\n } else {\r\n const student = new DisciplineReferralStudent();\r\n Object.assign(student, this);\r\n studentsNumberFilterString = student.formattedNumber(this.generalPreferences);\r\n }\r\n return studentsNumberFilterString;\r\n }\r\n get studentsGradeFilterString(): string {\r\n let studentsGradeFilterString = '';\r\n if (this.Students) {\r\n this.Students.forEach(student => {\r\n if (studentsGradeFilterString) {\r\n studentsGradeFilterString += ' ';\r\n }\r\n studentsGradeFilterString += student.Grade;\r\n });\r\n } else {\r\n const student = new DisciplineReferralStudent();\r\n Object.assign(student, this);\r\n studentsGradeFilterString = student.Grade;\r\n }\r\n return studentsGradeFilterString;\r\n }\r\n\r\n get processing(): boolean {\r\n return this.Status == 'A' || this.Status == 'S' || this.Status == 'C';\r\n }\r\n\r\n static StatusCodesV9: string[] = [\r\n 'Accepted',\r\n 'Submitted to Admin',\r\n 'Classroom Action',\r\n 'Closed',\r\n 'No Action Needed',\r\n 'Rejected',\r\n 'In Progress'\r\n ];\r\n\r\n static StatusCodes: { [key: string]: string } = {\r\n 'P': 'In Progress',\r\n 'A': 'Accepted',\r\n 'S': 'Submitted',\r\n 'C': 'Completed',\r\n 'N': 'No Action Needed',\r\n 'R': 'Returned'\r\n };\r\n\r\n static StatusIds: { [key: string]: number } = {\r\n 'P': 0,\r\n 'A': 1,\r\n 'S': 2,\r\n 'C': 3,\r\n 'N': 4,\r\n 'R': 5\r\n };\r\n\r\n static InvolvingTypes: string[] = [\r\n 'Student(s)',\r\n 'Non-Student(s)',\r\n 'Student(s) and Non-Student(s)',\r\n 'Do Not Know'\r\n ];\r\n\r\n // Properties\r\n $id: string;\r\n AdminComment = '';\r\n AllowPBISOptions: boolean;\r\n Context = '';\r\n CourseId = 0;\r\n Date = new Date(System.junkDateString);\r\n Description = '';\r\n Disciplinarian?: any;\r\n EventComment = '';\r\n EventComments: string[];\r\n EventId: number;\r\n EventNumber: string;\r\n FirstName?: any;\r\n FunctionalMotivationId = '0';\r\n HideMultiEventComments: boolean;\r\n HomeroomTeacher = '';\r\n Id = 0;\r\n IncidentCodeId = '0';\r\n InterventionTypesDates?: string;\r\n InvolvingType = '0';\r\n IsDisciplineTeamMember: boolean;\r\n LastName?: any;\r\n Location?: string;\r\n LocationId?: string;\r\n MiddleName?: any;\r\n NickName?: any;\r\n PBISLocation?: any;\r\n PBISMotivation?: any;\r\n PBISOfficeManagedCount: any;\r\n PBISOthersInvolved?: any;\r\n PBISPriorInterventions?: any;\r\n PBISSelectedLocation: any = '';\r\n PBISSelectedMotivation: any = '';\r\n PBISSelectedOfficeManagedCount: any = '';\r\n PBISSelectedOthersInvolved: any = '';\r\n PBISSelectedPriorInterventions: any = '';\r\n PBISSelectedTimeRange = '';\r\n PBISTimeRange?: any;\r\n ReferredByUserId: number;\r\n ReportedBy?: string;\r\n RoomBus?: string;\r\n Schools?: Lookup[];\r\n ShowStudentLink: boolean;\r\n Site?: string;\r\n StaffName?: string;\r\n Status?: string;\r\n StatusId?: any;\r\n StudentId: number;\r\n StudentNumber?: any;\r\n Students?: DisciplineReferralStudent[];\r\n StudentsFromAllSchools: boolean;\r\n Time?: string;\r\n UnknownStudents: number;\r\n UseDisciplineTeams: boolean;\r\n UserManagedPBIS: boolean;\r\n Year?: any;\r\n Selected = false;\r\n ReportedByName: string;\r\n EventDescriptionMaxLength: number;\r\n EventCommentMaxLength: number;\r\n StudentCommentsMaxLength: number;\r\n AdministrativeCommentsMaxLength: number;\r\n ParentInformationMaxLength: number;\r\n LockReportedBy: boolean;\r\n LockAdministrativeComments: boolean;\r\n ParentInformation = '';\r\n StaffId: number;\r\n ReferralSiteId?: number;\r\n StudentAlerts: StudentAlerts[];\r\n\r\n // Local Properties\r\n generalPreferences: GeneralPreferences;\r\n\r\n // Class Functions\r\n get siteId() {\r\n return parseInt(this.Site, 10);\r\n }\r\n\r\n // Methods\r\n sortStudents() {\r\n if (this.Students) {\r\n this.Students.sort((a, b) => {\r\n\r\n // Ordering based on whether the student is known\r\n let aOrder = 0;\r\n let bOrder = 0;\r\n if (a.NonStudent) {\r\n aOrder = 1;\r\n } else if (a.UnknownStudent) {\r\n aOrder = 2;\r\n }\r\n if (b.NonStudent) {\r\n bOrder = 1;\r\n } else if (b.UnknownStudent) {\r\n bOrder = 2;\r\n }\r\n if (aOrder < bOrder) {\r\n return -1;\r\n } else if (aOrder > bOrder) {\r\n return 1;\r\n }\r\n\r\n // Ordering alphabetically\r\n else {\r\n return a.formattedNameWithNumber(this.generalPreferences).localeCompare(b.formattedNameWithNumber(this.generalPreferences));\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import {DisciplineReferralCourse} from './discipline-referral-course.model';\r\nimport {UserService} from './../../shared-components/user/user.service';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {System} from './../../shared-components/System';\r\nimport {YearService} from './../../shared-components/year/year.service';\r\nimport {Injectable} from '@angular/core';\r\nimport {DisciplineReferral} from './discipline-referral.model';\r\nimport {Observable} from 'rxjs';\r\nimport {ReferralNote} from './referral-note.model';\r\nimport {School} from '../../shared-components/year/school.model';\r\n\r\n@Injectable()\r\nexport class DisciplineReferralService {\r\n\r\n // Properties\r\n viewOnlySchools: School[] = [];\r\n addEditSchools: School[] = [];\r\n initialStatusFilter: string;\r\n\r\n // Class Functions\r\n constructor(\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private http: HttpClient\r\n ) {\r\n }\r\n\r\n deleteClassroomDisciplineReferral(referralId: number): Observable {\r\n // PRE: a referral ID signifying the referral to delete\r\n // POST: deletes that referral on the server (probably softly)\r\n const queryString = '?referralId=' + referralId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteClassroomDisciplineReferral' + queryString);\r\n }\r\n\r\n getClassroomDisciplineReferralNotes(disciplineReferral: DisciplineReferral) {\r\n // PRE: a discipline referral to get notes for\r\n // POST: obtains the notes for that referral\r\n const queryString = '?disciplineReferralId=' + disciplineReferral.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetClsssroomDisciplineReferralNotes' + queryString);\r\n }\r\n\r\n saveClassroomDisciplingReferralNotes(disciplineReferral: DisciplineReferral, referralNote: ReferralNote[]) {\r\n // PRE: a referral note and discipline referral to save the referral note to\r\n // POST: saves the referral note to the discipline referral\r\n const queryString = '?disciplineReferralId=' + disciplineReferral.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveClsssroomDisciplineReferralNotes' + queryString, referralNote);\r\n }\r\n\r\n getDisciplineReferralCourses(studentId: number): Observable {\r\n // PRE: a student to get courses for\r\n // POST: obtains the courses for a student\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&userIsTeacher=' + this.userService.currentUser.UserIsTeacher;\r\n return this.http.get(System.apiURL.Classroom + 'GetClsssroomDisciplineReferralCourses' + queryString);\r\n }\r\n}\r\n","import { AssignmentHeading } from './assignment-heading-preference.model';\r\nimport { StudentPreferenceColumn } from './student-column-preference.model';\r\nimport { AssignmentSortPreference } from './assignment-sort-preference.model';\r\n\r\nexport class GradebookPreferences {\r\n SyncPreferencesAcrossCourses: boolean;\r\n ShowUnitDropdown: boolean;\r\n ShowOnPortalRow: boolean;\r\n UseQuickAddWindow: boolean;\r\n DefaultShowOnPortal: boolean;\r\n AssignmentHeading: AssignmentHeading[] = [];\r\n SummaryCharacter: boolean;\r\n SummaryCharacterCount: number;\r\n SummaryCharacterSlide: boolean;\r\n SummaryCharacterSlideCount: number;\r\n ShowHorizontalHeading: boolean;\r\n AssignmentSort: AssignmentSortPreference[] = [];\r\n OriginalScore: boolean;\r\n Score: boolean;\r\n ScoreComment: boolean;\r\n EntireRowColumn: boolean;\r\n LetterGrades: boolean;\r\n WarnIfScoreEntered: boolean;\r\n PanelPopup: boolean;\r\n AutoSave: boolean;\r\n AutoSaveDuration: string;\r\n AvailableColumns: StudentPreferenceColumn[] = [];\r\n NonScrollingColumns: StudentPreferenceColumn[] = [];\r\n ScrollingColumns: StudentPreferenceColumn[] = [];\r\n ShowDroppedWithdrawn: boolean;\r\n ShowFuturStudents: boolean;\r\n StudentSortOrder: string;\r\n ShowProgressCycles: boolean;\r\n ShowTerms: boolean;\r\n ShowSemesters: boolean;\r\n ShowYearEnd: boolean;\r\n ShowAllTerms: boolean;\r\n PastTerms: string;\r\n PastTermEndedWithinNDays: number;\r\n FutureTerms: string;\r\n FutureTermStartingWithinNDays: number;\r\n ShowAssignmentsInStandards: boolean;\r\n DefaultForStandardsView: string;\r\n ShowHorizontalHeadingforStandardTab: boolean;\r\n ShowRowColumnnForSpecialMark: boolean;\r\n ReportCardGrades: number;\r\n ProjectFutureScores: boolean;\r\n IncludeCurrentCourseSection: boolean;\r\n FillBlankScores: string;\r\n FillBlankScoreValue: number;\r\n FillBlankScoreSpecialMarkId: string;\r\n FillBlankScoresAskEveryTime: boolean;\r\n CommentDelimiter: string;\r\n UseCommentCodes: boolean;\r\n ResetPreferences: boolean;\r\n ShowonlyStandardsCode: boolean;\r\n\r\n // Calculation Preferences\r\n FGradeCalculationType: string;\r\n SemesterFinalGradeCalculationPoints: string;\r\n SemesterFinalGradeCalculationCombo: string;\r\n NumericalGradeRoundTo: string;\r\n GPCWRound: string;\r\n GPCWRoundToValue: string;\r\n SemFinalRound: string;\r\n SemFinalRoundToValue: string;\r\n IsTotalPointCreated: boolean;\r\n SameCategoryWeights: boolean;\r\n PolicyOverrideCalculationType: boolean;\r\n PolicyOverrideAssignmentRound: boolean;\r\n PolicyOverrideGPCWRound: boolean;\r\n PolicyOverrideSemFinalRound: boolean;\r\n}","import {Observable, Subject} from 'rxjs';\r\nimport {Injectable, OnDestroy} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {System} from '../../../shared-components/System';\r\nimport {Category} from './models/category.model';\r\nimport {YearService} from '../../../shared-components/year/year.service';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {GradebookIndicator} from './models/gradebook-indicator.model';\r\n\r\n@AutoUnsubscribe()\r\n@Injectable()\r\nexport class SharedGradebookService implements OnDestroy {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n saveCategories(courseId: number, termId: number, categories: Category[]) {\r\n return this.http.post(System.apiURL.Classroom + 'SaveCategory?yearId=' + this.yearService.defaultYear.Id + '&courseId=' + courseId + '&termId=' + termId, categories);\r\n }\r\n\r\n deleteAttachment(attachmentId: number) {\r\n return this.http.get(System.apiURL.Classroom + 'DeleteGradebookAttachments?DocumentId=' + attachmentId);\r\n }\r\n\r\n clearLMSToken(lmsName: string) {\r\n return this.http.get(System.apiURL.Classroom + 'ClearLMSToken?lmsName=' + lmsName);\r\n }\r\n\r\n getLMSIntegrationLog(sectionId: number, lmsName: string): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetLMSIntegrationLog?sectionId=${sectionId}&lmsName=${lmsName}`, { observe: 'response' });\r\n }\r\n\r\n getGradebookIndicators(courseId: number, termId: number): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetGradebookIndicators?courseId=${courseId}&termId=${termId}`);\r\n }\r\n\r\n saveGradebookIndicator(gradebookIndicators: GradebookIndicator, courseId: number): Observable {\r\n return this.http.post(System.apiURL.Classroom + `SaveGradebookIndicator?siteSectionId=${courseId}`, gradebookIndicators);\r\n }\r\n\r\n deleteGradebookIndicator(id: number): Observable {\r\n return this.http.get(System.apiURL.Classroom + `DeleteGradebookIndicator?Id=${id}`);\r\n }\r\n\r\n setCommentSmartTags(student, comment: string) {\r\n comment = comment.replace(//g, student.FirstName.substring(0, 1).toLowerCase() + student.FirstName.substring(1));\r\n comment = comment.replace(//g, student.FirstName.substring(0, 1).toUpperCase() + student.FirstName.substring(1));\r\n comment = comment.replace(//gi, student.NickName);\r\n comment = comment.replace(//gi, student.GradeLevel);\r\n comment = comment.replace(//gi, student.StudentNumber);\r\n comment = comment.replace(//gi, student.SchoolName);\r\n comment = comment.replace(/||||||/gi, function x(text) {\r\n if (student.Gender && (student.Gender.toLowerCase() == 'f' || student.Gender.toLowerCase() == 'female')) {\r\n if (text.toLowerCase() == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '') {\r\n if (text.substring(0, 2) == '' || text.toLowerCase() == '') {\r\n text = (text.substring(0, 2) == '' || text.toLowerCase() == 'her') {\r\n text = (text.substring(0, 2) == '') {\r\n text = (text.substring(0, 2) == '();\r\n observableisProgressCycleCheckedStream$ = this.observableisProgressCycleChecked.asObservable();\r\n\r\n // --------------- Observable Objects -----------\r\n // -- Preferences\r\n gradebookPreferences: GradebookPreferences;\r\n observableGradebookPreferences = new Subject();\r\n observableGradebookPreferencesStream$ = this.observableGradebookPreferences.asObservable();\r\n // -- Recall Tab Change\r\n observableGradebookTabChange = new Subject();\r\n observableGradebookTabChangeStream$ = this.observableGradebookTabChange.asObservable();\r\n // -- Gradebook Settings\r\n gradebookSettings: GradebookSettings;\r\n observableGradebookSettings = new Subject();\r\n observableGradebookSettingsStream$ = this.observableGradebookSettings.asObservable();\r\n // -- Lookups\r\n observableLookups = new Subject();\r\n observableLookupsStream$ = this.observableLookups.asObservable();\r\n // -- Assignments\r\n assignments: Assignment[] = [];\r\n observableAssignments = new Subject();\r\n observableAssignmentsStream$ = this.observableAssignments.asObservable();\r\n observableAssignmentsSequence = new Subject();\r\n observableAssignmentsSequenceStream$ = this.observableAssignmentsSequence.asObservable();\r\n // -- Gradebook Students\r\n observableGradebookStudents = new Subject();\r\n observableGradebookStudentsStream$ = this.observableGradebookStudents.asObservable();\r\n // -- Gradebook Scores Tab\r\n observableGradebookScoresTab = new Subject();\r\n observableGradebookScoresTabStream$ = this.observableGradebookScoresTab.asObservable();\r\n // -- Gradebook Standards Tab\r\n observableGradebookStandardsTab = new Subject();\r\n observableGradebookStandardsTabStream$ = this.observableGradebookStandardsTab.asObservable();\r\n // -- Indicator: Show / Hide\r\n observableGradebookIndicator = new Subject();\r\n observableGradebookIndicatorStream$ = this.observableGradebookIndicator.asObservable();\r\n observableGradebookSGIndicator = new Subject();\r\n observableGradebookSGIndicatorStream$ = this.observableGradebookSGIndicator.asObservable();\r\n // -- User Permission\r\n observableUserPermission = new Subject();\r\n observableUserPermissionStream$ = this.observableUserPermission.asObservable();\r\n // -- Non-Scored Standards: Show / Hide\r\n observableGradebookNonScoredStandards = new Subject();\r\n observableGradebookNonScoredStandardsStream$ = this.observableGradebookNonScoredStandards.asObservable();\r\n // -- Gradebook Special Marks\r\n observableGradebookSpecialMarks = new Subject();\r\n observableGradebookSpecialMarksStream$ = this.observableGradebookSpecialMarks.asObservable();\r\n // -- Gradebook Mismatch Scores\r\n observableGradebookMismatchScores = new Subject();\r\n observableGradebookMismatchScoresStream$ = this.observableGradebookMismatchScores.asObservable();\r\n // -- Assignment Save and New\r\n observableGradebookAssignmentSaveAndNew = new Subject();\r\n observableGradebookAssignmentSaveAndNewStream$ = this.observableGradebookAssignmentSaveAndNew.asObservable();\r\n // -- Recalculate Standard Total Points\r\n observableGradebookRecalculateStandardTotalPoints = new Subject();\r\n observableGradebookRecalculateStandardTotalPointsStream$ = this.observableGradebookRecalculateStandardTotalPoints.asObservable();\r\n // -- Regenerate Tools Menu\r\n observableGradebookToolsMenu = new Subject();\r\n observableGradebookToolsMenuStream$ = this.observableGradebookToolsMenu.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private sharedService: SharedService,\r\n private sharedGradeBookService: SharedGradebookService\r\n ) {\r\n this.currentUser = this.userService.currentUser;\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.yearId = this.defaultYear.Id;\r\n this.schoolId = this.defaultYear.SchoolID;\r\n this.siteYearId = this.defaultYear.SiteYearId;\r\n this.selectedTab = 'Scores';\r\n this.selectedStandardTab = 'Standards for One Assignment';\r\n this.selectedReportingTab = 'Traditional';\r\n this.selectedReportingStandardTab = 'All Standards by Student';\r\n this.selectedAnalysisTab = 'Categories';\r\n }\r\n\r\n clearAllData() {\r\n this.gradebookSettings = null;\r\n this.showAssignment = false;\r\n this.showTrends = false;\r\n this.terms = [];\r\n this.categories = [];\r\n this.units = [];\r\n this.indicators = [];\r\n this.specialMarks = [];\r\n // this.gradeScaleDescriptions = [];\r\n this.gradebookStudents = [];\r\n this.gradebookStudentAlerts = [];\r\n this.undoStudentMarks = [];\r\n this.redoStudentMarks = [];\r\n this.gradebookMismatchScores = [];\r\n this.gradebookCurriculumStandards = [];\r\n this.curriculumMarkTypes = [];\r\n this.validCurriculumMarkTypes = '';\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.yearId = this.defaultYear.Id;\r\n this.schoolId = this.defaultYear.SchoolID;\r\n this.siteYearId = this.defaultYear.SiteYearId;\r\n this.selectedStandardTab = 'Standards for One Assignment';\r\n this.selectedReportingTab = 'Traditional';\r\n this.selectedReportingStandardTab = 'All Standards by Student';\r\n this.selectedAnalysisTab = 'Categories';\r\n this.studentDetailCallFromModel = false;\r\n this.analysisTerm = [];\r\n this.allAssignments = [];\r\n this.assignmentFormula = [];\r\n this.gradebookV9CategoryPointsSummary = [];\r\n this.clearCourseData();\r\n }\r\n\r\n clearCourseData() {\r\n this.assignments = [];\r\n this.clearScoreData();\r\n }\r\n\r\n clearScoreData() {\r\n this.unsavedChanges = false;\r\n this.scoresAssignments = [];\r\n this.scoresStudentMarks = [];\r\n this.assignmentsToStandards = [];\r\n this.standards = [];\r\n this.standardsStudentMarks = [];\r\n this.updateGradebookV9GradebookScoresTab(this.scoresStudentMarks);\r\n this.updateGradebookV9GradebookStandardsTab(this.assignmentsToStandards);\r\n this.updateGradebookTabChange('');\r\n }\r\n\r\n padZero(assignmentSequence: number): string {\r\n let result = assignmentSequence.toString();\r\n while (result.length < 3) {\r\n result = '0' + result;\r\n }\r\n return result;\r\n }\r\n\r\n getEffectiveScore(assignment: ScoresAssignment, studentMark: ScoresStudentMark) {\r\n studentMark.ScorePercentValue = null;\r\n studentMark.EffectiveScoreValue = null;\r\n let specialMark: SpecialMark;\r\n let scorePercentValue: number;\r\n let effectiveScoreValue: number;\r\n\r\n if (studentMark.GradeBookSpecialMarkCodeId != null && studentMark.GradeBookSpecialMarkCodeId > 0) {\r\n specialMark = this.specialMarks.filter(o => o.Id == studentMark.GradeBookSpecialMarkCodeId)[0];\r\n if (specialMark != null) {\r\n studentMark.GradeBookSpecialMarkCode = specialMark.Code;\r\n studentMark.GradeBookSpecialMarkDescription = specialMark.Description;\r\n if (specialMark.Operation == 0 || (specialMark.Code == 'MSNG' && specialMark.Operation == 1 && specialMark.Value == 0)) {\r\n if (studentMark.ScorePointValue != null) {\r\n specialMark = null;\r\n studentMark.GradeBookSpecialMarkCodeId = 0;\r\n studentMark.GradeBookSpecialMarkCode = '';\r\n studentMark.GradeBookSpecialMarkDescription = '';\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (studentMark.ScorePointValue == null && (studentMark.GradeBookSpecialMarkCodeId == null || studentMark.GradeBookSpecialMarkCodeId == 0)) {\r\n effectiveScoreValue = null;\r\n } else {\r\n if (assignment.BasePoints == null || assignment.BasePoints == 0) {\r\n scorePercentValue = null;\r\n effectiveScoreValue = studentMark.ScorePointValue;\r\n } else if (studentMark.GradeBookSpecialMarkCodeId == null || studentMark.GradeBookSpecialMarkCodeId == 0) {\r\n if (!isNaN(studentMark.ScorePointValue / assignment.BasePoints)) {\r\n scorePercentValue = parseFloat(((((studentMark.ScorePointValue * 100) / assignment.BasePoints) * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n effectiveScoreValue = parseFloat(((((studentMark.ScorePointValue * 100) / assignment.BasePoints) * assignment.BasePoints * 0.01 * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n }\r\n } else if (studentMark.GradeBookSpecialMarkCodeId != null && studentMark.GradeBookSpecialMarkCodeId > 0) {\r\n if (specialMark != null) {\r\n if (specialMark.Operation == 1) {\r\n if (!isNaN(specialMark.Value / assignment.BasePoints)) {\r\n scorePercentValue = parseFloat((((specialMark.Value * 100 / assignment.BasePoints) * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n effectiveScoreValue = parseFloat(((specialMark.Value * 100 / assignment.BasePoints * assignment.BasePoints * 0.01 * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n }\r\n } else if (specialMark.Operation == 2) {\r\n if (!isNaN(studentMark.ScorePointValue * specialMark.Value / assignment.BasePoints)) {\r\n scorePercentValue = parseFloat((((studentMark.ScorePointValue * specialMark.Value / assignment.BasePoints) * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n effectiveScoreValue = parseFloat((((studentMark.ScorePointValue * specialMark.Value / assignment.BasePoints) * assignment.BasePoints * 0.01 * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n }\r\n } else if (specialMark.Operation == 3) {\r\n if (studentMark.ScorePointValue == undefined) {\r\n studentMark.ScorePointValue = 0;\r\n }\r\n if (!isNaN((studentMark.ScorePointValue + specialMark.Value) * 100 / assignment.BasePoints)) {\r\n scorePercentValue = parseFloat(((((studentMark.ScorePointValue + specialMark.Value) * 100 / assignment.BasePoints) * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n effectiveScoreValue = parseFloat(((((studentMark.ScorePointValue + specialMark.Value) * 100 / assignment.BasePoints) * assignment.BasePoints * 0.01 * 100) / 100).toFixed(this.countDecimals(studentMark.ScorePointValue)));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n studentMark.EffectiveScoreValue = effectiveScoreValue != null ? effectiveScoreValue.toString() : studentMark.EffectiveScoreValue;\r\n if (scorePercentValue != null) {\r\n // scorePercentValue = this.gradebookSettings.CalculateSGColumnsPercentsRoundUp ? Math.round(scorePercentValue) : scorePercentValue;\r\n studentMark.ScorePercentValue = scorePercentValue + '%';\r\n }\r\n this.setIndicators(assignment, studentMark, specialMark);\r\n }\r\n\r\n countDecimals(value: number) {\r\n if (!value) {\r\n return 0;\r\n }\r\n // else if (Math.floor(value) === value) {\r\n // return 0;\r\n // }\r\n // return value.toString().split('.')[1].length || 0;\r\n return 2;\r\n }\r\n\r\n setIndicators(assignment: ScoresAssignment, studentMark: ScoresStudentMark, specialMark: SpecialMark = null) {\r\n if (assignment != null && studentMark != null) {\r\n if (studentMark.GradeBookStudentMarkId > 0 && assignment.UseObjectivesForPoints == false && studentMark.InvalidMark == false) {\r\n studentMark.ScoreBackgroundColor = '';\r\n studentMark.ScoreForeColor = '';\r\n\r\n let effectiveScore = parseFloat(studentMark.ScorePercentValue);\r\n if (isNaN(effectiveScore) == true && assignment.SystemGrade == true && studentMark.ScorePercentValue != null) {\r\n const scorePercentValue = studentMark.ScorePercentValue.split(' ');\r\n if (scorePercentValue.length == 2) {\r\n effectiveScore = parseFloat(scorePercentValue[1].replace('%', ''));\r\n }\r\n }\r\n\r\n if (isNaN(effectiveScore) == false) {\r\n const indicators = this.indicators;\r\n if (indicators.length > 0) {\r\n const assignmentIndicators = indicators.filter(o => o.AssignmentIndicator == true && (this.showIndicators == true || o.Visible == true) && (o.AssignmentId == assignment.GradeBookAssignmentId || (assignment.SystemGrade == false && o.AssignmentId == 0) || (assignment.SystemGrade == true && o.SystemGradeFinal == true)));\r\n const categoryIndicators = indicators.filter(o => o.AssignmentIndicator == false && (this.showIndicators == true || o.Visible == true) && (o.CategoryId == assignment.GradeBookAssignmentTypeId || (assignment.SystemGrade == false && o.CategoryId == 0) || (assignment.SystemGrade == true && o.SystemGradeFinal == true)));\r\n if (assignmentIndicators.length > 0 || categoryIndicators.length > 0) {\r\n const assignmentIndicator = assignmentIndicators.filter(i => i.FromRange <= effectiveScore && i.ToRange >= effectiveScore)[0];\r\n if (assignmentIndicator != null) {\r\n studentMark.ScoreBackgroundColor = assignmentIndicator.BackgroundColor;\r\n studentMark.ScoreForeColor = assignmentIndicator.ForegroundColor;\r\n } else {\r\n const categoryIndicator = categoryIndicators.filter(i => i.FromRange <= effectiveScore && i.ToRange >= effectiveScore)[0];\r\n if (categoryIndicator != null) {\r\n studentMark.ScoreBackgroundColor = categoryIndicator.BackgroundColor;\r\n studentMark.ScoreForeColor = categoryIndicator.ForegroundColor;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (studentMark.ScoreBackgroundColor == '') {\r\n if (specialMark == null && studentMark.GradeBookSpecialMarkCodeId != null && studentMark.GradeBookSpecialMarkCodeId > 0) {\r\n specialMark = this.specialMarks.filter(o => o.Id == studentMark.GradeBookSpecialMarkCodeId)[0];\r\n }\r\n if (specialMark != null && specialMark.ColorCode != '') {\r\n studentMark.ScoreBackgroundColor = specialMark.ColorCode;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateGradebookPreferences(gradebookPreferences: GradebookPreferences) {\r\n this.gradebookPreferences = gradebookPreferences;\r\n if (this.gradebookPreferences != undefined && this.gradebookPreferences.DefaultForStandardsView == 'Show') {\r\n this.showAssignment = true;\r\n } else {\r\n this.showAssignment = false;\r\n }\r\n\r\n if (this.gradebookPreferences != null) {\r\n if (this.gradebookPreferences.NonScrollingColumns.length > 0 && this.gradebookPreferences.NonScrollingColumns[0] == null) {\r\n this.gradebookPreferences.NonScrollingColumns = [];\r\n }\r\n\r\n if (this.gradebookPreferences.NonScrollingColumns.length == 0 && this.gradebookPreferences.ScrollingColumns.length == 0) {\r\n this.gradebookPreferences.NonScrollingColumns.push({\r\n Field: 'StudentName',\r\n DisplayName: 'Student Name',\r\n width: '280px'\r\n });\r\n }\r\n }\r\n\r\n this.observableGradebookPreferences.next(this.gradebookPreferences);\r\n }\r\n\r\n updateUserPermission(userPermissions: UserPermission[]) {\r\n this.userPermissions = userPermissions;\r\n this.observableUserPermission.next(userPermissions);\r\n }\r\n\r\n updateGradebookTabChange(selectedTab: string) {\r\n this.observableGradebookTabChange.next(selectedTab);\r\n }\r\n\r\n saveGradebookSelectionPreferences() {\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(this.userPreferencesService.gradebookV9SelectionPreferences));\r\n this.userPreferencesService.saveUserPreferences(0, '/OneSISGradebookSelectionPreferences', xmlStream, 0, '').subscribe();\r\n }\r\n\r\n saveGradebookAnalysisSettings() {\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(this.userPreferencesService.gradebookV9AnalysisSettings));\r\n this.userPreferencesService.saveUserPreferences(0, '/OneSISGradebookAnalysisSettings', xmlStream, 0, '').subscribe();\r\n }\r\n\r\n getGradebookV9Settings(): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Settings' + queryString);\r\n }\r\n\r\n updateGradebookV9Settings(gradebookSettings: GradebookSettings) {\r\n this.gradebookSettings = gradebookSettings;\r\n this.observableGradebookSettings.next(gradebookSettings);\r\n }\r\n\r\n gradebookRecalculateAssignments(): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GradebookRecalculateAssignments' + queryString);\r\n }\r\n\r\n getGradebookV9Terms(yearId: number, schoolId: number, siteSectionId: number, includeAllTerms: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&siteSectionId=' + siteSectionId +\r\n '&includeAllTerms=' + includeAllTerms;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Terms' + queryString);\r\n }\r\n\r\n getGradebookV9Categories(): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Categories' + queryString);\r\n }\r\n\r\n getGradebookV9CategorySequence(categoryId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&gradeBookAssignmentTypeId=' + categoryId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9CategorySequence' + queryString);\r\n }\r\n\r\n saveGradebookV9Categories(data: Category[]) {\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9Categories', data);\r\n }\r\n\r\n getGradebookV9Units(siteSectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&schoolId=' + this.schoolId +\r\n '&siteSectionId=' + siteSectionId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Units' + queryString);\r\n }\r\n\r\n getGradebookV9SpecialMarks(): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9SpecialMarks' + queryString);\r\n }\r\n\r\n updateGradebookV9Lookups(gradebookTerms: Term[]) {\r\n this.terms = gradebookTerms;\r\n this.observableLookups.next(gradebookTerms);\r\n }\r\n\r\n updateGradebookV9SpecialMarks(specialMarks: SpecialMark[]) {\r\n this.specialMarks = specialMarks;\r\n this.observableGradebookSpecialMarks.next(specialMarks);\r\n }\r\n\r\n saveStudentSpecialGradeScale(studentId: number, gradeScaleDescriptionId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&gradeScaleDescriptionId=' + gradeScaleDescriptionId;\r\n return this.http.get(System.apiURL.Classroom + 'SaveStudentSpecialGradeScale' + queryString);\r\n }\r\n\r\n getGradebookV9Assignments(siteSectionId: number, termId: number, assignmentTypeId: number, gradebookUnitId: number, assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + siteSectionId +\r\n '&termId=' + termId +\r\n '&assignmentTypeId=' + assignmentTypeId +\r\n '&gradebookUnitId=' + gradebookUnitId +\r\n '&gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Assignments' + queryString);\r\n }\r\n\r\n updateGradebookV9Assignments(gradebookAssignments: Assignment[]) {\r\n this.assignments = gradebookAssignments;\r\n this.observableAssignments.next(gradebookAssignments);\r\n }\r\n\r\n getGradebookV9AssignmentHomework(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9AssignmentHomework' + queryString);\r\n }\r\n\r\n getGradebookV9Attachments(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Attachments' + queryString);\r\n }\r\n\r\n getGradebookV9CurriculumStandards(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&districtSubjectId=' + this.course.SubjectId +\r\n '&gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9CurriculumStandards' + queryString);\r\n }\r\n\r\n saveGradebookV9Assignments(copyToAssignments: number, recurrenceOption: string, recurrenceDuration: string, recurrenceWeeks: number, recurrenceUntilDate: string, siteSectionIds: string, data: Assignment[]): Observable {\r\n let queryString = '';\r\n queryString += '?districtSubjectId=' + this.course.SubjectId +\r\n '©ToAssignments=' + copyToAssignments +\r\n '&recurrenceOption=' + recurrenceOption +\r\n '&recurrenceDuration=' + recurrenceDuration +\r\n '&recurrenceWeeks=' + recurrenceWeeks +\r\n '&recurrenceUntilDate=' + recurrenceUntilDate +\r\n '&siteSectionIds=' + siteSectionIds;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9Assignments' + queryString, data);\r\n }\r\n\r\n saveGradebookV9AssignmentShowOnPortal(assignmentId: number, showOnPortal: boolean) {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId +\r\n '&showOnPortal=' + showOnPortal;\r\n return this.http.get(System.apiURL.Classroom + 'SaveGradebookV9AssignmentShowOnPortal' + queryString);\r\n }\r\n\r\n deleteGradebookV9Assignment(assignmentId: number) {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteGradebookV9Assignment' + queryString);\r\n }\r\n\r\n getGradebookV9Formula(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Formula' + queryString);\r\n }\r\n\r\n saveGradebookV9Formula(assignmentId: number, formula: Formula) {\r\n let queryString = '';\r\n queryString += '?gradebookAssignmentId=' + assignmentId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9Formula' + queryString, formula);\r\n }\r\n\r\n getGradebookV9Student(): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Student' + queryString);\r\n }\r\n\r\n updateGradebookV9GradebookStudents(students: GradebookStudent[]) {\r\n this.gradebookStudents = students;\r\n this.observableGradebookStudents.next(students);\r\n }\r\n\r\n getGradebookV9ScoresAssignments(gradebookAssignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&gradebookAssignmentId=' + gradebookAssignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9ScoresAssignments' + queryString);\r\n }\r\n\r\n getGradebookV9ScoresStudentMarks(gradebookAssignmentId: number, studentId: number, assignmentTypeId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + assignmentTypeId +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&gradebookAssignmentId=' + gradebookAssignmentId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9ScoresStudentMarks' + queryString);\r\n }\r\n\r\n updateGradebookV9GradebookScoresTab(scoresStudentMarks: ScoresStudentMark[]) {\r\n this.scoresStudentMarks = scoresStudentMarks;\r\n this.observableGradebookScoresTab.next(scoresStudentMarks);\r\n }\r\n\r\n saveGradebookV9ScoresStudentMarks(studentMarks: ScoresStudentMark[]) {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9ScoresStudentMarks' + queryString, studentMarks);\r\n }\r\n\r\n saveGradebookV9StudentScoreComment(gradebookStudentMarkId: number, comment: string[]) {\r\n let queryString = '';\r\n queryString += '?gradebookStudentMarkId=' + gradebookStudentMarkId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9StudentScoreComment' + queryString, comment);\r\n }\r\n\r\n getGradebookV9StudentMarksByStudentId(studentId: number, gradeBookAssignmentId: number, data: string[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&studentId=' + studentId +\r\n '&gradeBookAssignmentId=' + gradeBookAssignmentId +\r\n '&termDefinitionId=' + this.selectedTerm.Id +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'GetGradebookV9StudentMarksByStudentId' + queryString, data);\r\n }\r\n\r\n getGradebookV9AssignmentsToStandards(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9AssignmentsToStandards' + queryString);\r\n }\r\n\r\n getGradebookV9Standards(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Standards' + queryString);\r\n }\r\n\r\n getGradebookV9StandardsStudentMarks(assignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&gradebookAssignmentId=' + assignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9StandardsStudentMarks' + queryString);\r\n }\r\n\r\n updateGradebookV9GradebookStandardsTab(assignmentsToStandards: AssignmentToStandard[]) {\r\n this.assignmentsToStandards = assignmentsToStandards;\r\n this.observableGradebookStandardsTab.next(assignmentsToStandards);\r\n }\r\n\r\n saveGradebookV9StandardsStudentMarks(data: StandardsStudentMark[]) {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9StandardsStudentMarks' + queryString, data);\r\n }\r\n\r\n getGradebookV9StandardExportBase64(tabName: string, subTabName: string): Observable {\r\n const selectedStandardStudentId = this.selectedStandardStudentId != undefined ? this.selectedStandardStudentId : 0;\r\n const selectedStandardAssignmentId = this.selectedStandardAssignmentId != undefined ? this.selectedStandardAssignmentId : 0;\r\n const courseObjectiveId = this.selectedStandardId != undefined ? this.selectedStandardId : 0;\r\n const StandardAnalysisType = this.userPreferencesService.gradebookV9SelectionPreferences.StandardAnalysisType;\r\n\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&studentId=' + selectedStandardStudentId +\r\n '&assignmentId=' + selectedStandardAssignmentId +\r\n '&courseObjectiveId=' + courseObjectiveId +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&tabName=' + tabName +\r\n '&subTabName=' + subTabName +\r\n '&standardAnalysisType=' + StandardAnalysisType;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9StandardExportBase64' + queryString);\r\n }\r\n\r\n getGradebookV9RCGExportBase64(tabName: string, subTabName: string): Observable {\r\n let selectedStandardStudentId = this.selectedStandardStudentId != undefined ? this.selectedStandardStudentId : 0;\r\n const selectedStandardAssignmentId = this.selectedStandardAssignmentId != undefined ? this.selectedStandardAssignmentId : 0;\r\n let courseObjectiveId = this.selectedStandardId != undefined ? this.selectedStandardId : 0;\r\n const StandardAnalysisType = this.userPreferencesService.gradebookV9SelectionPreferences.StandardAnalysisType;\r\n\r\n let termId = 0;\r\n if (tabName == 'Standards' && subTabName == 'All Standards by Student') {\r\n selectedStandardStudentId = this.userPreferencesService.gradebookV9SelectionPreferences.RCGStandardByStudentId;\r\n termId = this.userPreferencesService.gradebookV9SelectionPreferences.RCGStandardByStudentTermId;\r\n } else if (tabName == 'Standards' && subTabName == 'All Students by Standard') {\r\n courseObjectiveId = this.userPreferencesService.gradebookV9SelectionPreferences.RCGStudentByStandardId;\r\n termId = this.userPreferencesService.gradebookV9SelectionPreferences.RCGStudentByStandardTermId;\r\n }\r\n\r\n\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + termId +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&studentId=' + selectedStandardStudentId +\r\n '&assignmentId=' + selectedStandardAssignmentId +\r\n '&courseObjectiveId=' + courseObjectiveId +\r\n '&gradebookUnitId=' + this.selectedUnit.Id +\r\n '&tabName=' + tabName +\r\n '&subTabName=' + subTabName +\r\n '&standardAnalysisType=' + StandardAnalysisType;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9RCGExportBase64' + queryString);\r\n }\r\n\r\n getGradebookV9ExportBase64(): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&assignmentTypeId=' + this.selectedCategory.Id +\r\n '&gradebookUnitId=' + this.selectedUnit.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9ExportBase64' + queryString);\r\n }\r\n\r\n saveGradebookV9CopyAssignments(data: string[]): Observable {\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9CopyAssignments', data);\r\n }\r\n\r\n getGradebookV9BackupSets(backupId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&backupId=' + backupId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9BackupSets' + queryString);\r\n }\r\n\r\n createGradebookV9Backup(backupCreateNewOption: number, backupCreateNewText: string): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + this.course.Id +\r\n '&siteYearId=' + this.siteYearId +\r\n '&backupCreateNewOption=' + backupCreateNewOption +\r\n '&backupCreateNewText=' + backupCreateNewText;\r\n return this.http.get(System.apiURL.Classroom + 'CreateGradebookV9Backup' + queryString);\r\n }\r\n\r\n restoreGradebookV9Backup(ignoreExceedDate: boolean, attachment: GradebookBackup): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&schoolId=' + this.schoolId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&ignoreExceedDate=' + ignoreExceedDate;\r\n return this.http.post(System.apiURL.Classroom + 'RestoreGradebookV9Backup' + queryString, attachment);\r\n }\r\n\r\n deleteGradebookV9BackupSet(backupId: number): Observable {\r\n let queryString = '';\r\n queryString += '?backupId=' + backupId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteGradebookV9BackupSet' + queryString);\r\n }\r\n\r\n gradebookV9FormulaCopy(desinationChoice: number, assignmentIds: number[]) {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&desinationChoice=' + desinationChoice;\r\n return this.http.post(System.apiURL.Classroom + 'GradebookV9FormulaCopy' + queryString, assignmentIds);\r\n }\r\n\r\n getGradebookV9SystemGradeAssignments(showUnmatchedFormulaAssignments: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + this.selectedTerm.Id +\r\n '&showUnmatchedFormulaAssignments=' + showUnmatchedFormulaAssignments;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9SystemGradeAssignments' + queryString);\r\n }\r\n\r\n gradebookV9ResetFormulas() {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GradebookV9ResetFormulas' + queryString);\r\n }\r\n\r\n importObjMarksFromGradebookToStudentCurriculumMarks() {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'ImportObjMarksFromGradebookToStudentCurriculumMarks' + queryString);\r\n }\r\n\r\n saveGradebookV9SpecialMarks(data: SpecialMark[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9SpecialMarks' + queryString, data);\r\n }\r\n\r\n saveGradebookV9Units(gradebookUnits: Unit[]) {\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9Units', gradebookUnits);\r\n }\r\n\r\n deleteGradebookV9Unit(unitId: number) {\r\n let queryString = '';\r\n queryString += '?unitId=' + unitId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteGradebookV9Unit' + queryString);\r\n }\r\n\r\n saveGradebookV9StudentSequence(gradebookStudents: GradebookStudent[]) {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradebookV9StudentSequence' + queryString, gradebookStudents);\r\n }\r\n\r\n getGradebookV9CategoryPointsSummary(): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9CategoryPointsSummary' + queryString);\r\n }\r\n\r\n getGradebookV9MismatchScores(): Observable {\r\n const termId = this.selectedTerm == undefined ? 0 : this.selectedTerm.Id;\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + termId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9MismatchScores' + queryString);\r\n }\r\n\r\n updateGradebookV9MismatchScores(gradebookMismatchScores: GradebookMismatchScores[]) {\r\n this.gradebookMismatchScores = gradebookMismatchScores;\r\n this.observableGradebookMismatchScores.next(gradebookMismatchScores);\r\n }\r\n\r\n gradebookV9CalculateGPA(data: string[]) {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'GradebookV9CalculateGPA' + queryString, data);\r\n }\r\n\r\n // -------------------------- Other ---------------\r\n getSiteSectionByStudentId(studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetSiteSectionByStudentId' + queryString);\r\n }\r\n\r\n // -- TODO: Need to rewrite\r\n getGradeBookAssignmentByStudentId(selectedCourseId: number, studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id +\r\n '&siteSectionId=' + selectedCourseId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradeBookAssignmentReadByStudentId' + queryString);\r\n }\r\n\r\n // -- TODO: Need to rewrite\r\n gradeBookStudentMarksCopy(studentId: number, data: number[]) {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&studentId=' + studentId;\r\n return this.http.post(System.apiURL.Classroom + 'GradeBookStudentMarksCopy' + queryString, data);\r\n }\r\n\r\n // Report Card Grades //\r\n\r\n getReportCardGradesData(importGrades: boolean, importScoresForSeniorsOnly = false): Observable {\r\n let queryString = '';\r\n if (this.gradebookSettings != undefined) {\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&courseId=' + this.course.Id +\r\n '&importGrades=' + importGrades +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId +\r\n '&importScoresForSeniorsOnly=' + importScoresForSeniorsOnly;\r\n return this.http.get(System.apiURL.Classroom + 'GetReportCardGradesData' + queryString);\r\n }\r\n else {\r\n return of(null);\r\n }\r\n }\r\n\r\n getTermGradeListCommentLookup(includeInactive: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&includeInactive=' + includeInactive;\r\n return this.http.get(System.apiURL.Classroom + 'GetTermGradeListCommentLookup' + queryString);\r\n }\r\n\r\n saveReportCardGrades(usingPercentageGrades: boolean, termGrades: TermGrades[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId +\r\n '&courseId=' + this.course.Id +\r\n '&usingPercentageGrades=' + usingPercentageGrades;\r\n return this.http.post(System.apiURL.Classroom + 'SaveReportCardGrades' + queryString, termGrades);\r\n }\r\n\r\n getBehaviorSkillRecordForAllTermGradeCycles(studentId: string, usingPercentageGrades: boolean, curriculumHeaderTermType: TermgradeCycleHeader[]): Observable {\r\n let queryString = '';\r\n queryString = '?siteYearId=' + this.siteYearId +\r\n '&courseId=' + this.course.Id +\r\n '&studentId=' + studentId +\r\n '&usingPercentageGrades=' + usingPercentageGrades +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId;\r\n return this.http.post(System.apiURL.Classroom + 'GetBehaviorSkillRecordForAllTermGradeCycles' + queryString, curriculumHeaderTermType);\r\n }\r\n\r\n getCurriculumnMarksandStandards(termGrades: TermGrades[]): Observable {\r\n let queryString = '';\r\n queryString = '?siteYearId=' + this.siteYearId +\r\n '&yearId=' + this.yearId +\r\n '&courseId=' + this.course.Id +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId;\r\n return this.http.post(System.apiURL.Classroom + 'GetCurriculumnMarksandStandards' + queryString, termGrades);\r\n }\r\n\r\n getCurriculumMarkTypesReadForSubject(): Observable {\r\n return this.sharedService.getCurriculumMarkTypesReadForSubject(this.course.Id);\r\n }\r\n\r\n getCurriculumStudentsMarks() {\r\n let queryString = '';\r\n queryString = '?siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetCurriculumStudentsMarks' + queryString);\r\n }\r\n\r\n getBehaviorSkillRecord(usingPercentageGrades: boolean, termGrades: TermGrades[]): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id +\r\n '&usingPercentageGrades=' + usingPercentageGrades;\r\n return this.http.post(System.apiURL.Classroom + 'GetBehaviorSkillRecord' + queryString, termGrades);\r\n }\r\n\r\n getReportcardViewComments(termId: number, C360GradebookLimitNumberOfComments: boolean, currentDate: Date, forAssignments: boolean, termCommentStudentId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&schoolId=' + this.schoolId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + termId +\r\n '&C360GradebookLimitNumberOfComments=' + C360GradebookLimitNumberOfComments +\r\n '¤tDate=' + currentDate +\r\n '&forAssignments=' + forAssignments +\r\n '&termCommentStudentId=' + termCommentStudentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradingPeriodComments' + queryString);\r\n }\r\n\r\n getGradingPeriodComments(termId, C360GradebookLimitNumberOfComments, currentDate, forAssignments, termCommentStudentId): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&schoolId=' + this.schoolId +\r\n '&siteSectionId=' + this.course.Id +\r\n '&termId=' + termId +\r\n '&C360GradebookLimitNumberOfComments=' + C360GradebookLimitNumberOfComments +\r\n '¤tDate=' + currentDate +\r\n '&forAssignments=' + forAssignments +\r\n '&termCommentStudentId=' + termCommentStudentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradingPeriodComments' + queryString);\r\n }\r\n\r\n saveGradingPeriodComment(GradingPeriodCommentDTOs: GradingPeriodCommentDTO[]): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveGradingPeriodComment' + queryString, GradingPeriodCommentDTOs);\r\n }\r\n\r\n saveBehaviorSkillGrades(usingPercentageGrades: boolean, RCGBehaviorSkillsDTOs: BehaviorSkillGrades[]): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&courseId=' + this.course.Id +\r\n '&usingPercentageGrades=' + usingPercentageGrades +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveBehaviorSkillGrades' + queryString, RCGBehaviorSkillsDTOs);\r\n }\r\n\r\n saveCurriculumMarks(courseObjectives): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id;\r\n return this.http.post(System.apiURL.Classroom + 'SaveCurriculumMarks' + queryString, courseObjectives);\r\n }\r\n\r\n getGradebookAssignmentLinkedByObjectives(selectedObjectiveId: number): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id +\r\n '&SubjectId=' + this.course.SubjectId +\r\n '&siteYearId=' + this.siteYearId +\r\n '&selectedStudentId=' + selectedObjectiveId +\r\n '§ion=' + this.course.Section;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookAssignmentLinkedByObjectives' + queryString);\r\n }\r\n\r\n getGradebookAssignmentLinkedObjectivesByObjectiveId(selectedObjectiveId: number): Observable {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id +\r\n '&SubjectId=' + this.course.SubjectId +\r\n '&siteYearId=' + this.siteYearId +\r\n '&selectedObjectiveId=' + selectedObjectiveId +\r\n '§ion=' + this.course.Section;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookAssignmentLinkedObjectivesByObjectiveId' + queryString);\r\n }\r\n\r\n getValidGradeTemplates(id: number, studentId: number): Observable {\r\n const subjectId = this.course != null && this.course.SubjectId != null ? this.course.SubjectId : 0;\r\n let queryString = '';\r\n queryString += '?siteYearId=' + this.siteYearId +\r\n '&id=' + id +\r\n '&studentId=' + studentId +\r\n '&subjectId=' + subjectId;\r\n return this.http.get(System.apiURL.Classroom + 'GetValidGradeTemplates' + queryString);\r\n }\r\n\r\n getValidGradeTemplatesBySiteYear(studentId: number, siteYearId: number): Observable {\r\n const subjectId = this.course != null && this.course.SubjectId != null ? this.course.SubjectId : 0;\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&id=0' +\r\n '&studentId=' + studentId +\r\n '&subjectId=' + subjectId;\r\n return this.http.get(System.apiURL.Classroom + 'GetValidGradeTemplates' + queryString);\r\n }\r\n\r\n finalizeGrades() {\r\n let queryString = '';\r\n queryString += '?courseId=' + this.course.Id +\r\n '¤tTermCycleId=' + this.gradebookSettings.CurrentGradeCycleId +\r\n '&finalize=' + true;\r\n return this.http.get(System.apiURL.Classroom + 'FinalizeGrades' + queryString);\r\n }\r\n\r\n importGradesFromExternalGradebook(attachment: TermGradesBackup[]): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearId +\r\n '&siteYearId=' + this.siteYearId +\r\n '&termGradeCycleId=' + this.gradebookSettings.CurrentGradeCycleId +\r\n '¤tTermId=' + 0 +\r\n '&TeacherCanGenerateEndofTermLetterGrade=' + this.gradebookSettings.TeacherCanImportObjectiveScores;\r\n return this.http.post(System.apiURL.Classroom + 'ImportGradesFromExternalGradebook' + queryString, attachment);\r\n }\r\n\r\n // Indicators //\r\n getGradebookIndicators(courseId: number): Observable {\r\n return this.sharedGradeBookService.getGradebookIndicators(courseId, 0);\r\n }\r\n\r\n saveGradebookIndicator(gradebookIndicators: GradebookIndicator): Observable {\r\n return this.sharedGradeBookService.saveGradebookIndicator(gradebookIndicators, this.course.Id);\r\n }\r\n\r\n deleteGradebookIndicator(id: number): Observable {\r\n return this.sharedGradeBookService.deleteGradebookIndicator(id);\r\n }\r\n\r\n saveGradebookV9CopyIndicator(indicatorIds: string, siteSectionIds: string): Observable {\r\n let queryString = '';\r\n queryString += '?indicatorIds=' + indicatorIds +\r\n '&siteSectionIds=' + siteSectionIds;\r\n return this.http.get(System.apiURL.Classroom + 'SaveGradebookV9CopyIndicators' + queryString);\r\n }\r\n\r\n getGradebookV9AnalysisStudentsAttendance(): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&siteSectionId=' + this.course.Id;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9AnalysisStudents' + queryString);\r\n }\r\n\r\n exportBase64ToFile(base64Document: string, fileName: string, fileType: string) {\r\n const byteArrays: any[] = [];\r\n const byteCharacters = atob(base64Document);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n const blob = new Blob(byteArrays, { type: fileType });\r\n\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.style.visibility = 'hidden';\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n","
\r\n GRADEBOOK ACCESS DENIED\r\n
\r\n\r\n\r\n
\r\n
\r\n Missing Default Grade Scale for Site-Year\r\n
\r\n
\r\n This gradebook is set up to use curriculum marks instead of numeric entries for standards.\r\n

\r\n In order to be used for standards, curriculum marks must have Score Values defined.\r\n Score Values need to be entered on the curriculum marks associalted with this course.\r\n

\r\n Curriculum marks are managed in District Settings.\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n Standards cannot be associated with Merged Sections.\r\n
\r\n
\r\n Merged Sections must have the same Additional Teachers assigned.\r\n
\r\n
\r\n Merged Sections must have the same Start/End Override Dates.\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ClassroomSummary } from '../../../../classroom-summary/models/classroom-summary.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-gradebook-access-denied',\r\n templateUrl: './gradebook-access-denied.component.html',\r\n styles: []\r\n})\r\nexport class GradebookAccessDeniedComponent implements OnInit, OnDestroy {\r\n\r\n course: ClassroomSummary;\r\n mergeStandardsConflict: boolean;\r\n mergeAddTeacherConflict: boolean;\r\n mergeOverrideDateConflict: boolean;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked');\r\n }\r\n\r\n}","export class GragingCycles {\r\n TermDefinitionId: number;\r\n TermGradeCycleId: number;\r\n CurrentGradeCycle: string;\r\n GradingDescription: string;\r\n OverrideDescription: string;\r\n TermDescription: string;\r\n TermStartDate: Date;\r\n TermStopDate: Date;\r\n GradesPostOpen: Date;\r\n GradesPostClose: Date;\r\n Status: string;\r\n Classes: number;\r\n TotalClasses: number;\r\n AHRecords: number;\r\n IsCycleExists: boolean;\r\n CreatedBy: string;\r\n CreatedOn: Date;\r\n // NON DTO\r\n OldGradesPostOpen: Date;\r\n OldGradesPostClose: Date;\r\n GradesPostOpenBGColor: string;\r\n GradesPostCloseBGColor: string;\r\n SortingOrder = 0;\r\n}\r\n\r\nexport class ClassPostingStatus {\r\n SiteSectionId: number;\r\n SubjectCode: string;\r\n SubjectTitle: string;\r\n Section: string;\r\n TeacherName: string;\r\n Meets: number;\r\n PostingComplete: string;\r\n StudentCount: number;\r\n StudentMissingGradeCount: number;\r\n // Non DTO\r\n PostingCompleteAsBool?: boolean;\r\n}\r\n\r\nexport class StudentsWithoutTermRecords {\r\n TermGradeCycleId: number;\r\n StudentId: string;\r\n LngStudentId: number;\r\n CourseCode: string;\r\n CourseTitle: string;\r\n TeacherName: string;\r\n StudentFirstName: string;\r\n StudentMiddleName: string;\r\n StudentLastName: string;\r\n Section: string;\r\n EtryDate: Date;\r\n ExitDate: Date;\r\n // Non DTO\r\n IsSelected: boolean;\r\n isSelectedRow: boolean;\r\n StudentName: string;\r\n}\r\n\r\nexport class ViewGradingCycleGrades {\r\n TermGradeId: number;\r\n TermGradeDetailId: number;\r\n TermGradeDetailTypeId: number;\r\n TermGradeCycleId: number;\r\n Course: string;\r\n CourseName: string;\r\n Section: string;\r\n Teacher: string;\r\n GradingColumn: string;\r\n StudentIdentifier: string;\r\n StudentLastName: string;\r\n StudentFirstName: string;\r\n StudentMiddleName: string;\r\n StudentId: number;\r\n Grade: string;\r\n Score: number;\r\n Comment: string;\r\n\r\n // Non-DTO field\r\n StudentName: string;\r\n}\r\n\r\nexport class GradingCycleTerms {\r\n TermId: number;\r\n TermDescription: string;\r\n TermCodeSequence: string;\r\n TermValue: string;\r\n Caption: string;\r\n Prefix: string;\r\n PreviousTerm: boolean;\r\n CurrentGradeCycle: string;\r\n\r\n TermGradeDetailTypeId: number;\r\n TermGradeDetailTypeCode: string;\r\n TermGradesBehaviorSocialSkillsId: number;\r\n GradePercent: number;\r\n TermGradesTypeId: number;\r\n CreditEarnedOverride: number;\r\n CreditAttemptedOverride: number;\r\n WeightOverride: number;\r\n ExtraGradePointsOverride: number;\r\n HonorsOverride: number;\r\n UsedForHSTranscriptOverride: number;\r\n // ***\r\n CreditEarned: number;\r\n ModifiedCurriculum: boolean;\r\n InstructionalAdaptation: boolean;\r\n Comments: string;\r\n // Non DTO\r\n OldTermValue: string;\r\n OldGradePercentage: number;\r\n}\r\n\r\nexport class GradingCycleClassPostingGrade {\r\n TermGradeCycleId: number;\r\n TermGradeId: number;\r\n SiteYearId: number;\r\n StudentId: number;\r\n StudentNumber: string;\r\n StudentFirstName: string;\r\n StudentMiddleName: string;\r\n StudentLastName: string;\r\n GradeLevelId: number;\r\n GradeLevel: string;\r\n SpecialPurpose: string;\r\n SpecialPurposeId: number;\r\n CitizenshipId: number;\r\n ModifiedCurriculum: boolean;\r\n InstructionalAdaptation: boolean;\r\n Comments: string;\r\n TeacherComment: boolean;\r\n UsingPercentageGrade: boolean;\r\n GradingCycleTerms: GradingCycleTerms[];\r\n SiteCode: string;\r\n SiteSectionId: number;\r\n // ***\r\n SubjectCode: string;\r\n SubjectTitle: string;\r\n SectionCode: string;\r\n TeacherName: string;\r\n CreditTerm: string;\r\n // NON DTO\r\n IsEdit: boolean;\r\n TotalCreditEarn: number;\r\n}\r\n\r\nexport class GradingCycleCValidGrades {\r\n ValidGradeId: number;\r\n SiteYearId: number;\r\n ValidGrade: string;\r\n GradePoints: number;\r\n MinimumPercentage: number;\r\n TeacherUse: boolean;\r\n OverrideCode: boolean;\r\n}\r\n\r\nexport class CurrentGradingCycleInfo {\r\n GradingDescription = '';\r\n ISCurrentCycleProgress = false;\r\n SelectedGradingCycleDescription = '';\r\n IsSelectedCycleProcess = false;\r\n IsUsingPercentageGrades = false;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tselector: 'app-no-class-selected-warning-dialog',\r\n\ttemplateUrl: './no-class-selected-warning-dialog.component.html',\r\n\tstyleUrls: ['./no-class-selected-warning-dialog.component.css']\r\n})\r\nexport class NoClassSelectedWarningDialogComponent implements OnInit {\r\n\r\n\t// Properties\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t}\r\n\r\n\tok() {\r\n\t\t// PRE: the OK button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","\r\n

\r\n\tNo Class Selected\r\n

\r\n\r\n\r\n\r\n\tAt least one class must be selected.\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t
\r\n
","\r\n
\r\n
\r\n {{headerText | translate}}\r\n
\r\n
\r\n \r\n \r\n Show all Courses at My School\r\n \r\n \r\n \r\n \r\n \r\n {{item.display}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{term.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Meets\r\n \r\n \r\n \r\n \r\n {{course.Meets}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Term\r\n \r\n \r\n \r\n \r\n {{course.Term}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Course-Section\r\n \r\n \r\n \r\n {{course.CourseSection}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Course Name\r\n \r\n \r\n \r\n \r\n {{course.Course}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Instructor\r\n \r\n \r\n \r\n {{course.Instructor}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Room\r\n \r\n \r\n \r\n \r\n {{course.Room}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Enrolled\r\n \r\n \r\n \r\n {{course.Enrolled}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Class Information\r\n \r\n \r\n \r\n {{course.CourseHasProfile ? 'Y' : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Seating Chart\r\n \r\n \r\n {{course.SeatingCharts != 0 ? course.SeatingCharts : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Gradebook Updated\r\n \r\n \r\n {{course.UpdatedDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\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, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { SecurityService } from '../../../../shared-components/security/security.service';\r\nimport { SharedService } from '../../../../shared-components/shared.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { User } from '../../../../shared-components/user/user.model';\r\nimport { Year } from '../../../../shared-components/year/year.model';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { ClassroomSummaryService } from '../../../classroom-summary/classroom-summary.service';\r\nimport { Classroom360Service } from '../../../classroom360.service';\r\nimport { GradebookV9Service } from '../../../gradebook/v9/gradebook-v9.service';\r\nimport { GradebookAccessDeniedComponent } from '../../../gradebook/v9/modals/gradebook-access-denied/gradebook-access-denied.component';\r\nimport { NoClassSelectedWarningDialogComponent } from '../no-class-selected-warning-dialog/no-class-selected-warning-dialog.component';\r\nimport { TylerMatTableDataSource } from './../../../../shared-components/angular-material/extended.class';\r\nimport { System } from './../../../../shared-components/System';\r\nimport { UserService } from './../../../../shared-components/user/user.service';\r\nimport { LoginService } from './../../../../shared-modules/login/login.service';\r\nimport { FilterClass } from './../../../classroom-summary/classFilter.pipe';\r\nimport { ClassroomSummaryFilter } from './../../../classroom-summary/models/classroom-summary-filter';\r\nimport { ClassroomSummary } from './../../../classroom-summary/models/classroom-summary.model';\r\nimport { ClassroomTerm } from './../../../classroom-summary/models/classroom-term.model';\r\n\r\n/**\r\n * This course forces a class selection. It takes the following injected properties:\r\n *\r\n * headerText: this is the text that shows in the header\r\n * multiselect: this determines if multiple courses should be selected\r\n *\r\n * It returns the selected class(es) on a close\r\n */\r\n@Component({\r\n selector: 'select-course-dialog',\r\n templateUrl: './select-course-dialog.component.html',\r\n styleUrls: [\r\n './select-course-dialog.component.css'\r\n ]\r\n})\r\nexport class SelectCourseDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n headerText = 'Select Class';\r\n multiselect = false;\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n terms: ClassroomTerm[];\r\n selectedTerm: ClassroomTerm;\r\n classes: ClassroomSummary[];\r\n tableData = new TylerMatTableDataSource();\r\n V10: boolean;\r\n defaultYear: Year;\r\n columns = ['meets', 'term', 'course section', 'course name', 'room', 'enrolled', 'gradebook updated'];\r\n userIsTeacher: boolean;\r\n showFilter = new EventEmitter();\r\n filterData: ClassroomSummaryFilter;\r\n subscriptions: Subscription[] = [];\r\n viewOptions: any;\r\n selectedView: any;\r\n selectedCourses: ClassroomSummary[] = [];\r\n spinner = false;\r\n disableView: boolean;\r\n showAllCourses = false;\r\n currentUser: User;\r\n teacherAndAdmin = false;\r\n\r\n // Class Functions\r\n constructor(\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private classroom360Service: Classroom360Service,\r\n private userPreferencesService: UserPreferencesService,\r\n private gradebookV9Service: GradebookV9Service,\r\n private dialogBox: MatDialogRef,\r\n private filterClass: FilterClass,\r\n private sharedService: SharedService,\r\n private yearService: YearService,\r\n private securityService: SecurityService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialog: MatDialog\r\n ) {\r\n this.defaultYear = this.yearService.defaultYear;\r\n }\r\n\r\n get sort() {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.tableData.sort = value;\r\n }\r\n\r\n get allSelected(): boolean {\r\n for (let i = 0; i < this.tableData.filteredData.length; i++) {\r\n if (!this.selectedCourses.includes(this.tableData.filteredData[i])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n set allSelected(value: boolean) {\r\n if (value) {\r\n this.selectedCourses = [];\r\n this.tableData.filteredData.forEach(course => {\r\n this.selectedCourses.push(course);\r\n });\r\n } else if (this.selectedCourses.length >= this.tableData.filteredData.length) {\r\n this.tableData.filteredData.forEach(course => {\r\n const index = this.selectedCourses.indexOf(course);\r\n if (index >= 0) {\r\n this.selectedCourses.splice(index, 1);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected dialog data with terms\r\n // POST: initializes the data\r\n\r\n // Setting the injected Properties\r\n if (this.data) {\r\n if (this.data.headerText) {\r\n this.headerText = this.data.headerText;\r\n }\r\n if (this.data.multiselect) {\r\n this.multiselect = this.data.multiselect;\r\n }\r\n }\r\n\r\n // Setting the service properties\r\n this.terms = this.classroomSummaryService.terms;\r\n this.userIsTeacher = this.userService.currentUser.UserIsTeacher;\r\n this.currentUser = this.userService.currentUser;\r\n this.showAllCourses = this.userIsTeacher;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (this.classroomSummaryService.selectedTerm) {\r\n this.selectedTerm = this.classroomSummaryService.selectedTerm;\r\n }\r\n else {\r\n this.selectedTerm = this.terms.find(term => term.Id == 0);\r\n }\r\n\r\n if (this.classroomSummaryService.showAllClasses) {\r\n this.showAllCourses = this.classroomSummaryService.showAllClasses;\r\n }\r\n else {\r\n this.showAllCourses = false;\r\n }\r\n\r\n if (this.multiselect) {\r\n this.columns = System.insertAt(this.columns, 'select', 0);\r\n }\r\n if (!this.userIsTeacher) {\r\n this.columns = System.insertAt(this.columns, 'instructor', 4);\r\n }\r\n if (this.V10) {\r\n this.columns = System.insertAt(this.columns, 'profile', 6);\r\n }\r\n if (this.classroomSummaryService.filterData) {\r\n this.filterData = this.classroomSummaryService.filterData;\r\n } else {\r\n this.filterData = new ClassroomSummaryFilter();\r\n }\r\n this.viewOptions = this.classroomSummaryService.viewOptions;\r\n this.selectedTerm = this.classroomSummaryService.selectedTerm;\r\n this.selectedView = this.classroomSummaryService.selectedView;\r\n\r\n // Syncing the data\r\n this.subscriptions.push(\r\n this.classroomSummaryService.observableSelectedTermStream$.subscribe(selectedTerm => {\r\n this.selectedTerm = selectedTerm;\r\n }),\r\n this.classroomSummaryService.observableSelectedViewStream$.subscribe(selectedView => {\r\n this.selectedView = selectedView;\r\n }),\r\n this.classroomSummaryService.observableMyClassesStream$.subscribe(classes => {\r\n if (this.classes == undefined) {\r\n if (this.classroom360Service.gradebookPortalSelected) {\r\n this.disableView = true;\r\n this.selectedView = this.viewOptions.filter(v => v.value.toString() == '3')[0];\r\n this.classroomSummaryService.getGradebookAttendanceClasses(true, this.selectedTerm.Id).subscribe((courses) => {\r\n this.classes = courses.filter(course => course.Enrolled > 0);\r\n this.setupCourses();\r\n });\r\n }\r\n else if (this.classroom360Service.attendancePortalSelected) {\r\n this.disableView = true;\r\n this.selectedView = this.viewOptions.filter(v => v.value.toString() == '2')[0];\r\n this.classroomSummaryService.getGradebookAttendanceClasses(false, this.selectedTerm.Id).subscribe((courses) => {\r\n this.classes = courses.filter(course => course.Enrolled > 0);\r\n this.setupCourses();\r\n });\r\n }\r\n else if (this.classroom360Service.courseInfoPortalSelected) {\r\n this.disableView = true;\r\n if (this.selectedView.value.toString() != '1') {\r\n this.selectedView = this.viewOptions.filter(v => v.value.toString() == '1')[0];\r\n this.classroomSummaryService.getClassesWithoutBroadcast(this.defaultYear.Id, this.defaultYear.SchoolID, this.selectedTerm.Id, this.selectedView.value).subscribe((courses) => {\r\n this.classes = courses;\r\n this.setupCourses();\r\n });\r\n }\r\n else {\r\n this.classes = this.classroomSummaryService.myClasses;\r\n }\r\n }\r\n else {\r\n this.classes = classes;\r\n }\r\n if (this.classes) {\r\n this.setupCourses();\r\n }\r\n }\r\n }),\r\n this.classroomSummaryService.observableShowAllClassesStream$.subscribe(showAllClasses => {\r\n this.showAllCourses = this.V10 == false ? showAllClasses : false;\r\n })\r\n );\r\n\r\n this.setTeacherAdminMode();\r\n // If Class Information Portal is selected and user has Admin access for Class information then show all courses.\r\n if (!this.V10 && this.classroom360Service.courseInfoPortalSelected && this.userService.currentUser.UserIsTeacher) {\r\n this.userHasAdminAccessGetAllClasses();\r\n }\r\n }\r\n\r\n userHasAdminAccessGetAllClasses() {\r\n let userHasAdminPermission = false;\r\n if (this.securityService.IsAnyPermissionCodeAssigned(...['GO_MCIA', 'GO_VCIA'])) {\r\n userHasAdminPermission = true;\r\n }\r\n if (userHasAdminPermission) {\r\n this.showAllCourses = true;\r\n this.getAllCourses();\r\n }\r\n }\r\n\r\n setupCourses() {\r\n const ssecIds = [];\r\n for (const course of this.classes) {\r\n ssecIds.push(course.SSEC_ID);\r\n }\r\n if (this.V10) {\r\n this.classroomSummaryService.getCourseProfileExistence(ssecIds).subscribe((result) => {\r\n for (const course of this.classes) {\r\n const courseHasProfile = result.find(profile => profile.SSEC_ID == course.SSEC_ID);\r\n if (courseHasProfile && courseHasProfile.HasProfile) {\r\n course.CourseHasProfile = true;\r\n }\r\n else {\r\n course.CourseHasProfile = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n // Arranging the table\r\n if (this.V10 == false && this.classroom360Service.gradebookPortalSelected) {\r\n this.tableData.data = this.classes.filter(c => c.UsedForGrading == true);\r\n }\r\n else if (this.V10 == false && this.classroom360Service.attendancePortalSelected) {\r\n this.tableData.data = this.classes.filter(c => c.Enrolled > 0 && c.AttendanceRequired == true);\r\n }\r\n else {\r\n this.tableData.data = this.classes.filter(c => c.Enrolled > 0);\r\n }\r\n this.tableData.filters = (this.classroomSummaryService.classSourceFilters) ? this.classroomSummaryService.classSourceFilters : this.tableData.filters;\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked (which means that this is a multiselect)\r\n // POST: checks the number of selected courses.\r\n // If there are some, closes with the list of selected courses\r\n // If there are none, shows a warning dialog\r\n if (this.selectedCourses.length > 0) {\r\n this.dialogBox.close(this.selectedCourses);\r\n } else {\r\n this.dialog.open(NoClassSelectedWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button or the background is clicked\r\n // POST: closes the dialog box\r\n this.classroom360Service.gradebookPortalSelected = false;\r\n this.classroom360Service.attendancePortalSelected = false;\r\n this.classroom360Service.courseInfoPortalSelected = false;\r\n this.dialogBox.close();\r\n }\r\n\r\n filter(filter?: ClassroomSummaryFilter) {\r\n // PRE: the filter button is clicked\r\n // POST: opens the filter\r\n if (filter) {\r\n this.filterData = filter;\r\n this.classroomSummaryService.filterData = filter;\r\n }\r\n if (this.V10 == false && this.classroom360Service.gradebookPortalSelected) {\r\n this.tableData.data = this.filterClass.transform(this.classes.filter(o => o.UsedForGrading == true), this.filterData);\r\n }\r\n else {\r\n this.tableData.data = this.filterClass.transform(this.classes, this.filterData);\r\n }\r\n this.classroomSummaryService.filterChange.emit();\r\n }\r\n\r\n clearFilter() {\r\n // PRE: the clear filter button is clicked (in the filter notification)\r\n // POST: clears out the filter and applies it\r\n // NOTE: We don't need to perform a manual save because the classroom summary filter resets it on each push\r\n Object.assign(this.filterData, new ClassroomSummaryFilter());\r\n this.filter();\r\n }\r\n\r\n setSelectedTerm(selectedTerm: ClassroomTerm) {\r\n // PRE: a selected term change is made\r\n // POST: sets the selected term\r\n // this.classroomSummaryService.selectedTerm = selectedTerm;\r\n this.getClasses();\r\n }\r\n\r\n setSelectedView(selectedView: any) {\r\n // PRE: a selected view change is made\r\n // POST: sets the selected view\r\n // this.classroomSummaryService.selectedView = selectedView;\r\n this.getClasses();\r\n }\r\n\r\n selectCourse(course: ClassroomSummary) {\r\n // PRE: a course is selected from the view\r\n // POST: selects a course. If this is a single selection, closes the dialog with that course.\r\n if (this.multiselect) {\r\n const indexOfCourse = this.selectedCourses.indexOf(course);\r\n if (indexOfCourse >= 0) {\r\n this.selectedCourses.splice(indexOfCourse, 1);\r\n } else {\r\n this.selectedCourses.push(course);\r\n }\r\n } else {\r\n if (this.classroom360Service.gradebookPortalSelected) {\r\n this.classroom360Service.gradebookPortalSelected = false;\r\n this.classroom360Service.attendancePortalSelected = false;\r\n this.classroom360Service.courseInfoPortalSelected = false;\r\n let portalName = 'Gradebook';\r\n if (this.sharedService.currentPortal != null) {\r\n portalName = this.sharedService.currentPortal.PortalName;\r\n if (portalName == 'Gradebook' && (course.GradeScaleExists == false || course.GradebookAccess == false)) {\r\n const gradebookAccessDeniedDialogRef = this.dialog.open(GradebookAccessDeniedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '500px',\r\n disableClose: true\r\n });\r\n gradebookAccessDeniedDialogRef.componentInstance.course = course;\r\n this.classroom360Service.gradebookPortalSelected = true;\r\n }\r\n else {\r\n this.gradebookV9Service.clearAllData();\r\n this.gradebookV9Service.course = course;\r\n if (!this.V10) {\r\n if (portalName == 'Report Card Grades' || this.userPreferencesService.gradebookV9SelectionPreferences.SelectedMainTab == 'ReportCardGrades') {\r\n this.gradebookV9Service.selectedTab = 'Report Card Grades';\r\n }\r\n else if (this.userPreferencesService.gradebookV9SelectionPreferences.SelectedMainTab == 'Indicators') {\r\n this.gradebookV9Service.selectedTab = 'Scores';\r\n }\r\n else {\r\n this.gradebookV9Service.selectedTab = this.userPreferencesService.gradebookV9SelectionPreferences.SelectedMainTab;\r\n }\r\n this.gradebookV9Service.nonScoreStandard = this.userPreferencesService.gradebookV9SelectionPreferences.ShowNonScoredStandards;\r\n }\r\n else {\r\n this.gradebookV9Service.selectedTab = portalName == 'Gradebook' ? 'Scores' : 'Report Card Grades';\r\n }\r\n this.dialogBox.close(course);\r\n }\r\n }\r\n }\r\n else {\r\n this.dialogBox.close(course);\r\n }\r\n }\r\n }\r\n\r\n // Methods\r\n filtered() {\r\n // POST: returns true if the data is being panelFiltered\r\n const filter = this.filterData;\r\n if (!filter) {\r\n return false;\r\n }\r\n if (!filter.AttStatusNone || !filter.AttStatusPartial || !filter.AttStatusAll || !filter.AttStatusPerfect || !filter.GradingNone ||\r\n !filter.GradingPartial || !filter.GradingAll || !filter.RCGNone || !filter.RCGAll || !filter.RCGEx) {\r\n return true;\r\n }\r\n else if ((filter.Meets != undefined && filter.Meets.length > 0) || (filter.Term != undefined && filter.Term.length > 0) ||\r\n (filter.CourseSection != undefined && filter.CourseSection.length > 0) || (filter.CourseName != undefined && filter.CourseName.length > 0)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n getClasses(): void {\r\n // POST: gets the classes from the server\r\n this.classroomSummaryService.getClassesWithoutBroadcast(this.defaultYear.Id, this.defaultYear.SchoolID, this.selectedTerm.Id, Number(this.selectedView.value)).subscribe((courses) => {\r\n this.classes = courses;\r\n this.setupCourses();\r\n });\r\n }\r\n\r\n showAllCoursesClick() {\r\n this.getAllCourses();\r\n }\r\n\r\n getAllCourses() {\r\n this.teacherAndAdmin = !this.showAllCourses;\r\n this.classroomSummaryService.showAllClasses = this.showAllCourses;\r\n this.currentUser.UserIsTeacher = !this.showAllCourses;\r\n this.currentUser.TeacherAdminShowAllCourses = this.showAllCourses;\r\n this.getMyClasses();\r\n }\r\n\r\n setTeacherAdminMode() {\r\n this.showAllCourses = this.currentUser.TeacherAdminShowAllCourses;\r\n if (this.currentUser.UserIsTeacher) {\r\n if (!this.loginService.LoginSettings.V10) {\r\n // Add permissions for V9 here if necessary\r\n const classesPermission = this.securityService.userPermissions.filter(permission => permission.PermissionCode == 'CD_VSCSAR')[0];\r\n this.teacherAndAdmin = classesPermission != undefined && classesPermission != null ? true : false;\r\n }\r\n else {\r\n this.teacherAndAdmin = false;\r\n }\r\n }\r\n else {\r\n this.teacherAndAdmin = false;\r\n }\r\n }\r\n\r\n teacherShowAllCourses() {\r\n if (!this.V10) {\r\n return this.currentUser.TeacherAdminShowAllCourses;\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n getMyClasses(): void {\r\n let getTeacherCourses = this.currentUser.UserIsTeacher;\r\n if (this.teacherAndAdmin) {\r\n getTeacherCourses = !this.showAllCourses;\r\n }\r\n const selectedTermId = this.selectedTerm.Id;\r\n this.subscriptions.push(this.classroomSummaryService.getMyClasses(selectedTermId, Number(this.classroomSummaryService.selectedView.value), getTeacherCourses, false, null).subscribe(classes => {\r\n this.classes = classes;\r\n this.tableData.data = this.classes;\r\n }));\r\n }\r\n}\r\n","\r\n
Add Link
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n Open using HTTPS\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n","import { Component, Host, HostBinding, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { Link, NewLink } from '../link.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-add-link',\r\n templateUrl: './add-link.component.html'\r\n})\r\nexport class AddLinkComponent implements OnInit {\r\n @HostBinding('class.sis-app-root') sisAppRoot: Host = true;\r\n linkName: string;\r\n linkUrl: string;\r\n V10: boolean;\r\n usingHttps = false;\r\n addLinkForm: FormGroup;\r\n nameErrorMessage = 'Required Field';\r\n constructor(private loginService: LoginService, private dialogRef: MatDialogRef, private userService: UserService, private yearService: YearService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.addLinkForm = new FormGroup({\r\n 'name': new FormControl(null, [\r\n Validators.required,\r\n Validators.maxLength(50)\r\n ]),\r\n 'url': new FormControl(null, [\r\n Validators.required,\r\n ])\r\n });\r\n this.onChanges();\r\n }\r\n\r\n onChanges(): void {\r\n this.addLinkForm.valueChanges.subscribe(val => {\r\n this.linkName = val['name'];\r\n this.linkUrl = val['url'];\r\n if (this.linkName && this.linkName.length > 50) {\r\n this.nameErrorMessage = 'Name must be 50 characters or less';\r\n } else {\r\n this.nameErrorMessage = 'Required Field';\r\n }\r\n });\r\n }\r\n\r\n cancelClick() {\r\n // POST: Close Dialog\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n if (this.addLinkForm.invalid) {\r\n // mark controls as touched\r\n this.addLinkForm.controls['name'].markAsTouched();\r\n this.addLinkForm.controls['url'].markAsTouched();\r\n } else {\r\n // POST: Create new link, Post to the server, update links stored in service, close the dialog\r\n const link: NewLink = new NewLink();\r\n link.Description = this.linkName;\r\n link.Id = -1;\r\n link.LinkToolTip = '';\r\n link.OpenAsHTTPS = this.usingHttps;\r\n link.OpenAsNewWindow = false;\r\n link.QuickJumpDescription = '';\r\n link.Sequence = 0;\r\n link.WebAddress = this.linkUrl;\r\n this.userService.saveLink(link).subscribe(response => {\r\n }, err => {\r\n console.log(err);\r\n }, () => {\r\n // Get the new set of links\r\n if (this.V10) {\r\n this.getUserLinks(this.userService.userId, this.yearService.defaultYear.AYIdentifier);\r\n }\r\n else {\r\n this.getUserLinks(0, this.yearService.defaultYear.Id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getUserLinks(id: number, yearId: any) {\r\n const linkList: Link[] = [];\r\n if (this.V10) {\r\n // v10\r\n if (this.userService.userType != 1) {\r\n // Parent/Student\r\n this.userService.getParentStudentLinks(id, yearId).subscribe(response => {\r\n // create a new link object for each object in the response body\r\n if (response.body != null) {\r\n for (let i = 0; i < response.body.length; i++) {\r\n const bLink = response.body[i];\r\n const link = new Link();\r\n link.LinkName = bLink.Description;\r\n link.Link_ID = bLink.Id;\r\n link.OpenAsHTTPS = bLink.OpenAsHTTPS;\r\n link.OpenAsNewWindow = bLink.OpenAsNewWindow;\r\n link.LinkUrl = bLink.WebAddress;\r\n link.IsDistrictLevel = 'Yes';\r\n linkList.push(link);\r\n }\r\n this.userService.links = linkList;\r\n }\r\n });\r\n } else {\r\n // Staff\r\n this.userService.getLinks(id, 0, yearId).subscribe(response => {\r\n this.userService.links = response.body;\r\n });\r\n }\r\n } else {\r\n // v9\r\n this.userService.getParentStudentLinks(id, yearId).subscribe(response => {\r\n // create a new link object for each object in the response body\r\n if (response.body != null) {\r\n for (let i = 0; i < response.body.length; i++) {\r\n const bLink = response.body[i];\r\n const link = new Link();\r\n link.LinkName = bLink.Description;\r\n link.Link_ID = bLink.Id;\r\n link.OpenAsHTTPS = bLink.OpenAsHTTPS;\r\n link.OpenAsNewWindow = bLink.OpenAsNewWindow;\r\n link.LinkUrl = bLink.WebAddress;\r\n link.IsDistrictLevel = 'No';\r\n linkList.push(link);\r\n }\r\n this.userService.links = linkList;\r\n }\r\n });\r\n }\r\n this.dialogRef.close();\r\n }\r\n}\r\n","export class Link {\r\n DistrictLink_ID: number;\r\n IconType: string;\r\n IsDistrictLevel: string;\r\n IsOneSISTile: string;\r\n LinkFormatted: string;\r\n LinkName: string;\r\n LinkOrder: number;\r\n LinkToolTip: string;\r\n LinkUrl: string;\r\n Link_ID: number;\r\n Mem_ID: number;\r\n OpenAsHTTPS: boolean;\r\n OpenAsNewWindow: boolean;\r\n TileColor: string;\r\n TileImageFile: string;\r\n}\r\n\r\nexport class NewLink {\r\n Description: string;\r\n Id: number;\r\n LinkToolTip: string;\r\n OpenAsHTTPS: any;\r\n OpenAsNewWindow: any;\r\n QuickJumpDescription: string;\r\n Sequence: number;\r\n WebAddress: string;\r\n}\r\n","
Manage Reports in Folder
\r\n
{{folderName}}
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 0\"\r\n class=\"material-icons\" [ngClass]=\"{'detail-row-expanded-icon': isReportsRowsExpanded, 'detail-row-collapsed-icon': !isReportsRowsExpanded}\"\r\n (click)=\"expandAll(isReportsRowsExpanded)\">\r\n \r\n \r\n 0\"\r\n class=\"material-icons\" [ngClass]=\"{'detail-row-expanded-icon': reportsTableData.checkExpanded(rpt),'detail-row-collapsed-icon': !reportsTableData.checkExpanded(rpt)}\">\r\n \r\n \r\n\r\n \r\n \r\n \r\n Report Category\r\n \r\n \r\n {{rpt.Description}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {{rt.Description}}\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n 0) ? reportsTableData.toggleExpanded(rpt) : null\">\r\n \r\n 0 && reportsTableData.checkExpanded(rpt) ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden;\" class=\"mat-detail-row\">\r\n\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { ReportV9 } from '../../../../shared-modules/reporting/models/report-v9.model';\r\nimport { ReportingService } from '../../../../shared-modules/reporting/reporting.service';\r\nimport { AssignedReports, MyReportsFolder } from '../../reporting-framework.model';\r\nimport { ReportingFrameworkService } from '../../reporting-framework.service';\r\n\r\n@Component({\r\n selector: 'manage-reports-in-folder',\r\n templateUrl: './manage-reports-in-folder.component.html',\r\n styleUrls: ['./manage-reports-in-folder.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class ManageReportsInFolderComponent implements OnInit {\r\n\r\n folderName = '';\r\n isMyReportPage: boolean;\r\n reportFolder: MyReportsFolder;\r\n assignedReportFolder: AssignedReports;\r\n\r\n reports: ReportV9[] = [];\r\n reportModules: ReportV9[] = [];\r\n\r\n reportsTableColumns = ['ParentCheckbox', 'More', 'Description'];\r\n reportTableColumns = ['CheckBox', 'ReportName'];\r\n reportsTableData = new TylerMatTableDataSource();\r\n isReportsRowsExpanded = false;\r\n\r\n parentAllCheckBox = false;\r\n checkIndeterminate = false;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private reportingService: ReportingService,\r\n private reportingFrameworkService: ReportingFrameworkService\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.isMyReportPage == true) {\r\n this.folderName = this.reportFolder.FolderName;\r\n } else {\r\n this.folderName = this.assignedReportFolder.FolderName;\r\n }\r\n this.getMyV9Reports();\r\n }\r\n\r\n getMyV9Reports(): void {\r\n this.reportingService.getV9Reports('TeacherMenu').subscribe(rpt => {\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log(rpt);\r\n }\r\n\r\n // remove progress report for now, can only get to it from the gradebook\r\n let i = 0;\r\n rpt.forEach(f => {\r\n const ri = f.ReportsList.filter(r => r.ReportName != 'GradeBookProgressReport');\r\n if (i >= 0) {\r\n rpt[i].ReportsList = System.convert(ri, new Array());\r\n }\r\n i++;\r\n }\r\n );\r\n\r\n this.reports = System.convert(rpt, new Array());\r\n\r\n const IsReportsList: boolean = rpt.filter(x => x.ReportsList.length > 0).length > 0;\r\n if (IsReportsList == true) {\r\n this.reportModules = rpt.filter(x => x.ParentId == 0);\r\n } else {\r\n this.reports = [];\r\n const obj = new ReportV9();\r\n obj.Id = 0;\r\n obj.ReportsList = rpt;\r\n this.reports.push(obj);\r\n }\r\n\r\n this.reports.forEach(report => {\r\n // If report is in folder report check box = true\r\n report.ReportsList.forEach(rt => {\r\n if (this.isMyReportPage == true) {\r\n if (this.reportFolder.ReportsInFolder.find(x => x.ReportId == rt.Id) != null) {\r\n rt.IsSelected = true;\r\n }\r\n } else {\r\n if (this.assignedReportFolder.AssignedReportsInFolder.find(x => x.ReportId == rt.Id) != null) {\r\n rt.IsSelected = true;\r\n }\r\n }\r\n\r\n });\r\n\r\n // If All report in folder so parent check box = true\r\n if (report.ReportsList.filter(x => x.IsSelected == true).length == report.ReportsList.length) {\r\n report.IsSelected = true;\r\n }\r\n\r\n\r\n this.childCheckBoxChange(report);\r\n });\r\n\r\n this.reportsTableData.data = this.reports;\r\n });\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // POST: expands or collapses application area rows\r\n this.isReportsRowsExpanded = !expand;\r\n this.reportsTableData.data.forEach(report => {\r\n report.detailRow = this.isReportsRowsExpanded;\r\n });\r\n }\r\n\r\n parentAllCheckBoxChange() {\r\n this.reports.forEach(rpt => {\r\n rpt.IsSelected = this.parentAllCheckBox;\r\n rpt.checkRowIndeterminate = false;\r\n\r\n rpt.ReportsList.forEach(rt => {\r\n rt.IsSelected = this.parentAllCheckBox;\r\n });\r\n });\r\n\r\n this.checkIndeterminate = false;\r\n\r\n // const selectedCount = this.reportsTableData.data.filter(x => x.IsSelected == true).length;\r\n // if (selectedCount > 0) {\r\n // if (this.reportsTableData.data.length === selectedCount) {\r\n // this.parentAllCheckBox = true;\r\n // this.checkIndeterminate = false;\r\n // }\r\n // else {\r\n // this.checkIndeterminate = true;\r\n // }\r\n // } else {\r\n // this.checkIndeterminate = false;\r\n // }\r\n }\r\n\r\n parentCheckBoxChange(rpt: ReportV9) {\r\n rpt.ReportsList.forEach(rt => {\r\n rt.IsSelected = rpt.IsSelected;\r\n });\r\n rpt.checkRowIndeterminate = false;\r\n\r\n const selectedCount = this.reportsTableData.data.filter(x => x.IsSelected == true || x.checkRowIndeterminate == true).length;\r\n if (selectedCount > 0) {\r\n if (this.reportsTableData.data.length === selectedCount) {\r\n this.parentAllCheckBox = true;\r\n this.checkIndeterminate = false;\r\n }\r\n else {\r\n this.checkIndeterminate = true;\r\n this.parentAllCheckBox = false;\r\n }\r\n } else {\r\n this.checkIndeterminate = false;\r\n this.parentAllCheckBox = false;\r\n }\r\n }\r\n\r\n childCheckBoxChange(rpt: ReportV9) {\r\n const selectedCount = rpt.ReportsList.filter(x => x.IsSelected == true).length;\r\n if (selectedCount > 0) {\r\n if (rpt.ReportsList.length === selectedCount) {\r\n rpt.IsSelected = true;\r\n rpt.checkRowIndeterminate = false;\r\n }\r\n else {\r\n rpt.checkRowIndeterminate = true;\r\n rpt.IsSelected = false;\r\n }\r\n } else {\r\n rpt.checkRowIndeterminate = false;\r\n rpt.IsSelected = false;\r\n }\r\n\r\n\r\n if (this.reports.find(x => x.IsSelected == true || x.checkRowIndeterminate == true) != null) {\r\n this.checkIndeterminate = true;\r\n this.parentAllCheckBox = false;\r\n } else {\r\n this.checkIndeterminate = false;\r\n }\r\n }\r\n\r\n saveClick() {\r\n const reportIds: Number[] = [];\r\n this.reports.forEach(rpt => {\r\n rpt.ReportsList.forEach(rt => {\r\n if (rt.IsSelected == true) {\r\n reportIds.push(rt.Id);\r\n }\r\n });\r\n });\r\n if (this.isMyReportPage == true) {\r\n this.reportingFrameworkService.saveReportsInFolder(this.reportFolder.Id, reportIds).subscribe(result => {\r\n if (result == true) {\r\n this.dialogRef.close('save');\r\n }\r\n });\r\n } else {\r\n this.reportingFrameworkService.saveAssignedReportsInFolder(this.assignedReportFolder.Id, reportIds).subscribe(result => {\r\n if (result == true) {\r\n this.dialogRef.close('save');\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close('cancel');\r\n }\r\n\r\n}\r\n","
{{dialogTitle}}
\r\n\r\n\r\n \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, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MyReportsFolder } from '../../reporting-framework.model';\r\nimport { ReportingFrameworkService } from '../../reporting-framework.service';\r\n\r\n@Component({\r\n selector: 'add-my-report-folder-dialog',\r\n templateUrl: './add-my-report-folder-dialog.component.html',\r\n styleUrls: ['./add-my-report-folder-dialog.component.css']\r\n})\r\nexport class AddMyReportFolderDialogComponent implements OnInit {\r\n\r\n dialogTitle: string;\r\n editMode: boolean;\r\n myReportFolder: MyReportsFolder;\r\n errorLists: ErrorList[] = [];\r\n saveAndNew = false;\r\n\r\n @ViewChild('folderNameRef', { read: ElementRef, static: true }) folderNameRef: ElementRef;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private reportingFrameworkService: ReportingFrameworkService\r\n ) { }\r\n\r\n\r\n ngOnInit() {\r\n if (this.editMode == false) {\r\n this.myReportFolder.Id = 0;\r\n }\r\n }\r\n\r\n saveClick() {\r\n this.errorLists = [];\r\n if (this.myReportFolder.FolderName == undefined || this.myReportFolder.FolderName.trim() == '') {\r\n this.errorLists.push({\r\n fieldName: 'Folder Name',\r\n fieldRef: this.folderNameRef,\r\n errorMsg: ' is Required.'\r\n });\r\n }\r\n\r\n if (this.errorLists.length == 0) {\r\n this.saveAndNew = false;\r\n this.saveReportFolder();\r\n }\r\n }\r\n\r\n saveReportFolder() {\r\n this.reportingFrameworkService.saveMyReportFolder(this.myReportFolder).subscribe(result => {\r\n if (result == true) {\r\n if (this.saveAndNew == false) {\r\n this.dialogRef.close('save');\r\n } else {\r\n this.myReportFolder = new MyReportsFolder();\r\n this.myReportFolder.Id = 0;\r\n }\r\n }\r\n });\r\n }\r\n\r\n saveAndNewClick() {\r\n this.errorLists = [];\r\n if (this.myReportFolder.FolderName == undefined || this.myReportFolder.FolderName.trim() == '') {\r\n this.errorLists.push({\r\n fieldName: 'Folder Name',\r\n fieldRef: this.folderNameRef,\r\n errorMsg: ' is Required.'\r\n });\r\n }\r\n\r\n if (this.errorLists.length == 0) {\r\n this.saveAndNew = true;\r\n this.saveReportFolder();\r\n }\r\n }\r\n\r\n cancelClick() {\r\n if (this.saveAndNew == true) {\r\n this.dialogRef.close('save');\r\n } else {\r\n this.dialogRef.close('cancel');\r\n }\r\n }\r\n\r\n}\r\n","
Folders for this Report
\r\n
{{report.Description}}
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n My Folders\r\n \r\n \r\n {{fdr.FolderName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n {{fdr.FolderDescription}}\r\n \r\n \r\n\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, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { MyReportsFolder, ReportsInFolder } from '../../reporting-framework.model';\r\nimport { ReportingFrameworkService } from '../../reporting-framework.service';\r\n\r\n@Component({\r\n selector: 'app-folders-this-report-dialog',\r\n templateUrl: './folders-this-report-dialog.component.html',\r\n styleUrls: ['./folders-this-report-dialog.component.css']\r\n})\r\nexport class FoldersThisReportDialogComponent implements OnInit {\r\n\r\n allCheckBox = false;\r\n report: ReportsInFolder;\r\n reportFolders: MyReportsFolder[];\r\n folderTableColumns = ['Checkbox', 'FolderName', 'FolderDescription'];\r\n foldersTableData = new TylerMatTableDataSource();\r\n checkIndeterminate = false;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private reportingFrameworkService: ReportingFrameworkService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.reportFolders.forEach(folder => {\r\n if (folder.ReportsInFolder.find(x => x.ReportId == this.report.ReportId) != null) {\r\n folder.IsSelected = true;\r\n }\r\n });\r\n\r\n this.foldersTableData.data = this.reportFolders;\r\n this.parentCheckBoxChange();\r\n }\r\n\r\n allCheckBoxChange() {\r\n this.reportFolders.forEach(fdr => {\r\n fdr.IsSelected = this.allCheckBox;\r\n });\r\n\r\n const selectedCount = this.foldersTableData.data.filter(x => x.IsSelected == true).length;\r\n if (selectedCount > 0) {\r\n if (this.foldersTableData.data.length === selectedCount) {\r\n this.allCheckBox = true;\r\n }\r\n else {\r\n this.checkIndeterminate = true;\r\n }\r\n } else {\r\n this.checkIndeterminate = false;\r\n }\r\n }\r\n\r\n parentCheckBoxChange() {\r\n const selectedCount = this.foldersTableData.data.filter(x => x.IsSelected == true).length;\r\n if (selectedCount > 0) {\r\n if (this.foldersTableData.data.length === selectedCount) {\r\n this.allCheckBox = true;\r\n }\r\n else {\r\n this.checkIndeterminate = true;\r\n }\r\n } else {\r\n this.checkIndeterminate = false;\r\n }\r\n }\r\n\r\n saveClick() {\r\n const folderIds: Number[] = [];\r\n this.reportFolders.filter(x => x.IsSelected == true).forEach(folder => {\r\n folderIds.push(folder.Id);\r\n });\r\n\r\n this.reportingFrameworkService.addReportInFolders(this.report.ReportId, folderIds).subscribe(result => {\r\n if (result == true) {\r\n this.dialogRef.close('save');\r\n }\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close('cancel');\r\n }\r\n\r\n}\r\n","
\r\n Select 'Add Folders' to organize the reports you use most frequently\r\n
\r\n\r\n
0 \">\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Folder\r\n \r\n \r\n \r\n \r\n {{mrf.FolderName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n {{mrf.FolderDescription}}\r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Report\r\n \r\n \r\n {{rpt.Description}}\r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, Input, OnChanges, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { AddMyReportFolderDialogComponent } from '../add-my-report-folder-dialog/add-my-report-folder-dialog.component';\r\nimport { MyReportsFolder, ReportsInFolder } from '../../reporting-framework.model';\r\nimport * as _ from 'lodash';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { take } from 'rxjs/operators';\r\nimport { ReportingFrameworkService } from '../../reporting-framework.service';\r\nimport { FoldersThisReportDialogComponent } from '../folders-this-report-dialog/folders-this-report-dialog.component';\r\nimport { ManageReportsInFolderComponent } from '../manage-reports-in-folder/manage-reports-in-folder.component';\r\nimport { ManualEntryRostersComponent } from '../../../../shared-modules/reporting/V9/manual-entry-rosters/manual-entry-rosters.component';\r\nimport { ClassListAllComponent } from '../../../../shared-modules/reporting/V9/class-list-all/class-list-all.component';\r\nimport { ClassListAllAttendanceNotMarkedComponent } from '../../../../shared-modules/reporting/V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component';\r\nimport { TeacherSummaryPreviewComponent } from '../../../../shared-modules/reporting/V9/teacher-summary-preview/teacher-summary-preview.component';\r\nimport { AttendanceHistoryByClassComponent } from '../../../../shared-modules/reporting/V9/attendance-history-by-class/attendance-history-by-class.component';\r\nimport { GradebookAssignmentsByStandardComponent } from '../../../../shared-modules/reporting/V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component';\r\nimport { V9ReportParametersComponent } from '../../../../shared-modules/reporting/V9/parameters/v9-report-parameters.component';\r\n\r\n@Component({\r\n selector: 'my-reports-tab',\r\n templateUrl: './my-reports-tab.component.html',\r\n styleUrls: ['./my-reports-tab.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class MyReportsTabComponent implements OnInit, OnChanges {\r\n\r\n tylerMatData = new TylerMatTableDataSource();\r\n isExpandAll = false;\r\n columnDisplay = ['More', 'FolderName', 'FolderDescription', 'Actions'];\r\n reportAreaColumns = ['ReportName', 'Actions'];\r\n\r\n @Input() myReportsFolders: MyReportsFolder[] = [];\r\n @Output() myReportFolderSaveEvent = new EventEmitter();\r\n\r\n\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n if (this.tylerMatData) {\r\n this.tylerMatData.sort = val;\r\n }\r\n }\r\n\r\n manualEntryRostersDialogRef: MatDialogRef;\r\n classListAllDialogRef: MatDialogRef;\r\n classListAllAttendanceNotMarkedDialogRef: MatDialogRef;\r\n teacherSummaryPreviewDialogRef: MatDialogRef;\r\n attendanceHistoryByClassDialogRef: MatDialogRef;\r\n gradebookAssignmentsByStandardDialogRef: MatDialogRef; // ONE-4254\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private dialogRef: MatDialogRef,\r\n private reportingFrameworkService: ReportingFrameworkService,\r\n private manualEntryRostersDialog: MatDialog,\r\n private classListAllDialog: MatDialog,\r\n private classListAllAttendanceNotMarkedDialog: MatDialog,\r\n private teacherSummaryPreviewDialog: MatDialog,\r\n private attendanceHistoryByClassDialog: MatDialog,\r\n private gradebookAssignmentsByStandardDialog: MatDialog, // ONE-4254\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.tylerMatData = new TylerMatTableDataSource(this.myReportsFolders);\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n\r\n ngOnChanges() {\r\n this.tylerMatData = new TylerMatTableDataSource(this.myReportsFolders);\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n\r\n editFolder(mrf: MyReportsFolder) {\r\n const dialogBox = this.dialog.open(AddMyReportFolderDialogComponent, {\r\n width: '35vw',\r\n disableClose: true\r\n });\r\n dialogBox.componentInstance.dialogTitle = 'Edit Folder';\r\n dialogBox.componentInstance.editMode = true;\r\n dialogBox.componentInstance.myReportFolder = _.cloneDeep(mrf);\r\n dialogBox.afterClosed().subscribe(result => {\r\n if (result == 'save') {\r\n this.myReportFolderSaveEvent.emit();\r\n }\r\n });\r\n }\r\n\r\n deleteFolder(mrf: MyReportsFolder) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Folder';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete the ' + mrf.FolderName + ' folder?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.pipe(take(1)).subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.reportingFrameworkService.deleteMyReportFolder(mrf.Id).pipe(take(1)).subscribe(result => {\r\n if (result == true) {\r\n this.myReportFolderSaveEvent.emit();\r\n this.dialogRef.close('save');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n manageReports(mrf: MyReportsFolder) {\r\n const dialogBox = this.dialog.open(ManageReportsInFolderComponent, {\r\n height: '85vh',\r\n width: '40vw',\r\n disableClose: true\r\n });\r\n dialogBox.componentInstance.isMyReportPage = true;\r\n dialogBox.componentInstance.reportFolder = _.cloneDeep(mrf);\r\n dialogBox.afterClosed().pipe(take(1)).subscribe(result => {\r\n if (result == 'save') {\r\n this.myReportFolderSaveEvent.emit();\r\n }\r\n });\r\n }\r\n\r\n reportClick(rpt: ReportsInFolder) {\r\n if (rpt.ReportName == 'ManualEntryRosters') {\r\n this.manualEntryRostersDialogRef = this.manualEntryRostersDialog.open(ManualEntryRostersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - All') {\r\n this.classListAllDialogRef = this.classListAllDialog.open(ClassListAllComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - Attendance Not Marked') {\r\n this.classListAllAttendanceNotMarkedDialogRef = this.classListAllAttendanceNotMarkedDialog.open(ClassListAllAttendanceNotMarkedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'AttendancePreviewByTeacher') {\r\n this.teacherSummaryPreviewDialogRef = this.teacherSummaryPreviewDialog.open(TeacherSummaryPreviewComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateAttendanceHistoryByClass' || rpt.Description == 'Attendance History by Class') {\r\n this.attendanceHistoryByClassDialogRef = this.attendanceHistoryByClassDialog.open(AttendanceHistoryByClassComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n // else if (rpt.ReportName == 'GradeCommentList') {\r\n\r\n // /*\r\n\r\n // Public Class pub_clsReportCardCommentParameters\r\n // 'Connection String\r\n // Public strConnectionString As String = \"\"\r\n // 'Report Parameters\r\n // Public strReportOutputFile As String = \"\"\r\n // Public strReportOutputFolderUNC As String = \"\"\r\n // 'Option Based Parameters\r\n // Public strReportDate As String = \"\"\r\n // Public strReportSiteHeader As String = \"\"\r\n // Public strReportTitle As String = \"\"\r\n // Public strSiteYearCode As String = \"\"\r\n // Public intSiteYearId As Integer = 0\r\n // Public strStudentSelectionStatus As String = \"\"\r\n // Public strStudentIds As String = \"\"\r\n // Public blnPageBreakAfterEachStudent As Boolean = False\r\n // End Class\r\n // */\r\n\r\n // const reportType = 1;\r\n // const reportTitle = 'Report Card Comment List';\r\n // const reportName = 'GradeCommentList'; // 'CreateReportCardCommentsReport'; // 'GradeCommentList';\r\n\r\n // const param = [];\r\n /* eslint-disable , */\r\n // this.reportingService.addCoreParametersV9\r\n // (\r\n // param,\r\n // reportTitle,\r\n // reportType,\r\n // // this.v9parameterName.strReportSiteAddress |\r\n // this.v9parameterName.strReportDate |\r\n // this.v9parameterName.strReportSiteHeader |\r\n // this.v9parameterName.strReportTitle |\r\n // this.v9parameterName.strSiteYearCode |\r\n // this.v9parameterName.lngSiteYearId\r\n // // this.v9parameterName.intSiteYearId |\r\n // // this.v9parameterName.strOutputFile_NOFILE\r\n // // this.v9parameterName.bytReportType ||\r\n // // this.v9parameterName.strOutputFile_NOFILE\r\n\r\n // );\r\n /* eslint-enable */\r\n\r\n // // Public strStudentSelectionStatus As String = \"\"\r\n // // Public strStudentIds As String = \"\"\r\n // // Public blnPageBreakAfterEachStudent As Boolean = False\r\n\r\n // const parameters = [];\r\n // const stringifiedParameters = JSON.stringify(param);\r\n // parameters.push(stringifiedParameters);\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('REPORT PARAMETERS TO BE RUN:');\r\n // console.log(param);\r\n // console.log('REPORT PARAMETERS STRINGIFIED:');\r\n // console.log(stringifiedParameters);\r\n // }\r\n\r\n // this.reportingService.openStudentAttachmentReport(0, reportName, '', '', '', parameters, reportType);\r\n\r\n // }\r\n else if (rpt.ReportName == 'CreateGradebookAssignmentsByObjectiveReport') {\r\n this.gradebookAssignmentsByStandardDialogRef = this.gradebookAssignmentsByStandardDialog.open(GradebookAssignmentsByStandardComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else {\r\n const v9ReportParametersDialogRef = this.dialog.open(V9ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '50vw',\r\n maxWidth: '100vw',\r\n minHeight: '50vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n v9ReportParametersDialogRef.componentInstance.selectedReport = JSON.parse(JSON.stringify(rpt));\r\n\r\n v9ReportParametersDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined) {\r\n // this.getMyV9Reports();\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n folderforthisReportClick(rpt: ReportsInFolder, mrf: MyReportsFolder) {\r\n const thisReportDialog = this.dialog.open(FoldersThisReportDialogComponent, {\r\n height: '85vh',\r\n width: '40vw',\r\n disableClose: true\r\n });\r\n thisReportDialog.componentInstance.report = _.cloneDeep(rpt);\r\n thisReportDialog.componentInstance.reportFolders = _.cloneDeep(this.myReportsFolders);\r\n\r\n thisReportDialog.afterClosed().pipe(take(1)).subscribe(result => {\r\n if (result == 'save') {\r\n this.myReportFolderSaveEvent.emit();\r\n }\r\n });\r\n }\r\n\r\n deleteReportClick(rpt: ReportsInFolder, mrf: MyReportsFolder) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Remove';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to remove the ' + rpt.Description + ' report from
the folder ' + mrf.FolderName + '?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Remove';\r\n deleteConfirmDialog.componentInstance.confirmEvent.pipe(take(1)).subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.reportingFrameworkService.deleteReportInFolder(rpt.ReportFolderId, rpt.ReportId).pipe(take(1)).subscribe(result => {\r\n if (result == true) {\r\n const reportFolder = this.myReportsFolders.find(x => x.Id == mrf.Id);\r\n const idx = reportFolder.ReportsInFolder.indexOf(rpt);\r\n reportFolder.ReportsInFolder.splice(idx, 1);\r\n this.tylerMatData.data = [];\r\n this.tylerMatData = new TylerMatTableDataSource(this.myReportsFolders);\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n expandAll() {\r\n this.isExpandAll = !this.isExpandAll;\r\n for (const row of this.tylerMatData.data) {\r\n row.detailRow = this.isExpandAll;\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.tylerMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.tylerMatData.toggleExpanded(row);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.tylerMatData.rowKeyPress(event, row);\r\n }\r\n\r\n}\r\n","
0 \">\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Folder\r\n \r\n \r\n \r\n \r\n {{mrf.FolderName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n {{mrf.FolderDescription}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Reports\r\n \r\n \r\n {{rpt.Description}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { AttendanceHistoryByClassComponent } from '../../../../shared-modules/reporting/V9/attendance-history-by-class/attendance-history-by-class.component';\r\nimport { ClassListAllAttendanceNotMarkedComponent } from '../../../../shared-modules/reporting/V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component';\r\nimport { ClassListAllComponent } from '../../../../shared-modules/reporting/V9/class-list-all/class-list-all.component';\r\nimport { GradebookAssignmentsByStandardComponent } from '../../../../shared-modules/reporting/V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component';\r\nimport { ManualEntryRostersComponent } from '../../../../shared-modules/reporting/V9/manual-entry-rosters/manual-entry-rosters.component';\r\nimport { V9ReportParametersComponent } from '../../../../shared-modules/reporting/V9/parameters/v9-report-parameters.component';\r\nimport { TeacherSummaryPreviewComponent } from '../../../../shared-modules/reporting/V9/teacher-summary-preview/teacher-summary-preview.component';\r\nimport { AssignedReports, ReportsInFolder } from '../../reporting-framework.model';\r\n\r\n@Component({\r\n selector: 'assigned-reports-tab',\r\n templateUrl: './assigned-reports-tab.component.html',\r\n styleUrls: ['./assigned-reports-tab.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class AssignedReportsTabComponent implements OnInit {\r\n\r\n @Input() assignedReportFolders: AssignedReports[] = [];\r\n columnDisplay = ['More', 'FolderName', 'FolderDescription'];\r\n reportAreaColumns = ['ReportName'];\r\n isExpandAll = false;\r\n tylerMatData = new TylerMatTableDataSource(this.assignedReportFolders);\r\n\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n if (this.tylerMatData) {\r\n this.tylerMatData.sort = val;\r\n }\r\n }\r\n\r\n manualEntryRostersDialogRef: MatDialogRef;\r\n classListAllDialogRef: MatDialogRef;\r\n classListAllAttendanceNotMarkedDialogRef: MatDialogRef;\r\n teacherSummaryPreviewDialogRef: MatDialogRef;\r\n attendanceHistoryByClassDialogRef: MatDialogRef;\r\n gradebookAssignmentsByStandardDialogRef: MatDialogRef; // ONE-4254\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private manualEntryRostersDialog: MatDialog,\r\n private classListAllDialog: MatDialog,\r\n private classListAllAttendanceNotMarkedDialog: MatDialog,\r\n private teacherSummaryPreviewDialog: MatDialog,\r\n private attendanceHistoryByClassDialog: MatDialog,\r\n private gradebookAssignmentsByStandardDialog: MatDialog, // ONE-4254\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.tylerMatData = new TylerMatTableDataSource(this.assignedReportFolders);\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n\r\n expandAll() {\r\n this.isExpandAll = !this.isExpandAll;\r\n for (const row of this.tylerMatData.data) {\r\n row.detailRow = this.isExpandAll;\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.tylerMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.tylerMatData.toggleExpanded(row);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.tylerMatData.rowKeyPress(event, row);\r\n }\r\n\r\n reportClick(rpt: ReportsInFolder) {\r\n if (rpt.ReportName == 'ManualEntryRosters') {\r\n this.manualEntryRostersDialogRef = this.manualEntryRostersDialog.open(ManualEntryRostersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - All') {\r\n this.classListAllDialogRef = this.classListAllDialog.open(ClassListAllComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - Attendance Not Marked') {\r\n this.classListAllAttendanceNotMarkedDialogRef = this.classListAllAttendanceNotMarkedDialog.open(ClassListAllAttendanceNotMarkedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'AttendancePreviewByTeacher') {\r\n this.teacherSummaryPreviewDialogRef = this.teacherSummaryPreviewDialog.open(TeacherSummaryPreviewComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateAttendanceHistoryByClass' || rpt.Description == 'Attendance History by Class') {\r\n this.attendanceHistoryByClassDialogRef = this.attendanceHistoryByClassDialog.open(AttendanceHistoryByClassComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n // else if (rpt.ReportName == 'GradeCommentList') {\r\n\r\n // /*\r\n\r\n // Public Class pub_clsReportCardCommentParameters\r\n // 'Connection String\r\n // Public strConnectionString As String = \"\"\r\n // 'Report Parameters\r\n // Public strReportOutputFile As String = \"\"\r\n // Public strReportOutputFolderUNC As String = \"\"\r\n // 'Option Based Parameters\r\n // Public strReportDate As String = \"\"\r\n // Public strReportSiteHeader As String = \"\"\r\n // Public strReportTitle As String = \"\"\r\n // Public strSiteYearCode As String = \"\"\r\n // Public intSiteYearId As Integer = 0\r\n // Public strStudentSelectionStatus As String = \"\"\r\n // Public strStudentIds As String = \"\"\r\n // Public blnPageBreakAfterEachStudent As Boolean = False\r\n // End Class\r\n // */\r\n\r\n // const reportType = 1;\r\n // const reportTitle = 'Report Card Comment List';\r\n // const reportName = 'GradeCommentList'; // 'CreateReportCardCommentsReport'; // 'GradeCommentList';\r\n\r\n // const param = [];\r\n /* eslint-disable , */\r\n // this.reportingService.addCoreParametersV9\r\n // (\r\n // param,\r\n // reportTitle,\r\n // reportType,\r\n // // this.v9parameterName.strReportSiteAddress |\r\n // this.v9parameterName.strReportDate |\r\n // this.v9parameterName.strReportSiteHeader |\r\n // this.v9parameterName.strReportTitle |\r\n // this.v9parameterName.strSiteYearCode |\r\n // this.v9parameterName.lngSiteYearId\r\n // // this.v9parameterName.intSiteYearId |\r\n // // this.v9parameterName.strOutputFile_NOFILE\r\n // // this.v9parameterName.bytReportType ||\r\n // // this.v9parameterName.strOutputFile_NOFILE\r\n\r\n // );\r\n /* eslint-enable */\r\n\r\n // // Public strStudentSelectionStatus As String = \"\"\r\n // // Public strStudentIds As String = \"\"\r\n // // Public blnPageBreakAfterEachStudent As Boolean = False\r\n\r\n // const parameters = [];\r\n // const stringifiedParameters = JSON.stringify(param);\r\n // parameters.push(stringifiedParameters);\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('REPORT PARAMETERS TO BE RUN:');\r\n // console.log(param);\r\n // console.log('REPORT PARAMETERS STRINGIFIED:');\r\n // console.log(stringifiedParameters);\r\n // }\r\n\r\n // this.reportingService.openStudentAttachmentReport(0, reportName, '', '', '', parameters, reportType);\r\n\r\n // }\r\n else if (rpt.ReportName == 'CreateGradebookAssignmentsByObjectiveReport') {\r\n this.gradebookAssignmentsByStandardDialogRef = this.gradebookAssignmentsByStandardDialog.open(GradebookAssignmentsByStandardComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else {\r\n const v9ReportParametersDialogRef = this.dialog.open(V9ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '50vw',\r\n maxWidth: '100vw',\r\n minHeight: '50vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n v9ReportParametersDialogRef.componentInstance.selectedReport = JSON.parse(JSON.stringify(rpt));\r\n\r\n v9ReportParametersDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined) {\r\n // this.getMyV9Reports();\r\n }\r\n });\r\n }\r\n }\r\n\r\n}\r\n","\r\n My Reports\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n {{tab | translate}}\r\n \r\n \r\n \r\n\r\n\r\n
-1\">\r\n \r\n \r\n\r\n \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, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { forkJoin, Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { MyReportsPreferences } from '../../../shared-components/user-preferences/my-reports-preferences.model';\r\nimport { UserPreferencesService } from '../../../shared-components/user-preferences/user-preferences.service';\r\nimport { ReportQueueComponent } from '../../../shared-modules/reporting/report-queue/report-queue.component';\r\nimport { ReportingComponent } from '../../../shared-modules/reporting/reporting.component';\r\nimport { AssignedReports, MyReportsFolder } from '../reporting-framework.model';\r\nimport { ReportingFrameworkService } from '../reporting-framework.service';\r\nimport { AddMyReportFolderDialogComponent } from './add-my-report-folder-dialog/add-my-report-folder-dialog.component';\r\n\r\n@Component({\r\n selector: 'app-my-reports',\r\n templateUrl: './my-reports.component.html',\r\n styleUrls: ['./my-reports.component.css']\r\n})\r\nexport class MyReportsComponent implements OnInit {\r\n\r\n selectionIndex: number;\r\n tabNames = ['My Reports'];\r\n tabIndex = null;\r\n reportsDialogRef: MatDialogRef;\r\n myReportsFolders: MyReportsFolder[] = [];\r\n\r\n subscriptions: Subscription[] = [];\r\n\r\n assignedReportFolders: AssignedReports[] = [];\r\n myReportsPreferences: MyReportsPreferences;\r\n showAsDialog = false;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private reportingFrameworkService: ReportingFrameworkService,\r\n private userPreferenceService: UserPreferencesService,\r\n private dialogRef: MatDialogRef\r\n\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.getMyReportsPreferences();\r\n }\r\n\r\n getMyReportsPreferences() {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISMyReports', 0, '', false).subscribe(results => {\r\n this.myReportsPreferences = JSON.parse(results[0]);\r\n this.getTabsData(true);\r\n });\r\n }\r\n\r\n getTabsData(byOnInit = false) {\r\n this.subscriptions.push(\r\n forkJoin(\r\n this.reportingFrameworkService.getMyReportsFolders(),\r\n this.reportingFrameworkService.getAssignedReportFolders(false)\r\n ).pipe(take(1)).subscribe(results => {\r\n this.myReportsFolders = results[0];\r\n\r\n this.assignedReportFolders = results[1];\r\n\r\n\r\n if (byOnInit == true) {\r\n this.tabNames.push('Assigned Reports');\r\n\r\n if (this.tabNames.length > 0) {\r\n this.tabIndex = this.tabNames;\r\n let i = 0;\r\n this.tabNames.forEach(element => {\r\n if (element == 'My Reports') {\r\n element = 'MyReports';\r\n }\r\n if (element == 'Assigned Reports') {\r\n element = 'AssignedReports';\r\n }\r\n this.tabIndex[element] = i;\r\n i++;\r\n });\r\n }\r\n\r\n // tab setup..ONE-11931\r\n // If the user has both My Reports and Assigned Reports folders setup, the page will default to what is set on the option below (Fig 2)\r\n if (this.myReportsFolders.length > 0 && this.assignedReportFolders.length > 0) {\r\n if (this.myReportsPreferences != undefined && this.myReportsPreferences.DefaultTab != undefined) {\r\n this.selectionIndex = this.myReportsPreferences.DefaultTab;\r\n } else {\r\n this.selectionIndex = 0;\r\n }\r\n }\r\n // If the user has no Assigned Reports folder setup and has My Reports folders setup, the My Reports page will default to the My Reports tab\r\n else if (this.myReportsFolders.length > 0 && this.assignedReportFolders.length == 0) {\r\n this.selectionIndex = 0;\r\n }\r\n // If the user has no My Reports folder setup and has Assigned Reports folders setup, the My Reports page will default to the Assigned Reports tab\r\n else if (this.myReportsFolders.length == 0 && this.assignedReportFolders.length > 0) {\r\n this.selectionIndex = 1;\r\n }\r\n // If the user has neither setup, the My Reports page will default to the My Reports tab\r\n else if (this.myReportsFolders.length == 0 && this.assignedReportFolders.length == 0) {\r\n this.selectionIndex = 0;\r\n }\r\n\r\n }\r\n\r\n }));\r\n }\r\n\r\n addFolderClick() {\r\n const dialogBox = this.dialog.open(AddMyReportFolderDialogComponent, {\r\n width: '35vw',\r\n disableClose: true\r\n });\r\n dialogBox.componentInstance.dialogTitle = 'Add Folders';\r\n dialogBox.componentInstance.editMode = false;\r\n dialogBox.componentInstance.myReportFolder = new MyReportsFolder();\r\n dialogBox.afterClosed().subscribe(result => {\r\n if (result == 'save') {\r\n this.getTabsData();\r\n }\r\n });\r\n }\r\n\r\n allReportsClick() {\r\n this.reportsDialogRef = this.dialog.open(ReportingComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n\r\n openQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialog.closeAll();\r\n }\r\n\r\n}\r\n","import { V9ReportParameter } from \"../../shared-modules/reporting/models/v9-report-parameter.model\";\r\n\r\nexport class MyReportsFolder {\r\n Id: Number;\r\n FolderName: string;\r\n FolderDescription: string;\r\n ReportsInFolder: ReportsInFolder[];\r\n\r\n // Non DTO field\r\n IsSelected: boolean;\r\n}\r\n\r\nexport class ReportsInFolder {\r\n ReportId: Number;\r\n ReportFolderId: Number;\r\n ReportName: string;\r\n Description: string;\r\n\r\n\r\n Id: number;\r\n ParentId: number;\r\n ReportTitle: string;\r\n ReportType: number;\r\n Active: boolean;\r\n WorkflowReport: boolean;\r\n MinimumStudentsForWorkflow: number;\r\n ReportParameterClassName: string;\r\n StudentIds: string;\r\n ReportParameters: V9ReportParameter[];\r\n ReportValue: number;\r\n SchoolId: number;\r\n YearId: number;\r\n SiteSectionId: number;\r\n}\r\n\r\n// Assigned Reports Model\r\n\r\nexport class AssignedReports {\r\n Id: Number;\r\n FolderName: string;\r\n FolderDescription: string;\r\n NumberOfReports: Number;\r\n CreatedBy: string;\r\n CreatedOn: Date;\r\n\r\n AssignedReportsInFolder: AssignedReportInFolderDTO[];\r\n PermissionGroupsInFolder: PermissionGroupsInFolder[];\r\n}\r\n\r\nexport class PermissionGroupsInFolder {\r\n PermissionGroupId: Number;\r\n ReportFolderId: Number;\r\n PermissionGroupName: string;\r\n}\r\n\r\nexport class AssignedReportInFolderDTO {\r\n ReportId: Number;\r\n ReportFolderId: Number;\r\n ReportName: string;\r\n\r\n Description: string;\r\n Id: number;\r\n ParentId: number;\r\n ReportTitle: string;\r\n ReportType: number;\r\n Active: boolean;\r\n WorkflowReport: boolean;\r\n MinimumStudentsForWorkflow: number;\r\n ReportParameterClassName: string;\r\n StudentIds: string;\r\n ReportParameters: V9ReportParameter[];\r\n ReportValue: number;\r\n SchoolId: number;\r\n YearId: number;\r\n SiteSectionId: number;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { AssignedReports, MyReportsFolder } from './reporting-framework.model';\r\n\r\n@Injectable()\r\nexport class ReportingFrameworkService {\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private http: HttpClient\r\n ) { }\r\n\r\n getMyReportsFolders(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Classroom + 'GetMyReportsFolders' + queryString);\r\n }\r\n\r\n saveMyReportFolder(myReportFolder: MyReportsFolder): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Classroom + 'SaveMyReportFolder' + queryString, myReportFolder);\r\n }\r\n\r\n saveReportsInFolder(folderId: Number, reportIds: Number[]): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveReportsInFolder' + queryString, reportIds);\r\n }\r\n\r\n deleteMyReportFolder(folderId: Number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteMyReportFolder' + queryString);\r\n }\r\n\r\n deleteReportInFolder(folderId: Number, reportId: Number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId + '&reportId=' + reportId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteReportInFolder' + queryString);\r\n }\r\n\r\n addReportInFolders(reportId: Number, folderIds: Number[]): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&reportId=' + reportId;\r\n return this.http.post(System.apiURL.Classroom + 'AddReportInFolders' + queryString, folderIds);\r\n }\r\n\r\n getAssignedReportFolders(callByPage = true): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&callByPage=' + callByPage;\r\n return this.http.get(System.apiURL.Classroom + 'GetAssignedReportFolders' + queryString);\r\n }\r\n\r\n saveAssignedReportFolder(assignedReportFolder: AssignedReports): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Classroom + 'SaveAssignedReportFolder' + queryString, assignedReportFolder);\r\n }\r\n\r\n deleteAssignReportFolder(folderId: Number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteAssignReportFolder' + queryString);\r\n }\r\n\r\n deleteAssignReportInFolder(folderId: Number, reportId: Number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId + '&reportId=' + reportId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteAssignReportInFolder' + queryString);\r\n }\r\n\r\n saveAssignedReportsInFolder(folderId: Number, reportIds: Number[]): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveAssignedReportsInFolder' + queryString, reportIds);\r\n }\r\n\r\n savePermissionGroupsInFolder(folderId: Number, permissionGroupIds: Number[]): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&folderId=' + folderId;\r\n return this.http.post(System.apiURL.Classroom + 'SavePermissionGroupsInFolder' + queryString, permissionGroupIds);\r\n }\r\n\r\n checkDefaultLandingPage(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Classroom + 'CheckDefaultLandingPage' + queryString);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../../shared-components/System';\r\nimport { Team } from '../../../student360/teams/team.model';\r\nimport { StaffCardPreferences } from './staff-card-settings/staff-card-preferences.model';\r\nimport { EFormInstance } from '../../../shared-components/e-forms/e-form-instance.model';\r\nimport * as moment from 'moment';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { StaffWork } from './staff-work-card/staff-work.model';\r\n\r\n@Injectable()\r\nexport class StaffCardsService {\r\n\r\n cardPreferences: StaffCardPreferences;\r\n surveyCardShowCountsForAllSchools = false;\r\n SurveyCardGetMostRecent = false;\r\n hideEmptyAlerts = false;\r\n SurveyCardStartDateByDate: moment.Moment;\r\n SurveyCardStartDateByRange: moment.Moment;\r\n rightContainerHeight: number;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n ) {\r\n }\r\n\r\n getAbsencesByCourseCard(numberOfAbsences: number, absentType: number = 0): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetAbsenceByCourseCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&numberOfAbsences=' + numberOfAbsences + '&absentType=' + absentType);\r\n }\r\n\r\n getRecentBehaviorCard(date): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetRecentBehaviorCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&date=' + date);\r\n }\r\n\r\n getStaffTeamsCard(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetStaffTeamsCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID);\r\n }\r\n\r\n getSchoolsTodayCard(fromDate: string, toDate: string, siteYearId: number = 0, includeProjected: boolean = false): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetSchoolsTodayCard?yearId=' + this.yearService.defaultYear.Id + '&fromDate=' + fromDate + '&toDate=' + toDate + '&siteYearId=' + siteYearId + '&includeProjected=' + includeProjected);\r\n }\r\n\r\n getProgramEnrollmentCard(days: number = 0): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetProgramEnrollmentCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&days=' + days);\r\n }\r\n\r\n getStaffWorkCard(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetStaffWorkCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID);\r\n }\r\n\r\n getEFormSurveysForStaffCard(yearId: number, schoolId: number, showCountsForAllSchools: boolean, getMostRecent: boolean, startDate: string): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&showCountsForAllSchools=' + showCountsForAllSchools +\r\n '&getMostRecent=' + getMostRecent +\r\n '&startDate=' + startDate;\r\n return this.http.get(System.apiURL.Admin + 'GetEFormSurveysForStaffCard' + queryString);\r\n }\r\n\r\n getUpcomingBirthdaysCard(numberOfDays: number = 0) {\r\n return this.http.get(System.apiURL.Classroom + 'GetUpcomingBirthdaysCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&numberOfDays=' + numberOfDays);\r\n }\r\n\r\n getRecentlyUpdatedGBGradesCard(days: number = 0): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetRecentlyUpdatedGBGradesCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&days=' + days);\r\n }\r\n\r\n getImmunizationComplianceCard(showAllSchoolCounts: boolean): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetImmunizationComlianceCard?yearId=' + this.yearService.defaultYear.Id + '&siteId=' + this.yearService.defaultYear.SchoolID + '&showAllSchoolCounts=' + showAllSchoolCounts);\r\n }\r\n}","\r\n
\r\n\tAdd Student List\r\n\tEdit Student List\r\n\tView Student List\r\n
\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\r\n \r\n
\r\n You must take ownership to edit the list.\r\n
\r\n\r\n \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{type.CodeDescription}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{scope.CodeDescription}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n \r\n \r\n \r\n Active\r\n \r\n \r\n Inactive\r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\r\n \r\n \r\n
\r\n {{studentList.OwnerLastName}}, {{studentList.OwnerFirstName}}\r\n  \r\n \r\n
\r\n\t
\r\n\r\n\t\r\n
\r\n \r\n\r\n \r\n \r\n \r\n Student #\r\n \r\n \r\n \r\n {{student.StudentNumber}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Name\r\n \r\n \r\n \r\n {{student.formattedName(generalPreferences)}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Delete\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\t
\r\n\t\tAvailable to \r\n \r\n Selected Students\r\n \r\n\t\t\r\n\t\t\tSelected Sites\r\n\t\t\r\n\t
\r\n
\r\n","import {Component, ElementRef, EventEmitter, Inject, OnDestroy, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport {StudentList} from '../student-list.model';\r\nimport {Student} from '../../../shared-components/student/student.model';\r\nimport {TylerMatTableDataSource} from '../../../shared-components/angular-material/extended.class';\r\nimport {LoginService} from '../../../shared-modules/login/login.service';\r\nimport {GeneralPreferences} from '../../../shared-components/user-preferences/general-preferences.model';\r\nimport {UserPreferencesService} from '../../../shared-components/user-preferences/user-preferences.service';\r\nimport {System} from '../../../shared-components/System';\r\nimport {Subscription} from 'rxjs';\r\nimport {StudentListsService} from '../student-lists.service';\r\nimport {ErrorList} from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport {NgForm} from '@angular/forms';\r\nimport {SharedService} from '../../../shared-components/shared.service';\r\nimport {LookupService} from '../../../shared-components/lookup/lookup.service';\r\nimport {Lookup} from '../../../shared-components/lookup/lookup.model';\r\nimport { SelectedSitesDialogComponent } from '../../../shared-components/controls/selected-sites-dialog/selected-sites-dialog.component';\r\nimport {UserService} from '../../../shared-components/user/user.service';\r\nimport {Staff} from '../../../shared-components/staff-search/staff.model';\r\nimport * as _ from 'lodash';\r\nimport {SecurityService} from '../../../shared-components/security/security.service';\r\nimport {take} from 'rxjs/operators';\r\nimport {StaffSearchService} from '../../../shared-components/staff-search/staff-search.service';\r\nimport {YearService} from '../../../shared-components/year/year.service';\r\nimport { SelectedSite } from '../../../shared-components/controls/selected-sites-dialog/selected-site';\r\nimport {StaffSearchComponent} from '../../../shared-components/staff-search/staff-search.component';\r\n\r\n@Component({\r\n\tselector: 'app-add-edit-student-list-dialog',\r\n\ttemplateUrl: './add-edit-student-list-dialog.component.html',\r\n\tstyleUrls: ['./add-edit-student-list-dialog.component.css']\r\n})\r\nexport class AddEditStudentListDialogComponent implements OnInit, OnDestroy {\r\n\r\n\t// Injected Properties\r\n\teditMode = false;\r\n\taddMode = false;\r\n\tinjectedStudents: Student[] = [];\r\n\tstudentList = new StudentList();\r\n\tdisableStudents = false;\r\n allowCreateDistrictLists = false;\r\n allowCreateSchoolLists = false;\r\n staffId: number;\r\n staff: Staff[];\r\n admin: boolean;\r\n\r\n\t// Interface properties\r\n\tstudentEmitter = new EventEmitter();\r\n\tsearchEmitter = new EventEmitter();\r\n\r\n\t// Properties\r\n\toriginalList = new StudentList();\r\n\tV10: boolean;\r\n\tgeneralPreferences: GeneralPreferences;\r\n\tsubscriptions: Subscription[] = [];\r\n\tinitialStudents: Student[] = [];\r\n\terrors: ErrorList[] = [];\r\n\t@ViewChild('nameField', { read: ElementRef, static: true }) nameField: ElementRef;\r\n\t@ViewChild('descriptionField', { read: ElementRef, static: true }) descriptionField: ElementRef;\r\n\t@ViewChild('form', { read: NgForm, static: true }) form: NgForm;\r\n\ttypes: Lookup[] = [];\r\n\tscopes: Lookup[] = [];\r\n\townerNotInStaff = false;\r\n\tinitialOwnerId = 0;\r\n\r\n\t// Table Properties\r\n\ttableData = new TylerMatTableDataSource();\r\n\tprivate _sort: MatSort;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate loginService: LoginService,\r\n\t\tprivate userPreferencesService: UserPreferencesService,\r\n\t\tprivate studentListsService: StudentListsService,\r\n\t\tprivate sharedService: SharedService,\r\n\t\tprivate lookupService: LookupService,\r\n private userService: UserService,\r\n private securityService: SecurityService,\r\n private staffSearchService: StaffSearchService,\r\n private yearService: YearService\r\n\t) { }\r\n\r\n\tget sort(): MatSort {\r\n\t\treturn this._sort;\r\n\t}\r\n\r\n\t@ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n\t\tthis._sort = value;\r\n\t\tthis.tableData.sort = value;\r\n\t}\r\n\r\n\tget viewMode() {\r\n\t\treturn !this.editMode && !this.addMode;\r\n\t}\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tthis.V10 = this.loginService.LoginSettings.V10;\r\n\t\tthis.generalPreferences = this.userPreferencesService.generalPreferences;\r\n\r\n\t\t// Helper for handling properties\r\n let currentOwner: Staff;\r\n const handleStaff = (staff: Staff[]) => {\r\n this.staff = _.cloneDeep(staff);\r\n this.staff.sort((a, b) => {\r\n if (a.LastName.localeCompare(b.LastName) != 0) {\r\n return a.LastName.trim().localeCompare(b.LastName.trim());\r\n } else {\r\n return a.FirstName.trim().localeCompare(b.FirstName.trim());\r\n }\r\n });\r\n this.ownerNotInStaff = true;\r\n this.staff.forEach(staffMember => {\r\n if (staffMember.StaffId == this.staffId) {\r\n this.ownerNotInStaff = false;\r\n }\r\n\t\t\t});\r\n\r\n\t\t\t// For all new lists, the owner should be defaulted to the current user\r\n\t\t\tif (this.studentList.ID <= 0) {\r\n\t\t\t\tthis.studentList.Owner = this.staffId;\r\n\t\t\t\tthis.studentList.OwnerFirstName = this.userService.currentUser.FirstName;\r\n\t\t\t\tthis.studentList.OwnerMiddleName = this.userService.currentUser.MiddleName;\r\n\t\t\t\tthis.studentList.OwnerLastName = this.userService.currentUser.LastName;\r\n\t\t\t}\r\n\r\n // If the staff does not contain the owner of the list, add that to the list so it can show and be reverted\r\n if ((this.editMode && this.V10) || (!this.V10)) {\r\n currentOwner = this.staff.find(o => o.StaffId == this.studentList.Owner);\r\n if (currentOwner == null && this.staffId > 0) {\r\n currentOwner = new Staff();\r\n currentOwner.StaffId = this.studentList.Owner;\r\n currentOwner.FirstName = this.studentList.OwnerFirstName;\r\n currentOwner.MiddleName = this.studentList.OwnerMiddleName;\r\n currentOwner.LastName = this.studentList.OwnerLastName;\r\n this.staff.push(currentOwner);\r\n this.staff.sort((a: Staff, b: Staff) => {\r\n const lastNameCompare = a.LastName.localeCompare(b.LastName);\r\n const firstNameCompare = a.FirstName.localeCompare(b.FirstName);\r\n if (lastNameCompare != 0) {\r\n return lastNameCompare;\r\n } else {\r\n return firstNameCompare;\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n\t\t// Setting injected properties\r\n\t\tif (this.data) {\r\n\t\t\tthis.editMode = this.data.editMode;\r\n\t\t\tthis.addMode = this.data.addMode;\r\n\t\t\tthis.injectedStudents = this.data.students;\r\n\t\t\tthis.disableStudents = this.data.disableStudents;\r\n\t\t\tif (this.data.studentList) {\r\n\t\t\t\tthis.studentList = this.data.studentList.duplicate();\r\n this.initialOwnerId = this.studentList.Owner;\r\n\t\t\t}\r\n\t\t\tthis.allowCreateDistrictLists = this.data.allowCreateDistrictLists;\r\n\t\t\tthis.allowCreateSchoolLists = this.data.allowCreateSchoolLists;\r\n\t\t\tthis.staffId = this.data.staffId;\r\n\t\t\tif (this.data.staff) {\r\n handleStaff(this.data.staff);\r\n }\r\n\t\t\tthis.admin = this.data.admin;\r\n\t\t}\r\n\r\n\t\t// Obtaining staff and staffId if it is not provided\r\n // NOTE: we must check undefined here because admins deliberately use 0\r\n if (this.staffId == undefined) {\r\n this.loginService.getStaffIdByUserId().pipe(take(1)).subscribe(staffId => {\r\n this.staffId = staffId;\r\n if (this.studentList.ID <= 0) {\r\n this.studentList.Owner = this.staffId;\r\n }\r\n });\r\n }\r\n if (!this.staff || this.staff.length == 0) {\r\n this.staffSearchService.getStaffSearch(\r\n -1,\r\n this.yearService.defaultYear ? this.yearService.defaultYear.Id : this.yearService.loginYear.Id,\r\n true,\r\n '',\r\n '',\r\n '',\r\n this.yearService.schools.map(o => o.Id),\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n true\r\n ).pipe(take(1)).subscribe(\r\n staff => {\r\n handleStaff(staff);\r\n }\r\n );\r\n }\r\n\r\n\t\t// Checking permission properties if they were not injected\r\n const permissions = this.securityService.userPermissions;\r\n permissions.forEach(permission => {\r\n switch (permission.PrivilegeId) {\r\n case 2230:\r\n this.allowCreateDistrictLists = true;\r\n break;\r\n case 2229:\r\n this.allowCreateSchoolLists = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n\t\t// Setting up interface\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.studentEmitter.subscribe(students => {\r\n\t\t\t\tif (students) {\r\n\t\t\t\t\tfor (let i = 0; i < students.length; i++) {\r\n\t\t\t\t\t\tstudents[i] = System.convert(students[i], new Student());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.studentList.Students = students;\r\n\t\t\t\t\tthis.tableData.data = this.studentList.Students;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\t// Obtaining types and scopes\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.lookupService.getStudentListScopes().subscribe(scopes => {\r\n\t\t\t\tthis.scopes = scopes;\r\n\t\t\t}),\r\n\t\t\tthis.lookupService.getStudentListTypes().subscribe(types => {\r\n\t\t\t\tthis.types = types;\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\t// Setting initial student list properties\r\n\t\tObject.assign(this.originalList, this.studentList);\t// We must do this before we mess with the student list at all\r\n\t\tif (this.addMode) {\r\n\t\t\tthis.studentList.Students = this.injectedStudents;\r\n\t\t}\r\n\t\tif (this.studentList.Students && this.studentList.Students.length > 0) {\r\n\t\t\tfor (let i = 0; i < this.studentList.Students.length; i++) {\r\n\t\t\t\tthis.initialStudents.push(this.studentList.Students[i]);\r\n\t\t\t}\r\n\t\t} else if (!this.addMode) {\r\n\t\t\tthis.studentList.Students = [];\r\n\t\t\tthis.subscriptions.push(\r\n\t\t\t\tthis.studentListsService.getStudentList(this.studentList.ID).subscribe(studentList => {\r\n\t\t\t\t\tif (studentList) {\r\n\t\t\t\t\t\tif (studentList.Students) {\r\n\t\t\t\t\t\t\tthis.studentList.Students = studentList.Students;\r\n\t\t\t\t\t\t\tfor (let i = 0; i < this.studentList.Students.length; i++) {\r\n\t\t\t\t\t\t\t\tthis.studentList.Students[i] = System.convert(this.studentList.Students[i], new Student());\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.initialStudents = this.studentList.Students;\r\n\t\t\t\t\t\t\tthis.tableData.data = this.studentList.Students;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (studentList.SchoolIds) {\r\n this.studentList.SchoolIds = studentList.SchoolIds;\r\n }\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.sharedService.showBadSnackbar('Data failed to load');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (!this.studentList.Access) {\r\n\t\t this.studentList.Access = 'Private';\r\n }\r\n\r\n\t\t// Setting up student table\r\n\t\tthis.tableData.data = this.studentList.Students;\r\n\t\tthis.tableData.sortingDataAccessor = (data: Student, sortHeaderId: string): string|number => {\r\n\t\t\tswitch (sortHeaderId) {\r\n\t\t\t\tcase 'number':\r\n\t\t\t\t\treturn data.StudentNumber;\r\n\t\t\t\tcase 'name':\r\n\t\t\t\t\treturn data.formattedName(this.generalPreferences);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (data[sortHeaderId] instanceof Date) {\r\n\t\t\t\t\t\treturn data[sortHeaderId].getTime();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn this.tableData.defaultSortingAccessor(data, sortHeaderId);\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.subscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t}\r\n\r\n\tsave() {\r\n\t\t// PRE: the save button is clicked\r\n\t\t// POST: validates the data. If valid, saves.\r\n\t\tthis.validate();\r\n\t\tif (this.V10 == false && this.studentList.Owner == 0) {\r\n\t\t\tthis.studentList.Owner = this.staff.find(o => o.FirstName == 'sdmadmin' && o.LastName == 'sdmadmin').StaffId;\r\n\t\t}\r\n\t\tif (this.errors.length == 0) {\r\n\t\t\tthis.subscriptions.push(\r\n\t\t\t\tthis.studentListsService.saveStudentList(this.studentList).subscribe(id => {\r\n\t\t\t\t\tif (id < 0) {\r\n\t\t\t\t\t\tthis.sharedService.showBadSnackbar();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.studentList.ID = id;\r\n\t\t\t\t\t\tconst owner = this.staff.find(o => o.StaffId == this.studentList.Owner);\r\n if (owner != null) {\r\n this.studentList.OwnerLastName = owner.LastName;\r\n this.studentList.OwnerFirstName = owner.FirstName;\r\n this.studentList.OwnerMiddleName = owner.MiddleName;\r\n }\r\n\t\t\t\t\t\tthis.dialogBox.close(this.studentList);\r\n\t\t\t\t\t\tthis.sharedService.showGoodSnackbar();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tcancel() {\r\n\t\t// PRE: the cancel or close button is clicked\r\n\t\t// POST: resets the student list and closes the dialog box\r\n\t\tObject.assign(this.studentList, this.originalList);\r\n\t\tthis.studentList.Students = this.initialStudents;\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\tselectedSitesClick() {\r\n\t\t// PRE: the selected sites link is clicked\r\n\t\t// POST: opens the selected sites\r\n\t\tconst selectedSites: SelectedSite[] = [];\r\n\t\tif (this.studentList.SchoolIds != null) {\r\n\t\t\tthis.studentList.SchoolIds.forEach(o => {\r\n\t\t\t\tconst ss = new SelectedSite();\r\n\t\t\t\tss.Id = o;\r\n\t\t\t\tselectedSites.push(ss);\r\n\t\t\t});\r\n\t\t}\r\n\r\n // Opening the modal\r\n\t\tconst selectedSitesDialogBox = this.dialog.open(SelectedSitesDialogComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\twidth: '700px',\r\n\t\t\tdata: {\r\n\t\t\t\tselectedSites: selectedSites,\r\n viewOnly: this.viewMode || !this.allowCreateSchoolLists\r\n\t\t\t}\r\n\t\t});\r\n\t\tselectedSitesDialogBox.afterClosed().subscribe((results: SelectedSite[]) => {\r\n\t\t\tif (results) {\r\n\t\t\t\tthis.studentList.SchoolIds = results.map(o => o.Id);\r\n\t\t\t}\r\n\t\t\t// console.log(this.studentList);\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteStudent(student: Student) {\r\n\t\t// PRE: a student's delete link is clicked\r\n\t\t// POST: removes the student from the student list\r\n\t\tif (!this.viewMode && !this.disableStudents) {\r\n\t\t\tthis.studentList.Students.splice(this.studentList.Students.indexOf(student), 1);\r\n\t\t\tthis.tableData.data = this.studentList.Students;\r\n\t\t}\r\n\t}\r\n\r\n\tchangeStudents() {\r\n\t\t// PRE: the change student button is clicked\r\n\t\t// POST: opens the student search dialog to change the selected students\r\n\t\tthis.searchEmitter.emit({\r\n\t\t\tperformRoute: false,\r\n\t\t\treturnSelectedStudents: true,\r\n\t\t\tsearchAndSelect: true,\r\n\t\t\tselectedStudents: this.studentList.Students,\r\n creatingStudentList: true\r\n\t\t});\r\n\t}\r\n\r\n\tselectStaff() {\r\n\t // PRE: the SELECT STAFF button is clicked\r\n // POST: opens the staff search dialog to change the owner\r\n if (!this.viewMode) {\r\n const dialogBox = this.dialog.open(StaffSearchComponent, {\r\n disableClose: true,\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n width: '100vw',\r\n height: '100vh',\r\n data: {\r\n searchAndSelect: false\r\n }\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((staff: Staff) => {\r\n if (staff) {\r\n this.studentList.Owner = staff.StaffId;\r\n this.studentList.OwnerFirstName = staff.FirstName;\r\n this.studentList.OwnerMiddleName = staff.MiddleName;\r\n this.studentList.OwnerLastName = staff.LastName;\r\n }\r\n });\r\n }\r\n }\r\n\r\n\t// Methods\r\n getHint(currentValue: string, maxLength: number) {\r\n\t return (maxLength - (currentValue ? currentValue.length : 0)).toString() + ' characters left';\r\n }\r\n\r\n getDisabled() {\r\n\t return this.viewMode || this.staffId != this.studentList.Owner;\r\n }\r\n\r\n\tvalidate() {\r\n\t\t// POST: sets up the errors\r\n\r\n\t\t// Resetting errors\r\n\t\tthis.errors = [];\r\n\r\n\t\t// Triggering field validation\r\n\t\tSystem.forceUpdateValidity(this.form);\r\n\r\n\t\t// Name is required\r\n\t\tif (!this.studentList.Name) {\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Name',\r\n\t\t\t\tfieldRef: this.nameField,\r\n\t\t\t\terrorMsg: 'Required field.'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Description is required\r\n\t\tif (!this.studentList.Description) {\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Description',\r\n\t\t\t\tfieldRef: this.descriptionField,\r\n\t\t\t\terrorMsg: 'Required field.'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Status is required\r\n\t\tif (this.studentList.Status == null) {\r\n\t\t\tconst element = new ElementRef(document.getElementById('statusActiveRadio'));\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Status',\r\n\t\t\t\tfieldRef: element,\r\n\t\t\t\terrorMsg: 'Required field.'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Access is required\r\n\t\tif (!this.studentList.Access) {\r\n\t\t\tconst element = new ElementRef(document.getElementById('accessPrivateRadio'));\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Access',\r\n\t\t\t\tfieldRef: element,\r\n\t\t\t\terrorMsg: 'Required field.'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// If access is public within school, sites are required\r\n\t\tif (this.studentList.Access == 'Public within School' &&\r\n\t\t\t(!this.studentList.SchoolIds || this.studentList.SchoolIds.length < 1)) {\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Selected Sites',\r\n\t\t\t\tfieldRef: null,\r\n\t\t\t\terrorMsg: 'A site must be selected if the list is public within school.'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// At least one student must be present\r\n\t\tif (!this.studentList.Students || this.studentList.Students.length < 1) {\r\n\t\t\tthis.errors.push({\r\n\t\t\t\tfieldName: 'Students',\r\n\t\t\t\tfieldRef: null,\r\n\t\t\t\terrorMsg: 'At least one student must be a part of the list.'\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","import { Student } from '../../shared-components/student/student.model';\r\n\r\nexport class StudentList {\r\n\r\n\t// Properties\r\n\tID = -1;\r\n\tName: string;\r\n\tDescription: string;\r\n\tStatus = true;\r\n\tAccess: string;\r\n\tOwner: number;\r\n\tOwnerFirstName: string;\r\n\tOwnerMiddleName: string;\r\n\tOwnerLastName: string;\r\n\tAddedBy: number;\r\n\tAddedOn: Date;\r\n\tLastUpBy: number;\r\n\tLastUpOn: Date;\r\n\tDelBy: number;\r\n\tDelOn: Date;\r\n\tType: string;\r\n\tSchoolIds: number[] = [];\r\n\tScope: string;\r\n\tStudents: Student[];\r\n\r\n\t// Non DTO fields\r\n Selected = false;\r\n IsSelectedForMassEmail: boolean;\r\n MassEmailStudents: any[];\r\n listStudentsCheckAll: boolean;\r\n\r\n\t// Methods\r\n\tduplicate() {\r\n\t\tconst duplicate = new StudentList();\r\n\t\tObject.assign(duplicate, this);\r\n\t\treturn duplicate;\r\n\t}\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {StudentList} from './student-list.model';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {System} from '../../shared-components/System';\r\nimport {YearService} from '../../shared-components/year/year.service';\r\nimport {map} from 'rxjs/operators';\r\nimport {Observable} from 'rxjs';\r\n\r\n@Injectable()\r\nexport class StudentListsService {\r\n\r\n // Constructor\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n // Methods\r\n public getStudentLists(forAdmin = false, schoolId = this.yearService.defaultYear.SchoolID): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + schoolId +\r\n '&forAdmin=' + forAdmin;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentLists' + queryString).pipe(\r\n map(lists => {\r\n if (lists) {\r\n for (let i = 0; i < lists.length; i++) {\r\n lists[i] = System.convert(lists[i], new StudentList());\r\n }\r\n }\r\n return lists;\r\n })\r\n );\r\n }\r\n\r\n public getStudentList(listId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&listId=' + listId;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentList' + queryString).pipe(\r\n map(list => {\r\n return System.convert(list, new StudentList());\r\n })\r\n );\r\n }\r\n\r\n public saveStudentList(studentList: StudentList): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Classroom + 'SaveStudentList' + queryString, studentList);\r\n }\r\n\r\n public deleteStudentList(listId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&listId=' + listId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteStudentList' + queryString);\r\n }\r\n\r\n getStudentListSchoolIds(listId: number): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetStudentListSchoolIds?listId=${listId}`, { observe: 'response' });\r\n }\r\n}\r\n","\r\n

\r\n\t\r\n\t\tAdd Note\r\n\t\r\n\t\r\n\t\tMass Add Note\r\n\t\r\n\t\r\n\t\tEdit Note\r\n\t\r\n\t\r\n\t\t-\r\n\t\t\r\n\t\t\t\r\n\t\t\t[#{{note.StudentNumber}}]\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tMultiple Students\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n

\r\n
\r\n\t\r\n\t\t

This note will be visible to any user who has permission to view notes and has access
to this student.

\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{category.Code}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Active\r\n \r\n \r\n Inactive\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n\r\n\t\t\r\n\t\t\r\n\t\t\tDisplay as Bold\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\tClassroom Note (will be shown as an alert)\r\n\t\t\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t
\r\n
\r\n\r\n\r\n\r\n","import {Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport {StudentNote} from '../student-note.model';\r\nimport {StudentNoteCategory} from '../student-note-category.model';\r\nimport {System} from '../../../shared-components/System';\r\nimport {ErrorList} from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport {StudentNotesService} from '../student-notes.service';\r\nimport {LoginService} from '../../../shared-modules/login/login.service';\r\nimport {Student} from '../../../shared-components/student/student.model';\r\nimport {StudentsToAddDialogComponent} from '../../../shared-components/students-to-add-dialog/students-to-add-dialog.component';\r\nimport {Subscription} from 'rxjs';\r\nimport {UserService} from '../../../shared-components/user/user.service';\r\nimport * as moment from 'moment';\r\nimport {YearService} from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'add-edit-note-dialog',\r\n templateUrl: './add-edit-note-dialog.component.html',\r\n styleUrls: [\r\n './add-edit-note-dialog.component.css'\r\n ]\r\n})\r\nexport class AddEditNoteDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n note: StudentNote;\r\n addNote: boolean;\r\n categories: StudentNoteCategory[] = [];\r\n junkDate = System.junkDate;\r\n multiAdd: boolean;\r\n multiStudents: Student[];\r\n\r\n // Local Properties\r\n errors: ErrorList[] = [];\r\n @ViewChild('categoryField', { read: ElementRef }) categoryField: ElementRef;\r\n @ViewChild('noteField', { read: ElementRef }) noteField: ElementRef;\r\n @ViewChild('orderField', { read: ElementRef }) orderField: ElementRef;\r\n @ViewChild('statusField', { read: ElementRef }) statusField: ElementRef;\r\n @ViewChild('startDateField', { read: ElementRef }) startDateField: ElementRef;\r\n @ViewChild('endDateField', { read: ElementRef }) endDateField: ElementRef;\r\n originalNote = new StudentNote();\r\n V10: boolean;\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private studentNoteService: StudentNotesService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private userSerivce: UserService,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n\r\n // Getting injected data\r\n if (this.data) {\r\n this.note = this.data.note;\r\n this.addNote = this.data.addNote;\r\n this.categories = this.data.categories;\r\n this.multiAdd = this.data.multiAdd;\r\n this.multiStudents = this.data.multiStudents;\r\n }\r\n if (!this.categories) {\r\n this.subscriptions.push(\r\n this.studentNoteService.getStudentNotesCategories().subscribe(categories => {\r\n this.categories = categories;\r\n })\r\n );\r\n }\r\n if (!this.note && (!this.multiAdd || !this.multiStudents)) {\r\n console.log('No student provided');\r\n }\r\n if (this.multiAdd) {\r\n this.note = new StudentNote();\r\n this.note.StartDate = null;\r\n this.note.EndDate = null;\r\n }\r\n\r\n // Setting up the local data\r\n Object.assign(this.originalNote, this.note);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n notePaste() {\r\n // PRE: text is pasted into the note\r\n // POST: truncates the text\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: saves the note(s) and closes the dialog box\r\n // NOTE: closing with true here means there are new notes\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n\r\n // Adding multiple notes\r\n if (this.multiAdd) {\r\n\r\n // Creating student notes for each student\r\n const notes: StudentNote[] = [];\r\n this.multiStudents.forEach(student => {\r\n const note = new StudentNote();\r\n Object.assign(note, this.note);\r\n note.StudentID = student.Id;\r\n note.StudentNumber = student.StudentNumber;\r\n note.FirstName = student.FirstName;\r\n note.MiddleName = student.MiddleName;\r\n note.LastName = student.LastName;\r\n note.Nickname = student.NickName;\r\n notes.push(note);\r\n });\r\n\r\n // Service call\r\n this.studentNoteService.addStudentNotes(notes).subscribe(() => {\r\n this.dialogBox.close(true);\r\n });\r\n }\r\n\r\n // Adding a singular note\r\n else if (this.addNote) {\r\n this.studentNoteService.addStudentNote(this.note).subscribe(\r\n () => {\r\n this.dialogBox.close(true);\r\n }\r\n );\r\n }\r\n\r\n // Updating a singular note\r\n else {\r\n this.studentNoteService.updateStudentNotes([this.note]).subscribe(\r\n () => {\r\n this.note.LastUpOn = moment().format('MM/DD/YY');\r\n this.note.LastUpBy = this.userSerivce.currentUser.LastName + ', ' + this.userSerivce.currentUser.FirstName;\r\n this.dialogBox.close(false);\r\n }\r\n );\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: resets the note and closes the dialog box\r\n if (!this.addNote) {\r\n Object.assign(this.note, this.originalNote);\r\n }\r\n this.dialogBox.close();\r\n }\r\n\r\n viewStudents() {\r\n // PRE: the \"multiple students\" link is clicked\r\n // POST: opens the dialog to view those students\r\n this.dialog.open(StudentsToAddDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n students: this.multiStudents\r\n }\r\n });\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n\r\n // Category is required\r\n if (!this.note.SNCID) {\r\n this.errors.push({\r\n fieldName: 'Category',\r\n fieldRef: this.categoryField,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // Note is required\r\n if (!this.note.Note) {\r\n this.errors.push({\r\n fieldName: 'Note',\r\n fieldRef: this.noteField,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // Order is required\r\n if (!this.note.Order) {\r\n this.errors.push({\r\n fieldName: 'Order',\r\n fieldRef: this.orderField,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // Order must be a number\r\n if (this.note.Order && typeof this.note.Order != 'number') {\r\n\r\n // Correcting for string entries\r\n if (!Number.isNaN(Number.parseInt(this.note.Order, 10))) {\r\n this.note.Order = Number.parseInt(this.note.Order, 10);\r\n }\r\n\r\n // Catching error if it's a word\r\n else {\r\n this.errors.push({\r\n fieldName: 'Order',\r\n fieldRef: this.orderField,\r\n errorMsg: 'Value must be a number.'\r\n });\r\n }\r\n }\r\n\r\n // Status is required\r\n if (!this.note.Status) {\r\n this.errors.push({\r\n fieldName: 'Status',\r\n fieldRef: this.statusField,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n // End Date must be after Start Date\r\n if (this.note.StartDate && this.note.EndDate && this.note.StartDate > this.note.EndDate) {\r\n this.errors.push({\r\n fieldName: 'Dates',\r\n fieldRef: this.startDateField,\r\n errorMsg: 'The End Date must be on or after the Start Date.'\r\n });\r\n }\r\n }\r\n}\r\n","import { StudentNoteCategory } from './student-note-category.model';\r\n\r\nexport class StudentNote {\r\n\r\n // Static Properties\r\n\tstatic junkDate = new Date('Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)');\r\n\tstatic junkDateString = 'Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)';\r\n\r\n // Server Properties\r\n AddedBy: string;\r\n AddedOn: string;\r\n ClassroomNote: boolean;\r\n DelStatus: boolean;\r\n DisplayBold = false;\r\n DisplayInStudentProfile = true;\r\n DisplayInTile = false;\r\n EndDate = new Date(StudentNote.junkDateString);\r\n FirstName: string;\r\n Id = -1;\r\n LastName: string;\r\n LastUpBy?: string;\r\n LastUpOn?: string;\r\n MiddleName: string;\r\n Nickname?: string;\r\n Note: string;\r\n Order: number;\r\n SNCID: number;\r\n StartDate = new Date(StudentNote.junkDateString);\r\n Status = 'Active';\r\n StudentID: number;\r\n StudentNumber: string;\r\n\r\n // Local Properties\r\n private _category: StudentNoteCategory;\r\n\r\n // Class Functions\r\n\t// NOTE: these are used for sorting. Do not delete.\r\n get displayBoldString(): string {\r\n if (this.DisplayBold) {\r\n return 'Y';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n get classroomNoteString(): string {\r\n \tif (this.ClassroomNote) {\r\n \t\treturn 'Y';\r\n\t\t} else {\r\n \t\treturn '';\r\n\t\t}\r\n\t}\r\n\r\n // Methods\r\n category(categories: StudentNoteCategory[]): StudentNoteCategory {\r\n \t// PRE: a list of categories\r\n\t\t// POST: returns the category of this student note\r\n if (categories && (!this._category || this._category.Id != this.SNCID)) {\r\n this._category = categories.find(category => category.Id == this.SNCID);\r\n }\r\n return this._category;\r\n }\r\n\r\n clearJunkDates() {\r\n \t// POST: clears the junk dates out from the note\r\n if (this.StartDate && this.StartDate.toString() == StudentNote.junkDate.toString()) {\r\n this.StartDate = null;\r\n }\r\n if (this.EndDate && this.EndDate.toString() == StudentNote.junkDate.toString()) {\r\n this.EndDate = null;\r\n }\r\n }\r\n}","export class StudentNoteFilter {\r\n\tstudentNumber = '';\r\n\tcategory = '';\r\n\tnote = '';\r\n\tstatus = '';\r\n\tstartDateFrom: Date = undefined;\r\n\tstartDateTo: Date = undefined;\r\n\tendDateFrom: Date = undefined;\r\n\tendDateTo: Date = undefined;\r\n}","import {Component, Inject, OnDestroy, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {StudentNote} from '../student-note.model';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {StudentNotesService} from '../student-notes.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n\tselector: 'delete-note-dialog',\r\n\ttemplateUrl: './delete-note-dialog.component.html',\r\n\tstyleUrls: [\r\n\t\t'./delete-note-dialog.component.css'\r\n\t]\r\n})\r\nexport class DeleteNoteDialogComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\tnote: StudentNote;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\tprivate studentNoteService: StudentNotesService\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// POST: initializes the data\r\n\t\tif (this.data) {\r\n\t\t\tthis.note = this.data.note;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t// NOTE: this is implemented for @AutoUnsubscribe\r\n\t}\r\n\r\n\tOK() {\r\n\t\t// PRE: the OK button is clicked\r\n\t\t// POST: deletes the note and closes the dialog\r\n\t\tthis.studentNoteService.deleteStudentNote(this.note.Id).subscribe(() => {\r\n\t\t\tthis.dialogBox.close(true);\r\n\t\t});\r\n\t}\r\n\r\n\tcancel() {\r\n\t\t// PRE: the cancel button is clicked\r\n\t\t// POST: closes the dialog\r\n\t\tthis.dialogBox.close(false);\r\n\t}\r\n\r\n\t// Methods\r\n}","\r\n

\r\n\tDelete Note\r\n

\r\n\r\n\r\n\r\n\tAre you sure you want to delete this Student Note?\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
","import {Component} from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport {SharedService} from '../../../shared-components/shared.service';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n\tselector: 'no-categories-warning-dialog',\r\n\ttemplateUrl: './no-categories-warning-dialog.component.html',\r\n\tstyleUrls: [\r\n\t\t'./no-categories-warning-dialog.component.css'\r\n\t]\r\n})\r\nexport class NoCategoriesWarningDialogComponent {\r\n\r\n\t// Properties\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\tprivate sharedService: SharedService,\r\n\t\tprivate router: Router\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tclose() {\r\n\t\t// POST: closes the dialog box and reroutes to the previous route\r\n\t\tthis.dialogBox.close();\r\n\t\tthis.router.navigateByUrl(this.sharedService.previousUrl);\r\n\t}\r\n\r\n\t// Methods\r\n}","\r\n

\r\n\tNo Categories Defined\r\n

\r\n\r\n\r\n\r\n\t\r\n\t\tCode Tables for Student Note Categories have not been defined.\r\n\t\r\n\t
\r\n\t\r\n\t\tThese are needed in order to use the Student Notes option.\r\n\t\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t
\r\n
","
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n
\r\n No Student Notes data for this year.\r\n
\r\n\r\n \r\n 0\" [ngStyle]=\"{\r\n 'min-width': minTableWidth + 'px'\r\n }\" matSort matSortDisableClear matSortActive=\"student\" matSortDirection=\"asc\" multiTemplateDataRows>\r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Student\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Student\r\n \r\n \r\n \r\n #{{note.StudentNumber}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Category\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {{category.Code}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.category(categories) ? note.category(categories).Code : ''}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Note\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {{note.Note ? 1000 - note.Note.length : 1000}} characters left\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{note.Note}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Order\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.Order}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n Active\r\n \r\n \r\n Inactive\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.Status}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Start Date\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.StartDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n End Date\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.EndDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Display
as Bold\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.DisplayBold ? 'Y' : ''}}\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n Classroom
Note\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{note.ClassroomNote ? 'Y' : ''}}\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Created By{{note.AddedBy ? note.AddedBy : ' '}}Last Edited By{{note.LastUpBy ? note.LastUpBy : ' '}}
Created On{{note.AddedOn ? (note.AddedOn | date:'MM/dd/yy') : ' '}}Last Edited On{{note.LastUpOn ? (note.LastUpOn | date:'MM/dd/yy') : ' '}}
 
Note{{note.Note}}
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n Filter\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\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 { StudentNoteFilter } from './student-note-filter';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { UserPermission } from '../../shared-components/user/user-permission.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { GeneralPreferences } from '../../shared-components/user-preferences/general-preferences.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { StudentNotesService } from './student-notes.service';\r\nimport {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n EventEmitter,\r\n ViewChild,\r\n AfterViewInit,\r\n TemplateRef,\r\n ElementRef,\r\n ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport { StudentNote } from './student-note.model';\r\nimport { StudentNoteCategory } from './student-note-category.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { StudentSearchComponent } from '../../shared-components/student-search/student-search.component';\r\nimport { AddEditNoteDialogComponent } from './add-edit-note-dialog/add-edit-note-dialog.component';\r\nimport { DeleteNoteDialogComponent } from './delete-note-dialog/delete-note-dialog.component';\r\nimport { NoCategoriesWarningDialogComponent } from './no-categories-warning-dialog/no-categories-warning-dialog.component';\r\nimport { HasErrors } from '../../shared-components/guards/check-for-errors/HasErrors';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { NgForm } from '@angular/forms';\r\nimport { ActivatedRoute, RouterStateSnapshot } from '@angular/router';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { StudentInformationComponent } from '../../shared-components/student-information/student-information.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylCheckboxComponent } from '../../shared-components/controls/tyl-checkbox/tyl-checkbox.component';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { PermissionEnum } from '../../shared-components/security/permissions.enums';\r\nimport { FilterModel } from '../../shared-components/controls/filter/filter.model';\r\n\r\n@Component({\r\n selector: 'student-notes',\r\n templateUrl: './student-notes.component.html',\r\n styleUrls: [\r\n './student-notes.component.css'\r\n ],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class StudentNotesComponent implements OnInit, AfterViewInit, OnDestroy, HasErrors {\r\n\r\n // Properties\r\n private studentFilters: Student[] = [];\r\n private previousStudentFilters: Student[] = [];\r\n private selectedStudent: Student;\r\n private _sort: MatSort;\r\n\r\n errors: ErrorList[] = [];\r\n studentNotes: StudentNote[];\r\n displayedStudentNotes: StudentNote[] = [];\r\n categories: StudentNoteCategory[] = [];\r\n toggleExpandRows = new EventEmitter();\r\n tableData = new TylerMatTableDataSource();\r\n columns = [\r\n 'more',\r\n 'student',\r\n 'studentNumber',\r\n 'category',\r\n 'note',\r\n 'order',\r\n 'status',\r\n 'start-date',\r\n 'end-date',\r\n 'display-as-bold',\r\n 'classroom-note',\r\n 'actions'\r\n ];\r\n columnWidths: { [key: string]: number } = {\r\n 'more': 70,\r\n 'actions': 70,\r\n 'student': 150,\r\n 'note': 400,\r\n 'start-date': 135,\r\n 'end-date': 135,\r\n 'status': 90,\r\n 'order': 90,\r\n 'category': 105,\r\n 'display-as-bold': 100,\r\n 'classroom-note': 130,\r\n 'studentNumber': 100\r\n };\r\n selectedRow: StudentNote;\r\n generalPreferences: GeneralPreferences;\r\n userPermissions: UserPermission[];\r\n userCanEditNotes = false;\r\n tableHeight: number;\r\n minTableWidth: number;\r\n numberMask: (rawValue: string) => {};\r\n showFilter = false;\r\n filter = new StudentNoteFilter();\r\n previousFilter = new StudentNoteFilter();\r\n StudentInfoDialog: MatDialogRef;\r\n subscriptions: Subscription[] = [];\r\n studentPortal = false;\r\n loading = false;\r\n v10: boolean;\r\n\r\n // View Properties\r\n @ViewChild('pusherFilter', { read: TemplateRef }) pusherFilter: TemplateRef;\r\n @ViewChild('formRef', { read: NgForm, static: true }) formRef: NgForm;\r\n @ViewChild('categoryField', { read: ElementRef }) categoryField: ElementRef;\r\n @ViewChild('noteField', { read: ElementRef }) noteField: ElementRef;\r\n @ViewChild('orderField', { read: ElementRef }) orderField: ElementRef;\r\n @ViewChild('statusField', { read: ElementRef }) statusField: ElementRef;\r\n @ViewChild('startDateField', { read: ElementRef }) startDateField: ElementRef;\r\n @ViewChild('endDateField', { read: ElementRef }) endDateField: ElementRef;\r\n @ViewChild('displayBoldCheckbox', { read: TylCheckboxComponent }) displayAsBoldCheckbox: TylCheckboxComponent;\r\n @ViewChild('classroomNoteCheckbox', { read: TylCheckboxComponent }) classroomNoteCheckbox: TylCheckboxComponent;\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator, { static: true }) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.tableData.paginator = value;\r\n }\r\n // Class Functions\r\n constructor(\r\n private studentNotesService: StudentNotesService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private route: ActivatedRoute,\r\n private loginService: LoginService,\r\n private changeDetector: ChangeDetectorRef\r\n ) { }\r\n\r\n get filteringStudents(): boolean {\r\n return this.studentFilters.length > 0 && !!this.selectedStudent;\r\n }\r\n\r\n get filtering(): boolean {\r\n return this.filteringStudents ||\r\n (\r\n !System.isEqual(this.filter, new StudentNoteFilter())\r\n && (this.filter.startDateFrom ? this.filter.startDateFrom.toString() != 'Invalid Date' : true)\r\n && (this.filter.startDateTo ? this.filter.startDateTo.toString() != 'Invalid Date' : true)\r\n && (this.filter.endDateFrom ? this.filter.endDateFrom.toString() != 'Invalid Date' : true)\r\n && (this.filter.endDateTo ? this.filter.endDateTo.toString() != 'Invalid Date' : true)\r\n );\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.tableData.sort = this.sort;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n if (this.sharedService.currentPortal != undefined) {\r\n this.sharedService.currentPortal.applyFilterStudents = true;\r\n }\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n\r\n // Marking this as loading\r\n this.loading = true;\r\n\r\n // Setting the initial values\r\n this.generalPreferences = this.userPreferencesService.generalPreferences;\r\n this.numberMask = System.numberMask;\r\n\r\n if (!this.generalPreferences.ShowStudentNumber) {\r\n this.removeElement(this.columns, 'studentNumber');\r\n }\r\n\r\n // Performing subscriptions\r\n this.subscriptions.push(\r\n this.route.queryParamMap.subscribe(params => {\r\n this.studentPortal = params.get('studentPortal') == 'true';\r\n if (this.studentPortal) {\r\n if (this.studentService.selectedStudent) {\r\n this.previousStudentFilters = [this.studentService.selectedStudent];\r\n // this.studentFilters = [this.studentService.selectedStudent];\r\n this.studentFilters = this.studentService.students;\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n } else {\r\n this.previousStudentFilters = [];\r\n this.studentFilters = [];\r\n this.selectedStudent = null;\r\n }\r\n }\r\n\r\n // If we aren't filtering students, remove the student in focus\r\n else {\r\n if (this.userService.selectedStudentInfoPortal != 'Student Notes') {\r\n this.studentService.selectedStudent = null;\r\n this.studentService.updateSelectedStudent(null);\r\n }\r\n else {\r\n this.previousStudentFilters = [this.studentService.selectedStudent];\r\n this.studentFilters = this.studentService.students;\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n }\r\n }\r\n\r\n // Arranging the table data after we've configured initial filters\r\n this.arrangeTableData();\r\n }),\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.getStudentNotes();\r\n this.getPermissions();\r\n }),\r\n this.toggleExpandRows.subscribe(expand => {\r\n this.tableData.expandAll(expand);\r\n }),\r\n // this.studentService.observableStudentsStream$.subscribe(students => {\r\n // \tif (students && (!this.loading || this.studentPortal)) {\r\n // \t\tthis.studentFilters = students;\r\n // \t}\r\n // }),\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n if (!this.loading || this.studentPortal) {\r\n this.previousStudentFilters = [this.studentService.selectedStudent];\r\n // this.studentFilters = [this.studentService.selectedStudent];\r\n this.studentFilters = this.studentService.students;\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.arrangeTableData();\r\n }\r\n }),\r\n this.userPreferencesService.observablegeneralPreferencesStream$.subscribe(preferences => {\r\n this.generalPreferences = preferences;\r\n if (!this.generalPreferences.ShowStudentNumber) {\r\n this.removeElement(this.columns, 'studentNumber');\r\n }\r\n else {\r\n let index: number = this.columns.findIndex(column => column == 'studentNumber');\r\n if (index == -1) {\r\n index = this.columns.findIndex(column => column == 'student');\r\n this.columns.splice(index + 1, 0, 'studentNumber');\r\n }\r\n }\r\n })\r\n );\r\n this.getStudentNotes();\r\n this.getPermissions();\r\n\r\n // Setting the tables sort accessor\r\n this.tableData.sortingDataAccessor = (data: any, sortHeaderId: string): string | number => {\r\n // PRE: a sort or filter is called on a table\r\n // POST: returns the data for a cell for sorting\r\n const student = new Student();\r\n\r\n switch (sortHeaderId) {\r\n case 'studentNumber':\r\n return student.StudentNumber;\r\n case 'student':\r\n Object.assign(student, data);\r\n return student.formattedNameWithNumber(this.generalPreferences);\r\n case 'category':\r\n return data.category(this.categories).Code;\r\n case 'display-as-bold':\r\n if (data['DisplayBold']) {\r\n return 'Y';\r\n } else {\r\n return '';\r\n }\r\n case 'classroom-note':\r\n if (data['ClassroomNote']) {\r\n return 'Y';\r\n } else {\r\n return '';\r\n }\r\n default:\r\n return this.tableData.defaultSortingAccessor(data, sortHeaderId);\r\n }\r\n };\r\n\r\n // Marking this as not loading\r\n this.loading = false;\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the table height\r\n this.resize();\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: implemented for @AutoUnsubscribe\r\n if (this.sharedService.currentPortal != undefined) {\r\n this.sharedService.currentPortal.applyFilterStudents = false;\r\n }\r\n }\r\n\r\n studentChange(studentId: number) {\r\n // PRE: the student is changed in the header\r\n // POST: changes the selected student and applies the filter\r\n\r\n }\r\n\r\n checkErrors(nextState?: RouterStateSnapshot): number {\r\n // PRE: the user tries to navigate away\r\n // POST: checks the errors.\r\n // If 4, shows the warning dialog. If the result is true, it will wait for the save before it continues.\r\n // If 3, shows the warning, but doesn't perform route on the save (lets the component do it)\r\n // If 2, continues without save.\r\n // If 1, continues with save.\r\n // If 0, shows warning.\r\n // If -1, stops.\r\n this.validate();\r\n if (this.formRef) {\r\n if (this.formRef.pristine && this.errors.length == 0) {\r\n return 2;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n return 1;\r\n }\r\n\r\n save(): any {\r\n // PRE: the data has been validated and there is no errors\r\n // POST: performs a save on route\r\n this.studentNotesService.updateStudentNotes(this.displayedStudentNotes).subscribe(\r\n () => {\r\n this.sharedService.showGoodSnackbar();\r\n this.formRef.form.markAsPristine();\r\n this.selectedRow = null;\r\n },\r\n () => {\r\n this.sharedService.showBadSnackbar();\r\n this.selectedRow = null;\r\n }\r\n );\r\n }\r\n\r\n saveClick() {\r\n // PRE: the save button is clicked\r\n // POST: validates and then performs save\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.save();\r\n }\r\n }\r\n\r\n showFilterClick() {\r\n // PRE: the filter button from the footer notification or the footer itself is clicked\r\n // POST: opens the filter menu\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n clearFilter() {\r\n // PRE: the clear filter button is clicked\r\n // POST: clears the filter but does not close it\r\n setTimeout(() => {\r\n Object.assign(this.filter, new StudentNoteFilter());\r\n this.studentService.students = [];\r\n this.studentService.updateSelectedStudent(null);\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n }, 0);\r\n }\r\n\r\n clearFilterFromFooter() {\r\n // PRE: the clear filter button on the footer notification is clicked\r\n // POST: clears the filter and saves it\r\n setTimeout(() => {\r\n Object.assign(this.filter, new StudentNoteFilter());\r\n this.studentService.students = [];\r\n this.studentService.updateSelectedStudent(null);\r\n Object.assign(this.previousFilter, this.filter);\r\n this.previousStudentFilters = JSON.parse(JSON.stringify(this.studentFilters));\r\n this.tableData.removeAllFilters();\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n }, 0);\r\n }\r\n\r\n cancelFilter() {\r\n this.showFilterClick();\r\n }\r\n\r\n studentSearchFilter() {\r\n // PRE: the search for students filter button is clicked\r\n // POST: opens the student search for multiselect to filter the students\r\n const dialogBox = this.dialog.open(StudentSearchComponent, {\r\n data: {\r\n selectedStudents: this.studentFilters,\r\n searchAndSelect: true,\r\n returnSelectedStudents: true,\r\n schools: this.studentNotesService.viewSchools,\r\n useLastSelectedSchool: false\r\n },\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n dialogBox.afterClosed().subscribe((selectedStudents: Student[]) => {\r\n if (selectedStudents && selectedStudents.length > 0) {\r\n this.studentService.updateStudents(selectedStudents);\r\n }\r\n });\r\n }\r\n\r\n clearStudentSearchFilter() {\r\n // PRE: the clear student search filter button is clicked\r\n // POST: removes all the students from the student filter array\r\n this.studentService.students = [];\r\n this.studentService.updateSelectedStudent(null);\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n massAdd() {\r\n // PRE: the mass add button is clicked\r\n // POST: opens the mass add dialog\r\n let dialogBox: MatDialogRef = this.dialog.open(StudentSearchComponent, {\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n data: {\r\n searchAndSelect: true,\r\n acceptLabel: 'Continue',\r\n schools: this.studentNotesService.addEditSchools,\r\n useLastSelectedSchool: false\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(students => {\r\n if (students && students.length > 0) {\r\n dialogBox = this.dialog.open(AddEditNoteDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n categories: this.categories,\r\n multiAdd: true,\r\n multiStudents: students\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(newNotes => {\r\n if (newNotes) {\r\n this.getStudentNotes();\r\n }\r\n })\r\n );\r\n }\r\n })\r\n );\r\n }\r\n\r\n cellClick(note: StudentNote, cellName: string) {\r\n // PRE: a cell is clicked\r\n // POST: toggles that row's fields and sets the focused one to the right input\r\n\r\n // We only focus fields if the user can edit notes\r\n if (!this.userCanEditNotes) {\r\n return;\r\n }\r\n\r\n // This toggles the rows fields\r\n this.selectedRow = note;\r\n\r\n // Once the change detection creates the fields, focus the proper one\r\n setTimeout(() => {\r\n switch (cellName) {\r\n case 'category':\r\n this.categoryField.nativeElement.focus();\r\n break;\r\n case 'note':\r\n this.noteField.nativeElement.focus();\r\n break;\r\n case 'order':\r\n this.orderField.nativeElement.focus();\r\n break;\r\n case 'status':\r\n this.statusField.nativeElement.focus();\r\n break;\r\n case 'startDate':\r\n this.startDateField.nativeElement.focus();\r\n break;\r\n case 'endDate':\r\n this.endDateField.nativeElement.focus();\r\n break;\r\n case 'displayAsBold':\r\n this.displayAsBoldCheckbox.focus();\r\n break;\r\n case 'classroomNote':\r\n this.classroomNoteCheckbox.focus();\r\n break;\r\n default:\r\n break;\r\n }\r\n }, 0);\r\n }\r\n\r\n // Methods\r\n resize() {\r\n // POST: sets the table width\r\n setTimeout(() => {\r\n\r\n // Determining the minimum table width of the grid\r\n this.minTableWidth = 0;\r\n for (let i = 0; i < this.columns.length; i++) {\r\n if (this.columnWidths[this.columns[i]]) {\r\n this.minTableWidth += this.columnWidths[this.columns[i]];\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n getStudentNotes() {\r\n // POST: obtains the student notes and student notes categories from the server\r\n\r\n // Obtaining student notes\r\n const noteSubscription = this.studentNotesService.getStudentNotes().subscribe(studentNotes => {\r\n\r\n // Performing conversions\r\n this.studentNotes = studentNotes;\r\n for (let i = 0; i < this.studentNotes.length; i++) {\r\n this.studentNotes[i] = System.convert(this.studentNotes[i], new StudentNote());\r\n this.studentNotes[i].clearJunkDates();\r\n }\r\n\r\n // Arranging table data\r\n this.arrangeTableData();\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n });\r\n\r\n // Obtaining student note categories\r\n this.studentNotesService.getStudentNotesCategories().subscribe(categories => {\r\n this.categories = categories;\r\n if (!this.categories || this.categories.length == 0) {\r\n noteSubscription.unsubscribe();\r\n this.dialog.open(NoCategoriesWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n });\r\n }\r\n\r\n arrangeTableData() {\r\n // POST: filters through the data for the students searched for and then sets the table data\r\n if (!this.studentNotes) {\r\n return;\r\n }\r\n this.tableData.cacheExpanded();\r\n this.displayedStudentNotes = this.studentNotes;\r\n\r\n // Student Number Filter\r\n if (this.filter.studentNumber) {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.StudentNumber.includes(this.filter.studentNumber)\r\n );\r\n }\r\n\r\n // Student Filter\r\n if (this.studentFilters.length > 0 && this.selectedStudent) {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.StudentID == this.selectedStudent.Id\r\n );\r\n }\r\n\r\n // Category Filter\r\n if (this.filter.category) {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.category(this.categories).Code.toLowerCase().includes(this.filter.category)\r\n );\r\n }\r\n\r\n // Note Filter\r\n if (this.filter.note) {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.Note.toLowerCase().includes(this.filter.note.toLowerCase())\r\n );\r\n }\r\n\r\n // Status Filter\r\n if (this.filter.status) {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.Status.toLowerCase().includes(this.filter.status.toLowerCase())\r\n );\r\n }\r\n\r\n // Start Date From\r\n if (this.filter.startDateFrom && this.filter.startDateFrom.toString() != 'Invalid Date') {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.StartDate >= this.filter.startDateFrom\r\n );\r\n }\r\n\r\n // Start Date To\r\n if (this.filter.startDateTo && this.filter.startDateTo.toString() != 'Invalid Date') {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.StartDate <= this.filter.startDateTo\r\n );\r\n }\r\n\r\n // End Date From\r\n if (this.filter.endDateFrom && this.filter.endDateFrom.toString() != 'Invalid Date') {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.EndDate >= this.filter.endDateFrom\r\n );\r\n }\r\n\r\n // End Date To\r\n if (this.filter.endDateTo && this.filter.endDateTo.toString() != 'Invalid Date') {\r\n this.displayedStudentNotes = this.displayedStudentNotes.filter(note =>\r\n note.EndDate <= this.filter.endDateTo\r\n );\r\n }\r\n\r\n // Setting table data\r\n this.tableData.data = this.displayedStudentNotes;\r\n this.tableData.assertCachedExpanded('Id');\r\n this.resize();\r\n }\r\n\r\n addNote() {\r\n // POST: opens the add modal\r\n const note = new StudentNote();\r\n note.clearJunkDates();\r\n let clicked = false;\r\n\r\n // Helper function for clicking on a student\r\n const assignStudent = (student) => {\r\n note.StudentID = student.Id;\r\n note.StudentNumber = student.StudentNumber;\r\n note.FirstName = student.FirstName;\r\n note.MiddleName = student.MiddleName;\r\n note.LastName = student.LastName;\r\n note.Nickname = student.NickName;\r\n };\r\n const clickHandler = (event) => {\r\n assignStudent(event.row);\r\n clicked = true;\r\n };\r\n\r\n // Helper function to open add/edit note\r\n const openAddEdit = () => {\r\n const dialogBox2 = this.dialog.open(AddEditNoteDialogComponent, {\r\n data: {\r\n addNote: true,\r\n categories: this.categories,\r\n note: note\r\n }\r\n });\r\n dialogBox2.afterClosed().subscribe(newNote => {\r\n if (newNote) {\r\n this.getStudentNotes();\r\n }\r\n });\r\n };\r\n\r\n // If we have a selected student, opens the add/edit with that student\r\n if (this.selectedStudent && this.filteringStudents) {\r\n assignStudent(this.selectedStudent);\r\n openAddEdit();\r\n } else {\r\n const dialogBox = this.dialog.open(StudentSearchComponent, {\r\n data: {\r\n performRoute: false,\r\n clickHandler: clickHandler,\r\n schools: this.studentNotesService.addEditSchools,\r\n useLastSelectedSchool: false\r\n },\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (clicked) {\r\n openAddEdit();\r\n }\r\n });\r\n }\r\n }\r\n\r\n editNote(note: StudentNote) {\r\n // POST: opens the edit modal for a note\r\n this.dialog.open(AddEditNoteDialogComponent, {\r\n data: {\r\n addNote: false,\r\n categories: this.categories,\r\n note: note\r\n }\r\n });\r\n }\r\n\r\n deleteNote(note: StudentNote) {\r\n // POST: opens the delete modal for a note\r\n const dialogBox = this.dialog.open(DeleteNoteDialogComponent, {\r\n data: {\r\n note: note\r\n }\r\n });\r\n dialogBox.afterClosed().subscribe(deleted => {\r\n if (deleted) {\r\n this.studentNotes.splice(this.studentNotes.indexOf(note), 1);\r\n this.arrangeTableData();\r\n }\r\n });\r\n }\r\n\r\n viewStudent(note: StudentNote) {\r\n this.studentService.getStudent(note.StudentID).subscribe((studentData) => {\r\n const studentRecord = { Id: note.StudentID, FirstName: note.FirstName, LastName: note.LastName, MiddleName: note.MiddleName, NickName: note.Nickname, Picture: studentData.Picture };\r\n const studentRecords = [studentRecord];\r\n this.displayedStudentNotes.forEach(student => {\r\n if (studentRecords.findIndex(record => record.Id == student.StudentID) == -1) {\r\n studentRecords.push({\r\n Id: student.StudentID,\r\n FirstName: student.FirstName,\r\n LastName: student.LastName,\r\n MiddleName: student.MiddleName,\r\n NickName: student.Nickname,\r\n Picture: undefined\r\n });\r\n }\r\n });\r\n this.StudentInfoDialog = this.dialog.open(StudentInformationComponent, { panelClass: 'tyl-mat-dialog', disableClose: true, height: '100%', position: { top: '0px', right: '0px' } });\r\n this.StudentInfoDialog.componentInstance.student = studentRecord;\r\n this.StudentInfoDialog.componentInstance.students = studentRecords;\r\n this.StudentInfoDialog.componentInstance.initMenu();\r\n });\r\n }\r\n\r\n validate() {\r\n // POSt: sets the errors\r\n\r\n // Resetting the errors\r\n this.errors = [];\r\n\r\n // Checking each displayed note\r\n for (let i = 0; i < this.displayedStudentNotes.length; i++) {\r\n const note = this.displayedStudentNotes[i];\r\n\r\n // Note is required\r\n if (!note.Note) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'Note',\r\n errorMsg: 'Field is required.',\r\n clickCallback: () => {\r\n this.cellClick(note, 'note');\r\n }\r\n });\r\n }\r\n\r\n // Order is required\r\n if (!note.Order) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'Order',\r\n errorMsg: 'Field is required.',\r\n clickCallback: () => {\r\n this.cellClick(note, 'order');\r\n }\r\n });\r\n }\r\n\r\n // Order must be a number\r\n if (typeof note.Order != 'number') {\r\n\r\n // Correcting for string entries\r\n if (Number.parseInt(note.Order, 10)) {\r\n note.Order = Number.parseInt(note.Order, 10);\r\n }\r\n\r\n // Catching error if it's a word\r\n else {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'Order',\r\n errorMsg: 'Value must be a number.',\r\n clickCallback: () => {\r\n this.cellClick(note, 'order');\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Status is required\r\n if (!note.Status) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'Status',\r\n errorMsg: 'Field is required.',\r\n clickCallback: () => {\r\n this.cellClick(note, 'status');\r\n }\r\n });\r\n }\r\n\r\n // End date must be after start date\r\n if (note.StartDate && note.EndDate && note.EndDate < note.StartDate) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'Dates',\r\n errorMsg: 'The End Date must be on or after the Start Date.',\r\n clickCallback: () => {\r\n this.cellClick(note, 'startDate');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n getPermissions() {\r\n if (this.v10) {\r\n // POST: getting the user permissions and the schols they have access to\r\n this.subscriptions.push(\r\n // Getting the schools the user has access to for student notes\r\n this.userService.getUserPermissionByPrivilegeIds(\r\n this.yearService.defaultYear.Id,\r\n 0, // We do this to get all sites\r\n [\r\n PermissionEnum.StudentNotesCounselorAddEdit,\r\n PermissionEnum.StudentNotesCounselorView,\r\n PermissionEnum.StudentNotesMyStudentsAddEdit,\r\n PermissionEnum.StudentNotesMyStudentsView,\r\n PermissionEnum.StudentNotesStudentRecordAddEdit,\r\n PermissionEnum.StudentNotesStudentRecordView\r\n ]\r\n ).subscribe(permissions => {\r\n this.studentNotesService.addEditSchools = [];\r\n this.studentNotesService.viewSchools = [];\r\n permissions.forEach(permission => {\r\n const school = this.yearService.allDistrictSchools.find(s => s.Id == permission.SiteId);\r\n if (school) {\r\n if (!this.studentNotesService.viewSchools.includes(school)) {\r\n this.studentNotesService.viewSchools.push(school);\r\n }\r\n if (permission.PrivilegeId == PermissionEnum.StudentNotesCounselorAddEdit\r\n || permission.PrivilegeId == PermissionEnum.StudentNotesMyStudentsAddEdit\r\n || permission.PrivilegeId == PermissionEnum.StudentNotesStudentRecordAddEdit) {\r\n if (!this.studentNotesService.addEditSchools.includes(school)) {\r\n this.studentNotesService.addEditSchools.push(school);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.userPermissions = permissions.filter(o => o.SiteId == this.yearService.defaultYear.SchoolID);\r\n\r\n // Determining if the user can edit notes\r\n if (this.userPermissions.find(permission => permission.PermissionName == 'Add/Edit Student Notes')) {\r\n this.userCanEditNotes = true;\r\n } else {\r\n this.userCanEditNotes = false;\r\n }\r\n\r\n // Determining which columns should display based on that\r\n if (this.userCanEditNotes && !this.columns.includes('actions')) {\r\n this.columns.push('actions');\r\n } else if (!this.userCanEditNotes && this.columns.includes('actions')) {\r\n this.columns.splice(this.columns.indexOf('actions'), 1);\r\n }\r\n\r\n // Determining the width of the table with the new information\r\n this.resize();\r\n })\r\n\r\n\r\n );\r\n }\r\n else {\r\n // POST: getting the user permissions they have access to\r\n (\r\n this.userService.getUserPermissions(\r\n this.yearService.defaultYear.Id,\r\n this.yearService.defaultYear.SchoolID\r\n ).subscribe(permissions => {\r\n this.userPermissions = permissions;\r\n // Determining if the user can edit notes\r\n if (this.userPermissions.find(permission => permission.PermissionName == 'Maintain Student Notes')) {\r\n this.userCanEditNotes = true;\r\n } else {\r\n this.userCanEditNotes = false;\r\n }\r\n\r\n // Determining which columns should display based on that\r\n if (this.userCanEditNotes && !this.columns.includes('actions')) {\r\n this.columns.push('actions');\r\n } else if (!this.userCanEditNotes && this.columns.includes('actions')) {\r\n this.columns.splice(this.columns.indexOf('actions'), 1);\r\n }\r\n\r\n // Determining the width of the table with the new information\r\n this.resize();\r\n }));\r\n }\r\n }\r\n\r\n removeElement(array: any[], element: any) {\r\n const index: number = array.indexOf(element);\r\n if (index != -1) {\r\n array.splice(index, 1);\r\n }\r\n }\r\n headerFilterChanged(column: string) {\r\n const row = this.tableData.filters.find(o => o.column == column);\r\n if (column == 'Status') {\r\n this.tableData.removeFilter(row);\r\n if (row.operator == '1') {\r\n this.tableData.data = this.displayedStudentNotes.filter(o => o.Status == 'Active');\r\n this.tableData.addFilter(new FilterModel('Active', column, '1', 'string', undefined), this.tableData);\r\n }\r\n else if (row.operator == '2') {\r\n this.tableData.data = this.displayedStudentNotes.filter(o => o.Status == 'Inactive');\r\n this.tableData.addFilter(new FilterModel('Inactive', column, '2', 'string', undefined), this.tableData);\r\n }\r\n else if (row.operator == '0') {\r\n this.tableData.data = this.displayedStudentNotes;\r\n this.tableData.addFilter(new FilterModel('', column, '0', 'boolean', undefined), this.tableData);\r\n }\r\n }\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n continuedWithoutSave(): any {\r\n }\r\n}\r\n","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {StudentNoteCategory} from './student-note-category.model';\r\nimport {Observable} from 'rxjs';\r\nimport {YearService} from '../../shared-components/year/year.service';\r\nimport {System} from '../../shared-components/System';\r\nimport {StudentNote} from './student-note.model';\r\nimport {School} from '../../shared-components/year/school.model';\r\nimport {SharedService} from '../../shared-components/shared.service';\r\n\r\n@Injectable()\r\nexport class StudentNotesService {\r\n\r\n // Properties\r\n addEditSchools: School[] = [];\r\n viewSchools: School[] = [];\r\n \r\n // Class Functions\r\n constructor(\r\n private yearService: YearService,\r\n private http: HttpClient,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n // Methods\r\n getStudentNotesCategories(): Observable {\r\n // POST: Gets the student notes categories from the server\r\n return this.sharedService.getStudentNoteCategories(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id);\r\n }\r\n\r\n getStudentNotes(): Observable {\r\n // POST: obtains the student notes for this user from the server\r\n // NOTE: on the server, they accidentally used these backwards\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.Id +\r\n '&yearId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentNotesByUserId' + queryString);\r\n }\r\n\r\n addStudentNote(note: StudentNote): Observable {\r\n // PRE: a note to add for a student\r\n // POST: adds that note to the server which returns the Id\r\n return this.http.post(System.apiURL.Classroom + 'AddStudentNote', note);\r\n }\r\n\r\n addStudentNotes(notes: StudentNote[]): Observable {\r\n // PRE: a list of notes to add\r\n // POST: adds those notes to the server\r\n return this.http.post(System.apiURL.Classroom + 'AddStudentNotes', notes);\r\n }\r\n\r\n updateStudentNotes(notes: StudentNote[]): Observable {\r\n // PRE: a list of notes to update\r\n // POST: updates those notes on the server\r\n return this.http.post(System.apiURL.Classroom + 'UpdateStudentNotes', notes);\r\n }\r\n\r\n deleteStudentNote(noteId: number): Observable {\r\n // PRE: the id of the note you want to delete\r\n // POST: deletes the note from the server\r\n const queryString = '?noteId=' + noteId;\r\n return this.http.get(System.apiURL.Classroom + 'DeleteStudentNote' + queryString);\r\n }\r\n}\r\n","import { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { BehaviorActionCode } from '../models/behavior-action-code.model';\r\n\r\nexport class BehaviorEventsFilterParam {\r\n eventDateFrom: Date;\r\n eventDateTo: Date;\r\n actionDateFrom: Date;\r\n actionDateTo: Date;\r\n incidentCode: Lookup;\r\n actionCode: BehaviorActionCode;\r\n reportedToState: boolean;\r\n onlyShowSuspensions: boolean;\r\n location: Lookup;\r\n offender?: string;\r\n victim?: string;\r\n comment?: string;\r\n incidentApproveAction = false;\r\n}\r\n\r\nexport class BehaviorEventsSearchFilter {\r\n fromDate: Date;\r\n toDate: Date;\r\n lastName: string;\r\n firstName: string;\r\n eventNumber: number;\r\n studentNumber: string;\r\n}\r\n","import { Lookup } from \"../../../shared-components/lookup/lookup.model\";\r\nimport { Student } from \"../../../shared-components/student/student.model\";\r\n\r\nexport class BehaviorInterventionsFilterParam {\r\n startDateFrom?: Date=null;\r\n startDateTo?: Date=null;\r\n endDateFrom?: Date=null;\r\n endDateTo?: Date=null;\r\n nextMeetingDateFrom?: Date=null;\r\n nextMeetingDateTo?: Date=null;\r\n interventionist?: Lookup=null;\r\n refferedBy?: Lookup=null;\r\n refferedByOther?: string=null;\r\n status?: Lookup=null;\r\n notes?: string=null;\r\n students: Student[] = [];\r\n selectedReasons?: string[] = [];\r\n enteredBy?: string=null;\r\n statusV9?: string[] = [];\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { AttendanceCode } from '../../classroom360/attendance/models/attendance-code.model';\r\nimport { DisciplineReferral } from '../../classroom360/discipline-referral/discipline-referral.model';\r\nimport { BehaviorSharedService } from '../../shared-components/behavior/behavior-shared.service';\r\nimport { CustomField } from '../../shared-components/custom-page/models/custom-field.model';\r\nimport { EFormTemplate } from '../../shared-components/e-forms/e-form-template.model';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport { ScheduleCalendar } from '../../shared-components/models/schedule-calendar.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { GeneralPreferences } from '../../shared-components/user-preferences/general-preferences.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { School } from '../../shared-components/year/school.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { CommunicationLog } from '../../shared-modules/communication-log/models/communication-log.model';\r\nimport { ReportingService } from '../../shared-modules/reporting/reporting.service';\r\nimport { StudentAttachment } from '../../shared-modules/student-attachment/student-attachment.model';\r\nimport { BehaviorEventsFilterParam, BehaviorEventsSearchFilter } from './behavior-events/behavior-events-filter-param';\r\nimport { BehaviorInterventionsFilterParam } from './behavior-interventions/behavior-interventions-filter-param';\r\nimport { BehaviorActionCode } from './models/behavior-action-code.model';\r\nimport { BehaviorAction } from './models/behavior-action.model';\r\nimport { BehaviorAttachment } from './models/behavior-attachment.model';\r\nimport { BehaviorEvent } from './models/behavior-event.model';\r\nimport { BehaviorIncidentLetter } from './models/behavior-incident-letter.model';\r\nimport { BehaviorIncidentSearch } from './models/behavior-incident-search.model';\r\nimport { BehaviorIncident } from './models/behavior-incident.model';\r\nimport { AssociateInterventionPopup, BehaviorIntervention, Contract, CounselorStudentMeetingInterventions, DisciplineEventIntervention, InterventionAttachment, InterventionMeeting } from './models/behavior-intervention.model';\r\nimport { BehaviorLetter, GenerateMailingLabels, BehaviorLetterEmailAddress } from './models/behavior-letter.model';\r\nimport { BehaviorPolicies } from './models/behavior-policies.model';\r\nimport { BehaviorStudent } from './models/behavior-student.model';\r\nimport { IncidentActionsServedStatus } from './models/served-status.model';\r\n\r\n@Injectable()\r\nexport class BehaviorService {\r\n isAttachmentDeleteInEventTab = false;\r\n addEditSchools: School[] = [];\r\n viewOnlySchools: School[] = [];\r\n quickAddSchools: School[] = [];\r\n\r\n behaviorLetterTemplates: EFormTemplate[] = [];\r\n\r\n attachmentsComponent: any;\r\n private _behaviorEvent: BehaviorEvent;\r\n public get behaviorEvent(): BehaviorEvent {\r\n return this._behaviorEvent;\r\n }\r\n\r\n public set behaviorEvent(value: BehaviorEvent) {\r\n this._behaviorEvent = value;\r\n this.observableBehaviorEvent.next(value);\r\n }\r\n\r\n public observableBehaviorEvent = new Subject();\r\n observableBehaviorEventStream$ = this.observableBehaviorEvent.asObservable();\r\n\r\n public observableBehaviorAttachement = new Subject();\r\n observableBehaviorAttachementStream$ = this.observableBehaviorAttachement.asObservable();\r\n\r\n public observableMassMarkedServed = new Subject();\r\n observableMassMarkedServedStream$ = this.observableMassMarkedServed.asObservable();\r\n\r\n eventComments: Lookup[] = [];\r\n\r\n get locations(): Lookup[] {\r\n if (this.behaviorSharedService.locations == null) {\r\n return [];\r\n } else {\r\n return this.behaviorSharedService.locations;\r\n }\r\n }\r\n\r\n set locations(locations: Lookup[]) {\r\n this.behaviorSharedService.locations = locations;\r\n }\r\n\r\n get incidentCodes(): Lookup[] {\r\n if (this.behaviorSharedService.incidentCodes == null) {\r\n return [];\r\n } else {\r\n return this.behaviorSharedService.incidentCodes;\r\n }\r\n }\r\n\r\n set incidentCodes(codes: Lookup[]) {\r\n this.behaviorSharedService.incidentCodes = codes;\r\n }\r\n\r\n get contextCodes(): Lookup[] {\r\n if (this.behaviorSharedService.contextCodes == null) {\r\n return [];\r\n } else {\r\n return this.behaviorSharedService.contextCodes;\r\n }\r\n }\r\n\r\n set contextCodes(codes: Lookup[]) {\r\n this.behaviorSharedService.contextCodes = codes;\r\n }\r\n\r\n get reportedByCodes(): Lookup[] {\r\n if (this.behaviorSharedService.reportedByCodes == null) {\r\n return [];\r\n } else {\r\n return this.behaviorSharedService.reportedByCodes;\r\n }\r\n }\r\n\r\n set reportedByCodes(codes: Lookup[]) {\r\n this.behaviorSharedService.reportedByCodes = codes;\r\n }\r\n\r\n quickAddAttachments: BehaviorAttachment[] = [];\r\n quickAddAction: BehaviorAction;\r\n quickAddStudents: BehaviorStudent[] = [];\r\n quickAdd: Boolean;\r\n quickAddAFEvent: CustomField[] = [];\r\n quickAddAFIncident: CustomField[] = [];\r\n quickAddAFAction: CustomField[] = [];\r\n quickAddComment: string;\r\n\r\n studentSchedule: BehaviorAction[] = [];\r\n studentTeamSchedule: BehaviorAction[] = [];\r\n scheduleFromDate: Date;\r\n scheduleToDate: Date;\r\n\r\n actionCodes: BehaviorActionCode[] = [];\r\n genderOptions: Lookup[] = [];\r\n raceOptions: Lookup[] = [];\r\n notificationCodes: Lookup[] = [];\r\n hearingTypeCodes: Lookup[] = [];\r\n modifiedCodes: Lookup[] = [];\r\n weaponTypes: Lookup[] = [];\r\n finalSanctions: Lookup[] = [];\r\n parentNotificationCodes: Lookup[] = [];\r\n maxAttachmentSize = 0;\r\n victimTypes: Lookup[] = [];\r\n victimInjury: Lookup[] = [];\r\n TimeCodes: Lookup[] = [];\r\n DrugCodes: Lookup[] = [];\r\n\r\n _filterParam: BehaviorEventsFilterParam;\r\n filterChange = new EventEmitter();\r\n generalPreferences: GeneralPreferences;\r\n behaviorUniqueStudents: BehaviorStudent;\r\n\r\n behaviorSearchFilter: BehaviorEventsSearchFilter;\r\n\r\n set filterParam(filterParam: BehaviorEventsFilterParam) {\r\n this._filterParam = filterParam;\r\n this.filterChange.emit();\r\n }\r\n\r\n get filterParam() {\r\n return this._filterParam;\r\n }\r\n createFromSaveClick = false;\r\n formIsDirty = false;\r\n // Intervention\r\n private _behaviorIntervention: BehaviorIntervention;\r\n interventionReasons: Lookup[] = [];\r\n interventionists: Lookup[] = [];\r\n interventionReferrers: Lookup[] = [];\r\n interventionAdministrators: Lookup[] = [];\r\n contractIssued: Lookup[] = [];\r\n contractCategories: Lookup[] = [];\r\n informOthers: Lookup[] = [];\r\n interventionStatus: Lookup[] = [];\r\n gangStatus: Lookup[] = [];\r\n interventionName: Lookup[] = [];\r\n addEditInterventionSchools: School[] = [];\r\n interventionHeaderText: string;\r\n parameters = [];\r\n param = [];\r\n\r\n public get behaviorIntervention(): BehaviorIntervention {\r\n return this._behaviorIntervention;\r\n }\r\n\r\n public set behaviorIntervention(value: BehaviorIntervention) {\r\n this._behaviorIntervention = value;\r\n this.observableIntervention.next(value);\r\n }\r\n\r\n public observableIntervention = new Subject();\r\n observableInterventionStream$ = this.observableIntervention.asObservable();\r\n\r\n public observableInterventionAttachmentRefresh = new Subject();\r\n observableInterventionAttachmentRefreshStream$ = this.observableInterventionAttachmentRefresh.asObservable();\r\n\r\n public observableAssociateInterventionPopup = new Subject();\r\n observableAssociateInterventionPopupStream$ = this.observableAssociateInterventionPopup.asObservable();\r\n\r\n _filterParamIntervention: BehaviorInterventionsFilterParam;\r\n filterChangeIntervention = new EventEmitter();\r\n\r\n set filterParamIntervention(filterParamIntervention: BehaviorInterventionsFilterParam) {\r\n this._filterParamIntervention = filterParamIntervention;\r\n this.filterChangeIntervention.emit();\r\n }\r\n\r\n get filterParamIntervention() {\r\n return this._filterParamIntervention;\r\n }\r\n private _behaviorLetterCurrentStep: number;\r\n public get behaviorLetterCurrentStep(): number {\r\n return this._behaviorLetterCurrentStep;\r\n }\r\n\r\n public set behaviorLetterCurrentStep(value: number) {\r\n this._behaviorLetterCurrentStep = value;\r\n this.observableBehaviorLetterCurrentStep.next(value);\r\n }\r\n\r\n public observableBehaviorLetterCurrentStep = new Subject();\r\n observableBehaviorLetterCurrentStepStream$ = this.observableBehaviorLetterCurrentStep.asObservable();\r\n public generateLetter = false;\r\n public generateMailingLabels: GenerateMailingLabels = new GenerateMailingLabels();\r\n\r\n showActiveLookups(items: Lookup[], field: any) {\r\n if (!Array.isArray(field)) {\r\n return items.filter(o => o.DelStatus == false || o.Code == (!field ? '' : field));\r\n } else {\r\n return items.filter(o => o.DelStatus == false || field.find(f => f == o.Code));\r\n }\r\n }\r\n\r\n isFiltered(): boolean {\r\n return !!this.filterParam.eventDateFrom ||\r\n !!this.filterParam.eventDateTo ||\r\n !!this.filterParam.actionDateFrom ||\r\n !!this.filterParam.actionDateTo ||\r\n !!this.filterParam.incidentCode ||\r\n !!this.filterParam.actionCode ||\r\n !!this.filterParam.reportedToState ||\r\n !!this.filterParam.onlyShowSuspensions ||\r\n !!this.filterParam.offender ||\r\n !!this.filterParam.victim ||\r\n !!this.filterParam.location ||\r\n !!this.filterParam.comment ||\r\n !!this.filterParam.incidentApproveAction;\r\n }\r\n\r\n isFilteredIntervention(): boolean {\r\n return !!this.filterParamIntervention.startDateFrom ||\r\n !!this.filterParamIntervention.startDateTo ||\r\n !!this.filterParamIntervention.endDateFrom ||\r\n !!this.filterParamIntervention.endDateTo ||\r\n !!this.filterParamIntervention.nextMeetingDateFrom ||\r\n !!this.filterParamIntervention.nextMeetingDateTo ||\r\n !!this.filterParamIntervention.interventionist ||\r\n !!this.filterParamIntervention.refferedBy ||\r\n !!this.filterParamIntervention.refferedByOther ||\r\n !!this.filterParamIntervention.notes ||\r\n !!this.filterParamIntervention.status ||\r\n !!(\r\n this.filterParamIntervention.selectedReasons != null &&\r\n this.filterParamIntervention.selectedReasons.length > 0\r\n ) ||\r\n !!(\r\n this.filterParamIntervention.students != null &&\r\n this.filterParamIntervention.students.length > 0\r\n ) ||\r\n !!this.filterParamIntervention.enteredBy;\r\n }\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private behaviorSharedService: BehaviorSharedService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private reportService: ReportingService,\r\n private userPreferencesService: UserPreferencesService,\r\n private sharedService: SharedService\r\n ) {\r\n this._filterParam = new BehaviorEventsFilterParam();\r\n this._filterParamIntervention = new BehaviorInterventionsFilterParam();\r\n this.generalPreferences = this.userPreferencesService.generalPreferences;\r\n }\r\n\r\n // HTTP Calls\r\n public getBehaviorEventCount(yearId = this.yearService.defaultYear.Id, schoolId = this.yearService.defaultYear.SchoolID): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorEventCount?yearId=${yearId}&schoolId=${schoolId}`);\r\n }\r\n\r\n public getBehaviorEvents(yearId: number, schoolId: number, disciplineEventId = 0, incidentId = 0, pageNumber = 0, pageSize = -1, calledFromCard = false, ShowAllSchoolsEntries = false, lastName = '', firstName = '', studentId = '', fromDate = '', toDate = ''): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorEvents?yearId=${yearId}&schoolId=${schoolId}&disciplineEventId=${disciplineEventId}&incidentId=${incidentId}&pageNumber=${pageNumber}&pageSize=${pageSize}&calledFromCard=${calledFromCard}&ShowAllSchoolsEntries=${ShowAllSchoolsEntries}&lastName=${lastName}&firstName=${firstName}&studentId=${studentId}&fromDate=${fromDate}&toDate=${toDate}`);\r\n }\r\n public getInterventionLookups(interventionId: number, lookupType: string, yearId: number, schoolId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetInterventionLookups?interventionId=${interventionId}&type=${lookupType}&yearId=${yearId}&schoolId=${schoolId}`);\r\n }\r\n\r\n public getBehaviorIncidents(eventId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorIncidents?eventId=${eventId}`);\r\n }\r\n\r\n public getEventAttachments(eventId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorEventAttachments?eventId=${eventId}`);\r\n }\r\n\r\n public getIncidentAttachments(eventId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorIncidentAttachments?incidentId=${eventId}`);\r\n }\r\n\r\n public getIncidentsByEvent(filter: BehaviorIncidentSearch): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'GetIncidentsByEvent', filter);\r\n }\r\n\r\n public getBehaviorActions(eventId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorActions?eventId=${eventId}&yearId=${this.yearService.defaultYear.Id}&schoolId=${this.yearService.defaultYear.SchoolID}`);\r\n }\r\n\r\n public getBehaviorActionCodes(yearId: number, profileArea: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorActionCodes?yearId=${yearId}&schoolId=${this.yearService.defaultYear.SchoolID}&profileArea=${profileArea}`);\r\n }\r\n\r\n public saveAttachment(attachment: BehaviorAttachment, attachmentType: string): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveBehaviorAttachment?attachmentType=${attachmentType}`, attachment);\r\n }\r\n\r\n public disciplineAttendanceBulkInsertModify(attendance: BehaviorAction[], startDate: Date, endDate: Date, aYIdentifier: string, DA_ID: number): Observable {\r\n const startDateFormatted = formatDate(startDate, 'MM/dd/yyyy', 'en-US');\r\n const endDateFormatted = formatDate(endDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.post(System.apiURL.Counselor + `DisciplineAttendanceBulkInsertModify?startDate=${startDateFormatted}&endDate=${endDateFormatted}&aYIdentifier=${aYIdentifier}&DA_ID=${DA_ID}`, attendance);\r\n }\r\n\r\n public disciplineTeamAttendanceBulkInsertModify(attendance: BehaviorAction[], startDate: Date, endDate: Date, aYIdentifier: string, DA_ID: number): Observable {\r\n const startDateFormatted = formatDate(startDate, 'MM/dd/yyyy', 'en-US');\r\n const endDateFormatted = formatDate(endDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.post(System.apiURL.Counselor + `DisciplineTeamAttendanceBulkInsertModify?startDate=${startDateFormatted}&endDate=${endDateFormatted}&aYIdentifier=${aYIdentifier}&DA_ID=${DA_ID}`, attendance);\r\n }\r\n\r\n public saveBehaviorAction(action: BehaviorAction): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorAction', action);\r\n }\r\n\r\n public getMaxFileSize(): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetMaxFileSize');\r\n }\r\n\r\n public getStudentCalendar(studentId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetScheduleCalendarByStudentId?studentId=${studentId}&yearId=${yearId}`);\r\n }\r\n\r\n public isOverlapActionDates(studentId: number, fromDate: string, toDate: string, actionId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `IsOverlapActionDates?studentId=${studentId}&fromDate=${fromDate}&toDate=${toDate}&actionId=${actionId}`);\r\n }\r\n\r\n public isDisciplineCodeDetSusExpType(actionCode: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `IsDisciplineCodeDetSusExpType?actionCode=${actionCode}&yearId=${yearId}`);\r\n }\r\n\r\n public isDisciplineCodeSuspensionType(actionCode: string, ayIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + `IsDisciplineCodeSuspensionType?actionCode=${actionCode}&ayIdentifier=${ayIdentifier}`);\r\n }\r\n\r\n public getEndDateFromStartAndDuration(calendarId: number, startDate: string, duration: number, holidayIn: boolean): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetEndDateFromStartAndDuration?calendarId=${calendarId}&startDate=${startDate}&duration=${duration}&holidayIn=${holidayIn}`);\r\n }\r\n\r\n public getDurationFromStartAndEndDate(calendarId: number, startDate: string, endDate: string, holidayIn: boolean): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetDurationFromStartAndEndDate?calendarId=${calendarId}&startDate=${startDate}&endDate=${endDate}&holidayIn=${holidayIn}`);\r\n }\r\n\r\n public getReferralsByEventId(eventId: number, schoolId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetDisciplineReferralsByEventId?eventId=${eventId}&schoolId=${schoolId}&yearId=${yearId}`);\r\n }\r\n\r\n public getAttendanceCodeLookup(isTeacher: boolean, schoolId: number, yearId: number): Observable {\r\n return this.sharedService.getAttendanceCodeLookup(isTeacher, schoolId, yearId);\r\n }\r\n\r\n public getStudentScheduleforSuspensionAttendance(ayIdentifier: string, studentId: number, fromDate: Date, toDate: Date, DA_ID: number): Observable {\r\n const startDate = formatDate(fromDate, 'MM/dd/yyyy', 'en-US');\r\n const endDate = formatDate(toDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Counselor + `GetStudentScheduleforSuspensionAttendance?ayIdentifier=${ayIdentifier}&studentId=${studentId}&fromDate=${startDate}&toDate=${endDate}&DA_ID=${DA_ID}`);\r\n }\r\n\r\n public getStudentTeamSchedulebyDate(ayIdentifier: string, studentId: number, fromDate: Date, toDate: Date): Observable {\r\n const startDate = formatDate(fromDate, 'MM/dd/yyyy', 'en-US');\r\n const endDate = formatDate(toDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Counselor + `GetStudentTeamSchedulebyDate?ayIdentifier=${ayIdentifier}&studentId=${studentId}&fromDate=${startDate}&toDate=${endDate}`);\r\n }\r\n\r\n public createNonStudent(student: BehaviorStudent): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'CreateNonStudent', student);\r\n }\r\n\r\n public deletNonStudent(student: BehaviorStudent): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'DeleteNonStudent', student);\r\n }\r\n\r\n public getBehaviorPolicies(schoolId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorPolicies?schoolId=${schoolId}&yearId=${yearId}`);\r\n }\r\n\r\n public getBehaviorDaysServed(studentId: number, yearId: number, actionId: number, actionType: string, actionCodeType: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorDaysServed?studentId=${studentId}&yearId=${yearId}&actionId=${actionId}&actionType=${actionType}&actionCodeType=${actionCodeType}`);\r\n }\r\n\r\n public getBehaviorInterventions(yearId: number, schoolId: number, interventionId: number = 0): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorInterventions?yearId=${yearId}&schoolId=${schoolId}&interventionId=${interventionId}`);\r\n }\r\n\r\n public saveBehaviorIntervention(e: BehaviorIntervention): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorIntervention', e);\r\n }\r\n\r\n public getBehaviorLetterTemplates(yearId: number, schoolId: number, templateId: number = 0): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorLetterTemplates?yearId=${yearId}&schoolId=${schoolId}&templateId=${templateId}`);\r\n }\r\n\r\n public saveBehaviorLetterTemplate(blt: EFormTemplate): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorLetterTemplate', blt);\r\n }\r\n\r\n public getBehaviorLetters(yearId: number, schoolId: number, DGL_ID: number = 0, templateId: number = 0, includeEForm: boolean = false, includePDF: boolean = false): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetBehaviorLetters?yearId=${yearId}&schoolId=${schoolId}&DGL_ID=${DGL_ID}&templateId=${templateId}&includeEForm=${includeEForm}&includePDF=${includePDF}`);\r\n }\r\n\r\n public saveBehaviorLetters(behaviorLetters: BehaviorLetter[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorLetters', behaviorLetters);\r\n }\r\n\r\n public deleteBehaviorLetters(behaviorLetterIDs: number[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'DeleteBehaviorLetters', behaviorLetterIDs);\r\n }\r\n\r\n public saveInterventionMeeting(meetings: InterventionMeeting[], interventionId: number): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveInterventionMeeting?interventionId=${interventionId}`, meetings);\r\n }\r\n\r\n public saveInterventionAttachment(attachment: InterventionAttachment, attachmentType: string, userId: number): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveInterventionAttachment?attachmentType=${attachmentType}&userId=${userId}`, attachment);\r\n }\r\n\r\n public saveContract(e: Contract): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveContract', e);\r\n }\r\n\r\n public saveAssociateIntervention(userId: number, csmis: CounselorStudentMeetingInterventions[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveAssociateIntervention?userId=${userId}`, csmis);\r\n }\r\n\r\n public getAssociateInterventions(userId: number, ClId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetAssociateInterventions?userId=${userId}&clId=${ClId}`);\r\n }\r\n\r\n public saveAssociateEvent(userId: number, deis: DisciplineEventIntervention[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveAssociateEvent?userId=${userId}`, deis);\r\n }\r\n\r\n public saveCommunicaitonLogIntervention(cl: CommunicationLog, i: number, userId: number): Observable {\r\n // NOTE: we copy to prevent other errors from propagating\r\n const copyLog = new CommunicationLog();\r\n Object.assign(copyLog, cl);\r\n copyLog.Reason = '';\r\n copyLog.InformOthers = '';\r\n return this.http.post(System.apiURL.Counselor + `SaveCounselorStudentMeetingIntervention?interventionId=${i}&userId=${userId}`, copyLog);\r\n }\r\n\r\n public saveBehaviorIncident(incident: BehaviorIncident): Observable {\r\n return this.behaviorSharedService.saveBehaviorIncident(incident);\r\n }\r\n\r\n getIncidentDescription(incidentCode: string, getById: boolean, truncate: number = 0): string {\r\n let incidentLookup: Lookup;\r\n if (getById) {\r\n incidentLookup = this.incidentCodes.find(function (i) {\r\n return i.Id.toString() == incidentCode.toString();\r\n });\r\n } else {\r\n incidentLookup = this.incidentCodes.find(function (i) {\r\n return i.Code == incidentCode;\r\n });\r\n }\r\n if (incidentLookup != null) {\r\n if (truncate > 0 && incidentLookup.CodeDescription.length > truncate) {\r\n return incidentLookup.Code + ' - ' + incidentLookup.CodeDescription.substring(0, truncate) + '...';\r\n }\r\n return incidentLookup.Code + ' - ' + incidentLookup.CodeDescription;\r\n } else {\r\n return ' ';\r\n }\r\n }\r\n\r\n public generateNewIncident(): BehaviorIncident {\r\n let id = Math.min.apply(null, this.behaviorEvent.Incidents.map(i => i.Id));\r\n if (id >= 0) {\r\n id = -1;\r\n } else {\r\n id = id - 1;\r\n }\r\n const newIncident = new BehaviorIncident();\r\n newIncident.Id = id;\r\n newIncident.EventId = this.behaviorEvent.Id;\r\n newIncident.InvolvementType = 'Offender';\r\n newIncident.AlcoholRelated = this.behaviorEvent.DefaultAlcoholRelated;\r\n newIncident.DrugRelated = this.behaviorEvent.DefaultDrugRelated;\r\n newIncident.GangRelated = this.behaviorEvent.DefaultGangRelated;\r\n newIncident.HateCrimeRelated = this.behaviorEvent.DefaultHateRelated;\r\n newIncident.WeaponRelated = this.behaviorEvent.DefaultWeaponRelated;\r\n newIncident.IncidentCode = this.behaviorEvent.DefaultIncidentCodeId;\r\n newIncident.ReportedToPolice = this.behaviorEvent.DefaultReportedToPolice;\r\n newIncident.DisciplineIncidentSubCodesId = this.behaviorEvent.DisciplineIncidentSubCodeId;\r\n newIncident.AddedOn = new Date();\r\n newIncident.AddedBy = this.userService.currentUser.Id;\r\n const selectedCode = this.incidentCodes.find(c => c.Code == newIncident.IncidentCode);\r\n if (selectedCode != null) {\r\n newIncident.DCID = parseInt(selectedCode.Id, 10);\r\n }\r\n return newIncident;\r\n }\r\n\r\n refreshAttachmentGrid() {\r\n if (this.attachmentsComponent != null) {\r\n this.attachmentsComponent.refreshGrid();\r\n }\r\n }\r\n\r\n uniqueStudents(studentId: number): string {\r\n // Returning the unique students\r\n if (studentId > 0) {\r\n this.behaviorUniqueStudents = this.behaviorEvent.Students.filter(s => s.Id == studentId && s.Deleted == false)[0];\r\n let studentNumber = '';\r\n if (this.behaviorUniqueStudents != undefined) {\r\n studentNumber += ' ' + this.behaviorUniqueStudents.StudentNumber;\r\n }\r\n return studentNumber;\r\n }\r\n }\r\n\r\n removeElement(array: any[], element: any) {\r\n const index: number = array.indexOf(element);\r\n if (index != -1) {\r\n array.splice(index, 1);\r\n }\r\n }\r\n\r\n public disciplineReferralIncidentLookup(yearId: number): Observable {\r\n return this.behaviorSharedService.disciplineReferralIncidentLookup(yearId, 'Discipline');\r\n }\r\n\r\n public saveBehaviorEvent(e: BehaviorEvent): Observable {\r\n return this.behaviorSharedService.saveBehaviorEvent(e);\r\n }\r\n\r\n public getDisciplineLocations(schoolId: number): Observable {\r\n return this.behaviorSharedService.getDisciplineReferralPlacesLookup(schoolId);\r\n }\r\n\r\n public getDisciplineReferralLookups(lookupType: string, yearId: number, schoolId: number): Observable {\r\n return this.behaviorSharedService.getDisciplineReferralLookups(lookupType, yearId, schoolId);\r\n }\r\n\r\n public getInterventionById(yearId: number, schoolId: number, interventionId: number) {\r\n this.getBehaviorInterventions(yearId, schoolId, interventionId).subscribe((interventions: BehaviorIntervention[]) => {\r\n this.behaviorIntervention = _.cloneDeep(interventions[0]);\r\n if (this.behaviorIntervention.NextMeetingDate && this.getCellClass(this.behaviorIntervention.NextMeetingDate)) {\r\n this.behaviorIntervention.nextMValue = true;\r\n }\r\n });\r\n }\r\n\r\n getCellClass(value) {\r\n if (value != null) {\r\n return (moment(moment(value, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY'), 'MM/DD/YY').isBefore(moment(new Date(), 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY')) ? true : false);\r\n }\r\n }\r\n\r\n refresInterventionAttachmentGrid(attachment: InterventionAttachment[]) {\r\n this.observableInterventionAttachmentRefresh.next(attachment);\r\n }\r\n\r\n openAssociateInterventionPopup(aip: AssociateInterventionPopup) {\r\n this.observableAssociateInterventionPopup.next(aip);\r\n }\r\n\r\n generateMailingAddresses(studentIds: number[]) {\r\n if (studentIds && studentIds.length > 0) {\r\n let xml = '';\r\n xml += '';\r\n studentIds.forEach(studentId => {\r\n xml += '';\r\n xml += '' + studentId + '';\r\n xml += '';\r\n });\r\n xml += '';\r\n\r\n const studentIdParameter: string = '@p_Student_Id=\\'' + xml + '\\'';\r\n const addressTypeParameter = '@AddressType=\\'Default\\'';\r\n const queryString: string = studentIdParameter + ', ' + addressTypeParameter;\r\n\r\n this.reportService.runManualReport(30075, queryString).subscribe(results => {\r\n this.runReportByType('PDF', results, 'MailingLabels');\r\n });\r\n }\r\n }\r\n\r\n runReportByType(reportType: string, results, name: string): void {\r\n\r\n try {\r\n\r\n const byteCharacters: string = atob(results);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n\r\n const byteArray: Uint8Array = new Uint8Array(byteNumbers);\r\n\r\n const fileExtension = '.pdf';\r\n const mimeType = 'application/pdf';\r\n\r\n let FileAsBlob: Blob;\r\n\r\n FileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n\r\n // For other browsers:\r\n // Create a link pointing to the ObjectURL containing the blob.\r\n\r\n const reportNameWithoutSpaces: string = name.replace(/ /g, '');\r\n\r\n const data = window.URL.createObjectURL(FileAsBlob);\r\n const link = document.createElement('a');\r\n link.href = data;\r\n link.download = reportNameWithoutSpaces + fileExtension;\r\n link.click();\r\n\r\n // For Firefox it is necessary to delay revoking the ObjectURL\r\n setTimeout(this.revokeObjectURL(data), 100);\r\n\r\n } catch {\r\n }\r\n\r\n } // end runReportPDF\r\n\r\n // For Firefox it is necessary to delay revoking the ObjectURL\r\n revokeObjectURL(data): any {\r\n window.URL.revokeObjectURL(data);\r\n }\r\n\r\n // V9 Only\r\n generateV9MailingAddresses(generateMailingLabels: GenerateMailingLabels, reportName: string, reportType: number): Observable {\r\n\r\n this.generateLetter = false;\r\n this.parameters = [];\r\n this.param = [];\r\n let Ids = '';\r\n Ids = generateMailingLabels.studentIds.join(',');\r\n if (generateMailingLabels.householdParents === false && generateMailingLabels.nonresidentParents === false) {\r\n generateMailingLabels.householdParents = true;\r\n }\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'strStudentSelectionStatus', ParamStringValue: 'Custom' });\r\n this.param.push({ ParamName: 'strStudentIds', ParamStringValue: Ids });\r\n this.param.push({ ParamName: 'blnPrimaryParentsAddress', ParamStringValue: generateMailingLabels.householdParents });\r\n this.param.push({ ParamName: 'blnAlternateParentsAddress', ParamStringValue: generateMailingLabels.nonresidentParents });\r\n this.param.push({ ParamName: 'blnAlternateParAddrOnlyIfRequested', ParamStringValue: generateMailingLabels.onlyIfRequested });\r\n this.param.push({ ParamName: 'blnParentsCombinedName', ParamStringValue: true });\r\n this.param.push({ ParamName: 'blnParent1NameOnly', ParamStringValue: false });\r\n this.param.push({ ParamName: 'blnStudentNameOnly', ParamStringValue: false });\r\n this.param.push({ ParamName: 'blnIsGenericParentsGreeting', ParamStringValue: false });\r\n this.param.push({ ParamName: 'strGenericParentsGreeting', ParamStringValue: '' });\r\n this.param.push({ ParamName: 'blnGenericParentsGreetingIncludeName', ParamStringValue: false });\r\n\r\n this.param.push({ ParamName: 'lngLinePerPage', ParamStringValue: 10 });\r\n this.param.push({ ParamName: 'lngColumnsPerPage', ParamStringValue: 3 });\r\n this.param.push({ ParamName: 'lngStartDown', ParamStringValue: 1 });\r\n this.param.push({ ParamName: 'lngStartAcross', ParamStringValue: 1 });\r\n this.param.push({ ParamName: 'blnCustomInformation', ParamStringValue: false });\r\n this.param.push({ ParamName: 'strBody1', ParamStringValue: '' });\r\n this.param.push({ ParamName: 'blnReverseName', ParamStringValue: true });\r\n this.param.push({ ParamName: 'blnAutoSortZipCode', ParamStringValue: false });\r\n this.param.push({ ParamName: 'lngPrintCopies', ParamStringValue: 1 });\r\n this.param.push({ ParamName: 'blnPrintDulicateAddress', ParamStringValue: true });\r\n this.param.push({ ParamName: 'blnAllCaps', ParamStringValue: true });\r\n\r\n this.parameters.push(JSON.stringify(this.param));\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: reportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: reportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n const timer = setInterval(() => {\r\n if (!timer) {\r\n clearInterval(timer);\r\n }\r\n if (win.closed) {\r\n // using for reprint lables only for print only\r\n // if (this.behaviorLetterCurrentStep < 5 && generateMailingLabels.printOnly) {\r\n // this.behaviorLetterCurrentStep = this.behaviorLetterCurrentStep + 1;\r\n // }\r\n // else if (this.behaviorLetterCurrentStep < 6 && generateMailingLabels.printOnly == false) {\r\n // this.behaviorLetterCurrentStep = this.behaviorLetterCurrentStep + 1;\r\n // }\r\n clearInterval(timer);\r\n win.focus();\r\n }\r\n }, 1000);\r\n return this.observableBehaviorLetterCurrentStepStream$;\r\n }\r\n\r\n public getEmailAddressessByStudentIds(studentIds: number[], studentStatus: string, reverseName = 0): Observable {\r\n const siteYearId = this.yearService.defaultYear.SiteYearId;\r\n return this.http.post(System.apiURL.Counselor + `GetEmailAddressessByStudentIds?studentStatus=${studentStatus}&siteYearId=${siteYearId}&reverseName=${reverseName}`, studentIds);\r\n }\r\n\r\n public saveMassMarkSarved(yearId: number, schoolId: number, markSarvedDate: Date, actionIds, incidentIds, staffId, actionComments): Observable {\r\n const sarvedDate = formatDate(markSarvedDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Counselor + `SaveMassMarkSarved?yearId=${yearId}&schoolId=${schoolId}&sarvedDate=${sarvedDate}&actionIds=${actionIds}&incidentIds=${incidentIds}&staffId=${staffId}&actionComments=${actionComments}`);\r\n }\r\n\r\n public getIncidentActionsForServedStatus(eventId, lastName, firstName, studentId, fromDate = '', toDate = ''): Observable {\r\n const yearId = this.yearService.defaultYear.Id;\r\n const siteId = this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Counselor + `GetIncidentActionsForServedStatus?yearId=${yearId}&siteId=${siteId}&eventId=${eventId}&lastName=${lastName}&firstName=${firstName}&studentId=${studentId}&fromDate=${fromDate}&toDate=${toDate}`);\r\n }\r\n\r\n public saveSarvedStatus(yearId: number, schoolId: number, servedActions: IncidentActionsServedStatus[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + `SaveSarvedStatus?yearId=${yearId}&schoolId=${schoolId}`, servedActions);\r\n }\r\n}\r\n","import { BehaviorStudent } from './behavior-student.model';\r\nimport { BehaviorIncident } from './behavior-incident.model';\r\nimport { BehaviorAttachment } from './behavior-attachment.model';\r\nimport { BehaviorAction } from './behavior-action.model';\r\nimport { BehaviorFunctional } from './behavior-functional.model';\r\n\r\nexport class BehaviorEvent {\r\n Id = -1;\r\n EventNumber = '';\r\n StaffName = '';\r\n EventName = '';\r\n Description = '';\r\n AYIdentifier = '';\r\n Date: Date | string = null; // DTO returns a string which can sometimes contain an offset\r\n // Allowing string type allows the offset to be removed without causing additional timezone issues by converting to Date object\r\n SentOn: Date = null;\r\n StaffComment = '';\r\n AdminComment = '';\r\n AddedBy: number;\r\n AddedByName: string;\r\n AddedOn: Date = null;\r\n ViewedByAdmin: number;\r\n ViewedByAdminOn: Date = null;\r\n Location = '';\r\n Publish: boolean;\r\n ClosedEvent: boolean;\r\n Context = '';\r\n SiteId: number;\r\n Reported: boolean;\r\n ReportedBy: number;\r\n CaseNumber = '';\r\n ActionsNotReq: boolean;\r\n LastUpBy: number;\r\n LastUpByName: string;\r\n LastUpOn: Date = null;\r\n OutOfDistrictSchool = '';\r\n Suspended: boolean;\r\n Students: BehaviorStudent[] = [];\r\n SchoolId = -1;\r\n Deleted: boolean;\r\n Incidents: BehaviorIncident[] = [];\r\n Actions: BehaviorAction[] = [];\r\n Attachments: BehaviorAttachment[] = [];\r\n DefaultIncidentCodeId: string;\r\n DefaultAlcoholRelated: boolean;\r\n DefaultGangRelated: boolean;\r\n DefaultDrugRelated: boolean;\r\n DefaultHateRelated: boolean;\r\n DefaultWeaponRelated: boolean;\r\n DefaultReportedToPolice: boolean;\r\n ReferralId: number;\r\n IncidentTime: string;\r\n RoomNumber: string;\r\n IncidentsFunctionalCodeId: number;\r\n DisciplineIncidentSubCodeId: number;\r\n Functional: BehaviorFunctional[] = [];\r\n LocationId = '';\r\n OffenderType: string;\r\n // not part of DTO\r\n readOnly = false;\r\n // v9\r\n IncidentId: number;\r\n CodeDesc = '';\r\n StateCode = '';\r\n SiteName: string;\r\n EnteredBy: number;\r\n AdminVerified: boolean;\r\n ViolenceRelated: boolean;\r\n CriminalOffense: boolean;\r\n IncidentWeaponCodeId: number;\r\n IncidentDrugCodeId: number;\r\n IncidentTimeCodeId: number;\r\n ActionCodeDesc: string;\r\n SarvedType: number;\r\n checked = false;\r\n}\r\n","import { BehaviorAttachment } from './behavior-attachment.model';\r\nimport { BehaviorStudent } from './behavior-student.model';\r\n\r\nexport class BehaviorIncident {\r\n Id: number;\r\n EventId: number;\r\n StudentId: number;\r\n IncidentCode = '';\r\n DCID: number;\r\n Comments = '';\r\n AddedBy: number;\r\n AddedOn: Date;\r\n LastUpBy: number;\r\n LastUpOn: Date;\r\n GangRelated = false;\r\n AlcoholRelated = false;\r\n DrugRelated = false;\r\n HateCrimeRelated = false;\r\n WeaponRelated = false;\r\n ReportedToPolice = false;\r\n WeaponDescription = '';\r\n DelStatus = false;\r\n DelBy: number;\r\n InvolvementType = '';\r\n Firearms = '';\r\n NonFireArms = '';\r\n IsNonStudent = false;\r\n IsUnknownStudent = false;\r\n MemId: number;\r\n IsReportedToState = false;\r\n CampusOfResponsibility: number;\r\n ConsecutiveDays: number;\r\n PublishCommentsToParent = false;\r\n IncidentNumber = '';\r\n Attachments: BehaviorAttachment[] = [];\r\n SeriousBodilyInjury = false;\r\n InfractionCost = '';\r\n // v9\r\n ActionCode: string;\r\n IncidentsFunctionalCodeId: number;\r\n FunctionalMotivational: string;\r\n SchoolId: number;\r\n AYIdentifier: string;\r\n IncidentTime: string;\r\n Date: Date = null;\r\n Location = '';\r\n ReportedBy: number;\r\n Students: BehaviorStudent[] = [];\r\n ZeroTolerancePolicy: boolean;\r\n EducationalServices: boolean;\r\n WeaponCode: number;\r\n InterimAlternativeSetting: string;\r\n DisciplineModifier: string;\r\n ConversionDays: string;\r\n PrimaryWeaponCode: number;\r\n SecondaryWeaponCode: number;\r\n TertiaryWeaponCode: number;\r\n ViolentCriminalArrest = false;\r\n PerpetratorInjury: string;\r\n SchoolPolicyDescription: string;\r\n Seclusion: boolean;\r\n Restraint: boolean;\r\n AcademicServices: string;\r\n BehaviorServices: string;\r\n ReengagementMeeting: Date = null;\r\n SubmissionPetitionForReadmission: Date = null;\r\n GrantedPetitionForReadmission: Date = null;\r\n PetitionforExtension: string;\r\n AppealCode: string;\r\n ReengagementPlan: string;\r\n StudentNickName: string;\r\n NonStudentId: number;\r\n AddedByStaff: string;\r\n IncidentRefferalId: number;\r\n DisciplineIncidentSubCodesId: number;\r\n EnteredBy: number;\r\n LocationId = '';\r\n}","import { TylTranslation } from '../../../shared-components/models/tyl-translation.model';\r\nimport { EFormTemplate } from '../../../shared-components/e-forms/e-form-template.model';\r\n\r\nexport class BehaviorLetter {\r\n Id: number;\r\n IncidentId: number;\r\n StudentId: number;\r\n TemplateId: number;\r\n StudentNumberIdentifier: string;\r\n FirstName: string;\r\n LastName: string;\r\n Gender: string;\r\n GradeIdentifier: string;\r\n GradeLevelId: number;\r\n SchoolId: number;\r\n AYIdentifier: string;\r\n EventName: string;\r\n TemplateName: string;\r\n FormData: string;\r\n base64PDF: string;\r\n AddedBy: number;\r\n AddedByName: string;\r\n AddedOn: Date;\r\n LastUpBy: number;\r\n LastUpOn: Date;\r\n DelStatus: boolean;\r\n Selected: boolean = false;\r\n // V9 Only\r\n DocId: number;\r\n FileType: string;\r\n DocTypeId: number;\r\n\tletterOnlyForNonResidentParent = false;\r\n\r\n}\r\n\r\nexport class GenerateMailingLabels {\r\n studentIds: number[] = [];\r\n householdParents = false;\r\n nonresidentParents = false;\r\n onlyIfRequested = false;\r\n printOnly = true;\r\n message = '';\r\n subject = 'Behavior Letter Notification';\r\n translations: TylTranslation[] = [];\r\n action = '';\r\n steps: number;\r\n behaviorLetterTemplate: EFormTemplate;\r\n behaviorLetterEmailAddress: BehaviorLetterEmailAddress[] = [];\r\n}\r\n\r\nexport class BehaviorLetterEmailAddress {\r\n ID: number;\r\n Student_ID: string;\r\n StudentName: string;\r\n EmailId: string;\r\n EmailType: string;\r\n RequestingMail: boolean;\r\n SiteYear: string;\r\n ParentName: string;\r\n}\r\n\r\n","import { StudentAlerts } from '../../../shared-components/models/student-alerts.model';\r\n\r\nexport class BehaviorStudent {\r\n Id: number = null;\r\n MemId: number = null;\r\n StudentId: number = null;\r\n FirstName = '';\r\n MiddleName = '';\r\n LastName = '';\r\n Nickname = '';\r\n StudentNumber: string = null;\r\n IncidentCount: number = null;\r\n Involvement: string = null;\r\n Alerts: StudentAlerts[] = [];\r\n Suspended = false;\r\n IsValidDisciplineTeam = false;\r\n IsUnknownStudent = false;\r\n PhoneNumber = '';\r\n Gender: string = null;\r\n Race = '';\r\n DOB: Date = null;\r\n Deleted = false;\r\n FormattedName = '';\r\n UserHasPermissionForStudent: boolean;\r\n // v9\r\n InvolvementType: number;\r\n NonStudentId: number;\r\n VictimStrId: string;\r\n VictimTypeId: number;\r\n VictimInjuryId: number;\r\n SchoolChoiceVictim: string;\r\n }\r\n","export class SchoolsForRemoveGradeLevelRequirements {\r\n\r\n // Server Properties\r\n School_ID: number;\r\n SchoolCode: string;\r\n SchoolName: string;\r\n GradeLevels: string;\r\n InUse: boolean;\r\n\r\n // Accessors\r\n get kendoSelectable(): boolean {\r\n return !this.InUse;\r\n }\r\n\r\n get schoolDisplay(): string {\r\n return (this.SchoolCode ? this.SchoolCode + '-' : '') + this.SchoolName;\r\n }\r\n}","/* eslint-disable camelcase */\r\nimport { SchoolsForRemoveGradeLevelRequirements } from './district-course-request/remove-requirements/schools-for-remove-grade-level-requirements.model';\r\nimport { Injectable, EventEmitter } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../../../shared-components/System';\r\nimport { CourseRequestDistrictGradeLevelCreditsDTO } from './models/districtGradeLevelCreditsSource.model';\r\nimport {\r\n CourseRequestDistrictGradeLevelRequirementsDTO,\r\n DistrictCoursesForRequirementDTO,\r\n SchoolsForRequirementAssignmentDTO\r\n} from './models/districtGradeLevelRequirements.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport { SchoolCourseRequestModel } from './models/school-course-request-model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { SchoolGradeLevelCreditsDTO } from './models/schoolGradeLevelCredits.model';\r\nimport { SchoolGradeLevelRequirementDTO } from './models/schoolGradeLevelRequirement.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { RequestTallyCourseHeaderDTO } from './models/requestTallyCourse.model';\r\nimport { RequestConflictModelDTO } from './models/requestConflict.model';\r\nimport { SchoolStaffDTO } from './models/SchoolStaff.model';\r\nimport { SchoolTermsDTO } from './models/schoolTerms.model';\r\nimport {\r\n CourseRequestStudentSummarySpecialStudentFilterModel,\r\n CourseRequestStudentSummaryModel,\r\n MassAddCourseRequestsDTO,\r\n CourseRequestStudentSummaryFilterModel\r\n} from './models/courserequestStudentSummary.model';\r\nimport { RebuildRequestConflictParametersDTO } from './models/rebuildRequestConflictParameters.model';\r\nimport { ScheduleFolderService } from '../schedule-folder/schedule-folder.service';\r\nimport { IdentifiedConflictsDTO } from './models/identifiedConflicts.model';\r\nimport { StudentScheduleProgressDTO } from '../shared/student-schedule-progress/student-schedule-progress.model';\r\nimport { StudentSchedulingParameters } from '../shared/student-scheduling-parameters.model';\r\nimport { ClearStudentSectionsDTO } from './models/clear-student-sections.model';\r\nimport { map, take } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class CourseRequestMgmtService {\r\n\r\n\r\n // any course request changes made on the Course Request tab\r\n // increment _requestsChanged +1\r\n private _requestsChanged = 0;\r\n public observableRequestsChanged = new Subject();\r\n observableRequestsChangedStream$ = this.observableRequestsChanged.asObservable();\r\n\r\n get requestsChanged(): number {\r\n return this._requestsChanged;\r\n }\r\n\r\n set requestsChanged(value: number) {\r\n this._requestsChanged = value;\r\n this.observableRequestsChanged.next(this._requestsChanged);\r\n }\r\n\r\n // any course request changes made on the Student Summary tab\r\n // increment _studentSummaryRequestsChanged +1\r\n private _studentSummaryRequestsChanged = 0;\r\n public observableStudentSummaryRequestsChanged = new Subject();\r\n observableStudentSummaryRequestsChangedStream$ = this.observableStudentSummaryRequestsChanged.asObservable();\r\n\r\n get studentSummaryRequestsChanged(): number {\r\n return this._studentSummaryRequestsChanged;\r\n }\r\n\r\n set studentSummaryRequestsChanged(value: number) {\r\n this._studentSummaryRequestsChanged = value;\r\n this.observableStudentSummaryRequestsChanged.next(this._studentSummaryRequestsChanged);\r\n }\r\n\r\n districtCourses: DistrictCoursesForRequirementDTO[];\r\n schoolCourses: DistrictCoursesForRequirementDTO[];\r\n creditsDecimalPlaces = 2;\r\n\r\n modifyRequirementEvent = new EventEmitter();\r\n OnNavigateToStudentSummaryTab = new EventEmitter();\r\n OnNavigateToStudentCourseRequestTab = new EventEmitter();\r\n\r\n schoolCRM_selectedTab: string;\r\n districtCRM_selectedTab: string;\r\n\r\n // permissions\r\n allow_DistrictCourseRequestSetupWrite = true;\r\n allow_GradeLevelCourseRequestSetupWrite = true;\r\n\r\n // Filter Properties\r\n studentSummarySpecialFilter: CourseRequestStudentSummarySpecialStudentFilterModel;\r\n studentSummaryFilter = new CourseRequestStudentSummaryFilterModel();\r\n\r\n constructor(\r\n private http: HttpClient, private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private scheduleFolderService: ScheduleFolderService\r\n ) {\r\n }\r\n\r\n isTabSelected(tab): boolean {\r\n return this.schoolCRM_selectedTab === tab;\r\n }\r\n\r\n isDistrictTabSelected(tab): boolean {\r\n return this.districtCRM_selectedTab === tab;\r\n }\r\n\r\n getDistrictGradeLevelCredits(): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestDistrictGradeLevelCredits?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier);\r\n }\r\n\r\n updateDistrictGradeLevelCredits(data: CourseRequestDistrictGradeLevelCreditsDTO[]): Observable {\r\n const queryString = '?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.post(System.apiURL.Counselor + 'UpdateCourseRequestDistrictGradeLevelCredits' + queryString, data);\r\n }\r\n\r\n /* getCourseRequestGetDistrictGradeLevelRequirements(): Observable {\r\n return this.getCourseRequestGetDistrictGradeLevelRequirementsBySchool(-1);\r\n } */\r\n\r\n getCourseRequestGetDistrictGradeLevelRequirementsBySchool(school_Id: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestGetDistrictGradeLevelRequirements?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier + '&siteId=' + school_Id);\r\n }\r\n\r\n getCourseRequestGetDistrictGradeLevelRequirementsByYear(ayIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestGetDistrictGradeLevelRequirements?ayIdentifier=' + ayIdentifier + '&siteId=-1');\r\n }\r\n\r\n\r\n getSchoolsForRequirementAssignment(requirements: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolsForRequirementAssignment?requirements=' + requirements);\r\n }\r\n\r\n assignSchoolToRequirements(requirements: string, schools: number[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'AssignSchoolToRequirements?requirements=' + requirements, schools);\r\n }\r\n\r\n deleteDistrictGradeLevelRequirement(requirement_ID: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'deleteDistrictGradeLevelRequirement?requirementId=' + requirement_ID);\r\n }\r\n\r\n getCoursesForDistrictRequirement(schoolId = -1): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetCoursesForDistrictRequirement?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier + '&schoolId=' + schoolId);\r\n }\r\n\r\n getSchoolCourseRequests(schoolId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolCourseRequests?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier + '&schoolId=' + schoolId);\r\n }\r\n\r\n deleteSchoolCourseRequests(data: SchoolCourseRequestModel[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'DeleteSchoolCourseRequests', data);\r\n }\r\n\r\n approveSchoolCourseRequests(data: SchoolCourseRequestModel[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'ApproveSchoolCourseRequests', data);\r\n }\r\n\r\n updateSchoolCourseRequests(data: SchoolCourseRequestModel[]): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'UpdateSchoolCourseRequests', data);\r\n }\r\n\r\n updateDistrictGradeLevelRequirement(data: CourseRequestDistrictGradeLevelRequirementsDTO): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'UpdateDistrictGradeLevelRequirement?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier, data);\r\n }\r\n\r\n getSchoolGradeLevelCreditsOverview(siteYear_ID: number): Observable {\r\n const queryString = '?siteYear_ID=' + siteYear_ID;\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolGradeLevelCreditOveriew' + queryString);\r\n }\r\n\r\n GetSchoolGradeLevelCreditsForAddEdit(schoolId: number): Observable {\r\n const queryString = '?school_ID=' + schoolId + '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolGradeLevelCreditsForAddEdit' + queryString);\r\n }\r\n\r\n UpdateSchoolGradeLevelCredits(updateType: string, data: SchoolGradeLevelCreditsDTO[]): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId) + '&updateType=' + updateType;\r\n return this.http.post(System.apiURL.Counselor + 'UpdateCourseRequestSchoolGradeLevelCredits' + queryString, data);\r\n }\r\n\r\n GetSchoolGradeLevelRequirements(): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId) + '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolGradeLevelRequirements' + queryString);\r\n }\r\n\r\n UpdateSchoolGradeLevelRequirement(updateType: string, data: any): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId) + '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier + '&updateType=' + updateType;\r\n return this.http.post(System.apiURL.Counselor + 'UpdateSchoolGradeLevelRequirement' + queryString, data);\r\n }\r\n\r\n GetRequestTallyCourses(): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId)\r\n + '&scheduleFolders_ID=' + this.scheduleFolderService.selectedScheduleFolder.ID;\r\n return this.http.get(System.apiURL.Counselor + 'GetRequestTallyCourses' + queryString);\r\n }\r\n\r\n getRequestConflicts(schoolId: number, requestParameters: RebuildRequestConflictParametersDTO): Observable {\r\n // const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId);\r\n return this.http.post(System.apiURL.Counselor + 'GetRequestConflicts?ayIdentifier=' + this.yearService.defaultYear.AYIdentifier + '&schoolDomain=' + schoolId, requestParameters);\r\n }\r\n\r\n getSchoolStaff(schoolDomain: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolStaff?schoolDomain=' + schoolDomain);\r\n }\r\n\r\n getSchoolTerms(): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId);\r\n return this.http.get(System.apiURL.Counselor + 'GetSchoolTerms' + queryString);\r\n }\r\n\r\n getCourseRequestStudentSummary(scheduleFolders_ID: number, specialFilter: CourseRequestStudentSummarySpecialStudentFilterModel): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId) + '&scheduleFolders_ID=' + scheduleFolders_ID;\r\n return this.http.post(System.apiURL.Counselor + 'GetCourseRequestStudentSummary' + queryString, specialFilter);\r\n }\r\n\r\n AddRemoveCourseRequestInMass(data: any, addedByStudent: boolean, siteYear_ID?: number): Observable {\r\n siteYear_ID = siteYear_ID == null ? this.yearService.defaultYear.Id : siteYear_ID;\r\n const queryString = '?siteYear_ID=' + siteYear_ID + '&AddedByStudent=' + addedByStudent;\r\n return this.http.post(System.apiURL.Counselor + 'AddRemoveCourseRequestInMass' + queryString, data);\r\n }\r\n\r\n RebuildRequestConflicts(schoolId: number, data: RebuildRequestConflictParametersDTO): Observable {\r\n const queryString = '?schoolDomain=' + schoolId + '&siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId) + '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.post(System.apiURL.Counselor + 'RebuildRequestConflicts' + queryString, data);\r\n }\r\n\r\n OverrideConflicts(data: IdentifiedConflictsDTO[]): Observable {\r\n const queryString = '?siteYear_ID=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId);\r\n return this.http.post(System.apiURL.Counselor + 'OverrideConflicts' + queryString, data);\r\n }\r\n\r\n checkStudentScheduleBatch() {\r\n const queryString = '?scheduleFolders_ID=' + this.scheduleFolderService.selectedScheduleFolder.ID;\r\n return this.http.get(System.apiURL.Counselor + 'CheckStudentScheduleBatch' + queryString);\r\n }\r\n\r\n createStudentScheduleBatch(scheduleFolders_ID: number, data: StudentSchedulingParameters): Observable {\r\n const queryString = '?scheduleFolders_ID=' + scheduleFolders_ID;\r\n // const data = [];\r\n // data.push(StudentIDs);\r\n return this.http.post(System.apiURL.Counselor + 'CreateStudentScheduleBatch' + queryString, data);\r\n }\r\n\r\n getStudentScheduleBatchData(Batch_ID: number): Observable {\r\n const queryString = '?Batch_ID=' + Batch_ID;\r\n return this.http.get(System.apiURL.Counselor + 'GetStudentScheduleBatchData' + queryString);\r\n }\r\n\r\n performStudentScheduling(data: StudentSchedulingParameters): Observable {\r\n const queryString = '?scheduleFolder_ID=' + this.scheduleFolderService.selectedScheduleFolder.ID;\r\n return this.http.post(System.apiURL.Counselor + 'PerformStudentScheduling' + queryString, data);\r\n }\r\n\r\n processStudentScheduleBatch(batch_ID: number, includeAlternateRequests: boolean, data: StudentSchedulingParameters): Observable {\r\n const queryString = '?batch_ID=' + batch_ID + '&includeAlternateRequests=' + includeAlternateRequests;\r\n return this.http.post(System.apiURL.Counselor + 'ProcessStudentScheduleBatch' + queryString, data);\r\n }\r\n\r\n stopStudentScheduleBatch(batch_ID: number): Observable {\r\n const queryString = '?batch_ID=' + batch_ID;\r\n return this.http.get(System.apiURL.Counselor + 'StopStudentScheduleBatch' + queryString);\r\n }\r\n\r\n saveStudentScheduleBatch(batch_ID: number): Observable {\r\n const queryString = '?batch_ID=' + batch_ID;\r\n return this.http.get(System.apiURL.Counselor + 'SaveStudentScheduleBatch' + queryString);\r\n }\r\n\r\n rejectStudentScheduleBatch(batch_ID: number): Observable {\r\n const queryString = '?batch_ID=' + batch_ID;\r\n return this.http.get(System.apiURL.Counselor + 'RejectStudentScheduleBatch' + queryString);\r\n }\r\n\r\n getNumberMask() {\r\n return {\r\n guide: true,\r\n mask: createNumberMask({\r\n prefix: '',\r\n includeThousandsSeparator: false,\r\n integerLimit: 2,\r\n allowDecimal: true,\r\n decimalLimit: this.creditsDecimalPlaces\r\n })\r\n };\r\n }\r\n\r\n getCreditFormatPipString() {\r\n return '1.' + this.creditsDecimalPlaces.toString();\r\n }\r\n\r\n clearStudentSchedule(scheduleFoldersId: number, studentIds: number[]) {\r\n const queryString = '?scheduleFoldersId=' + scheduleFoldersId;\r\n return this.http.post(System.apiURL.Counselor + 'ClearStudentSections' + queryString, studentIds);\r\n }\r\n\r\n massAddRequiredCourseRequests(studentIds: number[]) {\r\n const queryString = '?siteYearId=' + ((this.loginService.LoginSettings.V10 == true) ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId);\r\n return this.http.post(System.apiURL.Counselor + 'MassAddRequiredCourseRequests' + queryString, studentIds);\r\n }\r\n\r\n getSchoolsForRemoveGradeLevelRequirements(gradeLevelRequirementId: number) {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id\r\n + '&gradeLevelRequirementId=' + gradeLevelRequirementId;\r\n return this.http.get(\r\n System.apiURL.Counselor + 'GetSchoolsForRemoveGradeLevelRequirements' + queryString\r\n ).pipe(\r\n take(1),\r\n map(schools => {\r\n for (let i = 0; i < schools.length; i++) {\r\n schools[i] = System.convert(schools[i], new SchoolsForRemoveGradeLevelRequirements());\r\n }\r\n return schools;\r\n })\r\n );\r\n }\r\n\r\n removeGradeLevelRequirementsForSchools(sites: number[], gradeLevelRequirementId: number) {\r\n const queryString = '?gradeLevelRequirementId=' + gradeLevelRequirementId;\r\n return this.http.post(\r\n System.apiURL.Counselor + 'RemoveGradeLevelRequirementsFromSchools' + queryString,\r\n sites\r\n ).pipe(\r\n take(1)\r\n );\r\n }\r\n}\r\n","\r\nimport { IdentifiedConflictsDTO } from './identifiedConflicts.model';\r\n\r\nexport class MassAddCourseRequestsDTO {\r\n identifiedConflicts: IdentifiedConflictsDTO[] = [];\r\n addedCourseRequests: AddedCourseRequestsDTO[] = [];\r\n modifiedCourseRequests: ModifiedCourseRequestsDTO[] = [];\r\n}\r\n\r\nexport class AddedCourseRequestsDTO {\r\n ID: number;\r\n Student_ID: number;\r\n DistrictCourse_ID: number;\r\n}\r\n\r\nexport class ModifiedCourseRequestsDTO {\r\n ID: number;\r\n Modification: string;\r\n Student_ID: number;\r\n DistrictCourse_ID: number;\r\n}\r\n\r\nexport class CourseRequestStudentSummaryModel {\r\n Student_Id: number;\r\n LastName: string;\r\n FirstName: string;\r\n StudentNumber: string;\r\n GradeIdentifier: string;\r\n SumOfEarnedCredit: number;\r\n NoOfFailedCourse: number;\r\n NoOfRequestCourse: number;\r\n SumOfRequestCredit: number;\r\n NoOfUnmetRequirement: number;\r\n NoOfConflictRequest: number;\r\n NoOfRequestReview: number;\r\n NoOfScheduledCourse: number;\r\n PrimaryCounselorId: number;\r\n SumOfScheduledCredit: number;\r\n StudentCourseRequestedAndScheduledDetails: StudentCourseRequestedAndScheduledDetailDTO[] = [];\r\n detailRow: boolean;\r\n displayRequestCourseCredit: string;\r\n displayScheduledCourseCredit: string;\r\n}\r\n\r\nexport class StudentCourseRequestedAndScheduledDetailDTO {\r\n CourseRequestStudentCourseRequests_ID: number;\r\n Student_Id: number;\r\n SchoolCourses_ID: number;\r\n DistrictCourse_ID: number;\r\n RequestNbr: number; // instance of a request, to multiple requests for the same SchoolCourses_ID\r\n CourseFormattedName: string;\r\n CourseRequirementName: string;\r\n Credits: number;\r\n TermType: string;\r\n isScheduled: boolean;\r\n Classes_ID: number;\r\n ClassName: string;\r\n MeetingPatterns: string;\r\n ClassRooms: string;\r\n ClassPeriods: string;\r\n Teachers: string;\r\n Terms: string;\r\n ShceduledStudentCountInClass: number;\r\n isNewlyRequested: boolean; // True if request has been added via student summary detail\r\n Type: string;\r\n Status: string;\r\n LinkedAlternate: string;\r\n}\r\n\r\nexport class CourseRequestStudentSummaryFilterModel {\r\n students: number[] = [];\r\n specialFilter: CourseRequestStudentSummarySpecialStudentFilterModel = null;\r\n gradeLevels = [];\r\n requestCoursesMin: number = null;\r\n requestCoursesMax: number = null;\r\n requestCreditsMin: number = null;\r\n requestCreditsMax: number = null;\r\n scheduledCoursesMin: number = null;\r\n scheduledCoursesMax: number = null;\r\n scheduledCreditsMin: number = null;\r\n scheduledCreditsMax: number = null;\r\n selectedCounselorId = 0;\r\n requestCourses: number[] = [];\r\n missing_requestCourses: number[] = [];\r\n scheduledCourses: number[] = [];\r\n missing_scheduledCourses: number[] = [];\r\n conflict_selectedCourseNameNumber = '';\r\n conflict_selectedConflictingCourseNameNumber = '';\r\n}\r\n\r\nexport class CourseRequestStudentSummarySpecialStudentFilterModel {\r\n filterGroup: string;\r\n rowHeaderName: string;\r\n rowHeaderValue: number | string;\r\n columnHeaderName: string;\r\n columnHeaderValue: string;\r\n filterDescription: string;\r\n}\r\n","export class SchoolCourseRequestModel {\r\n StudentCourseRequest_ID: number;\r\n DistrictCourse_ID: number;\r\n GradeLevel: string;\r\n LastName: string;\r\n FirstName: string;\r\n Student_ID: number;\r\n StudentNumber: string;\r\n CourseRequirement: string;\r\n CourseRequirement_ID?: number;\r\n Course: string;\r\n Credits: number;\r\n TermType: string;\r\n Status: string;\r\n Term: string;\r\n Period: string;\r\n Teacher: string;\r\n Teacher_ID: number;\r\n Section: string;\r\n Conflicts: number;\r\n Subject_ID: number;\r\n Type: string;\r\n PrimaryCourse: string;\r\n RequestPriority: number;\r\n}\r\n","import { BellSchedulesDTO } from '../bell-schedule/models/bell-schedule.model';\r\n\r\n\r\nexport class ScheduleFolderDTO {\r\n Selected: boolean;\r\n ID: number;\r\n Site_ID: number;\r\n Year_ID: number;\r\n Name: string;\r\n Type: number;\r\n AddedMethod: string;\r\n IsDefault: boolean;\r\n SourceSchedulingFolders_ID: number;\r\n AddedBy: number;\r\n AddedOn: Date;\r\n LastUpdatedBy: number;\r\n LastUpdatedOn: Date;\r\n SchoolName: string;\r\n BellSchedules: BellSchedulesDTO[];\r\n\r\n // Local Properties\r\n get typeName() {\r\n switch (this.Type) {\r\n case 1:\r\n return (this.IsDefault ? 'Default ' : '') + 'Plan';\r\n case 2:\r\n return 'Source';\r\n case 3:\r\n return 'Active';\r\n }\r\n }\r\n}\r\n\r\nexport class ScheduleFolderDetails extends ScheduleFolderDTO {\r\n\r\n // Server Properties\r\n ScheduleFolders_ID: number;\r\n ScheduleFoldersName: string;\r\n MeetingPatterns: number;\r\n Classes_Total: number;\r\n Classes_NoTeacher: number;\r\n Classes_NoRoom: number;\r\n Classes_NoMeetingPattern: number;\r\n Classes_NoTerm: number;\r\n Teachers_Total: number;\r\n Teachers_NoSchedule: number;\r\n Teachers_PartiallySchedule: number;\r\n Teachers_FullySchedule: number;\r\n Teachers_AverageUtilization: number;\r\n Rooms_Total: number;\r\n Rooms_NoSchedule: number;\r\n Rooms_PartiallySchedule: number;\r\n Rooms_FullySchedule: number;\r\n Rooms_AverageUtilization: number;\r\n ScheduleFolderGradeLevels: ScheduleFolderGradeLevelsDTO[];\r\n\r\n // Local Properties\r\n get nameAndStatus(): string {\r\n return this.typeName + ' - ' + this.ScheduleFoldersName;\r\n }\r\n}\r\nexport class ScheduleFolderGradeLevelsDTO {\r\n ScheduleFolders_ID: number;\r\n GradeLevel: string;\r\n Total: number;\r\n NoSchedule: number;\r\n PartiallySchedule: number;\r\n FullySchedule: number;\r\n AverageUtilization: number;\r\n Ranking: number;\r\n}\r\nexport class SFCards {\r\n Card1: ScheduleFolderDetails;\r\n Card2: ScheduleFolderDetails;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, ReplaySubject, Subscription } from 'rxjs';\r\n\r\nimport { System } from '../../../shared-components/System';\r\nimport { UnsavedChangesGuard } from '../../../shared-components/guards/unsaved-changes/unsaved-changes.guard';\r\nimport { CheckForErrorsGuard } from '../../../shared-components/guards/check-for-errors/check-for-errors.guard';\r\n\r\nimport { ScheduleFolderDTO, ScheduleFolderDetails } from './schedule-folder.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { RolloverValidation } from './rollover-validation.model';\r\n\r\n@Injectable()\r\nexport class ScheduleFolderService {\r\n\r\n // Subscriptions\r\n yearSubscription: Subscription;\r\n\r\n // School folders\r\n private _schoolSchedulingFolders: ScheduleFolderDTO[] = [];\r\n private observableSchoolSchedulingFolders = new ReplaySubject(1);\r\n public observableSchoolSchedulingFoldersStream$ = this.observableSchoolSchedulingFolders.asObservable();\r\n\r\n get schoolSchedulingFolders(): ScheduleFolderDTO[] {\r\n return this._schoolSchedulingFolders;\r\n }\r\n\r\n set schoolSchedulingFolders(value: ScheduleFolderDTO[]) {\r\n this._schoolSchedulingFolders = value;\r\n if (this.selectedScheduleFolder) {\r\n const selectedCopy = this._schoolSchedulingFolders.find(folder =>\r\n folder.ID == this.selectedScheduleFolder.ID\r\n );\r\n if (selectedCopy) {\r\n this.selectedScheduleFolder = selectedCopy;\r\n }\r\n }\r\n this.observableSchoolSchedulingFolders.next(this._schoolSchedulingFolders);\r\n }\r\n\r\n // District Folder\r\n private _districtScheduleFolder: ScheduleFolderDTO;\r\n public observableDistrictScheduleFolder = new ReplaySubject(1);\r\n observableDistrictScheduleFolderStream$ = this.observableDistrictScheduleFolder.asObservable();\r\n\r\n get districtScheduleFolder(): ScheduleFolderDTO {\r\n return this._districtScheduleFolder;\r\n }\r\n\r\n set districtScheduleFolder(value: ScheduleFolderDTO) {\r\n this._districtScheduleFolder = value;\r\n this.observableDistrictScheduleFolder.next(this._districtScheduleFolder);\r\n }\r\n\r\n // Selected Schedule Folder\r\n private _selectedScheduleFolder: ScheduleFolderDTO;\r\n public observableSelectedScheduleFolder = new ReplaySubject(1);\r\n observableSelectedScheduleFolderStream$ = this.observableSelectedScheduleFolder.asObservable();\r\n\r\n get selectedScheduleFolder(): ScheduleFolderDTO {\r\n return this._selectedScheduleFolder;\r\n }\r\n\r\n set selectedScheduleFolder(value: ScheduleFolderDTO) {\r\n this._selectedScheduleFolder = value;\r\n this.observableSelectedScheduleFolder.next(this._selectedScheduleFolder);\r\n }\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private unsavedChangesGuard: UnsavedChangesGuard,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n\r\n // Service Methods\r\n maintainSchoolFolders() {\r\n // POST: updates the folders along with the year\r\n if (!this.yearSubscription) {\r\n this.yearSubscription = this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.resetScheduleFolders();\r\n });\r\n this.resetScheduleFolders();\r\n }\r\n }\r\n\r\n resetScheduleFolders() {\r\n // POST: reobtains the folders and sets the associated properties\r\n\r\n // Obtaining the district folder\r\n this.getDistrictScheduleFolder().subscribe(districtFolder => {\r\n if (districtFolder) {\r\n this.districtScheduleFolder = districtFolder;\r\n } else {\r\n this.districtScheduleFolder = undefined;\r\n }\r\n });\r\n\r\n // Obtaining the school folders\r\n this.getScheduleFolders().subscribe(schoolFolders => {\r\n\r\n // Setting the school folders, while also sorting them\r\n if (schoolFolders && schoolFolders.length > 0) {\r\n this.schoolSchedulingFolders = schoolFolders.sort((a, b) => {\r\n if (a.Type > b.Type) {\r\n return -1;\r\n } else if (b.Type > a.Type) {\r\n return 1;\r\n } else {\r\n if (a.IsDefault && !b.IsDefault) {\r\n return -1;\r\n } else if (b.IsDefault && !a.IsDefault) {\r\n return 1;\r\n } else {\r\n return a.Name.localeCompare(b.Name);\r\n }\r\n }\r\n });\r\n } else {\r\n this.schoolSchedulingFolders = [];\r\n }\r\n\r\n // Setting the selected folder\r\n let newSelectedFolder = this.selectedScheduleFolder;\r\n if (this.schoolSchedulingFolders.length > 0) {\r\n if (newSelectedFolder) {\r\n newSelectedFolder = this.schoolSchedulingFolders.find(schoolFolder => schoolFolder.ID == this.selectedScheduleFolder.ID);\r\n }\r\n if (!newSelectedFolder) {\r\n const defaultSF = this.schoolSchedulingFolders.find(x => x.IsDefault == true);\r\n if (defaultSF) {\r\n newSelectedFolder = defaultSF;\r\n } else {\r\n newSelectedFolder = this.schoolSchedulingFolders[0];\r\n }\r\n }\r\n } else {\r\n newSelectedFolder = undefined;\r\n }\r\n this.selectedScheduleFolder = newSelectedFolder;\r\n });\r\n }\r\n\r\n // Http Methods\r\n getDistrictScheduleFolder(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Counselor + 'GetDistrictScheduleFolder' + queryString)\r\n .pipe(\r\n map(folder => {\r\n folder = System.convert(folder, new ScheduleFolderDTO());\r\n return folder;\r\n })\r\n );\r\n }\r\n\r\n getScheduleFolders(\r\n siteId = this.yearService.defaultYear.SchoolID,\r\n yearId = this.yearService.defaultYear.Id,\r\n allScheduleFolders = false\r\n ): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId + '&allScheduleFolders=' + allScheduleFolders;\r\n return this.http.get(System.apiURL.Counselor + 'GetScheduleFolders' + queryString)\r\n .pipe(\r\n map(folders => {\r\n for (let i = 0; i < folders.length; i++) {\r\n folders[i] = System.convert(folders[i], new ScheduleFolderDTO());\r\n }\r\n return folders;\r\n })\r\n );\r\n }\r\n\r\n getScheduleFolderDetails(siteId: number, yearId: number): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Counselor + 'GetScheduleFolderDetails' + queryString).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.length; i++) {\r\n results[i] = System.convert(results[i], new ScheduleFolderDetails());\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n addEditScheduleFolder(siteId: number, yearId: number, scheduleFolder: ScheduleFolderDTO): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId;\r\n return this.http.post(System.apiURL.Counselor + 'AddEditScheduleFolder' + queryString, scheduleFolder);\r\n }\r\n\r\n copyScheduleFolder(siteId: number, yearId: number, sourceScheduleFolderId: number, newFolderName: string): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId + '&sourceScheduleFolderId=' + sourceScheduleFolderId + '&newFolderName=' + newFolderName;\r\n return this.http.get(System.apiURL.Counselor + 'CopyScheduleFolder' + queryString);\r\n }\r\n\r\n activateScheduleFolder(siteId: number, yearId: number, scheduleFolderId: number): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId + '&scheduleFolderId=' + scheduleFolderId;\r\n return this.http.get(System.apiURL.Counselor + 'ActivateScheduleFolder' + queryString);\r\n }\r\n\r\n deactivateScheduleFolder(siteId: number, yearId: number, scheduleFolderId: number): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId + '&scheduleFolderId=' + scheduleFolderId;\r\n return this.http.get(System.apiURL.Counselor + 'DeactivateScheduleFolder' + queryString);\r\n }\r\n\r\n deleteScheduleFolder(scheduleFolderId: number): Observable {\r\n const queryString = '?scheduleFolderId=' + scheduleFolderId;\r\n return this.http.get(System.apiURL.Counselor + 'DeleteScheduleFolder' + queryString);\r\n }\r\n\r\n rolloverScheduleFolder(scheduleFolderName: string): Observable {\r\n const queryString = '?siteYearId=' + (this.loginService.LoginSettings.V10 ? this.yearService.defaultYear.Id : this.yearService.defaultYear.SiteYearId)\r\n + '&folderName=' + scheduleFolderName;\r\n return this.http.get(System.apiURL.Counselor + 'RolloverScheduleFolder' + queryString);\r\n }\r\n\r\n isClassicFolderActive(yearId, siteId): Observable {\r\n const queryString = '?yearId=' + yearId + '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.Counselor + 'IsClassicFolderActive' + queryString);\r\n }\r\n}\r\n","import {DayTypeDTO, PeriodDTO} from '../bell-schedule/models/bell-schedule.model';\r\nimport {Term} from '../shared/models/term.model';\r\nimport {ScheduleSection} from './schedule-section.model';\r\nimport {CourseLink} from './course-link.model';\r\nimport {SectionLink} from './section-link.model';\r\nimport {SchedulingSettingsDTO} from '../shared/scheduling-settings/scheduling.settings.model';\r\nimport {ScheduleTeacher} from '../schedule-teacher.model';\r\n\r\nexport class ScheduleSlot {\r\n\r\n // Static Properties\r\n public static Displays = {\r\n Period: 'Period Label',\r\n Day: 'Day',\r\n Term: 'Term'\r\n };\r\n\r\n // Slot Properties\r\n SlotName: string;\r\n\r\n // Reference Properties\r\n periods: PeriodDTO[] = [];\r\n dayType: DayTypeDTO;\r\n term: Term;\r\n scheduledSection: ScheduleSection;\r\n greyedOut: boolean;\r\n scrollTo = false;\r\n changed = false;\r\n topActionMenuItems: string[] = [];\r\n bottomActionMenuItems: string[] = [];\r\n courseCount: number;\r\n\r\n // Constructor\r\n constructor(periods: PeriodDTO[], dayType: DayTypeDTO, term: Term, order: string[]) {\r\n\r\n // Setting internal properties\r\n this.periods = periods;\r\n if (!this.periods) {\r\n this.periods = [];\r\n }\r\n this.dayType = dayType;\r\n this.term = term;\r\n this.greyedOut = false;\r\n\r\n // Setting the slot name\r\n const periodName = this.periods.length > 0 ? this.periods[0].PeriodName : '';\r\n const dayName = this.dayType ? this.dayType.DayName : (this.periods.length > 0 ? this.periods[0].DayTypeName : '');\r\n const termName = this.term ? this.term.ShortDescription : '';\r\n\r\n // Setting the slot name\r\n this.SlotName = '';\r\n const appendName = (name: string) => {\r\n if (name) {\r\n if (this.SlotName) {\r\n this.SlotName += ' - ';\r\n }\r\n this.SlotName += name;\r\n }\r\n };\r\n order.forEach(type => {\r\n switch (type) {\r\n case ScheduleSlot.Displays.Period:\r\n appendName(periodName);\r\n break;\r\n\r\n case ScheduleSlot.Displays.Day:\r\n appendName(dayName);\r\n break;\r\n\r\n case ScheduleSlot.Displays.Term:\r\n appendName(termName);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n get ClassName(): string {\r\n return this.scheduledSection ? this.scheduledSection.ClassName : null;\r\n }\r\n\r\n get StudentsInSlot(): number {\r\n return this.scheduledSection ? this.scheduledSection.StudentsAssignedToSection : null;\r\n }\r\n\r\n get SeatsInSlot(): number {\r\n return this.scheduledSection ? this.scheduledSection.MaxSeatsOfSection : null;\r\n }\r\n\r\n get TeacherNames(): string {\r\n return this.scheduledSection ? this.scheduledSection.teacherNames : null;\r\n }\r\n\r\n get RoomName(): string {\r\n return this.scheduledSection ? this.scheduledSection.ClassRoomName : null;\r\n }\r\n\r\n get MeetingPatternName(): string {\r\n return this.scheduledSection ? this.scheduledSection.MeetingPatternName : null;\r\n }\r\n\r\n get TermName(): string {\r\n return this.scheduledSection ? this.scheduledSection.TermName : null;\r\n }\r\n\r\n get Start(): Date {\r\n return this.scheduledSection ? this.scheduledSection.StartDate : null;\r\n }\r\n\r\n set Start(date: Date) {\r\n if (this.scheduledSection) {\r\n this.scheduledSection.StartDate = date;\r\n }\r\n }\r\n\r\n get End(): Date {\r\n return this.scheduledSection ? this.scheduledSection.EndDate : null;\r\n }\r\n\r\n set End(date: Date) {\r\n if (this.scheduledSection) {\r\n this.scheduledSection.EndDate = date;\r\n }\r\n }\r\n\r\n get SubjectArea(): string {\r\n return this.scheduledSection ? this.scheduledSection.SubjectArea : null;\r\n }\r\n\r\n get Department(): string {\r\n return this.scheduledSection ? this.scheduledSection.Department : null;\r\n }\r\n\r\n get CreditCode(): string {\r\n return this.scheduledSection ? this.scheduledSection.CreditCode : null;\r\n }\r\n\r\n get SectionLinks(): SectionLink[] {\r\n return this.scheduledSection ? this.scheduledSection.SectionLinks : [];\r\n }\r\n\r\n get CourseLinks(): CourseLink[] {\r\n return this.scheduledSection ? this.scheduledSection.CourseLinks : [];\r\n }\r\n\r\n get CourseSection(): string {\r\n return this.scheduledSection ? this.scheduledSection.courseSection : '';\r\n }\r\n\r\n get CourseLinkConcatenated(): string {\r\n let concatenatedString = '';\r\n for (let i = 0; i < this.CourseLinks.length; i++) {\r\n if (concatenatedString.length > 0) {\r\n concatenatedString += ',';\r\n }\r\n concatenatedString += this.CourseLinks[i].Name;\r\n }\r\n return concatenatedString;\r\n }\r\n\r\n get SectionLinkConcatenated(): string {\r\n let concatenatedString = '';\r\n for (let i = 0; i < this.SectionLinks.length; i++) {\r\n if (concatenatedString.length > 0) {\r\n concatenatedString += ',';\r\n }\r\n concatenatedString += this.SectionLinks[i].Name;\r\n }\r\n return concatenatedString;\r\n }\r\n\r\n get teacherDisplayString(): string {\r\n return this.scheduledSection ? this.scheduledSection.teacherDisplayString : '';\r\n }\r\n\r\n get WithdrawalCode(): string {\r\n return this.scheduledSection ? this.scheduledSection.WithdrawalCode : '';\r\n }\r\n\r\n set WithdrawalCode(code: string) {\r\n if (this.scheduledSection) {\r\n this.scheduledSection.WithdrawalCode = code;\r\n }\r\n }\r\n\r\n // Methods\r\n setScheduleSection(section: ScheduleSection, schedulingSettings: SchedulingSettingsDTO) {\r\n // PRE: a section to set to the slot\r\n // POST: sets the internal data from the section to the slot\r\n this.scheduledSection = section;\r\n this.scheduledSection.getCourseSection(schedulingSettings);\r\n if (section != null && section.WithdrawalCode != null) {\r\n this.greyedOut = true;\r\n }\r\n }\r\n\r\n getTeachersDisplayString(teachers: ScheduleTeacher[]) {\r\n // POST: obtains the teachers that should display for the scheduleClass\r\n if (this.scheduledSection) {\r\n this.scheduledSection.getTeachersDisplayString(teachers);\r\n }\r\n return this.teacherDisplayString;\r\n }\r\n}\r\n","export enum StaffHealthTabsIndex {\r\n StaffMedicalConditions,\r\n StaffHealthVisitLog\r\n}\r\n\r\nexport class StaffMedicalCondition {\r\n Id: number;\r\n DateConditionStarted: Date;\r\n DateConditionEnded: Date;\r\n GenerateAlert: boolean;\r\n NonNurseViewable: boolean;\r\n MedicalConditionCodeId: number;\r\n Comment: string;\r\n MedicalConditionCode: string;\r\n MedicalConditionDescription: string;\r\n Note: string;\r\n}\r\n\r\nexport class StaffHealthVisitLog {\r\n Id: number;\r\n DateVisit: Date;\r\n DOHSurveillanceId: number;\r\n Reason: string;\r\n TimeIn: string;\r\n TimeOut: string;\r\n CallMadeTo: string;\r\n InjuryMajor: boolean;\r\n InjuryMinor: boolean;\r\n Referral: boolean;\r\n Report: boolean;\r\n Illness: boolean;\r\n EMSCall: boolean;\r\n Treated: boolean;\r\n NoticeSent: boolean;\r\n AEDUsed: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n Temperature: number;\r\n UserName: string;\r\n ICD9: string;\r\n EvaluationOfClinicVisit: string;\r\n Comments: string;\r\n Glucose: string;\r\n Units: string;\r\n Carb: string;\r\n BloodPressure: string;\r\n OnDutyUserId: number;\r\n SelectedCodeTreatmentIds: string;\r\n DateReferralReturned: Date;\r\n ClinicVisitLogCodeId: number;\r\n Site: string;\r\n LastUpdatedByUserName: string;\r\n LastUpdatedDate: Date;\r\n NatureOfInjuryId: number;\r\n TimePeriodOfInjuryId: number;\r\n LocationOfInjuryId: number;\r\n Pulse: string;\r\n Respiration: string;\r\n SpO2: string;\r\n\r\n // Non DTO Field //\r\n TreatmentIds: string [] = [];\r\n selectedTreatments: string;\r\n}\r\n\r\nexport class ClinicVisitLogCodes {\r\n ClinicVisitCodeId: number;\r\n ClinicVisitCode: string;\r\n ClinicVisitCodeDescription: string;\r\n ClinicVisitDescription: string;\r\n}\r\n\r\nexport class MedicalUsers {\r\n OnDutyUserId: number;\r\n UserName: string;\r\n OnDutyUserFullName: string;\r\n}\r\n\r\nexport class MedicalCodeTreatment {\r\n Id: number;\r\n Code: string;\r\n Description: string;\r\n SequenceNumber: number;\r\n Inactive: boolean;\r\n}\r\n","\r\nexport class ProgramServiceConfig {\r\n Id = 0;\r\n Code: string;\r\n Description: string;\r\n Sequence = 0;\r\n SystemProgram = false;\r\n PermissionsCategory = '';\r\n DisplayToParents = false;\r\n DisplayToStudents = false;\r\n ProgramServices: Services[];\r\n HasAlert = false;\r\n IsInActive = false;\r\n UserHasViewPermission = false;\r\n UserHasEditPermission = false;\r\n UserHasDeletePermission = false;\r\n}\r\n\r\nexport class Services {\r\n Id = 0;\r\n Code: string;\r\n Description: string;\r\n ProgramCodeId: number;\r\n Sequence: number;\r\n SystemService = false;\r\n ImageName = '';\r\n ImageData = '';\r\n TrackServiceImport = 0;\r\n StateCode = '';\r\n Inactive = false;\r\n ServiceFields: ServiceFields[];\r\n\r\n // Local Property\r\n IsEdited = false;\r\n}\r\n\r\nexport class ServiceFields {\r\n Id = 0;\r\n Name: string;\r\n Description: string;\r\n TypeId = 0;\r\n Type: string;\r\n Length = 0;\r\n Decimals = 0;\r\n Sequence: number;\r\n ServiceCodeId: number;\r\n ProgramServiceField = ''; // Name of Column in ProgramServiceCode table, associated for the Custom Fields\r\n Match = false; // Use this field in where cluase while import\r\n FieldLookups: FieldLookups[] = [];\r\n\r\n // Local property\r\n StrAlphaNumericLength = '';\r\n StrNumericLength = '';\r\n StrNumericDecimals = '';\r\n}\r\n\r\nexport class FieldLookups {\r\n Id = 0;\r\n ServiceFieldId: number;\r\n Code: string;\r\n Description = '';\r\n Inactive = false;\r\n Sequence = 0;\r\n FieldName = '';\r\n // Local Properties\r\n Edit = false;\r\n}\r\n\r\nexport class ImportFile {\r\n Data = '';\r\n Name = '';\r\n Type = 'text/xml';\r\n ProgramDescription = '';\r\n ImportOption = 0;\r\n}\r\n\r\nexport class ImportData {\r\n YearId: number;\r\n SiteId: number;\r\n File: string;\r\n FileName: string;\r\n MatchIdOption: number;\r\n ProgramServiceOverrideSetting: boolean;\r\n ProgramServerOverrideOption: number;\r\n}\r\n\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { GradeLevelLookup } from '../../../shared-components/lookup/grade-level-lookup.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { EmailNotification } from './models/email-notification.model';\r\nimport { ParentPortalConfigurationLinks } from './models/parent-portal-configuration-links.model';\r\nimport { OtherAssociatedStudents, ParentStudentPortalDataAreas, PortalDataAreas, PortalDataAreasBlocked, PortalDataAreasSchoolStatus } from './models/portal-data-areas.model';\r\nimport { PortalFamilyDataFields } from './models/portal-family-data-fields.model';\r\nimport { PortalGeneralSettings } from './models/portal-general-settings.model';\r\nimport { StudentLoginSettings } from './models/student-login-settings.model';\r\nimport { UserDefinedFieldsForOnlineReg } from './models/user-defined-fields-for-online-reg.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ParentStudentPortalSettingsService {\r\n\r\n studentLoginSettings: StudentLoginSettings;\r\n userDefinedFieldsForOnlineReg: UserDefinedFieldsForOnlineReg[] = [];\r\n portalDataAreas: PortalDataAreas[] = [];\r\n parentStudentPortalDataAreas: ParentStudentPortalDataAreas[] = [];\r\n portalGeneralSettings: PortalGeneralSettings;\r\n portalFamilyDataFields: PortalFamilyDataFields;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n ) { }\r\n\r\n initialize() {\r\n this.studentLoginSettings = null;\r\n this.userDefinedFieldsForOnlineReg = [];\r\n this.portalDataAreas = [];\r\n this.portalGeneralSettings = null;\r\n this.portalFamilyDataFields = null;\r\n }\r\n\r\n getStudentLoginSettings(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetStudentLoginSettings');\r\n }\r\n\r\n saveStudentLoginSettings(data: StudentLoginSettings) {\r\n return this.http.post(System.apiURL.Management + 'SaveStudentLoginSettings', data);\r\n }\r\n\r\n getUserDefinedFieldsForOnlineReg(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetUserDefinedFieldsForOnlineReg');\r\n }\r\n\r\n saveUserDefinedFieldsForOnlineReg(userDefinedFields: UserDefinedFieldsForOnlineReg[]) {\r\n return this.http.post(System.apiURL.Management + 'SaveUserDefinedFieldsForOnlineReg', userDefinedFields);\r\n }\r\n\r\n getParentPortalLinks(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetParentPortalLinks');\r\n }\r\n\r\n deleteParentPortalLinks(linkId: number): Observable {\r\n const queryString = '?linkId=' + linkId;\r\n return this.http.get(System.apiURL.Management + 'DeleteParentPortalLinks' + queryString);\r\n }\r\n\r\n getPortalDataAreas(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetPortalDataAreas');\r\n }\r\n\r\n savePortalDataAreas(portalDataAreas: PortalDataAreas[]) {\r\n return this.http.post(System.apiURL.Management + 'SavePortalDataAreas', portalDataAreas);\r\n }\r\n\r\n getPortalDataAreasSchoolStatus(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetPortalDataAreasSchoolStatus' + queryString);\r\n }\r\n\r\n getParentStudentPortalDataAreas(schoolId: number): Observable {\r\n const queryString = '?schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Management + 'GetParentStudentPortalDataAreas' + queryString);\r\n }\r\n\r\n getSchoolOverrideDistrictPortalDataAreas(schoolId: number): Observable {\r\n const queryString = '?schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Management + 'GetSchoolOverrideDistrictPortalDataAreas' + queryString);\r\n }\r\n\r\n saveParentStudentPortalDataAreas(schoolId: number, parentStudentPortalDataAreas: ParentStudentPortalDataAreas[]) {\r\n const queryString = '?schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Management + 'SaveParentStudentPortalDataAreas' + queryString, parentStudentPortalDataAreas);\r\n }\r\n\r\n deleteParentStudentPortalDataAreas(schoolId: number) {\r\n const queryString = '?schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Management + 'DeleteParentStudentPortalDataAreas' + queryString);\r\n }\r\n\r\n getPortalEmailNotification(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetPortalEmailNotification');\r\n }\r\n\r\n savePortalEmailNotification(emailNotification: EmailNotification) {\r\n return this.http.post(System.apiURL.Management + 'SavePortalEmailNotification', emailNotification);\r\n }\r\n\r\n getPortalGeneralSettings(schoolId: number, yearId: number): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetPortalGeneralSettings' + queryString);\r\n }\r\n\r\n savePortalGeneralSettings(portalGeneralSettings: PortalGeneralSettings) {\r\n return this.http.post(System.apiURL.Management + 'SavePortalGeneralSettings', portalGeneralSettings);\r\n }\r\n\r\n getImageData(imageName: string): Observable {\r\n const queryString = '?imageName=' + imageName;\r\n return this.http.get(System.apiURL.Management + 'GetImageData' + queryString);\r\n }\r\n\r\n saveParentPortalLink(link: ParentPortalConfigurationLinks) {\r\n return this.http.post(System.apiURL.Management + 'SaveParentPortalLink', link);\r\n }\r\n\r\n getPortalFamilyDataFields(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetPortalFamilyDataFields');\r\n }\r\n\r\n savePortalFamilyDataFields(portalFamilyDataFields: PortalFamilyDataFields) {\r\n return this.http.post(System.apiURL.Management + 'SavePortalFamilyDataFields', portalFamilyDataFields);\r\n }\r\n\r\n getPortalDataAreasBlocked(peopledId: number): Observable {\r\n const queryString = '?peopleId=' + peopledId;\r\n return this.http.get(System.apiURL.Management + 'GetPortalDataAreasBlocked' + queryString);\r\n }\r\n\r\n savePortalDataAreasBlocked(portalDataAreasBlocked: PortalDataAreasBlocked[]) {\r\n return this.http.post(System.apiURL.Management + 'SavePortalDataAreasBlocked', portalDataAreasBlocked);\r\n }\r\n\r\n getAssociatedStudents(userName: string, familyId: number): Observable {\r\n const queryString = '?userName=' + userName +\r\n '&familyId=' + familyId;\r\n return this.http.get(System.apiURL.Management + 'GetOtherAssociatedStudents' + queryString);\r\n }\r\n}","\r\n

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

\r\n\r\n

WARNING

\r\n\r\n\r\n\r\n {{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
","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ProgramAndServiceService } from '../program-and-service.service';\r\nimport { ProgramAndService } from '../../../student360/programs-and-services/programs-and-services.model';\r\n\r\n@Component({\r\n selector: 'app-delete-program-service-dialog',\r\n templateUrl: './delete-program-service-dialog.component.html',\r\n styleUrls: ['./delete-program-service-dialog.component.css']\r\n})\r\nexport class DeleteProgramServiceDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n id: number;\r\n programAndServices: ProgramAndService[] = [];\r\n type = '';\r\n title: string;\r\n message: string;\r\n\r\n // Local Properties\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private programsAndServicesService: ProgramAndServiceService,\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n if (this.data) {\r\n if (this.data.id) {\r\n this.id = this.data.id;\r\n }\r\n if (this.data.programAndServices) {\r\n this.programAndServices = this.data.programAndServices;\r\n }\r\n this.type = this.data.type;\r\n this.title = this.data.title;\r\n this.message = this.data.message;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n OK() {\r\n // PRE: the OK button is clicked\r\n // POST: deletes the program code, service code and field and closes the dialog\r\n if (this.type == 'delete') {\r\n this.subscriptions.push(\r\n // Delete program code\r\n this.programsAndServicesService.deleteProgramService(this.id).subscribe(res => {\r\n if (res) {\r\n this.dialogBox.close(true);\r\n }\r\n })\r\n );\r\n }\r\n else if (this.type == 'mass-delete') {\r\n\r\n this.subscriptions.push(\r\n // Delete program code\r\n this.programsAndServicesService.massDeleteProgramService(this.programAndServices).subscribe(res => {\r\n if (res != null && res == 'Successful') {\r\n this.dialogBox.close(true);\r\n }\r\n else {\r\n this.message = res;\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog\r\n this.dialogBox.close(false);\r\n }\r\n}\r\n\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { ProgramAndServiceDetail } from '../../student360/programs-and-services/programs-and-services-detail.model';\r\nimport { ProgramAndService } from '../../student360/programs-and-services/programs-and-services.model';\r\nimport { ImportData, ProgramServiceConfig } from '../district/models/program-service.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProgramAndServiceService {\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n ) {\r\n }\r\n\r\n // Event Functions\r\n\r\n // Methods\r\n getProgramsAndServices(studentId: number, yearId: number, siteYearId: number, viewOption: number = 0, forWithdrawalOptions: boolean = false) {\r\n // POST: obtains the programs and services for the student in the selected year\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&siteYearId=' + siteYearId +\r\n '&viewOption=' + viewOption +\r\n '&forWithdrawalOptions=' + forWithdrawalOptions;\r\n return this.http.get(System.apiURL.Student + 'GetProgramAndServices' + queryString);\r\n }\r\n\r\n // Methods\r\n // getProgramCodeLookup() {\r\n // // POST: obtains the program code lookup data\r\n // const queryString = '?yearId=' + this.yearService.student360Year.Id;\r\n // return this.http.get(System.apiURL.Admin + 'GetProgramCodeLookups' + queryString);\r\n // }\r\n\r\n // getServiceCodeLookup(programCodeId: number) {\r\n // // POST: obtains the service code lookup data\r\n // const queryString = '?programCodeId=' + programCodeId;\r\n // return this.http.get(System.apiURL.Admin + 'GetProgramServiceCodeLookups' + queryString);\r\n // }\r\n\r\n getServiceDetailByServiceCodeId(programServiceCodeId: number, programServiceId: number = 0) {\r\n // POST: obtains the field by serviceCodeId\r\n const queryString = '?servicesCodeId=' + programServiceCodeId + '&programServiceId=' + programServiceId;\r\n return this.http.get(System.apiURL.Student + 'GetProgramAndServicesDetailByServiceCodeId' + queryString);\r\n }\r\n\r\n // Save Program Codes\r\n saveProgramAndService(studentId: number, program: ProgramAndService): Observable {\r\n // PRE: a program to add\r\n // POST: adds that program to the server which returns boolean\r\n if (program.EntryDate != null && (program.EntryDate.toString() == System.junkDate.toString())) {\r\n program.EntryDate = null;\r\n }\r\n if (program.ExitDate != null && (program.ExitDate.toString() == System.junkDate.toString())) {\r\n program.ExitDate = null;\r\n }\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'SaveProgramAndService' + queryString, program);\r\n }\r\n\r\n // Delete Program Service\r\n deleteProgramService(programServiceId: number): Observable {\r\n // PRE: a programservice to delete\r\n // POST: delete programservice from server\r\n const queryString = '?programServiceId=' + programServiceId;\r\n return this.http.get(System.apiURL.Student + 'DeleteProgramService' + queryString);\r\n }\r\n\r\n // Mass Delete Program Service\r\n massDeleteProgramService(programAndServices: ProgramAndService[]): Observable {\r\n // PRE: programservices to delete\r\n // POST: delete programservices from server\r\n return this.http.post(System.apiURL.Student + 'MassDeleteProgramService', programAndServices);\r\n }\r\n\r\n getProgramsAndServiceForMassUpdate(schoolId: number, yearId: number, programCodeId: number, serviceCodeId: number, status: number = 1) {\r\n // POST: obtains the programs and services for the student in the selected year\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&programCodeId=' + programCodeId +\r\n '&serviceCodeId=' + serviceCodeId +\r\n '&status=' + status;\r\n return this.http.get(System.apiURL.Student + 'GetProgramAndServiceForMassUpdate' + queryString);\r\n }\r\n\r\n massAddProgramAndService(program: ProgramAndService): Observable {\r\n // PRE: a program to add with multipple student\r\n // POST: adds that program to the server which returns string\r\n if (program.EntryDate != null && (program.EntryDate.toString() == System.junkDate.toString())) {\r\n program.EntryDate = null;\r\n }\r\n if (program.ExitDate != null && (program.ExitDate.toString() == System.junkDate.toString())) {\r\n program.ExitDate = null;\r\n }\r\n return this.http.post(System.apiURL.Student + 'MassAddProgramAndService', program);\r\n }\r\n\r\n massEditProgramAndService(programs: ProgramAndService[]): Observable {\r\n // PRE: Mass update program and service\r\n // POST: updates that program to the server which returns string\r\n programs.forEach(ps => {\r\n if (ps.EntryDate != null && (ps.EntryDate.toString() == System.junkDate.toString())) {\r\n ps.EntryDate = null;\r\n }\r\n if (ps.ExitDate != null && (ps.ExitDate.toString() == System.junkDate.toString())) {\r\n ps.ExitDate = null;\r\n }\r\n });\r\n return this.http.post(System.apiURL.Student + 'MassEditProgramAndService', programs);\r\n }\r\n\r\n getInvalidStudentForSelectedProgramAndServiceCode(programAndService: ProgramAndService) {\r\n // POST: obtains the list of invalid student in selected program and services\r\n if (programAndService.EntryDate != null && (programAndService.EntryDate.toString() == System.junkDate.toString())) {\r\n programAndService.EntryDate = null;\r\n }\r\n if (programAndService.ExitDate != null && (programAndService.ExitDate.toString() == System.junkDate.toString())) {\r\n programAndService.ExitDate = null;\r\n }\r\n return this.http.post(System.apiURL.Student + 'GetInvalidStudentForSelectedProgramAndServiceCode', programAndService);\r\n }\r\n\r\n // Delete Program Service\r\n importStudentProgramAndServices(yearId: number, siteId: number, file: string, fileName: string, matchIdOption: number, programServiceOverrideSetting: boolean, programServerOverrideOption: number): Observable {\r\n // PRE: a programservice to delete\r\n // POST: delete programservice from server\r\n // const queryString = '?yearId=' + yearId +\r\n // '&siteId=' + siteId +\r\n // '&file=' + file +\r\n // '&fileName=' + fileName +\r\n // '&matchIdOption=' + matchIdOption +\r\n // '&programServiceOverrideSetting=' + programServiceOverrideSetting +\r\n // '&programServerOverrideOption=' + programServerOverrideOption;\r\n // return this.http.get(System.apiURL.Student + 'ImportStudentProgramAndService' + queryString);\r\n\r\n const headers = new HttpHeaders();\r\n const options = { headers: headers };\r\n\r\n const importData = new ImportData();\r\n importData.YearId = yearId;\r\n importData.SiteId = siteId;\r\n importData.File = file;\r\n importData.FileName = fileName;\r\n importData.MatchIdOption = matchIdOption;\r\n importData.ProgramServiceOverrideSetting = programServiceOverrideSetting;\r\n importData.ProgramServerOverrideOption = programServerOverrideOption;\r\n return this.http.post(System.apiURL.Student + 'ImportStudentProgramAndService', importData, options);\r\n }\r\n\r\n getProgramServiceCodesByUserId(yearId: number, schoolId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n\r\n return this.http.get(System.apiURL.Management + 'GetProgramServiceCodesByUserId' + queryString);\r\n }\r\n}\r\n","import { FieldLookups } from '../../management360/district/models/program-service.model';\r\n\r\nexport class ProgramAndServiceDetail {\r\n\tFieldName: string;\r\n\tFieldValue: string;\r\n\tId: number;\r\n\tSequence: number;\r\n\tProgramServiceField = '';\r\n\tFieldType = 0;\r\n\tFieldLookupValues: FieldLookups[] = [];\r\n\tFieldValueId: number;\r\n\tFieldId = 0;\r\n\tFieldLength = 0;\r\n\tFieldDecimal = 0;\r\n\tFieldLengthString = '';\r\n\t// NON DTO\r\n\tCellBackGroungColor = '';\r\n\tOldFieldValue = '';\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { Student } from '../../../../shared-components/student/student.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ProgramAndServiceService } from '../../program-and-service.service';\r\n\r\n@Component({\r\n selector: 'app-invalid-selection-dialog',\r\n templateUrl: './invalid-selection-dialog.component.html',\r\n styleUrls: ['./invalid-selection-dialog.component.css']\r\n})\r\nexport class InvalidSelectionDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n invalidStudent: Student[] = [];\r\n\r\n // Local Properties\r\n message = '';\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private programAndServiceService: ProgramAndServiceService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n if (this.data) {\r\n if (this.data.invalidStudent) {\r\n this.invalidStudent = this.data.invalidStudent;\r\n this.prepareMessage();\r\n }\r\n }\r\n }\r\n\r\n prepareMessage() {\r\n if (this.invalidStudent.length > 0) {\r\n this.invalidStudent.forEach(s => {\r\n this.message += s.LastName + ', ' + s.FirstName + '\\n';\r\n });\r\n if (this.message.length > 0) {\r\n this.message = this.message + '\\n';\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n continue(choice: number) {\r\n // PRE: the Continue button is clicked\r\n // POST: continue to load landing page and closes the dialog\r\n this.dialogBox.close(choice);\r\n }\r\n\r\n back(choice: number) {\r\n // PRE: the back button is clicked\r\n // POST: closes the dialog and render the add/edit program and service page\r\n this.dialogBox.close(choice);\r\n }\r\n}\r\n\r\n","\r\n

\r\n INVALID SELECTION\r\n

\r\n\r\n\r\n\r\n
\r\n The following students already have this program/service:\r\n
\r\n
\r\n {{message}}\r\n
\r\n
\r\n Either go back to select a different program/service or continue and delete the student to remove program/service.\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
","\r\n \r\n\r\n \r\n\r\n\r\n\r\n 12 ? (field.FieldName.length*12 + 'px') : '130px'}\">\r\n \r\n \r\n\r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n {{lk.Code}} - {{lk.Description}} \r\n \r\n\r\n\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { ProgramAndServiceDetail } from '../../student360/programs-and-services/programs-and-services-detail.model';\r\n\r\n@Component({\r\n selector: 'program-and-service-fields',\r\n templateUrl: './program-and-service-fields.component.html',\r\n styleUrls: ['./program-and-service-fields.component.css']\r\n})\r\nexport class ProgramAndServiceFieldsComponent implements OnInit {\r\n\r\n @Input() field: ProgramAndServiceDetail;\r\n fieldLengthString = '200';\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n this.fieldLengthString = this.field.FieldLength.toString();\r\n }\r\n\r\n getLength(fieldLength) {\r\n if (!fieldLength || fieldLength == 1) {\r\n return 9;\r\n }\r\n else {\r\n let fieldLengthValue = '9';\r\n for (let i = 2; i <= fieldLength; i++) {\r\n fieldLengthValue = fieldLengthValue + '9';\r\n }\r\n return Number(fieldLengthValue);\r\n }\r\n }\r\n}\r\n","\r\n

\r\n \r\n {{header|translate}}\r\n \r\n \r\n {{header|translate}}\r\n \r\n \r\n {{showSteps|translate}}\r\n \r\n\r\n\r\n

\r\n\r\n\r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{pc.Code}}-{{pc.Description}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{sc.Code}}-{{sc.Description}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n Service-Specific Fields\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
Attachments
\r\n \r\n \r\n \r\n File\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {{element.AttachmentDescription}}\r\n \r\n
\r\n {{element.AttachmentFileName}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Uploaded\r\n {{element.AttachmentAddedOn | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n Uploaded By\r\n \r\n {{element.AttachmentAddedBy}}\r\n \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n
\r\n \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, ElementRef, EventEmitter, Inject, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { AddAttachmentDialogComponent } from '../../../../shared-components/add-attachment-dialog/add-attachment-dialog.component';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { Attachment } from '../../../../shared-components/models/attachment.model';\r\nimport { ProfileService } from '../../../../shared-components/profile-table/profile.service';\r\nimport { SharedService } from '../../../../shared-components/shared.service';\r\nimport { Student } from '../../../../shared-components/student/student.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { ProgramAndServiceDetail } from '../../../../student360/programs-and-services/programs-and-services-detail.model';\r\nimport { ProgramAndService } from '../../../../student360/programs-and-services/programs-and-services.model';\r\nimport { ProgramServiceConfig, Services } from '../../../district/models/program-service.model';\r\nimport { ProgramAndServiceService } from '../../program-and-service.service';\r\nimport { InvalidSelectionDialogComponent } from '../invalid-selection-dialog/invalid-selection-dialog.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-add-edit-program-service-single-student',\r\n templateUrl: './add-edit-program-service-single-student.component.html',\r\n styleUrls: ['./add-edit-program-service-single-student.component.css']\r\n})\r\nexport class AddEditProgramServiceSingleStudentComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n header = 'Edit Program/Services';\r\n programAndService: ProgramAndService;\r\n addProgram: boolean;\r\n junkDateString = System.junkDateString;\r\n type = '';\r\n massEditProgramAndServices: ProgramAndService[] = [];\r\n // Local Properties\r\n selectedProgramCode: ProgramServiceConfig;\r\n selectedServiceCodeId: number;\r\n programCodes: ProgramServiceConfig[] = [];\r\n serviceCodes: Services[] = [];\r\n serviceFields: ProgramAndServiceDetail[] = [];\r\n originalProgram = new ProgramAndService();\r\n subscriptions: Subscription[] = [];\r\n errors: ErrorList[] = [];\r\n userCanEditPrograms = true;\r\n studentId = 0;\r\n invalidStudent: Student[] = [];\r\n selectedStudents: any;\r\n steps: boolean;\r\n showSteps = '';\r\n readOnly: boolean = false;\r\n @Input() okButtonLabel = 'Save';\r\n @Input() okButtonImage = 'save.png';\r\n @Input() backButtonLabel = 'Back';\r\n @Input() backButtonImage = 'previous arrow.png';\r\n @Output() previousEventaction = new EventEmitter();\r\n @Output() confirmEventAction = new EventEmitter();\r\n\r\n // Attachement properties\r\n dataSource: MatTableDataSource = new MatTableDataSource();\r\n displayedColumns = ['Description', 'UploadedOn', 'UploadedBy', 'Actions'];\r\n\r\n // View Properties\r\n @ViewChild('validationTrigger', { static: true }) validationTrigger: ElementRef;\r\n @ViewChild('programCodeField', { read: ElementRef }) programCodeField: ElementRef;\r\n @ViewChild('serviceCodeField', { read: ElementRef }) serviceCodeField: ElementRef;\r\n @ViewChild('entryDateField', { read: ElementRef }) entryDateField: ElementRef;\r\n confirmback = false;\r\n\r\n // Class Function\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n private programsAndServicesService: ProgramAndServiceService,\r\n private userService: UserService,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n // Getting injected data\r\n if (this.data) {\r\n this.studentId = this.data.studentId ? this.data.studentId : 0;\r\n this.addProgram = this.data.addProgram;\r\n this.programCodes = _.cloneDeep(this.data.programCodes);\r\n this.programAndService = this.data.programAndService;\r\n this.selectedStudents = this.data.selectedStudents;\r\n this.showSteps = this.data.showSteps;\r\n this.steps = this.data.steps;\r\n\r\n if (this.addProgram) {\r\n this.header = 'Add Program/Services';\r\n }\r\n else {\r\n this.header = 'Edit Program/Services';\r\n }\r\n\r\n // Filter out Active program code with history\r\n this.programCodes = this.programCodes.filter(x => x.IsInActive == false);\r\n if (!this.addProgram) {\r\n if (this.programAndService.ProgramCodeId > 0) {\r\n const selectedProgCode = this.data.programCodes.filter(p => p.Id == this.programAndService.ProgramCodeId.toString());\r\n if (selectedProgCode && selectedProgCode.length > 0) {\r\n if (!this.programCodes.find(p => p.Id == selectedProgCode[0].Id)) {\r\n this.programCodes.push(selectedProgCode[0]);\r\n this.programCodes = _.sortBy(this.programCodes, p => p.Code.toLowerCase() + '-' + p.Description.toLowerCase());\r\n }\r\n }\r\n }\r\n }\r\n if (this.data.type) {\r\n this.type = this.data.type;\r\n }\r\n if (this.data.massEditProgramAndServices && this.data.massEditProgramAndServices.length > 0) {\r\n this.massEditProgramAndServices = this.data.massEditProgramAndServices;\r\n }\r\n\r\n if (this.showSteps == null) {\r\n this.steps = false;\r\n }\r\n else {\r\n this.steps = true;\r\n }\r\n\r\n this.getProgramServiceCodesByUserId();\r\n\r\n\r\n // Intialize the values\r\n if (!this.programAndService.Attachments) {\r\n this.programAndService.Attachments = [];\r\n }\r\n if (this.programAndService.EntryDate && this.programAndService.EntryDate.toString() == System.junkDate.toString()) {\r\n this.programAndService.EntryDate = null;\r\n }\r\n if (this.programAndService.ExitDate && this.programAndService.ExitDate.toString() == System.junkDate.toString()) {\r\n this.programAndService.ExitDate = null;\r\n }\r\n\r\n // Setting up the local data\r\n Object.assign(this.originalProgram, this.programAndService);\r\n this.dataSource.data = this.programAndService.Attachments;\r\n this.dataSource.filterPredicate = (data: Attachment, filter: string) => (data.Deleted == null || data.Deleted == false);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n getProgramServiceCodesByUserId() {\r\n this.programsAndServicesService.getProgramServiceCodesByUserId(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(result => {\r\n this.programCodes = result.filter(o => o.UserHasEditPermission == true);\r\n\r\n if (this.programAndService.ProgramCodeId != null && this.programAndService.ProgramCodeId > 0) {\r\n this.selectedProgramCode = this.programCodes.find(o => o.Id == this.programAndService.ProgramCodeId || o.Code == this.programAndService.ProgramCodeId.toString());\r\n this.onProgramCodeChange(true);\r\n }\r\n });\r\n }\r\n\r\n backClick() {\r\n if (this.confirmback == true) {\r\n const ps = this.data.programAndService;\r\n const service = this.serviceCodes.filter(o => o.Id == this.selectedServiceCodeId)[0];\r\n const programcode = this.selectedProgramCode ? this.selectedProgramCode.Code : '';\r\n const serviceCode = service ? service.Code : '';\r\n const selectedprog = this.selectedProgramCode ? this.selectedProgramCode.Code + '-' + this.selectedProgramCode.Description : '';\r\n const selectedser = service ? service.Code + '-' + service.Description : '';\r\n const itemMenu = { itemName: 'General Confirmation', selectedStudents: this.data.selectedStudents, programCodes: selectedprog, programService: selectedser, programcode, serviceCode, ps };\r\n this.dialogBox.close(itemMenu);\r\n }\r\n\r\n if (this.confirmback == false) {\r\n const itemMenu = { itemName: 'Mass Enroll Into Service', selectedStudents: this.data.selectedStudents };\r\n this.dialogBox.close(itemMenu);\r\n }\r\n }\r\n\r\n onProgramCodeChange(init = false) {\r\n this.programAndService.ProgramCodeId = 0;\r\n if (init == false) {\r\n this.programAndService.ServiceCodeId = 0;\r\n }\r\n if (this.selectedProgramCode) {\r\n this.programAndService.ProgramCodeId = this.selectedProgramCode.Id;\r\n const serviceCodeId = this.programAndService.ServiceCodeId != null ? this.programAndService.ServiceCodeId : 0;\r\n this.serviceCodes = this.selectedProgramCode.ProgramServices.filter(o => o.Id == serviceCodeId || o.Inactive == false);\r\n if (serviceCodeId > 0) {\r\n this.selectedServiceCodeId = serviceCodeId;\r\n }\r\n this.getServiceFieldByServiceCodeId(this.programAndService.ServiceCodeId, this.programAndService.id, init);\r\n }\r\n }\r\n\r\n onServiceCodeChange() {\r\n // PRE: Initialize service codes\r\n // POST: populate the associated field on changed\r\n if (this.selectedServiceCodeId != null && this.selectedServiceCodeId > 0) {\r\n this.programAndService.ServiceCodeId = this.selectedServiceCodeId;\r\n } else {\r\n this.programAndService.ServiceCodeId = 0;\r\n }\r\n this.getServiceFieldByServiceCodeId(this.programAndService.ServiceCodeId, this.programAndService.Id);\r\n }\r\n\r\n getServiceFieldByServiceCodeId(serviceCodeId: number, programAndServiceId: number, init: boolean = false) {\r\n // POST: Get ServiceFields associated to service from server\r\n this.programAndService.ProgramAndServicesDetail = [];\r\n this.subscriptions.push(\r\n this.programsAndServicesService.getServiceDetailByServiceCodeId(serviceCodeId, programAndServiceId).subscribe(res => {\r\n this.programAndService.ProgramAndServicesDetail = res;\r\n if (init) {\r\n this.programAndService.ProgramAndServicesDetail.forEach(detail => {\r\n const originalFieldValue = this.originalProgram.ProgramAndServicesDetail ? this.originalProgram.ProgramAndServicesDetail.find(o => o.FieldId == detail.FieldId) : null;\r\n if (originalFieldValue) {\r\n detail.FieldType = originalFieldValue.FieldType;\r\n detail.FieldValue = originalFieldValue.FieldValue;\r\n detail.FieldValueId = originalFieldValue.FieldValueId;\r\n detail.ProgramServiceField = originalFieldValue.ProgramServiceField;\r\n }\r\n });\r\n } else {\r\n this.programAndService.ProgramAndServicesDetail = res;\r\n }\r\n })\r\n );\r\n }\r\n\r\n setCurrent(value: string) {\r\n // POST: The Entry/Exit date to current date\r\n const date = new Date();\r\n const datePart = moment(date).format('MM-DD-YYYY');\r\n if (value == 'EntryDate') {\r\n this.programAndService.EntryDate = moment(datePart, 'MM-DD-YYYY').toDate();\r\n }\r\n else if (value == 'ExitDate') {\r\n this.programAndService.ExitDate = moment(datePart, 'MM-DD-YYYY').toDate();\r\n }\r\n }\r\n\r\n cancel() {\r\n // for mass enroll cancel passing selected student to uncheck\r\n const itemMenu = { itemName: 'Mass Enroll Into Service Cancel', selectedStudents: this.data.selectedStudents };\r\n // PRE: the cancel button is clicked\r\n // POST: resets the program and closes the dialog box\r\n if (!this.addProgram) {\r\n Object.assign(this.programAndService, this.originalProgram);\r\n\r\n }\r\n this.dialogBox.close(itemMenu);\r\n }\r\n\r\n // Atachemnt methods\r\n\r\n deleteAttachmentClick(attachment: Attachment) {\r\n // PRE: Attachement grid is intialized\r\n // POST: Set attachemnt.Deleted to true and remove the row from grid\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Attachment';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete ' + attachment.AttachmentFileName + '?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n if (attachment.AttachmentId && attachment.AttachmentId > 0) {\r\n attachment.Deleted = true;\r\n } else {\r\n const index = this.programAndService.Attachments.indexOf(attachment);\r\n if (index > -1) {\r\n this.programAndService.Attachments.splice(index, 1);\r\n }\r\n }\r\n this.dataSource.data = this.programAndService.Attachments.filter(o => o.Deleted == false);\r\n }\r\n });\r\n }\r\n\r\n attachmentClick = (attachment: Attachment) => {\r\n // PRE: Attachement grid is intialized\r\n // POST: View or download the attachemnt\r\n // System.viewFileFromId(attachment.AttachmentId, attachment.AttachmentFileName);\r\n\r\n if (attachment.MyFileBase64String && attachment.AttachmentFileName && attachment.FileType) {\r\n System.viewFileFromBase(attachment.MyFileBase64String, attachment.FileType, attachment.AttachmentFileName);\r\n } else if (attachment.AttachmentId && attachment.AttachmentFileName) {\r\n System.viewFileFromId(attachment.AttachmentId, attachment.AttachmentFileName);\r\n }\r\n }\r\n\r\n addAttachmentClick() {\r\n // POST: opens a modal to add an attachment\r\n\r\n // Initializing attachment\r\n const attachment = new Attachment();\r\n attachment.AttachmentId = -(this.programAndService.Attachments.length + 1);\r\n attachment.FileType = '';\r\n attachment.FileExtension = '';\r\n attachment.Description = '';\r\n attachment.AttachmentFileName = '';\r\n attachment.OriginalFileName = '';\r\n attachment.AttachmentAddedOn = new Date();\r\n attachment.AttachmentDescription = '';\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: true\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n attachment.AttachmentDescription = attachment.Description;\r\n attachment.AttachmentFileName = attachment.FileName;\r\n attachment.DocumentBase64 = attachment.MyFileBase64String;\r\n attachment.AttachmentFileMimeType = attachment.FileType;\r\n attachment.AttachmentAddedBy = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n this.programAndService.Attachments.push(attachment);\r\n this.dataSource.data = this.programAndService.Attachments;\r\n }\r\n })\r\n );\r\n }\r\n\r\n editAttachmentClick(att: Attachment) {\r\n // POST: opens a modal to add an attachment\r\n\r\n // Initializing attachment\r\n const attachment = new Attachment();\r\n attachment.AttachmentId = att.AttachmentId;\r\n attachment.FileType = att.AttachmentFileMimeType;\r\n attachment.FileExtension = att.FileExtension;\r\n attachment.Description = att.AttachmentDescription;\r\n attachment.FileName = att.AttachmentFileName;\r\n attachment.DocumentTypeId = 0;\r\n attachment.MyFileBase64String = att.MyFileBase64String;\r\n attachment.AttachmentAddedOn = new Date();\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: false,\r\n editAttachment: true\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n attachment.AttachmentDescription = attachment.Description;\r\n attachment.AttachmentFileName = attachment.FileName;\r\n attachment.DocumentBase64 = attachment.MyFileBase64String;\r\n attachment.AttachmentFileMimeType = attachment.FileType;\r\n attachment.AttachmentAddedBy = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n\r\n const at = this.programAndService.Attachments.find(x => x.AttachmentId == attachment.AttachmentId);\r\n const idx = this.programAndService.Attachments.indexOf(at);\r\n this.programAndService.Attachments[idx] = attachment;\r\n // this.programAndService.Attachments.push(attachment);\r\n this.dataSource.data = this.programAndService.Attachments;\r\n }\r\n })\r\n );\r\n }\r\n\r\n // Save\r\n\r\n // Save functions\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: saves the program and closes the dialog box\r\n // NOTE: closing with true here means there are new program and service record\r\n this.validationTrigger.nativeElement.click();\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n\r\n // Add/Edit a program\r\n if (this.programAndService) {\r\n if (this.type == 'MassAdd') {\r\n this.massAddProgramAndService();\r\n }\r\n else if (this.type == 'MassEdit') {\r\n this.massEditProgramAndService();\r\n }\r\n else if (this.type == 'Mass Enroll Into Service') {\r\n this.confirmback = true;\r\n this.backClick();\r\n }\r\n else {\r\n this.subscriptions.push(this.programsAndServicesService.saveProgramAndService(this.studentId, this.programAndService).subscribe(\r\n () => {\r\n this.dialogBox.close(true);\r\n }\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private massAddProgramAndService() {\r\n // PRE: the save button is clicked\r\n // POST: Mass add the program and service and closes the dialog box\r\n // validate student\r\n this.invalidStudent = [];\r\n this.programsAndServicesService.getInvalidStudentForSelectedProgramAndServiceCode(this.programAndService).subscribe(result => {\r\n if (result && result.length > 0) {\r\n this.invalidStudent = result;\r\n result.forEach(s => {\r\n this.programAndService.Students = this.programAndService.Students.filter(o => o.Id != s.Id);\r\n });\r\n }\r\n\r\n // save program and service\r\n if (this.programAndService.Students.length > 0) {\r\n this.programsAndServicesService.massAddProgramAndService(this.programAndService).subscribe(res => {\r\n if (res && res != '' && res == 'Successful') {\r\n // open popup if there is invalid student selection found\r\n if (!this.invalidStudent || this.invalidStudent.length == 0) {\r\n this.dialogBox.close(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (this.invalidStudent && this.invalidStudent.length > 0) {\r\n const dialogBoxInvalidSelection = this.dialog.open(InvalidSelectionDialogComponent, {\r\n data: {\r\n invalidStudent: this.invalidStudent,\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBoxInvalidSelection.afterClosed().subscribe(dialogResult => {\r\n this.programAndService.Students = this.invalidStudent;\r\n if (dialogResult == 2) {\r\n this.programsAndServicesService.massAddProgramAndService(this.programAndService).subscribe(() => {\r\n this.dialogBox.close(true);\r\n });\r\n }\r\n })\r\n );\r\n }\r\n });\r\n }\r\n\r\n private massEditProgramAndService() {\r\n // PRE: the save button is clicked\r\n // POST: Mass add the program and service and closes the dialog box\r\n const fieldDetails: ProgramAndServiceDetail[] = [];\r\n this.programAndService.ProgramAndServicesDetail.forEach(ps => {\r\n const field = new ProgramAndServiceDetail();\r\n field.FieldName = ps.FieldName;\r\n field.FieldValue = ps.FieldValue;\r\n field.Id = ps.Id;\r\n field.Sequence = ps.Sequence;\r\n field.ProgramServiceField = ps.ProgramServiceField;\r\n field.FieldType = ps.FieldType;\r\n field.FieldLookupValues = ps.FieldLookupValues;\r\n field.FieldValueId = ps.FieldValueId;\r\n field.FieldId = ps.FieldId;\r\n field.FieldLength = ps.FieldLength;\r\n field.FieldDecimal = ps.FieldDecimal;\r\n fieldDetails.push(field);\r\n });\r\n\r\n this.massEditProgramAndServices.forEach(ps => {\r\n ps.ProgramCodeId = _.cloneDeep(this.programAndService.ProgramCodeId);\r\n ps.ServiceCodeId = _.cloneDeep(this.programAndService.ServiceCodeId);\r\n ps.EntryDate = _.cloneDeep(this.programAndService.EntryDate);\r\n ps.ExitDate = _.cloneDeep(this.programAndService.ExitDate);\r\n ps.ProgramAndServicesDetail = _.cloneDeep(fieldDetails);\r\n });\r\n\r\n // Save program and service\r\n this.subscriptions.push(this.programsAndServicesService.massEditProgramAndService(this.massEditProgramAndServices).subscribe(res => {\r\n if (res && res != '' && res == 'Successful') {\r\n // Open popup if there is invalid student selection found\r\n this.dialogBox.close(true);\r\n }\r\n }));\r\n }\r\n\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n\r\n // Program Code is required\r\n if (!this.programAndService.ProgramCodeId || this.programAndService.ProgramCodeId <= 0) {\r\n this.errors.push({\r\n fieldName: 'Program',\r\n fieldRef: this.programCodeField,\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n\r\n // Service Code is required\r\n if (!this.programAndService.ServiceCodeId || this.programAndService.ServiceCodeId <= 0) {\r\n this.errors.push({\r\n fieldName: 'Service',\r\n fieldRef: this.serviceCodeField,\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n\r\n // Entry Date is required\r\n if (!this.programAndService.EntryDate || this.programAndService.EntryDate.toString() == System.junkDate.toString()) {\r\n this.errors.push({\r\n fieldName: 'Entry Date',\r\n fieldRef: this.entryDateField,\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n No Programs and Services data for student.\r\n
\r\n \r\n 0\"\r\n matSort matSortDisableClear matSortActive=\"ProgramName\" matSortDirection=\"asc\"\r\n multiTemplateDataRows>\r\n\r\n \r\n \r\n \r\n 0\" class=\"material-icons\" [ngClass]=\"{\r\n 'detail-row-expanded-icon': isProgramRowsExpanded,\r\n 'detail-row-collapsed-icon': !isProgramRowsExpanded\r\n }\" (click)=\"expandAll(isProgramRowsExpanded, 'program' , tableData)\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Program\r\n \r\n \r\n \r\n \r\n {{programAndService.ProgramName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Service\r\n \r\n \r\n \r\n \r\n {{programAndService.ServiceName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Entry Date\r\n \r\n \r\n \r\n \r\n {{programAndService.EntryDate && programAndService.EntryDate.toDateString() !=\r\n junkDate.toDateString() ? (programAndService.EntryDate | date: 'MM/dd/yy') : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Exit Date\r\n \r\n \r\n \r\n \r\n {{programAndService.ExitDate && programAndService.ExitDate.toDateString() !=\r\n junkDate.toDateString() ? (programAndService.ExitDate | date: 'MM/dd/yy') : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{programAndService.hasCommentsString}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{programAndService.hasAttachmentsString}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n

Service Details

\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{programAndServiceDetail.FieldName}}
\r\n {{programAndServiceDetail.FieldValue}}\r\n {{programAndServiceDetail.FieldValue\r\n | date:'MM/dd/yy'}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n

Comments

\r\n
\r\n {{programAndService.Comments}}
\r\n
\r\n\r\n \r\n \r\n

Attachments

\r\n\r\n \r\n \r\n\r\n \r\n \r\n Name\r\n \r\n \r\n \r\n {{programAndServiceAttachment.AttachmentFileName}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentDescription}}\r\n \r\n \r\n\r\n \r\n \r\n Added\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentAddedOn | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Added By\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentAddedBy}}\r\n \r\n \r\n\r\n \r\n \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 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n Filter\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n {{pc.Description}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n
\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 { ChangeDetectorRef, Component, EventEmitter, HostListener, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { System } from '../../../shared-components/System';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { ProgramsAndServicesFilter } from '../../../student360/programs-and-services/programs-and-services-filter';\r\nimport { ProgramAndService } from '../../../student360/programs-and-services/programs-and-services.model';\r\nimport { ProgramServiceConfig } from '../../district/models/program-service.model';\r\nimport { DeleteProgramServiceDialogComponent } from '../delete-program-service-dialog/delete-program-service-dialog.component';\r\nimport { ProgramAndServiceService } from '../program-and-service.service';\r\nimport { AddEditProgramServiceSingleStudentComponent } from './add-edit-program-service-single-student/add-edit-program-service-single-student.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'single-student',\r\n templateUrl: './single-student.component.html',\r\n styleUrls: ['./single-student.component.css'],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class SingleStudentComponent implements OnInit, OnDestroy {\r\n // Properties\r\n private _sort: MatSort;\r\n @ViewChild('filterMenu', { read: TemplateRef }) filterMenu: TemplateRef;\r\n subscriptions: Subscription[] = [];\r\n programsAndServices: ProgramAndService[];\r\n originalProgramsAndServices: ProgramAndService[];\r\n tableData = new TylerMatTableDataSource();\r\n columns = ['More', 'ProgramName', 'ServiceName', 'EntryDate', 'ExitDate', 'Comments', 'Attachments', 'Actions'];\r\n junkDate = new Date('0001-01-01T00:00:00');\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n gridHeight = 0;\r\n expanded: { [key: number]: boolean } = {};\r\n showFilter = false;\r\n filter: ProgramsAndServicesFilter;\r\n previousFilter: ProgramsAndServicesFilter;\r\n userCanEditPrograms = false;\r\n programCodes: ProgramServiceConfig[] = [];\r\n isProgramRowsExpanded = false;\r\n showInactiveProgram = 2;\r\n selectedRow: ProgramAndService;\r\n regEnrollHeight = '';\r\n\r\n // Class Functions\r\n constructor(\r\n private dialog: MatDialog,\r\n private programsAndServicesService: ProgramAndServiceService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private changeDetector: ChangeDetectorRef,\r\n private router: Router\r\n ) { }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.tableData) {\r\n this.tableData.sort = this._sort;\r\n }\r\n }\r\n\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator, { static: true }) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.tableData.paginator = value;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes and obtains the necessary data\r\n\r\n // Initializing data\r\n this.filter = new ProgramsAndServicesFilter();\r\n this.previousFilter = new ProgramsAndServicesFilter();\r\n this.filter.shown = 1;\r\n this.previousFilter.shown = 0;\r\n\r\n if (this.studentService.selectedProgramName && this.studentService.selectedServiceName) {\r\n this.filter.programName = this.studentService.selectedProgramName;\r\n this.filter.serviceName = this.studentService.selectedServiceName;\r\n\r\n this.studentService.selectedProgramName = '';\r\n this.studentService.selectedServiceName = '';\r\n }\r\n\r\n // Getting data\r\n this.getProgramServiceCodesByUserId();\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.getProgramsAndServices();\r\n }),\r\n this.toggleAllRows.subscribe(toggle => {\r\n this.tableData.expandAll(toggle);\r\n }),\r\n this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getProgramServiceCodesByUserId();\r\n }),\r\n this.studentService.observableSelectedProgramAndServiceStream.subscribe(() => {\r\n if (this.studentService.selectedProgramName && this.studentService.selectedServiceName) {\r\n this.filter.programName = this.studentService.selectedProgramName;\r\n this.filter.serviceName = this.studentService.selectedServiceName;\r\n\r\n this.studentService.selectedProgramName = '';\r\n this.studentService.selectedServiceName = '';\r\n\r\n this.tableData.removeAllFilters();\r\n this.applyFilter();\r\n this.changeDetector.detectChanges();\r\n }\r\n })\r\n );\r\n this.tableData.sort = this.sort;\r\n this.resizeGrid();\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n openFilter() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n clearFilter() {\r\n // PRE: the user clicks on the clear button in the filter\r\n // POST: clears the filter data and DOES NOT CLOSE THE FILTER\r\n let getNewData = false;\r\n const initializeFilter = new ProgramsAndServicesFilter();\r\n initializeFilter.shown = 1;\r\n if (this.filter.shown != initializeFilter.shown) {\r\n getNewData = true;\r\n }\r\n Object.assign(this.filter, initializeFilter);\r\n if (getNewData) {\r\n this.getProgramsAndServices();\r\n } else {\r\n this.applyFilter();\r\n }\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n clearFilterFromNotice() {\r\n // PRE: the user clicks the clear filter link from the notice on the footer\r\n // POTS: clears the footer and resets ALL of the values (because the filter isn't open)\r\n let getNewData = false;\r\n const initializeFilter = new ProgramsAndServicesFilter();\r\n initializeFilter.shown = 1;\r\n if (this.filter.shown != initializeFilter.shown) {\r\n getNewData = true;\r\n }\r\n Object.assign(this.filter, initializeFilter);\r\n this.tableData.removeAllFilters();\r\n if (getNewData) {\r\n this.getProgramsAndServices();\r\n } else {\r\n this.applyFilter();\r\n }\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n closeFilter() {\r\n this.openFilter();\r\n }\r\n\r\n // Methods\r\n isFiltered() {\r\n // POST: returns true if the data is being panelFiltered\r\n if (this.filter.entryDateStart && this.filter.entryDateStart.toString() == 'Invalid Date') {\r\n this.filter.entryDateStart = undefined;\r\n }\r\n if (this.filter.entryDateEnd && this.filter.entryDateEnd.toString() == 'Invalid Date') {\r\n this.filter.entryDateEnd = undefined;\r\n }\r\n if (this.filter.exitDateStart && this.filter.exitDateStart.toString() == 'Invalid Date') {\r\n this.filter.exitDateStart = undefined;\r\n }\r\n if (this.filter.exitDateEnd && this.filter.exitDateEnd.toString() == 'Invalid Date') {\r\n this.filter.exitDateEnd = undefined;\r\n }\r\n const initialFilter = new ProgramsAndServicesFilter();\r\n return !System.isEqual(this.filter, initialFilter) || this.tableData.isFiltered();\r\n }\r\n\r\n toggleExpanded(rowId: number) {\r\n // POST: toggles the expansion of that row\r\n this.expanded[rowId] = !this.expanded[rowId];\r\n }\r\n\r\n getProgramsAndServices() {\r\n // POST: uses the services to get programs and services, returning the observable\r\n const siteYearId = (this.router.url.indexOf('registrationEnroll') == -1) && this.studentService.studentEnrollment ? this.studentService.studentEnrollment.SiteYearId : this.yearService.defaultYear.SiteYearId;\r\n this.subscriptions.push(\r\n this.programsAndServicesService.getProgramsAndServices(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, siteYearId, this.showInactiveProgram).subscribe(programsAndServices => {\r\n this.programsAndServices = [];\r\n programsAndServices.forEach(programAndService => {\r\n for (let i = 0; i < programAndService.Attachments.length; i++) {\r\n programAndService.Attachments[i] = System.convert(programAndService.Attachments[i], new Attachment());\r\n }\r\n this.programsAndServices.push(System.convert(programAndService, new ProgramAndService()));\r\n });\r\n\r\n this.programCodes.filter(o => o.UserHasEditPermission == true).forEach(pc => {\r\n this.programsAndServices.filter(o => o.ProgramCodeId == pc.Id).forEach(ps => {\r\n ps.UserHasEditPermission = true;\r\n });\r\n });\r\n\r\n this.programCodes.filter(o => o.UserHasDeletePermission == true).forEach(pc => {\r\n this.programsAndServices.filter(o => o.ProgramCodeId == pc.Id).forEach(ps => {\r\n ps.UserHasDeletePermission = true;\r\n });\r\n });\r\n\r\n setTimeout(\r\n () => {\r\n this.originalProgramsAndServices = _.cloneDeep(this.programsAndServices);\r\n this.tableData.data = this.programsAndServices;\r\n this.applyFilter();\r\n this.expanded = {};\r\n if (this.sort) {\r\n this.tableData.sort = this.sort;\r\n }\r\n },\r\n 0\r\n );\r\n })\r\n );\r\n }\r\n\r\n hasDetails(programAndService: ProgramAndService): boolean {\r\n // POST: returns true if the program and service has details\r\n return programAndService.Comments != '' || (programAndService.Attachments && programAndService.Attachments.length > 0)\r\n || (programAndService.ProgramAndServicesDetail && programAndService.ProgramAndServicesDetail.length > 0);\r\n }\r\n\r\n applyFilter() {\r\n // POST: applies the filter to the data\r\n let data = this.programsAndServices;\r\n\r\n // Entry Date\r\n if (this.filter.entryDateStart && this.filter.entryDateStart.toString() != 'Invalid Date') {\r\n System.roundDateDown(this.filter.entryDateStart);\r\n data = data.filter(datum =>\r\n datum.EntryDate >= this.filter.entryDateStart\r\n );\r\n }\r\n if (this.filter.entryDateEnd && this.filter.entryDateEnd.toString() != 'Invalid Date') {\r\n System.roundDateUp(this.filter.entryDateEnd);\r\n data = data.filter(datum =>\r\n datum.EntryDate <= this.filter.entryDateEnd\r\n );\r\n }\r\n\r\n // Exit Date\r\n if (this.filter.exitDateStart && this.filter.exitDateStart.toString() != 'Invalid Date') {\r\n System.roundDateDown(this.filter.exitDateStart);\r\n data = data.filter(datum =>\r\n datum.ExitDate >= this.filter.exitDateStart\r\n );\r\n }\r\n if (this.filter.exitDateEnd && this.filter.exitDateEnd.toString() != 'Invalid Date') {\r\n System.roundDateUp(this.filter.exitDateEnd);\r\n data = data.filter(datum =>\r\n datum.ExitDate <= this.filter.exitDateEnd\r\n );\r\n }\r\n\r\n // Show Services active on this date\r\n if (this.filter.onThisDate && this.filter.onThisDate.toString() != 'Invalid Date') {\r\n System.roundDateDown(this.filter.onThisDate);\r\n const that = this;\r\n data = data.filter(datum =>\r\n datum.EntryDate <= this.filter.onThisDate && (datum.ExitDate.toString() == that.junkDate.toString() || datum.ExitDate >= this.filter.onThisDate)\r\n );\r\n }\r\n\r\n // Program Name\r\n if (this.filter.programName) {\r\n data = data.filter(datum =>\r\n datum.ProgramName.toLowerCase().includes(this.filter.programName.toLowerCase())\r\n );\r\n }\r\n\r\n if (this.filter.shown != null) {\r\n const that = this;\r\n let fromDate = new Date();\r\n let toDate = new Date();\r\n if (this.filter.shown == 0) {\r\n System.roundDateDown(fromDate);\r\n System.roundDateDown(toDate);\r\n data = data.filter(datum =>\r\n datum.EntryDate <= fromDate && (datum.ExitDate.toString() == that.junkDate.toString() || datum.ExitDate >= toDate)\r\n );\r\n }\r\n else if (this.filter.shown == 1) {\r\n fromDate = new Date(this.yearService.defaultYear.StartDate);\r\n toDate = new Date(this.yearService.defaultYear.EndDate);\r\n System.roundDateDown(fromDate);\r\n System.roundDateDown(toDate);\r\n data = data.filter(datum =>\r\n datum.EntryDate <= toDate && (datum.ExitDate.toString() == that.junkDate.toString() || datum.ExitDate >= fromDate)\r\n );\r\n }\r\n else if (this.filter.shown == 2) {\r\n data = data;\r\n }\r\n }\r\n\r\n // Setting the table data\r\n this.tableData.data = data;\r\n }\r\n\r\n getProgramServiceCodesByUserId() {\r\n this.userCanEditPrograms = false;\r\n this.programsAndServicesService.getProgramServiceCodesByUserId(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(result => {\r\n this.programCodes = result;\r\n setTimeout(() => {\r\n this.getProgramsAndServices();\r\n }, 0);\r\n\r\n if (this.programCodes.filter(o => o.UserHasEditPermission == true).length > 0) {\r\n this.userCanEditPrograms = true;\r\n }\r\n });\r\n }\r\n\r\n // Add/Edit Program service events\r\n addProgram() {\r\n // POST: opens the add modal\r\n const programAndService = new ProgramAndService();\r\n const studentId = this.studentService.selectedStudent.Id;\r\n // Open add/edit program and service\r\n const dialogBox = this.dialog.open(AddEditProgramServiceSingleStudentComponent, {\r\n data: {\r\n addProgram: true,\r\n programAndService: programAndService,\r\n programCodes: this.programCodes,\r\n studentId: studentId\r\n },\r\n disableClose: true,\r\n minWidth: '120vh',\r\n maxWidth: '120vh',\r\n });\r\n dialogBox.afterClosed().subscribe(newProgram => {\r\n this.getProgramsAndServices();\r\n });\r\n }\r\n\r\n editProgram(program: ProgramAndService) {\r\n // POST: opens the edit modal for a program\r\n const studentId = this.studentService.selectedStudent.Id;\r\n const dialogBox = this.dialog.open(AddEditProgramServiceSingleStudentComponent, {\r\n data: {\r\n addProgram: false,\r\n programAndService: program,\r\n programCodes: this.programCodes,\r\n studentId: studentId\r\n },\r\n disableClose: true,\r\n minWidth: '120vh',\r\n maxWidth: '120vh',\r\n });\r\n dialogBox.afterClosed().subscribe(newProgram => {\r\n this.getProgramsAndServices();\r\n });\r\n }\r\n\r\n expandAll(expand: boolean, type: string, dataSource: any) {\r\n // POST: expands or collapses semesters/terms rows\r\n if (type === 'program') {\r\n this.isProgramRowsExpanded = !expand;\r\n this.tableData.data.forEach(program => {\r\n program.detailRow = this.isProgramRowsExpanded;\r\n });\r\n }\r\n }\r\n\r\n deleteProgram(program: ProgramAndService) {\r\n // POST: opens the delete modal for program\r\n let delMessage = '';\r\n delMessage = 'Are you sure you want to delete ' + program.ProgramName + ' - ' + program.ServiceName + ' from ' + this.studentService.selectedStudent.LastName + ', ' + this.studentService.selectedStudent.FirstName + '?';\r\n const dialogBox = this.dialog.open(DeleteProgramServiceDialogComponent, {\r\n data: {\r\n id: program.Id,\r\n type: 'delete',\r\n title: 'Delete Program/Service',\r\n message: delMessage\r\n },\r\n minWidth: '40vh',\r\n maxWidth: '55vh',\r\n });\r\n dialogBox.afterClosed().subscribe(deleted => {\r\n if (deleted) {\r\n this.getProgramsAndServices();\r\n }\r\n });\r\n }\r\n\r\n getInactiveChkStyle() {\r\n if (this.regEnrollMode()) {\r\n return { position: 'fixed', right: '70px' };\r\n }\r\n }\r\n\r\n regEnrollMode() {\r\n return this.router.url.toLowerCase().indexOf('registrationenrollment') > -1;\r\n }\r\n\r\n programAndServiceDetailAttachmentsAriaLabel(attachment: Attachment): string {\r\n // PRE: a program and service detail to generate an aria label for\r\n // POST: creates the aria label for the program and service detail's attachment's table row\r\n return 'Attachment ' + attachment.AttachmentFileName + '. ' +\r\n 'Attachment Description: ' + attachment.AttachmentDescription + '. ' +\r\n 'Attachment Added on: ' + attachment.AttachmentAddedOn.toDateString() + '. ' +\r\n 'Attachment Added by: ' + attachment.AttachmentAddedBy + '. ' +\r\n 'Press enter to view attachment.';\r\n }\r\n\r\n viewAttachment(attachment: Attachment) {\r\n // PRE: an attachment to view\r\n // POST: goes to view that attachment\r\n if (attachment.DocumentMimeType == 'application/vnd.openxmlformats-officedocument.word') {\r\n System.saveFile(attachment.DocumentBase64, attachment.DocumentMimeType, attachment.DocumentName);\r\n } else {\r\n System.viewFileFromId(attachment.AttachmentId, attachment.AttachmentFileName);\r\n }\r\n }\r\n\r\n resizeGrid() {\r\n this.regEnrollHeight = (window.innerHeight - 226).toString();\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n this.resizeGrid();\r\n }\r\n\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../../shared-components/System';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { HomePageCardGroupPermission, PermissionGroupDescription, PermissionGroupUsers, PermissionsGroupsAssignedToStaff, PermissionsList, ReportGroupPermission, WhoHasPermissions, GlobalSearchCategories, ReportsFolderPermissions } from './permissions-groups.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PermissionsGroupsService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) { }\r\n\r\n getPermissionGroupDescription(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetPermissionGroupDescription');\r\n }\r\n\r\n getAllUsersAssignedToPermissionsGroups(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Management + 'GetAllUsersAssignedToPermissionsGroups' + queryString);\r\n }\r\n\r\n isPermissionsGroupExists(permissionsGroupName: string, permissionsGroupId: number): Observable {\r\n const queryString = '?permissionsGroupName=' + permissionsGroupName + '&permissionsGroupId=' + permissionsGroupId;\r\n return this.http.get(System.apiURL.Management + 'IsPermissionsGroupExists' + queryString);\r\n }\r\n\r\n copyPermissionsGroup(copyFromGroupId: number, permissionsGroupName: string): Observable {\r\n const queryString = '?copyFromGroupId=' + copyFromGroupId + '&permissionsGroupName=' + permissionsGroupName;\r\n return this.http.get(System.apiURL.Management + 'CopyPermissionsGroup' + queryString);\r\n }\r\n\r\n copyPermissions(action: boolean, copyFromGroupId: number, copyToGroupIdList: number[]): Observable {\r\n const queryString = '?action=' + action + '©FromGroupId=' + copyFromGroupId;\r\n return this.http.post(System.apiURL.Management + 'CopyPermissions' + queryString, copyToGroupIdList);\r\n }\r\n\r\n deletePermissionsGroup(permissionsGroupId: number): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.get(System.apiURL.Management + 'DeletePermissionsGroup' + queryString);\r\n }\r\n\r\n getPermissionsList(permissionsGroupId: number): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.get(System.apiURL.Management + 'GetPermissionsList' + queryString);\r\n }\r\n\r\n savePermissionsGroup(permissionsGroupId: number, permissionsGroupName: string, permissionsList: PermissionsList[]): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId + '&permissionsGroupName=' + permissionsGroupName;\r\n return this.http.post(System.apiURL.Management + 'SavePermissionsGroup' + queryString, permissionsList);\r\n }\r\n\r\n getWhoHasPermissions(permissionAreaId: number, permissionName: string): Observable {\r\n const queryString = '?permissionAreaId=' + permissionAreaId + '&permissionName=' + permissionName;\r\n return this.http.get(System.apiURL.Management + 'GetWhoHasPermissions' + queryString);\r\n }\r\n\r\n getUserPermissions(permissionsGroupId: number, staffUserId: number, schoolId: number): Observable {\r\n const queryString = '?siteId=' + schoolId + '&permissionsGroupId=' + permissionsGroupId + '&staffUserId=' + staffUserId;\r\n return this.http.get(System.apiURL.Management + 'GetUserPermissions' + queryString);\r\n }\r\n\r\n saveUserPermissionsGroups(staffUserId: number, schoolId: number, permissionsGroups: PermissionGroupDescription[]): Observable {\r\n const queryString = '?staffUserId=' + staffUserId + '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Management + 'SaveUserPermissionsGroups' + queryString, permissionsGroups);\r\n }\r\n\r\n getPermissionsGroupsAssignedToStaffUser(staffUserId: number, schoolId: number, primaryGroupOnly: boolean): Observable {\r\n const queryString = '?staffUserId=' + staffUserId + '&schoolId=' + schoolId + '&primaryGroupOnly=' + primaryGroupOnly;\r\n return this.http.get(System.apiURL.Management + 'GetPermissionsGroupsAssignedToStaffUser' + queryString);\r\n }\r\n\r\n getReportsForPermissionGroup(permissionGroupId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id + '&schoolId=' + this.yearService.defaultYear.Id + '&permissionGroupId=' + permissionGroupId;\r\n return this.http.get(System.apiURL.Management + 'GetReportsForPermissionGroup' + queryString);\r\n }\r\n\r\n saveReportsPermissionGroups(permissionsGroupId: number, reportIds: number[]): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.post(System.apiURL.Management + 'SaveReportsPermissionGroups' + queryString, reportIds);\r\n }\r\n\r\n copyReportSettings(action: boolean, copyFromGroupId: number, copyToGroupIdList: number[]): Observable {\r\n const queryString = '?action=' + action + '©FromGroupId=' + copyFromGroupId;\r\n return this.http.post(System.apiURL.Management + 'CopyReportSettings' + queryString, copyToGroupIdList);\r\n }\r\n\r\n getHomePageCardsPermissionGroup(permissionGroupId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id + '&schoolId=' + this.yearService.defaultYear.SchoolID + '&permissionGroupId=' + permissionGroupId;\r\n return this.http.get(System.apiURL.Management + 'GetHomePageCardsPermissionGroup' + queryString);\r\n }\r\n\r\n saveHomePageCardsPermission(permissionsGroupId: number, homePageCardIds: number[]): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.post(System.apiURL.Management + 'SaveHomePageCardsPermission' + queryString, homePageCardIds);\r\n }\r\n\r\n copyHomePageCardSettings(action: boolean, copyFromGroupId: number, copyToGroupIdList: number[]): Observable {\r\n const queryString = '?action=' + action + '©FromGroupId=' + copyFromGroupId;\r\n return this.http.post(System.apiURL.Management + 'CopyHomePageCardSettings' + queryString, copyToGroupIdList);\r\n }\r\n\r\n getUserPermissionsHomePageCards(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id + '&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Management + 'GetUserPermissionsHomePageCards' + queryString);\r\n }\r\n\r\n getGlobalSearchCategoriesForPermissionGroup(permissionGroupId: number): Observable {\r\n const queryString = '?permissionGroupId=' + permissionGroupId;\r\n return this.http.get(System.apiURL.Management + 'GetGlobalSearchCategoriesForPermissionGroup' + queryString);\r\n }\r\n\r\n saveGlobalSearchCategoriesForPermissionGroup(permissionsGroupId: number, categoryIds: number[]): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.post(System.apiURL.Management + 'SaveGlobalSearchCategoriesForPermissionGroup' + queryString, categoryIds);\r\n }\r\n\r\n copyGlobalSearchCategories(action: boolean, copyFromGroupId: number, copyToGroupIdList: number[]): Observable {\r\n const queryString = '?action=' + action + '©FromGroupId=' + copyFromGroupId;\r\n return this.http.post(System.apiURL.Management + 'copyGlobalSearchCategories' + queryString, copyToGroupIdList);\r\n }\r\n\r\n getReportsFoldersForPermissionGroup(permissionGroupId: number): Observable {\r\n const queryString = '?permissionGroupId=' + permissionGroupId;\r\n return this.http.get(System.apiURL.Management + 'GetReportsFoldersForPermissionGroup' + queryString);\r\n }\r\n\r\n saveReportFoldersPermissionGroups(permissionsGroupId: number, folderIds: number[]): Observable {\r\n const queryString = '?permissionsGroupId=' + permissionsGroupId;\r\n return this.http.post(System.apiURL.Management + 'SaveReportFoldersPermissionGroups' + queryString, folderIds);\r\n }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { ClinicVisitLogCodes, MedicalCodeTreatment, MedicalUsers, StaffHealthVisitLog, StaffMedicalCondition } from '../../health360/staff-health/staff-health.model';\r\nimport { CheckForErrorsGuard } from '../../shared-components/guards/check-for-errors/check-for-errors.guard';\r\nimport { UnsavedChangesGuard } from '../../shared-components/guards/unsaved-changes/unsaved-changes.guard';\r\nimport { Staff, StaffEmergencyContact } from '../../shared-components/staff-search/staff.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { CityStateZip } from './models/city-state-zip.Model';\r\nimport { FacultyStaff, StaffAddress, StaffAditionalAdress, StaffAssociation, StaffDocument, StaffDocumentType, StaffStateReporting } from './models/faculty-staff.model';\r\nimport { SchoolYearAssignmentPermissions } from './models/school-year-assignment.model';\r\nimport { StaffUserRoles } from './models/staffUserRoles.model';\r\nimport { PermissionGroupDescription, PermissionsList } from './permissions-groups/permissions-groups.model';\r\nimport { StaffAttendance } from './staff-attendance/staff-attendance.model';\r\n// import { StaffMedicalCondition, StaffHealthVisitLog, ClinicVisitLogCodes, MedicalUsers, MedicalCodeTreatment } from './staff-health/staff-health.model';\r\nimport { StaffAssignedSchoolsAndRoles } from './staff-header.model';\r\nimport { PhotoIdLayout, StaffRolesLookup, StaffUser } from './staff.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StaffService {\r\n\r\n staffList: Staff[] = [];\r\n staffAlerts: StaffMedicalCondition[] = [];\r\n staffEmergencyContacts: StaffEmergencyContact[] = [];\r\n allSchools: SchoolYearAssignmentPermissions[] = [];\r\n specificSchoolPermissions: boolean;\r\n copyStaffMedicalConditionRecord = new StaffMedicalCondition();\r\n copyStaffHealthVisitLog = new StaffHealthVisitLog();\r\n recordCopied = false;\r\n familyId: number;\r\n updatedUsers: number[] = [];\r\n unsavedChanges: boolean;\r\n legacySelectedStaffId: number;\r\n refreshStaffSearchGrid: boolean;\r\n permissionsGroupsList: PermissionGroupDescription[];\r\n filteredGridData: SchoolYearAssignmentPermissions[] = [];\r\n\r\n Roles = [\r\n { RoleName: 'Teacher', RoleDescription: 'Teacher' },\r\n { RoleName: 'ServiceProvider', RoleDescription: 'SPED-IEP Related Service Provider' },\r\n { RoleName: 'SpecialEducationTeacher', RoleDescription: 'SPED-IEP Service Teacher' },\r\n { RoleName: 'SpecialServicesSupervisor', RoleDescription: 'SPED-Supervisor' },\r\n { RoleName: 'Substitute', RoleDescription: 'Substitute' },\r\n { RoleName: 'CaseManager', RoleDescription: 'SPED-Case Manager' },\r\n { RoleName: 'Advisor', RoleDescription: 'Advisor' },\r\n { RoleName: 'Counselor', RoleDescription: 'Counselor' },\r\n { RoleName: 'Nurse', RoleDescription: 'Nurse' },\r\n { RoleName: 'Disciplinarian', RoleDescription: 'Disciplinarian' },\r\n { RoleName: 'Administrator', RoleDescription: 'Site Administrator' },\r\n { RoleName: 'Superintendent', RoleDescription: 'District Administrator' },\r\n { RoleName: 'Principal', RoleDescription: 'Principal' },\r\n { RoleName: 'Other', RoleDescription: 'Other Staff' }\r\n ];\r\n\r\n private _selectedStaff: Staff;\r\n public get selectedStaff(): Staff {\r\n return this._selectedStaff;\r\n }\r\n\r\n public set selectedStaff(value: Staff) {\r\n this._selectedStaff = value;\r\n this.observableSelectedStaff.next(value);\r\n }\r\n\r\n public observableSelectedStaff = new Subject();\r\n observableSelectedStaffStream$ = this.observableSelectedStaff.asObservable();\r\n\r\n public observableStateReportingPermition = new Subject();\r\n observableStateReportingPermitionStream$ = this.observableStateReportingPermition.asObservable();\r\n\r\n public observableStaffAssignedSchools = new BehaviorSubject(false);\r\n observableStaffAssignedSchoolsStream$ = this.observableStaffAssignedSchools.asObservable();\r\n\r\n constructor(private http: HttpClient,\r\n private unsavedChangesGuard: UnsavedChangesGuard,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private yearService: YearService) { }\r\n\r\n private _staffCurrentMedicalConditionChecked: boolean;\r\n public get staffCurrentMedicalConditionChecked(): boolean {\r\n return this._staffCurrentMedicalConditionChecked;\r\n }\r\n\r\n public set staffCurrentMedicalConditionChecked(value: boolean) {\r\n this._staffCurrentMedicalConditionChecked = value;\r\n this.observableStaffCurrentMedicalConditionChecked.next(value);\r\n }\r\n\r\n public observableStaffCurrentMedicalConditionChecked = new Subject();\r\n observableStaffCurrentMedicalConditionCheckedStream$ = this.observableStaffCurrentMedicalConditionChecked.asObservable();\r\n\r\n private _medicalConditionShowAlert: boolean;\r\n public get medicalConditionShowAlert(): boolean {\r\n return this._medicalConditionShowAlert;\r\n }\r\n\r\n public set medicalConditionShowAlert(value: boolean) {\r\n this._medicalConditionShowAlert = value;\r\n this.observableMedicalConditionShowAlert.next(value);\r\n }\r\n\r\n public observableMedicalConditionShowAlert = new Subject();\r\n observableMedicalConditionShowAlertStream$ = this.observableMedicalConditionShowAlert.asObservable();\r\n\r\n updateStaff(staffList: Staff[], selectedStaff: Staff) {\r\n this.staffList = staffList;\r\n this.selectedStaff = this.staffList.find(x => x.StaffId == selectedStaff.StaffId);\r\n if (staffList.length > 0) {\r\n this.updateSelectedStaff(selectedStaff);\r\n }\r\n // this.selectedStaff = this.staffList.find(x => x.StaffId == selectedStaff.StaffId);\r\n }\r\n\r\n setUnmask(phone: string) {\r\n phone = phone.replace('(', '');\r\n phone = phone.replace(')', '');\r\n phone = phone.replace('____', '');\r\n phone = phone.replace('___', '');\r\n phone = phone.replace('__', '');\r\n phone = phone.replace('-', '');\r\n phone = phone.replace('_', '');\r\n phone = phone.replace(' ', '');\r\n return phone.trim();\r\n }\r\n\r\n getStaffPicture(staffId: number, yearId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&siteYearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffPicture' + queryString);\r\n }\r\n\r\n getStaffHeaderDetail(staffId: number): Observable {\r\n const queryString = '?staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffHeaderDetail' + queryString);\r\n }\r\n\r\n getStaffMedicalAlerts(staffId: number, yearId: number, siteId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&yearId=' + yearId + '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffMedicalAlerts' + queryString);\r\n }\r\n\r\n getStaffAssignedSchools(staffId: number, yearId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffAssignedSchools' + queryString);\r\n }\r\n\r\n getMedicalConditionReadByStaffId(staffId: number, siteId: number, yearId: number, currentMedicalCondition: boolean): Observable {\r\n const showCurrentMedicalCondition = currentMedicalCondition == undefined ? false : currentMedicalCondition;\r\n const queryString = '?staffId=' + staffId + '&siteId=' + siteId + '&yearId=' + yearId + '&showCurrentMedicalCondition=' + showCurrentMedicalCondition;\r\n return this.http.get(System.apiURL.Management + 'GetMedicalConditionReadByStaffId' + queryString);\r\n }\r\n\r\n SaveStaffMedicalCondition(staffId: number, siteYearId: number, data: StaffMedicalCondition): Observable {\r\n const queryString = '?staffId=' + staffId\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Management + 'SaveStaffMedicalCondition' + queryString, data);\r\n }\r\n\r\n getStaffHealthVisitLogReadByStaffId(staffId: number, siteId: number, yearId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&siteId=' + siteId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffHealthVisitLog' + queryString);\r\n }\r\n\r\n getStaffHealthVisitLogReadById(visitId: number, siteId: number, yearId: number): Observable {\r\n const queryString = '?visitId=' + visitId + '&siteId=' + siteId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffHealthVisitLogReadById' + queryString);\r\n }\r\n\r\n getStaffDocuments(staffId: number, yearId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffDocuments' + queryString);\r\n }\r\n\r\n getStaffDocumentType(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetStaffDocumentType');\r\n }\r\n\r\n saveStaffDocument(document: StaffDocument): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveStaffDocument', document);\r\n }\r\n\r\n deleteStaffDocument(documentId: number): Observable {\r\n const queryString = '?documentId=' + documentId;\r\n return this.http.get(System.apiURL.Management + 'DeleteStaffDocument' + queryString);\r\n }\r\n\r\n getClinicLogVisitCodes(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetClinicLogVisitCodes');\r\n }\r\n\r\n updateSelectedStaff(staff: Staff) {\r\n const canContinue = this.unsavedChangesGuard.checkForDeactivation() && this.checkForErrorsGuard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n if (staff != null) {\r\n this.selectedStaff = staff;\r\n } else {\r\n this.observableSelectedStaff.next(null);\r\n }\r\n }\r\n });\r\n } else if (canContinue) {\r\n if (staff != null) {\r\n this.selectedStaff = staff;\r\n } else {\r\n this.selectedStaff = null;\r\n this.observableSelectedStaff.next(null);\r\n }\r\n }\r\n }\r\n\r\n getStaffClassesByStaffId(staffId: number, yearId: number, siteId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&yearId=' + yearId + '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.Classroom + 'GetStaffClassesByStaffId' + queryString);\r\n }\r\n\r\n getOnDutyUsers(siteYearId: number): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Management + 'GetMedicalUserBySiteYearId' + queryString);\r\n }\r\n\r\n getMedicalCodeTreatmentBySiteId(siteId: number): Observable {\r\n const queryString = '?siteId=' + siteId;\r\n return this.http.get(System.apiURL.Management + 'GetMedicalCodeTreatmentBySiteId' + queryString);\r\n }\r\n\r\n deleteHealthVisitLogById(clinicLogId: number): Observable {\r\n const queryString = '?clinicLogId=' + clinicLogId;\r\n return this.http.get(System.apiURL.Management + 'DeleteHealthVisitLogById' + queryString);\r\n }\r\n\r\n saveHealthVisitLog(staffId: number, siteYearId: number, data: StaffHealthVisitLog): Observable {\r\n const queryString = '?staffId=' + staffId\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Management + 'SaveHealthVisitLog' + queryString, data);\r\n }\r\n saveTreatmentCode(clinicLogId: number, data: number[]) {\r\n const queryString = '?clinicLogId=' + clinicLogId;\r\n return this.http.post(System.apiURL.Management + 'SaveClinicLogToClinicTreatments' + queryString, data);\r\n }\r\n\r\n deleteClinicTreatmentByClinicLogId(clinicLogId: number): Observable {\r\n const queryString = '?clinicLogId=' + clinicLogId;\r\n return this.http.get(System.apiURL.Management + 'DeleteClinicLogTreatmentByClinicLogId' + queryString);\r\n }\r\n\r\n getStaffByStaffId(staffId: number, yearId: number): Observable {\r\n const queryString = '?staffId=' + staffId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Management + 'GetFacultyStaffById' + queryString);\r\n }\r\n\r\n // --------------------\r\n getPrimayAddressByFamilyId(familyId: number): Observable {\r\n const queryString = '?familyId=' + familyId;\r\n return this.http.get(System.apiURL.Management + 'GetPrimayAddressByFamilyId' + queryString);\r\n }\r\n\r\n getAditionlaAddressesByFamilyId(familyId: number): Observable {\r\n const queryString = '?familyId=' + familyId;\r\n return this.http.get(System.apiURL.Management + 'GetAditionlaAddressesByFamilyId' + queryString);\r\n }\r\n\r\n saveStaffPrimayAddress(address: StaffAddress): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveStaffPrimayAddress', address);\r\n }\r\n\r\n saveStaffAditionalAddress(aditionalAddress: StaffAditionalAdress): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveStaffAditionalAddress', aditionalAddress);\r\n }\r\n\r\n deleteStaffAddress(familyId: number, addressId: number): Observable {\r\n const queryString = '?lngFamilyId=' + familyId + '&lngAddressId=' + addressId;\r\n return this.http.get(System.apiURL.Management + 'DeleteStaffAddress' + queryString);\r\n }\r\n\r\n isExistStudentAndStaffStrLunchPin(lunchPin: string, studentId: number, staffId: number): Observable {\r\n const queryString = '?lunchPin=' + lunchPin\r\n + '&studentId=' + studentId\r\n + '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'IsExistStudentAndStaffStrLunchPin' + queryString);\r\n }\r\n\r\n isExistStudentAndStaffStrID(strIds: string, studentId: number, staffId: number, specialCase = false): Observable {\r\n const queryString = '?strIds=' + strIds\r\n + '&studentId=' + studentId\r\n + '&staffId=' + staffId\r\n + '&specialCase=' + specialCase;\r\n return this.http.get(System.apiURL.Management + 'IsExistStudentAndStaffStrID' + queryString);\r\n }\r\n\r\n saveFacultyStaff(staff: FacultyStaff): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id\r\n + '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Management + 'SaveFacultyStaff' + queryString, staff);\r\n }\r\n\r\n saveFacultyStaffPhoto(staff: FacultyStaff): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id\r\n + '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Management + 'SaveFacultyStaffPhoto' + queryString, staff);\r\n }\r\n\r\n deleteFacultyStafftById(staffId: number): Observable {\r\n const queryString = '?staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'DeleteFacultyStaffById' + queryString);\r\n }\r\n facultyStaffReadByNameDuplicateChk(firstName: string, lastName: string, staffId: number): Observable {\r\n const queryString = '?lastName=' + lastName\r\n + '&firstName=' + firstName\r\n + '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'FacultyStaffReadByNameDuplicateChk' + queryString);\r\n }\r\n\r\n isStaffInUse(staffId: number): Observable {\r\n const queryString = '?staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'IsStaffInUse' + queryString);\r\n }\r\n\r\n // Staff Attendance\r\n getStaffAttendance(staffId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffAttendance' + queryString);\r\n }\r\n\r\n updateStaffAttendance(staffAtt: StaffAttendance): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Management + 'UpdateStaffAttendance' + queryString, staffAtt);\r\n }\r\n\r\n deleteStaffAttendance(attendanceId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&attendanceId=' + attendanceId;\r\n return this.http.get(System.apiURL.Management + 'DeleteStaffAttendance' + queryString);\r\n }\r\n\r\n // Staff User\r\n getStaffUser(staffId: number): Observable {\r\n const queryString = '?staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffUser' + queryString);\r\n }\r\n\r\n saveStaffUser(staffUser: StaffUser): Observable {\r\n staffUser.LastSiteYearId = (staffUser.LastSiteYearId <= 0 ? this.yearService.defaultYear.SiteYearId : staffUser.LastSiteYearId);\r\n const queryString = '?schoolYearId=' + this.yearService.defaultYear.SiteYearId;\r\n return this.http.post(System.apiURL.Management + 'SaveStaffUser' + queryString, staffUser);\r\n }\r\n getUserByUserId(userId: number, userType: number): Observable {\r\n const queryString = '?userId=' + userId\r\n + '&userType=' + userType;\r\n return this.http.get(System.apiURL.Student + 'GetUserByUserId' + queryString);\r\n }\r\n\r\n // Staff Emergency Contact\r\n getStaffEmergencyContacts(staffId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffEmergencyContacts' + queryString);\r\n }\r\n\r\n saveStaffEmergencyContactSequence(staffEmergencyContacts: StaffEmergencyContact[]): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveStaffEmergencyContactSequence', staffEmergencyContacts);\r\n }\r\n\r\n updateStaffEmergencyContact(emergencyContact: StaffEmergencyContact): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Management + 'UpdateStaffEmergencyContact' + queryString, emergencyContact);\r\n }\r\n\r\n deleteStaffEmergencyContact(familyId: number, peopleId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&siteId=' + this.yearService.defaultYear.SchoolID +\r\n '&familyId=' + familyId + '&peopleId=' + peopleId;\r\n return this.http.get(System.apiURL.Management + 'DeleteStaffEmergencyContact' + queryString);\r\n }\r\n\r\n // School Year Assignment Permissions\r\n getStaffSchoolAssignments(staffId: number): Observable {\r\n const queryString = '?yearId=' + '0' +\r\n '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffSchoolAssignments' + queryString);\r\n }\r\n\r\n saveStaffSchoolAssignments(schoolYearAssignmentPermissions: SchoolYearAssignmentPermissions[], specificPermissions: boolean): Observable {\r\n const queryString = '?specificPermissions=' + specificPermissions;\r\n return this.http.post(System.apiURL.Management + 'SaveStaffSchoolAssignments' + queryString, schoolYearAssignmentPermissions);\r\n }\r\n\r\n saveStaffReporting(staffStateReporting: StaffStateReporting): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveStaffReporting', staffStateReporting);\r\n }\r\n\r\n getCMPComponentValidation(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetCMPComponentValidation');\r\n }\r\n\r\n getStaffClassifications(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetStaffClassifications');\r\n }\r\n\r\n getStaffHeigherEducations(): Observable {\r\n return this.http.get(System.apiURL.Management + 'GetStaffHeigherEducations');\r\n }\r\n\r\n getPhotoIdLayout(siteYearId: number): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Management + 'GetPhotoIdLayout' + queryString);\r\n }\r\n\r\n // Staff Administration - Permissions\r\n copyUserPermissions(copyFromStaffId: number, copyToStaffIdList: number[], copyPermissionGroups: boolean, copyRoles: boolean, copyIndividualPermissions: boolean, copySchools: boolean, action: boolean): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '©FromStaffId=' + copyFromStaffId +\r\n '©PermissionGroups=' + copyPermissionGroups +\r\n '©Roles=' + copyRoles +\r\n '©IndividualPermissions=' + copyIndividualPermissions +\r\n '©Schools=' + copySchools +\r\n '&action=' + action;\r\n return this.http.post(System.apiURL.Management + 'CopyUserPermissions' + queryString, copyToStaffIdList);\r\n }\r\n\r\n getStaffRoles(staffId: number, schoolId: number = this.yearService.defaultYear.SchoolID, yearId: number = this.yearService.defaultYear.Id): Observable {\r\n const queryString = '?yearId=' + yearId\r\n + '&siteId=' + schoolId\r\n + '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'GetStaffRoles' + queryString);\r\n }\r\n saveStaffRoles(userRoles: StaffUserRoles, schoolId: number = this.yearService.defaultYear.SchoolID, yearId: number = this.yearService.defaultYear.Id): Observable {\r\n const queryString = '?yearId=' + yearId\r\n + '&siteId=' + schoolId;\r\n return this.http.post(System.apiURL.Management + 'SaveStaffRoles' + queryString, userRoles);\r\n }\r\n clearPersmissions(staffId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id\r\n + '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'ClearStaffAllSchoolsPermissions' + queryString);\r\n }\r\n\r\n mergeStaffAllSchoolsPermissions(staffId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id\r\n + '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'MergeStaffAllSchoolsPermissions' + queryString);\r\n }\r\n\r\n isPhoneValid(phoneNumber: string): boolean {\r\n let blnIsValid = true;\r\n if (phoneNumber != null && phoneNumber != '') {\r\n const pNumber = this.setUnmask(phoneNumber);\r\n if (pNumber.trim().length < 10 || pNumber.trim().length > 10) {\r\n blnIsValid = false;\r\n }\r\n }\r\n return blnIsValid;\r\n }\r\n isValidEmailAdress(emailAddress: string): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&email=' + emailAddress;\r\n return this.http.get(System.apiURL.Management + 'IsValidEmail' + queryString);\r\n }\r\n\r\n deleteSpousePeopleById(Id: number): Observable {\r\n const queryString = '?Id=' + Id;\r\n return this.http.post(System.apiURL.Management + 'DeleteSpousePeople' + queryString, null);\r\n }\r\n\r\n saveUserPermissions(staffUserId: number, schoolId: number, permissionsList: PermissionsList[]): Observable {\r\n const queryString = '?staffUserId=' + staffUserId + '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Management + 'SaveUserPermissions' + queryString, permissionsList);\r\n }\r\n\r\n isStaffHasSchoolSpecificPermissions(staffId: number): Observable {\r\n const queryString = '?staffId=' + staffId;\r\n return this.http.get(System.apiURL.Management + 'IsStaffHasSchoolSpecificPermissions' + queryString);\r\n }\r\n\r\n copyUserPermissionsToAssignedSchools(staffId: number, copyFromSchoolId: number, copyToSchoolIdList: number[], copyPermissionGroups: boolean, copyRoles: boolean, copyIndividualPermissions: boolean, copySchools: boolean, action: boolean): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&staffId=' + staffId +\r\n '©FromSchoolId=' + copyFromSchoolId +\r\n '©PermissionGroups=' + copyPermissionGroups +\r\n '©Roles=' + copyRoles +\r\n '©IndividualPermissions=' + copyIndividualPermissions +\r\n '©Schools=' + copySchools +\r\n '&action=' + action;\r\n return this.http.post(System.apiURL.Management + 'CopyUserPermissionsToAssignedSchools' + queryString, copyToSchoolIdList);\r\n }\r\n\r\n isUserNameAlreadyExists(userName: string, peopleId: number): Observable {\r\n const queryString = '?userName=' + userName +\r\n '&peopleId=' + peopleId;\r\n return this.http.get(System.apiURL.Management + 'IsUserNameAlreadyExists' + queryString);\r\n }\r\n\r\n getStaffByRoles(yearId: number, roles: string): Observable {\r\n const queryString = '?yearId=' + yearId + '&roles=' + roles;\r\n return this.http.get(System.apiURL.Management + 'GetStaffByRoles' + queryString);\r\n }\r\n\r\n copyRolesToAssignedSchools(staffId: number, siteId: number, yearId: number, action: boolean, copyToSchoolIdList: number[]): Observable {\r\n const queryString = '?staffId=' + staffId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&action=' + action;\r\n return this.http.post(System.apiURL.Management + 'CopyRolesToAssignedSchools' + queryString, copyToSchoolIdList);\r\n }\r\n\r\n saveCityStateZip(data: CityStateZip): Observable {\r\n return this.http.post(System.apiURL.Management + 'SaveCityStateZip', data);\r\n }\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { Attachment } from './models/attachment.model';\r\n\r\nexport class System {\r\n\r\n // Properties\r\n static apiURL = {\r\n Student: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Student/',\r\n Counselor: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Counselor/',\r\n Admin: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Admin/',\r\n Shared: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Shared/',\r\n Classroom: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Classroom/',\r\n Reporting: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Reporting/',\r\n Management: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Management/',\r\n StateReporting: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/StateReporting/',\r\n Health: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Health/',\r\n SpecialEd: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/SpecialEd/',\r\n SpecialEdEval: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/SpecialEdEval/',\r\n Utilities: location.protocol + '//' + location.host + System.getBaseLocation() + 'AppApi/TylerSIS/Utilities/'\r\n };\r\n static tokenURL = location.protocol + '//' + location.host + System.getBaseLocation() + 'token';\r\n static baseUrl = location.protocol + '//' + location.host + System.getBaseLocation();\r\n static junkDateString = '0001-01-01T00:00:00';\r\n static junkDate = new Date(System.junkDateString);\r\n static mailRegexp = /^\\s*(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])\\s*$/;\r\n static phoneRegexp = /^(\\(\\d{3}\\) )?(\\d{3})-(\\d{4})$/;\r\n static phoneTextMask = ['(', /\\d/, /\\d/, /\\d/, ')', ' ', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/];\r\n static zipRegexp = /^\\d{5}(?:-\\d{4})?$/;\r\n static zipMask = [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\r\n static canadianZipMask = [/[a-zA-Z]/, /\\d/, /[a-zA-Z]/, ' ', /\\d/, /[a-zA-Z]/, /\\d/];\r\n static postalCodeRegexp = /[a-zA-Z]\\d[a-zA-Z]\\s\\d[a-zA-Z]\\d/;\r\n static twelveHourTimeRegexp = /^(0[1-9]|1[012]):[0-5]\\d\\s[apAP][mM]$/;\r\n static ssnTextMask = [/\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/];\r\n // static twentyFourHourTimeRegexp = /^(0\\d|1[012]|2[0123]):[0-5]\\d(:[0-5]\\d)?$/;\r\n // ONE-12279\r\n static twentyFourHourTimeRegexp = /^([01]\\d|2[0-3]):?([0-5]\\d)$/;\r\n static twelveHourTimeMask = [/[01]/, /\\d/, ':', /[0-5]/, /\\d/, ' ', /[apAP]/, /[mM]/];\r\n static twentyFourHourTimeMask = [/[012]/, /\\d/, ':', /[0-5]/, /\\d/];\r\n static paginatorPageSizes = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 500, 1000];\r\n static paginatorDefaultSize = 100;\r\n\r\n private static iso8601RegEx = /^(19|20|21)\\d\\d([-/.])(0[1-9]|1[012])\\2(0[1-9]|[12][0-9]|3[01])T(\\d\\d)([:/.])(\\d\\d)([:/.])(\\d\\d)$/;\r\n\r\n static mimeTypes: string[] = [\r\n 'text/html',\r\n 'text/css',\r\n 'text/xml',\r\n 'image/gif',\r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/webp',\r\n 'image/png',\r\n 'video/mp4',\r\n 'audio/x-m4a',\r\n 'audio/mp3',\r\n 'video/ogg',\r\n 'audio/ogg',\r\n 'video/webm',\r\n 'audio/webm',\r\n 'audio/wav',\r\n 'application/xhtml+xml',\r\n 'application/x-chrome-extension',\r\n 'multipart/related',\r\n 'application/pdf',\r\n 'image/bmp',\r\n 'image/x-icon',\r\n 'image/vnd.microsoft.icon',\r\n 'image/tiff',\r\n 'image/x-xbitmap',\r\n 'image/svg+xml',\r\n 'text/xml',\r\n 'text/plain'\r\n ];\r\n\r\n // Functions\r\n static markArrayForTranslation(array: string[]) {\r\n for (let i = 0; i < array.length; i++) {\r\n array[i] = marker(array[i]);\r\n }\r\n }\r\n\r\n static isDateEqual(dateA: Date, dateB: Date) {\r\n return (!dateA && !dateB)\r\n || (\r\n dateA\r\n && dateB\r\n && dateA.toString() == dateB.toString()\r\n );\r\n }\r\n\r\n static removeIdFields(object: any) {\r\n // POST: removes the $id fields from an object\r\n if (object != null) {\r\n const keys = Object.keys(object);\r\n if (keys.includes('$id')) {\r\n delete object['$id'];\r\n }\r\n for (let i = 0; i < keys.length; i++) {\r\n if (typeof (object[keys[i]]) == 'object') {\r\n System.removeIdFields(object[keys[i]]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n static removeFromList(list: T[], value: T) {\r\n const index = list.indexOf(value);\r\n if (index >= 0) {\r\n list.splice(index, 1);\r\n }\r\n }\r\n\r\n static createUniqueName(currentName: string, allNames: string[], excludedNames: string[] = []) {\r\n let newName = currentName;\r\n while (allNames.find(name => name == newName) || excludedNames.find(name => name == newName)) {\r\n newName = System.createNextName(newName);\r\n }\r\n return newName;\r\n }\r\n\r\n static createNextName(currentName: string) {\r\n // POST: create a new name with (#) appended to it\r\n const numberRegexp = /\\(\\d+\\)/g;\r\n const matches = currentName.match(numberRegexp);\r\n let nextName = currentName;\r\n if (matches && matches.length > 0) {\r\n const lastMatch = matches[matches.length - 1];\r\n const indexOfNumber = nextName.lastIndexOf(lastMatch);\r\n const number = parseInt(\r\n lastMatch.substr(1, lastMatch.length - 1),\r\n 10\r\n );\r\n nextName = nextName.slice(0, indexOfNumber) +\r\n '(' + (number + 1) + ')' +\r\n nextName.slice(indexOfNumber + lastMatch.length);\r\n } else {\r\n nextName += ' (1)';\r\n }\r\n return nextName;\r\n }\r\n\r\n static overlappingTimes(startA: string, endA: string, startB: string, endB: string, twelveHour = false) {\r\n if (twelveHour) {\r\n startA = this.convert12HourTimeTo24HourTime(startA);\r\n endA = this.convert12HourTimeTo24HourTime(endA);\r\n startB = this.convert12HourTimeTo24HourTime(startB);\r\n endB = this.convert12HourTimeTo24HourTime(endB);\r\n }\r\n const convertToDate = (timeString: string): Date => {\r\n const hours = Number.parseInt(timeString.charAt(0) + timeString.charAt(1), 10);\r\n const minutes = Number.parseInt(timeString.charAt(3) + timeString.charAt(4), 10);\r\n const date = new Date();\r\n date.setHours(hours);\r\n date.setMinutes(minutes);\r\n return date;\r\n };\r\n const dateStartA = convertToDate(startA);\r\n const dateEndA = convertToDate(endA);\r\n const dateStartB = convertToDate(startB);\r\n const dateEndB = convertToDate(endB);\r\n return this.overlappingDates(dateStartA, dateEndA, dateStartB, dateEndB);\r\n }\r\n\r\n static overlappingDates(startA: Date, endA: Date, startB: Date, endB: Date) {\r\n // POST: returns true if the start and end of A overlap with the start and end of B\r\n return (\r\n (!(startA >= endB || endA <= startB))\r\n || (\r\n startB.toString() == startA.toString()\r\n && startA.toString() == endA.toString()\r\n && endA.toString() == endB.toString()\r\n )\r\n );\r\n // return (startA > startB && startA < endB) // B --- A ---- B ---- A\r\n // || (startB > startA && startB < endA) // A --- B ---- A ---- B\r\n // || (startA <= startB && endA >= endB) // A --- B ---- B ---- A or AB --- BA\r\n // || (startB <= startA && endB >= endA) // B --- A ---- A ---- B or BA --- AB\r\n // || (\r\n // startB.toString() == startA.toString()\r\n // && startA.toString() == endA.toString()\r\n // && endA.toString() == endB.toString()\r\n // ); // ABBA (we need this in scheduling to prevent unique key conflicts)\r\n }\r\n\r\n static validate12HourTime(timeString: string): boolean {\r\n return timeString.match(this.twelveHourTimeRegexp) != null;\r\n }\r\n\r\n static validate24HourTime(timeString: string): boolean {\r\n return timeString.match(this.twentyFourHourTimeRegexp) != null;\r\n }\r\n\r\n static convert24HourTimeTo12HourTime(timeString: string): string {\r\n if (this.validate24HourTime(timeString)) {\r\n let hours = Number.parseInt(timeString.charAt(0) + timeString.charAt(1), 10);\r\n const minutes = Number.parseInt(timeString.charAt(3) + timeString.charAt(4), 10);\r\n let meridian = '';\r\n if (hours >= 12) {\r\n meridian = 'PM';\r\n } else {\r\n meridian = 'AM';\r\n }\r\n if (hours == 0) {\r\n hours = 12;\r\n } else if (hours > 12) {\r\n hours -= 12;\r\n }\r\n let convertedTime = '';\r\n if (hours < 10) {\r\n convertedTime += '0' + hours.toString();\r\n } else {\r\n convertedTime += hours.toString();\r\n }\r\n convertedTime += ':';\r\n if (minutes < 10) {\r\n convertedTime += '0' + minutes.toString();\r\n } else {\r\n convertedTime += minutes.toString();\r\n }\r\n convertedTime += ' ' + meridian;\r\n return convertedTime;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n static convert12HourTimeTo24HourTime(timeString: string): string {\r\n if (this.validate12HourTime(timeString)) {\r\n let hours = Number.parseInt(timeString.charAt(0) + timeString.charAt(1), 10);\r\n const minutes = Number.parseInt(timeString.charAt(3) + timeString.charAt(4), 10);\r\n const meridian = timeString.charAt(6) + timeString.charAt(7);\r\n if (meridian.toUpperCase().includes('A') && hours == 12) { // ONE-13787\r\n hours = 0;\r\n }\r\n if (meridian.toUpperCase().includes('P') && hours != 12) {\r\n hours += 12;\r\n }\r\n let convertedTime = '';\r\n if (hours < 10) {\r\n convertedTime += '0' + hours.toString();\r\n } else {\r\n convertedTime += hours.toString();\r\n }\r\n convertedTime += ':';\r\n if (minutes < 10) {\r\n convertedTime += '0' + minutes.toString();\r\n } else {\r\n convertedTime += minutes.toString();\r\n }\r\n convertedTime += ':00';\r\n return convertedTime;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n static forceUpdateValidity(form: NgForm) {\r\n // PRE: an ngForm\r\n // POST: updates the validity of each control\r\n setTimeout(() => {\r\n const controlKeys = Object.keys(form.controls);\r\n controlKeys.forEach(key => {\r\n form.controls[key].markAsTouched();\r\n try {\r\n form.controls[key].updateValueAndValidity();\r\n } catch (error) {\r\n console.log('Error while validating. Probably just a checkbox.');\r\n }\r\n });\r\n }, 10);\r\n }\r\n\r\n static roundDateUp(date: Date) {\r\n // PRE: a date to round up\r\n // POST: rounds the date up as close to the following day as possible\r\n if (date) {\r\n date.setHours(23);\r\n date.setMinutes(59);\r\n date.setSeconds(59);\r\n date.setMilliseconds(999);\r\n }\r\n }\r\n\r\n static roundDateDown(date: Date) {\r\n // PRE: a date to round down\r\n // POST: rounds the date down as close to the previous day as possible\r\n if (date) {\r\n date.setHours(0);\r\n date.setMinutes(0);\r\n date.setSeconds(0);\r\n date.setMilliseconds(0);\r\n }\r\n }\r\n\r\n static copyToClipboard(str: string) {\r\n const el = document.createElement('textarea') as HTMLTextAreaElement;\r\n el.value = str;\r\n document.body.appendChild(el);\r\n el.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(el);\r\n }\r\n\r\n static isNumeric(n) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n\r\n static convertDateToUTC(value: string): Date {\r\n // PRE: a string that represents a time\r\n // POST: converts that string to a date in UTC time zone\r\n if (value != null) {\r\n let date = new Date(value);\r\n if (typeof (value) != 'object' && value.indexOf('Z') < 0 && value.length > 10) {\r\n value = value + 'Z';\r\n date = new Date(Date.parse(value));\r\n }\r\n else if (typeof (value) != 'object' && value.length <= 10) {\r\n const objDate = value.split('/');\r\n date = new Date(Number(objDate[2]), (Number(objDate[0]) - 1), Number(objDate[1]));\r\n }\r\n date = new Date(date.getTime() + (60000 * date.getTimezoneOffset()));\r\n return date;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n static htmlToText(text: any) {\r\n if (!text) {\r\n return '';\r\n }\r\n if (typeof text != 'string') {\r\n text = text.toString();\r\n }\r\n text = text.replace(/ /g, ' ');\r\n text = text.replace(/&/g, '&');\r\n text = text.replace(/'/g, '\\'');\r\n text = text.replace(/"/g, '\"');\r\n text = text.replace(/"/g, '\"');\r\n text = text.replace(/</g, '<');\r\n text = text.replace(/</g, '<');\r\n text = text.replace(/>/g, '>');\r\n text = text.replace(/>/g, '>');\r\n text = text.replace(/=/g, '=');\r\n return text;\r\n }\r\n\r\n static textToHtml(html) {\r\n let text = '';\r\n if (html) {\r\n text = text + html;\r\n }\r\n text = text.replace(//g, '>');\r\n text = text.replace(/\"/g, '"');\r\n text = text.replace(/'/g, ''');\r\n text = text.replace(/&/g, '&');\r\n text = text.replace(/=/g, '=');\r\n return text;\r\n }\r\n\r\n static xmlToText(text: any) {\r\n if (!text) {\r\n return '';\r\n }\r\n if (typeof text != 'string') {\r\n text = text.toString();\r\n }\r\n text = text.replace(/&/g, '&');\r\n text = text.replace(/'/g, '\\'');\r\n text = text.replace(/"/g, '\"');\r\n text = text.replace(/</g, '<');\r\n text = text.replace(/>/g, '>');\r\n text = text.replace(/<>/g, 'Not=');\r\n return text;\r\n }\r\n\r\n static textToXML(xml) {\r\n let text = '';\r\n if (xml) {\r\n text = text + xml;\r\n }\r\n text = text.replace(//g, '>');\r\n text = text.replace(/\"/g, '"');\r\n text = text.replace(/'/g, ''');\r\n text = text.replace(/&/g, '&');\r\n text = text.replace(/Not=/g, '<>');\r\n return text;\r\n }\r\n\r\n static numberMask(rawValue: string) {\r\n // PRE: a string for an input\r\n // POST: returns a mask for only number values\r\n // NOTE: this is to be used with angular2-text-mask\r\n const mask = [];\r\n for (let i = 0; i < rawValue.length; i++) {\r\n mask.push('\\d');\r\n }\r\n return mask;\r\n }\r\n\r\n static currentTime(): string {\r\n // POST: returns a 12-hour string representation of the current time\r\n const currentDateTime = new Date();\r\n let currentHour = currentDateTime.getHours();\r\n const currentMinutes = currentDateTime.getMinutes();\r\n let am = true;\r\n if (currentHour >= 12) {\r\n am = false;\r\n currentHour -= 12;\r\n }\r\n return currentHour + ':' + (currentMinutes < 10 ? '0' + currentMinutes : currentMinutes) + ' ' + (am ? 'am' : 'pm');\r\n }\r\n\r\n static viewFileFromId(id: number, fileName: string, windowToUse?: Window) {\r\n // PRE: an ID and a file name. Optionally, a window to use.\r\n // POST: looks the attachment up and, if it is found, displays it\r\n const attachment = new Attachment();\r\n attachment.DocumentId = id;\r\n attachment.DocumentName = fileName;\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(attachment));\r\n let newWindow = null;\r\n if (windowToUse) {\r\n newWindow = windowToUse;\r\n } else {\r\n newWindow = window.open(System.baseUrl + 'studentattachment');\r\n }\r\n if (newWindow) {\r\n newWindow.focus();\r\n }\r\n }\r\n\r\n static viewFileFromBase(dataBase64: string, fileType: string, fileName: string, windowToUse?: Window) {\r\n // PRE: a base64, a file type, and a file name of the displayed file. Optionally, a window to use.\r\n // POST: views the file in a new window. If a window is provided, it will use that one.\r\n // If the file is too big or we can't show a new window, downloads the file instead\r\n if (this.checkEdge()) {\r\n this.saveFile(dataBase64, fileType, fileName);\r\n }\r\n else {\r\n try {\r\n const attachment = new Attachment();\r\n attachment.DocumentBase64 = dataBase64;\r\n attachment.DocumentMimeType = fileType;\r\n attachment.DocumentName = fileName;\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(attachment));\r\n let newWindow = null;\r\n if (windowToUse && System.mimeTypes.filter(type => type == fileType).length > 0) {\r\n newWindow = windowToUse;\r\n }\r\n else if (System.mimeTypes.filter(type => type == fileType).length > 0) {\r\n newWindow = window.open(System.baseUrl + 'studentattachment');\r\n }\r\n if (newWindow) {\r\n newWindow.focus();\r\n }\r\n else {\r\n this.saveFile(dataBase64, fileType, fileName);\r\n }\r\n } catch (e) {\r\n this.saveFile(dataBase64, fileType, fileName);\r\n }\r\n }\r\n }\r\n\r\n static checkEdge() {\r\n const ua = window.navigator.userAgent;\r\n const edge = ua.indexOf('Edge/');\r\n return edge > 1;\r\n }\r\n\r\n static saveFile(dataBase64, fileType, fileName) {\r\n // PRE: a base64, a file type, and a file name to set up a download\r\n // POST: downloads the file from the browser\r\n const byteCharacters = atob(dataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: fileType });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.id = 'lbl+' + fileName;\r\n a.style.display = 'none';\r\n document.body.appendChild(a);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n static saveTextToFile(filename: string, text: string) {\r\n const blob = new Blob([text], { type: 'text/plain' });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.style.display = 'none';\r\n document.body.appendChild(a);\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n static getTableHeight(tableContainerRef: ElementRef): number {\r\n // PRE: a reference to the table's container\r\n // POST: returns the amount of space the table may take up\r\n // NOTE: this won't work if you have multiple dynamic elements one after the other; you'll need to adjust it\r\n const tableHeightString = window.getComputedStyle(tableContainerRef.nativeElement.offsetParent, null).getPropertyValue('padding-bottom');\r\n // eslint-disable-next-line radix\r\n let tableHeight = -(Number.parseInt(tableHeightString.replace('px', '')));\r\n tableHeight -= tableContainerRef.nativeElement.offsetTop;\r\n if (tableContainerRef) {\r\n if (tableContainerRef.nativeElement.nextElementSibling) {\r\n tableHeight += tableContainerRef.nativeElement.nextElementSibling.offsetTop;\r\n } else {\r\n if (tableContainerRef.nativeElement.offsetParent.clientHeight < tableContainerRef.nativeElement.offsetParent.offsetHeight) {\r\n tableHeight += tableContainerRef.nativeElement.offsetParent.clientHeight;\r\n } else {\r\n tableHeight += tableContainerRef.nativeElement.offsetParent.offsetHeight;\r\n }\r\n }\r\n }\r\n return tableHeight;\r\n }\r\n\r\n static getTableWidth(tableContainerRef: ElementRef): number {\r\n // PRE: a reference to the table's container\r\n // POST: returns how much width the table may take up\r\n if (tableContainerRef) {\r\n return tableContainerRef.nativeElement.scrollWidth;\r\n }\r\n }\r\n\r\n static getElementHeight(element: ElementRef): number {\r\n // POST: returns an elements offsetHeight\r\n return element.nativeElement.offsetHeight;\r\n }\r\n\r\n static getBaseLocation() {\r\n if (location.host != 'localhost:4200') {\r\n const paths: string[] = location.pathname.split('/').splice(1, 1);\r\n const basePath: string = (paths && paths[0]) || '/';\r\n return '/' + basePath + '/';\r\n } else {\r\n return '/';\r\n }\r\n }\r\n\r\n static stripHTML = (str: string): string => {\r\n // POST: strips the HTML from a string\r\n return str ? str.replace(/(<(?:.|\\n)*?>| )/gm, '') : '';\r\n }\r\n\r\n static toCamelCase = (str: string): string => {\r\n // POST: returns the string in camelCase\r\n if (!str) {\r\n return '';\r\n }\r\n return str.toString().replace(/(?:\\b\\w|\\s)/g, function (letter: string, index: number) {\r\n if (letter.match(/\\s/)) {\r\n return '';\r\n } else {\r\n return index == 0 ? letter.toLowerCase() : letter.toUpperCase();\r\n }\r\n });\r\n }\r\n\r\n static randomString = (length = 5): string => {\r\n // POST: generates a random string of the specified length\r\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, length);\r\n }\r\n\r\n static fnConverDate(data: any) {\r\n // POST: convert date string to date object if date string matches the regular expression.\r\n if (typeof data !== 'object') { return data; }\r\n\r\n for (const key in data) {\r\n if (!data.hasOwnProperty(key)) { continue; }\r\n\r\n const value = data[key];\r\n const type = typeof value;\r\n let match;\r\n if (type == 'string' && (match = value.match(System.iso8601RegEx))) {\r\n data[key] = new Date(value);\r\n }\r\n else if (type === 'object') {\r\n this.fnConverDate(value);\r\n }\r\n }\r\n }\r\n\r\n static clone = (clonedObject: Object): T => {\r\n const clone = Object.create(clonedObject) as T;\r\n const props = Object.getOwnPropertyNames(clonedObject);\r\n for (let i = 0; i < props.length; i++) {\r\n const descriptor = Object.getOwnPropertyDescriptor(clonedObject, props[i]);\r\n Object.defineProperty(\r\n clone,\r\n props[i],\r\n descriptor\r\n );\r\n }\r\n return clone;\r\n }\r\n\r\n static convert = (toConvert: Object, convertedTo: T): T => {\r\n // PRE: an object to convert and an object to convert to\r\n // \tThe object converted to must have its properties defined\r\n // \tSystem is due to a limitation on javascript (it doesn't remember types at runtime)\r\n // \tconvertedTo should also not be an important reference\r\n // POST: converts the first object into the second\r\n // NOTE: each object type you want suported has to be included in the for loop below.\r\n // \t\t currently supports: Date, Array\r\n if (toConvert == null) {\r\n if (convertedTo) {\r\n return convertedTo;\r\n } else {\r\n return null;\r\n }\r\n }\r\n const convertedToProps = Object.getOwnPropertyNames(convertedTo);\r\n const toConvertProps = Object.getOwnPropertyNames(toConvert);\r\n for (let i = 0; i < convertedToProps.length; i++) {\r\n\r\n // If the object to be converted has that value ...\r\n const indexOfMatchingProp = toConvertProps.indexOf(convertedToProps[i]);\r\n if (indexOfMatchingProp >= 0) {\r\n\r\n // If that is an array, convert each element that's an object\r\n if (Array.isArray(toConvert[convertedToProps[i]])) {\r\n toConvert[convertedToProps[i]] = System.copyArray(toConvert[convertedToProps[i]]);\r\n }\r\n\r\n // If a date, convert to date\r\n if (\r\n ((\r\n System.getType(convertedTo[convertedToProps[i]]) == 'Date' &&\r\n System.getType(toConvert[convertedToProps[i]]) != 'Date'\r\n ) ||\r\n (\r\n typeof toConvert[convertedToProps[i]] == 'string'\r\n && System.iso8601RegEx.test(toConvert[convertedToProps[i]])\r\n )) && (toConvert[convertedToProps[i]] != null)\r\n ) {\r\n toConvert[convertedToProps[i]] = new Date(toConvert[convertedToProps[i]]);\r\n }\r\n\r\n // If not, we just maintain the value\r\n // But we want to track which properties we've covered, so remove it from the list\r\n toConvertProps.splice(indexOfMatchingProp, 1);\r\n }\r\n\r\n // If the object does not have the converted value, add the value to the converted object\r\n else {\r\n toConvert[convertedToProps[i]] = convertedTo[convertedToProps[i]];\r\n }\r\n }\r\n\r\n // Assigning the object to capture the values\r\n Object.assign(convertedTo, toConvert);\r\n\r\n // For all the remaining props in toConvert, add them to the converted object\r\n // NOTE: we mostly want to do this for dynamic data\r\n for (let i = 0; i < toConvertProps.length; i++) {\r\n const descriptor = Object.getOwnPropertyDescriptor(toConvert, toConvertProps[i]);\r\n Object.defineProperty(\r\n convertedTo,\r\n toConvertProps[i],\r\n descriptor\r\n );\r\n }\r\n\r\n // Returning the object\r\n return convertedTo;\r\n }\r\n\r\n static copyObject = (copiedObject: Object, conversionObject: T): T => {\r\n // PRE: the object to be copied and a blank object to copy to\r\n // \tThe conversion object must have its properties defined\r\n // \tSystem is due to a limitation on javascript (it doesn't remember types at runtime)\r\n // \tconversionObject should also not be an important reference\r\n // POST: copies the object to the blank object\r\n // NOTE: System doesn't perform any type conversions\r\n // each object type you want suported has to be included in the for loop below.\r\n // \t\t currently supports: Date\r\n return System.convert(JSON.parse(JSON.stringify(copiedObject)), conversionObject);\r\n }\r\n\r\n static copyArray = (copiedArray) => {\r\n // POST: copies the array into a new array\r\n const newArray = [];\r\n for (let i = 0; i < copiedArray.length; i++) {\r\n\r\n // If it's an array, copy that\r\n if (Array.isArray(copiedArray[i])) {\r\n newArray.push(System.copyArray(copiedArray[i]));\r\n }\r\n\r\n // If it's an object, convert it\r\n else if (typeof (copiedArray[i]) == 'object' && copiedArray[i] != null) {\r\n newArray.push(System.convert(copiedArray[i], Object.assign({}, copiedArray[i])));\r\n }\r\n\r\n // If it's not an object, just copy it\r\n else {\r\n newArray.push(copiedArray[i]);\r\n }\r\n }\r\n return newArray;\r\n }\r\n\r\n static insertAt = (arr: T[], item: T, index: number): T[] => {\r\n // PRE: an array, an item to insert, and an index\r\n // POST: inserts the item at that position in the array\r\n let newArr = arr.splice(0, index);\r\n newArr.push(item);\r\n newArr = newArr.concat(arr);\r\n return newArr;\r\n }\r\n\r\n static isEqual = (a: Object, b: Object): boolean => {\r\n // PRE: two objects to compare\r\n // POST: determines if the two objects have equal values\r\n if (a == null || b == null) {\r\n return a == b;\r\n }\r\n const aProps = Object.getOwnPropertyNames(a);\r\n const bProps = Object.getOwnPropertyNames(b);\r\n if (aProps.length != bProps.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < aProps.length; i++) {\r\n const propName = aProps[i];\r\n if (typeof a[propName] == 'object' && a[propName] != null) {\r\n if (typeof b[propName] != 'object' || b[propName] == null) {\r\n return false;\r\n } else if (!System.isEqual(a[propName], b[propName])) {\r\n return false;\r\n }\r\n } else if (a[propName] != b[propName]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static arrayEqual = (a: Array, b: Array): boolean => {\r\n // PRE: two arrays to compare\r\n // POST: determines if the two arrays are equal\r\n // NOTE: this is not a deep equality\r\n if (a == null || b == null) {\r\n return a == b;\r\n }\r\n if (a.length != b.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] != b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n static getType = (a: object): string => {\r\n // POST: returns the name of the object\r\n if (a == null) {\r\n return '';\r\n } else {\r\n return a.constructor.name;\r\n }\r\n }\r\n\r\n static isValid(val: any): boolean {\r\n if (val != null && val !== undefined) {\r\n if (val.length != null) {\r\n if (val.length > 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static isValidDate(d: Date | string): boolean {\r\n if (d instanceof Date) {\r\n return !isNaN(d.getTime());\r\n }\r\n else {\r\n const dt = new Date(d);\r\n return !isNaN(dt.getTime());\r\n }\r\n }\r\n\r\n static isEven(rowId) {\r\n return (rowId % 2) === 0;\r\n }\r\n\r\n static generateUUID(): string {\r\n let d = new Date().getTime(); // Timestamp\r\n let d2 = (performance && performance.now && (performance.now() * 1000)) || 0; // Time in microseconds since page-load or 0 if unsupported\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n let r = Math.random() * 16; // random number between 0 and 16\r\n if (d > 0) {// Use timestamp until depleted\r\n // eslint-disable-next-line no-bitwise\r\n r = (d + r) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n } else {// Use microseconds since page-load if supported\r\n // eslint-disable-next-line no-bitwise\r\n r = (d2 + r) % 16 | 0;\r\n d2 = Math.floor(d2 / 16);\r\n }\r\n // eslint-disable-next-line no-bitwise\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n }\r\n\r\n static removeSecondsFromTimeString(timeString: string): string {\r\n if (timeString.split(':').length > 2) {\r\n return timeString.slice(0, -3);;\r\n } else {\r\n return timeString;\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n Add Attachment\r\n Edit Attachment\r\n
\r\n
\r\n {{attachment.AttachmentDescription}}\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
0\">\r\n \r\n \r\n \r\n {{documentType.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n \r\n
0\">\r\n \r\n \r\n \r\n {{documentType.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n Allow parent/student to view file on portal\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n \r\n \r\n","import { LoginService } from '../../shared-modules/login/login.service';\r\nimport { ErrorList } from '../controls/error-prompt/error-list.model';\r\nimport { Attachment } from '../models/attachment.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { Lookup } from '../lookup/lookup.model';\r\nimport { NgForm } from '@angular/forms';\r\nimport { System } from '../System';\r\nimport { SecurityService } from '../security/security.service';\r\n\r\n/**\r\n * This dialog can be used whenever you need to upload an attachment.\r\n *\r\n * MAT_DIALOG_DATA:\r\n * attachment: an attachment that the file will be attached to\r\n * newAttachment: a boolean indicating whether this is adding or editing\r\n *\r\n * After saving, the attachment will have a file base 64 string in MyFileBase64String\r\n */\r\n@Component({\r\n selector: 'add-attachment',\r\n templateUrl: './add-attachment-dialog.component.html',\r\n styleUrls: [\r\n './add-attachment-dialog.component.css'\r\n ]\r\n})\r\nexport class AddAttachmentDialogComponent implements OnInit {\r\n\r\n // Static Properties\r\n static DefaultAllowedFileTypes: string[] = [\r\n 'pdf',\r\n 'jpg',\r\n 'jpeg',\r\n 'png',\r\n 'gif',\r\n 'txt',\r\n 'doc',\r\n 'docx',\r\n 'xls',\r\n 'xlsx',\r\n 'mp3',\r\n 'mp4',\r\n 'm4a',\r\n 'm4v'\r\n ];\r\n\r\n // Properties\r\n attachment: Attachment;\r\n errors: ErrorList[] = [];\r\n originalAttachment: Attachment;\r\n documentTypeId: string;\r\n documentTypes: Lookup[];\r\n V10: boolean;\r\n saved = false;\r\n newAttachment = false;\r\n editAttachment = false;\r\n showPortalVisibility = false;\r\n forGradebook: boolean;\r\n type = '';\r\n @Output() saveEvent = new EventEmitter();\r\n requireDescription: boolean;\r\n requireDocumentType: boolean;\r\n @ViewChild('form', { read: NgForm, static: true }) formRef: NgForm;\r\n @ViewChild('descriptionField', { read: ElementRef }) descriptionField: ElementRef;\r\n @ViewChild('documentTypeField', { read: ElementRef }) documentTypeField: ElementRef;\r\n allowedFileTypes: string[] = AddAttachmentDialogComponent.DefaultAllowedFileTypes;\r\n fileTypeErrorMessageText: string = 'Only .txt, .doc(x), .xls(x), .pdf, .jpg, .png, .gif, .mp3, m4a, .mp4, and m4v files can be uploaded.';\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private securityService: SecurityService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected dialog data with attachment and\r\n // POST: initializes the data\r\n this.type = this.data.type;\r\n this.attachment = this.data.attachment;\r\n this.newAttachment = this.data.newAttachment;\r\n if (this.data.editAttachment != null && this.data.editAttachment != undefined) {\r\n this.editAttachment = this.data.editAttachment;\r\n }\r\n this.originalAttachment = new Attachment();\r\n Object.assign(this.originalAttachment, this.attachment);\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.documentTypes = this.data.documentTypes;\r\n this.forGradebook = this.data.forGradebook;\r\n this.requireDescription = this.data.requireDescription;\r\n this.requireDocumentType = this.data.requireDocumentType;\r\n if (this.data.allowedFileTypes) {\r\n this.allowedFileTypes = this.data.allowedFileTypes;\r\n }\r\n if (this.data.fileTypeErrorMessageText) {\r\n this.fileTypeErrorMessageText = this.data.fileTypeErrorMessageText;\r\n }\r\n if (this.newAttachment == false || this.editAttachment == true) {\r\n const filExtension = this.attachment.FileName.split('.');\r\n this.attachment.FileExtension = filExtension[1];\r\n // Needed because DocumentTypeId is a number, while LookUp id is a string\r\n if (this.attachment.DocumentTypeId != undefined) {\r\n this.documentTypeId = this.attachment.DocumentTypeId.toString();\r\n } else {\r\n this.documentTypeId = '0';\r\n }\r\n }\r\n\r\n if (!this.V10)\r\n this.getDocumentTypePermissions();\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: if valid, closes the dialog with saved as true\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.saved = true;\r\n // Needed because DocumentTypeId is a number, while LookUp id is a string\r\n this.attachment.DocumentTypeId = parseInt(this.documentTypeId, 10);\r\n if (!this.V10 && this.attachment.DocumentTypeId > 0)\r\n this.attachment.DocumentType = this.documentTypes.filter(dt => dt.Id == this.documentTypeId)[0].CodeDescription;\r\n this.saveEvent.emit(this.attachment);\r\n this.dialogBox.close(true);\r\n } else {\r\n System.forceUpdateValidity(this.formRef);\r\n }\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: resets the attachment and closes the dialog\r\n Object.assign(this.attachment, this.originalAttachment);\r\n this.dialogBox.close(false);\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets the errors or changes the data to conform with preconditions\r\n this.errors = [];\r\n\r\n if (this.attachment.FileName == '') {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'File required.'\r\n });\r\n }\r\n if (this.attachment.FileName.split('.').slice(0, -1).join('.').length > 100) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'The file name you are attaching is greater than 100 characters. Please rename the file you are attaching to 100 characters or less.'\r\n });\r\n }\r\n if (this.requireDescription && !this.V10 && !this.attachment.Description) {\r\n this.errors.push({\r\n fieldRef: this.descriptionField,\r\n fieldName: 'Description',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n else if (this.requireDescription && this.V10 && !this.attachment.FileDescription) {\r\n this.errors.push({\r\n fieldRef: this.descriptionField,\r\n fieldName: 'File Description',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n\r\n else if (this.type == 'ImportedDocuments') {\r\n if (!this.attachment.Description) {\r\n this.errors.push({\r\n fieldRef: this.descriptionField,\r\n fieldName: 'File Description',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n }\r\n if (this.requireDocumentType && this.V10 && !this.documentTypeId) {\r\n this.errors.push({\r\n fieldRef: this.documentTypeField,\r\n fieldName: 'File Type',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n\r\n // Validating file if no other errors are present\r\n if (this.errors.length == 0) {\r\n const fileExtensionRegExp = /\\.[a-z0-9]*$/;\r\n if (!this.allowedFileTypes.includes(this.attachment.FileExtension.toLowerCase())) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: this.fileTypeErrorMessageText\r\n });\r\n } else if (fileExtensionRegExp.test(this.attachment.FileName)) {\r\n const fileExt = this.attachment.FileName.split('.');\r\n if (fileExt[fileExt.length - 1] != this.attachment.FileExtension) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: '',\r\n errorMsg: 'The file name\\'s extension does not match the uploaded file.'\r\n });\r\n }\r\n } else {\r\n this.attachment.FileName += '.' + this.attachment.FileExtension;\r\n }\r\n }\r\n }\r\n\r\n getDocumentTypePermissions() {\r\n this.documentTypes = JSON.parse(JSON.stringify(this.documentTypes));\r\n let maintainAllDocumentTypes = this.securityService.IsAllPermissionCodeAssigned('DSF_MADFSF');\r\n let maintainDocumentTypeCategories = this.securityService.userPermissions.filter(p => p.PermissionCode == 'DSF_MDSF');\r\n if (!maintainAllDocumentTypes) {\r\n for (let i = this.documentTypes.length - 1; i >= 0; i--) {\r\n if (this.documentTypes[i].PermissionCategory.length > 0 && maintainDocumentTypeCategories.filter(c => c.PermissionCategory == this.documentTypes[i].PermissionCategory).length == 0)\r\n this.documentTypes.splice(i, 1);\r\n }\r\n }\r\n }\r\n}","import { OnDestroy, OnInit, Directive } from '@angular/core';\r\nimport { DataQuery } from '../../classroom360/data-query/models/data-query.model';\r\nimport { DataQueryInformation } from '../../classroom360/data-query/models/data-query-information';\r\nimport { DataQueryPreferences } from '../user-preferences/data-query-preferences.model';\r\nimport { DataQueryField } from '../../classroom360/data-query/models/data-query-field.model';\r\nimport { DataQueryService } from '../../classroom360/data-query/data-query.service';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { GeneralPreferences } from '../user-preferences/general-preferences.model';\r\nimport { UserPreferencesService } from '../user-preferences/user-preferences.service';\r\nimport { DataQueryFieldFilter } from '../../classroom360/data-query/models/data-query-field-filter.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { DataQueryResult } from '../../classroom360/data-query/models/data-query-result.model';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { LookupService } from '../lookup/lookup.service';\r\nimport { YearService } from '../year/year.service';\r\nimport { InsertFieldDialogComponent } from '../../classroom360/data-query/data-query-settings-for-export/insert-field-dialog/insert-field-dialog.component';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { ErrorList } from '../controls/error-prompt/error-list.model';\r\n\r\n@Directive()\r\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\r\nexport class AdvancedFilterComponent implements OnInit, OnDestroy {\r\n\r\n // Data Query Properties\r\n private _currentQuery = new DataQuery();\r\n private _information = new DataQueryInformation();\r\n private _preferences = new DataQueryPreferences();\r\n\r\n // Initialization Properties\r\n title: string;\r\n recentFilters: DataQuery[] = [];\r\n fieldsWithoutFilters: string[] = [];\r\n\r\n // Other Properties\r\n subscriptions: Subscription[] = [];\r\n generalPreferences: GeneralPreferences;\r\n allFilters: DataQueryFieldFilter[] = [];\r\n originalQuery = new DataQuery();\r\n\r\n advancedStudentSearchErrors: ErrorList[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n public dataQueryService: DataQueryService,\r\n public userPreferencesService: UserPreferencesService,\r\n public loginService: LoginService,\r\n public dialogBox: MatDialogRef,\r\n public lookupService: LookupService,\r\n public yearService: YearService,\r\n public dialog: MatDialog\r\n ) { }\r\n\r\n get currentQuery() {\r\n return this._currentQuery;\r\n }\r\n\r\n set currentQuery(value: DataQuery) {\r\n this.dataQueryService.checkDeactivationAndChange(value);\r\n }\r\n\r\n get information() {\r\n return this._information;\r\n }\r\n\r\n get preferences() {\r\n return this._preferences;\r\n }\r\n\r\n get filterFields(): DataQueryField[] {\r\n return this.currentQuery.filterFields;\r\n }\r\n\r\n set filterFields(value: DataQueryField[]) {\r\n this.currentQuery.filterFields.splice(0, this.currentQuery.filterFields.length);\r\n Object.assign(this.currentQuery.filterFields, value);\r\n }\r\n\r\n get filterTranslation() {\r\n return this.currentQuery ? this.currentQuery.filterTranslation : '';\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.generalPreferences = this.userPreferencesService.generalPreferences;\r\n this.initialize();\r\n\r\n // Utility function to load query\r\n const loadQuery = () => {\r\n\r\n // Only perform opreation if there is the proper data\r\n if (this.preferences && this.information) {\r\n\r\n // If our query is not set...\r\n if (this.currentQuery.filterFields.length == 0) {\r\n\r\n // Load default query\r\n if (this.dataQueryService.courseSearchQuery) {\r\n this.dataQueryService.loadQuery(this.dataQueryService.courseSearchQuery);\r\n } else {\r\n\r\n // Adding default fields\r\n this.dataQueryService.checkDefaultFilterFields(\r\n null,\r\n (field: DataQueryField) => {\r\n const addField = field.duplicate();\r\n this.addField(addField, !this.fieldsWithoutFilters.includes(addField.FieldName));\r\n this.setFilterValue(addField, true);\r\n }\r\n );\r\n }\r\n }\r\n\r\n // If our query is set...\r\n else {\r\n\r\n // Check default fields\r\n this.dataQueryService.checkDefaultFilterFields(\r\n this.currentQuery.filterFields,\r\n (field: DataQueryField) => {\r\n this.setFilterValue(field, false);\r\n }\r\n );\r\n }\r\n\r\n // Setting the filters for the table\r\n this.setAllFilters();\r\n\r\n // Updating the SQL translation\r\n this.dataQueryService.updateFilter();\r\n this.dataQueryService.pageSize = this.dataQueryService.initialPageSize;\r\n }\r\n };\r\n\r\n // Performing subscriptions\r\n this.subscriptions.push(\r\n\r\n // Syncing properties\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(query => {\r\n this._currentQuery = query;\r\n this.originalQuery = _.cloneDeep(query);\r\n loadQuery();\r\n this.setAllFilters();\r\n this._currentQuery.CourseSearch = this.dataQueryService.isCourseSearch;\r\n this._currentQuery.StudentSearch = this.dataQueryService.isStudentSearch;\r\n this._currentQuery.StaffSearch = this.dataQueryService.isStaffSearch;\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this._information = information;\r\n loadQuery();\r\n }),\r\n this.dataQueryService.observablePreferencesStream$.subscribe(preferences => {\r\n this._preferences = preferences;\r\n loadQuery();\r\n }),\r\n this.userPreferencesService.observablegeneralPreferencesStream$.subscribe(generalPreferences => {\r\n this.generalPreferences = generalPreferences;\r\n loadQuery();\r\n }),\r\n\r\n // Obtaining data\r\n this.dataQueryService.getInformation().subscribe(),\r\n this.dataQueryService.getPreferences().subscribe()\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n // Unsubscribing to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n this.takeDown();\r\n }\r\n\r\n addFilter() {\r\n // PRE: the add filter button is clicked\r\n // POST: opens a dialog to select a field. Adds the selected field as a filter\r\n\r\n // We need to ensure we have all our fields properly set as disabled or enabled\r\n this.dataQueryService.disabledFields = {};\r\n this.information.fields.forEach(field => {\r\n this.dataQueryService.checkDisabledField(field);\r\n });\r\n\r\n // Opening the dialog with those disabled fields\r\n const insertFieldDialog = this.dialog.open(InsertFieldDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n information: this.information,\r\n isCourseSearch: this.dataQueryService.isCourseSearch,\r\n isStudentSearch: this.dataQueryService.isStudentSearch,\r\n isStaffSearch: this.dataQueryService.isStaffSearch,\r\n disabledFields: this.dataQueryService.disabledFields\r\n }\r\n });\r\n this.subscriptions.push(\r\n insertFieldDialog.afterClosed().subscribe((field: DataQueryField) => {\r\n if (field) {\r\n field = field.duplicate();\r\n this.currentQuery.queryChanged = true;\r\n this.filterFields.push(field);\r\n this.obtainFilterOptions(field, filterOptions => {\r\n this.setFilterField(filterOptions, field);\r\n this.setAllFilters();\r\n });\r\n }\r\n })\r\n );\r\n }\r\n\r\n apply() {\r\n this.advancedStudentSearchErrors = [];\r\n // Code for invalid Enrollment Date\r\n for (let i = 0; i < this.currentQuery.filterFields.length; i++) {\r\n if (this.currentQuery.filterFields[i].Alias == 'Enrollment Date') {\r\n for (let j = 0; j < this.currentQuery.filterFields[i].Filters.length; j++) {\r\n if (this.currentQuery.filterFields[i].Filters[j].Value && this.currentQuery.filterFields[i].Filters[j].Value != null) {\r\n // alert(this.currentQuery.filterFields[i].Filters[j].Value);\r\n const dateValue = this.currentQuery.filterFields[i].Filters[j].Value.toString();\r\n if (!moment(dateValue, ['MM/DD/YYYY']).isValid()\r\n || moment(dateValue, ['MM/DD/YYYY']).isBefore(moment('01/01/1900', ['MM/DD/YYYY']))\r\n || (moment('01/01/2070', ['MM/DD/YYYY'])).isBefore(moment(dateValue, ['MM/DD/YYYY']))) {\r\n this.advancedStudentSearchErrors.push({\r\n fieldName: 'Enrollment Date',\r\n fieldRef: null,\r\n errorMsg: 'Invalid'\r\n });\r\n return 0;\r\n }\r\n }\r\n\r\n if (this.currentQuery.filterFields[i].Filters[j].Value2 && this.currentQuery.filterFields[i].Filters[j].Value2 != null) {\r\n // alert(this.currentQuery.filterFields[i].Filters[j].Value);\r\n const dateValue = this.currentQuery.filterFields[i].Filters[j].Value2.toString();\r\n if (!moment(dateValue, ['MM/DD/YYYY']).isValid()\r\n || moment(dateValue, ['MM/DD/YYYY']).isBefore(moment('01/01/1900', ['MM/DD/YYYY']))\r\n || (moment('01/01/2070', ['MM/DD/YYYY'])).isBefore(moment(dateValue, ['MM/DD/YYYY']))) {\r\n this.advancedStudentSearchErrors.push({\r\n fieldName: 'Enrollment Date',\r\n fieldRef: null,\r\n errorMsg: 'Invalid'\r\n });\r\n return 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Code for invalid Birth Date\r\n for (let i = 0; i < this.currentQuery.filterFields.length; i++) {\r\n if (this.currentQuery.filterFields[i].Alias == 'Birth Date') {\r\n for (let j = 0; j < this.currentQuery.filterFields[i].Filters.length; j++) {\r\n if (this.currentQuery.filterFields[i].Filters[j].Value && this.currentQuery.filterFields[i].Filters[j].Value != null) {\r\n // alert(this.currentQuery.filterFields[i].Filters[j].Value);\r\n const dateValue = this.currentQuery.filterFields[i].Filters[j].Value.toString();\r\n if (!moment(dateValue, ['MM/DD/YYYY']).isValid()\r\n || moment(dateValue, ['MM/DD/YYYY']).isBefore(moment('01/01/1900', ['MM/DD/YYYY']))\r\n || (moment('01/01/2070', ['MM/DD/YYYY'])).isBefore(moment(dateValue, ['MM/DD/YYYY']))) {\r\n this.advancedStudentSearchErrors.push({\r\n fieldName: 'Birth Date',\r\n fieldRef: null,\r\n errorMsg: 'Invalid'\r\n });\r\n return 0;\r\n }\r\n }\r\n\r\n if (this.currentQuery.filterFields[i].Filters[j].Value2 && this.currentQuery.filterFields[i].Filters[j].Value2 != null) {\r\n // alert(this.currentQuery.filterFields[i].Filters[j].Value);\r\n const dateValue = this.currentQuery.filterFields[i].Filters[j].Value2.toString();\r\n if (!moment(dateValue, ['MM/DD/YYYY']).isValid()\r\n || moment(dateValue, ['MM/DD/YYYY']).isBefore(moment('01/01/1900', ['MM/DD/YYYY']))\r\n || (moment('01/01/2070', ['MM/DD/YYYY'])).isBefore(moment(dateValue, ['MM/DD/YYYY']))) {\r\n this.advancedStudentSearchErrors.push({\r\n fieldName: 'Birth Date',\r\n fieldRef: null,\r\n errorMsg: 'Invalid'\r\n });\r\n return 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // PRE: The apply button is clicked\r\n // POST: Shows the warning dialog for saving and/or continuing if the query is changed.\r\n // After, gets the results and closes with them\r\n let schoolIds = '';\r\n this.yearService.schools.forEach(school => {\r\n if (school.SchoolName == this.dataQueryService.studentSearchFilters.ddlSchool || this.dataQueryService.studentSearchFilters.ddlSchool == '') {\r\n schoolIds = schoolIds + (schoolIds == '' ? school.Id.toString() : ',' + school.Id.toString());\r\n }\r\n });\r\n let hasErrors = false;\r\n for (let i = 0; i < this.currentQuery.filterFields.length; i++) {\r\n for (let j = 0; j < this.currentQuery.filterFields[i].Filters.length; j++) {\r\n if (this.currentQuery.filterFields[i].Filters[j].showFilterError1 || this.currentQuery.filterFields[i].Filters[j].showFilterError2) {\r\n hasErrors = true;\r\n break;\r\n }\r\n }\r\n if (hasErrors) {\r\n break;\r\n }\r\n }\r\n if (!hasErrors) {\r\n this.checkCurrentQueryWarning(() => {\r\n this.dataQueryService.getResults(\r\n false,\r\n (results: DataQueryResult) => {\r\n console.log(results);\r\n this.dialogBox.close(results);\r\n },\r\n (dataQueryFormError: any) => {\r\n if (dataQueryFormError.blankAlias) {\r\n // TODO: Error circle?\r\n }\r\n if (dataQueryFormError.duplicateAlias) {\r\n // TODO: Error circle?\r\n }\r\n },\r\n true,\r\n true,\r\n schoolIds\r\n );\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: checks if we need to save and closes the dialog\r\n this.checkCurrentQueryWarning(() => {\r\n Object.assign(this.currentQuery, this.originalQuery);\r\n this.dialogBox.close();\r\n });\r\n }\r\n\r\n // Methods\r\n addField(field: DataQueryField, withFilter = true) {\r\n // PRE: a field to add to the query\r\n // POST: adds the field to the query appropriately\r\n field.IsDefaultFilterField = true;\r\n const addedField = field.duplicate();\r\n addedField.SortDirection = 'None';\r\n if (!this.currentQuery.reportFields.find(reportField => reportField.ID == addedField.ID)) {\r\n this.currentQuery.reportFields.push(addedField);\r\n }\r\n if (!this.currentQuery.sortFields.find(sortField => sortField.ID == addedField.ID)) {\r\n this.currentQuery.sortFields.push(addedField);\r\n }\r\n addedField.CategoryName = addedField.category.CategoryName;\r\n addedField.ObjectName = addedField.object.ObjectName;\r\n if (withFilter) {\r\n this.addDefaultFilterField(field);\r\n }\r\n }\r\n\r\n addDefaultFilterField(field: DataQueryField) {\r\n // POST: adds the default field filter for the field, including its enumeration values\r\n this.filterFields.push(field);\r\n this.obtainFilterOptions(field, filterOptions => {\r\n this.setFilterField(filterOptions, field.ID);\r\n this.setFilterValue(field, true);\r\n this.setAllFilters();\r\n });\r\n }\r\n\r\n checkCurrentQueryWarning(callback: Function) {\r\n // PRE: a callback function we're checking for\r\n // POST: shows the warning if needed and calls the callback if the user continues\r\n if (this.currentQuery.queryChanged) {\r\n const warning = this.dataQueryService.showWarning();\r\n if (warning instanceof Observable) {\r\n warning.subscribe(result => {\r\n if (result) {\r\n callback();\r\n }\r\n });\r\n } else {\r\n if (warning) {\r\n callback();\r\n }\r\n }\r\n } else {\r\n callback();\r\n }\r\n }\r\n\r\n obtainFilterOptions(field: DataQueryField, _callback: Function) {\r\n let filterOptions = [];\r\n if (field.FilterType == 3) {\r\n if (this.loginService.LoginSettings.V10 || field.FieldName != 'Pri Enrl Site Name') {\r\n this.subscriptions.push(\r\n this.lookupService.getDataQueryFieldLookupReadByFieldId(field.ID, field.CategoryID).subscribe(\r\n results => {\r\n filterOptions = results;\r\n },\r\n () => { },\r\n () => {\r\n _callback(filterOptions);\r\n }\r\n )\r\n );\r\n } else {\r\n this.subscriptions.push(\r\n this.yearService.getStudentSearchSchoolByYearId(this.yearService.defaultYear.Id).subscribe(\r\n results => {\r\n for (let i = 0; i < results.length; i++) {\r\n filterOptions.push({\r\n Id: results[i].SchoolId, Code: '',\r\n CodeDescription: results[i].SchoolName,\r\n Sequence: i + 2\r\n });\r\n }\r\n const allSchools = {\r\n Id: 0,\r\n Code: '',\r\n CodeDescription: 'All',\r\n Sequence: 1\r\n };\r\n filterOptions.unshift(allSchools);\t// Does this work???\r\n },\r\n () => { },\r\n () => {\r\n _callback(filterOptions);\r\n }\r\n )\r\n );\r\n }\r\n } else {\r\n _callback(filterOptions);\r\n }\r\n }\r\n\r\n setFilterField(filterOptions, fieldId) {\r\n // PRE: the options for the filter and the filter's field ID\r\n // POST: sets the filter for the field\r\n let filter = new DataQueryFieldFilter();\r\n let field: DataQueryField;\r\n if (typeof fieldId === 'number') {\r\n field = this.filterFields.find(f => f.ID == fieldId);\r\n } else if (fieldId.ID) {\r\n field = this.filterFields.find(f => f.ID == fieldId.ID);\r\n }\r\n\r\n // Creating new filter if one doesn't exist\r\n if (field.Filters.length == 0) {\r\n\r\n // Setting intermediary values\r\n filter.FilterID = DataQueryService.filterFieldId;\r\n filter.FilterOptions = filterOptions;\r\n this.setFilterPropertiesSwitch(field, filter);\r\n\r\n // Setting the filter fields\r\n this.dataQueryService.setShowOnReportParameters();\r\n filter.field = field;\r\n DataQueryService.filterFieldId = DataQueryService.filterFieldId + 1;\r\n }\r\n\r\n // Adding options if a filter does exist\r\n else if (filterOptions.length > 0) {\r\n filter = field.Filters[0];\r\n filter.FilterOptions = filterOptions;\r\n }\r\n\r\n // Added the filter if it isn't there\r\n if (!this.allFilters.includes(filter)) {\r\n this.allFilters.push(filter);\r\n }\r\n this.dataQueryService.setShowOnReportParameters();\r\n }\r\n\r\n setAllFilters() {\r\n // POST: sets the \"All Filters\" array, which controls the table data\r\n const allFilters = [];\r\n this.filterFields.forEach(field => {\r\n field.Filters.forEach(filter => {\r\n allFilters.push(filter);\r\n\r\n // Ensuring the filter is associated\r\n filter.field = field;\r\n\r\n // Setting the operator to the first viable one if one doesn't exist\r\n if (!filter.Operator) {\r\n const operators = filter.getFilterOperators();\r\n filter.Operator = operators[0];\r\n }\r\n });\r\n });\r\n this.allFilters = allFilters;\r\n\r\n // Updating the SQL translation\r\n this.dataQueryService.updateFilter();\r\n this.dataQueryService.pageSize = this.dataQueryService.initialPageSize;\r\n }\r\n\r\n setFilterValue(field: DataQueryField, updateUsing: boolean) {\r\n // POST: sets the value of each filter\r\n if (field.Filters.length > 0) {\r\n const filter = field.Filters[0];\r\n if (field.IsDefaultFilterField) {\r\n if (this.loginService.LoginSettings.V10 == false) {\r\n switch (field.DisplayName) {\r\n case 'Student ID':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.StudentNumber = filter.Value;\r\n }\r\n break;\r\n case 'Name - First':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.FirstName = filter.Value;\r\n }\r\n break;\r\n case 'Name - Last':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.LastName = filter.Value;\r\n }\r\n break;\r\n case 'Grade':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.Grade = filter.Value;\r\n }\r\n break;\r\n case 'Enrollment Date':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.EnrollmentDate = filter.Value;\r\n }\r\n break;\r\n case 'Birth Date':\r\n if (filter.UseFilterForStudentSearch) {\r\n this.dataQueryService.studentSearchFilters.DOB = filter.Value;\r\n }\r\n break;\r\n }\r\n }\r\n this.setValueSwitch(field, filter, updateUsing);\r\n }\r\n }\r\n }\r\n\r\n // Override Functions\r\n initialize() {\r\n // NOTE: THIS SHOULD BE OVERRIDDEN\r\n }\r\n\r\n takeDown() {\r\n // NOTE: THIS SHOULD BE OVERRIDEN\r\n }\r\n\r\n setValueSwitch(field: DataQueryField, filter: DataQueryFieldFilter, updateUsing: boolean) {\r\n // NOTE: THIS SHOULD BE OVERRIDDEN\r\n }\r\n\r\n setFilterPropertiesSwitch(field: DataQueryField, filter: DataQueryFieldFilter) {\r\n // NOTE: THIS SHOULD BE OVERRIDDEN\r\n }\r\n}\r\n","import { MatTableDataSource } from '@angular/material/table';\r\nimport { FilterModel } from '../controls/filter/filter.model';\r\n\r\nexport class TylerMatTableDataSource extends MatTableDataSource {\r\n\r\n // Properties\r\n filterNumber = 0;\r\n filterTestValue = '';\r\n // Used when filter value needs to be separate from sorting value\r\n useFilterDataAccessor = false;\r\n filters: FilterModel[] = [];\r\n private _cachedData: any[] = [];\r\n\r\n expandedElements: number[] = [];\r\n\r\n // Class Functions\r\n constructor(initialData?: any[]) {\r\n super(initialData);\r\n this.filterPredicate = this.genericFilter;\r\n }\r\n\r\n // Sorting Functions\r\n sortingDataAccessor: (data: any, sortHeaderId: string) => string | number = (data: any, sortHeaderId: string): string | number => {\r\n // created defaultSortingAccessor so components can override sortingAccessor and still fall back on the default if needed\r\n return this.defaultSortingAccessor(data, sortHeaderId);\r\n }\r\n\r\n defaultSortingAccessor: (data: any, sortHeaderId: string) => string | number = (data: any, sortHeaderId: string): string | number => {\r\n // PRE: a sort or filter is called on a table\r\n // POST: returns the data for a cell for sorting\r\n // NOTE: this is overriding the default behavior which type coerces into a number\r\n // NOTE: this does not work for negative numbers\r\n const value: any = data[sortHeaderId];\r\n if (value != undefined) {\r\n if (value instanceof Date) {\r\n return value.getTime();\r\n } else if (typeof (value) == 'string') {\r\n return (value != null ? value.trim().toLowerCase() : '');\r\n } else if (typeof (value) == 'number') {\r\n return (value != null ? value : -99999);\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n // Filter Functions\r\n filterDataAccessor: (data: any, sortHeaderId: string) => string | number = (data: any, sortHeaderId: string): string | number => {\r\n // PRE: a filter is called on a table\r\n // POST: returns the data for a cell for filtering\r\n // NOTE: this is overriding the default behavior which type coerces into a number, also overrides the sortingDataAccessor\r\n // NOTE: this does not work for negative numbers\r\n const value: any = data[sortHeaderId];\r\n if (value != undefined) {\r\n if (value instanceof Date) {\r\n return value.getTime();\r\n } else if (typeof (value) == 'string') {\r\n return value.trim();\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n // Detail Row Functions\r\n scrollTo(row: any) {\r\n // PRE: a row to scroll to\r\n // POST: scrolls to the row\r\n // NOTE: this will only work if you are using the scrollToRow directive\r\n if (row != undefined) {\r\n if (row.scrollTo == undefined || row.scrollTo == false) {\r\n row.scrollTo = true;\r\n }\r\n }\r\n }\r\n\r\n scrollToLast() {\r\n // POST: scrolls to the last row\r\n this.data[this.data.length - 1].scrollTo = true;\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n if (row != undefined) {\r\n if (row.detailRow == undefined || row.detailRow == false) {\r\n row.detailRow = true;\r\n }\r\n else {\r\n row.detailRow = false;\r\n }\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n if (row.detailRow == undefined) {\r\n row.detailRow = false;\r\n }\r\n\r\n return row.detailRow;\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.data.forEach(element => {\r\n element.detailRow = expand;\r\n });\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n if (event.keyCode == 13) {\r\n this.toggleExpanded(row);\r\n }\r\n }\r\n\r\n cacheExpanded() {\r\n // PRE: the data is set\r\n // POST: sets the cached data to the current data\r\n this._cachedData = this.data;\r\n }\r\n\r\n assertCachedExpanded(identifier?: string) {\r\n // PRE: the cached data and data is set\r\n // POST: expands data based on the cached data's identifier\r\n\t\tif (this._cachedData && this.data) {\r\n\t\t\tif (!identifier) {\r\n\t\t\t\tfor (let i = 0; i < this.data.length; i++) {\r\n\t\t\t\t\tif (this._cachedData.length > i && this._cachedData[i].detailRow) {\r\n\t\t\t\t\t\tthis.toggleExpanded(this.data[i]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.data.forEach(datum => {\r\n\t\t\t\t\tfor (let i = 0; i < this._cachedData.length; i++) {\r\n\t\t\t\t\t\tconst cachedDatum = this._cachedData[i];\r\n\t\t\t\t\t\tif (cachedDatum[identifier] == datum[identifier] && this.checkExpanded(cachedDatum)) {\r\n\t\t\t\t\t\t\tdatum.detailRow = true;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n setVisible(row: any, state: boolean) {\r\n // PRE: the row is defined\r\n // POST: toggles whether the row is visible\r\n // NOTE: this differs from expanded b/c this is meant to work with *ngIf\r\n if (row != undefined) {\r\n row.detailRowVisible = state;\r\n }\r\n }\r\n\r\n checkVisible(row: any): boolean {\r\n // PRE: the row is defined\r\n // POST: checks whether the row is visible\r\n // NOTE: this differs from expanded b/c this is meant to work with *ngIf\r\n if (row.detailRowVisible == undefined) {\r\n row.detailRowVisible = false;\r\n }\r\n\r\n return row.detailRowVisible;\r\n }\r\n\r\n // Filter Functions\r\n genericFilter(Data: any, Filter: string): boolean {\r\n\r\n let valid = true;\r\n for (let i = 0; i < this.filters.length; i++) {\r\n\r\n let value: string | Date;\r\n if (this.filters[i].columnIndex) {\r\n value = Data[this.filters[i].columnIndex];\r\n }\r\n else if (Data[this.filters[i].column] instanceof Date) {\r\n value = Data[this.filters[i].column];\r\n } else {\r\n if (this.useFilterDataAccessor) {\r\n value = String(this.filterDataAccessor(Data, this.filters[i].column));\r\n }\r\n else {\r\n value = String(this.sortingDataAccessor(Data, this.filters[i].column));\r\n }\r\n }\r\n if (value != undefined &&\r\n (\r\n (this.filters[i].value != undefined && this.filters[i].dataType != 'date') ||\r\n ((this.filters[i].value != undefined || this.filters[i].dateValue != undefined) && this.filters[i].dataType == 'date')\r\n )) {\r\n switch (this.filters[i].dataType) {\r\n case 'string':\r\n if (!this.stringFilter(String(value), i)) {\r\n valid = false;\r\n }\r\n break;\r\n case 'number':\r\n if (!this.numberFilter(String(value), i)) {\r\n valid = false;\r\n }\r\n break;\r\n case 'date':\r\n if (!this.dateFilter(value, i)) {\r\n valid = false;\r\n }\r\n break;\r\n case 'enumeration':\r\n if (!this.enumerationFilter(String(value), i)) {\r\n valid = false;\r\n }\r\n break;\r\n case 'nullable boolean':\r\n case 'boolean':\r\n if (!this.booleanFilter(String(value), i)) {\r\n valid = false;\r\n }\r\n break;\r\n }\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n enumerationFilter(dataValue: string, i: number): boolean {\r\n let valid = true;\r\n if (this.filters[i].value) {\r\n switch (this.filters[i].operator) {\r\n case '0': // Equal\r\n if (dataValue.trim().toLocaleLowerCase() != this.filters[i].value.trim().toLocaleLowerCase()) {\r\n valid = false;\r\n }\r\n break;\r\n case '1': // Not Equal\r\n if (dataValue.toLocaleLowerCase() == this.filters[i].value.trim().toLocaleLowerCase()) {\r\n valid = false;\r\n }\r\n break;\r\n }\r\n }\r\n return valid;\r\n }\r\n\r\n stringFilter(dataValue: string, i: number): boolean {\r\n\r\n let valid = true;\r\n\r\n switch (this.filters[i].operator) {\r\n case '0':\r\n if (!dataValue.toString().trim().toLocaleLowerCase().includes(this.filters[i].value.trim().toLocaleLowerCase())) {\r\n valid = false;\r\n }\r\n break;\r\n case '1':\r\n if (!dataValue.toString().trim().toLocaleLowerCase().startsWith(this.filters[i].value.trim().toLocaleLowerCase())) {\r\n valid = false;\r\n }\r\n break;\r\n case '2':\r\n if (!dataValue.toString().trim().toLocaleLowerCase().endsWith(this.filters[i].value.trim().toLocaleLowerCase())) {\r\n valid = false;\r\n }\r\n break;\r\n case '3':\r\n if (this.filters[i].value != '' && !(dataValue.toString().trim().toLocaleLowerCase() == (this.filters[i].value.trim().toLocaleLowerCase()))) {\r\n valid = false;\r\n }\r\n break;\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n numberFilter(dataValue: string, i: number) {\r\n\r\n let valid = true;\r\n\r\n const testVar = Number.parseFloat(this.filters[i].value);\r\n const numberValue = Number.parseFloat(dataValue);\r\n\r\n if (!isNaN(testVar) && testVar != null && testVar != undefined) {\r\n switch (this.filters[i].operator) {\r\n case '0':\r\n if (!(numberValue == (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n case '1':\r\n if (!(numberValue != (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n case '2':\r\n if (!(numberValue < (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n case '3':\r\n if (!(numberValue <= (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n case '4':\r\n if (!(numberValue > (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n case '5':\r\n if (!(numberValue >= (Number.parseFloat(this.filters[i].value)))) {\r\n valid = false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n dateFilter(dataValue: string | Date, i: number) {\r\n // console.log('dateFilter');\r\n\r\n let valid = true;\r\n\r\n // strip time from dateTime values\r\n const dataDate: Date = new Date(dataValue);\r\n dataDate.setHours(0);\r\n dataDate.setMinutes(0);\r\n dataDate.setSeconds(0);\r\n let filterDate: Date = new Date(this.filters[i].dateValue);\r\n if (!filterDate) {\r\n filterDate = new Date(this.filters[i].value);\r\n }\r\n filterDate.setHours(0);\r\n filterDate.setMinutes(0);\r\n filterDate.setSeconds(0);\r\n\r\n if (filterDate.toString() != 'Invalid Date') {\r\n switch (this.filters[i].operator) {\r\n case '0':\r\n if (!(dataDate.toLocaleDateString() == filterDate.toLocaleDateString())) {\r\n valid = false;\r\n }\r\n break;\r\n case '1':\r\n if (!(dataDate.toLocaleDateString() != filterDate.toLocaleDateString())) {\r\n valid = false;\r\n }\r\n break;\r\n case '2':\r\n if (!(dataDate < filterDate)) {\r\n valid = false;\r\n }\r\n break;\r\n case '3':\r\n if (!(dataDate <= filterDate)) {\r\n valid = false;\r\n }\r\n break;\r\n case '4':\r\n if (!(dataDate > filterDate)) {\r\n valid = false;\r\n }\r\n break;\r\n case '5':\r\n if (!(dataDate >= filterDate)) {\r\n valid = false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n booleanFilter(dataValue: string, i: number) {\r\n switch (this.filters[i].operator) {\r\n case '0':\r\n return true;\r\n case '1':\r\n case '2':\r\n case '3':\r\n default:\r\n return this.filters[i].value == dataValue;\r\n }\r\n }\r\n\r\n isFiltered(): boolean {\r\n // POST: returns true if the data is being panelFiltered by the data source\r\n const isFiltering = (filter: FilterModel): boolean => {\r\n if (filter.dataType.includes('boolean')) {\r\n return filter.operator != '0';\r\n } else {\r\n return (filter.value != '' && filter.value != undefined && filter.value != null) ||\r\n (filter.dateValue != undefined && filter.dateValue != null && filter.dateValue.toString() != 'Invalid Date');\r\n }\r\n };\r\n for (let i = 0; i < this.filters.length; i++) {\r\n if (isFiltering(this.filters[i])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n addRemoveFilter(newFilter: FilterModel, data?: TylerMatTableDataSource) {\r\n // POST: adds a filter or removes it if the value is ''\r\n\r\n let filterFound = false;\r\n\r\n if (!data) {\r\n data = this;\r\n }\r\n for (let i = 0; i < data.filters.length; i++) {\r\n if (data.filters[i].column == newFilter.column) {\r\n if (newFilter.value == '') {\r\n data.filters.splice(i, 1);\r\n filterFound = true;\r\n break;\r\n }\r\n else {\r\n data.filters[i].operator = newFilter.operator;\r\n data.filters[i].value = newFilter.value;\r\n filterFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!filterFound) {\r\n data.filters.push(newFilter);\r\n }\r\n\r\n data.filter = 'trigger';\r\n }\r\n\r\n addFilter(newFilter: FilterModel, data?: TylerMatTableDataSource) {\r\n // POST: adds a filter, regardless of the value\r\n\r\n let filterFound = false;\r\n\r\n if (!data) {\r\n data = this;\r\n }\r\n for (let i = 0; i < data.filters.length; i++) {\r\n if (data.filters[i].column == newFilter.column) {\r\n data.filters[i].operator = newFilter.operator;\r\n data.filters[i].value = newFilter.value;\r\n filterFound = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!filterFound) {\r\n data.filters.push(newFilter);\r\n }\r\n\r\n data.filter = 'trigger';\r\n }\r\n\r\n removeFilter(filter: FilterModel, data?: TylerMatTableDataSource) {\r\n // POST: removes the filter, regardless of the data\r\n if (!data) {\r\n data = this;\r\n }\r\n for (let i = 0; i < data.filters.length; i++) {\r\n if (data.filters[i].column == filter.column) {\r\n data.filters.splice(i, 1);\r\n break;\r\n }\r\n }\r\n data.filter = 'trigger';\r\n }\r\n\r\n removeAllFilters(data?: TylerMatTableDataSource) {\r\n // POST: removes all the filters\r\n if (!data) {\r\n data = this;\r\n }\r\n this.filters = [];\r\n data.filter = 'trigger';\r\n }\r\n\r\n getFilter(column: string, data?: TylerMatTableDataSource) {\r\n // POST: gets a filter for the column\r\n if (!data) {\r\n data = this;\r\n }\r\n for (let i = 0; i < data.filters.length; i++) {\r\n if (data.filters[i].column == column) {\r\n return data.filters[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n hasFilters() {\r\n return this.filters.map(o => o.value).filter(value => !!value).length > 0;\r\n }\r\n}\r\n\r\n","import { trigger, state, style, animate, transition } from '@angular/animations';\r\n\r\nconst expandedStyle = style({\r\n paddingTop: '10px',\r\n height: 'auto',\r\n paddingBottom: '25px',\r\n});\r\nconst collapsedStyle = style({\r\n paddingTop: '0px',\r\n height: '0px',\r\n minHeight: '0',\r\n paddingBottom: '0px',\r\n overflow: 'hidden',\r\n borderWidth: '0px'\r\n});\r\n\r\nexport const detailExpand = [\r\n trigger('detailExpand', [\r\n state('collapsed', collapsedStyle),\r\n state('expanded', expandedStyle),\r\n transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\r\n transition('void => expanded', [\r\n collapsedStyle,\r\n animate(\r\n '225ms cubic-bezier(0.4, 0.0, 0.2, 1)',\r\n expandedStyle\r\n )\r\n ]),\r\n transition('void => collapsed', [\r\n animate(\r\n '225ms cubic-bezier(0.4, 0.0, 0.2, 1)',\r\n collapsedStyle\r\n )\r\n ])\r\n ])\r\n];","import * as i0 from '@angular/core';\nimport { Directive, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, ContentChildren, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { DOCUMENT } from '@angular/common';\nimport * as i1 from '@angular/cdk/platform';\n\n// Boilerplate for applying mixins to MatToolbar.\n/** @docs-private */\nconst _MatToolbarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n});\nclass MatToolbarRow {\n}\nMatToolbarRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatToolbarRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatToolbarRow, selector: \"mat-toolbar-row\", host: { classAttribute: \"mat-toolbar-row\" }, exportAs: [\"matToolbarRow\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-toolbar-row',\n exportAs: 'matToolbarRow',\n host: { 'class': 'mat-toolbar-row' },\n }]\n }] });\nclass MatToolbar extends _MatToolbarBase {\n constructor(elementRef, _platform, document) {\n super(elementRef);\n this._platform = _platform;\n // TODO: make the document a required param when doing breaking changes.\n this._document = document;\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._checkToolbarMixedModes();\n this._toolbarRows.changes.subscribe(() => this._checkToolbarMixedModes());\n }\n }\n /**\n * Throws an exception when developers are attempting to combine the different toolbar row modes.\n */\n _checkToolbarMixedModes() {\n if (this._toolbarRows.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n // Check if there are any other DOM nodes that can display content but aren't inside of\n // a element.\n const isCombinedUsage = Array.from(this._elementRef.nativeElement.childNodes)\n .filter(node => !(node.classList && node.classList.contains('mat-toolbar-row')))\n .filter(node => node.nodeType !== (this._document ? this._document.COMMENT_NODE : 8))\n .some(node => !!(node.textContent && node.textContent.trim()));\n if (isCombinedUsage) {\n throwToolbarMixedModesError();\n }\n }\n }\n}\nMatToolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbar, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\nMatToolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatToolbar, selector: \"mat-toolbar\", inputs: { color: \"color\" }, host: { properties: { \"class.mat-toolbar-multiple-rows\": \"_toolbarRows.length > 0\", \"class.mat-toolbar-single-row\": \"_toolbarRows.length === 0\" }, classAttribute: \"mat-toolbar\" }, queries: [{ propertyName: \"_toolbarRows\", predicate: MatToolbarRow, descendants: true }], exportAs: [\"matToolbar\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-toolbar', exportAs: 'matToolbar', inputs: ['color'], host: {\n 'class': 'mat-toolbar',\n '[class.mat-toolbar-multiple-rows]': '_toolbarRows.length > 0',\n '[class.mat-toolbar-single-row]': '_toolbarRows.length === 0',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { _toolbarRows: [{\n type: ContentChildren,\n args: [MatToolbarRow, { descendants: true }]\n }] } });\n/**\n * Throws an exception when attempting to combine the different toolbar row modes.\n * @docs-private\n */\nfunction throwToolbarMixedModesError() {\n throw Error('MatToolbar: Attempting to combine different toolbar modes. ' +\n 'Either specify multiple `` elements explicitly or just place content ' +\n 'inside of a `` for a single row.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatToolbarModule {\n}\nMatToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarModule, declarations: [MatToolbar, MatToolbarRow], imports: [MatCommonModule], exports: [MatToolbar, MatToolbarRow, MatCommonModule] });\nMatToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarModule, imports: [[MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatToolbarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatToolbar, MatToolbarRow, MatCommonModule],\n declarations: [MatToolbar, MatToolbarRow],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatToolbar, MatToolbarModule, MatToolbarRow, throwToolbarMixedModesError };\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport {MatBadgeModule} from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport {CdkTableModule} from '@angular/cdk/table';\r\nimport {DragDropModule} from '@angular/cdk/drag-drop';\r\nimport {ScrollingModule} from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n MatAutocompleteModule,\r\n MatBadgeModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatDatepickerModule,\r\n MatFormFieldModule,\r\n MatNativeDateModule,\r\n MatInputModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatMenuModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatCardModule,\r\n MatDividerModule,\r\n MatExpansionModule,\r\n MatGridListModule,\r\n MatListModule,\r\n MatStepperModule,\r\n MatTabsModule,\r\n MatButtonToggleModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n MatProgressBarModule,\r\n MatDialogModule,\r\n MatSnackBarModule,\r\n MatTooltipModule,\r\n MatPaginatorModule,\r\n MatSortModule,\r\n MatTableModule,\r\n CdkTableModule,\r\n ScrollingModule,\r\n DragDropModule\r\n ],\r\n declarations: []\r\n})\r\n\r\nexport class MaterialModule {\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { DisciplineReferralStudent } from '../../classroom360/discipline-referral/discipline-referral-student.model';\r\nimport { DisciplineReferral } from '../../classroom360/discipline-referral/discipline-referral.model';\r\nimport { BehaviorEvent } from '../../counselor360/behavior/models/behavior-event.model';\r\nimport { BehaviorIncident } from '../../counselor360/behavior/models/behavior-incident.model';\r\nimport { BehaviorStudent } from '../../counselor360/behavior/models/behavior-student.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Lookup } from '../lookup/lookup.model';\r\nimport { System } from '../System';\r\nimport { UserService } from '../user/user.service';\r\nimport { YearService } from '../year/year.service';\r\n\r\n@Injectable()\r\nexport class BehaviorSharedService {\r\n\r\n locations: Lookup[] = [];\r\n incidentCodes: Lookup[] = [];\r\n contextCodes: Lookup[] = [];\r\n reportedByCodes: Lookup[] = [];\r\n behaviorEvent: BehaviorEvent = new BehaviorEvent();\r\n eventCreatedFromReferralPage = false;\r\n referralCreated = false;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private router: Router\r\n ) {\r\n }\r\n\r\n public getDisciplineReferralPlacesLookup(schoolId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetDisciplineReferralPlacesLookup?schoolId=${schoolId}`);\r\n }\r\n\r\n public getDisciplineReferralLookups(lookupType: string, yearId: number, schoolId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `getDisciplineReferralLookups?type=${lookupType}&yearId=${yearId}&schoolId=${schoolId}`);\r\n }\r\n\r\n public disciplineReferralIncidentLookup(yearId: number, profileArea: string): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetDisciplineReferralIncidentLookup?yearId=${yearId}&schoolId=${this.yearService.defaultYear.SchoolID}&profileArea=${profileArea}`);\r\n }\r\n\r\n getClassroomDisciplineReferrals(showAllStaffEntries: boolean, hideTeams: boolean = false, referralStatusId: number = 0): Observable {\r\n // PRE: a boolean to show all staff entries or only the current ones, boolean to hide teams referrals when teams is active for the site\r\n // POST: obtains a list of discipline referrals\r\n return this.http.get(System.apiURL.Counselor + `GetClassroomDisciplineReferrals?yearId=${this.yearService.defaultYear.Id}&schoolId=${this.yearService.defaultYear.SchoolID}&AYIdentifier=${this.yearService.defaultYear.AYIdentifier}&showAllStaffEntries=${showAllStaffEntries}&hideTeams=${hideTeams}&statusId=${referralStatusId}`);\r\n }\r\n\r\n saveClassroomDisciplineReferral(referrals: DisciplineReferral[]): Observable {\r\n // PRE: a list of discipline referrals\r\n // POST: saves those referrals to the server\r\n // We need to create copies of the referrals to ensure that the PBIS fields are strings\r\n const copiedReferrals = [];\r\n referrals.forEach(referral => {\r\n const copiedReferral = new DisciplineReferral();\r\n Object.assign(copiedReferral, referral);\r\n if (copiedReferral.PBISSelectedOthersInvolved instanceof Array) {\r\n copiedReferral.PBISSelectedOthersInvolved = copiedReferral.PBISSelectedOthersInvolved.join();\r\n }\r\n if (copiedReferral.PBISSelectedPriorInterventions instanceof Array) {\r\n copiedReferral.PBISSelectedPriorInterventions = copiedReferral.PBISSelectedPriorInterventions.join();\r\n }\r\n copiedReferrals.push(copiedReferral);\r\n });\r\n // Sending request with copied referrals\r\n return this.http.post(System.apiURL.Counselor + `SaveClassroomDisciplineReferral?yearId=${this.yearService.defaultYear.Id}&schoolId=${this.yearService.defaultYear.SchoolID}`, copiedReferrals);\r\n }\r\n\r\n public saveBehaviorEvent(e: BehaviorEvent): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorEvent', e);\r\n }\r\n\r\n public saveBehaviorIncident(incident: BehaviorIncident): Observable {\r\n return this.http.post(System.apiURL.Counselor + 'SaveBehaviorIncident', incident);\r\n }\r\n\r\n getStudentsFromReferral(behaviorEvent: BehaviorEvent, referral: DisciplineReferral) {\r\n if (referral && referral.Students.length > 0) {\r\n behaviorEvent.Incidents = [];\r\n behaviorEvent.Actions = [];\r\n referral.Students.forEach(student => {\r\n const behaviorStudent = new BehaviorStudent();\r\n if (!student.UnknownStudent && !student.NonStudent) {\r\n behaviorStudent.StudentId = student.Id;\r\n }\r\n behaviorStudent.MemId = student.MemId;\r\n behaviorStudent.FirstName = student.FirstName;\r\n behaviorStudent.MiddleName = student.MiddleName;\r\n behaviorStudent.LastName = student.LastName;\r\n behaviorStudent.Nickname = student.NickName;\r\n behaviorStudent.StudentNumber = student.StudentNumber;\r\n behaviorStudent.Involvement = this.loginService.LoginSettings.V10 ? DisciplineReferralStudent.InvolvementTypes[student.InvolvementType] : DisciplineReferralStudent.V9InvolvementTypes[2];\r\n behaviorStudent.Alerts = student.StudentAlerts;\r\n behaviorStudent.IsUnknownStudent = student.UnknownStudent;\r\n behaviorStudent.PhoneNumber = student.CellPhone;\r\n behaviorStudent.Gender = student.Gender;\r\n behaviorStudent.DOB = moment(student.DateOfBirth).toDate();\r\n behaviorStudent.IncidentCount = 1;\r\n behaviorEvent.Students.push(behaviorStudent);\r\n\r\n if (this.loginService.LoginSettings.V10) {\r\n const behaviorIncident = new BehaviorIncident();\r\n behaviorIncident.EventId = behaviorEvent.Id;\r\n if (!student.UnknownStudent && !student.NonStudent) {\r\n behaviorIncident.StudentId = student.Id;\r\n }\r\n behaviorIncident.InvolvementType = DisciplineReferralStudent.InvolvementTypes[student.InvolvementType];\r\n behaviorIncident.IsNonStudent = student.NonStudent;\r\n behaviorIncident.IsUnknownStudent = student.UnknownStudent;\r\n behaviorIncident.Comments = student.IncidentComments;\r\n if (behaviorStudent.Involvement == 'Offender') {\r\n const code = this.incidentCodes.find(c => c.Id == student.DisciplineCode.toString());\r\n if (code != null) {\r\n behaviorIncident.IncidentCode = code.Code;\r\n if (!behaviorEvent.DefaultIncidentCodeId) {\r\n behaviorEvent.DefaultIncidentCodeId = code.Code;\r\n }\r\n }\r\n }\r\n behaviorIncident.AddedOn = new Date();\r\n behaviorIncident.AddedBy = this.userService.currentUser.MemberId;\r\n if (student.InvolvingType == '1') {\r\n const selectedCode = this.incidentCodes.find(c => c.Code == behaviorIncident.IncidentCode);\r\n if (selectedCode != null) {\r\n behaviorIncident.DCID = parseInt(selectedCode.Id, 10);\r\n }\r\n }\r\n this.saveBehaviorIncident(behaviorIncident).subscribe(incident => {\r\n Object.assign(behaviorIncident, incident);\r\n behaviorStudent.Id = incident.Id;\r\n behaviorEvent.Incidents.push(behaviorIncident);\r\n });\r\n } else {\r\n if (behaviorStudent.IsUnknownStudent == false && behaviorStudent.StudentId > 0) {\r\n const behaviorIncident = new BehaviorIncident();\r\n behaviorIncident.StudentId = behaviorStudent.StudentId;\r\n behaviorIncident.EventId = behaviorEvent.Id;\r\n behaviorIncident.MemId = student.MemId;\r\n behaviorIncident.IncidentCode = behaviorEvent.EventName;\r\n behaviorIncident.DCID = +behaviorEvent.EventNumber;\r\n behaviorIncident.InvolvementType = DisciplineReferralStudent.V9InvolvementTypes[2];\r\n behaviorIncident.IncidentsFunctionalCodeId = +behaviorEvent.IncidentsFunctionalCodeId;\r\n behaviorIncident.Date = new Date(behaviorEvent.Date);\r\n behaviorIncident.IncidentTime = behaviorEvent.IncidentTime.trim();\r\n behaviorIncident.SchoolId = behaviorEvent.SchoolId;\r\n behaviorIncident.AYIdentifier = behaviorEvent.AYIdentifier.toString();\r\n behaviorIncident.Location = behaviorEvent.RoomNumber;\r\n behaviorIncident.ReportedBy = behaviorEvent.ReportedBy;\r\n behaviorIncident.EnteredBy = behaviorEvent.EnteredBy;\r\n behaviorIncident.AddedByStaff = this.userService.currentUser.LastName + ' ' + this.userService.currentUser.FirstName;\r\n behaviorIncident.IncidentRefferalId = referral.Id;\r\n if (behaviorStudent.Involvement == 'Offender') {\r\n const code = this.incidentCodes.find(c => c.Id == student.DisciplineCode.toString());\r\n if (code != null) {\r\n behaviorIncident.IncidentCode = code.Code;\r\n if (!behaviorEvent.DefaultIncidentCodeId) {\r\n behaviorEvent.DefaultIncidentCodeId = code.Code;\r\n }\r\n }\r\n }\r\n behaviorIncident.Comments = behaviorEvent.StaffComment;\r\n this.saveBehaviorIncident(behaviorIncident).subscribe(incident => {\r\n Object.assign(behaviorIncident, incident);\r\n behaviorStudent.Id = incident.StudentId;\r\n behaviorStudent.StudentId = incident.StudentId;\r\n behaviorStudent.UserHasPermissionForStudent = true;\r\n behaviorEvent.Incidents.push(behaviorIncident);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n referral = null;\r\n }\r\n\r\n setInitialValues(behaviorEvent: BehaviorEvent) {\r\n if (behaviorEvent.Context == null || behaviorEvent.Context == '') {\r\n const onCampusContext = this.contextCodes.filter(function (o) {\r\n return o.CodeDescription.indexOf('On Campus') > -1;\r\n });\r\n if (onCampusContext.length > 0) {\r\n behaviorEvent.Context = onCampusContext[0].Id;\r\n } else if (this.contextCodes.length > 0) {\r\n behaviorEvent.Context = this.contextCodes[0].Id;\r\n }\r\n }\r\n if (behaviorEvent.DefaultIncidentCodeId == null || behaviorEvent.DefaultIncidentCodeId == '') {\r\n if (this.incidentCodes.length > 0) {\r\n behaviorEvent.DefaultIncidentCodeId = this.incidentCodes[0].Code;\r\n }\r\n }\r\n }\r\n\r\n acceptReferrals(selectedReferrals: DisciplineReferral[], openEvent: boolean = false) {\r\n this.loginService.getStaffIdByUserId().subscribe(staffId => {\r\n selectedReferrals.forEach(referral => {\r\n const behaviorEvent: BehaviorEvent = new BehaviorEvent();\r\n behaviorEvent.SchoolId = this.yearService.defaultYear.SchoolID;\r\n this.setInitialValues(behaviorEvent);\r\n\r\n // Performing conversions\r\n referral = System.convert(referral, new DisciplineReferral());\r\n if (referral.Students) {\r\n for (let j = 0; j < referral.Students.length; j++) {\r\n referral.Students[j] = System.convert(referral.Students[j], new DisciplineReferralStudent());\r\n }\r\n }\r\n\r\n behaviorEvent.ReferralId = referral.Id;\r\n behaviorEvent.Date = moment(referral.Date.toString()).toDate();\r\n behaviorEvent.Date.setUTCSeconds(referral.Date.getSeconds());\r\n behaviorEvent.Date.setUTCHours(referral.Date.getHours());\r\n behaviorEvent.Date.setUTCMinutes(referral.Date.getMinutes());\r\n behaviorEvent.Location = referral.Location;\r\n behaviorEvent.StaffComment = referral.EventComment;\r\n behaviorEvent.EnteredBy = staffId;\r\n behaviorEvent.Context = referral.Context;\r\n behaviorEvent.Description = referral.Description;\r\n behaviorEvent.AddedOn = new Date();\r\n behaviorEvent.AddedBy = this.userService.currentUser.MemberId;\r\n behaviorEvent.EventName = 'Referral - ' + referral.StaffName + ' - ' + referral.Location;\r\n behaviorEvent.AYIdentifier = this.yearService.defaultYear.AYIdentifier;\r\n if (!this.loginService.LoginSettings.V10) {\r\n if (referral.IncidentCodeId == null || referral.IncidentCodeId == '' || referral.IncidentCodeId == '0') {\r\n if (this.incidentCodes.length > 0) {\r\n behaviorEvent.DefaultIncidentCodeId = this.incidentCodes.find(i => i.Id != '0').Id;\r\n behaviorEvent.EventNumber = behaviorEvent.DefaultIncidentCodeId;\r\n }\r\n } else {\r\n behaviorEvent.EventNumber = referral.IncidentCodeId;\r\n }\r\n behaviorEvent.IncidentTime = referral.Time.trim();\r\n behaviorEvent.AYIdentifier = this.yearService.defaultYear.Id.toString();\r\n behaviorEvent.AddedBy = this.userService.currentUser.Id;\r\n behaviorEvent.LocationId = referral.LocationId;\r\n behaviorEvent.StaffComment = referral.Description;\r\n }\r\n this.saveBehaviorEvent(behaviorEvent).subscribe(result => {\r\n if (result) {\r\n Object.assign(behaviorEvent, result);\r\n if (behaviorEvent.Id > 0 && referral) {\r\n referral.EventId = behaviorEvent.Id;\r\n this.getStudentsFromReferral(behaviorEvent, referral);\r\n const referralAsList: DisciplineReferral[] = [referral];\r\n this.saveClassroomDisciplineReferral(referralAsList).subscribe(message => {\r\n this.behaviorEvent = behaviorEvent;\r\n if (openEvent) {\r\n this.eventCreatedFromReferralPage = true;\r\n this.router.navigateByUrl('/counselor360/behavior/behaviorEvents');\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n // V9 only\r\n acceptReferralsinOpenEventModel(selectedReferrals: DisciplineReferral[], openEvent: boolean = false): Observable {\r\n const observableEventCreatedFromReferral = new Subject();\r\n const observableEventCreatedFromReferralStream$ = observableEventCreatedFromReferral.asObservable();\r\n\r\n this.loginService.getStaffIdByUserId().subscribe(staffId => {\r\n selectedReferrals.forEach(referral => {\r\n const behaviorEvent: BehaviorEvent = new BehaviorEvent();\r\n behaviorEvent.SchoolId = this.yearService.defaultYear.SchoolID;\r\n this.setInitialValues(behaviorEvent);\r\n\r\n // Performing conversions\r\n referral = System.convert(referral, new DisciplineReferral());\r\n if (referral.Students) {\r\n for (let j = 0; j < referral.Students.length; j++) {\r\n referral.Students[j] = System.convert(referral.Students[j], new DisciplineReferralStudent());\r\n }\r\n }\r\n\r\n behaviorEvent.ReferralId = referral.Id;\r\n behaviorEvent.Date = moment(referral.Date.toString()).toDate();\r\n behaviorEvent.Date.setUTCSeconds(referral.Date.getSeconds());\r\n behaviorEvent.Date.setUTCHours(referral.Date.getHours());\r\n behaviorEvent.Date.setUTCMinutes(referral.Date.getMinutes());\r\n behaviorEvent.Location = referral.Location;\r\n behaviorEvent.RoomNumber = referral.RoomBus;\r\n if (referral.FunctionalMotivationId != null && referral.FunctionalMotivationId != '' && referral.FunctionalMotivationId != '0') {\r\n behaviorEvent.IncidentsFunctionalCodeId = parseInt(referral.FunctionalMotivationId, 10);\r\n }\r\n behaviorEvent.StaffComment = referral.EventComment;\r\n\r\n const reportedBy = Number(referral.ReportedBy);\r\n if (!isNaN(reportedBy)) {\r\n behaviorEvent.ReportedBy = reportedBy;\r\n }\r\n behaviorEvent.EnteredBy = staffId;\r\n behaviorEvent.Context = referral.Context;\r\n behaviorEvent.Description = referral.Description;\r\n behaviorEvent.AddedOn = new Date();\r\n behaviorEvent.AddedBy = this.userService.currentUser.MemberId;\r\n behaviorEvent.EventName = 'Referral - ' + referral.StaffName + ' - ' + referral.Location;\r\n behaviorEvent.AYIdentifier = this.yearService.defaultYear.AYIdentifier;\r\n if (referral.ReferralSiteId > 0) {\r\n behaviorEvent.SchoolId = referral.ReferralSiteId;\r\n }\r\n if (referral.IncidentCodeId == null || referral.IncidentCodeId == '' || referral.IncidentCodeId == '0') {\r\n if (this.incidentCodes.length > 0 && openEvent === false) {\r\n behaviorEvent.DefaultIncidentCodeId = this.incidentCodes.find(i => i.Id != '0').Id;\r\n behaviorEvent.EventNumber = behaviorEvent.DefaultIncidentCodeId;\r\n }\r\n } else {\r\n behaviorEvent.EventNumber = referral.IncidentCodeId;\r\n }\r\n\r\n behaviorEvent.IncidentTime = referral.Time.trim();\r\n behaviorEvent.AYIdentifier = this.yearService.defaultYear.Id.toString();\r\n behaviorEvent.AddedBy = this.userService.currentUser.Id;\r\n behaviorEvent.LocationId = referral.LocationId;\r\n behaviorEvent.StaffComment = referral.Description;\r\n if (!openEvent) {\r\n this.saveBehaviorEvent(behaviorEvent).subscribe(result => {\r\n if (result) {\r\n Object.assign(behaviorEvent, result);\r\n if (behaviorEvent.Id > 0 && referral) {\r\n referral.EventId = behaviorEvent.Id;\r\n this.getStudentsFromReferral(behaviorEvent, referral);\r\n const referralAsList: DisciplineReferral[] = [referral];\r\n this.behaviorEvent = behaviorEvent;\r\n if (this.referralCreated == true) {\r\n this.referralCreated = false;\r\n observableEventCreatedFromReferral.next(true);\r\n }\r\n else {\r\n this.saveClassroomDisciplineReferral(referralAsList).subscribe(message => {\r\n observableEventCreatedFromReferral.next(true);\r\n if (openEvent) {\r\n this.eventCreatedFromReferralPage = true;\r\n this.router.navigateByUrl('/counselor360/behavior/behaviorEvents');\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n this.behaviorEvent = behaviorEvent;\r\n observableEventCreatedFromReferral.next(false);\r\n }\r\n });\r\n });\r\n\r\n return observableEventCreatedFromReferralStream$;\r\n }\r\n\r\n syncToServer(referral: DisciplineReferral) {\r\n // POST: syncs the data from the local instance to the server representation\r\n if (referral.PBISSelectedOthersInvolved && referral.PBISSelectedOthersInvolved instanceof Array) {\r\n let othersInvolvedString = '';\r\n for (let i = 0; i < referral.PBISSelectedOthersInvolved.length; i++) {\r\n if (i > 0) {\r\n othersInvolvedString += ',';\r\n }\r\n othersInvolvedString += referral.PBISSelectedOthersInvolved[i];\r\n }\r\n referral.PBISSelectedOthersInvolved = othersInvolvedString;\r\n }\r\n if (referral.PBISSelectedPriorInterventions && referral.PBISSelectedPriorInterventions instanceof Array) {\r\n let priorInterventionsString = '';\r\n for (let i = 0; i < referral.PBISSelectedPriorInterventions.length; i++) {\r\n if (i > 0) {\r\n priorInterventionsString += ',';\r\n }\r\n priorInterventionsString += referral.PBISSelectedPriorInterventions[i];\r\n }\r\n referral.PBISSelectedPriorInterventions = priorInterventionsString;\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, EventEmitter } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-change-email-message',\r\n templateUrl: './change-email-message.component.html',\r\n styleUrls: ['./change-email-message.component.css']\r\n})\r\nexport class ChangeEmailMessageComponent implements OnInit, OnDestroy {\r\n\r\n //Properties\r\n dialogBox: MatDialogRef;\r\n confirmEvent: EventEmitter = new EventEmitter ();\r\n\r\n //Class Functions\r\n constructor() { }\r\n\r\n //Event Functions\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy () {\r\n //POST: Emits a non-confirmation event\r\n this.confirmEvent.emit(false);\r\n }\r\n\r\n //Methods\r\n confirm (confirmation: boolean) {\r\n //PRE: confirmation should reflect if the user agrees or not\r\n //POST: sends a confirmation event to a receiving component\r\n this.confirmEvent.emit(confirmation);\r\n this.dialogBox.close();\r\n }\r\n}\r\n","\r\n

\r\n\tNote:\r\n

\r\n\r\n\r\n\r\n\tYour email address is also used as your Username, so changes made here will also affect the name you use to log in.\r\n\r\n\r\n\r\n\r\n\t
\r\n\t\t\r\n\t
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport {isValidEmail} from '../../shared-modules/login/change-password/password-validator';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport {LoginService} from '../../shared-modules/login/login.service';\r\nimport {UserService} from '../user/user.service';\r\nimport {Router} from '@angular/router';\r\nimport {LoginSettings} from '../../shared-modules/login/loginSetting.model';\r\nimport {User} from '../user/user.model';\r\nimport {ChangeEmailMessageComponent} from './change-email-message/change-email-message.component';\r\nimport {map} from 'rxjs/operators';\r\nimport {SharedService} from '../shared.service';\r\n\r\n@Component({\r\n selector: 'app-change-email',\r\n templateUrl: './change-email.component.html',\r\n styleUrls: ['./change-email.component.css']\r\n})\r\nexport class ChangeEmailComponent implements OnInit {\r\n LoginSettings: LoginSettings;\r\n User: User;\r\n currentEmail: string;\r\n repeatNewEmail: string;\r\n dialogBox: MatDialogRef;\r\n newEmailError = 'Invalid email format';\r\n newEmail: string;\r\n repeatNewEmailError = 'Invalid email format';\r\n changeEmailForm: FormGroup;\r\n constructor( private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private router: Router) { }\r\n\r\n ngOnInit() {\r\n this.User = this.userService.currentUser;\r\n this.currentEmail = this.User.Email;\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.changeEmailForm = new FormGroup({\r\n 'currentEmail': new FormControl({value: this.currentEmail, disabled: true}, [\r\n Validators.required,\r\n ]),\r\n 'newEmail': new FormControl(null, [\r\n Validators.required,\r\n isValidEmail(),\r\n ]),\r\n 'repeatNewEmail': new FormControl(null, [\r\n Validators.required\r\n ])\r\n });\r\n this.onChanges();\r\n }\r\n\r\n onChanges(): void {\r\n this.changeEmailForm.valueChanges.subscribe(val => {\r\n this.newEmail = val['newEmail'];\r\n this.repeatNewEmail = val['repeatNewEmail'];\r\n // Trim the leading and trailing spaces\r\n if (this.newEmail != null) {\r\n this.newEmail = this.newEmail.trim();\r\n }\r\n if (this.repeatNewEmail != null) {\r\n this.repeatNewEmail = this.repeatNewEmail.trim();\r\n }\r\n // check new Email\r\n if (this.changeEmailForm.controls.newEmail.invalid) {\r\n if (this.changeEmailForm.controls.newEmail.errors.hasOwnProperty('notValidEmail')) {\r\n this.newEmailError = 'Invalid email format';\r\n }\r\n }\r\n // Check Repeat New Email\r\n if (this.repeatNewEmail !== this.newEmail) {\r\n this.changeEmailForm.controls['repeatNewEmail'].setErrors({invalid: true});\r\n this.changeEmailForm.setErrors({invalid : true});\r\n this.repeatNewEmailError = 'Emails do not match';\r\n }\r\n });\r\n }\r\n\r\n closeClick() {\r\n // POST: the change password dialog is closed\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n if (!this.changeEmailForm.invalid) {\r\n if (this.User.Email == this.User.UserName) {\r\n this.showNotice().subscribe(\r\n result => {\r\n if (result) {\r\n this.saveEmail();\r\n }\r\n }\r\n );\r\n } else {\r\n this.saveEmail();\r\n }\r\n }\r\n }\r\n\r\n saveEmail() {\r\n this.userService.canUserChangeEmail(this.newEmail).subscribe(userCanChange => {\r\n if (!userCanChange) {\r\n this.sharedService.showCustomSnackbar('Email is already in use', 'failure');\r\n }\r\n else {\r\n this.userService.setUserEmail(this.newEmail).subscribe(res => {\r\n if (res.body) {\r\n this.User.Email = this.newEmail;\r\n // Close the modal and show a snack bar\r\n this.dialogRef.close();\r\n this.sharedService.showGoodSnackbar();\r\n } else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n showNotice () {\r\n // POST; shows the notice about changing email when it is your username\r\n this.dialogBox = this.dialog.open(ChangeEmailMessageComponent, {\r\n disableClose: true\r\n });\r\n this.dialogBox.componentInstance.dialogBox = this.dialogBox;\r\n return this.dialogBox.componentInstance.confirmEvent.pipe(map(result => {\r\n return result;\r\n }));\r\n }\r\n\r\n}\r\n","
Change Email
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\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, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-attendance-check-in-out-legend',\r\n templateUrl: './attendance-check-in-out-legend.component.html'\r\n})\r\nexport class AttendanceCheckInOutLegendComponent implements OnInit {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","
\r\n Legend\r\n
\r\n\r\n\r\n
\r\n
\r\n
C\r\n
\r\n   \r\n Comment exists for this period or day\r\n
\r\n
\r\n\r\n
\r\n
\r\n
A\r\n
\r\n   \r\n Attendance was marked by an administrator\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n","

Check In/Check Out History

\r\n
{{studentName}} - {{studentNumber}}
\r\n\r\n\r\n
No Check In/Check Out History exists for student
\r\n
0\">\r\n \r\n \r\n \r\n \r\n Type\r\n \r\n \r\n {{st.Type}}\r\n \r\n\r\n \r\n \r\n Date\r\n \r\n \r\n {{st.Date | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n \r\n Time\r\n \r\n \r\n {{st.Time}}\r\n \r\n \r\n \r\n \r\n \r\n Period\r\n \r\n \r\n {{st.Period}}\r\n \r\n\r\n \r\n \r\n \r\n Code\r\n \r\n \r\n {{st.Code}}\r\n \r\n \r\n \r\n \r\n \r\n Missing Minutes\r\n \r\n \r\n {{st.Minutes}}\r\n \r\n\r\n \r\n \r\n \r\n Entered By\r\n \r\n \r\n {{st.SubmittedBy}}\r\n \r\n \r\n \r\n \r\n \r\n \"paperclip\"\r\n \r\n \r\n Y\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport { AddAttachmentDialogComponent } from '../add-attachment-dialog/add-attachment-dialog.component';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../controls/general-confirmation/general-confirmation.component';\r\nimport { Attachment } from '../models/attachment.model';\r\nimport { SharedService } from '../shared.service';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { AttendanceAdministrationService } from '../../admin360/attendance-administration/attendance-administration.service';\r\nimport { AttendanceCheckInOut } from '../../admin360/attendance-administration/attendance-check-in-out/attendance-check-in-out.model';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { SelfCheckInOutHistoryDialogComponent } from '../self-check-in-out-history-dialog/self-check-in-out-history-dialog.component';\r\nimport { AttendanceCheckInOutLegendComponent } from '../attendance-check-in-out-legend/attendance-check-in-out-legend.component';\r\n//import { AttendanceByStudentComponent } from '../../admin360/attendance-administration/attendance-by-student/attendance-by-student.component';\r\nimport { ViewAttachmentsComponent } from '../view-attachments/view-attachments.component';\r\nimport { UserService } from '../user/user.service';\r\nimport { DatePipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-check-in-out-view-history-dialog',\r\n templateUrl: './check-in-out-view-history-dialog.component.html',\r\n styleUrls: ['./check-in-out-view-history-dialog.component.css']\r\n})\r\nexport class CheckInOutViewHistoryDialogComponent implements OnInit {\r\n studentId: number;\r\n schoolId: number;\r\n checkInOutHistory: AttendanceCheckInOut[] = [];\r\n\r\n columnsToDisplay = ['Type', 'Date', 'Time', 'Period', 'Code', 'LEMinutes', 'SubmittedBy', 'Attachment', 'Actions'];\r\n angularMatData = new TylerMatTableDataSource(this.checkInOutHistory);\r\n\r\n _sort: MatSort;\r\n useStudents: Student[] = [];\r\n selectedStudent: Student;\r\n isStaff = false;\r\n studentName: string;\r\n studentNumber: string;\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private attendanceAdminService: AttendanceAdministrationService,\r\n private sharedService: SharedService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private datePipe: DatePipe) {\r\n this.useStudents.push(this.data.selectedStudent);\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.angularMatData.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n ngOnInit() {\r\n this.studentId = this.data.selectedStudent.Id;\r\n this.schoolId = this.data.schoolId;\r\n this.isStaff = this.userService.currentUser.UserType == 1 ? true : false;\r\n this.studentName = this.studentService.formatStudentName(this.data.selectedStudent.FirstName, this.data.selectedStudent.MiddleName, this.data.selectedStudent.LastName, null);\r\n this.studentNumber = '#' + this.data.selectedStudent.StudentNumber;\r\n if (this.isStaff == false) {\r\n this.columnsToDisplay = ['Type', 'Date', 'Time', 'Period', 'Code', 'LEMinutes', 'SubmittedBy', 'Attachment'];\r\n }\r\n this.getCheckInOutHistory();\r\n }\r\n\r\n getCheckInOutHistory() {\r\n this.attendanceAdminService.getAttendanceCheckInOutHistoryByStudentId(this.schoolId, this.studentId).pipe(take(1)).subscribe(history => {\r\n this.checkInOutHistory = history;\r\n this.checkInOutHistory.forEach(obj => {\r\n obj.CheckInOutDateTimeForTime = obj.CheckInOutDateTime;\r\n });\r\n this.angularMatData.data = this.checkInOutHistory;\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n deleteClick(recordId: number, type: string) {\r\n const date = this.checkInOutHistory.find(o => o.HistoryId == recordId).Date;\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Check In/Out Record';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this Check In/Check Out Record?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.attendanceAdminService.deleteCheckInOutRecordById(recordId, type).pipe(take(1)).subscribe(result => {\r\n if (result == true) {\r\n this.getCheckInOutHistory();\r\n const informationDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n maxWidth: '40vw',\r\n minWidth: '40vw'\r\n });\r\n informationDialog.componentInstance.headerLabel = 'Record Deleted';\r\n informationDialog.componentInstance.confirmMessage = 'The Check In (or Check Out) record has been deleted. It is recommended you visit this student\\'s attendance for this date ' + this.datePipe.transform(date, 'MM/dd/yy') + ' to correct/review their attendance.';\r\n informationDialog.componentInstance.disableConfirmation = true;\r\n informationDialog.componentInstance.informational = true;\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n addAttachmentClick(historyId: number) {\r\n // POST: opens a modal to add an attachment\r\n\r\n // Initializing attachment\r\n const attachment = new Attachment();\r\n attachment.Id = -1;\r\n attachment.DocumentId = 0;\r\n attachment.FileName = '';\r\n attachment.Description = '';\r\n attachment.UploadedDate = new Date();\r\n attachment.MyFileBase64String = '';\r\n attachment.FileType = '';\r\n attachment.Comment = '';\r\n attachment.ViewFileOnWebsite = true;\r\n attachment.AttachmentDescription = '';\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: true,\r\n requireDocumentType: true\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n const attachmentData: Attachment[] = [];\r\n attachmentData.push(attachment);\r\n this.saveAttachment(historyId, attachmentData);\r\n }\r\n });\r\n }\r\n\r\n saveAttachment(historyId: number, attachment: Attachment[]) {\r\n attachment.forEach(att => {\r\n att.AttachmentDescription = att.Description;\r\n att.DocumentBase64 = att.MyFileBase64String;\r\n att.MyFileBase64String = '';\r\n });\r\n this.attendanceAdminService.saveCheckInOutHistoryAttachment(historyId, attachment).pipe(take(1)).subscribe(result => {\r\n if (result == true) {\r\n this.getCheckInOutHistory();\r\n }\r\n });\r\n }\r\n\r\n viewSelfCheckHistoryClick(calledFromMenu = false) {\r\n const dialogBox = this.dialog.open(SelfCheckInOutHistoryDialogComponent, {\r\n disableClose: true,\r\n minWidth: '80vw',\r\n maxWidth: '120vw',\r\n minHeight: '80vh',\r\n data: {\r\n studentId: this.studentId,\r\n calledFromMenu: calledFromMenu,\r\n selectedStudent: this.data.selectedStudent\r\n }\r\n });\r\n }\r\n\r\n legendClick() {\r\n const dialogBox = this.dialog.open(AttendanceCheckInOutLegendComponent, {\r\n disableClose: true,\r\n maxWidth: '40vw',\r\n maxHeight: '65vh'\r\n });\r\n }\r\n\r\n viwAttachments(attendanceCheckInOut: AttendanceCheckInOut) {\r\n const id = attendanceCheckInOut.HistoryId != null && attendanceCheckInOut.HistoryId > 0 ? attendanceCheckInOut.HistoryId : attendanceCheckInOut.SubmissionId;\r\n const type = attendanceCheckInOut.HistoryId != null && attendanceCheckInOut.HistoryId > 0 ? 'History' : 'Submission';\r\n this.attendanceAdminService.getCheckInOutHistoryAttachmentById(id, type).pipe(take(1)).subscribe(attachment => {\r\n this.dialog.open(ViewAttachmentsComponent, {\r\n data: {\r\n attachments: attachment\r\n },\r\n disableClose: true,\r\n minWidth: '750px'\r\n });\r\n });\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n\tselector: 'app-file-too-large-warning-dialog',\r\n\ttemplateUrl: './file-too-large-warning-dialog.component.html',\r\n\tstyleUrls: ['./file-too-large-warning-dialog.component.css']\r\n})\r\nexport class FileTooLargeWarningDialogComponent implements OnInit {\r\n\r\n\t// Properties\r\n\tmessage = 'The file is too large. Choose a smaller file or reduce the file's size.';\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: any,\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tif (this.data.maxFileSizeMessage && this.data.maxFileSizeMessage.length > 0) {\r\n\t\t\tthis.message = this.data.maxFileSizeMessage;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tclose() {\r\n\t\t// PRE: the close button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","\r\n
\r\n\tFile Too Large\r\n
\r\n\r\n\r\n\r\n\t
\r\n
\r\n\r\n\r\n\r\n\t\r\n","\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnInit, HostListener } from '@angular/core';\r\nimport { SpinnerService } from '../../spinner/spinner.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FileTooLargeWarningDialogComponent } from './file-too-large-warning-dialog/file-too-large-warning-dialog.component';\r\nimport { GeneralConfirmationComponent } from '../general-confirmation/general-confirmation.component';\r\n\r\n/**\r\n * This component allows the user to upload a file\r\n * @input fileString is the base 64 string of the file\r\n * @input fileType is the type of the file, such as \"image/png\"\r\n * @input fileExtension is the extension of the file, such as .png\r\n * @input fileName is the name of the file, including the extension, such as myImage.png\r\n * @input showFileName is a boolean that controls if the file name shows up as a label beside the button. It is true by default.\r\n * @input buttonLabel is a label that shows up on the button. It is 'BROWSE' by default.\r\n * @input disabled is whether the control should be disabled. It is false by default;\r\n * @input required is whether the control is required. This just puts a red start at the end of a blank file name.\r\n * @input readAsText is whether this should read the data as text or base64 data. Defaults to false;\r\n * @input accepts is a string to tell the file upload what file types are accepted\r\n * @input deleteable is a boolean that determines if the browse becomes delete when a file is present. Defaults to true.\r\n * @input deleteLabel is the label that shows on the delete button. Defaults to 'DELETE'\r\n * @input width is a string that sets the width of the component. Defaults to 400px.\r\n *\r\n * It provides you with the following\r\n * @output fileStringChange is an event that fires the fileString when it changes\r\n * @output fileTypeChange is an event that fires the fileType when it changes\r\n * @output fileExtensionChange is an event that fires the fileExtension when it changes\r\n * @output fileNameChange is an event that fires the fileName when it changes\r\n * @output changes is an event that fires whenever any variable changes\r\n *\r\n * Note: because each input has an output \"changes,\" you can use a two-way binding, e.g. [(fileString)]=\"myString\"\r\n * Note: even though this provides @input accepts, you must check the type in case of custom error messages\r\n */\r\n@Component({\r\n selector: 'add-file',\r\n templateUrl: './add-file.component.html',\r\n styleUrls: [\r\n './add-file.component.css'\r\n ]\r\n})\r\nexport class AddFileComponent implements OnInit {\r\n\r\n // Interface Properties\r\n @Input() fileString: string;\r\n @Output() fileStringChange = new EventEmitter();\r\n\r\n @Input() fileType: string;\r\n @Output() fileTypeChange = new EventEmitter();\r\n\r\n @Input() fileExtension: string;\r\n @Output() fileExtensionChange = new EventEmitter();\r\n\r\n @Input() fileName: string;\r\n @Output() fileNameChange = new EventEmitter();\r\n\r\n @Input() fileSize: number;\r\n @Output() fileSizeChange = new EventEmitter();\r\n\r\n @Input() showFileName = true;\r\n @Input() deletable = true;\r\n @Input() deleteLabel = 'DELETE';\r\n @Input() buttonLabel = 'BROWSE';\r\n @Input() disabled = false;\r\n @Input() required = false;\r\n @Input() hideRequiredAsterisk = false;\r\n @Input() readAsText = false;\r\n @Input() accepts: string;\r\n @Input() width = '400px';\r\n @Input() maxFileSize = 10485760;\r\n @Input() maxFileSizeMessage = '';\r\n @Input() placeHolder = 'Drop file to attach, or browse.';\r\n @Input() checkPNGBitDepth = false;\r\n @Output() changes = new EventEmitter();\r\n\r\n // Local Properties\r\n @ViewChild('fileInput', { static: true }) fileInputRef: ElementRef;\r\n @ViewChild('browseButton', { read: ElementRef }) browseButton: ElementRef;\r\n @ViewChild('deleteButton', { read: ElementRef }) deleteButton: ElementRef;\r\n hoverTarget;\r\n droppable: boolean;\r\n hovering = false;\r\n fileNameRegex = /\\.[0-9a-z]+$/i;\r\n xmlRegex = /(<.[^(><.)]+>)/;\r\n\r\n // Class Functions\r\n constructor(\r\n private spinnerService: SpinnerService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the component\r\n const div = document.createElement('div');\r\n this.droppable = ('draggable' in div)\r\n || ('ondragstart' in div && 'ondrop' in div);\r\n }\r\n\r\n @HostListener('dragover', ['$event'])\r\n public onDragOver(evt) {\r\n if (this.droppable) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n this.hoverTarget = event.target;\r\n this.hovering = true;\r\n }\r\n }\r\n\r\n @HostListener('dragleave', ['$event'])\r\n public onDragLeave(evt) {\r\n if (this.droppable) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n this.hovering = false;\r\n }\r\n }\r\n\r\n @HostListener('drop', ['$event'])\r\n public onDrop(evt) {\r\n if (this.droppable) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n const files = evt.dataTransfer.files;\r\n if (files.length > 0) {\r\n this.hovering = false;\r\n this.setFile(files[files.length - 1]);\r\n }\r\n }\r\n }\r\n\r\n chooseFile() {\r\n // PRE: the choose file button is clicked\r\n // POST: opens the file selection\r\n this.fileInputRef.nativeElement.dispatchEvent(new MouseEvent('click'));\r\n }\r\n\r\n fileChosen(event: Event) {\r\n // PRE: a change is registered from the html input type=\"file\" element\r\n // POST: determines if there is a file. If there is, sets up the data.\r\n const element = event.target as HTMLInputElement;\r\n if (\r\n element\r\n && element.files\r\n && element.files.length > 0\r\n ) {\r\n this.validateFileType(element.files[0]);\r\n }\r\n }\r\n\r\n delete() {\r\n // PRE: the delete button is clicked\r\n // POST: clears the content of that attachment\r\n this.fileString = null;\r\n this.fileStringChange.emit(this.fileString);\r\n this.fileType = null;\r\n this.fileTypeChange.emit(this.fileType);\r\n this.fileExtension = null;\r\n this.fileExtensionChange.emit(this.fileExtension);\r\n this.fileName = null;\r\n this.fileNameChange.emit(this.fileName);\r\n this.fileInputRef.nativeElement.value = '';\r\n this.fileSize = 0;\r\n this.fileSizeChange.emit(0);\r\n this.changes.emit();\r\n }\r\n\r\n // Methods\r\n setFile(file: File) {\r\n // PRE: a file uploaded from \r\n // POST: sets up the file data\r\n\r\n // A file must be present\r\n if (!file) {\r\n return;\r\n }\r\n // The file must be no larger than 10 mb\r\n if (file.size > this.maxFileSize) {\r\n this.dialog.open(FileTooLargeWarningDialogComponent, {\r\n disableClose: true,\r\n data: { maxFileSizeMessage: this.maxFileSizeMessage }\r\n });\r\n return;\r\n }\r\n const reader = new FileReader();\r\n this.fileName = file.name;\r\n this.fileNameChange.emit(this.fileName);\r\n this.fileType = file.type;\r\n this.fileTypeChange.emit(this.fileType);\r\n this.fileExtension = file.name.split('.').pop();\r\n this.fileExtensionChange.emit(this.fileExtension);\r\n this.spinnerService.showSpinner = true;\r\n setTimeout(() => {\r\n if (this.readAsText) {\r\n reader.onload = (e) => {\r\n this.fileString = reader['result'];\r\n this.fileStringChange.emit(this.fileString);\r\n this.changes.emit();\r\n this.spinnerService.showSpinner = false;\r\n this.fileSize = file.size;\r\n this.fileSizeChange.emit(file.size);\r\n };\r\n reader.readAsText(file);\r\n } else {\r\n reader.onload = (e) => {\r\n this.fileTypeChange.emit(this.fileType);\r\n // const base64String = e.target['result'].match(/^data:.+\\/(.+);base64,(\\S*)$/);\t// This takes a lot of time\r\n const splitStrings = e.target['result'].toString().split(',');\r\n if (splitStrings.length == 2) {\r\n this.fileString = splitStrings[1];\r\n } else {\r\n this.fileString = e.target['result'].toString();\r\n }\r\n this.fileStringChange.emit(this.fileString);\r\n this.fileSize = file.size;\r\n this.fileSizeChange.emit(file.size);\r\n this.changes.emit();\r\n this.spinnerService.showSpinner = false;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }, 20);\r\n }\r\n\r\n validateFileType(file: File) {\r\n const fileTypeFromName = file.name.toLowerCase().match(this.fileNameRegex);\r\n if (fileTypeFromName[0] != '.txt' && fileTypeFromName[0] != '.csv') {\r\n const fileReader = new FileReader();\r\n fileReader.onloadend = (evt) => {\r\n if (evt.target.readyState == FileReader.DONE) {\r\n const getMimetype = (signature): string[] => {\r\n let type: string[] = [];\r\n switch (signature) {\r\n case '424DC23':\r\n type = ['bmp'];\r\n return type;\r\n case '89504E47':\r\n type = ['png'];\r\n return type;\r\n case '47494638':\r\n type = ['gif'];\r\n return type;\r\n case '25504446':\r\n type = ['pdf'];\r\n return type;\r\n case 'FFD8FFDB':\r\n case 'FFD8FFE0':\r\n case 'FFD8FFE1':\r\n case 'FFD8FFEE':\r\n type = ['jpeg', 'jpg'];\r\n return type;\r\n case '49492A00':\r\n case '4D4D002A':\r\n type = ['tif'];\r\n return type;\r\n case '4944333':\r\n type = ['mp3', 'mpeg'];\r\n return type;\r\n case '52494646':\r\n case '57415645':\r\n type = ['wav'];\r\n return type;\r\n case '4F676753':\r\n type = ['ogg', 'oga', 'ogv'];\r\n return type;\r\n case '3026B275':\r\n type = ['wmv', 'x-ms-wmv'];\r\n return type;\r\n case '464C56':\r\n type = ['flv'];\r\n return type;\r\n case '504B0304':\r\n case '504B0506':\r\n case '504B0708':\r\n type = ['zip', 'aar', 'apk', 'docx', 'epub', 'ipa', 'jar', 'kmz', 'maff', 'odp', 'ods', 'odt', 'pk3', 'pk4', 'pptx', 'usdz', 'vsdx', 'xlsx', 'xpi'];\r\n return type;\r\n case '504B34':\r\n case '504B56':\r\n case '504B78':\r\n type = ['zip', 'aar', 'apk', 'docx', 'epub', 'ipa', 'jar', 'kmz', 'maff', 'odp', 'ods', 'odt', 'pk3', 'pk4', 'pptx', 'usdz', 'vsdx', 'xlsx', 'xpi'];\r\n return type;\r\n case 'D0CF11E0':\r\n case 'A1B11AE1':\r\n type = ['doc', 'xls', 'ppt', 'msg'];\r\n return type;\r\n case '52494646':\r\n case '41564920':\r\n type = ['avi'];\r\n return type;\r\n case '7B5C7274':\r\n type = ['rtf'];\r\n return type;\r\n case '66747970':\r\n case '69736F6D':\r\n type = ['mp4', 'm4a', 'm4v'];\r\n return type;\r\n case '5363686F':\r\n type = ['csv'];\r\n return type;\r\n case '3C3F786D':\r\n case '3C726F6F':\r\n type = ['xml'];\r\n return type;\r\n default:\r\n type = ['Unknown filetupe'];\r\n return type;\r\n }\r\n };\r\n\r\n const uint = new Uint8Array(evt.target.result);\r\n const bytes = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n bytes.push(uint[i].toString(16));\r\n }\r\n const hex = bytes.join('').toUpperCase();\r\n const binaryMimeType = getMimetype(hex);\r\n\r\n let pngBitDepthTooLarge = false;\r\n if (this.checkPNGBitDepth && binaryMimeType.length == 1 && binaryMimeType[0] == 'png' && uint.length >= 25) { } {\r\n pngBitDepthTooLarge = uint[24] == 16;\r\n }\r\n if (!pngBitDepthTooLarge && binaryMimeType.find(x => x == fileTypeFromName[0].substr(fileTypeFromName[0].indexOf('.') + 1, fileTypeFromName[0].length)) != null) {\r\n this.setFile(file);\r\n }\r\n else {\r\n this.delete();\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Invalid File';\r\n if (!pngBitDepthTooLarge) {\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Please select valid file.';\r\n }\r\n else {\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Bit depth must be 32 bit or less.';\r\n }\r\n deleteConfirmDialog.componentInstance.disableConfirmation = true;\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n return;\r\n }\r\n }\r\n };\r\n\r\n const blob = file.slice(0, 25);\r\n fileReader.readAsArrayBuffer(blob);\r\n }\r\n else {\r\n this.validateTextFile(file);\r\n }\r\n }\r\n\r\n validateTextFile(file: File) {\r\n const txtFileReader = new FileReader();\r\n txtFileReader.onloadend = (evt) => {\r\n if (evt.target.readyState == FileReader.DONE) {\r\n const data = evt.target.result.toString();\r\n if (!data.match(this.xmlRegex)) {\r\n this.setFile(file);\r\n }\r\n else {\r\n this.delete();\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Invalid File';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Please select valid file.';\r\n deleteConfirmDialog.componentInstance.disableConfirmation = true;\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n return;\r\n }\r\n }\r\n };\r\n txtFileReader.readAsText(file);\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\n\r\n@Component ({\r\n\tselector: 'expand-collapse-buttons',\r\n\ttemplateUrl: './expand-collapse-buttons.component.html',\r\n\tstyleUrls: ['./expand-collapse-buttons.component.css']\r\n})\r\nexport class ExpandCollapseButtonsComponent {\r\n\r\n\t// Properties\r\n\t@Input() expandEmitter;\r\n\r\n\t// Class Functions\r\n\tconstructor () {}\r\n\r\n\t// Events\r\n\r\n\t// Methods\r\n\texpandAll(expand: boolean) {\r\n\t\tif (this.expandEmitter != null) {\r\n\t\t\tthis.expandEmitter.emit (expand);\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n\r\n","\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\r\n\t\r\n\t\r\n","import { Component, OnInit, OnDestroy, EventEmitter, Input, Output, ElementRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport {SharedService} from '../../../shared.service';\r\n\r\n/**\r\n * This displays the save and cancel buttons positioned to the right of wherever its placed.\r\n * Notably, it also displays the small sticky dialog above the footer for \"Data saved successfully\" or\r\n * \"Data failed to save.\"\r\n * @Input() startOver: if it is true, it'll display a \"Start Over\" icon instead of the usual Cancel icon.\r\n * All other functionality remains exactly identical.\r\n * @Input() saveEnabled: enables the save button. This is true by default.\r\n * @Input() cancelEnabled: enables the cancel button. This is true by default. Note, there is no image for disabled cancel right now.\r\n * @Input() saveServerEvent: An event emitter for booleans (if the server successfully or unsuccessfully saves)\r\n * @Ouput() saveButtonEvent: true if clicked on save, false if clicked on cancel\r\n */\r\n@Component({\r\n selector: 'save-cancel-buttons',\r\n templateUrl: './save-cancel-buttons.component.html',\r\n styleUrls: ['./save-cancel-buttons.component.css']\r\n})\r\nexport class SaveCancelButtonsComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n @Input() startOver = false;\r\n @Input() saveEnabled = true;\r\n @Input() cancelEnabled = true;\r\n @Input() saveServerEvent: EventEmitter; // True is success, false if failure\r\n @Output() saveButtonEvent: EventEmitter = new EventEmitter ();\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private element: ElementRef,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: subscribes to the server save and produces the right messages\r\n if (this.saveServerEvent != null) {\r\n this.subscriptions.push(this.saveServerEvent.subscribe(save => {\r\n if (save) {\r\n this.sharedService.showGoodSnackbar();\r\n } else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy () {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach (subscription => {\r\n subscription.unsubscribe ();\r\n });\r\n }\r\n}\r\n","
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{label | translate}}\r\n
\r\n
\r\n","import { System } from './../../System';\r\nimport { Component, EventEmitter, Output, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'tyl-button',\r\n templateUrl: './tyl-button.component.html',\r\n styleUrls: [\r\n './tyl-button.component.css'\r\n ]\r\n})\r\nexport class TylButtonComponent implements OnInit {\r\n @Input() public image: string;\r\n @Input() public disabledImage: string;\r\n @Input() public label: string;\r\n @Input() public showLabel = true;\r\n @Input() public disabled = false;\r\n @Input() public textColor: string;\r\n @Input() public iconWidth: number;\r\n @Input() public noPadding = false;\r\n @Input() public id: string;\r\n @Output()\r\n clickEvent = new EventEmitter();\r\n srcUrl: string;\r\n private localDisabled = false; // to prevent double-clicking/ rapid clicks. This will disallow clicking but won't gray out the button\r\n toCamelCase: (str: string) => string;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.toCamelCase = System.toCamelCase;\r\n }\r\n\r\n onClick() {\r\n if (!this.disabled && !this.localDisabled) {\r\n this.localDisabled = true;\r\n this.clickEvent.emit();\r\n\r\n setTimeout(() => {\r\n this.localDisabled = false;\r\n }, 300);\r\n }\r\n }\r\n\r\n checkId() {\r\n if (!!this.id) {\r\n return this.id;\r\n } else {\r\n return this.toCamelCase(this.label) + 'Button';\r\n }\r\n }\r\n\r\n onKeydown(event: KeyboardEvent) {\r\n if ((event.key == 'Enter' || event.key == ' ') && !this.disabled) {\r\n event.stopPropagation();\r\n this.clickEvent.emit();\r\n }\r\n }\r\n}\r\n","\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport { DataDefinitionComponent } from '../../../../admin360/data-definition/data-definition.component';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\n\r\n@Component({\r\n selector: 'data-def-button',\r\n templateUrl: './data-def-button.component.html',\r\n styleUrls: ['./data-def-button.component.css']\r\n})\r\nexport class DataDefButtonComponent implements OnInit {\r\n\r\n @Input() dataDefEnum: string;\r\n @Input() disabled: boolean;\r\n @Output() dataDefUpdated = new EventEmitter();\r\n \r\n constructor(\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n editClick() {\r\n if (!this.disabled) {\r\n const dataDef = this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == this.dataDefEnum);\r\n if (dataDef) {\r\n const addEdditDialog = this.dialog.open(DataDefinitionComponent, {\r\n data: dataDef,\r\n disableClose: true\r\n });\r\n addEdditDialog.afterClosed().pipe(take(1)).subscribe(() => {\r\n this.dataDefUpdated.emit(true);\r\n });\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { isEqual, orderBy } from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { DataDefinition, DataDefinitionList } from '../../../admin360/data-definition/data-definition.model';\r\nimport { CustomizationFrameworkService } from '../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../year/year.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Directive()\r\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\r\nexport class DataDefControl implements OnInit, OnDestroy {\r\n\r\n // NOTE: This class is inherited by the various types of data def controls (dropdown, radio button list, multi-select, etc)\r\n // Some methods in this class are overridden by it's children\r\n\r\n static incrementor = 1;\r\n localId: number;\r\n subscriptions: Subscription[] = [];\r\n dataDef: DataDefinitionList;\r\n options: DataDefinition[] = [];\r\n showButton = false;\r\n rawValue: any;\r\n private _dataDefEnum: string;\r\n public get dataDefEnum(): string {\r\n return this._dataDefEnum;\r\n }\r\n public _value: any;\r\n public get value(): any {\r\n return this._value;\r\n }\r\n private _useCodeAsValue: boolean;\r\n public get useCodeAsValue(): boolean {\r\n return this._useCodeAsValue;\r\n }\r\n private _useDefaultValue: boolean;\r\n public get useDefaultValue(): boolean {\r\n return this._useDefaultValue;\r\n }\r\n\r\n @Input() label: string;\r\n @Input() required: boolean;\r\n @Input() hideRequiredMarker: boolean;\r\n @Input() disabled: boolean;\r\n @Input()public set useDefaultValue(value: boolean) {\r\n this._useDefaultValue = value;\r\n this.setDefaultValue();\r\n }\r\n @Input() public set useCodeAsValue(value: boolean) { // if true we will use the Code as the value rather than the ID\r\n this._useCodeAsValue = value;\r\n this.setValue(this.rawValue);\r\n }\r\n @Input() public set dataDefEnum(value: string) {\r\n this._dataDefEnum = value;\r\n this.getDataDef();\r\n }\r\n @Input() public set value(value: any) {\r\n this.rawValue = value;\r\n if (this._value != value && this._value != Number(value) || (Array.isArray(value) && !isEqual(value, this.value))) {\r\n this.setValue(value);\r\n }\r\n }\r\n\r\n @Output() valueChange = new EventEmitter();\r\n @Output() controlEmitter = new EventEmitter();\r\n @Output() codeChange = new EventEmitter();\r\n @Output() descriptionChange = new EventEmitter();\r\n\r\n constructor(\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private yearService: YearService,\r\n private loginService: LoginService\r\n ) {\r\n this.localId = DataDefControl.incrementor++;\r\n }\r\n\r\n ngOnInit(): void {\r\n // this.getDataDef(); // this will be called when the lookup enum input is populated\r\n\r\n this.subscriptions.push(this.yearService.observableDefaultYearStream$.subscribe(y => {\r\n this.getDataDef();\r\n }));\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n getDataDef() {\r\n this.customizationFrameworkService.getDataDefinitionListByEnum(this.dataDefEnum, this.yearService.defaultYear.Id, this.yearService.defaultYear.SiteYearId, null).pipe(take(1)).subscribe(list => {\r\n this.dataDef = list;\r\n this.checkPermissions();\r\n this.filterOptions();\r\n this.setDefaultValue();\r\n });\r\n }\r\n\r\n setValue(value: any) {\r\n if (!value || this.useCodeAsValue || Array.isArray(value)) {\r\n this._value = value;\r\n }\r\n else {\r\n this._value = Number(value);\r\n }\r\n this.filterOptions();\r\n this.setDefaultValue();\r\n }\r\n\r\n // this method is overridden by the multi-select control\r\n setDefaultValue() {\r\n if (this.options && !this.value && this.useDefaultValue) {\r\n const defaultOption = this.options.find(o => o.IsDefault && !o.Inactive);\r\n if (defaultOption) {\r\n if (this.useCodeAsValue) {\r\n this._value = defaultOption.Code;\r\n }\r\n else {\r\n this._value = defaultOption.Id;\r\n }\r\n this.valueChangeHandler();\r\n }\r\n }\r\n }\r\n\r\n // this method is overridden by the multi-select control\r\n filterOptions() {\r\n if (this.dataDef) {\r\n this.options = this.dataDef.DataDefinitions.filter(o =>\r\n (\r\n o.Inactive == false // do not show inactive codes unless that is the currently selected value\r\n ||\r\n (\r\n this.value && o.Id\r\n && (\r\n (!this.useCodeAsValue && o.Id == this.value)\r\n || (this.useCodeAsValue && o.Code == this.value)\r\n )\r\n )\r\n )\r\n &&\r\n (\r\n ( // We only show list items that have a valid code ('blank' is not valid) or a valid description\r\n o.Code && o.Code.trim() && o.Code.trim().toLowerCase() != 'blank'\r\n )\r\n ||\r\n (\r\n o.Description && o.Description.trim()\r\n )\r\n )\r\n );\r\n this.sortOptions();\r\n this.processOptions();\r\n }\r\n }\r\n\r\n sortOptions() {\r\n this.options = orderBy(this.options, ['Sequence'], ['asc']);\r\n }\r\n\r\n checkPermissions() {\r\n if (this.loginService.LoginSettings.EnableDataDefinitions && this.dataDef && !this.dataDef.ReadOnly && this.dataDef.UserCanEdit) {\r\n this.showButton = true;\r\n }\r\n }\r\n\r\n // this method is overridden by the multi-select control\r\n valueChangeHandler() {\r\n this.valueChange.emit(this.value);\r\n let optionSelected: DataDefinition;\r\n if (this.useCodeAsValue) {\r\n optionSelected = this.options.find(option => option.Code == this.value);\r\n }\r\n else {\r\n optionSelected = this.options.find(option => option.Id == this.value);\r\n }\r\n\r\n if (optionSelected) {\r\n this.descriptionChange.emit(optionSelected.Description);\r\n this.codeChange.emit(optionSelected.Code);\r\n }\r\n }\r\n\r\n public processOptions(): void { } // should be overridden by children if extra processing is necessary, such as in radio button list and multi-select\r\n}\r\n","
\r\n \r\n \r\n \r\n {{(dataDef.CodeNotRequired ? '' : (opt.Code ? opt.Code : '') + ' - ') + (opt.Description ? opt.Description : '')}}\r\n \r\n\r\n\r\n
","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { FloatLabelType } from '@angular/material/form-field';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { DataDefControl } from '../data-def-control.directive';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'data-def-dropdown',\r\n templateUrl: './data-def-dropdown.component.html',\r\n styleUrls: ['./data-def-dropdown.component.css']\r\n})\r\nexport class DataDefDropdownComponent extends DataDefControl {\r\n\r\n @Input() floatLabel: FloatLabelType;\r\n @Input() hintLabel: string;\r\n @Input() hintColor: string;\r\n @Input() clearable: boolean;\r\n @Input() preventCollapse: boolean;\r\n @Input() postLabelSpace: boolean;\r\n @Input() fullWidth: boolean;\r\n\r\n private _controlRef: ElementRef;\r\n get controlRef() {\r\n return this._controlRef;\r\n }\r\n @ViewChild('control', { read: ElementRef }) set controlRef(value: ElementRef) {\r\n this._controlRef = value;\r\n this.controlEmitter.emit(value);\r\n }\r\n\r\n constructor(\r\n customizationFrameworkService: CustomizationFrameworkService,\r\n yearService: YearService,\r\n loginService: LoginService\r\n ) {\r\n super(customizationFrameworkService, yearService, loginService);\r\n }\r\n}\r\n","import { ElementRef } from '@angular/core';\r\n\r\nexport class ErrorList {\r\n id?: number = 0;\r\n fieldName: string;\r\n completFieldName?: string ='';\r\n errorMsg: string|null;\r\n fieldRef: ElementRef;\r\n\tobject?: any;\r\n\tclickCallback?: Function;\r\n}\r\n","import { ErrorList } from './error-list.model';\r\n\r\nexport class Errors {\r\n\r\n // Properties\r\n errorList: ErrorList[] = [];\r\n\r\n // Class Functions\r\n constructor(errorList: ErrorList[]) {\r\n this.errorList = errorList;\r\n }\r\n}","export class Dimensions {\r\n minWidth: number;\r\n maxWidth: number;\r\n}","
\r\n
0\"\r\n [ngStyle]=\"{'position': 'absolute',\r\n 'bottom': '0px',\r\n 'right': '0px',\r\n 'min-width': minWidth ? minWidth + 'px' : '300px',\r\n 'max-width': maxWidth ? maxWidth + 'px' : '',\r\n 'border': '1px solid #a20000',\r\n 'background-color': 'white'\r\n }\">\r\n
\r\n Errors were found. Please see details below.\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n 0\">\r\n {{error.fieldName}}\r\n {{error.fieldName}}\r\n : \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { OverlayRef } from '@angular/cdk/overlay';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Component, OnInit, ElementRef, HostListener } from '@angular/core';\r\nimport { ErrorList } from './error-list.model';\r\nimport { Errors } from './errors';\r\nimport { Dimensions } from './dimensions';\r\n\r\n@Component({\r\n selector: 'error-prompt-messages',\r\n templateUrl: './error-prompt-messages.component.html'\r\n})\r\nexport class ErrorPromptMessagesComponent implements OnInit {\r\n\r\n // Properties\r\n errorList: ErrorList[] = [];\r\n minWidth: number;\r\n maxWidth: number;\r\n\r\n // Class Functions\r\n constructor(\r\n private errors: Errors,\r\n private sanitizer: DomSanitizer,\r\n private overlayRef: OverlayRef,\r\n private elementRef: ElementRef,\r\n private dimensions: Dimensions\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.errorList = this.errors.errorList;\r\n this.minWidth = this.dimensions.minWidth;\r\n this.maxWidth = this.dimensions.maxWidth;\r\n }\r\n\r\n // Methods\r\n\r\n errorLinkClick(error: ErrorList) {\r\n \t// PRE: an error's link is clicked\r\n\t\t// POST: changes the focus to that field and calls the callback\r\n if (error.fieldRef) {\r\n error.fieldRef.nativeElement.focus();\r\n }\r\n \tif (error.clickCallback) {\r\n error.clickCallback(error.object);\r\n\t\t}\r\n this.overlayRef.dispose();\r\n\t}\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClick(event) {\r\n // PRE: the dom is clicked outside of the error messages\r\n // POST: removes this from the dom\r\n if (!this.elementRef.nativeElement.contains(event.target)) {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n}\r\n","\r\n
0\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n style=\"cursor:pointer;\"\r\n (click)=\"errorCircleClick(); $event.stopPropagation();\" \r\n (keydown)=\"$event.key == 'Enter' || $event.key == ' ' ? errorCircleClick() : null\"\r\n aria-label=\"errors button. Press to view errors.\">\r\n \r\n
\r\n","import { Errors } from './errors';\r\nimport { Component, Input, OnInit, ElementRef, Injector, OnDestroy } from '@angular/core';\r\nimport { ErrorList } from './error-list.model';\r\nimport { Overlay, OverlayRef, } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { ErrorPromptMessagesComponent } from './error-prompt-messages.component';\r\nimport { Dimensions } from './dimensions';\r\n\r\n\r\n@Component({\r\n selector: 'error-prompt',\r\n templateUrl: './error-prompt.component.html',\r\n styleUrls: ['./error-prompt.component.css'],\r\n})\r\nexport class ErrorPromptComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n @Input() insideFlex: boolean; // deprecated - do not use\r\n @Input() minWidth: number;\r\n @Input() maxWidth: number;\r\n public overlayRef: OverlayRef;\r\n\r\n private _errorList: ErrorList[];\r\n public get errorList(): ErrorList[] {\r\n return this._errorList;\r\n }\r\n @Input() public set errorList(value: ErrorList[]) {\r\n this._errorList = value;\r\n if (this._errorList && this._errorList.length > 0) {\r\n setTimeout(() => {\r\n this.showErrors();\r\n }, 0);\r\n }\r\n else {\r\n this.hideErrors();\r\n }\r\n }\r\n\r\n // Class Functions\r\n constructor(\r\n private _eref: ElementRef,\r\n private overlay: Overlay,\r\n private injector: Injector\r\n ) {}\r\n\r\n // Event Functions\r\n errorCircleClick() {\r\n // PRE: the error circle is clicked\r\n // POST: shows the error messages overlay\r\n if (this.overlayRef && this.overlayRef.hasAttached()) {\r\n this.hideErrors();\r\n } else {\r\n this.showErrors();\r\n }\r\n }\r\n\r\n showErrors() {\r\n if (!this.overlayRef || !this.overlayRef.hasAttached()) {\r\n const position = this.overlay\r\n .position()\r\n .flexibleConnectedTo(this._eref.nativeElement.parentElement)\r\n .withPositions([\r\n {\r\n offsetY: -5,\r\n offsetX: -10,\r\n originX: 'end',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n weight: 1\r\n }\r\n ]);\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy: position\r\n });\r\n const injector = Injector.create(\r\n [\r\n {\r\n provide: Errors,\r\n useValue: new Errors(this.errorList),\r\n },\r\n {\r\n provide: OverlayRef,\r\n useValue: this.overlayRef\r\n },\r\n {\r\n provide: Dimensions,\r\n useValue: {\r\n minWidth: this.minWidth,\r\n maxWidth: this.maxWidth\r\n }\r\n }\r\n ],\r\n this.injector\r\n );\r\n const messagePortal = new ComponentPortal(ErrorPromptMessagesComponent, null, injector);\r\n this.overlayRef.attach(messagePortal);\r\n }\r\n }\r\n\r\n hideErrors() {\r\n if (this.overlayRef && this.overlayRef.hasAttached()) {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: removes the error message overlay\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n}\r\n\r\n","
\r\n\t\r\n\t\tData is filtered.\r\n\t\r\n\t\r\n
\r\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\r\nimport {animate, state, style, transition, trigger} from '@angular/animations';\r\nimport {Subscription} from 'rxjs';\r\n\r\n// These are used for the transition\r\n\r\n/**\r\n * This is meant to provide a generic notification for all our filters. It includes the following:\r\n *\r\n * @Input panelFiltered: when true, this notification shows up. This defaults to true to allow the mere use of *ngIf.\r\n * @Output filter: this fires when the filter text is clicked.\r\n * \t\tNOTE: it is intended to make the filter show up. I didn't implement it here because you have to supply a template.\r\n * @Output clearFilter: this fires when the clear filter text is clicked.\r\n * \t\tNOTE: this is intended to clear out the filter AND reset the cancel state. Again, it's component specific.\r\n */\r\n@Component({\r\n\tselector: 'filter-notification',\r\n\ttemplateUrl: './filter-notification.component.html',\r\n\tstyleUrls: ['./filter-notification.component.css'],\r\n\tanimations: [\r\n\t\ttrigger('hovered', [\r\n\t\t\tstate('no-hover', style({\r\n\t\t\t\tbackgroundColor: 'transparent'\r\n\t\t\t})),\r\n\t\t\tstate('hover', style({\r\n\t\t\t\tbackgroundColor: '#C5CAE9'\r\n\t\t\t})),\r\n\t\t\ttransition('no-hover <=> hover', [\r\n\t\t\t\tanimate('.2s cubic-bezier(.35,0,.25,1)')\r\n\t\t\t])\r\n\t\t])\r\n\t]\r\n})\r\nexport class FilterNotificationComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\t@Input() filtered = true;\r\n\t@Output() filter = new EventEmitter();\r\n\t@Output() clearFilter = new EventEmitter();\r\n\tclearHover = false;\r\n\tfilterHover = false;\r\n\tclearSubscription: Subscription;\r\n\tfilterSubscription: Subscription;\r\n\r\n\t// Class Functions\r\n\tconstructor() { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tthis.clearSubscription = this.clearFilter.subscribe(() => {\r\n\t\t\tthis.clearHover = false;\r\n\t\t});\r\n\t\tthis.filterSubscription = this.filter.subscribe(() => {\r\n\t\t\tthis.filterHover = false;\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\r\n\t}\r\n\r\n\t// Methods\r\n\r\n}\r\n","\r\nimport { EventEmitter, Output, Input, Directive } from '@angular/core';\r\nimport {TylerMatTableDataSource} from '../../angular-material/extended.class';\r\nimport {FilterModel} from './filter.model';\r\n\r\n\r\n/**\r\n * This is the contents of a filter. This can be useful when trying to build out a pusher filter which has the same contents as\r\n * the table filters.\r\n *\r\n * @Input dateValue: this is the date value for date data types\r\n * @Output dateValueChange: this allows you to use two-way binding on date values\r\n *\r\n * @Input filterValue: this is a string value for string or enumeration data types\r\n * @Ouput filterValueChange: this allows you to use two-way binding on filter values\r\n *\r\n * @Input operation: this is the operation of the filter\r\n * @Output operationChange: this allows you to use two-way binding on operation\r\n *\r\n * @Output menuTrigger: this is triggered when an encapsulating menu should close\r\n *\r\n * REQUIRED @Input data: this is the data source being panelFiltered on\r\n * REQUIRED @Input clearFilterEvent: this is an event emitter that fires whenever the filter is cleared from outside the component.\r\n * REQUIRED @Input dataType: this is the type of the data. Accepted values are number, boolean, string, date, and enumeration\r\n * REQUIRED @Input columnName: this is the name of the column your filtering on\r\n *\r\n * @Input columnIndex: used when filtering on string[] rather than objects\r\n * @Input enumerationValues: this is a list of strings that can be selected for enumeration data types\r\n *\r\n * @Input valueWidth: the width of the filter input. Defaults to 180px.\r\n * @Input operationMarginRight: the space to the right of the operation box. Defaults to 0px.\r\n * @Input floatLabel: whether or not labels should float above the input. Defaults to auto.\r\n * @Input fieldsMarginBottom: the size of the bottom margin. Defaults to 0px.\r\n * @Input showLabel: determines whether or not the label shows up. Defaults to true.\r\n *\r\n * @Output clickEvent: this event fires when the filter button is clicked\r\n * @Output filterChange: this event fires when the data have been changed by this component. The event is the data.\r\n * @Output filterOperationChange: this event fires when the operation has been changed by this component. The event is the operation.\r\n */\r\n@Directive()\r\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\r\nexport class HasFilter {\r\n\r\n\t// Properties\r\n\t@Output() dateValueChange = new EventEmitter();\r\n\t@Output() filterValueChange = new EventEmitter();\r\n\t@Output() operationChange = new EventEmitter();\r\n\t@Output() showTrueChange = new EventEmitter();\r\n\t@Output() showFalseChange = new EventEmitter();\r\n\r\n\t@Input() data: TylerMatTableDataSource;\r\n\t@Input() columnName: string;\r\n\t@Input() columnIndex: number;\r\n\t@Input() dataType: 'string' | 'number' | 'date' | 'boolean' | 'enumeration' | 'nullable boolean';\r\n\t@Output() clickEvent = new EventEmitter();\r\n\t@Input() enumerationValues: string[] = [];\r\n\t@Input() trueValue = 'Y';\r\n\t@Input() indeterminateValue = '';\r\n\t@Input() falseValue = '';\r\n\t@Input() showTrueLabel = 'Y';\r\n @Input() showIndeterminateLabel = '';\r\n\t@Input() showFalseLabel = '';\r\n\t@Input() debounceTime = 0;\r\n\r\n\t@Output() filterChange = new EventEmitter();\r\n\t@Output() filterOperationChange = new EventEmitter();\r\n\r\n\t// Class Functions\r\n\tget dateValue(): Date {\r\n\t if (this.data) {\r\n return this.filter.dateValue;\r\n } else {\r\n\t return null;\r\n }\r\n\t}\r\n\r\n\t@Input() set dateValue(value: Date) {\r\n\t if (this.data) {\r\n this.filter.dateValue = value;\r\n this.dateValueChange.emit(value);\r\n this.data.filter = 'trigger';\r\n }\r\n\t}\r\n\r\n\tget filterValue(): string {\r\n\t if (this.data) {\r\n return this.filter.value;\r\n } else {\r\n\t return '';\r\n }\r\n\t}\r\n\r\n\t@Input() set filterValue(value: string) {\r\n\t if (this.data) {\r\n this.filter.value = value;\r\n this.filterValueChange.emit(value);\r\n this.data.filter = 'trigger';\r\n }\r\n\t}\r\n\r\n\tget operation(): string {\r\n\t if (this.data) {\r\n return this.filter.operator;\r\n } else {\r\n\t return '';\r\n }\r\n\t}\r\n\r\n\t@Input() set operation(value: string) {\r\n\t if (this.data) {\r\n if (!value) {\r\n this.filter.operator = '0';\r\n } else {\r\n this.filter.operator = value;\r\n }\r\n if (this.dataType == 'boolean') {\r\n if (this.filter.operator == '1') {\r\n this.filter.value = this.trueValue;\r\n } else {\r\n this.filter.value = this.falseValue;\r\n }\r\n }\r\n if (this.dataType == 'nullable boolean') {\r\n if (this.filter.operator == '1') {\r\n this.filter.value = this.trueValue;\r\n } else if (this.filter.operator == '3') {\r\n this.filter.value = this.falseValue;\r\n } else {\r\n this.filter.value = this.indeterminateValue;\r\n }\r\n }\r\n this.operationChange.emit(value);\r\n this.data.filter = 'trigger';\r\n }\r\n\t}\r\n\r\n\tget filtered(): boolean {\r\n\t\tif (this.dataType.includes('boolean')) {\r\n\t\t\treturn this.operation != '0';\r\n\t\t} else {\r\n\t\t\treturn (this.filterValue != '' && this.filterValue != undefined && this.filterValue != null) ||\r\n\t\t\t\t(this.dateValue != undefined && this.dateValue != null && this.dateValue.toString() != '' && this.dateValue.toString() != 'Invalid Date');\r\n\t\t}\r\n\t}\r\n\r\n\tget filter(): FilterModel {\r\n\t if (this.data) {\r\n const filter = this.data.getFilter(this.columnName);\r\n if (filter) {\r\n return filter;\r\n } else {\r\n const newFilter = new FilterModel('', this.columnName, '0', this.dataType, null);\r\n if (this.columnIndex) {\r\n newFilter.columnIndex = this.columnIndex;\r\n }\r\n this.data.addFilter(newFilter);\r\n return newFilter;\r\n }\r\n } else {\r\n\t return null;\r\n }\r\n\t}\r\n\r\n\t// Methods\r\n\tapplyFilter() {\r\n\t\t// NOTE: Depreciated. This is no longer necessary.\r\n\t\t// POST: applies the filter\r\n\t\t//\r\n\t\t// // Date types\r\n\t\t// if (this.dataType == 'date' && this.dateValue) {\r\n\t\t// \tconst newFilter = new FilterModel(this.dateValue.toLocaleDateString(), this.columnName, this.operation, this.dataType, this.dateValue);\r\n\t\t// \tthis.data.addRemoveFilter(newFilter, this.data);\r\n\t\t// }\r\n\t\t//\r\n\t\t// // Boolean types\r\n\t\t// else if (this.dataType == 'boolean') {\r\n\t\t// \tconst trueFilter = new FilterModel(this.trueValue, this.columnName, this.operation, this.dataType, this.dateValue);\r\n\t\t// \tconst falseFilter = new FilterModel(this.falseValue, this.columnName, this.operation, this.dataType, this.dateValue);\r\n\t\t// \tif (this.operation == '0') {\r\n\t\t// \t\tthis.data.removeFilter(trueFilter, this.data);\r\n\t\t// \t\tthis.data.removeFilter(falseFilter, this.data);\r\n\t\t// \t} else if (this.operation == '1') {\r\n\t\t// \t\tthis.data.removeFilter(falseFilter, this.data);\r\n\t\t// \t\tthis.data.addFilter(trueFilter, this.data);\r\n\t\t// \t} else if (this.operation == '2') {\r\n\t\t// \t\tthis.data.removeFilter(trueFilter, this.data);\r\n\t\t// \t\tthis.data.addFilter(falseFilter, this.data);\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t//\r\n\t\t// // Other types\r\n\t\t// else {\r\n\t\t// \tconst newFilter = new FilterModel(this.filterValue, this.columnName, this.operation, this.dataType, this.dateValue);\r\n\t\t// \tif (this.columnIndex) {\r\n\t\t// \t\tnewFilter.columnIndex = this.columnIndex;\r\n\t\t// \t}\r\n\t\t// \tthis.data.addRemoveFilter(newFilter, this.data);\r\n\t\t// }\r\n\t}\r\n\r\n\tremoveClick() {\r\n\t\tswitch (this.dataType) {\r\n\t\t\tcase 'date':\r\n\t\t\t\tthis.dateValue = undefined;\r\n\t\t\t\tthis.filterChange.emit(undefined);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'string':\r\n\t\t\t\tthis.filterValue = '';\r\n\t\t\t\tthis.filterChange.emit('');\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.dateValue = undefined;\r\n\t\t\t\tthis.filterValue = '';\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n
\r\n \r\n \r\n\r\n \r\n \r\n Contains\r\n \r\n \r\n Starts with\r\n \r\n \r\n Ends with\r\n \r\n \r\n Equals\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n Equals\r\n \r\n \r\n Not Equal\r\n \r\n \r\n Less Than\r\n \r\n \r\n Less Than Or Equal To\r\n \r\n \r\n Greater Than\r\n \r\n \r\n Greater Than Or Equal To\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n Equals\r\n \r\n \r\n Not Equal\r\n \r\n \r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{enumerationValue}}\r\n \r\n \r\n \r\n \r\n \r\n\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, Output, EventEmitter, ElementRef, ViewChild, OnInit } from '@angular/core';\r\nimport { FloatLabelType } from '@angular/material/form-field';\r\nimport {HasFilter} from '../has-filter';\r\n\r\n/** DEPRECIATED: WE ARE NO LONGER SYNCING FILTERS!\r\n * This is the contents of a filter. This can be useful when trying to build out a pusher filter which has the same contents as\r\n * the table filters.\r\n *\r\n * @Input dateValue: this is the date value for date data types\r\n * @Output dateValueChange: this allows you to use two-way binding on date values\r\n *\r\n * @Input filterValue: this is a string value for string or enumeration data types\r\n * @Ouput filterValueChange: this allows you to use two-way binding on filter values\r\n *\r\n * @Input operation: this is the operation of the filter\r\n * @Output operationChange: this allows you to use two-way binding on operation\r\n *\r\n * @Output menuTrigger: this is triggered when an encapsulating menu should close\r\n *\r\n * REQUIRED @Input data: this is the data source being panelFiltered on\r\n * REQUIRED @Input dataType: this is the type of the data. Accepted values are string, date, and enumeration\r\n * REQUIRED @Input columnName: this is the name of the column your filtering on\r\n *\r\n * @Input columnIndex: used when filtering string[] rather than objects\r\n * @Input enumerationValues: this is a list of strings that can be selected for enumeration data types\r\n *\r\n * @Input trueValue: this is the value of the column when the boolean is true. Defaults to 'Y'.\r\n * @Input falseValue: this is the value of the column when the boolean is false. Defaults to ''.\r\n * @Input showTrueLabel: this is the label for the show true checkbox. Defaults to the trueValue.\r\n * @Input showFalseLabel: this is the label for the show false checkbox. Defaults to the falseValue.\r\n *\r\n * @Input operationSelectWidth: the width of the operation selection box. Defaults to 180px.\r\n * @Input valueWidth: the width of the filter input. Defaults to 180px.\r\n * @Input operationMarginRight: the space to the right of the operation box. Defaults to 0px.\r\n * @Input floatLabel: whether or not labels should float above the input. Defaults to auto.\r\n * @Input fieldsMarginBottom: the size of the bottom margin. Defaults to 0px.\r\n * @Input showLabel: determines whether or not the label shows up. Defaults to true.\r\n *\r\n * @Input pusherMenuStyle: automatically styles the properties for the pusher menu (overrides)\r\n *\r\n * @Output filterChange: this event fires the new value only when the value is changed from this component\r\n * @Output filterOperationChange: this event fires when the operation has been changed by this component. The event is the operation.\r\n */\r\n@Component({\r\n selector: 'filter-contents',\r\n templateUrl: './filter-contents.component.html',\r\n styleUrls: [\r\n './filter-contents.component.css'\r\n ]\r\n})\r\nexport class FilterContentsComponent extends HasFilter implements OnInit {\r\n\r\n // Properties\r\n\r\n marginTop = '0px';\r\n\r\n @Output() menuTrigger = new EventEmitter();\r\n\r\n @Input() operationSelectWidth = '180px';\r\n @Input() valueWidth = '180px';\r\n @Input() operationMarginRight = '0px';\r\n @Input() fieldsMarginBottom = '0px';\r\n @Input() floatLabel: FloatLabelType = 'auto';\r\n @Input() showLabel = true;\r\n\r\n @Input() pusherMenuStyle = false;\r\n\r\n @ViewChild('filterInput', { read: ElementRef }) filterInputRef: ElementRef;\r\n\r\n // Class Functions\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: determines what the margin top should be\r\n if (this.pusherMenuStyle) {\r\n this.operationSelectWidth = '120px';\r\n this.operationMarginRight = '10px';\r\n if (this.dataType != 'date') {\r\n this.fieldsMarginBottom = '-.5em';\r\n }\r\n this.floatLabel = 'never';\r\n this.showLabel = false;\r\n }\r\n if (this.floatLabel == 'never') {\r\n this.marginTop = '-.5em';\r\n }\r\n\r\n // Checking if the data source doesn't already have a filter for this\r\n\t\tif (this.data && !this.filterValue && !this.dateValue) {\r\n\t\t\tconst existingFilter = this.data.getFilter(this.columnName);\r\n\t\t\tif (existingFilter) {\r\n\t\t\t\tthis.filterValue = existingFilter.value;\r\n\t\t\t\tthis.dateValue = existingFilter.dateValue;\r\n\t\t\t\tthis.operation = existingFilter.operator;\r\n\t\t\t}\r\n\t\t}\r\n }\r\n\r\n // Methods\r\n}","
\r\n
\r\n \r\n \"FilterIcon\" \r\n \"FilterIcon\" \r\n
\r\n \r\n
\r\n \r\n\t\t\t\r\n
\r\n
\r\n
\r\n","import { FilterContentsComponent } from './filter-contents/filter-contents.component';\r\nimport {Component, EventEmitter, Input, OnInit, ViewChild, OnDestroy} from '@angular/core';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport {Subscription} from 'rxjs';\r\nimport {HasFilter} from './has-filter';\r\n\r\n\r\n/**\r\n * This is the contents of a filter. This can be useful when trying to build out a pusher filter which has the same contents as\r\n * the table filters.\r\n *\r\n * @Input dateValue: this is the date value for date data types\r\n * @Output dateValueChange: this allows you to use two-way binding on date values\r\n *\r\n * @Input filterValue: this is a string value for string or enumeration data types\r\n * @Ouput filterValueChange: this allows you to use two-way binding on filter values\r\n *\r\n * @Input operation: this is the operation of the filter\r\n * @Output operationChange: this allows you to use two-way binding on operation\r\n *\r\n * @Output menuTrigger: this is triggered when an encapsulating menu should close\r\n *\r\n * REQUIRED @Input data: this is the data source being panelFiltered on\r\n * REQUIRED @Input dataType: this is the type of the data. Accepted values are string, date, and enumeration\r\n * REQUIRED @Input columnName: this is the name of the column your filtering on\r\n *\r\n * @Input clearFilterEvent: this is an event emitter that fires whenever the filter is cleared from outside the component.\r\n *\r\n * @Input columnIndex: used when filtering on string[] rather than objects\r\n * @Input enumerationValues: this is a list of strings that can be selected for enumeration data types\r\n *\r\n * @Input valueWidth: the width of the filter input. Defaults to 180px.\r\n * @Input operationMarginRight: the space to the right of the operation box. Defaults to 0px.\r\n * @Input floatLabel: whether or not labels should float above the input. Defaults to auto.\r\n * @Input fieldsMarginBottom: the size of the bottom margin. Defaults to 0px.\r\n * @Input showLabel: determines whether or not the label shows up. Defaults to true.\r\n *\r\n * @Output clickEvent: this event fires when the filter button is clicked\r\n * @Output filterChange: this event fires when the data have been changed by this component. The event is the data.\r\n * @Output filterOperationChange: this event fires when the operation has been changed by this component. The event is the operation.\r\n */\r\n@Component({\r\n selector: 'filter',\r\n templateUrl: './filter.component.html',\r\n styleUrls: [\r\n './filter.component.css'\r\n ]\r\n})\r\nexport class FilterComponent extends HasFilter implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n\r\n @Input() clearFilterEvent: EventEmitter;\r\n clearFilterSubscription: Subscription;\r\n\r\n @ViewChild('filterContents', { read: FilterContentsComponent, static: true }) filterContents: FilterContentsComponent;\r\n @ViewChild(MatMenuTrigger, { static: true }) trigger: MatMenuTrigger;\r\n\r\n // Class Functions\r\n\r\n // Methods\r\n filterInputFocus() {\r\n if (this.filterContents && this.filterContents.filterInputRef) {\r\n this.filterContents.filterInputRef.nativeElement.focus();\r\n }\r\n }\r\n\r\n openMenu(event?: any) {\r\n this.trigger.openMenu();\r\n this.filterInputFocus();\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n\t\tif (this.clearFilterEvent) {\r\n\t\t\tthis.clearFilterSubscription = this.clearFilterEvent.subscribe(() => {\r\n\t\t\t\tthis.filterValue = '';\r\n\t\t\t\tthis.dateValue = undefined;\r\n\t\t\t\tthis.operation = '0';\r\n\t\t\t});\r\n\t\t}\r\n }\r\n\r\n ngOnDestroy() {\r\n \tif (this.clearFilterSubscription) {\r\n \t\tthis.clearFilterSubscription.unsubscribe();\r\n\t\t}\r\n\t}\r\n}\r\n","export class FilterModel {\r\n\r\n // Properties\r\n value: string;\r\n column: string;\r\n operator: string;\r\n dataType: string;\r\n dateValue: Date;\r\n columnIndex: number;\r\n\r\n // Class Functions\r\n constructor(value: string, column: string, operator: string, dataType: string, dateValue?: Date) {\r\n this.value = value;\r\n this.column = column;\r\n this.operator = operator;\r\n this.dataType = dataType;\r\n if (dateValue != undefined) {\r\n this.dateValue = dateValue;\r\n }\r\n }\r\n}\r\n","
\r\n
\r\n {{headerLabel | translate}}\r\n
\r\n
\r\n {{showSteps | translate}}\r\n
\r\n\r\n
\r\n {{headerLabel | translate}}\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n
\r\n Proceed?\r\n
\r\n\r\n
\r\n \r\n {{acceptanceMessage | translate}}\r\n \r\n
\r\n\r\n
\r\n {{secondMessage | translate}}\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n\r\n","import { Component, EventEmitter, Output, Input, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'general-confirmation',\r\n templateUrl: './general-confirmation.component.html'\r\n})\r\nexport class GeneralConfirmationComponent implements OnInit {\r\n\r\n @Input() headerLabel: string;\r\n @Input() confirmMessage: string;\r\n @Input() disableConfirmation: boolean;\r\n @Input() okButtonLabel: string;\r\n @Input() okButtonImage = 'save.png';\r\n @Input() okButtonDisabledImage = 'savedisablednocircle.png';\r\n @Input() backButtonLabel = 'Back';\r\n @Input() showProceed: boolean;\r\n @Input() informational = false;\r\n @Input() secondMessage: string;\r\n @Input() warning: boolean;\r\n @Input() headerCenterAlign = false;\r\n @Input() okTylerAstId = 'GenericDialogASTOk';\r\n @Input() closeTylerAstId = 'GenericDialogASTClose';\r\n @Output() confirmEvent = new EventEmitter();\r\n @Output() previousEvent = new EventEmitter();\r\n @Input() showSteps: string;\r\n @Input() checkBoxAcceptance = false;\r\n @Input() acceptanceMessage: string;\r\n @Input() secondMessageWarning = false;\r\n @Input() footerMessage: string;\r\n @Input() showBackBtn = false;\r\n\r\n cancelButtonLabel = 'Cancel';\r\n isAccepted = false;\r\n isOkButtonDisabled = false;\r\n isDynamicCancelLable = '' ;\r\n\r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) {\r\n if (this.okButtonLabel == undefined || this.okButtonLabel == '') {\r\n this.okButtonLabel = 'OK';\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // Setting injected data\r\n if (this.data) {\r\n if (this.data.headerLabel) {\r\n this.headerLabel = this.data.headerLabel;\r\n }\r\n if (this.data.confirmMessage) {\r\n this.confirmMessage = this.data.confirmMessage;\r\n }\r\n if (this.data.disableConfirmation) {\r\n this.disableConfirmation = this.data.disableConfirmation;\r\n }\r\n if (this.data.okButtonLabel) {\r\n this.okButtonLabel = this.data.okButtonLabel;\r\n }\r\n if (this.data.showProceed) {\r\n this.showProceed = this.data.showProceed;\r\n }\r\n if (this.data.informational) {\r\n this.informational = this.data.informational;\r\n }\r\n if (this.data.secondMessage) {\r\n this.secondMessage = this.data.secondMessage;\r\n }\r\n if (this.data.warning) {\r\n this.warning = this.data.warning;\r\n }\r\n if (this.data.showSteps) {\r\n this.showSteps = this.data.showSteps;\r\n }\r\n if (this.data.checkBoxAcceptance) {\r\n this.checkBoxAcceptance = this.data.checkBoxAcceptance;\r\n }\r\n if (this.data.acceptanceMessage) {\r\n this.acceptanceMessage = this.data.acceptanceMessage;\r\n }\r\n if (this.data.okButtonDisabledImage) {\r\n this.okButtonDisabledImage = this.data.okButtonDisabledImage;\r\n }\r\n if (this.data.secondMessageWarning) {\r\n this.secondMessageWarning = this.data.secondMessageWarning;\r\n }\r\n if (this.data.okButtonImage) {\r\n this.okButtonImage = this.data.okButtonImage;\r\n }\r\n if (this.data.headerCenterAlign) {\r\n this.headerCenterAlign = this.data.headerCenterAlign;\r\n }\r\n }\r\n\r\n // If acceptance is enabled then make sure ok button must be disabled untill acceptance checkbox is checked.\r\n this.checkForAcceptance();\r\n }\r\n\r\n okClick() {\r\n this.confirmEvent.emit(true);\r\n this.dialog.close(true);\r\n }\r\n backClick() {\r\n this.previousEvent.emit(true);\r\n this.dialog.close(true);\r\n }\r\n\r\n cancelClick() {\r\n this.dialog.close(false);\r\n }\r\n\r\n onAcceptanceClick() {\r\n this.checkForAcceptance();\r\n }\r\n\r\n checkForAcceptance() {\r\n if (this.checkBoxAcceptance && !this.isAccepted) {\r\n this.isOkButtonDisabled = true;\r\n }\r\n else {\r\n this.isOkButtonDisabled = false;\r\n }\r\n }\r\n}\r\n","
\r\n Special Mark Codes\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Code\r\n \r\n Description\r\n
\r\n {{code.Code}}\r\n \r\n {{code.Description}}\r\n
\r\n
\r\n\r\n\r\n \r\n","import { Component, AfterViewInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { System } from '../../../shared-components/System';\r\nimport { AssignmentService } from '../../../student360/assignment/assignment.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { GradeOverrideCode } from '../../models/grade-override-code.model';\r\n\r\n@Component({\r\n selector: 'app-grade-override-legend',\r\n templateUrl: './grade-override-legend.component.html'\r\n})\r\nexport class GradeOverrideLegendComponent implements AfterViewInit {\r\n\r\n forAssignments: boolean;\r\n overrideCodes: GradeOverrideCode[];\r\n\r\n constructor(\r\n private assignmentService: AssignmentService,\r\n private loginService: LoginService,\r\n private dialog: MatDialogRef\r\n ) {\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.assignmentService.getOverrideCodes().subscribe((codes) => {\r\n this.overrideCodes = (this.forAssignments) ? codes.filter(c => c.ForAssignments) : codes.filter(c => c.ForGradeReporting);\r\n });\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n\r\n isEven(i: any) {\r\n return System.isEven(i);\r\n }\r\n}","export class MenuItem {\r\n\r\n // Properties\r\n itemName: string;\r\n data?: any;\r\n childItems?: MenuItem[];;\r\n disabled?: boolean;\r\n\r\n\r\n // Class Functions\r\n constructor(itemName: string, data?: any) {\r\n this.itemName = itemName;\r\n this.data = data;\r\n }\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, OnInit, Output, EventEmitter, ViewChild } from '@angular/core';\r\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MenuItem } from './menu-item.model';\r\n\r\n@Component({\r\n selector: 'tyl-general-mat-menu',\r\n templateUrl: 'tyl-general-mat-menu.component.html',\r\n exportAs: 'menuTrigger',\r\n})\r\n\r\nexport class TylGeneralMatMenuComponent implements OnInit {\r\n\r\n // View Properties\r\n @ViewChild('actionMenu', { read: MatMenu, static: true }) menu: MatMenu;\r\n @ViewChild('actionMenuTrigger', { read: MatMenuTrigger }) menuTrigger: MatMenuTrigger;\r\n\r\n // Interface Properties\r\n @Input() topMenuItems: string[];\r\n @Input() disabledTopMenuItems: string[] = [];\r\n @Input() disabledTopMenuItemsBoolean: boolean[] = [];\r\n\r\n @Input() bottomMenuItems: string[];\r\n @Input() disabledBottomMenuItems: string[] = [];\r\n @Input() disabledBottomMenuItemsBoolean: boolean[] = [];\r\n\r\n @Input() complexMenuItems: MenuItem[];\r\n\r\n @Input() data: any;\r\n @Input() showSeparator: boolean;\r\n @Output() menuClick = new EventEmitter();\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n menuItemClicked(item: MenuItem) {\r\n item.data = this.data;\r\n this.menuClick.next(item);\r\n if (this.menuTrigger) {\r\n this.menuTrigger.closeMenu();\r\n }\r\n }\r\n\r\n topMenuItemClicked(index: number) {\r\n if (!this.isTopMenuItemDisabled(index)) {\r\n const menuItem = new MenuItem(this.topMenuItems[index], this.data);\r\n\r\n this.menuClick.next(menuItem);\r\n }\r\n }\r\n\r\n bottomMenuItemClicked(index: number) {\r\n if (!this.isBottomMenuItemDisabled(index)) {\r\n const menuItem = new MenuItem(this.bottomMenuItems[index], this.data);\r\n\r\n this.menuClick.next(menuItem);\r\n }\r\n }\r\n\r\n isTopMenuItemDisabled(index: number): boolean {\r\n return this.disabledTopMenuItems.includes(this.topMenuItems[index]) || (this.disabledTopMenuItemsBoolean.length > 0 && this.disabledTopMenuItemsBoolean[index]);\r\n }\r\n\r\n isBottomMenuItemDisabled(index: number): boolean {\r\n return this.disabledBottomMenuItems.includes(this.bottomMenuItems[index]) || (this.disabledBottomMenuItemsBoolean.length > 0 && this.disabledBottomMenuItemsBoolean[index]);\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n\r\n\r\n {{label | translate}}\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n At least one checkbox must be selected
in order to use these options.\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \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, OnInit } from '@angular/core';\r\nimport {TylGeneralMatMenuComponent} from './tyl-general-mat-menu.component';\r\n\r\n@Component({\r\n selector: 'tyl-mat-menu',\r\n templateUrl: 'tyl-mat-menu.component.html',\r\n exportAs: 'menuTrigger'\r\n})\r\n\r\nexport class TylMatMenuComponent extends TylGeneralMatMenuComponent implements OnInit {\r\n @Input() iconWidth: number;\r\n\r\n @Input() public image: string;\r\n @Input() public disabledImage: string;\r\n @Input() public label: string;\r\n @Input() public showLabel = true;\r\n @Input() public disabled = false;\r\n @Input() public textColor: string;\r\n @Input() public useLink = false;\r\n @Input() public showNoRowSelectedMsg = false;\r\n}\r\n","import { School } from '../../year/school.model';\r\nimport { GradeLevelLookup } from '../../lookup/grade-level-lookup.model';\r\nimport { Year } from '../../year/year.model';\r\n\r\n\r\nexport class SelectedSite extends School {\r\n\tselected: boolean;\r\n\tGradeLevels: GradeLevelLookup[];\r\n\tYears: Year[];\r\n\t// Non DTO\r\n\tcheckIndeterminate: boolean;\r\n}\r\n","\r\n

\r\n\tSchool Search\r\n

\r\n\r\n\r\n\r\n\r\n\t
\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t More \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tSchool\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{site.SchoolName}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tType\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{site.SchoolType}}\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{gl.Description}}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{{year.Description}}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\r\n\t
\r\n
\r\n","import { Component, Inject, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { SelectedSite } from './selected-site';\r\nimport { TylerMatTableDataSource } from '../../angular-material/extended.class';\r\nimport { YearService } from '../../year/year.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport * as _ from 'lodash';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { UserPermission } from '../../user/user-permission.model';\r\nimport { GradeLevelLookup } from '../../lookup/grade-level-lookup.model';\r\nimport { LookupService } from '../../lookup/lookup.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { detailExpand } from '../../angular-material/mat-animations';\r\nimport { Year } from '../../year/year.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n\tselector: 'app-selected-sites-dialog',\r\n\ttemplateUrl: './selected-sites-dialog.component.html',\r\n\tstyleUrls: ['./selected-sites-dialog.component.css'],\r\n\tanimations: [detailExpand],\r\n})\r\nexport class SelectedSitesDialogComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\tschools: SelectedSite[] = [];\r\n\ttypes: string[] = [];\r\n\ttableData = new TylerMatTableDataSource();\r\n\t@ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\tviewOnly = false;\r\n\tsubscriptions: Subscription[] = [];\r\n\tallSelected = false;\r\n\tV9UserPermissions: UserPermission[] = [];\r\n\tincludeGradeLevels = false;\r\n\tincludeYears = false;\r\n\tgradeLevels: GradeLevelLookup[] = [];\r\n\tselectedGradeLevelIds: number[] = [];\r\n\tselectedSites: SelectedSite[] = [];\r\n\tyears: Year[] = [];\r\n\tselectedSiteYearIds: number[] = [];\r\n\tcolumnsToDisplay = ['Selected', 'SchoolName', 'SchoolType'];\r\n\tmoreColumns = ['expandedDetailGradeLevel'];\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\tprivate yearService: YearService,\r\n\t\tprivate loginService: LoginService,\r\n\t\tprivate lookupService: LookupService,\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any\r\n\t) { }\r\n\r\n\tngOnDestroy() { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// POST: obtains the schools from the server\r\n\r\n\t\t// Getting the injected data\r\n\r\n\t\tlet schoolIds: number[] = [];\r\n\t\tif (this.data) {\r\n\t\t\t// if (this.data.selectedSites) {\r\n\t\t\t// \tselectedSites = this.data.selectedSites;\r\n\t\t\t// \tschoolIds = selectedSites.split(',');\r\n\t\t\t// \tfor (let i = 0; i < schoolIds.length; i++) {\r\n\t\t\t// \t\tschoolIds[i] = Number.parseInt((schoolIds[i]).trim(), 10);\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\t\t\t// if (this.data.schoolIds) {\r\n\t\t\t// \tschoolIds = this.data.schoolIds;\r\n\t\t\t// \tfor (let i = 0; i < schoolIds.length; i++) {\r\n\t\t\t// \t\tif (i > 0) {\r\n\t\t\t// \t\t\tselectedSites += ',';\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\tselectedSites += schoolIds;\r\n\t\t\t// \t}\r\n\t\t\t// }\r\n\t\t\tif (this.data.selectedSites) {\r\n\t\t\t\tthis.selectedSites = this.data.selectedSites;\r\n\t\t\t\tschoolIds = this.selectedSites.map(o => o.Id);\r\n\t\t\t}\r\n\t\t\tthis.viewOnly = this.data.viewOnly;\r\n\t\t\tif (this.data.includeGradeLevels) {\r\n\t\t\t\tthis.columnsToDisplay = ['More', 'Selected', 'SchoolName', 'SchoolType'];\r\n\t\t\t\tthis.moreColumns = ['expandedDetailGradeLevel'];\r\n\t\t\t\tthis.includeGradeLevels = this.data.includeGradeLevels;\r\n\t\t\t\tthis.getGradeLevels();\r\n\t\t\t\tif (this.data.gradeLevelIds && this.data.gradeLevelIds.length > 0) {\r\n\t\t\t\t\tthis.selectedGradeLevelIds = this.data.gradeLevelIds;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (this.data.includeYears) {\r\n\t\t\t\tthis.columnsToDisplay = ['More', 'Selected', 'SchoolName', 'SchoolType'];\r\n\t\t\t\tthis.moreColumns = ['expandedDetailYear'];\r\n\t\t\t\tthis.includeYears = this.data.includeYears;\r\n\t\t\t\tif (this.data.siteYearIds && this.data.siteYearIds.length > 0) {\r\n\t\t\t\t\tthis.selectedSiteYearIds = this.data.siteYearIds;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// Getting the possible selected sites\r\n\t\tthis.schools = [];\r\n\t\tthis.types = [];\r\n\t\tif (this.data.availableSchools) {\r\n\t\t\tif (this.loginService.LoginSettings.V10 && (this.data.availableSchools.length > 0 || this.data.maintainStudentsDistrictWide)) {\r\n\t\t\t\tthis.subscriptions.push(this.yearService.getSchoolsBySchoolIds(this.data.availableSchools).subscribe(schools => {\r\n\t\t\t\t\tschools.forEach(school => {\r\n\t\t\t\t\t\tconst selectedSite = new SelectedSite();\r\n\t\t\t\t\t\tselectedSite.Id = school.Id;\r\n\t\t\t\t\t\tselectedSite.SchoolName = school.SchoolName;\r\n\t\t\t\t\t\tselectedSite.SchoolCode = school.SchoolCode;\r\n\t\t\t\t\t\tselectedSite.SchoolDescription = '';\r\n\t\t\t\t\t\tselectedSite.SchoolType = school.SchoolType;\r\n\t\t\t\t\t\tthis.schools.push(selectedSite);\r\n\r\n\t\t\t\t\t\tif (!this.types.includes(school.SchoolType)) {\r\n\t\t\t\t\t\t\tthis.types.push(school.SchoolType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Getting the initially selected schools\r\n\t\t\t\t\t\tif (schoolIds.includes(school.Id)) {\r\n\t\t\t\t\t\t\tselectedSite.selected = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\t\t\tthis.getGradeLevels();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.setGridData();\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconst schools = _.sortBy(this.yearService.schools, ['SchoolCode', 'SchoolName']);\r\n\t\t\t\tschools.forEach(obj => {\r\n\t\t\t\t\tconst school = new SelectedSite();\r\n\t\t\t\t\tschool.Id = obj.Id;\r\n\t\t\t\t\tschool.SchoolName = obj.SchoolName;\r\n\t\t\t\t\tschool.SchoolCode = obj.SchoolCode;\r\n\t\t\t\t\tschool.SchoolDescription = obj.SchoolDescription;\r\n\t\t\t\t\tschool.SchoolType = obj.SchoolType;\r\n\t\t\t\t\tthis.schools.push(school);\r\n\r\n\t\t\t\t\tif (!this.types.includes(school.SchoolType)) {\r\n\t\t\t\t\t\tthis.types.push(school.SchoolType);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Getting the initially selected schools\r\n\t\t\t\t\tif (schoolIds.includes(school.Id)) {\r\n\t\t\t\t\t\tschool.selected = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\tthis.getGradeLevels();\r\n\t\t\t}\r\n\t\t\tthis.setGridData();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.loginService.LoginSettings.V10) {\r\n\t\t\t\tthis.yearService.years.filter(o => o.Description == this.yearService.defaultYear.Description).forEach(obj => {\r\n\t\t\t\t\tconst school = new SelectedSite();\r\n\t\t\t\t\tschool.Id = obj.SchoolID;\r\n\t\t\t\t\tschool.SchoolName = obj.SchoolName;\r\n\t\t\t\t\tschool.SchoolCode = obj.SchoolCode;\r\n\t\t\t\t\tschool.SchoolDescription = '';\r\n\t\t\t\t\tschool.SchoolType = obj.SchoolType;\r\n\t\t\t\t\tthis.schools.push(school);\r\n\r\n\t\t\t\t\tif (!this.types.includes(school.SchoolType)) {\r\n\t\t\t\t\t\tthis.types.push(school.SchoolType);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Getting the initially selected schools\r\n\t\t\t\t\tif (schoolIds.includes(school.Id)) {\r\n\t\t\t\t\t\tschool.selected = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tconst schools: Year[] = [];\r\n\t\t\t\tthis.yearService.yearsForC360.forEach(element => {\r\n\t\t\t\t\tconst isActiveSite = this.yearService.schools.find(s => s.Id == element.SchoolID);\r\n\t\t\t\t\tif (isActiveSite != undefined && isActiveSite) {\r\n\t\t\t\t\t\tschools.push(element);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (this.includeYears) {\r\n\t\t\t\t\tschools.forEach(y => {\r\n\t\t\t\t\t\tconst obj = _.cloneDeep(y);\r\n\t\t\t\t\t\tlet school = this.schools.find(o => o.Id == obj.SchoolID);\r\n\t\t\t\t\t\tif (!school) {\r\n\t\t\t\t\t\t\tschool = new SelectedSite();\r\n\t\t\t\t\t\t\tschool.Id = obj.SchoolID;\r\n\t\t\t\t\t\t\tschool.SchoolName = obj.SchoolName;\r\n\t\t\t\t\t\t\tschool.SchoolCode = obj.SchoolCode;\r\n\t\t\t\t\t\t\tschool.SchoolDescription = '';\r\n\t\t\t\t\t\t\tschool.SchoolType = obj.SchoolType;\r\n\t\t\t\t\t\t\tthis.schools.push(school);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!this.types.includes(school.SchoolType)) {\r\n\t\t\t\t\t\t\tthis.types.push(school.SchoolType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Getting the initially selected schools\r\n\t\t\t\t\t\tif (schoolIds.includes(school.Id)) {\r\n\t\t\t\t\t\t\tschool.selected = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Get selected years\r\n\t\t\t\t\t\tif (!school.Years) {\r\n\t\t\t\t\t\t\tschool.Years = [];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tschool.Years.push(obj);\r\n\r\n\t\t\t\t\t\tif (this.selectedSiteYearIds.includes(obj.SiteYearId)) {\r\n\t\t\t\t\t\t\tobj.selected = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tschools.filter(o => o.Description == this.yearService.defaultYear.Description).forEach(obj => {\r\n\t\t\t\t\t\tconst school = new SelectedSite();\r\n\t\t\t\t\t\tschool.Id = obj.SchoolID;\r\n\t\t\t\t\t\tschool.SchoolName = obj.SchoolName;\r\n\t\t\t\t\t\tschool.SchoolCode = obj.SchoolCode;\r\n\t\t\t\t\t\tschool.SchoolDescription = '';\r\n\t\t\t\t\t\tschool.SchoolType = obj.SchoolType;\r\n\t\t\t\t\t\tthis.schools.push(school);\r\n\r\n\t\t\t\t\t\tif (!this.types.includes(school.SchoolType)) {\r\n\t\t\t\t\t\t\tthis.types.push(school.SchoolType);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// Getting the initially selected schools\r\n\t\t\t\t\t\tif (schoolIds.includes(school.Id)) {\r\n\t\t\t\t\t\t\tschool.selected = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.setGridData();\r\n\t\t}\r\n\t}\r\n\r\n\tyearSelected(school: SelectedSite, year: Year) {\r\n\t\tif (school.selected == undefined || school.selected == false) {\r\n\t\t\tschool.selected = true;\r\n\t\t}\r\n\r\n\r\n\t\t\tif (!year.selected) {\r\n\t\t\t\tschool.checkIndeterminate = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconst years: any[] = [];\r\n\t\t\t\tschool.Years.forEach(y => {\r\n\t\t\t\t\tif (y.selected) {\r\n\t\t\t\t\t\tyears.push(y);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tif (school.Years.length == years.length) {\r\n\t\t\t\t\tschool.checkIndeterminate = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tschool.checkIndeterminate = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\r\n\tgradeLevelSelected(school: SelectedSite, gradeLavel: GradeLevelLookup) {\r\n\t\tif (school.selected == undefined || school.selected == false) {\r\n\t\t\tschool.selected = true;\r\n\t\t}\r\n\t\tif (!gradeLavel.selected) {\r\n\t\t\tschool.checkIndeterminate = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tconst gradeLavels: any[] = [];\r\n\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\tif (gl.selected) {\r\n\t\t\t\t\tgradeLavels.push(gl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (school.GradeLevels.length == gradeLavels.length) {\r\n\t\t\t\tschool.checkIndeterminate = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tschool.checkIndeterminate = true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetGradeLevels() {\r\n\t\tif (this.lookupService.gradeLevelLookups && this.lookupService.gradeLevelLookups.length > 0) {\r\n\t\t\tthis.gradeLevels = _.cloneDeep(this.lookupService.gradeLevelLookups);\r\n\t\t\tthis.updateSchoolGradeLevels();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.lookupService.getGradeLevelsLookupByYearId(this.yearService.defaultYear.Id).pipe(take(1)).subscribe(gradelevels => {\r\n\t\t\t\tthis.gradeLevels = gradelevels;\r\n\t\t\t\tthis.lookupService.gradeLevelLookups = _.cloneDeep(gradelevels);\r\n\t\t\t\tthis.updateSchoolGradeLevels();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tupdateSchoolGradeLevels() {\r\n\t\tif (this.includeGradeLevels) {\r\n\t\t\tif (this.gradeLevels && this.gradeLevels.length > 0 && this.schools && this.schools.length > 0) {\r\n\t\t\t\tthis.schools.forEach(school => {\r\n\t\t\t\t\tif (this.loginService.LoginSettings.V10) {\r\n\t\t\t\t\t\tschool.GradeLevels = this.gradeLevels.filter(o => o.SiteID == school.Id);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tschool.GradeLevels = [];\r\n\t\t\t\t\t\tthis.gradeLevels.forEach(gl => {\r\n\t\t\t\t\t\t\tif (gl.SiteIDs.includes(school.Id)) {\r\n\t\t\t\t\t\t\t\tschool.GradeLevels.push(_.cloneDeep(gl));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst selectedSchool = this.selectedSites.find(o => o.Id == school.Id);\r\n\t\t\t\t\tif (selectedSchool) {\r\n\t\t\t\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\t\t\t\tif (selectedSchool.GradeLevels && selectedSchool.GradeLevels.length > 0) {\r\n\t\t\t\t\t\t\t\tif (selectedSchool.GradeLevels.find(o => o.Id == gl.Id) != null) {\r\n\t\t\t\t\t\t\t\t\tgl.selected = true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse if (this.loginService.LoginSettings.V10) { // if no grade levels are passed in, we assume all grade levels are selected. It's not valid to have a school selected with no grade levels.\r\n\t\t\t\t\t\t\t\tgl.selected = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\t// ### indeterminate Start ###\r\n\t\tthis.schools.forEach(element => {\r\n\t\t\tconst gradeLevels: any[] = [];\r\n\t\t\telement.GradeLevels.forEach(gl => {\r\n\t\t\t\tif (gl.selected) {\r\n\t\t\t\t\tgradeLevels.push(gl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (element.selected && element.GradeLevels.length != gradeLevels.length) {\r\n\t\t\t\telement.checkIndeterminate = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\t// ### indeterminate End ###\r\n\t}\r\n\r\n\tsetGridData() {\r\n\t\t// ### indeterminate Start ###\r\n\t\t// this.schools.forEach(element => {\r\n\t\t// \tconst gradeLevels: any[] = [];\r\n\t\t// \telement.GradeLevels.forEach(gl => {\r\n\t\t// \t\tif (gl.selected) {\r\n\t\t// \t\t\tgradeLevels.push(gl);\r\n\t\t// \t\t}\r\n\t\t// \t});\r\n\t\t// \tif (element.selected && element.GradeLevels.length != gradeLevels.length) {\r\n\t\t// \t\telement.checkIndeterminate = true;\r\n\t\t// \t}\r\n\t\t// });\r\n\t\t// ### indeterminate End ###\r\n\t\t// Setting the table data to the selected sites\r\n\t\tthis.tableData.data = this.schools.sort(function (a, b) {\r\n\t\t\tconst siteA = a.SchoolName.toLowerCase();\r\n\t\t\tconst siteB = b.SchoolName.toLowerCase();\r\n\r\n\t\t\tlet comparison = 0;\r\n\r\n\t\t\tif (siteA > siteB) {\r\n\t\t\t\tcomparison = 1;\r\n\t\t\t}\r\n\t\t\telse if (siteA < siteB) {\r\n\t\t\t\tcomparison = -1;\r\n\t\t\t}\r\n\r\n\t\t\treturn comparison;\r\n\t\t});\r\n\t\tthis.tableData.sort = this.sort;\r\n\t}\r\n\r\n\tsave() {\r\n\t\t// PRE: the save button is clicked\r\n\t\t// POST: returns the selected sites and grade Levels\r\n\t\tthis.selectedSites = this.schools.filter(o => o.selected);\r\n\t\tif (this.includeGradeLevels) {\r\n\t\t\tthis.selectedSites.forEach(o => {\r\n\t\t\t\tconst tempGradeLevels = [];\r\n\t\t\t\to.GradeLevels.forEach(gl => {\r\n\t\t\t\t\tif (gl.selected) {\r\n\t\t\t\t\t\tgl.SiteID = o.Id;\r\n\t\t\t\t\t\ttempGradeLevels.push(gl);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\to.GradeLevels = tempGradeLevels;\r\n\t\t\t\t// o.GradeLevels = o.GradeLevels.filter(g => g.selected);\r\n\t\t\t});\r\n\t\t}\r\n\t\telse if (this.includeYears) {\r\n\t\t\tthis.selectedSites.forEach(o => {\r\n\t\t\t\to.Years = o.Years.filter(y => y.selected);\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.dialogBox.close(this.selectedSites);\r\n\t}\r\n\r\n\tcancel() {\r\n\t\t// PRE: the cancel button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\tselectAll(type: string) {\r\n\t\t// PRE: a select all link is clicked\r\n\t\t// POST: selects all the schools of the specified type\r\n\r\n\t\t// Checking if we can do this operation\r\n\t\tif (this.viewOnly) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Selecting all schools\r\n\t\tthis.schools.forEach(school => {\r\n\t\t\tif (school.SchoolType == type) {\r\n\t\t\t\tschool.selected = true;\r\n\t\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\t\t\tgl.selected = true;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.includeYears) {\r\n\t\t\t\t\tschool.Years.forEach(y => {\r\n\t\t\t\t\t\ty.selected = true;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tcheckAll() {\r\n\t\tthis.allSelected = !this.allSelected;\r\n\t\tthis.schools.forEach(school => {\r\n\t\t\t\tschool.checkIndeterminate = false;\r\n\t\t\tschool.selected = this.allSelected;\r\n\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\t\tgl.selected = this.allSelected;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (this.includeYears) {\r\n\t\t\t\tschool.Years.forEach(y => {\r\n\t\t\t\t\ty.selected = this.allSelected;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tschoolSelected(school: SelectedSite) {\r\n\t\tschool.selected = !school.selected;\r\n\t\tif (!school.selected) {\r\n\t\t\tthis.allSelected = false;\r\n\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\t\tgl.selected = false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (this.includeYears) {\r\n\t\t\t\tschool.Years.forEach(y => {\r\n\t\t\t\t\ty.selected = false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tschool.checkIndeterminate = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.includeGradeLevels) {\r\n\t\t\t\tschool.GradeLevels.forEach(gl => {\r\n\t\t\t\t\tgl.selected = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse if (this.includeYears) {\r\n\t\t\t\tschool.Years.forEach(y => {\r\n\t\t\t\t\ty.selected = true;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tschool.checkIndeterminate = false;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\texpandAllClick() {\r\n\r\n\t}\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{ dataItem.studentSelectionName }}\r\n \r\n Withdrawn {{ dataItem.WithdrawnDate|date:'MM/dd/yy' }}\r\n \r\n \r\n Added {{ dataItem.AddedOn|date:'MM/dd/yy' }}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
{{studentIndex + 1}} of\r\n {{students.length}}
\r\n
\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, ViewChild } from '@angular/core';\r\nimport { StudentService } from '../../student/student.service';\r\nimport { Student } from '../../student/student.model';\r\nimport { UserService } from '../../user/user.service';\r\nimport { GeneralPreferences } from '../../user-preferences/general-preferences.model';\r\nimport { UserPreferencesService } from '../../user-preferences/user-preferences.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { RegistrationStudent } from '../../../admin360/registration/models/registration-student.model';\r\nimport * as moment from 'moment';\r\nimport { DropDownListComponent } from '@progress/kendo-angular-dropdowns';\r\nimport { GradebookStudent } from '../../../classroom360/gradebook/v9/models/gradebook-student.model';\r\n\r\n@Component({\r\n selector: 'studentSelection',\r\n templateUrl: './student-selection.component.html',\r\n styleUrls: ['./student-selection.component.css']\r\n})\r\nexport class StudentSelectionComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n // Interface Properties\r\n @Input() forStudentSearch: boolean;\r\n @Input() includeAllOption: boolean;\r\n @Input() studentIndex = 0;\r\n @Input() showActionMenu = false;\r\n @Input() overrideSort: boolean;\r\n @Input() overrideStudent: boolean;\r\n @Input() showNumber: boolean;\r\n @Input() showEnrollmentDates = false;\r\n @Output() studentChanged: EventEmitter = new EventEmitter();\r\n @ViewChild('dropdownlistRef') public dropdownlist: DropDownListComponent;\r\n // Students\r\n private _students: Student[];\r\n @Input() selectedStudent: Student | RegistrationStudent | GradebookStudent;\r\n previousSelectedStudent: Student | RegistrationStudent | GradebookStudent;\r\n\r\n // Other\r\n subscriptions: Subscription[] = [];\r\n generalPreferences: GeneralPreferences;\r\n studentdropDownWidth = 200;\r\n\r\n public virtual: any = {\r\n itemHeight: 30,\r\n pageSize: 15\r\n };\r\n\r\n // Class Functions\r\n constructor(\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private userPreferencesService: UserPreferencesService,\r\n ) {\r\n }\r\n\r\n get userType(): number {\r\n return this.userService.currentUser.UserType;\r\n }\r\n\r\n get students(): Student[] {\r\n return this._students;\r\n }\r\n\r\n @Input() set students(value: Student[]) {\r\n this._students = JSON.parse(JSON.stringify(value));\r\n this.getStudentLabels();\r\n if (this.userType == 1 && this.generalPreferences && !this.overrideSort) {\r\n this.sortStudentsByPreferences();\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n setTimeout(() => {\r\n if (this.selectedStudent) {\r\n const student = this.students.filter(o => o.Id == this.selectedStudent.Id)[0];\r\n if (student) {\r\n this.studentIndex = this.students.indexOf(student);\r\n }\r\n else {\r\n this.studentIndex = 0;\r\n }\r\n }\r\n }, 100);\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n\r\n // Setting initial values\r\n if (!this.selectedStudent) {\r\n this.selectedStudent = this.students[this.studentIndex];\r\n }\r\n\r\n if (this.userType == 1) {\r\n this.generalPreferences = this.userPreferencesService.generalPreferences;\r\n // Sorting students to ensure preferences\r\n if (!this.overrideSort) {\r\n this.sortStudentsByPreferences();\r\n }\r\n if (!this.generalPreferences.ShowStudentNumber) {\r\n this.showNumber = false;\r\n }\r\n\r\n // Subscribing to preference changes to resort students\r\n this.subscriptions.push(\r\n this.userPreferencesService.observablegeneralPreferencesStream$.subscribe(preferences => {\r\n this.generalPreferences = preferences;\r\n if (!this.overrideSort) {\r\n this.sortStudentsByPreferences();\r\n }\r\n })\r\n );\r\n }\r\n\r\n // Responding to selected student changes unless we are overriding\r\n if (!this.overrideStudent) {\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n if (this.studentService.selectedStudent) {\r\n const indexOfSelectedStudent = this.students.findIndex(student => student.Id == this.studentService.selectedStudent.Id);\r\n if (indexOfSelectedStudent >= 0) {\r\n this.studentIndex = indexOfSelectedStudent;\r\n this.selectedStudent = this.students[indexOfSelectedStudent];\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n // Modifying options\r\n if (this.includeAllOption && this.students.filter(student => student.Id == -1).length == 0) {\r\n const allStudent = new Student;\r\n allStudent.Id = -1;\r\n this.students.unshift(allStudent);\r\n const indexOfSelectedStudent = this.students.findIndex(student => student.Id == this.selectedStudent.Id);\r\n if (indexOfSelectedStudent >= 0) {\r\n this.studentIndex = indexOfSelectedStudent;\r\n this.selectedStudent = this.students[indexOfSelectedStudent];\r\n }\r\n }\r\n\r\n this.userPreferencesService.observablegeneralPreferencesStream$.subscribe(preferences => {\r\n this.getStudentLabels();\r\n });\r\n if (this.students) {\r\n this.getStudentLabels();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // POST: unsubscribing to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n getStudentLabels() {\r\n const studentSelectionName = [];\r\n for (const student of this.students) {\r\n let studentLabel = '';\r\n if (student.Id == -1 && this.userType == 1) {\r\n studentLabel = '(All)';\r\n }\r\n else if (student.Id > 0 && this.userType == 1) {\r\n if (this.userService.userType == 1) {\r\n studentLabel = this.studentService.formatStudentName(student.FirstName, student.MiddleName, student.LastName, student.NickName);\r\n }\r\n else {\r\n studentLabel = student.FirstName + ' ' + student.LastName;\r\n }\r\n }\r\n else if (student.Id > 0 && this.userType == 2) {\r\n studentLabel = student.FirstName + ' ' + student.LastName;\r\n }\r\n\r\n if (student.Id > 0 && this.showNumber) {\r\n studentLabel = studentLabel + ' (#' + student.StudentNumber + ')';\r\n }\r\n\r\n const suffix = this.getStudentSuffix(student);\r\n studentLabel = (suffix.length > 0) ? studentLabel + ' ' + suffix : studentLabel;\r\n student.studentSelectionName = studentLabel;\r\n if (student.WithdrawnDate != null) {\r\n const label = student.studentSelectionName + ' Withdrawn ' + moment(student.WithdrawnDate, 'YYYY/MM/DD').format('MM/DD/YY').trim();\r\n studentSelectionName.push(label);\r\n } else if (student.AddedOn != null) {\r\n const label = student.studentSelectionName + ' Added ' + moment(student.AddedOn, 'YYYY/MM/DD').format('MM/DD/YY').trim();\r\n studentSelectionName.push(label);\r\n }\r\n else {\r\n studentSelectionName.push(student.studentSelectionName);\r\n }\r\n\r\n }\r\n if (studentSelectionName.length > 0) {\r\n const longestStudentName = (this.longestStudentName(studentSelectionName)[0].trim()).length;\r\n if (longestStudentName != null) {\r\n // calculate: string convert into pixel\r\n this.studentdropDownWidth = parseInt(longestStudentName, 10) * 8;\r\n }\r\n }\r\n }\r\n\r\n firstStudent() {\r\n // PRE: the first student button is clicked\r\n // POST: navigates to the very first student\r\n this.previousSelectedStudent = JSON.parse(JSON.stringify(this.selectedStudent));\r\n this.studentIndex = 0;\r\n this.selectedStudent = this.students[this.studentIndex];\r\n this.changeStudent(this.selectedStudent);\r\n }\r\n\r\n previousStudent() {\r\n // PRE: the previous student button is clicked\r\n // POST: navigates to the previous student\r\n this.previousSelectedStudent = JSON.parse(JSON.stringify(this.selectedStudent));\r\n this.studentIndex = this.studentIndex - 1;\r\n this.selectedStudent = this.students[this.studentIndex];\r\n this.changeStudent(this.selectedStudent);\r\n }\r\n\r\n nextStudent() {\r\n // PRE: the next student button is clicked\r\n // POST: navigates to the next student\r\n this.previousSelectedStudent = JSON.parse(JSON.stringify(this.selectedStudent));\r\n this.studentIndex = this.studentIndex + 1;\r\n this.selectedStudent = this.students[this.studentIndex];\r\n this.changeStudent(this.selectedStudent);\r\n }\r\n\r\n lastStudent() {\r\n // PRE: the last student button is clicked\r\n // POST: navigates to the very last student\r\n this.previousSelectedStudent = JSON.parse(JSON.stringify(this.selectedStudent));\r\n this.studentIndex = this.students.length - 1;\r\n this.selectedStudent = this.students[this.studentIndex];\r\n this.changeStudent(this.selectedStudent);\r\n }\r\n\r\n changeStudent(student, dropDown?: boolean) {\r\n if (dropDown) {\r\n this.studentIndex = this.students.indexOf(student);\r\n }\r\n if (this.forStudentSearch && !this.overrideStudent) {\r\n this.studentService.updateSelectedStudent(student.Id);\r\n }\r\n this.studentChanged.emit(student.Id);\r\n }\r\n\r\n // Methods\r\n changeStudentById(studentId) {\r\n // POST: changes the student by the ID\r\n for (let i = 0; i < this.students.length; i++) {\r\n if (this.students[i].Id == studentId) {\r\n this.studentIndex = i;\r\n }\r\n }\r\n this.selectedStudent = this.students[this.studentIndex];\r\n // this.studentService.selectedStudent.Id = studentId;\r\n this.changeStudent(this.selectedStudent);\r\n }\r\n\r\n sortStudentsByPreferences() {\r\n // PRE: the general preferences are set\r\n // POST: sorts the students by the preferences\r\n\r\n // Returning if we have no preferences and logging it\r\n if (!this.generalPreferences) {\r\n console.log('No preferences');\r\n return;\r\n }\r\n\r\n // Performing sort\r\n switch (this.generalPreferences.StudentNameFormat.charAt(0)) {\r\n case 'F':\r\n this.students.sort((a: Student, b: Student) => {\r\n const firstNameComparison = a.FirstName.localeCompare(b.FirstName);\r\n if (firstNameComparison == 0) {\r\n return a.LastName.localeCompare(b.LastName);\r\n } else {\r\n return firstNameComparison;\r\n }\r\n });\r\n break;\r\n case 'L':\r\n this.students.sort((a: Student, b: Student) => {\r\n const lastNameComparison = a.LastName.localeCompare(b.LastName);\r\n if (lastNameComparison == 0) {\r\n return a.FirstName.localeCompare(b.FirstName);\r\n } else {\r\n return lastNameComparison;\r\n }\r\n });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n getStudentSuffix(student: Student): string {\r\n const suffix = student.Suffix;\r\n if (suffix != null && suffix.length > 0) {\r\n const numeralMatch = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$|^\\d+$/;\r\n if (suffix.match(numeralMatch)) {\r\n return ' ' + suffix;\r\n }\r\n else {\r\n return ', ' + suffix;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n disableToggle(action) {\r\n // PRE: action is the name of the button\r\n // POST: determines if the button should be active or inactve\r\n if (this.students != undefined) {\r\n if ((action == 'first' || action == 'previous') && this.studentIndex == 0) {\r\n return true;\r\n }\r\n else if ((action == 'last' || action == 'next') && this.studentIndex == this.students.length - 1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n // Dynamically Adjust Student dropDown List Width\r\n longestStudentName(student) {\r\n let max = student[0].length;\r\n student.map(v => max = Math.max(max, v.length));\r\n const result = student.filter(v => v.length == max);\r\n return result;\r\n }\r\n open() {\r\n // Expand Kendo dropdown popup width, as it is virtual and autowidth is not supported\r\n this.dropdownlist.popupSettings.width = '300px';\r\n }\r\n}\r\n","import { EventEmitter, Input, OnDestroy, OnInit, Output, OnChanges, ViewChild, ChangeDetectorRef, Directive } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MatTabGroup } from '@angular/material/tabs';\r\nimport {Subscription} from 'rxjs';\r\n\r\n/**\r\n * This component establishes tabs for a page. To use it, give it the following parameters\r\n * @input tabNames is an array of strings that are the names for each tab\r\n * @input startingIndex is the starting index of the tabs. Defaults to 0.\r\n * @input setIndex is an event emitter the emits the index you want to select when you want to. Defaults to null.\r\n * @input height is the height of the tabs. Defaults to 48.\r\n * @input isChildTabs: if true, sets the styling to child tab styling\r\n * @input isGrandchildTab: if true, sets the styling to grandchild tab styling\r\n * @input disabledTabs: the names of tabs that display as disabled\r\n *\r\n * It provides you with the following\r\n * @output tabChange is a eventEmitter that gives you a string containing the name of the currently selected tab\r\n * @output selectionsChangeIndex is an eventEmitter of a number that emits the selected index upon selection\r\n */\r\n@Directive({\r\n\tselector: 'tabs'\r\n})\r\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\r\nexport class Tabs implements OnInit, OnDestroy, OnChanges {\r\n\r\n\t// Properties\r\n\t@Input() tabNames: string[];\r\n\t@Input() startingIndex = 0;\r\n\t@Input() setIndex: EventEmitter;\r\n\t@Input() noMargin: boolean; // deprecated\r\n\t@Input() forGradebook: boolean; // deprecated\r\n\t@Input() isChildTabs: boolean;\r\n\t@Input() isGrandchildTab: boolean;\r\n @Input() disabledTabs: string[];\r\n\t@Input() height = 48;\r\n\t@Input() locked = false;\r\n\t@Input() transformLabelsToTitleCase = true;\r\n\t@Output() selectionsChange: EventEmitter = new EventEmitter(); // deprecated\r\n\t@Output() selectionsChangeIndex: EventEmitter = new EventEmitter();\r\n\t@Output() tabChange: EventEmitter = new EventEmitter();\r\n selected = new FormControl(0);\r\n\ttabLabels: string[] = [];\r\n\tnoEvent = false;\r\n\t@ViewChild(MatTabGroup, { static: true }) tabs: MatTabGroup;\r\n\tsubscriptions: Subscription[] = [];\r\n\tchangeDetector: ChangeDetectorRef;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tchangeDetector: ChangeDetectorRef\r\n\t) {\r\n\t\tthis.changeDetector = changeDetector;\r\n\t}\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n // POST: initializes the component\r\n\r\n // Setting starting values\r\n\t\tif (this.startingIndex >= 0) {\r\n\t\t\tthis.selected.setValue(this.startingIndex);\r\n }\r\n\r\n // Responding to a selected index\r\n if (this.setIndex) {\r\n \tthis.subscriptions.push(\r\n\t\t\t\tthis.setIndex.subscribe(index => {\r\n\t\t\t\t\tthis.selected.setValue(index);\r\n\t\t\t\t\tthis.changeDetector.detectChanges();\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Sets the tab names\r\n if (this.tabNames && this.transformLabelsToTitleCase) {\r\n this.tabLabels = [];\r\n this.tabNames.forEach(tabName => {\r\n this.tabLabels.push(tabName.toLowerCase());\r\n });\r\n }\r\n\t\telse if (this.tabNames && !this.transformLabelsToTitleCase) {\r\n this.tabLabels = [];\r\n this.tabNames.forEach(tabName => {\r\n this.tabLabels.push(tabName);\r\n });\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: resets the tab labels on changes\r\n if (this.tabNames && this.transformLabelsToTitleCase) {\r\n this.tabLabels = [];\r\n this.tabNames.forEach(tabName => {\r\n this.tabLabels.push(tabName.toLowerCase());\r\n });\r\n }\r\n\t\telse if (this.tabNames && !this.transformLabelsToTitleCase) {\r\n this.tabLabels = [];\r\n this.tabNames.forEach(tabName => {\r\n this.tabLabels.push(tabName);\r\n });\r\n }\r\n }\r\n\r\n\tngOnDestroy() {\r\n\t\tthis.subscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t}\r\n\r\n\tselectedIndexChange(index: number) {\r\n\t\tif (this.noEvent) {\r\n\t\t\tthis.noEvent = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.selected.setValue(index);\r\n\t\t\tthis.selectionsChangeIndex.emit(index);\r\n\t\t\tthis.tabChange.emit(this.tabNames[index]);\r\n\t\t}\r\n\t}\r\n\r\n\tselectTabByName(tabName: string) {\r\n\t\tconst i = this.tabNames.findIndex(o => o.toLowerCase() == tabName.toLowerCase());\r\n\t\tif (i >= 0) {\r\n\t\t\tthis.selected.setValue(i);\r\n\t\t}\r\n\t}\r\n\r\n\tclickTabWithoutEvents(tabName: string) {\r\n\t\tlet index = 0;\r\n\t\tfor (const tab of this.tabNames) {\r\n\t\t\tif (tab.toLowerCase() == tabName.toLowerCase()) {\r\n\t\t\t\tthis.noEvent = true;\r\n\t\t\t\tthis.selected.setValue(index);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tindex = index + 1;\r\n\t\t}\r\n\t}\r\n\r\n\tcheckDisabled(tab: string) {\r\n\t\tif (this.disabledTabs != null && this.disabledTabs.length > 0) {\r\n\t\t\tif (this.disabledTabs.filter(function(t) {return t.toLowerCase() == tab.toLowerCase(); }).length > 0) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n}\r\n","\r\n \r\n\r\n \r\n","\r\nimport {\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n} from '@angular/core';\r\nimport { Tabs } from './tabs';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\n\r\n/**\r\n * This component inherits all of its properties from Tabs\r\n * This is for the light styling of the component\r\n */\r\n@AutoUnsubscribe()\r\n@Component({\r\n\tselector: 'tabs',\r\n\ttemplateUrl: './tabs.component.html',\r\n\tstyleUrls: ['./tabs.component.css']\r\n})\r\nexport class TabsComponent extends Tabs {\r\n\tconstructor(\r\n\t\tchangeDetector: ChangeDetectorRef\r\n\t) {\r\n\t\tsuper(changeDetector);\r\n\t}\r\n}","\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, EventEmitter, Output, OnDestroy, ViewChild, ElementRef} from '@angular/core';\r\nimport { MatCheckbox } from '@angular/material/checkbox';\r\n\r\n/**\r\n * This component encapsulated the MatCheckbox with Tyler styling\r\n * This component supports content projection in exactly the same way as MatCheckbox.\r\n * In addition, a string that is projected into MatCheckbox will automatcally be translated.\r\n *\r\n * @input labelPosition: determines where the label appears, 'before' or 'after'. Defaults to 'after'.\r\n * @input required: whether the checkbox is required. Defaults to false.\r\n * @input name: the name of the checkbox (for forms). Defaults to 'tyl-checkbox-#'.\r\n * @input id: the id of the checkbox. Defaults to 'tyl-checkbox-#'.\r\n * @input indeterminate: the indeterminate state of the checkbox. Defaults to false.\r\n * @input disabled: whether the control is disabled. Defaults to false.\r\n * @input disableRipple: whether the control ripples. Defaults to false.\r\n * @input color: the color theme to apply. Defaults to 'accent'.\r\n * @input checked: the varibale the checkbox binds to.\r\n * @output change: this event emitter emits the boolean for its state when it changes. (used for Angular similarity)\r\n * @output checkedChange: this event emitter emits the boolean for its state when it changes. (custom for two-way binding)\r\n */\r\n@Component({\r\n selector: 'tyl-checkbox',\r\n templateUrl: './tyl-checkbox.component.html',\r\n styleUrls: [\r\n './tyl-checkbox.component.css'\r\n ]\r\n})\r\nexport class TylCheckboxComponent implements OnDestroy {\r\n\r\n // Static Properties\r\n static nameIterator = 0;\r\n static idIterator = 0;\r\n\r\n // Interface Properties for MatCheckbox\r\n @Input() labelPosition: 'before' | 'after' = 'after';\r\n @Input() required = false;\r\n @Input() name = 'tyl-checkbox-' + TylCheckboxComponent.nameIterator++;\r\n @Input() indeterminate = false;\r\n @Input() id = 'tyl-checkbox-' + TylCheckboxComponent.idIterator++;\r\n @Input() disabled = false;\r\n @Input() disableRipple = false;\r\n @Input() color = 'accent';\r\n @Input() value = 'true';\r\n @Output() change = new EventEmitter();\r\n\r\n // Custom Interface Properties\r\n private _checked = false;\r\n @Output() checkedChange = new EventEmitter();\r\n\r\n // Local Properties\r\n @ViewChild('innerCheckbox', { read: MatCheckbox, static: true }) innerCheckbox: MatCheckbox;\r\n @ViewChild('contentRef', { read: ElementRef, static: true }) contentRef: ElementRef;\r\n\r\n // Class Functions\r\n get checked(): boolean {\r\n return this._checked;\r\n }\r\n\r\n @Input() set checked(value: boolean) {\r\n this._checked = value;\r\n this.checkedChange.emit(this._checked);\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: subtracts from the iterators the values of this control\r\n TylCheckboxComponent.nameIterator -= 1;\r\n TylCheckboxComponent.idIterator -= 1;\r\n }\r\n\r\n // Event Functions\r\n\r\n // Methods\r\n public focus() {\r\n this.innerCheckbox.focus('keyboard');\r\n }\r\n\r\n public hasContent() {\r\n return !!this.contentRef.nativeElement.innerHTML;\r\n }\r\n}\r\n","\r\n\r\n \r\n \r\n {{label | translate}} \r\n {{label | translate}}  \r\n \r\n \r\n {{label | translate}} \r\n {{label | translate}}  \r\n \r\n \r\n {{hint | translate}}\r\n \r\n \r\n {{hint | translate}}\r\n \r\n {{errorMessage | translate}}\r\n
\r\n \r\n
\r\n
\r\n \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n","import { ChangeDetectorRef, Component, ContentChild, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { FloatLabelType, MatFormField, MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n/**\r\n * This component encapsulates the form field with Tyler styling.\r\n * This component uses content projection and accepts the following elements between its tags:\r\n * matInput\r\n * \r\n * matSuffix\r\n * matPrefix\r\n *\r\n * @input color: the color theme for the field. Defaults to 'primary'.\r\n * @input floatLabel: whether the label should float. Defaults to 'auto'.\r\n * @input hideRequiredMarker: whether the required * should be hidden. Defaults to false.\r\n * @input hint: the hint for the field.\r\n * @input hintAlign: where the hint should be aligned. Defaults to 'end'.\r\n * @input hintColor: the color of the hint text. Defaults to null.\r\n * @input label: the label for the field. Defaults to null.\r\n * @input errorMessage: the error message that displays when the control is invalidated. Defaults to 'You must enter a valid value'.\r\n * @input fullWidth: sets the width of the mat-form-field to 100%. Defaults to false.\r\n * @input clearable: if true, allows the input to be cleared by clicking on an X while hovering\r\n * @input preventCollapse: if true, prevents the space from collapsing to its smallest possible spacing. Defaults to false.\r\n *\r\n * NOTES:\r\n *\r\n * When you're using errors, use can the control (matInput or ) to determine when the error should show.\r\n * For more information, look at the Angular documentation for Material Input and ErrorStateMatcher\r\n *\r\n * You CANNOT use and between the tags because MatFormField does not natively support content projection.\r\n * As such, you MUST use the label and hint variables to achieve the same effect.\r\n */\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'tyl-form-field',\r\n templateUrl: './tyl-form-field.component.html',\r\n styleUrls: [\r\n './tyl-form-field.component.css'\r\n ]\r\n})\r\nexport class TylFormFieldComponent implements OnInit, OnDestroy {\r\n\r\n // Interface Properties for MatFormField\r\n @Input() floatLabel: FloatLabelType = 'auto';\r\n @Input() hideRequiredMarker = false;\r\n @Input() hintLabel: string;\r\n @Input() hintColor = '';\r\n @Input() clearable = false;\r\n @Input() preventCollapse = false;\r\n @Input() required = false;\r\n @Input() showErrorMessage = true;\r\n @Input() postLabelSpace = false;\r\n // Custom Interface Properties\r\n @Input() label: string;\r\n // @Input() showError: boolean;\r\n @Input() fullWidth = false;\r\n @Output() clearClickEvent = new EventEmitter();\r\n\r\n // Local Properites\r\n private _color = 'primary';\r\n private _control: MatFormFieldControl;\r\n private _matFormField: MatFormField;\r\n private _hint: string;\r\n private _hintAlign = 'end';\r\n private _errorMessage = 'Required field';\r\n private _showError: boolean;\r\n hovering = false;\r\n marginBottom = '0px';\r\n\r\n // Class Functions\r\n constructor(\r\n private changeDetector: ChangeDetectorRef\r\n ) { }\r\n\r\n get hint(): string {\r\n return this._hint;\r\n }\r\n\r\n @Input() set hint(value: string) {\r\n this._hint = value;\r\n this.determineMarginBottom();\r\n\r\n // Preventing ExpressionChangedAfterItHasBeenCheckedError\r\n // this.changeDetector.detectChanges();\r\n }\r\n\r\n get hintAlign() {\r\n return this._hintAlign;\r\n }\r\n\r\n @Input() set hintAlign(value: string) {\r\n this._hintAlign = value;\r\n\r\n // Preventing ExpressionChangedAfterItHasBeenCheckedError\r\n // this.changeDetector.detectChanges();\r\n }\r\n\r\n get errorMessage(): string {\r\n return this._errorMessage;\r\n }\r\n\r\n @Input() set errorMessage(value: string) {\r\n this._errorMessage = value;\r\n this.determineMarginBottom();\r\n }\r\n\r\n get showError(): boolean {\r\n return this._showError;\r\n }\r\n\r\n @Input() set showError(value: boolean) {\r\n this._showError = value;\r\n this.determineMarginBottom();\r\n }\r\n\r\n get control() {\r\n return this._control;\r\n }\r\n\r\n @ContentChild(MatFormFieldControl) set control(value: MatFormFieldControl) {\r\n this._control = value;\r\n if (this._control != null) {\r\n if (this.matFormField) {\r\n this.matFormField._control = this._control;\r\n }\r\n if (this._control instanceof MatSelect) {\r\n this._control.panelClass = 'mat-' + this.color;\r\n }\r\n this._control.stateChanges.subscribe(() => {\r\n this.determineMarginBottom();\r\n this.matFormField.updateOutlineGap();\r\n });\r\n this.determineMarginBottom();\r\n }\r\n }\r\n\r\n get matFormField() {\r\n return this._matFormField;\r\n }\r\n\r\n @ViewChild(MatFormField, { static: true }) set matFormField(value: MatFormField) {\r\n this._matFormField = value;\r\n if (this.control) {\r\n this._matFormField._control = this.control;\r\n }\r\n }\r\n\r\n get color(): string {\r\n return this._color;\r\n }\r\n\r\n @Input() set color(value: string) {\r\n this._color = value;\r\n if (this._control instanceof MatSelect) {\r\n this._control.panelClass = 'mat-' + this.color;\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: sets the form field's control to the control\r\n this.matFormField._control = this.control;\r\n if (!this.label) {\r\n // Reduce space more\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: this is implemented for @AutoUnsubscribe\r\n }\r\n\r\n clear() {\r\n // PRE: the red X is clicked to clear the input\r\n // POST: clears out the input\r\n this.control.value = '';\r\n if (this.control.ngControl) {\r\n this.control.ngControl.viewToModelUpdate('');\r\n }\r\n\r\n this.clearClickEvent.emit();\r\n }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n mouseEnter(event) {\r\n // PRE: the mouse enters this component\r\n // POST: sets hovering to true to allow showing the red X\r\n this.hovering = true;\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n mouseLeave() {\r\n // PRE: the mouse leaves the component\r\n // POST: sets hovering to false to disable showing the red X\r\n this.hovering = false;\r\n }\r\n\r\n\r\n\r\n // Methods\r\n determineMarginBottom() {\r\n // PRE: one of the fields checked here is changed\r\n // POST: determines what the margin bottom ought to be\r\n if (!this.preventCollapse && // If we're not forcing the space\r\n !this.hint && // If there is no hint\r\n (\r\n !this.errorMessage || // And no error message\r\n (\r\n this.control && // Or the control's validator is null and it isn't required\r\n (\r\n !this.control.ngControl || !this.control.ngControl.validator\r\n ) &&\r\n !this.control.required\r\n )\r\n )\r\n ) {\r\n this.marginBottom = '-0.84375em'; // Shorten the bottom\r\n } else {\r\n this.marginBottom = '0px'; // Otherwise, Keep the bottom length\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { NgModel } from '@angular/forms';\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\n\r\n@Component({\r\n selector: 'tyl-select-check-all',\r\n template: `\r\n \r\n {{text}}\r\n \r\n `\r\n})\r\nexport class TylSelectCheckAllComponent implements OnInit {\r\n @Input() model: NgModel;\r\n @Input() values = [];\r\n @Input() text = 'Select All';\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n isChecked(): boolean {\r\n return this.model && this.model.value && this.values && this.values.length\r\n && this.model.value.length === this.values.length;\r\n }\r\n\r\n isIndeterminate(): boolean {\r\n return this.model.value && this.values.length && this.model.value.length\r\n && this.model.value.length < this.values.length;\r\n }\r\n\r\n toggleSelection(change: MatCheckboxChange): void {\r\n if (change.checked) {\r\n this.model.update.emit(this.values);\r\n } else {\r\n this.model.update.emit([]);\r\n }\r\n } \r\n}\r\n","\r\n \r\n 1\">\r\n Multiple Selected\r\n \r\n \r\n \r\n \r\n {{getDisplay(item) | translate}}\r\n \r\n \r\n \r\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { System } from '../../System';\r\nimport * as _ from 'lodash';\r\n\r\n/**\r\n * This is a multi-select drop-down component with an \"all\" checkbox at the top\r\n *\r\n * @input label: an optional label for this component. Defaults to null.\r\n * @input dataSource: a list of object that binds to this drop-down to populate all the items.\r\n * @input displayField: gets or sets the field of the data source that provides the text content of the list items.\r\n * @input valueField: gets or sets the field of the data source that provides the value of each list item.\r\n * @input valueFieldType: Gets or sets the type of value field comparison.\r\n * @input selected: gets the array of checked item's value , or selects the items in the list control that contains the specified value.\r\n * @input selecteByCommaString(optional): gets the comma separated value of checked items, or selects the items in the list control that contains the specified value.\r\n * @Input selectWidth: the width of the select drop down. Defaults to 100%.\r\n * @Input hint: hint text to pass to Tyler Form Field\r\n * @Input errorMessage: error message to pass to TylerFormField\r\n * @Input required: flag for required fields\r\n * @Input disabled: determines disabled state\r\n * @Input moveSelectedToTop: if true, selected items in list will move to the top of the list\r\n * @output selectedChange: emits when an item's checkbox is checked/unchecked\r\n */\r\n\r\n@Component({\r\n selector: 'tyl-multiple-select-list',\r\n templateUrl: './tyl-multiple-select-list.component.html',\r\n styleUrls: ['./tyl-multiple-select-list.component.css']\r\n})\r\nexport class TylMultipleSelectListComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n @Input() label: string;\r\n @Input() displayField: string;\r\n @Input() valueField: string;\r\n @Input() valueFieldType: string;\r\n @Input() selectWidth = '100%';\r\n @Input() hint: string;\r\n @Input() hintAlign: string;\r\n @Input() errorMessage: string;\r\n @Input() required: boolean;\r\n @Input() disabled: boolean;\r\n @Input() moveSelectedToTop = true;\r\n @Input() disableOptionCentering = true;\r\n @Input() hideSelectAll = false;\r\n @Input() tabIndex = 0;\r\n @Output() selectedChange = new EventEmitter();\r\n @Output() openedChange = new EventEmitter();\r\n @Output() controlEmitter = new EventEmitter();\r\n\r\n private _matSelect: ElementRef;\r\n get matSelect() {\r\n return this._matSelect;\r\n }\r\n @ViewChild('matSelect', { read: ElementRef }) set matSelect(value: ElementRef) {\r\n this._matSelect = value;\r\n this.controlEmitter.emit(value);\r\n }\r\n\r\n dataSourceIds: any;\r\n private originalDataSource: any[];\r\n sortedDataSource: any[];\r\n dropdownIsOpen = false;\r\n\r\n _selected: any[];\r\n\r\n get selected() {\r\n const isAllItemsSelected: boolean = System.arrayEqual(this._selected, this.originalDataSource.map(x => this.getValue(x)));\r\n return isAllItemsSelected ? 'all' : this._selected;\r\n }\r\n\r\n @Input() set selected(value: any) {\r\n setTimeout(() => {\r\n if (value === 'all' || value[0] === 'all') {\r\n this._selected = this.originalDataSource.map(x => this.getValue(x));\r\n } else {\r\n this._selected = value;\r\n }\r\n // this.selectedChange.emit(this.selected);\r\n if (!this.dropdownIsOpen) {\r\n this.sortSelectedItems();\r\n }\r\n }, 0);\r\n }\r\n\r\n get selecteByCommaString() {\r\n return this._selected.join(',');\r\n }\r\n\r\n @Input() set selecteByCommaString(value: string) {\r\n if (value === 'all' || value[0] === 'all') {\r\n this.selected = value;\r\n } else {\r\n switch (this.valueFieldType) {\r\n case 'number':\r\n this._selected = value.split(',').map(x => Number(x));\r\n break;\r\n case 'date':\r\n this._selected = value.split(',').map(x => new Date(x));\r\n break;\r\n default:\r\n this._selected = value.split(',').map(x => x);\r\n break;\r\n }\r\n // this.selectedChange.emit(this._selected);\r\n }\r\n }\r\n\r\n @Input() set dataSource(value: any[]) {\r\n this.originalDataSource = value;\r\n this.dataSourceIds = this.originalDataSource.map(x => this.getValue(x));\r\n if (!this.moveSelectedToTop) {\r\n this.sortedDataSource = _.cloneDeep(this.originalDataSource);\r\n }\r\n else {\r\n setTimeout(() => {\r\n this.sortSelectedItems();\r\n }, 0);\r\n }\r\n }\r\n\r\n get dataSource() {\r\n return this.originalDataSource;\r\n }\r\n\r\n getValue(item: any) {\r\n return this.valueField ? item[this.valueField] : item;\r\n }\r\n\r\n getDisplay(item: any) {\r\n return this.displayField ? item[this.displayField] : item;\r\n }\r\n\r\n ngOnInit() {\r\n this.sortSelectedItems();\r\n }\r\n\r\n // Methods\r\n trackByIndex(index: number, item: any) {\r\n // POST: resolves a bug with NgFor on primitive lists because angular\r\n return item[this.valueField];\r\n }\r\n\r\n sortSelectedItems() {\r\n if (this.moveSelectedToTop) {\r\n if (this.originalDataSource && this._selected) {\r\n this.sortedDataSource = _.cloneDeep(this.originalDataSource);\r\n let i = this.sortedDataSource.length;\r\n const selectedItems = [];\r\n while (i--) {\r\n if (this._selected.includes(this.getValue(this.sortedDataSource[i]))) {\r\n selectedItems.push(this.sortedDataSource[i]);\r\n this.sortedDataSource.splice(i, 1);\r\n }\r\n }\r\n selectedItems.forEach(item => {\r\n this.sortedDataSource.splice(0, 0, item);\r\n });\r\n }\r\n }\r\n }\r\n\r\n openChange(isOpen) {\r\n if (!isOpen) {\r\n this.sortSelectedItems();\r\n }\r\n this.dropdownIsOpen = isOpen;\r\n this.openedChange.emit(isOpen);\r\n }\r\n\r\n focus() {\r\n // POST: focuses on this control\r\n this.matSelect.nativeElement.focus();\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
\r\n {{labels.length > i ? labels[i] : value}}\r\n {{labels.length > i ? (labels[i] | tylTranslate) : (value | tylTranslate)}}\r\n
\r\n \r\n
\r\n
\r\n {{errorMessage}}\r\n
","import { Component, Input, EventEmitter, Output, OnInit, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * This component encapsulate the mat-radio-group control from angular material and uses the Tyler styling.\r\n * It creates a group of radio buttons that map to one variable.\r\n * NOTE: unlike the other components, this one does NOT use content projection. Anything placed inside the tags will be ignored.\r\n *\r\n * @input disabled: determines if the control should be disabled\r\n * @input labelPosition: 'before' or 'after' to indicate where labels should go. Defaults to 'after'.\r\n * @input name: the name of the group (for form purposes). Defaults to 'tyl-radio-group-#'.\r\n * @input required: whether the control is required or not. Defaults to false.\r\n * @input values: the values of each radio button. It also controls how many radio buttons show up.\r\n * @input labels: the labels of the radio buttons, in index order. If a value does not have a label, the value will be used instead.\r\n * @input ids: the ids of each radio button. Defaults to 'tyl-radio-button-#'.\r\n * @input disabledValues: a list of variables. If the value of any radio button is contained, it will be disabled.\r\n * @input disableIndexes: a list of numbers. If the index of a radio button is contained, it will be disabled.\r\n * @input arrange: this may be either 'horizontal' or 'vertical' to force a flex layout in that direction\r\n * @input spaceBetween: this is the extra distance between each radio button\r\n * @input label: this is an optional label that appears beside the radio group. Defaults to null.\r\n * @input labelWidth: the width of a displayed label. Defaults to null.\r\n * @input buttonAlignment: determines where the button should display when the text wraps. Can be top, center, or bottom.\r\n *\r\n * @output change: an eventemitter that emits the most recently selected value.\r\n *\r\n * @input selected: this is the variable the control binds to.\r\n * @output selectedChange: this eventemitter emits the selected variable whenever it is changed.\r\n *\r\n * example:\r\n * \r\n */\r\n@Component({\r\n selector: 'tyl-radio-group',\r\n templateUrl: './tyl-radio-group.component.html',\r\n styleUrls: [\r\n './tyl-radio-group.component.css'\r\n ]\r\n})\r\nexport class TylRadioGroupComponent implements OnInit {\r\n\r\n // Static Properties\r\n static nameIterator = 0;\r\n\r\n // Interface Properties from MatRadioGroup\r\n @Input() disabled = false;\r\n @Input() labelPosition: 'before' | 'after' = 'after';\r\n @Input() name = 'tyl-radio-group-' + TylRadioGroupComponent.nameIterator++;\r\n @Input() required = false;\r\n @Output() change = new EventEmitter();\r\n\r\n // Custom Interface Properties\r\n @Input() values: any[] = [];\r\n @Input() labels: string[] = [];\r\n @Input() ids: string[] = [];\r\n @Input() disabledValues: any[] = [];\r\n @Input() disabledIndexes: number[] = [];\r\n @Input() arrange: 'vertical' | 'horizontal';\r\n @Input() spaceBetween = '0px';\r\n @Input() wordWrap: boolean;\r\n @Input() label: string;\r\n @Input() labelWidth: number;\r\n @Input() contentTemplate: TemplateRef;\r\n @Input() alignment: string;\r\n @Input() tabIndex = 0;\r\n @Input() tylTranslate = false;\r\n @Input() isError = false;\r\n @Input() errorMessage = '';\r\n @Input() buttonAlignment = 'center';\r\n\r\n private _selected: any;\r\n @Output() selectedChange = new EventEmitter();\r\n\r\n // Local Properties\r\n\r\n // Class Functions\r\n get selected() {\r\n return this._selected;\r\n }\r\n\r\n @Input() set selected(value) {\r\n if (value !== this._selected) {\r\n this._selected = value;\r\n this.selectedChange.emit(this._selected);\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n if (this.ids.length < this.values.length) {\r\n for (let i = this.values.length - this.ids.length; i < this.values.length; i++) {\r\n this.ids.push('tyl-radio-button-' + i);\r\n }\r\n }\r\n }\r\n\r\n // Methods\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, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { System } from '../../System';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n selector: 'tyl-time-field',\r\n templateUrl: './tyl-time-field.component.html',\r\n styleUrls: ['./tyl-time-field.component.css']\r\n})\r\nexport class TylTimeFieldComponent implements OnInit {\r\n\r\n // Injected Properties\r\n @Input() id: string;\r\n @Input() name: string;\r\n @Input() label: string;\r\n @Input() twelveHourFormat = true;\r\n @Input() change24HoursTo12Hours = false;\r\n @Input() useValidator = false;\r\n @Input() width = 'inherit';\r\n @Input() required = false;\r\n @Input() disabled = false;\r\n @Input() showNowButton = false;\r\n @Input() customHint: string;\r\n @Input() hideRequiredMarker = false;\r\n @Output() timeValueChange = new EventEmitter();\r\n @Output() timeFieldChange = new EventEmitter();\r\n @Output() twentyFourHourFormatChange = new EventEmitter();\r\n @Output() twelveHourFormatFormatChange = new EventEmitter();\r\n\r\n // Local Properties\r\n twelveHourRegexp = System.twelveHourTimeRegexp;\r\n twentyFourHourRegexp = System.twentyFourHourTimeRegexp;\r\n twelveHourTimeMask = System.twelveHourTimeMask;\r\n twentyFourHourTimeMask = System.twentyFourHourTimeMask;\r\n _timeValue: string;\r\n _timeField: ElementRef;\r\n\r\n twentyFourHourTimeRegexp = /^([01]\\d|2[0-3]):?([0-5]\\d)$/;\r\n // Class Functions\r\n constructor() {\r\n }\r\n\r\n get timeField(): ElementRef {\r\n return this._timeField;\r\n }\r\n\r\n @ViewChild('timeField', { read: ElementRef, static: true }) set timeField(value: ElementRef) {\r\n if (this._timeField != value) {\r\n this._timeField = value;\r\n this.timeFieldChange.emit(value);\r\n }\r\n }\r\n\r\n get timeValue(): string {\r\n return this._timeValue;\r\n }\r\n\r\n @Input() set timeValue(value: string) {\r\n if (this._timeValue == undefined) {\r\n this._timeValue = value;\r\n if (!this._timeValue) {\r\n this._timeValue = '';\r\n }\r\n }\r\n else if (this._timeValue != value) {\r\n this._timeValue = value;\r\n if (!this._timeValue) {\r\n this._timeValue = '';\r\n }\r\n this.timeValueChange.emit(value);\r\n if (this.twelveHourFormat) {\r\n this.twentyFourHourFormatChange.emit(value);\r\n this.twentyFourHourFormatChange.emit(System.convert12HourTimeTo24HourTime(value));\r\n } else {\r\n this.twelveHourFormatFormatChange.emit(System.convert24HourTimeTo12HourTime(value));\r\n this.twentyFourHourFormatChange.emit(value);\r\n }\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n }\r\n\r\n onBlur() {\r\n // PRE: the blur event is called when change24HoursTo12Hours flag is true\r\n // POST: sets the time in 12 hour format\r\n if (this.change24HoursTo12Hours == true && this.twelveHourFormat == true && this.timeValue != null && this.timeValue != undefined) {\r\n let _timeValue = this.timeValue.replace(/_/g, '').replace(/ /g, '').replace(/AM/g, '').replace(/PM/g, '').replace(/am/g, '').replace(/pm/g, '');\r\n if (_timeValue.length < 4) {\r\n _timeValue = _timeValue + '00';\r\n }\r\n if (Number(_timeValue.substring(0, 2)) > 12) {\r\n this.timeValue = System.convert24HourTimeTo12HourTime(_timeValue);\r\n }\r\n\r\n }\r\n }\r\n\r\n nowClick() {\r\n // PRE: the now button is clicked\r\n // POST: sets the time to now\r\n if (this.twelveHourFormat) {\r\n this.timeValue = moment(new Date().toString()).format('hh:mm a').toUpperCase();\r\n } else {\r\n this.timeValue = moment(new Date().toString()).format('HH:mm').toUpperCase();\r\n }\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n

\r\n Course Description\r\n

\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
Course Name{{course ? course : ''}}
Course-Section{{courseSection ? courseSection : ''}}
Teacher{{teacherName ? teacherName : ''}}
School{{schoolName ? schoolName : ''}}
Curriculum\r\n \r\n
Description\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'course-description',\r\n templateUrl: './course-description-dialog.component.html',\r\n styleUrls: [\r\n './course-description-dialog.component.css'\r\n ]\r\n})\r\nexport class CourseDescriptionDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n course: string;\r\n courseSection: string;\r\n teacherName: string;\r\n schoolName: string;\r\n curriculum: string;\r\n description: string;\r\n\r\n // Local Properties\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data containing all of the injected properties\r\n // POST: initializes the data\r\n this.course = this.data.course;\r\n this.courseSection = this.data.courseSection;\r\n this.teacherName = this.data.teacherName;\r\n this.schoolName = this.data.schoolName;\r\n this.curriculum = this.data.curriculum;\r\n this.description = this.data.description;\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../System';\r\nimport { Observable } from 'rxjs';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\n\r\n@Injectable()\r\nexport class CourseSectionSearchService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) {}\r\n\r\n getClassSearch(schoolId: number, yearId: number, activeToday: boolean, courseName: string, courseNumber: string, sectionName: string, teacherName: string, room: string, department: string, termType: string, classMeets: string, schoolIds: number[]): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&activeToday=' + activeToday +\r\n '&courseName=' + courseName +\r\n '&courseNumber=' + courseNumber +\r\n '§ionName=' + sectionName +\r\n '&teacherName=' + teacherName +\r\n '&room=' + room +\r\n '&department=' + department +\r\n '&termType=' + termType +\r\n '&classMeets=' + classMeets;\r\n return this.http.post(System.apiURL.Student + 'GetClassSearch' + queryString, schoolIds);\r\n }\r\n}\r\n","\r\nexport class CustomLayoutType {\r\n Id: number;\r\n Name = '';\r\n}\r\n","import {CustomLayoutSection} from './custom-layout-section.model';\r\n\r\nexport class CustomLayout {\r\n Id: number;\r\n Name: string;\r\n Description: string = '';\r\n LayoutTypeID: number;\r\n Scope: string;\r\n SelectedSites: string;\r\n Owner: number;\r\n OwnerName: string;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpOn: Date;\r\n LastUpBy: number;\r\n DelStatus: boolean;\r\n DelOn: Date;\r\n DelBy: number;\r\n TylerDefault: boolean;\r\n Sections: CustomLayoutSection[] = [];\r\n ErrorMessage = '';\r\n}","import { Injectable } from '@angular/core';\r\nimport { CustomLayoutSpecialField } from './Models/custom-layout-special-field.model';\r\nimport { DataQueryField } from '../../classroom360/data-query/models/data-query-field.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { CustomLayout } from './Models/custom-layout.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { CustomLayoutType } from './Models/custom-layout-type.model';\r\nimport { DataQueryResult } from '../../classroom360/data-query/models/data-query-result.model';\r\nimport { CustomLayoutSection } from './Models/custom-layout-section.model';\r\nimport { first } from 'rxjs/operators';\r\nimport { SQLParameter } from './Models/sql-parameter.model';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport * as _ from 'lodash';\r\nimport { UserPermission } from '../../shared-components/user/user-permission.model';\r\nimport { CustomLayoutSchoolDefault } from './Models/custom-layout-school-default.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable()\r\nexport class CustomLayoutsService {\r\n\r\n specialFields: CustomLayoutSpecialField[] = [];\r\n layoutTypes: CustomLayoutType[] = [];\r\n selectedLayoutType: CustomLayoutType;\r\n dynamicComponentMap = {};\r\n sectionData: CustomLayoutSectionDataContainer[] = [];\r\n numericDataTypes = ['decimal', 'int', 'bigint', 'float', 'money'];\r\n textDataTypes = ['char', 'varchar', 'nvarchar', 'text'];\r\n dateTimeDataTypes = ['time', 'datetime', 'date'];\r\n useCurrentYearOnly = false;\r\n v10YearFieldNames = ['Academic_Year', 'AYIdentifier'];\r\n incidentCodes: Lookup[] = [];\r\n rcgDecimalPlaces = 0;\r\n public incidentSubCodeId: number = 0;\r\n private _externalFilters: DataQueryField[];\r\n public observableexternalFilters = new Subject();\r\n observableexternalFiltersStream$ = this.observableexternalFilters.asObservable();\r\n\r\n public get externalFilters(): DataQueryField[] {\r\n return this._externalFilters;\r\n }\r\n\r\n public set externalFilters(value: DataQueryField[]) {\r\n this._externalFilters = value;\r\n this.observableexternalFilters.next(value);\r\n }\r\n\r\n private _savedLayouts: CustomLayout[];\r\n public get savedLayouts(): CustomLayout[] {\r\n return this._savedLayouts;\r\n }\r\n\r\n public set savedLayouts(value: CustomLayout[]) {\r\n this._savedLayouts = value;\r\n this.observableSavedLayouts.next(this._savedLayouts);\r\n }\r\n\r\n private _selectedLayoutViewType: CustomLayoutType;\r\n public get selectedLayoutViewType(): CustomLayoutType {\r\n return this._selectedLayoutViewType;\r\n }\r\n\r\n public set selectedLayoutViewType(value: CustomLayoutType) {\r\n this._selectedLayoutViewType = value;\r\n this.observableSelectedLayoutViewType.next(this._selectedLayoutViewType);\r\n }\r\n\r\n public observableSelectedLayoutViewType = new Subject();\r\n observableSelectedLayoutViewTypeStream$ = this.observableSelectedLayoutViewType.asObservable();\r\n\r\n public observableSavedLayouts = new Subject();\r\n observableSavedLayoutsStream$ = this.observableSavedLayouts.asObservable();\r\n\r\n private _selectedLayout: CustomLayout;\r\n public get selectedLayout(): CustomLayout {\r\n if (this._selectedLayout && this._selectedLayout.LayoutTypeID == this.selectedLayoutType.Id) {\r\n return this._selectedLayout;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n public set selectedLayout(value: CustomLayout) {\r\n if (value) {\r\n if (!this.loginService.LoginSettings.V10 || this._selectedLayout) {\r\n this.updateUserLayoutHistory(value.Id, this.router.url.indexOf('academicHistory') > -1).pipe(first()).subscribe(() => {\r\n });\r\n }\r\n this._selectedLayout = _.cloneDeep(value);\r\n } else {\r\n this._selectedLayout = null;\r\n }\r\n this.observableSelectedLayout.next(this._selectedLayout);\r\n }\r\n\r\n public observableSelectedLayout = new Subject();\r\n observableSelectedLayoutStream$ = this.observableSelectedLayout.asObservable();\r\n\r\n private _dataQueryFields: DataQueryField[] = [];\r\n public get dataQueryFields(): DataQueryField[] {\r\n return this._dataQueryFields;\r\n }\r\n\r\n public set dataQueryFields(value: DataQueryField[]) {\r\n this._dataQueryFields = value;\r\n this.observableDataQueryFields.next(this._dataQueryFields);\r\n }\r\n\r\n public observableDataQueryFields = new Subject();\r\n observableDataQueryFieldsStream$ = this.observableDataQueryFields.asObservable();\r\n\r\n private _userPermissions: UserPermission[];\r\n public get userPermissions(): UserPermission[] {\r\n return this._userPermissions;\r\n }\r\n\r\n public set userPermissions(value: UserPermission[]) {\r\n this._userPermissions = value;\r\n this.observableUserPermissions.next(this._userPermissions);\r\n }\r\n\r\n public observableUserPermissions = new Subject();\r\n observableUserPermissionsStream$ = this.observableUserPermissions.asObservable();\r\n\r\n private _validActionCodes: string;\r\n public get validActionCodes(): string {\r\n return this._validActionCodes;\r\n }\r\n\r\n public set validActionCodes(value: string) {\r\n this._validActionCodes = value;\r\n this.observableincidentCode.next(this._validActionCodes);\r\n }\r\n\r\n public observableincidentCode = new Subject();\r\n observableincidentCodeStream$ = this.observableincidentCode.asObservable();\r\n\r\n private _FieldDataLoaded: boolean = true;\r\n\r\n public get fieldDataLoaded(): boolean {\r\n return this._FieldDataLoaded;\r\n }\r\n\r\n public set fieldDataLoaded(value: boolean) {\r\n this._FieldDataLoaded = value;\r\n this.observableFieldDataLoaded.next(value);\r\n }\r\n\r\n public observableFieldDataLoaded = new Subject();\r\n observableFieldDataLoadedStream$ = this.observableFieldDataLoaded.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private router: Router\r\n ) {\r\n }\r\n\r\n getLayoutById(layoutId: number): Observable {\r\n const queryString = '?layoutId=' + layoutId;\r\n return this.http.get(System.apiURL.Student + 'GetLayoutById' + queryString);\r\n }\r\n\r\n getLayoutsByType(typeId: number, yearId: number, academicHistory: boolean): Observable {\r\n const queryString = '?typeId=' + typeId +\r\n '&yearId=' + yearId +\r\n '&academicHistory=' + academicHistory;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetLayoutsByType' + queryString);\r\n }\r\n\r\n getSpecialFields(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetCustomLayoutSpecialFields');\r\n }\r\n\r\n getLayoutTypes(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetCustomLayoutTypes');\r\n }\r\n\r\n getDataQueryFields(objectName: string): Observable {\r\n const dqobjectName = (objectName == null || objectName == '') ? '' : objectName;\r\n const queryString = '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&objectName=' + dqobjectName;\r\n return this.http.get(System.apiURL.Classroom + 'GetDataQueryFields' + queryString);\r\n }\r\n\r\n saveLayout(layout: CustomLayout): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveCustomLayout', layout);\r\n }\r\n\r\n deleteLayout(layoutId: number): Observable {\r\n if (this._selectedLayout.Id == layoutId) {\r\n const layout = this.savedLayouts.find(o => o.Id == layoutId);\r\n if (layout) {\r\n const defaultLayout = this.savedLayouts.find(o => o.LayoutTypeID == layout.LayoutTypeID && o.TylerDefault == true);\r\n if (defaultLayout) {\r\n this.selectedLayout = defaultLayout;\r\n } else {\r\n this.selectedLayout = null;\r\n }\r\n } else {\r\n this.selectedLayout = null;\r\n }\r\n }\r\n const queryString = '?layoutId=' + layoutId;\r\n return this.http.get(System.apiURL.Student + 'DeleteCustomLayout' + queryString);\r\n }\r\n\r\n setUserLayoutTypeToDefault(layoutTypeId: number): Observable {\r\n const queryString = '?layoutTypeId=' + layoutTypeId;\r\n return this.http.get(System.apiURL.Student + 'SetUserLayoutTypeToDefault' + queryString);\r\n }\r\n\r\n updateUserLayoutHistory(layoutId: number, academicHistory: boolean): Observable {\r\n const queryString = '?layoutId=' + layoutId + '&academicHistory=' + academicHistory;\r\n return this.http.get(System.apiURL.Student + 'UpdateUserLayoutHistory' + queryString);\r\n }\r\n\r\n setUserLayoutToDefault(layoutTypeId: number): Observable {\r\n const queryString = '?layoutTypeId=' + layoutTypeId;\r\n return this.http.get(System.apiURL.Student + 'SetUserLayoutToDefault' + queryString);\r\n }\r\n\r\n getUserDefaultLayout(layoutTypeId: number, schoolId: number, academicHistory: boolean): Observable {\r\n let queryString = '?layoutTypeId=' + layoutTypeId;\r\n queryString += '&schoolId=' + schoolId;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&academicHistory=' + academicHistory;\r\n return this.http.get(System.apiURL.Student + 'GetUserDefaultLayout' + queryString);\r\n }\r\n\r\n getSectionData(sectionId: number, fields: DataQueryField[], schoolId: number, yearId: number, currentYearOnly: boolean, filterAllowedStudents: boolean, filterAllowedSchools: boolean, studentIds?: string): Observable {\r\n const studentId = (studentIds != null || studentIds != '') ? studentIds : '';\r\n let queryString = '?sectionId=' + sectionId;\r\n queryString += '&schoolId=' + schoolId;\r\n queryString += '&yearId=' + yearId;\r\n queryString += '¤tYearOnly=' + currentYearOnly;\r\n queryString += '&filterAllowedStudents=' + filterAllowedStudents;\r\n queryString += '&filterAllowedSchools=' + filterAllowedSchools;\r\n queryString += '&studentIds=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'GetSectionData' + queryString, fields);\r\n }\r\n\r\n getCustomLayoutSchoolDefaults(layoutType_Id: number): Observable {\r\n const queryString = '?layoutType_Id=' + layoutType_Id +\r\n '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Student + 'GetCustomLayoutSchoolDefaults' + queryString);\r\n }\r\n\r\n saveDefaultSchoolLayouts(defaultSchoolLayouts: CustomLayoutSchoolDefault[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveDefaultSchoolLayouts', defaultSchoolLayouts);\r\n }\r\n\r\n getSectionDataFromSP(spName: string, parameters: SQLParameter[]): Observable {\r\n const queryString = '?spName=' + spName;\r\n return this.http.post(System.apiURL.Student + 'GetSectionDataFromSP' + queryString, parameters);\r\n }\r\n\r\n getV10DataQueryFieldLookup(dqFieldId: number, filterString: string): Observable {\r\n let queryString = '?dqFieldId=' + dqFieldId;\r\n queryString += '&filterString=' + filterString;\r\n return this.http.get(System.apiURL.Student + 'GetV10DataQueryFieldLookup' + queryString);\r\n }\r\n\r\n getV9DataQueryFieldLookup(dqFieldId: number, filterString: string): Observable {\r\n let queryString = '?dqFieldId=' + dqFieldId;\r\n queryString += '&filterString=' + filterString;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Student + 'GetV9DataQueryFieldLookup' + queryString);\r\n }\r\n\r\n performDataQueryUpdate(fields: DataQueryField[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'PerformDataQueryUpdate', fields);\r\n }\r\n\r\n getFilterFields(sectionId: number): DataQueryField[] {\r\n const filterFields: DataQueryField[] = [];\r\n const section = this.selectedLayout.Sections.find(o => o.Id == sectionId);\r\n if (section) {\r\n const clFields = section.AvailableFields.filter(o => o.RequiredForFilter == true);\r\n clFields.forEach(field => {\r\n if (field.DQFieldID > 0) {\r\n const dqField = this.dataQueryFields.find(o => o.ID == field.DQFieldID);\r\n if (dqField) {\r\n filterFields.push(_.cloneDeep(dqField));\r\n }\r\n }\r\n });\r\n if (this.useCurrentYearOnly) {\r\n const dqAYFieldIds = this.dataQueryFields.filter(o => this.v10YearFieldNames.includes(o.FieldName)).map(o => o.ID);\r\n if (filterFields.find(o => dqAYFieldIds.includes(o.ID)) != null) {\r\n // already filtering on academic year\r\n } else {\r\n // need to add academic year filter field\r\n const yearField = section.AvailableFields.find(o => dqAYFieldIds.includes(o.DQFieldID));\r\n if (yearField) {\r\n const dqField = this.dataQueryFields.find(o => o.ID == yearField.DQFieldID);\r\n if (dqField) {\r\n filterFields.push(_.cloneDeep(dqField));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return filterFields;\r\n }\r\n\r\n getFieldList(section: CustomLayoutSection, includeAllChildFields: boolean): DataQueryField[] {\r\n const fields: DataQueryField[] = [];\r\n const childSections = this.selectedLayout.Sections.filter(s => s.ParentSectionID == section.Id);\r\n section.SelectedFields.forEach(sf => {\r\n if (sf.DQFieldID > 0) {\r\n let dqField: any;\r\n if (this.loginService.LoginSettings.V10) {\r\n dqField = this.dataQueryFields.find(d => d.ID == sf.DQFieldID);\r\n } else {\r\n dqField = this.dataQueryFields.find(d => d.ID == sf.DQFieldID && d.CategoryID == sf.CategoryId);\r\n }\r\n if (dqField) {\r\n dqField = _.cloneDeep(dqField);\r\n dqField.ShowOnReport = true;\r\n if (sf.SortByDefault) {\r\n dqField.SortDirection = sf.SortDirection;\r\n dqField.SortOrder = sf.SortOrder;\r\n dqField.SortByDefault = true;\r\n }\r\n fields.push(dqField);\r\n }\r\n } else {\r\n const spField = this.specialFields.find(o => o.Id == sf.SpecialFieldID);\r\n if (spField && spField.IsSection) {\r\n const childSection = this.selectedLayout.Sections.find(o => o.Id == spField.SectionId);\r\n if (childSection && childSections.find(o => o.Id == childSection.Id) == null) {\r\n childSections.push(childSection);\r\n }\r\n }\r\n }\r\n });\r\n section.AvailableFields.forEach(sf => {\r\n if (sf.DQFieldID > 0 && (sf.RequiredForDisplay || sf.RequiredForFilter || sf.AlwaysIncludeInResults) && fields.find(o => o.ID == sf.DQFieldID) == null) {\r\n let dqField: any;\r\n if (this.loginService.LoginSettings.V10) {\r\n dqField = this.dataQueryFields.find(d => d.ID == sf.DQFieldID);\r\n } else {\r\n dqField = this.dataQueryFields.find(d => d.ID == sf.DQFieldID && d.CategoryID == sf.CategoryId);\r\n }\r\n if (dqField) {\r\n dqField = _.cloneDeep(dqField);\r\n dqField.ShowOnReport = sf.RequiredForDisplay;\r\n dqField.IncludeInResults = sf.RequiredForFilter || sf.AlwaysIncludeInResults;\r\n if (sf.SortByDefault) {\r\n dqField.SortDirection = sf.SortDirection;\r\n dqField.SortOrder = sf.SortOrder;\r\n }\r\n fields.push(dqField);\r\n }\r\n }\r\n });\r\n\r\n let fieldsRequiredByChildren: DataQueryField[] = [];\r\n fieldsRequiredByChildren = this.getAllFieldsForChildSections(childSections, includeAllChildFields);\r\n fieldsRequiredByChildren.forEach(field => {\r\n if (fields.find(o => o.ID == field.ID) == null) {\r\n fields.push(field);\r\n }\r\n });\r\n return fields;\r\n }\r\n\r\n getFieldsForChildSectionFilters(childSection: CustomLayoutSection): DataQueryField[] {\r\n const fieldsRequiredByChildren: DataQueryField[] = [];\r\n childSection.AvailableFields.forEach(field => {\r\n if (field.RequiredForFilter && field.DQFieldID > 0 && fieldsRequiredByChildren.find(o => o.ID == field.DQFieldID) == null) {\r\n let dqField: any;\r\n if (this.loginService.LoginSettings.V10) {\r\n dqField = this.dataQueryFields.find(d => d.ID == field.DQFieldID);\r\n } else {\r\n dqField = this.dataQueryFields.find(d => d.ID == field.DQFieldID && d.CategoryID == field.CategoryId);\r\n }\r\n\r\n if (dqField) {\r\n dqField = _.cloneDeep(dqField);\r\n dqField.ShowOnReport = false;\r\n dqField.IncludeInResults = true;\r\n fieldsRequiredByChildren.push(dqField);\r\n }\r\n }\r\n });\r\n return fieldsRequiredByChildren;\r\n }\r\n\r\n getAllFieldsForChildSections(childSections: CustomLayoutSection[], includeAllChildFields: boolean): DataQueryField[] {\r\n let fieldsRequiredByChildren: DataQueryField[] = [];\r\n childSections.forEach(section => {\r\n if (section.IsGrid || !includeAllChildFields) {\r\n this.getFieldsForChildSectionFilters(section);\r\n } else {\r\n fieldsRequiredByChildren = fieldsRequiredByChildren.concat(this.getFieldList(section, true));\r\n }\r\n });\r\n return fieldsRequiredByChildren;\r\n }\r\n\r\n getParameters(section: CustomLayoutSection, rowIndex: number = 0): SQLParameter[] {\r\n // need to specify parameters specific to the sp being called\r\n switch (section.SPName) {\r\n case 'spCustomLayoutAcademicHistorySubGrid': {\r\n return this.getAHSubGridParameters(section, rowIndex);\r\n }\r\n case 'sp_CustomLayoutAcademicHistorySubGrid': {\r\n return this.getV9AHSubGridParameters(section, rowIndex);\r\n }\r\n default: {\r\n return [];\r\n }\r\n }\r\n }\r\n\r\n getAHSubGridParameters(section: CustomLayoutSection, rowIndex: number): SQLParameter[] {\r\n const parentData = this.sectionData.find(o => o.sectionId == section.ParentSectionID);\r\n const parameters: SQLParameter[] = [];\r\n if (parentData) {\r\n let dataBucketScoreId = '-1';\r\n const colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'DataBucketScore_ID');\r\n if (colIndex >= 0) {\r\n dataBucketScoreId = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@DataBucketScore_ID', Value: dataBucketScoreId });\r\n const selectedSlots: string[] = [];\r\n section.SelectedFields.forEach(field => {\r\n if (field.SpecialFieldID > 0) {\r\n const spField = this.specialFields.find(o => o.Id == field.SpecialFieldID);\r\n if (spField && spField.DefinesRows) {\r\n switch (spField.FieldName) {\r\n case 'examProgressGrades': {\r\n selectedSlots.push('CW1,CW2,CW3,CW4,CW5,CW6,CW7,CW8,CW9,CW10');\r\n break;\r\n }\r\n case 'termGrades': {\r\n selectedSlots.push('T1,T2,T3,T4,T5,T6,T7,T8,T9,T10');\r\n break;\r\n }\r\n case 'gradingPeriodGrades': {\r\n selectedSlots.push('GP1,GP2,GP3,GP4,GP5,GP6,GP7,GP8,GP9,GP10');\r\n break;\r\n }\r\n case 'semesterGrades': {\r\n selectedSlots.push('S1,S2,S3,S4');\r\n break;\r\n }\r\n case 'yearEndGrades': {\r\n selectedSlots.push('CW1,CW2,CW3,CW4,CW5,CW6,CW7,CW8,CW9,CW10');\r\n break;\r\n }\r\n case 'finalScore': {\r\n selectedSlots.push('final');\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n parameters.push({ ParameterName: '@SelectedSlots', Value: selectedSlots.join() });\r\n }\r\n return parameters;\r\n }\r\n\r\n getV9AHSubGridParameters(section: CustomLayoutSection, rowIndex: number): SQLParameter[] {\r\n const parentData = this.sectionData.find(o => o.sectionId == section.ParentSectionID);\r\n const parameters: SQLParameter[] = [];\r\n if (parentData) {\r\n let lngStudentId = '-1';\r\n let lngSiteSubjectListId = '-1';\r\n let lngYearId = '-1';\r\n let lngDistrictSubjectId = '-1';\r\n let strSection = '';\r\n let colIndex = -1;\r\n colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'lngStudentId');\r\n if (colIndex >= 0) {\r\n lngStudentId = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@lngStudentId', Value: lngStudentId });\r\n\r\n colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'lngSiteSubjectListId');\r\n if (colIndex >= 0) {\r\n lngSiteSubjectListId = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@lngSiteSubjectListId', Value: lngSiteSubjectListId });\r\n\r\n colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'lngDistrictSubjectId');\r\n if (colIndex >= 0) {\r\n lngDistrictSubjectId = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@lngDistrictSubjectId', Value: lngDistrictSubjectId });\r\n\r\n colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'lngYearId');\r\n if (colIndex >= 0) {\r\n lngYearId = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@lngYearId', Value: lngYearId });\r\n\r\n const selectedSlots: string[] = [];\r\n section.SelectedFields.forEach(field => {\r\n selectedSlots.push(field.DQFieldID.toString());\r\n });\r\n parameters.push({ ParameterName: '@strSelectedFields', Value: selectedSlots.join() });\r\n\r\n colIndex = parentData.data.Columns.findIndex(o => o.FieldName == 'Section');\r\n if (colIndex >= 0) {\r\n strSection = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n parameters.push({ ParameterName: '@strSection', Value: strSection });\r\n }\r\n return parameters;\r\n }\r\n\r\n getSpecialColumns(section: CustomLayoutSection): string[] {\r\n const columns: string[] = [];\r\n section.SelectedFields.forEach(field => {\r\n if (field.SpecialFieldID > 0) {\r\n const spField = this.specialFields.find(o => o.Id == field.SpecialFieldID);\r\n if (spField && spField.DefinesColumns) {\r\n switch (spField.DisplayName) {\r\n // SP column names should match special field display name, but if they don't then you can make exceptions here\r\n // Example:\r\n // case 'Number Grade': {\r\n // columns.push('Numeric Grade');\r\n // break;\r\n // }\r\n default: {\r\n columns.push(spField.DisplayName);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return columns;\r\n }\r\n\r\n storeSectionData(sectionId: number, data: DataQueryResult) {\r\n let sd: CustomLayoutSectionDataContainer = this.sectionData.find(o => o.sectionId == sectionId);\r\n if (sd) {\r\n sd.data = data;\r\n } else {\r\n sd = { sectionId: sectionId, data: data, filters: [] };\r\n this.sectionData.push(sd);\r\n }\r\n }\r\n\r\n getStoredSectionData(sectionId: number, rowIndex: number = -1): DataQueryResult {\r\n const sd: CustomLayoutSectionDataContainer = this.sectionData.find(o => o.sectionId == sectionId);\r\n if (sd) {\r\n return sd.data;\r\n } else {\r\n return new DataQueryResult();\r\n }\r\n }\r\n\r\n getFilterValueFromParent(sectionId: number, rowIndex: number, fieldId: number): any {\r\n let val: any = null;\r\n const section = this.selectedLayout.Sections.find(o => o.Id == sectionId);\r\n if (section && section.ParentSectionID > 0) {\r\n const parentData = this.sectionData.find(o => o.sectionId == section.ParentSectionID);\r\n if (parentData) {\r\n const colIndex = parentData.data.Columns.findIndex(o => o.ID == fieldId);\r\n if (colIndex >= 0 && parentData.data && parentData.data.Data && parentData.data.Data[rowIndex]) {\r\n val = parentData.data.Data[rowIndex][colIndex];\r\n }\r\n }\r\n }\r\n return val;\r\n }\r\n\r\n getDefaultValueForFilter(field: DataQueryField): any {\r\n if (this.numericDataTypes.find(o => o.toLowerCase() == field.DataType.toLowerCase())) {\r\n return -1;\r\n } else if (this.textDataTypes.find(o => o.toLowerCase() == field.DataType.toLowerCase())) {\r\n return '';\r\n } else if (this.dateTimeDataTypes.find(o => o.toLowerCase() == field.DataType.toLowerCase())) {\r\n return new Date(-8640000000000000);\r\n } else if (field.DataType.toLowerCase() == 'bit') {\r\n return false;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n}\r\n\r\nexport interface ComponentMap {\r\n name: string;\r\n component: any;\r\n}\r\n\r\ninterface CustomLayoutSectionDataContainer {\r\n sectionId: number;\r\n data: DataQueryResult;\r\n filters: DataQueryField[];\r\n}\r\n\r\n\r\n","export class CustomLayoutField {\r\n Id: number;\r\n SectionID: number;\r\n DQFieldID: number;\r\n SpecialFieldID: number;\r\n AllowEdit: boolean;\r\n Order: number;\r\n Visible: boolean;\r\n RequiredForFilter: boolean;\r\n RequiredForDisplay: boolean;\r\n AlwaysIncludeInResults: boolean;\r\n SortByDefault: boolean;\r\n SortDirection: string;\r\n SortOrder: number;\r\n // v9\r\n CategoryId: number;\r\n}\r\n","
Warning
\r\n\r\n {{dialogTitle != '' ? dialogTitle : 'Changes have been made to the Layout but not saved.'}}\r\n\r\n\r\n \r\n\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-layout-unsaved-changes-dialog',\r\n templateUrl: './layout-unsaved-changes-dialog.component.html',\r\n styleUrls: ['./layout-unsaved-changes-dialog.component.css']\r\n})\r\nexport class LayoutUnsavedChangesDialogComponent implements OnInit {\r\n\r\n enableSave = true;\r\n confirmDialog = false;\r\n dialogTitle = \"\";\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n if (data) {\r\n this.enableSave = data.enableSave;\r\n this.confirmDialog = data.confirmDialog != undefined ? data.confirmDialog : false;\r\n this.dialogTitle = data.dialogTitle != undefined ? data.dialogTitle : \"\";\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n saveClick() {\r\n this.dialogRef.close('save');\r\n }\r\n\r\n SaveAsNewClick() {\r\n this.dialogRef.close('saveAsNew');\r\n }\r\n\r\n ContinueWithoutSaveClick() {\r\n this.dialogRef.close('continueWithoutSave');\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close('cancel');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {CustomLayoutField} from '../Models/custom-layout-field.model';\r\nimport {CustomLayoutsService} from '../custom-layouts.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n\r\n@Pipe({\r\n name: 'getFieldDisplayName'\r\n})\r\nexport class GetFieldDisplayNamePipe implements PipeTransform {\r\n constructor(private customLayoutService: CustomLayoutsService,\r\n private loginService: LoginService) {\r\n }\r\n\r\n transform(field: CustomLayoutField, args: any): any {\r\n let fieldName = '';\r\n if (field.DQFieldID > 0) {\r\n if (this.loginService.LoginSettings.V10) {\r\n const dqField = this.customLayoutService.dataQueryFields.find(f => f.ID == field.DQFieldID );\r\n if (dqField) {\r\n fieldName = dqField.DisplayName;\r\n }\r\n }\r\n else {\r\n const dqField = this.customLayoutService.dataQueryFields.find(f => f.ID == field.DQFieldID && f.CategoryID == field.CategoryId);\r\n if (dqField) {\r\n fieldName = dqField.DisplayName;\r\n }\r\n }\r\n }\r\n else if (field.SpecialFieldID > 0) {\r\n const sField = this.customLayoutService.specialFields.find(f => f.Id == field.SpecialFieldID);\r\n if (sField) {\r\n fieldName = sField.DisplayName;\r\n }\r\n }\r\n return fieldName;\r\n }\r\n\r\n}\r\n","
\r\n {{headerLabel}}\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{type.Name.replace(\"Academic History\",\"\")}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n Scope\r\n \r\n \r\n
\r\n \r\n Private\r\n \r\n
\r\n
\r\n \r\n Available to\r\n \r\n Selected Sites\r\n \r\n \r\n
\r\n
\r\n \r\n Available to District\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n {{section.Name}}\r\n \r\n \r\n Hide section\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{field | getFieldDisplayName: dqFieldsRetrieved}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
0 && field.SpecialFieldID != colBreakFieldId && !isSpecialFieldDraggable(field)\">\r\n
\r\n
\r\n {{field | getFieldDisplayName: dqFieldsRetrieved}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
0 || field.SpecialFieldID == colBreakFieldId || isSpecialFieldDraggable(field)) && getFieldDisplayName(field)\">\r\n
\r\n
\r\n
\r\n
\r\n {{field | getFieldDisplayName: dqFieldsRetrieved}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n Drag rows up and down to arrange them as columns on the grid.\r\n \r\n \r\n Drag rows up and down to arrange them. Use the Column Break to split fields into columns.\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n Available to\r\n \r\n Selected Sites\r\n \r\n \r\n","import { AfterViewInit, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';\r\nimport { CustomLayout } from '../Models/custom-layout.model';\r\nimport { CustomLayoutsService } from '../custom-layouts.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { CustomLayoutField } from '../Models/custom-layout-field.model';\r\nimport { CustomLayoutSection } from '../Models/custom-layout-section.model';\r\nimport { CustomLayoutType } from '../Models/custom-layout-type.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { System } from '../../../shared-components/System';\r\nimport { LayoutUnsavedChangesDialogComponent } from './layout-unsaved-changes-dialog/layout-unsaved-changes-dialog.component';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { Router } from '@angular/router';\r\nimport { SelectedSite } from '../../controls/selected-sites-dialog/selected-site';\r\nimport { SelectedSitesDialogComponent } from '../../controls/selected-sites-dialog/selected-sites-dialog.component';\r\nimport { ErrorList } from '../../controls/error-prompt/error-list.model';\r\nimport { YearService } from '../../year/year.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-layout-editor',\r\n templateUrl: './layout-editor.component.html',\r\n styleUrls: ['./layout-editor.component.css'],\r\n})\r\nexport class LayoutEditorComponent implements AfterViewInit, OnDestroy {\r\n\r\n operation: string;\r\n layout: CustomLayout = new CustomLayout();\r\n layoutType: CustomLayoutType;\r\n previousType: CustomLayoutType;\r\n selectedFields: CustomLayoutField[] = [];\r\n colBreakFieldId: number;\r\n userId: number;\r\n subscriptions: Subscription[] = [];\r\n unsavedChanges = false;\r\n unsavedFieldChanges = false;\r\n dqFieldsRetrieved = false;\r\n v10: boolean;\r\n layoutTypes: CustomLayoutType[] = [];\r\n isAcademicHistory: boolean;\r\n errors: ErrorList[] = [];\r\n headerLabel: string = '';\r\n duplicate: boolean = false;\r\n\r\n @ViewChild('rbgScopeRef', { read: ElementRef }) rbgScopeRef: ElementRef;\r\n @ViewChild('txtNameRef', { read: ElementRef, static: true }) txtNameRef: ElementRef;\r\n\r\n constructor(\r\n private customLayoutService: CustomLayoutsService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private sharedService: SharedService,\r\n private loginService: LoginService,\r\n private router: Router\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n this.isAcademicHistory = this.router.url.indexOf('academicHistory') > -1 || this.router.url.indexOf('registrationEnrollment') > -1;\r\n this.userId = this.userService.currentUser.Id;\r\n if (this.isAcademicHistory) {\r\n this.layoutTypes = this.customLayoutService.layoutTypes.filter(t => t.Name.indexOf('Academic History') > -1);\r\n }\r\n else {\r\n this.layoutTypes = this.customLayoutService.selectedLayoutType.Name != 'Special Services' ? this.customLayoutService.layoutTypes.filter(t => t.Name.indexOf('Academic History') == -1 && t.Name.indexOf('Special Services')) : this.customLayoutService.layoutTypes.filter(t => t.Name.indexOf('Academic History') == -1 && t.Name.indexOf('Behavior Quick Add') == -1);\r\n }\r\n\r\n this.layoutType = (this.operation == 'Add') ? this.layoutTypes.filter(t => t.Id == this.customLayoutService.selectedLayoutType.Id)[0] : this.layoutTypes.filter(t => t.Id == this.layout.LayoutTypeID)[0];\r\n if (this.operation == 'Add' && this.customLayoutService.selectedLayoutType.Name != 'Special Services') {\r\n this.headerLabel = (this.isAcademicHistory) ? 'Add New Academic History Layout' : 'Add New Behavior Quick Add Layout';\r\n } else if (this.operation == 'Add' && this.customLayoutService.selectedLayoutType.Name == 'Special Services') {\r\n this.headerLabel = 'Add New Special Services Layout';\r\n }\r\n else {\r\n this.headerLabel = 'Edit ' + this.layout.Name;\r\n }\r\n this.previousType = this.layoutType;\r\n this.setLayout(this.layout);\r\n if (this.customLayoutService.specialFields.length == 0) {\r\n this.subscriptions.push(this.customLayoutService.getSpecialFields().subscribe(fields => {\r\n this.customLayoutService.specialFields = fields;\r\n const colBreak = fields.find(f => f.ColumnBreak == true);\r\n if (colBreak) {\r\n this.colBreakFieldId = colBreak.Id;\r\n }\r\n }));\r\n }\r\n else {\r\n const colBreak = this.customLayoutService.specialFields.find(f => f.ColumnBreak == true);\r\n if (colBreak) {\r\n this.colBreakFieldId = colBreak.Id;\r\n }\r\n }\r\n if (this.customLayoutService.dataQueryFields.length == 0) {\r\n this.subscriptions.push(this.customLayoutService.getDataQueryFields((this.layoutType.Name.indexOf('Behavior Quick Add') > -1 ? 'Behavior' : '')).subscribe(fields => {\r\n this.customLayoutService.dataQueryFields = fields;\r\n this.dqFieldsRetrieved = true;\r\n }));\r\n }\r\n }\r\n\r\n setLayout(layout: CustomLayout) {\r\n if (this.operation == 'Edit' && layout && !layout.TylerDefault)\r\n this.layout = System.copyObject(layout, new CustomLayout());\r\n else if (!this.duplicate)\r\n this.setFieldsToDefault();\r\n\r\n this.layout.Sections.forEach(section => {\r\n this.checkRequiredFields(section);\r\n this.filterAvailableFields(section);\r\n this.reorderAvailableFields(section);\r\n this.checkColumnCounts(section);\r\n });\r\n }\r\n\r\n layoutTypeChanged() {\r\n if (this.unsavedFieldChanges) {\r\n const dRef = this.dialog.open(LayoutUnsavedChangesDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n enableSave: false,\r\n confirmDialog: true,\r\n dialogTitle: 'Changing the layout type will reset all field selections to their defaults. Do you want to continue?'\r\n }\r\n });\r\n this.subscriptions.push(dRef.afterClosed().subscribe(result => {\r\n switch (result) {\r\n case 'continueWithoutSave': {\r\n this.layout.LayoutTypeID = this.layoutType.Id;\r\n const defaultLayout = this.customLayoutService.savedLayouts.find(o => o.LayoutTypeID == this.layoutType.Id && o.TylerDefault);\r\n this.layout.Sections = System.copyObject(defaultLayout, new CustomLayout()).Sections;\r\n this.previousType = this.layoutType;\r\n break;\r\n }\r\n case 'cancel': {\r\n this.layoutType = this.previousType;\r\n break;\r\n }\r\n default: {\r\n this.layoutType = this.previousType;\r\n break;\r\n }\r\n }\r\n }));\r\n }\r\n else {\r\n this.layout.LayoutTypeID = this.layoutType.Id;\r\n const defaultLayout = this.customLayoutService.savedLayouts.find(o => o.LayoutTypeID == this.layoutType.Id && o.TylerDefault);\r\n this.layout.Sections = System.copyObject(defaultLayout, new CustomLayout()).Sections;\r\n this.previousType = this.layoutType;\r\n }\r\n }\r\n\r\n\r\n getFieldDisplayName(field: CustomLayoutField) {\r\n if (!this.v10) {\r\n let fieldName = '';\r\n if (field.DQFieldID > 0) {\r\n if (this.loginService.LoginSettings.V10) {\r\n const dqField = this.customLayoutService.dataQueryFields.find(f => f.ID == field.DQFieldID);\r\n if (dqField) {\r\n fieldName = dqField.DisplayName;\r\n }\r\n }\r\n else {\r\n const dqField = this.customLayoutService.dataQueryFields.find(f => f.ID == field.DQFieldID && f.CategoryID == field.CategoryId);\r\n if (dqField) {\r\n fieldName = dqField.DisplayName;\r\n }\r\n }\r\n }\r\n else if (field.SpecialFieldID > 0) {\r\n const sField = this.customLayoutService.specialFields.find(f => f.Id == field.SpecialFieldID);\r\n if (sField) {\r\n fieldName = sField.DisplayName;\r\n }\r\n }\r\n return (fieldName == 'Year End Date' || fieldName == 'Year Start Date') ? false : true;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n checkRequiredFields(section: CustomLayoutSection) {\r\n section.AvailableFields.forEach(field => {\r\n if (field.RequiredForDisplay && section.SelectedFields.find(o => o.Id == field.Id) == null) {\r\n section.SelectedFields.push(field);\r\n }\r\n });\r\n }\r\n\r\n filterAvailableFields(section: CustomLayoutSection) {\r\n section.SelectedFields.forEach(field => {\r\n let index = -1;\r\n if (field.DQFieldID > 0) {\r\n index = section.AvailableFields.findIndex(f => f.DQFieldID == field.DQFieldID);\r\n }\r\n else if (field.SpecialFieldID > 0) {\r\n index = section.AvailableFields.findIndex(f => f.SpecialFieldID == field.SpecialFieldID);\r\n }\r\n if (index >= 0) {\r\n section.AvailableFields.splice(index, 1);\r\n }\r\n });\r\n }\r\n\r\n addField(section: CustomLayoutSection, index: number) {\r\n this.unsavedFieldChanges = true;\r\n section.SelectedFields.push(this.selectedFields[index]);\r\n let i = -1;\r\n if (this.selectedFields[index].DQFieldID > 0) {\r\n i = section.AvailableFields.findIndex(f => f.DQFieldID == this.selectedFields[index].DQFieldID);\r\n }\r\n else if (this.selectedFields[index].SpecialFieldID > 0) {\r\n i = section.AvailableFields.findIndex(f => f.SpecialFieldID == this.selectedFields[index].SpecialFieldID);\r\n }\r\n if (i >= 0) {\r\n section.AvailableFields.splice(i, 1);\r\n }\r\n this.selectedFields[index] = null;\r\n this.setFieldOrder(section);\r\n }\r\n\r\n drop(event: CdkDragDrop, section: CustomLayoutSection) {\r\n this.unsavedFieldChanges = true;\r\n moveItemInArray(section.SelectedFields, event.previousIndex, event.currentIndex);\r\n this.setFieldOrder(section);\r\n }\r\n\r\n setFieldOrder(section: CustomLayoutSection) {\r\n for (let i = 0; i < section.SelectedFields.length; i++) {\r\n section.SelectedFields[i].Order = i + 1;\r\n }\r\n }\r\n\r\n removeItemClick(section: CustomLayoutSection, index: number) {\r\n this.unsavedFieldChanges = true;\r\n const field = section.SelectedFields[index];\r\n section.AvailableFields.push(field);\r\n section.SelectedFields.splice(index, 1);\r\n this.reorderAvailableFields(section);\r\n this.setFieldOrder(section);\r\n }\r\n\r\n reorderAvailableFields(section: CustomLayoutSection) {\r\n section.AvailableFields.sort((a: CustomLayoutField, b: CustomLayoutField): number => {\r\n let aName = '';\r\n let bName = '';\r\n let comparison = 0;\r\n\r\n if (a.DQFieldID > 0) {\r\n const aField = this.customLayoutService.dataQueryFields.find(f => f.ID == a.DQFieldID);\r\n if (aField) {\r\n aName = aField.DisplayName;\r\n }\r\n }\r\n else if (a.SpecialFieldID > 0) {\r\n const aField = this.customLayoutService.specialFields.find(f => f.Id == a.SpecialFieldID);\r\n if (aField) {\r\n aName = aField.DisplayName;\r\n }\r\n }\r\n\r\n if (b.DQFieldID > 0) {\r\n const bField = this.customLayoutService.dataQueryFields.find(f => f.ID == b.DQFieldID);\r\n if (bField) {\r\n bName = bField.DisplayName;\r\n }\r\n }\r\n else if (b.SpecialFieldID > 0) {\r\n const bField = this.customLayoutService.specialFields.find(f => f.Id == b.SpecialFieldID);\r\n if (bField) {\r\n bName = bField.DisplayName;\r\n }\r\n }\r\n\r\n if (aName > bName) {\r\n comparison = 1;\r\n }\r\n else if (aName < bName) {\r\n comparison = -1;\r\n }\r\n\r\n return comparison;\r\n });\r\n }\r\n\r\n checkColumnCounts(section: CustomLayoutSection) {\r\n const requiredColumnCount = section.Columns;\r\n const columnField = this.customLayoutService.specialFields.find(f => f.ColumnBreak == true);\r\n if (columnField) {\r\n let cf = section.AvailableFields.find(o => o.SpecialFieldID == columnField.Id);\r\n if (cf == null) {\r\n cf = section.SelectedFields.find(o => o.SpecialFieldID == columnField.Id);\r\n }\r\n if (cf == null) {\r\n cf = new CustomLayoutField();\r\n cf.SectionID = section.Id;\r\n cf.SpecialFieldID = columnField.Id;\r\n cf.AllowEdit = false;\r\n }\r\n\r\n const actualColumnnCount = section.SelectedFields.filter(f => f.SpecialFieldID == columnField.Id).length + 1;\r\n if (requiredColumnCount > actualColumnnCount) {\r\n for (let i = 0; i < requiredColumnCount - actualColumnnCount; i++) {\r\n section.SelectedFields.push(cf);\r\n }\r\n }\r\n else if (requiredColumnCount < actualColumnnCount) {\r\n let colsToRemove = actualColumnnCount - requiredColumnCount;\r\n for (let i = section.SelectedFields.length - 1; i >= 0; i--) {\r\n if (colsToRemove > 0) {\r\n if (section.SelectedFields[i].SpecialFieldID == columnField.Id) {\r\n section.SelectedFields.splice(i, 1);\r\n colsToRemove--;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n // const colBreakIndex = section.AvailableFields.findIndex(o => o.SpecialFieldID == columnField.Id);\r\n // if (colBreakIndex >= 0) {\r\n // section.AvailableFields.splice(colBreakIndex, 1);\r\n // }\r\n this.setFieldOrder(section);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n revertChangesClick() {\r\n this.unsavedFieldChanges = false;\r\n this.setLayout(this.customLayoutService.selectedLayout);\r\n }\r\n\r\n setFieldsToDefault() {\r\n const defaultLayout = this.customLayoutService.savedLayouts.find(o => o.LayoutTypeID == this.layoutType.Id && o.TylerDefault);\r\n this.layout = System.copyObject(defaultLayout, new CustomLayout());\r\n this.layout.Name = '';\r\n this.layout.Description = '';\r\n this.layout.Id = null;\r\n this.layout.TylerDefault = false;\r\n this.layout.Owner = this.userService.currentUser.Id;\r\n }\r\n\r\n saveClick(close: boolean) {\r\n if (this.validate()) {\r\n this.customLayoutService.saveLayout(this.layout).subscribe(result => {\r\n if (result && result.Id > 0) {\r\n this.sharedService.showGoodSnackbar();\r\n this.unsavedChanges = false;\r\n\r\n if (close) {\r\n this.customLayoutService.getLayoutsByType(this.customLayoutService.selectedLayoutType.Id, this.yearService.defaultYear.Id, this.customLayoutService.selectedLayoutType.Name != 'Special Services' ? true : false).subscribe((layouts) => {\r\n if (this.customLayoutService.selectedLayoutType.Id != this.layoutType.Id)\r\n this.customLayoutService.selectedLayoutType = this.customLayoutService.layoutTypes.filter(t => t.Id == this.layoutType.Id)[0];\r\n this.customLayoutService.savedLayouts = layouts;\r\n this.customLayoutService.selectedLayout = result;\r\n this.dialogRef.close();\r\n });\r\n }\r\n else\r\n this.sharedService.showBadSnackbar();\r\n }\r\n });\r\n }\r\n }\r\n\r\n validate(): boolean {\r\n this.errors = [];\r\n let existingLayout = this.customLayoutService.savedLayouts.filter(f => f.Name == this.layout.Name && f.Id != this.layout.Id)[0];\r\n if (this.layout.Scope == 'Selected Sites' && !this.layout.SelectedSites) {\r\n this.errors.push({\r\n fieldRef: this.rbgScopeRef,\r\n fieldName: 'Scope',\r\n errorMsg: 'No Sites Selected.'\r\n });\r\n }\r\n if (!this.layout.Name) {\r\n this.errors.push({\r\n fieldRef: this.txtNameRef,\r\n fieldName: 'Name',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n else if (existingLayout) {\r\n this.errors.push({\r\n fieldRef: this.txtNameRef,\r\n fieldName: 'Name',\r\n errorMsg: 'A layout with that name already exists.'\r\n });\r\n }\r\n return this.errors.length == 0;\r\n }\r\n\r\n layoutNameChanged() {\r\n this.unsavedChanges = true;\r\n }\r\n\r\n selectedSitesClick() {\r\n let selectedSitesString = this.layout.SelectedSites;\r\n if (!selectedSitesString) {\r\n selectedSitesString = '';\r\n }\r\n const selectedSites: SelectedSite[] = [];\r\n selectedSitesString.split(',').forEach(siteIdString => {\r\n const siteId = Number(siteIdString.trim());\r\n if (!isNaN(siteId)) {\r\n const ss = new SelectedSite();\r\n ss.Id = siteId;\r\n selectedSites.push(ss);\r\n }\r\n });\r\n const selectedSitesDialogBox = this.dialog.open(SelectedSitesDialogComponent, {\r\n disableClose: true,\r\n width: '700px',\r\n data: {\r\n selectedSites: selectedSites\r\n }\r\n });\r\n selectedSitesDialogBox.afterClosed().subscribe((results: SelectedSite[]) => {\r\n if (results) {\r\n this.layout.SelectedSites = results.map(o => o.Id).join(', ');\r\n }\r\n });\r\n }\r\n\r\n isSpecialFieldDraggable(field: CustomLayoutField): boolean {\r\n const specialField = this.customLayoutService.specialFields.find(o => o.Id == field.SpecialFieldID);\r\n return (!specialField || specialField.DefinesColumns || specialField.IsSection);\r\n }\r\n\r\n hideSectionChange(section: CustomLayoutSection) {\r\n this.hideChildSections(section, section.Hidden);\r\n }\r\n\r\n hideChildSections(section: CustomLayoutSection, hidden: boolean) {\r\n this.layout.Sections.forEach(s => {\r\n if (s.ParentSectionID == section.Id) {\r\n s.Hidden = hidden;\r\n s.ParentSectionIsHidden = hidden;\r\n this.hideChildSections(s, hidden);\r\n }\r\n });\r\n }\r\n\r\n hideDisableCheck(section: string): boolean {\r\n let disableHide: string[] = ['Event/Incident', ''];\r\n return disableHide.findIndex(x => x == section) != -1;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n}","
\r\n {{isAcademicHistory ? 'Academic History' : 'Saved'}} Layouts\r\n
\r\n\r\n\r\n \r\n No Layouts Exist\r\n \r\n 0\">\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Name\r\n \r\n \r\n {{element.Name}}\r\n \r\n \r\n\r\n \r\n \r\n Scope\r\n \r\n \r\n {{element.Scope}}\r\n \r\n \r\n\r\n \r\n \r\n Owner\r\n \r\n \r\n {{element.OwnerName}}\r\n \r\n \r\n\r\n \r\n \r\n Last Update\r\n \r\n \r\n {{element.LastUpOn | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Description\r\n {{element.Description}}\r\n \r\n \r\n\r\n \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, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { CustomLayoutsService } from '../custom-layouts.service';\r\nimport { CustomLayout } from '../Models/custom-layout.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { Router } from '@angular/router';\r\nimport { LayoutEditorComponent } from '../layout-editor/layout-editor.component';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-saved-layouts-dialog',\r\n templateUrl: './saved-layouts-dialog.component.html',\r\n styleUrls: ['./saved-layouts-dialog.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class SavedLayoutsDialogComponent implements OnInit {\r\n\r\n layouts: CustomLayout[];\r\n columnsToDisplay = ['More', 'Name', 'Scope', 'OwnerName', 'LastUpOn', 'Actions'];\r\n dataSource = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n errors: ErrorList[] = [];\r\n userId: number;\r\n initialized = false;\r\n isAcademicHistory: boolean;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private customLayoutService: CustomLayoutsService,\r\n private yearService: YearService,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private router: Router\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.isAcademicHistory = this.router.url.indexOf('academicHistory') > -1 || this.router.url.indexOf('registrationEnrollment') > -1;\r\n this.userId = this.userService.currentUser.Id;\r\n this.getLayouts();\r\n this.customLayoutService.observableSavedLayoutsStream$.subscribe((layouts) => {\r\n this.layouts = layouts;\r\n this.getLayouts();\r\n });\r\n }\r\n\r\n getLayouts() {\r\n if (this.customLayoutService.savedLayouts) {\r\n this.layouts = this.customLayoutService.savedLayouts;\r\n this.setLayoutSource();\r\n }\r\n if (!this.customLayoutService.savedLayouts) {\r\n this.customLayoutService.getLayoutsByType(this.customLayoutService.selectedLayoutType.Id, this.yearService.defaultYear.Id, this.isAcademicHistory).subscribe(results => {\r\n this.customLayoutService.savedLayouts = results;\r\n this.layouts = results;\r\n this.setLayoutSource();\r\n });\r\n }\r\n }\r\n\r\n setLayoutSource() {\r\n this.initialized = true;\r\n this.dataSource.data = this.layouts.filter(l => l.TylerDefault == false);\r\n setTimeout(() => {\r\n this.dataSource.sort = this.sort;\r\n }, 0);\r\n }\r\n\r\n addLayoutClick() {\r\n let layoutsDialog = this.dialog.open(LayoutEditorComponent, { height: '80vh', minWidth: '1000px', disableClose: true });\r\n layoutsDialog.componentInstance.operation = 'Add';\r\n }\r\n\r\n editClick(layout: CustomLayout) {\r\n let layoutsDialog = this.dialog.open(LayoutEditorComponent, { height: '80vh', minWidth: '1000px', disableClose: true });\r\n layoutsDialog.componentInstance.operation = 'Edit';\r\n layoutsDialog.componentInstance.layout = layout;\r\n }\r\n\r\n duplicateClick(layout: CustomLayout) {\r\n let layoutsDialog = this.dialog.open(LayoutEditorComponent, { height: '80vh', minWidth: '1000px', disableClose: true });\r\n layoutsDialog.componentInstance.duplicate = true;\r\n layoutsDialog.componentInstance.operation = 'Add';\r\n layoutsDialog.componentInstance.layout = _.cloneDeep(layout);\r\n layoutsDialog.componentInstance.layout.Id = 0;\r\n }\r\n\r\n deleteClick(layout: CustomLayout) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Layout';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this layout?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.customLayoutService.deleteLayout(layout.Id).subscribe(result => {\r\n if (result.toLowerCase() != 'success') {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: result\r\n });\r\n }\r\n else {\r\n this.customLayoutService.getLayoutsByType(this.customLayoutService.selectedLayoutType.Id, this.yearService.defaultYear.Id, this.customLayoutService.selectedLayoutType.Name != 'Special Services' ? true : false).subscribe((layouts) => {\r\n this.customLayoutService.savedLayouts = layouts;\r\n });\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n selectLayout(layout: CustomLayout) {\r\n this.dialogRef.close(layout);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.dataSource.expandAll(expand);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","import { System } from './../../shared-components/System';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomPage } from './models/custom-page.model';\r\nimport { CustomField } from './models/custom-field.model';\r\n\r\n\r\n@Injectable()\r\nexport class CustomPageService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n public getCustomPage(dataModuleName: string, id: number, idFieldName: string, aYIdentifier: string): Observable {\r\n let queryString = '';\r\n queryString += '?dataModuleName=' + dataModuleName;\r\n queryString += '&id=' + id;\r\n queryString += '&idFieldName=' + idFieldName;\r\n queryString += '&aYIdentifier=' + aYIdentifier;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetCustomPage' + queryString);\r\n }\r\n\r\n public saveFieldValues(fields: CustomField[], dataModuleName: string, id: number, idFieldName: string): Observable {\r\n let queryString = '';\r\n queryString += '?dataModuleName=' + dataModuleName;\r\n queryString += '&id=' + id;\r\n queryString += '&idFieldName=' + idFieldName;\r\n\r\n return this.http.post(System.apiURL.Student + 'SaveFieldValues' + queryString, fields);\r\n }\r\n\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[aria]'\r\n})\r\nexport class AriaDirective {\r\n\r\n static concatAriaStrings(colList:string[], dataList:string[]){\r\n let rowConcat:string = '';\r\n\r\n if(colList.length == dataList.length){\r\n for(var i = 0; i < colList.length; i++){\r\n rowConcat += colList[i] +' ' + (dataList[i] != null ? dataList[i] : '') + '. ';\r\n }\r\n }\r\n\r\n return rowConcat;\r\n } \r\n\r\n}\r\n","import { Directive, ElementRef, Renderer2, HostListener, Input, OnInit } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[debounce]',\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: DebounceDirective,\r\n multi: true,\r\n }],\r\n})\r\nexport class DebounceDirective implements ControlValueAccessor, OnInit {\r\n\r\n onChange: Function;\r\n onTouched: Function;\r\n\r\n @Input('debounce') debounceTime: number;\r\n\r\n private _timer: any = null;\r\n\r\n constructor(\r\n private _elementRef: ElementRef,\r\n private _renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (typeof this.debounceTime !== 'number') {\r\n // default debounce to 300ms\r\n this.debounceTime = 300;\r\n }\r\n }\r\n\r\n @HostListener('input', ['$event.target.value'])\r\n input(value: string) {\r\n this.onChange(value);\r\n }\r\n\r\n writeValue(value: string) {\r\n const element = this._elementRef.nativeElement;\r\n this._renderer.setProperty(element, 'value', value);\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.onChange = this._debounce(fn);\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = this._debounce(fn);\r\n }\r\n\r\n // private\r\n private _debounce(fn: Function) {\r\n return (...args: any[]) => {\r\n if (this._timer) {\r\n clearTimeout(this._timer);\r\n }\r\n this._timer = setTimeout(() => {\r\n fn(...args);\r\n this._timer = null;\r\n }, this.debounceTime);\r\n };\r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appDecimalFormatValidator]'\r\n})\r\nexport class DecimalFormatValidatorDirective {\r\n\r\n private regex: RegExp = new RegExp(/^\\d*\\.?\\d{0,3}$/g);\r\n private negativeRegex: RegExp = new RegExp(/^[-]?\\d*\\.?\\d{0,3}$/g);\r\n private specialKeys: Array = ['Backspace', 'Tab', 'End', 'Home', 'Delete', 'ArrowLeft', 'ArrowRight'];\r\n @Input() allowNegativeValue: boolean;\r\n @Input() maxValue: number;\r\n\r\n constructor(\r\n private elementRef: ElementRef\r\n ) { }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n\r\n // Allow Backspace, tab, end, and home, delete, ArrowLeft, ArrowRight keys\r\n if (this.specialKeys.indexOf(event.key) !== -1 && (this.maxValue == null || (event.key != 'Delete' && event.key != 'Backspace'))) {\r\n return;\r\n }\r\n\r\n let next = '';\r\n const element = this.elementRef.nativeElement;\r\n const current = element.value;\r\n let selectionStart: number = element.selectionStart != null ? element.selectionStart : 0;\r\n let selectionEnd: number = element.selectionEnd != null ? element.selectionEnd : 0;\r\n const eventKeyValue = event.key != 'Delete' && event.key != 'Backspace' ? event.key : '';\r\n\r\n if (selectionStart == selectionEnd) {\r\n if (event.key == 'Delete' && selectionStart != current.length - 1) {\r\n selectionEnd = selectionEnd + 1;\r\n }\r\n else if (event.key == 'Backspace' && selectionStart != 0) {\r\n selectionStart = selectionStart - 1;\r\n }\r\n }\r\n\r\n if (selectionStart != selectionEnd) {\r\n next = current.replace(current.substring(selectionStart, selectionEnd), eventKeyValue);\r\n }\r\n else if (selectionStart == 0) {\r\n next = eventKeyValue.concat(current);\r\n }\r\n else if (selectionStart != current.length - 1) {\r\n next = current.substring(0, selectionStart) + eventKeyValue + current.substring(selectionStart);\r\n }\r\n else {\r\n next = current.concat(eventKeyValue);\r\n }\r\n\r\n if (this.allowNegativeValue == true) {\r\n if (next && !String(next).match(this.negativeRegex)) {\r\n event.preventDefault();\r\n }\r\n }\r\n else {\r\n if (next && !String(next).match(this.regex)) {\r\n event.preventDefault();\r\n }\r\n else if (this.maxValue != null && parseFloat(next) > this.maxValue) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n}\r\n","import {AfterViewChecked, Directive, ElementRef} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[ExternalLink]'\r\n})\r\nexport class ExternalLinkDirective implements AfterViewChecked {\r\n\r\n constructor(private el: ElementRef) { }\r\n\r\n ngAfterViewChecked() {\r\n Array.from(this.el.nativeElement.querySelectorAll('a'))\r\n .forEach((el: any) => {\r\n el.setAttribute('target', '_blank');\r\n });\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\r\nimport KeyDownEvent = JQuery.KeyDownEvent;\r\n\r\n@Directive({\r\n selector: '[maxPrecision]'\r\n})\r\nexport class MaxPrecisionDirective {\r\n\r\n // Properties\r\n @Input() maxPrecision: number;\r\n\r\n private allowedKeys: Array = [ 'Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Control', 'Delete', 'Enter', 'NumLock' ];\r\n private disallowedKeys: Array = ['Space'];\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', [ '$event' ])\r\n onKeyDown(event: KeyDownEvent) {\r\n\r\n // Allow Backspace, end, and home keys\r\n if (this.allowedKeys.includes(event.key)) {\r\n return;\r\n }\r\n\r\n // Don't allow tab or space\r\n if (this.disallowedKeys.includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n\r\n // Obtaining the new value\r\n let current: string = this.el.nativeElement.value;\r\n if (!current) {\r\n current = '';\r\n }\r\n const indexStart = event.target.selectionStart;\r\n const indexEnd = event.target.selectionEnd;\r\n const key = event.key;\r\n const next: string = current.slice(0, indexStart) + key + current.slice(indexEnd + Math.abs(0));\r\n const nextNumber: number = Number(next);\r\n\r\n // Obtaining the precision\r\n const precision = next.includes('.') ? next.length - next.indexOf('.') - 1 : -1;\r\n\r\n // Checking the new value\r\n if (\r\n precision <= this.maxPrecision\r\n && !isNaN(nextNumber)\r\n ) {\r\n return;\r\n }\r\n\r\n // Preventing if we haven't allowed it yet\r\n event.preventDefault();\r\n return;\r\n }\r\n}\r\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\r\nimport KeyDownEvent = JQuery.KeyDownEvent;\r\n\r\n@Directive({\r\n selector: '[maximumEnforce]'\r\n})\r\nexport class MaximumEnforceDirective {\r\n\r\n // Properties\r\n @Input() allowDecimal = false;\r\n @Input() maximumEnforce: number;\r\n\r\n private allowedKeys: Array = [\r\n 'Backspace',\r\n 'End',\r\n 'Home',\r\n 'ArrowRight',\r\n 'ArrowLeft',\r\n 'Tab',\r\n 'Delete'\r\n ];\r\n private disallowedKeys: Array = [' '];\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', [ '$event' ])\r\n onKeyDown(event: KeyDownEvent) {\r\n\r\n // Allow some characters without doing anything\r\n if (this.allowedKeys.includes(event.key) || !this.maximumEnforce) {\r\n return;\r\n }\r\n\r\n // Don't allow certain characters at all\r\n if (this.disallowedKeys.includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n\r\n // Obtaining the new value\r\n let current: string = this.el.nativeElement.value;\r\n const indexStart = event.target.selectionStart;\r\n const indexEnd = event.target.selectionEnd;\r\n const key = event.key;\r\n const next: string = current.slice(0, indexStart) + key + current.slice(indexEnd + Math.abs(0));\r\n const nextNumber = Number(next);\r\n\r\n // If we just have a hyphen, that's allowed because of negatives\r\n if (next == '-') {\r\n return;\r\n }\r\n\r\n // If we have just a decimal and we allove decimals, let that be\r\n if (next == '.' && this.allowDecimal) {\r\n return;\r\n }\r\n\r\n // Checking the new value\r\n if (next\r\n && (this.allowDecimal || !next.includes('.'))\r\n && !isNaN(nextNumber)\r\n && parseFloat(next) <= this.maximumEnforce\r\n ) {\r\n return;\r\n }\r\n\r\n // Preventing if we haven't allowed it yet\r\n event.preventDefault();\r\n return;\r\n }\r\n}\r\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\r\nimport KeyDownEvent = JQuery.KeyDownEvent;\r\n\r\n@Directive({\r\n selector: '[minimumEnforce]'\r\n})\r\nexport class MinimumEnforceDirective {\r\n\r\n // Properties\r\n @Input() allowDecimal = false;\r\n @Input() minimumEnforce: number;\r\n @Input() maximumEnforce: number;\r\n\r\n private allowedKeys: Array = [ \r\n 'Backspace', \r\n 'End', \r\n 'Home',\r\n 'ArrowRight',\r\n 'ArrowLeft',\r\n 'Tab',\r\n 'Delete'\r\n ];\r\n private disallowedKeys: Array = [' '];\r\n private numberOfCharacters\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostListener('keydown', [ '$event' ])\r\n onKeyDown(event: KeyDownEvent) {\r\n if (this.minimumEnforce) {\r\n const minimumEnforceString = this.minimumEnforce.toString();\r\n const maximumEnforceString = this.maximumEnforce.toString();\r\n \r\n // If the number of characters is not supplied, assume it is equal to the minimum enforce\r\n if (!this.maximumEnforce) {\r\n this.numberOfCharacters = minimumEnforceString.length;\r\n } else {\r\n if (maximumEnforceString.includes('.')) {\r\n this.numberOfCharacters = maximumEnforceString.slice(0, maximumEnforceString.indexOf('.')).length;\r\n } else {\r\n this.numberOfCharacters = maximumEnforceString.length;\r\n }\r\n }\r\n \r\n // If the number of characters is greater than the minimum enforced value,\r\n if (this.numberOfCharacters > minimumEnforceString.length) {\r\n return;\r\n }\r\n \r\n // Allow some characters without doing anything\r\n if (this.allowedKeys.includes(event.key)) {\r\n return;\r\n }\r\n \r\n // Don't allow certain characters at all\r\n if (this.disallowedKeys.includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n \r\n // Obtaining the new value\r\n let current: string = this.el.nativeElement.value;\r\n const indexStart = event.target.selectionStart;\r\n const indexEnd = event.target.selectionEnd;\r\n const key = event.key;\r\n let next: string = current.slice(0, indexStart) + key + current.slice(indexEnd + Math.abs(0));\r\n let nextNumber: number = Number(next);\r\n\r\n // If we just have a hyphen, that's allowed because of negatives\r\n if (next == '-') {\r\n return;\r\n }\r\n\r\n // If we have just a decimal and we allove decimals, let that be\r\n if (next == '.' && this.allowDecimal) {\r\n return;\r\n }\r\n \r\n // If we're allowing a decimal, we need to truncate it to the number of positions we have\r\n next = nextNumber.toString(); // This is weird, but it trims all leading 0s\r\n let checkValue = this.minimumEnforce;\r\n let checkValueString = checkValue.toString();\r\n const checkDecimalIndex = checkValue.toString().indexOf('.');\r\n if (this.allowDecimal && checkDecimalIndex >= 0) {\r\n const nextDecimalIndex = next.indexOf('.');\r\n if (nextDecimalIndex >= 0) {\r\n const nextPrecision = next.length - nextDecimalIndex - 1;\r\n if (nextPrecision > 0) {\r\n checkValueString = checkValueString.slice(0, checkDecimalIndex) + checkValueString.slice(checkDecimalIndex, checkDecimalIndex + nextPrecision + 1);\r\n checkValue = Number.parseFloat(checkValueString);\r\n } else {\r\n checkValue = Math.floor(checkValue);\r\n }\r\n } else {\r\n checkValue = Math.floor(checkValue);\r\n }\r\n }\r\n \r\n // If the next value has less length than the minimum enforce, we need to pad with the minimum value\r\n // NOTE: we can only do this with positive numbers. Negative numbers can't support lookahead.\r\n if (!next.includes('.') && this.minimumEnforce > 0 && next.length < minimumEnforceString.length) {\r\n let newValueString = next;\r\n for (let i = next.length; i < minimumEnforceString.length; i++) {\r\n newValueString += minimumEnforceString[i];\r\n }\r\n nextNumber = Number.parseFloat(newValueString);\r\n }\r\n \r\n // Checking the new value\r\n if (\r\n (this.allowDecimal || !next.includes('.'))\r\n && !isNaN(nextNumber)\r\n && nextNumber >= checkValue\r\n ) {\r\n return;\r\n }\r\n \r\n // Preventing if we haven't allowed it yet\r\n event.preventDefault();\r\n return;\r\n }\r\n }\r\n}\r\n","import createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport { Directive, ElementRef, EventEmitter, forwardRef, HostListener, Inject, Input, OnChanges, Optional, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { COMPOSITION_BUFFER_MODE, ControlValueAccessor, NgModel, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MaskedInputDirective, TextMaskConfig } from 'angular2-text-mask';\r\nimport KeyDownEvent = JQuery.KeyDownEvent;\r\n\r\n@Directive({\r\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\r\n // NOTE: we have to do it this way because of MaskedInputDirective\r\n host: {\r\n '(input)': 'handleInput($event.target.value)',\r\n '(focus)': 'onFocus()',\r\n '(blur)': 'onBlur()',\r\n '(compositionstart)': '_compositionStart()',\r\n '(compositionend)': '_compositionEnd($event.target.value)'\r\n },\r\n selector: '[ngModel][numberMask]',\r\n exportAs: 'numberMask',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NumberMaskDirective),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class NumberMaskDirective extends MaskedInputDirective implements ControlValueAccessor, OnChanges {\r\n\r\n // Interface Properties\r\n @Input() numberMask: string;\r\n @Input() prefix: string;\r\n @Input() formatWhileTyping = false;\r\n @Input() allowLeadingZeroes = true;\r\n @Input() allowNegativeNumbers = false;\r\n @Input() allowOverriding = true;\r\n @Output() numberValue = new EventEmitter();\r\n\r\n // Local Properties\r\n boundaries = {\r\n minimumIntegers: 1,\r\n maximumIntegers: -1,\r\n minimumDecimals: 0,\r\n maximumDecimals: -1\r\n }\r\n focused = false;\r\n\r\n // Constructor\r\n constructor(\r\n private el: ElementRef,\r\n _renderer: Renderer2,\r\n @Optional() @Inject(COMPOSITION_BUFFER_MODE) _compositionMode: boolean\r\n ) {\r\n super(_renderer, el, _compositionMode);\r\n }\r\n\r\n // Event Functions\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n // Extracting the relevant information\r\n const minIntegersMatch = this.numberMask.match(/^\\d+[.-]/);\r\n if (minIntegersMatch && minIntegersMatch.length > 0) {\r\n this.boundaries.minimumIntegers = Number.parseInt(minIntegersMatch[0].slice(0, minIntegersMatch[0].length - 1), 10);\r\n }\r\n const maxIntegersMatch = this.numberMask.match(/-\\d+[.-]/);\r\n if (maxIntegersMatch && maxIntegersMatch.length > 0) {\r\n this.boundaries.maximumIntegers = Number.parseInt(maxIntegersMatch[0].slice(1, maxIntegersMatch[0].length - 1), 10);\r\n }\r\n const minDecimalMatch = this.numberMask.match(/\\.\\d+/);\r\n if (minDecimalMatch && minDecimalMatch.length > 0) {\r\n this.boundaries.minimumDecimals = Number.parseInt(minDecimalMatch[0].slice(1, minDecimalMatch[0].length), 10);\r\n }\r\n const maxDecimalMatch = this.numberMask.match(/-\\d+$/);\r\n if (maxDecimalMatch && maxDecimalMatch.length > 0) {\r\n this.boundaries.maximumDecimals = Number.parseInt(maxDecimalMatch[0].slice(1, maxDecimalMatch[0].length), 10);\r\n }\r\n\r\n // Constructing our mask\r\n this.textMaskConfig = this.getNumberMaskConfig();\r\n super.ngOnChanges(changes);\r\n }\r\n\r\n onFocus() {\r\n this.focused = true;\r\n this.textMaskConfig = this.getNumberMaskConfig();\r\n this._setupMask(true);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyDownEvent) {\r\n\r\n // Prevents overrides if we don't allow them\r\n if (!this.allowOverriding) {\r\n\r\n // Obtaining the new value\r\n let current: string = this.el.nativeElement.value;\r\n const indexStart = event.target.selectionStart;\r\n const indexEnd = event.target.selectionEnd;\r\n const key = event.key;\r\n let next: string = current.slice(0, indexStart) + key + current.slice(indexEnd + Math.abs(0));\r\n\r\n // Checking if we're beyond the max\r\n const components = this.extractComponents(next);\r\n if (\r\n (this.boundaries.maximumIntegers >= 0 && components[0].length > this.boundaries.maximumIntegers)\r\n || (this.boundaries.maximumDecimals >= 0 && components[1].length > this.boundaries.maximumDecimals)\r\n ) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n handleInput(value: string) {\r\n\r\n // Pushing the new avlue\r\n this._handleInput(value);\r\n\r\n // Outputting the number value (not the masked value)\r\n const numberMatch = value.match(/^.*\\d+.?\\d*$/);\r\n if (numberMatch) {\r\n this.numberValue.emit(parseFloat(numberMatch[0]));\r\n } else {\r\n this.numberValue.emit(null);\r\n }\r\n }\r\n\r\n onBlur() {\r\n\r\n // Calling the onTouched handler from angular7 text mask\r\n this.onTouched();\r\n\r\n // Sets up the value to contain the right number of integers (specifically so it doesn't move the decimal)\r\n let value = this.el.nativeElement.value;\r\n const components = this.extractComponents(value);\r\n for (let i = components[0].length; i < this.boundaries.minimumIntegers; i++) {\r\n value = '0' + value;\r\n }\r\n\r\n // Writing the new value with our enforced mask\r\n this.focused = false;\r\n this.textMaskConfig = this.getNumberMaskConfig();\r\n this._setupMask(true);\r\n this.writeValue(value);\r\n }\r\n\r\n getNumberMaskConfig(): TextMaskConfig {\r\n // POST: sets up the text mask config for the directive\r\n\r\n // We enforce while we aren't typing OR if we're always enforcing\r\n if (\r\n (\r\n !this.focused\r\n || this.formatWhileTyping\r\n )\r\n && this.numberMask && this.numberMask.match(/\\d+(-\\d+)?(.\\d+(-\\d)?)?/)\r\n ) {\r\n\r\n // Constructing a mask function for dynamic scaling\r\n const maskFunction = (rawValue: string): Array => {\r\n\r\n // Extracting the components for mask construction\r\n const components = this.extractComponents(rawValue);\r\n\r\n // If the mask has prefixes, the use those\r\n const mask: Array = [];\r\n if (this.prefix) {\r\n for (let i = 0; i < this.prefix.length; i++) {\r\n mask.push(this.prefix[i]);\r\n }\r\n }\r\n\r\n // Constructing integer mask\r\n for (\r\n let i = 0;\r\n (\r\n (i < this.boundaries.minimumIntegers || i < components[0].length)\r\n && (this.boundaries.maximumIntegers < 0 || i < this.boundaries.maximumIntegers)\r\n );\r\n i++\r\n ) {\r\n mask.push(/\\d/);\r\n }\r\n\r\n // Decimal masks are constructed only if we can have decimals\r\n if (this.boundaries.maximumDecimals != 0) {\r\n\r\n // Adding in decimal\r\n // If there are two periods, we want to put the cursor past the period\r\n if (this.boundaries.minimumDecimals > 0 || rawValue.includes('.')) {\r\n if (rawValue.includes('..')) {\r\n mask.push('[]', '.', '[]');\r\n } else {\r\n mask.push('.', '[]');\r\n }\r\n }\r\n\r\n // Constructing masks decimals\r\n for (\r\n let i = 0;\r\n (\r\n (i < this.boundaries.minimumDecimals || i < components[1].length)\r\n && (this.boundaries.maximumDecimals < 0 || i < this.boundaries.maximumDecimals)\r\n );\r\n i++\r\n ) {\r\n mask.push(/\\d/);\r\n }\r\n }\r\n\r\n // If we allow negative numbers, we need to append a hyphen to our input when it is present\r\n if (this.allowNegativeNumbers && rawValue.includes('-')) {\r\n mask.unshift('-');\r\n }\r\n\r\n // Returning the mask\r\n return mask;\r\n };\r\n\r\n // Returning our standardized text mask\r\n return {\r\n guide: true,\r\n mask: maskFunction,\r\n placeholderChar:\r\n (\r\n this.el.nativeElement\r\n && (!this.el.nativeElement.value || parseInt(this.el.nativeElement.value, 10) != NaN)\r\n && (!this.el.nativeElement.value || this.el.nativeElement.value.toString() == '0')\r\n && this.boundaries.minimumIntegers <= 1\r\n && this.boundaries.minimumDecimals <= 0\r\n ) ? '_' : '0',\r\n showMask:\r\n (\r\n this.el.nativeElement\r\n && this.el.nativeElement.value != null\r\n && this.el.nativeElement.value != ''\r\n )\r\n };\r\n }\r\n\r\n // Usually, we don't want to enforce the minimums while we're typing\r\n else {\r\n return {\r\n guide: false,\r\n mask: (rawValue: string) => {\r\n\r\n // If we have two decimals, ignore the second one\r\n let maskedValue = rawValue;\r\n if (maskedValue.split('.').length > 2) {\r\n const lastDecimalIndex = maskedValue.lastIndexOf('.');\r\n maskedValue = maskedValue.slice(0, lastDecimalIndex) + maskedValue.slice(lastDecimalIndex + 1);\r\n }\r\n\r\n // Create the mask based on the adjusted value\r\n return createNumberMask({\r\n prefix: this.prefix ?? '',\r\n includeThousandsSeparator: false,\r\n integerLimit: this.boundaries.maximumIntegers >= 0 ? this.boundaries.maximumIntegers : null,\r\n decimalLimit: this.boundaries.maximumDecimals >= 0 ? this.boundaries.maximumDecimals : null,\r\n allowDecimal: this.boundaries.maximumDecimals != 0,\r\n allowLeadingZeroes: this.allowLeadingZeroes,\r\n allowNegative: this.allowNegativeNumbers\r\n })(maskedValue);\r\n }\r\n };\r\n }\r\n }\r\n\r\n extractComponents(value: string): string[] {\r\n // PRE: a value that is a number\r\n // POST: extracts the numeric components\r\n const numberRegexp = /\\d+/;\r\n let integerValue = '';\r\n const integerRegexp = /^[^\\.\\d]*\\d+\\.?/;\r\n const integerMatches = value.match(integerRegexp);\r\n if (integerMatches && integerMatches.length > 0) {\r\n integerValue = numberRegexp.exec(integerMatches[0])[0];\r\n }\r\n let decimalValue = '';\r\n const decimalRegexp = /\\.\\d+$/g;\r\n const decimalMatches = value.match(decimalRegexp);\r\n if (decimalMatches && decimalMatches.length > 0) {\r\n decimalValue = numberRegexp.exec(decimalMatches[0])[0];\r\n }\r\n return [integerValue, decimalValue];\r\n }\r\n}\r\n","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[numbers-only]'\r\n})\r\nexport class NumbersOnlyDirective {\r\n // Allow numbers only\r\n private regex: RegExp = new RegExp(/^[0-9]*$/g);\r\n private regexWithDecimal: RegExp = new RegExp(/^[0-9]\\d*(\\.\\d*)?$/g);\r\n @Input() allowDecimal = false;\r\n @Input() ignoreNumbersOnly = false;\r\n\r\n // Allow key codes for special events. Reflect :\r\n // Backspace, tab, end, home\r\n private specialKeys: Array = [ 'Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Control', 'Delete', 'Enter', 'NumLock' ];\r\n\r\n constructor(private el: ElementRef) {\r\n }\r\n\r\n @HostListener('keydown', [ '$event' ])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (!this.ignoreNumbersOnly) {\r\n\r\n // Allow Backspace, tab, end, and home keys\r\n if (this.specialKeys.indexOf(event.key) !== -1) {\r\n return;\r\n }\r\n\r\n // Do not use event.keycode this is deprecated.\r\n // See: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode\r\n const current: string = this.el.nativeElement.value;\r\n // We need this because the current value on the DOM element\r\n // is not yet updated with the value from this event\r\n const next: string = current.concat(event.key);\r\n let matches: RegExpMatchArray;\r\n if (this.allowDecimal) {\r\n matches = String(next).match(this.regexWithDecimal);\r\n }\r\n else {\r\n matches = String(next).match(this.regex);\r\n }\r\n if (\r\n next && !matches\r\n ) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n}\r\n","export class EFormAttachment {\r\n ID: number = null;\r\n Name = '';\r\n OriginalFileName = '';\r\n FileDataBase64 = '';\r\n FileType = '';\r\n MIMEType = '';\r\n FileExtension = '';\r\n AddedBy: number = null;\r\n AddedOn: Date = null;\r\n LastUpBy: number = null;\r\n LastUpOn: Date = null;\r\n DelStatus = false;\r\n }","export class EFormChangeHistory {\r\n ID: number;\r\n TemplateId: number;\r\n TemplateAuditId: number;\r\n InstanceId: number;\r\n InstanceAuditId: number;\r\n ChangeDate: Date;\r\n ChangeBy: number;\r\n ObjectType: string;\r\n FieldId: number;\r\n Property: string;\r\n FieldName: string;\r\n Language: string;\r\n OldValue: string;\r\n NewValue: string;\r\n ChangeByName: string;\r\n\r\n }","import { EFormRow } from './e-form-row.model';\r\nimport { EFormControl } from './e-form-control.model';\r\nimport { EFormConfiguration, enmEFormViewModes } from './e-form-config.model';\r\n\r\nexport class EFormColumn {\r\n Id: number;\r\n Height = 100;\r\n Rows: EFormRow[] = [];\r\n Controls: EFormControl[] = [];\r\n Alignment = 'flex-start';\r\n Width: string;\r\n FixedWidth: boolean;\r\n Indent: string;\r\n\r\n // Tree View Property\r\n Expanded: boolean;\r\n\r\n constructor (config: EFormConfiguration) {\r\n if (config.ViewMode == enmEFormViewModes.Page) {\r\n this.Indent = '38';\r\n }\r\n }\r\n}","import { CustomFieldDataObject } from '../../shared-modules/customization-framework/models/custom-data-field.model';\r\n\r\n\r\nexport class EFormConfiguration {\r\n ReadOnly = false;\r\n ShowSubmittedBy = false;\r\n Title = '';\r\n DisableSubmission = false;\r\n AlwaysShowAllConditionals = false;\r\n ViewMode: enmEFormViewModes = enmEFormViewModes.Template;\r\n ShowPrintButton = false;\r\n ParentHandlesSave = false;\r\n UseInstance = true;\r\n PageFlag = false;\r\n CustomFieldsFlag = false;\r\n HideTitle = false;\r\n IsSurvey = false;\r\n IsMobile = false;\r\n InformationalMessage = '';\r\n IsMobilePreview = false;\r\n BasePage = false;\r\n CSTObjectID: number;\r\n CSTFieldsManageOwnData = true;\r\n AllowTabs = true;\r\n AllowPages = true;\r\n AllowConditionalObjects = true;\r\n AllowInstanceSpecificText = false;\r\n IsPreview = false;\r\n NewForm = false;\r\n PageObjectType = '';\r\n AllowAttachmentControls = true;\r\n HideLanguageDropDown = false;\r\n ShowHeader = false;\r\n HeaderSelectedLogo = 0;\r\n ShowHeaderSchoolName = false;\r\n ShowHeaderSchoolAddress = false;\r\n AllowColumnWidth = false;\r\n IsDynamicWidth = false;\r\n AllowShowTodayButton = false;\r\n IgnoreRequiredFields = false;\r\n CFDataStore: CustomFieldDataObject[] = [];\r\n AllowSaveToDB = true;\r\n CalledFromAttendanceLetter = false;\r\n}\r\n\r\nexport enum enmEFormViewModes {\r\n Template = 'template',\r\n Instance = 'instance',\r\n Review = 'review',\r\n Form = 'form',\r\n Page = 'page',\r\n CustomPage = 'customPage',\r\n FRMA = 'frma'\r\n}\r\n\r\nexport enum PageObjectTypes {\r\n Student = 'student',\r\n Staff = 'staff',\r\n Other = 'other'\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { Lookup } from '../lookup/lookup.model';\r\nimport { EFormAttachment } from './e-form-attachment.model';\r\n\r\nexport class EFormControl {\r\n Id: number;\r\n ControlType: string;\r\n DataType = 'string';\r\n Value: any;\r\n Label = '';\r\n IsRequired = false;\r\n DropdownOptions: Lookup[] = [];\r\n Width: string;\r\n Indent: number;\r\n NoteRows: number;\r\n ParentObjectId: number;\r\n Condition: string | boolean;\r\n ConditionalAction = 'show';\r\n TextProvidedOnInstance = false;\r\n Instructions = '';\r\n InstructionFormat = 'plainText';\r\n LinkedDBField: number;\r\n LinkedCSTFieldName: string;\r\n AttachmentId: number;\r\n PreviousAttachmentId: number;\r\n Attachment: EFormAttachment;\r\n StoreLocation = 'eForm';\r\n StuPortCategoryId: number;\r\n FormDocTypeId: number;\r\n Visible: boolean;\r\n VerticalAlignment: string;\r\n RemoveBottomPadding: boolean;\r\n HasError: boolean;\r\n CustomField: boolean;\r\n CustomFieldName: string;\r\n CustomFieldID: number;\r\n CustomFieldControlTypeID: number;\r\n CustomFieldRefName: string;\r\n CustomFieldBasePage: boolean;\r\n CustomFieldAllowControlToHandleOwnData: boolean;\r\n CustomFieldMasterId: number;\r\n HideLabel: boolean;\r\n validateFunction: Function;\r\n DesignPageIndex: number;\r\n IsCritical: boolean;\r\n SurveyFieldID: number;\r\n CannotBeRemoved: boolean;\r\n HintLabel: string;\r\n Editable = true;\r\n Height = '50px';\r\n PaddingTop: '0px';\r\n ShowTodayButton = false;\r\n ShowNowButton = false;\r\n MaxLength: number;\r\n\r\n getElementRef = (): ElementRef => {\r\n return null;\r\n }\r\n}","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
0\" cdkDropList class=\"dropList\" [cdkDropListData]=\"column.Rows\"\r\n [cdkDropListEnterPredicate]=\"rowPredicate\" (cdkDropListDropped)=\"rowDropped($event)\" [ngStyle]=\"{'padding-left': column.Indent + 'px'}\">\r\n \r\n \r\n \r\n
\r\n \r\n
0\" class=\"dropList eFormColumn\" cdkDropList\r\n [ngStyle]=\"{'align-items': column.Alignment}\" [cdkDropListData]=\"column.Controls\"\r\n (cdkDropListDropped)=\"controlDropped($event)\" style=\"flex:1;\" #controlList\r\n [cdkDropListConnectedTo]=\"connectedDropLists\" [ngStyle]=\"{'padding-left': column.Indent + 'px'}\">\r\n \r\n \r\n \r\n
\r\n
\r\n Column - Drop Controls Here\r\n
\r\n
\r\n\r\n
\r\n","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy, ViewChildren, ElementRef, QueryList } from '@angular/core';\r\nimport { EFormColumn } from '../../../../shared-components/e-forms/e-form-column.model';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDrag } from '@angular/cdk/drag-drop';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { EFormControl } from '../../../../shared-components/e-forms/e-form-control.model';\r\nimport * as _ from 'lodash';\r\nimport { EFormRow } from '../../../../shared-components/e-forms/e-form-row.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { EFormRrowColumnLocationComponent } from '../e-form-row-column-location/e-form-row-column-location';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-column',\r\n templateUrl: './e-form-column.component.html',\r\n styleUrls: ['./e-form-column.component.css']\r\n})\r\nexport class EFormColumnComponent implements OnInit, OnDestroy {\r\n\r\n @Input() column: EFormColumn;\r\n @Input() hideEditHeader: boolean;\r\n @Input() config: EFormConfiguration;\r\n @Output() columnClickEvent: EventEmitter = new EventEmitter();\r\n subscriptions: Subscription[] = [];\r\n isSelected = false;\r\n isDragging = false;\r\n connectedDropLists: string[] = [];\r\n @ViewChildren('controlList', { read: ElementRef }) set sort(lists: QueryList) {\r\n lists.forEach(list => {\r\n this.eFormDesignerService.connectedDropListAdd(list.nativeElement.id);\r\n });\r\n }\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.setSelectedStatus();\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n this.setSelectedStatus();\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragStartStream$.subscribe(() => {\r\n this.isDragging = true;\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragEndStream$.subscribe(() => {\r\n this.isDragging = false;\r\n }));\r\n this.connectedDropLists = this.eFormDesignerService.connectedDropLists;\r\n this.subscriptions.push(this.eFormDesignerService.observableConnectedDropListsStream$.subscribe((list) => {\r\n this.connectedDropLists = list;\r\n }));\r\n }\r\n\r\n setSelectedStatus() {\r\n if (this.eFormDesignerService.selectedElementType == 'column' && this.eFormDesignerService.selectedColumn == this.column) {\r\n setTimeout(() => {\r\n this.isSelected = true;\r\n }, 0);\r\n }\r\n else {\r\n setTimeout(() => {\r\n this.isSelected = false;\r\n }, 0);\r\n }\r\n }\r\n\r\n columnClick(event) {\r\n event.preventDefault();\r\n this.columnClickEvent.emit(true);\r\n this.eFormDesignerService.focusOnColumn(this.column);\r\n event.stopPropagation();\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n controlDropped(event: CdkDragDrop) {\r\n if (event.container.id === event.previousContainer.id) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n else if (event.previousContainer.id.indexOf('controlPalette') >= 0) {\r\n const newControl = _.cloneDeep(event.item.data);\r\n this.eFormDesignerService.assignControlsNewID([newControl]);\r\n // newControl.Id = ++this.eFormService.selectedFormData.LastUsedControlId;\r\n // this.column.Controls.push(newControl);\r\n this.column.Controls.splice(event.currentIndex, 0, newControl);\r\n }\r\n else {\r\n transferArrayItem(event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex);\r\n }\r\n if (this.column.Rows && this.column.Rows.length > 0) {\r\n this.column.Controls.forEach(control => {\r\n const newRow = new EFormRow();\r\n newRow.Controls = [];\r\n newRow.Controls.push(control);\r\n this.column.Rows.push(newRow);\r\n });\r\n this.column.Controls = [];\r\n }\r\n this.eFormDesignerService.getAllFormControls();\r\n this.eFormDesignerService.focusOnControl(event.container.data[event.currentIndex]);\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n dragStart() {\r\n this.eFormDesignerService.dragStart();\r\n }\r\n\r\n dragEnd() {\r\n this.eFormDesignerService.dragEnd();\r\n }\r\n\r\n rowDropped(event: CdkDragDrop) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(this.column.Rows, event.previousIndex, event.currentIndex);\r\n }\r\n }\r\n\r\n rowPredicate(item: CdkDrag) {\r\n if (this.column && this.column.Rows && this.column.Rows.find(o => o == item.data)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n deleteClick() {\r\n if (this.eFormDesignerService.columnHasNonRemovableControls(this.column)) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Column';\r\n deleteConfirmDialog.componentInstance.disableConfirmation = true;\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'This column contains controls that cannot be removed.';\r\n }\r\n else if (!this.eFormDesignerService.canDeleteColumn(this.column)) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Column';\r\n deleteConfirmDialog.componentInstance.disableConfirmation = true;\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'You cannot remove the last column on a page.';\r\n }\r\n else {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Column';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this column and all its content?';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.eFormDesignerService.deleteSelectedElement();\r\n }\r\n });\r\n }\r\n }\r\n\r\n copyClick() {\r\n this.eFormDesignerService.locationToAdd = '';\r\n const copyConfirmDialog = this.dialog.open(EFormRrowColumnLocationComponent, {\r\n disableClose: true,\r\n });\r\n copyConfirmDialog.componentInstance.headerLabel = 'Copy Column';\r\n copyConfirmDialog.componentInstance.cotrolType = 'column';\r\n this.subscriptions.push(copyConfirmDialog.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.eFormDesignerService.locationToAdd = result;\r\n this.eFormDesignerService.addColumn(this.config);\r\n }\r\n else {\r\n this.eFormDesignerService.locationToAdd = '';\r\n }\r\n }));\r\n }\r\n\r\n getControlId(index: number, control: EFormControl) {\r\n return control.Id;\r\n }\r\n\r\n getRowId(index: number, row: EFormRow) {\r\n return index;\r\n }\r\n}\r\n","
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
No text entered.
\r\n
[{{control.Instructions}}]
\r\n
No instructions\r\n entered.
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n {{chip.CodeDescription}}\r\n \r\n
Buttons: No choices\r\n provided.
\r\n
\r\n\r\n \r\n
\r\n {{ !control.HideLabel ? control.Label : ''}} *\r\n
\r\n\r\n \r\n
\r\n {{ !control.HideLabel ? control.Label : ''}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n {{option.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n 0 ? control.MaxLength - (control.Value ? control.Value.length : 0) + ' characters left': ''\">\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
Radio Buttons: No\r\n choices provided.
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n {{!control.HideLabel ? control.Label : \"\"}}\r\n  *\r\n \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 field
\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, OnInit, Input, OnDestroy, TemplateRef } from '@angular/core';\r\nimport { EFormControl } from '../../../../shared-components/e-forms/e-form-control.model';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { EFormAttachment } from '../../../../shared-components/e-forms/e-form-attachment.model';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { CustomDataTemplateRef } from '../../../../shared-modules/customization-framework/models/custom-data-template-ref.model';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'e-form-control',\r\n templateUrl: './e-form-control.component.html',\r\n styleUrls: ['./e-form-control.component.css']// ,\r\n // encapsulation: ViewEncapsulation.None\r\n})\r\nexport class EFormControlComponent implements OnInit, OnDestroy {\r\n\r\n @Input() control: EFormControl;\r\n @Input() config: EFormConfiguration;\r\n subscriptions: Subscription[] = [];\r\n isSelected = false;\r\n isDragging = false;\r\n radioValues: string[] = [];\r\n radioLabels: string[] = [];\r\n radioIds: string[] = [];\r\n isDevMode: boolean;\r\n basePage = false;\r\n contentTemplate: TemplateRef;\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private dialog: MatDialog,\r\n private eFormDesignerService: EFormDesignerService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.control.Width) {\r\n if (!this.control.Width.toString().includes('px') && !this.control.Width.toString().includes('%')) {\r\n this.control.Width = this.control.Width.toString() + 'px';\r\n }\r\n }\r\n this.isDevMode = this.loginService.LoginSettings.CustomizationDevMode;\r\n this.basePage = this.config && this.config.BasePage ? this.config.BasePage : false;\r\n\r\n this.setSelectedStatus();\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n this.setSelectedStatus();\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragStartStream$.subscribe(() => {\r\n this.isDragging = true;\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragEndStream$.subscribe(() => {\r\n this.isDragging = false;\r\n this.basePage = this.config && this.config.BasePage ? this.config.BasePage : false;\r\n }));\r\n if (this.control.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.setUpRadioButtons();\r\n this.eFormDesignerService.observableRadioOptionsChangedStream$.subscribe(() => {\r\n if (this.eFormDesignerService.selectedElementType == 'control' && this.eFormDesignerService.selectedControl == this.control) {\r\n this.setUpRadioButtons();\r\n }\r\n });\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.image || this.control.ControlType == this.eFormService.controlTypes.linkToFile || this.control.ControlType == this.eFormService.controlTypes.attachment) {\r\n this.getAttachment();\r\n }\r\n if (this.control.ControlType == 'component') {\r\n if (this.eFormService.contentTemplates && this.eFormService.contentTemplates.length > 0) {\r\n const customDataTemplateRef: CustomDataTemplateRef = this.eFormService.contentTemplates.find(ct => ct.RefName == this.control.CustomFieldRefName);\r\n if (customDataTemplateRef) {\r\n this.contentTemplate = customDataTemplateRef.TemplateRef;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setSelectedStatus() {\r\n if (this.eFormDesignerService.selectedElementType == 'control' && this.eFormDesignerService.selectedControl == this.control) {\r\n setTimeout(() => {\r\n this.isSelected = true;\r\n }, 0);\r\n }\r\n else {\r\n setTimeout(() => {\r\n this.isSelected = false;\r\n }, 0);\r\n }\r\n }\r\n\r\n getAttachment() {\r\n if (this.control.AttachmentId && !this.control.Attachment) {\r\n this.subscriptions.push(this.eFormService.getEFormAttachment(this.control.AttachmentId).subscribe(attachment => {\r\n this.control.Attachment = attachment;\r\n // this.control.PreviousAttachmentId = this.control.AttachmentId;\r\n }));\r\n }\r\n else if (!this.control.Attachment) {\r\n this.control.Attachment = new EFormAttachment();\r\n }\r\n }\r\n\r\n setUpRadioButtons() {\r\n this.radioIds = [];\r\n this.radioValues = [];\r\n this.radioLabels = [];\r\n this.control.DropdownOptions.forEach(opt => {\r\n this.radioValues.push(opt.Code);\r\n this.radioLabels.push(opt.CodeDescription);\r\n const id = 'rbDesigner' + opt.Code.replace(' ', '_');\r\n this.radioIds.push(id);\r\n });\r\n }\r\n\r\n controlClick() {\r\n this.eFormDesignerService.focusOnControl(this.control);\r\n this.eFormDesignerService.openPropertiesTab();\r\n event.stopPropagation();\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n deleteClick() {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this control: ' + this.eFormService.formatControlType(this.control.ControlType) + '?';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.eFormDesignerService.deleteSelectedElement();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","

WARNING

\r\n\r\n
\r\n This form contains dropdown controls. \r\n Make sure the width you have selected for each of these is sufficient to display the entire length of the longest choice. \r\n If not, this data will not be fully visible when viewing/approving the submitted form.\r\n
\r\n
\r\n This form contains textbox controls.\r\n Make sure the width selected for each of these is sufficient for the length of the longest expected response. \r\n If not, this data will not be fully visible when viewing/approving the submitted form.\r\n
\r\n
\r\n If you are comfortable with the properties currently assigned to these controls, select Continue.\r\n
\r\n
Otherwise, select Cancel and review the properties.
\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormInstance } from '../../../../shared-components/e-forms/e-form-instance.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormTemplate } from '../../../../shared-components/e-forms/e-form-template.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-format-warning',\r\n templateUrl: './e-form-format-warning.component.html',\r\n styleUrls: ['./e-form-format-warning.component.css']\r\n})\r\nexport class EFormFormatWarningComponent implements OnInit, OnDestroy {\r\n\r\n showDropdownWarning: boolean = false;\r\n showTextboxWarning: boolean = false;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) {\r\n if (data) {\r\n this.showDropdownWarning = data.showDropdownWarning;\r\n this.showTextboxWarning = data.showTextboxWarning;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n continueClick() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(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 {{schoolNameTag}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{schoolAddressTag}}\r\n
\r\n
\r\n {{schoolCityTag}} {{schoolStateTag}} {{schoolZipTag}}\r\n
\r\n
\r\n {{schoolPhoneTag}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{currentDate | date: 'MM/dd/yy'}}\r\n
\r\n
\r\n
\r\n
\r\n
{{parentNameTag}}
\r\n
{{parentAddressStreetTag}}
\r\n
{{parentAddressCityTag}}
\r\n
\r\n
\r\n
\r\n
\r\n Student: {{studentNameTag}}\r\n
\r\n
\r\n
","import { Component, OnInit, Input, AfterViewInit, EventEmitter, Output } from '@angular/core';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\nimport { EFormService } from '../../e-form.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { ReportingService } from '../../../../shared-modules/reporting/reporting.service';\r\nimport { UserService } from '../../../user/user.service';\r\n\r\n@Component({\r\n selector: 'e-form-header',\r\n templateUrl: './e-form-header.component.html',\r\n styleUrls: ['./e-form-header.component.css']\r\n})\r\nexport class EFormHeaderComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() editable: boolean;\r\n @Input() disableMergeFields: boolean;\r\n @Input() print: boolean;\r\n @Input() showConditionals: boolean;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() config: EFormConfiguration;\r\n @Output() viewInitialized: EventEmitter = new EventEmitter();\r\n\r\n districtLogo: SafeResourceUrl;\r\n siteLogo: SafeResourceUrl;\r\n alternateSiteLogo: SafeResourceUrl;\r\n alternateDistrictLogo: SafeResourceUrl;\r\n\r\n pipeTrigger = false;\r\n currentDate: Date = new Date();\r\n schoolNameTag: string = '<>';\r\n schoolAddressTag: string = '<>';\r\n schoolCityTag: string = '<>';\r\n schoolStateTag: string = '<>';\r\n schoolZipTag: string = '<>';\r\n schoolPhoneTag: string = '<>';\r\n studentNameTag: string = '<>'\r\n parentNameTag: string = '<>';\r\n parentAddressStreetTag: string = '<>';\r\n parentAddressCityTag: string = '<>';\r\n initialized = false;\r\n subscriptions: Subscription[] = [];\r\n \r\n constructor(private eFormService: EFormService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private reportingService: ReportingService,\r\n private userService: UserService,\r\n private sanitizer: DomSanitizer) { \r\n\r\n }\r\n\r\n ngOnInit() {\r\n if(this.config.HeaderSelectedLogo != 0) {\r\n this.getLogos();\r\n }\r\n\r\n if (this.config.CalledFromAttendanceLetter == true) {\r\n this.schoolNameTag = '<>';\r\n this.schoolAddressTag = '<>';\r\n this.schoolCityTag = '<>';\r\n this.schoolStateTag = '<>';\r\n this.schoolZipTag = '<>';\r\n this.schoolPhoneTag = '<>';\r\n }\r\n }\r\n\r\n getLogos() {\r\n if(this.eFormService.districtLogo && this.eFormService.alternateDistrictLogo && this.eFormService.siteLogo && this.alternateSiteLogo) {\r\n\r\n this.districtLogo = this.eFormService.districtLogo;\r\n this.alternateDistrictLogo = this.eFormService.alternateDistrictLogo;\r\n this.siteLogo = this.eFormService.siteLogo;\r\n this.alternateSiteLogo = this.eFormService.alternateSiteLogo;\r\n }\r\n else {\r\n this.reportingService.getReportLogos(this.userService.currentUser.Id, this.yearService.defaultYear.SchoolID).subscribe(reportLogos => {\r\n this.districtLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/png;base64, ' + this.loginService.LoginSettings.DistrictLogo.toString());\r\n this.alternateDistrictLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['AlternateDistrictLogo']);\r\n this.siteLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['SiteLogo']);\r\n this.alternateSiteLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['AlternateSiteLogo']);\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.viewInitialized.emit(true);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EFormService } from '../e-forms/e-form.service';\r\n\r\n@Pipe({\r\n name: 'getControlImage'\r\n})\r\nexport class GetControlImagePipe implements PipeTransform {\r\n\r\n constructor(private eFormService: EFormService) {}\r\n\r\n transform(controlType: string, args?: any): any {\r\n if (controlType == this.eFormService.controlTypes.buttons) {\r\n return 'ebutton buttons.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.checkboxWithTextbox) {\r\n return 'ebutton check text.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.checkbox) {\r\n return 'ebutton checkbox.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.date) {\r\n return 'ebutton date.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.divider) {\r\n return 'ebutton divider.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.verticalDivider) {\r\n return 'ebutton vertical divider.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.dropdown) {\r\n return 'ebutton dropdown.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.image) {\r\n return 'ebutton image.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.note) {\r\n return 'ebutton multi line.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.radioButtons) {\r\n return 'ebutton radio.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.textbox) {\r\n return 'ebutton text field.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.text) {\r\n return 'ebutton text.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.attachment) {\r\n return 'ebutton attachment.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.linkToFile) {\r\n return 'ebutton link.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.linkToFile) {\r\n return 'ebutton link.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.component) {\r\n return 'ebutton custom template.png';\r\n }\r\n else if (controlType == this.eFormService.controlTypes.time) {\r\n return 'ebutton time.png';\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
Input Controls
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
","import { Component, OnInit, AfterViewInit, OnDestroy, Input } from '@angular/core';\r\nimport { EFormControl } from '../../../../../shared-components/e-forms/e-form-control.model';\r\nimport * as _ from 'lodash';\r\nimport { Lookup } from '../../../../../shared-components/lookup/lookup.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { EFormService } from '../../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormDesignerService } from '../../e-form-designer.service';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../e-form-config.model';\r\nimport { CustomFieldControlTypeEnum } from '../../../../../shared-modules/customization-framework/models/custom-data-control-type.model';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-available-controls',\r\n templateUrl: './e-form-available-controls.component.html',\r\n styleUrls: ['./e-form-available-controls.component.css']\r\n})\r\nexport class EFormAvailableControlsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @Input() config = new EFormConfiguration();\r\n // controlPalette: EFormControl[] = [];\r\n inputControls: EFormControl[] = [];\r\n nonInputControls: EFormControl[] = [];\r\n defaultOptions: Lookup[] = [];\r\n connectedDropLists: string[] = [];\r\n subscriptions: Subscription[] = [];\r\n readOnly = false;\r\n customFields = false;\r\n constructor(\r\n private eFormDesignerService: EFormDesignerService,\r\n private eFormService: EFormService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.config) {\r\n if (this.config.ReadOnly) {\r\n this.readOnly = this.config.ReadOnly;\r\n }\r\n if (this.config.CustomFieldsFlag) {\r\n this.customFields = this.config.CustomFieldsFlag;\r\n }\r\n }\r\n\r\n this.generatePalette();\r\n this.eFormDesignerService.connectedDropListAdd('controlPalette');\r\n this.eFormDesignerService.connectedDropListAdd('controlPaletteInput');\r\n this.connectedDropLists = this.eFormDesignerService.connectedDropLists;\r\n this.subscriptions.push(this.eFormDesignerService.observableConnectedDropListsStream$.subscribe((list) => {\r\n this.connectedDropLists = list;\r\n }));\r\n }\r\n\r\n generatePalette() {\r\n let control = new EFormControl();\r\n\r\n // attachment\r\n if (!this.config.IsSurvey && this.config.AllowAttachmentControls) {\r\n control.ControlType = this.eFormService.controlTypes.attachment;\r\n control.LinkedDBField = -1;\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n }\r\n\r\n // buttons\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.buttons;\r\n control.Width = '94px';\r\n control.LinkedDBField = -1;\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // checkbox\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.checkbox;\r\n control.LinkedDBField = -1;\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // checkbox with textbox\r\n // control = new EFormControl();\r\n // control.ControlType = this.eFormService.controlTypes.checkboxWithTextbox;\r\n // control.LinkedDBField = -1;\r\n // this.populateCustomFieldProperties(control);\r\n // this.inputControls.push(_.cloneDeep(control));\r\n\r\n // datepicker\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.date;\r\n control.LinkedDBField = -1;\r\n if (this.config.AllowShowTodayButton) {\r\n control.Width = '196px';\r\n }\r\n else {\r\n control.Width = '148px';\r\n }\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // timepicker\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.time;\r\n control.LinkedDBField = -1;\r\n control.Width = '196px';\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // divider\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.divider;\r\n control.Width = '100%';\r\n control.RemoveBottomPadding = true;\r\n this.nonInputControls.push(_.cloneDeep(control));\r\n\r\n // vertical divider\r\n if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.verticalDivider;\r\n control.RemoveBottomPadding = true;\r\n control.Height = '100%';\r\n this.nonInputControls.push(_.cloneDeep(control));\r\n }\r\n\r\n // dropdown\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.dropdown;\r\n control.LinkedDBField = -1;\r\n control.Width = '196px';\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // image\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.image;\r\n control.Width = '94px';\r\n this.nonInputControls.push(_.cloneDeep(control));\r\n\r\n // link to file\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.linkToFile;\r\n control.LinkedDBField = -1;\r\n this.nonInputControls.push(_.cloneDeep(control));\r\n\r\n // note field\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.note;\r\n control.Width = '196px';\r\n control.NoteRows = 3;\r\n control.LinkedDBField = -1;\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // radio buttons\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.radioButtons;\r\n control.Width = '94px';\r\n control.LinkedDBField = -1;\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n // text\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.text;\r\n control.Value = '';\r\n this.nonInputControls.push(_.cloneDeep(control));\r\n\r\n // text box\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.textbox;\r\n control.LinkedDBField = -1;\r\n control.Width = '196px';\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n\r\n if ((this.customFields || this.config.ViewMode == enmEFormViewModes.FRMA) && this.loginService.LoginSettings.CustomizationDevMode) {\r\n // custom component\r\n control = new EFormControl();\r\n control.ControlType = this.eFormService.controlTypes.component;\r\n control.LinkedDBField = -1;\r\n control.Width = '196px';\r\n this.populateCustomFieldProperties(control);\r\n this.inputControls.push(_.cloneDeep(control));\r\n }\r\n }\r\n\r\n populateCustomFieldProperties(control: EFormControl) {\r\n if (this.customFields) {\r\n control.CustomField = true;\r\n control.CustomFieldName = '';\r\n control.CustomFieldRefName = '';\r\n control.CustomFieldAllowControlToHandleOwnData = this.config.CSTFieldsManageOwnData;\r\n if (this.loginService.LoginSettings.CustomizationDevMode && this.config.ViewMode == enmEFormViewModes.Page) {\r\n control.CannotBeRemoved = true;\r\n }\r\n else {\r\n control.CannotBeRemoved = false;\r\n }\r\n control.CustomFieldControlTypeID = this.eFormDesignerService.convertEFormControlTypeToCustomFieldTypeID(control.ControlType);\r\n }\r\n }\r\n\r\n dragStart() {\r\n this.eFormDesignerService.dragStart();\r\n }\r\n\r\n dragEnd() {\r\n this.eFormDesignerService.dragEnd();\r\n }\r\n\r\n enterPredicate() {\r\n return false;\r\n }\r\n\r\n ngAfterViewInit() { }\r\n\r\n ngOnDestroy() { }\r\n\r\n}\r\n","

Choices

\r\n\r\n \r\n \r\n \r\n \r\n \"Re-Order\"\r\n \r\n \r\n\r\n \r\n Choice \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n Default \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n Critical Condition if Selected \r\n \r\n \r\n \r\n \r\n\r\n \r\n Actions \r\n \r\n Delete\r\n \r\n \r\n\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, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport * as _ from 'lodash';\r\nimport { Lookup } from '../../../lookup/lookup.model';\r\nimport { EFormService } from '../../e-form.service';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { GeneralConfirmationComponent } from '../../../controls/general-confirmation/general-confirmation.component';\r\nimport { ErrorList } from '../../../controls/error-prompt/error-list.model';\r\nimport { MergeFieldDialogComponent } from '../merge-field-dialog/merge-field-dialog.component';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-e-form-choices-dialog',\r\n templateUrl: './e-form-choices-dialog.component.html',\r\n styleUrls: ['./e-form-choices-dialog.component.css']\r\n})\r\nexport class EFormChoicesDialogComponent implements OnInit {\r\n\r\n dataSource: MatTableDataSource = new MatTableDataSource();\r\n columnsToDisplay = ['DragHandle', 'Choice', 'Actions'];\r\n control: EFormControl;\r\n showNoDefaultCheckbox = false;\r\n noDefault = true;\r\n dbField: boolean;\r\n errors: ErrorList[] = [];\r\n idCount = 0;\r\n defaultId: string;\r\n focusControlindex = 0;\r\n isV10: boolean;\r\n showCriticalCondition: boolean;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef,\r\n private eFormService: EFormService,\r\n private dialog: MatDialog,\r\n private eFormDesignerService: EFormDesignerService,\r\n private loginService: LoginService\r\n ) {\r\n this.control = _.cloneDeep(data.selectedControl);\r\n this.showCriticalCondition = data.showCriticalCondition;\r\n }\r\n\r\n ngOnInit() {\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n if (this.control.ControlType == this.eFormService.controlTypes.buttons) {\r\n if (this.showCriticalCondition) {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'IsCritical', 'Actions'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'Actions'];\r\n }\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.length == 0) {\r\n this.addClick();\r\n this.addClick();\r\n }\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.dropdown) {\r\n if (this.showCriticalCondition) {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'Default', 'IsCritical', 'Actions'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'Default', 'Actions'];\r\n }\r\n this.showNoDefaultCheckbox = true;\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.length == 0) {\r\n this.addClick();\r\n }\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n if (this.showCriticalCondition) {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'Default', 'IsCritical', 'Actions'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['DragHandle', 'Choice', 'Default', 'Actions'];\r\n }\r\n this.showNoDefaultCheckbox = false;\r\n this.noDefault = false;\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.length == 0) {\r\n this.addClick();\r\n this.addClick();\r\n this.control.DropdownOptions[0].CodeDescription = '';\r\n this.control.Value = '';\r\n }\r\n }\r\n\r\n if (this.control.LinkedDBField != -1) {\r\n this.dbField = true;\r\n }\r\n\r\n for (let i = 0; i < this.control.DropdownOptions.length; i++) {\r\n this.control.DropdownOptions[i].Id = this.idCount.toString();\r\n this.idCount++;\r\n if (!this.dbField) {\r\n if (this.control.Value == this.control.DropdownOptions[i].CodeDescription) {\r\n this.defaultId = this.control.DropdownOptions[i].Id;\r\n }\r\n }\r\n else {\r\n if (this.control.Value == this.control.DropdownOptions[i].Code) {\r\n this.defaultId = this.control.DropdownOptions[i].Id;\r\n }\r\n }\r\n \r\n this.setDefaultOptionFlags();\r\n }\r\n\r\n this.dataSource.data = this.control.DropdownOptions;\r\n if (this.control.Value && this.showNoDefaultCheckbox) {\r\n this.noDefault = false;\r\n }\r\n\r\n this.eFormDesignerService.observableChoiceMergeFieldClickedStream$.subscribe(mergeField => {\r\n this.setData(mergeField);\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.control.DropdownOptions.forEach(opt => {\r\n if (!this.dbField) {\r\n opt.Code = opt.CodeDescription;\r\n }\r\n });\r\n this.dialogRef.close(this.control);\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n if (this.control.ControlType == this.eFormService.controlTypes.buttons || this.control.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.length < 2) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Must have at least two choices.'\r\n });\r\n }\r\n const blankOption = this.control.DropdownOptions.find(o => !o.CodeDescription || o.CodeDescription.trim() == '');\r\n if (blankOption) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Blank choices are not allowed.'\r\n });\r\n }\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.dropdown) {\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.length == 0) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Must have at least one choice.'\r\n });\r\n }\r\n else if (this.control.DropdownOptions.length == 1 && this.control.DropdownOptions[0].CodeDescription.trim() == '') {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Must have at least one non-blank choice.'\r\n });\r\n }\r\n }\r\n // check for duplicate choices\r\n let duplicateFound = false;\r\n for (let i = 0; i < this.control.DropdownOptions.length; i++) {\r\n if (duplicateFound) {\r\n break;\r\n }\r\n const choiceA = this.control.DropdownOptions[i];\r\n for (let c = i + 1; c < this.control.DropdownOptions.length; c++) {\r\n const choiceB = this.control.DropdownOptions[c];\r\n if (choiceA.CodeDescription.trim() == choiceB.CodeDescription.trim()) {\r\n duplicateFound = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (duplicateFound) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Duplicate choices are not allowed.'\r\n });\r\n }\r\n if (!this.noDefault) {\r\n this.updateDefault();\r\n if (!this.control.DropdownOptions || this.control.DropdownOptions.find(o =>\r\n (!this.dbField && o.CodeDescription == this.control.Value) ||\r\n (this.dbField && o.Code == this.control.Value)\r\n ) == null) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Must select a default choice.'\r\n });\r\n }\r\n }\r\n }\r\n\r\n rowDrop(event: CdkDragDrop) {\r\n const prevIndex = this.dataSource.data.findIndex((d) => d === event.item.data);\r\n moveItemInArray(this.control.DropdownOptions, prevIndex, event.currentIndex);\r\n this.dataSource.data = this.control.DropdownOptions;\r\n }\r\n\r\n defaultClick(option: Lookup) {\r\n if (this.dbField) {\r\n this.control.Value = option.Code;\r\n }\r\n else {\r\n this.control.Value = option.CodeDescription;\r\n }\r\n this.defaultId = option.Id;\r\n\r\n this.setDefaultOptionFlags();\r\n }\r\n\r\n updateDefault() {\r\n const defaultOption: Lookup = this.control.DropdownOptions.find(o => o.Id == this.defaultId);\r\n\r\n if (defaultOption) {\r\n if (this.dbField) {\r\n this.control.Value = defaultOption.Code;\r\n }\r\n else {\r\n this.control.Value = defaultOption.CodeDescription;\r\n }\r\n }\r\n \r\n this.setDefaultOptionFlags();\r\n }\r\n\r\n setDefaultOptionFlags() {\r\n this.control.DropdownOptions.forEach( option => {\r\n option.Default = option.Id == this.defaultId;\r\n });\r\n }\r\n\r\n deleteClick(option: Lookup) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Choice';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete the \"' + option.CodeDescription + '\" choice?';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n const i = this.control.DropdownOptions.findIndex(o => o.CodeDescription == option.CodeDescription);\r\n if (i >= 0) {\r\n this.control.DropdownOptions.splice(i, 1);\r\n }\r\n this.dataSource.data = this.control.DropdownOptions;\r\n }\r\n });\r\n }\r\n\r\n addClick() {\r\n const newChoice = new Lookup();\r\n newChoice.Code = '';\r\n newChoice.CodeDescription = '';\r\n newChoice.Id = this.idCount.toString();\r\n this.idCount++;\r\n this.control.DropdownOptions.push(newChoice);\r\n this.dataSource.data = this.control.DropdownOptions;\r\n }\r\n\r\n noDefaultChange() {\r\n if (this.noDefault) {\r\n this.control.Value = null;\r\n }\r\n else {\r\n if (this.control.DropdownOptions && this.control.DropdownOptions.length > 0) {\r\n this.control.Value = this.control.DropdownOptions[0].CodeDescription;\r\n }\r\n }\r\n }\r\n\r\n displayMergeFields() {\r\n const mergeFieldDialog = this.dialog.open(MergeFieldDialogComponent, {\r\n height: '80vh',\r\n minWidth: '300px',\r\n hasBackdrop: false,\r\n disableClose: true,\r\n data: {\r\n noOperation: true\r\n }\r\n });\r\n }\r\n\r\n focusControl(index: number) {\r\n this.focusControlindex = index;\r\n }\r\n\r\n setData(field) {\r\n // this.control.DropdownOptions[this.focusControlindex].CodeDescription += field.FieldName;\r\n if (this.control.DropdownOptions[this.focusControlindex].CodeDescription != null && this.control.DropdownOptions[this.focusControlindex].CodeDescription != undefined) {\r\n this.control.DropdownOptions[this.focusControlindex].CodeDescription += field.FieldName;\r\n }\r\n else {\r\n this.control.DropdownOptions[this.focusControlindex].CodeDescription = field.FieldName;\r\n }\r\n this.dataSource.data = this.control.DropdownOptions;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EFormService } from '../e-forms/e-form.service';\r\n\r\n@Pipe({\r\n name: 'formatEFormControlType'\r\n})\r\nexport class FormatEFormControlTypePipe implements PipeTransform {\r\n\r\n constructor(private eFormService: EFormService) { }\r\n transform(type): string {\r\n return this.eFormService.formatControlType(type);\r\n }\r\n\r\n}\r\n","
\r\n \r\n\r\n \r\n \r\n
Tab - {{selectedTab.Name}}
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
Page - {{selectedPage.Name}}
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
Column
\r\n \r\n \r\n Center\r\n Left\r\n Right\r\n \r\n \r\n
\r\n Width\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Pixels\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n
Row
\r\n \r\n \r\n Bottom\r\n Center\r\n Top\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
Control {{selectedControl.Id}} -\r\n {{selectedControl.ControlType | formatEFormControlType}}
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n Hide label on form\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {{customField.DisplayName}}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n
\r\n Cannot be removed from page\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n (e-Form Only)\r\n {{dbField.FieldName}}\r\n \r\n \r\n \r\n \r\n (e-Form Only)\r\n {{dbField.DisplayName}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n Narrow (1\")\r\n \r\n Medium - Narrow (1.5\")\r\n \r\n Medium (2\")\r\n Medium - Wide (3\")\r\n Wide (4\")\r\n Extra Wide (7.5\")\r\n Auto\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n rows\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n pixels\r\n \r\n
\r\n \r\n
\r\n \r\n {{selectedControl.ControlType == 'checkbox' ? 'Must be checked by user' : 'Required field'}}\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n Show Today Button\r\n
\r\n \r\n
\r\n Show Now Button\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Reduce whitespace below control\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n Only in e-Forms\r\n \r\n \r\n
Also in Student Portfolio
\r\n \r\n \r\n {{cat.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n \r\n
Also in Student Digital Content
\r\n
Also in Student Documents
\r\n \r\n \r\n {{type.CodeDescription}}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n Critical condition if this box is checked\r\n
\r\n\r\n \r\n
\r\n \r\n This {{selectedControl.ControlType == 'text' ? 'text' : 'file'}} will be provided when each e-Form is created\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Explain to the user creating the e-Form what they should provide\r\n
\r\n\r\n \r\n \r\n\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
Show only if
\r\n \r\n \r\n\r\n \r\n Enable\r\n Show\r\n \r\n \r\n  if \r\n \r\n \r\n \r\n \r\n {{obj.Id + ' - ' + obj.Label}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
is
\r\n \r\n \r\n {{option.CodeDescription}}\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
Exactly
\r\n \r\n \r\n Pixels\r\n \r\n
\r\n
","import { Component, OnInit, OnDestroy, ViewChild, Input } from '@angular/core';\r\nimport { EFormService } from '../../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormRow } from '../../../../../shared-components/e-forms/e-form-row.model';\r\nimport { EFormColumn } from '../../../../../shared-components/e-forms/e-form-column.model';\r\nimport * as _ from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { EFormPage } from '../../../../../shared-components/e-forms/e-form-page.model';\r\nimport { EFormTab } from '../../../../../shared-components/e-forms/e-form-tab.model';\r\nimport { EFormControl } from '../../../../../shared-components/e-forms/e-form-control.model';\r\nimport { Lookup } from '../../../../../shared-components/lookup/lookup.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MergeFieldDialogComponent } from '../../merge-field-dialog/merge-field-dialog.component';\r\nimport { EFormMergeField } from '../../../../../shared-components/e-forms/e-form-merge-field.model';\r\nimport { QuillEditorComponent } from 'ngx-quill';\r\nimport { EFormChoicesDialogComponent } from '../../e-form-choices-dialog/e-form-choices-dialog.component';\r\nimport { ValueFromAnotherFieldDialogComponent } from '../../value-from-another-field-dialog/value-from-another-field-dialog.component';\r\nimport { EFormDatabaseField } from '../../../../../shared-components/e-forms/e-form-database-field.model';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { LookupService } from '../../../../../shared-components/lookup/lookup.service';\r\nimport { EFormAttachment } from '../../../../../shared-components/e-forms/e-form-attachment.model';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { EFormDesignerService } from '../../e-form-designer.service';\r\nimport { CSTField } from '../../../../../shared-modules/customization-framework/models/custom-data-field.model';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../e-form-config.model';\r\nimport { CustomFieldControlTypeEnum } from '../../../../../shared-modules/customization-framework/models/custom-data-control-type.model';\r\nimport { CustomizationFrameworkService } from '../../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { enmCustomDataObjects } from '../../../../../shared-modules/customization-framework/models/custom-data-object.model';\r\nimport { take } from 'rxjs/operators';\r\nimport { CustomFieldDataTypeEnum } from '../../../../../shared-modules/customization-framework/models/custom-data-field-type.model';\r\nimport { DataDefinitionList } from '../../../../../admin360/data-definition/data-definition.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-properties-panel',\r\n templateUrl: './e-form-properties-panel.component.html',\r\n styleUrls: ['./e-form-properties-panel.component.css']\r\n})\r\nexport class EFormPropertiesPanelComponent implements OnInit, OnDestroy {\r\n\r\n selectedTab: EFormTab;\r\n selectedPage: EFormPage;\r\n selectedColumn: EFormColumn;\r\n selectedRow: EFormRow;\r\n selectedControl: EFormControl;\r\n selectedElementType: string;\r\n promptForDataObjects: EFormControl[] = [];\r\n conditions: Lookup[] = [];\r\n allDBFields: EFormDatabaseField[] = [];\r\n databaseFields: EFormDatabaseField[] = [];\r\n showChoicesLink = false;\r\n cursorPosition: 0;\r\n studentPortfolioCategories: Lookup[] = [];\r\n selectedStuPortCategory: Lookup;\r\n documentTypes: Lookup[] = [];\r\n selectedDocType: Lookup;\r\n v10 = false;\r\n isCodeDescriptionValue: boolean;\r\n availableCustomFields: CSTField[] = [];\r\n isDevMode = false;\r\n isCustomFieldsActive = false;\r\n @ViewChild('quillDisplayText') quill: QuillEditorComponent;\r\n @ViewChild('quillInstructions') quillInstructions: QuillEditorComponent;\r\n subscriptions: Subscription[] = [];\r\n @Input() config: EFormConfiguration;\r\n\r\n quillOptions = {\r\n toolbar: [\r\n [\r\n 'bold',\r\n 'italic',\r\n 'underline',\r\n 'strike'\r\n ],\r\n [\r\n 'blockquote',\r\n 'code-block'\r\n ],\r\n [\r\n {\r\n 'header': 1\r\n },\r\n {\r\n 'header': 2\r\n }\r\n ],\r\n [\r\n {\r\n 'list': 'ordered'\r\n },\r\n {\r\n 'list': 'bullet'\r\n }\r\n ],\r\n [\r\n {\r\n 'script': 'sub'\r\n },\r\n {\r\n 'script': 'super'\r\n }\r\n ],\r\n [\r\n {\r\n 'indent': '-1'\r\n },\r\n {\r\n 'indent': '+1'\r\n }\r\n ],\r\n [\r\n {\r\n 'direction': 'rtl'\r\n }\r\n ],\r\n [\r\n {\r\n 'color': []\r\n },\r\n {\r\n 'background': []\r\n }\r\n ],\r\n [\r\n {\r\n 'size': [\r\n 'small',\r\n false,\r\n 'large',\r\n 'huge'\r\n ]\r\n }\r\n ],\r\n [\r\n {\r\n 'header': [\r\n 1,\r\n 2,\r\n 3,\r\n 4,\r\n 5,\r\n 6,\r\n false\r\n ]\r\n }\r\n ],\r\n [\r\n {\r\n 'font': []\r\n }\r\n ],\r\n [\r\n {\r\n 'align': []\r\n }\r\n ],\r\n [\r\n 'clean'\r\n ],\r\n [\r\n 'link',\r\n 'image',\r\n 'video'\r\n ]\r\n ]\r\n };\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n private lookupsService: LookupService,\r\n private loginService: LoginService,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n this.isCustomFieldsActive = this.loginService.LoginSettings.EnableCustomizationFramework && this.loginService.LoginSettings.C360CustomFieldsImported;\r\n this.isDevMode = this.loginService.LoginSettings.CustomizationDevMode;\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.selectedColumn = this.eFormDesignerService.selectedColumn;\r\n this.selectedRow = this.eFormDesignerService.selectedRow;\r\n this.selectedControl = this.eFormDesignerService.selectedControl;\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n let selectedTypeChanged = false;\r\n if (this.selectedElementType != this.eFormDesignerService.selectedElementType) {\r\n selectedTypeChanged = true;\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n }\r\n if (this.selectedTab != this.eFormDesignerService.selectedTab || selectedTypeChanged) {\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n this.tabChange();\r\n }\r\n if (this.selectedPage != this.eFormDesignerService.selectedPage || selectedTypeChanged) {\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.pageChange();\r\n }\r\n if (this.selectedColumn != this.eFormDesignerService.selectedColumn || selectedTypeChanged) {\r\n this.selectedColumn = this.eFormDesignerService.selectedColumn;\r\n if (this.selectedColumn.FixedWidth == null) {\r\n this.selectedColumn.FixedWidth = false;\r\n }\r\n }\r\n if (this.selectedRow != this.eFormDesignerService.selectedRow || selectedTypeChanged) {\r\n this.selectedRow = this.eFormDesignerService.selectedRow;\r\n }\r\n if (this.selectedControl != this.eFormDesignerService.selectedControl || selectedTypeChanged) {\r\n this.selectedControl = this.eFormDesignerService.selectedControl;\r\n this.controlChange();\r\n\r\n }\r\n }));\r\n\r\n this.subscriptions.push(this.eFormDesignerService.observableControlsUpdatedStream$.subscribe(o => {\r\n this.getPromptForDataObjects();\r\n }));\r\n\r\n this.subscriptions.push(this.eFormDesignerService.observableMergeFieldClickedStream$.subscribe(mergeField => {\r\n this.mergeFieldClicked(mergeField);\r\n }));\r\n this.getStudentPortfolioCategories();\r\n this.getDocumentTypes();\r\n this.getDatabaseFields();\r\n }\r\n\r\n getDatabaseFields() {\r\n if (this.isCustomFieldsActive && !this.config.CustomFieldsFlag && (this.config.ViewMode == enmEFormViewModes.Template || this.config.ViewMode == enmEFormViewModes.Instance || this.config.ViewMode == enmEFormViewModes.Form)) {\r\n let isStudentForm = false;\r\n if (this.config.ViewMode == enmEFormViewModes.Template && this.eFormService.selectedTemplate.Type == 'student') {\r\n isStudentForm = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Instance && this.eFormService.selectedInstance.TemplateType == 'student') {\r\n isStudentForm = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Form && this.eFormService.selectedForm.TemplateType == 'student') {\r\n isStudentForm = true;\r\n }\r\n if (isStudentForm) {\r\n // cst fields\r\n if (this.customizationFrameworkService.customDataFields && this.customizationFrameworkService.customDataFields.length > 0) {\r\n this.eFormDesignerService.availableCSTFields = this.customizationFrameworkService.customDataFields.filter(o => o.ObjectID == enmCustomDataObjects.Student);\r\n this.filterCSTFields();\r\n this.setSelectedCSTField();\r\n }\r\n else {\r\n this.customizationFrameworkService.getCustomDataFieldsByObjectID(enmCustomDataObjects.Student).pipe(take(1)).subscribe(fields => {\r\n this.eFormDesignerService.availableCSTFields = fields;\r\n this.filterCSTFields();\r\n this.setSelectedCSTField();\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n this.allDBFields = this.eFormService.databaseFields;\r\n this.filterDatabaseFields();\r\n this.subscriptions.push(this.eFormService.observableDatabaseFieldsStream$.subscribe(fields => {\r\n this.allDBFields = fields;\r\n this.filterDatabaseFields();\r\n }));\r\n }\r\n }\r\n\r\n tabChange() {\r\n if (this.selectedElementType == 'tab') {\r\n this.getTabPromptForDataObjects();\r\n this.parentObjectChange();\r\n }\r\n }\r\n\r\n pageChange() {\r\n if (this.selectedElementType == 'page') {\r\n this.getPagePromptForDataObjects();\r\n this.parentObjectChange();\r\n }\r\n }\r\n\r\n controlChange() {\r\n if (this.selectedElementType == 'control') {\r\n this.getPromptForDataObjects();\r\n this.parentObjectChange();\r\n this.filterDatabaseFields();\r\n this.setSelectedStuPortCategory();\r\n this.setSelectedDocType();\r\n this.filterCSTFields();\r\n this.setSelectedCSTField();\r\n if (this.selectedControl && this.selectedControl.LinkedDBField) {\r\n const dbField = this.databaseFields.find(o => o.ID == this.selectedControl.LinkedDBField);\r\n if (dbField && dbField.ControlType == 'list' &&\r\n (this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.buttons\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons)) {\r\n this.showChoicesLink = true;\r\n }\r\n }\r\n }\r\n if (this.selectedControl) {\r\n if (this.selectedControl.ControlType == 'dropdown' && !this.selectedControl.Width) {\r\n this.selectedControl.Width = '200px';\r\n }\r\n if (this.selectedControl.ControlType == 'date' && (!this.selectedControl.Width || this.selectedControl.Width == '100')) {\r\n this.selectedControl.Width = '125px';\r\n }\r\n if (!this.selectedControl.ConditionalAction) {\r\n this.selectedControl.ConditionalAction = 'show';\r\n }\r\n }\r\n this.setChooseLikeBackGround();\r\n }\r\n\r\n filterCSTFields() {\r\n if (this.selectedControl) {\r\n if (!this.selectedControl.CustomFieldControlTypeID) {\r\n this.selectedControl.CustomFieldControlTypeID = this.eFormDesignerService.convertEFormControlTypeToCustomFieldTypeID(this.selectedControl.ControlType);\r\n }\r\n this.availableCustomFields = this.eFormDesignerService.availableCSTFields.filter(o =>\r\n (o.ControlTypeID == this.selectedControl.CustomFieldControlTypeID\r\n || (this.selectedControl.ControlType == this.eFormService.controlTypes.note && o.ControlTypeID == CustomFieldControlTypeEnum.Textbox && o.DataTypeID == CustomFieldDataTypeEnum.AlphaNumeric) // textbox fields can use multi-line textboxes also\r\n || (this.selectedControl.ControlType == this.eFormService.controlTypes.textbox && o.ControlTypeID == CustomFieldControlTypeEnum.Time) // we currently use textbox fields for time data types\r\n || ((this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown || this.selectedControl.ControlType == this.eFormService.controlTypes.buttons || this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons)\r\n && (o.ControlTypeID == CustomFieldControlTypeEnum.Dropdown || o.ControlTypeID == CustomFieldControlTypeEnum.Buttons || o.ControlTypeID == CustomFieldControlTypeEnum.RadioButtons)) // dropdowns/buttons/radio buttons are interchangeable\r\n || (this.selectedControl.ControlType == this.eFormService.controlTypes.date && (o.ControlTypeID == CustomFieldControlTypeEnum.Date || o.ControlTypeID == CustomFieldControlTypeEnum.DateTime))\r\n )\r\n && (this.isDevMode || !o.IsSysGen || !o.IsProcedureBased || o.ReadSPName) // if not in dev mode, procedure-based fields must have a read sp in order to be available for use\r\n ).sort((a, b) => a.DisplayName.localeCompare(b.DisplayName));\r\n }\r\n }\r\n\r\n setSelectedCSTField() {\r\n if (this.isCustomFieldsActive && this.selectedControl && !this.selectedControl.LinkedCSTFieldName && this.selectedControl.LinkedDBField > 0) {\r\n const field = this.availableCustomFields.find(o => o.DynamicPagesDataFiledsID == this.selectedControl.LinkedDBField);\r\n if (field) {\r\n this.selectedControl.LinkedCSTFieldName = field.FieldName;\r\n }\r\n }\r\n }\r\n\r\n getPromptForDataObjects() {\r\n if (this.selectedControl) {\r\n this.promptForDataObjects = this.eFormDesignerService.getPromptForDataObjects(this.selectedControl);\r\n }\r\n }\r\n\r\n getPagePromptForDataObjects() {\r\n if (this.selectedPage) {\r\n this.promptForDataObjects = this.eFormDesignerService.getPagePromptForDataObjects(this.selectedPage);\r\n }\r\n }\r\n\r\n getTabPromptForDataObjects() {\r\n if (this.selectedTab) {\r\n this.promptForDataObjects = this.eFormDesignerService.getTabPromptForDataObjects(this.selectedTab);\r\n }\r\n }\r\n\r\n getStudentPortfolioCategories() {\r\n this.studentPortfolioCategories = this.eFormDesignerService.studentPortfolioCategories;\r\n if (!this.studentPortfolioCategories || this.studentPortfolioCategories.length == 0) {\r\n this.subscriptions.push(this.lookupsService.getStudentPortfolioCategoryLookup().subscribe(result => {\r\n this.studentPortfolioCategories = result;\r\n this.eFormDesignerService.studentPortfolioCategories = result;\r\n this.setSelectedStuPortCategory();\r\n }));\r\n }\r\n else {\r\n this.setSelectedStuPortCategory();\r\n }\r\n }\r\n\r\n setSelectedStuPortCategory() {\r\n if (this.studentPortfolioCategories && this.selectedControl && this.selectedControl.StuPortCategoryId) {\r\n this.selectedStuPortCategory = this.studentPortfolioCategories.find(o => o.Id == this.selectedControl.StuPortCategoryId.toString());\r\n }\r\n else {\r\n this.selectedStuPortCategory = null;\r\n }\r\n }\r\n\r\n getDocumentTypes() {\r\n this.documentTypes = this.eFormDesignerService.documentTypes;\r\n if (!this.documentTypes || this.documentTypes.length == 0) {\r\n this.subscriptions.push(this.lookupsService.getDocumentTypeLookup().subscribe(result => {\r\n this.documentTypes = result;\r\n this.eFormDesignerService.documentTypes = result;\r\n this.setSelectedDocType();\r\n }));\r\n }\r\n else {\r\n this.setSelectedDocType();\r\n }\r\n }\r\n\r\n setSelectedDocType() {\r\n if (this.documentTypes && this.selectedControl && this.selectedControl.FormDocTypeId) {\r\n this.selectedDocType = this.documentTypes.find(o => o.Id == this.selectedControl.FormDocTypeId.toString());\r\n }\r\n else {\r\n this.selectedDocType = null;\r\n }\r\n }\r\n\r\n tabNameChanged() {\r\n this.eFormDesignerService.observableTabNameChanged.next(true);\r\n }\r\n\r\n parentObjectChange() {\r\n this.conditions = [];\r\n let parentObjId: number;\r\n if (this.selectedElementType == 'control' && this.selectedControl) {\r\n parentObjId = this.selectedControl.ParentObjectId;\r\n }\r\n else if (this.selectedElementType == 'page' && this.selectedPage) {\r\n parentObjId = this.selectedPage.ParentObjectId;\r\n }\r\n else if (this.selectedElementType == 'tab' && this.selectedTab) {\r\n parentObjId = this.selectedTab.ParentObjectId;\r\n }\r\n const selectedParentObject = this.eFormDesignerService.masterControlList.find(o => o.Id == parentObjId);\r\n if (selectedParentObject) {\r\n if (selectedParentObject.ControlType == this.eFormService.controlTypes.checkbox || selectedParentObject.ControlType == this.eFormService.controlTypes.checkboxWithTextbox) {\r\n const checkboxOptions: Lookup[] = [];\r\n const trueOption = new Lookup();\r\n trueOption.Code = 'true';\r\n trueOption.CodeDescription = 'Checked';\r\n checkboxOptions.push(trueOption);\r\n const falseOption = new Lookup();\r\n falseOption.Code = 'false';\r\n falseOption.CodeDescription = 'Not Checked';\r\n checkboxOptions.push(falseOption);\r\n this.conditions = checkboxOptions;\r\n }\r\n else if (selectedParentObject.ControlType == this.eFormService.controlTypes.textbox || selectedParentObject.ControlType == this.eFormService.controlTypes.note) {\r\n const textboxOptions: Lookup[] = [];\r\n const notBlank = new Lookup();\r\n notBlank.Code = 'notBlank';\r\n notBlank.CodeDescription = 'Not Blank';\r\n textboxOptions.push(notBlank);\r\n const blank = new Lookup();\r\n blank.Code = 'blank';\r\n blank.CodeDescription = 'Blank';\r\n textboxOptions.push(blank);\r\n this.conditions = textboxOptions;\r\n }\r\n else if (selectedParentObject.CustomField && selectedParentObject.CustomFieldName) {\r\n this.getCustomFieldMetaData(selectedParentObject.CustomFieldName);\r\n }\r\n else if (selectedParentObject.DropdownOptions) {\r\n this.conditions = selectedParentObject.DropdownOptions;\r\n }\r\n\r\n this.setSelectedCondition();\r\n }\r\n }\r\n\r\n setSelectedCondition() {\r\n if (this.conditions && this.conditions.length > 0) {\r\n if (this.selectedElementType == 'control' && this.selectedControl\r\n && this.selectedControl.Condition\r\n && this.conditions.find(o => o.Code == this.selectedControl.Condition) == null) {\r\n this.selectedControl.Condition = this.conditions[0].Code;\r\n }\r\n else if (this.selectedElementType == 'page' && this.selectedPage\r\n && this.selectedPage.Condition\r\n && this.conditions.find(o => o.Code == this.selectedPage.Condition) == null) {\r\n this.selectedPage.Condition = this.conditions[0].Code;\r\n }\r\n else if (this.selectedElementType == 'tab' && this.selectedTab\r\n && this.selectedTab.Condition\r\n && this.conditions.find(o => o.Code == this.selectedTab.Condition) == null) {\r\n this.selectedTab.Condition = this.conditions[0].Code;\r\n }\r\n }\r\n }\r\n\r\n getCustomFieldMetaData(fieldName: string) {\r\n let field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == fieldName);\r\n if (field && field.IsDataDef) {\r\n if (field.DataDef) {\r\n this.updateCustomFieldConditions(field.DataDef, field.UseDataDefCode);\r\n }\r\n else {\r\n this.getCustomFieldDataDef(field);\r\n }\r\n }\r\n else if (!field) {\r\n this.customizationFrameworkService.getCustomDataFieldByFieldName(fieldName).pipe(take(1)).subscribe(f => {\r\n field = f;\r\n if (!this.customizationFrameworkService.customDataFields.find(o => o.FieldName == f.FieldName)) {\r\n this.customizationFrameworkService.customDataFields.push(f);\r\n }\r\n this.getCustomFieldMetaData(fieldName);\r\n });\r\n }\r\n }\r\n\r\n getCustomFieldDataDef(field: CSTField) {\r\n this.customizationFrameworkService.getDataDefinitionListByEnum(field.LookupENUM).pipe(take(1)).subscribe(dataDefinitionList => {\r\n this.updateCustomFieldConditions(dataDefinitionList, field.UseDataDefCode);\r\n });\r\n }\r\n\r\n updateCustomFieldConditions(dataDef: DataDefinitionList, useDataDefCode: boolean) {\r\n this.conditions = [];\r\n dataDef.DataDefinitions.forEach(def => {\r\n const lookup = new Lookup();\r\n lookup.Id = def.Id.toString();\r\n lookup.Code = useDataDefCode ? def.Code : def.Id.toString();\r\n lookup.CodeDesc = (dataDef.CodeNotRequired ? '' : (def.Code ? def.Code : '') + ' - ') + (def.Description ? def.Description : '');\r\n lookup.CodeDescription = lookup.CodeDesc;\r\n this.conditions.push(lookup);\r\n });\r\n this.setSelectedCondition();\r\n }\r\n\r\n displayMergeFields() {\r\n const mergeFieldDialog = this.dialog.open(MergeFieldDialogComponent, {\r\n height: '80vh',\r\n minWidth: '200px',\r\n hasBackdrop: false,\r\n disableClose: true\r\n });\r\n }\r\n\r\n mergeFieldClicked(mergeField: EFormMergeField) {\r\n if (mergeField) {\r\n const mergeTag = mergeField.FieldName;\r\n if (this.quill || this.selectedControl.ControlType != this.eFormService.controlTypes.text) {\r\n if (mergeField.ID == 1) { // value from another control\r\n const valueFromAnotherFieldDialog = this.dialog.open(ValueFromAnotherFieldDialogComponent, {\r\n disableClose: true\r\n });\r\n this.subscriptions.push(valueFromAnotherFieldDialog.afterClosed().subscribe(tag => {\r\n if (tag) {\r\n this.insertMergeTag(tag);\r\n }\r\n }));\r\n }\r\n else {\r\n this.insertMergeTag(mergeTag);\r\n }\r\n }\r\n }\r\n }\r\n\r\n insertMergeTag(tag: string) {\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.text) {\r\n const range = this.quill.quillEditor.getSelection(true);\r\n if (range.length > 0) {\r\n this.quill.quillEditor.deleteText(range.index, range.length, 'user');\r\n }\r\n this.quill.quillEditor.insertText(range.index, tag, 'user');\r\n }\r\n else {\r\n this.selectedControl.Label = [this.selectedControl.Label.slice(0, this.cursorPosition), tag, this.selectedControl.Label.slice(this.cursorPosition)].join('');\r\n }\r\n }\r\n\r\n textProvidedOnInstanceChanged() {\r\n if (!this.selectedControl.TextProvidedOnInstance) {\r\n this.selectedControl.Instructions = '';\r\n }\r\n else {\r\n this.selectedControl.Value = '';\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.linkToFile) {\r\n this.selectedControl.AttachmentId = null;\r\n this.selectedControl.Attachment = new EFormAttachment();\r\n }\r\n }\r\n }\r\n\r\n choicesClick() {\r\n const choicesDialog = this.dialog.open(EFormChoicesDialogComponent, {\r\n height: '80vh',\r\n disableClose: true,\r\n data: {\r\n selectedControl: this.selectedControl,\r\n showCriticalCondition: this.config.IsSurvey\r\n }\r\n });\r\n this.subscriptions.push(choicesDialog.afterClosed().subscribe((editedControl: EFormControl) => {\r\n if (editedControl) {\r\n this.selectedControl.DropdownOptions = editedControl.DropdownOptions;\r\n this.selectedControl.Value = editedControl.Value;\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.eFormDesignerService.observableRadioOptionsChanged.next(true);\r\n }\r\n this.eFormDesignerService.updateConditionalControls(this.selectedControl);\r\n }\r\n // ########\r\n this.setChooseLikeBackGround();\r\n // ########\r\n }));\r\n }\r\n\r\n filterDatabaseFields() {\r\n this.databaseFields = [];\r\n if (this.selectedControl) {\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.buttons || this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons || this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown) {\r\n this.databaseFields = this.allDBFields.filter(o => o.ControlType == 'list');\r\n }\r\n else if (this.selectedControl.ControlType == this.eFormService.controlTypes.textbox || this.selectedControl.ControlType == this.eFormService.controlTypes.note) {\r\n this.databaseFields = this.allDBFields.filter(o => o.ControlType == 'textbox');\r\n }\r\n else if (this.selectedControl.ControlType == this.eFormService.controlTypes.date) {\r\n this.databaseFields = this.allDBFields.filter(o => o.ControlType == 'date');\r\n }\r\n this.databaseFields = _.sortBy(this.databaseFields, o => o.FieldName.toLowerCase());\r\n }\r\n }\r\n\r\n locationToSaveChange() {\r\n if (!this.isCustomFieldsActive) {\r\n this.showChoicesLink = false;\r\n this.selectedControl.LinkedCSTFieldName = null; // we are saving to the old UD fields, not to CST fields\r\n if (this.selectedControl.LinkedDBField > 0) {\r\n const dbField = this.databaseFields.find(o => o.ID == this.selectedControl.LinkedDBField);\r\n if (dbField && dbField.ControlType == 'list') {\r\n this.selectedControl.DropdownOptions = [];\r\n this.subscriptions.push(this.eFormService.getEFormDatabaseFieldOptions(this.selectedControl.LinkedDBField, this.yearService.defaultYear.Id).subscribe(options => {\r\n this.selectedControl.DropdownOptions = options;\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown) {\r\n this.selectedControl.DropdownOptions = options;\r\n }\r\n else {\r\n this.selectedControl.DropdownOptions = options.filter(o => o.CodeDescription.trim() != '');\r\n }\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.eFormDesignerService.observableRadioOptionsChanged.next(true);\r\n }\r\n this.showChoicesLink = true;\r\n }));\r\n }\r\n else {\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.buttons\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.showChoicesLink = true;\r\n }\r\n }\r\n }\r\n else {\r\n this.selectedControl.DropdownOptions = [];\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.eFormDesignerService.observableRadioOptionsChanged.next(true);\r\n }\r\n }\r\n this.selectedControl.Value = '';\r\n this.setChooseLikeBackGround();\r\n }\r\n }\r\n\r\n\r\n\r\n locationToSaveCSTChange() {\r\n if (this.isCustomFieldsActive) {\r\n this.showChoicesLink = false;\r\n this.selectedControl.LinkedDBField = -1; // we are saving to CST fields, not to the old UD fields\r\n if (this.isCustomFieldsActive && this.selectedControl.LinkedCSTFieldName) {\r\n const cstField = this.availableCustomFields.find(o => o.FieldName == this.selectedControl.LinkedCSTFieldName);\r\n if (cstField && cstField.LookupENUM && cstField.IsDataDef) {\r\n this.selectedControl.DropdownOptions = [];\r\n this.customizationFrameworkService.getDataDefinition(cstField.LookupENUM, this.yearService.defaultYear.Id, this.yearService.defaultYear.SiteYearId, null).pipe(take(1)).subscribe(options => {\r\n options.forEach(opt => {\r\n const lookup = new Lookup();\r\n lookup.Id = opt.Id.toString();\r\n lookup.Code = opt.Id.toString();\r\n lookup.CodeDescription = opt.Description;\r\n lookup.Default = opt.IsDefault;\r\n this.selectedControl.DropdownOptions.push(lookup);\r\n });\r\n if (this.selectedControl.ControlType != this.eFormService.controlTypes.dropdown) {\r\n this.selectedControl.DropdownOptions = this.selectedControl.DropdownOptions.filter(o => o.CodeDescription.trim() != '');\r\n }\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.eFormDesignerService.observableRadioOptionsChanged.next(true);\r\n }\r\n this.showChoicesLink = true;\r\n });\r\n }\r\n else {\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.dropdown\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.buttons\r\n || this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.showChoicesLink = true;\r\n }\r\n }\r\n }\r\n else {\r\n this.selectedControl.DropdownOptions = [];\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.eFormDesignerService.observableRadioOptionsChanged.next(true);\r\n }\r\n }\r\n this.selectedControl.Value = '';\r\n this.setChooseLikeBackGround();\r\n }\r\n }\r\n\r\n setChooseLikeBackGround() {\r\n setTimeout(() => {\r\n if (this.selectedControl && this.selectedControl.DropdownOptions) {\r\n const objValue = this.selectedControl.DropdownOptions.length ? (this.selectedControl.DropdownOptions.filter(o => o.CodeDescription != '' && o.CodeDescription != null)[0]) : null;\r\n this.isCodeDescriptionValue = false;\r\n if (objValue) {\r\n this.isCodeDescriptionValue = true;\r\n }\r\n }\r\n else {\r\n this.isCodeDescriptionValue = false;\r\n }\r\n }, 1010);\r\n }\r\n\r\n fileChanged(name: string) {\r\n if (!this.selectedControl.Label) {\r\n this.selectedControl.Label = name;\r\n }\r\n this.selectedControl.Attachment.Name = name;\r\n this.selectedControl.AttachmentId = null;\r\n }\r\n\r\n labelChanged(label: string) {\r\n if (this.selectedControl.ControlType == this.eFormService.controlTypes.image || this.selectedControl.ControlType == this.eFormService.controlTypes.linkToFile) {\r\n if (this.selectedControl.Attachment) {\r\n this.selectedControl.Attachment.Name = label;\r\n }\r\n }\r\n }\r\n\r\n getCaretPosition(inputElement) {\r\n if (inputElement.selectionStart || inputElement.selectionStart == '0') {\r\n this.cursorPosition = inputElement.selectionStart;\r\n }\r\n }\r\n\r\n stuPortCategoryChange() {\r\n this.selectedControl.StuPortCategoryId = null;\r\n if (this.selectedStuPortCategory) {\r\n const stringId = this.selectedStuPortCategory.Id;\r\n if (Number(stringId)) {\r\n this.selectedControl.StuPortCategoryId = parseInt(stringId, 10);\r\n }\r\n }\r\n }\r\n\r\n docTypeChange() {\r\n this.selectedControl.FormDocTypeId = null;\r\n if (this.selectedDocType) {\r\n const stringId = this.selectedDocType.Id;\r\n if (Number(stringId)) {\r\n this.selectedControl.FormDocTypeId = parseInt(stringId, 10);\r\n }\r\n }\r\n }\r\n\r\n storeLocationChange(location: string) {\r\n if (location != 'student portfolio') {\r\n this.selectedControl.StuPortCategoryId = null;\r\n this.selectedStuPortCategory = null;\r\n }\r\n if (location != 'student digital content') {\r\n this.selectedControl.FormDocTypeId = null;\r\n this.selectedDocType = null;\r\n }\r\n }\r\n\r\n customFieldSelectChange() {\r\n if (this.selectedControl.CustomFieldName) {\r\n const customField = this.availableCustomFields.find(control => control.FieldName == this.selectedControl.CustomFieldName);\r\n if (customField) {\r\n if (!this.selectedControl.Label) {\r\n this.selectedControl.Label = customField.DisplayName;\r\n }\r\n if (customField.IsRequired) {\r\n this.selectedControl.IsRequired = true;\r\n }\r\n if (customField.ControlTypeID == CustomFieldControlTypeEnum.Time || customField.ControlTypeID == CustomFieldControlTypeEnum.DateTime) {\r\n this.selectedControl.CustomFieldControlTypeID = customField.ControlTypeID;\r\n }\r\n }\r\n }\r\n }\r\n\r\n isCustomFieldRequired(fieldName: string) {\r\n const c = this.availableCustomFields.find(o => o.FieldName == fieldName);\r\n return c && c.IsRequired;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n colWidthChange() {\r\n if (this.selectedColumn && !this.selectedColumn.FixedWidth) {\r\n this.selectedColumn.Width = null;\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n  Tab - {{tab.Name}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n  Page - {{page.Name}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n 0 || row.Columns.length > 0\">\r\n \r\n  Row\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {{control | getDesignerControlName}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n 0 || column.Rows.length > 0\">\r\n \r\n  \r\n Column\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{control | getDesignerControlName}}\r\n
\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, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { EFormService } from '../../../../../shared-components/e-forms/e-form.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../../shared-components/angular-material/mat-animations';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { EFormTab } from '../../../../../shared-components/e-forms/e-form-tab.model';\r\nimport { EFormPage } from '../../../../../shared-components/e-forms/e-form-page.model';\r\nimport { EFormDataObject } from '../../../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { EFormRow } from '../../../../../shared-components/e-forms/e-form-row.model';\r\nimport { EFormColumn } from '../../../../../shared-components/e-forms/e-form-column.model';\r\nimport { EFormControl } from '../../../../../shared-components/e-forms/e-form-control.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GeneralConfirmationComponent } from '../../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { EFormDesignerService } from '../../e-form-designer.service';\r\nimport { EFormRrowColumnLocationComponent } from '../../e-form-row-column-location/e-form-row-column-location';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { EFormConfiguration } from '../../../e-form-config.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-navigation-panel',\r\n templateUrl: './e-form-navigation-panel.component.html',\r\n styleUrls: ['./e-form-navigation-panel.component.css'],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class EFormNavigationPanelComponent implements OnInit, OnDestroy {\r\n\r\n @Input() config = new EFormConfiguration();\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource();\r\n columnsToDisplay = ['More', 'Tab'];\r\n eForm: EFormDataObject;\r\n subscriptions: Subscription[] = [];\r\n selectedTab: EFormTab;\r\n selectedPage: EFormPage;\r\n selectedColumn: EFormColumn;\r\n selectedRow: EFormRow;\r\n selectedControl: EFormControl;\r\n selectedElementType: string;\r\n isDevMode: boolean;\r\n\r\n constructor(\r\n private eformService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.eForm = this.eformService.selectedFormData;\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.selectedColumn = this.eFormDesignerService.selectedColumn;\r\n this.selectedRow = this.eFormDesignerService.selectedRow;\r\n this.selectedControl = this.eFormDesignerService.selectedControl;\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n this.isDevMode = this.loginService.LoginSettings.CustomizationDevMode;\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n this.selectedControl = this.eFormDesignerService.selectedControl;\r\n this.selectedRow = this.eFormDesignerService.selectedRow;\r\n this.selectedColumn = this.eFormDesignerService.selectedColumn;\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n }));\r\n }\r\n\r\n dropTab(event: CdkDragDrop) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n this.eFormDesignerService.observableTabNameChanged.next(true);\r\n }\r\n\r\n dropPage(event: CdkDragDrop) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n toggleNode(node: any) {\r\n node.Expanded = !node.Expanded;\r\n event.stopPropagation();\r\n }\r\n\r\n tabClick(tab: EFormTab) {\r\n this.eFormDesignerService.focusOnTab(tab);\r\n }\r\n\r\n pageClick(page: EFormPage) {\r\n this.eFormDesignerService.focusOnPage(page);\r\n event.stopPropagation();\r\n }\r\n\r\n columnClick(col: EFormColumn) {\r\n this.eFormDesignerService.focusOnColumn(col);\r\n event.stopPropagation();\r\n }\r\n\r\n rowClick(row: EFormRow) {\r\n this.eFormDesignerService.focusOnRow(row);\r\n event.stopPropagation();\r\n }\r\n\r\n controlClick(control: EFormControl) {\r\n this.eFormDesignerService.focusOnControl(control);\r\n event.stopPropagation();\r\n }\r\n\r\n editClick() {\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n deleteClick(type: string) {\r\n setTimeout(() => {\r\n if (type.toLowerCase() == 'tab' && this.eformService.selectedFormData.Tabs.length == 1) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n deleteConfirmDialog.componentInstance.headerLabel = 'WARNING';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Cannot delete last tab. Create a new tab first.';\r\n }\r\n else {\r\n // check for controls that cannot be removed from form\r\n let hasNonRemovableControls = false;\r\n let canDelete = true;\r\n if (type == 'Control') {\r\n hasNonRemovableControls = this.eFormDesignerService.selectedControl.CannotBeRemoved;\r\n }\r\n else if (type == 'Row') {\r\n hasNonRemovableControls = this.eFormDesignerService.rowHasNonRemovableControls(this.eFormDesignerService.selectedRow);\r\n }\r\n else if (type == 'Column') {\r\n if (!this.eFormDesignerService.canDeleteColumn(this.eFormDesignerService.selectedColumn)) {\r\n canDelete = false;\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n deleteConfirmDialog.componentInstance.headerLabel = 'WARNING';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'You cannot remove the last column on a page.';\r\n }\r\n else {\r\n hasNonRemovableControls = this.eFormDesignerService.columnHasNonRemovableControls(this.eFormDesignerService.selectedColumn);\r\n }\r\n }\r\n else if (type == 'Page') {\r\n if (!this.eFormDesignerService.canDeletePage(this.eFormDesignerService.selectedPage)) {\r\n canDelete = false;\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n deleteConfirmDialog.componentInstance.headerLabel = 'WARNING';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'You cannot remove the last page in a tab.';\r\n }\r\n else {\r\n hasNonRemovableControls = this.eFormDesignerService.pageHasNonRemovableControls(this.eFormDesignerService.selectedPage);\r\n }\r\n }\r\n else if (type == 'Tab') {\r\n hasNonRemovableControls = this.eFormDesignerService.tabHasNonRemovableControls(this.eFormDesignerService.selectedTab);\r\n }\r\n\r\n if (hasNonRemovableControls && (!this.isDevMode || !this.config.BasePage)) {\r\n const headerLabel = 'Delete ' + type;\r\n let message = '';\r\n if (type == 'Control') {\r\n message = 'This control cannot be removed.';\r\n }\r\n else {\r\n message = 'This ' + type + ' contains controls that cannot be removed.';\r\n }\r\n\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = headerLabel;\r\n deleteConfirmDialog.componentInstance.confirmMessage = message;\r\n deleteConfirmDialog.componentInstance.informational = true;\r\n }\r\n else if (canDelete) {\r\n const headerLabel = 'Delete ' + type;\r\n let message = '';\r\n if (type == 'Control') {\r\n message = 'Are you sure you want to delete this control?';\r\n }\r\n else {\r\n message = 'Are you sure you want to delete this ' + type + ' and all its content?';\r\n }\r\n\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = headerLabel;\r\n deleteConfirmDialog.componentInstance.confirmMessage = message;\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.eFormDesignerService.deleteSelectedElement();\r\n if (type.toLowerCase() == 'page' && this.eFormDesignerService.selectedTab.Pages.length <= 0) {\r\n this.tabClick(this.eFormDesignerService.selectedTab);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n copyRowClick() {\r\n this.eFormDesignerService.locationToAdd = '';\r\n const copyConfirmDialog = this.dialog.open(EFormRrowColumnLocationComponent, {\r\n disableClose: true,\r\n });\r\n copyConfirmDialog.componentInstance.headerLabel = 'Copy Row';\r\n copyConfirmDialog.componentInstance.cotrolType = 'row';\r\n this.subscriptions.push(copyConfirmDialog.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.eFormDesignerService.locationToAdd = result;\r\n this.eFormDesignerService.addRow(false);\r\n }\r\n else {\r\n this.eFormDesignerService.locationToAdd = '';\r\n }\r\n }));\r\n }\r\n\r\n copyColumnClick() {\r\n this.eFormDesignerService.locationToAdd = '';\r\n const copyConfirmDialog = this.dialog.open(EFormRrowColumnLocationComponent, {\r\n disableClose: true,\r\n });\r\n copyConfirmDialog.componentInstance.headerLabel = 'Copy Column';\r\n copyConfirmDialog.componentInstance.cotrolType = 'column';\r\n this.subscriptions.push(copyConfirmDialog.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.eFormDesignerService.locationToAdd = result;\r\n this.eFormDesignerService.addColumn(this.config);\r\n }\r\n else {\r\n this.eFormDesignerService.locationToAdd = '';\r\n }\r\n }));\r\n }\r\n\r\n\r\n\r\n}\r\n","
\r\n \"Show\"\r\n \"Hide\"\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
","import { Component, OnInit, EventEmitter, Input, Output, ViewChild, OnDestroy } from '@angular/core';\r\nimport { TabsComponent } from '../../../../shared-components/controls/tabs/tabs.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'e-form-side-panel',\r\n templateUrl: './e-form-side-panel.component.html',\r\n styleUrls: ['./e-form-side-panel.component.css']\r\n})\r\nexport class EFormSidePanelComponent implements OnInit, OnDestroy {\r\n\r\n @Input() showSlideOutPanel: boolean;\r\n @Input() config = new EFormConfiguration();\r\n @Output() showSlideOutPanelChange: EventEmitter = new EventEmitter();\r\n @ViewChild(TabsComponent) tabs: TabsComponent;\r\n tabNames = ['Controls', 'Properties', 'Tree View'];\r\n selectedTab = 'Controls';\r\n subscriptions: Subscription[] = [];\r\n constructor(\r\n private eFormDesignerService: EFormDesignerService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.subscriptions.push(this.eFormDesignerService.observableOpenPropertiesTabStream$.subscribe(result => {\r\n if (this.selectedTab != 'Properties') {\r\n this.selectedTab = 'Properties';\r\n this.tabs.clickTabWithoutEvents(this.selectedTab);\r\n }\r\n }));\r\n \r\n this.subscriptions.push(this.eFormDesignerService.observableOpenControlTabStream$.subscribe(result => {\r\n if (this.selectedTab == 'Properties') {\r\n this.selectedTab = 'Controls';\r\n this.tabs.clickTabWithoutEvents(this.selectedTab);\r\n }\r\n }));\r\n }\r\n\r\n closeSlideOutPanel() {\r\n this.showSlideOutPanel = !this.showSlideOutPanel; \r\n this.eFormDesignerService.observableshowSliderPanel.next(this.showSlideOutPanel); \r\n }\r\n\r\n selectedTabChanged(tabName: string) {\r\n this.selectedTab = tabName;\r\n this.eFormDesignerService.observableshowSliderPanelWidth.next(this.selectedTab); \r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n}\r\n","\r\n
\r\n
\r\n
Template Editor
\r\n
Design Page Editor
\r\n
Custom Page Editor
\r\n
{{config.Title}}
\r\n
e-Form Editor
\r\n
\r\n
\r\n
\r\n
\r\n {{config.ViewMode == 'frma' ? '' : config.Title}}\r\n
\r\n
\r\n
\r\n
{{config.InformationalMessage}}
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{selectedPage.Name}}\r\n
\r\n
\r\n Page {{selectedPageNumber}} of {{selectedTab.Pages.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
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n","import { Component, OnInit, ViewChildren, QueryList, AfterViewInit, OnDestroy, ViewChild, Inject, Output, EventEmitter } from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { EFormTab } from '../../../shared-components/e-forms/e-form-tab.model';\r\nimport { EFormPage } from '../../../shared-components/e-forms/e-form-page.model';\r\nimport { EFormColumn } from '../../../shared-components/e-forms/e-form-column.model';\r\nimport { EFormColumnComponent } from './e-form-column/e-form-column.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { TabsComponent } from '../../../shared-components/controls/tabs/tabs.component';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { EFormAttachment } from '../../../shared-components/e-forms/e-form-attachment.model';\r\nimport { EFormDataObject } from '../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { EFormControl } from '../../../shared-components/e-forms/e-form-control.model';\r\nimport { MergeFieldDialogComponent } from './merge-field-dialog/merge-field-dialog.component';\r\nimport { cloneDeep } from 'lodash';\r\nimport { EFormTemplate } from '../../../shared-components/e-forms/e-form-template.model';\r\nimport { EFormChangeHistory } from '../../../shared-components/e-forms/e-form-change-history.model';\r\nimport { EFormTemplateInUseWarningComponent } from './e-form-template-in-use-warning/e-form-template-in-use-warning.component';\r\nimport { EFormInstance } from '../../../shared-components/e-forms/e-form-instance.model';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../shared-components/e-forms/e-form-config.model';\r\nimport { EFormDesignerService } from './e-form-designer.service';\r\nimport { EFormViewerModalComponent } from '../e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component';\r\nimport { CustomDesignPage } from '../../../admin360/customization/models/custom-design-page.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { EFormSurveyField } from '../e-form-survey-field.model';\r\nimport { EFormSurveyFieldCriticalValue } from '../e-form-survey-field-critical-value.model';\r\nimport { EFormRow } from '../e-form-row.model';\r\nimport { CustomizationFrameworkService } from '../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { CdkDrag, CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { YearService } from '../../year/year.service';\r\nimport { EFormFormatWarningComponent } from './e-form-format-warning/e-form-format-warning.component';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-designer',\r\n templateUrl: './e-form-designer.component.html',\r\n styleUrls: ['./e-form-designer.component.css']\r\n})\r\nexport class EFormDesignerComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @Output() saveEvent = new EventEmitter();\r\n @Output() closeEvent = new EventEmitter();\r\n\r\n template: EFormTemplate;\r\n instance: EFormInstance;\r\n page: CustomDesignPage;\r\n eform: EFormDataObject;\r\n originalFormData: EFormDataObject;\r\n tabNames: string[] = [];\r\n selectedTab: EFormTab;\r\n selectedPage: EFormPage;\r\n selectedPageNumber: number;\r\n pageSelected: boolean;\r\n tabSelected: boolean;\r\n // selectedColumn: EFormColumn;\r\n selectedElementType: string;\r\n showSlideOutPanel = true;\r\n tabsLocked = false;\r\n attachmentChanges: EFormChangeHistory[] = [];\r\n config: EFormConfiguration;\r\n showBasePageCB: boolean;\r\n overwriteBasePage = false;\r\n\r\n @ViewChildren(EFormColumnComponent) columns: QueryList;\r\n @ViewChild(TabsComponent) tabs: TabsComponent;\r\n linkedColumnDropLists: string[] = [];\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n\r\n isFP = true;\r\n isLP = true;\r\n\r\n showSliderPanelValue = true;\r\n tabName = 'Controls';\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private sharedService: SharedService,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private yearService: YearService\r\n ) {\r\n this.config = data.config ? data.config : new EFormConfiguration();\r\n if (data && data.basePage) {\r\n this.overwriteBasePage = data.basePage;\r\n this.config.BasePage = data.basePage;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.config) {\r\n this.config = new EFormConfiguration();\r\n }\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n this.template = this.eFormService.selectedTemplate;\r\n this.config.IsSurvey = this.template.IsSurvey;\r\n this.config.IsMobile = this.template.IsMobile;\r\n this.config.Title = this.template.Name;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n this.page = this.eFormService.selectedDesignPage;\r\n this.config.CSTObjectID = this.page.ObjectID;\r\n this.config.Title = this.page.Name;\r\n this.config.IsDynamicWidth = true;\r\n if (this.loginService.LoginSettings.CustomizationDevMode) {\r\n this.showBasePageCB = true;\r\n }\r\n else {\r\n this.overwriteBasePage = false;\r\n }\r\n this.getCustomFieldMetadata();\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.CustomPage) {\r\n this.getCustomFieldMetadata();\r\n this.config.IsDynamicWidth = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n\r\n }\r\n else {\r\n this.instance = this.eFormService.selectedInstance;\r\n this.config.IsSurvey = this.instance.IsSurvey;\r\n this.config.IsMobile = this.instance.IsMobile;\r\n this.config.Title = this.instance.Name;\r\n }\r\n if (this.config.IsMobile) {\r\n this.config.InformationalMessage = 'Because this template is available on the mobile application, additional columns may not be added, and each row is limited to two controls.';\r\n }\r\n this.eFormDesignerService.setUpForm(this.config);\r\n this.setUpCriticalChoices();\r\n this.eform = this.eFormService.selectedFormData;\r\n this.originalFormData = cloneDeep(this.eform);\r\n this.getTabs();\r\n this.subscriptions.push(this.eFormDesignerService.tabNameChangedEvent.subscribe(result => {\r\n this.getTabs();\r\n }));\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n this.selectedPageNumber = this.getSelectedPageNumber();\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n if (this.selectedTab != this.eFormDesignerService.selectedTab) {\r\n this.selectedTab = this.eFormDesignerService.selectedTab;\r\n const i = this.eform.Tabs.findIndex(t => t == this.selectedTab);\r\n this.tabs.selectedIndexChange(i);\r\n }\r\n this.selectedPage = this.eFormDesignerService.selectedPage;\r\n this.selectedPageNumber = this.getSelectedPageNumber();\r\n this.selectedElementType = this.eFormDesignerService.selectedElementType;\r\n\r\n switch (this.selectedElementType.toLowerCase()) {\r\n case 'page':\r\n this.pageSelected = true;\r\n this.tabSelected = false;\r\n this.isLastPage();\r\n this.isFirstPage();\r\n break;\r\n case 'tab':\r\n this.pageSelected = false;\r\n this.tabSelected = true;\r\n break;\r\n default:\r\n this.pageSelected = false;\r\n this.tabSelected = false;\r\n break;\r\n }\r\n }));\r\n\r\n if (!this.eFormService.databaseFields || this.eFormService.databaseFields.length == 0) {\r\n this.subscriptions.push(this.eFormService.getEFormDatabaseFields().subscribe(fields => {\r\n this.eFormService.databaseFields = fields;\r\n this.eFormService.observableDatabaseFields.next(fields);\r\n }));\r\n }\r\n if (!this.customizationFrameworkService.customDataFields || this.customizationFrameworkService.customDataFields.length == 0) {\r\n this.subscriptions.push(this.customizationFrameworkService.getCustomDataFields(this.yearService.defaultYear.Id, this.yearService.defaultYear.SiteYearId).subscribe(fields => {\r\n this.customizationFrameworkService.customDataFields = fields;\r\n this.customizationFrameworkService.observableFieldMetaDataRetrieved.next(fields);\r\n }));\r\n }\r\n this.eFormDesignerService.treeViewExpandAll(true);\r\n\r\n this.isLastPage();\r\n this.isFirstPage();\r\n\r\n this.eFormDesignerService.observableshowSliderPanelStream$.subscribe(Value => {\r\n this.showSliderPanelValue = Value;\r\n });\r\n this.eFormDesignerService.observableshowSliderPanelWidthStream$.subscribe(tabName => {\r\n this.tabName = tabName;\r\n });\r\n this.subscriptions.push(this.eFormDesignerService.observableSelectedPageChangedStream$.subscribe(o => {\r\n this.isLastPage();\r\n this.isFirstPage();\r\n }));\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n getCustomFieldMetadata() {\r\n if (this.config.CSTObjectID) {\r\n this.sharedService.getCustomDataFieldsByObjectID(this.config.CSTObjectID).pipe(take(1)).subscribe( results => {\r\n if (results) {\r\n this.eFormDesignerService.availableCSTFields = results;\r\n results.forEach(field => {\r\n if (!this.customizationFrameworkService.customDataFields.find(o => o.FieldName == field.FieldName)) {\r\n this.customizationFrameworkService.customDataFields.push(field);\r\n }\r\n this.customizationFrameworkService.observableFieldMetaDataRetrieved.next();\r\n });\r\n }\r\n else {\r\n this.eFormDesignerService.availableCSTFields = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n getSelectedPageNumber(): number {\r\n let pageIndex = this.selectedTab.Pages.findIndex(o => o.Name == this.selectedPage.Name && o.Id == this.selectedPage.Id);\r\n\r\n if (pageIndex == -1) {\r\n pageIndex = this.selectedTab.Pages.findIndex(o => o.Id == this.selectedPage.Id);\r\n }\r\n\r\n return pageIndex != -1 ? pageIndex + 1 : pageIndex;\r\n }\r\n\r\n checkForWarnings() {\r\n if (this.config.ViewMode == enmEFormViewModes.Template || this.config.ViewMode == enmEFormViewModes.Instance) {\r\n let showDropdownWarning: boolean = this.eFormDesignerService.masterControlList && this.eFormDesignerService.masterControlList.filter( control => control.ControlType == 'dropdown').length > 0;\r\n let showTextboxWarning: boolean = this.eFormDesignerService.masterControlList && this.eFormDesignerService.masterControlList.filter( control => control.ControlType == 'textbox').length > 0;\r\n\r\n if(showDropdownWarning || showTextboxWarning) {\r\n const warningDialog = this.dialog.open(EFormFormatWarningComponent, {\r\n disableClose: true,\r\n width: '500px',\r\n data: {\r\n showDropdownWarning: showDropdownWarning,\r\n showTextboxWarning: showTextboxWarning\r\n }\r\n });\r\n \r\n warningDialog.afterClosed().subscribe(confirmation => {\r\n if(confirmation) {\r\n this.saveClick(true);\r\n }\r\n }); \r\n }\r\n else {\r\n this.saveClick(true);\r\n }\r\n }\r\n else {\r\n this.saveClick(true);\r\n }\r\n }\r\n\r\n saveClick(closeOnSave: boolean) {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n // if (this.formType == 'template' && (this.config.ParentHandlesSave)) {\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n if (this.template.InUse) {\r\n this.showTemplateInUseWarning(closeOnSave);\r\n }\r\n else {\r\n this.updateAttachments(() => {\r\n this.updateSurveyFields(() => {\r\n this.saveTemplate(closeOnSave);\r\n });\r\n });\r\n }\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n this.saveDesignPage(closeOnSave);\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.CustomPage) {\r\n this.updateAttachments(() => {\r\n this.saveCustomPage(closeOnSave);\r\n });\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n this.updateAttachments(() => {\r\n this.saveFrmaPage(closeOnSave);\r\n });\r\n }\r\n else {\r\n this.updateAttachments(() => {\r\n this.updateSurveyFields(() => {\r\n this.saveInstance(closeOnSave);\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n showTemplateInUseWarning(closeOnSave: boolean) {\r\n const warningDialog = this.dialog.open(EFormTemplateInUseWarningComponent, {\r\n disableClose: true,\r\n width: '500px',\r\n data: {\r\n template: this.template\r\n }\r\n });\r\n\r\n warningDialog.afterClosed().subscribe(confirmation => {\r\n if (confirmation) {\r\n this.updateAttachments(() => {\r\n this.updateSurveyFields(() => {\r\n this.saveTemplate(closeOnSave);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n saveTemplate(closeOnSave: boolean) {\r\n const selectedTemplate = this.eFormService.selectedTemplate;\r\n const eForm = cloneDeep(this.eform);\r\n const formControls = this.eFormService.getAllFormControls(eForm);\r\n formControls.forEach(c => c.Attachment = null);\r\n const formData = JSON.stringify(eForm);\r\n selectedTemplate.FormData = formData;\r\n\r\n if (this.config && this.config.ParentHandlesSave) {\r\n // if (this.config) {\r\n this.saveEvent.emit('save');\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n }\r\n else {\r\n this.subscriptions.push(this.eFormService.saveTemplate(selectedTemplate).subscribe(result => {\r\n if (result) {\r\n this.template = result;\r\n if (selectedTemplate.InstancesExist) {\r\n this.saveChangeHistory(closeOnSave);\r\n }\r\n else {\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n else {\r\n this.sharedService.showGoodSnackbar();\r\n }\r\n }\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n }\r\n\r\n saveInstance(closeOnSave: boolean) {\r\n if (!this.eFormService.selectedInstance.StudentIds) {\r\n this.eFormService.selectedInstance.StudentIds = [];\r\n }\r\n const selectedInstance = this.eFormService.selectedInstance;\r\n const eForm = cloneDeep(this.eform);\r\n const formControls = this.eFormService.getAllFormControls(eForm);\r\n formControls.forEach(c => c.Attachment = null);\r\n const formData = JSON.stringify(eForm);\r\n selectedInstance.FormData = formData;\r\n if (this.config && this.config.ParentHandlesSave) {\r\n // if (this.config) {\r\n this.saveEvent.emit('save');\r\n }\r\n else {\r\n this.subscriptions.push(this.eFormService.saveInstance(selectedInstance).subscribe(result => {\r\n if (result) {\r\n this.instance = result;\r\n this.saveChangeHistory(closeOnSave);\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n }\r\n\r\n saveDesignPage(closeOnSave: boolean) {\r\n const selectedDesignPage = this.eFormService.selectedDesignPage;\r\n const eForm = cloneDeep(this.eform);\r\n const formControls = this.eFormService.getAllFormControls(eForm);\r\n formControls.forEach(c => c.Attachment = null);\r\n // for(let i = 0; i < formControls.length; i++ ) {\r\n // if(formControls[i].CustomFieldAllowControlToHandleOwnData) {\r\n // formControls[i].CustomFieldAllowControlToHandleOwnData = false;\r\n // }\r\n // };\r\n const formData = JSON.stringify(eForm);\r\n selectedDesignPage.FormData = formData;\r\n\r\n // if(this.config && this.config.ParentHandlesSave) {\r\n if (this.config) {\r\n this.saveEvent.emit(this.overwriteBasePage ? 'saveBasePage' : 'save');\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n }\r\n }\r\n\r\n saveCustomPage(closeOnSave: boolean) {\r\n const eForm = cloneDeep(this.eform);\r\n const formControls = this.eFormService.getAllFormControls(eForm);\r\n formControls.forEach(c => c.Attachment = null);\r\n\r\n const formData = JSON.stringify(eForm);\r\n\r\n this.saveEvent.emit(formData);\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n }\r\n\r\n saveFrmaPage(closeOnSave: boolean) {\r\n const eForm = cloneDeep(this.eform);\r\n const formControls = this.eFormService.getAllFormControls(eForm);\r\n formControls.forEach(c => c.Attachment = null);\r\n\r\n const formData = JSON.stringify(eForm);\r\n\r\n this.saveEvent.emit(formData);\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n this.eform.Tabs.forEach(tab => {\r\n const tabname = tab.Name ? tab.Name : '';\r\n if (!tabname) {\r\n const index = this.eform.Tabs.findIndex(o => o == tab);\r\n let fieldName = 'Tab';\r\n if (index) {\r\n fieldName = fieldName + ' #' + (index + 1);\r\n }\r\n this.errors.push({\r\n fieldName: fieldName,\r\n fieldRef: null,\r\n errorMsg: 'Tabs names cannot be blank.',\r\n clickCallback: () => {\r\n this.selectTab(tab);\r\n }\r\n });\r\n }\r\n if (!tab.Pages || tab.Pages.length == 0) {\r\n this.errors.push({\r\n fieldName: tabname,\r\n fieldRef: null,\r\n errorMsg: 'This tab does not have any pages.',\r\n clickCallback: () => {\r\n this.selectTab(tab);\r\n }\r\n });\r\n }\r\n if (tab.ParentObjectId > 0 && !tab.Condition) {\r\n this.errors.push({\r\n fieldName: tabname,\r\n fieldRef: null,\r\n errorMsg: 'Parent object is selected without a condition.',\r\n clickCallback: () => {\r\n this.selectTab(tab);\r\n }\r\n });\r\n }\r\n tab.Pages.forEach(page => {\r\n const pageName = page.Name ? page.Name : '';\r\n if ((!page.Columns || page.Columns.length == 0) && (!page.Rows || page.Rows.length == 0)) {\r\n this.errors.push({\r\n fieldName: pageName,\r\n fieldRef: null,\r\n errorMsg: 'This page does not have any content.',\r\n clickCallback: () => {\r\n this.selectPage(page);\r\n }\r\n });\r\n }\r\n if (page.ParentObjectId > 0 && !page.Condition) {\r\n this.errors.push({\r\n fieldName: pageName,\r\n fieldRef: null,\r\n errorMsg: 'Parent object is selected without a condition.',\r\n clickCallback: () => {\r\n this.selectPage(page);\r\n }\r\n });\r\n }\r\n if (page.Columns && page.Columns.length > 0) {\r\n for (let c = 0; c < page.Columns.length; c++) {\r\n if (this.config.IsMobile) {\r\n if (this.checkColumnForTooManyControls(page.Columns[c])) {\r\n this.errors.push({\r\n fieldName: pageName,\r\n fieldRef: null,\r\n errorMsg: 'Mobile forms cannot contain more than two controls per row.',\r\n clickCallback: () => {\r\n this.selectPage(page);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n if (this.config.AllowColumnWidth) {\r\n if (page.Columns[c].FixedWidth && !page.Columns[c].Width) {\r\n this.errors.push({\r\n fieldName: 'Column',\r\n fieldRef: null,\r\n errorMsg: 'Width is required.',\r\n clickCallback: () => {\r\n this.selectColumn(page.Columns[c]);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n });\r\n this.eFormDesignerService.masterControlList.forEach(control => {\r\n if (!control.Label && control.ControlType != this.eFormService.controlTypes.text && control.ControlType != this.eFormService.controlTypes.divider\r\n && control.ControlType != this.eFormService.controlTypes.verticalDivider) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Label is required.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n if (control.ParentObjectId > 0 && !control.Condition) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Parent object is selected without a condition.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n if (!control.CustomField && (control.ControlType == this.eFormService.controlTypes.buttons || control.ControlType == this.eFormService.controlTypes.dropdown || control.ControlType == this.eFormService.controlTypes.radioButtons)) {\r\n if (!control.DropdownOptions || control.DropdownOptions.length == 0) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'No choices are defined.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.dropdown) {\r\n if (control.DropdownOptions.find(o => !!o.CodeDescription) == null) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Must have at least one non-blank choice.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n if (control.DropdownOptions.find(o => !o.CodeDescription) != null) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Blank choices are not valid for radio buttons.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (control.DropdownOptions.length < 2) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Radio buttons require at least two choices.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (!control.Value) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'No default choice is defined.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.buttons) {\r\n if (control.DropdownOptions.find(o => !o.CodeDescription) != null) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Blank choices are not valid for buttons.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (control.DropdownOptions.length < 2) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Buttons require at least two choices.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.text) {\r\n if (!control.TextProvidedOnInstance && !control.Value) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'No text has been provided.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (control.TextProvidedOnInstance && !control.Instructions) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'No instructions have been provided.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n // if (!control.Width) {\r\n // this.errors.push({\r\n // fieldName: this.eFormService.formatControlNameForErrors(control),\r\n // fieldRef: null,\r\n // errorMsg: 'Width must be selected.',\r\n // clickCallback: () => {\r\n // this.selectControl(control);\r\n // }\r\n // });\r\n // }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.image) {\r\n if (!control.Attachment && !control.AttachmentId) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Image has not been provided.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.linkToFile) {\r\n if ((!control.Attachment || !control.Attachment.FileDataBase64) && !control.TextProvidedOnInstance && !control.AttachmentId) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'File has not been provided.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.attachment) {\r\n if (control.StoreLocation == 'student portfolio' && (!control.StuPortCategoryId || control.StuPortCategoryId <= 0)) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Student Portfolio Category is required.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n else if (control.StoreLocation == 'student digital content' && (!control.FormDocTypeId || control.FormDocTypeId <= 0)) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Document Type is required.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.ControlType == this.eFormService.controlTypes.note) {\r\n if (!control.Width) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Width must be selected.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n if (!control.NoteRows || control.NoteRows <= 0) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Height must be selected.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n }\r\n else if (control.CustomField && control.ControlType != 'component' && !control.CustomFieldName) {\r\n this.errors.push({\r\n fieldName: this.eFormService.formatControlNameForErrors(control),\r\n fieldRef: null,\r\n errorMsg: 'Custom Field is required.',\r\n clickCallback: () => {\r\n this.selectControl(control);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n checkColumnForTooManyControls(col: EFormColumn): boolean {\r\n if (col.Rows && col.Rows.length > 0) {\r\n for (let i = 0; i < col.Rows.length; i++) {\r\n if (this.rowHasMoreThanTwoControls(col.Rows[i])) {\r\n return true;\r\n }\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n rowHasMoreThanTwoControls(row: EFormRow): boolean {\r\n let hasTooManyControls = false;\r\n if (row.Controls && row.Controls.length > 2) {\r\n hasTooManyControls = true;\r\n }\r\n else if (row.Columns && row.Columns.length > 0) {\r\n for (let i = 0; i < row.Columns.length; i++) {\r\n if (this.checkColumnForTooManyControls(row.Columns[i])) {\r\n hasTooManyControls = true;\r\n break;\r\n }\r\n }\r\n }\r\n return hasTooManyControls;\r\n }\r\n\r\n updateAttachments(_callback) {\r\n this.attachmentChanges = [];\r\n // const attachmentsToDelete: number[] = [];\r\n const newAttachments: EFormAttachment[] = [];\r\n this.eFormDesignerService.masterControlList.forEach(control => {\r\n // if (control.PreviousAttachmentId && control.PreviousAttachmentId != control.AttachmentId) {\r\n // attachmentsToDelete.push(control.PreviousAttachmentId);\r\n // }\r\n if (!control.AttachmentId && control.Attachment && control.Attachment.FileDataBase64) {\r\n newAttachments.push(control.Attachment);\r\n }\r\n });\r\n // if (attachmentsToDelete.length > 0) {\r\n // this.deleteAttachments(attachmentsToDelete);\r\n // }\r\n if (newAttachments.length > 0) {\r\n this.saveAttachments(newAttachments, _callback);\r\n }\r\n else {\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n }\r\n\r\n updateSurveyFields(_callback: Function) {\r\n const allControls = this.eFormDesignerService.masterControlList;\r\n const surveyFields: EFormSurveyField[] = [];\r\n if (this.config.IsSurvey) {\r\n allControls.forEach(c => {\r\n if (this.eFormService.inputControlTypes.includes(c.ControlType) && c.ControlType != this.eFormService.controlTypes.attachment) {\r\n const sf = new EFormSurveyField();\r\n sf.ID = c.SurveyFieldID;\r\n sf.ForTemplate = (this.config.ViewMode == enmEFormViewModes.Template);\r\n sf.TemplateID = this.config.ViewMode == enmEFormViewModes.Template ? this.template.ID : null;\r\n sf.InstanceID = this.config.ViewMode == enmEFormViewModes.Template ? null : this.instance.ID;\r\n sf.QuestionText = c.Label;\r\n sf.ControlType = c.ControlType;\r\n sf.IsRequired = c.IsRequired;\r\n sf.EFormControlID = c.Id;\r\n sf.CriticalValues = [];\r\n sf.IsSelectionControl = (c.ControlType == this.eFormService.controlTypes.dropdown || c.ControlType == this.eFormService.controlTypes.buttons || c.ControlType == this.eFormService.controlTypes.radioButtons || c.ControlType == this.eFormService.controlTypes.checkbox);\r\n if (c.ControlType == this.eFormService.controlTypes.checkbox) {\r\n sf.CriticalQuestion = c.IsCritical;\r\n if (c.IsCritical) {\r\n const critVal = new EFormSurveyFieldCriticalValue();\r\n critVal.SurveyFieldID = sf.ID;\r\n critVal.Value = 'checked';\r\n sf.CriticalValues.push(critVal);\r\n }\r\n }\r\n else if (c.ControlType == this.eFormService.controlTypes.dropdown || c.ControlType == this.eFormService.controlTypes.buttons || c.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n sf.CriticalQuestion = true;\r\n c.IsCritical = true;\r\n }\r\n else {\r\n sf.CriticalQuestion = false;\r\n }\r\n\r\n c.DropdownOptions.forEach(val => {\r\n if (val.IsCritical) {\r\n const critVal = new EFormSurveyFieldCriticalValue();\r\n critVal.SurveyFieldID = sf.ID;\r\n critVal.Value = val.CodeDescription;\r\n sf.CriticalValues.push(critVal);\r\n }\r\n });\r\n surveyFields.push(sf);\r\n }\r\n });\r\n this.eFormService.saveEFormSurveyFields(surveyFields).pipe(take(1)).subscribe(fields => {\r\n fields.forEach( f => {\r\n const cnt = allControls.find(o => o.Id == f.EFormControlID);\r\n if (cnt) {\r\n cnt.SurveyFieldID = f.ID;\r\n }\r\n });\r\n if (_callback) {\r\n _callback();\r\n }\r\n });\r\n }\r\n else {\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n }\r\n\r\n selectControl(control: EFormControl) {\r\n this.eFormDesignerService.focusOnControl(control);\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n selectColumn(col: EFormColumn) {\r\n this.eFormDesignerService.focusOnColumn(col);\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n selectPage(page: EFormPage) {\r\n this.eFormDesignerService.focusOnPage(page);\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n selectTab(tab: EFormTab) {\r\n this.eFormDesignerService.focusOnTab(tab);\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n deleteAttachments(attachmentIds: number[]) {\r\n this.subscriptions.push(this.eFormService.deleteEFormAttachments(attachmentIds).subscribe(() => { }));\r\n }\r\n\r\n saveAttachments(attachments: EFormAttachment[], _callback) {\r\n this.subscriptions.push(this.eFormService.saveEFormAttachments(attachments).subscribe(result => {\r\n if (result && result.length == attachments.length) {\r\n for (let i = 0; i < result.length; i++) {\r\n const newAttachment = result[i];\r\n const oldAttachment = attachments[i];\r\n const control = this.eFormDesignerService.masterControlList.find(o => o.Attachment == oldAttachment);\r\n if (control) {\r\n control.AttachmentId = newAttachment.ID;\r\n }\r\n }\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n\r\n clearAttachments() {\r\n this.eFormDesignerService.masterControlList.forEach(control => {\r\n control.Attachment = null;\r\n });\r\n }\r\n\r\n cancelClick() {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(false);\r\n }\r\n this.closeEvent.emit(false);\r\n }\r\n\r\n getTabs() {\r\n this.tabNames = [];\r\n this.eform.Tabs.forEach(tab => {\r\n this.tabNames.push(tab.Name);\r\n });\r\n if (this.tabNames.length > 0 && !this.selectedTab) {\r\n this.tabClick(this.tabNames[0]);\r\n }\r\n }\r\n\r\n tabClick(tabName: string) {\r\n const selectedTab = this.eform.Tabs.find(o => o.Name == tabName);\r\n\r\n if (this.selectedTab != selectedTab) {\r\n this.eFormDesignerService.focusOnTab(selectedTab);\r\n\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n }\r\n\r\n // mat-tab only triggers on tab change so tabClick() will not focus property side panel on Tab if the user is already on that tab\r\n // added this call to always have property focus on tab click\r\n setFocusOnTabClick() {\r\n this.eFormDesignerService.focusOnTab(this.selectedTab);\r\n }\r\n\r\n previousClick() {\r\n // this.validate();\r\n if (this.errors.length == 0) {\r\n if (this.selectedTab && this.selectedPage) {\r\n let index = this.selectedTab.Pages.findIndex(o => o.Name == this.selectedPage.Name && o.Id == this.selectedPage.Id);\r\n if (index > 0) {\r\n index = index - 1;\r\n this.eFormDesignerService.focusOnPage(this.selectedTab.Pages[index]);\r\n }\r\n else {\r\n index = this.eform.Tabs.findIndex(o => o.Name == this.selectedTab.Name);\r\n if (index > 0) {\r\n index = index - 1;\r\n const newTab = this.eform.Tabs[index];\r\n const pageIndex = newTab.Pages.length - 1;\r\n if (pageIndex >= 0) {\r\n this.eFormDesignerService.focusOnPage(newTab.Pages[pageIndex]);\r\n }\r\n else {\r\n this.eFormDesignerService.focusOnTab(newTab);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.isLastPage();\r\n this.isFirstPage();\r\n }\r\n\r\n nextClick() {\r\n // this.validate();\r\n if (this.errors.length == 0) {\r\n if (this.selectedTab && this.selectedPage) {\r\n let index = this.selectedTab.Pages.findIndex(o => o == this.selectedPage);\r\n const lastPageIndex = this.selectedTab.Pages.length - 1;\r\n if (index >= 0 && index < lastPageIndex) {\r\n index = index + 1;\r\n this.eFormDesignerService.focusOnPage(this.selectedTab.Pages[index]);\r\n }\r\n else {\r\n index = this.eform.Tabs.findIndex(o => o == this.selectedTab);\r\n const lastTabIndex = this.eform.Tabs.length - 1;\r\n if (index >= 0 && index < lastTabIndex) {\r\n index = index + 1;\r\n if (this.eform.Tabs[index].Pages.length > 0) {\r\n this.eFormDesignerService.focusOnPage(this.eform.Tabs[index].Pages[0]);\r\n }\r\n else {\r\n this.eFormDesignerService.focusOnTab(this.eform.Tabs[index]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.isLastPage();\r\n this.isFirstPage();\r\n }\r\n\r\n isFirstPage() {\r\n this.isFP = true;\r\n if (this.selectedPage && this.eform && this.eform.Tabs && this.eform.Tabs.length > 0 && this.eform.Tabs[0].Pages && this.eform.Tabs[0].Pages.length > 0) {\r\n const firstPage = this.eform.Tabs[0].Pages[0];\r\n if (this.selectedPage.Id != firstPage.Id) {\r\n this.isFP = false;\r\n }\r\n }\r\n }\r\n\r\n isLastPage() {\r\n this.isLP = true;\r\n if (this.selectedPage && this.eform && this.eform.Tabs && this.eform.Tabs.length > 0) {\r\n const lastTab = this.eform.Tabs[this.eform.Tabs.length - 1];\r\n if (lastTab.Pages && lastTab.Pages.length > 0) {\r\n const lastPage = lastTab.Pages[lastTab.Pages.length - 1];\r\n if (this.selectedPage.Id != lastPage.Id) {\r\n this.isLP = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n columnClick(column: EFormColumn) {\r\n\r\n }\r\n\r\n addRowClick() {\r\n this.eFormDesignerService.addRow(this.config.IsMobile);\r\n }\r\n\r\n addColumnClick() {\r\n this.eFormDesignerService.addColumn(this.config);\r\n }\r\n\r\n addControlClick() {\r\n this.eFormDesignerService.addControl(this.config);\r\n }\r\n\r\n addTabClick() {\r\n this.eFormDesignerService.addTab(this.config);\r\n this.isLastPage();\r\n this.isFirstPage();\r\n }\r\n\r\n addPageClick() {\r\n this.eFormDesignerService.addPage(this.config);\r\n this.isLastPage();\r\n this.isFirstPage();\r\n }\r\n\r\n deleteElementClick() {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'WARNING';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this ' + this.selectedElementType + '?';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.eFormDesignerService.deleteSelectedElement();\r\n }\r\n });\r\n }\r\n\r\n moveClick(direction: string) {\r\n this.eFormDesignerService.moveElement(direction);\r\n }\r\n\r\n previewClick() {\r\n const config = new EFormConfiguration();\r\n config.ViewMode = enmEFormViewModes.Template;\r\n config.Title = this.config.Title;\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n config.Title = this.template.Name;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n config.Title = this.page.Name;\r\n config.ViewMode = enmEFormViewModes.Page;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.CustomPage) {\r\n config.ViewMode = enmEFormViewModes.CustomPage;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n config.ViewMode = enmEFormViewModes.FRMA;\r\n }\r\n else {\r\n config.Title = this.instance.Name;\r\n }\r\n config.AllowConditionalObjects = this.config.AllowConditionalObjects;\r\n config.AllowTabs = this.config.AllowTabs;\r\n config.AllowPages = this.config.AllowPages;\r\n config.AllowInstanceSpecificText = this.config.AllowInstanceSpecificText;\r\n const previewDialog = this.dialog.open(EFormViewerModalComponent, {\r\n disableClose: true,\r\n height: '100vh',\r\n minWidth: '900px',\r\n data: {\r\n config: config\r\n }\r\n });\r\n }\r\n\r\n mobilePreviewClick() {\r\n const config = new EFormConfiguration();\r\n config.ViewMode = enmEFormViewModes.Template;\r\n\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n config.Title = this.template.Name;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n config.Title = this.page.Name;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.CustomPage) {\r\n\r\n }\r\n else {\r\n config.Title = this.instance.Name;\r\n }\r\n config.InformationalMessage = 'This view approximates what the form will look like on a mobile device. The actual form may look different, depending on the device and operating system.';\r\n config.IsMobilePreview = true;\r\n config.AllowConditionalObjects = this.config.AllowConditionalObjects;\r\n config.AllowTabs = this.config.AllowTabs;\r\n config.AllowPages = this.config.AllowPages;\r\n config.AllowInstanceSpecificText = this.config.AllowInstanceSpecificText;\r\n const previewDialog = this.dialog.open(EFormViewerModalComponent, {\r\n disableClose: true,\r\n height: '100vh',\r\n width: '390px',\r\n data: {\r\n config: config\r\n }\r\n });\r\n }\r\n\r\n displayMergeFields() {\r\n const mergeFieldDialog = this.dialog.open(MergeFieldDialogComponent, {\r\n height: '80vh',\r\n minWidth: '200px',\r\n hasBackdrop: false,\r\n disableClose: true,\r\n data: {\r\n config: this.config,\r\n allowStudentSpecificMergeFields: this.data.allowStudentSpecificMergeFields,\r\n allowAdultSpecificMergeFields: this.data.allowAdultSpecificMergeFields\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.eFormDesignerService.closeMergeFieldWindow();\r\n }\r\n\r\n saveChangeHistory(closeOnSave: Boolean) {\r\n const changes: EFormChangeHistory[] = [];\r\n const oldFields = this.eFormService.getAllFormControls(this.originalFormData);\r\n const newFields = this.eFormDesignerService.masterControlList;\r\n const oldTabs = this.originalFormData.Tabs;\r\n const newTabs = this.eform.Tabs;\r\n oldTabs.forEach(oldTab => {\r\n const newTab = newTabs.find(o => o.Id == oldTab.Id);\r\n if (newTab) {\r\n if (newTab.Name != oldTab.Name) {\r\n changes.push(this.getElementChange(oldTab.Id, oldTab.Name, 'Name', 'Tab', 'English', oldTab.Name, newTab.Name));\r\n }\r\n if (oldTab.ParentObjectId != newTab.ParentObjectId) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldTab.ParentObjectId > 0) {\r\n const oldParent = oldFields.find(o => o.Id == oldTab.ParentObjectId);\r\n if (oldParent) {\r\n oldVal = this.eFormService.formatControlName(oldParent);\r\n }\r\n const newParent = newFields.find(o => o.Id == newParent.Id);\r\n if (newParent) {\r\n newVal = this.eFormService.formatControlName(newParent);\r\n }\r\n }\r\n changes.push(this.getElementChange(oldTab.Id, oldTab.Name, 'Conditional Object', 'Tab', 'English', oldVal, newVal));\r\n }\r\n if (oldTab.Condition != newTab.Condition) {\r\n const oldVal = oldTab.Condition ? oldTab.Condition.toString() : '';\r\n const newVal = newTab.Condition ? newTab.Condition.toString() : '';\r\n changes.push(this.getElementChange(oldTab.Id, oldTab.Name, 'Condition', 'Tab', 'English', oldVal, newVal));\r\n }\r\n oldTab.Pages.forEach(oldPage => {\r\n const newPage = newTab.Pages.find(o => o.Id == oldPage.Id);\r\n if (newPage) {\r\n if (newPage.Name != oldPage.Name) {\r\n changes.push(this.getElementChange(oldPage.Id, oldPage.Name, 'Name', 'Page', 'English', oldPage.Name, newPage.Name));\r\n }\r\n if (oldPage.ParentObjectId != newPage.ParentObjectId) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldPage.ParentObjectId > 0) {\r\n const oldParent = oldFields.find(o => o.Id == oldPage.ParentObjectId);\r\n if (oldParent) {\r\n oldVal = this.eFormService.formatControlName(oldParent);\r\n }\r\n const newParent = newFields.find(o => o.Id == newParent.Id);\r\n if (newParent) {\r\n newVal = this.eFormService.formatControlName(newParent);\r\n }\r\n }\r\n changes.push(this.getElementChange(oldPage.Id, oldPage.Name, 'Conditional Object', 'Page', 'English', oldVal, newVal));\r\n }\r\n if (oldPage.Condition != newPage.Condition) {\r\n const oldVal = oldPage.Condition ? oldPage.Condition.toString() : '';\r\n const newVal = newPage.Condition ? newPage.Condition.toString() : '';\r\n changes.push(this.getElementChange(oldPage.Id, oldPage.Name, 'Condition', 'Page', 'English', oldVal, newVal));\r\n }\r\n }\r\n else {\r\n changes.push(this.getElementChange(oldPage.Id, oldPage.Name, 'Conditional Object', 'Page', 'English', oldPage.Name, ''));\r\n }\r\n });\r\n newTab.Pages.forEach(newPage => {\r\n const oldPage = oldTab.Pages.find(o => o.Id == newPage.Id);\r\n if (!oldPage) {\r\n changes.push(this.getElementChange(newPage.Id, newPage.Name, 'Conditional Object', 'Page', 'English', '', newPage.Name));\r\n }\r\n });\r\n }\r\n else {\r\n changes.push(this.getElementChange(oldTab.Id, oldTab.Name, 'Conditional Object', 'Tab', 'English', oldTab.Name, ''));\r\n }\r\n });\r\n newTabs.forEach(newTab => {\r\n const oldTab = oldTabs.find(o => o.Id == newTab.Id);\r\n if (!oldTab) {\r\n changes.push(this.getElementChange(newTab.Id, newTab.Name, 'Conditional Object', 'Tab', 'English', '', newTab.Name));\r\n }\r\n });\r\n oldFields.forEach(oldField => {\r\n const fieldLabel = this.eFormService.formatControlName(oldField);\r\n const newField = newFields.find(o => o.Id == oldField.Id);\r\n if (newField) {\r\n const newFieldLabel = this.eFormService.formatControlName(newField);\r\n if (oldField.Label != newField.Label) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Label', 'Control', 'English', oldField.Label, newField.Label));\r\n }\r\n if (!!oldField.IsRequired != !!newField.IsRequired) {\r\n const oldVal = oldField.IsRequired ? oldField.IsRequired.toString() : '';\r\n const newVal = newField.IsRequired ? newField.IsRequired.toString() : '';\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Required', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.ControlType == this.eFormService.controlTypes.text && oldField.Value != newField.Value) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Text', 'Control', 'English', oldField.Value, newField.Value));\r\n }\r\n if (oldField.Width != newField.Width) {\r\n const oldVal = oldField.Width ? oldField.Width.toString() : '';\r\n const newVal = newField.Width ? newField.Width.toString() : '';\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Width', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.Indent != newField.Indent) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Indent', 'Control', 'English', oldField.Indent ? oldField.Indent.toString() : '', newField.Indent.toString()));\r\n }\r\n if (oldField.NoteRows != newField.NoteRows) {\r\n const oldVal = oldField.NoteRows ? oldField.NoteRows.toString() : '';\r\n const newVal = newField.NoteRows ? newField.NoteRows.toString() : '';\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Height in Rows ', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.ParentObjectId != newField.ParentObjectId) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldField.ParentObjectId > 0) {\r\n const oldParent = oldFields.find(o => o.Id == oldField.ParentObjectId);\r\n if (oldParent) {\r\n oldVal = this.eFormService.formatControlName(oldParent);\r\n }\r\n const newParent = newFields.find(o => o.Id == newParent.Id);\r\n if (newParent) {\r\n newVal = this.eFormService.formatControlName(newParent);\r\n }\r\n }\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Conditional Object', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.Condition != newField.Condition) {\r\n const oldVal = oldField.Condition ? oldField.Condition.toString() : '';\r\n const newVal = newField.Condition ? newField.Condition.toString() : '';\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Condition', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.TextProvidedOnInstance != newField.TextProvidedOnInstance) {\r\n let type = 'Text provided when e-Form is created';\r\n if (oldField.ControlType == this.eFormService.controlTypes.linkToFile) {\r\n type = 'File provided when e-Form is created';\r\n }\r\n const oldVal = oldField.TextProvidedOnInstance ? oldField.TextProvidedOnInstance.toString() : '';\r\n const newVal = newField.TextProvidedOnInstance ? newField.TextProvidedOnInstance.toString() : '';\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, type, 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.Instructions != newField.Instructions) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Instructions', 'Control', 'English', oldField.Instructions, newField.Instructions));\r\n }\r\n if (oldField.InstructionFormat != newField.InstructionFormat) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Instruction Format', 'Control', 'English', oldField.InstructionFormat == 'richText' ? 'Rich text' : 'Plain text', newField.InstructionFormat == 'richText' ? 'Rich text' : 'Plain text'));\r\n }\r\n if (oldField.LinkedDBField != newField.LinkedDBField) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldField.LinkedDBField > 0) {\r\n const oldDBField = this.eFormService.databaseFields.find(o => o.ID == oldField.LinkedDBField);\r\n if (oldDBField) {\r\n oldVal = oldDBField.FieldName;\r\n }\r\n }\r\n if (newField.LinkedDBField > 0) {\r\n const newDBField = this.eFormService.databaseFields.find(o => o.ID == newField.LinkedDBField);\r\n if (newDBField) {\r\n newVal = newDBField.FieldName;\r\n }\r\n }\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Location to Save Data', 'Control', 'English', oldVal, newVal));\r\n }\r\n if ((oldField.ControlType == this.eFormService.controlTypes.image || oldField.ControlType == this.eFormService.controlTypes.linkToFile) && oldField.AttachmentId != newField.AttachmentId) {\r\n const propertyName = oldField.ControlType == this.eFormService.controlTypes.image ? 'Image' : 'File';\r\n let oldFile = '';\r\n let newFile = '';\r\n if (oldField.Attachment) {\r\n oldFile = oldField.Attachment.OriginalFileName;\r\n }\r\n if (newField.Attachment) {\r\n newFile = newField.Attachment.OriginalFileName;\r\n }\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, propertyName, 'Control', 'English', oldFile, newFile));\r\n }\r\n if (oldField.StoreLocation != newField.StoreLocation) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Store Attachment', 'Control', 'English', oldField.StoreLocation, newField.StoreLocation));\r\n }\r\n if (oldField.StuPortCategoryId != newField.StuPortCategoryId) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldField.StuPortCategoryId > 0) {\r\n const oldCat = this.eFormDesignerService.studentPortfolioCategories.find(o => o.Id == oldField.StuPortCategoryId.toString());\r\n if (oldCat) {\r\n oldVal = oldCat.CodeDescription;\r\n }\r\n }\r\n if (newField.StuPortCategoryId > 0) {\r\n const newCat = this.eFormDesignerService.studentPortfolioCategories.find(o => o.Id == newField.StuPortCategoryId.toString());\r\n if (newCat) {\r\n newVal = newCat.CodeDescription;\r\n }\r\n }\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Student Portfolio Category', 'Control', 'English', oldVal, newVal));\r\n }\r\n if (oldField.FormDocTypeId != newField.FormDocTypeId) {\r\n let oldVal = '';\r\n let newVal = '';\r\n if (oldField.FormDocTypeId > 0) {\r\n const oldDoc = this.eFormDesignerService.documentTypes.find(o => o.Id == oldField.FormDocTypeId.toString());\r\n if (oldDoc) {\r\n oldVal = oldDoc.CodeDescription;\r\n }\r\n }\r\n if (newField.FormDocTypeId > 0) {\r\n const newDoc = this.eFormDesignerService.studentPortfolioCategories.find(o => o.Id == newField.FormDocTypeId.toString());\r\n if (newDoc) {\r\n newVal = newDoc.CodeDescription;\r\n }\r\n }\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Document Type', 'Control', 'English', oldVal, newVal));\r\n }\r\n oldField.DropdownOptions.forEach(opt => {\r\n if (!newField.DropdownOptions.find(o => o.CodeDescription == opt.CodeDescription)) {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, 'Choices', 'Control', 'English', opt.CodeDescription, ''));\r\n }\r\n });\r\n newField.DropdownOptions.forEach(opt => {\r\n if (!oldField.DropdownOptions.find(o => o.CodeDescription == opt.CodeDescription)) {\r\n changes.push(this.getElementChange(newField.Id, newFieldLabel, 'Choices', 'Control', 'English', '', opt.CodeDescription));\r\n }\r\n });\r\n }\r\n else {\r\n changes.push(this.getElementChange(oldField.Id, fieldLabel, this.eFormService.formatControlType(oldField.ControlType), 'Control', 'English', this.eFormService.formatControlName(oldField), ''));\r\n }\r\n });\r\n newFields.forEach(newField => {\r\n const oldField = oldFields.find(o => o.Id == newField.Id);\r\n if (!oldField) {\r\n changes.push(this.getElementChange(newField.Id, this.eFormService.formatControlName(newField), this.eFormService.formatControlType(newField.ControlType), 'Control', 'English', '', this.eFormService.formatControlName(newField)));\r\n }\r\n });\r\n if (changes.length > 0) {\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n this.subscriptions.push(this.eFormService.saveTemplateChangeHistory(changes).subscribe(result => {\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n else {\r\n this.originalFormData = cloneDeep(this.eform);\r\n this.sharedService.showGoodSnackbar();\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(this.eFormService.saveInstanceChangeHistory(changes).subscribe(result => {\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n else {\r\n this.originalFormData = cloneDeep(this.eform);\r\n this.sharedService.showGoodSnackbar();\r\n }\r\n }));\r\n }\r\n }\r\n else {\r\n if (closeOnSave) {\r\n if (this.dialogRef.close) {\r\n this.dialogRef.close(true);\r\n }\r\n this.closeEvent.emit(true);\r\n }\r\n }\r\n }\r\n\r\n getElementChange(id: number, fieldName: string, property: string, objectType: string, language: string, oldValue: string, newValue: string): EFormChangeHistory {\r\n const newChange = new EFormChangeHistory();\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n newChange.TemplateId = this.template.ID;\r\n newChange.TemplateAuditId = this.template.TemplateAuditId;\r\n }\r\n else {\r\n newChange.InstanceId = this.instance.ID;\r\n newChange.InstanceAuditId = this.instance.InstanceAuditId;\r\n }\r\n newChange.ObjectType = objectType;\r\n newChange.FieldId = id;\r\n newChange.FieldName = fieldName;\r\n newChange.Property = property;\r\n newChange.Language = language;\r\n newChange.OldValue = oldValue;\r\n newChange.NewValue = newValue;\r\n return newChange;\r\n }\r\n\r\n setUpCriticalChoices() {\r\n // if (this.config.IsSurvey) {\r\n // if (this.formType == 'template') {\r\n // this.eFormService.getSurveyQuestionsByTemplateID(this.template.ID).pipe(take(1)).subscribe(surveyFields => {\r\n // this.template.SurveyFields = surveyFields;\r\n // this.eFormDesignerService.setUpCriticalChoices(surveyFields);\r\n // });\r\n // }\r\n // else {\r\n // this.eFormService.getSurveyQuestionsByInstanceID(this.instance.ID).pipe(take(1)).subscribe(surveyFields => {\r\n // this.instance.SurveyFields = surveyFields;\r\n // this.eFormDesignerService.setUpCriticalChoices(surveyFields);\r\n // });\r\n // }\r\n // }\r\n }\r\n\r\n columnDropped(event: CdkDragDrop) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(this.selectedPage.Columns, event.previousIndex, event.currentIndex);\r\n }\r\n }\r\n\r\n columnPredicate(item: CdkDrag) {\r\n if (this.selectedPage && this.selectedPage.Columns && this.selectedPage.Columns.find(o => o == item.data)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n dragStart() {\r\n this.eFormDesignerService.dragStart();\r\n }\r\n\r\n dragEnd() {\r\n this.eFormDesignerService.dragEnd();\r\n }\r\n\r\n}\r\n","import { EFormPage } from './e-form-page.model';\r\n\r\nexport class EFormTab {\r\n Id: number;\r\n Name: string;\r\n Order: number;\r\n Pages: EFormPage[] = [];\r\n ParentObjectId: number;\r\n Condition: string | boolean;\r\n ConditionalAction: string;\r\n Visible: boolean;\r\n\r\n // Tree View Property\r\n Expanded: boolean;\r\n}","import { EFormColumn } from './e-form-column.model';\r\nimport { EFormRow } from './e-form-row.model';\r\n\r\nexport class EFormPage {\r\n Id: number;\r\n Name: string;\r\n Order: number;\r\n Columns: EFormColumn[];\r\n Rows: EFormRow[];\r\n ParentObjectId: number;\r\n Condition: string | boolean;\r\n ConditionalAction: string;\r\n Visible: boolean;\r\n\r\n // Tree View Property\r\n Expanded: boolean;\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport * as _ from 'lodash';\r\nimport { EFormTab } from '../e-form-tab.model';\r\nimport { EFormControl } from '../e-form-control.model';\r\nimport { Lookup } from '../../lookup/lookup.model';\r\nimport { EFormPage } from '../e-form-page.model';\r\nimport { EFormColumn } from '../e-form-column.model';\r\nimport { EFormRow } from '../e-form-row.model';\r\nimport { EFormMergeField } from '../e-form-merge-field.model';\r\nimport { EFormService } from '../e-form.service';\r\nimport { EFormDataObject } from '../e-formDataObject.model';\r\nimport { CSTField } from '../../../shared-modules/customization-framework/models/custom-data-field.model';\r\nimport { EFormSurveyField } from '../e-form-survey-field.model';\r\nimport { CustomFieldControlTypeEnum } from '../../../shared-modules/customization-framework/models/custom-data-control-type.model';\r\nimport { EFormConfiguration } from '../e-form-config.model';\r\n\r\n\r\n@Injectable()\r\nexport class EFormDesignerService {\r\n masterControlList: EFormControl[] = [];\r\n promptForDataTypes = ['buttons', 'checkbox', 'checkboxWithTextbox', 'dropdown', 'note', 'radioButtons', 'textbox'];\r\n staffRoles: Lookup[] = [];\r\n studentPortfolioCategories: Lookup[] = [];\r\n documentTypes: Lookup[] = [];\r\n availableCSTFields: CSTField[] = [];\r\n\r\n private _selectedTab: EFormTab;\r\n get selectedTab(): EFormTab {\r\n return this._selectedTab;\r\n }\r\n private _selectedPage: EFormPage;\r\n get selectedPage(): EFormPage {\r\n return this._selectedPage;\r\n }\r\n private _selectedColumn: EFormColumn;\r\n get selectedColumn(): EFormColumn {\r\n return this._selectedColumn;\r\n }\r\n private _selectedRow: EFormRow;\r\n get selectedRow(): EFormRow {\r\n return this._selectedRow;\r\n }\r\n private _selectedControl: EFormControl;\r\n get selectedControl(): EFormControl {\r\n return this._selectedControl;\r\n }\r\n private _selectedElementType: string;\r\n get selectedElementType(): string {\r\n return this._selectedElementType;\r\n }\r\n\r\n locationToAdd: string;\r\n showSliderPanel: boolean;\r\n\r\n\r\n public observableselectedElementChanged = new Subject();\r\n observableselectedElementChangedStream$ = this.observableselectedElementChanged.asObservable();\r\n\r\n connectedDropLists: string[] = [];\r\n public observableConnectedDropLists = new Subject();\r\n observableConnectedDropListsStream$ = this.observableConnectedDropLists.asObservable();\r\n\r\n public observableTabNameChanged = new Subject();\r\n tabNameChangedEvent = this.observableTabNameChanged.asObservable();\r\n\r\n public observablePagesChanged = new Subject();\r\n pagesChangedEvent = this.observablePagesChanged.asObservable();\r\n\r\n public observableDragStart = new Subject();\r\n observableDragStartStream$ = this.observableDragStart.asObservable();\r\n\r\n public observableDragEnd = new Subject();\r\n observableDragEndStream$ = this.observableDragEnd.asObservable();\r\n\r\n public observableControlsUpdated = new Subject();\r\n observableControlsUpdatedStream$ = this.observableControlsUpdated.asObservable();\r\n\r\n public observableRadioOptionsChanged = new Subject();\r\n observableRadioOptionsChangedStream$ = this.observableRadioOptionsChanged.asObservable();\r\n\r\n public observableMergeFieldClicked = new Subject();\r\n observableMergeFieldClickedStream$ = this.observableMergeFieldClicked.asObservable();\r\n\r\n public observableChoiceMergeFieldClicked = new Subject();\r\n observableChoiceMergeFieldClickedStream$ = this.observableChoiceMergeFieldClicked.asObservable();\r\n\r\n public observableCloseMergeFieldWindow = new Subject();\r\n observableCloseMergeFieldWindowStream$ = this.observableCloseMergeFieldWindow.asObservable();\r\n\r\n public observableOpenPropertiesTab = new Subject();\r\n observableOpenPropertiesTabStream$ = this.observableOpenPropertiesTab.asObservable();\r\n\r\n public observableOpenControlTab = new Subject();\r\n observableOpenControlTabStream$ = this.observableOpenControlTab.asObservable();\r\n\r\n public observableshowSliderPanel = new Subject();\r\n observableshowSliderPanelStream$ = this.observableshowSliderPanel.asObservable();\r\n\r\n public observableshowSliderPanelWidth = new Subject();\r\n observableshowSliderPanelWidthStream$ = this.observableshowSliderPanelWidth.asObservable();\r\n\r\n public observableSelectedPageChanged = new Subject();\r\n observableSelectedPageChangedStream$ = this.observableSelectedPageChanged.asObservable();\r\n\r\n constructor(private eFormService: EFormService) { }\r\n\r\n dragStart() {\r\n this.observableDragStart.next(true);\r\n }\r\n\r\n dragEnd() {\r\n this.observableDragEnd.next(true);\r\n }\r\n\r\n setUpCriticalChoices(surveyFields: EFormSurveyField[]) {\r\n surveyFields.forEach(sf => {\r\n if (sf.CriticalQuestion) {\r\n const control = this.masterControlList.find(o => o.SurveyFieldID == sf.ID);\r\n if (control) {\r\n sf.CriticalValues.forEach(val => {\r\n const opt = control.DropdownOptions.find(o => o.CodeDesc == val.Value);\r\n if (opt) {\r\n opt.IsCritical = true;\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n setUpForm(config: EFormConfiguration) {\r\n const tabIds: number[] = [0];\r\n const pageIds: number[] = [0];\r\n if (!this.eFormService.selectedFormData) {\r\n this.eFormService.selectedFormData = new EFormDataObject();\r\n }\r\n if (!this.eFormService.selectedFormData.Tabs || this.eFormService.selectedFormData.Tabs.length == 0) { // set up tabs\r\n this.eFormService.selectedFormData.Tabs = [];\r\n const tab = new EFormTab();\r\n tab.Name = 'Tab 1';\r\n this.eFormService.selectedFormData.Tabs.push(tab);\r\n }\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => { // set up pages\r\n if (tab.Id) {\r\n tabIds.push(tab.Id);\r\n }\r\n if (!tab.Pages || tab.Pages.length == 0) {\r\n tab.Pages = [];\r\n const page = new EFormPage();\r\n page.Name = 'Page 1';\r\n tab.Pages.push(page);\r\n }\r\n tab.Pages.forEach(page => { // make sure pages have at least one column\r\n if (page.Id) {\r\n pageIds.push(page.Id);\r\n }\r\n if (!page.Columns || page.Columns.length == 0) {\r\n page.Columns = [];\r\n const column = new EFormColumn(config);\r\n // column.Id = this.getMaxColumnId() + 1;\r\n page.Columns.push(column);\r\n }\r\n });\r\n });\r\n this.getAllFormControls();\r\n if (!this.eFormService.selectedFormData.LastUsedControlId) {\r\n this.eFormService.selectedFormData.LastUsedControlId = this.getMaxControlId();\r\n }\r\n // we were not previously creating ids for tabs and pages, so we need to sync this for older forms.\r\n let maxTabId = Math.max(...tabIds);\r\n let maxPageId = Math.max(...pageIds);\r\n if (this.eFormService.selectedFormData.LastUsedTabId && this.eFormService.selectedFormData.LastUsedTabId > maxTabId) {\r\n maxTabId = this.eFormService.selectedFormData.LastUsedTabId;\r\n }\r\n if (this.eFormService.selectedFormData.LastUsedPageId && this.eFormService.selectedFormData.LastUsedPageId > maxPageId) {\r\n maxPageId = this.eFormService.selectedFormData.LastUsedPageId;\r\n }\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n if (!tab.Id) {\r\n tab.Id = ++maxTabId;\r\n }\r\n tab.Pages.forEach(page => {\r\n if (!page.Id) {\r\n page.Id = ++maxPageId;\r\n }\r\n });\r\n });\r\n this.eFormService.selectedFormData.LastUsedTabId = maxTabId;\r\n this.eFormService.selectedFormData.LastUsedPageId = maxPageId;\r\n\r\n }\r\n\r\n getMaxControlId(): number {\r\n this.getAllFormControls();\r\n const control = _.maxBy(this.masterControlList, o => o.Id);\r\n if (control) {\r\n return control.Id;\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n\r\n getAllFormControls() {\r\n let controls: EFormControl[] = [];\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n page.Columns.forEach(column => {\r\n const colControls = this.getAllControlsByColumn(column);\r\n if (colControls.length > 0) {\r\n controls = controls.concat(colControls);\r\n }\r\n });\r\n });\r\n });\r\n\r\n this.masterControlList = controls;\r\n this.observableControlsUpdated.next(true);\r\n }\r\n\r\n getAllControlsByColumn(column: EFormColumn): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n if (column.Controls.length > 0) {\r\n controls = controls.concat(column.Controls);\r\n }\r\n column.Rows.forEach(row => {\r\n if (row.Controls.length > 0) {\r\n controls = controls.concat(row.Controls);\r\n }\r\n row.Columns.forEach(col => {\r\n const colControls = this.getAllControlsByColumn(col);\r\n if (colControls.length > 0) {\r\n controls = controls.concat(colControls);\r\n }\r\n });\r\n });\r\n return controls;\r\n }\r\n\r\n getAllControlsByRow(row: EFormRow): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n if (row.Controls.length > 0) {\r\n controls = controls.concat(row.Controls);\r\n }\r\n row.Columns.forEach(column => {\r\n if (column.Controls.length > 0) {\r\n controls = controls.concat(column.Controls);\r\n }\r\n column.Rows.forEach(r => {\r\n const rowControls = this.getAllControlsByRow(r);\r\n if (rowControls.length > 0) {\r\n controls = controls.concat(rowControls);\r\n }\r\n });\r\n });\r\n return controls;\r\n }\r\n\r\n assignControlsNewID(controls: EFormControl[]) {\r\n const maxId = this.getMaxControlId();\r\n\r\n for (let i = 1; i <= controls.length; i++) {\r\n controls[i - 1].Id = maxId + i;\r\n }\r\n }\r\n\r\n addRow(isMobile: boolean) {\r\n if (this.selectedColumn) {\r\n if (!this.selectedColumn.Rows || this.selectedColumn.Rows.length == 0) {\r\n this.selectedColumn.Rows = [];\r\n if (this.selectedColumn.Controls && this.selectedColumn.Controls.length > 0) {\r\n if (isMobile) {\r\n // mobile forms can only have one column\r\n this.selectedColumn.Controls.forEach(cnt => {\r\n const newRow = new EFormRow();\r\n newRow.Controls = [];\r\n newRow.Controls.push(cnt);\r\n this.selectedColumn.Rows.push(newRow);\r\n });\r\n }\r\n else {\r\n const newRow = new EFormRow();\r\n const pnl = _.cloneDeep(this.selectedColumn);\r\n newRow.Columns.push(pnl);\r\n this.selectedColumn.Rows.push(newRow);\r\n }\r\n this.selectedColumn.Controls = [];\r\n }\r\n }\r\n // ###########################################################################################\r\n // ###### Click on Copy icon of Row and select posission above/below copy operation ########\r\n // ###########################################################################################\r\n if (this.locationToAdd && this.locationToAdd != '') {\r\n const currentRowIndex = this.selectedColumn.Rows.findIndex(o => o == this.selectedRow);\r\n if (currentRowIndex >= 0) {\r\n const rowObj: EFormRow = _.cloneDeep(this.selectedColumn.Rows[currentRowIndex]);\r\n this.assignControlsNewID(this.getAllControlsByRow(rowObj));\r\n\r\n if (this.locationToAdd == 'above') {\r\n this.selectedColumn.Rows.splice(currentRowIndex, 0, _.cloneDeep(rowObj));\r\n // ---- This code for just set focus on create or copy new row\r\n setTimeout(() => {\r\n this.focusOnRow(this.selectedColumn.Rows[currentRowIndex]);\r\n }, 500);\r\n }\r\n else if (this.locationToAdd == 'below') {\r\n this.selectedColumn.Rows.splice(currentRowIndex + 1, 0, _.cloneDeep(rowObj));\r\n // ---- This code for just set focus on create or copy new row\r\n setTimeout(() => {\r\n this.focusOnRow(this.selectedColumn.Rows[currentRowIndex + 1]);\r\n }, 500);\r\n }\r\n this.getAllFormControls();\r\n }\r\n this.locationToAdd = '';\r\n }\r\n else {\r\n this.locationToAdd = '';\r\n // ###################################################################################################\r\n this.selectedColumn.Rows.push(new EFormRow());\r\n }\r\n }\r\n }\r\n\r\n addColumn(config: EFormConfiguration) {\r\n if ((this.selectedElementType == 'tab' || this.selectedElementType == 'page') && this.selectedPage) {\r\n if (!this.selectedPage.Columns) {\r\n this.selectedPage.Columns = [];\r\n }\r\n this.selectedPage.Columns.push(new EFormColumn(config));\r\n }\r\n else if (this.selectedElementType == 'row' && this.selectedRow) {\r\n if (!this.selectedRow.Columns || this.selectedRow.Columns.length == 0) {\r\n this.selectedRow.Columns = [];\r\n if (this.selectedRow.Controls && this.selectedRow.Controls.length > 0) {\r\n const newCol = new EFormColumn(config);\r\n const row = _.cloneDeep(this.selectedRow);\r\n newCol.Rows.push(row);\r\n this.selectedRow.Columns.push(newCol);\r\n this.selectedRow.Controls = [];\r\n }\r\n }\r\n this.selectedRow.Columns.push(new EFormColumn(config));\r\n }\r\n else if (this.selectedElementType == 'column' && this.selectedColumn && this.selectedPage) {\r\n\r\n // ###########################################################################################\r\n // ###### Click on Copy icon of column and select posission left/right copy operation ########\r\n // ###########################################################################################\r\n if (this.locationToAdd && this.locationToAdd != '') {\r\n let currentColumnIndex = -1;\r\n if (this.selectedRow) {\r\n currentColumnIndex = this.selectedRow.Columns.findIndex(o => o == this.selectedColumn);\r\n }\r\n if (currentColumnIndex >= 0) {\r\n const columnObj: EFormColumn = _.cloneDeep(this.selectedRow.Columns[currentColumnIndex]);\r\n this.assignControlsNewID(this.getAllControlsByColumn(columnObj));\r\n if (this.locationToAdd == 'left') {\r\n this.selectedRow.Columns.splice(currentColumnIndex, 0, _.cloneDeep(columnObj));\r\n // ---- This code for just set focus on create or copy new column\r\n this.focusOnColumn(this.selectedRow.Columns[currentColumnIndex]);\r\n // ----\r\n }\r\n else if (this.locationToAdd == 'right') {\r\n this.selectedRow.Columns.splice(currentColumnIndex + 1, 0, _.cloneDeep(columnObj));\r\n // ---- This code for just set focus on create or copy new column\r\n this.focusOnColumn(this.selectedRow.Columns[currentColumnIndex + 1]);\r\n // ----\r\n }\r\n this.getAllFormControls();\r\n }\r\n else {\r\n currentColumnIndex = this.selectedPage.Columns.findIndex(o => o == this.selectedColumn);\r\n if (currentColumnIndex >= 0) {\r\n const columnObj: EFormColumn = _.cloneDeep(this.selectedPage.Columns[currentColumnIndex]);\r\n this.assignControlsNewID(this.getAllControlsByColumn(columnObj));\r\n if (this.locationToAdd == 'left') {\r\n this.selectedPage.Columns.splice(currentColumnIndex, 0, _.cloneDeep(columnObj));\r\n // ---- This code for just set focus on create or copy new column\r\n this.focusOnColumn(this.selectedPage.Columns[currentColumnIndex]);\r\n // ----\r\n }\r\n else if (this.locationToAdd == 'right') {\r\n this.selectedPage.Columns.splice(currentColumnIndex + 1, 0, _.cloneDeep(columnObj));\r\n // ---- This code for just set focus on create or copy new column\r\n this.focusOnColumn(this.selectedPage.Columns[currentColumnIndex + 1]);\r\n // ----\r\n }\r\n this.getAllFormControls();\r\n }\r\n }\r\n this.locationToAdd = '';\r\n }\r\n else {\r\n this.locationToAdd = '';\r\n // ###################################################################################################\r\n\r\n let parentIsPage = false;\r\n this.selectedPage.Columns.forEach(col => {\r\n if (col == this.selectedColumn) {\r\n parentIsPage = true;\r\n }\r\n });\r\n if (parentIsPage) {\r\n if (!this.selectedPage.Columns) {\r\n this.selectedPage.Columns = [];\r\n }\r\n this.selectedPage.Columns.push(new EFormColumn(config));\r\n }\r\n else {\r\n this.selectedPage.Columns.forEach(col => {\r\n const parentRow = this.findParentRowForColumn(col, this.selectedColumn);\r\n if (parentRow) {\r\n parentRow.Columns.push(new EFormColumn(config));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n else if (this.selectedElementType == 'control' && this.selectedControl && this.selectedPage) {\r\n let parentIsPage = false;\r\n this.selectedPage.Columns.forEach(col => {\r\n if (col == this.selectedColumn) {\r\n parentIsPage = true;\r\n }\r\n });\r\n if (parentIsPage) {\r\n if (!this.selectedPage.Columns) {\r\n this.selectedPage.Columns = [];\r\n }\r\n this.selectedPage.Columns.push(new EFormColumn(config));\r\n }\r\n else {\r\n this.selectedPage.Columns.forEach(col => {\r\n const parentRow = this.findParentRowForControl(col, this.selectedControl);\r\n if (parentRow) {\r\n parentRow.Columns.push(new EFormColumn(config));\r\n }\r\n });\r\n }\r\n }\r\n this.locationToAdd = '';\r\n }\r\n\r\n addControl(config: EFormConfiguration) {\r\n if (this.selectedColumn) {\r\n const newControl = new EFormControl();\r\n newControl.ControlType = this.eFormService.controlTypes.textbox;\r\n newControl.DataType = 'text';\r\n newControl.Label = 'Textbox';\r\n if (this.selectedElementType == 'column') {\r\n if (this.selectedColumn.Rows && this.selectedColumn.Rows.length > 0) {\r\n const newRow = new EFormRow();\r\n const newColumn = new EFormColumn(config);\r\n newColumn.Controls.push(newControl);\r\n newRow.Columns.push(newColumn);\r\n this.selectedColumn.Rows.push(newRow);\r\n }\r\n else {\r\n this.selectedColumn.Controls.push(newControl);\r\n }\r\n }\r\n else if (this.selectedElementType == 'row') {\r\n const newColumn = new EFormColumn(config);\r\n newColumn.Controls.push(newControl);\r\n this.selectedRow.Columns.push(newColumn);\r\n }\r\n }\r\n }\r\n\r\n addTab(config: EFormConfiguration) {\r\n const newTab = new EFormTab();\r\n let tabname = 'Tab ' + (this.eFormService.selectedFormData.Tabs.length + 1);\r\n while (this.eFormService.selectedFormData.Tabs.find(o => o.Name == tabname) != null) {\r\n tabname += '(1)';\r\n }\r\n newTab.Name = tabname;\r\n newTab.Id = ++this.eFormService.selectedFormData.LastUsedTabId;\r\n const newPage = new EFormPage();\r\n newPage.Name = 'Page 1';\r\n newPage.Id = ++this.eFormService.selectedFormData.LastUsedPageId;\r\n const newColumn = new EFormColumn(config);\r\n newPage.Columns = [];\r\n newPage.Columns.push(newColumn);\r\n newTab.Pages = [];\r\n newTab.Pages.push(newPage);\r\n this.eFormService.selectedFormData.Tabs.push(newTab);\r\n this.observableTabNameChanged.next(true);\r\n }\r\n\r\n addPage(config: EFormConfiguration) {\r\n if (this.selectedTab) {\r\n const newPage = new EFormPage();\r\n newPage.Id = ++this.eFormService.selectedFormData.LastUsedPageId;\r\n let pageName = 'Page ' + (this.selectedTab.Pages.length + 1);\r\n while (this.selectedTab.Pages.find(o => o.Name == pageName) != null) {\r\n pageName += '(1)';\r\n }\r\n newPage.Name = pageName;\r\n newPage.Columns = [];\r\n const newColumn = new EFormColumn(config);\r\n newPage.Columns.push(newColumn);\r\n this.selectedTab.Pages.push(newPage);\r\n this.observablePagesChanged.next(true);\r\n }\r\n }\r\n\r\n deleteSelectedElement() {\r\n switch (this.selectedElementType) {\r\n case 'tab': {\r\n const currentTabIndex = this.eFormService.selectedFormData.Tabs.findIndex(o => o == this.selectedTab);\r\n if (currentTabIndex >= 0) {\r\n this.eFormService.selectedFormData.Tabs.splice(currentTabIndex, 1);\r\n if (this.eFormService.selectedFormData.Tabs.length > 0) {\r\n this.focusOnTab(this.eFormService.selectedFormData.Tabs[0]);\r\n }\r\n this.observableTabNameChanged.next(true);\r\n }\r\n break;\r\n }\r\n case 'page': {\r\n const currentPageIndex = this.selectedTab.Pages.findIndex(o => o == this.selectedPage);\r\n if (currentPageIndex >= 0) {\r\n this.selectedTab.Pages.splice(currentPageIndex, 1);\r\n if (this.selectedTab.Pages.length > 0) {\r\n this.focusOnPage(this.selectedTab.Pages[0]);\r\n }\r\n else {\r\n this._selectedPage = null;\r\n }\r\n }\r\n break;\r\n }\r\n case 'column': {\r\n let currentColumnIndex = -1;\r\n if (this.selectedRow) {\r\n currentColumnIndex = this.selectedRow.Columns.findIndex(o => o == this.selectedColumn);\r\n }\r\n if (currentColumnIndex >= 0) {\r\n this.selectedRow.Columns.splice(currentColumnIndex, 1);\r\n this._selectedColumn = null;\r\n }\r\n else {\r\n currentColumnIndex = this.selectedPage.Columns.findIndex(o => o == this.selectedColumn);\r\n if (currentColumnIndex >= 0) {\r\n this.selectedPage.Columns.splice(currentColumnIndex, 1);\r\n this._selectedColumn = null;\r\n }\r\n }\r\n break;\r\n }\r\n case 'row': {\r\n const currentRowIndex = this.selectedColumn.Rows.findIndex(o => o == this.selectedRow);\r\n if (currentRowIndex >= 0) {\r\n this.selectedColumn.Rows.splice(currentRowIndex, 1);\r\n this._selectedRow = null;\r\n }\r\n break;\r\n }\r\n case 'control': {\r\n let currentControlIndex = this.selectedColumn.Controls.findIndex(o => o == this.selectedControl);\r\n if (currentControlIndex >= 0) {\r\n this.selectedColumn.Controls.splice(currentControlIndex, 1);\r\n this._selectedControl = null;\r\n }\r\n else {\r\n currentControlIndex = this.selectedRow.Controls.findIndex(o => o == this.selectedControl);\r\n if (currentControlIndex >= 0) {\r\n this.selectedRow.Controls.splice(currentControlIndex, 1);\r\n this._selectedControl = null;\r\n }\r\n }\r\n\r\n if (this.selectedTab.Pages.length > 0) {\r\n this.focusOnPage(this.selectedTab.Pages[0]);\r\n }\r\n else if (this.eFormService.selectedFormData.Tabs.length > 0) {\r\n this.focusOnTab(this.eFormService.selectedFormData.Tabs[0]);\r\n }\r\n\r\n this.getAllFormControls();\r\n break;\r\n }\r\n }\r\n this.openControlTab();\r\n }\r\n\r\n findParentRowForColumn(container: EFormColumn, elementToFind: EFormColumn): EFormRow {\r\n let parentRow: EFormRow = null;\r\n container.Rows.forEach(row => {\r\n row.Columns.forEach(column => {\r\n if (column == elementToFind) {\r\n parentRow = row;\r\n }\r\n });\r\n row.Columns.forEach(column => {\r\n if (!parentRow) {\r\n parentRow = this.findParentRowForColumn(column, elementToFind);\r\n }\r\n });\r\n });\r\n return parentRow;\r\n }\r\n\r\n findParentRowForControl(container: EFormColumn, elementToFind: EFormControl): EFormRow {\r\n let parentRow: EFormRow = null;\r\n container.Rows.forEach(row => {\r\n row.Controls.forEach(control => {\r\n if (control == elementToFind) {\r\n parentRow = row;\r\n }\r\n });\r\n row.Columns.forEach(column => {\r\n column.Controls.forEach(control => {\r\n if (control == elementToFind) {\r\n parentRow = row;\r\n }\r\n });\r\n if (!parentRow) {\r\n parentRow = this.findParentRowForControl(column, elementToFind);\r\n }\r\n });\r\n });\r\n return parentRow;\r\n }\r\n\r\n findParentColumnForRow(container: EFormColumn, elementToFind: EFormRow): EFormColumn {\r\n let parentColumn: EFormColumn = null;\r\n container.Rows.forEach(row => {\r\n if (row == elementToFind) {\r\n parentColumn = container;\r\n }\r\n row.Columns.forEach(column => {\r\n if (!parentColumn) {\r\n parentColumn = this.findParentColumnForRow(column, elementToFind);\r\n }\r\n });\r\n });\r\n return parentColumn;\r\n }\r\n\r\n findParentColumnForControl(container: EFormColumn, elementToFind: EFormControl): EFormColumn {\r\n let parentColumn: EFormColumn = null;\r\n container.Controls.forEach(control => {\r\n if (control == elementToFind) {\r\n parentColumn = container;\r\n }\r\n });\r\n container.Rows.forEach(row => {\r\n row.Controls.forEach(control => {\r\n if (control == elementToFind) {\r\n parentColumn = container;\r\n }\r\n });\r\n row.Columns.forEach(column => {\r\n if (!parentColumn) {\r\n parentColumn = this.findParentColumnForControl(column, elementToFind);\r\n }\r\n });\r\n });\r\n return parentColumn;\r\n }\r\n\r\n isControlOnPage(control: EFormControl, page: EFormPage): boolean {\r\n let controlFound = false;\r\n page.Columns.forEach(col => {\r\n if (!controlFound && this.findParentColumnForControl(col, control) != null) {\r\n controlFound = true;\r\n }\r\n });\r\n return controlFound;\r\n }\r\n\r\n isColumnOnPage(column: EFormColumn, page: EFormPage): boolean {\r\n let controlFound = false;\r\n page.Columns.forEach(col => {\r\n if (col == column) {\r\n controlFound = true;\r\n }\r\n else if (controlFound == false && this.findParentRowForColumn(col, column) != null) {\r\n controlFound = true;\r\n }\r\n });\r\n return controlFound;\r\n }\r\n\r\n isRowOnPage(row: EFormRow, page: EFormPage): boolean {\r\n let controlFound = false;\r\n page.Columns.forEach(col => {\r\n if (controlFound == false && this.findParentColumnForRow(col, row) != null) {\r\n controlFound = true;\r\n }\r\n });\r\n return controlFound;\r\n }\r\n\r\n moveElement(direction: string) {\r\n if (this.selectedColumn && this.selectedRow) {\r\n if (direction == 'up') {\r\n let index = this.selectedColumn.Rows.findIndex(o => o == this.selectedRow);\r\n if (index > 0) {\r\n this.selectedColumn.Rows.splice(index, 1);\r\n index--;\r\n this.selectedColumn.Rows.splice(index, 0, this.selectedRow);\r\n }\r\n }\r\n else if (direction == 'down') {\r\n const maxIndex = this.selectedColumn.Rows.length - 1;\r\n let index = this.selectedColumn.Rows.findIndex(o => o == this.selectedRow);\r\n if (index >= 0 && index < maxIndex) {\r\n this.selectedColumn.Rows.splice(index, 1);\r\n index++;\r\n this.selectedColumn.Rows.splice(index, 0, this.selectedRow);\r\n }\r\n }\r\n else if (direction == 'left') {\r\n let index = this.selectedRow.Columns.findIndex(o => o == this.selectedColumn);\r\n if (index > 0) {\r\n this.selectedRow.Columns.splice(index, 1);\r\n index--;\r\n this.selectedRow.Columns.splice(index, 0, this.selectedColumn);\r\n }\r\n }\r\n else if (direction == 'right') {\r\n const maxIndex = this.selectedRow.Columns.length - 1;\r\n let index = this.selectedRow.Columns.findIndex(o => o == this.selectedColumn);\r\n if (index >= 0 && index < maxIndex) {\r\n this.selectedRow.Columns.splice(index, 1);\r\n index++;\r\n this.selectedRow.Columns.splice(index, 0, this.selectedColumn);\r\n }\r\n }\r\n }\r\n }\r\n\r\n connectedDropListAdd(id: string) {\r\n if (this.connectedDropLists.find(o => o == id) == null) {\r\n this.connectedDropLists.push(id);\r\n this.observableConnectedDropLists.next(this.connectedDropLists);\r\n }\r\n }\r\n\r\n getPromptForDataObjects(currentControl: EFormControl, page: boolean = false): EFormControl[] {\r\n const promptForDataObjects: EFormControl[] = [];\r\n if (currentControl || page) {\r\n for (let i = 0; i < this.masterControlList.length; i++) {\r\n const control = this.masterControlList[i];\r\n if (!page && control.Id == currentControl.Id) {\r\n break;\r\n }\r\n if (this.promptForDataTypes.findIndex(o => o == control.ControlType) >= 0) {\r\n promptForDataObjects.push(control);\r\n }\r\n }\r\n }\r\n return promptForDataObjects;\r\n }\r\n\r\n getPagePromptForDataObjects(page: EFormPage): EFormControl[] {\r\n if (page.Columns && page.Columns.length > 0) {\r\n return this.getPromptForDataObjects(null, true);\r\n }\r\n return [];\r\n }\r\n\r\n getTabPromptForDataObjects(tab: EFormTab): EFormControl[] {\r\n if (tab.Pages && tab.Pages.length > 0) {\r\n return this.getPagePromptForDataObjects(tab.Pages[0]);\r\n }\r\n return [];\r\n }\r\n\r\n focusOnTab(tab: EFormTab) {\r\n this._selectedTab = tab;\r\n this._selectedElementType = 'tab';\r\n if (tab.Pages && tab.Pages.length > 0) {\r\n this._selectedPage = tab.Pages[0];\r\n }\r\n else {\r\n this._selectedPage = null;\r\n }\r\n this.selectedElementChanged();\r\n this.observableSelectedPageChanged.next(true);\r\n }\r\n\r\n focusOnPage(page: EFormPage) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n if (tab.Pages.find(o => o == page)) {\r\n this._selectedTab = tab;\r\n }\r\n });\r\n this._selectedPage = page;\r\n this._selectedElementType = 'page';\r\n this.selectedElementChanged();\r\n this.observableSelectedPageChanged.next(true);\r\n }\r\n\r\n focusOnColumn(col: EFormColumn) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n if (this.isColumnOnPage(col, page)) {\r\n this._selectedTab = tab;\r\n this._selectedPage = page;\r\n this._selectedRow = null;\r\n page.Columns.forEach(pageCol => {\r\n const row = this.findParentRowForColumn(pageCol, col);\r\n if (row) {\r\n this._selectedRow = row;\r\n }\r\n });\r\n this._selectedColumn = col;\r\n this._selectedElementType = 'column';\r\n this.selectedElementChanged();\r\n }\r\n });\r\n });\r\n }\r\n\r\n focusOnRow(row: EFormRow) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n if (this.isRowOnPage(row, page)) {\r\n this._selectedTab = tab;\r\n this._selectedPage = page;\r\n this._selectedColumn = null;\r\n page.Columns.forEach(pageCol => {\r\n const col = this.findParentColumnForRow(pageCol, row);\r\n if (col) {\r\n this._selectedColumn = col;\r\n }\r\n });\r\n this._selectedRow = row;\r\n this._selectedElementType = 'row';\r\n this.selectedElementChanged();\r\n }\r\n });\r\n });\r\n }\r\n\r\n focusOnControl(control: EFormControl) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n if (this.isControlOnPage(control, page)) {\r\n if (tab != this.selectedTab) {\r\n this._selectedTab = tab;\r\n }\r\n if (page != this.selectedPage) {\r\n this._selectedPage = page;\r\n }\r\n this._selectedColumn = null;\r\n page.Columns.forEach(pageCol => {\r\n const col = this.findParentColumnForControl(pageCol, control);\r\n if (col) {\r\n this._selectedColumn = col;\r\n }\r\n });\r\n this._selectedRow = null;\r\n page.Columns.forEach(pageCol => {\r\n const row = this.findParentRowForControl(pageCol, control);\r\n if (row) {\r\n this._selectedRow = row;\r\n }\r\n });\r\n if (control != this.selectedControl) {\r\n this._selectedControl = control;\r\n }\r\n this._selectedElementType = 'control';\r\n this.selectedElementChanged();\r\n }\r\n });\r\n });\r\n }\r\n\r\n selectedElementChanged() {\r\n this.observableselectedElementChanged.next(true);\r\n }\r\n\r\n openPropertiesTab() {\r\n this.observableOpenPropertiesTab.next(true);\r\n }\r\n\r\n openControlTab() {\r\n this.observableOpenControlTab.next(true);\r\n }\r\n\r\n treeViewExpandAll(expanded: boolean) {\r\n if (this.eFormService.selectedFormData) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Expanded = expanded;\r\n tab.Pages.forEach(page => {\r\n page.Expanded = expanded;\r\n page.Columns.forEach(col => {\r\n this.setExpandAllByColumn(col, expanded);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n setExpandAllByColumn(col: EFormColumn, expanded: boolean) {\r\n col.Expanded = expanded;\r\n col.Rows.forEach(row => {\r\n row.Expanded = expanded;\r\n row.Columns.forEach(rowCol => {\r\n this.setExpandAllByColumn(rowCol, expanded);\r\n });\r\n });\r\n }\r\n\r\n closeMergeFieldWindow() {\r\n this.observableCloseMergeFieldWindow.next(true);\r\n }\r\n\r\n updateConditionalControls(control: EFormControl) {\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n if (tab.ParentObjectId && tab.ParentObjectId == control.Id) {\r\n const index: number = control.DropdownOptions.findIndex(ddo => tab.Condition && ddo.Code == tab.Condition);\r\n if (index == -1) {\r\n tab.Condition = control.DropdownOptions[0].Code;\r\n }\r\n }\r\n\r\n tab.Pages.forEach(page => {\r\n if (page.ParentObjectId && page.ParentObjectId == control.Id) {\r\n const index: number = control.DropdownOptions.findIndex(ddo => page.Condition && ddo.Code == page.Condition);\r\n if (index == -1) {\r\n page.Condition = control.DropdownOptions[0].Code;\r\n }\r\n }\r\n });\r\n\r\n this.eFormService.allFormControls.forEach( formControl => {\r\n if (formControl.ParentObjectId && formControl.ParentObjectId == control.Id) {\r\n const index: number = control.DropdownOptions.findIndex(ddo => formControl.Condition && ddo.Code == formControl.Condition);\r\n if (index == -1) {\r\n formControl.Condition = control.DropdownOptions[0].Code;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n rowHasNonRemovableControls(row: EFormRow): boolean {\r\n let nonRemovable = false;\r\n if (row.Controls && row.Controls.length > 0) {\r\n nonRemovable = row.Controls.find(o => o.CannotBeRemoved) != null;\r\n }\r\n else if (row.Columns && row.Columns.length > 0) {\r\n row.Columns.forEach(col => {\r\n if (this.columnHasNonRemovableControls(col)) {\r\n nonRemovable = true;\r\n }\r\n });\r\n }\r\n return nonRemovable;\r\n }\r\n\r\n columnHasNonRemovableControls(col: EFormColumn): boolean {\r\n let nonRemovable = false;\r\n if (col.Controls && col.Controls.length > 0) {\r\n nonRemovable = col.Controls.find(o => o.CannotBeRemoved) != null;\r\n }\r\n else if (col.Rows && col.Rows.length > 0) {\r\n col.Rows.forEach(row => {\r\n if (this.rowHasNonRemovableControls(row)) {\r\n nonRemovable = true;\r\n }\r\n });\r\n }\r\n return nonRemovable;\r\n }\r\n\r\n pageHasNonRemovableControls(page: EFormPage): boolean {\r\n let nonRemovable = false;\r\n if (page.Columns && page.Columns.length > 0) {\r\n page.Columns.forEach(col => {\r\n if (this.columnHasNonRemovableControls(col)) {\r\n nonRemovable = true;\r\n }\r\n });\r\n }\r\n else if (page.Rows && page.Rows.length > 0) {\r\n page.Rows.forEach(row => {\r\n if (this.rowHasNonRemovableControls(row)) {\r\n nonRemovable = true;\r\n }\r\n });\r\n }\r\n return nonRemovable;\r\n }\r\n\r\n tabHasNonRemovableControls (tab: EFormTab): boolean {\r\n let nonRemovable = false;\r\n if (tab.Pages && tab.Pages.length > 0) {\r\n tab.Pages.forEach(page => {\r\n if (this.pageHasNonRemovableControls(page)) {\r\n nonRemovable = true;\r\n }\r\n });\r\n }\r\n return nonRemovable;\r\n }\r\n\r\n convertEFormControlTypeToCustomFieldTypeID(ControlType: string): number {\r\n switch (ControlType) {\r\n case this.eFormService.controlTypes.textbox:\r\n return CustomFieldControlTypeEnum.Textbox;\r\n case this.eFormService.controlTypes.image:\r\n return CustomFieldControlTypeEnum.Image;\r\n case this.eFormService.controlTypes.buttons:\r\n return CustomFieldControlTypeEnum.Buttons;\r\n case this.eFormService.controlTypes.radioButtons:\r\n return CustomFieldControlTypeEnum.RadioButtons;\r\n case this.eFormService.controlTypes.note:\r\n return CustomFieldControlTypeEnum.MultiLineTextbox;\r\n case this.eFormService.controlTypes.date:\r\n return CustomFieldControlTypeEnum.Date;\r\n case this.eFormService.controlTypes.checkbox:\r\n return CustomFieldControlTypeEnum.Checkbox;\r\n case this.eFormService.controlTypes.dropdown:\r\n return CustomFieldControlTypeEnum.Dropdown;\r\n case this.eFormService.controlTypes.text:\r\n return CustomFieldControlTypeEnum.Text;\r\n case this.eFormService.controlTypes.component:\r\n return CustomFieldControlTypeEnum.Component;\r\n case this.eFormService.controlTypes.time:\r\n return CustomFieldControlTypeEnum.Time;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n canDeleteColumn(col: EFormColumn): boolean {\r\n // get page this column is on\r\n let parentPage: EFormPage;\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n if (this.isColumnOnPage(col, page)) {\r\n parentPage = page;\r\n }\r\n });\r\n });\r\n // cannot delete colum if it is the only top-level column on the page\r\n return parentPage && col && parentPage.Columns && (parentPage.Columns.length > 1 || parentPage.Columns[0] != col);\r\n }\r\n\r\n canDeletePage(page: EFormPage): boolean {\r\n // get tab this page is on\r\n let parentTab: EFormTab;\r\n this.eFormService.selectedFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(p => {\r\n if (p == page) {\r\n parentTab = tab;\r\n }\r\n });\r\n });\r\n // cannot delete page if the tab only has one page\r\n return page && parentTab && parentTab.Pages.length > 1;\r\n }\r\n}\r\n","

{{headerLabel}}

\r\n\r\n
\r\n
\r\n \r\n Left of current column\r\n \r\n
\r\n \r\n Right of current column\r\n \r\n
\r\n
\r\n \r\n Above current row\r\n \r\n
\r\n \r\n Below current row\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { EFormControl } from '../../../../shared-components/e-forms/e-form-control.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-e-form-row-column-location',\r\n templateUrl: './e-form-row-column-location.html'\r\n})\r\n\r\nexport class EFormRrowColumnLocationComponent implements OnInit {\r\n\r\n objects: EFormControl[];\r\n selectedObject: EFormControl;\r\n location: string;\r\n headerLabel: string;\r\n cotrolType: string;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n if(this.cotrolType == 'row'){\r\n this.location = 'above';\r\n }\r\n else{\r\n this.location = 'right';\r\n }\r\n }\r\n SetRadioValue(value) {\r\n this.location = value;\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n if (this.location)\r\n this.dialogRef.close(this.location);\r\n }\r\n}\r\n","
2}\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
0\" cdkDropList class=\"dropList\" [cdkDropListData]=\"row.Columns\" (cdkDropListDropped)=\"columnDropped($event)\" \r\n cdkDropListOrientation=\"horizontal\" [cdkDropListEnterPredicate]=\"columnPredicate\" [ngStyle]=\"{'align-items': row.Alignment}\">\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
0\" class=\"dropList\" cdkDropList #controlList [cdkDropListConnectedTo]=\"connectedDropLists\" [ngStyle]=\"{'align-items': row.Alignment}\"\r\n [cdkDropListData]=\"row.Controls\" (cdkDropListDropped)=\"controlDropped($event)\" cdkDropListOrientation=\"horizontal\">\r\n \r\n \r\n \r\n
\r\n
\r\n Row - Drop Controls Here\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit, Input, OnDestroy, ElementRef, AfterViewInit, ViewChildren, QueryList } from '@angular/core';\r\nimport { EFormRow } from '../../../../shared-components/e-forms/e-form-row.model';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDrag } from '@angular/cdk/drag-drop';\r\nimport { EFormColumn } from '../../../../shared-components/e-forms/e-form-column.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormControl } from '../../../../shared-components/e-forms/e-form-control.model';\r\nimport * as _ from 'lodash';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { EFormRrowColumnLocationComponent } from '../e-form-row-column-location/e-form-row-column-location';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-row',\r\n templateUrl: './e-form-row.component.html',\r\n styleUrls: ['./e-form-row.component.css']\r\n})\r\nexport class EFormRowComponent implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n @Input() row: EFormRow;\r\n @Input() hideEditHeader: boolean;\r\n @Input() config: EFormConfiguration;\r\n isSelected = false;\r\n subscriptions: Subscription[] = [];\r\n isDragging = false;\r\n connectedDropLists: string[] = [];\r\n @ViewChildren('controlList', { read: ElementRef }) set sort(lists: QueryList) {\r\n lists.forEach(list => {\r\n this.eFormDesignerService.connectedDropListAdd(list.nativeElement.id);\r\n });\r\n }\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.setSelectedStatus();\r\n this.subscriptions.push(this.eFormDesignerService.observableselectedElementChangedStream$.subscribe(o => {\r\n this.setSelectedStatus();\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragStartStream$.subscribe(() => {\r\n this.isDragging = true;\r\n }));\r\n this.subscriptions.push(this.eFormDesignerService.observableDragEndStream$.subscribe(() => {\r\n this.isDragging = false;\r\n }));\r\n this.connectedDropLists = this.eFormDesignerService.connectedDropLists;\r\n this.subscriptions.push(this.eFormDesignerService.observableConnectedDropListsStream$.subscribe((list) => {\r\n this.connectedDropLists = list;\r\n }));\r\n }\r\n\r\n setSelectedStatus() {\r\n if (this.eFormDesignerService.selectedElementType == 'row' && this.eFormDesignerService.selectedRow == this.row) {\r\n setTimeout(() => {\r\n this.isSelected = true;\r\n }, 0);\r\n }\r\n else {\r\n setTimeout(() => {\r\n this.isSelected = false;\r\n }, 0);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // this.eFormDesignerService.connectedDropListAdd(this.controlList.nativeElement.id);\r\n }\r\n\r\n rowClick(event) {\r\n event.preventDefault();\r\n this.eFormDesignerService.focusOnRow(this.row);\r\n event.stopPropagation();\r\n this.eFormDesignerService.openPropertiesTab();\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n controlDropped(event: CdkDragDrop) {\r\n if (event.container.id === event.previousContainer.id) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n else if (event.previousContainer.id.indexOf('controlPalette') >= 0) {\r\n const newControl = _.cloneDeep(event.item.data);\r\n this.eFormDesignerService.assignControlsNewID([newControl]);\r\n // newControl.Id = ++this.eFormService.selectedFormData.LastUsedControlId;\r\n // this.row.Controls.push(newControl);\r\n this.row.Controls.splice(event.currentIndex, 0, newControl);\r\n }\r\n else {\r\n transferArrayItem(event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex);\r\n }\r\n if (this.row.Columns && this.row.Columns.length > 0) {\r\n this.row.Controls.forEach(control => {\r\n const newColumn = new EFormColumn(this.config);\r\n newColumn.Controls = [];\r\n newColumn.Controls.push(control);\r\n this.row.Columns.push(newColumn);\r\n });\r\n this.row.Controls = [];\r\n }\r\n this.eFormDesignerService.getAllFormControls();\r\n this.eFormDesignerService.focusOnControl(event.container.data[event.currentIndex]);\r\n }\r\n\r\n dragStart() {\r\n this.eFormDesignerService.dragStart();\r\n }\r\n\r\n dragEnd() {\r\n this.eFormDesignerService.dragEnd();\r\n }\r\n\r\n columnPredicate(item: CdkDrag) {\r\n if (this.row && this.row.Columns && this.row.Columns.find(o => o == item.data)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n columnDropped(event: CdkDragDrop) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(this.row.Columns, event.previousIndex, event.currentIndex);\r\n }\r\n }\r\n\r\n deleteClick() {\r\n if (this.eFormDesignerService.rowHasNonRemovableControls(this.row)) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Row';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'This row contains controls that cannot be removed.';\r\n }\r\n else {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Row';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this row and all its content?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.eFormDesignerService.deleteSelectedElement();\r\n }\r\n });\r\n }\r\n }\r\n\r\n copyClick() {\r\n this.eFormDesignerService.locationToAdd = '';\r\n const copyConfirmDialog = this.dialog.open(EFormRrowColumnLocationComponent, {\r\n disableClose: true,\r\n });\r\n copyConfirmDialog.componentInstance.headerLabel = 'Copy Row';\r\n copyConfirmDialog.componentInstance.cotrolType = 'row';\r\n this.subscriptions.push(copyConfirmDialog.afterClosed().subscribe(result => {\r\n if (result) {\r\n this.eFormDesignerService.locationToAdd = '';\r\n this.eFormDesignerService.locationToAdd = result;\r\n this.eFormDesignerService.addRow(this.config.IsMobile);\r\n }\r\n else {\r\n this.eFormDesignerService.locationToAdd = '';\r\n }\r\n }));\r\n }\r\n\r\n getControlId(index: number, control: EFormControl) {\r\n return control.Id;\r\n }\r\n\r\n getColId(index: number, col: EFormColumn) {\r\n return index;\r\n }\r\n\r\n}\r\n","

WARNING

\r\n\r\n
The following open e-Forms were created from this template and will NOT be updated if the changes made are saved.
\r\n
If these changes need to be made to any of these e-Forms, they will need to be made individually to each one.
\r\n
{{template.Name}} - {{instance.Name}}
\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormInstance } from '../../../../shared-components/e-forms/e-form-instance.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormTemplate } from '../../../../shared-components/e-forms/e-form-template.model';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'app-e-form-template-in-use-warning',\r\n templateUrl: './e-form-template-in-use-warning.component.html',\r\n styleUrls: ['./e-form-template-in-use-warning.component.css']\r\n})\r\nexport class EFormTemplateInUseWarningComponent implements OnInit, OnDestroy {\r\n\r\n template: EFormTemplate;\r\n instances: EFormInstance[] = [];\r\n subscriptions: Subscription[] = [];\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private eFormService: EFormService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) {\r\n this.template = data.template;\r\n }\r\n\r\n ngOnInit() {\r\n this.getInstances();\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n getInstances() {\r\n if (this.template) {\r\n this.subscriptions.push(this.eFormService.getInstancesByTemplateId(this.template.ID).subscribe(instances => {\r\n this.instances = instances;\r\n }));\r\n }\r\n }\r\n\r\n continueClick() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n}\r\n","

\r\n Merge Fields\r\n

\r\n\r\n \r\n \r\n \r\n
{{listGroup.category}}
\r\n {{field.DisplayName}}\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormMergeField } from '../../../../shared-components/e-forms/e-form-merge-field.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport * as _ from 'lodash';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../e-form-config.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-merge-field-dialog',\r\n templateUrl: './merge-field-dialog.component.html',\r\n styleUrls: ['./merge-field-dialog.component.css']\r\n})\r\nexport class MergeFieldDialogComponent implements OnInit, OnDestroy {\r\n\r\n mergeFields: EFormMergeField[] = [];\r\n subscriptions: Subscription[] = [];\r\n config: EFormConfiguration;\r\n fieldList: any[] = [];\r\n @ViewChild(MatSort) sort: MatSort;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService\r\n ) {\r\n this.config = (data && data.config) ? data.config : new EFormConfiguration();\r\n }\r\n\r\n ngOnInit() {\r\n this.getMergeFields();\r\n this.subscriptions.push(this.eFormDesignerService.observableCloseMergeFieldWindowStream$.subscribe(result => {\r\n this.dialogRef.close();\r\n }));\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n getMergeFields() {\r\n if (!this.eFormService.mergeFields || this.eFormService.mergeFields.length == 0) {\r\n this.subscriptions.push(this.eFormService.getMergeFields().subscribe(fields => {\r\n this.eFormService.mergeFields = fields;\r\n this.filterMergeFields();\r\n this.organizeMergeFields();\r\n }));\r\n }\r\n else {\r\n this.filterMergeFields();\r\n this.organizeMergeFields();\r\n }\r\n }\r\n\r\n filterMergeFields() {\r\n if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n this.mergeFields = this.eFormService.mergeFields.filter( o => o.UseOnFRMA && (this.data.allowStudentSpecificMergeFields || o.FieldName != '<>') && (this.data.allowAdultSpecificMergeFields || o.FieldName != '<>'));\r\n\r\n }\r\n else if (this.config.PageFlag) {\r\n this.mergeFields = this.eFormService.mergeFields.filter(o => o.UseOnStudentForm || o.UseOnStudentGPA);\r\n }\r\n else if (this.eFormService.selectedTemplate && this.eFormService.selectedTemplate != undefined && this.eFormService.selectedTemplate.Type) {\r\n this.mergeFields = this.eFormService.mergeFields.filter(o => (o.UseOnFamilyForm && this.eFormService.selectedTemplate.Type == 'family')\r\n || ((o.UseOnStudentForm || o.UseOnStudentGPA) && this.eFormService.selectedTemplate.Type == 'student')\r\n || (o.UseOnBehaviorLetter && this.eFormService.selectedTemplate.Type == 'behavior')\r\n || (o.UseOnAttendanceLetter && this.eFormService.selectedTemplate.Type == 'attendance'));\r\n }\r\n else {\r\n if (this.eFormService.selectedInstance && this.eFormService.selectedInstance != undefined && this.eFormService.selectedInstance.TemplateType) {\r\n this.mergeFields = this.eFormService.mergeFields.filter(o => (o.UseOnFamilyForm && this.eFormService.selectedInstance.TemplateType == 'family') || ((o.UseOnStudentForm || o.UseOnStudentGPA) && this.eFormService.selectedInstance.TemplateType == 'student'));\r\n }\r\n }\r\n }\r\n\r\n mergeFieldClicked(field: EFormMergeField) {\r\n if (this.data && this.data.noOperation) {\r\n this.eFormDesignerService.observableChoiceMergeFieldClicked.next(field);\r\n }\r\n else {\r\n this.eFormDesignerService.observableMergeFieldClicked.next(field);\r\n }\r\n }\r\n\r\n organizeMergeFields() {\r\n const fieldList: any[] = [];\r\n let otherCategory: any; // The \"Other\" category goes at the end of the list. Other categories are in alphabetical order\r\n const categories = _.sortBy(_.uniq(_.map(this.mergeFields, o => o.Category)), o => o);\r\n categories.forEach(cat => {\r\n const catObj = {\r\n category: cat,\r\n fields: []\r\n };\r\n catObj.fields = _.sortBy(this.mergeFields.filter(o => o.Category == cat), o => o.DisplayName);\r\n if (catObj.category.toLowerCase() == 'other') {\r\n otherCategory = catObj;\r\n }\r\n else {\r\n fieldList.push(catObj);\r\n }\r\n });\r\n if (otherCategory) {\r\n fieldList.push(otherCategory);\r\n }\r\n this.fieldList = fieldList;\r\n }\r\n\r\n}\r\n","

Value from another control

\r\n\r\n
\r\n Merge value from \r\n \r\n \r\n {{object | getDesignerControlName}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { EFormControl } from '../../../../shared-components/e-forms/e-form-control.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormDesignerService } from '../e-form-designer.service';\r\n\r\n@Component({\r\n selector: 'app-value-from-another-field-dialog',\r\n templateUrl: './value-from-another-field-dialog.component.html',\r\n styleUrls: ['./value-from-another-field-dialog.component.css']\r\n})\r\nexport class ValueFromAnotherFieldDialogComponent implements OnInit {\r\n\r\n objects: EFormControl[];\r\n selectedObject: EFormControl;\r\n constructor(\r\n private eFormDesignerService: EFormDesignerService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef,\r\n private eFormService: EFormService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.getPromptForDataObjects();\r\n }\r\n\r\n getPromptForDataObjects() {\r\n this.objects = this.eFormDesignerService.getPromptForDataObjects(this.eFormDesignerService.selectedControl);\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n const mergeTag = '<<' + this.eFormService.formatControlName(this.selectedObject) + '>>';\r\n this.dialogRef.close(mergeTag);\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { EForm } from '../e-form.model';\r\nimport { EFormService } from '../e-form.service';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n\tselector: 'app-e-form-notes',\r\n\ttemplateUrl: './e-form-notes.component.html',\r\n\t// styleUrls: ['./e-form-notes.component.scss']\r\n})\r\nexport class EFormNotesComponent implements OnInit {\r\n\r\n\teForm: EForm;\r\n\tnote = '';\r\n\r\n\tconstructor(\r\n\t\tprivate dialog: MatDialogRef,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: any,\r\n\t\tprivate eFormService: EFormService\r\n\t) {\r\n\t\tthis.eForm = _.cloneDeep(this.data.eForm);\r\n\t\tthis.note = this.eForm.StaffNote;\r\n\t}\r\n\r\n\tngOnInit() {\r\n\r\n\t}\r\n\r\n\tsaveClick() {\r\n\t\tthis.eForm.StaffNote = this.note;\r\n\t\t// this.eFormService.saveEForm(this.eForm).subscribe();\r\n\t\tthis.dialog.close(this.eForm);\r\n\t}\r\n\r\n\tcloseClick() {\r\n\t\tthis.dialog.close();\r\n\t}\r\n\r\n}\r\n","

Notes

\r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n","import { EFormColumn } from './e-form-column.model';\r\nimport { EFormControl } from './e-form-control.model';\r\n\r\nexport class EFormRow {\r\n Id: number;\r\n Height = 75;\r\n Order: number;\r\n Columns: EFormColumn[] = [];\r\n Controls: EFormControl[] = [];\r\n Alignment = 'flex-start';\r\n\r\n // Tree View Property\r\n Expanded: boolean;\r\n}","export class EFormSurveyFieldCriticalValue {\r\n ID: number;\r\n SurveyFieldID: number;\r\n Value: string;\r\n AddedOn: Date;\r\n Addedby: number;\r\n LastUpOn: Date;\r\n LastUpBy: number;\r\n }","import { EFormSurveyFieldCriticalValue } from './e-form-survey-field-critical-value.model';\r\n\r\nexport class EFormSurveyField {\r\n ID: number;\r\n ForTemplate: boolean;\r\n TemplateID: number;\r\n InstanceID: number;\r\n QuestionText: string;\r\n ControlType: string;\r\n IsRequired: boolean;\r\n DefaultValue: string;\r\n CriticalQuestion: boolean;\r\n IsSelectionControl: boolean;\r\n AddedOn: Date;\r\n Addedby: number;\r\n LastUpOn: Date;\r\n LastUpBy: number;\r\n CriticalValues: EFormSurveyFieldCriticalValue[];\r\n EFormControlID: number; // This will NOT be stored in the DB. The only purpose is so we can create survey field records and them map those ID's back to the control to store the SurveyField ID in the JSON. The control ID is not reliable long-term.\r\n }","
\r\n
0\">\r\n \r\n \r\n
\r\n \r\n
0\" class='eFormColumn' [ngStyle]=\"{'align-items': column.Alignment}\">\r\n \r\n \r\n
\r\n
\r\n\r\n
","import { Component, OnInit, Input, AfterViewInit, EventEmitter, Output } from '@angular/core';\r\nimport { EFormColumn } from '../../e-form-column.model';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\n\r\n@Component({\r\n selector: 'e-form-viewer-column',\r\n templateUrl: './e-form-viewer-column.component.html',\r\n styleUrls: ['./e-form-viewer-column.component.css']\r\n})\r\nexport class EFormViewerColumnComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() column: EFormColumn;\r\n @Input() editable: boolean;\r\n @Input() disableMergeFields: boolean;\r\n @Input() print: boolean;\r\n @Input() showConditionals: boolean;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() config: EFormConfiguration;\r\n @Input() topLevel: Boolean = false;\r\n @Output() viewInitialized: EventEmitter = new EventEmitter();\r\n controlViewStatuses: any[] = [];\r\n rowViewStatuses: any[] = [];\r\n initialized = false;\r\n constructor() { \r\n const x = this.masterId;\r\n }\r\n\r\n ngOnInit() {\r\n this.column.Controls.forEach(control => {\r\n if (control.Visible) {\r\n this.controlViewStatuses.push({Id: control.Id, Initialized: false});\r\n }\r\n });\r\n for (let i = 0; i < this.column.Rows.length; i++) {\r\n this.rowViewStatuses.push({Id: i, Initialized: false});\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initialized = true;\r\n this.checkInitializedStatus();\r\n }\r\n\r\n checkInitializedStatus() {\r\n if(this.topLevel) {\r\n let filler = 'filler';\r\n }\r\n if (this.initialized && this.controlViewStatuses.find(o => o.Initialized == false) == null && this.rowViewStatuses.find(o => o.Initialized == false) == null) {\r\n if(this.topLevel) {\r\n let filler = 'filler';\r\n }\r\n setTimeout(() => {\r\n if(this.topLevel) {\r\n let filler = 'filler';\r\n }\r\n this.viewInitialized.emit(true);\r\n }, 0);\r\n }\r\n }\r\n\r\n controlInitialized(control: EFormControl) {\r\n const status = this.controlViewStatuses.find(o => o.Id == control.Id);\r\n if (status) {\r\n status.Initialized = true;\r\n }\r\n this.checkInitializedStatus();\r\n }\r\n\r\n rowInitialized(index: number) {\r\n const status = this.rowViewStatuses.find(o => o.Id == index);\r\n if (status) {\r\n status.Initialized = true;\r\n }\r\n this.checkInitializedStatus();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n [{{control.Instructions}}]\r\n [No instructions entered]\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}} *\r\n \r\n \r\n {{chip.CodeDescription | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger}}\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n  *\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{option.CodeDescription | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n
\r\n
\r\n {{control.Value}}\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n
\r\n
\r\n {{control.Value}}\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n
\r\n
\r\n {{control.Value}}\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n *
\r\n
\r\n \r\n {{opt.CodeDescription | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{control.HideLabel ? \"\" : (control.Label | tylTranslate | translate | mergeField: disableMergeFields: pipeTrigger)}}\r\n  *\r\n \r\n \r\n \r\n
0 && !control.Editable\" style=\"display: flex; flex-direction: column;\">\r\n \r\n {{control.Attachment.OriginalFileName}}\r\n \r\n\r\n
ATTACHMENT\r\n -  {{control.Attachment.OriginalFileName}}
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \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, OnInit, Input, OnDestroy, Output, EventEmitter, AfterViewInit, TemplateRef, ViewChild, ElementRef } from '@angular/core';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport { EFormService } from '../../e-form.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormAttachment } from '../../e-form-attachment.model';\r\nimport { System } from '../../../System';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport * as moment from 'moment';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { StudentAttachment } from '../../../../shared-modules/student-attachment/student-attachment.model';\r\nimport { CustomDataTemplateRef } from '../../../../shared-modules/customization-framework/models/custom-data-template-ref.model';\r\nimport { ErrorList } from '../../../controls/error-prompt/error-list.model';\r\nimport { CustomDataFieldComponent } from '../../../../shared-modules/customization-framework/custom-data-field/custom-data-field.component';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\nimport { TylTranslatePipe } from '../../../pipes/tyl-translate.pipe';\r\nimport { YearService } from '../../../year/year.service';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'e-form-viewer-control',\r\n templateUrl: './e-form-viewer-control.component.html',\r\n styleUrls: ['./e-form-viewer-control.component.css']// ,\r\n // encapsulation: ViewEncapsulation.None\r\n})\r\nexport class EFormViewerControlComponent implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n private _control: EFormControl;\r\n public get control(): EFormControl {\r\n return this._control;\r\n }\r\n @Input() public set control(value: EFormControl) {\r\n this._control = value;\r\n this.originalEditableValue = this._control.Editable == null || this._control.Editable == true;\r\n }\r\n\r\n private _editable = false;\r\n public get editable(): boolean {\r\n return this._editable && this.passedConditionalCheck;\r\n }\r\n @Input() public set editable(value: boolean) {\r\n this._editable = value;\r\n if (this.control) {\r\n if (value == false) {\r\n this.control.Editable = false;\r\n }\r\n else {\r\n this.control.Editable = this.originalEditableValue && this.passedConditionalCheck;\r\n }\r\n }\r\n }\r\n @Input() disableMergeFields: boolean;\r\n @Input() print: boolean;\r\n @Input() showConditionals: boolean;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() config: EFormConfiguration;\r\n @Output() viewInitialized: EventEmitter = new EventEmitter();\r\n @Output() controlValueChanged: EventEmitter = new EventEmitter();\r\n @ViewChild('customField') customField: CustomDataFieldComponent;\r\n showConditionalObjects = false;\r\n radioValues: string[] = [];\r\n radioLabels: string[] = [];\r\n radioIds: string[] = [];\r\n viewType: string;\r\n subscriptions: Subscription[] = [];\r\n mergeFieldDependantControlIds: number[] = [];\r\n dateValue: moment.Moment;\r\n highlightChanges = false;\r\n pipeTrigger = false;\r\n maxFileSizeByte = 0;\r\n maxFileSizeMessage = '';\r\n contentTemplate: TemplateRef;\r\n originalEditableValue = true;\r\n private _passedConditionalCheck = true;\r\n public get passedConditionalCheck(): boolean {\r\n return this._passedConditionalCheck;\r\n }\r\n public set passedConditionalCheck(value: boolean) {\r\n this._passedConditionalCheck = value;\r\n if (this.control) {\r\n if (value == false) {\r\n this.control.Editable = false;\r\n }\r\n else {\r\n this.control.Editable = this.originalEditableValue && this._editable;\r\n }\r\n }\r\n }\r\n\r\n // eFormAttachment: EFormAttachment[] = []\r\n constructor(private eFormService: EFormService,\r\n private loginService: LoginService,\r\n private translateService: TranslateService) {\r\n const x = this.masterId;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.control) {\r\n // ONE-10856 Mobile is saving the checkbox value as a string\r\n if (this.control.ControlType == 'checkbox') {\r\n if (this.control.Value == 'true') { this.control.Value = true; }\r\n if (this.control.Value == 'false') { this.control.Value = false; }\r\n }\r\n if (this.editable == false) {\r\n this.control.Editable = false;\r\n }\r\n else {\r\n this.control.Editable = this.originalEditableValue;\r\n }\r\n if (this.control.Width) {\r\n if (!this.control.Width.toString().includes('px') && !this.control.Width.toString().includes('%')) {\r\n this.control.Width = this.control.Width.toString() + 'px';\r\n }\r\n }\r\n }\r\n this.eFormService.eFormAttachment.forEach(att => {\r\n if (this.control.AttachmentId == att.ID) {\r\n this.control.Attachment = att;\r\n }\r\n });\r\n // // #########\r\n // if(this.control.ControlType == 'attachment' && this.control.Attachment){\r\n // this.eFormService.eFormAttachment.push(this.control.Attachment);\r\n // }\r\n // // #########\r\n this.viewType = this.eFormService.viewType;\r\n if (this.config.NewForm && this.control.DropdownOptions && this.control.DropdownOptions.length > 0) {\r\n this.setDefaultOptionFlags();\r\n }\r\n this.setInitialVisibility();\r\n this.subscriptions.push(this.eFormService.observableControlValueChangedStream$.subscribe(parentControl => {\r\n if (this.control.ParentObjectId == parentControl.Id) {\r\n const conditionMet = this.eFormService.isConditionMet(this.control.Condition, parentControl);\r\n if (this.control.ConditionalAction == 'enable') {\r\n this.passedConditionalCheck = conditionMet;\r\n }\r\n else {\r\n this.control.Visible = conditionMet;\r\n }\r\n if (!this.control.Visible && this.control.ControlType != 'text') {\r\n this.control.Value = null;\r\n this.dateValue = null;\r\n if (this.control.ControlType == this.eFormService.controlTypes.attachment) {\r\n this.control.Attachment = null;\r\n this.control.AttachmentId = null;\r\n this.control.PreviousAttachmentId = null;\r\n }\r\n this.valueChanged();\r\n }\r\n else if (this.control.Visible && this.control.ControlType != 'text' && this.control.DropdownOptions && this.control.DropdownOptions.length > 0) {\r\n this.control.DropdownOptions.forEach( option => {\r\n if (option.Default) {\r\n if (this.control.LinkedDBField != -1) {\r\n this.control.Value = option.Code;\r\n }\r\n else {\r\n this.control.Value = option.CodeDescription;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n if (this.mergeFieldDependantControlIds.includes(parentControl.Id)) {\r\n this.transformMergeTags();\r\n this.pipeTrigger = !this.pipeTrigger;\r\n setTimeout(() => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n }, 100);\r\n }\r\n }));\r\n this.subscriptions.push(this.eFormService.observableShowConditionalObjectsStream$.subscribe(showConditional => {\r\n this.showConditionalObjects = showConditional;\r\n }));\r\n this.subscriptions.push(this.eFormService.observableMergeFieldValuesRetrievedStream$.subscribe(fieldsExist => {\r\n this.transformMergeTags();\r\n this.pipeTrigger = !this.pipeTrigger;\r\n setTimeout(() => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n }, 100);\r\n }));\r\n this.subscriptions.push(this.eFormService.observablePipeTriggerStream$.subscribe(trigger => {\r\n this.transformMergeTags();\r\n this.pipeTrigger = !this.pipeTrigger;\r\n setTimeout(() => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n }, 100);\r\n }));\r\n if (this.control.ControlType == this.eFormService.controlTypes.radioButtons) {\r\n this.setUpRadioButtons();\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.image || this.control.ControlType == this.eFormService.controlTypes.linkToFile || this.control.ControlType == this.eFormService.controlTypes.attachment) {\r\n this.getAttachment();\r\n }\r\n else if (this.control.ControlType == this.eFormService.controlTypes.date) {\r\n if (this.control.Value) {\r\n this.dateValue = moment(this.control.Value);\r\n if (!this.dateValue.isValid()) {\r\n this.dateValue = null;\r\n }\r\n }\r\n }\r\n this.getMergeFieldDependantControls();\r\n if (this.eFormService.changes && this.eFormService.changes.find(o => o.ObjectType == 'Control' && o.FieldId == this.control.Id) != null) {\r\n this.highlightChanges = true;\r\n }\r\n if (this.control.ControlType == 'attachment') {\r\n this.setMaxFileSize();\r\n }\r\n if (this.control.ControlType == 'component') {\r\n if (this.eFormService.contentTemplates && this.eFormService.contentTemplates.length > 0) {\r\n const customDataTemplateRef: CustomDataTemplateRef = this.eFormService.contentTemplates.find(ct => ct.RefName == this.control.CustomFieldRefName);\r\n if (customDataTemplateRef) {\r\n this.contentTemplate = customDataTemplateRef.TemplateRef;\r\n }\r\n }\r\n }\r\n this.subscriptions.push(this.eFormService.observableReadOnlyStatusChangedStream$.subscribe(control => {\r\n if (control == this.control) {\r\n this.editable = control.Editable;\r\n }\r\n }));\r\n\r\n this.control.validateFunction = this.validate.bind(this);\r\n this.control.getElementRef = this.getElementRef.bind(this);\r\n this.control.DesignPageIndex = this.designPageIndex;\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.loaded();\r\n }, 0);\r\n }\r\n\r\n getMergeFieldDependantControls() {\r\n this.mergeFieldDependantControlIds = [];\r\n if (this.control.ControlType == this.eFormService.controlTypes.text) {\r\n this.mergeFieldDependantControlIds = this.mergeFieldDependantControlIds.concat(this.extractMergeTagIds(this.control.Value));\r\n }\r\n else {\r\n this.mergeFieldDependantControlIds = this.mergeFieldDependantControlIds.concat(this.extractMergeTagIds(this.control.Label));\r\n if (this.control && this.control.DropdownOptions) {\r\n this.control.DropdownOptions.forEach(opt => {\r\n this.mergeFieldDependantControlIds = this.mergeFieldDependantControlIds.concat(this.extractMergeTagIds(opt.CodeDescription));\r\n });\r\n }\r\n }\r\n }\r\n\r\n transformMergeTags() {\r\n // Moved to MergeFieldPipe to prevent overriding values in formData\r\n\r\n // when merge tag values are pulled from the database, we can just replace the tag rather than using a pipe. That way saved forms are exactly what the parent saw\r\n // when they saved the form even if the database values changed since then.\r\n // when the value is obtained from another object on the form, we need to use the pipe so that it can keep updating as the parent object changes.\r\n // if (!this.disableMergeFields) {\r\n // if (this.control.ControlType == this.eFormService.controlTypes.text) {\r\n // //this.control.Value = this.tylTranslatePipe.transform(this.control.Value);\r\n // this.control.Value = this.eFormService.transformDatabaseMergeTag(this.control.Value);\r\n // }\r\n // else {\r\n // //this.control.Label = this.tylTranslatePipe.transform(this.control.Label);\r\n // this.control.Label = this.eFormService.transformDatabaseMergeTag(this.control.Label);\r\n // this.control.DropdownOptions.forEach(opt => {\r\n // opt.CodeDescription = this.eFormService.transformDatabaseMergeTag(opt.CodeDescription);\r\n // });\r\n // }\r\n // }\r\n }\r\n\r\n extractMergeTagIds(text: string): number[] {\r\n const ids: number[] = [];\r\n let otherMatches: string[] = [];\r\n const otherFieldsRegEx = new RegExp('<<(.*?)>>', 'g');\r\n const otherFieldsSanitizedRegEx = new RegExp('<<(.*?)>>', 'g');\r\n otherMatches = text.match(otherFieldsRegEx);\r\n if (!otherMatches) {\r\n otherMatches = text.match(otherFieldsSanitizedRegEx);\r\n }\r\n\r\n if (otherMatches) {\r\n otherMatches.forEach(mergeTag => {\r\n const id = this.eFormService.getControlIdFromMergeTag(mergeTag);\r\n if (!isNaN(id)) {\r\n ids.push(id);\r\n }\r\n });\r\n }\r\n return ids;\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n setInitialVisibility() {\r\n this.control.Visible = true;\r\n\r\n if (this.control.ParentObjectId > 0) {\r\n const parentObject = this.eFormService.allFormControls.find(o => o.Id == this.control.ParentObjectId);\r\n if (parentObject) {\r\n const conditionMet = this.eFormService.isConditionMet(this.control.Condition, parentObject);\r\n if (this.control.ConditionalAction == 'enable') {\r\n this.passedConditionalCheck = conditionMet;\r\n }\r\n else {\r\n this.control.Visible = conditionMet;\r\n }\r\n if (!this.control.Visible) {\r\n if (this.eFormService.inputControlTypes.includes(this.control.ControlType)) {\r\n this.control.Value = null;\r\n this.control.Attachment = null;\r\n this.control.AttachmentId = null;\r\n this.control.PreviousAttachmentId = null;\r\n }\r\n }\r\n else if (this.control.Value == null && this.control.DropdownOptions && this.control.DropdownOptions.length > 0) {\r\n this.control.DropdownOptions.forEach( option => {\r\n if (option.Default) {\r\n if (this.control.LinkedDBField != -1) {\r\n this.control.Value = option.Code;\r\n }\r\n else {\r\n this.control.Value = option.CodeDescription;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setDefaultOptionFlags() {\r\n if (this.control.DropdownOptions.filter( option => option.Default).length == 0) {\r\n this.control.DropdownOptions.forEach( option => {\r\n if (this.control.LinkedDBField != -1) {\r\n option.Default = this.control.Value == option.Code;\r\n }\r\n else {\r\n option.Default = this.control.Value == option.CodeDescription;\r\n }\r\n });\r\n }\r\n }\r\n\r\n getAttachment() {\r\n if (this.control.AttachmentId && ((this.control.Attachment == null || this.control.Attachment == undefined) || (this.control.Attachment != null && this.control.Attachment != undefined && !this.control.Attachment.FileDataBase64))) {\r\n this.control.Attachment = new EFormAttachment();\r\n this.control.PreviousAttachmentId = null;\r\n this.subscriptions.push(this.eFormService.getEFormAttachment(this.control.AttachmentId).subscribe(attachment => {\r\n if (attachment) {\r\n this.control.Attachment = attachment;\r\n this.control.PreviousAttachmentId = this.control.AttachmentId;\r\n this.eFormService.eFormAttachment.push(attachment);\r\n }\r\n else {\r\n this.control.Attachment = new EFormAttachment();\r\n }\r\n }));\r\n }\r\n else if (!this.control.Attachment) {\r\n this.control.Attachment = new EFormAttachment();\r\n }\r\n }\r\n\r\n valueChanged() {\r\n if (this.control.ControlType == this.eFormService.controlTypes.date && !this.control.CustomField) {\r\n this.dateValue = moment(this.dateValue);\r\n if (this.dateValue.isValid()) {\r\n this.control.Value = this.dateValue.format('YYYY-MM-DD');\r\n }\r\n else {\r\n this.control.Value = '';\r\n }\r\n }\r\n this.eFormService.controlValueChanged(this.control);\r\n }\r\n\r\n setUpRadioButtons() {\r\n if (this.control.DropdownOptions) {\r\n if (this.control.Value) {\r\n this.control.Value = this.control.Value.trim();\r\n }\r\n this.control.DropdownOptions.forEach(opt => {\r\n opt.Code = opt.Code.trim();\r\n this.radioValues.push(opt.Code.trim());\r\n this.subscriptions.push(this.translateService.get(opt.CodeDescription).subscribe((res: string) => {\r\n this.radioLabels.push(res.trim());\r\n }));\r\n const id = 'rb' + (opt.Code.trim()).replace(' ', '_');\r\n this.radioIds.push(id + '_' + this.control.Label);\r\n });\r\n }\r\n }\r\n\r\n SetRadioValue(obj, code) {\r\n this.control.Value = code;\r\n this.valueChanged();\r\n }\r\n\r\n\r\n saveAttachment(attachment: EFormAttachment) {\r\n if (this.loginService.LoginSettings.V10) {\r\n System.viewFileFromBase(attachment.FileDataBase64, attachment.FileType, attachment.OriginalFileName);\r\n }\r\n else {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: attachment.ID,\r\n DocumentName: '',\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: 'Documents',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n }\r\n\r\n attachmentChanged() {\r\n this.control.AttachmentId = null;\r\n }\r\n\r\n linkClick() {\r\n let mimeType = this.control.Attachment.FileType;\r\n if (this.control.Attachment.FileExtension.toLowerCase() == '.txt' || this.control.Attachment.FileExtension.toLowerCase() == '.rtf') {\r\n mimeType = 'text/plain';\r\n }\r\n else if (this.control.Attachment.FileExtension.toLowerCase() == '.doc' || this.control.Attachment.FileExtension.toLowerCase() == '.docx') {\r\n mimeType = 'application/msword';\r\n }\r\n else if (this.control.Attachment.FileType.toLowerCase() == 'applicatio') {\r\n mimeType = 'application/' + this.control.Attachment.FileExtension.substr(1);\r\n }\r\n System.viewFileFromBase(this.control.Attachment.FileDataBase64, mimeType, this.control.Label);\r\n }\r\n\r\n loaded() {\r\n requestAnimationFrame(() => { this.startRender(); });\r\n }\r\n\r\n startRender() {\r\n\r\n requestAnimationFrame(() => { this.rendered(); });\r\n }\r\n\r\n rendered() {\r\n setTimeout(() => {\r\n this.viewInitialized.emit(true);\r\n }, 0);\r\n }\r\n\r\n setMaxFileSize() {\r\n this.maxFileSizeByte = this.eFormService.maxFileSizeKB * 1048;\r\n\r\n if (this.eFormService.maxFileSizeKB > 1000 && this.eFormService.maxFileSizeKB % 1000 == 0) {\r\n this.maxFileSizeMessage = ' The maximum file size is ' + this.eFormService.maxFileSizeKB / 1000 + ' MB.';\r\n }\r\n else {\r\n this.maxFileSizeMessage = ' The maximum file size is ' + this.eFormService.maxFileSizeKB + ' kB.';\r\n }\r\n }\r\n\r\n validate(): ErrorList[] {\r\n let errors: ErrorList[] = [];\r\n\r\n if (this.control.CustomField && this.customField) {\r\n errors = this.customField.validate();\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n getElementRef(): ElementRef {\r\n let eRef: ElementRef = null;\r\n if (this.control && this.control.CustomField && this.customField) {\r\n eRef = this.customField.control;\r\n }\r\n return eRef;\r\n }\r\n}\r\n","export class EFormSurveyAnswer {\r\n ID: number;\r\n FormID: number;\r\n SurveyFieldID: number;\r\n Answer: string;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpOn: Date;\r\n LastUpBy: number;\r\n IsCritical: boolean;\r\n }","

PDF Name

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

Shown below is the default name for the copy of this form which will be saved as a PDF in Student Digital Content.

\r\n

Shown below is the default name for the copy of this form which will be saved as a PDF in Student Documents.

\r\n

Because multiple copies of this form may be submitted, you may wish to change the name to something less\r\n generic so it is easier to distinguish between the copies.

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-e-form-pdf-name',\r\n templateUrl: './e-form-pdf-name.component.html',\r\n //styleUrls: ['./e-form-pdf-name.component.scss']\r\n})\r\nexport class EFormPdfNameComponent implements OnInit {\r\n\r\n PDFName: string\r\n V10:boolean;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private loginService: LoginService,\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.PDFName = this.data.PDFName;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n nextClick() {\r\n this.dialogRef.close(this.PDFName);\r\n }\r\n\r\n}\r\n","
\r\n
\r\n Confirm Submit\r\n
\r\n
\r\n\r\n\r\n
\r\n This e-Form will not be editable after it has been submitted.\r\n
\r\n
\r\n If you are sure you do not need to make any more changes select Submit. Otherwise, select Cancel.\r\n
\r\n
\r\n If you are sure you do not need to make any more changes, select Submit. Otherwise, select Cancel.\r\n
\r\n
\r\n If you are sure you do not need to make any more changes, select one of the Submit buttons. Otherwise, select Cancel.\r\n
\r\n
\r\n {{noteMessage | translate}}\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n\r\n","import { Component, EventEmitter, Output, Input, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { OnlinePaymentConfiguration } from '../../../student360/online-payment/models/online-payment-config.model';\r\nimport { Student360Service } from '../../../student360/student360.service';\r\n\r\n@Component({\r\n selector: 'e-form-confirm-submit',\r\n templateUrl: './e-form-confirm-submit.component.html'\r\n})\r\nexport class EFormConfirmSubmitComponent implements OnInit {\r\n \r\n @Input() showFeeNote = false;\r\n @Input() autoAccept = false;\r\n \r\n noteMessage: string;\r\n showSubmitAndPayNow = false; \r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private student360Service: Student360Service\r\n ) {\r\n \r\n }\r\n\r\n ngOnInit(): void {\r\n // Setting injected data\r\n if (this.data) {\r\n if (this.data.showFeeNote) {\r\n this.showFeeNote = this.data.showFeeNote;\r\n }\r\n if (this.data.autoAccept) {\r\n this.autoAccept = this.data.autoAccept;\r\n }\r\n } \r\n \r\n if(this.showFeeNote) {\r\n\r\n if(this.autoAccept) {\r\n const onlinePaymentPortalExists = this.student360Service.parentAssignedPortals.findIndex(portal => portal.PortalName == 'Online Payment') != -1;\r\n const feesAndBillingPortalExists = this.student360Service.parentAssignedPortals.findIndex(portal => portal.PortalName == 'Fees & Billing') != -1;\r\n if(onlinePaymentPortalExists && feesAndBillingPortalExists) {\r\n this.showSubmitAndPayNow = true;\r\n }\r\n \r\n this.noteMessage = 'NOTE: The fee(s) associated with this form will appear in \\'Fees & Billing\\'.'\r\n }\r\n else {\r\n this.noteMessage = 'NOTE: The fee(s) associated with this form will appear in \\'Fees & Billing\\' once this submissions has been accepted.'\r\n }\r\n }\r\n }\r\n\r\n submitClick() {\r\n this.dialog.close('submit');\r\n }\r\n\r\n submitAndPayClick() {\r\n this.dialog.close('submitAndPay');\r\n }\r\n\r\n cancelClick() {\r\n this.dialog.close();\r\n }\r\n}\r\n","
{{config.InformationalMessage}}
\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, OnInit, ViewChild, Inject, OnDestroy, ViewEncapsulation } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { EFormService } from '../../e-form.service';\r\nimport * as _ from 'lodash';\r\nimport { EFormDataObject } from '../../e-formDataObject.model';\r\nimport { ErrorList } from '../../../controls/error-prompt/error-list.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { SharedService } from '../../../shared.service';\r\nimport { UserService } from '../../../user/user.service';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { EForm } from '../../e-form.model';\r\nimport { EFormNotesComponent } from '../../e-form-notes/e-form-notes.component';\r\nimport { EFormInstance } from '../../e-form-instance.model';\r\nimport { GeneralConfirmationComponent } from '../../../controls/general-confirmation/general-confirmation.component';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { EFormMarkSubmissionComponent } from '../../../../admin360/e-forms/e-form-submissions/e-form-mark-submission/e-form-mark-submission.component';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../e-form-config.model';\r\nimport { EFormViewerComponent } from '../e-form-viewer.component';\r\nimport * as moment from 'moment';\r\nimport { SpinnerService } from '../../../spinner/spinner.service';\r\nimport { EFormChangeHistory } from '../../e-form-change-history.model';\r\nimport { TylTranslation } from '../../../models/tyl-translation.model';\r\nimport { TranslationService } from '../../../translation/translation.service';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport { EFormSurveyAnswer } from '../../e-form-survey-answer.model';\r\nimport { take } from 'rxjs/operators';\r\nimport { EFormPdfNameComponent } from '../../../../admin360/e-forms/e-form-submissions/e-Form-PDF-Name/e-form-pdf-name.component';\r\nimport { EFormAttachment } from '../../e-form-attachment.model';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { EFormConfirmSubmitComponent } from '../../e-form-confirm-submit/e-form-confirm-submit.component';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-viewer-modal',\r\n templateUrl: './e-form-viewer-modal.component.html',\r\n styleUrls: ['./e-form-viewer-modal.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class EFormViewerModalComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild(EFormViewerComponent, { static: true }) eFormViewer: EFormViewerComponent;\r\n eFormData: EFormDataObject;\r\n selectedForm: EForm;\r\n selectedInstance: EFormInstance;\r\n config = new EFormConfiguration();\r\n changes: EFormChangeHistory[];\r\n\r\n errors: ErrorList[] = [];\r\n\r\n isPreview = false;\r\n isReview = false;\r\n notesEdited = false;\r\n editable = true;\r\n showNextPreviousButtons = false;\r\n isLP = true;\r\n isFP = true;\r\n rerouteToFeesAfterSubmit = false;\r\n V10 = false;\r\n subscriptions: Subscription[] = [];\r\n translations: TylTranslation[] = [];\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private eFormService: EFormService,\r\n private sharedService: SharedService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private spinnerService: SpinnerService,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n\r\n if (data) {\r\n if (data.config) {\r\n this.config = data.config;\r\n }\r\n if (data.changes) {\r\n this.changes = data.changes;\r\n }\r\n }\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n this.isPreview = true;\r\n this.editable = true;\r\n // this.disableMergeFields = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Instance) {\r\n this.isPreview = true;\r\n this.editable = false;\r\n // this.disableMergeFields = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Review) {\r\n this.editable = false;\r\n this.isReview = true;\r\n }\r\n else if (this.config.ViewMode == enmEFormViewModes.Page || this.config.ViewMode == enmEFormViewModes.CustomPage || this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n this.editable = true;\r\n this.isPreview = true;\r\n this.config.IsPreview = true;\r\n }\r\n\r\n if (this.config.ReadOnly) {\r\n this.editable = false;\r\n }\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.selectedForm = _.cloneDeep(this.eFormService.selectedForm);\r\n this.eFormData = _.cloneDeep(this.eFormService.selectedFormData);\r\n this.eFormService.pdfDataURIs = [];\r\n this.eFormService.showCriticalMessage = false;\r\n\r\n if (this.eFormData.Tabs.length > 1 || this.eFormData.Tabs[0].Pages.length > 1) {\r\n this.showNextPreviousButtons = true;\r\n }\r\n\r\n if (!this.isPreview) {\r\n this.getInstance();\r\n }\r\n\r\n this.subscriptions.push(this.eFormService.observableIsFirstPageStream$.subscribe(isFirstPage => {\r\n this.isFP = isFirstPage;\r\n }));\r\n this.subscriptions.push(this.eFormService.observableIsLastPageStream$.subscribe(isLastPage => {\r\n this.isLP = isLastPage;\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n getInstance() {\r\n this.subscriptions.push(this.eFormService.getEFormInstance(this.selectedForm.Instance_ID).subscribe(instance => {\r\n this.selectedInstance = instance;\r\n }));\r\n }\r\n\r\n acceptClick() {\r\n // if(this.V10) {\r\n this.selectedForm.Status = 'Accepted';\r\n\r\n if (this.selectedInstance.StoreLocation.toLowerCase() != 'eform' && (this.selectedInstance.FormDocTypeId || this.V10)) {\r\n this.eFormService.eFormAttachmentForPDF = [];\r\n // Check that attachments are user submitted attachments, not form images or links\r\n this.eFormService.allFormControls.forEach(control => {\r\n if (control.AttachmentId && control.ControlType == 'attachment') {\r\n if (control.Attachment) {\r\n this.eFormService.eFormAttachmentForPDF.push(control.Attachment);\r\n }\r\n else {\r\n this.eFormService.getEFormAttachment(control.AttachmentId).subscribe(attachment => {\r\n if (attachment) {\r\n this.eFormService.eFormAttachmentForPDF.push(attachment);\r\n }\r\n else {\r\n control.Attachment = new EFormAttachment();\r\n }\r\n });\r\n }\r\n }\r\n });\r\n if (this.selectedInstance.AllowMultiple) {\r\n const PDFNameDialog = this.dialog.open(EFormPdfNameComponent, {\r\n disableClose: true,\r\n data: {\r\n PDFName: this.selectedInstance.Name\r\n }\r\n });\r\n PDFNameDialog.afterClosed().subscribe((PDFName: string) => {\r\n this.selectedForm.PDFNameOverride = PDFName;\r\n this.eFormViewer.initGenerateEnglishPDFOnly(() => {\r\n this.selectedForm.EnglishPDF = this.eFormService.selectedForm.EnglishPDF;\r\n this.saveAcceptedForm();\r\n });\r\n });\r\n }\r\n else {\r\n this.eFormViewer.initGenerateEnglishPDFOnly(() => {\r\n this.selectedForm.EnglishPDF = this.eFormService.selectedForm.EnglishPDF;\r\n this.saveAcceptedForm();\r\n });\r\n }\r\n }\r\n else {\r\n this.saveAcceptedForm();\r\n }\r\n }\r\n\r\n saveAcceptedForm() {\r\n this.selectedForm.DatabaseFields = this.eFormService.getLinkedDBFields(this.eFormViewer.eFormData);\r\n this.customizationFrameworkService.getLinkedCustomFields(this.eFormViewer.eFormData, this.eFormViewer.selectedForm).pipe(take(1)).subscribe(customFields => {\r\n this.selectedForm.CustomFields = customFields;\r\n this.subscriptions.push(this.eFormService.saveEForm(this.selectedForm, '', false, this.getSiteYearId()).subscribe(result => {\r\n if (result) {\r\n this.dialogRef.close('accept');\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n getSiteYearId(): number {\r\n let siteYearId = -1;\r\n if (this.selectedForm.TemplateType == 'student' && this.eFormViewer && this.eFormViewer.studentHeader) {\r\n siteYearId = this.eFormViewer.studentHeader.studentEnrollment.SiteYearId;\r\n }\r\n return siteYearId;\r\n }\r\n\r\n async printClick() {\r\n // Initialize pdf\r\n this.eFormService.pdfDataURIs = [];\r\n\r\n this.eFormViewer.localPrint = true;\r\n // Removed for ONE-13754, this should only be enabled for debugging\r\n // this.eFormViewer.showAllConditionalsPrint = true;\r\n this.eFormViewer.addFormToPDFStarted = false;\r\n this.eFormViewer.columnInitializedBuffer = false;\r\n\r\n this.eFormViewer.showPrintDiv = true;\r\n this.spinnerService.showSpinner = true;\r\n }\r\n\r\n rejectClick() {\r\n this.selectedForm.Status = 'Rejected';\r\n const markCompleteDialog = this.dialog.open(EFormMarkSubmissionComponent, {\r\n disableClose: true,\r\n data: {\r\n markType: 'Rejected',\r\n eForm: this.selectedForm\r\n }\r\n });\r\n markCompleteDialog.afterClosed().subscribe((SendMail: string) => {\r\n if (SendMail) {\r\n this.selectedForm.Status = 'Rejected';\r\n this.selectedForm.TranslatedPDF = null;\r\n this.selectedForm.DocToFamily_ID = null;\r\n this.selectedForm.EnglishJSON = null;\r\n this.subscriptions.push(this.eFormService.saveEForm(this.selectedForm, '').subscribe(result => {\r\n if (result) {\r\n this.dialogRef.close(SendMail);\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n previousClick() {\r\n this.eFormViewer.previousClick();\r\n }\r\n\r\n nextClick() {\r\n this.eFormViewer.nextClick();\r\n }\r\n\r\n // ************************************* Single Saving code **********************************************\r\n\r\n submitClick(methodName: string) {\r\n if (methodName == 'Submit') {\r\n this.errors = this.eFormViewer.validatePage();\r\n }\r\n if (methodName == 'SubmitLater') {\r\n this.errors = this.eFormViewer.validatePage(true);\r\n }\r\n if (this.eFormViewer.errors.length == 0) {\r\n this.eFormService.CheckEformsStatus(this.selectedForm.ID, this.selectedForm.Instance_ID, this.selectedForm.Student_ID, this.selectedForm.ParentMem_ID, this.loginService.LoginSettings.V10 ? this.selectedForm.PrimaryParentMem_ID : 0).subscribe(result => {\r\n if (result) {\r\n const eForm: EForm = result;\r\n let notPreviouslySubmitted: boolean = !eForm.Status\r\n || eForm.Status.toLowerCase() == 'not submitted'\r\n || eForm.Status.toLowerCase() == 'rejected';\r\n\r\n if (!notPreviouslySubmitted && this.selectedForm.CompletionDue && this.selectedForm.CompletionDueOption == 'OncePer' && this.selectedForm.Frequency == 'Day') {\r\n if (this.V10) {\r\n if (moment(moment(eForm.SubmittedDate).format('MM/DD/YYYY')).isBefore(moment().format('MM/DD/YYYY'))) {\r\n notPreviouslySubmitted = true;\r\n }\r\n }\r\n else {\r\n if (moment(moment(eForm.SubmittedOn).format('MM/DD/YYYY')).isBefore(moment().format('MM/DD/YYYY'))) {\r\n notPreviouslySubmitted = true;\r\n }\r\n }\r\n }\r\n\r\n if (methodName == 'Submit' && (notPreviouslySubmitted || this.selectedInstance.AllowMultiple)) {\r\n this.confirmSubmission();\r\n }\r\n else if (methodName == 'SubmitLater' && (notPreviouslySubmitted || this.selectedInstance.AllowMultiple)) {\r\n this.selectedForm.Status = 'Not Submitted';\r\n this.updateAttachments(false);\r\n this.eFormService.templateProcessType = '';\r\n this.eFormService.categoryType = '';\r\n }\r\n else {\r\n this.submittedWarningMessage(eForm);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n confirmSubmission() {\r\n if (this.eFormViewer.errors.length == 0) {\r\n\r\n const showFeeNote = this.selectedInstance.HasFee && !this.V10 && this.loginService.LoginSettings.EnableEFormFees && this.loginService.LoginSettings.AllowEFormFees;\r\n\r\n const submitConfirmDialog = this.dialog.open(EFormConfirmSubmitComponent, {\r\n data: {\r\n autoAccept: this.selectedInstance.ProcessType == 'auto',\r\n showFeeNote: showFeeNote\r\n },\r\n width: '400px',\r\n disableClose: true\r\n });\r\n\r\n submitConfirmDialog.afterClosed().subscribe((confirm: string) => {\r\n if (confirm == 'submit') {\r\n this.submitEFormFor();\r\n }\r\n else if (confirm == 'submitAndPay') {\r\n this.rerouteToFeesAfterSubmit = true;\r\n this.submitEFormFor();\r\n }\r\n });\r\n }\r\n }\r\n\r\n submittedWarningMessage(eForm: EForm) {\r\n let messageText = '';\r\n\r\n if (eForm.SubmittedByName && eForm.SubmittedDate) {\r\n const submittedDate = moment(eForm.SubmittedDate).format('MM/DD/YYYY');\r\n const submittedTime = moment(eForm.SubmittedDate).format('hh:mm A');\r\n messageText = 'This form has already been submitted by ' + eForm.SubmittedByName + ' at ' + submittedTime + ' on ' + submittedDate + ' and cannot be submitted again.';\r\n }\r\n else {\r\n messageText = 'This form has already been submitted and cannot be submitted again.';\r\n }\r\n\r\n const alreadySubmittedDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n alreadySubmittedDialog.componentInstance.informational = true;\r\n alreadySubmittedDialog.componentInstance.headerLabel = 'SUBMISSION DENIED';\r\n alreadySubmittedDialog.componentInstance.confirmMessage = messageText;\r\n alreadySubmittedDialog.afterClosed().subscribe((updateRequired: boolean) => {\r\n this.dialogRef.close('cancel');\r\n });\r\n }\r\n\r\n async submitEFormFor() {\r\n this.subscriptions.push(this.eFormService.getEformCategoryByInstanceId(this.selectedInstance.ID).subscribe(category => {\r\n this.selectedForm.Status = 'Submitted';\r\n this.selectedForm.SubmittedBy = this.userService.currentUser.Id;\r\n this.selectedForm.SubmittedOn = new Date();\r\n\r\n if (this.selectedForm.IsSurvey && this.selectedForm.DisplayCriticalMessage) {\r\n this.checkForCriticalMessage();\r\n }\r\n\r\n if (this.selectedInstance && this.selectedInstance.ProcessType.toLowerCase() == 'auto') {\r\n this.eFormService.templateProcessType = 'auto';\r\n }\r\n else {\r\n this.eFormService.templateProcessType = 'required';\r\n }\r\n\r\n if (category.CompletionMethod.toLowerCase() == 'auto') {\r\n this.eFormService.categoryType = 'complete';\r\n }\r\n else {\r\n this.eFormService.categoryType = 'accepted';\r\n }\r\n this.updateAttachments(true);\r\n })\r\n );\r\n }\r\n\r\n async saveEFormData(isSubmit: boolean) {\r\n this.selectedForm.FormData = JSON.stringify(this.eFormViewer.eFormData);\r\n this.selectedForm.Year_ID = (!this.selectedForm.Year_ID || this.selectedForm.Year_ID == undefined) ? this.yearService.student360Year.Id : this.selectedForm.Year_ID;\r\n this.eFormViewer.initGenerateEFormPDFAndJSON(this.selectedForm.Status, () => {\r\n if (this.selectedForm.Status.toLowerCase() == 'submitted' || this.selectedForm.Status.toLowerCase() == 'accepted') {\r\n if (this.selectedInstance.StoreLocation.toLowerCase() != 'eform' && (this.selectedInstance.FormDocTypeId || this.V10) && this.selectedInstance.ProcessType == 'auto') {\r\n this.selectedForm.EnglishPDF = this.eFormService.selectedForm.EnglishPDF;\r\n }\r\n this.selectedForm.TranslatedPDF = this.eFormService.selectedForm.TranslatedPDF;\r\n this.selectedForm.EnglishJSON = this.eFormService.selectedForm.EnglishJSON;\r\n this.selectedForm.Non_English = this.userService.currentLanguage != 'en';\r\n this.selectedForm.DatabaseFields = this.eFormService.getLinkedDBFields(this.eFormViewer.eFormData);\r\n if (this.selectedForm.IsSurvey) {\r\n this.selectedForm.SurveyAnswers = this.getSurveyAnswers();\r\n }\r\n this.eFormViewer.clearAttachments();\r\n }\r\n this.customizationFrameworkService.getLinkedCustomFields(this.eFormViewer.eFormData, this.eFormViewer.selectedForm).pipe(take(1)).subscribe(customFields => {\r\n this.selectedForm.CustomFields = customFields;\r\n this.subscriptions.push(this.eFormService.saveEForm(this.selectedForm, '', false, this.getSiteYearId()).subscribe(result => {\r\n if (result) {\r\n // ONE-8480\r\n // If FromData is blank in EFM_Forms table\r\n if (result.FormData == undefined || result.FormData == null || result.FormData == '' || result.FormData == 'null') {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n else if (this.rerouteToFeesAfterSubmit) {\r\n this.dialogRef.close('rerouteToFeesAfterSubmit');\r\n }\r\n else {\r\n this.dialogRef.close('save');\r\n }\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n })\r\n );\r\n });\r\n });\r\n }\r\n\r\n // ***********************************************************************************************************************\r\n\r\n async updateAttachments(isSubmit: boolean = false) {\r\n this.eFormViewer.updateAttachments(() => {\r\n if (isSubmit) {\r\n this.eFormService.eFormAttachmentForPDF = [];\r\n // Check that attachments are user submitted attachments, not form images or links\r\n this.eFormService.allFormControls.forEach(control => {\r\n if (control.AttachmentId && control.ControlType == 'attachment') {\r\n this.eFormService.eFormAttachmentForPDF.push(control.Attachment);\r\n }\r\n });\r\n }\r\n this.eFormViewer.clearAttachments();\r\n this.saveEFormData(isSubmit);\r\n });\r\n }\r\n\r\n // deprecated\r\n // updateDBFields(formID: number) {\r\n // const dbFields = this.eFormService.getLinkedDBFields(this.eFormViewer.eFormData);\r\n // if (dbFields.length > 0) {\r\n // this.eFormService.updateLinkedDBFields(formID, dbFields).subscribe(success => {\r\n // if (success) {\r\n // this.dialogRef.close('save');\r\n // }\r\n // else {\r\n // this.sharedService.showBadSnackbar();\r\n // }\r\n // });\r\n // }\r\n // else {\r\n // if (this.V10) {\r\n // if (this.selectedInstance.ProcessType.toLowerCase() != 'auto' || !this.selectedInstance.FormDocTypeId) {\r\n // if (this.userService.currentLanguage && this.userService.currentLanguage == 'en' || this.loginService.LoginSettings.V10) {\r\n // this.dialogRef.close('save');\r\n // }\r\n // }\r\n // }\r\n // else {\r\n // this.dialogRef.close('save');\r\n // }\r\n // }\r\n // }\r\n\r\n checkForCriticalMessage() {\r\n const surveyControls: EFormControl[] = this.eFormService.allFormControls.filter(control => control.IsCritical);\r\n\r\n this.eFormService.showCriticalMessage = false;\r\n\r\n surveyControls.forEach(control => {\r\n switch (control.ControlType) {\r\n case this.eFormService.controlTypes.checkbox:\r\n if (control.Value == true) {\r\n this.eFormService.showCriticalMessage = true;\r\n }\r\n break;\r\n default:\r\n control.DropdownOptions.forEach(option => {\r\n if (option.IsCritical && option.Code == control.Value) {\r\n this.eFormService.showCriticalMessage = true;\r\n }\r\n });\r\n break;\r\n }\r\n });\r\n }\r\n\r\n // deprecated\r\n saveSurveyAnswers() {\r\n const surveyControls: EFormControl[] = this.eFormService.allFormControls.filter(control => control.SurveyFieldID && control.SurveyFieldID > 0);\r\n\r\n if (surveyControls.length > 0) {\r\n const surveyAnswers: EFormSurveyAnswer[] = [];\r\n\r\n surveyControls.forEach(control => {\r\n const surveyAnswer: EFormSurveyAnswer = new EFormSurveyAnswer;\r\n surveyAnswer.ID = 0;\r\n surveyAnswer.FormID = this.selectedForm.ID;\r\n if (control.ControlType == this.eFormService.controlTypes.checkbox) {\r\n surveyAnswer.Answer = control.Value == true ? 'checked' : 'unchecked';\r\n }\r\n else {\r\n surveyAnswer.Answer = control.Value;\r\n }\r\n surveyAnswer.SurveyFieldID = control.SurveyFieldID;\r\n surveyAnswers.push(surveyAnswer);\r\n });\r\n\r\n this.eFormService.saveEFormSurveyAnswers(surveyAnswers).pipe(take(1)).subscribe(() => { });\r\n }\r\n }\r\n\r\n getSurveyAnswers(): EFormSurveyAnswer[] {\r\n const surveyControls: EFormControl[] = this.eFormService.allFormControls.filter(control => control.SurveyFieldID && control.SurveyFieldID > 0);\r\n const surveyAnswers: EFormSurveyAnswer[] = [];\r\n\r\n if (surveyControls.length > 0) {\r\n surveyControls.forEach(control => {\r\n const surveyAnswer: EFormSurveyAnswer = new EFormSurveyAnswer;\r\n surveyAnswer.ID = 0;\r\n surveyAnswer.FormID = this.selectedForm.ID;\r\n if (control.ControlType == this.eFormService.controlTypes.checkbox) {\r\n surveyAnswer.Answer = control.Value == true ? 'checked' : 'unchecked';\r\n }\r\n else {\r\n surveyAnswer.Answer = control.Value;\r\n }\r\n surveyAnswer.SurveyFieldID = control.SurveyFieldID;\r\n surveyAnswers.push(surveyAnswer);\r\n });\r\n }\r\n\r\n return surveyAnswers;\r\n }\r\n\r\n notesClick() {\r\n const noteDialog = this.dialog.open(EFormNotesComponent, {\r\n disableClose: true,\r\n data: {\r\n eForm: this.selectedForm\r\n }\r\n });\r\n this.subscriptions.push(noteDialog.afterClosed().subscribe(frm => {\r\n if (frm) {\r\n this.selectedForm = frm;\r\n this.notesEdited = true;\r\n this.eFormService.saveEForm(frm).subscribe(result => {\r\n });\r\n }\r\n }));\r\n }\r\n\r\n cancelClick() {\r\n if (this.notesEdited) {\r\n this.dialogRef.close('note changed');\r\n }\r\n else {\r\n this.dialogRef.close('cancel');\r\n }\r\n }\r\n}\r\n","
\r\n
0\" class=\"eFormRow\" [ngStyle]=\"{'align-items': row.Alignment, 'width': config.IsMobilePreview ? '100%' : ''}\">\r\n \r\n \r\n
\r\n \r\n
0\" class=\"eFormRow\" [ngStyle]=\"{'align-items': row.Alignment}\">\r\n 1 ? '50%' : '100%') : '', 'min-width': config.IsMobilePreview || control.ControlType == 'component' ? '' : control.Width}\"\r\n (viewInitialized)=\"controlInitialized(control)\" style='display:flex;' [print]='print' [showConditionals]='showConditionals' [masterId]=\"masterId\" [designPageIndex]=\"designPageIndex\">\r\n \r\n
\r\n
\r\n
","import { Component, OnInit, Input, Output, EventEmitter, AfterViewInit } from '@angular/core';\r\nimport { EFormRow } from '../../e-form-row.model';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\n\r\n@Component({\r\n selector: 'e-form-viewer-row',\r\n templateUrl: './e-form-viewer-row.component.html',\r\n styleUrls: ['./e-form-viewer-row.component.css']\r\n})\r\nexport class EFormViewerRowComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() row: EFormRow;\r\n @Input() editable: boolean;\r\n @Input() disableMergeFields: boolean;\r\n @Input() print: boolean;\r\n @Input() showConditionals: boolean;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() config: EFormConfiguration;\r\n @Output() viewInitialized: EventEmitter = new EventEmitter();\r\n controlViewStatuses: any[] = [];\r\n columnViewStatuses: any[] = [];\r\n initialized = false;\r\n constructor() {\r\n const x = this.masterId;\r\n }\r\n\r\n ngOnInit() {\r\n this.row.Controls.forEach(control => {\r\n if (control.Visible) {\r\n this.controlViewStatuses.push({Id: control.Id, Initialized: false});\r\n }\r\n });\r\n for (let i = 0; i < this.row.Columns.length; i++) {\r\n this.columnViewStatuses.push({Id: i, Initialized: false});\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.initialized = true;\r\n this.checkInitializedStatus();\r\n }\r\n\r\n checkInitializedStatus() {\r\n if (this.initialized && this.controlViewStatuses.find(o => o.Initialized == false) == null && this.columnViewStatuses.find(o => o.Initialized == false) == null) {\r\n setTimeout(() => {\r\n this.viewInitialized.emit(true);\r\n }, 0);\r\n }\r\n }\r\n\r\n controlInitialized(control: EFormControl) {\r\n const status = this.controlViewStatuses.find(o => o.Id == control.Id);\r\n if (status) {\r\n status.Initialized = true;\r\n }\r\n this.checkInitializedStatus();\r\n }\r\n\r\n columnInitialized(index: number) {\r\n const status = this.columnViewStatuses.find(o => o.Id == index);\r\n if (status) {\r\n status.Initialized = true;\r\n }\r\n this.checkInitializedStatus();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{schoolNameTag | mergeField: disableMergeFields: pipeTrigger}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{schoolAddressTag | mergeField: disableMergeFields: pipeTrigger}}\r\n
\r\n
\r\n {{schoolCityTag | mergeField: disableMergeFields: pipeTrigger}} {{schoolStateTag | mergeField: disableMergeFields: pipeTrigger}} {{schoolZipTag | mergeField: disableMergeFields: pipeTrigger}}\r\n
\r\n
\r\n {{schoolPhoneTag | mergeField: disableMergeFields: pipeTrigger}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{currentDate | date: 'MM/dd/yy'}}\r\n
\r\n
\r\n
\r\n
\r\n
{{parentNameTag | mergeField: disableMergeFields: pipeTrigger}}
\r\n
{{parentAddressStreetTag | mergeField: disableMergeFields: pipeTrigger}}
\r\n
{{parentAddressCityTag | mergeField: disableMergeFields: pipeTrigger}}
\r\n
\r\n
\r\n
\r\n
\r\n Student: {{studentNameTag | mergeField: disableMergeFields: pipeTrigger}}\r\n
\r\n
\r\n
","import { Component, OnInit, Input, AfterViewInit, EventEmitter, Output } from '@angular/core';\r\nimport { EFormColumn } from '../../e-form-column.model';\r\nimport { EFormControl } from '../../e-form-control.model';\r\nimport { EFormConfiguration } from '../../e-form-config.model';\r\nimport { EFormService } from '../../e-form.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { ReportingService } from '../../../../shared-modules/reporting/reporting.service';\r\nimport { UserService } from '../../../user/user.service';\r\n\r\n@Component({\r\n selector: 'e-form-viewer-header',\r\n templateUrl: './e-form-viewer-header.component.html',\r\n styleUrls: ['./e-form-viewer-header.component.css']\r\n})\r\nexport class EFormViewerHeaderComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() editable: boolean;\r\n @Input() disableMergeFields: boolean;\r\n @Input() print: boolean;\r\n @Input() showConditionals: boolean;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() config: EFormConfiguration;\r\n @Output() viewInitialized: EventEmitter = new EventEmitter();\r\n\r\n districtLogo: SafeResourceUrl;\r\n siteLogo: SafeResourceUrl;\r\n alternateSiteLogo: SafeResourceUrl;\r\n alternateDistrictLogo: SafeResourceUrl;\r\n\r\n pipeTrigger = false;\r\n currentDate: Date = new Date();\r\n schoolNameTag: string = '<>';\r\n schoolAddressTag: string = '<>';\r\n schoolCityTag: string = '<>';\r\n schoolStateTag: string = '<>';\r\n schoolZipTag: string = '<>';\r\n schoolPhoneTag: string = '<>';\r\n studentNameTag: string = '<>'\r\n parentNameTag: string = '<>';\r\n parentAddressStreetTag: string = '<>';\r\n parentAddressCityTag: string = '<>';\r\n initialized = false;\r\n subscriptions: Subscription[] = [];\r\n \r\n constructor(private eFormService: EFormService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private reportingService: ReportingService,\r\n private userService: UserService,\r\n private sanitizer: DomSanitizer) { \r\n\r\n }\r\n\r\n ngOnInit() {\r\n if (this.config.CalledFromAttendanceLetter == true) {\r\n this.schoolNameTag = '<>';\r\n this.schoolAddressTag = '<>';\r\n this.schoolCityTag = '<>';\r\n this.schoolStateTag = '<>';\r\n this.schoolZipTag = '<>';\r\n this.schoolPhoneTag = '<>';\r\n }\r\n\r\n if(this.config.HeaderSelectedLogo != 0) {\r\n this.getLogos();\r\n }\r\n this.subscriptions.push(this.eFormService.observableMergeFieldValuesRetrievedStream$.subscribe(fieldsExist => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n setTimeout(() => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n }, 100);\r\n }));\r\n this.subscriptions.push(this.eFormService.observablePipeTriggerStream$.subscribe(trigger => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n setTimeout(() => {\r\n this.pipeTrigger = !this.pipeTrigger;\r\n }, 100);\r\n }));\r\n }\r\n\r\n getLogos() {\r\n if(this.eFormService.districtLogo && this.eFormService.alternateDistrictLogo && this.eFormService.siteLogo && this.alternateSiteLogo) {\r\n\r\n this.districtLogo = this.eFormService.districtLogo;\r\n this.alternateDistrictLogo = this.eFormService.alternateDistrictLogo;\r\n this.siteLogo = this.eFormService.siteLogo;\r\n this.alternateSiteLogo = this.eFormService.alternateSiteLogo;\r\n }\r\n else {\r\n this.reportingService.getReportLogos(this.userService.currentUser.Id, this.yearService.defaultYear.SchoolID).subscribe(reportLogos => {\r\n this.districtLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/png;base64, ' + this.loginService.LoginSettings.DistrictLogo.toString());\r\n this.alternateDistrictLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['AlternateDistrictLogo']);\r\n this.siteLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['SiteLogo']);\r\n this.alternateSiteLogo = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/jpg;base64, ' + reportLogos['AlternateSiteLogo']);\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.viewInitialized.emit(true);\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n Show conditional objects\r\n \r\n \r\n {{language.CodeDescription}}\r\n \r\n \r\n
\r\n \r\n \r\n 0 && selectedStudent && !isBehaviorLetter\"\r\n [studentId]=\"selectedForm.Student_ID\" [disableYearSelect]=\"true\" [disableNavigation]=\"true\"\r\n [showYearSelector]=\"false\" [useYear]=\"selectedYear\" [hideAlerts]=\"showPrintDiv\" [useStudents]=\"[selectedStudent]\">\r\n \r\n
\r\n

\r\n Preview: {{config.Title | tylTranslate}}\r\n

\r\n

\r\n {{formName | tylTranslate}}\r\n

\r\n \r\n \r\n \r\n 1\" [tabNames]=\"tabNames\"\r\n [disabledTabs]=\"!isPreview && !isReview && editable ? tabNames : null\"\r\n (tabChange)=\"selectedTabChanged($event)\" (click)=\"tabsClick()\">\r\n
\r\n
\r\n {{selectedPage.Name}}\r\n
\r\n
\r\n Page {{selectedPageNumber}} of {{selectedTab.Pages.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
1\">\r\n 1\">{{tab.Name ? tab.Name.toUpperCase():''}}\r\n
\r\n
\r\n
1\">\r\n 1\">{{page.Name}}\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Submitted by {{selectedForm.SubmittedByName}}
\r\n
Submitted on {{selectedForm.SubmittedOn | date:'MM/dd/yy'}}
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import {\r\n Component,\r\n OnInit,\r\n ViewChild,\r\n Inject,\r\n OnDestroy,\r\n Input,\r\n ViewEncapsulation,\r\n ElementRef,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { EFormTab } from '../e-form-tab.model';\r\nimport { EFormPage } from '../e-form-page.model';\r\nimport { EFormService } from '../e-form.service';\r\nimport { TabsComponent } from '../../controls/tabs/tabs.component';\r\nimport { Lookup } from '../../lookup/lookup.model';\r\nimport * as _ from 'lodash';\r\nimport { EFormControl } from '../e-form-control.model';\r\nimport { EFormDataObject } from '../e-formDataObject.model';\r\nimport { ErrorList } from '../../controls/error-prompt/error-list.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { SharedService } from '../../shared.service';\r\nimport { EFormAttachment } from '../e-form-attachment.model';\r\nimport { UserService } from '../../user/user.service';\r\nimport { YearService } from '../../year/year.service';\r\nimport { EForm } from '../e-form.model';\r\nimport { Year } from '../../year/year.model';\r\nimport { StudentService } from '../../student/student.service';\r\nimport { Student } from '../../student/student.model';\r\nimport { EFormInstance } from '../e-form-instance.model';\r\nimport { EFormColumn } from '../e-form-column.model';\r\nimport { SpinnerService } from '../../spinner/spinner.service';\r\nimport { EFormChangeHistory } from '../e-form-change-history.model';\r\nimport { EFormRow } from '../e-form-row.model';\r\nimport { TranslationService } from '../../translation/translation.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { PDFExportComponent } from '@progress/kendo-angular-pdf-export';\r\nimport { System } from '../../System';\r\nimport { Group, exportPDF } from '@progress/kendo-drawing';\r\nimport { EFormConfiguration, enmEFormViewModes, PageObjectTypes } from '../e-form-config.model';\r\nimport { CustomizationService } from '../../../admin360/customization/customization.service';\r\nimport { TylTranslation } from '../../models/tyl-translation.model';\r\nimport { take } from 'rxjs/operators';\r\nimport { StudentHeaderComponent } from '../../student-header/student-header.component';\r\nimport { CustomizationFrameworkService } from '../../../shared-modules/customization-framework/customization-framework.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-viewer',\r\n templateUrl: './e-form-viewer.component.html',\r\n styleUrls: ['./e-form-viewer.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class EFormViewerComponent implements OnInit, OnDestroy {\r\n\r\n eFormData: EFormDataObject;\r\n eFormDataToPDF: EFormDataObject;\r\n selectedTab: EFormTab;\r\n selectedPage: EFormPage;\r\n selectedForm: EForm;\r\n selectedInstance: EFormInstance;\r\n tabNames: string[] = [];\r\n languages: Lookup[] = [];\r\n isPreview = false;\r\n isReview = false;\r\n editable = true;\r\n useInstance = true;\r\n showConditionalObjects = false;\r\n selectedLanguage = 'en';\r\n formControls: EFormControl[] = [];\r\n showNextPreviousButtons = false;\r\n selectedYear: Year;\r\n selectedStudent: Student;\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n printProgress = 0;\r\n showPrintDiv = false;\r\n tabViewStatus: any[] = [];\r\n visibleTabs: EFormTab[] = [];\r\n allowedFileExtensions = ['.pdf', '.bmp', '.jpg', '.png'];\r\n allowedImageExtensions = ['.bmp', '.jpg', '.png'];\r\n maxFileSizeKB = 0; // set in eFormService\r\n changes: EFormChangeHistory[] = [];\r\n disableMergeFields = false;\r\n selectedLanguageCode = '';\r\n languageChange = false;\r\n showContent = true;\r\n showAllConditionalsPrint = false;\r\n @ViewChild(TabsComponent) tabs: TabsComponent;\r\n @ViewChild(StudentHeaderComponent) studentHeader: StudentHeaderComponent;\r\n @ViewChild('printRef', { read: ElementRef, static: true }) printRef: ElementRef;\r\n @ViewChild('pdf', { static: true }) pdfExportRef: PDFExportComponent;\r\n @ViewChild('validationTrigger', { read: ElementRef, static: true }) validateButton: ElementRef;\r\n private subscription: Subscription;\r\n @Output() renderCompleted = new EventEmitter();\r\n @Output() initialized = new EventEmitter();\r\n @Output() valueChanged = new EventEmitter();\r\n @Input() showPrintDivInput = false;\r\n @Input() configInput: EFormConfiguration;\r\n @Input() changesInput: EFormChangeHistory[];\r\n @Input() languageIdOverride: number;\r\n @Input() pageID: number;\r\n @Input() masterId: number;\r\n @Input() designPageIndex: number;\r\n @Input() formName: string;\r\n @Input() showSubmittedInfo: boolean;\r\n @Input() isBehaviorLetter = false;\r\n labels: string[] = [];\r\n serviceLabels: string[] = [];\r\n serviceControls: EFormControl[] = [];\r\n localPrint = false;\r\n columnInitializedBuffer = false;\r\n pdfName: string;\r\n selectedPageNumber: number;\r\n dataURIs = [];\r\n addFormToPDFStarted = false;\r\n config: EFormConfiguration;\r\n fileNameOverride = false;\r\n fileNameInput = '';\r\n hideKendoBottomPadding = false;\r\n\r\n isLP = true;\r\n isFP = true;\r\n\r\n translations: TylTranslation[] = [];\r\n V10 = false;\r\n refreshEnrollmentGrade: boolean;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private eFormService: EFormService,\r\n private sharedService: SharedService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private spinnerService: SpinnerService,\r\n private translationService: TranslationService,\r\n private customizationService: CustomizationService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) {\r\n if (data) {\r\n if (data.config) {\r\n this.config = data.config;\r\n }\r\n if (data.changes) {\r\n this.changes = data.changes;\r\n } else {\r\n this.changes = this.changesInput;\r\n }\r\n this.eFormService.changes = this.changes;\r\n }\r\n\r\n this.maxFileSizeKB = this.eFormService.maxFileSizeKB;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.config && this.configInput) {\r\n this.config = this.configInput;\r\n } else if (!this.config) {\r\n this.config = new EFormConfiguration();\r\n }\r\n\r\n if (this.config.ViewMode == enmEFormViewModes.Template) {\r\n this.isPreview = true;\r\n this.editable = true;\r\n this.disableMergeFields = true;\r\n } else if (this.config.ViewMode == enmEFormViewModes.Instance) {\r\n this.isPreview = true;\r\n // this.editable = false;\r\n this.editable = true;\r\n this.disableMergeFields = true;\r\n } else if (this.config.ViewMode == enmEFormViewModes.Review) {\r\n this.editable = false;\r\n this.isReview = true;\r\n } else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n this.editable = true;\r\n this.isReview = false;\r\n this.isPreview = this.config.IsPreview;\r\n this.hideKendoBottomPadding = true;\r\n } else if (this.config.ViewMode == enmEFormViewModes.CustomPage) {\r\n this.editable = true;\r\n this.isReview = false;\r\n this.isPreview = this.config.IsPreview;\r\n this.hideKendoBottomPadding = true;\r\n if (this.config) {\r\n this.config.HideTitle = true;\r\n }\r\n } else if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n this.editable = true;\r\n this.isReview = false;\r\n this.isPreview = this.config.IsPreview;\r\n this.hideKendoBottomPadding = true;\r\n this.config.HideTitle = true;\r\n }\r\n\r\n this.eFormService.viewType = this.config.ViewMode;\r\n\r\n if (this.config.ReadOnly) {\r\n this.editable = false;\r\n }\r\n if (this.config) {\r\n this.useInstance = this.config.UseInstance;\r\n }\r\n\r\n if (!this.pageID) {\r\n this.selectedForm = _.cloneDeep(this.eFormService.selectedForm);\r\n if(!this.V10 && this.selectedForm && this.selectedForm.Year_ID > 0) {\r\n const formYear = _.cloneDeep(this.yearService.allYears.find(year => year.Id == this.selectedForm.Year_ID));\r\n if(formYear) {\r\n this.selectedYear = formYear;\r\n }\r\n }\r\n\r\n this.initializePage();\r\n this.initialized.emit(true);\r\n } else {\r\n this.customizationService.getDesignPageByIDs(false, [this.pageID]).pipe(take(1)).subscribe(page => {\r\n if (page.length == 1) {\r\n const eForm: EForm = new EForm;\r\n\r\n eForm.FormData = page[0].FormData;\r\n\r\n this.selectedForm = _.cloneDeep(eForm);\r\n\r\n this.initializePage();\r\n this.initialized.emit(true);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n initializePage() {\r\n if (this.selectedForm && this.selectedForm.Student_ID > 0) {\r\n this.setSelectedStudent();\r\n }\r\n this.eFormData = _.cloneDeep(this.eFormService.selectedFormData);\r\n this.setInitialVisibility();\r\n // Should only be called for new forms to default DB fields to current values in DB - we will also only do this for single-student forms for now\r\n if (!this.isPreview && this.selectedForm && (!this.selectedForm.ID || this.selectedForm.ID <= 0) && this.selectedForm.TemplateType == 'student') {\r\n this.setLinkedDBFieldValues();\r\n }\r\n this.getTabs();\r\n this.getLanguages();\r\n this.selectedPageNumber = this.getSelectedPageNumber();\r\n this.subscriptions.push(this.eFormService.observableControlValueChangedStream$.subscribe(parentControl => {\r\n this.checkConditionalObjects(parentControl);\r\n if (parentControl.CustomField && parentControl.DesignPageIndex == this.designPageIndex) {\r\n this.valueChanged.emit(parentControl.CustomFieldRefName);\r\n }\r\n }));\r\n if (this.eFormData.Tabs.length > 1 || this.eFormData.Tabs[0].Pages.length > 1) {\r\n this.showNextPreviousButtons = true;\r\n }\r\n if (!this.isPreview) {\r\n let studentId = 0;\r\n let parentId = 0;\r\n let incidentId = 0;\r\n let involvementType = ' ';\r\n let batcRunDate = null;\r\n let trackingType = -1;\r\n if (this.selectedForm) {\r\n studentId = (this.selectedForm.Student_ID ? this.selectedForm.Student_ID : 0);\r\n parentId = (this.selectedForm.ParentMem_ID ? this.selectedForm.ParentMem_ID : 0);\r\n incidentId = (this.selectedForm.Incident_ID ? this.selectedForm.Incident_ID : 0);\r\n involvementType = (this.selectedForm.InvolvementType ? this.selectedForm.InvolvementType : ' ');\r\n trackingType = (this.selectedForm.TrackingType > -1 ? this.selectedForm.TrackingType : -1);\r\n batcRunDate = (this.selectedForm.BatchRunDate ? this.selectedForm.BatchRunDate : null);\r\n } else if (this.config.ViewMode == enmEFormViewModes.Page) {\r\n switch (this.config.PageObjectType) {\r\n case PageObjectTypes.Student:\r\n studentId = this.masterId;\r\n break;\r\n default:\r\n this.disableMergeFields = true;\r\n break;\r\n }\r\n }\r\n this.eFormService.getMergeFieldValues(this.eFormData, this.yearService.student360Year.SchoolID, this.yearService.student360Year.Id, studentId, parentId, incidentId, involvementType, this.config, this.selectedForm ? this.selectedForm.NonresidentParents : false, trackingType, batcRunDate);\r\n if (this.useInstance) {\r\n this.getInstance();\r\n }\r\n }\r\n if (this.showPrintDivInput) {\r\n this.config.ViewMode = enmEFormViewModes.Form;\r\n this.showPrintDiv = this.showPrintDivInput;\r\n }\r\n this.eFormData.Tabs.forEach(tab => {\r\n if (tab.Visible) {\r\n tab.Pages.forEach(page => {\r\n if (page.Visible) {\r\n page.Columns.forEach(col => {\r\n const colObj = {\r\n Column: col,\r\n Initialized: false,\r\n TabId: tab.Id,\r\n PageId: page.Id\r\n };\r\n this.tabViewStatus.push(colObj);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.getFormLabels();\r\n\r\n this.isFirstPage();\r\n this.isLastPage();\r\n this.eFormService.eFormAttachment = [];\r\n }\r\n\r\n getInstance() {\r\n this.subscriptions.push(this.eFormService.getEFormInstance(this.selectedForm.Instance_ID).subscribe(instance => {\r\n this.selectedInstance = instance;\r\n }));\r\n }\r\n\r\n setSelectedStudent() {\r\n if (this.userService.userType == 1) {\r\n this.subscriptions.push(this.studentService.getStudent(this.selectedForm.Student_ID).subscribe(student => {\r\n this.selectedStudent = student;\r\n }));\r\n } else {\r\n this.selectedStudent = this.studentService.students.find(o => o.Id == this.selectedForm.Student_ID);\r\n }\r\n }\r\n\r\n clearSelectedStudent() {\r\n this.studentService.clearSelectedStudent();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.eFormService.clearMergeFieldValues();\r\n if (this.languageChange) {\r\n // changed for ONE-5073, the e-Form preview only uses tyl-translate now\r\n // this.userService.setUserLanguage('en').subscribe();\r\n this.translationService.overrideTranslationPipe = false;\r\n }\r\n }\r\n\r\n setInitialVisibility() {\r\n this.formControls = this.eFormService.getAllFormControls(this.eFormData);\r\n if (this.designPageIndex > -1) {\r\n this.eFormService.allFormControls = this.eFormService.allFormControls.concat(this.formControls);\r\n this.eFormService.allCustomFieldControls = this.eFormService.allCustomFieldControls.concat(this.formControls.filter(control => control.CustomField));\r\n } else {\r\n this.eFormService.allFormControls = this.formControls;\r\n }\r\n this.eFormData.Tabs.forEach(tab => {\r\n tab.Visible = true;\r\n if (tab.ParentObjectId > 0) {\r\n const parentObj = this.formControls.find(o => o.Id == tab.ParentObjectId);\r\n if (parentObj) {\r\n tab.Visible = this.eFormService.isConditionMet(tab.Condition, parentObj);\r\n }\r\n }\r\n tab.Pages.forEach(page => {\r\n page.Visible = true;\r\n if (page.ParentObjectId > 0) {\r\n const parentObj = this.formControls.find(o => o.Id == page.ParentObjectId);\r\n if (parentObj) {\r\n page.Visible = this.eFormService.isConditionMet(page.Condition, parentObj);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n checkConditionalObjects(parentControl: EFormControl) {\r\n this.eFormData.Tabs.forEach(tab => {\r\n if (tab.ParentObjectId == parentControl.Id) {\r\n tab.Visible = this.eFormService.isConditionMet(tab.Condition, parentControl);\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n tab.Pages.forEach(page => {\r\n if (page.ParentObjectId == parentControl.Id) {\r\n page.Visible = this.eFormService.isConditionMet(page.Condition, parentControl);\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n });\r\n });\r\n this.getTabs();\r\n }\r\n\r\n getTabs() {\r\n this.tabNames = [];\r\n this.eFormData.Tabs.forEach(tab => {\r\n if (tab.Visible && tab.Pages.find(o => o.Visible) != null || this.showConditionalObjects || this.showAllConditionalsPrint || this.config.AlwaysShowAllConditionals) {\r\n this.tabNames.push(tab.Name);\r\n if (!this.visibleTabs.includes(tab)) {\r\n this.visibleTabs.push(tab);\r\n }\r\n } else {\r\n const i = this.visibleTabs.findIndex(o => o == tab);\r\n if (i >= 0) {\r\n this.visibleTabs.splice(i, 1);\r\n }\r\n }\r\n });\r\n if (this.tabNames.length > 0 && !this.selectedTab) {\r\n this.selectedTabChanged(this.tabNames[0]);\r\n }\r\n }\r\n\r\n updateAttachments(_callback) {\r\n const attachmentsToDelete: number[] = [];\r\n const newAttachments: EFormAttachment[] = [];\r\n this.eFormService.allFormControls.forEach(control => {\r\n if (control.ControlType == this.eFormService.controlTypes.attachment && control.PreviousAttachmentId && control.PreviousAttachmentId != control.AttachmentId) {\r\n attachmentsToDelete.push(control.PreviousAttachmentId);\r\n }\r\n if (control.ControlType == this.eFormService.controlTypes.attachment && !control.AttachmentId && control.Attachment && control.Attachment.FileDataBase64) {\r\n newAttachments.push(control.Attachment);\r\n }\r\n });\r\n if (attachmentsToDelete.length > 0) {\r\n this.deleteAttachments(attachmentsToDelete);\r\n }\r\n if (newAttachments.length > 0) {\r\n this.saveAttachments(newAttachments, _callback);\r\n } else {\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n }\r\n\r\n deleteAttachments(attachmentIds: number[]) {\r\n this.subscriptions.push(this.eFormService.deleteEFormAttachments(attachmentIds).subscribe(() => {\r\n }));\r\n }\r\n\r\n saveAttachments(attachments: EFormAttachment[], _callback) {\r\n this.subscriptions.push(this.eFormService.saveEFormAttachments(attachments).subscribe(result => {\r\n if (result && result.length == attachments.length) {\r\n for (let i = 0; i < result.length; i++) {\r\n const newAttachment = result[i];\r\n const oldAttachment = attachments[i];\r\n const control = this.eFormService.allFormControls.find(o => o.Attachment == oldAttachment);\r\n if (control) {\r\n control.AttachmentId = newAttachment.ID;\r\n }\r\n }\r\n if (_callback) {\r\n _callback();\r\n }\r\n } else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n }));\r\n }\r\n\r\n clearAttachments() {\r\n this.eFormService.allFormControls.forEach(control => {\r\n control.Attachment = null;\r\n control.PreviousAttachmentId = null;\r\n });\r\n }\r\n\r\n selectedTabChanged(tabName: string, errors = null) {\r\n this.selectedTab = this.eFormData.Tabs.find(o => o.Name == tabName);\r\n if (this.selectedTab && this.selectedTab.Pages) {\r\n // this.selectedPage = this.selectedTab.Pages.find(o => o.Visible);\r\n if (errors && errors != null) {\r\n this.selectedTab.Pages.forEach(element => {\r\n this.findColumn(element, element.Columns, errors);\r\n });\r\n } else {\r\n this.selectedPage = this.selectedTab.Pages.find(o => o.Visible);\r\n }\r\n }\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n\r\n findColumn(element, Columns, errors) {\r\n Columns.forEach(Column => {\r\n if (Column.Controls.find(o => o.Label.trim() == errors.completFieldName.trim())) {\r\n this.selectedPage = element;\r\n } else {\r\n this.findRow(element, Column.Rows, errors);\r\n }\r\n });\r\n }\r\n\r\n findRow(element, Rows, errors) {\r\n Rows.forEach(rowElement => {\r\n if (rowElement.Controls.find(o => o.Label.trim() == errors.completFieldName.trim())) {\r\n this.selectedPage = element;\r\n } else {\r\n this.findColumn(element, rowElement.Columns, errors);\r\n }\r\n });\r\n }\r\n\r\n tabsClick() {\r\n this.selectedTab = this.selectedTab;\r\n setTimeout(() => {\r\n this.eFormService.mergeFieldPipeTrigger();\r\n if (this.showConditionalObjects) {\r\n this.showConditionalChange();\r\n }\r\n }, 0);\r\n }\r\n\r\n previousClick() {\r\n // this.validatePage();\r\n // if (this.errors.length == 0) {\r\n if (this.selectedTab && this.selectedPage) {\r\n let tabIndex = this.eFormData.Tabs.findIndex(o => o.Name == this.selectedTab.Name && o.Id == this.selectedTab.Id);\r\n let pageIndex = this.selectedTab.Pages.findIndex(o => o.Name == this.selectedPage.Name);\r\n let prevPage = this.selectedPage;\r\n let prevTab = this.selectedTab;\r\n do {\r\n if (pageIndex > 0) {\r\n pageIndex = pageIndex - 1;\r\n prevPage = prevTab.Pages[pageIndex];\r\n } else {\r\n if (tabIndex > 0) {\r\n tabIndex = tabIndex - 1;\r\n prevTab = this.eFormData.Tabs[tabIndex];\r\n prevPage = prevTab.Pages[prevTab.Pages.length - 1];\r\n pageIndex = prevTab.Pages.length - 1;\r\n }\r\n }\r\n }\r\n while (((!prevPage.Visible || !prevTab.Visible) && !this.showConditionalObjects && !this.config.AlwaysShowAllConditionals) && (pageIndex > 0 || tabIndex > 0));\r\n if (prevPage.Visible && prevTab.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals) {\r\n this.selectedPage = prevPage;\r\n if (prevTab != this.selectedTab) {\r\n this.tabs.clickTabWithoutEvents(prevTab.Name);\r\n this.selectedTab = prevTab;\r\n }\r\n }\r\n setTimeout(() => {\r\n this.eFormService.mergeFieldPipeTrigger();\r\n if (this.showConditionalObjects) {\r\n this.showConditionalChange();\r\n }\r\n }, 0);\r\n }\r\n // }\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n\r\n nextClick() {\r\n // this.validatePage();\r\n // if (this.errors.length == 0) {\r\n if (this.selectedTab && this.selectedPage) {\r\n let nextTab = this.selectedTab;\r\n let nextPage = this.selectedPage;\r\n let pageIndex = this.selectedTab.Pages.findIndex(o => o.Name == this.selectedPage.Name && o.Id == this.selectedPage.Id);\r\n let tabIndex = this.eFormData.Tabs.findIndex(o => o.Name == this.selectedTab.Name);\r\n const lastTabIndex = this.eFormData.Tabs.length - 1;\r\n let lastPageIndex = this.selectedTab.Pages.length - 1;\r\n do {\r\n lastPageIndex = nextTab.Pages.length - 1;\r\n if (pageIndex >= 0 && pageIndex < lastPageIndex) {\r\n pageIndex = pageIndex + 1;\r\n nextPage = nextTab.Pages[pageIndex];\r\n } else {\r\n tabIndex = this.eFormData.Tabs.findIndex(o => o.Name == nextTab.Name);\r\n if (tabIndex >= 0 && tabIndex < lastTabIndex) {\r\n tabIndex = tabIndex + 1;\r\n nextTab = this.eFormData.Tabs[tabIndex];\r\n nextPage = nextTab.Pages[0];\r\n }\r\n }\r\n }\r\n while (((!nextPage.Visible || !nextTab.Visible) && !this.showConditionalObjects && !this.config.AlwaysShowAllConditionals) && (tabIndex < lastTabIndex || pageIndex < lastPageIndex));\r\n if (nextPage.Visible && nextTab.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals) {\r\n this.selectedPage = nextPage;\r\n if (nextTab != this.selectedTab) {\r\n this.selectedTab = nextTab;\r\n this.tabs.clickTabWithoutEvents(nextTab.Name);\r\n }\r\n }\r\n setTimeout(() => {\r\n this.eFormService.mergeFieldPipeTrigger();\r\n if (this.showConditionalObjects) {\r\n this.showConditionalChange();\r\n }\r\n }, 0);\r\n }\r\n // }\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n\r\n isFirstPage() {\r\n this.isFP = true;\r\n if (this.eFormData && this.eFormData.Tabs && this.eFormData.Tabs.length > 0 && this.eFormData.Tabs[0].Pages && this.eFormData.Tabs[0].Pages.length > 0) {\r\n const visibleTabs = this.eFormData.Tabs.filter(o => o.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals\r\n && o.Pages.find(p => p.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals) != null);\r\n if (visibleTabs) {\r\n const firstPage = visibleTabs[0].Pages.find(o => o.Visible);\r\n if (this.selectedPage.Id != firstPage.Id) {\r\n this.isFP = false;\r\n }\r\n }\r\n }\r\n this.eFormService.observableIsFirstPage.next(this.isFP);\r\n this.selectedPageNumber = this.getSelectedPageNumber();\r\n }\r\n\r\n\r\n isLastPage() {\r\n this.isLP = true;\r\n if (this.eFormData && this.eFormData.Tabs && this.eFormData.Tabs.length > 0) {\r\n const visibleTabs = this.eFormData.Tabs.filter(o => o.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals\r\n && o.Pages.find(p => p.Visible || this.showConditionalObjects || this.config.AlwaysShowAllConditionals) != null);\r\n const lastTab = visibleTabs[visibleTabs.length - 1];\r\n const visiblePages = lastTab.Pages.filter(o => o.Visible);\r\n if (visiblePages && visiblePages.length > 0) {\r\n const lastPage = visiblePages[visiblePages.length - 1];\r\n if (this.selectedPage.Id != lastPage.Id) {\r\n this.isLP = false;\r\n }\r\n }\r\n }\r\n this.eFormService.observableIsLastPage.next(this.isLP);\r\n this.selectedPageNumber = this.getSelectedPageNumber();\r\n }\r\n\r\n showConditionalChange() {\r\n this.eFormService.showConditionalObjectsChanged(this.showConditionalObjects);\r\n this.getTabs();\r\n }\r\n\r\n getSelectedPageNumber(): number {\r\n let pageIndex = this.selectedTab.Pages.findIndex(o => o.Name == this.selectedPage.Name);\r\n\r\n if (pageIndex == -1) {\r\n pageIndex = this.selectedTab.Pages.findIndex(o => o.Id == this.selectedPage.Id);\r\n }\r\n\r\n return pageIndex != -1 ? pageIndex + 1 : pageIndex;\r\n }\r\n\r\n goToErrorTab(tabName: string, errors = null) {\r\n // this.selectedTabChanged(tabName);\r\n this.selectedTabChanged(tabName, errors);\r\n if (this.tabs) {\r\n this.tabs.clickTabWithoutEvents(tabName);\r\n }\r\n this.isFirstPage();\r\n this.isLastPage();\r\n }\r\n\r\n validatePage(onlyFileValidation: boolean = false): ErrorList[] {\r\n this.errors = [];\r\n if (!this.isPreview && !this.isReview && this.editable) {\r\n this.visibleTabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n if (page) {\r\n const pageControls = this.eFormService.getAllControlsByPage(page);\r\n pageControls.forEach(control => {\r\n control.HasError = false;\r\n if (control.Visible) {\r\n let name = control.Label ? control.Label : '';\r\n const completFieldName = control.Label ? control.Label : '';\r\n const controlId = control.Id ? control.Id : -1;\r\n if (name.length > 30) {\r\n name = name.substr(0, 30) + '...';\r\n }\r\n if (!onlyFileValidation) {\r\n if (control.IsRequired) {\r\n if ((control.ControlType == this.eFormService.controlTypes.attachment && (!control.Attachment || !control.Attachment.FileDataBase64 || control.Attachment.FileDataBase64 == ''))\r\n || (control.ControlType != this.eFormService.controlTypes.attachment && !control.Value && control.Visible)) {\r\n control.HasError = true;\r\n if (control.ControlType == this.eFormService.controlTypes.checkbox) {\r\n const error: ErrorList = {\r\n id: controlId,\r\n fieldName: name,\r\n completFieldName: completFieldName,\r\n fieldRef: null,\r\n errorMsg: ' must be checked in order to continue.',\r\n clickCallback: () => {\r\n this.goToErrorTab(tab.Name, error);\r\n }\r\n };\r\n this.errors.push(error);\r\n } else {\r\n const error: ErrorList = {\r\n id: controlId,\r\n fieldName: name,\r\n completFieldName: completFieldName,\r\n fieldRef: null,\r\n errorMsg: ' is required.',\r\n clickCallback: () => {\r\n this.goToErrorTab(tab.Name, error);\r\n }\r\n };\r\n this.errors.push(error);\r\n }\r\n }\r\n }\r\n }\r\n if (control.ControlType == this.eFormService.controlTypes.attachment && control.Attachment && control.Attachment.FileDataBase64 && control.Visible) {\r\n const fileSize = 3 * Math.ceil((control.Attachment.FileDataBase64.length / 4) / 1000);\r\n if (fileSize > this.maxFileSizeKB) {\r\n let errorMsgText = '';\r\n if (this.maxFileSizeKB > 1000 && this.maxFileSizeKB % 1000 == 0) {\r\n errorMsgText = ' The maximum file size is ' + this.maxFileSizeKB / 1000 + ' MB.';\r\n } else {\r\n errorMsgText = ' The maximum file size is ' + this.maxFileSizeKB + ' kB.';\r\n }\r\n\r\n this.errors.push({\r\n id: controlId,\r\n fieldName: name,\r\n completFieldName: completFieldName,\r\n fieldRef: null,\r\n errorMsg: errorMsgText,\r\n clickCallback: () => {\r\n this.goToErrorTab(tab.Name);\r\n }\r\n });\r\n }\r\n if (control.ControlType == this.eFormService.controlTypes.attachment) {\r\n if (!this.allowedFileExtensions.includes(control.Attachment.FileExtension.toLocaleLowerCase()) && !this.allowedFileExtensions.includes('.' + control.Attachment.FileExtension.toLocaleLowerCase())) {\r\n this.errors.push({\r\n id: controlId,\r\n fieldName: name,\r\n completFieldName: completFieldName,\r\n fieldRef: null,\r\n errorMsg: ' Only .pdf, .bmp, .jpg and .png files can be uploaded.',\r\n clickCallback: () => {\r\n this.goToErrorTab(tab.Name);\r\n }\r\n });\r\n }\r\n } else if (control.ControlType == this.eFormService.controlTypes.image) {\r\n if (!this.allowedImageExtensions.includes(control.Attachment.FileExtension.toLocaleLowerCase()) && !this.allowedImageExtensions.includes('.' + control.Attachment.FileExtension.toLocaleLowerCase())) {\r\n this.errors.push({\r\n id: controlId,\r\n fieldName: name,\r\n completFieldName: completFieldName,\r\n fieldRef: null,\r\n errorMsg: ' Only .bmp, .jpg and .png files can be uploaded.',\r\n clickCallback: () => {\r\n this.goToErrorTab(tab.Name);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n return this.errors;\r\n }\r\n\r\n async afterLocalPrint() {\r\n this.showPrintDiv = false;\r\n this.spinnerService.showSpinner = false;\r\n this.localPrint = false;\r\n this.showAllConditionalsPrint = false;\r\n this.columnInitializedBuffer = false;\r\n let fileName: string;\r\n if (this.fileNameOverride) {\r\n fileName = this.fileNameInput + '.pdf';\r\n } else {\r\n fileName = this.selectedInstance ? this.selectedInstance.Name + '.pdf' : 'eForm.pdf';\r\n }\r\n\r\n if (this.eFormService.pdfDataURIs.length == 1) {\r\n this.eFormService.addEFormAttachmentsToPDF(false);\r\n\r\n const pdfBase64 = await this.eFormService.getPdfDataUriAsBase64();\r\n\r\n System.saveFile(pdfBase64, 'pdf', fileName);\r\n }\r\n\r\n if (this.tabNames && this.tabNames.length > 0) {\r\n this.selectedTabChanged(this.tabNames[0]);\r\n }\r\n }\r\n\r\n async initGenerateEnglishPDFOnly(_callback) {\r\n if (this.selectedForm) {\r\n this.showPrintDiv = true;\r\n this.columnInitializedBuffer = false;\r\n this.spinnerService.showSpinner = true;\r\n\r\n this.eFormService.observablePageLoadCompleteStream$.pipe(take(1)).subscribe(() => {\r\n this.generateEnglishPDFOnly(() => {\r\n this.spinnerService.showSpinner = false;\r\n _callback();\r\n });\r\n });\r\n }\r\n }\r\n\r\n async generateEnglishPDFOnly(_callback) {\r\n await this.addFormToPDF();\r\n this.eFormService.addEFormAttachmentsToPDF();\r\n this.eFormService.selectedForm.EnglishPDF = await this.eFormService.getPdfDataUriAsBase64();\r\n _callback();\r\n }\r\n\r\n async initGenerateEFormPDFAndJSON(status: string, _callback) {\r\n if (this.selectedForm && (status.toLowerCase() == 'submitted' || status.toLowerCase() == 'accepted')) {\r\n this.showPrintDiv = true;\r\n this.columnInitializedBuffer = false;\r\n this.spinnerService.showSpinner = true;\r\n\r\n // Check if any tabs or pages have been hidden since the page was initialized (ONE-12613)\r\n this.eFormData.Tabs.forEach(tab => {\r\n if (!tab.Visible) {\r\n this.tabViewStatus = this.tabViewStatus.filter(status => status.TabId != tab.Id);\r\n }\r\n else {\r\n tab.Pages.forEach(page => {\r\n if (!page.Visible) {\r\n this.tabViewStatus = this.tabViewStatus.filter(status => status.PageId != page.Id);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.eFormService.observablePageLoadCompleteStream$.pipe(take(1)).subscribe(() => {\r\n this.generateEFormPDFAndJSON(() => {\r\n this.spinnerService.showSpinner = false;\r\n _callback();\r\n });\r\n });\r\n } else {\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n }\r\n\r\n async generateEFormPDFAndJSON(_callback) {\r\n await this.addFormToPDF();\r\n this.eFormService.addEFormAttachmentsToPDF();\r\n this.eFormService.selectedForm.TranslatedPDF = await this.eFormService.getPdfDataUriAsBase64();\r\n\r\n // Transform tags in JSON for EnglishJSON\r\n if (!this.disableMergeFields) {\r\n this.eFormService.allFormControls.forEach(control => {\r\n if (control.ControlType == this.eFormService.controlTypes.text) {\r\n control.Value = this.eFormService.transformDatabaseMergeTag(control.Value);\r\n } else {\r\n control.Label = this.eFormService.transformDatabaseMergeTag(control.Label);\r\n control.DropdownOptions.forEach(opt => {\r\n opt.CodeDescription = this.eFormService.transformDatabaseMergeTag(opt.CodeDescription);\r\n });\r\n }\r\n });\r\n }\r\n this.eFormService.selectedForm.EnglishJSON = JSON.stringify(this.eFormData);\r\n\r\n if (this.selectedInstance.StoreLocation.toLowerCase() != 'eform' && this.selectedInstance.ProcessType == 'auto') {\r\n if (this.userService.currentLanguage != 'en') {\r\n // User is not viewing form in English, create an english version for to saving to SDC/SP\r\n this.convertNonEnglishFormToEnglish(() => {\r\n _callback();\r\n });\r\n } else {\r\n // User is viewing form in English, use the PDF already creating for TranslatedPDF for saving to SDC/SP\r\n this.eFormService.selectedForm.EnglishPDF = this.eFormService.selectedForm.TranslatedPDF;\r\n _callback();\r\n }\r\n } else {\r\n _callback();\r\n }\r\n }\r\n\r\n async convertNonEnglishFormToEnglish(_callback) {\r\n // Set translations pipe to revert text back to English\r\n this.translationService.overrideTranslationPipe = true;\r\n this.translationService.revertToEnglish = true;\r\n // Reset flag after PDF is create for TranslatedPDF\r\n this.addFormToPDFStarted = false;\r\n // Hide/Show form to prompt control to reinitialize text translations\r\n this.columnInitializedBuffer = false;\r\n this.showPrintDiv = false;\r\n await this.delay(100);\r\n this.showPrintDiv = true;\r\n\r\n this.eFormService.observablePageLoadComplete.pipe(take(1)).subscribe(() => {\r\n this.updateEnglishPDF(_callback);\r\n });\r\n }\r\n\r\n async updateEnglishPDF(_callback) {\r\n await this.addFormToPDF();\r\n this.translationService.overrideTranslationPipe = false;\r\n this.translationService.revertToEnglish = false;\r\n\r\n this.eFormService.addEFormAttachmentsToPDF();\r\n\r\n this.eFormService.selectedForm.EnglishPDF = await this.eFormService.getPdfDataUriAsBase64();\r\n\r\n _callback();\r\n }\r\n\r\n roundToTwo(num) {\r\n return +(Math.round(Number(num + 'e+2')) + 'e-2');\r\n }\r\n\r\n async delay(ms: number) {\r\n await new Promise(r => setTimeout(r, ms));\r\n }\r\n\r\n public dropped() {\r\n\r\n }\r\n\r\n async addFormToPDF() {\r\n // Grab html content to be rendered\r\n const data = document.getElementById('formToPrint');\r\n if (data != null && !this.addFormToPDFStarted) {\r\n this.addFormToPDFStarted = true;\r\n if ((!this.selectedInstance || this.selectedInstance.ProcessType != 'auto') && this.config.ViewMode != enmEFormViewModes.FRMA) {\r\n await this.delay(500);\r\n }\r\n this.pdfExportRef.scale = .68;\r\n await this.pdfExportRef.export().then(async (group: Group) => {\r\n if (group) {\r\n await exportPDF(group).then((dataURI1) => {\r\n if (dataURI1) {\r\n this.eFormService.pdfDataURIs.push(dataURI1);\r\n }\r\n });\r\n }\r\n });\r\n // this.eFormService.pdfDataURIs = [];\r\n // // this code for reload page and repushed in pdfDataURIs\r\n // await this.pdfExportRef.export().then(async (group: Group) => {\r\n // if (group) {\r\n // await exportPDF(group).then((dataURI1) => {\r\n // if (dataURI1) {\r\n // this.eFormService.pdfDataURIs.push(dataURI1);\r\n // }\r\n // });\r\n // }\r\n // });\r\n } else if (!this.addFormToPDFStarted) {\r\n setTimeout(() => {\r\n this.addFormToPDF();\r\n }, 100);\r\n }\r\n }\r\n\r\n\r\n async columnInitialized(col: EFormColumn) {\r\n // This will only trigger when all object in the e-form are initialized\r\n const colObj = this.tabViewStatus.find(o => o.Column == col);\r\n if (colObj) {\r\n colObj.Initialized = true;\r\n }\r\n if (this.tabViewStatus.find(o => o.Initialized == false) == null && !this.columnInitializedBuffer) {\r\n this.columnInitializedBuffer = true;\r\n setTimeout(() => {\r\n this.renderCompleted.emit(true);\r\n }, 0);\r\n }\r\n }\r\n\r\n async columnInitializedPrint(col: EFormColumn) {\r\n // This will only trigger when all object in the e-form are initialized\r\n const colObj = this.tabViewStatus.filter(o => o.Column == col);\r\n if (colObj != null) {\r\n colObj.forEach(element => {\r\n if (element) {\r\n element.Initialized = true;\r\n }\r\n });\r\n }\r\n if (this.tabViewStatus.find(o => o.Initialized == false) == null && !this.columnInitializedBuffer) {\r\n this.columnInitializedBuffer = true;\r\n this.eFormService.observablePageLoadComplete.next(true);\r\n if (this.config.ViewMode == enmEFormViewModes.FRMA) {\r\n await this.delay(100);\r\n }\r\n else {\r\n await this.delay(4500);\r\n }\r\n setTimeout(() => {\r\n this.eFormService.mergeFieldPipeTrigger();\r\n }, 0);\r\n\r\n if (this.languageIdOverride && this.languageIdOverride != 9 && this.languageIdOverride > -1) {\r\n this.languageChangePDF(() => {\r\n this.addFormAndComplete();\r\n });\r\n } else {\r\n this.addFormAndComplete();\r\n }\r\n }\r\n }\r\n\r\n async addFormAndComplete() {\r\n await this.addFormToPDF();\r\n this.completeRender();\r\n }\r\n\r\n async completeRender() {\r\n setTimeout(() => {\r\n if (this.localPrint) {\r\n this.afterLocalPrint();\r\n } else {\r\n this.eFormService.renderedFormData = this.eFormData;\r\n this.renderCompleted.emit(true);\r\n }\r\n }, 0);\r\n }\r\n\r\n getControlLabels(control: EFormControl) {\r\n if (control.Label) {\r\n this.labels.push(control.Label);\r\n }\r\n if (control.ControlType == 'text') {\r\n if (control.Value) {\r\n this.labels.push(control.Value);\r\n }\r\n }\r\n if (control.ControlType == 'buttons') {\r\n if (control.DropdownOptions) {\r\n control.DropdownOptions.forEach(chip => {\r\n if (chip.CodeDescription) {\r\n this.labels.push(chip.CodeDescription);\r\n }\r\n });\r\n }\r\n }\r\n if (control.ControlType == 'dropdown') {\r\n if (control.DropdownOptions) {\r\n control.DropdownOptions.forEach(option => {\r\n if (option.CodeDescription) {\r\n this.labels.push(option.CodeDescription);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n getRowLabels(rows: EFormRow[]) {\r\n if (rows) {\r\n rows.forEach(row => {\r\n row.Controls.forEach(control => {\r\n this.getControlLabels(control);\r\n });\r\n this.getColumnLabels(row.Columns);\r\n });\r\n }\r\n }\r\n\r\n getColumnLabels(columns: EFormColumn[]) {\r\n if (columns) {\r\n columns.forEach(column => {\r\n column.Controls.forEach(control => {\r\n this.getControlLabels(control);\r\n });\r\n this.getRowLabels(column.Rows);\r\n });\r\n }\r\n }\r\n\r\n getFormLabels() {\r\n this.labels = [];\r\n this.serviceControls = this.eFormService.getAllFormControls(this.eFormData);\r\n\r\n\r\n this.eFormData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n // this.getRowLabels(page.Rows);\r\n // this.getColumnLabels(page.Columns);\r\n });\r\n });\r\n\r\n const filer = 'filler';\r\n }\r\n\r\n getLanguages() {\r\n // TODO\r\n this.languages = [];\r\n let language = new Lookup();\r\n language.Code = 'en';\r\n language.CodeDescription = 'English';\r\n this.languages.push(language);\r\n language = new Lookup();\r\n language.Code = 'es';\r\n language.CodeDescription = 'Spanish';\r\n this.languages.push(language);\r\n language = new Lookup();\r\n language.Code = 'fr';\r\n language.CodeDescription = 'French';\r\n this.languages.push(language);\r\n language = new Lookup();\r\n language.Code = 'pt';\r\n language.CodeDescription = 'Portuguese';\r\n this.languages.push(language);\r\n\r\n if (this.userService.currentLanguage) {\r\n this.selectedLanguageCode = this.userService.currentLanguage;\r\n } else {\r\n this.selectedLanguageCode = this.languages[0].Code;\r\n }\r\n }\r\n\r\n languageChanged() {\r\n this.languageChange = true;\r\n\r\n let language_ID: number;\r\n\r\n // TODO change to dto lookup\r\n // language must be 'en' for English, 'fr' for French, or 'es' for Spanish, or 'pt' for portuguese\r\n switch (this.selectedLanguageCode) {\r\n case 'fr':\r\n language_ID = 7;\r\n break;\r\n case 'es':\r\n language_ID = 1;\r\n break;\r\n case 'pt':\r\n language_ID = 107;\r\n break;\r\n default:\r\n // en\r\n language_ID = 9;\r\n }\r\n\r\n this.translationService.overrideTranslationPipe = true;\r\n this.translationService.getTranslationsForLanguage(language_ID).pipe(take(1)).subscribe(result => {\r\n this.translationService.overrideTranslations = result;\r\n this.showContent = false;\r\n setTimeout(() => {\r\n this.showContent = true;\r\n }, 0);\r\n });\r\n\r\n // changed for ONE-5073, the e-Form preview only uses tyl-translate now\r\n // this.userService.setUserLanguage(this.selectedLanguageCode).subscribe(result => {\r\n // this.showContent = false;\r\n // setTimeout(() => {\r\n // this.showContent = true;\r\n // }, 0);\r\n // });\r\n }\r\n\r\n async languageChangePDF(_callback) {\r\n this.languageChange = true;\r\n this.translationService.overrideTranslationPipe = true;\r\n this.translationService.getTranslationsForLanguage(this.languageIdOverride).pipe(take(1)).subscribe(result => {\r\n this.translationService.overrideTranslations = result;\r\n this.showContent = false;\r\n setTimeout(() => {\r\n this.showContent = true;\r\n _callback();\r\n }, 500);\r\n });\r\n }\r\n\r\n checkVisiblePageCount(): boolean {\r\n return this.selectedTab ? (this.selectedTab.Pages.filter(o => o.Visible).length > 1) : false;\r\n }\r\n\r\n getAllCustomFields(designPageIndex: number): EFormControl[] {\r\n return this.eFormService.allCustomFieldControls.filter(control => control.CustomField\r\n && (designPageIndex == -1 || control.DesignPageIndex == designPageIndex));\r\n }\r\n\r\n getCustomFieldByRefName(refName: string, designPageIndex: number): EFormControl {\r\n return this.eFormService.allCustomFieldControls.find(control => control.CustomFieldRefName\r\n && control.CustomFieldRefName == refName\r\n && (designPageIndex == -1 || control.DesignPageIndex == designPageIndex));\r\n }\r\n\r\n setCustomFieldByRefName(value: any, refName: string, designPageIndex: number) {\r\n const c: EFormControl = this.eFormService.allCustomFieldControls.find(control => control.CustomFieldRefName\r\n && control.CustomFieldRefName == refName\r\n && (designPageIndex == -1 || control.DesignPageIndex == designPageIndex));\r\n if (c) {\r\n c.Value = value;\r\n }\r\n }\r\n\r\n setLinkedDBFieldValues() {\r\n // we have to do both checks because some controls will have been linked to DB fields before Customization Framework was enabled.\r\n let fieldIds: number[] = [];\r\n const cfEnabled = this.loginService.LoginSettings.EnableCustomizationFramework && this.loginService.LoginSettings.C360CustomFieldsImported;\r\n fieldIds = this.eFormService.allFormControls.filter(c => c.LinkedDBField != -1 && (!cfEnabled || !c.LinkedCSTFieldName)).map(o => o.LinkedDBField);\r\n if (fieldIds.length > 0) {\r\n this.eFormService.getLinkedDBFieldValues(fieldIds, this.selectedForm ? this.selectedForm.Student_ID : 0).pipe(take(1)).subscribe(result => {\r\n result.forEach(f => {\r\n const index: number = this.eFormService.allFormControls.findIndex(c => c.LinkedDBField == f.ID);\r\n\r\n if (index > -1 && f.Value) {\r\n this.eFormService.allFormControls[index].Value = f.Value;\r\n this.eFormService.allFormControls[index].HintLabel = f.Value;\r\n }\r\n });\r\n });\r\n }\r\n if (cfEnabled && this.eFormService.allFormControls.filter(c => c.LinkedCSTFieldName).length > 0) {\r\n this.customizationFrameworkService.getLinkedCustomFields(this.eFormData, this.selectedForm).pipe(take(1)).subscribe(customFields => {\r\n this.selectedForm.CustomFields = customFields;\r\n this.customizationFrameworkService.massGetCustomDataFieldValue(this.yearService.defaultYear.SiteYearId, customFields).pipe(take(1)).subscribe(fields => {\r\n fields.forEach(f => {\r\n const controlToUpdate = this.eFormService.allFormControls.find(c => c.LinkedCSTFieldName == f.FieldName);\r\n if (controlToUpdate) {\r\n controlToUpdate.Value = f.Value;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","import { EFormStatusHistory } from './e-form-status-history.model';\r\nimport { EFormSurveyField } from './e-form-survey-field.model';\r\nimport { EFormDatabaseField } from './e-form-database-field.model';\r\nimport { EFormSurveyAnswer } from './e-form-survey-answer.model';\r\nimport { CSTField } from '../../shared-modules/customization-framework/models/custom-data-field.model';\r\n\r\nexport class EForm {\r\n ID: number;\r\n Instance_ID: number;\r\n ParentMem_ID: number;\r\n PrimaryParentMem_ID: number;\r\n ParentName: string;\r\n Student_ID: number;\r\n Staff_ID: number;\r\n StudentNames: string[] = [];\r\n strStudentId: string[] = [];\r\n FormData: string;\r\n Status: string;\r\n StaffNote: string;\r\n CreatedOn: Date;\r\n CreatedBy: number;\r\n CreatedByName: string;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n LastUpdatedByName: string;\r\n StatusHistory: EFormStatusHistory[] = [];\r\n SubmittedDate: Date;\r\n SubmittedName: string;\r\n DelStatus: boolean;\r\n Required: boolean;\r\n Student: string;\r\n DueDate: Date;\r\n StartDate: Date;\r\n EndDate: Date;\r\n AllowMultiple: boolean;\r\n InstanceName: string;\r\n TemplateType: string;\r\n SubmittedOn: Date;\r\n SubmittedBy: number;\r\n SubmittedByName: string;\r\n ManualSubmission: boolean;\r\n UserCanProcess: boolean;\r\n //Type: string;\r\n UserType: number;\r\n StudentIds: number[] = [];\r\n IsInstanceActive: string;\r\n AYIdentifier: string;\r\n Family_ID: number;\r\n Year_ID: number;\r\n StudentIDs: number[] = [];\r\n // Behavior Letter specific properties\r\n Template_ID: number;\r\n Incident_ID: number;\r\n PDFDataBase64: string;\r\n School_ID: number;\r\n GradeLevel_ID: number;\r\n IsLastStatusDelete: boolean;\r\n InvolvementType: string;\r\n // Translated language PDF Variables\r\n TranslatedPDF: string;\r\n TranslatedJSON: string;\r\n EnglishJSON: string;\r\n DocToFamily_ID: Number;\r\n Non_English = false;\r\n SurveyFields: EFormSurveyField[];\r\n IsSurvey: boolean;\r\n IsMobile: boolean;\r\n DisplayCriticalMessage: boolean;\r\n CriticalMessage: string;\r\n Frequency: string;\r\n StudentsCanComplete: boolean;\r\n ParentsCanComplete: boolean;\r\n NonResidentParentsCanComplete: boolean;\r\n StaffCanComplete: boolean;\r\n CompletionDue = false;\r\n CompletionDueOption: string;\r\n DatabaseFields: EFormDatabaseField[];\r\n CustomFields: CSTField[];\r\n SurveyAnswers: EFormSurveyAnswer[];\r\n HasBeenReOpened: boolean; \r\n EnglishPDF: string;\r\n StaffName: string;\r\n FormAYIdentifier: string;\r\n PDFNameOverride: string;\r\n GradeLevel: string;\r\n\r\n Cell_number:string;\r\n Home_Number:string;\r\n Address:string;\r\n Email_Address:string;\r\n ShowInAllYears:boolean;\r\n NonresidentParents = false;\r\n\r\n // Attendance Letter Only\r\n TrackingType: number;\r\n BatchRunDate: Date;\r\n}\r\n\r\nexport class EFormSelectedStudentInfo {\r\n StudentNumber: string;\r\n LastName: string;\r\n FirstName: string;\r\n Grade: string;\r\n EnrollDate?: Date;\r\n DateOfBirth?: Date;\r\n SchoolName: string;\r\n StudentCount?: number;\r\n}\r\n\r\nexport class EFormAvilableCount {\r\n instanceId: string;\r\n eFormsAvailable: number;\r\n optionaleFormAvailable: number;\r\n}\r\n","export class EFormDatabaseField {\r\n ID: number;\r\n FieldName: string;\r\n ColumnName: string;\r\n FieldType: string;\r\n IsDataDef: boolean;\r\n DataDefType: number;\r\n DataFieldGroup_ID: number;\r\n DataFieldGroupName: string;\r\n DataValueField: string;\r\n ControlType: string;\r\n Value: string;\r\n }","/* eslint-disable camelcase */\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable, SecurityContext } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport * as jspdf from 'jspdf';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { PDFDocument } from 'pdf-lib';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { WorkSheet, WorkBook, write, utils } from 'xlsx';\r\nimport { CustomDesignPage } from '../../admin360/customization/models/custom-design-page.model';\r\nimport { EFormInstancesFilterParam } from '../../admin360/e-forms/e-form-instances/e-form-instances-filter-param';\r\nimport { EFormSubmissionsFilterParam } from '../../admin360/e-forms/e-form-submissions/e-form-submissions-filter-param';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { CSTCustomPage } from '../../shared-modules/customization-framework/models/cst-custom-page.model';\r\nimport { CSTField } from '../../shared-modules/customization-framework/models/custom-data-field.model';\r\nimport { CustomDataTemplateRef } from '../../shared-modules/customization-framework/models/custom-data-template-ref.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Service } from '../../student360/programs-and-services/service.model';\r\nimport { ExportService } from '../export.service';\r\nimport { Lookup } from '../lookup/lookup.model';\r\nimport { TylTranslation } from '../models/tyl-translation.model';\r\nimport { Staff } from '../staff-search/staff.model';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { System } from '../System';\r\nimport { UserPermission } from '../user/user-permission.model';\r\nimport { User } from '../user/user.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { School, SchoolStudentFamiliesInfo } from '../year/school.model';\r\nimport { YearService } from '../year/year.service';\r\nimport { EFormAttachment } from './e-form-attachment.model';\r\nimport { EFormCategory } from './e-form-category.model';\r\nimport { EFormChangeHistory } from './e-form-change-history.model';\r\nimport { EFormColumn } from './e-form-column.model';\r\nimport { EFormConfiguration } from './e-form-config.model';\r\nimport { EFormContact } from './e-form-contact.model';\r\nimport { EFormControl } from './e-form-control.model';\r\nimport { EFormDatabaseField } from './e-form-database-field.model';\r\nimport { EFormInstance } from './e-form-instance.model';\r\nimport { EFormMergeField } from './e-form-merge-field.model';\r\nimport { EFormPage } from './e-form-page.model';\r\nimport { EFormStatusHistory } from './e-form-status-history.model';\r\nimport { EformSubmissionCounts } from './e-form-submission-counts.model';\r\nimport { EFormSurveyAnswersFilterParam } from './e-form-survey-answer-details/e-form-survey-answers-filter/e-form-survey-answers-filter-param';\r\nimport { EFormsSurveyAnswerSummary } from './e-form-survey-answer-summary.model';\r\nimport { EFormSurveyAnswer } from './e-form-survey-answer.model';\r\nimport { EFormSurveyField } from './e-form-survey-field.model';\r\nimport { EFormsSurveySummary } from './e-form-survey-summary.model';\r\nimport { EFormTemplate } from './e-form-template.model';\r\nimport { EForm, EFormAvilableCount, EFormSelectedStudentInfo } from './e-form.model';\r\nimport { EFormDataObject } from './e-formDataObject.model';\r\n\r\n@Injectable()\r\nexport class EFormService {\r\n\r\n renderedFormData: EFormDataObject;\r\n selectedFormData: EFormDataObject;\r\n selectedTemplate: EFormTemplate;\r\n selectedInstance: EFormInstance;\r\n selectedForm: EForm;\r\n selectedFormsToPDF: EForm[] = [];\r\n templates: EFormTemplate[] = [];\r\n codeDescription: Lookup[];\r\n userTemplates: EFormTemplate[] = [];\r\n categories: EFormCategory[] = [];\r\n databaseFields: EFormDatabaseField[] = [];\r\n mergeFields: EFormMergeField[] = [];\r\n selectedReviewInstanceId: number;\r\n selectedReviewInstanceName: string;\r\n selectedDesignPage: CustomDesignPage;\r\n selectedCustomPage: CSTCustomPage;\r\n eFormPermissions: UserPermission[] = [];\r\n instances: EFormInstance[] = [];\r\n viewType: string;\r\n initialS360eFormTab = '';\r\n allFormControls: EFormControl[] = [];\r\n allCustomFieldControls: EFormControl[] = [];\r\n // pdf: jspdf;\r\n pdf = PDFDocument.create();\r\n pdfDataURIs: string[] = [];\r\n changes: EFormChangeHistory[];\r\n manageEformsFilter: string;\r\n userType: User;\r\n selectedReviewInstance: EFormInstance;\r\n maxFileSizeKB = 5000;\r\n selectedReviewShowAllClasses: boolean;\r\n showInactive: boolean;\r\n homeLinkClickSelectedReviewShowAllClasses = false;\r\n homeLinkClickShowInactive = false;\r\n redirectFromClassic = false;\r\n redirectFromSubmision = false;\r\n eFormHeadLinePermission = false;\r\n V10 = false;\r\n eFormAttachment: EFormAttachment[] = [];\r\n eFormAttachmentForPDF: EFormAttachment[] = [];\r\n contentTemplates: CustomDataTemplateRef[];\r\n services: Service[] = [];\r\n showCriticalMessage = false;\r\n public surveyAnswersShowAllSchools = false;\r\n templateProcessType = '';\r\n categoryType = '';\r\n isComeFromSurvey = false;\r\n eFormSubmissionsFilterDateChange: boolean;\r\n districtLogo: SafeResourceUrl;\r\n siteLogo: SafeResourceUrl;\r\n alternateSiteLogo: SafeResourceUrl;\r\n alternateDistrictLogo: SafeResourceUrl;\r\n\r\n controlTypes = {\r\n text: 'text',\r\n divider: 'divider',\r\n verticalDivider: 'verticalDivider',\r\n image: 'image',\r\n buttons: 'buttons',\r\n checkbox: 'checkbox',\r\n checkboxWithTextbox: 'checkboxWithTextbox',\r\n dropdown: 'dropdown',\r\n note: 'note',\r\n radioButtons: 'radioButtons',\r\n textbox: 'textbox',\r\n date: 'date',\r\n time: 'time',\r\n attachment: 'attachment',\r\n linkToFile: 'linkToFile',\r\n customField: 'customField',\r\n component: 'component'\r\n };\r\n\r\n formStatus = {\r\n NotSubmitted: 'not submitted',\r\n Submitted: 'submitted',\r\n Rejected: 'rejected',\r\n Accepted: 'accepted',\r\n Complete: 'complete'\r\n };\r\n\r\n inputControlTypes: string[] = [\r\n this.controlTypes.buttons,\r\n this.controlTypes.checkbox,\r\n this.controlTypes.checkboxWithTextbox,\r\n this.controlTypes.dropdown,\r\n this.controlTypes.note,\r\n this.controlTypes.radioButtons,\r\n this.controlTypes.textbox,\r\n this.controlTypes.date,\r\n this.controlTypes.attachment\r\n ];\r\n\r\n public observablePageLoadComplete = new Subject();\r\n observablePageLoadCompleteStream$ = this.observablePageLoadComplete.asObservable();\r\n\r\n public observableIsLastPage = new Subject();\r\n observableIsLastPageStream$ = this.observableIsLastPage.asObservable();\r\n\r\n public observableIsFirstPage = new Subject();\r\n observableIsFirstPageStream$ = this.observableIsFirstPage.asObservable();\r\n\r\n public observableControlValueChanged = new Subject();\r\n observableControlValueChangedStream$ = this.observableControlValueChanged.asObservable();\r\n\r\n public observableShowConditionalObjects = new Subject();\r\n observableShowConditionalObjectsStream$ = this.observableShowConditionalObjects.asObservable();\r\n\r\n public observableDatabaseFields = new Subject();\r\n observableDatabaseFieldsStream$ = this.observableDatabaseFields.asObservable();\r\n\r\n public observableMergeFieldValuesRetrieved = new Subject();\r\n observableMergeFieldValuesRetrievedStream$ = this.observableMergeFieldValuesRetrieved.asObservable();\r\n\r\n public observableMergeFieldsRetrieved = new Subject();\r\n observableMergeFieldsRetrievedStream$ = this.observableMergeFieldsRetrieved.asObservable();\r\n\r\n public observablePipeTrigger = new Subject();\r\n observablePipeTriggerStream$ = this.observablePipeTrigger.asObservable();\r\n\r\n public observableeFormHeadLinePermission = new Subject();\r\n observableeFormHeadLinePermissionStream$ = this.observableeFormHeadLinePermission.asObservable();\r\n\r\n public observableeFormstrQueryXML = new Subject();\r\n observableeFormstrQueryXML$ = this.observableeFormstrQueryXML.asObservable();\r\n\r\n private _surveyAnswersFilterParam: EFormSurveyAnswersFilterParam;\r\n public observablesurveyAnswersFilterParam = new Subject();\r\n observablesurveyAnswersFilterParamStream$ = this.observablesurveyAnswersFilterParam.asObservable();\r\n\r\n public observableReadOnlyStatusChanged = new Subject();\r\n observableReadOnlyStatusChangedStream$ = this.observableReadOnlyStatusChanged.asObservable();\r\n\r\n\r\n _filterParam: EFormInstancesFilterParam;\r\n filterParamManageSurveys: EFormInstancesFilterParam = new EFormInstancesFilterParam();\r\n filterParamManageEForms: EFormInstancesFilterParam = new EFormInstancesFilterParam();\r\n filterChange = new EventEmitter();\r\n\r\n _eFormSubmissionsFilterParam: EFormSubmissionsFilterParam;\r\n eFormSubmissionsFilterChange = new EventEmitter();\r\n\r\n set filterParam(filterParam: EFormInstancesFilterParam) {\r\n this._filterParam = filterParam;\r\n this.filterChange.emit();\r\n }\r\n\r\n get filterParam() {\r\n return this._filterParam;\r\n }\r\n\r\n isFiltered(): boolean {\r\n return !!this.filterParam.availableTo ||\r\n !!this.filterParam.selectedSites ||\r\n !!this.filterParam.selectedClasses ||\r\n !!this.filterParam.selectedStudents ||\r\n !!this.filterParam.deadlineFrom ||\r\n !!this.filterParam.deadlineTo ||\r\n !!this.filterParam.showFromFrom ||\r\n !!this.filterParam.showFromTo ||\r\n !!this.filterParam.showToFrom ||\r\n !!this.filterParam.showToTo ||\r\n !!this.filterParam.category ||\r\n !!this.filterParam.template ||\r\n !!this.filterParam.createdFrom ||\r\n !!this.filterParam.createdTo ||\r\n !!this.filterParam.createdBy ||\r\n !!this.filterParam.lastUpdatedFrom ||\r\n !!this.filterParam.lastUpdatedTo ||\r\n !!this.filterParam.lastUpdatedBy;\r\n }\r\n\r\n set eFormSubmissionsFilterParam(eFormSubmissionsFilterParam: EFormSubmissionsFilterParam) {\r\n this._eFormSubmissionsFilterParam = eFormSubmissionsFilterParam;\r\n this.eFormSubmissionsFilterChange.emit();\r\n }\r\n\r\n get eFormSubmissionsFilterParam() {\r\n return this._eFormSubmissionsFilterParam;\r\n }\r\n\r\n isEFormSubmissionsFiltered(): boolean {\r\n return !this.eFormSubmissionsFilterParam.notSubmitted ||\r\n !this.eFormSubmissionsFilterParam.submitted ||\r\n !this.eFormSubmissionsFilterParam.rejected ||\r\n !this.eFormSubmissionsFilterParam.accepted ||\r\n !this.eFormSubmissionsFilterParam.complete ||\r\n !!this.eFormSubmissionsFilterParam.submittedFrom ||\r\n !!this.eFormSubmissionsFilterParam.submittedTo ||\r\n this.eFormSubmissionsFilterParam.manualSubmission != '0';\r\n }\r\n\r\n public get surveyAnswersFilterParam(): EFormSurveyAnswersFilterParam {\r\n return this._surveyAnswersFilterParam;\r\n }\r\n public set surveyAnswersFilterParam(value: EFormSurveyAnswersFilterParam) {\r\n this._surveyAnswersFilterParam = value;\r\n this.observablesurveyAnswersFilterParam.next(value);\r\n }\r\n\r\n isSurveyAnswersFiltered(): boolean {\r\n return this.surveyAnswersFilterParam && ((this.surveyAnswersFilterParam.dateFilterType == 'byDate' && this.surveyAnswersFilterParam.specificDate != null)\r\n || (this.surveyAnswersFilterParam.dateFilterType == 'fromDate' && this.surveyAnswersFilterParam.fromDate != null)\r\n || (this.surveyAnswersFilterParam.dateFilterType == 'betweenDates' && (this.surveyAnswersFilterParam.rangeStartDate != null || this.surveyAnswersFilterParam.rangeEndDate != null)));\r\n }\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private sanitizer: DomSanitizer,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private exportService: ExportService,\r\n private studentService: StudentService\r\n ) {\r\n this._filterParam = new EFormInstancesFilterParam();\r\n this._eFormSubmissionsFilterParam = new EFormSubmissionsFilterParam();\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n getAllFormTextToTranslate(formData: EFormDataObject): TylTranslation[] {\r\n const controls: EFormControl[] = this.getAllFormControls(formData);\r\n const translations: TylTranslation[] = [];\r\n\r\n controls.forEach(control => {\r\n if (control.ControlType != 'component') {\r\n let controlTranslations: TylTranslation[] = [];\r\n\r\n controlTranslations = this.getControlLabels(control);\r\n\r\n if (controlTranslations.length > 0) {\r\n controlTranslations.forEach(controlTranslation => {\r\n if (translations.findIndex(translation => translation.English == controlTranslation.English) == -1) {\r\n translations.push(controlTranslation);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n\r\n return translations;\r\n }\r\n\r\n getControlLabels(control: EFormControl): TylTranslation[] {\r\n const textToTranslate: TylTranslation[] = [];\r\n\r\n if (control.Label) {\r\n textToTranslate.push(new TylTranslation(control.Label));\r\n }\r\n if (control.ControlType == 'text') {\r\n if (control.Value) {\r\n textToTranslate.push(new TylTranslation(control.Value, true));\r\n }\r\n }\r\n if (control.ControlType == 'buttons') {\r\n if (control.DropdownOptions) {\r\n control.DropdownOptions.forEach(chip => {\r\n if (chip.CodeDescription) {\r\n textToTranslate.push(new TylTranslation(chip.CodeDescription));\r\n }\r\n });\r\n }\r\n }\r\n if (control.ControlType == 'dropdown' || control.ControlType == 'radioButtons') {\r\n if (control.DropdownOptions) {\r\n control.DropdownOptions.forEach(option => {\r\n if (option.CodeDescription) {\r\n textToTranslate.push(new TylTranslation(option.CodeDescription));\r\n }\r\n });\r\n }\r\n }\r\n\r\n return textToTranslate;\r\n }\r\n\r\n getAllFormControls(formData: EFormDataObject): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n if (formData && formData.Tabs != null && formData.Tabs) {\r\n formData.Tabs.forEach(tab => {\r\n tab.Pages.forEach(page => {\r\n const pageControls = this.getAllControlsByPage(page);\r\n if (pageControls.length > 0) {\r\n controls = controls.concat(pageControls);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return controls;\r\n }\r\n\r\n getAllControlsByPage(page: EFormPage): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n page.Columns.forEach(column => {\r\n const colControls = this.getAllControlsByColumn(column);\r\n if (colControls.length > 0) {\r\n controls = controls.concat(colControls);\r\n }\r\n });\r\n return controls;\r\n }\r\n\r\n getAllControlsByColumn(column: EFormColumn): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n if (column.Controls.length > 0) {\r\n controls = controls.concat(column.Controls);\r\n }\r\n column.Rows.forEach(row => {\r\n if (row.Controls.length > 0) {\r\n controls = controls.concat(row.Controls);\r\n }\r\n row.Columns.forEach(col => {\r\n const colControls = this.getAllControlsByColumn(col);\r\n if (colControls.length > 0) {\r\n controls = controls.concat(colControls);\r\n }\r\n });\r\n });\r\n return controls;\r\n }\r\n\r\n isConditionMet(condition: string | boolean, parentControl: EFormControl): boolean {\r\n let conditionMet = false;\r\n if (parentControl.ControlType == this.controlTypes.textbox || parentControl.ControlType == this.controlTypes.note) {\r\n if (condition == 'blank') {\r\n conditionMet = !parentControl.Value;\r\n }\r\n else {\r\n conditionMet = !!parentControl.Value;\r\n }\r\n }\r\n else if (parentControl.ControlType == this.controlTypes.checkbox || parentControl.ControlType == this.controlTypes.checkboxWithTextbox) {\r\n if (condition == 'false') {\r\n conditionMet = !parentControl.Value;\r\n }\r\n else {\r\n conditionMet = !!parentControl.Value;\r\n }\r\n }\r\n else {\r\n if (typeof (parentControl.Value) === 'string' && parentControl.Value) {\r\n conditionMet = condition.toString().trim() == parentControl.Value.trim();\r\n }\r\n else {\r\n conditionMet = condition == parentControl.Value;\r\n }\r\n }\r\n return conditionMet;\r\n }\r\n\r\n formatControlName(control: EFormControl): string {\r\n const id = control.Id ? control.Id.toString() : '';\r\n let controlType = '';\r\n let name = '';\r\n if (control.ControlType == this.controlTypes.text) {\r\n name = control.Value ? control.Value : '';\r\n }\r\n else {\r\n name = control.Label ? control.Label : '';\r\n }\r\n if (name.length > 20) {\r\n name = name.substr(0, 20) + '...';\r\n }\r\n controlType = this.formatControlType(control.ControlType);\r\n\r\n // return 'Control ' + id + ' - ' + controlType + ' (' + name + ')';\r\n return controlType + ' - ' + name + ' (' + id + ')';\r\n }\r\n\r\n formatControlNameForErrors(control: EFormControl): string {\r\n const id = control.Id ? control.Id.toString() : '';\r\n let controlType = '';\r\n let name = '';\r\n if (control.ControlType == this.controlTypes.text) {\r\n name = control.Value ? control.Value : '';\r\n }\r\n else {\r\n name = control.Label ? control.Label : '';\r\n }\r\n if (name.length > 20) {\r\n name = name.substr(0, 20) + '...';\r\n }\r\n controlType = this.formatControlType(control.ControlType);\r\n\r\n // return 'Control ' + id + ' - ' + controlType + ' (' + name + ')';\r\n return controlType + ' (' + name + ')';\r\n }\r\n\r\n formatControlType(type: string): string {\r\n let controlType = '';\r\n switch (type) {\r\n case this.controlTypes.attachment: {\r\n controlType = 'Attachment Request';\r\n break;\r\n }\r\n case this.controlTypes.buttons: {\r\n controlType = 'Buttons';\r\n break;\r\n }\r\n case this.controlTypes.checkbox: {\r\n controlType = 'Checkbox';\r\n break;\r\n }\r\n case this.controlTypes.date: {\r\n controlType = 'Date';\r\n break;\r\n }\r\n case this.controlTypes.divider: {\r\n controlType = 'Divider';\r\n break;\r\n }\r\n case this.controlTypes.verticalDivider: {\r\n controlType = 'Vertical Divider';\r\n break;\r\n }\r\n case this.controlTypes.dropdown: {\r\n controlType = 'Dropdown';\r\n break;\r\n }\r\n case this.controlTypes.image: {\r\n controlType = 'Image';\r\n break;\r\n }\r\n case this.controlTypes.linkToFile: {\r\n controlType = 'Link to File';\r\n break;\r\n }\r\n case this.controlTypes.note: {\r\n controlType = 'Multi-line Textbox';\r\n break;\r\n }\r\n case this.controlTypes.radioButtons: {\r\n controlType = 'Radio Buttons';\r\n break;\r\n }\r\n case this.controlTypes.text: {\r\n controlType = 'Text';\r\n break;\r\n }\r\n case this.controlTypes.textbox: {\r\n controlType = 'Textbox';\r\n break;\r\n }\r\n }\r\n return controlType;\r\n }\r\n\r\n extractMergeTags(eFormData: EFormDataObject, config: EFormConfiguration): string[] {\r\n let allTags: string[] = [];\r\n if (config.ShowHeader) {\r\n allTags = ['<>', '<>', '<>', '<>'];\r\n if (config.ShowHeaderSchoolName) {\r\n allTags.push('<>');\r\n }\r\n if (config.ShowHeaderSchoolAddress) {\r\n allTags.push('<>');\r\n allTags.push('<>');\r\n allTags.push('<>');\r\n allTags.push('<>');\r\n allTags.push('<>');\r\n allTags.push('<>');\r\n }\r\n }\r\n\r\n let formattedTags: string[] = [];\r\n const controls = this.getAllFormControls(eFormData);\r\n const normalRegEx = new RegExp('<<(.*?)>>', 'g');\r\n const sanitizedRegEx = new RegExp('<<(.*?)>>', 'g');\r\n controls.forEach(control => {\r\n allTags = allTags.concat(control.Label.match(normalRegEx));\r\n allTags = allTags.concat(control.Label.match(sanitizedRegEx));\r\n if (control.ControlType == this.controlTypes.text) {\r\n if (control.Value) {\r\n allTags = allTags.concat(control.Value.match(normalRegEx));\r\n allTags = allTags.concat(control.Value.match(sanitizedRegEx));\r\n }\r\n }\r\n control.DropdownOptions.forEach(opt => {\r\n allTags = allTags.concat(opt.CodeDescription.match(normalRegEx));\r\n allTags = allTags.concat(opt.CodeDescription.match(sanitizedRegEx));\r\n });\r\n });\r\n\r\n const leftAngleRegEx = new RegExp('<<', 'g');\r\n const rightAngleRegEx = new RegExp('>>', 'g');\r\n formattedTags = _.map(_.uniq(allTags).filter(o => !!o), o => o.replace(leftAngleRegEx, '<<').replace(rightAngleRegEx, '>>'));\r\n return formattedTags;\r\n }\r\n\r\n clearMergeFieldValues() {\r\n this.mergeFields.forEach(f => {\r\n f.Value = '';\r\n });\r\n }\r\n\r\n mergeFieldValuesRetrieved() {\r\n this.observableMergeFieldValuesRetrieved.next(true);\r\n }\r\n\r\n mergeFieldPipeTrigger() {\r\n this.observablePipeTrigger.next(true);\r\n }\r\n\r\n controlValueChanged(control: EFormControl) {\r\n this.observableControlValueChanged.next(control);\r\n }\r\n\r\n showConditionalObjectsChanged(showObjects: boolean) {\r\n this.observableShowConditionalObjects.next(showObjects);\r\n }\r\n\r\n getCategories(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetEformCategories');\r\n }\r\n\r\n saveCategory(category: EFormCategory): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveEformCategory', category);\r\n }\r\n\r\n getAllTemplates(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetAllEFormTemplates' + queryString);\r\n }\r\n\r\n getEFormTemplate(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEformTemplate' + queryString);\r\n }\r\n\r\n saveTemplate(template: EFormTemplate): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveEformTemplate', template);\r\n }\r\n\r\n getMergeFields(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetMergeFields');\r\n }\r\n\r\n getEFormDatabaseFields(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetEFormDatabaseFields');\r\n }\r\n\r\n getEFormDatabaseFieldOptions(fieldId: number, yearId: number): Observable {\r\n const queryString = '?fieldId=' + fieldId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetEFormDatabaseFieldOptions' + queryString);\r\n }\r\n\r\n getEFormAttachment(attachmentId: number): Observable {\r\n const queryString = '?attachmentId=' + attachmentId;\r\n return this.http.get(System.apiURL.Student + 'GetEFormAttachment' + queryString);\r\n }\r\n\r\n getEFormAttachments(attachmentIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetEFormAttachments', attachmentIds);\r\n }\r\n\r\n getManualSubmissionAttachment(formId: number): Observable {\r\n const queryString = '?formId=' + formId;\r\n return this.http.get(System.apiURL.Student + 'GetManualSubmissionAttachment' + queryString);\r\n }\r\n\r\n deleteEFormAttachments(attachmentIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'DeleteEFormAttachments', attachmentIds);\r\n }\r\n\r\n saveEFormAttachments(attachments: EFormAttachment[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveEFormAttachments', attachments);\r\n }\r\n\r\n saveManualSubmissionAttachment(formId: number, attachment: EFormAttachment): Observable {\r\n let queryString = '';\r\n queryString += '?formId=' + formId;\r\n\r\n return this.http.post(System.apiURL.Student + 'SaveManualSubmissionAttachment' + queryString, attachment);\r\n }\r\n\r\n getInstancesForProcessing(yearId: number, schoolId: number, showCountsForAllSchools: boolean, eFormSurvey: boolean, includeInactive: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId;\r\n queryString += '&schoolId=' + schoolId;\r\n queryString += '&showCountsForAllSchools=' + showCountsForAllSchools;\r\n queryString += '&eFormSurvey=' + eFormSurvey;\r\n queryString += '&includeInactive=' + includeInactive;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetInstancesForProcessing' + queryString);\r\n }\r\n\r\n // getEForms(instanceId: number, yearId: number, school_domain: number, showCountsForAllSchools: boolean, formId: number = 0): Observable {\r\n // let queryString = '';\r\n // queryString += '?instanceId=' + instanceId;\r\n // queryString += '&yearId=' + yearId;\r\n // queryString += '&school_domain=' + school_domain;\r\n // queryString += '&showCountsForAllSchools=' + showCountsForAllSchools;\r\n // queryString += '&formId=' + formId;\r\n\r\n // return this.http.get(System.apiURL.Student + 'GetEforms' + queryString);\r\n // }\r\n\r\n getEForms(instanceId: number, yearId: number, school_domain: number, showCountsForAllSchools: boolean, formId: number = 0, exportData: boolean = false, instanceIds: number[] = [], isOnlyForExportData: boolean = false, blnNotSubmitted: boolean = false, blnSubmitted: boolean = false, blnRejected: boolean = false, blnAccepted: boolean = false, blnComplited: boolean = false): Observable {\r\n let fromDate;\r\n let toDate;\r\n const notSubmittedFilter = this.eFormSubmissionsFilterParam.notSubmitted;\r\n if (this.eFormSubmissionsFilterParam.submittedFrom) {\r\n fromDate = moment(this.eFormSubmissionsFilterParam.submittedFrom, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY');\r\n }\r\n else {\r\n fromDate = moment().toDate().toLocaleDateString();\r\n }\r\n if (this.eFormSubmissionsFilterParam.submittedTo) {\r\n toDate = moment(this.eFormSubmissionsFilterParam.submittedTo, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY');\r\n }\r\n else {\r\n toDate = moment().toDate().toLocaleDateString();\r\n }\r\n let queryString = '';\r\n queryString += '?instanceId=' + instanceId;\r\n queryString += '&yearId=' + yearId;\r\n queryString += '&school_domain=' + school_domain;\r\n queryString += '&showCountsForAllSchools=' + showCountsForAllSchools;\r\n queryString += '&formId=' + formId;\r\n queryString += '&exportData=' + exportData;\r\n queryString += '&isOnlyForExportData=' + isOnlyForExportData;\r\n queryString += '&blnNotSubmitted=' + blnNotSubmitted;\r\n queryString += '&blnSubmitted=' + blnSubmitted;\r\n queryString += '&blnRejected=' + blnRejected;\r\n queryString += '&blnAccepted=' + blnAccepted;\r\n queryString += '&blnComplited=' + blnComplited;\r\n queryString += '&datFromDate=' + fromDate;\r\n queryString += '&datToDate=' + toDate;\r\n queryString += '¬SubmittedFilterApplied=' + notSubmittedFilter;\r\n\r\n\r\n return this.http.post(System.apiURL.Student + 'GetEforms' + queryString, instanceIds);\r\n }\r\n\r\n populateFormData(form: EForm): Observable {\r\n return this.http.post(System.apiURL.Student + 'PopulateFormData', form);\r\n }\r\n\r\n getFormDataOnlyByIDs(formIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetFormDataOnlyByIDs', formIds);\r\n }\r\n\r\n getFormDataByInstanceId(yearId: number, formId: number = 0, instanceIds: number[] = []): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId;\r\n queryString += '&formId=' + formId;\r\n return this.http.post(System.apiURL.Student + 'GetFormDataByInstanceId' + queryString, instanceIds);\r\n }\r\n\r\n getStudentParentEforms(): Observable {\r\n let studentId = 0;\r\n let schoolDomain = -1;\r\n let yearId: number = this.yearService.student360Year.Id;\r\n // here this.userService.currentUser.UserType == 3 means Student login\r\n if (!this.loginService.LoginSettings.V10 && this.userService.currentUser.UserType == 3) {\r\n studentId = this.userService.currentUser.StudentId;\r\n }\r\n if (this.userService.currentUser.UserType == 1) {\r\n studentId = this.studentService.selectedStudent.Id;\r\n yearId = this.yearService.defaultYear.Id;\r\n }\r\n if (!this.loginService.LoginSettings.V10) {\r\n schoolDomain = this.yearService.student360Year.SchoolID;\r\n }\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.student360Year.Id;\r\n queryString += '&school_domain=' + schoolDomain;\r\n queryString += '&studentId=' + studentId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetStudentParentEforms' + queryString);\r\n }\r\n\r\n getStaffUserEformsByLoginId(): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.defaultYear.Id;\r\n\r\n return this.http.get(System.apiURL.Admin + 'GetStaffUserEformsByLoginId' + queryString);\r\n }\r\n\r\n CheckEformsStatus(formId: number, instanceId: number, studentId: number, parentMemId: number, primaryParentMemId: number): Observable {\r\n let queryString = '';\r\n queryString += '?formId=' + (formId ? formId : 0);\r\n queryString += '&instanceId=' + instanceId;\r\n queryString += '&studentId=' + (studentId ? studentId : 0);\r\n queryString += '&parentMemId=' + (parentMemId ? parentMemId : 0);\r\n queryString += '&primaryParentMemId=' + (primaryParentMemId ? primaryParentMemId : 0);\r\n\r\n return this.http.get(System.apiURL.Student + 'CheckEformsStatus' + queryString);\r\n }\r\n\r\n checkForAvailableEForms(required: boolean, filterMarkedAsSeen: boolean = false): Observable {\r\n let studentId = 0;\r\n let schoolDomain = -1;\r\n // here this.userService.currentUser.UserType == 3 means Student login\r\n if (this.userService.currentUser.UserType == 3) {\r\n studentId = this.userService.currentUser.StudentId;\r\n if (studentId == 0 && this.loginService.LoginSettings.V10) {\r\n studentId = -1;\r\n }\r\n }\r\n if (!this.loginService.LoginSettings.V10) {\r\n schoolDomain = this.yearService.student360Year.SchoolID;\r\n }\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.student360Year.Id;\r\n queryString += '&school_domain=' + schoolDomain;\r\n queryString += '&required=' + required;\r\n queryString += '&filterMarkedAsSeen=' + filterMarkedAsSeen;\r\n queryString += '&studentId=' + studentId;\r\n\r\n return this.http.get(System.apiURL.Student + 'CheckForAvailableEForms' + queryString);\r\n }\r\n\r\n checkForAvailableStaffEForms(): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.defaultYear.Id;\r\n\r\n return this.http.get(System.apiURL.Admin + 'CheckForAvailableStaffEForms' + queryString);\r\n }\r\n\r\n saveEForm(eForm: EForm, comment: string = null, updatePDF: boolean = false, siteYearId: number = -1): Observable {\r\n let queryString = '?comment=' + comment;\r\n queryString += '&updatePDF=' + updatePDF;\r\n queryString += '&templateProcessType=' + this.templateProcessType;\r\n queryString += '&categoryType=' + this.categoryType;\r\n queryString += '&siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Student + 'SaveEform' + queryString, eForm);\r\n }\r\n\r\n updateEFormPDFData(eForm: EForm, comment: string = null): Observable {\r\n const queryString = '?comment=' + comment;\r\n return this.http.post(System.apiURL.Student + 'UpdateEFormPDFData' + queryString, eForm);\r\n }\r\n\r\n GetEformStatusHistory(formId: number): Observable {\r\n let queryString = '';\r\n queryString += '?formId=' + formId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEformStatusHistory' + queryString);\r\n }\r\n\r\n SaveEformStatusHistory(eFormStatusHistory: EFormStatusHistory): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveEformStatusHistory', eFormStatusHistory);\r\n }\r\n\r\n getEformContact(formId: number): Observable {\r\n let queryString = '';\r\n queryString += '?formId=' + formId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEformContact' + queryString);\r\n }\r\n\r\n getSchoolsByDomains(schoolDomains: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetSchoolsByDomains', schoolDomains);\r\n }\r\n\r\n getClassesBySectionId(schoolId: number, yearId: number, sectionIds: number[]): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.post(System.apiURL.Student + 'GetClassesBySectionId' + queryString, sectionIds);\r\n }\r\n\r\n getClassesByTgsId(schoolId: number, yearId: number, tgsIds: number[], includeStudentIds: boolean = false): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&includeStudentIds=' + includeStudentIds;\r\n return this.http.post(System.apiURL.Student + 'GetClassesByTGSId' + queryString, tgsIds);\r\n }\r\n\r\n getUserEformTemplates(isFormDataRequired: boolean = true, templateId: number = 0): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&isFormDataRequired=' + isFormDataRequired +\r\n '&templateId=' + templateId;\r\n return this.http.get(System.apiURL.Student + 'GetUserEformTemplates' + queryString);\r\n }\r\n\r\n getEformPermissions(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetEformPermissions' + queryString);\r\n }\r\n\r\n saveInstance(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveEformInstance', instance);\r\n }\r\n\r\n checkInstanceName(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Student + 'CheckInstanceName', instance);\r\n }\r\n\r\n getMergeFieldValues(formData: EFormDataObject, schoolId: number, yearId: number, studentId: number, parentId: number, incidentId: number, involvementType: string, config: EFormConfiguration, nonResidentParents: boolean = false, trackingType: number = -1, batchRunDate: Date = null) {\r\n if (!this.mergeFields || this.mergeFields.length == 0) {\r\n this.getMergeFields().subscribe(mergeFields => {\r\n this.mergeFields = mergeFields;\r\n this.observableMergeFieldsRetrieved.next(true);\r\n if (studentId || parentId || incidentId) {\r\n this.retrieveMergeFieldValues(formData, schoolId, yearId, studentId, parentId, incidentId, involvementType, config, nonResidentParents, trackingType, batchRunDate);\r\n }\r\n else {\r\n this.mergeFieldValuesRetrieved();\r\n }\r\n });\r\n }\r\n else {\r\n if (studentId || parentId || incidentId) {\r\n this.retrieveMergeFieldValues(formData, schoolId, yearId, studentId, parentId, incidentId, involvementType, config, nonResidentParents, trackingType, batchRunDate);\r\n }\r\n }\r\n }\r\n\r\n retrieveMergeFieldValues(formData: EFormDataObject, schoolId: number, yearId: number, studentId: number, parentId: number, incidentId: number, involvementType: string, config: EFormConfiguration, nonResidentParents: boolean, trackingType: number = -1, batchRunDate: Date = null) {\r\n const queryString = '?studentId=' + studentId +\r\n '&parentId=' + parentId +\r\n '&schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&incidentId=' + incidentId +\r\n '&involvementType=' + involvementType +\r\n '&nonResidentParents=' + nonResidentParents +\r\n '&trackingType=' + trackingType +\r\n '&batchRunDate=' + batchRunDate;\r\n\r\n const mergeTags = this.extractMergeTags(formData, config);\r\n for (let i = 0; i < mergeTags.length; i++) {\r\n mergeTags[i] = mergeTags[i].replace('< mergeTags.includes(o.FieldName.toLocaleLowerCase()));\r\n this.http.post(System.apiURL.Student + 'GetMergeFieldValue' + queryString, selectedTags).subscribe(results => {\r\n this.mergeFields.forEach(f => {\r\n const translatedField = results.find(o => o.ID == f.ID);\r\n if (translatedField) {\r\n f.Value = translatedField.Value;\r\n }\r\n else {\r\n f.Value = '';\r\n }\r\n });\r\n this.mergeFieldValuesRetrieved();\r\n });\r\n }\r\n\r\n getEFormStudentsByInstanceId(yearId: number, schoolId: number, instanceId: number): Observable {\r\n let studentId = 0;\r\n if (this.userService.currentUser.UserType == 3) {\r\n studentId = this.userService.currentUser.StudentId;\r\n }\r\n const queryString = '?yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&instanceId=' + instanceId +\r\n '&studentId=' + studentId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEFormStudentsByInstanceId' + queryString);\r\n }\r\n\r\n getSchoolIdsByClassIds(classIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetSchoolIdsByCourseSectionIds', classIds);\r\n }\r\n\r\n getSchoolIdsByStudentIds(yearId: number, studentIds: number[]): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n\r\n return this.http.post(System.apiURL.Student + 'GetSchoolIdsByStudentIds' + queryString, studentIds);\r\n }\r\n\r\n canCreateUserProcessEform(yearId: number, instance: EFormInstance): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n\r\n return this.http.post(System.apiURL.Student + 'CanCreateUserProcessEform' + queryString, instance);\r\n }\r\n\r\n getEformCreateByStaffId(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEformCreateByStaffId' + queryString);\r\n }\r\n\r\n getEFormInstance(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEFormInstance' + queryString);\r\n }\r\n\r\n getEformCategoryByInstanceId(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetEformCategoryByInstanceId' + queryString);\r\n }\r\n\r\n updateLinkedDBFields(formId: number, dbFields: EFormDatabaseField[]): Observable {\r\n const queryString = '?formId=' + formId;\r\n return this.http.post(System.apiURL.Student + 'UpdateEFormLinkedDBFields' + queryString, dbFields);\r\n }\r\n\r\n getLinkedDBFields(form: EFormDataObject): EFormDatabaseField[] {\r\n const newValues: EFormDatabaseField[] = [];\r\n const controls = this.getAllFormControls(form);\r\n controls.forEach(control => {\r\n if (control.LinkedDBField > 0 && control.Visible && (!this.loginService.LoginSettings.EnableCustomizationFramework || !this.loginService.LoginSettings.C360CustomFieldsImported || !control.LinkedCSTFieldName)) {\r\n const dbField = new EFormDatabaseField();\r\n dbField.ID = control.LinkedDBField;\r\n if (control.Value) {\r\n dbField.Value = control.Value.toString();\r\n }\r\n newValues.push(dbField);\r\n }\r\n });\r\n return newValues;\r\n }\r\n\r\n getLinkedDBFieldValues(fieldIds: number[], studentId: number): Observable {\r\n const queryString = '?yearId=' + this.yearService.student360Year.Id +\r\n '&studentId=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'GetLinkedDBFieldValues' + queryString, fieldIds);\r\n }\r\n\r\n getControlIdFromMergeTag(mergeTag: string): number {\r\n let controlId = '';\r\n let endIndex = mergeTag.lastIndexOf(')>>');\r\n if (endIndex <= 0) {\r\n endIndex = mergeTag.lastIndexOf(')>>');\r\n }\r\n let startIndex = mergeTag.lastIndexOf('(');\r\n if (startIndex >= 0 && endIndex > startIndex) {\r\n startIndex += 1;\r\n const idLength = endIndex - startIndex;\r\n controlId = mergeTag.substr(startIndex, idLength);\r\n }\r\n return Number(controlId);\r\n }\r\n\r\n transformDatabaseMergeTag(text: string): string {\r\n if (this.mergeFields && this.mergeFields.length) {\r\n text = this.translateMergeField(text);\r\n // ################# logic for ignore case convert merge field in lower case\r\n for (let i = 0; i < text.length; i++) {\r\n const indxOfStart = text.indexOf('<<');\r\n const indxOfEnd = text.indexOf('>>');\r\n if (indxOfStart < 0 || indxOfEnd < 0) {\r\n break;\r\n }\r\n if (i >= indxOfEnd) {\r\n const subStr = text.substring(i, text.length);\r\n const indxOfStart_II = subStr.indexOf('<<');\r\n const indxOfEnd_II = subStr.indexOf('>>');\r\n const mergeFieldData_II = subStr.substring(indxOfStart_II, indxOfEnd_II + 2);\r\n if (indxOfStart_II != -1 && indxOfEnd_II != -1) {\r\n text = text.replace(mergeFieldData_II, mergeFieldData_II.toLowerCase());\r\n i = i + indxOfEnd_II + 1;\r\n }\r\n }\r\n\r\n if (i <= indxOfStart) {\r\n const mergeFieldData = text.substring(indxOfStart, indxOfEnd + 2);\r\n text = text.replace(mergeFieldData, mergeFieldData.toLowerCase());\r\n i = indxOfEnd + 1;\r\n }\r\n }\r\n // ################## logic for ignore case convert merge field in lower case for text area\r\n for (let i = 0; i < text.length; i++) {\r\n const indxOfStart = text.indexOf('<');\r\n const indxOfEnd = text.indexOf('>');\r\n if (indxOfStart < 0 || indxOfEnd < 0) {\r\n break;\r\n }\r\n if (i >= indxOfEnd) {\r\n const subStr = text.substring(i, text.length);\r\n const indxOfStart_II = subStr.indexOf('<');\r\n const indxOfEnd_II = subStr.indexOf('>');\r\n const mergeFieldData_II = subStr.substring(indxOfStart_II, indxOfEnd_II + 2);\r\n if (indxOfStart_II != -1 && indxOfEnd_II != -1) {\r\n text = text.replace(mergeFieldData_II, mergeFieldData_II.toLowerCase());\r\n i = i + indxOfEnd_II + 1;\r\n }\r\n }\r\n\r\n if (i <= indxOfStart) {\r\n const mergeFieldData = text.substring(indxOfStart, indxOfEnd + 2);\r\n text = text.replace(mergeFieldData, mergeFieldData.toLowerCase());\r\n i = indxOfEnd + 1;\r\n }\r\n }\r\n // #################\r\n text = this.translateMergeField(text);\r\n }\r\n return text;\r\n }\r\n\r\n translateMergeField(text) {\r\n this.mergeFields.forEach(mf => {\r\n // mf.FieldName = mf.FieldName.toLowerCase();\r\n if (mf.FieldName == '<>') {\r\n mf.Value = mf.Value;\r\n }\r\n if (mf.FieldName) {\r\n // const val = mf.Value ? mf.Value.toLowerCase() : ' ';\r\n const val = mf.Value ? mf.Value : ' ';\r\n const escapedFieldname = mf.FieldName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n let regEx = new RegExp(escapedFieldname, 'gi');\r\n text = text.replace(regEx.source.toLowerCase(), val);\r\n text = text.replace(regEx, val);\r\n // rich text fields have sanitized the merge tag so we need to look for this as well\r\n let htmlSafeTag = mf.FieldName;\r\n regEx = new RegExp('<', 'g');\r\n htmlSafeTag = htmlSafeTag.replace(regEx, '<');\r\n regEx = new RegExp('>', 'g');\r\n htmlSafeTag = htmlSafeTag.replace(regEx, '>');\r\n htmlSafeTag = htmlSafeTag.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n regEx = new RegExp(htmlSafeTag, 'gi');\r\n text = text.replace(regEx.source.toLowerCase(), val);\r\n text = text.replace(regEx, val);\r\n }\r\n });\r\n return text;\r\n }\r\n\r\n transformFormOnlyMergeTag(text: string): string {\r\n let otherMatches: string[] = [];\r\n const otherFieldsRegEx = new RegExp('<<(.*?)>>', 'g');\r\n const otherFieldsSanitizedRegEx = new RegExp('<<(.*?)>>', 'g');\r\n otherMatches = text.match(otherFieldsRegEx);\r\n if (!otherMatches) {\r\n otherMatches = text.match(otherFieldsSanitizedRegEx);\r\n }\r\n\r\n if (otherMatches) {\r\n otherMatches.forEach(mergeTag => {\r\n const controlId = this.getControlIdFromMergeTag(mergeTag);\r\n if (!isNaN(controlId)) {\r\n const control = this.allFormControls.find(o => o.Id == controlId);\r\n if (control) {\r\n let sanitizedValue = '';\r\n if (control.Value != null) {\r\n sanitizedValue = this.sanitizer.sanitize(SecurityContext.HTML, control.Value);\r\n }\r\n mergeTag = mergeTag.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n const regEx = new RegExp(mergeTag, 'gi');\r\n text = text.replace(regEx, sanitizedValue);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return text;\r\n }\r\n\r\n // saveStudentPortfolio(document: Portfolio): Observable {\r\n // return this.http.post(System.apiURL.Student + `SaveStudentPortfolio`, document, {observe: 'response'});\r\n // }\r\n\r\n // saveStudentDigitalContent(sdc: StudentDigitalContent, schoolId: number): Observable {\r\n // let paramString: string = '';\r\n // paramString += '?schoolId=' + schoolId;\r\n\r\n // return this.http.post(System.apiURL.Student + 'SaveStudentDigitalContent' + paramString, sdc);\r\n // }\r\n\r\n getTemplateChangeHistory(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n return this.http.get(System.apiURL.Student + 'GetTemplateChangeHistory' + queryString);\r\n }\r\n\r\n getTemplateSettingsHistory(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n return this.http.get(System.apiURL.Student + 'GetTemplateSettingsHistory' + queryString);\r\n }\r\n\r\n getInstanceChangeHistory(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n return this.http.get(System.apiURL.Student + 'GetInstanceChangeHistory' + queryString);\r\n }\r\n\r\n getInstanceSettingsHistory(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n return this.http.get(System.apiURL.Student + 'GetInstanceSettingsHistory' + queryString);\r\n }\r\n\r\n saveTemplateChangeHistory(changes: EFormChangeHistory[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveTemplateChangeHistory', changes);\r\n }\r\n\r\n saveTemplateSettingsHistory(changes: EFormChangeHistory[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveTemplateSettingsHistory', changes);\r\n }\r\n\r\n saveInstanceChangeHistory(changes: EFormChangeHistory[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveInstanceChangeHistory', changes);\r\n }\r\n\r\n saveInstanceSettingsHistory(changes: EFormChangeHistory[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveInstanceSettingsHistory', changes);\r\n }\r\n\r\n getInstancesByTemplateId(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n return this.http.get(System.apiURL.Student + 'GetInstancesByTemplateId' + queryString);\r\n }\r\n\r\n getEformTemplateByAuditId(templateAuditId: number): Observable {\r\n const queryString = '?templateAuditId=' + templateAuditId;\r\n return this.http.get(System.apiURL.Student + 'GetEformTemplateByAuditId' + queryString);\r\n }\r\n\r\n getEformInstanceByAuditId(instanceAuditId: number): Observable {\r\n const queryString = '?instanceAuditId=' + instanceAuditId;\r\n return this.http.get(System.apiURL.Student + 'GetEformInstanceByAuditId' + queryString);\r\n }\r\n\r\n markInstanceAsViewed(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n return this.http.get(System.apiURL.Student + 'MarkInstanceAsViewed' + queryString);\r\n }\r\n\r\n getSubmissionCounts(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetSubmissionCounts' + queryString);\r\n }\r\n\r\n\r\n getSchoolsStudentFamilies(schoolIds: number[], yearId: number, userId: number): Observable {\r\n const queryString = '?yearId=' + yearId + '&userId=' + userId;\r\n return this.http.post(System.apiURL.Student + 'GetSchoolsStudentFamilyWise' + queryString, schoolIds);\r\n }\r\n\r\n getSelectedStaffForEForm(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetSelectedStaffForEForm', instance);\r\n }\r\n\r\n getClassStudentFamilies(classIds: number[], yearId: number, userId: number): Observable {\r\n const queryString = '?yearId=' + yearId + '&userId=' + userId;\r\n return this.http.post(System.apiURL.Student + 'GetClassStudentFamilyWise' + queryString, classIds);\r\n }\r\n\r\n getStudentFamilies(studentIds: number[], yearId: number, userId: number): Observable {\r\n const queryString = '?yearId=' + yearId + '&userId=' + userId;\r\n return this.http.post(System.apiURL.Student + 'GetStudentFamilyWise' + queryString, studentIds);\r\n }\r\n\r\n getStudentFamiliesByService(serviceId: number, yearId: number, instance: EFormInstance): Observable {\r\n const queryString = '?serviceId=' + serviceId + '&yearId=' + yearId;\r\n return this.http.post(System.apiURL.Student + 'GetStudentFamiliesByService' + queryString, instance);\r\n }\r\n\r\n getSelectedStudentPopupData(instance: EFormInstance, yearId: number, UserId: number, idType: string): Observable {\r\n const queryString = '?yearId=' + yearId + '&userId=' + UserId + '&siteId=' + this.yearService.defaultYear.SchoolID + '&idType=' + idType;\r\n return this.http.post(System.apiURL.Student + 'GetSelectedStudentPopupData' + queryString, instance);\r\n }\r\n\r\n getMassMailByParentId(yearId: number, parentId: number[]): Observable {\r\n // const queryString = '?yearId='+yearId+ '&parentId='+parentId;\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.Student + 'GetMassMailByParentId' + queryString, parentId);\r\n }\r\n\r\n getDQStudentCount(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetDQStudentCount', instance);\r\n }\r\n\r\n getStudentIdsFromDynamicQuery(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Admin + 'GetStudentIdsFromDynamicQuery', instance);\r\n }\r\n\r\n getSurveyQuestionsByTemplateID(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n return this.http.get(System.apiURL.Admin + 'GetSurveyQuestionsByTemplateID' + queryString);\r\n }\r\n\r\n getSurveyQuestionsByInstanceID(instanceId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId;\r\n return this.http.get(System.apiURL.Admin + 'GetSurveyQuestionsByInstanceID' + queryString);\r\n }\r\n\r\n saveEFormSurveyFields(fields: EFormSurveyField[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveEFormSurveyFields', fields);\r\n }\r\n\r\n saveEFormSurveyAnswers(answers: EFormSurveyAnswer[]): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveEFormSurveyAnswers', answers);\r\n }\r\n\r\n updateInstanceFormDataOnly(instance: EFormInstance): Observable {\r\n return this.http.post(System.apiURL.Admin + 'UpdateInstanceFormDataOnly', instance);\r\n }\r\n\r\n exportEFormsToExcel(eForms: EForm[], eFormInstances: EFormInstance[], notSubmittedHeader: string = '') {\r\n // PRE: a list of e-forms and (optional but recommended) names associated with instance IDs (for naming the sheets)\r\n // POST: exports each of those instances to an excel sheet\r\n\r\n // Organizing e-form data\r\n const instanceIds = [];\r\n const nameDictionary: { [instanceId: number]: string } = {};\r\n const eFormDictionary: { [instanceId: number]: EForm[] } = {};\r\n const instanceControlDictionary: { [instanceId: number]: EFormControl[] } = {};\r\n const eFormControlDictionary: { [eFormId: number]: EFormControl[] } = {};\r\n const manualSubmissionDictionary: { [eFormId: number]: boolean } = {};\r\n eFormInstances.forEach(eFormInstance => {\r\n\r\n // Capturing instance IDs and the names\r\n if (!nameDictionary[eFormInstance.ID]) {\r\n nameDictionary[eFormInstance.ID] = eFormInstance.Name;\r\n instanceIds.push(eFormInstance.ID);\r\n }\r\n\r\n // Capturing the control dictionary for headers\r\n instanceControlDictionary[eFormInstance.ID] = this.getAllFormControls(JSON.parse(eFormInstance.FormData) as EFormDataObject).filter(o => {\r\n return o.ControlType != 'text'\r\n && o.ControlType != 'image'\r\n && o.ControlType != 'linkToFile'\r\n && o.ControlType != 'divider';\r\n });\r\n });\r\n eForms.forEach(eForm => {\r\n\r\n // Categorizing each e-form into their respective e-form instances\r\n if (!eFormDictionary[eForm.Instance_ID]) {\r\n eFormDictionary[eForm.Instance_ID] = [];\r\n }\r\n eFormDictionary[eForm.Instance_ID].push(eForm);\r\n\r\n // Obtaining each e-forms controls\r\n if (eForm.FormData) {\r\n eFormControlDictionary[eForm.ID] = this.getAllFormControls(JSON.parse(eForm.FormData) as EFormDataObject).filter(o => {\r\n return o.ControlType != 'text'\r\n && o.ControlType != 'image'\r\n && o.ControlType != 'linkToFile'\r\n && o.ControlType != 'divider';\r\n });\r\n } else {\r\n eFormControlDictionary[eForm.ID] = [];\r\n }\r\n\r\n // Setting whether it was manually submitted\r\n manualSubmissionDictionary[eForm.ID] = eForm.ManualSubmission;\r\n });\r\n\r\n // Constructing array of arrays for each instance and each distinct name\r\n // These will become the excel sheets\r\n const dataDictionary: { [instanceId: number]: string[][] } = {};\r\n instanceIds.forEach(instanceId => {\r\n dataDictionary[instanceId] = [];\r\n let instanceEForms = eFormDictionary[instanceId];\r\n // *****Get Current date*****\r\n const today = new Date();\r\n const date = String(today.getDate()).padStart(2, '0');\r\n const mm = String(today.getMonth() + 1).padStart(2, '0'); // January is 0!\r\n const yyyy = today.getFullYear();\r\n\r\n const currentDate = mm + '/' + date + '/' + yyyy;\r\n\r\n // **************************\r\n // Constructing the header\r\n const instanceControls = instanceControlDictionary[instanceId];\r\n // --- ONE-9993\r\n let headerRow: string[] = ['Parent', 'Student Name', 'School', 'Grade Level', 'Student #', 'Status', 'Submitted By', 'Submitted', 'Note', 'Cell Number', 'Home Number', 'Address', 'Email Address']; // Header row always has parent and student\r\n // ONE-9407\r\n if (eFormInstances[0].TemplateType.toLowerCase() != 'staff' && notSubmittedHeader == 'ExportFromNotSubmittedPopup') {\r\n headerRow = [eFormInstances[0].Name, currentDate];\r\n dataDictionary[instanceId].push(headerRow);\r\n headerRow = ['Parent', 'Student Name', 'School', 'Grade Level', 'Student #', 'Status', 'Cell Number', 'Home Number', 'Address', 'Email Address']; // Header row always has parent and student\r\n }\r\n if (eFormInstances[0].TemplateType.toLowerCase() == 'staff') {\r\n // headerRow = [eFormInstances[0].Name, Date()];\r\n headerRow = [eFormInstances[0].Name, currentDate];\r\n dataDictionary[instanceId].push(headerRow);\r\n if (notSubmittedHeader == 'ExportFromNotSubmittedPopup') {\r\n headerRow = ['Staff', 'Status', 'Cell Number', 'Home Number', 'Address', 'Email Address'];\r\n }\r\n else {\r\n headerRow = ['Staff', 'Status', 'Submitted By', 'Submitted', 'Note', 'Cell Number', 'Home Number', 'Address', 'Email Address'];\r\n }\r\n }\r\n\r\n instanceControls.forEach(control => {\r\n if (notSubmittedHeader == '') {\r\n headerRow.push(control.Label);\r\n }\r\n });\r\n dataDictionary[instanceId].push(headerRow);\r\n\r\n // Constructing data rows from E-Forms\r\n if (instanceEForms) {\r\n // instanceEForms = _.sortBy(instanceEForms, o => o.SubmittedDate);\r\n // Set order by for same as UI and XML start\r\n instanceEForms = _.sortBy(instanceEForms, ['SubmittedDate']).reverse();\r\n const instanceEFormsObj: EForm[] = [];\r\n instanceEForms.forEach(eForm => {\r\n if (eForm.SubmittedDate) {\r\n instanceEFormsObj.push(eForm);\r\n }\r\n });\r\n instanceEForms = _.sortBy(instanceEForms, ['SubmittedDate']).reverse();\r\n instanceEForms.forEach(eForm => {\r\n if (!eForm.SubmittedDate) {\r\n instanceEFormsObj.push(eForm);\r\n }\r\n });\r\n // Set order by for same as UI and XML code end\r\n instanceEFormsObj.forEach(eForm => {\r\n\r\n // Creating the row for this eForm\r\n const controls: EFormControl[] = eFormControlDictionary[eForm.ID];\r\n let eFormStudentName = '';\r\n if (eForm.StudentNames) {\r\n eForm.StudentNames.forEach(studentName => {\r\n if (eFormStudentName.length > 0) {\r\n eFormStudentName += ', ';\r\n }\r\n eFormStudentName += studentName;\r\n });\r\n }\r\n // get Student # Start\r\n let eFormStrStudentId = '';\r\n if (eForm.strStudentId) {\r\n eForm.strStudentId.forEach(strStudentId => {\r\n if (eFormStrStudentId.length > 0) {\r\n eFormStrStudentId += ', ';\r\n }\r\n eFormStrStudentId += strStudentId;\r\n });\r\n }\r\n // Student # End\r\n // const dataRow: string[] = [!eForm.ManualSubmission ? (eForm.ParentName) : '', eFormStudentName, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : ''];\r\n // const dataRow: string[] = [eForm.ParentName, eFormStudentName, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : ''];\r\n // --- ONE-9993\r\n let dataRow: string[] = [];\r\n let student_Name = eFormStudentName.substring(0, eFormStudentName.indexOf(' - '));\r\n let school_Name = '';\r\n let gardeLavel = '';\r\n if (!this.V10) {\r\n if (eForm.StudentNames) {\r\n student_Name = '';\r\n eForm.StudentNames.forEach(studentName => {\r\n // Take Student Name Logic\r\n if (student_Name.length > 0) {\r\n student_Name += ',' + studentName.substring(0, studentName.indexOf(' - '));\r\n }\r\n else {\r\n student_Name += studentName.substring(0, studentName.indexOf(' - '));\r\n }\r\n // Take School Name logic\r\n if (school_Name.length > 0) {\r\n school_Name += ',' + studentName.substring(studentName.indexOf(' - ') + 3, studentName.indexOf('('));\r\n }\r\n else {\r\n school_Name += studentName.substring(studentName.indexOf(' - ') + 3, studentName.indexOf('('));\r\n }\r\n // Take Grade Lavel Logic\r\n if (gardeLavel.length > 0) {\r\n gardeLavel += ',' + studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'));\r\n }\r\n else {\r\n gardeLavel += studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'));\r\n }\r\n });\r\n }\r\n // school_Name = eFormStudentName.substring(eFormStudentName.indexOf(' - ') + 3, eFormStudentName.indexOf('('));\r\n // gardeLavel = eFormStudentName.substring(eFormStudentName.indexOf(' (') + 2, eFormStudentName.indexOf(')'));\r\n }\r\n else {\r\n school_Name = eFormStudentName.substring(eFormStudentName.indexOf(' - ') + 3, eFormStudentName.length);\r\n gardeLavel = eForm.GradeLevel;\r\n }\r\n dataRow = [eForm.ParentName, student_Name, school_Name, gardeLavel, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : '', eForm.StaffNote, eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n // ONE-9407\r\n if (eFormInstances[0].TemplateType.toLowerCase() != 'staff' && notSubmittedHeader == 'ExportFromNotSubmittedPopup') {\r\n dataRow = [eForm.ParentName, student_Name, school_Name, gardeLavel, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n }\r\n if (eFormInstances[0].TemplateType.toLowerCase() == 'staff') {\r\n if (notSubmittedHeader == 'ExportFromNotSubmittedPopup') {\r\n dataRow = [eForm.StaffName, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n }\r\n else {\r\n dataRow = [eForm.StaffName, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : '', eForm.StaffNote, eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n }\r\n }\r\n if (notSubmittedHeader == '') {\r\n for (let i = 0; i < instanceControls.length; i++) {\r\n if (manualSubmissionDictionary[eForm.ID]) {\r\n dataRow.push('MANUALLY SUBMITTED');\r\n } else if (controls.length > i) {\r\n if (controls[i].ControlType == 'attachment' && (controls[i].AttachmentId || controls[i].Attachment)) {\r\n dataRow.push('Y');\r\n // } else if (controls[i].Value && (instanceControls[i].ControlType != 'radioButtons' || eForm.Status != 'Not Submitted')) {\r\n } else if (controls[i].Value && (eForm.Status != 'Not Submitted')) {\r\n const div = document.createElement('div');\r\n div.innerHTML = controls[i].Value;\r\n const text = div.textContent || div.innerText || '';\r\n dataRow.push(text);\r\n } else {\r\n dataRow.push('');\r\n }\r\n }\r\n }\r\n }\r\n dataDictionary[instanceId].push(dataRow);\r\n });\r\n }\r\n });\r\n\r\n // Creating the spreadsheet\r\n const workSheetsByName: { [name: string]: WorkSheet } = {};\r\n const sheetNames: string[] = [];\r\n instanceIds.forEach(instanceId => {\r\n let name = nameDictionary[instanceId];\r\n if (!name) {\r\n name = 'e-form #' + instanceId;\r\n }\r\n else {\r\n for (let i = 0; i < 40; i++) {\r\n name = name.replace('/', '_');\r\n name = name.replace('<', '_');\r\n name = name.replace('>', '_');\r\n name = name.replace('*', '_');\r\n name = name.replace('?', '_');\r\n name = name.replace('\"', '_');\r\n name = name.replace('|', '_');\r\n name = name.replace('[', '_');\r\n name = name.replace(']', '_');\r\n name = name.replace(':', '_');\r\n name = name.replace(/\\\\/g, '_');\r\n name = name.replace('{', '_');\r\n name = name.replace('}', '_');\r\n }\r\n }\r\n\r\n if (name.length > 31) {\r\n name = name.substring(0, 31);\r\n }\r\n sheetNames.push(name);\r\n workSheetsByName[name] = utils.aoa_to_sheet(dataDictionary[instanceId]);\r\n });\r\n const workbook: WorkBook = { Sheets: workSheetsByName, SheetNames: sheetNames };\r\n const excelName = sheetNames.length > 1 ? 'e-forms' : sheetNames[0];\r\n const excelBuffer: any = write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.exportService.saveAs(excelBuffer, excelName, '.xlsx');\r\n }\r\n\r\n // export all instace to excel\r\n\r\n exportInstancesToExcel(eForms: EForm[], eFormInstances: any[], inclueInstanceSpecificField: boolean) {\r\n const instanceIds = [];\r\n const nameDictionary: { [instanceId: number]: string } = {};\r\n const eFormDictionary: { [instanceId: number]: EForm[] } = {};\r\n const instanceControlDictionary: { [instanceId: number]: EFormControl[] } = {};\r\n const eFormControlDictionary: { [eFormId: number]: EFormControl[] } = {};\r\n const manualSubmissionDictionary: { [eFormId: number]: boolean } = {};\r\n\r\n eFormInstances.forEach(eFormInstance => {\r\n // Capturing instance IDs and the names\r\n if (!nameDictionary[eFormInstance.ID]) {\r\n if (this.V10) {\r\n nameDictionary[eFormInstance.ID] = eFormInstance.Name;\r\n }\r\n else {\r\n nameDictionary[eFormInstance.ID] = 'e-Forms';\r\n }\r\n instanceIds.push(eFormInstance.ID);\r\n }\r\n\r\n // Capturing the control dictionary for headers\r\n // instanceControlDictionary[eFormInstance.ID] = this.getAllFormControls(JSON.parse(eFormInstance.FormData) as EFormDataObject).filter(o => {\r\n // return o.ControlType != 'text'\r\n // && o.ControlType != 'image'\r\n // && o.ControlType != 'linkToFile'\r\n // && o.ControlType != 'divider';\r\n // });\r\n\r\n\r\n // Capturing the control dictionary for headers\r\n instanceControlDictionary[eFormInstance.ID] = this.getAllFormControls(JSON.parse(eFormInstance.FormData) as EFormDataObject).filter(o => {\r\n // return o.ControlType != 'text'\r\n // && o.ControlType != 'image'\r\n // && o.ControlType != 'linkToFile'\r\n // && o.ControlType != 'divider';\r\n return o.ControlType != 'image'\r\n && o.ControlType != 'linkToFile'\r\n && o.ControlType != 'divider';\r\n });\r\n });\r\n\r\n const dataDictionary: { [instanceId: number]: string[][] } = {};\r\n let oldInstanceId = 0;\r\n dataDictionary[0] = [];\r\n\r\n // if(!eForms.length){\r\n // dataDictionary[0].push([eFormInstances[0].Name]);\r\n // const headerRow: string[] = ['Parent', 'Students', 'Student #', 'Status', 'Submitted By', 'Submitted']; // Header row always has parent and student\r\n // dataDictionary[0].push(headerRow);\r\n // }\r\n // Constructing array of arrays for each instance and each distinct name\r\n // These will become the excel sheets\r\n\r\n instanceIds.forEach(instanceId => {\r\n\r\n eForms.forEach(eForm => {\r\n if (eForm.Instance_ID == instanceId) {\r\n // Categorizing each e-form into their respective e-form instances\r\n if (!eFormDictionary[eForm.Instance_ID]) {\r\n eFormDictionary[eForm.Instance_ID] = [];\r\n }\r\n eFormDictionary[eForm.Instance_ID].push(eForm);\r\n\r\n // Obtaining each e-forms controls\r\n if (eForm.FormData) {\r\n // eFormControlDictionary[eForm.ID] = this.getAllFormControls(JSON.parse(eForm.FormData) as EFormDataObject).filter(o => {\r\n // return o.ControlType != 'text'\r\n // && o.ControlType != 'image'\r\n // && o.ControlType != 'linkToFile'\r\n // && o.ControlType != 'divider';\r\n // });\r\n\r\n\r\n eFormControlDictionary[eForm.ID] = this.getAllFormControls(JSON.parse(eForm.FormData) as EFormDataObject).filter(o => {\r\n // return o.ControlType != 'text'\r\n // && o.ControlType != 'image'\r\n // && o.ControlType != 'linkToFile'\r\n // && o.ControlType != 'divider';\r\n return o.ControlType != 'image'\r\n && o.ControlType != 'linkToFile'\r\n && o.ControlType != 'divider';\r\n });\r\n } else {\r\n eFormControlDictionary[eForm.ID] = [];\r\n }\r\n\r\n // Setting whether it was manually submitted\r\n manualSubmissionDictionary[eForm.ID] = eForm.ManualSubmission;\r\n }\r\n });\r\n\r\n let instanceEForms = eFormDictionary[instanceId];\r\n\r\n // Constructing data rows from E-Forms\r\n if (instanceEForms) {\r\n // Set order by for same as UI and XML start\r\n instanceEForms = _.sortBy(instanceEForms, ['SubmittedDate']).reverse();\r\n const instanceEFormsObj: EForm[] = [];\r\n instanceEForms.forEach(eForm => {\r\n if (eForm.SubmittedDate) {\r\n instanceEFormsObj.push(eForm);\r\n }\r\n });\r\n instanceEForms = _.sortBy(instanceEForms, ['SubmittedDate']).reverse();\r\n instanceEForms.forEach(eForm => {\r\n if (!eForm.SubmittedDate) {\r\n instanceEFormsObj.push(eForm);\r\n }\r\n });\r\n // Set order by for same as UI and XML code end\r\n\r\n // Constructing the header\r\n const instanceControls = instanceControlDictionary[instanceId];\r\n\r\n\r\n instanceEFormsObj.forEach(eForm => {\r\n const instanceType = eFormInstances.filter(o => o.ID == eForm.Instance_ID)[0].TemplateType;\r\n if (oldInstanceId == 0 || oldInstanceId != instanceId) {\r\n if (oldInstanceId == 0) {\r\n dataDictionary[0].push(this.V10 ? [nameDictionary[instanceId]] : [eForm.InstanceName]);\r\n }\r\n else if (oldInstanceId > 0 && oldInstanceId != instanceId) {\r\n dataDictionary[0].push(['']);\r\n dataDictionary[0].push(this.V10 ? [nameDictionary[instanceId]] : [eForm.InstanceName]);\r\n }\r\n // ---- ONE-9993\r\n let headerRow: string[] = [];\r\n if (instanceType == 'family') {\r\n headerRow = ['Parent', 'Student Name', 'School', 'Grade Level', 'Student #', 'Status', 'Submitted By', 'Submitted', 'Note', 'Cell Number', 'Home Number', 'Address', 'Email Address']; // Header row always has parent and student\r\n }\r\n else {\r\n headerRow = ['Student Name', 'School', 'Grade Level', 'Student #', 'Status', 'Submitted By', 'Submitted', 'Note', 'Cell Number', 'Home Number', 'Address', 'Email Address']; // Header row always has parent and student\r\n }\r\n // ONE-14022\r\n // if (!this.V10) {\r\n // headerRow.push('Grade Level');\r\n // }\r\n\r\n instanceControls.forEach(control => {\r\n if (inclueInstanceSpecificField && control.ControlType == 'text' && control.Instructions != '' && control.Instructions) {\r\n headerRow.push(control.Instructions);\r\n }\r\n else if (control.ControlType != 'text') {\r\n headerRow.push(control.Label);\r\n }\r\n });\r\n\r\n dataDictionary[0].push(headerRow);\r\n\r\n oldInstanceId = instanceId;\r\n }\r\n\r\n // Creating the row for this eForm\r\n const controls: EFormControl[] = eFormControlDictionary[eForm.ID];\r\n let eFormStudentName = '';\r\n if (eForm.StudentNames) {\r\n eForm.StudentNames.forEach(studentName => {\r\n if (eFormStudentName.length > 0) {\r\n eFormStudentName += ', ';\r\n }\r\n eFormStudentName += studentName;\r\n });\r\n }\r\n // get Student # Start\r\n let eFormStrStudentId = '';\r\n if (eForm.strStudentId) {\r\n eForm.strStudentId.forEach(strStudentId => {\r\n if (eFormStrStudentId.length > 0) {\r\n eFormStrStudentId += ', ';\r\n }\r\n eFormStrStudentId += strStudentId;\r\n });\r\n }\r\n // Student # End\r\n // const dataRow: string[] = [!eForm.ManualSubmission ? (eForm.ParentName) : '', eFormStudentName, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : ''];\r\n // const instanceType = eFormInstances.filter(o => o.ID == eForm.Instance_ID)[0].Type;\r\n // ---- ONE-9993\r\n let dataRow: string[] = [];\r\n let student_Name = eFormStudentName.substring(0, eFormStudentName.indexOf(' - '));\r\n let school_Name = '';\r\n let gardeLavel = '';\r\n if (!this.V10) {\r\n if (eForm.StudentNames) {\r\n student_Name = '';\r\n eForm.StudentNames.forEach(studentName => {\r\n // Take Student Name Logic\r\n if (student_Name.length > 0) {\r\n student_Name += ',' + studentName.substring(0, studentName.indexOf(' - '));\r\n }\r\n else {\r\n student_Name += studentName.substring(0, studentName.indexOf(' - '));\r\n }\r\n // Take School Name logic\r\n if (school_Name.length > 0) {\r\n school_Name += ',' + studentName.substring(studentName.indexOf(' - ') + 3, studentName.indexOf('('));\r\n }\r\n else {\r\n school_Name += studentName.substring(studentName.indexOf(' - ') + 3, studentName.indexOf('('));\r\n }\r\n // Take Grade Lavel Logic\r\n if (gardeLavel.length > 0) {\r\n if (isNaN(Number(studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'))))) {\r\n const tmpindex = studentName.indexOf(')');\r\n const remainString = studentName.substring(tmpindex + 2, studentName.length);\r\n\r\n gardeLavel += ',' + remainString.substring(remainString.indexOf(' (') + 2, remainString.indexOf(')'));\r\n // const tmpindex = studentName.indexOf(studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')')));\r\n // const remainString = studentName.substring(tmpindex, studentName.length);\r\n }\r\n else {\r\n gardeLavel += ',' + studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'));\r\n }\r\n }\r\n else {\r\n if (isNaN(Number(studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'))))) {\r\n const tmpindex = studentName.indexOf(')');\r\n const remainString = studentName.substring(tmpindex + 2, studentName.length);\r\n\r\n gardeLavel += remainString.substring(remainString.indexOf(' (') + 2, remainString.indexOf(')'));\r\n // const tmpindex = studentName.indexOf(studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')')));\r\n // const remainString = studentName.substring(tmpindex, studentName.length);\r\n }\r\n else {\r\n gardeLavel += studentName.substring(studentName.indexOf(' (') + 2, studentName.indexOf(')'));\r\n }\r\n }\r\n });\r\n }\r\n // school_Name = eFormStudentName.substring(eFormStudentName.indexOf(' - ') + 3, eFormStudentName.indexOf('('));\r\n // gardeLavel = eFormStudentName.substring(eFormStudentName.indexOf(' (') + 2, eFormStudentName.indexOf(')'));\r\n // school_Name = eFormStudentName.substring(eFormStudentName.indexOf(' - ') + 3, eFormStudentName.indexOf('#'));\r\n }\r\n else {\r\n school_Name = eFormStudentName.substring(eFormStudentName.indexOf(' - ') + 3, eFormStudentName.length);\r\n gardeLavel = eForm.GradeLevel;\r\n }\r\n if (instanceType && instanceType == 'family') {\r\n dataRow = [eForm.ParentName, student_Name, school_Name, gardeLavel, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : '', eForm.StaffNote, eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n }\r\n else {\r\n dataRow = [student_Name, school_Name, gardeLavel, eFormStrStudentId, eForm.Status + (eForm.ManualSubmission ? ' M' : ''), eForm.SubmittedByName, eForm.SubmittedDate ? ((moment(eForm.SubmittedDate).format('MM/DD/YY hh:mm A')).toString()) : '', eForm.StaffNote, eForm.Cell_number, eForm.Home_Number, eForm.Address, eForm.Email_Address];\r\n }\r\n // ONE-14022\r\n // if (!this.V10) {\r\n // dataRow.push(eForm.GradeLevel);\r\n // }\r\n\r\n for (let x = 0; x < instanceControls.length; x++) {\r\n if (instanceControls[x].ControlType != 'text') {\r\n if (manualSubmissionDictionary[eForm.ID]) {\r\n dataRow.push('MANUALLY SUBMITTED');\r\n } else if (controls.length > x) {\r\n if (controls[x].ControlType == 'attachment' && (controls[x].AttachmentId || controls[x].Attachment)) {\r\n dataRow.push('Y');\r\n // } else if (controls[i].Value && (instanceControls[i].ControlType != 'radioButtons' || eForm.Status != 'Not Submitted')) {\r\n } else if (controls[x].Value && (eForm.Status != 'Not Submitted')) {\r\n const div = document.createElement('div');\r\n div.innerHTML = controls[x].Value;\r\n const text = div.textContent || div.innerText || '';\r\n dataRow.push(text);\r\n } else {\r\n dataRow.push('');\r\n }\r\n }\r\n }\r\n else if (inclueInstanceSpecificField && instanceControls[x].ControlType == 'text' && instanceControls[x].Instructions != '' && instanceControls[x].Instructions) {\r\n if (eForm.Status != 'Not Submitted') {\r\n const div = document.createElement('div');\r\n div.innerHTML = instanceControls[x].Value;\r\n const text = div.textContent || div.innerText || '';\r\n dataRow.push(text);\r\n // dataRow.push(instanceControls[i].Value);\r\n }\r\n else {\r\n dataRow.push('');\r\n }\r\n }\r\n }\r\n dataDictionary[0].push(dataRow);\r\n });\r\n }\r\n });\r\n\r\n // Creating the spreadsheet\r\n const workSheetsByName: { [name: string]: WorkSheet } = {};\r\n const sheetNames: string[] = [];\r\n const worksheet: WorkSheet[] = [];\r\n let i = 0;\r\n if (!instanceIds || !instanceIds.length) {\r\n instanceIds.push({ ID: 0 });\r\n }\r\n\r\n instanceIds.forEach(instanceId => {\r\n i++;\r\n let name = this.V10 ? 'e-Forms' : nameDictionary[instanceId];\r\n\r\n if (!name) {\r\n name = 'e-Forms'; // + instanceId;\r\n }\r\n\r\n if (name.length > 31) {\r\n name = name.substring(0, 31);\r\n }\r\n if (i == 1) {\r\n sheetNames.push(name);\r\n }\r\n\r\n workSheetsByName[name] = (utils.aoa_to_sheet(dataDictionary[0]));\r\n });\r\n const workbook: WorkBook = { Sheets: workSheetsByName, SheetNames: sheetNames };\r\n const excelName = 'e-Forms';\r\n const excelBuffer: any = write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.exportService.saveAs(excelBuffer, excelName, '.xlsx');\r\n }\r\n\r\n addEFormAttachmentsToPDF(usePDFSpecificAttachments: boolean = true) {\r\n let attachmentDetailPage: jspdf = new jspdf('p', 'mm', 'letter'); // letter size page of PDF;\r\n const pageCenterX = attachmentDetailPage.internal.pageSize.getWidth() / 2;\r\n const pageCenterY = attachmentDetailPage.internal.pageSize.getHeight() / 2;\r\n // let attachmentNumber = 1;\r\n\r\n let attachments: EFormAttachment[] = [];\r\n\r\n if (usePDFSpecificAttachments) {\r\n attachments = this.eFormAttachmentForPDF;\r\n }\r\n else {\r\n this.eFormAttachment.forEach(attachment => {\r\n if (this.allFormControls.filter(control => control.AttachmentId && control.ControlType == 'attachment' && control.AttachmentId == attachment.ID).length > 0) {\r\n attachments.push(attachment);\r\n }\r\n });\r\n }\r\n\r\n attachments.forEach(attachment => {\r\n attachmentDetailPage = new jspdf('p', 'mm', 'letter'); // letter size page of PDF;\r\n // ONE-10409\r\n // attachmentDetailPage.text(attachment.OriginalFileName, pageCenterX, pageCenterY, 'center');\r\n // this.pdfDataURIs.push(attachmentDetailPage.output('datauristring'));\r\n // attachmentNumber++;\r\n\r\n switch (attachment.FileType) {\r\n case 'application/pdf':\r\n this.pdfDataURIs.push(attachment.FileDataBase64);\r\n break;\r\n case 'image/jpeg':\r\n case 'image/png':\r\n const pdfJS: jspdf = new jspdf('p', 'mm', 'letter'); // letter size page of PDF;\r\n const yOffset = 10;\r\n // ***********\r\n const width = pdfJS.internal.pageSize.getWidth();\r\n const height = pdfJS.internal.pageSize.getHeight();\r\n // **********\r\n // pdfJS.addImage(attachment.FileDataBase64, 'JPEG', 10, yOffset,100,100);\r\n pdfJS.addImage(attachment.FileDataBase64, 'JPEG', 10, yOffset, width - 10, height);\r\n this.pdfDataURIs.push(pdfJS.output('datauristring'));\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n\r\n this.eFormAttachmentForPDF = [];\r\n }\r\n\r\n async getPdfDataUriAsBase64() {\r\n const multiPdfDoc = await PDFDocument.create();\r\n\r\n for (let i = 0; i < this.pdfDataURIs.length; i++) {\r\n const pdfDoc = await PDFDocument.load(this.pdfDataURIs[i]);\r\n\r\n for (let j = 0; j < pdfDoc.getPageCount(); j++) {\r\n const copiedPage = await multiPdfDoc.copyPages(pdfDoc, [j]);\r\n const [page] = copiedPage;\r\n multiPdfDoc.addPage(page);\r\n }\r\n }\r\n\r\n const pdfBase64 = await multiPdfDoc.saveAsBase64();\r\n\r\n return pdfBase64;\r\n }\r\n\r\n getSurveySummary(instanceId: number, yearId: number, schoolId: number, criticalOnly: boolean, includeResultsForAllSchools: boolean, getMostRecent: boolean, startDate: string): Observable {\r\n const queryString = '?instanceId=' + instanceId +\r\n '&yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&criticalOnly=' + criticalOnly +\r\n '&includeResultsForAllSchools=' + includeResultsForAllSchools +\r\n '&getMostRecent=' + getMostRecent +\r\n '&startDate=' + startDate;\r\n return this.http.get(System.apiURL.Admin + 'GetSurveySummary' + queryString);\r\n }\r\n\r\n getSurveyNotSubmitted(instanceId: number, yearId: number, schoolId: number, includeResultsForAllSchools: boolean, getMostRecent: boolean, startDate: string): Observable {\r\n const queryString = '?instanceId=' + instanceId +\r\n '&yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&includeResultsForAllSchools=' + includeResultsForAllSchools +\r\n '&getMostRecent=' + getMostRecent +\r\n '&startDate=' + startDate;\r\n return this.http.get(System.apiURL.Admin + 'GetSurveyNotSubmitted' + queryString);\r\n }\r\n\r\n getSurveyAnswerDetails(instanceId: number, yearId: number, schoolId: number): Observable {\r\n const queryString = '?instanceId=' + instanceId +\r\n '&yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Admin + 'GetSurveyAnswerDetails' + queryString);\r\n }\r\n\r\n getEFormSurveyAnswerSummary(instanceId: number, yearId: number, schoolId: number, startDate: string, getMostRecent: boolean, includeAllSchools: boolean): Observable {\r\n const queryString = '?instanceId=' + instanceId +\r\n '&yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&startDate=' + startDate +\r\n '&getMostRecent=' + getMostRecent +\r\n '&includeAllSchools=' + includeAllSchools;\r\n return this.http.get(System.apiURL.Admin + 'GetEFormSurveyAnswerSummary' + queryString);\r\n }\r\n}\r\n","import { EFormTab } from './e-form-tab.model';\r\n\r\nexport class EFormDataObject {\r\n TemplateId: number;\r\n InstanceId: number;\r\n Name: string;\r\n VersionNumber: number;\r\n Tabs: EFormTab[] = [];\r\n LastUsedTabId: number;\r\n LastUsedPageId: number;\r\n LastUsedControlId: number;\r\n}","import { Pipe, PipeTransform} from '@angular/core';\r\nimport { EFormService } from './e-form.service';\r\n\r\n\r\n@Pipe({\r\n name: 'mergeField'\r\n})\r\nexport class MergeFieldPipe implements PipeTransform {\r\n\r\n constructor(private eFormService: EFormService) {}\r\n transform(text: string, disableMergeField: boolean, triggerPipe: boolean): string {\r\n if (!disableMergeField) {\r\n text = this.eFormService.transformDatabaseMergeTag(text);\r\n text = this.eFormService.transformFormOnlyMergeTag(text);\r\n }\r\n return text;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EFormsSurveySummary } from '../e-form-survey-summary.model';\r\n\r\n@Pipe({\r\n name: 'getSurveyAnswerByFieldID'\r\n})\r\nexport class GetSurveyAnswerByFieldIDPipe implements PipeTransform {\r\n\r\n transform(summary: EFormsSurveySummary, fieldID: number): string {\r\n let result = '';\r\n\r\n if (summary && summary.Answers) {\r\n const answer = summary.Answers.find(o => o.SurveyFieldID == fieldID);\r\n if (answer) {\r\n result = answer.Answer;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EFormsSurveySummary } from '../e-form-survey-summary.model';\r\n\r\n@Pipe({\r\n name: 'surveyAnswerIsCritical'\r\n})\r\nexport class SurveyAnswerIsCriticalPipe implements PipeTransform {\r\n\r\n transform(summary: EFormsSurveySummary, fieldID: number): boolean {\r\n let result = false;\r\n\r\n if (summary && summary.Answers) {\r\n const answer = summary.Answers.find(o => o.SurveyFieldID == fieldID);\r\n if (answer) {\r\n result = answer.IsCritical;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import {Component, ElementRef, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {ErrorList} from '../controls/error-prompt/error-list.model';\r\n\r\n@Component({\r\n\tselector: 'app-enter-csv-dialog',\r\n\ttemplateUrl: './enter-csv-dialog.component.html',\r\n\tstyleUrls: ['./enter-csv-dialog.component.css']\r\n})\r\nexport class EnterCsvDialogComponent implements OnInit {\r\n\r\n\t// Injected Properties\r\n\theader = 'Enter Comma Separate Value';\r\n\thelpString = 'Enter values separated by commas (Ex. ABC, DEF, GHI)';\r\n\tvalidator: (csv: string) => ErrorList[];\r\n pattern: RegExp;\r\n\tkeyRestriction: RegExp;\r\n\r\n\t// Properties\r\n\tcsv = '';\r\n\terrors: ErrorList[] = [];\r\n\t@ViewChild('csvField', { read: ElementRef, static: true }) csvField: ElementRef;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\r\n\t\t// Setting the injected properties\r\n\t\tif (this.data.header) {\r\n\t\t\tthis.header = this.data.header;\r\n\t\t}\r\n\t\tif (this.data.helpString) {\r\n\t\t\tthis.helpString = this.data.helpString;\r\n\t\t}\r\n\t\tif (this.data.validator) {\r\n\t\t\tthis.validator = this.data.validator;\r\n\t\t}\r\n\t\tif (this.data.pattern) {\r\n\t\t this.pattern = this.data.pattern;\r\n }\r\n\t\tif (this.data.keyRestriction) {\r\n\t\t this.keyRestriction = this.data.keyRestriction;\r\n }\r\n\t}\r\n\r\n\tsave() {\r\n\t\t// PRE: the save button is clicked\r\n\t\t// POST: closes the dialog with the CSV\r\n\t\tif (this.validator) {\r\n\t\t\tthis.errors = this.validator(this.csv);\r\n\r\n\t\t\t// If an error comes back with an empty element ref, populate that as our CSV field\r\n\t\t\t// If it comes back as null, don't show it with any ElementRef\r\n\t\t\tthis.errors.forEach(error => {\r\n\t\t\t\tif (error.fieldRef && !error.fieldRef.nativeElement) {\r\n\t\t\t\t\terror.fieldRef = this.csvField;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.errors.length == 0) {\r\n\t\t\tthis.dialogBox.close(this.csv);\r\n\t\t}\r\n\t}\r\n\r\n\tcancel() {\r\n\t\t// PRE: the cancel button is clicked\r\n\t\t// POST: closes the dialog with null\r\n\t\tthis.dialogBox.close(null);\r\n\t}\r\n\r\n\tvalidateKey(event: KeyboardEvent) {\r\n\t // PRE: a key is entered into the csv\r\n // POST: ensures that it maches the format\r\n if (this.keyRestriction &&\r\n !this.keyRestriction.test(event.key) &&\r\n event.key != 'Backspace' &&\r\n event.key != 'Tab') {\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n\t// Methods\r\n}\r\n","\r\n
\r\n\t{{header | translate}}\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t{{helpString | translate}}\r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport {TylerMatTableDataSource} from './angular-material/extended.class';\r\nimport {formatDate} from '@angular/common';\r\nimport { utils, WorkBook, WorkSheet, write } from 'xlsx';\r\nimport { saveAs } from 'file-saver';\r\n\r\nconst EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\r\nconst EXCEL_EXTENSION = '.xlsx';\r\n\r\n@Injectable()\r\nexport class ExportService {\r\n\r\n public exportTableData(\r\n tableData: TylerMatTableDataSource,\r\n columns: string[],\r\n fileName: string,\r\n headerMutator: Function = null,\r\n columnMutator: Function = null,\r\n typeCoercion: Function = null,\r\n useFilterDataAccessor = false\r\n ) {\r\n // PRE: the table data should include all the data you want to print. The sorting data accessor is used to obtain the data.\r\n // the columns you wish to display. The column names *must* match the headers of the columns.\r\n // the name of the file\r\n // POST: prints all the columns in the order provide\r\n // NOTE: optionally, you can include a header mutator to change the header in the XLS based on the column header.\r\n // it must take a string and return a string\r\n const exportData: any[] = [];\r\n const exportedData = tableData.sortData(tableData.filteredData, tableData.sort);\r\n exportedData.forEach(dataRow => {\r\n const exportRow: any[] = [];\r\n columns.forEach(column => {\r\n let columnToCheck = column;\r\n if (columnMutator && columnMutator(column)) {\r\n columnToCheck = columnMutator(column);\r\n }\r\n let header = column;\r\n if (headerMutator && headerMutator(column)) {\r\n header = headerMutator(column);\r\n }\r\n let type: string = typeof (dataRow[columnToCheck]);\r\n if (dataRow[columnToCheck] instanceof Date) {\r\n type = 'date';\r\n }\r\n if (typeCoercion && typeCoercion(column)) {\r\n type = typeCoercion(column);\r\n }\r\n if (type == 'string') {\r\n exportRow[header] = dataRow[columnToCheck];\r\n } else if (type.toLowerCase() == 'date') {\r\n if (dataRow[columnToCheck]) {\r\n exportRow[header] = formatDate(dataRow[columnToCheck], 'MM/dd/yyyy', 'en');\r\n } else {\r\n exportRow[header] = '';\r\n }\r\n } else {\r\n if (useFilterDataAccessor) {\r\n exportRow[header] = tableData.filterDataAccessor(dataRow, columnToCheck);\r\n } else {\r\n exportRow[header] = tableData.sortingDataAccessor(dataRow, columnToCheck);\r\n }\r\n }\r\n });\r\n exportData.push(exportRow);\r\n });\r\n this.exportToExcel(exportData, fileName);\r\n }\r\n\r\n public exportMatGridToExcel(data: any[], columns: string[], fileName: string, detailColumns?: string[], excludedColumns?: string[]) {\r\n // data: Angular Material table data\r\n // columns: Columns currently displayed in Material table (Must match data field names)\r\n // filename: Excel file name\r\n // detailColumns: Data to include in export that is not currently displayed in Material table (Optional)\r\n // excludedColumns: Data to exclude in export that is currently displayed in Material table (Optional)\r\n\r\n // List of Columns to include in excel file\r\n const exportColumns: string[] = [];\r\n\r\n // Copy columns currently displayed in Material table\r\n columns.forEach( column => {\r\n exportColumns.push(column);\r\n });\r\n\r\n // Add columns selected columns not currently displayed in main row of Material Table\r\n if (detailColumns != undefined) {\r\n detailColumns.forEach(detailColumn => {\r\n exportColumns.push(detailColumn);\r\n });\r\n }\r\n\r\n // Remove any excluded columns from export (More, Action, etc.)\r\n if (excludedColumns != undefined) {\r\n excludedColumns.forEach( exColumn => {\r\n const index: number = exportColumns.indexOf(exColumn);\r\n if (index != -1) {\r\n exportColumns.splice(index, 1);\r\n }\r\n });\r\n }\r\n\r\n // Create excel row for each row in Material table data\r\n const exportData: any[] = [];\r\n data.forEach(dataRow => {\r\n const exportRow: any[] = [];\r\n exportColumns.forEach(column => {\r\n exportRow[column] = dataRow[column];\r\n });\r\n\r\n exportData.push(exportRow);\r\n });\r\n this.exportToExcel(exportData, fileName);\r\n }\r\n\r\n public exportToExcel(json: any[], excelFileName: string, includeHeaders = true): void {\r\n const worksheet: WorkSheet = utils.json_to_sheet(json);\r\n if (!includeHeaders) {\r\n const worksheetKeys = Object.keys(worksheet);\r\n const cellKeys = worksheetKeys\r\n .filter(worksheetKey => worksheetKey.match(/^[A-Za-z]+[0-9]+$/))\r\n .sort((a, b) =>\r\n b.localeCompare(a)\r\n );\r\n cellKeys.forEach(cellKey => {\r\n const letter = cellKey.replace(/\\d/g, '');\r\n const number = Number.parseInt(cellKey.replace(/[A-Za-z]/g, ''), 10) - 1;\r\n worksheet[letter + number.toString()] = worksheet[cellKey];\r\n worksheet[cellKey] = '';\r\n });\r\n }\r\n const workbook: WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };\r\n const excelBuffer: any = write(workbook, { bookType: 'xlsx', type: 'array' });\r\n this.saveAs(excelBuffer, excelFileName, EXCEL_EXTENSION);\r\n }\r\n\r\n public saveAs(buffer: any, fileName: string, fileExt: string): void {\r\n const data: Blob = new Blob([buffer], {type: EXCEL_TYPE});\r\n saveAs(data, fileName + '_export_' + new Date().getTime() + fileExt);\r\n }\r\n}\r\n","\r\n
\r\n Favorites\r\n Edit Favorites\r\n
\r\n\r\n
\r\n \r\n
","import { FavoriteMenuComponent } from './../portal-menu/favorite-menu/favorite-menu.component';\r\nimport { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-favorites',\r\n templateUrl: './favorites.component.html',\r\n styleUrls: ['./favorites.component.css']\r\n})\r\nexport class FavoritesComponent implements OnInit {\r\n\r\n // Injected Properties\r\n @Input() editFavorites: boolean;\r\n @Input() isDefaultPreferences: boolean;\r\n\r\n // View Properties\r\n @ViewChild(FavoriteMenuComponent) favoriteMenu: FavoriteMenuComponent;\r\n\r\n // Constructor\r\n constructor() {}\r\n\r\n // Event Functions\r\n ngOnInit() {}\r\n\r\n // Callable Methods\r\n expandAll(expand: boolean) {\r\n this.favoriteMenu.expandAll(expand);\r\n }\r\n\r\n save() {\r\n this.favoriteMenu.save();\r\n }\r\n}\r\n","
\r\n\r\n \r\n
\r\n

{{DialogTitle}}

\r\n
\r\n\r\n \r\n \r\n\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ ColumnHeader }}\r\n \r\n \r\n {{element.TextField}}\r\n
\r\n
\r\n\r\n\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, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { ErrorList } from '../controls/error-prompt/error-list.model';\r\n// import { NgForm } from '@angular/forms';\r\nimport { GenericList, GenericListItem } from './generic-list.model';\r\n\r\n\r\n@Component({\r\n selector: 'app-generic-list-selector',\r\n templateUrl: './generic-list-selector.component.html',\r\n styleUrls: ['./generic-list-selector.component.css'],\r\n})\r\n\r\n\r\nexport class GenericListSelectorComponent implements OnInit, OnDestroy {\r\n dialogRef: MatDialogRef;\r\n\r\n\r\n // field refs\r\n // @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n // @ViewChild('FromPeriod', { read: ElementRef }) fromPeriod: ElementRef;\r\n // @ViewChild('ToPeriod', { read: ElementRef }) toPeriod: ElementRef;\r\n // @ViewChild('UpdateDisplay', { read: ElementRef }) updateDisplay: ElementRef;\r\n\r\n // grid\r\n gridDataExists = true;\r\n selectAll = true;\r\n dataSource: MatTableDataSource;\r\n gridColumns: string[] = ['TextField']; // , 'Period', 'TermCode', 'SubjectCode', 'Section', 'AbbreviatedTitle', 'TeacherName', 'StudentCount', 'DaysGroupDescription'];\r\n DialogTitle: string;\r\n ColumnHeader: string;\r\n OKButtonLabel = 'OK';\r\n GridData: GenericListItem[] = [];\r\n errors: ErrorList[] = [];\r\n list: GenericList;\r\n\r\n // enums\r\n\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n GenericListSelectorDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) {\r\n this.dialogRef = GenericListSelectorDialogRef;\r\n // console.log(this.data.Items);\r\n this.list = this.data;\r\n for (let x = 0; x < this.list.Items.length; x++) {\r\n this.GridData.push(this.list.Items[x]);\r\n }\r\n // console.log(this.GridData);\r\n this.dataSource = new MatTableDataSource(this.data.Items);\r\n\r\n this.DialogTitle = this.data.DialogTitle;\r\n this.ColumnHeader = this.data.ColumnHeader;\r\n\r\n if (this.list.OKButtonLabel) {\r\n this.OKButtonLabel = this.list.OKButtonLabel;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // console.log(this.data);\r\n // this.dataSource = new MatTableDataSource(this.data);\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n // unsubscribe\r\n\r\n }\r\n\r\n\r\n selectAllGridItems(ds, isChecked: boolean) {\r\n // console.log(ds.data);\r\n // console.log(this.GridData);\r\n // console.log(isChecked);\r\n // console.log(this.GridData.length);\r\n this.selectAll = isChecked;\r\n // console.log(this.GridData.length);\r\n for (let x = 0; x < this.GridData.length; x++) {\r\n this.GridData[x].IsSelected = isChecked;\r\n // console.log(this.GridData[x]);\r\n }\r\n\r\n // for (let x = 0; x < this.dataSource.data[0].length; x++) {\r\n // this.dataSource.data[0]. = isChecked;\r\n // }\r\n\r\n // this.dataSource.data[0].length = MatTableDataSource\r\n\r\n // this.dataSource.data.forEach(o => {\r\n // console.log(o);\r\n\r\n\r\n // for (let x = 0; x < o.length; x++) {\r\n // o[x].IsSelected = isChecked;\r\n // }\r\n // }\r\n // );\r\n }\r\n\r\n selectItem(item: GenericListItem, isChecked: boolean) {\r\n // console.log(item);\r\n item.IsSelected = isChecked;\r\n\r\n const result = this.GridData.filter(o => o.IsSelected == false);\r\n if (result.length > 0) {\r\n this.selectAll = false;\r\n }\r\n else if (result.length == 0) {\r\n this.selectAll = true;\r\n }\r\n }\r\n\r\n checkMinAndMaxNumberOfSelected() {\r\n const result = this.GridData.filter(o => o.IsSelected == true);\r\n // console.log(result);\r\n // console.log('this.list.minRequiredSelected: ' + this.list.minRequiredSelected);\r\n // console.log('this.list.maxAllowedSelected: ' + this.list.maxAllowedSelected);\r\n if (this.list.maxAllowedSelected != -1 && result.length > this.list.maxAllowedSelected) {\r\n this.errors.push({\r\n fieldName: null,\r\n errorMsg: 'You may select a maximum of ' + this.list.maxAllowedSelected + ' item(s).',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n if (result.length < this.list.minRequiredSelected) {\r\n this.errors.push({\r\n fieldName: null,\r\n errorMsg: 'You must select at least ' + this.list.minRequiredSelected + ' item(s).',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n selectionChanged() {\r\n // this.reportParameter.isValueChange = true;\r\n\r\n // if (this.inDebugMode) {\r\n // console.log(this.reportParameter.isValueChange);\r\n // }\r\n // if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n // this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n // }\r\n // if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n // this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n // }\r\n }\r\n\r\n okClick() {\r\n this.checkErrors();\r\n if (this.errors.length == 0) {\r\n this.dialogRef.close(this.getSelectedIDs());\r\n }\r\n }\r\n\r\n getSelectedIDs(): string[] {\r\n const selectedIDs: string[] = [];\r\n for (let x = 0; x < this.GridData.length; x++) {\r\n if (this.GridData[x].IsSelected) {\r\n selectedIDs.push(this.GridData[x].Id);\r\n }\r\n }\r\n return selectedIDs;\r\n }\r\n\r\n\r\n\r\n\r\n\r\n checkErrors() {\r\n this.errors = [];\r\n this.checkMinAndMaxNumberOfSelected();\r\n // const selectedGridData = this.reportParameter.GridData.filter(o => o.Select);\r\n // if (selectedGridData.length == 0) {\r\n // this.errors.push({\r\n // fieldName: '',\r\n // errorMsg: 'No Classes Have Been Selected.',\r\n // fieldRef: this.select\r\n // });\r\n // }\r\n\r\n\r\n }\r\n\r\n\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n}\r\n\r\n","export class GenericList {\r\n DialogTitle: string;\r\n ColumnHeader: string;\r\n Items: GenericListItem[] = [];\r\n minRequiredSelected = 1;\r\n maxAllowedSelected = -1; // default of -1 allows ALL to be selected\r\n OKButtonLabel = 'OK';\r\n}\r\n\r\nexport class GenericListItem {\r\n Id: string;\r\n TextField: string;\r\n ValueField: string;\r\n IsSelected: boolean;\r\n}","\r\n\r\n \r\n

\r\n WARNING\r\n

\r\n\r\n \r\n
\r\n Changes have been entered but not saved.\r\n
\r\n
\r\n If you continue without saving, the changes will be lost.\r\n
\r\n
0\" style=\"text-align: center; margin-bottom: 15px;\" class=\"warningText\">\r\n Due to errors, saving is not possible.
\r\n Either Continue without Saving
\r\n or select Cancel and correct the errors.\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n 0 || preventSave\" image=\"save disabled.png\" label=\"Save and Continue\" textColor=\"lightgrey\" [disabled]=\"true\">\r\n \r\n \r\n\r\n","import { Component, EventEmitter, Inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../controls/error-prompt/error-list.model';\r\n\r\n@Component({\r\n\tselector: 'app-check-for-errors-message',\r\n\ttemplateUrl: './check-for-errors-message.component.html',\r\n\tstyleUrls: ['./check-for-errors-message.component.css']\r\n})\r\nexport class CheckForErrorsMessageComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\tdialogBox: MatDialogRef;\r\n\tsaveChoice: EventEmitter = new EventEmitter(); // 1 = save and continue, 0 = continue without save, -1 = cancel\r\n\terrors: ErrorList[] = [];\r\n\tpreventSave = false;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: any\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tthis.errors = this.data.errors;\r\n\t\tthis.preventSave = this.data.preventSave;\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\tthis.saveChoice.emit(-1);\r\n\t}\r\n\r\n\t// Methods\r\n\tleavePage(choice: number) {\r\n\t\tthis.saveChoice.emit(choice);\r\n\t\tthis.dialogBox.close(choice);\r\n\t}\r\n}\r\n","import { map, concatMap } from 'rxjs/operators';\r\nimport { SharedService } from './../../shared.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\nimport { HasErrors } from './HasErrors';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CheckForErrorsMessageComponent } from './check-for-errors-message/check-for-errors-message.component';\r\nimport { Location } from '@angular/common';\r\n\r\n/**\r\n * This guard shows a warning when the user tries to navigate away from a page that has forms and errors.\r\n * The warning has three options:\r\n * save and continue - the user will save the data and continue. This is only available if there are no errors.\r\n * continue without save - the user will not save and continue.\r\n * cancel - the user will stay on the apge.\r\n *\r\n * To use this guard, do the following:\r\n * 1. Implement HasErrors on the component.\r\n * 2. Register the guard in the CanDeactivate array of your route.\r\n *\r\n * This guard calls the checkErrors function of your component. The result determines the behavior of this guard.\r\n * See the canDeactivate function of this guard for more details.\r\n */\r\n@Injectable()\r\nexport class CheckForErrorsGuard implements CanDeactivate {\r\n\r\n // Properties\r\n warningDialog: MatDialogRef;\r\n savingObservable: Observable;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialog: MatDialog,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private location: Location\r\n ) {\r\n }\r\n\r\n // Methods\r\n checkForDeactivation(currentComponent: any = null): Observable | boolean {\r\n // POST: checks the router state tree for itself and, if it's there, performs canDeactivate\r\n if (currentComponent) {\r\n if (currentComponent.checkErrors != undefined) {\r\n return this.canDeactivate(currentComponent);\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n if (this.sharedService.currentComponent && this.sharedService.currentComponent.checkErrors != undefined) {\r\n return this.canDeactivate(this.sharedService.currentComponent);\r\n } else {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n urlTreeWorkaround(currentRoute: ActivatedRouteSnapshot) {\r\n const currentUrlTree = this.router.createUrlTree([], currentRoute);\r\n const currentUrl = currentUrlTree.toString();\r\n this.location.go(currentUrl);\r\n return false;\r\n }\r\n\r\n canDeactivate(component: HasErrors, currentRoute?: ActivatedRouteSnapshot, currentState?: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable | boolean {\r\n // PRE: the user tries to navigate away\r\n // POST: checks the errors.\r\n // If 5, waits for save and continues\r\n // If 4, shows the warning dialog. If the result is true, it will wait for the save before it continues.\r\n // If 3, shows the warning, but doesn't perform route on the save (lets the component do it)\r\n // If 2, continues without save.\r\n // If 1, continues with save.\r\n // If 0, shows warning.\r\n // If -1, stops the route.\r\n let saved = null;\r\n switch (component.checkErrors(nextState)) {\r\n case 5:\r\n saved = component.save();\r\n if (saved instanceof Observable) {\r\n return saved;\r\n } else {\r\n return of(true);\r\n }\r\n case 4:\r\n const dialog = this.showWarningWithoutSave(component);\r\n return dialog.pipe(\r\n concatMap(result => {\r\n if (result == 1) {\r\n saved = component.save();\r\n if (saved instanceof Observable) {\r\n return saved;\r\n } else {\r\n return of(true);\r\n }\r\n } else {\r\n if (result == 0) {\r\n if (component['continuedWithoutSave'] != null && typeof component['continuedWithoutSave'] == 'function') {\r\n component.continuedWithoutSave();\r\n }\r\n return of(true);\r\n } else {\r\n return of(this.urlTreeWorkaround(currentRoute));\r\n }\r\n }\r\n })\r\n );\r\n case 3:\r\n return this.showWarningWithoutSaveRoute(component, currentRoute);\r\n case 2:\r\n if (component['continuedWithoutSave'] != null && typeof component['continuedWithoutSave'] == 'function') {\r\n component.continuedWithoutSave();\r\n }\r\n return true;\r\n case 1:\r\n component.save();\r\n return true;\r\n case 0:\r\n return this.showWarning(component, currentRoute);\r\n case -1:\r\n return this.urlTreeWorkaround(currentRoute);\r\n }\r\n }\r\n\r\n showWarning(component: HasErrors, currentRoute?: ActivatedRouteSnapshot) {\r\n // POST: shows a warning dialog. If the user clicks OK, returns true. Else, returns false.\r\n this.warningDialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n data: {\r\n errors: component.errors\r\n },\r\n disableClose: true\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n return this.warningDialog.componentInstance.saveChoice.pipe(map(result => {\r\n switch (result) {\r\n case 1:\r\n if (component.errors.length > 0) {\r\n return this.urlTreeWorkaround(currentRoute);\r\n } else {\r\n component.save();\r\n return true;\r\n }\r\n case 0:\r\n if (component['continuedWithoutSave'] != null && typeof component['continuedWithoutSave'] == 'function') {\r\n component.continuedWithoutSave();\r\n }\r\n return true;\r\n case -1:\r\n return this.urlTreeWorkaround(currentRoute);\r\n }\r\n }));\r\n }\r\n\r\n showWarningWithoutSave(component: HasErrors) {\r\n // POST: shows a warning dialog, but this one does not perform the save.\r\n // As a consequence, it returns 1 for saved, 0 for continue without save, and -1 for no save\r\n this.warningDialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n data: {\r\n errors: component.errors\r\n },\r\n disableClose: true\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n return this.warningDialog.componentInstance.saveChoice.pipe(map(result => {\r\n switch (result) {\r\n case 1:\r\n if (component.errors.length > 0) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n case 0:\r\n return 0;\r\n case -1:\r\n return -1;\r\n }\r\n }));\r\n }\r\n\r\n showWarningWithoutSaveRoute(component: HasErrors, currentRoute?: ActivatedRouteSnapshot) {\r\n // POST: shows a warning dialog. If the user clicks OK, returns true. Else, returns false.\r\n this.warningDialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n data: {\r\n errors: component.errors\r\n },\r\n disableClose: true\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n return this.warningDialog.componentInstance.saveChoice.pipe(map(result => {\r\n switch (result) {\r\n case 1:\r\n if (component.errors.length == 0) {\r\n component.save();\r\n }\r\n return this.urlTreeWorkaround(currentRoute);\r\n case 0:\r\n if (component['continuedWithoutSave'] != null && typeof component['continuedWithoutSave'] == 'function') {\r\n component.continuedWithoutSave();\r\n }\r\n return true;\r\n case -1:\r\n return this.urlTreeWorkaround(currentRoute);\r\n }\r\n }));\r\n }\r\n}\r\n","import { FamilyRegistrationService } from './../../../shared-modules/family-registration/family-registration.service';\r\nimport { UserService } from './../../user/user.service';\r\nimport {Injectable} from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate, Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\n@Injectable()\r\nexport class NewFamilyRegistrationGuard implements CanActivate {\r\n\r\n // Instance Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private userService: UserService,\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private router: Router\r\n ) { }\r\n\r\n // Methods\r\n canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | boolean {\r\n // PRE: the user tries to navigate to a route guarded by this\r\n // POST: checks that the new family registration is true\r\n if (this.userService.currentUser && this.userService.currentUser.NewFamilyRegistration) {\r\n return true;\r\n } else if (this.familyRegistrationService.householdParent) {\r\n return true;\r\n } else {\r\n this.router.navigateByUrl('/login');\r\n return false;\r\n }\r\n }\r\n}\r\n","import { MatDialog } from '@angular/material/dialog';\r\nimport { StaffService } from './../../../management360/staff/staff.service';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { StaffSearchComponent } from '../../staff-search/staff-search.component';\r\n\r\n@Injectable()\r\nexport class RequireStaffGuard implements CanActivate {\r\n\r\n // Constructor\r\n constructor(\r\n private staffService: StaffService,\r\n private dialog: MatDialog\r\n ) {}\r\n\r\n // Guard Functions\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable | Promise {\r\n if (!this.staffService.selectedStaff) {\r\n const dialogBox = this.dialog.open(\r\n StaffSearchComponent,\r\n {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n }\r\n );\r\n return dialogBox.afterClosed().pipe(\r\n map(staff => {\r\n if (staff) {\r\n this.staffService.selectedStaff = staff;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n })\r\n );\r\n } else {\r\n return true;\r\n }\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRouteSnapshot, CanActivate, CanActivateChild, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { concatMap, map, take } from 'rxjs/operators';\r\nimport { StudentSearchComponent } from '../../student-search/student-search.component';\r\nimport { Student } from '../../student/student.model';\r\nimport { StudentService } from '../../student/student.service';\r\nimport { School } from '../../year/school.model';\r\nimport { LoginService } from './../../../shared-modules/login/login.service';\r\nimport { UserService } from './../../user/user.service';\r\nimport { YearService } from './../../year/year.service';\r\n\r\n/**\r\n * This makes a selected student required for the route\r\n * It takes studentSearchInjectedData as the data that will be injected into the dialog\r\n */\r\n@Injectable()\r\nexport class RequireStudentGuard implements CanActivate, CanActivateChild {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private yearService: YearService\r\n ) { }\r\n\r\n // Methods\r\n canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable | Promise {\r\n return this.canActivate(childRoute, state);\r\n }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | boolean {\r\n // POST: opens the student selector and, when a student is selected, allows you to continue\r\n if (\r\n !this.studentService.selectedStudent\r\n && (\r\n !route.data.optionalStudentPortal\r\n || route.queryParams['studentPortal']\r\n )\r\n ) {\r\n\r\n // If we pass in school permissions, we have to look those up to determine which schools should be enabled\r\n let schoolPermissions: number[] = [];\r\n if (this.loginService.LoginSettings.V10) {\r\n schoolPermissions = route.data.studentSearchSchoolPermissionsV10;\r\n } else {\r\n schoolPermissions = route.data.studentSearchSchoolPermissionsV9;\r\n }\r\n if (schoolPermissions && schoolPermissions.length > 0) {\r\n const studentSearchSchools: School[] = [];\r\n return this.userService.getUserPermissionByPrivilegeIds(\r\n this.yearService.defaultYear.Id,\r\n 0,\r\n schoolPermissions\r\n ).pipe(\r\n concatMap(permissions => {\r\n permissions.forEach(permission => {\r\n if (permission.SiteId) {\r\n const school = this.yearService.allDistrictSchools.find(s => s.Id == permission.SiteId);\r\n if (school && !studentSearchSchools.includes(school)) {\r\n studentSearchSchools.push(school);\r\n }\r\n }\r\n });\r\n let injectedCriteria: any = {\r\n schools: studentSearchSchools\r\n };\r\n if (route.data.studentSearchInjectedData) {\r\n injectedCriteria = route.data.studentSearchInjectedData;\r\n injectedCriteria['schools'] = studentSearchSchools;\r\n }\r\n return this.performStudentSearch(injectedCriteria);\r\n }\r\n ));\r\n }\r\n\r\n // If no school permissions are passed, just open the student search\r\n else {\r\n return this.performStudentSearch(route.data.studentSearchInjectedData);\r\n }\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n performStudentSearch(injectedCriteria: any) {\r\n const searchCriteria = {\r\n performRoute: false,\r\n searchAndSelect: false,\r\n returnSingle: false,\r\n returnAll: true,\r\n useLastSelectedSchool: false\r\n };\r\n if (injectedCriteria) {\r\n Object.keys(injectedCriteria).forEach(key => {\r\n searchCriteria[key] = injectedCriteria[key];\r\n });\r\n }\r\n const dialogBox = this.dialog.open(StudentSearchComponent, {\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n data: searchCriteria\r\n });\r\n return dialogBox.afterClosed().pipe(\r\n take(1),\r\n map((student: Student) => {\r\n if (student) {\r\n this.studentService.selectedStudent = student;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, EventEmitter } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'unsaved-changes-message',\r\n templateUrl: './unsaved-changes-message.component.html',\r\n styleUrls: ['./unsaved-changes-message.component.css']\r\n})\r\nexport class UnsavedChangesMessageComponent implements OnInit, OnDestroy {\r\n\r\n //Properties\r\n dialogBox: MatDialogRef; //The dialog this is stored in\r\n stayEvent: EventEmitter = new EventEmitter ();\r\n\r\n //Class Functions\r\n constructor() { }\r\n\r\n //Event Functions\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy () {\r\n this.stayEvent.emit(false);\r\n }\r\n\r\n //Methods\r\n leavePage (stay: boolean) {\r\n //PRE: a boolean indicating whether or not the user wants to stay\r\n //POST: stays if true, routes if false\r\n this.stayEvent.emit(stay);\r\n this.dialogBox.close();\r\n }\r\n}\r\n","\r\n

WARNING

\r\n
There are unsaved changes on this page.
\r\n
Click OK to continue and lose the unsaved changes.
\r\n
Click Cancel to return to the page.
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
","\r\nimport {map} from 'rxjs/operators';\r\nimport {Component, Injectable} from '@angular/core';\r\nimport {CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { ComponentCanDeactivate } from './ComponentCanDeactivate';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { UnsavedChangesMessageComponent } from './unsaved-changes-message/unsaved-changes-message.component';\r\n\r\nimport {SharedService} from '../../shared.service';\r\n\r\n/**\r\n * This guard is meant to show an unsaved changes warning when the user navigates away from a page.\r\n *\r\n * To use this guard, do the following:\r\n * 1. Implement ComponentCanDeactivate on your component\r\n * 2. Register this guard in the CanDeactivate parameter of your route.\r\n *\r\n * This guard will call the canDeactivate function of your component.\r\n * If the function returns, true, it will simply continue with the route.\r\n * If the function returns false, it will show an unsaved changes warning.\r\n *\r\n * NOTE: THIS IS DEPRECIATED. USE THE CHECK FOR ERRORS GUARD.\r\n */\r\n@Injectable()\r\nexport class UnsavedChangesGuard implements CanDeactivate {\r\n\r\n // Instance Properties\r\n warningDialog: MatDialogRef;\r\n currentComponent: Component;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialog: MatDialog,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n // Methods\r\n checkForDeactivation (): Observable | Promise | boolean {\r\n\t\t// POST: checks the router state tree for itself and, if it's there, performs canDeactivate\r\n\t\tif (this.sharedService.currentComponent && this.sharedService.currentComponent.canDeactivate != undefined) {\r\n\t\t return this.canDeactivate(this.sharedService.currentComponent);\r\n } else {\r\n\t\t return true;\r\n }\r\n\t}\r\n\r\n\tcanDeactivate (component: ComponentCanDeactivate, currentRoute?: ActivatedRouteSnapshot, currentState?: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable | Promise | boolean {\r\n // PRE: a component that implements ComponentCanDeactivate\r\n // POST: If the component allows, transitions. If not, shows a warning dialog.\r\n return component.canDeactivate () ? true : this.showWarning ();\r\n }\r\n\r\n showWarning () {\r\n // POST: shows a warning dialog. If the user clicks OK, returns true. Else, returns false.\r\n this.warningDialog = this.dialog.open(UnsavedChangesMessageComponent, {\r\n disableClose: true\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n return this.warningDialog.componentInstance.stayEvent.pipe(map(result => {\r\n return result;\r\n }));\r\n }\r\n}\r\n","export class HasDynamicData {\r\n\r\n // Properties\r\n public DynamicProperties : {[key: string]: string}\r\n\r\n // Constructor\r\n constructor() {\r\n if (!this.DynamicProperties) {\r\n this.DynamicProperties = {};\r\n }\r\n }\r\n\r\n // Methods\r\n public createAccessorsAndMutators(dynamicProperties?: string[]) {\r\n if (!this.DynamicProperties) {\r\n this.DynamicProperties = {};\r\n }\r\n if (dynamicProperties) {\r\n const newDynamicProperties: {[key: string]: string} = {};\r\n dynamicProperties.forEach(dynamicProperty => {\r\n newDynamicProperties[dynamicProperty] = this.DynamicProperties[dynamicProperty];\r\n });\r\n this.DynamicProperties = newDynamicProperties;\r\n }\r\n const dynamicKeys = Object.keys(this.DynamicProperties);\r\n dynamicKeys.forEach(dynamicKey => {\r\n Object.defineProperty(\r\n this,\r\n dynamicKey,\r\n {\r\n get() {\r\n return this.DynamicProperties[dynamicKey];\r\n },\r\n set(value: any) {\r\n this.DynamicProperties[dynamicKey] = value;\r\n },\r\n configurable: true\r\n }\r\n );\r\n });\r\n }\r\n}","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { EditorComponent } from '@progress/kendo-angular-editor';\r\ninterface Item {\r\n text: string;\r\n size: number;\r\n}\r\n@Component({\r\n selector: 'tyl-kendo-html-editor',\r\n templateUrl: './tyl-kendo-html-editor.component.html'\r\n})\r\n\r\nexport class TylKendoHtmlEditorComponent implements OnInit {\r\n @Input() inputValue: string;\r\n @Output() myOutput: EventEmitter = new EventEmitter();\r\n @ViewChild('editor', { static: true }) editor: EditorComponent;\r\n @Output() focus: EventEmitter = new EventEmitter();\r\n public value = `\r\n `;\r\n\r\n public listItems: Array = [\r\n { text: '8pt', size: 10.664 },\r\n { text: '9pt', size: 11.997 },\r\n { text: '10pt', size: 13.33 },\r\n { text: '11pt', size: 14.663 },\r\n { text: '12pt', size: 15.996 },\r\n { text: '14pt', size: 18.662 },\r\n { text: '16pt', size: 21.328 },\r\n { text: '18pt', size: 23.994 },\r\n { text: '20pt', size: 26.66 },\r\n { text: '22pt', size: 29.326 },\r\n { text: '24pt', size: 31.992 },\r\n { text: '26pt', size: 34.658 },\r\n { text: '28pt', size: 37.324 },\r\n { text: '36pt', size: 47.988 },\r\n { text: '48pt', size: 63.984 },\r\n { text: '72pt', size: 95.976 }\r\n ];\r\n\r\n public selectedItem: Item = this.listItems[1];\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n saveClick() {\r\n this.myOutput.emit(this.inputValue);\r\n }\r\n\r\n onFocus() {\r\n this.focus.emit();\r\n }\r\n\r\n}","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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 Component,\r\n Input,\r\n ViewChild,\r\n OnInit,\r\n OnDestroy,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { PDFExportComponent } from '@progress/kendo-angular-pdf-export';\r\nimport { Subscription } from 'rxjs';\r\nimport { SharedService } from '../../shared.service';\r\nimport { SpinnerService } from '../../spinner/spinner.service';\r\nimport { System } from '../../System';\r\nimport { Group, exportPDF } from '@progress/kendo-drawing';\r\nimport { PDFDocument } from 'pdf-lib';\r\n\r\n/**\r\n * This component encapsulates the Kendo PDFExport.\r\n *\r\n * @input keepTogether: An optional CSS selector that specifies the elements which should not be split across the pages .\r\n * @input paperSize: Specifies the paper size of the PDF document (see example). Defaults to \"Letter\".\r\n * @input margin: Specifies the margins of the page.. Defaults to 1cm.\r\n * @input scale: A scale factor. The text size on the screen might be too big for printing. To scale down the output in PDF, use this option.\r\n * @input landscape: A flag that indicates if the page will be in a landscape orientation. Defaults to true.\r\n * @input fileName: Sets the name of the file that will be created. Defaults to 'pdfExport.pdf'.\r\n *\r\n * NOTES:\r\n *\r\n */\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'tyl-kendo-pdf-export',\r\n templateUrl: './tyl-kendo-pdf-export.component.html', \r\n // View Encapsulation must be disabled in order to style the exported content\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\r\n './tyl-kendo-pdf-export.component.css'\r\n ]\r\n})\r\nexport class TylKendoPdfExportComponent implements OnInit, OnDestroy {\r\n\r\n // Interface Properties for KendoPdfExport\r\n @Input() keepTogether: string;\r\n @Input() paperSize: string = 'Letter';\r\n @Input() margin: string = '1cm';\r\n @Input() scale: number = 0.50;\r\n @Input() landscape: boolean = true;\r\n\r\n // Custom Interface Properties\r\n @Input() fileName: string = 'pdfExport.pdf';\r\n @Input() pageWidth: number = 0;\r\n @Input() autoScale: boolean = false;\r\n\r\n @Input() ignorePrintCall = false;\r\n\r\n // Local Properites\r\n @ViewChild('pdfPrint', { static: true }) pdfPrintRef: PDFExportComponent;\r\n // @ViewChild('sizeRef', { read: ElementRef }) sizeRef: ElementRef;\r\n pageToPdfTriggerSubscription: Subscription;\r\n\r\n // Class Functions\r\n constructor(\r\n private sharedService: SharedService,\r\n private spinnerService: SpinnerService\r\n ) { } \r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.pageToPdfTriggerSubscription = this.sharedService.observablePageToPdfTrigger$.subscribe(() => {\r\n if(!this.ignorePrintCall) {\r\n this.exportPageToPDF();\r\n }\r\n });\r\n }\r\n\r\n async exportPageToPDF() { \r\n this.pdfPrintRef.paperSize = this.paperSize;\r\n this.pdfPrintRef.margin = this.margin;\r\n if(!this.autoScale) {\r\n this.pdfPrintRef.scale = this.scale;\r\n }\r\n else {\r\n if(this.pageWidth < 2000) {\r\n this.pdfPrintRef.scale = 0.5;\r\n }\r\n else if(this.pageWidth < 3000) {\r\n this.pdfPrintRef.scale = 0.25;\r\n }\r\n else {\r\n this.pdfPrintRef.scale = 0.20;\r\n }\r\n }\r\n this.pdfPrintRef.landscape = this.landscape;\r\n this.spinnerService.showSpinner = true; \r\n\r\n let pdfString: string = ''; \r\n\r\n await this.pdfPrintRef.export().then(async (group: Group) => { \r\n await exportPDF(group).then((dataURI) => { \r\n pdfString = dataURI;\r\n })\r\n });\r\n\r\n const pdfDoc = await PDFDocument.load(pdfString);\r\n\r\n const pdfBase64 = await pdfDoc.saveAsBase64();\r\n \r\n System.viewFileFromBase(pdfBase64, 'pdf', this.fileName); \r\n\r\n setTimeout(() => {\r\n this.spinnerService.showSpinner = false;\r\n }, 0);\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n // NOTE: this is implemented for @AutoUnsubscribe\r\n }\r\n \r\n // Methods\r\n\r\n}\r\n","\r\n\r\n \r\n\r\n ","export class Lookup {\r\n\t$id: number;\r\n\tCode: string;\r\n\tCodeDescription: string;\r\n\tDefault: boolean;\r\n\tId: string;\r\n\tDF_ID: number;\r\n\tSequence: number;\r\n\tStateIdentifier: string;\r\n\tState: string;\r\n\tUseInReferral: boolean;\r\n\tValidActionCodes: string;\r\n\tCodeDesc: string;\r\n\tSchoolId: number;\r\n\tLastRunByDate: Date;\r\n\tLastRunByUser: string;\r\n\tSubCodeId: number;\r\n\tIncidentCodeId: number;\r\n\tIncidentTypeId: number;\r\n\tDelStatus: boolean;\r\n\tPermissionCategory: string;\r\n\tInactive: boolean;\r\n\r\n\t// Non=DTO properties\r\n\tIsCritical: boolean;\r\n\tIsSelected: boolean;\r\n}\r\n\r\nexport class SiteLookup {\r\n\tId: number;\r\n\tName: string;\r\n\tCode: string;\r\n}\r\n\r\nexport class DistrictLookup {\r\n\tId: number;\r\n\tName: string;\r\n\tExternalDistrict: boolean;\r\n}\r\n\r\nexport class HealthLookupEnum {\r\n\r\n\tstatic timePeriod = 'sys_TimePeriod';\r\n \tstatic natureOfInjury = 'sys_NatureOfInjury';\r\n \tstatic location = 'sys_Location';\r\n\tstatic medicationsDoseOrders = 'sys_MedicationsDoseOrders';\r\n \tstatic medicationType = 'sys_MedicationType';\r\n \tstatic screeningResults = 'sys_ScreeningResults';\r\n \tstatic audiologicalReferralIndicated = 'sys_AudiologicalReferralIndicated';\r\n \tstatic diagnosis = 'sys_Diagnosis';\r\n \tstatic screeningReferralStatus = 'sys_ScreeningReferralStatus';\r\n \tstatic screeningType = 'sys_ScreeningType';\r\n \tstatic screeningSeries = 'sys_ScreeningSeries';\r\n \tstatic hearingSensitivityResults = 'sys_Hearing_Sensitivity_Results';\r\n \tstatic parentContact = 'sys_ParentContact';\r\n \tstatic referralDiagnosisHearing = 'sys_ReferralDiagnosis_Hearing';\r\n \tstatic referralTreatmentHearing = 'sys_ReferralTreatment_Hearing';\r\n \tstatic monitorAudiogram = 'sys_MonitorAudiogram';\r\n \tstatic meetsCriteriaforReferral = 'sys_MeetsCriteriaforReferral';\r\n \tstatic referralDiagnosisSpinal = 'sys_ReferralDiagnosis_Spinal';\r\n \tstatic referralTreatmentSpinal = 'sys_ReferralTreatment_Spinal';\r\n \tstatic continueObservation = 'sys_ContinueObservation';\r\n \tstatic visionComprehensiveEyeExam = 'sys_Vision_ComprehensiveEyeExam';\r\n \tstatic yN_codes = 'sys_YN_Codes';\r\n \tstatic visionGlassesReferral = 'sys_Vision_GlassesReferral';\r\n \tstatic medicalStatus = 'sys_Medical_Status';\r\n \tstatic medicalTestingCodes = 'sys_Medical_TestingCodes';\r\n \tstatic visionStudentStatus = 'sys_Vision_StudentStatus';\r\n static medicationCodes = 'sys_MedicationCodes';\r\n\tstatic medicationRoutes = 'sys_MedicationRoutes';\r\n\tstatic clinicVisitReason = 'sys_HealthClinicVisitCodes';\r\n\tstatic clinicVisitNoShow = 'sys_HealthClinicVisitNoShow';\r\n\tstatic clinicVisitDOHSurveillance = 'sys_HealthClinicLogDOHSurveillance';\r\n\tstatic clinicTreatements = 'sys_ClinicTreatements';\r\n\tstatic clinicStudentSentTo = 'sys_ClinicStudentSentTo';\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { AttendanceCode } from '../../classroom360/attendance/models/attendance-code.model';\r\nimport { SharedService } from '../shared.service';\r\nimport { YearService } from '../year/year.service';\r\nimport { System } from './../System';\r\nimport { CityStateZipCodeLoookup } from './city-state-zip-code-lookup.model';\r\nimport { GradeLevelLookup } from './grade-level-lookup.model';\r\nimport { StudentRegistrationType } from './lookup.enums';\r\nimport { DistrictLookup, Lookup, SiteLookup } from './lookup.model';\r\n/**\r\n * This service can be used to obtain a variety of lookups.\r\n * The lookup model is the basis for these lookups.\r\n * If you need to get lookups, try to add them here instead of in another service.\r\n */\r\n@Injectable()\r\nexport class LookupService {\r\n\t/**\r\n\t * Note: A lot of these classes check that the default year is set\r\n\t * This is because these lookups are also used in family registration\r\n\t * Those are the only two known uses cases, though, so a parameter was deemed unnecessary\r\n\t */\r\n\r\n\t// Properties\r\n\tgradeLevelLookups: GradeLevelLookup[] = [];\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate yearService: YearService,\r\n\t\tprivate sharedService: SharedService\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\r\n\t// Methods\r\n\tgetRelationshipLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the relationships for the current AYIdentifier (parent?)\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetRelationshipLookup' + queryString);\r\n\t}\r\n\r\n\tgetLanguageLookup(): Observable {\r\n\t\t// POST: obtains the list of all languages supported or to be supported\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetLanguageLookup');\r\n\t}\r\n\r\n\tgetMaritalStatusLookup(): Observable {\r\n\t\t// POST: obtains the list of all martial statues supported or to be supported\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetMaritalStatusLookup');\r\n\t}\r\n\r\n\tgetStreetDirectionLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the list of street directions supported or to be supported\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStreetDirectionLookup' + queryString);\r\n\t}\r\n\r\n\tgetStreetTypeLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the list of street types supported or to be supported\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStreetTypeLookup' + queryString);\r\n\t}\r\n\r\n\tgetCountryStateLookup(): Observable {\r\n\t\t// POST: obtains the list of states for the user's country\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCountryStateLookup');\r\n\t}\r\n\r\n\tgetCountryLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the list of supported countries\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCountryLookup' + queryString);\r\n\t}\r\n\r\n\tgetEthnicityLookup(): Observable {\r\n\t\t// POST: obtains the list of ethnicities\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetEthnicityTypeLookup');\r\n\t}\r\n\r\n\tgetGenderLookup(): Observable {\r\n\t\t// POST: obtains the list of genders\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetGenderTypeLookup');\r\n\t}\r\n\r\n\tgetRaceLookup(addBlankItem: boolean = false): Observable {\r\n\t\t// POST: obtains the list of races\r\n\t\tconst queryString = '?addBlankItem=' + addBlankItem;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetRaceTypeLookup' + queryString);\r\n\t}\r\n\r\n\tgetSuffixLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the list of suffixes (for names)\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetSuffixLookup' + queryString);\r\n\t}\r\n\r\n\tgetLivesWithLookup(): Observable {\r\n\t\t// POST: obtains the list of lives with (???)\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetLivesWithLookup');\r\n\t}\r\n\r\n\tgetGradeLevelLookup(QRFamily?: boolean, yearId = this.yearService.defaultYear.Id, ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// PRE: A QRFamiy number\r\n\t\t// POSt: obtains the grade levels that are open for OR in the selected year\r\n\t\tconst queryString = '?yearId=' + yearId +\r\n\t\t\t'&QRFamily=' + (QRFamily ? QRFamily : false) +\t// You need this in case of undefined\r\n\t\t\t'&ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetORGradeLevelLookup' + queryString).pipe(take(1));\r\n\t}\r\n\r\n\tgetMedicalConditionLookup(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the list of medical conditions\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetMedicalConditionLookup' + queryString);\r\n\t}\r\n\r\n\tgetDataDefCode(datadefType: number): Observable {\r\n\t\tconst queryString = '?datadefType=' + datadefType;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetDataDefCodes' + queryString);\r\n\t}\r\n\r\n\tgetCityStateZipCodeLookup(): Observable {\r\n\t\t// POST: obtain the list of cities and states\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCityStateZipCodeLookup');\r\n\t}\r\n\r\n\tgetAttedanceCodeLookup(isTeacher = false): Observable {\r\n\t\t// PRE: isTeacher is true if the caller is a teacher\r\n\t\t// POST: obtains a list of attendance codes\r\n\t\treturn this.sharedService.getAttendanceCodeLookup(false, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id);\r\n\t}\r\n\r\n\tgetDisciplineReferralFunctionalMotivationLookup(): Observable {\r\n\t\t// POST: obtains the functional motivation lookups\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetDisciplineReferralFunctionalMotivationLookup');\r\n\t}\r\n\r\n\tgetDisciplineReferralContextLookup(\r\n\t\tyearId = this.yearService.defaultYear.Id,\r\n\t\tschoolId = this.yearService.defaultYear.SchoolID\r\n\t): Observable {\r\n\t\t// POST: obtains a list of contexts for discipline referral\r\n\t\tconst queryString = '?type=context' +\r\n\t\t\t'&yearId=' + yearId +\r\n\t\t\t'&schoolId=' + schoolId;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\r\n\tgetDisciplineReferralReporterLookup(\r\n\t\tyearId = this.yearService.defaultYear.Id,\r\n\t\tschoolId = this.yearService.defaultYear.SchoolID\r\n\t): Observable {\r\n\t\t// POST: obtains a list of reporters for discipline referral\r\n\t\tconst queryString = '?type=reportedBy' +\r\n\t\t\t'&yearId=' + yearId +\r\n\t\t\t'&schoolId=' + schoolId;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\r\n\tgetDisciplineReferralSchoolLookup(\r\n\t\tyearId = this.yearService.defaultYear.Id,\r\n\t\tschoolId = this.yearService.defaultYear.SchoolID\r\n\t): Observable {\r\n\t\t// POST: obtains a list of schools for discipline referral\r\n\t\tconst queryString = '?type=Schools' +\r\n\t\t\t'&yearId=' + yearId +\r\n\t\t\t'&schoolId=' + schoolId;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\r\n\tgetDisciplineReferralPlaceLookup(\r\n\t\tschoolId = this.yearService.defaultYear.SchoolID\r\n\t): Observable {\r\n\t\t// POST: obtains a list of places for discipline referral\r\n\t\tconst queryString = '?schoolId=' + schoolId;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralPlacesLookup' + queryString);\r\n\t}\r\n\r\n\tgetDisciplineReferralIncidentCodeLookup(\r\n\t\tyearId = this.yearService.defaultYear.Id, profileArea: string = 'Discipline'\r\n\t): Observable {\r\n\t\t// POST: obtains a list of places for discipline referral\r\n\t\tlet queryString = '?yearId=' + yearId;\r\n\t\tqueryString += '&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n\t\tqueryString += '&profileArea=' + profileArea;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralIncidentLookup' + queryString);\r\n\t}\r\n\r\n\tgetCommunicationLogLookups(type: string): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCommunicationLogLookups?type=' + type);\r\n\t}\r\n\r\n\tgetCommunicationLogTypesLookup(ayIdentifier: string): Observable {\r\n\t\tlet paramString = '';\r\n\t\tparamString += '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCommunicationLogTypesLookup' + paramString);\r\n\t}\r\n\r\n\tgetCommunicationLogPersonCodesLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCommunicationLogPersonCodesLookup');\r\n\t}\r\n\r\n\tgetCommunicationLogResultLookup(ayIdentifier: string): Observable {\r\n\t\tlet paramString = '';\r\n\t\tparamString += '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCommunicationLogResultLookup' + paramString);\r\n\t}\r\n\r\n\tgetORFormDocumentType(\r\n\t\tschoolId = this.yearService.defaultYear.SchoolID\r\n\t) {\r\n\t\tlet paramString = '';\r\n\t\tparamString += '?schoolId=' + schoolId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetORFormDocumentType' + paramString);\r\n\t}\r\n\tgetincidentCodeDetailLookup(): Observable {\r\n\t\t// POST: obtains a list of Functional Motivation for discipline event\r\n\t\tconst queryString = '?type=incidentCodeDetail' +\r\n\t\t\t'&yearId=' + this.yearService.defaultYear.Id +\r\n\t\t\t'&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\tgetAdditionFieldsLookup(): Observable {\r\n\t\t// POST: obtains a list of Functional Motivation for discipline event\r\n\t\tconst queryString = '?type=incidentStateReporting' +\r\n\t\t\t'&yearId=' + this.yearService.defaultYear.Id +\r\n\t\t\t'&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\tgetIncidentWeaponLookup(): Observable {\r\n\t\t// POST: obtains a list of Functional Motivation for discipline event\r\n\t\tconst queryString = '?type=weaponType' +\r\n\t\t\t'&yearId=' + this.yearService.defaultYear.Id +\r\n\t\t\t'&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDisciplineReferralLookups' + queryString);\r\n\t}\r\n\r\n\tgetStudentRegCodes(regType: StudentRegistrationType, ayIdentifier: string): Observable {\r\n\t\t// POST: obtains the relationships for the current AYIdentifier (parent?)\r\n\t\tconst queryString = '?regType=' + regType + '&ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetCreditCodes(ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: obtains the relationships for the current AYIdentifier (parent?)\r\n\t\tconst queryString = '?ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetCreditCodes' + queryString);\r\n\t}\r\n\r\n\tgetDataQueryFieldLookupReadByFieldId(fieldID: number, categoryID: number): Observable {\r\n\t\t// PRE: a data query field's ID and category's ID\r\n\t\t// POST: obtains the field options by the field ID\r\n\t\tconst queryString = '?dataQueryFieldId=' + fieldID +\r\n\t\t\t'&dataQueryCategoryId=' + categoryID;\r\n\t\treturn this.http.get(System.apiURL.Classroom + 'GetDataQueryFieldLookupReadByFieldId' + queryString);\r\n\t}\r\n\r\n\tgetAllGradeLevels(QRFamily?: boolean, yearId = this.yearService.defaultYear.Id, ayIdentifier = this.yearService.defaultYear.AYIdentifier): Observable {\r\n\t\t// POST: V10 obtains all grade levels from sysGradeLevel\r\n\t\tconst queryString = '?yearId=' + yearId +\r\n\t\t\t'&QRFamily=' + (QRFamily ? QRFamily : false) +\t// You need this in case of undefined\r\n\t\t\t'&ayIdentifier=' + ayIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetAllGradeLevels' + queryString);\r\n\t}\r\n\r\n\tgetStudentListScopes(): Observable {\r\n\t\t// POST: obtains all the student list scopes\r\n\t\tconst queryString = '?regType=' + 1582 +\r\n\t\t\t'&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetStudentListTypes(): Observable {\r\n\t\t// POST: obtains all the student list scopes\r\n\t\tconst queryString = '?regType=' + 1581 +\r\n\t\t\t'&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetCommunicationLogReasons(): Observable {\r\n\t\t// POST: obtains all the student list scopes\r\n\t\tconst queryString = '?regType=' + 1600 +\r\n\t\t\t'&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetCommunicationLogPreDefinedConfidentialNote(): Observable {\r\n\t\t// POST: obtains all the student list scopes\r\n\t\tconst queryString = '?regType=' + 1611 +\r\n\t\t\t'&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetCommunicationLogPreDefinedComment(): Observable {\r\n\t\t// POST: obtains all the student list scopes\r\n\t\tconst queryString = '?regType=' + 1610 +\r\n\t\t\t'&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentRegCodes' + queryString);\r\n\t}\r\n\r\n\tgetStaffRolesLookup(): Observable {\r\n\t\t// POST: obtains all staff roles\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetRolesLookup');\r\n\t}\r\n\r\n\tgetStudentPortfolioCategoryLookup(): Observable {\r\n\t\t// POST: obtains all student portfolio categories\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentPortfolioCategoryLookup');\r\n\t}\r\n\r\n\tgetDocumentTypeLookup(): Observable {\r\n\t\t// POST: obtains all student digital content document types\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetDocumentTypeLookup');\r\n\t}\r\n\r\n\tgetRolesForEForms(): Observable {\r\n\t\t// POST: gets non-system roles as well as e-Form specific system roles\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetRolesForEForms');\r\n\t}\r\n\r\n\tgetSubjectTermTypeLookup(): Observable {\r\n\t\t// POST: obtains all student digital content document types\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetSubjectTermTypeLookup');\r\n\t}\r\n\r\n\tgetIncidentSubCodes(incidentCodeId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?lngIncidentCodeId=' + incidentCodeId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetIncidentSubCodesLookup' + queryString);\r\n\t}\r\n\r\n\tgetStateReportingCodes(type: number, stateReportingCodesId: number, stateCode: string, useSequence: boolean): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?type=' + type +\r\n\t\t\t'&stateReportingCodesId=' + stateReportingCodesId +\r\n\t\t\t'&stateCode=' + stateCode +\r\n\t\t\t'&useSequence=' + useSequence;\r\n\t\treturn this.http.get(System.apiURL.Admin + 'GetStateReportingCodes' + queryString);\r\n\t}\r\n\r\n\tgetGradeLevelsLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetGradeLevelsLookup');\r\n\t}\r\n\r\n\tgetGradeLevelsLookupByYearId(yearId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?yearId=' + yearId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetGradeLevelsLookupByYearId' + queryString);\r\n\t}\r\n\r\n\tgetDepartmentCodes(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Admin + 'GetDistrictDepartmentsCodes');\r\n\t}\r\n\r\n\tgetPhysicianTypeList(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + `GetPhysicianTypeLookUp`);\r\n\t}\r\n\r\n\tgetVaccineTypesLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetVaccineTypesLookup');\r\n\t}\r\n\r\n\tgetExemptCodeLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetExemptCodeLookup');\r\n\t}\r\n\r\n\tgetTestMastersLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetTestMastersLookup');\r\n\t}\r\n\r\n\tgetDistrictLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Counselor + 'GetDistrictLookup');\r\n\t}\r\n\r\n\tgetSiteLookup(districtId: number): Observable {\r\n\t\treturn this.http.get(System.apiURL.Counselor + `GetSiteLookup?districtId=${districtId}`);\r\n\t}\r\n\r\n\tgetGradeLevelsReadBySchoolYear(schoolId: number, yearId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?schoolId=' + schoolId +\r\n\t\t\t'&yearId=' + yearId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetGradeLevelsReadBySchoolYear' + queryString);\r\n\t}\r\n\r\n\tgetPermissionGroupLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetPermissionGroupLookup');\r\n\t}\r\n\t//\r\n\tgetTerminationReasionLookup(state: string, yearId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?state=' + state +\r\n\t\t\t'&yearId=' + yearId;\r\n\t\treturn this.http.get(System.apiURL.Management + 'GetTerminationReasonLookUp' + queryString);\r\n\t}\r\n\r\n\tgetWithdrawnCodesReadLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Counselor + `GetWithdrawnCodesReadLookup`);\r\n\t}\r\n\r\n\tgetTeacherSpecialtyCodesLookUp(yearId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?yearId=' + yearId;\r\n\t\treturn this.http.get(System.apiURL.Management + 'GetTeacherSpecialtyCodesLookUp' + queryString);\r\n\t}\r\n\r\n\tgetClinicVisitCodesLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Health + `GetClinicVisitCodesLookup`);\r\n\t}\r\n\r\n\tgetMedicalCodeClinicVisitNoShowLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Health + `GetMedicalCodeClinicVisitNoShowLookup`);\r\n\t}\r\n\r\n\tgetDeliveryResultCodeLookUp(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Health + `GetDeliveryResultCodesLookup`);\r\n\t}\r\n\r\n\tgetCourseGradingPurposeLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Counselor + `GetCourseGradingPurposeLookup`);\r\n\t}\r\n\r\n\tgetTermGradeTypesLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Counselor + `GetTermGradeTypesLookup`);\r\n\t}\r\n\r\n\tgetMedicationFrequencyLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Health + `GetMedicationFrequencyLookup`);\r\n\t}\r\n\r\n\tgetPractionerLookUp(studentId: number): Observable {\r\n\t\tlet queryString = '';\r\n\t\tqueryString += '?studentId=' + studentId;\r\n\t\treturn this.http.get(System.apiURL.Health + `GetPractionerLookup` + queryString);\r\n\t}\r\n\r\n\tgetMealApplicationConfidentiallyWaiverLookups(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + `GetMealApplicationConfidentiallyWaiverLookups`);\r\n\t}\r\n\r\n\tgetMedicalTestingCodesLookup(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Health + `GetMedicalTestingCodesLookup`);\r\n\t}\r\n}\r\n","

WARNING

\r\n\r\n
The following students have been unselected from some classes, but not ALL\r\n classes:\r\n
\r\n
\r\n
{{student}}
\r\n
\r\n
If your intent was to exclude these students from receiving this email,\r\n Go Back to the Student View tab and unselect the students. (That will\r\n unselect them from all classes.)\r\n
\r\n
\r\n\r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-unselected-warning',\r\n templateUrl: './unselected-warning.component.html'\r\n})\r\nexport class UnselectedWarningComponent implements OnInit {\r\n deSelectedStudents: string[] = [];\r\n retValUnselectWarning: string;\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.deSelectedStudents = this.data.object;\r\n }\r\n backClick() {\r\n this.dialogRef.close();\r\n }\r\n continueClick() {\r\n this.retValUnselectWarning = 'Continue was clicked';\r\n this.dialogRef.close(this.retValUnselectWarning);\r\n }\r\n}\r\n","

WARNING - No emails will be sent for {{studentsWithoutRecipients.length}} students

\r\n\r\n
For these students, no email addresses were found for the selected recipient(s).
\r\n
0\">\r\n \r\n \r\n \r\n Student #\r\n \r\n {{student.StudentNumber}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{student.Name}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{student.GradeLevel}}\r\n \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, OnInit, Inject, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MassEmailStudent } from '../mass-email.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\n@Component({\r\n selector: 'app-no-email-warning',\r\n templateUrl: './no-email-warning.component.html'\r\n\r\n})\r\nexport class NoEmailWarningComponent implements OnInit, AfterViewInit {\r\n studentsWithoutRecipients: MassEmailStudent[] = [];\r\n retValNoEmailWarning: string;\r\n noEmailWarningDataSources = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort1: MatSort;\r\n columnsToDisplay = ['StudentNumber', 'Name', 'GradeLevel'];\r\n constructor(\r\n public noEmailWarningDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.studentsWithoutRecipients = this.data;\r\n }\r\n\r\n ngOnInit() {\r\n this.loadTableData();\r\n }\r\n ngAfterViewInit() {\r\n }\r\n\r\n loadTableData() {\r\n this.noEmailWarningDataSources.data = this.studentsWithoutRecipients;\r\n setTimeout(() => this.noEmailWarningDataSources.sort = this.sort1);\r\n }\r\n getAriaRow(row: MassEmailStudent): string {\r\n const colList: string[] = ['StudentNumber', 'Name', 'GradeLevel'];\r\n\r\n const dataList: string[] = [row.StudentNumber,\r\n row.Name,\r\n row.GradeLevel];\r\n return '';\r\n\r\n }\r\n\r\n backClick() {\r\n this.noEmailWarningDialogRef.close();\r\n }\r\n\r\n nextClick() {\r\n this.retValNoEmailWarning = 'Continue was clicked';\r\n this.noEmailWarningDialogRef.close(this.retValNoEmailWarning);\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Student #\r\n \r\n {{CVDetail.StudentNumber}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{CVDetail.Name}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{CVDetail.GradeLevel}}\r\n \r\n \r\n \r\n Email Address\r\n \r\n {{CVDetail.Email}}\r\n \r\n \r\n \r\n \r\n \r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\n//import { ClassroomSummary } from '../../../classroom-summary/models/classroom-summary.model';\r\nimport { MassEmailStudent, MassEmail } from '../../mass-email.model';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../../shared-modules/login/LoginSetting.model';\r\nimport { ClassroomSummary } from '../../../../classroom360/classroom-summary/models/classroom-summary.model';\r\n\r\n\r\n@Component({\r\n selector: 'app-by-class-row-student',\r\n templateUrl: './by-class-row-student.component.html'\r\n})\r\nexport class ByClassRowStudentComponent implements OnInit {\r\n // ----------Angular Material------------------------------------\r\n massEmail: MassEmail;\r\n angularMatData = new TylerMatTableDataSource();\r\n loginSettings: LoginSettings;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayInDetailClassView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email'];\r\n @Input() classRow: ClassroomSummary;\r\n selectedStudents: MassEmailStudent[] = [];\r\n\r\n\r\n constructor(private loginService: LoginService) { }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.angularMatData.data = this.classRow.Students;\r\n this.selectedStudents = this.classRow.Students;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n classStudentsCheckAllClick(course) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n if (this.loginSettings.V10) {\r\n this.selectedStudents[i].SelectedClasses[course.SSEC_ID] = course.classStudentsCheckAll;\r\n }\r\n else {\r\n this.selectedStudents[i].SelectedClasses[course.Id] = course.classStudentsCheckAll;\r\n }\r\n if (this.selectedStudents[i].SelectedClasses.find(c => c == true) == null) {\r\n this.selectedStudents[i].IsSelected = false;\r\n }\r\n else {\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n classStudentClick(student: MassEmailStudent, course: ClassroomSummary) {\r\n course.classStudentsCheckAll = true;\r\n if (student.SelectedClasses.find(c => c == true) == null) {\r\n student.IsSelected = false;\r\n }\r\n else {\r\n student.IsSelected = true;\r\n }\r\n if (this.loginSettings.V10) {\r\n if (student.SelectedClasses[course.SSEC_ID] != true) {\r\n course.classStudentsCheckAll = false;\r\n }\r\n else {\r\n if (this.selectedStudents.find(studentObj => studentObj.SubjectSections.find(c => c == course.SSEC_ID) != null && studentObj.SelectedClasses[course.Id] != true) != null) {\r\n course.classStudentsCheckAll = false;\r\n }\r\n\r\n }\r\n }\r\n else {\r\n if (student.SelectedClasses[course.Id] != true) {\r\n course.classStudentsCheckAll = false;\r\n }\r\n else {\r\n if (this.selectedStudents.find(studentObj => studentObj.SubjectSections.find(c => c == course.Id) != null && studentObj.SelectedClasses[course.Id] != true) != null) {\r\n course.classStudentsCheckAll = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getAriaDetailRow(row) {\r\n\r\n }\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Student #\r\n \r\n {{STDetail.StudentNumber}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{STDetail.Name}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{STDetail.GradeLevel}}\r\n \r\n \r\n \r\n Email Address\r\n \r\n {{STDetail.Email}}\r\n \r\n \r\n \r\n \r\n \r\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { StudentTeams } from '../../../../classroom360/student-teams/student-teams.model';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../../shared-modules/login/LoginSetting.model';\r\nimport { MassEmail, MassEmailStudent } from '../../mass-email.model';\r\n\r\n@Component({\r\n selector: 'app-by-team-row-student',\r\n templateUrl: './by-team-row-student.component.html',\r\n styleUrls: ['./by-team-row-student.component.css']\r\n})\r\nexport class ByTeamRowStudentComponent implements OnInit {\r\n\r\n massEmail: MassEmail;\r\n angularMatData = new TylerMatTableDataSource();\r\n loginSettings: LoginSettings;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayInDetailTeamView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email'];\r\n @Input() teamRow: StudentTeams;\r\n selectedStudents: MassEmailStudent[] = [];\r\n\r\n constructor(\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.angularMatData.data = this.teamRow.Students;\r\n this.selectedStudents = this.teamRow.Students;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n teamStudentsCheckAllClick(team) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n this.selectedStudents[i].SelectedTeams[team.Id] = team.teamStudentsCheckAll;\r\n if (this.selectedStudents[i].SelectedTeams.find(c => c == true) == null) {\r\n this.selectedStudents[i].IsSelected = false;\r\n }\r\n else {\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n }\r\n\r\n teamStudentClick(student: MassEmailStudent, team: StudentTeams) {\r\n team.teamStudentsCheckAll = true;\r\n if (student.SelectedTeams.find(c => c == true) == null) {\r\n student.IsSelected = false;\r\n }\r\n else {\r\n student.IsSelected = true;\r\n }\r\n if (student.SelectedTeams[team.Id] != true) {\r\n team.teamStudentsCheckAll = false;\r\n }\r\n else {\r\n if (this.selectedStudents.find(studentObj => studentObj.StudentTeams.find(c => c == team.Id) != null && studentObj.SelectedTeams[team.Id] != true) != null) {\r\n team.teamStudentsCheckAll = false;\r\n }\r\n }\r\n }\r\n\r\n getAriaDetailRow(row) {\r\n\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Student #\r\n \r\n {{SLDetail.StudentNumber}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{SLDetail.Name}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{SLDetail.GradeLevel}}\r\n \r\n \r\n \r\n Email Address\r\n \r\n {{SLDetail.Email}}\r\n \r\n \r\n \r\n \r\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { StudentList } from '../../../../classroom360/student-lists/student-list.model';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../../shared-modules/login/LoginSetting.model';\r\nimport { MassEmail, MassEmailStudent } from '../../mass-email.model';\r\n\r\n@Component({\r\n selector: 'app-by-list-row-student',\r\n templateUrl: './by-list-row-student.component.html',\r\n styleUrls: ['./by-list-row-student.component.css']\r\n})\r\nexport class ByListRowStudentComponent implements OnInit {\r\n\r\n massEmail: MassEmail;\r\n angularMatData = new TylerMatTableDataSource();\r\n loginSettings: LoginSettings;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayInDetailListView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email'];\r\n @Input() listRow: StudentList;\r\n selectedStudents: MassEmailStudent[] = [];\r\n\r\n constructor(\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.angularMatData.data = this.listRow.MassEmailStudents;\r\n this.selectedStudents = this.listRow.MassEmailStudents;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n listStudentsCheckAllClick(list) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n this.selectedStudents[i].SelectedLists[list.ID] = list.listStudentsCheckAllClick;\r\n if (this.selectedStudents[i].SelectedLists.find(c => c == true) == null) {\r\n this.selectedStudents[i].IsSelected = false;\r\n }\r\n else {\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n }\r\n\r\n listStudentClick(student: MassEmailStudent, list: StudentList) {\r\n list.listStudentsCheckAll = true;\r\n if (student.SelectedLists.find(c => c == true) == null) {\r\n student.IsSelected = false;\r\n }\r\n else {\r\n student.IsSelected = true;\r\n }\r\n if (student.SelectedLists[list.ID] != true) {\r\n list.listStudentsCheckAll = false;\r\n }\r\n else {\r\n if (this.selectedStudents.find(studentObj => studentObj.StudentLists.find(c => c == list.ID) != null && studentObj.SelectedLists[list.ID] != true) != null) {\r\n list.listStudentsCheckAll = false;\r\n }\r\n }\r\n }\r\n\r\n getAriaDetailRow(row) {\r\n\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n//import { ClassroomSummary } from '../../classroom-summary/models/classroom-summary.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { ClassroomSummary } from '../../../classroom360/classroom-summary/models/classroom-summary.model';\r\n\r\n@Pipe({\r\n name: 'selectRecipients',\r\n pure: false\r\n})\r\nexport class SelectRecipientsPipe implements PipeTransform {\r\n selectedClasses: ClassroomSummary[] = [];\r\n\r\n constructor(private loginService: LoginService) { }\r\n\r\n transform(subject: any, filter: any[], referringPage: string): any {\r\n const obj: any[] = [];\r\n if (filter != null) {\r\n for (let i = 0; i < filter.length; i++) {\r\n switch (referringPage) {\r\n case 'My Classes':\r\n if (this.loginService.LoginSettings.V10 == true && subject.find(x => x.SSEC_ID == filter[i])) {\r\n obj.push(subject.find(x => x.SSEC_ID == filter[i]));\r\n }\r\n if (this.loginService.LoginSettings.V10 != true && subject.find(x => x.Id == filter[i])) {\r\n obj.push(subject.find(x => x.Id == filter[i]));\r\n }\r\n break;\r\n\r\n case 'Student Teams':\r\n if (subject.find(x => x.Id == filter[i])) {\r\n obj.push(subject.find(x => x.Id == filter[i]));\r\n }\r\n break;\r\n\r\n case 'Student Lists':\r\n if (subject.find(x => x.ID == filter[i])) {\r\n obj.push(subject.find(x => x.ID == filter[i]));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","

Select Recipients

\r\n\r\n
\r\n 0\" [tabNames]=\"tabNames\"\r\n (selectionsChangeIndex)=\"tabChange($event)\">\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n More\r\n \r\n \r\n 0\" aria-label=\"Expand row for more details\"\r\n (click)=\"toggleExpanded(CV)\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Course Name\r\n \r\n {{CV.Course}}\r\n \r\n \r\n \r\n Course\r\n \r\n {{CV.SubjectCode}}\r\n \r\n \r\n \r\n Section\r\n \r\n {{CV.Section}}\r\n \r\n \r\n \r\n Term\r\n \r\n {{CV.Term}}\r\n \r\n \r\n \r\n Home Room\r\n \r\n {{CV.IsHomeRoom ? 'Y' : ''}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n More\r\n \r\n \r\n 0\" aria-label=\"Expand row for more details\"\r\n (click)=\"toggleExpanded(st)\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Team Name\r\n \r\n {{st.StudentTeamName}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n More\r\n \r\n \r\n 0\" aria-label=\"Expand row for more details\"\r\n (click)=\"toggleExpanded(sl)\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n List Name\r\n \r\n {{sl.Name}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Student #\r\n \r\n {{SV.StudentNumber}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{SV.Name}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{SV.GradeLevel}}\r\n \r\n \r\n \r\n Email Address\r\n \r\n {{SV.Email}}\r\n \r\n \r\n \r\n Class\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{class.Course}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n Team\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{team.StudentTeamName}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n List\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{list.Name}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n To\r\n CC\r\n BCC\r\n Do Not Include\r\n \r\n \r\n \r\n \r\n \r\n BCC\r\n Do Not Include\r\n \r\n \r\n \r\n \r\n \r\n BCC\r\n Do Not Include\r\n \r\n \r\n \r\n \r\n Send email to Class Teachers / Co-Teachers\r\n
\r\n \r\n Send email to Team Staff Members \r\n \r\n
\r\n \r\n \r\n \r\n = 1 \" [innerHtml]=\"matTriggerValue()\"\r\n [ngStyle]=\"{'font-style':(contactTypes.value?.length >= 2 && contactTypes.value?.length !=massEmail.ContactTypes.length ? 'italic' : 'none') }\">\r\n \r\n {{contactType.label}}\r\n \r\n \r\n \r\n \r\n \r\n Include all even if did not request mailings\r\n \r\n \r\n \r\n Send once per household\r\n \r\n
\r\n
\r\n","import {\r\n Component,\r\n OnInit,\r\n Inject,\r\n ViewChild,\r\n AfterViewInit,\r\n HostListener,\r\n ElementRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MassEmail, Recipient, StudentContact, MassEmailStudent } from '../mass-email.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MassEmailService } from '../mass-email.service';\r\nimport { UnselectedWarningComponent } from '../unselected-warning/unselected-warning.component';\r\nimport { NoEmailWarningComponent } from '../no-email-warning/no-email-warning.component';\r\nimport { FormControl } from '@angular/forms';\r\nimport * as _ from 'lodash';\r\nimport { ClassroomSummary } from '../../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { StudentTeams } from '../../../classroom360/student-teams/student-teams.model';\r\nimport { StudentList } from '../../../classroom360/student-lists/student-list.model';\r\n\r\n@Component({\r\n selector: 'app-select-recipients',\r\n templateUrl: './select-recipients.component.html',\r\n animations: [detailExpand],\r\n})\r\nexport class SelectRecipientsComponent implements OnInit, AfterViewInit {\r\n loginSettings = new LoginSettings();\r\n defaultYear: Year;\r\n defaultYearSubscription: Subscription;\r\n currentUser: User;\r\n tabIndex = new EventEmitter();\r\n massEmail: MassEmail;\r\n tabNames: string[] = ['Class View', 'Student View', 'Additional'];\r\n selectedTab: string;\r\n columnsToDisplayInClassView = ['More', 'Select', 'Course', 'SubjectCode', 'Section', 'Term', 'HomeRoom'];\r\n columnsToDisplayInDetailClassView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email'];\r\n columnsToDisplayInStudentView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email', 'Course'];\r\n selectedClasses: ClassroomSummary[] = [];\r\n selectedStudents: MassEmailStudent[] = [];\r\n selectedClassesCheckAll: boolean;\r\n classViewDataSource = new TylerMatTableDataSource();\r\n studentViewDataSource = new TylerMatTableDataSource();\r\n errorList: ErrorList[] = [];\r\n error: ErrorList;\r\n massEmailErrorCount: number;\r\n retValSelectRecipient: any = {};\r\n retMessage: string;\r\n householdParentLabel: string;\r\n test = [];\r\n contactTypes = new FormControl();\r\n selectedContactType: string[];\r\n\r\n\r\n // Student Team\r\n columnsToDisplayInTeamView = ['More', 'Select', 'TeamName'];\r\n selectedTeamsCheckAll: boolean;\r\n teamViewDataSource = new TylerMatTableDataSource();\r\n selectedStudentTeams: StudentTeams[] = [];\r\n @ViewChild('tvSort') tvSort: MatSort;\r\n\r\n // Student List\r\n columnsToDisplayInListView = ['More', 'Select', 'ListName'];\r\n selectedListsCheckAll: boolean;\r\n listViewDataSource = new TylerMatTableDataSource();\r\n selectedStudentLists: StudentList[] = [];\r\n @ViewChild('lvSort') lvSort: MatSort;\r\n\r\n @ViewChild('svSort') svSort: MatSort;\r\n @ViewChild('cvSort') cvSort: MatSort;\r\n @ViewChild('pageHeader', { static: true }) pageHeader: ElementRef;\r\n @ViewChild('tblControls') tblControls: ElementRef;\r\n @ViewChild('tab') tab: ElementRef;\r\n @ViewChild('pageFooter', { static: true }) pageFooter: ElementRef;\r\n @ViewChild('mergeName') mergeName: ElementRef;\r\n pageHeaderHeight: number;\r\n tblControlsHeight: number;\r\n tabHeight: number;\r\n pageFooterHeight: number;\r\n gridHeight: number;\r\n unselectedWarningDialogRef: MatDialogRef;\r\n noEmailWarningDialogRef: MatDialogRef;\r\n v10: boolean;\r\n constructor(\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private massEmailService: MassEmailService,\r\n public selectRecipientDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public massEmailObj: MassEmail,\r\n private dialog: MatDialog,\r\n private dialogBox: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.defaultYearSubscription = this.yearService.observableDefaultYearStream$.subscribe(\r\n defaultYear => {\r\n this.defaultYear = defaultYear;\r\n }\r\n );\r\n this.massEmail = this.massEmailObj;\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n if (this.massEmail.StudentIds.length > 0) {\r\n this.getStudentInfoForMassEmail();\r\n } else {\r\n this.initialize();\r\n }\r\n\r\n }\r\n\r\n initialize() {\r\n this.selectedTab = 'Class View';\r\n this.currentUser = this.userService.currentUser;\r\n this.loginSettings = new LoginSettings();\r\n this.loginSettings = this.loginService.LoginSettings;\r\n if (this.massEmail.ReferringPage == 'My Classes') {\r\n this.columnsToDisplayInStudentView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email', 'Course'];\r\n }\r\n if (this.massEmail.ReferringPage == 'Student Teams') {\r\n this.columnsToDisplayInStudentView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email', 'Team'];\r\n }\r\n if (this.massEmail.ReferringPage == 'Student Lists') {\r\n this.columnsToDisplayInStudentView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email', 'List'];\r\n }\r\n if (\r\n this.massEmail.ReferringPage == 'Attendance'\r\n || this.massEmail.ReferringPage == 'Student Search'\r\n ) {\r\n this.columnsToDisplayInStudentView = ['Select', 'StudentNumber', 'Name', 'GradeLevel', 'Email'];\r\n }\r\n this.selectedStudents = this.massEmail.Students;\r\n this.selectedClasses = this.massEmail.MassEmailClasses;\r\n this.selectedStudentTeams = this.massEmail.MassEmailStudentTeams;\r\n this.selectedStudentTeams.forEach(st => {\r\n st.IsSelectedForMassEmail = true;\r\n });\r\n\r\n this.selectedStudentLists = this.massEmail.MassEmailStudentLists;\r\n this.selectedStudentLists.forEach(lt => {\r\n lt.IsSelectedForMassEmail = true;\r\n });\r\n\r\n this.massEmail.selectedStudentsCheckAll = true;\r\n this.selectedClassesCheckAll = true;\r\n this.selectedTeamsCheckAll = true;\r\n this.selectedListsCheckAll = true;\r\n this.massEmail.SendEmailToTeachers = (this.massEmail.SendEmailToTeachers == null || this.massEmail.SendEmailToTeachers == undefined) ? false : this.massEmail.SendEmailToTeachers;\r\n this.massEmail.SendEmailToTeamStaffMembers = (this.massEmail.SendEmailToTeamStaffMembers == null || this.massEmail.SendEmailToTeamStaffMembers == undefined) ? false : this.massEmail.SendEmailToTeamStaffMembers;\r\n this.massEmail.StudentRecipientType = (this.massEmail.StudentRecipientType == null || this.massEmail.StudentRecipientType == undefined) ? '' : this.massEmail.StudentRecipientType;\r\n this.massEmail.HouseholdRecipientType = (this.massEmail.HouseholdRecipientType == null || this.massEmail.HouseholdRecipientType == undefined) ? '' : this.massEmail.HouseholdRecipientType;\r\n this.massEmail.NonHouseholdRecipientType = (this.massEmail.NonHouseholdRecipientType == null || this.massEmail.NonHouseholdRecipientType == undefined) ? '' : this.massEmail.NonHouseholdRecipientType;\r\n this.massEmail.IncludeAll = (this.massEmail.IncludeAll == null || this.massEmail.IncludeAll == undefined) ? false : this.massEmail.IncludeAll;\r\n if (this.loginSettings.MassEmailContactsGrouped == true) {\r\n this.householdParentLabel = 'Household Parents';\r\n } else {\r\n this.householdParentLabel = 'Students Contacts';\r\n }\r\n\r\n if (this.massEmail.ReferringPage == 'My Classes') {\r\n this.tabChange(0);\r\n }\r\n else if (this.massEmail.ReferringPage == 'Student Teams') {\r\n this.tabNames = ['Team View', 'Students', 'Additional'];\r\n this.tabChange(0);\r\n }\r\n else if (this.massEmail.ReferringPage == 'Student Lists') {\r\n this.tabNames = ['List View', 'Students', 'Additional'];\r\n this.tabChange(0);\r\n }\r\n else {\r\n this.tabNames = ['Students', 'Additional'];\r\n this.tabChange(0);\r\n }\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (!this.selectedStudents[n].IsSelected) {\r\n this.massEmail.selectedStudentsCheckAll = false;\r\n }\r\n }\r\n if (this.pageHeader != undefined) {\r\n this.pageHeaderHeight = this.pageHeader.nativeElement.offsetHeight;\r\n }\r\n if (this.tab && this.tab.nativeElement != undefined) {\r\n this.tabHeight = this.tab.nativeElement.offsetHeight;\r\n }\r\n if (this.tblControls != undefined) {\r\n this.tblControlsHeight = this.tblControls.nativeElement.offsetHeight;\r\n }\r\n if (this.pageFooter != undefined) {\r\n this.pageFooterHeight = this.pageFooter.nativeElement.offsetHeight;\r\n }\r\n this.classViewDataSource.expandAll(false);\r\n this.teamViewDataSource.expandAll(false);\r\n this.listViewDataSource.expandAll(false);\r\n this.selectedContactType = this.massEmail.SelectedContactTypes;\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.resizeGrid();\r\n }\r\n\r\n loadDataTable() {\r\n this.classViewDataSource.data = [];\r\n this.teamViewDataSource.data = [];\r\n this.listViewDataSource.data = [];\r\n if (this.selectedTab == 'Class View') {\r\n for (let i = 0; i < this.selectedClasses.length; i++) {\r\n this.selectedClasses[i].Students = [];\r\n for (let j = 0; j < this.selectedStudents.length; j++) {\r\n for (let k = 0; k < this.selectedStudents[j].SubjectSections.length; k++) {\r\n if ((this.loginSettings.V10 && this.selectedStudents[j].SubjectSections[k] == this.selectedClasses[i].SSEC_ID) || (!this.loginSettings.V10 && this.selectedStudents[j].SubjectSections[k] == this.selectedClasses[i].Id)) {\r\n this.selectedClasses[i].Students.push(this.selectedStudents[j]);\r\n }\r\n }\r\n }\r\n }\r\n this.classViewDataSource.data = this.selectedClasses;\r\n const tempSVdataSource: MassEmailStudent[] = [];\r\n this.studentViewDataSource.data = tempSVdataSource;\r\n setTimeout(() => this.classViewDataSource.sort = this.cvSort);\r\n }\r\n else if (this.selectedTab == 'Team View') {\r\n for (let i = 0; i < this.selectedStudentTeams.length; i++) {\r\n this.selectedStudentTeams[i].Students = [];\r\n for (let j = 0; j < this.selectedStudents.length; j++) {\r\n for (let k = 0; k < this.selectedStudents[j].StudentTeams.length; k++) {\r\n if (this.selectedStudents[j].StudentTeams[k] == this.selectedStudentTeams[i].Id) {\r\n this.selectedStudentTeams[i].Students.push(this.selectedStudents[j]);\r\n }\r\n }\r\n }\r\n }\r\n this.teamViewDataSource.data = this.selectedStudentTeams;\r\n const tempSVdataSource: MassEmailStudent[] = [];\r\n this.studentViewDataSource.data = tempSVdataSource;\r\n setTimeout(() => this.teamViewDataSource.sort = this.tvSort);\r\n }\r\n else if (this.selectedTab == 'List View') {\r\n for (let i = 0; i < this.selectedStudentLists.length; i++) {\r\n this.selectedStudentLists[i].MassEmailStudents = [];\r\n for (let j = 0; j < this.selectedStudents.length; j++) {\r\n for (let k = 0; k < this.selectedStudents[j].StudentLists.length; k++) {\r\n if (this.selectedStudents[j].StudentLists[k] == this.selectedStudentLists[i].ID) {\r\n this.selectedStudentLists[i].MassEmailStudents.push(this.selectedStudents[j]);\r\n }\r\n }\r\n }\r\n }\r\n this.listViewDataSource.data = this.selectedStudentLists;\r\n const tempSVdataSource: MassEmailStudent[] = [];\r\n this.studentViewDataSource.data = tempSVdataSource;\r\n setTimeout(() => this.listViewDataSource.sort = this.lvSort);\r\n }\r\n else {\r\n this.studentViewDataSource.data = this.selectedStudents;\r\n this.studentViewDataSource.sortingDataAccessor = (item: any, property: string) => {\r\n if (property == 'Course') {\r\n return item['SubjectSections'];\r\n }\r\n // Default sorting\r\n else {\r\n return this.studentViewDataSource.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n const tempCVdataSource: ClassroomSummary[] = [];\r\n this.classViewDataSource.data = tempCVdataSource;\r\n setTimeout(() => this.studentViewDataSource.sort = this.svSort);\r\n }\r\n }\r\n\r\n validate() {\r\n const studentsWithoutRecipients: MassEmailStudent[] = [];\r\n if (this.massEmail.Students.filter(x => x.IsSelected == true).length == 0) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'Either select at least one student or click Cancel to abandon the Mass Email process.';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n if (!this.loginSettings.MassEmailContactsGrouped) { // v10\r\n if ((this.massEmail.StudentRecipientType == null || this.massEmail.StudentRecipientType == undefined || this.massEmail.StudentRecipientType == '') &&\r\n (this.massEmail.HouseholdRecipientType == null || this.massEmail.HouseholdRecipientType == undefined || this.massEmail.HouseholdRecipientType == '') &&\r\n (this.massEmail.SendEmailToTeachers == null || this.massEmail.SendEmailToTeachers == undefined || this.massEmail.SendEmailToTeachers == false) &&\r\n (this.massEmail.SendEmailToTeamStaffMembers == null || this.massEmail.SendEmailToTeamStaffMembers == undefined || this.massEmail.SendEmailToTeamStaffMembers == false)) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'Select at least one recipient group to whom the email should be sent.';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n } else if (this.massEmail.HouseholdRecipientType != null && this.massEmail.HouseholdRecipientType != '') {\r\n if (!this.selectedContactType) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'If BCC is checked, at least one Contact Type must be selected.';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n }\r\n } else { // V9\r\n if (this.massEmail.ReferringPage == 'My Classes' || this.massEmail.ReferringPage == 'Student Teams' || this.massEmail.ReferringPage == 'Student Lists') {\r\n const fieldName: string = this.massEmail.ReferringPage == 'Student Teams' ? 'TeamViewTab' : this.massEmail.ReferringPage == 'Student Lists' ? 'ListViewTab' : 'ClassViewTab';\r\n if ((this.massEmail.StudentRecipientType == null || this.massEmail.StudentRecipientType == undefined || this.massEmail.StudentRecipientType == '' || this.massEmail.StudentRecipientType == 'Do Not Include') &&\r\n (this.massEmail.HouseholdRecipientType == null || this.massEmail.HouseholdRecipientType == undefined || this.massEmail.HouseholdRecipientType == '' || this.massEmail.HouseholdRecipientType == 'Do Not Include') &&\r\n (this.massEmail.NonHouseholdRecipientType == null || this.massEmail.NonHouseholdRecipientType == undefined || this.massEmail.NonHouseholdRecipientType == '' || this.massEmail.NonHouseholdRecipientType == 'Do Not Include') &&\r\n (this.massEmail.SendEmailToTeachers == null || this.massEmail.SendEmailToTeachers == undefined || this.massEmail.SendEmailToTeachers == false)) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'Select at least one recipient group to whom the email should be sent.';\r\n this.error.fieldName = fieldName;\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n }\r\n }\r\n if (Object.keys(this.massEmail.AdditionalRecipients).length > 0) {\r\n const additionalTabIndex = this.tabNames.indexOf('Additional');\r\n const re = new RegExp('^(([a-zA-Z0-9_\\\\-\\\\.]+)@([a-zA-Z0-9_\\\\-\\\\.]+)\\\\.([a-zA-Z]{2,5}){1,25}(($)|( *;+ *$)|( *;+ *(?=[a-zA-Z0-9_\\\\-\\\\.]))))*$');\r\n // Validate the email string\r\n if (this.massEmail.AdditionalRecipients['to'] && !re.test(this.massEmail.AdditionalRecipients.to)) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'One or more emails in the \"To:\" recipient field is invalid';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n if (this.massEmail.AdditionalRecipients['cc'] && !re.test(this.massEmail.AdditionalRecipients.cc)) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'One or more emails in the \"CC:\" recipient field is invalid';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n if (this.massEmail.AdditionalRecipients['bcc'] && !re.test(this.massEmail.AdditionalRecipients.bcc)) {\r\n this.error = new ErrorList();\r\n this.error.errorMsg = 'One or more emails in the \"BCC:\" recipient field is invalid';\r\n this.error.fieldName = '';\r\n this.error.fieldRef = null;\r\n this.errorList.push(this.error);\r\n this.massEmailErrorCount += 1;\r\n }\r\n }\r\n if (this.errorList.length > 0) {\r\n const errors = this.errorList.map(e => e.errorMsg);\r\n if (errors.find(errorString => errorString == 'Select at least one recipient group to whom the email should be sent.')) {\r\n this.tabChange(0); // Class view tab\r\n } else if (errors.find(errorString => errorString == 'If BCC is checked, at least one Contact Type must be selected.')) {\r\n this.tabChange(0); // Class view tab\r\n } else if (errors.find(errorString => errorString == 'Either select at least one student or click Cancel to abandon the Mass Email process.')) {\r\n const studentTab = ((this.massEmail.ReferringPage == 'My Classes') ? 'Student View' : 'Students');\r\n this.tabChange(this.tabNames.indexOf(studentTab)); // Student View tab || Students tab\r\n } else if (errors.find(errorString => errorString == 'One or more emails in the \"To:\" recipient field is invalid')) {\r\n this.tabChange(this.tabNames.indexOf('Additional')); // Additional Tab\r\n } else if (errors.find(errorString => errorString == 'One or more emails in the \"CC:\" recipient field is invalid')) {\r\n this.tabChange(this.tabNames.indexOf('Additional')); // Additional Tab\r\n } else if (errors.find(errorString => errorString == 'One or more emails in the \"BCC:\" recipient field is invalid')) {\r\n this.tabChange(this.tabNames.indexOf('Additional')); // Additional Tab\r\n } else {\r\n this.tabChange(0); // Class view tab\r\n }\r\n }\r\n if (this.massEmailErrorCount == 0) {\r\n this.massEmail.Recipients = [];\r\n for (let s = 0; s < this.selectedStudents.length; s++) {\r\n if (this.selectedStudents[s].IsSelected) {\r\n const studentSelectedRecipients: Recipient = new Recipient();\r\n studentSelectedRecipients.StudentID = this.selectedStudents[s].Id;\r\n\r\n if (this.loginSettings.V10) {\r\n if (this.massEmail.HouseholdRecipientType == 'BCC') {\r\n for (let c = 0; c < this.selectedStudents[s].StudentContacts.length; c++) {\r\n if (this.selectedContactType.filter(x => x == '(All)').length > 0) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n } else if (this.selectedContactType.filter(x => x == '(All Guardians)').length > 0 && this.selectedStudents[s].StudentContacts[c].IsGuardian) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n } else if (this.selectedContactType.filter(x => x == '(All Primary Contacts)').length > 0 && this.selectedStudents[s].StudentContacts[c].IsPrimaryParent) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n } else if (this.selectedContactType.filter(x => x == '(All Primary Contact who are Guardians)').length > 0 && this.selectedStudents[s].StudentContacts[c].IsGuardian && this.selectedStudents[s].StudentContacts[c].IsPrimaryParent) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n } else if (this.selectedContactType.filter(x => x == this.selectedStudents[s].StudentContacts[c].Relationship).length > 0) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n }\r\n }\r\n }\r\n } else {\r\n for (let c = 0; c < this.selectedStudents[s].StudentContacts.length; c++) {\r\n if (this.massEmail.HouseholdRecipientType == 'BCC' && this.selectedStudents[s].StudentContacts[c].Relationship == 'Household Parent') {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n } else if (this.massEmail.NonHouseholdRecipientType == 'BCC' && this.selectedStudents[s].StudentContacts[c].Relationship == 'Non-Resident Parent' && (this.massEmail.IncludeAll == true || this.selectedStudents[s].StudentContacts[c].RequestsMailings == true)) {\r\n studentSelectedRecipients.BCC.push(this.selectedStudents[s].StudentContacts[c]);\r\n }\r\n }\r\n }\r\n const recipientInfo: StudentContact = new StudentContact();\r\n recipientInfo.ID = this.selectedStudents[s].Id;\r\n recipientInfo.Email = this.selectedStudents[s].Email;\r\n recipientInfo.LastName = this.selectedStudents[s].LastName;\r\n recipientInfo.FirstName = this.selectedStudents[s].FirstName;\r\n recipientInfo.Relationship = 'Student';\r\n recipientInfo.FirstName = this.selectedStudents[s].FirstName;\r\n recipientInfo.LastName = this.selectedStudents[s].LastName;\r\n if (this.massEmail.StudentRecipientType == 'To' && recipientInfo.Email != '') {\r\n studentSelectedRecipients.To.push(recipientInfo);\r\n } else if (this.massEmail.StudentRecipientType == 'CC' && recipientInfo.Email != '') {\r\n studentSelectedRecipients.CC.push(recipientInfo);\r\n } else if (this.massEmail.StudentRecipientType == 'BCC' && recipientInfo.Email != '') {\r\n studentSelectedRecipients.BCC.push(recipientInfo);\r\n }\r\n if (studentSelectedRecipients.To.length == 0 && studentSelectedRecipients.CC.length == 0 && studentSelectedRecipients.BCC.length == 0) {\r\n studentsWithoutRecipients.push(this.selectedStudents[s]);\r\n }\r\n this.massEmail.Recipients.push(studentSelectedRecipients);\r\n }\r\n }\r\n if (this.massEmail.SendEmailToTeachers == true) {\r\n const classIds = [];\r\n for (let n = 0; n < this.selectedClasses.length; n++) {\r\n if (this.selectedClasses[n].IsSelectedForMassEmail == true) {\r\n if (this.loginSettings.V10) {\r\n classIds.push(this.selectedClasses[n].SSEC_ID);\r\n } else {\r\n classIds.push(this.selectedClasses[n].Id);\r\n }\r\n\r\n }\r\n }\r\n this.massEmailService.getTeacherRecipientsForMassEmail(classIds).subscribe(results => {\r\n for (let t = 0; t < results.length; t++) {\r\n if (this.loginSettings.V10) {\r\n if (results[t].To == null) {\r\n results[t].To = [];\r\n }\r\n if (results[t].CC == null) {\r\n results[t].CC = [];\r\n }\r\n if (results[t].BCC == null) {\r\n results[t].BCC = [];\r\n }\r\n this.massEmail.Recipients.push(results[t]);\r\n }\r\n else {\r\n const teacherSelectedRecipients: Recipient = new Recipient();\r\n teacherSelectedRecipients.StudentID = results[t].StudentID;\r\n if (results[t].To == null) {\r\n results[t].To = [];\r\n } else {\r\n results[t].To.forEach(to => {\r\n const recipientInfo: StudentContact = new StudentContact();\r\n recipientInfo.ID = to.ID;\r\n recipientInfo.Email = to.Email;\r\n recipientInfo.LastName = to.LastName;\r\n recipientInfo.FirstName = to.FirstName;\r\n recipientInfo.Relationship = to.Relationship;\r\n teacherSelectedRecipients.To.push(recipientInfo);\r\n });\r\n }\r\n\r\n if (results[t].CC == null) {\r\n results[t].CC = [];\r\n } else {\r\n results[t].CC.forEach(cc => {\r\n const recipientInfo: StudentContact = new StudentContact();\r\n recipientInfo.ID = cc.ID;\r\n recipientInfo.Email = cc.Email;\r\n recipientInfo.LastName = cc.LastName;\r\n recipientInfo.FirstName = cc.FirstName;\r\n recipientInfo.Relationship = cc.Relationship;\r\n teacherSelectedRecipients.CC.push(recipientInfo);\r\n });\r\n }\r\n\r\n if (results[t].BCC == null) {\r\n results[t].BCC = [];\r\n } else {\r\n results[t].BCC.forEach(bcc => {\r\n const recipientInfo: StudentContact = new StudentContact();\r\n recipientInfo.ID = bcc.ID;\r\n recipientInfo.Email = bcc.Email;\r\n recipientInfo.LastName = bcc.LastName;\r\n recipientInfo.FirstName = bcc.FirstName;\r\n recipientInfo.Relationship = bcc.Relationship;\r\n teacherSelectedRecipients.CC.push(recipientInfo);\r\n });\r\n }\r\n this.massEmail.Recipients.push(teacherSelectedRecipients);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (this.massEmail.SendEmailToTeamStaffMembers == true) {\r\n const studentIds = [];\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (this.loginSettings.V10) {\r\n studentIds.push(this.selectedStudents[n].Id);\r\n }\r\n }\r\n this.massEmailService.GetTeamStaffMemberRecipientsForMassEmail(studentIds, this.defaultYear.Id, this.defaultYear.SchoolID).subscribe(results => {\r\n for (let t = 0; t < results.length; t++) {\r\n if (this.loginSettings.V10) {\r\n if (results[t].To == null) {\r\n results[t].To = [];\r\n }\r\n if (results[t].CC == null) {\r\n results[t].CC = [];\r\n }\r\n if (results[t].BCC == null) {\r\n results[t].BCC = [];\r\n }\r\n this.massEmail.Recipients.push(results[t]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (studentsWithoutRecipients.length > 0) {\r\n this.noEmailWarningDialogRef = this.dialog.open(NoEmailWarningComponent, {\r\n disableClose: true,\r\n minWidth: 630,\r\n data: studentsWithoutRecipients\r\n });\r\n this.noEmailWarningDialogRef.afterClosed().subscribe((retValNoEmailWarning: any) => {\r\n if (retValNoEmailWarning == 'Continue was clicked') {\r\n this.retValSelectRecipient.massEmail = this.massEmail;\r\n this.retValSelectRecipient.Message = 'Continue';\r\n this.massEmail.recipientsSelected = true;\r\n this.selectRecipientDialogRef.close(this.retValSelectRecipient);\r\n }\r\n });\r\n } else {\r\n this.retValSelectRecipient.massEmail = this.massEmail;\r\n this.retValSelectRecipient.Message = 'Continue';\r\n this.massEmail.recipientsSelected = true;\r\n this.selectRecipientDialogRef.close(this.retValSelectRecipient);\r\n }\r\n }\r\n }\r\n\r\n selectedStudentsCheckAllClick() {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n if (this.selectedStudents[i].IsSelected != this.massEmail.selectedStudentsCheckAll) {\r\n this.selectedStudents[i].IsSelected = this.massEmail.selectedStudentsCheckAll;\r\n if (this.massEmail.ReferringPage == 'My Classes') {\r\n this.selectedStudents[i].SelectedClasses = [];\r\n for (let n = 0; n < this.selectedStudents[i].SubjectSections.length; n++) {\r\n this.selectedStudents[i].SelectedClasses[this.selectedStudents[i].SubjectSections[n]] = this.massEmail.selectedStudentsCheckAll;\r\n if (this.massEmail.selectedStudentsCheckAll == true) {\r\n if (this.loginSettings.V10) {\r\n const courseObj = this.selectedClasses.find(c => c.SSEC_ID == this.selectedStudents[i].SubjectSections[n]);\r\n if (courseObj != null) {\r\n courseObj.IsSelectedForMassEmail = this.massEmail.selectedStudentsCheckAll;\r\n }\r\n } else {\r\n const courseObj = this.selectedClasses.find(c => c.Id == this.selectedStudents[i].SubjectSections[n]);\r\n if (courseObj != null) {\r\n courseObj.IsSelectedForMassEmail = this.massEmail.selectedStudentsCheckAll;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n for (let x = 0; x < this.selectedStudents.length; x++) {\r\n this.selectedStudents[x].IsSelected = this.massEmail.selectedStudentsCheckAll;\r\n }\r\n }\r\n\r\n closeModalClick() {\r\n this.selectRecipientDialogRef.close('Close Clicked');\r\n }\r\n\r\n studentClick(student) {\r\n this.massEmail.selectedStudentsCheckAll = this.selectedStudents.filter(x => x.IsSelected != true) == null;\r\n if (this.massEmail.ReferringPage == 'My Classes') {\r\n if (student.IsSelected) {\r\n for (let i = 0; i < student.SubjectSections.length; i++) {\r\n student.SelectedClasses[student.SubjectSections[i]] = true;\r\n if (this.loginSettings.V10) {\r\n const courseObj = this.selectedClasses.filter(x => x.SSEC_ID == student.SubjectSections[i])[0];\r\n courseObj.IsSelectedForMassEmail = true;\r\n } else {\r\n const courseObj = this.selectedClasses.filter(x => x.Id == student.SubjectSections[i])[0];\r\n courseObj.IsSelectedForMassEmail = true;\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < student.SubjectSections.length; i++) {\r\n student.SelectedClasses[student.SubjectSections[i]] = false;\r\n\r\n }\r\n }\r\n }\r\n for (let x = 0; x < this.selectedStudents.length; x++) {\r\n if (this.selectedStudents[x].StudentNumber == student.StudentNumber) {\r\n this.selectedStudents[x] = student;\r\n }\r\n }\r\n }\r\n\r\n selectedClassesCheckAllClick() {\r\n\r\n for (let i = 0; i < this.selectedClasses.length; i++) {\r\n if (this.selectedClasses[i].IsSelectedForMassEmail != this.massEmail.selectedClassesCheckAll) {\r\n this.selectedClasses[i].IsSelectedForMassEmail = this.massEmail.selectedClassesCheckAll;\r\n this.selectedClasses[i].classStudentsCheckAll = this.massEmail.selectedClassesCheckAll;\r\n }\r\n }\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n this.selectedStudents[n].IsSelected = this.massEmail.selectedClassesCheckAll;\r\n for (let x = 0; x < this.selectedStudents[n].SubjectSections.length; x++) {\r\n this.selectedStudents[n].SelectedClasses[this.selectedStudents[n].SubjectSections[x]] = this.massEmail.selectedClassesCheckAll;\r\n }\r\n }\r\n }\r\n\r\n classClick(course: ClassroomSummary) {\r\n this.massEmail.selectedClassesCheckAll = false;\r\n course.classStudentsCheckAll = course.IsSelectedForMassEmail;\r\n if (course.IsSelectedForMassEmail) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n if (this.loginSettings.V10) {\r\n if (this.selectedStudents[i].SubjectSections.find(x => x == course.SSEC_ID) != null) {\r\n this.selectedStudents[i].SelectedClasses[course.SSEC_ID] = true;\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n } else {\r\n if (this.selectedStudents[i].SubjectSections.find(x => x == course.Id) != null) {\r\n this.selectedStudents[i].SelectedClasses[course.Id] = true;\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (this.loginSettings.V10 && (this.selectedStudents[n].SubjectSections.find(x => x == course.SSEC_ID) != null)) {\r\n this.selectedStudents[n].SelectedClasses[course.SSEC_ID] = false;\r\n } else if (this.selectedStudents[n].SubjectSections.find(x => x == course.Id) != null) {\r\n this.selectedStudents[n].SelectedClasses[course.Id] = false;\r\n }\r\n let hasClasses = false;\r\n if (this.selectedStudents[n].SelectedClasses.find(x => x == true) != null) {\r\n hasClasses = true;\r\n }\r\n this.selectedStudents[n].IsSelected = hasClasses;\r\n }\r\n }\r\n const checkedClassess: ClassroomSummary[] = this.selectedClasses.filter(x => x.IsSelectedForMassEmail == true);\r\n if (checkedClassess.length == this.selectedClasses.length) {\r\n this.massEmail.selectedClassesCheckAll = true;\r\n } else {\r\n this.massEmail.selectedClassesCheckAll = false;\r\n }\r\n }\r\n\r\n selectedTeamsCheckAllClick() {\r\n for (let i = 0; i < this.selectedStudentTeams.length; i++) {\r\n if (this.selectedStudentTeams[i].IsSelectedForMassEmail != this.massEmail.selectedTeamsCheckAll) {\r\n this.selectedStudentTeams[i].IsSelectedForMassEmail = this.massEmail.selectedTeamsCheckAll;\r\n this.selectedStudentTeams[i].teamStudentsCheckAll = this.massEmail.selectedTeamsCheckAll;\r\n }\r\n }\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n this.selectedStudents[n].IsSelected = this.massEmail.selectedTeamsCheckAll;\r\n for (let x = 0; x < this.selectedStudents[n].StudentTeams.length; x++) {\r\n this.selectedStudents[n].SelectedTeams[this.selectedStudents[n].StudentTeams[x]] = this.massEmail.selectedTeamsCheckAll;\r\n }\r\n }\r\n }\r\n\r\n teamClick(team: StudentTeams) {\r\n this.massEmail.selectedTeamsCheckAll = false;\r\n team.teamStudentsCheckAll = team.IsSelectedForMassEmail;\r\n if (team.IsSelectedForMassEmail) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n if (this.selectedStudents[i].StudentTeams.find(x => x == team.Id) != null) {\r\n this.selectedStudents[i].SelectedTeams[team.Id] = true;\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n } else {\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (this.selectedStudents[n].StudentTeams.find(x => x == team.Id) != null) {\r\n this.selectedStudents[n].SelectedTeams[team.Id] = false;\r\n }\r\n let hasTeams = false;\r\n if (this.selectedStudents[n].SelectedTeams.find(x => x == true) != null) {\r\n hasTeams = true;\r\n }\r\n this.selectedStudents[n].IsSelected = hasTeams;\r\n }\r\n }\r\n const checkedTeams: StudentTeams[] = this.selectedStudentTeams.filter(x => x.IsSelectedForMassEmail == true);\r\n if (checkedTeams.length == this.selectedStudentTeams.length) {\r\n this.massEmail.selectedTeamsCheckAll = true;\r\n } else {\r\n this.massEmail.selectedTeamsCheckAll = false;\r\n }\r\n }\r\n\r\n\r\n selectedListsCheckAllClick() {\r\n for (let i = 0; i < this.selectedStudentLists.length; i++) {\r\n if (this.selectedStudentLists[i].IsSelectedForMassEmail != this.massEmail.selectedListsCheckAll) {\r\n this.selectedStudentLists[i].IsSelectedForMassEmail = this.massEmail.selectedListsCheckAll;\r\n this.selectedStudentLists[i].listStudentsCheckAll = this.massEmail.selectedListsCheckAll;\r\n }\r\n }\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n this.selectedStudents[n].IsSelected = this.massEmail.selectedListsCheckAll;\r\n for (let x = 0; x < this.selectedStudents[n].StudentLists.length; x++) {\r\n this.selectedStudents[n].SelectedLists[this.selectedStudents[n].StudentLists[x]] = this.massEmail.selectedListsCheckAll;\r\n }\r\n }\r\n }\r\n\r\n listClick(list: StudentList) {\r\n this.massEmail.selectedListsCheckAll = false;\r\n list.listStudentsCheckAll = list.IsSelectedForMassEmail;\r\n if (list.IsSelectedForMassEmail) {\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n if (this.selectedStudents[i].StudentLists.find(x => x == list.ID) != null) {\r\n this.selectedStudents[i].SelectedLists[list.ID] = true;\r\n this.selectedStudents[i].IsSelected = true;\r\n }\r\n }\r\n } else {\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (this.selectedStudents[n].StudentLists.find(x => x == list.ID) != null) {\r\n this.selectedStudents[n].SelectedLists[list.ID] = false;\r\n }\r\n let hasLists = false;\r\n if (this.selectedStudents[n].SelectedLists.find(x => x == true) != null) {\r\n hasLists = true;\r\n }\r\n this.selectedStudents[n].IsSelected = hasLists;\r\n }\r\n }\r\n const checkedLists: StudentList[] = this.selectedStudentLists.filter(x => x.IsSelectedForMassEmail == true);\r\n if (checkedLists.length == this.selectedStudentLists.length) {\r\n this.massEmail.selectedListsCheckAll = true;\r\n } else {\r\n this.massEmail.selectedListsCheckAll = false;\r\n }\r\n }\r\n\r\n contactTypeClick() {\r\n this.massEmail.ContactTypes.sort(function (a, b) {\r\n const labelA = a.label.replace('(', '').replace(')', '');\r\n const labelB = b.label.replace('(', '').replace(')', '');\r\n if (a.label == '(All)') {\r\n return -1;\r\n }\r\n if (b.label == '(All)') {\r\n return 1;\r\n }\r\n if (labelA < labelB) {\r\n return -1;\r\n }\r\n if (labelA > labelB) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n const tmp = [];\r\n let i = this.massEmail.ContactTypes.length;\r\n while (i--) {\r\n if (this.selectedContactType.filter(x => x == this.massEmail.ContactTypes[i].label).length > 0) {\r\n tmp.push(this.massEmail.ContactTypes[i]);\r\n this.massEmail.ContactTypes.splice(i, 1);\r\n }\r\n }\r\n for (let x = 0; x < tmp.length; x++) {\r\n this.massEmail.ContactTypes.splice(0, 0, tmp[x]);\r\n }\r\n }\r\n\r\n householdRecipientTypeChanged() {\r\n\r\n }\r\n\r\n tabChange(selectionIndex: number) {\r\n const tab = this.tabNames[selectionIndex];\r\n switch (tab) {\r\n case 'Class View':\r\n this.massEmail.selectedClassesCheckAll = true;\r\n for (let i = 0; i < this.selectedClasses.length; i++) {\r\n this.selectedClasses[i].classStudentsCheckAll = true;\r\n if (!this.selectedClasses[i].IsSelectedForMassEmail) {\r\n this.massEmail.selectedClassesCheckAll = false;\r\n }\r\n for (let s = 0; s < this.selectedStudents.length; s++) {\r\n if (this.loginSettings.V10) {\r\n const isSSECExists = this.selectedStudents[s].SubjectSections.filter(x => x == this.selectedClasses[i].SSEC_ID);\r\n if (isSSECExists != null && isSSECExists.length > 0) {\r\n if (this.selectedStudents[s].SelectedClasses[this.selectedClasses[i].SSEC_ID] != true) {\r\n this.selectedClasses[i].classStudentsCheckAll = false;\r\n break;\r\n }\r\n }\r\n } else {\r\n const isSSECExists = this.selectedStudents[s].SubjectSections.filter(x => x == this.selectedClasses[i].Id);\r\n if (isSSECExists != null && isSSECExists.length > 0) {\r\n if (this.selectedStudents[s].SelectedClasses[this.selectedClasses[i].Id] != true) {\r\n this.selectedClasses[i].classStudentsCheckAll = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'Team View':\r\n this.massEmail.selectedTeamsCheckAll = true;\r\n for (let i = 0; i < this.selectedStudentTeams.length; i++) {\r\n this.selectedStudentTeams[i].teamStudentsCheckAll = true;\r\n if (!this.selectedStudentTeams[i].IsSelectedForMassEmail) {\r\n this.massEmail.selectedTeamsCheckAll = false;\r\n }\r\n for (let s = 0; s < this.selectedStudents.length; s++) {\r\n const isTeamExists = this.selectedStudents[s].StudentTeams.filter(x => x == this.selectedStudentTeams[i].Id);\r\n if (isTeamExists != null && isTeamExists.length > 0) {\r\n if (this.selectedStudents[s].SelectedTeams[this.selectedStudentTeams[i].Id] != true) {\r\n this.selectedStudentTeams[i].teamStudentsCheckAll = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'List View':\r\n this.massEmail.selectedListsCheckAll = true;\r\n for (let i = 0; i < this.selectedStudentLists.length; i++) {\r\n this.selectedStudentLists[i].listStudentsCheckAll = true;\r\n if (!this.selectedStudentLists[i].IsSelectedForMassEmail) {\r\n this.massEmail.selectedListsCheckAll = false;\r\n }\r\n for (let s = 0; s < this.selectedStudents.length; s++) {\r\n const isListExists = this.selectedStudents[s].StudentLists.filter(x => x == this.selectedStudentLists[i].ID);\r\n if (isListExists != null && isListExists.length > 0) {\r\n if (this.selectedStudents[s].SelectedLists[this.selectedStudentLists[i].ID] != true) {\r\n this.selectedStudentLists[i].listStudentsCheckAll = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'Student View':\r\n this.massEmail.selectedStudentsCheckAll = true;\r\n this.test = this.selectedClasses;\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n if (!this.selectedStudents[n].IsSelected) {\r\n this.massEmail.selectedStudentsCheckAll = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n this.tabIndex.emit(selectionIndex);\r\n this.selectedTab = tab;\r\n this.loadDataTable();\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n if (this.selectedTab == 'Class View') {\r\n this.classViewDataSource.toggleExpanded(row);\r\n } else if (this.selectedTab == 'Team View') {\r\n this.teamViewDataSource.toggleExpanded(row);\r\n }\r\n else if (this.selectedTab == 'List View') {\r\n this.listViewDataSource.toggleExpanded(row);\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n if (this.selectedTab == 'Class View') {\r\n return this.classViewDataSource.checkExpanded(row);\r\n }\r\n else if (this.selectedTab == 'Team View') {\r\n return this.teamViewDataSource.checkExpanded(row);\r\n }\r\n else if (this.selectedTab == 'List View') {\r\n return this.listViewDataSource.checkExpanded(row);\r\n }\r\n return null;\r\n }\r\n\r\n nextClick() {\r\n this.errorList = [];\r\n this.massEmailErrorCount = 0;\r\n this.massEmail.Recipients = [];\r\n const deselectedStudents: string[] = [];\r\n for (let n = 0; n < this.selectedStudents.length; n++) {\r\n let hasSelectedClasses = false;\r\n let hasUnselectedClasses = false;\r\n if (this.selectedStudents[n].SubjectSections != null) {\r\n for (let z = 0; z < this.selectedStudents[n].SubjectSections.length; z++) {\r\n if (this.selectedStudents[n].SelectedClasses[this.selectedStudents[n].SubjectSections[z]] == true) {\r\n hasSelectedClasses = true;\r\n } else if (this.selectedStudents[n].SelectedClasses[this.selectedStudents[n].SubjectSections[z]] == false) {\r\n hasUnselectedClasses = true;\r\n }\r\n }\r\n }\r\n if (hasSelectedClasses == true && hasUnselectedClasses == true) {\r\n deselectedStudents.push(this.selectedStudents[n].Name);\r\n }\r\n }\r\n if (deselectedStudents.length > 0) {\r\n this.unselectedWarningDialogRef = this.dialog.open(UnselectedWarningComponent, {\r\n width: '600px',\r\n height: '250px',\r\n disableClose: true,\r\n data: { object: deselectedStudents }\r\n });\r\n this.unselectedWarningDialogRef.afterClosed().subscribe((retValUnselectWarning: any) => {\r\n if (retValUnselectWarning == 'Continue was clicked') {\r\n this.validate();\r\n }\r\n });\r\n } else {\r\n this.validate();\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.retValSelectRecipient.Message = 'Cancel';\r\n this.dialogBox.close();\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n if (this.selectedTab == 'Class View') {\r\n this.classViewDataSource.expandAll(expand);\r\n }\r\n else if (this.selectedTab == 'Team View') {\r\n this.teamViewDataSource.expandAll(expand);\r\n }\r\n else if (this.selectedTab == 'List View') {\r\n this.listViewDataSource.expandAll(expand);\r\n } else {\r\n this.studentViewDataSource.expandAll(expand);\r\n }\r\n }\r\n\r\n backClick() {\r\n this.retValSelectRecipient.Message = 'Back';\r\n this.massEmailService.isBackClick = true;\r\n this.dialogBox.close();\r\n }\r\n\r\n resizeGrid() {\r\n setTimeout(() => {\r\n this.gridHeight = window.innerHeight - 300;\r\n }, 0);\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n this.resizeGrid();\r\n }\r\n\r\n matTriggerValue() {\r\n if (this.contactTypes.value.length == this.massEmail.ContactTypes.length) {\r\n return '(All)';\r\n } else if (this.contactTypes.value.length > 1) {\r\n return 'Multiple Selected';\r\n } else {\r\n return this.contactTypes.value[0];\r\n }\r\n }\r\n\r\n studentClassFilter(subjectSectionIds) {\r\n return function (course) {\r\n for (let i = 0; i < subjectSectionIds.length; i++) {\r\n if ((this.LoginSettings.V10 && subjectSectionIds[i] == course.SSEC_ID) || (!this.LoginSettings.V10 && subjectSectionIds[i] == course.Id)) {\r\n return true;\r\n }\r\n // return true;\r\n }\r\n return false;\r\n };\r\n }\r\n\r\n testContactType(obj) {\r\n this.errorList = [];\r\n if (this.selectedContactType.length == 0) {\r\n this.errorList = [];\r\n this.errorList.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'If BCC is checked, at least one Contact Type must be selected.'\r\n });\r\n }\r\n if (obj.label == '(All)') {\r\n if (this.selectedContactType.indexOf(obj.label) >= 0) {\r\n this.selectedContactType = [];\r\n this.massEmail.ContactTypes.forEach(element => {\r\n this.selectedContactType.push(element.label);\r\n });\r\n } else {\r\n this.selectedContactType = [];\r\n this.errorList.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'If BCC is checked, at least one Contact Type must be selected.'\r\n });\r\n }\r\n } else {\r\n if (this.selectedContactType.length != this.massEmail.ContactTypes.length) {\r\n const idx = this.selectedContactType.indexOf('(All)');\r\n if (idx >= 0) {\r\n this.selectedContactType.splice(idx, 1);\r\n }\r\n } else {\r\n const idx = this.selectedContactType.indexOf('(All)');\r\n if (idx < 0) {\r\n this.selectedContactType.push('(All)');\r\n }\r\n }\r\n this.selectedContactType = _.cloneDeep(this.selectedContactType);\r\n }\r\n }\r\n\r\n getStudentInfoForMassEmail() {\r\n this.massEmailService.getStudentInfoForMassEmail(this.massEmail.StudentIds, this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(results => {\r\n this.massEmail.Students = results;\r\n this.massEmail.Students.forEach(element => {\r\n element.IsSelected = true;\r\n });\r\n this.massEmail.StudentIds = [];\r\n this.initialize();\r\n });\r\n }\r\n\r\n studentRecipientTypeChange(value: string) {\r\n if (value != this.massEmail.StudentRecipientType) {\r\n this.massEmail.StudentRecipientType = value;\r\n if (this.massEmail.StudentRecipientType) {\r\n this.massEmail.OneEmailPerHousehold = false;\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef, Inject } from '@angular/core';\r\n//import { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MassEmailAttachment } from '../mass-email.model';\r\n\r\n@Component({\r\n selector: 'app-mass-email-attachment',\r\n templateUrl: './mass-email-attachment.component.html'\r\n})\r\nexport class MassEmailAttachmentComponent implements OnInit {\r\n emailAttachment: MassEmailAttachment;\r\n errors: ErrorList[] = [];\r\n @ViewChild('fileInput', { read: ElementRef, static: true }) fileInputRef: ElementRef;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n ) {\r\n this.emailAttachment = new MassEmailAttachment();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n if (this.emailAttachment.FileExtension.toLowerCase() != 'pdf' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'jpg' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'png' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'txt' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'doc' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'docx' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'xls' &&\r\n this.emailAttachment.FileExtension.toLowerCase() != 'xlsx') {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'Only .txt, .doc(x), .xls(x), .pdf, .jpg, and .png files can be uploaded.'\r\n });\r\n }\r\n\r\n if (this.emailAttachment.OriginalFileName == '' || this.emailAttachment.OriginalFileName == undefined) {\r\n this.errors.push({\r\n fieldRef: this.fileInputRef,\r\n fieldName: 'File',\r\n errorMsg: 'File required.'\r\n });\r\n }\r\n }\r\n\r\n OKClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.emailAttachment.FileName = this.emailAttachment.OriginalFileName\r\n this.dialogBox.close(this.emailAttachment);\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogBox.close();\r\n }\r\n\r\n}\r\n","

Add Attachment

\r\n\r\n \r\n\r\n\r\n \r\n","

WARNING

\r\n\r\n
This email has no subject.
\r\n
This email has no content.
\r\n
\r\n\r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MassEmail } from '../mass-email.model';\r\n\r\n@Component({\r\n selector: 'app-send-emails-warning',\r\n templateUrl: './send-emails-warning.component.html'\r\n})\r\nexport class SendEmailsWarningComponent implements OnInit {\r\n massEmail: MassEmail;\r\n constructor(\r\n public sendEmailsWarningDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.massEmail = this.data.massEmailObj;\r\n }\r\n sendAnywayClick() {\r\n this.sendEmailsWarningDialogRef.close('Send Anyway Was Clicked');\r\n }\r\n cancelClick() {\r\n this.sendEmailsWarningDialogRef.close('Cancel Was Clicked');\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-job-sent-to-queue',\r\n templateUrl: './job-sent-to-queue.component.html',\r\n styles: []\r\n})\r\nexport class JobSentToQueueComponent implements OnInit, OnDestroy {\r\n\r\n dialogTitle = 'Job Sent to Queue';\r\n dialogContent = 'The report has been sent to the queue.';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n public jobSentToQueueDialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.data) {\r\n if (this.data.dialogTitle) {\r\n this.dialogTitle = this.data.dialogTitle;\r\n }\r\n if (this.data.dialogContent) {\r\n this.dialogContent = this.data.dialogContent;\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n cancelClick() {\r\n this.jobSentToQueueDialogRef.close('Close was clicked');\r\n }\r\n}\r\n","\r\n
\r\n Recipients\r\n
\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n {{recipient.name}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Type\r\n \r\n \r\n {{recipient.type}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Email\r\n \r\n {{recipient.email}}\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
","

{{dialogTitle}}

\r\n\r\n {{dialogContent}}\r\n\r\n\r\n \r\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {MatSort} from '@angular/material/sort';\r\nimport {TylerMatTableDataSource} from '../../../shared-components/angular-material/extended.class';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-view-recipients-modal',\r\n templateUrl: './view-recipients-modal.component.html',\r\n styleUrls: ['./view-recipients-modal.component.css']\r\n})\r\nexport class ViewRecipientsModalComponent implements OnInit {\r\n\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedColumns: string[] = ['name', 'type', 'email'];\r\n includeTeachers = false;\r\n includeTeamStaffMembers = false;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n v10: boolean;\r\n constructor(\r\n private dialogRef: MatDialogRef, \r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService\r\n ) {\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.data) {\r\n this.angularMatData.data = this.data.recipients;\r\n this.angularMatData.sort = this.sort;\r\n this.includeTeachers = this.data.includeTeachers;\r\n this.includeTeamStaffMembers = this.data.includeTeamStaffMembers;\r\n }\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","export class EmailRecipient {\r\n name: string;\r\n email: string;\r\n type: string;\r\n\r\n constructor({name = '', email, type}) {\r\n this.name = name;\r\n this.email = email;\r\n this.type = type;\r\n }\r\n}\r\n","import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-send-test-email',\r\n templateUrl: './send-test-email.component.html'\r\n})\r\nexport class SendTestEmailComponent implements OnInit {\r\n\r\n userEmailAddress = '';\r\n errors: ErrorList[] = [];\r\n retValSelected: any = {};\r\n emailRegexp = System.mailRegexp;\r\n @ViewChild('EmailAddress', { static: true }) emailRef: ElementRef;\r\n constructor(\r\n private userService: UserService,\r\n private dialogBox: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.userEmailAddress = _.cloneDeep(this.userService.currentUser.Email);\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n\r\n if (!this.userEmailAddress || this.userEmailAddress.length == 0 || this.userEmailAddress == '') {\r\n this.errors.push({\r\n errorMsg: 'User Email is required',\r\n fieldRef: this.emailRef,\r\n fieldName: 'EmailAddress',\r\n });\r\n }\r\n\r\n if (this.userEmailAddress && this.userEmailAddress.length > 0 && !this.userEmailAddress.match(this.emailRegexp)) {\r\n this.errors.push({\r\n errorMsg: 'Invalid Format',\r\n fieldRef: this.emailRef,\r\n fieldName: 'EmailAddress',\r\n });\r\n }\r\n }\r\n\r\n sendTestClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.retValSelected.EmailAddress = this.userEmailAddress;\r\n this.retValSelected.Message = 'SendTest';\r\n this.dialogBox.close(this.retValSelected);\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.retValSelected.Message = 'Cancel';\r\n this.dialogBox.close(this.retValSelected);\r\n }\r\n}\r\n","

Send Test Email

\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n","Mass Email from {{referringPage}}\r\n\r\n

Mass Email

\r\n
\r\n {{defaultYear.SchoolName}} - {{defaultYear.Term}}\r\n {{defaultYear.SchoolName}} - {{defaultYear.AYIdentifier}}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {{currentUser.Email}}\r\n \r\n {{(loginSettings.V10 ? 'System\\'s No-Reply Email Address' : 'Parent Notification\r\n Default \"From\" Address') + ': ' + loginSettings.DefaultEmailReplyToAddress}}\r\n \r\n \r\n \r\n  
\r\n \r\n
\r\n View Recipients\r\n
\r\n
\r\n  \r\n
\r\n \r\n \r\n \r\n  
\r\n \r\n Attachments\r\n \r\n \r\n {{attachment.OriginalFileName}}\r\n \r\n \r\n  
\r\n \r\n Create Communication Log entries\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, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog';\r\n// import { ClassroomSummary } from '../classroom-summary/models/classroom-summary.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport {\r\n MassEmail,\r\n ContactTypes,\r\n MassEmailStudent,\r\n MassEmailPreferences,\r\n Recipient\r\n} from './mass-email.model';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { LoginSettings } from '../../shared-modules/login/LoginSetting.model';\r\nimport { MassEmailService } from './mass-email.service';\r\nimport { SelectRecipientsComponent } from './select-recipients/select-recipients.component';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MassEmailAttachmentComponent } from './mass-email-attachment/mass-email-attachment.component';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { UserPreferencesWindowComponent } from '../../shared-components/user-preferences/user-preferences-window/user-preferences-window.component';\r\nimport { Portal } from '../../shared-components/portal.model';\r\nimport { SendEmailsWarningComponent } from './send-emails-warning/send-emails-warning.component';\r\nimport { JobSentToQueueComponent } from '../job-sent-to-queue/job-sent-to-queue.component';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport * as _ from 'lodash';\r\nimport { ViewRecipientsModalComponent } from './view-recipients-modal/view-recipients-modal.component';\r\nimport { EmailRecipient } from './view-recipients-modal/email-recipient';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SendTestEmailComponent } from './send-test-email/send-test-email.component';\r\nimport { StudentTeams } from '../../classroom360/student-teams/student-teams.model';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { ClassroomSummaryService } from '../../classroom360/classroom-summary/classroom-summary.service';\r\n@Component({\r\n selector: 'app-mass-email-view',\r\n templateUrl: './mass-email-view.component.html',\r\n styleUrls: ['./mass-email-view.component.css']\r\n})\r\nexport class MassEmailViewComponent implements OnInit {\r\n popUpWidth: number;\r\n popUpHeight: number;\r\n referringPage: string;\r\n massEmail: MassEmail;\r\n defaultYear: Year;\r\n currentUser: User;\r\n selectedStudents: MassEmailStudent[];\r\n selectedClasses: ClassroomSummary[];\r\n userPreferences: any;\r\n massEmailPreferences: MassEmailPreferences = new MassEmailPreferences();\r\n loginSettings: LoginSettings;\r\n public staffAssignedPortals: Portal[] = [];\r\n selectRecipiantDialogRef: MatDialogRef;\r\n massEmailAttachmentDialogRef: MatDialogRef;\r\n sendEmailsWarningDialogRef: MatDialogRef;\r\n jobSentToQueueDialogRef: MatDialogRef;\r\n userPrefDialogRef: MatDialogRef;\r\n generalConfirmationDialog: MatDialogRef;\r\n sendTestEmailDislogRef: MatDialogRef;\r\n errorList: ErrorList[] = [];\r\n errors: ErrorList[] = [];\r\n userEmailAddress = '';\r\n selectedStudentTeam: StudentTeams[] = [];\r\n selectedStudentList: StudentList[] = [];\r\n\r\n @ViewChild('attachmentFieldRef', { read: ElementRef }) attachmentFieldRef: ElementRef;\r\n @ViewChild('subjectFieldRef', { read: ElementRef, static: true }) subjectFieldRef: ElementRef;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private massEmailService: MassEmailService,\r\n private userPreferencesService: UserPreferencesService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private classroom360Service: Classroom360Service,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private dialogBox: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.currentUser = this.userService.currentUser;\r\n this.userPreferences = this.userPreferencesService;\r\n this.loginSettings = this.loginService.LoginSettings;\r\n if (this.data) {\r\n if (this.data.massEmail) {\r\n this.massEmail = this.data.massEmail;\r\n }\r\n if (this.data.portals) {\r\n this.staffAssignedPortals = this.data.portals;\r\n } else {\r\n this.staffAssignedPortals = this.classroom360Service.staffAssignedPortals;\r\n }\r\n }\r\n this.popUpHeight = window.innerHeight;\r\n this.popUpWidth = window.innerWidth;\r\n this.referringPage = this.massEmail.ReferringPage;\r\n this.massEmailService.isBackClick = false;\r\n this.initialize();\r\n }\r\n\r\n initialize() {\r\n this.massEmail.Attachments = [];\r\n this.massEmailPreferences.Signature = '';\r\n this.massEmail.Body = '';\r\n if (this.massEmail.SendEmailToTeachers == null || this.massEmail.SendEmailToTeachers == undefined) {\r\n this.massEmail.SendEmailToTeachers = false;\r\n }\r\n this.selectedStudents = [];\r\n if (this.massEmail.Students != null && this.massEmail.Students != undefined) {\r\n this.selectedStudents = this.massEmail.Students;\r\n for (let i = 0; i < this.selectedStudents.length; i++) {\r\n this.selectedStudents[i].Name = this.getStudentName(this.selectedStudents[i]);\r\n }\r\n }\r\n this.selectedClasses = [];\r\n if (this.massEmail.MassEmailClasses != null && this.massEmail.MassEmailClasses != undefined) {\r\n this.selectedClasses = this.massEmail.MassEmailClasses;\r\n }\r\n\r\n this.selectedStudentTeam = [];\r\n if (this.massEmail.MassEmailStudentTeams != null && this.massEmail.MassEmailStudentTeams != undefined) {\r\n this.selectedStudentTeam = this.massEmail.MassEmailStudentTeams;\r\n }\r\n\r\n this.selectedStudentList = [];\r\n if (this.massEmail.MassEmailStudentLists != null && this.massEmail.MassEmailStudentLists != undefined) {\r\n this.selectedStudentList = this.massEmail.MassEmailStudentLists;\r\n }\r\n\r\n this.massEmail.From = this.userPreferences.generalPreferences.EmailFrom == 'Personal' ? this.currentUser.Email : this.loginSettings.DefaultEmailReplyToAddress;\r\n this.getMassEmailPreferences();\r\n }\r\n\r\n getPageInfo() {\r\n if (this.massEmail.ReferringPage == 'My Classes') {\r\n const siteSectionIds: number[] = [];\r\n for (let i = 0; i < this.selectedClasses.length; i++) {\r\n if (this.loginSettings.V10) {\r\n siteSectionIds.push(this.selectedClasses[i].SSEC_ID);\r\n } else {\r\n siteSectionIds.push(this.selectedClasses[i].Id);\r\n }\r\n }\r\n let retrieveUnmerged = !this.loginSettings.V10 && this.classroomSummaryService.selectedView.value == '3' && this.selectedClasses.filter(c => c.MergedForGrading).length > 0;\r\n if (retrieveUnmerged) {\r\n this.classroomSummaryService.getClassesWithoutBroadcast(this.defaultYear.Id, this.defaultYear.SchoolID, 0, 1).subscribe((splitSections) => {\r\n let mergedSections = this.selectedClasses.filter(c => c.MergedForGrading);\r\n for (let section of mergedSections) {\r\n let unmergedSections = splitSections.filter(s => s.MergedGradebookSSEC_ID == section.Id);\r\n siteSectionIds.push.apply(siteSectionIds, unmergedSections.filter(s => siteSectionIds.indexOf(s.Id) == -1).map(sec => sec.Id));\r\n }\r\n this.getStudentsByClass(siteSectionIds, true, splitSections);\r\n });\r\n }\r\n else\r\n this.getStudentsByClass(siteSectionIds, false, []);\r\n }\r\n else if (this.massEmail.ReferringPage == 'Student Teams') {\r\n const studentTeamsIds: number[] = [];\r\n for (let i = 0; i < this.selectedStudentTeam.length; i++) {\r\n studentTeamsIds.push(this.selectedStudentTeam[i].Id);\r\n }\r\n this.massEmailService.getStudentsByTeams(studentTeamsIds, this.defaultYear.Id, this.defaultYear.SchoolID).subscribe(results => {\r\n this.massEmail.Students = results;\r\n this.selectedStudents = this.massEmail.Students;\r\n for (let x = 0; x < this.selectedStudents.length; x++) {\r\n this.selectedStudents[x].IsSelected = true;\r\n this.selectedStudents[x].SelectedTeams = [];\r\n for (let y = 0; y < this.selectedStudents[x].StudentTeams.length; y++) {\r\n this.selectedStudents[x].SelectedTeams[this.selectedStudents[x].StudentTeams[y]] = true;\r\n }\r\n this.selectedStudents[x].Name = this.getStudentName(this.selectedStudents[x]);\r\n }\r\n this.getParentTypes();\r\n });\r\n }\r\n else if (this.massEmail.ReferringPage == 'Student Lists') {\r\n const studentListsIds: number[] = [];\r\n for (let i = 0; i < this.selectedStudentList.length; i++) {\r\n studentListsIds.push(this.selectedStudentList[i].ID);\r\n }\r\n this.massEmailService.getStudentsByLists(studentListsIds, this.defaultYear.Id, this.defaultYear.SchoolID).subscribe(results => {\r\n this.massEmail.Students = results;\r\n this.selectedStudents = this.massEmail.Students;\r\n for (let x = 0; x < this.selectedStudents.length; x++) {\r\n this.selectedStudents[x].IsSelected = true;\r\n this.selectedStudents[x].SelectedLists = [];\r\n for (let y = 0; y < this.selectedStudents[x].StudentLists.length; y++) {\r\n this.selectedStudents[x].SelectedLists[this.selectedStudents[x].StudentLists[y]] = true;\r\n }\r\n this.selectedStudents[x].Name = this.getStudentName(this.selectedStudents[x]);\r\n }\r\n this.getParentTypes();\r\n });\r\n }\r\n else {\r\n this.getParentTypes();\r\n }\r\n }\r\n\r\n getStudentsByClass(siteSectionIds: number[], handleMerge: boolean, unmergedSections: ClassroomSummary[]) {\r\n // ONE-5178 Mass Email Error\r\n this.massEmailService.getStudentsByClass(siteSectionIds, this.defaultYear.Id, this.defaultYear.SchoolID).subscribe(results => {\r\n this.massEmail.Students = results;\r\n this.selectedStudents = this.massEmail.Students;\r\n\r\n // ONE-12819\r\n if (handleMerge) {\r\n for (let student of this.selectedStudents) {\r\n for (let sectionId of student.SubjectSections) {\r\n let course = unmergedSections.filter(c => c.Id == sectionId)[0];\r\n if (course.MergedForGrading) {\r\n let splitSectionIds = unmergedSections.filter(c => c.MergedGradebookSSEC_ID == course.MergedGradebookSSEC_ID && c.Id != course.Id).map(s => s.Id);\r\n student.SubjectSections.push.apply(student.SubjectSections, splitSectionIds.filter(ss => student.SubjectSections.indexOf(ss) == -1));\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let x = 0; x < this.selectedStudents.length; x++) {\r\n this.selectedStudents[x].IsSelected = true;\r\n this.selectedStudents[x].SelectedClasses = [];\r\n for (let y = 0; y < this.selectedStudents[x].SubjectSections.length; y++) {\r\n this.selectedStudents[x].SelectedClasses[this.selectedStudents[x].SubjectSections[y]] = true;\r\n }\r\n this.selectedStudents[x].Name = this.getStudentName(this.selectedStudents[x]);\r\n }\r\n this.getParentTypes();\r\n });\r\n }\r\n\r\n getParentTypes() {\r\n if (this.loginSettings.V10 && (this.massEmail.ContactTypes == null || this.massEmail.ContactTypes.length == 0)) {\r\n this.massEmailService.getParentTypes(this.defaultYear.Id).subscribe(results => {\r\n const pTypes: ContactTypes[] = [];\r\n pTypes.push({ id: '(All)', label: '(All)' });\r\n pTypes.push({ id: '(All Guardians)', label: '(All Guardians)' });\r\n pTypes.push({ id: '(All Primary Contacts)', label: '(All Primary Contacts)' });\r\n pTypes.push({\r\n id: '(All Primary Contacts who are Guardians)',\r\n label: '(All Primary Contacts who are Guardians)'\r\n });\r\n for (let i = 0; i < results.length; i++) {\r\n const type: ContactTypes = new ContactTypes();\r\n type.id = results[i];\r\n type.label = results[i];\r\n pTypes.push(type);\r\n }\r\n this.massEmail.ContactTypes = pTypes;\r\n for (let i = 0; i < this.massEmail.ContactTypes.length; i++) {\r\n if (this.massEmail.ContactTypes[i].label == '(All Primary Contacts)') {\r\n this.massEmail.SelectedContactTypes.push(this.massEmail.ContactTypes[i].label);\r\n\r\n\r\n }\r\n }\r\n this.showSelectRecipientsModal();\r\n });\r\n\r\n } else {\r\n this.showSelectRecipientsModal();\r\n }\r\n }\r\n\r\n showSelectRecipientsModal() {\r\n this.selectRecipiantDialogRef = this.dialog.open(SelectRecipientsComponent, {\r\n disableClose: true,\r\n data: _.cloneDeep(this.massEmail), // pass a copy not a reference\r\n });\r\n this.selectRecipiantDialogRef.afterClosed().subscribe((retValSelectRecipient: any) => {\r\n if (retValSelectRecipient != null) {\r\n if (retValSelectRecipient.Message == 'Continue') {\r\n this.massEmail = retValSelectRecipient.massEmail;\r\n } else if (retValSelectRecipient.Message == 'Back') {\r\n this.backClick();\r\n } else if (retValSelectRecipient == 'Close Clicked') {\r\n // Do nothing\r\n } else {\r\n this.cancelClick();\r\n }\r\n } else {\r\n this.cancelClick();\r\n }\r\n });\r\n }\r\n\r\n showViewRecipientsModal() {\r\n let recipients: EmailRecipient[] = [];\r\n // Get Contact Recipients\r\n this.massEmail.Recipients.forEach(recipient => {\r\n recipient.BCC.forEach(recip => {\r\n recipients.push(new EmailRecipient({\r\n name: recip.LastName + ', ' + recip.FirstName,\r\n email: recip.Email,\r\n type: recip.Relationship == 'Teacher' ? 'Staff' : recip.Relationship == 'Student' ? 'Student' : (recip.Relationship == 'Team Staff' ? 'Team Staff' : 'Contact')\r\n }));\r\n });\r\n recipient.CC.forEach(recip => {\r\n recipients.push(new EmailRecipient({\r\n name: recip.LastName + ', ' + recip.FirstName,\r\n email: recip.Email,\r\n type: recip.Relationship == 'Teacher' ? 'Staff' : recip.Relationship == 'Student' ? 'Student' : (recip.Relationship == 'Team Staff' ? 'Team Staff' : 'Contact')\r\n }));\r\n });\r\n recipient.To.forEach(recip => {\r\n recipients.push(new EmailRecipient({\r\n name: recip.LastName + ', ' + recip.FirstName,\r\n email: recip.Email,\r\n type: recip.Relationship == 'Teacher' ? 'Staff' : recip.Relationship == 'Student' ? 'Student' : (recip.Relationship == 'Team Staff' ? 'Team Staff' : 'Contact')\r\n }));\r\n });\r\n });\r\n\r\n // Get additional recipients\r\n let additionalEmails = [];\r\n if (this.massEmail.AdditionalRecipients.to) {\r\n additionalEmails = additionalEmails.concat(this.massEmail.AdditionalRecipients.to.split(';'));\r\n }\r\n if (this.massEmail.AdditionalRecipients.cc) {\r\n additionalEmails = additionalEmails.concat(this.massEmail.AdditionalRecipients.cc.split(';'));\r\n }\r\n if (this.massEmail.AdditionalRecipients.bcc) {\r\n additionalEmails = additionalEmails.concat(this.massEmail.AdditionalRecipients.bcc.split(';'));\r\n }\r\n for (let i = 0; i < additionalEmails.length; i++) {\r\n additionalEmails[i] = additionalEmails[i].trim();\r\n recipients.push(new EmailRecipient({ email: additionalEmails[i], type: 'Additional' }));\r\n }\r\n if (this.massEmail.OneEmailPerHousehold) {\r\n recipients = recipients.filter((filterRecipient, index) =>\r\n recipients.findIndex(tempRecipient => filterRecipient.email == tempRecipient.email) == index\r\n );\r\n }\r\n this.dialog.open(ViewRecipientsModalComponent, {\r\n width: '60vw',\r\n height: '55vh',\r\n autoFocus: false,\r\n disableClose: true,\r\n data: { recipients: recipients, includeTeachers: this.massEmail.SendEmailToTeachers, includeTeamStaffMembers: this.massEmail.SendEmailToTeamStaffMembers }\r\n });\r\n }\r\n\r\n getMassEmailPreferences() {\r\n this.userPreferencesService.getUserPreferences(0, '/OneSISMassEmail').subscribe(results => {\r\n this.userPreferences.massEmailPreferences = JSON.parse(results[0]);\r\n this.massEmailPreferences = JSON.parse(JSON.stringify(this.userPreferences.massEmailPreferences));\r\n this.massEmail.CreateCommunicationLog = this.massEmailPreferences.CreateCommunicationLog;\r\n if (this.massEmailPreferences.Signature != '' && this.massEmail.Body == '') {\r\n this.massEmail.Body = this.massEmail.Body + '




' + this.massEmailPreferences.Signature;\r\n }\r\n this.getPageInfo();\r\n });\r\n }\r\n\r\n getStudentName(student) {\r\n const nickName = student.NickName;\r\n const firstName = student.FirstName;\r\n const middleName = student.MiddleName;\r\n const lastName = student.LastName;\r\n let studentName = '';\r\n if (this.userPreferences.generalPreferences.StudentNameFormat == 'LNF') {\r\n studentName = lastName + ', ';\r\n }\r\n if (this.userPreferences.generalPreferences.StudentNameFormat != 'FILN') {\r\n studentName = studentName + firstName;\r\n }\r\n if (this.userPreferences.generalPreferences.StudentNameFormat == 'FILN') {\r\n studentName = studentName + firstName.substr(0, 1);\r\n }\r\n if (this.userPreferences.generalPreferences.ShowNickname == true && nickName != null && nickName != '') {\r\n studentName = studentName + ' ' + '\"' + nickName + '\"';\r\n }\r\n if (this.userPreferences.generalPreferences.StudentMiddleNameFormat == 'SEN' && middleName != null && middleName != '') {\r\n studentName = studentName + ' ' + middleName;\r\n }\r\n if (this.userPreferences.generalPreferences.StudentMiddleNameFormat == 'SFL' && middleName != null && middleName != '') {\r\n studentName = studentName + ' ' + middleName.substr(0, 1);\r\n }\r\n if (this.userPreferences.generalPreferences.StudentNameFormat != 'LNF' && this.userPreferences.generalPreferences.StudentNameFormat != 'FNLI') {\r\n studentName = studentName + ' ' + lastName;\r\n }\r\n if (this.userPreferences.generalPreferences.StudentNameFormat == 'FNLI') {\r\n studentName = studentName + ' ' + lastName.substr(0, 1);\r\n }\r\n return studentName;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n\r\n backClick() {\r\n this.massEmailService.isBackClick = true;\r\n this.dialogRef.close('Back was clicked.');\r\n }\r\n\r\n cancelClick() {\r\n this.dialogBox.close();\r\n }\r\n\r\n sendEmailsClick(sendTest = false) {\r\n let iserror: boolean;\r\n iserror = false;\r\n this.errors = [];\r\n // this.validateEmail();\r\n\r\n let attachmentSize = 0;\r\n for (let j = 0; j < this.massEmail.Attachments.length; j++) {\r\n if (this.massEmail.Attachments[j].Base64String != undefined && this.massEmail.Attachments[j].Base64String != null && this.massEmail.Attachments[j].Base64String != '') {\r\n attachmentSize = attachmentSize + (window.atob(this.massEmail.Attachments[j].Base64String).length / (1024 * 1024));\r\n }\r\n }\r\n if (attachmentSize > 10) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: '',\r\n errorMsg: 'The total size of the files you have attached exceeds the 10 MB limit.'\r\n });\r\n }\r\n\r\n if ((this.massEmail.Subject == null || this.massEmail.Subject.trim().length == 0)\r\n && (this.massEmail.Body == null || this.massEmail.Body.trim().length == 0)\r\n && (this.massEmail.Attachments == null || this.massEmail.Attachments.length == 0)) {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: this.attachmentFieldRef,\r\n errorMsg: 'Email has no content, subject or attachment'\r\n });\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: '',\r\n });\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: '',\r\n });\r\n // iserror = true;\r\n } else if ((this.massEmail.Subject == null || this.massEmail.Subject.trim().length == 0\r\n || this.massEmail.Body == null || this.massEmail.Body.trim().length == 0) && this.errors.length == 0) {\r\n this.sendEmailsWarningDialogRef = this.dialog.open(SendEmailsWarningComponent, {\r\n width: '300px',\r\n // height: '100px',\r\n disableClose: true,\r\n data: { massEmailObj: this.massEmail }\r\n });\r\n this.sendEmailsWarningDialogRef.afterClosed().subscribe(result => {\r\n if (result == 'Send Anyway Was Clicked') {\r\n this.sendEmails(sendTest);\r\n } else {\r\n // DO Nothing\r\n }\r\n }\r\n );\r\n }\r\n else if (!this.massEmail.From || this.massEmail.From == '') {\r\n this.generalConfirmationDialog = this.dialog.open(GeneralConfirmationComponent, { panelClass: 'tyl-mat-dialog', disableClose: true });\r\n this.generalConfirmationDialog.componentInstance.disableConfirmation = true;\r\n this.generalConfirmationDialog.componentInstance.headerLabel = 'Error';\r\n this.generalConfirmationDialog.componentInstance.confirmMessage = 'You do not have a valid email address to send Mass Emails';\r\n }\r\n else {\r\n if (this.errors.length == 0) {\r\n this.sendEmails(sendTest);\r\n }\r\n }\r\n }\r\n\r\n sendEmails(sendTest = false) {\r\n let email: any = {};\r\n if (sendTest == false) {\r\n email = {\r\n From: this.massEmail.From,\r\n Recipients: this.massEmail.Recipients,\r\n Subject: this.massEmail.Subject,\r\n Message: this.massEmail.Body,\r\n Attachments: this.massEmail.Attachments,\r\n StudentSelection: this.massEmail.StudentRecipientType,\r\n HouseholdParentsSelection: this.massEmail.HouseholdRecipientType,\r\n NonResidentParentsSelection: this.massEmail.NonHouseholdRecipientType,\r\n IncludeAllEvenNotRequestMailing: this.massEmail.IncludeAll,\r\n SendEmailToTeacher: this.massEmail.SendEmailToTeachers,\r\n CreateCommunicationLog: this.massEmail.CreateCommunicationLog,\r\n SelectedContactTypes: this.massEmail.SelectedContactTypes,\r\n OneEmailPerHousehold: this.massEmail.OneEmailPerHousehold\r\n };\r\n\r\n // Check for additional recipients\r\n this.addAdditionalEmails();\r\n } else {\r\n const sendTestRecipient: Recipient[] = [];\r\n const rec: Recipient = {\r\n StudentID: 0,\r\n To: [\r\n {\r\n ID: 0,\r\n Email: this.userEmailAddress,\r\n IsGuardian: false,\r\n IsPrimaryParent: false,\r\n Relationship: 'Undefined',\r\n RequestsMailings: false,\r\n FirstName: '',\r\n LastName: ''\r\n }\r\n ],\r\n CC: [],\r\n BCC: []\r\n };\r\n sendTestRecipient.push(rec);\r\n\r\n email = {\r\n From: this.massEmail.From,\r\n Recipients: sendTestRecipient,\r\n Subject: this.massEmail.Subject + ' - TEST MESSAGE',\r\n Message: this.massEmail.Body,\r\n Attachments: this.massEmail.Attachments,\r\n StudentSelection: this.massEmail.StudentRecipientType,\r\n HouseholdParentsSelection: this.massEmail.HouseholdRecipientType,\r\n NonResidentParentsSelection: this.massEmail.NonHouseholdRecipientType,\r\n IncludeAllEvenNotRequestMailing: this.massEmail.IncludeAll,\r\n SendEmailToTeacher: this.massEmail.SendEmailToTeachers,\r\n CreateCommunicationLog: this.massEmail.CreateCommunicationLog,\r\n SelectedContactTypes: this.massEmail.SelectedContactTypes,\r\n OneEmailPerHousehold: this.massEmail.OneEmailPerHousehold\r\n };\r\n }\r\n\r\n const area = 'Mass Email';\r\n if (this.loginSettings.V10) {\r\n this.massEmailService.sendMassEmail(email, true, area, this.currentUser.LoginSchoolId, this.defaultYear.Id).subscribe(results => {\r\n email.Recipients = [];\r\n const confirmationEmailRecipient = {\r\n ID: this.currentUser.MemberId,\r\n Email: this.currentUser.Email,\r\n Relationship: 'Sender'\r\n };\r\n const r = {\r\n To: [],\r\n CC: [],\r\n BCC: []\r\n };\r\n r.To.push(confirmationEmailRecipient);\r\n email.Recipients.push(r);\r\n email.CreateCommunicationLog = false;\r\n\r\n this.massEmailService.sendMassEmail(email, true, area, this.currentUser.LoginSchoolId, this.defaultYear.Id).subscribe(resultsObj => {\r\n this.jobSentToQueueDialogRef = this.dialog.open(JobSentToQueueComponent, {\r\n width: '350px',\r\n height: '160px',\r\n disableClose: true,\r\n data: {\r\n dialogTitle: 'Job Sent to Queue',\r\n dialogContent: 'The mass email has been sent to the queue'\r\n }\r\n });\r\n this.jobSentToQueueDialogRef.afterClosed().subscribe(result => {\r\n if (result == 'Close was clicked') {\r\n this.dialogRef.close('Mass Email Sent.');\r\n }\r\n });\r\n });\r\n });\r\n } else {\r\n this.massEmailService.sendMassEmail(email, true, area, this.defaultYear.SchoolID, this.defaultYear.Id).subscribe(results => {\r\n if (sendTest == false) {\r\n this.jobSentToQueueDialogRef = this.dialog.open(JobSentToQueueComponent, {\r\n width: '350px',\r\n height: '160px',\r\n disableClose: true\r\n });\r\n this.jobSentToQueueDialogRef.afterClosed().subscribe(result => {\r\n if (result == 'Close was clicked') {\r\n this.dialogRef.close('Mass Email Sent.');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n preferencesClick() {\r\n this.userPrefDialogRef = this.dialog.open(UserPreferencesWindowComponent, {\r\n width: '1000px',\r\n height: '800px',\r\n });\r\n this.userPrefDialogRef.componentInstance.staffAssignedPortals = this.staffAssignedPortals;\r\n this.userPrefDialogRef.afterClosed().subscribe(result => {\r\n });\r\n }\r\n\r\n exportAddressesClick() {\r\n\r\n }\r\n\r\n addAttachmentClick() {\r\n this.massEmailAttachmentDialogRef = this.dialog.open(MassEmailAttachmentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n width: '400px'\r\n });\r\n this.massEmailAttachmentDialogRef.afterClosed().subscribe((retValAttachment: Attachment) => {\r\n if (retValAttachment != undefined && retValAttachment != null && retValAttachment.AttachmentFileName != '') {\r\n this.massEmail.Attachments.push(retValAttachment);\r\n }\r\n });\r\n }\r\n\r\n deleteAttachment(attchement: Attachment) {\r\n const index = this.massEmail.Attachments.indexOf(attchement);\r\n this.massEmail.Attachments.splice(index, 1);\r\n }\r\n\r\n // Send Test Email\r\n sendTestEmail() {\r\n this.sendTestEmailDislogRef = this.dialog.open(SendTestEmailComponent, {\r\n width: '400px',\r\n height: '200px',\r\n disableClose: true\r\n });\r\n this.sendTestEmailDislogRef.afterClosed().subscribe(result => {\r\n if (result.Message == 'SendTest') {\r\n this.userEmailAddress = result.EmailAddress;\r\n this.sendEmailsClick(true);\r\n }\r\n });\r\n }\r\n\r\n private addAdditionalEmails() {\r\n if (Object.keys(this.massEmail.AdditionalRecipients).length > 0) {\r\n // separate emails out\r\n const { to, cc, bcc } = this.massEmail.AdditionalRecipients;\r\n if (to) {\r\n let toRecipients = to.split(';');\r\n // Trim white space\r\n for (let i = 0; i < toRecipients.length; i++) {\r\n toRecipients[i] = toRecipients[i].trim();\r\n }\r\n // remove empty emails\r\n for (let i = 0; i < toRecipients.length; i++) {\r\n toRecipients = toRecipients.filter(em => em != '');\r\n const rec: Recipient = {\r\n StudentID: 0,\r\n To: [\r\n {\r\n ID: 0,\r\n Email: toRecipients[i],\r\n IsGuardian: false,\r\n IsPrimaryParent: false,\r\n Relationship: 'Undefined',\r\n RequestsMailings: false,\r\n FirstName: '',\r\n LastName: ''\r\n }\r\n ],\r\n CC: [],\r\n BCC: []\r\n };\r\n this.massEmail.Recipients.push(rec);\r\n }\r\n }\r\n if (cc) {\r\n let ccRecipients = cc.split(';');\r\n // Trim white space\r\n for (let i = 0; i < ccRecipients.length; i++) {\r\n ccRecipients[i] = ccRecipients[i].trim();\r\n }\r\n // remove empty emails\r\n for (let i = 0; i < ccRecipients.length; i++) {\r\n ccRecipients = ccRecipients.filter(em => em != '');\r\n const rec: Recipient = {\r\n StudentID: 0,\r\n CC: [\r\n {\r\n ID: 0,\r\n Email: ccRecipients[i],\r\n IsGuardian: false,\r\n IsPrimaryParent: false,\r\n Relationship: 'Undefined',\r\n RequestsMailings: false,\r\n FirstName: '',\r\n LastName: ''\r\n }\r\n ],\r\n To: [],\r\n BCC: []\r\n };\r\n this.massEmail.Recipients.push(rec);\r\n }\r\n }\r\n if (bcc) {\r\n let bccRecipients = bcc.split(';');\r\n // Trim white space\r\n for (let i = 0; i < bccRecipients.length; i++) {\r\n bccRecipients[i] = bccRecipients[i].trim();\r\n }\r\n // remove empty emails\r\n for (let i = 0; i < bccRecipients.length; i++) {\r\n bccRecipients = bccRecipients.filter(em => em != '');\r\n const rec: Recipient = {\r\n StudentID: 0,\r\n BCC: [\r\n {\r\n ID: 0,\r\n Email: bccRecipients[i],\r\n IsGuardian: false,\r\n IsPrimaryParent: false,\r\n Relationship: 'Undefined',\r\n RequestsMailings: false,\r\n FirstName: '',\r\n LastName: ''\r\n }\r\n ],\r\n To: [],\r\n CC: []\r\n };\r\n this.massEmail.Recipients.push(rec);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { StudentTeams } from '../../classroom360/student-teams/student-teams.model';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\n\r\nexport class MassEmail {\r\n Attachments: Attachment[] = [];\r\n AdditionalRecipients: AdditionalRecipients = new AdditionalRecipients();\r\n Body: string;\r\n MassEmailClasses: ClassroomSummary[] = [];\r\n ContactTypes: any[] = [];\r\n From: string;\r\n HouseholdRecipientType: string;\r\n IncludeAll: boolean;\r\n NonHouseholdRecipientType: string;\r\n ReferringPage: string;\r\n SelectedContactTypes: any[] = [];\r\n Signature: string;\r\n StudentRecipientType: string;\r\n Students: MassEmailStudent[] = [];\r\n Subject: string;\r\n TeacherRecipientType: string;\r\n SendEmailToTeachers: boolean;\r\n SendEmailToTeamStaffMembers: boolean;\r\n CreateCommunicationLog: boolean;\r\n Recipients: Recipient[] = [];\r\n OneEmailPerHousehold: boolean;\r\n // Non DTO Field\r\n StudentIds: number[] = [];\r\n selectAllForMassEmail: boolean;\r\n selectedStudentsCheckAll: boolean;\r\n selectedClassesCheckAll: boolean;\r\n recipientsSelected: boolean; // if the user has previously selected recipients, using this to show save and cancel buttons\r\n MassEmailStudentTeams: StudentTeams[] = [];\r\n selectedTeamsCheckAll: boolean;\r\n // Student List\r\n MassEmailStudentLists: StudentList[] = [];\r\n selectedListsCheckAll:boolean;\r\n}\r\n\r\nexport class MassEmailStudent {\r\n Id: number;\r\n StudentNumber: string;\r\n Name: string;\r\n FirstName: string;\r\n LastName: string;\r\n MiddleName: string;\r\n NickName: string;\r\n GradeLevel: string;\r\n Email: string;\r\n SubjectSections: number[];\r\n StudentTeams: number[];\r\n StudentContacts: StudentContact[];\r\n IsSelected: boolean;\r\n SelectedClasses: any[];\r\n SelectedTeams: any[];\r\n\r\n SelectedLists:any[];\r\n StudentLists: number[];\r\n\r\n}\r\nexport class ContactTypes {\r\n id: string;\r\n label: string;\r\n}\r\nexport class Recipient {\r\n StudentID: number;\r\n To: StudentContact[] = [];\r\n CC: StudentContact[] = [];\r\n BCC: StudentContact[] = [];\r\n}\r\n\r\nexport class StudentContact {\r\n ID: number;\r\n Email: string;\r\n Relationship: string;\r\n IsGuardian: boolean;\r\n IsPrimaryParent: boolean;\r\n RequestsMailings: boolean;\r\n FirstName: string;\r\n LastName: string;\r\n}\r\n\r\nexport class MassEmailPreferences {\r\n Signature: string;\r\n CreateCommunicationLog: boolean;\r\n}\r\n\r\nexport class MassEmailAttachment {\r\n Id: number;\r\n Base64String: string;\r\n OriginalFileName: string;\r\n FileType: string;\r\n FileDescription: string;\r\n FileExtension: string;\r\n FileName: string;\r\n}\r\n\r\nexport class AdditionalRecipients {\r\n bcc: string; // test@email.com; test2@email.com\r\n cc: string; // test@email.com; test2@email.com\r\n to: string; // test@email.com; test2@email.com\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { System } from '../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { MassEmailStudent, Recipient } from './mass-email.model';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class MassEmailService {\r\n isBackClick = false;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) { }\r\n\r\n getStudentsByClass(subjectSectionIds: number[], yearId: number, schoolId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Student + 'GetStudentsByClass' + queryString, subjectSectionIds);\r\n }\r\n\r\n getStudentsByTeams(studentTeamIds: number[], yearId: number, schoolId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Student + 'GetStudentsByTeams' + queryString, studentTeamIds);\r\n }\r\n\r\n getStudentsByLists(studentListIds: number[], yearId: number, schoolId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Student + 'GetStudentsByLists' + queryString, studentListIds);\r\n } \r\n\r\n getParentTypes(yearId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetParentTypes' + queryString);\r\n }\r\n getTeacherRecipientsForMassEmail(sectionIds) {\r\n return this.http.post(System.apiURL.Student + 'GetTeacherRecipientsForMassEmail', sectionIds);\r\n }\r\n GetTeamStaffMemberRecipientsForMassEmail(sectionIds: number[], yearId: number, schoolId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Student + 'GetTeamStaffMemberRecipientsForMassEmail' + queryString, sectionIds);\r\n }\r\n\r\n sendMassEmail(email, isBodyHtml, area, schoolId, yearId) {\r\n let queryString = '';\r\n queryString += '?isBodyHtml=' + isBodyHtml +\r\n '&area=' + area +\r\n '&schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n System.removeIdFields(email);\r\n return this.http.post(System.apiURL.Student + 'SendMassEmail' + queryString, email);\r\n }\r\n\r\n getStudentInfoForMassEmail(studentIds: number[], yearId: number, schoolId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n\r\n return this.http.post(System.apiURL.Student + 'GetStudentInfoForMassEmail' + queryString, studentIds);\r\n }\r\n}\r\n","export class Address {\r\n\r\n // Properties\r\n\t$id: number;\r\n\tAddressId: number;\r\n\tApartmentNumber: number | string;\r\n\tApartmentNumberLastChange: number | string;\r\n\tApartmentNumberNew: number | string;\r\n\tCity: string;\r\n\tCityLastChange: string;\r\n\tCityNew: string;\r\n\tCountry: string;\r\n\tCountryLastChange: string;\r\n\tCountryNew: string;\r\n\tDirection: string;\r\n\tDirectionLastChange: string;\r\n\tDirectionNew: string;\r\n\tGroupIdentifier: string;\r\n\tHomePhone1: string;\r\n\tHomePhone1LastChange: string;\r\n\tHomePhone1New: string;\r\n\tHomePhone2: string;\r\n\tHomePhone2LastChange: string;\r\n\tHomePhone2New: string;\r\n\tHouseNumber: number | string;\r\n\tHouseNumberLastChange: number | string;\r\n\tHouseNumberNew: number | string;\r\n\tId: number;\r\n\tLanguageAtHome: string;\r\n\tLanguageAtHomeLastChange: string;\r\n\tLanguageAtHomeNew: string;\r\n\tPhone: string;\r\n\tPhoneNew: string;\r\n\tPOBox: string;\r\n\tPOBoxAddressCity: string;\r\n\tPOBoxAddressCityLastChange: string;\r\n\tPOBoxAddressCityNew: string;\r\n\tPOBoxAddressLine1: string;\r\n\tPOBoxAddressLine1LastChange: string;\r\n\tPOBoxAddressLine1New: string;\r\n\tPOBoxAddressLine2: string;\r\n\tPOBoxAddressLine2LastChange: string;\r\n\tPOBoxAddressLine2New: string;\r\n\tPOBoxAddressLine3: string;\r\n\tPOBoxAddressLine3LastChange: string;\r\n\tPOBoxAddressLine3New: string;\r\n\tPOBoxAddressState: string;\r\n\tPOBoxAddressStateLastChange: string;\r\n\tPOBoxAddressStateNew: string;\r\n\tPOBoxAddressZip: number | string;\r\n\tPOBoxAddressZipLastChange: number | string;\r\n\tPOBoxAddressZipNew: number | string;\r\n\tPOBoxLastChange: string;\r\n\tPOBoxNew: string;\r\n\tPrimaryAddress: boolean;\r\n\tSameAsPrimaryResidence: boolean;\r\n\tSameAsPrimaryResidenceOld: boolean;\r\n\tSendMailingsInSpanish: boolean;\r\n\tSendMailingsInSpanishLastChange: boolean;\r\n\tSendMailingsInSpanishNew: boolean;\r\n\tState: string;\r\n\tStateLastChange: string;\r\n\tStateNew: string;\r\n\tStreetName: string;\r\n\tStreetNameLastChange: string;\r\n\tStreetNameNew: string;\r\n\tStreetType: string;\r\n\tStreetTypeLastChange: string;\r\n\tStreetTypeNew: string;\r\n\tSyncAddress: boolean;\r\n\tZipCode: string;\r\n\tZipCode2: string;\r\n\tZipCode2LastChange: string;\r\n\tZipCode2New: string;\r\n\tZipCodeLastChange: string;\r\n ZipCodeNew: string;\r\n\r\n // Methods\r\n isMatching(other: Address): boolean {\r\n // PRE: ab address to match this with\r\n // POST: tells you whether they are matching (NOT EQUAL!!!)\r\n return this.POBoxLastChange == other.POBoxLastChange &&\r\n this.HouseNumberLastChange == other.HouseNumberLastChange &&\r\n this.DirectionLastChange == other.DirectionLastChange &&\r\n this.StreetNameLastChange == other.StreetNameLastChange &&\r\n this.StreetTypeLastChange == other.StreetTypeLastChange &&\r\n this.ApartmentNumberLastChange == other.ApartmentNumberLastChange &&\r\n this.CityLastChange == other.CityLastChange &&\r\n this.StateLastChange == other.StateLastChange &&\r\n this.ZipCodeLastChange == other.ZipCodeLastChange &&\r\n this.ZipCode2LastChange == other.ZipCode2LastChange &&\r\n this.CountryLastChange == other.CountryLastChange &&\r\n this.POBoxNew == other.POBoxNew &&\r\n this.HouseNumberNew == other.HouseNumberNew &&\r\n this.DirectionNew == other.DirectionNew &&\r\n this.StreetNameNew == other.StreetNameNew &&\r\n this.StreetTypeNew == other.StreetTypeNew &&\r\n this.ApartmentNumberNew == other.ApartmentNumberNew &&\r\n this.CityNew == other.CityNew &&\r\n this.StateNew == other.StateNew &&\r\n this.ZipCodeNew == other.ZipCodeNew &&\r\n this.ZipCode2New == other.ZipCode2New &&\r\n this.CountryNew == other.CountryNew &&\r\n\t\t\tthis.PhoneNew == other.PhoneNew;\r\n }\r\n\r\n changed(): boolean {\r\n // POST: returns true if the address has changed\r\n return !(this.POBox == this.POBoxNew &&\r\n this.HouseNumber == this.HouseNumberNew &&\r\n this.Direction == this.DirectionNew &&\r\n this.StreetName == this.StreetNameNew &&\r\n this.StreetType == this.StreetTypeNew &&\r\n this.ApartmentNumber == this.ApartmentNumberNew &&\r\n this.City == this.CityNew &&\r\n this.State == this.StateNew &&\r\n this.ZipCode == this.ZipCodeNew &&\r\n this.ZipCode2 == this.ZipCode2New &&\r\n this.Country == this.CountryNew &&\r\n\t\t\tthis.Phone == this.PhoneNew);\r\n }\r\n\r\n\tclear() {\r\n\t\t// PRE: an address to clear\r\n\t\t// POST: clears out the address' variables\r\n\t\tthis.POBoxNew = '';\r\n\t\tthis.HouseNumberNew = '';\r\n\t\tthis.DirectionNew = '';\r\n\t\tthis.StreetNameNew = '';\r\n\t\tthis.StreetTypeNew = '';\r\n\t\tthis.ApartmentNumberNew = '';\r\n\t\tthis.CityNew = '';\r\n\t\tthis.StateNew = '';\r\n\t\tthis.ZipCodeNew = '';\r\n\t\tthis.ZipCode2New = '';\r\n\t\tthis.CountryNew = '';\r\n\t\tthis.HomePhone1New = '';\r\n\t\tthis.HomePhone2New = '';\r\n\t\tthis.LanguageAtHomeNew = '0';\r\n\t\tthis.POBoxAddressLine1New = '';\r\n\t\tthis.POBoxAddressLine2New = '';\r\n\t\tthis.POBoxAddressLine3New = '';\r\n\t\tthis.POBoxAddressCityNew = '';\r\n\t\tthis.POBoxAddressStateNew = '';\r\n\t\tthis.POBoxAddressZipNew = '';\r\n\t\tthis.PhoneNew = '';\r\n\t}\r\n\r\n\tsetEqual(address: Address) {\r\n\t\t// PRE: an address to set this equal to\r\n\t\t// POST: sets the first address to the second address\r\n\t\t// NOTE: we're not using Object.assign because not every field is copied\r\n\t\tthis.POBoxNew = address.POBoxNew;\r\n\t\tthis.HouseNumberNew = address.HouseNumberNew;\r\n\t\tthis.DirectionNew = address.DirectionNew;\r\n\t\tthis.StreetNameNew = address.StreetNameNew;\r\n\t\tthis.StreetTypeNew = address.StreetTypeNew;\r\n\t\tthis.ApartmentNumberNew = address.ApartmentNumberNew;\r\n\t\tthis.CityNew = address.CityNew;\r\n\t\tthis.StateNew = address.StateNew;\r\n\t\tthis.ZipCodeNew = address.ZipCodeNew;\r\n\t\tthis.ZipCode2New = address.ZipCode2New;\r\n\t\tthis.CountryNew = address.CountryNew;\r\n\t\tthis.HomePhone1New = address.HomePhone1New;\r\n\t\tthis.HomePhone2New = address.HomePhone2New;\r\n\t\tthis.LanguageAtHomeNew = address.LanguageAtHomeNew;\r\n\t\tthis.POBoxAddressLine1New = address.POBoxAddressLine1New;\r\n\t\tthis.POBoxAddressLine2New = address.POBoxAddressLine2New;\r\n\t\tthis.POBoxAddressLine3New = address.POBoxAddressLine3New;\r\n\t\tthis.POBoxAddressCityNew = address.POBoxAddressCityNew;\r\n\t\tthis.POBoxAddressStateNew = address.POBoxAddressStateNew;\r\n\t\tthis.POBoxAddressZipNew = address.POBoxAddressZipNew;\r\n\t\tthis.PhoneNew = address.PhoneNew;\r\n\t}\r\n\r\n\tsetAsBasis(address: Address) {\r\n\t\t// PRE: an address to set as the basis\r\n\t\t// POST: sets this address to that address\r\n\t\t// NOTE: cannot use object.assign as not every value is set\r\n\t\tthis.setEqual(address);\r\n\t\tthis.POBox = address.POBox;\r\n\t\tthis.HouseNumber = address.HouseNumber;\r\n\t\tthis.Direction = address.Direction;\r\n\t\tthis.StreetName = address.StreetName;\r\n\t\tthis.StreetType = address.StreetType;\r\n\t\tthis.ApartmentNumber = address.ApartmentNumber;\r\n\t\tthis.City = address.City;\r\n\t\tthis.State = address.State;\r\n\t\tthis.ZipCode = address.ZipCode;\r\n\t\tthis.ZipCode2 = address.ZipCode2;\r\n\t\tthis.Country = address.Country;\r\n\t\tthis.HomePhone1 = address.HomePhone1;\r\n\t\tthis.HomePhone2 = address.HomePhone2;\r\n\t\tthis.LanguageAtHome = address.LanguageAtHome;\r\n\t\tthis.POBoxAddressLine1 = address.POBoxAddressLine1;\r\n\t\tthis.POBoxAddressLine2 = address.POBoxAddressLine2;\r\n\t\tthis.POBoxAddressLine3 = address.POBoxAddressLine3;\r\n\t\tthis.POBoxAddressCity = address.POBoxAddressCity;\r\n\t\tthis.POBoxAddressState = address.POBoxAddressState;\r\n\t\tthis.POBoxAddressZip = address.POBoxAddressZip;\r\n\t\tthis.Phone = address.Phone;\r\n\t}\r\n\r\n\tsetAsLastChange(address: Address) {\r\n\t\t// PRE: an address to set as this address' last change\r\n\t\t// POST: sets this addresses last change to the values of address2\r\n\t\t// NOTE: we're not using Object.assign because not every field is copied\r\n\t\tthis.POBoxLastChange = address.POBoxNew;\r\n\t\tthis.HouseNumberLastChange = address.HouseNumberNew;\r\n\t\tthis.DirectionLastChange = address.DirectionNew;\r\n\t\tthis.StreetNameLastChange = address.StreetNameNew;\r\n\t\tthis.StreetTypeLastChange = address.StreetTypeNew;\r\n\t\tthis.ApartmentNumberLastChange = address.ApartmentNumberNew;\r\n\t\tthis.CityLastChange = address.CityNew;\r\n\t\tthis.StateLastChange = address.StateNew;\r\n\t\tthis.ZipCodeLastChange = address.ZipCodeNew;\r\n\t\tthis.ZipCode2LastChange = address.ZipCode2New;\r\n\t\tthis.CountryLastChange = address.CountryNew;\r\n\t\tthis.HomePhone1LastChange = address.HomePhone1New;\r\n\t\tthis.HomePhone2LastChange = address.HomePhone2New;\r\n\t\tthis.LanguageAtHomeLastChange = address.LanguageAtHomeNew;\r\n\t\tthis.POBoxAddressLine1LastChange = address.POBoxAddressLine1New;\r\n\t\tthis.POBoxAddressLine2LastChange = address.POBoxAddressLine2New;\r\n\t\tthis.POBoxAddressLine3LastChange = address.POBoxAddressLine3New;\r\n\t\tthis.POBoxAddressCityLastChange = address.POBoxAddressCityNew;\r\n\t\tthis.POBoxAddressStateLastChange = address.POBoxAddressStateNew;\r\n\t\tthis.POBoxAddressZipLastChange = address.POBoxAddressZipNew;\r\n\t}\r\n\r\n\treset() {\r\n\t\t// PRE: an address that has its values set\r\n\t\t// POST: resets the address to its initial values\r\n\t\tthis.POBoxNew = this.POBox;\r\n\t\tthis.HouseNumberNew = this.HouseNumber;\r\n\t\tthis.DirectionNew = this.Direction;\r\n\t\tthis.StreetNameNew = this.StreetName;\r\n\t\tthis.StreetTypeNew = this.StreetType;\r\n\t\tthis.ApartmentNumberNew = this.ApartmentNumber;\r\n\t\tthis.CityNew = this.City;\r\n\t\tthis.StateNew = this.State;\r\n\t\tthis.ZipCodeNew = this.ZipCode;\r\n\t\tthis.ZipCode2New = this.ZipCode2;\r\n\t\tthis.CountryNew = this.Country;\r\n\t\tthis.HomePhone1New = this.HomePhone1;\r\n\t\tthis.HomePhone2New = this.HomePhone2;\r\n\t\tthis.LanguageAtHomeNew = this.LanguageAtHome;\r\n\t\tthis.POBoxAddressLine1New = this.POBoxAddressLine1;\r\n\t\tthis.POBoxAddressLine2New = this.POBoxAddressLine2;\r\n\t\tthis.POBoxAddressLine3New = this.POBoxAddressLine3;\r\n\t\tthis.POBoxAddressCityNew = this.POBoxAddressCity;\r\n\t\tthis.POBoxAddressStateNew = this.POBoxAddressState;\r\n\t\tthis.POBoxAddressZipNew = this.POBoxAddressZip;\r\n\t\tthis.POBoxLastChange = this.POBox;\r\n\t\tthis.HouseNumberLastChange = this.HouseNumber;\r\n\t\tthis.DirectionLastChange = this.Direction;\r\n\t\tthis.StreetNameLastChange = this.StreetName;\r\n\t\tthis.StreetTypeLastChange = this.StreetType;\r\n\t\tthis.ApartmentNumberLastChange = this.ApartmentNumber;\r\n\t\tthis.CityLastChange = this.City;\r\n\t\tthis.StateLastChange = this.State;\r\n\t\tthis.ZipCodeLastChange = this.ZipCode;\r\n\t\tthis.ZipCode2LastChange = this.ZipCode2;\r\n\t\tthis.CountryLastChange = this.Country;\r\n\t\tthis.HomePhone1LastChange = this.HomePhone1;\r\n\t\tthis.HomePhone2LastChange = this.HomePhone2;\r\n\t\tthis.LanguageAtHomeLastChange = this.LanguageAtHome;\r\n\t\tthis.POBoxAddressLine1LastChange = this.POBoxAddressLine1;\r\n\t\tthis.POBoxAddressLine2LastChange = this.POBoxAddressLine2;\r\n\t\tthis.POBoxAddressLine3LastChange = this.POBoxAddressLine3;\r\n\t\tthis.POBoxAddressCityLastChange = this.POBoxAddressCity;\r\n\t\tthis.POBoxAddressStateLastChange = this.POBoxAddressState;\r\n\t\tthis.POBoxAddressZipLastChange = this.POBoxAddressZip;\r\n\t\tthis.PhoneNew = this.Phone;\r\n\t}\r\n}\r\n","export class Attachment {\r\n id: number;\r\n\r\n // These are used for our files\r\n AssignmentId: number;\r\n\tAttachmentAddedBy: string;\r\n\tAttachmentAddedOn = new Date();\r\n\tAttachmentDescription: string;\r\n\tAttachmentFileBase: string;\r\n\tAttachmentFileMimeType: string;\r\n\tAttachmentFileName: string;\r\n AttachmentId: number;\r\n AttachmentNotes: string;\r\n AttachmentNotesSpanish: string; // NOTE: currently only provided by OR, but the record contains the data\r\n AttachmentNotesFrench: string; // NOTE: currently only provided by OR, but the record contains the data\r\n AttachmentRequired: boolean;\r\n DocumentId: number;\r\n DocumentBase64: string;\r\n DocumentFileId: number;\r\n\tDocumentMimeType: string;\r\n\tDocumentName: string;\r\n\tDocumentType: string;\r\n\tDocumentTypeId: number;\r\n Id: number;\r\n\r\n // Local Properties\r\n\tDeleted = false;\r\n\r\n // These are used for uploads universally\r\n MyFile: any; // This is a user's file upload\r\n MyFileName: string;\r\n MyFileBase64String: string; // This is the user's file upload as a string\r\n OriginalFileName: string; // This is the file name before the user applies a new name for our end\r\n Base64String: string;\r\n\r\n // These are used for a parent's file\r\n FileDescription: string; // The description of the user's file\r\n FileExtension: string; // The file's type\r\n FileName: string; // The file's name\r\n MemberId: number; // This is the user who the attachment pertains to\r\n UploadedDate = new Date(); // This is the date the user uploaded the file\r\n UploadedBy: string // This is the user who uploaded the file\r\n CreateDate: string;\r\n\r\n // These are used for a teacher's file (don't ask why...)\r\n FileType: string; // The file's type\r\n PortalCommunicationId: number; // I have no idea\r\n Description: string; // The file's description\r\n\r\n // Used for Communication Log files\r\n Comment: string;\r\n ViewFileOnWebsite: boolean;\r\n CommunicationLogId: number;\r\n MassEmailAttachment: boolean;\r\n}\r\n","export class TylTranslation {\r\n\tID: number;\r\n\tLanguage_ID: number;\r\n\tEnglish: string;\r\n\tTranslation: string;\r\n\tRichText: boolean;\r\n\r\n\r\n\tconstructor(textToTranslate: string, richText: boolean = false) {\r\n\t\tthis.English = textToTranslate;\r\n\t\tthis.RichText = richText;\r\n\t}\r\n}\r\n","
\r\n
SIS K-12
\r\n
\r\n
\r\n \r\n \r\n
\r\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'overlay-header',\r\n templateUrl: './overlay-header.component.html',\r\n styleUrls: ['./overlay-header.component.css']\r\n})\r\nexport class OverlayHeaderComponent implements OnInit {\r\n\r\n @Input() showCloseButton: boolean;\r\n @Output() closeClick: EventEmitter = new EventEmitter();\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n}\r\n","
\r\n\r\n \r\n
\r\n

\r\n {{string}}\r\n

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

{{getPageTitle()}}

\r\n
\r\n
\r\n Academic Year - {{ defaultYear.Description }}\r\n
\r\n
\r\n \r\n Academic Year - {{ defaultYear.Description }}\r\n \r\n
\r\n
\r\n Academic Year - {{ defaultYear.Description }}\r\n
\r\n
\r\n
\r\n \r\n {{defaultYear.SchoolName}} - {{defaultYear.Description}}\r\n \r\n \r\n {{defaultYear.SchoolName}} - {{defaultYear.Description}}\r\n \r\n
\r\n
\r\n
\r\n","import { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Router } from '@angular/router';\r\nimport { RouteInfo } from './../routeInfo';\r\nimport { Component, OnInit, Input, OnDestroy } from '@angular/core';\r\nimport { YearService } from '../year/year.service';\r\nimport { Year } from '../year/year.model';\r\nimport { UserService } from '../user/user.service';\r\n\r\n/**\r\n * This component generates a page header for C360 or S360.\r\n * Unlike the student header, this does NOT include a student portrait.\r\n * You may also specify what strings show up on the left-hand side of the header.\r\n *\r\n * @input leftStrings: these strings show up on the left side of the header.\r\n * @input leftStringSize: the font size of the left strings.\r\n * @input leftStringColor: the color of the left strings.\r\n * @Input pageTitle: the title the shows on the right\r\n * @input classroomPage: this indicates whether this page is part of C360. It is true by default.\r\n *\r\n * This component also supports content projection, should you prefer to use that.\r\n * The projected content is placed on the left side of the header.\r\n */\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'page-header',\r\n templateUrl: './page-header.component.html',\r\n styleUrls: ['./page-header.component.css']\r\n})\r\nexport class PageHeaderComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n @Input() leftStrings: string[] = [];\r\n @Input() leftStringSize = '18px';\r\n @Input() leftStringColor = 'inherit';\r\n @Input() classroomPage = true;\r\n @Input() pageTitle: string;\r\n @Input() forceYearDisplay: boolean;\r\n defaultYear: Year;\r\n courseRequestYear: Year;\r\n userType;\r\n screenWidth = 0;\r\n\r\n // Class Funtions\r\n constructor(\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private router: Router\r\n ) {\r\n\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.userType = this.userService.currentUser.UserType;\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.defaultYear = this.yearService.defaultYear;\r\n });\r\n this.screenWidth = screen != null ? screen.width : 0;\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n // Methods\r\n getPageTitle() {\r\n // POST: returns the title of this page\r\n return (this.pageTitle == undefined) ? RouteInfo.getPageTitle(this.router.url) : this.pageTitle;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'calculatePercent'\r\n})\r\nexport class CalculatePercentPipe implements PipeTransform {\r\n\r\n transform(value: number, total: number): string {\r\n if (value > 0 && total > 0) {\r\n return (100 * value / total).toFixed(0) + '%';\r\n }\r\n else {\r\n if (total > 0) {\r\n return '0%';\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'ellipsis'\r\n})\r\nexport class EllipsisPipe implements PipeTransform {\r\n\r\n transform(val: string, args: number, showEllipsis = false) {\r\n if (val != undefined && val != null) {\r\n if (args === undefined) {\r\n return val;\r\n }\r\n\r\n if (val.length > args) {\r\n return val.substring(0, args) + '...';\r\n }\r\n else if (showEllipsis == true) {\r\n return val + '...';\r\n }\r\n else {\r\n return val;\r\n }\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { EFormService } from '../e-forms/e-form.service';\r\nimport { EFormControl } from '../e-forms/e-form-control.model';\r\n\r\n@Pipe({\r\n name: 'getDesignerControlName'\r\n})\r\nexport class GetDesignerControlNamePipe implements PipeTransform {\r\n\r\n constructor(private eFormService: EFormService) { }\r\n transform(control: EFormControl): string {\r\n return this.eFormService.formatControlName(control);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'incidentType'\r\n})\r\nexport class IncidentTypePipe implements PipeTransform {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n transform(incidentType: string): string {\r\n if(incidentType == 'Offender' || incidentType == 'Offenders') { \r\n return 'Responsible'; // ONE-7360 Changed from Offender to Responsible\r\n }\r\n else {\r\n return incidentType;\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({name: 'phoneNumber'})\r\nexport class PhoneNumberPipe implements PipeTransform {\r\n transform(value: number | string): string {\r\n const numString = (value) ? value.toString().trim() : '';\r\n const match = numString.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\r\n if (match) {\r\n return '(' + match[1] + ') ' + match[2] + '-' + match[3];\r\n }\r\n // If we don't pass the regEx give back the original value as a string\r\n return numString;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'replace'\r\n})\r\nexport class ReplacePipe implements PipeTransform {\r\n\r\n transform(text: string, stringToFind: string | RegExp, replacementString: string): string {\r\n let newString = text ? text : '';\r\n if (stringToFind) {\r\n newString = newString.replace(stringToFind, replacementString ? replacementString : '');\r\n }\r\n return newString;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({ name: 'safeHtml' })\r\nexport class SafeHtml implements PipeTransform {\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n transform(html) {\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({ name: 'safeResourceUrl' })\r\nexport class SafeResourceUrlPipe implements PipeTransform {\r\n constructor(private sanitizer: DomSanitizer) { }\r\n\r\n transform(url: string) {\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SharedService } from '../shared.service';\r\nimport { TranslationService } from '../translation/translation.service';\r\n\r\n@Pipe({\r\n\tname: 'tylTranslate'\r\n})\r\nexport class TylTranslatePipe implements PipeTransform {\r\n\r\n\tconstructor(private sharedService: SharedService,\r\n\t\t\t\tprivate translationService: TranslationService) { }\r\n\r\n\ttransform(englishToTranslate: string): string {\r\n\r\n\t\tif(!this.translationService.overrideTranslationPipe) {\r\n\t\t\tlet index: number = this.translationService.currentLanguageTranslations.findIndex(o => o.English.trim() == englishToTranslate.trim());\r\n\r\n\t\t\tif(index != -1) {\r\n\t\t\t\treturn this.translationService.currentLanguageTranslations[index].Translation;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif(this.translationService.revertToEnglish) {\r\n\t\t\t\tlet index: number = this.translationService.currentLanguageTranslations.findIndex(o => o.Translation && o.Translation.trim() == englishToTranslate.trim());\r\n\r\n\t\t\t\tif(index != -1) {\r\n\t\t\t\t\treturn this.translationService.currentLanguageTranslations[index].English;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet index: number = this.translationService.overrideTranslations.findIndex(o => o.English.trim() == englishToTranslate.trim());\r\n\r\n\t\t\t\tif(index != -1) {\r\n\t\t\t\t\treturn this.translationService.overrideTranslations[index].Translation;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn englishToTranslate;\r\n\t}\r\n}\r\n","import { Component, EventEmitter, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormService } from '../../e-forms/e-form.service';\r\nimport { User } from '../../user/user.model';\r\nimport { PortalMenuHelper } from '../portal-menu-helper';\r\nimport { PortalMenuComponent } from '../portal-menu.component';\r\nimport { Classroom360Service } from './../../../classroom360/classroom360.service';\r\nimport { LoginService } from './../../../shared-modules/login/login.service';\r\nimport { Student360Service } from './../../../student360/student360.service';\r\nimport { Portal } from './../../portal.model';\r\nimport { StudentService } from './../../student/student.service';\r\nimport { PortalMenuPreferences } from './../../user-preferences/portal-menu-preferences.model';\r\nimport { UserPreferencesService } from './../../user-preferences/user-preferences.service';\r\nimport { UserService } from './../../user/user.service';\r\n\r\n// TODO: update preferences\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'application-menu',\r\n templateUrl: './application-menu.component.html',\r\n styleUrls: ['./application-menu.component.css']\r\n})\r\nexport class ApplicationMenuComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n @Output() navigated = new EventEmitter();\r\n @ViewChild(PortalMenuComponent) portalMenuComponent: PortalMenuComponent;\r\n\r\n // Properties\r\n portals: Portal[] = [];\r\n preferences: PortalMenuPreferences;\r\n isStudent = false;\r\n\r\n // Subscription Properties\r\n subscriptions: Subscription[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private userService: UserService,\r\n private classroom360Service: Classroom360Service,\r\n private student360Service: Student360Service,\r\n private studentService: StudentService,\r\n private userPreferencesService: UserPreferencesService,\r\n private loginService: LoginService,\r\n private eFormService: EFormService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n\r\n // Setting up the user because the user stream isn't a behavior subject (although, it probably should be)\r\n this.setupUser(this.userService.currentUser);\r\n\r\n // Performing subscriptions to state changes\r\n this.subscriptions.push(\r\n\r\n // User Subscription\r\n this.userService\r\n .observableCurrentUserStream$\r\n .subscribe(user => {\r\n this.setupUser(user);\r\n this.updatePortals();\r\n }),\r\n\r\n // Staff Subscriptions\r\n this.userPreferencesService\r\n .observableStaffPortalMenuPreferencesStream$\r\n .subscribe(preferences => {\r\n if (!this.isStudent) {\r\n this.updatePortals(this.portals, preferences);\r\n }\r\n }),\r\n this.classroom360Service\r\n .observableStaffAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (!this.isStudent) {\r\n this.updatePortals(portals, this.preferences);\r\n }\r\n }),\r\n\r\n // Student Subscriptions\r\n this.userPreferencesService\r\n .observableStudentPortalMenuPreferencesStream$\r\n .subscribe(preferences => {\r\n if (\r\n this.isStudent\r\n && this.studentService.selectedStudent\r\n ) {\r\n this.updatePortals(this.portals, preferences);\r\n }\r\n }),\r\n this.student360Service\r\n .observableParentAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (\r\n this.isStudent\r\n && this.studentService.selectedStudent\r\n ) {\r\n this.updatePortals(portals, this.preferences);\r\n this.checkEformPermission();\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void { }\r\n\r\n // Callable Methods\r\n\r\n // UI Functions\r\n portalExpanded(portal: Portal) {\r\n // PRE: a portal menu is expanded\r\n // POST: saves the portal preferences and emits the click event\r\n if (portal.IsGroup && this.preferences) {\r\n let portalMenuItem = this.preferences.PortalMenus.filter(preferencePortal =>\r\n (\r\n !preferencePortal.ParentGroupName || preferencePortal.ParentGroupName.toLowerCase() == portal.GroupName.toLowerCase()\r\n )\r\n && preferencePortal.GroupName.toLowerCase() == portal.PortalName.toLowerCase()\r\n && portal.IsGroup\r\n ).sort((a, b) => {\r\n if (a.ParentGroupName != null && a.ParentGroupName == portal.GroupName) {\r\n if (a.ParentGroupName == b.ParentGroupName && a.Id > b.Id) {\r\n return -3;\r\n }\r\n else {\r\n return -2;\r\n }\r\n }\r\n else if (a.ParentGroupName != null) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n })[0];\r\n\r\n if (portalMenuItem) {\r\n portalMenuItem.ParentGroupName = portal.GroupName;\r\n portalMenuItem.Expanded = portal.Expanded;\r\n } else {\r\n portalMenuItem = {\r\n ParentGroupName: portal.GroupName,\r\n GroupName: portal.PortalName,\r\n GroupIcon: portal.GroupIcon,\r\n Expanded: portal.Expanded,\r\n Id: portal.Id\r\n };\r\n this.preferences.PortalMenus.push(portalMenuItem);\r\n }\r\n this.saveMenuPreferences();\r\n }\r\n }\r\n\r\n expandCollapseClick(expandAll: number) {\r\n this.preferences.PortalMenus.forEach(portal => {\r\n portal.Expanded = expandAll;\r\n });\r\n\r\n this.saveMenuPreferences();\r\n }\r\n\r\n saveMenuPreferences() {\r\n const studentId = this.userService.userType == 2 && this.studentService.selectedStudent != null && this.studentService.selectedStudent.Id != null ? this.studentService.selectedStudent.Id : 0;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(this.preferences));\r\n this.userPreferencesService.saveUserPreferences(\r\n studentId,\r\n '/OneSISPortalMenuPreferences',\r\n xmlStream,\r\n 0,\r\n ''\r\n ).subscribe(() => {\r\n if (this.isStudent) {\r\n this.userPreferencesService.studentPortalMenuPreferences = this.preferences;\r\n } else {\r\n this.userPreferencesService.staffPortalMenuPreferences = this.preferences;\r\n }\r\n });\r\n }\r\n\r\n portalNavigated(portal: Portal) {\r\n // PRE: a portal is used to navigate\r\n // POST: sends the navigation event\r\n this.navigated.emit();\r\n }\r\n\r\n // Helper Functions\r\n\r\n // Internal Functions\r\n private updatePortals(\r\n portals?: Portal[],\r\n preferences?: PortalMenuPreferences\r\n ) {\r\n if (portals) {\r\n this.portals = portals;\r\n }\r\n if (preferences) {\r\n this.preferences = preferences;\r\n }\r\n this.portals = PortalMenuHelper.organizePortals(\r\n portals,\r\n this.preferences,\r\n this.loginService.LoginSettings.V10 && this.userService.staffUserStudentLocked\r\n );\r\n }\r\n\r\n private setupUser(user: User) {\r\n if (user) {\r\n this.isStudent = user.UserType != undefined\r\n && user.UserType != 1;\r\n\r\n // Getting portal preferences if we haven't already\r\n // NOTE: This triggers the above preference subscriptions\r\n if (!this.preferences) {\r\n if (this.isStudent) {\r\n if (this.studentService.selectedStudent) {\r\n this.userPreferencesService.getStudentMenuPreferences(this.studentService.selectedStudent.Id).subscribe();\r\n }\r\n } else {\r\n this.userPreferencesService.getStaffMenuPreferences().subscribe();\r\n }\r\n }\r\n }\r\n }\r\n\r\n checkEformPermission() {\r\n if (!this.loginService.LoginSettings.V10) {\r\n this.eFormService.eFormHeadLinePermission = false;\r\n if (this.student360Service.allParentPortals && this.student360Service.allParentPortals.filter(o => o.PortalName == 'e-Forms').length > 0) {\r\n this.eFormService.eFormHeadLinePermission = true;\r\n }\r\n this.eFormService.observableeFormHeadLinePermission.next();\r\n }\r\n }\r\n\r\n sideNavOpened() {\r\n this.portalMenuComponent.sideNavOpened();\r\n }\r\n}","","import { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { PortalSelectionEvent } from './../portal-menu.component';\r\nimport { FavoritePreferences } from './../../user-preferences/favorite-prefences.model';\r\nimport { StudentService } from './../../student/student.service';\r\nimport { LoginService } from './../../../shared-modules/login/login.service';\r\nimport { PortalMenuPreferences } from './../../user-preferences/portal-menu-preferences.model';\r\nimport { Portal } from './../../portal.model';\r\nimport { UserPreferencesService } from './../../user-preferences/user-preferences.service';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\nimport { UserService } from './../../user/user.service';\r\nimport { Student360Service } from './../../../student360/student360.service';\r\nimport { Classroom360Service } from './../../../classroom360/classroom360.service';\r\nimport { Component, OnInit, EventEmitter, Output, Input, OnDestroy } from '@angular/core';\r\nimport { PortalMenuHelper } from '../portal-menu-helper';\r\nimport { forkJoin } from 'rxjs';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'favorite-menu',\r\n templateUrl: './favorite-menu.component.html',\r\n styleUrls: ['./favorite-menu.component.css']\r\n})\r\nexport class FavoriteMenuComponent implements OnInit, OnDestroy {\r\n\r\n // Interface Properties\r\n @Input() forNavigation: boolean;\r\n @Input() forSelection: boolean;\r\n @Input() defaultPreferences: boolean;\r\n @Input() autoSave: boolean;\r\n @Output() portalNavigated = new EventEmitter();\r\n\r\n // Properties\r\n subscriptions: Subscription[] = [];\r\n portalPreferences: PortalMenuPreferences;\r\n favoritesPreferences: FavoritePreferences;\r\n portals: Portal[] = [];\r\n displayPortals: Portal[] = [];\r\n selections: {[portalId: number]: boolean} = {};\r\n\r\n // Constructor\r\n constructor(\r\n private classroom360Service: Classroom360Service,\r\n private student360Service: Student360Service,\r\n private userService: UserService,\r\n private userPreferencesService: UserPreferencesService,\r\n private loginService: LoginService,\r\n private studentService: StudentService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.userPreferencesService\r\n .observableFavoritesPreferencesStream$\r\n .subscribe(favoritePreferences => {\r\n if (\r\n this.portals \r\n && this.portalPreferences\r\n && favoritePreferences\r\n ) {\r\n this.updatePreferences(favoritePreferences);\r\n }\r\n }),\r\n this.classroom360Service\r\n .observableStaffAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (\r\n this.userService.userType != undefined \r\n && this.userService.userType == 1\r\n ) {\r\n forkJoin(\r\n this.userPreferencesService.getStaffMenuPreferences(this.defaultPreferences),\r\n this.userPreferencesService.getFavoritesPreferences(this.defaultPreferences)\r\n ).subscribe(results => {\r\n this.updatePortals(portals, results[0], results[1]);\r\n });\r\n }\r\n }),\r\n this.student360Service\r\n .observableParentAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (\r\n this.userService.userType != undefined \r\n && this.userService.userType != 1\r\n && this.studentService.selectedStudent\r\n ) {\r\n forkJoin(\r\n this.userPreferencesService.getStudentMenuPreferences(this.studentService.selectedStudent.Id, this.defaultPreferences),\r\n this.userPreferencesService.getFavoritesPreferences(this.defaultPreferences)\r\n ).subscribe(results => {\r\n this.updatePortals(portals, results[0], results[1]);\r\n });\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n // Callable Methods\r\n save() {\r\n // POST: Saves the preferences we've been adjusting internally\r\n const studentId = this.userService.userType == 2 && this.studentService.selectedStudent != null && this.studentService.selectedStudent.Id != null ? this.studentService.selectedStudent.Id : 0;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(this.favoritesPreferences));\r\n this.userPreferencesService.saveUserPreferences(\r\n studentId, \r\n '/OneSISFavorites', \r\n xmlStream, \r\n 0, \r\n '',\r\n this.defaultPreferences\r\n ).subscribe(() => {\r\n if (!this.defaultPreferences) {\r\n this.userPreferencesService.favoritesPreferences = this.favoritesPreferences;\r\n }\r\n });\r\n }\r\n\r\n expandAll(expanded: boolean) {\r\n // POST: expands or collapses all of the items\r\n (this.displayPortals.reduce((acc, val) => acc.concat(val), []) as Portal[]).forEach(portal => {\r\n portal.Expanded = expanded ? 1 : 0;\r\n });\r\n }\r\n\r\n refreshPreferences() {\r\n // POST: refreshes the display based on the favorite preferences\r\n // NOTE: We have to do this because there's a bug where mat-menu closing collapses mat-expansion-panels\r\n this.updatePreferences(this.favoritesPreferences);\r\n }\r\n \r\n // UI Functions\r\n portalExpanded(portal: Portal) {\r\n // PRE: a portal menu is expanded\r\n // POST: saves the portal preferences\r\n if (portal.IsGroup && this.forNavigation) {\r\n let changed = false;\r\n let portalMenuItem = this.favoritesPreferences.FavoritePortals.find(preferenceItem => \r\n preferenceItem.PortalName == portal.PortalName\r\n && preferenceItem.IsGroup\r\n );\r\n if (portalMenuItem) {\r\n if (portalMenuItem.Expanded != (portal.Expanded == 1)) {\r\n portalMenuItem.Expanded = portal.Expanded == 1;\r\n changed = true;\r\n }\r\n } else {\r\n portalMenuItem = {\r\n ParentPortalName: '',\r\n PortalDescription: portal.PortalDescription ? portal.PortalDescription.split('?')[0] : '',\r\n PortalName: portal.PortalName,\r\n PortalModule: portal.ParentModule,\r\n GroupName: portal.GroupName,\r\n Expanded: portal.Expanded == 1,\r\n Id: portal.Id,\r\n IsGroup: true\r\n }\r\n this.favoritesPreferences.FavoritePortals.push(portalMenuItem);\r\n changed = true;\r\n }\r\n if (this.autoSave && changed) {\r\n this.save();\r\n }\r\n }\r\n }\r\n\r\n portalSelected(event: PortalSelectionEvent) {\r\n // PRE: a portal is selected\r\n // POST: saves the portal as a new favorite preference\r\n if (!event.portal.IsGroup && this.forSelection) {\r\n let portalMenuItemIndex = this.favoritesPreferences.FavoritePortals.findIndex(preferenceItem => \r\n preferenceItem.PortalName == event.portal.PortalName\r\n && !preferenceItem.IsGroup\r\n );\r\n let changed = false;\r\n if (portalMenuItemIndex >= 0 && !event.selected) {\r\n this.favoritesPreferences.FavoritePortals.splice(portalMenuItemIndex, 1);\r\n changed = true;\r\n } else if (portalMenuItemIndex < 0 && event.selected) {\r\n this.favoritesPreferences.FavoritePortals.push({\r\n ParentPortalName: '',\r\n PortalDescription: event.portal.PortalDescription ? event.portal.PortalDescription.split('?')[0] : '',\r\n PortalName: event.portal.PortalName,\r\n PortalModule: event.portal.ParentModule,\r\n GroupName: event.portal.GroupName,\r\n Expanded: event.portal.Expanded == 1,\r\n Id: event.portal.Id,\r\n IsGroup: false\r\n });\r\n changed = true;\r\n }\r\n if (this.autoSave && changed) {\r\n this.save();\r\n }\r\n }\r\n }\r\n\r\n // Internal Methods\r\n private updatePortals(\r\n portals: Portal[],\r\n portalPreferences?: PortalMenuPreferences, \r\n favoritesPreferences?: FavoritePreferences\r\n ) {\r\n // POST: updates portals and preferences\r\n if (portalPreferences) {\r\n this.portalPreferences = portalPreferences;\r\n }\r\n if (this.portalPreferences) {\r\n this.portals = PortalMenuHelper.organizePortals(\r\n portals,\r\n this.portalPreferences,\r\n this.loginService.LoginSettings.V10 && this.userService.staffUserStudentLocked\r\n );\r\n }\r\n this.updatePreferences(favoritesPreferences);\r\n }\r\n\r\n private updatePreferences(favoritesPreferences: FavoritePreferences) {\r\n // PRE: the portals have been updated\r\n // POST: recursively adjusts the portals according to preferences\r\n if (favoritesPreferences) {\r\n this.favoritesPreferences = cloneDeep(favoritesPreferences);\r\n }\r\n if (this.favoritesPreferences && this.portals) {\r\n if (this.forNavigation) {\r\n const tmpDisplayPortals = this.expandFavoritesRecursive(\r\n this.filterFavoritesRecursive(\r\n cloneDeep(this.portals)\r\n )\r\n );\r\n this.displayPortals = cloneDeep(tmpDisplayPortals.filter(x => x.ChildPortals.length > 0));\r\n } else {\r\n this.displayPortals = cloneDeep(this.portals);\r\n this.expandAll(true);\r\n }\r\n this.selections = {};\r\n this.favoritesPreferences.FavoritePortals.forEach(favoritePortal => {\r\n this.selections[favoritePortal.Id] = true;\r\n });\r\n }\r\n }\r\n\r\n private filterFavoritesRecursive(portals: Portal[]): Portal[] {\r\n // PRE: the portals are defined\r\n // POST: filters the portals down to the favorites\r\n return portals.filter(portal => {\r\n if (portal.ChildPortals) {\r\n portal.ChildPortals = this.filterFavoritesRecursive(portal.ChildPortals);\r\n }\r\n const matchingFavorite = this.favoritesPreferences.FavoritePortals.find(favorite =>\r\n favorite.PortalName == portal.PortalName\r\n && favorite.GroupName == portal.GroupName\r\n && favorite.PortalModule == portal.ParentModule\r\n );\r\n return portal.ChildPortals.length > 0 || matchingFavorite;\r\n });\r\n }\r\n\r\n private expandFavoritesRecursive(portals: Portal[]): Portal[] {\r\n // PRE: the portals and the favorite preferences are defined\r\n // POST: expands the portals recursively\r\n portals.forEach(portal => {\r\n const matchingFavorite = this.favoritesPreferences.FavoritePortals.find(favorite =>\r\n favorite.PortalName == portal.PortalName\r\n && favorite.IsGroup\r\n );\r\n if (matchingFavorite) {\r\n portal.Expanded = matchingFavorite.Expanded ? 1 : 0;\r\n }\r\n if (portal.ChildPortals.length > 0) {\r\n this.expandFavoritesRecursive(portal.ChildPortals);\r\n }\r\n });\r\n return portals;\r\n }\r\n}\r\n","","import { cloneDeep } from 'lodash';\r\nimport { Portal } from '../portal.model';\r\nimport { PortalMenuItem, PortalMenuPreferences } from './../user-preferences/portal-menu-preferences.model';\r\n\r\nexport class PortalMenuHelper {\r\n\r\n public static organizePortals(\r\n portals: Portal[],\r\n preferences?: PortalMenuPreferences,\r\n lockStudentPortals?: boolean\r\n ): Portal[] {\r\n // POST: organizes the portals for the portal menu component\r\n portals = cloneDeep(portals);\r\n let newPortals: Portal[] = [];\r\n\r\n // Only process if we have portals\r\n if (portals && portals.length > 0) {\r\n\r\n // Organizing the portals\r\n const groupPortals: { [group: string]: Portal } = {};\r\n const parentPortals: { [parentId: number]: Portal } = {};\r\n const portalAdded: { [id: number]: boolean } = {};\r\n\r\n // Adding each portal\r\n // NOTE: the order is important. V9 returns group portals with no description, V10 does not.\r\n portals\r\n .filter(portal => portal.ShowAsMenu && !portal.Deleted)\r\n // eslint-disable-next-line complexity\r\n .forEach(portal => {\r\n portalAdded[portal.Id] = false;\r\n\r\n // Determining if the portal is a student filtered portal\r\n if (\r\n (\r\n portal.ParentPortal\r\n || (\r\n portal.GroupName\r\n && portal.GroupName.includes('Student')\r\n ) || portal.PortalName == 'Academic History'\r\n ) && (\r\n portal.PortalDescription != null\r\n && portal.PortalDescription != ''\r\n && !portal.PortalDescription.includes('?studentPortal=true')\r\n )\r\n ) {\r\n portal.PortalDescription += '?studentPortal=true';\r\n }\r\n\r\n // Determining if the portal is an admin portal\r\n if (\r\n (\r\n portal.PortalName == 'Review Behavior Referrals'\r\n || portal.PortalName == 'Manage Behavior Referrals'\r\n ) && (\r\n portal.PortalDescription != null\r\n && portal.PortalDescription != ''\r\n && !portal.PortalDescription.includes('?adminPortal=true')\r\n )\r\n ) {\r\n portal.PortalDescription += '?adminPortal=true';\r\n }\r\n\r\n // If the portal has a parent, add it to the parent's child array\r\n if (portal.ParentId && !portalAdded[portal.Id]) {\r\n if (!parentPortals[portal.ParentId]) {\r\n parentPortals[portal.ParentId] = portals.find(parentPortal => parentPortal.Id == portal.ParentId);\r\n if (parentPortals[portal.ParentId] && !parentPortals[portal.ParentId].ChildPortals) {\r\n parentPortals[portal.ParentId].ChildPortals = [];\r\n }\r\n }\r\n if (parentPortals[portal.ParentId]) {\r\n parentPortals[portal.ParentId].IsGroup = true;\r\n parentPortals[portal.ParentId].ChildPortals.push(portal);\r\n portalAdded[portal.Id] = true;\r\n }\r\n }\r\n\r\n // If we don't have portals for the group, create them\r\n if (portal.GroupName && !portalAdded[portal.Id]) {\r\n if (!groupPortals[portal.GroupName]) {\r\n const possibleGroupPortals = portals.filter(tempPortal =>\r\n tempPortal.PortalName == portal.GroupName\r\n && !tempPortal.PortalDescription\r\n );\r\n if (possibleGroupPortals && possibleGroupPortals.length == 1) {\r\n groupPortals[portal.GroupName] = possibleGroupPortals[0];\r\n if (!groupPortals[portal.GroupName].ChildPortals) {\r\n groupPortals[portal.GroupName].ChildPortals = [];\r\n }\r\n } else {\r\n groupPortals[portal.GroupName] = new Portal(portal.GroupName);\r\n groupPortals[portal.GroupName].IsGroup = true;\r\n groupPortals[portal.GroupName].GroupName = portal.GroupName;\r\n groupPortals[portal.GroupName].MenuIcon = portal.GroupIcon;\r\n }\r\n }\r\n if (groupPortals[portal.GroupName].Id != portal.Id) {\r\n groupPortals[portal.GroupName].ChildPortals.push(portal);\r\n portalAdded[portal.Id] = true;\r\n }\r\n }\r\n\r\n // Adding the portal if it's not a group (groups will be readded here)\r\n // NOTE: We only add portals with portal descriptions here because the others are treated like groups\r\n if (!portalAdded[portal.Id] && portal.PortalDescription) {\r\n newPortals.push(portal);\r\n portalAdded[portal.Id] = true;\r\n }\r\n\r\n // Always make sure they have child portals\r\n if (!portal.ChildPortals) {\r\n portal.ChildPortals = [];\r\n }\r\n });\r\n\r\n // Helper function for groups\r\n const addGroup = (groupPortal: Portal) => {\r\n if (!portalAdded[groupPortal.Id]) {\r\n if (groupPortal.ChildPortals.length > 0) {\r\n newPortals.push(groupPortal);\r\n }\r\n portalAdded[groupPortal.Id] = true;\r\n }\r\n };\r\n\r\n // Adding all groups\r\n Object.keys(groupPortals).forEach(groupKey => {\r\n addGroup(groupPortals[groupKey]);\r\n });\r\n\r\n // Treat parents that don't have a description as groups\r\n Object.keys(parentPortals).forEach(parentKey => {\r\n if (parentPortals[parentKey] && !parentPortals[parentKey].PortalDescription) {\r\n addGroup(parentPortals[parentKey]);\r\n }\r\n });\r\n }\r\n\r\n // Sorting the portals\r\n const sortRecursive = (sortPortals: Portal[]) => {\r\n sortPortals.sort((a, b) => a.PortalName.localeCompare(b.PortalName));\r\n sortPortals.forEach(sortPortal => {\r\n if (sortPortal.ChildPortals && sortPortal.ChildPortals.length > 0) {\r\n sortRecursive(sortPortal.ChildPortals);\r\n }\r\n });\r\n };\r\n sortRecursive(newPortals);\r\n\r\n // Applying the preferences recursively\r\n const expandRecursive = (expandPortals: Portal[]) => {\r\n expandPortals.forEach(portal => {\r\n if (preferences) {\r\n const portalMenuPreference = preferences.PortalMenus.filter(preferencePortal =>\r\n (\r\n !preferencePortal.ParentGroupName || preferencePortal.ParentGroupName.toLowerCase() == portal.GroupName.toLowerCase()\r\n )\r\n && preferencePortal.GroupName.toLowerCase() == portal.PortalName.toLowerCase()\r\n && portal.IsGroup\r\n ).sort((a, b) => {\r\n if (a.ParentGroupName != null && a.ParentGroupName == portal.GroupName) {\r\n if (a.ParentGroupName == b.ParentGroupName && a.Id > b.Id) {\r\n return -3;\r\n }\r\n else {\r\n return -2;\r\n }\r\n }\r\n else if (a.ParentGroupName != null) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n })[0];\r\n\r\n if (portalMenuPreference) {\r\n portal.Expanded = parseInt(portalMenuPreference.Expanded.toString(), 10); // NOTE: Expanded is usually a string\r\n }\r\n else if (portal.IsGroup) {\r\n portal.Expanded = 1;\r\n const portalMenuItem: PortalMenuItem = {\r\n ParentGroupName: portal.GroupName,\r\n GroupName: portal.PortalName,\r\n GroupIcon: portal.GroupIcon,\r\n Expanded: 1,\r\n Id: portal.Id\r\n };\r\n preferences.PortalMenus.push(portalMenuItem);\r\n }\r\n }\r\n if (portal.ChildPortals && portal.ChildPortals.length > 0) {\r\n expandRecursive(portal.ChildPortals);\r\n }\r\n });\r\n };\r\n expandRecursive(newPortals);\r\n\r\n // If the student portals are locked, only keep preferences for the student portals\r\n // NOTE: This seems pretty hacky. Shouldn't we just save up the preferences dynamically and overwrite the previous ones?\r\n if (lockStudentPortals) {\r\n newPortals = newPortals.filter(p => p.ParentModule == '/student360');\r\n if (preferences.PortalMenus.filter(m => m.GroupName == 'My Students').length > 0) {\r\n preferences.PortalMenus = preferences.PortalMenus.filter(m => m.GroupName == 'My Students');\r\n }\r\n else {\r\n preferences.PortalMenus = preferences.PortalMenus.filter(m => m.GroupName == 'Students');\r\n }\r\n }\r\n\r\n // Returning the organized portals\r\n return newPortals;\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'highlightSearch'\r\n})\r\nexport class HighlightSearchPipe implements PipeTransform {\r\n\r\n transform(value: string, args: string): any {\r\n if (!args) {\r\n return value;\r\n }\r\n\r\n const regex = new RegExp(args, 'gi');\r\n const match = value.match(regex);\r\n\r\n if (!match) {\r\n return value;\r\n }\r\n\r\n return value.replace(regex, `${match[0]}`);\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\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, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { cloneDeep } from 'lodash';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { SelectCourseDialogComponent } from '../../classroom360/guards/select-course/select-course-dialog/select-course-dialog.component';\r\nimport { MultipleFamiliesComponent } from '../../student360/online-registration/student-update/multiple-families/multiple-families.component';\r\nimport { Portal } from '../portal.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { ClassroomSummaryService } from './../../classroom360/classroom-summary/classroom-summary.service';\r\nimport { DataQueryService } from './../../classroom360/data-query/data-query.service';\r\nimport { LoginService } from './../../shared-modules/login/login.service';\r\nimport { OnlineRegistrationService } from './../../student360/online-registration/online-registration.service';\r\nimport { SharedService } from './../shared.service';\r\n\r\nexport class PortalSelectionEvent {\r\n portal: Portal;\r\n selected: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'portal-menu',\r\n templateUrl: './portal-menu.component.html',\r\n styleUrls: ['./portal-menu.component.css']\r\n})\r\nexport class PortalMenuComponent implements OnInit {\r\n\r\n // Interface Properties\r\n @Input() navigable = false;\r\n @Input() selectable = false;\r\n @Input() selectedPortals: { [portal: number]: boolean } = {};\r\n @Input() searchable = false;\r\n @Input() topLevel = true;\r\n @Input() searchValue: string;\r\n\r\n private _portals: Portal[] = [];\r\n get portals(): Portal[] {\r\n return this._portals;\r\n }\r\n @Input() set portals(value: Portal[]) {\r\n this._portals = value;\r\n this.displayPortals = value;\r\n }\r\n\r\n @Output() portalSelected = new EventEmitter();\r\n @Output() portalExpanded = new EventEmitter();\r\n @Output() portalNavigated = new EventEmitter();\r\n @Output() expandCollapseClick = new EventEmitter();\r\n\r\n // Local Properties\r\n @ViewChild('divMenu') divMenu: ElementRef;\r\n displayPortals: Portal[] = [];\r\n search: string;\r\n menuClicked = false;\r\n userType: number;\r\n selectedPortalName = '';\r\n selectedPortalUrl = '';\r\n\r\n // Constructor\r\n constructor(\r\n private router: Router,\r\n private dataQueryService: DataQueryService,\r\n private dialog: MatDialog,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private sharedService: SharedService,\r\n private loginService: LoginService,\r\n private onlineRegistrationService: OnlineRegistrationService,\r\n private userService: UserService,\r\n private classroom360Service: Classroom360Service\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit(): void {\r\n this.userType = this.userService.userType;\r\n\r\n this.userService.observableCurrentUserStream$.subscribe(user => {\r\n this.userType = this.userService.userType;\r\n });\r\n\r\n this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portals => {\r\n if (this.userType == 1 && this.router.url.toLowerCase() != '/login' && this.router.url.toLowerCase() != 'classroom360/cards') {\r\n const selectedPortal = this.portals.filter(o => o.PortalDescription != null && o.PortalDescription != '' && this.router.url.toLowerCase().indexOf(o.ParentModule.toLowerCase() + o.PortalDescription.toLowerCase()) >= 0)[0];\r\n if (selectedPortal) {\r\n this.selectedPortalName = selectedPortal.PortalName;\r\n this.selectedPortalUrl = selectedPortal.PortalDescription;\r\n }\r\n }\r\n });\r\n\r\n this.router.events.subscribe((event) => {\r\n if (this.selectedPortalUrl != '') {\r\n if (event instanceof NavigationEnd) {\r\n if (this.router.url.toLowerCase().indexOf(this.selectedPortalUrl.toLowerCase()) < 0) {\r\n this.selectedPortalName = '';\r\n this.selectedPortalUrl = '';\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // UI Functions\r\n portalClick(portal: Portal) {\r\n // PRE: A portal is clicked\r\n // POST: naviates to that page\r\n // TODO: We need to update the pages to have loading interceptors for the data they require\r\n if (this.navigable) {\r\n let parentModule = portal.ParentModule ? portal.ParentModule : '/student360';\r\n if (this.loginService.LoginSettings.V10 == false && (this.loginService.LoginSettings.UseSection504 == true || this.loginService.LoginSettings.EnableSped360 == true) && this.userType == 1 && portal.PortalName == 'Special Services' && (portal.GroupName == 'Students' || portal.GroupName == 'My Students')) {\r\n parentModule = '/sped360';\r\n portal.PortalDescription = '/studentDocumentHome';\r\n }\r\n this.sharedService.currentPortal = portal;\r\n this.portalNavigated.emit(portal);\r\n let isUHD = false;\r\n switch (portal.PortalName) {\r\n // NOTE! You should not include specific portal logic. That should be handled with guards.\r\n // If you need to include specific logic here, include the reason on each case\r\n\r\n // V9 UHD and OR has a multiple families check\r\n // I don't know if this can be handled via a guard because OR is a mess\r\n case 'Update Household Data':\r\n isUHD = true;\r\n // eslint-disable-next-line no-fallthrough\r\n case 'Online Registration':\r\n if (!this.loginService.LoginSettings.V10) {\r\n this.onlineRegistrationService.getOnlineRegFamilies(isUHD).subscribe(data => {\r\n if (data.length > 1) {\r\n const dialogBox = this.dialog.open(MultipleFamiliesComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: { families: data, isUHD: isUHD },\r\n disableClose: true\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(result => {\r\n subscription.unsubscribe();\r\n if (parseInt(result, 0) > 0) {\r\n this.onlineRegistrationService.isMultipleFamiliesPopupOpened = true;\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n }\r\n });\r\n }\r\n else if (data.length == 1) {\r\n this.onlineRegistrationService.isMultipleFamiliesPopupOpened = false;\r\n this.onlineRegistrationService.familyId = data[0].FamilyId;\r\n this.onlineRegistrationService.parentType = data[0].ParentType;\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n }\r\n });\r\n } else {\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n }\r\n break;\r\n\r\n // Roster Query: Select a course\r\n // TODO: we're going to remove this once we've timed the changes between Classic and Angular\r\n case 'Roster Query':\r\n if (portal.PortalName == 'Roster Query' && portal.PortalDescription != '/rosterQuery') {\r\n this.dataQueryService.rosterQuery = true;\r\n const dialogBox = this.dialog.open(SelectCourseDialogComponent, {\r\n disableClose: true,\r\n hasBackdrop: true,\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(course => {\r\n subscription.unsubscribe();\r\n if (course) {\r\n this.classroomSummaryService.selectedCourse = course;\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n }\r\n });\r\n } else {\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n }\r\n break;\r\n\r\n // Gradebook: Ensure we have access\r\n // TODO: we're going to remove this once we've timed the changes between Classic and Angular\r\n case 'Gradebook':\r\n case 'Report Card Grades':\r\n if (\r\n !portal.PortalDescription.toLowerCase().includes('/v10')\r\n && !portal.PortalDescription.toLowerCase().includes('/v9')\r\n ) {\r\n portal.PortalDescription = portal.PortalDescription + (this.loginService.LoginSettings.V10 ? '/V10' : '/V9');\r\n }\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n break;\r\n\r\n // Default: just navigate and let guards take care of it\r\n default:\r\n this.router.navigateByUrl(parentModule + portal.PortalDescription);\r\n break;\r\n }\r\n\r\n if (this.userType == 1) {\r\n this.selectedPortalName = portal.PortalName;\r\n this.selectedPortalUrl = portal.PortalDescription;\r\n }\r\n }\r\n }\r\n\r\n menuToggled(portal: Portal, expanded: boolean) {\r\n // PRE: A menu is expanded AFTER a user has clicked on a menu\r\n // POST: emits that portal click and sets the portal's expanded property\r\n if (this.menuClicked) {\r\n portal.Expanded = expanded ? 1 : 0;\r\n if (!this.search) {\r\n this.portalExpanded.emit(portal);\r\n }\r\n this.menuClicked = false;\r\n }\r\n }\r\n\r\n menuClick(event: Event) {\r\n // PRE: the menu is clicked\r\n // POST: sets the menu as clicked, then stops the propagation if we aren't expanding or collapsing\r\n this.menuClicked = true;\r\n event.stopPropagation();\r\n }\r\n\r\n portalCheckboxChange(portal: Portal, selected: boolean) {\r\n // PRE: A portal's checkbox is clicked\r\n // POST: toggles whether the portal is selected and emits the portal\r\n this.selectedPortals[portal.Id] = selected;\r\n this.portalSelected.emit({ portal: portal, selected: this.selectedPortals[portal.Id] });\r\n }\r\n\r\n performSearch() {\r\n // PRE: A search is performed by clicking on the search button or pressing enter in the field\r\n // POST: performs the search and limits the menu to matching portals\r\n if (this.search) {\r\n const filterPortals = (portals: Portal[]): Portal[] => {\r\n const filteredPortals: Portal[] = [];\r\n portals.forEach(portal => {\r\n const filteredPortal = cloneDeep(portal);\r\n const filteredChildPortals = filterPortals(filteredPortal.ChildPortals);\r\n const exactMatch = filteredPortal.PortalName.trim().toLowerCase() == this.search.trim().toLowerCase();\r\n const partialMatch = filteredPortal.PortalName.trim().toLowerCase().includes(this.search.trim().toLowerCase());\r\n const hasChildren = filteredChildPortals.length > 0;\r\n if (!exactMatch && hasChildren) {\r\n filteredPortal.ChildPortals = filteredChildPortals;\r\n }\r\n if (partialMatch || hasChildren) {\r\n filteredPortal.Expanded = 1;\r\n filteredPortals.push(cloneDeep(filteredPortal));\r\n }\r\n });\r\n return filteredPortals;\r\n };\r\n this.displayPortals = filterPortals(this.portals);\r\n } else {\r\n this.displayPortals = this.portals;\r\n }\r\n this.searchValue = this.search;\r\n }\r\n\r\n expandCollapseButtonClick(expandAll: number) {\r\n if (!this.search) {\r\n this.expandCollapseClick.emit(expandAll);\r\n }\r\n else {\r\n this.expandCollapseAll(expandAll);\r\n }\r\n }\r\n\r\n expandCollapseAll(expandAll: number, selectedPortal: Portal = null) {\r\n if (selectedPortal == null) {\r\n this.displayPortals.forEach(portal => {\r\n if (portal.ChildPortals != null && portal.ChildPortals.length > 0) {\r\n portal.Expanded = expandAll;\r\n\r\n portal.ChildPortals.forEach(childPortal => {\r\n this.expandCollapseAll(expandAll, childPortal);\r\n });\r\n }\r\n });\r\n }\r\n else if (selectedPortal != null && selectedPortal.ChildPortals != null && selectedPortal.ChildPortals.length > 0) {\r\n selectedPortal.Expanded = expandAll;\r\n\r\n selectedPortal.ChildPortals.forEach(childPortal => {\r\n this.expandCollapseAll(expandAll, childPortal);\r\n });\r\n }\r\n }\r\n\r\n sideNavOpened() {\r\n if (this.userType == 1 && this.searchable) {\r\n if (this.router.url.toLowerCase().indexOf('classroom360/cards') >= 0) {\r\n this.divMenu.nativeElement.scrollTop = 0;\r\n }\r\n }\r\n }\r\n}","export class Portal {\r\n\r\n // Static Properties\r\n static NewPortalID = 1000;\r\n\r\n\t// Server Properties\r\n\t$id: string | null;\r\n\tAnnouncementsOnly: boolean;\r\n\tDeleted: boolean | null;\r\n\tDisabled: boolean | null;\r\n\tDisabledMessage: string | null;\r\n\tIconType: any | null;\r\n\tId: number | null;\r\n\tIsLive: boolean | null;\r\n\tIsMyLinksTile: boolean | null;\r\n\tFavorite: boolean | null;\r\n\tOpenInNewWindow: boolean | null;\r\n\tParentId: number | null;\r\n\tParentPortal: boolean;\r\n\tPortalDescription: string | null;\r\n\tPortalName: string | null;\r\n\tShowAsMenu: boolean | null;\r\n\tShowAsTile: boolean | null;\r\n\tShowonCurrentYear: boolean | null;\r\n\tShowonFutureYear: boolean | null;\r\n\tShowonPastYear: boolean | null;\r\n\tTileAddedOn: Date | null;\r\n\tTileColor: any | null;\r\n\tTileIcon: any | null;\r\n\tTileImageFile: any | null;\r\n\tTileOrder: number | null;\r\n\tTileType: any | null;\r\n\tTransportationYear: any | null;\r\n\tShowIcon: boolean | null;\r\n\tSelected = false;\r\n\tGroupName: string | null;\r\n\tMenuIcon: string | null;\r\n\tMenuDisabledIcon: string | null;\r\n GroupIcon: string | null;\r\n\tStudent_ID: number;\r\n\tIsFavorite = false;\r\n\tGroupNameFavorite: string | null;\r\n\tNoSchoolPolicy: boolean;\r\n\tRequiredPrivilegeIDs: number[];\r\n\r\n\t// Non DTO Fields:\r\n\tinnerHTML: string;\r\n\tParentModule: string;\r\n\tTileFontColor: string;\r\n\r\n\t// Local Properties\r\n\tapplyFilterStudents = false;\r\n\tisDefaultSelected = false;\r\n\tExpanded = 1;\r\n IsGroup = false;\r\n ChildPortals: Portal[];\r\n\r\n // Constructor\r\n constructor(portalName?: string) {\r\n this.PortalName = portalName ?? '';\r\n this.ShowAsMenu = true;\r\n this.Deleted = false;\r\n this.ChildPortals = [];\r\n this.Id = Portal.NewPortalID;\r\n Portal.NewPortalID += 1;\r\n }\r\n}\r\n","\r\n

\r\n {{attachment.FileID == -1 ? 'Add' : 'Edit'}} Attachment\r\n

\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n Visible to Parents/Students\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Visible to Parents/Students\r\n \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 { ProfileService } from '../profile.service';\r\nimport { ErrorList } from './../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit, ViewChild, ElementRef } from '@angular/core';\r\nimport { ProfileAttachment } from '../profile-attachment.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'add-profile-attachment',\r\n templateUrl: './add-profile-attachment-dialog.component.html',\r\n styleUrls: [\r\n './add-profile-attachment-dialog.component.css'\r\n ]\r\n})\r\nexport class AddProfileAttachmentDialogComponent implements OnInit {\r\n\r\n // Properties\r\n attachment: ProfileAttachment;\r\n errors: ErrorList[] = [];\r\n saved: boolean;\r\n V10: boolean;\r\n @ViewChild('nameField', { read: ElementRef, static: true }) nameField: ElementRef;\r\n @ViewChild('descriptionField', { read: ElementRef, static: true }) descriptionField: ElementRef;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private profileService: ProfileService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (this.data && this.data.attachment) {\r\n this.attachment = this.data.attachment;\r\n } else {\r\n this.attachment = new ProfileAttachment();\r\n }\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: saves the attachment and closes the dialog box\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.profileService.updateProfileAttachment(this.attachment).subscribe(id => {\r\n this.saved = true;\r\n this.attachment.FileID = id;\r\n this.dialogBox.close();\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box\r\n this.saved = false;\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n if (this.V10) {\r\n if (!this.attachment.MyFileName) {\r\n this.errors.push({\r\n fieldRef: this.nameField,\r\n fieldName: 'Name',\r\n errorMsg: 'Name is required.'\r\n });\r\n }\r\n }\r\n else {\r\n if (!this.attachment.Description) {\r\n this.errors.push({\r\n fieldRef: this.descriptionField,\r\n fieldName: 'Description',\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n }\r\n \r\n if (!this.attachment.MyFile && !this.attachment.OriginalFileName) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'File is required.'\r\n });\r\n }\r\n }\r\n}","\r\n\r\n \r\n \r\n File \r\n \r\n \r\n {{attachment.Description}}\r\n \r\n {{attachment.OriginalFileName}}\r\n \r\n \r\n\r\n \r\n \r\n Uploaded \r\n \r\n {{attachment.DateAttached | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Uploaded By \r\n \r\n {{attachment.UploadedBy}}\r\n \r\n \r\n\r\n \r\n \r\n Visible to
Parents/Students
\r\n \r\n {{attachment.AllowParentToView ? 'Y' : 'N'}}\r\n \r\n
\r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n\r\n \\\r\n \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 { ProfileService } from './../profile.service';\r\nimport { DeleteProfileAttachmentDialogComponent } from './../delete-profile-attachment-dialog/delete-profile-attachment-dialog.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { AddProfileAttachmentDialogComponent } from './../add-profile-attachment-dialog/add-profile-attachment-dialog.component';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { Attachment } from './../../../shared-components/models/attachment.model';\r\nimport { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy, EventEmitter, ChangeDetectorRef } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { ProfileAttachment } from '../profile-attachment.model';\r\nimport { System } from '../../System';\r\nimport { Profile } from '../profile.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { AttachmentsMenuDialogComponent } from '../attachments-menu-dialog/attachments-menu-dialog.component';\r\n/**\r\n * This component is used for creating a table of profile attachments.\r\n *\r\n * @input profile: a selected profile\r\n * @input userCanEdit: set this to true if the user can edit the profiles. False by default.\r\n * @input attachmentChanged: this is an event emitter signalling if the attachment have changed.\r\n * If your attachment might change, be sure to supply this event emitter.\r\n * Emit from that event emitter if and when your attachment change.\r\n */\r\n@Component({\r\n selector: 'attachment-table',\r\n templateUrl: './attachment-table.component.html',\r\n styleUrls: ['./attachment-table.component.css']\r\n})\r\nexport class AttachmentTableComponent implements OnInit, OnDestroy {\r\n\r\n // Input Properties\r\n @Input() profile: Profile;\r\n @Input() userCanEdit = false;\r\n @Input() attachmentChanged: EventEmitter;\r\n\r\n // Local Properties\r\n tableData: TylerMatTableDataSource;\r\n columns = ['file', 'uploaded', 'uploaded by', 'visible to parents students', 'actions'];\r\n subscriptions: Subscription[] = [];\r\n V10: boolean;\r\n attachments: Attachment[] = [];\r\n\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private dialog: MatDialog,\r\n private profileService: ProfileService,\r\n private loginService: LoginService,\r\n private changeDetector: ChangeDetectorRef,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (!this.userCanEdit) {\r\n this.columns.splice(this.columns.indexOf('actions'), 1);\r\n }\r\n this.loadTable();\r\n\r\n if (this.attachmentChanged) {\r\n this.subscriptions.push(\r\n this.attachmentChanged.subscribe(() => {\r\n this.loadTable();\r\n }),\r\n );\r\n }\r\n }\r\n\r\n private loadTable() {\r\n this.attachments = this.profile ? this.profile.ProfileAttachments : [];\r\n this.tableData = new TylerMatTableDataSource(this.attachments);\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n // Methods\r\n downloadAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to view\r\n // POST: downloads the attachment to the user\r\n console.log(attachment);\r\n this.subscriptions.push(\r\n this.profileService.getAttachmentFile(attachment.FileID).subscribe(result => {\r\n console.log(result);\r\n const filename = this.V10 ? result.MyFileName + '.' + result.FileExtension : result.MyFileName;\r\n System.saveFile(result.MyFile, result.FileType, filename);\r\n })\r\n );\r\n }\r\n\r\n editAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to edit\r\n // POST: opens the dialog for editing the attachment\r\n const changedAttachment = Object.assign(new ProfileAttachment, attachment);\r\n changedAttachment.ContentID = this.profile.ProfileContentId;\r\n const dialogBox = this.dialog.open(AddProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: changedAttachment\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n Object.assign(attachment, changedAttachment);\r\n }\r\n })\r\n );\r\n }\r\n\r\n deleteAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to delete\r\n // POST: opens the dialog for deleting the attachment\r\n attachment.ContentID = this.profile.ProfileContentId;\r\n const dialogBox = this.dialog.open(DeleteProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.deleted) {\r\n this.attachments.splice(this.attachments.indexOf(attachment), 1);\r\n this.tableData = new TylerMatTableDataSource(this.attachments);\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","\r\n

\r\n Attachments\r\n

\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n Name \r\n \r\n \r\n {{attachment.MyFileName}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Description \r\n \r\n {{attachment.Description}}\r\n \r\n \r\n\r\n \r\n \r\n Attached \r\n \r\n {{attachment.DateAttached | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Visible to
Parents/Students
\r\n \r\n {{attachment.AllowParentToView ? 'Y' : 'N'}}\r\n \r\n
\r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n\r\n \\\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n\r\n \r\n
    \r\n
  • \r\n Edit\r\n
  • \r\n
  • \r\n Delete\r\n
  • \r\n
\r\n
\r\n
","import { ProfileService } from './../profile.service';\r\nimport { DeleteProfileAttachmentDialogComponent } from './../delete-profile-attachment-dialog/delete-profile-attachment-dialog.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { AddProfileAttachmentDialogComponent } from './../add-profile-attachment-dialog/add-profile-attachment-dialog.component';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { Attachment } from './../../../shared-components/models/attachment.model';\r\nimport { Component, Inject, OnInit, OnDestroy, EventEmitter } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { ProfileAttachment } from '../profile-attachment.model';\r\nimport { System } from '../../System';\r\nimport {Profile} from '../profile.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { UserService } from '../../user/user.service';\r\nimport { UserType } from '../../user/user-type';\r\n\r\n@Component({\r\n selector: 'attachments-menu',\r\n templateUrl: './attachments-menu-dialog.component.html',\r\n styleUrls: [\r\n './attachments-menu-dialog.component.css'\r\n ]\r\n})\r\nexport class AttachmentsMenuDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n attachments: Attachment[] = [];\r\n tableData: TylerMatTableDataSource;\r\n columns = ['name', 'description', 'attached', 'visible to parents students', 'actions'];\r\n subscriptions: Subscription[] = [];\r\n userCanAdd = false;\r\n profile: Profile;\r\n V10: boolean;\r\n attachmentChanged = new EventEmitter();\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialog: MatDialog,\r\n private profileService: ProfileService,\r\n private loginService: LoginService,\r\n private userService: UserService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (this.data.attachments) {\r\n this.attachments = this.data.attachments;\r\n } else {\r\n this.attachments = [];\r\n }\r\n this.profile = this.data.profile;\r\n // For V9 - When logged in with parent/student only show attachments those are Allow parent to view \r\n if (this.userService.currentUser.UserType != UserType.Staff) {\r\n this.profile.ProfileAttachments = this.profile.parentViewableAttachments;\r\n }\r\n this.userCanAdd = this.data.userCanAdd;\r\n if (!this.userCanAdd) {\r\n this.columns.splice(this.columns.indexOf('actions'), 1);\r\n }\r\n this.tableData = new TylerMatTableDataSource(this.attachments);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n addAttachment() {\r\n // PRE: the add attachment is clicked\r\n // POST: shows the add attachment dialog\r\n const attachment = new ProfileAttachment();\r\n attachment.FileType = '';\r\n attachment.FileExtension = '';\r\n attachment.Description = '';\r\n attachment.DocOwnerID = this.profile.ProfileContentId;\r\n attachment.FolderID = -1;\r\n attachment.FileID = -1;\r\n attachment.AllowParentToView = true;\r\n attachment.TableID = 18;\r\n attachment.MyFileName = '';\r\n attachment.OriginalFileName = '';\r\n attachment.DateAttached = new Date();\r\n attachment.ContentID = this.profile.ProfileContentId\r\n const dialogBox = this.dialog.open(AddProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n if (this.V10) {\r\n this.attachments.push(attachment);\r\n this.tableData = new TylerMatTableDataSource(this.attachments);\r\n }\r\n else {\r\n this.profile.ProfileAttachments.push(dialogBox.componentInstance.attachment)\r\n this.attachmentChanged.emit();\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n downloadAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to view\r\n // POST: downloads the attachment to the user\r\n console.log(attachment);\r\n this.subscriptions.push(\r\n this.profileService.getAttachmentFile(attachment.FileID).subscribe(result => {\r\n console.log(result);\r\n const filename = this.V10 ? result.MyFileName + '.' + result.FileExtension : result.MyFileName;\r\n System.saveFile(result.MyFile, result.FileType, filename);\r\n })\r\n );\r\n }\r\n\r\n editAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to edit\r\n // POST: opens the dialog for editing the attachment\r\n const changedAttachment = Object.assign(new ProfileAttachment, attachment);\r\n changedAttachment.ContentID = this.profile.ProfileContentId;\r\n const dialogBox = this.dialog.open(AddProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: changedAttachment\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n Object.assign(attachment, changedAttachment);\r\n }\r\n })\r\n );\r\n }\r\n\r\n deleteAttachment(attachment: ProfileAttachment) {\r\n // PRE: an attachment to delete\r\n // POST: opens the dialog for deleting the attachment\r\n attachment.ContentID = this.profile.ProfileContentId;\r\n const dialogBox = this.dialog.open(DeleteProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.deleted) {\r\n this.attachments.splice(this.attachments.indexOf(attachment), 1);\r\n this.tableData = new TylerMatTableDataSource(this.attachments);\r\n }\r\n })\r\n );\r\n }\r\n}","import { ProfileService } from '../profile.service';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit } from '@angular/core';\r\nimport { ProfileAttachment } from '../profile-attachment.model';\r\n\r\n@Component({\r\n selector: 'delete-profile-attachment',\r\n templateUrl: './delete-profile-attachment-dialog.component.html',\r\n styleUrls: [\r\n './delete-profile-attachment-dialog.component.css'\r\n ]\r\n})\r\nexport class DeleteProfileAttachmentDialogComponent implements OnInit {\r\n\r\n // Properties\r\n attachment: ProfileAttachment;\r\n deleted: boolean;\r\n\r\n // Class Functions\r\n constructor (\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private profileService: ProfileService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected dialog data with an attachment\r\n // POST: initializes the data\r\n this.attachment = this.data.attachment;\r\n }\r\n\r\n delete() {\r\n // PRE: the delete button is clicked\r\n // POST: deletes the attachment and closes the dialog box\r\n this.profileService.deleteProfileAttachment(this.attachment.FileID, this.attachment.ContentID).subscribe(() => {\r\n this.deleted = true;\r\n this.dialogBox.close();\r\n });\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n

\r\n Delete Attachment\r\n

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

\r\n Are you sure you want to delete this attachment?\r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Attachment } from './../../shared-components/models/attachment.model';\r\n\r\nexport class ProfileAttachment extends Attachment {\r\n FileID = -1;\r\n TableID = 18;\r\n DocOwnerID: number;\r\n FolderID = -1;\r\n MyFileName = '';\r\n OriginalFileName = '';\r\n AllowParentToView = true;\r\n DateAttached = new Date();\r\n FormDocType_ID = -1;\r\n ContentID = -1; \r\n}\r\n","import { ProfileNode } from './profile-node';\r\n\r\nexport class Topic {\r\n\r\n // Properties\r\n TopicId: number;\r\n children: ProfileNode[] = [];\r\n topLevelNode: ProfileNode;\r\n subLevelNodes: ProfileNode[] = [];\r\n first: boolean;\r\n last: boolean;\r\n\r\n // Class Functions\r\n get sequence(): number {\r\n if (this.topLevelNode) {\r\n return this.topLevelNode.data.newSequence != undefined ? this.topLevelNode.data.newSequence : this.topLevelNode.data.Sequence;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n}","import { Profile } from './profile.model';\r\nimport { Topic } from './topic';\r\nimport { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\n\r\nexport class ProfileNode {\r\n data: Profile;\r\n parent: ProfileNode;\r\n children: ProfileNode[] = [];\r\n subTableData: TylerMatTableDataSource;\r\n selectedRow: ProfileNode;\r\n topic: Topic;\r\n first: boolean;\r\n last: boolean;\r\n\r\n // Methods\r\n hasChildren(): boolean {\r\n \t// POST: returns true if this node has children\r\n return this.subTableData && this.subTableData.data.length > 0;\r\n }\r\n\r\n hasParent(profile: ProfileNode): boolean {\r\n \t// PRE: a profile node\r\n\t\t// POST: returns true if the profile is a parent of this node\r\n \tif (this.parent == null) {\r\n \t\treturn false;\r\n\t\t} else if (this.parent == profile) {\r\n \t\treturn true;\r\n\t\t} else {\r\n \t\treturn this.parent.hasParent(profile);\r\n\t\t}\r\n\t}\r\n\r\n checkSelectedRow() {\r\n // POST: checks if the row is selected by consulting the parents\r\n let previousSelected: ProfileNode = this;\r\n let currentNode: ProfileNode = this.parent;\r\n while (currentNode) {\r\n if (currentNode.selectedRow != previousSelected) {\r\n return false;\r\n }\r\n previousSelected = currentNode;\r\n currentNode = currentNode.parent;\r\n }\r\n return true;\r\n }\r\n\r\n getNestedLayers(layerCount = 0): number {\r\n // PRE: a layercount for recursion\r\n // POST: returns the depth of the deepest node in the tree to which this node belongs\r\n if (this.data.ParentID > 0) {\r\n if (this.parent) {\r\n return this.parent.getNestedLayers(layerCount + 1);\r\n }\r\n } else if (this.data.ProfileContentId > 0) {\r\n return layerCount + 1;\r\n } else {\r\n return layerCount;\r\n }\r\n }\r\n\r\n sortChildren() {\r\n // POST: sorts the children of this node in order of sequence\r\n this.children.sort((childA, childB) => {\r\n const childASequence = childA.data.newSequence != undefined ? childA.data.newSequence : childA.data.Sequence;\r\n const childBSequence = childB.data.newSequence != undefined ? childB.data.newSequence : childB.data.Sequence;\r\n if (childASequence < childBSequence) {\r\n return -1;\r\n } else if (childASequence > childBSequence) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n for (let i = 0; i < this.children.length; i++) {\r\n const child = this.children[i];\r\n if (i == 0) {\r\n child.first = true;\r\n } else {\r\n child.first = false;\r\n }\r\n if (i == this.children.length - 1) {\r\n child.last = true;\r\n } else {\r\n child.last = false;\r\n }\r\n child.sortChildren();\r\n }\r\n }\r\n\r\n getOpenedNodes(): Profile[] {\r\n // POST: obtains the opened class information beneath this now\r\n const openInformation: Profile[] = [];\r\n this.children.forEach(child => {\r\n if (this.subTableData.checkExpanded(child)) {\r\n openInformation.push(child.data);\r\n }\r\n openInformation.push.apply(openInformation, child.getOpenedNodes());\r\n });\r\n return openInformation;\r\n }\r\n\r\n openNodes(nodeData: Profile[]) {\r\n // POST: opens the subnodes that match the data\r\n this.children.forEach(child => {\r\n if (nodeData.find(data => data.RowId == child.data.RowId)) {\r\n this.subTableData.toggleExpanded(child);\r\n child.openNodes(nodeData);\r\n }\r\n });\r\n }\r\n}","\r\n

\r\n Edit Topic\r\n

\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n Active\r\n \r\n \r\n \r\n \r\n Active\r\n Inactive\r\n \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 { ErrorList } from './../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit, ViewChild, ElementRef } from '@angular/core';\r\nimport { Profile } from '../profile.model';\r\nimport { ProfileService } from '../profile.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'edit-topic',\r\n templateUrl: './edit-topic-dialog.component.html',\r\n styleUrls: [\r\n './edit-topic-dialog.component.css'\r\n ]\r\n})\r\nexport class EditTopicDialogComponent implements OnInit {\r\n\r\n // Properties\r\n information: Profile;\r\n errors: ErrorList[] = [];\r\n originalTitle: string;\r\n originalStatus: string;\r\n saved: boolean;\r\n V10 = false;\r\n @ViewChild('titleField', { read: ElementRef, static: true }) titleField: ElementRef;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n private profileService: ProfileService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.information = this.data.information;\r\n this.originalTitle = this.information.Title;\r\n this.originalStatus = this.information.Status;\r\n }\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: updates the profile on the server and closes the dialogBox\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.profileService.updateProfile(this.information).subscribe(() => {\r\n this.saved = true;\r\n this.dialogBox.close();\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: sets the data to the original title and closes the dialog box\r\n this.information.Title = this.originalTitle;\r\n this.information.Status = this.originalStatus;\r\n this.saved = false;\r\n this.dialogBox.close();\r\n }\r\n\r\n setStatus() {\r\n // PRE: the active checkbox is clicked\r\n // POST: sets the status to reflect the active\r\n if (this.information.Status == 'A') {\r\n this.information.Status = 'I';\r\n } else {\r\n this.information.Status = 'A';\r\n }\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n if (!this.information.Title || this.information.Title == '') {\r\n this.errors.push({\r\n fieldName: 'Topic Name',\r\n fieldRef: this.titleField,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n }\r\n}\r\n","\r\n

\r\n Delete Topic\r\n Delete Confirmation\r\n

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

\r\n This will delete the topic \r\n Are you sure you want to delete \r\n

\r\n

\r\n {{information.Title}}\r\n

\r\n

\r\n and all associated content below it{{V10 ? '.' : '?'}}\r\n

\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit } from '@angular/core';\r\nimport { Profile } from '../profile.model';\r\nimport { ProfileService } from '../profile.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'delete-topic',\r\n templateUrl: './delete-topic-dialog.component.html',\r\n styleUrls: [\r\n './delete-topic-dialog.component.css'\r\n ]\r\n})\r\nexport class DeleteTopicDialogComponent implements OnInit {\r\n\r\n // Properties\r\n information: Profile;\r\n deleted: boolean;\r\n V10 = false;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private profileService: ProfileService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.information = this.data.information;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n delete() {\r\n // PRE: the delete button is clicked\r\n // POST: deletes the information from the server, sets deleted to true, and closes the dialog box\r\n this.information.DelStatus = true;\r\n this.profileService.updateProfile(this.information).subscribe(() => {\r\n this.deleted = true;\r\n this.dialogBox.close();\r\n });\r\n }\r\n\r\n cancel() {\r\n // PRE: the close button is clicked\r\n // POTS: sets deleted to false and closes the dialog box\r\n this.deleted = false;\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}","\r\n

\r\n {{information && information.ProfileContentId != -1 ? 'Edit' : 'Add'}} Content\r\n

\r\n\r\n\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n Active\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n Active\r\n Inactive\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
0 && {'min-height':'180px'}\">\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n \r\n\r\n","import { ProfileService } from '../profile.service';\r\nimport { System } from './../../../shared-components/System';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ErrorList } from './../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport {\r\n\tComponent,\r\n\tInject,\r\n\tOnInit,\r\n\tViewChild,\r\n\tElementRef,\r\n\tAfterViewInit,\r\n\tHostListener,\r\n\tChangeDetectorRef,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { Profile } from '../profile.model';\r\nimport {AttachmentsMenuDialogComponent} from '../attachments-menu-dialog/attachments-menu-dialog.component';\r\nimport {ProfileAttachment} from '../profile-attachment.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { AddProfileAttachmentDialogComponent } from '../add-profile-attachment-dialog/add-profile-attachment-dialog.component';\r\nimport { UserService } from '../../user/user.service';\r\n\r\n@Component({\r\n selector: 'add-edit-content',\r\n templateUrl: './add-edit-content-dialog.component.html',\r\n styleUrls: [\r\n './add-edit-content-dialog.component.css'\r\n ]\r\n})\r\nexport class AddEditContentDialogComponent implements OnInit, AfterViewInit {\r\n\r\n // Properties\r\n information: Profile;\r\n originalInformation: Profile = new Profile();\r\n errors: ErrorList[] = [];\r\n @ViewChild('titleField', { read: ElementRef }) titleField: ElementRef;\r\n saved: boolean;\r\n pictureName = '';\r\n junkDate = Profile.junkDate;\r\n @ViewChild('quillContainer', { read: ElementRef }) quillContainer: ElementRef;\r\n quillHeight = '100px';\r\n V10 = false;\r\n userCanEdit = false;\r\n attachmentChanged = new EventEmitter();\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private profileService: ProfileService,\r\n private sanitizer: DomSanitizer,\r\n private changeDetector: ChangeDetectorRef,\r\n\t\tprivate dialog: MatDialog,\r\n private loginService: LoginService,\r\n private userService: UserService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: dialog data with either:\r\n // a) a set of information\r\n // b) rowId, topicId, parentId, and sequence\r\n // POST: initializes the data\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.userCanEdit = this.data && this.data.userCanEdit != undefined ? this.data.userCanEdit : false;\r\n if (this.data && this.data.information) {\r\n this.information = Object.assign(this.data.information);\r\n Object.assign(this.originalInformation, this.information);\r\n this.originalInformation.ProfileAttachments = [];\r\n this.information.ProfileAttachments.forEach(profileAttachment => {\r\n \tconst newProfileAttachment = new ProfileAttachment();\r\n \tObject.assign(newProfileAttachment, profileAttachment);\r\n \tthis.originalInformation.ProfileAttachments.push(newProfileAttachment);\r\n\t\t\t});\r\n if (this.information.Image) {\r\n\t\t\t\tthis.pictureName = this.information.Title + ' Image';\r\n\t\t\t}\r\n } else {\r\n this.information = new Profile();\r\n this.information.RowId = this.data.rowId;\r\n this.information.ProfileContentId = -1;\r\n this.information.TopicId = this.data.topicId;\r\n this.information.ParentID = this.data.parentId > 0 ? this.data.parentId : -1;\r\n this.information.DateFromView = null;\r\n this.information.DateToView = null;\r\n this.information.Status = 'A';\r\n this.information.Title = '';\r\n this.information.Content = '';\r\n this.information.Sequence = this.data.sequence;\r\n this.information.Image = null;\r\n this.information.DelStatus = false;\r\n this.information.ProfileAttachments = [];\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n ngAfterViewInit() {\r\n // PRE: the view has initialized or the window is resized\r\n // POST: obtains the height of the quill container\r\n if (this.quillContainer) {\r\n this.quillHeight = getComputedStyle(this.quillContainer.nativeElement).height;\r\n this.changeDetector.detectChanges(); // We do this to prevent expression changed errors\r\n }\r\n }\r\n\r\n setStatus() {\r\n // PRE: the active checkbox is clicked\r\n // POST: sets the status to reflect the active\r\n if (this.information.Status == 'A') {\r\n this.information.Status = 'I';\r\n } else {\r\n this.information.Status = 'A';\r\n }\r\n }\r\n\r\n attachments() {\r\n \t// PRE: the attachments button is clicked\r\n\t\t// POST: opens the attachments dialog\r\n\t\tthis.dialog.open(AttachmentsMenuDialogComponent, {\r\n\t\t\tdisableClose: true,\r\n\t\t\tdata: {\r\n\t\t\t\tprofile: this.information,\r\n\t\t\t\tattachments: this.information.ProfileAttachments,\r\n\t\t\t\tuserCanAdd: true\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n save() {\r\n // PRE: the save button is clicked\r\n // POST: validates the data, saves the data, and closes the dialog box\r\n this.validate();\r\n this.information.cleanJunkDates();\r\n if (this.errors.length == 0) {\r\n if (this.information.ProfileContentId == -1) {\r\n this.profileService.addProfile(this.information).subscribe(newInformation => {\r\n this.information = System.convert(newInformation, new Profile());\r\n this.information.cleanJunkDates();\r\n this.saved = true;\r\n this.dialogBox.close();\r\n });\r\n } else {\r\n this.profileService.updateProfile(this.information).subscribe(() => {\r\n this.saved = true;\r\n this.dialogBox.close();\r\n });\r\n }\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box\r\n this.saved = false;\r\n // Get attachments before initializing the object \r\n const attachments = this.information.ProfileAttachments;\r\n if (this.data && this.data.information) {\r\n Object.assign(this.information, this.originalInformation);\r\n } else {\r\n this.information = null;\r\n }\r\n // Add attachment if any\r\n if (!this.V10 && attachments && this.information) {\r\n this.information.ProfileAttachments = attachments;\r\n }\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n if (!this.information.Title) {\r\n this.errors.push({\r\n fieldName: 'Title',\r\n fieldRef: this.titleField,\r\n errorMsg: 'Title is required.'\r\n });\r\n }\r\n }\r\n\r\n\tresourceSrc() {\r\n\t\t// POST: auto-trusts the data we are given for the image\r\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(\r\n\t\t\t'data: image/jpeg;' +\r\n\t\t\t'base64,' + this.information.Image\r\n\t\t);\r\n\t}\r\n\r\n removePicture() {\r\n // POST: removes the image from the information\r\n this.information.Image = null;\r\n this.pictureName = '';\r\n }\r\n\r\n addAttachment() {\r\n // PRE: the add attachment is clicked\r\n // POST: shows the add attachment dialog\r\n const attachment = new ProfileAttachment();\r\n attachment.FileType = '';\r\n attachment.FileExtension = '';\r\n attachment.Description = '';\r\n attachment.DocOwnerID = this.information.ProfileContentId;\r\n attachment.FolderID = -1;\r\n attachment.FileID = -1;\r\n attachment.AllowParentToView = true;\r\n attachment.TableID = 18;\r\n attachment.MyFileName = '';\r\n attachment.OriginalFileName = '';\r\n attachment.DateAttached = new Date();\r\n attachment.ContentID = this.information.ProfileContentId\r\n attachment.UploadedBy = this.userService.lastname + ', ' + this.userService.firstname;\r\n const dialogBox = this.dialog.open(AddProfileAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n this.information.ProfileAttachments.push(dialogBox.componentInstance.attachment)\r\n this.attachmentChanged.emit();\r\n }\r\n })\r\n }\r\n}\r\n","\r\n\r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Topic \r\n \r\n {{topic.topLevelNode.data.Title}}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Inactive \r\n \r\n {{topic.topLevelNode.data.Status == 'I' ? 'Y' : ''}}\r\n \r\n \r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \"actions\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n 0 && !isViewing\" \r\n [dataSource]=\"topic.topLevelNode.subTableData\"\r\n [ngStyle]=\"{'min-width': profileTableWidth + 'px'}\"\r\n multiTemplateDataRows>\r\n\r\n \r\n \r\n More \r\n \r\n 0\">\r\n

\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Content Title\r\n \r\n {{node.data.Title}}\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Inactive \r\n \r\n {{node.data.Status == 'I' ? 'Y' : ''}}\r\n \r\n \r\n\r\n \r\n \r\n Start\r\n \r\n {{node.data.DateFromView && node.data.DateFromView.toString() != junkDate.toString() ? \r\n (node.data.DateFromView | date: 'MM/dd/yy') : \r\n ''}}\r\n \r\n \r\n\r\n \r\n \r\n End\r\n \r\n {{node.data.DateToView && node.data.DateToView.toString() != junkDate.toString() ? \r\n (node.data.DateToView | date: 'MM/dd/yy') : \r\n ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \"paperclip\"\r\n \r\n \r\n {{node.data.ProfileAttachments && node.data.ProfileAttachments.length > 0 ? node.data.ProfileAttachments.length : ''}}\r\n \r\n \r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \"actions\r\n \r\n \r\n\r\n \r\n \r\n Attachments \r\n \r\n 0) || (!isViewing && node.data.ProfileAttachments.length > 0)) : ((!isStaff && node.data.parentViewableAttachments.length > 0) || (!isStaff && node.data.ProfileAttachments.length > 0))\"\r\n (click)=\"showAttachments(node.data)\"\r\n translate>\r\n View Attachments\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n 0 \r\n }\"\r\n id=\"row{{row.data.RowId}}\"\r\n [attr.aria-label]=\"'profile ' + row.data.Title + '.' + (row.children.length > 0 ? ' Press Enter to view details.' : '')\"\r\n (click)=\"\r\n row.children.length > 0 ? row.parent.subTableData.toggleExpanded(row) : null;\r\n \">\r\n 0 ? '' : 'none'\r\n \r\n }\"\r\n style=\"overflow: hidden\">\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n 0\r\n }\"\r\n [ngStyle]=\"{\r\n 'border-bottom': borderBottom ? '' : 'none'\r\n }\"\r\n id=\"row{{row.topLevelNode.data.RowId}}\"\r\n [attr.aria-label]=\"'topic ' + row.topLevelNode.data.Title + '.' + (row.subLevelNodes.length > 0 ? ' Press Enter to view details.' : '')\"\r\n (click)=\"\r\n row.subLevelNodes.length > 0 ? tableData.toggleExpanded(row) : null;\r\n \">\r\n 0 ? '' : 'none',\r\n 'border-bottom': borderBottom ? '' : 'none'\r\n }\"\r\n [@detailExpand]=\"tableData.checkExpanded(row) ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n
\r\n\r\n\r\n\r\n 0\" \r\n [dataSource]=\"node.subTableData\"\r\n [ngStyle]=\"{'min-width': profileTableWidth + 'px'}\"\r\n multiTemplateDataRows>\r\n\r\n \r\n \r\n \r\n 0\">\r\n

\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n {{node.data.Title}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n {{node.data.Title}}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n Inactive \r\n \r\n {{node.data.Status == 'I' ? 'Y' : ''}}\r\n \r\n \r\n\r\n \r\n \r\n Start\r\n \r\n {{node.data.DateFromView && node.data.DateFromView.toString() != junkDate.toString() ? \r\n (node.data.DateFromView | date: 'MM/dd/yy') :\r\n ''}}\r\n \r\n \r\n\r\n \r\n \r\n End\r\n \r\n {{node.data.DateToView && node.data.DateToView.toString() != junkDate.toString() ? \r\n (node.data.DateToView | date: 'MM/dd/yy') :\r\n ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \"paperclip\"\r\n \r\n \r\n {{node.data.ProfileAttachments && node.data.ProfileAttachments.length > 0 ? node.data.ProfileAttachments.length : ''}}\r\n \r\n \r\n\r\n \r\n \r\n Actions \r\n \r\n \r\n \"actions\r\n \r\n \r\n\r\n \r\n \r\n Attachments \r\n \r\n 0 ) : (!isStaff && node.data.parentViewableAttachments.length > 0) || (isStaff && node.data.ProfileAttachments.length > 0) )\"\r\n (click)=\"showAttachments(node.data)\"\r\n translate>\r\n View Attachments\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n\r\n \r\n 0\r\n }\"\r\n [ngStyle]=\"{\r\n 'border-bottom': borderBottom ? '' : 'none'\r\n }\"\r\n id=\"row{{row.data.RowId}}\"\r\n [attr.aria-label]=\"'profile ' + row.data.Title + '.' + (row.children.length > 0 ? ' Press Enter to view details.' : '')\"\r\n (click)=\"\r\n row.children.length > 0 ? row.parent.subTableData.toggleExpanded(row) : null;\r\n \">\r\n 0 ? '' : 'none'\r\n }\"\r\n class=\"mat-detail-row\"\r\n [@detailExpand]=\"row.parent.subTableData.checkExpanded(row) ? 'expanded' : 'collapsed'\">\r\n
\r\n
\r\n\r\n\r\n\r\n\t\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\t\r\n\r\n","import { DomSanitizer } from '@angular/platform-browser';\r\nimport { System } from './../System';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { detailExpand } from './../angular-material/mat-animations';\r\nimport { Topic } from './topic';\r\nimport { Component, OnInit, Input, OnChanges, EventEmitter, Output, ChangeDetectorRef } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { Profile } from './profile.model';\r\nimport { ProfileNode } from './profile-node';\r\nimport { EditTopicDialogComponent } from './edit-topic-dialog/edit-topic-dialog.component';\r\nimport { DeleteTopicDialogComponent } from './delete-topic-dialog/delete-topic-dialog.component';\r\nimport { AddEditContentDialogComponent } from './add-edit-content-dialog/add-edit-content-dialog.component';\r\nimport { AttachmentsMenuDialogComponent } from './attachments-menu-dialog/attachments-menu-dialog.component';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { UserService } from '../user/user.service';\r\nimport { UserType } from '../user/user-type';\r\n\r\n/**\r\n * This component is used for creating a table of profiles.\r\n *\r\n * @input profiles: a list of profiles to display\r\n * @input displayInactive: set this to true if you want to display inactive profiles. False by default.\r\n * @input userCanEdit: set this to true if the user can edit the profiles. False by default.\r\n * @input dataChanged: this is an event emitter signalling if the profiles have changed.\r\n * If your profiles might change, be sure to supply this event emitter.\r\n * Emit from that event emitter if and when your profiles change.\r\n * @input expandCollapseEvent: an event emitter that emits booleans.\r\n * When this emits true, all the rows will expand.\r\n * When this emits false, all the rows will collapse.\r\n * @input isViewing: a boolean indicating whether this is a person simply viewing the profiles (in the case of S360). False by default.\r\n * @input borderBottom: whether the rows should have a bottom border. Defaults to true.\r\n * @input enforceDates: whether it removes profiles whose parent dates are passed\r\n * @output unsavedChanges: an event emitter that fires true when there are unsaved changes and false when there are no longer.\r\n * @output reload: an event emitter that fires true when saved the changes.\r\n */\r\n@Component({\r\n selector: 'profile-table',\r\n templateUrl: './profile-table.component.html',\r\n styleUrls: [\r\n './profile-table.component.css'\r\n ],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class ProfileTableComponent implements OnInit, OnChanges {\r\n\r\n // Properties\r\n @Input() profiles: Profile[] = [];\r\n @Input() displayInactive = false;\r\n @Input() userCanEdit = false;\r\n @Input() dataChanged: EventEmitter;\r\n @Input() expandCollapseEvent: EventEmitter;\r\n @Input() isViewing = false;\r\n @Input() borderBottom = true;\r\n @Input() enforceDates = false;\r\n @Output() unsavedChanges = new EventEmitter();\r\n @Output() reload = new EventEmitter();\r\n topics: Topic[];\r\n tableData: TylerMatTableDataSource;\r\n openInformation: Profile[];\r\n topicColumns = ['more', 'topic', 'inactive', 'actions'];\r\n profileColumns = ['more', 'content title', 'inactive', 'start date', 'end date', 'attachments', 'actions', 'attachments link'];\r\n columnWidths: {[key: string]: number} = {\r\n 'more': 60,\r\n 'content title': 100,\r\n 'inactive': 60,\r\n 'start date': 100,\r\n 'end date': 100,\r\n 'attachments': 60,\r\n 'actions': 60,\r\n 'attachments link': 100\r\n };\r\n allColumns = [this.topicColumns, this.profileColumns];\r\n junkDate = new Date('Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)');\r\n selectedRow: Topic;\r\n subscriptions: Subscription[] = [];\r\n profileTableWidth = 0;\r\n V10= false;\r\n isExpandAll = false;\r\n isStaff = false;\r\n\r\n // Class Functions\r\n constructor (\r\n private dialog: MatDialog,\r\n private sanitizer: DomSanitizer,\r\n private changeDetector: ChangeDetectorRef,\r\n private loginService: LoginService,\r\n private userService: UserService\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: profiles supplied by the caller\r\n // POST: constructs the table data\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.isStaff = this.userService.currentUser.UserType == UserType.Staff;\r\n this.unsavedChanges.emit(false);\r\n this.assembleDisplayData();\r\n if (this.dataChanged) {\r\n this.subscriptions.push(\r\n this.dataChanged.subscribe(() => {\r\n this.assembleDisplayData();\r\n }),\r\n );\r\n }\r\n if (this.expandCollapseEvent) {\r\n this.subscriptions.push(\r\n this.expandCollapseEvent.subscribe(expand => {\r\n this.toggleExpandCollapse(expand);\r\n })\r\n );\r\n }\r\n }\r\n\r\n expandAll() {\r\n this.isExpandAll = !this.isExpandAll;\r\n this.toggleExpandCollapse(this.isExpandAll);\r\n }\r\n\r\n private toggleExpandCollapse(expand: boolean) {\r\n if (this.topics) {\r\n this.topics.forEach(topic => {\r\n if (topic.subLevelNodes.length > 0 && this.tableData.checkExpanded(topic) != expand) {\r\n this.tableData.toggleExpanded(topic);\r\n }\r\n topic.children.forEach(child => {\r\n if (child.children.length > 0 && child.parent && child.parent.subTableData.checkExpanded(child) != expand) {\r\n child.parent.subTableData.toggleExpanded(child);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n // PRE: the profiles are changed\r\n // POST; constructs the table data\r\n this.assembleDisplayData();\r\n }\r\n\r\n // Methods\r\n resourceSrc(node: ProfileNode) {\r\n // POST: auto-trusts the data we are given for the image\r\n return this.sanitizer.bypassSecurityTrustResourceUrl(\r\n 'data: image/jpeg;' +\r\n 'base64,' + node.data.Image\r\n );\r\n }\r\n\r\n editTopic(information: Profile) {\r\n // POST: shows the edit topic dialog\r\n const dialogBox = this.dialog.open(EditTopicDialogComponent, {\r\n data: {\r\n information: information\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n this.reload.emit(true);\r\n }\r\n })\r\n );\r\n }\r\n\r\n deleteTopic(information: Profile) {\r\n // POST: shows the delet topic dialog\r\n const dialogBox = this.dialog.open(DeleteTopicDialogComponent, {\r\n data: {\r\n information: information\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.deleted) {\r\n\r\n // Removing the node and it's children\r\n this.profiles.splice(this.profiles.indexOf(information), 1);\r\n for (let i = 0; i < this.profiles.length; i++) {\r\n\r\n // If I deleted a topic node, delete all its sub level nodes\r\n if (information.ParentID == -2) {\r\n if (information.TopicId == this.profiles[i].TopicId) {\r\n this.profiles.splice(i, 1);\r\n i -= 1;\r\n }\r\n }\r\n\r\n // Otherwise, delete it if it matches it's parent id\r\n else if (information.ProfileContentId == this.profiles[i].ParentID) {\r\n this.profiles.splice(i, 1);\r\n i -= 1;\r\n }\r\n }\r\n\r\n // Reassembling the table\r\n this.assembleDisplayData();\r\n\r\n // Reload the main screen\r\n this.reload.emit(true);\r\n }\r\n })\r\n );\r\n }\r\n\r\n addContent(parentNode: ProfileNode) {\r\n // POST: shows the dialog for adding content\r\n let prof: Profile[];\r\n let sequence = 0; \r\n if (!this.V10) {\r\n if (parentNode.data.ParentID == -2) {\r\n prof = this.profiles.filter(x => x.TopicId == parentNode.data.TopicId && x.ParentID != -2);\r\n sequence = prof ? Math.max.apply(null, prof.map(info => info.sequence)) + 1 : 0;\r\n }\r\n else {\r\n prof = this.profiles.filter(x => x.ParentID == parentNode.data.ProfileContentId);\r\n sequence = prof ? Math.max.apply(null, prof.map(info => info.sequence)) + 1 : 0;\r\n }\r\n }\r\n else {\r\n sequence = Math.max.apply(null, this.profiles.map(info => info.ParentID == parentNode.data.ProfileContentId ? info.sequence : -1)) + 1;\r\n }\r\n \r\n //var count = Math.max.apply(null, this.profiles.map(info => info.TopicId == parentNode.data.TopicId && info.ParentID == parentNode.data.ProfileContentId ? (info.sequence == -Infinity ? -1 : info.sequence) : -1)) + 1;\r\n const dialogBox = this.dialog.open(AddEditContentDialogComponent, {\r\n data: {\r\n rowId: Math.max.apply(null, this.profiles.map(info => info.RowId)) + 1,\r\n sequence: sequence,\r\n parentId: parentNode.data.ProfileContentId,\r\n topicId: parentNode.data.TopicId,\r\n userCanEdit: this.userCanEdit\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n this.profiles.push(dialogBox.componentInstance.information);\r\n this.assembleDisplayData();\r\n }\r\n })\r\n );\r\n }\r\n\r\n editContent(information: Profile) {\r\n // POST: shows the dialog for editing content\r\n const dialogBox = this.dialog.open(AddEditContentDialogComponent, {\r\n data: {\r\n information: information,\r\n userCanEdit: this.userCanEdit\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n this.reload.emit(true);\r\n }\r\n })\r\n );\r\n }\r\n\r\n showAttachments(information: Profile) {\r\n // POST: shows the attachment menu dialog\r\n if (information.ProfileAttachments == null || information.ProfileAttachments == undefined) {\r\n information.ProfileAttachments = [];\r\n }\r\n this.dialog.open(AttachmentsMenuDialogComponent, {\r\n data: {\r\n attachments: information.ProfileAttachments,\r\n userCanAdd: this.userCanEdit,\r\n profile: information\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n moveContentRowUp(node: ProfileNode) {\r\n // PRE: a node to move\r\n // POST: moves the node one level up\r\n const currentSequence = node.data.sequence;\r\n let lowerSequences;\r\n let nextContent;\r\n if (node.data.ParentID == null || node.data.ParentID == -1) {\r\n lowerSequences = this.profiles.filter(info => info.ParentID == -1 && info.TopicId == node.data.TopicId && info.sequence < node.data.sequence);\r\n if (!this.displayInactive) {\r\n lowerSequences = lowerSequences.filter(info => info.Status == 'A');\r\n }\r\n }\r\n else {\r\n lowerSequences = this.profiles.filter(info => info.ParentID == node.data.ParentID && info.sequence < node.data.sequence);\r\n if (!this.displayInactive) {\r\n lowerSequences = lowerSequences.filter(info => info.Status == 'A');\r\n }\r\n }\r\n nextContent = lowerSequences.find(sequence => sequence.sequence == Math.max.apply(null, lowerSequences.map(seq => seq.sequence)));\r\n if (nextContent) {\r\n node.data.newSequence = nextContent.sequence;\r\n nextContent.newSequence = currentSequence;\r\n }\r\n this.unsavedChanges.emit(true);\r\n this.assembleDisplayData();\r\n }\r\n\r\n moveContentRowDown(node: ProfileNode) {\r\n // PRE: a node to move\r\n // POST: moves the node one level down\r\n const currentSequence = node.data.sequence;\r\n let higherSequences;\r\n let nextContent;\r\n if (node.data.ParentID == null || node.data.ParentID == -1) {\r\n higherSequences = this.profiles.filter(info => info.ParentID == -1 && info.TopicId == node.data.TopicId && info.sequence > node.data.sequence);\r\n if (!this.displayInactive) {\r\n higherSequences = higherSequences.filter(info => info.Status == 'A');\r\n }\r\n }\r\n else {\r\n higherSequences = this.profiles.filter(info => info.ParentID == node.data.ParentID && info.sequence > node.data.sequence);\r\n if (this.displayInactive == false) {\r\n higherSequences = higherSequences.filter(info => info.Status == 'A');\r\n }\r\n }\r\n nextContent = higherSequences.find(sequence => sequence.sequence == Math.min.apply(null, higherSequences.map(seq => seq.sequence)));\r\n if (nextContent) {\r\n node.data.newSequence = nextContent.sequence;\r\n nextContent.newSequence = currentSequence;\r\n }\r\n this.unsavedChanges.emit(true);\r\n this.assembleDisplayData();\r\n }\r\n\r\n moveRowUp(topic: Topic) {\r\n // PRE: a topic to move\r\n // POST: moves the topic one level up\r\n const currentSequence = topic.sequence;\r\n let lowerSequences = this.profiles.filter(info => info.ProfileContentId == -2 && info.ParentID == -2 && info.sequence < topic.sequence);\r\n if (!this.displayInactive) {\r\n lowerSequences = lowerSequences.filter(sequence => sequence.Status == 'A');\r\n }\r\n const nextContent = lowerSequences.find(sequence => sequence.sequence == Math.max.apply(null, lowerSequences.map(seq => seq.sequence)));\r\n if (nextContent) {\r\n topic.topLevelNode.data.newSequence = nextContent.sequence;\r\n nextContent.newSequence = currentSequence;\r\n }\r\n this.unsavedChanges.emit(true);\r\n this.assembleDisplayData();\r\n }\r\n\r\n moveRowDown(topic: Topic) {\r\n // PRE: a topic to move\r\n // POST: moves the topic one level dow\r\n const currentSequence = topic.sequence;\r\n let higherSequences = this.profiles.filter(info => info.ProfileContentId == -2 && info.ParentID == -2 && info.sequence > topic.sequence);\r\n if (!this.displayInactive) {\r\n higherSequences = higherSequences.filter(sequence => sequence.Status == 'A');\r\n }\r\n const nextContent = higherSequences.find(sequence => sequence.sequence == Math.min.apply(null, higherSequences.map(seq => seq.sequence)));\r\n if (nextContent) {\r\n topic.topLevelNode.data.newSequence = nextContent.sequence;\r\n nextContent.newSequence = currentSequence;\r\n }\r\n this.unsavedChanges.emit(true);\r\n this.assembleDisplayData();\r\n }\r\n\r\n order() {\r\n // POST: organizes the data in order of sequence\r\n this.topics.sort((topicA, topicB) => {\r\n if (topicA.sequence < topicB.sequence) {\r\n return -1;\r\n } else if (topicA.sequence > topicB.sequence) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n for (let i = 0; i < this.topics.length; i++) {\r\n const topic = this.topics[i];\r\n if (i == 0) {\r\n topic.first = true;\r\n } else {\r\n topic.first = false;\r\n }\r\n if (i == this.topics.length - 1) {\r\n topic.last = true;\r\n } else {\r\n topic.last = false;\r\n }\r\n topic.topLevelNode.sortChildren();\r\n }\r\n }\r\n\r\n assembleDisplayData() {\r\n // PRE: the profiles must be set\r\n // POST: assembles the data for display\r\n\r\n // Don't do anything if there's no profiles\r\n if (!this.profiles) {\r\n return;\r\n }\r\n\r\n // Capturing which information is currently open\r\n if (this.tableData && this.topics) {\r\n this.openInformation = [];\r\n this.topics.forEach(topic => {\r\n if (this.tableData.checkExpanded(topic)) {\r\n this.openInformation.push(topic.topLevelNode.data);\r\n }\r\n this.openInformation.push.apply(this.openInformation, topic.topLevelNode.getOpenedNodes());\r\n });\r\n }\r\n\r\n // Creating list of topics\r\n const topics: {[key: number]: Topic} = {};\r\n this.topics = [];\r\n\r\n // Filtering out inactive if we're not displaying them\r\n let shownInformation = this.profiles;\r\n if (!this.displayInactive) {\r\n shownInformation = shownInformation.filter(info => info.Status == 'A');\r\n }\r\n\r\n // Determining which columns we should show\r\n this.allColumns.forEach(columns => {\r\n if (this.userCanEdit) {\r\n if (!columns.includes('actions')) {\r\n columns.push('actions'); // Actions always go on the end\r\n }\r\n } else if (columns.includes('actions')) {\r\n columns.splice(columns.indexOf('actions'), 1);\r\n }\r\n if (shownInformation.find(info => info.Status == 'I')) {\r\n if (!columns.includes('inactive')) {\r\n if (columns.includes('actions')) {\r\n columns.splice(columns.length - 1, 0, 'inactive'); // Inactive always goes before action if column contains action\r\n }\r\n else {\r\n columns.splice(columns.length, 0, 'inactive');// Inactive always goes at last\r\n }\r\n }\r\n } else if (columns.includes('inactive')) {\r\n columns.splice(columns.indexOf('inactive'), 1);\r\n }\r\n if (this.isViewing) {\r\n if (columns.includes('attachments')) {\r\n columns.splice(columns.indexOf('attachments'), 1);\r\n }\r\n if (columns.includes('start date')) {\r\n columns.splice(columns.indexOf('start date'), 1);\r\n }\r\n if (columns.includes('end date')) {\r\n columns.splice(columns.indexOf('end date'), 1);\r\n }\r\n } else if (columns.includes('attachments link')) {\r\n columns.splice(columns.indexOf('attachments link'), 1);\r\n }\r\n });\r\n\r\n // Determining the size of the profile tables\r\n this.profileTableWidth = 0;\r\n this.profileColumns.forEach(column => {\r\n if (this.columnWidths[column]) {\r\n this.profileTableWidth += this.columnWidths[column];\r\n }\r\n });\r\n\r\n // Assembling topics\r\n // NOTE: because of the way the hierarchy works, a parent inactive will prevent any active children from showing\r\n shownInformation.forEach(profile => {\r\n\r\n // Creating the node\r\n const node = new ProfileNode();\r\n node.data = profile;\r\n\r\n // Assigning it to a topic\r\n if (!topics[profile.TopicId]) {\r\n topics[profile.TopicId] = new Topic();\r\n }\r\n const topic = topics[profile.TopicId];\r\n node.topic = topic;\r\n topic.children.push(node);\r\n if (node.data.ParentID == -2) {\r\n topic.topLevelNode = node;\r\n topic.subLevelNodes.forEach(subNode => {\r\n node.children.push(subNode);\r\n subNode.parent = node;\r\n });\r\n } else if (node.data.ParentID == -1) {\r\n topic.subLevelNodes.push(node);\r\n if (topic.topLevelNode) {\r\n topic.topLevelNode.children.push(node);\r\n node.parent = topic.topLevelNode;\r\n }\r\n }\r\n\r\n // Scanning for parents and children\r\n topic.children.forEach(topicNode => {\r\n if (topicNode.data.ParentID >= 0 && topicNode.data.ParentID == node.data.ProfileContentId) {\r\n node.children.push(topicNode);\r\n topicNode.parent = node;\r\n } else if (topicNode.data.ProfileContentId >= 0 && topicNode.data.ProfileContentId == node.data.ParentID) {\r\n topicNode.children.push(node);\r\n node.parent = topicNode;\r\n }\r\n });\r\n\r\n // Putting this in the persistent list\r\n // NOTE: we only want to add the topic if it has a top-level node or the component will break\r\n if (topic.topLevelNode != null && !this.topics.includes(topic)) {\r\n this.topics.push(topic);\r\n }\r\n });\r\n\r\n // Ordering the data by sequence\r\n this.order();\r\n\r\n // Enforcing the date (we have to do this after to deactivate children)\r\n if (this.enforceDates) {\r\n for (let i = 0; i < this.topics.length; i++) {\r\n\r\n // Removing the topic altogether if it's outside the date range\r\n if (!(this.topics[i].topLevelNode.data instanceof Profile)) {\r\n this.topics[i].topLevelNode.data = System.convert(this.topics[i].topLevelNode.data, new Profile());\r\n }\r\n if (this.topics[i].topLevelNode.data.outsideOfDateRange()) {\r\n this.topics.splice(i, 1);\r\n i--;\r\n }\r\n\r\n // Removing children\r\n else {\r\n const removeChildren = (node: ProfileNode, parent: ProfileNode, index: number) => {\r\n if (!(node.data instanceof Profile)) {\r\n node.data = System.convert(node.data, new Profile());\r\n }\r\n if (node.data.outsideOfDateRange()) {\r\n if (parent) {\r\n parent.children.splice(index, 1);\r\n }\r\n const topicIndex = this.topics[i].subLevelNodes.indexOf(node);\r\n if (topicIndex >= 0) {\r\n this.topics[i].subLevelNodes.splice(topicIndex, 1);\r\n }\r\n } else {\r\n for (let j = 0; j < node.children.length; j++) {\r\n removeChildren(node.children[j], node, j);\r\n }\r\n }\r\n };\r\n removeChildren(this.topics[i].topLevelNode, null, 0);\r\n }\r\n }\r\n }\r\n\r\n // Ensuring table data\r\n this.topics.forEach(topic => {\r\n topic.children.forEach(topicNode => {\r\n topicNode.subTableData = new TylerMatTableDataSource(topicNode.children);\r\n });\r\n });\r\n this.tableData = new TylerMatTableDataSource(this.topics);\r\n\r\n // Opening information that was previously opened\r\n if (this.openInformation) {\r\n this.topics.forEach(topic => {\r\n if (this.openInformation.find(info => info.RowId == topic.topLevelNode.data.RowId)) {\r\n this.tableData.toggleExpanded(topic);\r\n }\r\n topic.topLevelNode.openNodes(this.openInformation);\r\n });\r\n }\r\n\r\n // Tracking changes to prevent errors\r\n this.changeDetector.detectChanges();\r\n }\r\n}\r\n","import { ProfileAttachment } from './profile-attachment.model';\r\n\r\nexport class Profile {\r\n\r\n // Constants\r\n static junkDateString = 'Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time)';\r\n static junkDate = new Date(Profile.junkDateString);\r\n\r\n // Server Properties\r\n '$id': string;\r\n AddedBy: number;\r\n AddedOn: string;\r\n Content: string;\r\n DateFromView = new Date(Profile.junkDateString);\r\n DateToView = new Date(Profile.junkDateString);\r\n DelBy = new Date(Profile.junkDateString);\r\n DelOn = new Date(Profile.junkDateString);\r\n DelStatus: boolean;\r\n Image: string;\r\n LastUpBy = new Date(Profile.junkDateString);\r\n LastUpOn = new Date(Profile.junkDateString);\r\n MemId: number;\r\n ParentID: number;\r\n ProfileAttachments?: ProfileAttachment[] = [];\r\n ProfileContentId: number;\r\n RecordType: number;\r\n RowId: number;\r\n SSECID: number;\r\n Sequence: number;\r\n Status: string;\r\n Title: string;\r\n TopicId: number;\r\n\r\n // Local Properties\r\n newSequence: number; // We use this to prevent data persistence of moving rows\r\n\r\n // Class Functions\r\n get SSEC_ID(): number {\r\n return this.SSECID;\r\n }\r\n\r\n set SSEC_ID(value: number) {\r\n this.SSECID = value;\r\n }\r\n\r\n get parentViewableAttachments() {\r\n return this.ProfileAttachments.filter(attachment => attachment.AllowParentToView);\r\n }\r\n\r\n\tget sequence(): number {\r\n\t\treturn this.newSequence != undefined ? this.newSequence : this.Sequence;\r\n\t}\r\n\r\n\tset sequence(value: number) {\r\n \tthis.newSequence = value;\r\n\t}\r\n\r\n // Methods\r\n outsideOfDateRange() {\r\n // POST: returns true if this profile is currently within its date range\r\n return (this.DateFromView && this.DateFromView.toString() != Profile.junkDate.toString() && new Date() < this.DateFromView) ||\r\n (this.DateToView && this.DateToView.toString() != Profile.junkDate.toString() && new Date() > this.DateToView);\r\n }\r\n\r\n cleanJunkDates() {\r\n // POST: cleans the junk dates from the class information\r\n if (this.DateFromView && this.DateFromView.toString() == Profile.junkDate.toString()) {\r\n this.DateFromView = null;\r\n }\r\n if (this.DateToView && this.DateToView.toString() == Profile.junkDate.toString()) {\r\n this.DateToView = null;\r\n }\r\n if (this.DelBy && this.DelBy.toString() == Profile.junkDate.toString()) {\r\n this.DelBy = null;\r\n }\r\n if (this.DelOn && this.DelOn.toString() == Profile.junkDate.toString()) {\r\n this.DelOn = null;\r\n }\r\n if (this.LastUpBy && this.LastUpBy.toString() == Profile.junkDate.toString()) {\r\n this.LastUpBy = null;\r\n }\r\n if (this.LastUpOn && this.LastUpOn.toString() == Profile.junkDate.toString()) {\r\n this.LastUpOn = null;\r\n }\r\n }\r\n}","import { ClassroomSummary } from './../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { ClassroomSummaryService } from './../../classroom360/classroom-summary/classroom-summary.service';\r\nimport { ProfileAttachment } from './profile-attachment.model';\r\nimport { Profile } from './profile.model';\r\nimport { YearService } from './../../shared-components/year/year.service';\r\nimport { UserService } from './../../shared-components/user/user.service';\r\nimport { flatMap } from 'rxjs/operators';\r\nimport { Observable, of } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\n\r\n@Injectable()\r\nexport class ProfileService {\r\n\r\n // Properties\r\n classesWithProfiles: number[];\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private userService: UserService,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private yearService: YearService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Methods\r\n getClassInformation(classId: number, useRelatedTopic = true): Observable {\r\n // PRE: a class ID to check for\r\n // POST: if classes with profiles hasn't been checked, obtains it. Then, checks that the class has profile. If it does, obtains it.\r\n if (this.classesWithProfiles && this.classesWithProfiles.length != 0) {\r\n this.getClassProfile(classId, useRelatedTopic);\r\n }\r\n return this.getClassesWithProfiles().pipe(\r\n flatMap(coursesWithProfiles => {\r\n this.classesWithProfiles = coursesWithProfiles;\r\n return this.getClassProfile(classId, useRelatedTopic);\r\n })\r\n );\r\n }\r\n\r\n getClassProfile(classId: number, useRelatedTopic = true) {\r\n // PRE: a class ID to check for\r\n // POST: checks that a profile exists for that class. If it does, obtains its profile.\r\n const hasProfile = this.classesWithProfiles.find(course => course == classId) != undefined;\r\n if (hasProfile) {\r\n return this.getProfileContent(classId, true, useRelatedTopic);\r\n } else {\r\n return of([]);\r\n }\r\n }\r\n\r\n getClassesWithProfiles(): Observable {\r\n // POST: obtains the classes with profiles by SSEC_ID\r\n return this.http.get(System.apiURL.Student + 'GetIdsForClassesWithProfiles');\r\n }\r\n\r\n getAllClassTopics(): Observable {\r\n // POST: obtains all the class topics\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Student + 'GetAllClassTopics' + queryString);\r\n }\r\n\r\n getProfileContent(id: number, isCourseProfile = true, useRelatedTopic = true): Observable {\r\n // PRE: a class ID to check for\r\n // POST: obtains the profile for that class\r\n const queryString = '?Id=' + id +\r\n '&IsCourseProfile=' + isCourseProfile +\r\n '&useRelatedTopic=' + useRelatedTopic;\r\n return this.http.get(System.apiURL.Student + 'GetCourseAndTeacherProfileContent' + queryString);\r\n }\r\n\r\n updateProfileSequences(classInformation: Profile[]): Observable {\r\n // PRE: a list of profiles to save\r\n // POST: saves the profiles to the server\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n\r\n // Syncing the data\r\n classInformation.forEach(info => {\r\n if (!info.ProfileAttachments) {\r\n info.Image = null;\r\n info.ProfileAttachments = [];\r\n }\r\n if (this.loginService.LoginSettings.V10) {\r\n if (info.newSequence) {\r\n info.Sequence = info.newSequence;\r\n }\r\n }\r\n else {\r\n if (info.newSequence != null && info.newSequence != undefined) {\r\n info.Sequence = info.newSequence;\r\n }\r\n }\r\n \r\n });\r\n return this.http.post(System.apiURL.Student + 'UpdateProfileSequences' + queryString, classInformation);\r\n }\r\n\r\n updateProfile(classInformation: Profile): Observable {\r\n // PRE: a profile to update (ID can't be changed)\r\n // POST: updates the profile on the database\r\n return this.http.post(System.apiURL.Student + 'UpdateProfile', classInformation);\r\n }\r\n\r\n addTopic(information: Profile): Observable {\r\n // PRE: information to add as a topic\r\n // POST: adds the topic to the database\r\n return this.http.post(System.apiURL.Student + 'AddProfileTopic', information);\r\n }\r\n\r\n addProfile(information: Profile): Observable {\r\n // PRE: information to add as a profile\r\n // POST: adds the profile to the database\r\n return this.http.post(System.apiURL.Student + 'AddProfileContent', information);\r\n }\r\n\r\n setRelatedTopic(parentCourse: ClassroomSummary = null): Observable {\r\n // PRE: A parent course that CAN be null\r\n // POST: sets this course as a related topic to the parent course\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&childSSECID=' + this.classroomSummaryService.selectedCourse.SSEC_ID +\r\n '&parentSSECId=' + (parentCourse ? parentCourse.SSEC_ID : -1);\r\n return this.http.get(System.apiURL.Student + 'SetRelatedTopic' + queryString);\r\n }\r\n\r\n updateProfileAttachment(attachment: ProfileAttachment): Observable {\r\n // PRE: an attachment to update\r\n // POST: updates that attachment on the server\r\n return this.http.post(System.apiURL.Student + 'UpdateProfileAttachment', attachment);\r\n }\r\n\r\n deleteProfileAttachment(attachmentId: number, contentId: number = -1): Observable {\r\n // PRE: an attachment to delete\r\n // POST: deletes the attachment on the server\r\n const queryString = '?attachmentId=' + attachmentId +\r\n '&contentId=' + contentId;\r\n return this.http.get(System.apiURL.Student + 'DeleteProfileAttachment' + queryString);\r\n }\r\n\r\n copyClassProfile(sourceId: number, destinationId: number): Observable {\r\n // PRE: a source to copy from and a destination to copy to\r\n // POST: copies from the source to the destination\r\n const queryString = '?srcId=' + sourceId +\r\n '&destId=' + destinationId;\r\n return this.http.get(System.apiURL.Student + 'CopyClassProfile' + queryString);\r\n }\r\n\r\n getAttachmentFile(fileId: number): Observable {\r\n // PRE: a file id\r\n // POST: obtains that attachment\r\n const queryString = '?fileId=' + fileId;\r\n return this.http.get(System.apiURL.Student + 'getAttachmentFile' + queryString);\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n\t\tClass Information\r\n
\r\n
\r\n\t\tTeacher Profile\r\n\t
\r\n\t
\r\n\t\t{{teacherName}}\r\n\t
\r\n
\r\n\r\n\r\n 0 ? '65vh' : ''}\">\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Course Name{{courseName ? courseName : ''}}
Course-Section{{courseSection ? courseSection : ''}}
School{{school ? school : ''}}
Teacher\r\n {{teacherName ? teacherName : ''}}\r\n \r\n Teacher Profile\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n\r\n\r\n\r\n \r\n \r\n 0\"\r\n [expandEmitter]=\"expandEmitter\">\r\n\r\n \r\n
\r\n \r\n
\r\n
","\r\nimport { System } from './../System';\r\nimport { YearService } from './../year/year.service';\r\nimport { Profile } from './../profile-table/profile.model';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Component, OnInit, Inject, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { ProfileService } from '../profile-table/profile.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\n\r\n/**\r\n * This is a dialog that is used whenever you have a persom viewing the profiles.\r\n *\r\n * MAT_DIALOG_DATA:\r\n * profiles: a list of profiles in case you already have them\r\n * courseSSEC_ID: the course' SSEC_ID for fetching profiles\r\n * courseName: the name of the course that will be displayed\r\n * courseSection: the courseSection of the course that will be displayed\r\n * teacherId: the ID of the teacher for fetching profiles.\r\n * teacherName: the name of the teacher that is displayed.\r\n * showTeacherProfileLink: Determines if the course viewer should show a teacher profile link.\r\n * teacherProfileClickHandler: this is called whenever the teacher profile link is clicked\r\n *\r\n * teacherProfileClick: this event emitter fires when the teacher profile link is clicked\r\n *\r\n * NOTE: this will default to using the course if it's available.\r\n * NOTE: either subscribe to the teacherProfileClick or provide a teacherProfileClickHandler. DO NOT DO BOTH.\r\n * Supply EITHER teacherID or courseSSEC_ID, not both.\r\n */\r\n@Component({\r\n selector: 'profile-viewer',\r\n templateUrl: './profile-viewer-dialog.component.html',\r\n styleUrls: [\r\n './profile-viewer-dialog.component.css'\r\n ]\r\n})\r\nexport class ProfileViewerDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n courseSSEC_ID: number;\r\n courseName: string;\r\n courseSection: string;\r\n teacherId: number;\r\n teacherName: string;\r\n showTeacherProfileLink = false;\r\n staffPictureBase64: string;\r\n teacherProfileClickHandler: Function;\r\n\r\n // Local Properties\r\n profiles: Profile[] = [];\r\n useCourse: boolean;\r\n school: string;\r\n expandEmitter = new EventEmitter();\r\n subscriptions: Subscription[] = [];\r\n teacherProfileClick = new EventEmitter();\r\n V10: boolean;\r\n\r\n // Class Functions\r\n constructor (\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private profileService: ProfileService,\r\n private yearService: YearService,\r\n private sanitizer: DomSanitizer,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data containing either a course, a teacherId, or a list of profiles.\r\n // It should also have a teacherName, but it's not required.\r\n // POST: initializes the data\r\n //Setup application identifier\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n // Obtaining injected properties\r\n this.profiles = this.data.profiles;\r\n this.teacherName = this.data.teacherName;\r\n this.courseSSEC_ID = this.data.courseSSEC_ID;\r\n this.courseName = this.data.courseName;\r\n this.courseSection = this.data.courseSection;\r\n this.teacherId = this.data.teacherId;\r\n this.school = this.data.school;\r\n this.showTeacherProfileLink = this.data.showTeacherProfileLink;\r\n this.staffPictureBase64 = this.data.staffPictureBase64;\r\n this.teacherProfileClickHandler = this.data.teacherProfileClickHandler;\r\n\r\n // Setting local properties\r\n this.useCourse = (this.courseSSEC_ID != null);\r\n if (!this.school) {\r\n this.school = this.yearService.defaultYear.SchoolName;\r\n }\r\n if (!this.profiles) {\r\n if (this.useCourse) {\r\n this.subscriptions.push(\r\n this.profileService.getProfileContent(this.courseSSEC_ID, true).subscribe(profiles => {\r\n this.profiles = profiles;\r\n for (let i = 0; i < this.profiles.length; i++) {\r\n this.profiles[i] = System.convert(this.profiles[i], new Profile());\r\n }\r\n })\r\n );\r\n } else {\r\n this.subscriptions.push(\r\n this.profileService.getProfileContent(this.teacherId, false).subscribe(profiles => {\r\n this.profiles = profiles;\r\n for (let i = 0; i < this.profiles.length; i++) {\r\n this.profiles[i] = System.convert(this.profiles[i], new Profile());\r\n }\r\n })\r\n );\r\n }\r\n }\r\n // Since the Teacher Profile link in Course Preview only shows when Teacher has any profile. \r\n this.showTeacherProfileLinkWhenTeacherHasProfile();\r\n\r\n this.subscriptions.push(\r\n this.teacherProfileClick.subscribe(() => {\r\n this.teacherProfileClickHandler();\r\n })\r\n );\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog\r\n this.dialogBox.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n // Methods\r\n resourceSrc() {\r\n // POST: returns a trusted the staff picture image src\r\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(\r\n\t\t\t'data: image/jpeg;' +\r\n\t\t\t'base64,' + this.staffPictureBase64\r\n\t\t);\r\n }\r\n\r\n private showTeacherProfileLinkWhenTeacherHasProfile() {\r\n // PRE: Check Teacher has profile\r\n // POST: Set showTeacherProfileLink = false if there is no profile for teacher \r\n if (!this.V10 && this.useCourse && this.showTeacherProfileLink) {\r\n this.subscriptions.push(\r\n this.profileService.getProfileContent(this.teacherId, false).subscribe(profiles => {\r\n if (!profiles || profiles.length == 0) {\r\n this.showTeacherProfileLink = false;\r\n }\r\n })\r\n );\r\n }\r\n }\r\n}","import {\r\n AfterViewChecked,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { QuillEditorComponent } from 'ngx-quill';\r\n\r\n@Component({\r\n selector: 'tyl-quill-text-only',\r\n templateUrl: './quill-text-only.component.html',\r\n styleUrls: ['./quill-text-only.component.css']\r\n})\r\nexport class QuillTextOnlyComponent implements OnInit, AfterViewChecked, OnDestroy {\r\n private _width = '';\r\n private _height = '';\r\n private _padding;\r\n private _displayBorder = false;\r\n @Input() html = '';\r\n @Input() placeholder = '';\r\n @ViewChild('quill', { static: true }) quill: QuillEditorComponent;\r\n quillContentContainer: HTMLDivElement;\r\n\r\n get width(): string {\r\n return this._width;\r\n }\r\n\r\n @Input() set width(value: string) {\r\n this._width = value != null ? value : '';\r\n }\r\n\r\n get height(): string {\r\n return this._height;\r\n }\r\n\r\n @Input() set height(value: string) {\r\n this._height = value != null ? value : '';\r\n }\r\n\r\n get displayBorder(): boolean {\r\n return this._displayBorder;\r\n }\r\n\r\n @Input() set displayBorder(value: boolean) {\r\n this._displayBorder = value != null ? value : true;\r\n }\r\n\r\n get padding(): number {\r\n return this._padding;\r\n }\r\n\r\n @Input() set padding(value: number) {\r\n this._padding = value;\r\n if (this.quillContentContainer && this._padding != null) {\r\n this.quillContentContainer.style.padding = this._padding + 'px';\r\n }\r\n }\r\n\r\n constructor(\r\n private elementRef: ElementRef\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.html != null) {\r\n this.html = this.html.replace(/\\n/g, '
');\r\n }\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n this.quill.placeholder = this.placeholder;\r\n this.quill.formats = [\r\n 'background',\r\n 'bold',\r\n 'color',\r\n 'code',\r\n 'font',\r\n 'italic',\r\n 'link',\r\n 'size',\r\n 'strike',\r\n 'script',\r\n 'underline',\r\n 'blockquote',\r\n 'header',\r\n 'indent',\r\n 'list',\r\n 'align',\r\n 'direction',\r\n 'code-block',\r\n 'image'\r\n ];\r\n this.quillContentContainer = this.elementRef.nativeElement.getElementsByClassName('ql-editor').item(0);\r\n if (this.quillContentContainer && this._padding != null) {\r\n this.quillContentContainer.style.padding = this.padding + 'px';\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.quill.modules != null) {\r\n this.quill.modules = [];\r\n }\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
\r\n","export class RouteInfo {\r\n\r\n // Static Properties\r\n static pages: RouteInfo[] = [\r\n {\r\n 'Url': '/classroom360/studentLists',\r\n 'Title': 'Student Lists',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/academicHistory',\r\n 'Title': 'Academic History',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/teams',\r\n 'Title': 'Activities and Teams',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/announcements',\r\n 'Title': 'Announcements',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': (V10: boolean): boolean => {\r\n return !V10;\r\n },\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/classroom360/announcements',\r\n 'Title': 'Announcements',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': (V10: boolean, C360: boolean): boolean => {\r\n return !V10 || C360;\r\n },\r\n 'DisableYearDropdown': (V10: boolean, C360: boolean) => {\r\n return V10 && C360;\r\n }\r\n },\r\n {\r\n 'Url': '/student360/studentTestData',\r\n 'Title': 'Assessments',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/attendance',\r\n 'Title': 'Attendance',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/automaticCallingPreferences',\r\n 'Title': 'Automatic Calling Preferences',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/awards',\r\n 'Title': 'Awards',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/calendar',\r\n 'Title': 'Calendar',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/changeEmail',\r\n 'Title': 'Change Email',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/changePassword',\r\n 'Title': 'Change Password',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/schedule',\r\n 'Title': 'Student Schedule',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/feesAndBilling',\r\n 'Title': 'Fees & Billing',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/reportCardGrades',\r\n 'Title': 'Grades',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/graduationPlan',\r\n 'Title': 'Graduation Plan Progress',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/assignments',\r\n 'Title': 'Assignments',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/courseRequests',\r\n 'Title': 'Course Requests',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/health',\r\n 'Title': 'Health',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/lunchMealPlanner',\r\n 'Title': 'Meal Service',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/mealService',\r\n 'Title': 'Meal Service',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/notificationPreferences',\r\n 'Title': 'Notification Preferences',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/setNotificationPreferences',\r\n 'Title': 'Set Notification Preferences',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/householdParents',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/householdAddresses',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/student',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/nonresidentParents',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/emergencyContacts',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlineRegistration/customForm',\r\n 'Title': 'Online Registration',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/householdParents',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/householdAddresses',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/student',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/nonresidentParents',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/emergencyContacts',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/parentPortalDataUpdate/healthMedical',\r\n 'Title': 'Update Household Data',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/programsAndServices',\r\n 'Title': 'Programs and Services',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/discipline',\r\n 'Title': 'Discipline',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/sendEmail',\r\n 'Title': 'Send Email',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/setNotificationPreferences',\r\n 'Title': 'Set Notification Preferences',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/studentDetails',\r\n 'Title': 'Student Details',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/studentDocuments',\r\n 'Title': 'Documents',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/portfolios',\r\n 'Title': 'Student Portfolio',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/studentSummary',\r\n 'Title': 'Student Summary',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/transportation',\r\n 'Title': 'Transportation',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/classroomSummary',\r\n 'Title': 'Classroom Summary',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/cards',\r\n 'Title': 'Classroom Summary',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/classroomAttendance',\r\n 'Title': 'Attendance',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'HidePrintButton': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/onlinePayment',\r\n 'Title': 'Online Payment',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/classroom360/communicationLog',\r\n 'Title': 'Communication Log',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/teacherComments',\r\n 'Title': 'Teacher Comment Library',\r\n 'PrintStyle': './assets/styles/print-styles/teacher-comment.print.css',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/classroom360/disciplineReferral',\r\n 'Title': 'Discipline Referral',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/behaviorReferral',\r\n 'Title': 'Behavior Referral',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/reviewBehaviorReferrals',\r\n 'Title': 'Review Behavior Referrals',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/manageBehaviorReferrals',\r\n 'Title': 'Manage Behavior Referrals',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/gradebook/V10',\r\n 'Title': 'Gradebook',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'isV10': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/gradebook/V9',\r\n 'Title': 'Gradebook',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'isV10': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/gbaddAssignment',\r\n 'Title': 'Add Assignment',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/dataQuery',\r\n 'Title': 'Data Query',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/classAnnouncements',\r\n 'Title': 'Class Announcements',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/links',\r\n 'Title': 'Links',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/studentNotes',\r\n 'Title': 'Student Notes',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/reportsQueue',\r\n 'Title': 'Report Queue',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/reports',\r\n 'Title': 'Reports',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/teacherProfile',\r\n 'Title': 'Teacher Profile',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/classInformation',\r\n 'Title': 'Class Information',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/staffMealService',\r\n 'Title': 'Meal Service',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/teamAttendance',\r\n 'Title': 'Team Attendance',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/seatingChart',\r\n 'Title': 'Seating Charts',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/classroom360/studentNextCourseRequests',\r\n 'Title': 'Student Next Course Requests',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': true,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/massEmailLog',\r\n 'Title': 'Email Log',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/studentFields',\r\n 'Title': 'Student Fields',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/scheduledExports',\r\n 'Title': 'Scheduled Exports',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/behavior/behaviorEvents',\r\n 'Title': 'Behavior Events',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/behavior/interventions',\r\n 'Title': 'Interventions',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/behavior/behaviorEvents/addEvent',\r\n 'Title': 'Behavior Event',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/districtCourseRequestSetup',\r\n 'Title': 'District Course Request Setup',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/schoolCourseRequestSetup',\r\n 'Title': 'School Course Request Setup',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/bellSchedule/districtBellSchedule',\r\n 'Title': 'District Bell Schedules',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/bellSchedule/schoolBellSchedule',\r\n 'Title': 'School Bell Schedules',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/bellSchedule/schoolDateAssignments',\r\n 'Title': 'Days Assigned to Dates',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/schoolCourseRequestSetup',\r\n 'Title': 'School Course Request Setup',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/districtCourseRequestSetup',\r\n 'Title': 'District Course Request Setup',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/bellSchedule/editDistrictBellSchedule',\r\n 'Title': 'Edit District Bell Schedules',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/bellSchedule/editSchoolBellSchedule',\r\n 'Title': 'Edit School Bell Schedules',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/schoolSchedulingFolders',\r\n 'Title': 'School Scheduling Folders',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/schedulingGroups/schedulingGroupsList',\r\n 'Title': 'School Scheduling Groups',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/classesByCourse',\r\n 'Title': 'Classes By Course',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/potentialConflicts',\r\n 'Title': 'Potential Conflicts',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/gradeLevelSchedulingSummary',\r\n 'Title': 'Grade Level Scheduling Summary',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/masterschedule',\r\n 'Title': 'Master Schedule',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/sections',\r\n 'Title': 'Sections',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/scheduleStudentList',\r\n 'Title': 'Schedule Student List',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/teacherSchedulingSettings',\r\n 'Title': 'Teacher Scheduling Settings',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/roomSchedulingSettings',\r\n 'Title': 'Room Scheduling Settings',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/iepAlerts',\r\n 'Title': 'Individulized Education Program',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/counselor360/academicHistory',\r\n 'Title': 'Academic History',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/courseRequest',\r\n 'Title': 'Course Request',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/studentCourseRequest',\r\n 'Title': 'Course Requests',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/studentDigitalContent',\r\n 'Title': 'Student Digital Content',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': false\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/studentSchedulingSettings',\r\n 'Title': 'Student Scheduling Settings',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/eForms/processing',\r\n 'Title': 'Manage e-Forms',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/eForms/surveyprocessing',\r\n 'Title': 'Mange Surveys',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/periodStatistics',\r\n 'Title': 'Period Statistics',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/studentSchedulingLinks',\r\n 'Title': 'Student Scheduling Links',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/studentTeams',\r\n 'Title': 'Student Teams',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/awardsGenerator',\r\n 'Title': 'Academic Awards and Honor Roll',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/districtannouncements',\r\n 'Title': 'District Announcements',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/schoolannouncements',\r\n 'Title': 'School Announcements',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/counselor360/scheduling/classRoster',\r\n 'Title': 'Class Roster',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/notifications/notificationEvents',\r\n 'Title': 'Notification Events',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false,\r\n },\r\n {\r\n 'Url': '/admin360/notifications/notificationGroups',\r\n 'Title': 'Notification Groups',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false,\r\n },\r\n {\r\n 'Url': '/admin360/notifications/myNotificationSettings',\r\n 'Title': 'My Notification Settings',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false,\r\n },\r\n {\r\n 'Url': '/admin360/notifications/myNotifications',\r\n 'Title': 'My Notifications',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': false,\r\n },\r\n {\r\n 'Url': '/admin360/contactTracing',\r\n 'Title': 'Contact Tracing',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/management360/school/schoolSettingsParentNotification',\r\n 'Title': 'Contact Tracing',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/management360/school/schoolSettingsAttendance',\r\n 'Title': 'Contact Tracing',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/management360/school/schoolSettingsGeneral',\r\n 'Title': 'Contact Tracing',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/management360/staff/permissionsGroups',\r\n 'Title': 'Permissions Groups',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/management360/staff/staffDocuments',\r\n 'Title': 'Staff Document',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/fieldsWithinForms',\r\n 'Title': 'Fields Within Forms',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/formsSetup',\r\n 'Title': 'Forms Setup',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/collectionsOfForms',\r\n 'Title': 'Collection Of Forms',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedHome',\r\n 'Title': 'Special Services Home',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/management360/district/parentStudentPortalSettings',\r\n 'Title': 'Parent/Student Portal Settings',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/registrationEnrollment/householdInformation',\r\n 'Title': 'Household Information',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/registrationEnrollment/detailedRegistration',\r\n 'Title': 'Household Registration',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/student360/scheduleHistory',\r\n 'Title': 'Schedule History',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/student360/scheduleHistory/multipleStudent',\r\n 'Title': 'Schedule History',\r\n 'ClassroomPage': false,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': true,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': false\r\n },\r\n {\r\n 'Url': '/sped360/studentDocumentHome',\r\n 'Title': 'Special Services Student Documents Homepage',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/integrationFramework',\r\n 'Title': 'Scheduled Imports/Exports',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'isV10': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/integrationFramework/quickImport',\r\n 'Title': 'Quick Import',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'isV10': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/admin360/integrationFramework/integrationQueue',\r\n 'Title': 'Integration Queue',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'isV10': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedFormsWithinDocuments',\r\n 'Title': 'Forms Within Document',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/accommodationsBank',\r\n 'Title': 'Accommodation Bank',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/complianceRuleTable',\r\n 'Title': 'Compliance Rule Table',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/districtCodeTables',\r\n 'Title': 'District Code Tables',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/goalBank',\r\n 'Title': 'Goal Bank',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/sped360/spedManagement/objectivesBank',\r\n 'Title': 'Objectives Bank',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n },\r\n {\r\n 'Url': '/gradingCycles',\r\n 'Title': 'Grading Cycles',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true\r\n },\r\n {\r\n 'Url': '/specialServiceEvaluations/viewEditEvaluationReport',\r\n 'Title': 'Evaluation Report Writer',\r\n 'ClassroomPage': true,\r\n 'RequiredCourse': false,\r\n 'ShowSchoolDropdown': false,\r\n 'ShowYearDropdown': true,\r\n 'DisableYearDropdown': true\r\n }\r\n ];\r\n\r\n // Properties\r\n Url: string;\r\n Title: string;\r\n PrintStyle?: string;\r\n ClassroomPage: boolean;\r\n RequiredCourse: boolean;\r\n isV10?: boolean;\r\n ShowSchoolDropdown: boolean;\r\n ShowYearDropdown: boolean | Function;\r\n HidePrintButton?: boolean;\r\n DisableYearDropdown?: boolean | Function;\r\n\r\n // Static Methods\r\n static getPageTitle(url: string) {\r\n // POST: returns to you a page title\r\n if (url.includes('?')) {\r\n url = url.substring(0, url.indexOf('?'));\r\n }\r\n const pageInfo = RouteInfo.pages.filter(function (page) {\r\n return page.Url == url;\r\n })[0];\r\n if (pageInfo) {\r\n return pageInfo.Title;\r\n } else {\r\n return '';\r\n }\r\n }\r\n // Static Methods\r\n static getPagePrintStyle(url: string) {\r\n // POST: returns to you a page title\r\n const pageInfo = RouteInfo.pages.filter(function (page) {\r\n return page.Url == url;\r\n })[0];\r\n if (pageInfo) {\r\n return pageInfo.PrintStyle;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n static getPageInfo(url: string) {\r\n const pageInfo = RouteInfo.pages.filter(function (page) {\r\n return page.Url == url;\r\n })[0];\r\n\r\n return pageInfo;\r\n }\r\n}\r\n","export enum PermissionEnum {\r\n // Academic Awards\r\n AcademicAwardsSchool = 1298,\r\n AcademicAwardsDistrict = 2350,\r\n\r\n // Academic History\r\n AcademicHistoryAddEdit = 1299,\r\n AcademicHistoryView = 1296,\r\n AcademicHistoryViewAddEdit = 1294,\r\n AcademicHistory = 2084,\r\n\r\n // AcademicProgress\r\n AddEditEducationPlan = 2170,\r\n AddEditCreditAcquisition = 2173,\r\n AddEditGraduationPlan = 2385,\r\n AddEditProficiencyProgress = 2591,\r\n ViewStudentGraduationPlan = 2386,\r\n AddEditStudentGraduationPlan = 2385,\r\n GraduationPlan = 2387,\r\n StudentGraduationPlan = 1130,\r\n ViewGraduationPlanProgress = 2490,\r\n\r\n // Announcements\r\n ViewAnnouncements = 2299,\r\n\r\n // Assessments\r\n StandardizedTestScores = 2083,\r\n\r\n // Assignments\r\n Assignments = 1784,\r\n\r\n // Attendance\r\n AddEditPeriodicAttendance = 1128,\r\n AddEditTeacherSubjectAttendance = 1195,\r\n Attendance = 1782,\r\n\r\n // Behavior\r\n Behavior = 2085,\r\n\r\n // Behavior Events\r\n BehaviorEventAddEdit = 1199,\r\n BehaviorEventQuickEntry = 2204,\r\n BehaviorEventView = 1217,\r\n BehaviorEventSearchStudent = 1228,\r\n BehaviorEventViewDetails = 1231,\r\n\r\n // Behavior Interventions\r\n BehaviorInterventionViewAll = 2575,\r\n BehaviorInterventionAddEditAll = 2576,\r\n BehaviorInterventionViewMy = 2577,\r\n BehaviorInterventionAddEditMy = 2578,\r\n BehaviorInterventionDeleteAll = 2579,\r\n BehaviorInterventionDeleteMy = 2580,\r\n\r\n // Behavior Referrals\r\n AcceptDisciplineReferrals = 1800,\r\n AddEditDisciplineReferral = 1798,\r\n AllowEditDeleteReferral = 2521,\r\n ViewDisciplineReferral = 1823,\r\n ViewAllDisciplineReferrals = 2558,\r\n\r\n // Course Verification\r\n CourseVerificationAddEdit = 1721,\r\n CourseVerificationView = 1724,\r\n\r\n // CommunicationLog\r\n AddEditMyCommunicationLogCounselor = 2336,\r\n AddEditAllCommunicationLogsCounselor = 2337,\r\n AddEditMyCommunicationLogStudentRecord = 2340,\r\n AddEditAllCommunicationLogsStudentRecord = 2341,\r\n AddEditMyCommunicationLogMyStudents = 2344,\r\n AddEditAllCommunicationLogsMyStudents = 2345,\r\n ViewMyCommunicationLogCounselor = 2338,\r\n ViewAllCommunicationLogsCounselor = 2339,\r\n ViewMyCommunicationLogStudentRecord = 2342,\r\n ViewAllCommunicationLogsStudentRecord = 2343,\r\n ViewMyCommunicationLogMyStudents = 2346,\r\n ViewAllCommunicationLogsMyStudents = 2347,\r\n ViewCommunicationLogsCounselorFunctions = 2335,\r\n ViewConfidentialNotes = 2560,\r\n AddEditConfidentialNotes = 2561,\r\n DeleteMyCommunicationLog = 2562,\r\n DeleteAllCommunicationLogs = 2563,\r\n\r\n // e-Form Permissions\r\n eFormAddEditCategory = 2547,\r\n eFormAddEditTeplate = 2548,\r\n eFormAddEditAllForms = 2549,\r\n eFormAddEditAllTranslations = 2550,\r\n eFormEditInUseForms = 2551,\r\n eFormViewAllForms = 2552,\r\n eFormRevieApproveAllForms = 2553,\r\n eFormAddEditForm = 2554,\r\n eFormViewForm = 2555,\r\n eFormAddEditTranslation = 2556,\r\n eFormReviewApproveForm = 2557,\r\n eFormViewAllAggregateData= 2593,\r\n eFormViewAggregateData = 2595,\r\n eFormCompleteAllStudentForms = 2594,\r\n eFormCompleteStudentForms= 2596,\r\n\r\n // Enrollment\r\n EnrollmentHistory = 2164,\r\n Contacts = 1781,\r\n Demographics = 1780,\r\n ViewEmergencyContacts = 2365,\r\n Home = 1778,\r\n\r\n // Fees and Billing\r\n ViewFeeAndBillingData = 2329,\r\n\r\n // Grades\r\n ClassProgress = 1783,\r\n MyStudentStandardsScores = 1898,\r\n\r\n // Health\r\n ViewStudentHealthDetails = 1375,\r\n ViewStudentHealthInfo = 1209,\r\n\r\n // Meal Service\r\n StudentMealHistory = 2445,\r\n\r\n // Programs and Services\r\n StudentGeneralProfileStudentPrograms = 2573,\r\n\r\n // scheduling 360 permissions\r\n ActivateSchedulingFolder = 1448,\r\n AddCourseRequestRead = 616,\r\n AddEditClassrooms = 1797,\r\n AddEditCustomSchedulingProperties = 2565,\r\n AddEditCycleCodes = 1458,\r\n AddEditDistrictBellSchedule = 1449,\r\n AddEditDistrictCycleCodes = 1450,\r\n AddEditEmployeeDepartments = 1846,\r\n AddEditLinkedClasses = 1463,\r\n AddEditLocalRoomGroups = 1409,\r\n AddSchedulingFolder = 1438,\r\n AddEditSchedulingGroupCategory = 2566,\r\n AddEditSchoolBellSchedule = 1455,\r\n AddEditSchoolCycleCodes = 1458,\r\n AddEditStudentClassGroups = 1460,\r\n AddEditStudentGlobalAvoidedStudents = 1426,\r\n AddEditStudentGlobalAvoidedTeachers = 1430,\r\n AddEditStudentGlobalAvoidedPeriods= 1434,\r\n AddEditStudentLocalAvoidedPeriods = 1436,\r\n AddEditStudentLocalAvoidedStudents= 1428,\r\n AddEditStudentLocalAvoidedTeachers = 1432,\r\n AddEditSubjectSections = 1466,\r\n AddEditTeacherBasicInformation = 1416,\r\n AddEditTeacherGlobalAvoidedStudents = 1417,\r\n AddEditTeacherLocalAvoidedPeriods = 1423,\r\n AllowConflictOverrides = 2348,\r\n ClearOthersWorkingSchedule= 2517,\r\n CourseRequestRead = 606,\r\n DeleteDistrictBellSchedule = 1403,\r\n DeleteLinkedClasses = 1464,\r\n DeleteSchedulingFolders = 1446,\r\n DeleteSchoolBellSchedule = 1474,\r\n DeleteSections = 1467,\r\n DeleteTeacherLocalAvoidedPeriods = 1424,\r\n DistrictCourseRequestSetupRead = 2534,\r\n DistrictCourseRequestSetupWrite = 2535,\r\n EditFolderSettings = 1454,\r\n EditGlobalSettings = 1441,\r\n EditMasterSchedule = 1476,\r\n EmployeeSubjectArea = 221,\r\n GradeLevelCourseRequestSetupRead = 871,\r\n GradeLevelCourseRequestSetupWrite = 872,\r\n MassCourseRequest = 1078,\r\n MassRemoveCourseRequests = 1859,\r\n PerformStudentScheduling = 1482,\r\n RolloverSchedulingFolder = 1772,\r\n RunAutoScheduler = 1478,\r\n ScheduleStudents = 1468,\r\n SchoolCourseRequestSetupRead = 608,\r\n SchoolCourseRequestSetupWrite = 609,\r\n ViewCustomSchedulingProperties = 2564,\r\n ViewDistrictBellSchedule = 1452,\r\n ViewDistrictCycleCodes = 1451,\r\n ViewMasterSchedule = 1475,\r\n ViewRoomResources = 1405,\r\n ViewSchedulingFolders = 1445,\r\n ViewSchoolBellSchedule = 1473,\r\n ViewSchoolCycleCodes = 1456,\r\n ViewStudentClassGroups = 1459,\r\n ViewStudentPreferences = 1425,\r\n ViewStudentScheduler = 1481,\r\n ViewSubjectSections = 1465,\r\n ViewTeacherPreferences = 1415,\r\n\r\n // Student Digital Content\r\n ViewStudentDigitalContent = 2447,\r\n\r\n // Student Documents\r\n StudentDocumentsStudentRecordAdmin = 2119,\r\n StudentDocumentsCouncilor = 2118,\r\n StudentDocumentsMyStudents = 2089,\r\n\r\n // Student Notes\r\n StudentNotesCounselorAddEdit = 2103,\r\n StudentNotesMyStudentsAddEdit = 2101,\r\n StudentNotesStudentRecordAddEdit = 2099,\r\n StudentNotesCounselorView = 2102,\r\n StudentNotesMyStudentsView = 2100,\r\n StudentNotesStudentRecordView = 2098,\r\n \r\n // Student Portfolio\r\n ViewEntries = 2298,\r\n\r\n // Student Schedule\r\n ClassSchedule = 1779,\r\n\r\n // Team Attendance\r\n AddEditTeacherTeamAttendance = 1197,\r\n\r\n // Teams\r\n ViewStudentTeams = 2372,\r\n\r\n // Transportation\r\n StudentTransportation = 2116\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { YearService } from '../year/year.service';\r\nimport { UserPermission } from '../user/user-permission.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { BehaviorSubject, Observable} from 'rxjs';\r\nimport { PermissionEnum } from './permissions.enums';\r\nimport {PermissionGroup} from './permission-group.model';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {System} from '../System';\r\nimport { uniq } from 'lodash';\r\n\r\n@Injectable()\r\nexport class SecurityService {\r\n\r\n private _userPermissions: UserPermission[] = [];\r\n\r\n public get userPermissions() {\r\n return this._userPermissions;\r\n }\r\n\r\n public set userPermissions(permissions: UserPermission[]) {\r\n this._userPermissions = permissions;\r\n this.observablePermissions.next(this._userPermissions);\r\n }\r\n\r\n public observablePermissions = new BehaviorSubject([]);\r\n observablePermissionStream$ = this.observablePermissions.asObservable();\r\n\r\n get userPermissionGroupIDs(): number[] {\r\n return uniq(this._userPermissions.map(o => o.GroupId));\r\n }\r\n\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private http: HttpClient\r\n ) {\r\n\r\n // If the academic year or school changes, load the user permission as per newly selected year/school\r\n this.yearService.observableDefaultYearStream$.subscribe(defaultYear => {\r\n this.userPermissions = [];\r\n this.loadUserPermissions();\r\n });\r\n }\r\n\r\n loadUserPermissions() {\r\n if (this.userService.currentUser != null && this.userService.currentUser.UserType == 1 && this.userPermissions.filter(p => p.SiteId === this.yearService.defaultYear.SchoolID).length == 0) {\r\n this.userService.getUserPermissions(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(permissions => {\r\n this.userPermissions = [...this.userPermissions, ...permissions];\r\n this.observablePermissions.next(this.userPermissions);\r\n });\r\n }\r\n }\r\n\r\n // permission checking\r\n // return true if any of the supplied permission is assigned to the logged-in user.\r\n IsAnyPermissionAssigned(...permissions: PermissionEnum[]): boolean {\r\n return permissions.some(p => this.userPermissions.findIndex(x => x.SiteId === this.yearService.defaultYear.SchoolID && x.PrivilegeId == p) >= 0);\r\n }\r\n\r\n // return true if all supplied permissions must be assigned to the logged-in user.\r\n IsAllPermissionAssigned(...permissions: PermissionEnum[]): boolean {\r\n return permissions.every(p => this.userPermissions.findIndex(x => x.SiteId === this.yearService.defaultYear.SchoolID && x.PrivilegeId == p) >= 0);\r\n }\r\n\r\n // return true if use has given permission with given special value\r\n IsPermissionCategoryAssigned(permissionCode: string, category: string) {\r\n return this.userPermissions.findIndex(o => o.PermissionCode == permissionCode && o.PermissionCategory == category) >= 0;\r\n }\r\n\r\n // return true if any of the supplied permission codes is assigned to the logged-in user.\r\n IsAnyPermissionCodeAssigned(...permissions: string[]): boolean {\r\n return permissions.some(p => this.userPermissions.findIndex(x => x.PermissionCode == p) >= 0);\r\n }\r\n\r\n // return true if all supplied permission codes must be assigned to the logged-in user.\r\n IsAllPermissionCodeAssigned(...permissions: string[]): boolean {\r\n return permissions.every(p => this.userPermissions.findIndex(x => x.PermissionCode == p) >= 0);\r\n }\r\n\r\n // return true if any of the supplied permission group IDs is assigned to the logged-in user.\r\n IsAnyPermissionGroupAssigned(...permissionGroupIDs: number[]): boolean {\r\n return permissionGroupIDs.some(p => this.userPermissions.findIndex(x => x.GroupDescriptionId == p) >= 0);\r\n }\r\n\r\n // return true if all supplied permission group IDs are assigned to the logged-in user.\r\n IsAllPermissionGroupAssigned(...permissionGroupIDs: number[]): boolean {\r\n return permissionGroupIDs.every(p => this.userPermissions.findIndex(x => x.GroupDescriptionId == p) >= 0);\r\n }\r\n\r\n getSchoolIdsFromPermissions(permissions: number[]): number[] {\r\n const distinct = (value, index, self) => {\r\n return self.indexOf(value) === index;\r\n };\r\n const schoolIds = this.userPermissions.filter(o => permissions.includes(o.PrivilegeId) ).map(o => o.SiteId);\r\n return schoolIds.filter(distinct);\r\n }\r\n\r\n getPermissionGroups(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetPermissionGroups');\r\n }\r\n}\r\n","

Self Check In/Check Out History

\r\n
{{studentName}} - {{studentNumber}}
\r\n\r\n\r\n
No Self Check In/Check Out History exists for student
\r\n
0\">\r\n \r\n\r\n \r\n \r\n Type\r\n \r\n \r\n {{st.Type}}\r\n \r\n\r\n \r\n \r\n Date\r\n \r\n \r\n {{st.Date | date: 'MM/dd/yy'}}\r\n \r\n\r\n \r\n \r\n \r\n Time\r\n \r\n \r\n {{st.Time}}\r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n {{st.Status}}\r\n \r\n\r\n \r\n \r\n \r\n Submitted By\r\n \r\n \r\n {{st.SubmittedBy}}\r\n \r\n\r\n \r\n \r\n \r\n \"paperclip\"\r\n \r\n \r\n Y\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Reason\r\n \r\n \r\n {{st.Reason}}\r\n \r\n\r\n \r\n \r\n \r\n Action\r\n \r\n \r\n Delete\r\n \r\n \r\n \r\n\r\n \r\n \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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { take } from 'rxjs/operators';\r\nimport { AttendanceAdministrationService } from '../../admin360/attendance-administration/attendance-administration.service';\r\nimport { CheckInOutSubmissionRequest } from '../../student360/student-summary/check-in-out-submission-request-modal/check-in-out-submission-request-modal.model';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../shared.service';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { UserService } from '../user/user.service';\r\nimport { ViewAttachmentsComponent } from '../view-attachments/view-attachments.component';\r\n\r\n@Component({\r\n selector: 'app-self-check-in-out-history-dialog',\r\n templateUrl: './self-check-in-out-history-dialog.component.html',\r\n styleUrls: ['./self-check-in-out-history-dialog.component.css']\r\n})\r\nexport class SelfCheckInOutHistoryDialogComponent implements OnInit {\r\n studentId: number;\r\n calledFromMenu = false;\r\n isStaff = false;\r\n selfCheckInOutSubmission: CheckInOutSubmissionRequest[] = [];\r\n\r\n columnsToDisplay = ['Type', 'Date', 'Time', 'Status', 'SubmittedBy', 'Reason', 'Attachment', 'Action'];\r\n angularMatData = new TylerMatTableDataSource(this.selfCheckInOutSubmission);\r\n\r\n _sort: MatSort;\r\n useStudents: Student[] = [];\r\n studentName: string;\r\n studentNumber: string;\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private attendanceAdminService: AttendanceAdministrationService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private studentService: StudentService) {\r\n this.useStudents.push(this.data.selectedStudent);\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.angularMatData.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n ngOnInit() {\r\n this.studentId = this.data.studentId;\r\n this.isStaff = this.userService.currentUser.UserType == 1 ? true : false;\r\n this.studentName = this.studentService.formatStudentName(this.data.selectedStudent.FirstName, this.data.selectedStudent.MiddleName, this.data.selectedStudent.LastName, null);\r\n this.studentNumber = '#' + this.data.selectedStudent.StudentNumber;\r\n if (this.data.calledFromMenu != undefined) {\r\n this.calledFromMenu = this.data.calledFromMenu;\r\n }\r\n if (this.calledFromMenu == false) {\r\n this.columnsToDisplay = ['Type', 'Date', 'Time', 'Status', 'SubmittedBy', 'Attachment', 'Reason'];\r\n }\r\n this.getSelfCheckInOutSubmissionHistory();\r\n }\r\n\r\n getSelfCheckInOutSubmissionHistory() {\r\n this.attendanceAdminService.getAttendanceSelfCheckInOutByStudentId(this.studentId).pipe(take(1)).subscribe(history => {\r\n this.selfCheckInOutSubmission = history;\r\n this.angularMatData.data = this.selfCheckInOutSubmission;\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n viwAttachments(id: number) {\r\n this.attendanceAdminService.getCheckInOutHistoryAttachmentById(id, 'Submission').pipe(take(1)).subscribe(attachment => {\r\n this.dialog.open(ViewAttachmentsComponent, {\r\n data: {\r\n attachments: attachment\r\n },\r\n disableClose: true,\r\n minWidth: '750px'\r\n });\r\n });\r\n }\r\n\r\n deleteClick(recordId: number) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Check In/Out Record';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete this Check In/Check Out Record?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.attendanceAdminService.deleteCheckInOutRecordById(recordId, 'submission').pipe(take(1)).subscribe(result => {\r\n if (result == true) {\r\n this.getSelfCheckInOutSubmissionHistory();\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { RegistrationStudent } from '../../../models/registration-student.model';\r\n\r\n@Pipe({\r\n name: 'selectStudentPipe'\r\n})\r\nexport class SelectStudentPipe implements PipeTransform {\r\n\r\n transform(students: RegistrationStudent[], studentId: number): RegistrationStudent[] {\r\n return students.filter(x => x.Id == studentId);\r\n }\r\n\r\n}\r\n","// Modules\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { PlatformModule } from '@angular/cdk/platform';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MaterialModule } from './angular-material/material.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ColorPickerModule } from 'ngx-color-picker';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { TextMaskModule } from 'angular2-text-mask';\r\nimport { OrderModule } from 'ngx-order-pipe';\r\nimport { PDFExportModule } from '@progress/kendo-angular-pdf-export';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { EditorModule } from '@progress/kendo-angular-editor';\r\nimport { WindowModule } from '@progress/kendo-angular-dialog';\r\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\r\nimport { InputsModule, FormFieldModule } from '@progress/kendo-angular-inputs';\r\nimport { LabelModule } from '@progress/kendo-angular-label';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\n\r\n// Components\r\nimport { TylButtonComponent } from './controls/buttons/tyl-button.component';\r\nimport { ErrorPromptComponent } from './controls/error-prompt/error-prompt.component';\r\nimport { StudentHeaderComponent } from './student-header/student-header.component';\r\nimport { ExampleComponent } from './example/component-example/component-example.component';\r\nimport { ModalWindowExampleComponent } from './example/modal-window-example/modal-window-example.component';\r\nimport { ActionMenuAgGridComponent } from './controls/action-menu/action-menu-ag-grid.component';\r\nimport { ActionMenuComponent } from './controls/action-menu/action-menu.component';\r\nimport { StudentNameComponent } from './student/student-name/student-name.component';\r\nimport { StudentSearchComponent } from './student-search/student-search.component';\r\nimport { MassEmailComponent } from './controls/mass-email/mass-email.component';\r\nimport { SpinnerComponent } from './spinner/spinner.component';\r\nimport { ExpandCollapseButtonsComponent } from './controls/buttons/expand-collapse-buttons/expand-collapse-buttons.component';\r\nimport { TabsComponent } from './controls/tabs/tabs.component';\r\nimport { FilterComponent } from './controls/filter/filter.component';\r\nimport { TylHeaderButtonComponent } from './controls/buttons/tyl-header-button.component';\r\nimport { PageHeaderComponent } from './page-header/page-header.component';\r\nimport { SaveCancelButtonsComponent } from './controls/buttons/save-cancel-buttons/save-cancel-buttons.component';\r\nimport { AddAttachmentDialogComponent } from './add-attachment-dialog/add-attachment-dialog.component';\r\nimport { StudentAlertsComponent } from './student-alerts/student-alerts.component';\r\nimport { OnlineRegistrationService } from '../student360/online-registration/online-registration.service';\r\nimport { AlertsDialogComponent } from './student-alerts/alerts-dialog/alerts-dialog.component';\r\nimport { ProfileTableComponent } from './profile-table/profile-table.component';\r\nimport { DeleteProfileAttachmentDialogComponent } from './profile-table/delete-profile-attachment-dialog/delete-profile-attachment-dialog.component';\r\nimport { AddProfileAttachmentDialogComponent } from './profile-table/add-profile-attachment-dialog/add-profile-attachment-dialog.component';\r\nimport { AttachmentsMenuDialogComponent } from './profile-table/attachments-menu-dialog/attachments-menu-dialog.component';\r\nimport { AddEditContentDialogComponent } from './profile-table/add-edit-content-dialog/add-edit-content-dialog.component';\r\nimport { DeleteTopicDialogComponent } from './profile-table/delete-topic-dialog/delete-topic-dialog.component';\r\nimport { EditTopicDialogComponent } from './profile-table/edit-topic-dialog/edit-topic-dialog.component';\r\nimport { ProfileViewerDialogComponent } from './profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { AddTopicDialogComponent } from './profile-table/add-topic-dialog/add-topic-dialog.component';\r\nimport { AddFileComponent } from './controls/add-file/add-file.component';\r\nimport { AdditionalTeacherWarningDialogComponent } from './user-preferences/user-preferences-window/additional-teacher-warning-dialog/additional-teacher-warning-dialog.component';\r\nimport { CalculationPreferenceWarningDialogComponent } from './user-preferences/user-preferences-window/calculation-preference-warning-dialog/calculation-preference-warning-dialog.component';\r\nimport { CustomSortWarningDialogComponent } from './user-preferences/user-preferences-window/custom-sort-warning-dialog/custom-sort-warning-dialog.component';\r\nimport { NoGradingClassesDialogComponent } from './user-preferences/user-preferences-window/no-grading-classes-dialog/no-grading-classes-dialog.component';\r\nimport { PrimaryTeacherWarningDialogComponent } from './user-preferences/user-preferences-window/primary-teacher-warning-dialog/primary-teacher-warning-dialog.component';\r\nimport { SyncPreferencesDialogComponent } from './user-preferences/user-preferences-window/sync-preferences-dialog/sync-preferences-dialog.component';\r\nimport { FilterContentsComponent } from './controls/filter/filter-contents/filter-contents.component';\r\nimport { DarkTabsComponent } from './controls/tabs/dark-tabs.component';\r\nimport { AddLinkComponent } from '../classroom360/links/add-link/add-link.component';\r\nimport { ErrorPromptMessagesComponent } from './controls/error-prompt/error-prompt-messages.component';\r\nimport { TylDatepickerComponent } from './tyl-datepicker/tyl-datepicker.component';\r\nimport { TylMatMenuComponent } from './controls/menus/tyl-mat-menu.component';\r\nimport { TylHeaderMatMenuComponent } from './controls/menus/tyl-header-mat-menu.component';\r\nimport { TylFormFieldComponent } from './controls/tyl-form-field/tyl-form-field.component';\r\nimport { TylCheckboxComponent } from './controls/tyl-checkbox/tyl-checkbox.component';\r\nimport { TylRadioGroupComponent } from './controls/tyl-radio-group/tyl-radio-group.component';\r\nimport { TylCheckboxListComponent } from './controls/tyl-checkbox-list/tyl-checkbox-list.component';\r\nimport { FilterNotificationComponent } from './controls/filter/filter-notification/filter-notification.component';\r\nimport { AddEditReferralDialogComponent } from '../classroom360/discipline-referral/add-edit-referral-dialog/add-edit-referral-dialog.component';\r\nimport { NoteTableComponent } from '../classroom360/discipline-referral/note-table/note-table.component';\r\nimport { SelectCourseDialogComponent } from '../classroom360/guards/select-course/select-course-dialog/select-course-dialog.component';\r\nimport { AdvancedStudentSearchComponent } from './student-search/advanced-student-search/advanced-student-search.component';\r\nimport { DataQueryFilterTableComponent } from '../classroom360/data-query/data-query-filters/data-query-filter-table/data-query-filter-table.component';\r\nimport { DataQueryFieldLabelComponent } from '../classroom360/data-query/data-query-field-label/data-query-field-label.component';\r\nimport { DataQueryService } from '../classroom360/data-query/data-query.service';\r\nimport { DeleteRowDialogComponent } from '../classroom360/data-query/delete-row-dialog/delete-row-dialog.component';\r\nimport { InsertFieldDialogComponent } from '../classroom360/data-query/data-query-settings-for-export/insert-field-dialog/insert-field-dialog.component';\r\nimport { FieldSearchComponent } from '../classroom360/data-query/field-search/field-search.component';\r\nimport { DataQueryQueriesButtonComponent } from '../classroom360/data-query/data-query-queries-button/data-query-queries-button.component';\r\nimport { ViewQueriesDialogComponent } from '../classroom360/data-query/view-queries-dialog/view-queries-dialog.component';\r\nimport { AddEditQueryDialogComponent } from '../classroom360/data-query/add-edit-query-dialog/add-edit-query.component';\r\nimport { ErrorsExistDialogComponent } from '../classroom360/data-query/errors-exist-dialog/errors-exist-dialog.component';\r\nimport { DeleteQueryDialogComponent } from '../classroom360/data-query/delete-query-dialog/delete-query-dialog.component';\r\nimport { DataQueryUnsavedChangesDialogComponent } from '../classroom360/data-query/data-query-unsaved-changes-dialog/data-query-unsaved-changes-dialog.component';\r\nimport { ClassroomSummaryFilterComponent } from '../classroom360/classroom-summary/filter/classroom-summary-filter.component';\r\nimport { CustomPageComponent } from './custom-page/custom-page.component';\r\nimport { CustomFieldComponent } from './custom-page/custom-field/custom-field.component';\r\nimport { GeneralConfirmationComponent } from './controls/general-confirmation/general-confirmation.component';\r\nimport { FavoritesComponent } from './favorites/favorites.component';\r\nimport { FavoritesModalComponent } from './favorites/favorites-modal/favorites-modal.component';\r\nimport { TylGeneralMatMenuComponent } from './controls/menus/tyl-general-mat-menu.component';\r\nimport { TylMultipleSelectListComponent } from './controls/tyl-multiple-select-list/tyl-multiple-select-list.component';\r\nimport { TylSelectCheckAllComponent } from './controls/tyl-multiple-select-list/tyl-select-check-all.component';\r\nimport { GeneralSelectionComponent } from './controls/general-selection/general-selection.component';\r\nimport { CourseDescriptionDialogComponent } from './course-description-dialog/course-description-dialog.component';\r\nimport { ChangeEmailComponent } from './change-email/change-email.component';\r\nimport { ChangeEmailMessageComponent } from './change-email/change-email-message/change-email-message.component';\r\nimport { VirtualizedTableComponent } from './virtualized-table/virtualized-table.component';\r\nimport { StudentSelectionComponent } from './controls/student-selection/student-selection.component';\r\nimport { ImportErrorDialogComponent } from '../classroom360/data-query/add-edit-query-dialog/import-error-dialog/import-error-dialog.component';\r\nimport { FileTooLargeWarningDialogComponent } from './controls/add-file/file-too-large-warning-dialog/file-too-large-warning-dialog.component';\r\nimport { StudentInFocusComponent } from './student/student-in-focus/student-in-focus.component';\r\nimport { AddEditStudentListDialogComponent } from '../classroom360/student-lists/add-edit-student-list-dialog/add-edit-student-list-dialog.component';\r\nimport { EnterCsvDialogComponent } from './enter-csv-dialog/enter-csv-dialog.component';\r\nimport { PortalAccessDeniedComponent } from '../student360/portal-access-denied/portal-access-denied.component';\r\nimport { LayoutEditorComponent } from './custom-layouts/layout-editor/layout-editor.component';\r\nimport { StudentSearchWarningComponent } from './student-search/student-search-warning/student-search-warning.component';\r\nimport { BroadcastDialogComponent } from '../shared-modules/announcement/broadcast-dialog/broadcast-dialog.component';\r\nimport { AddNonStudentDialogComponent } from '../classroom360/discipline-referral/add-non-student-dialog/add-non-student-dialog.component';\r\nimport { StaffSearchComponent } from './staff-search/staff-search.component';\r\nimport { CourseSectionSearchComponent } from './course-section-search/course-section-search.component';\r\nimport { StudentInformationComponent } from './student-information/student-information.component';\r\nimport { StudentInfoPortalComponent } from './student-information/student-info-portal/student-info-portal.component';\r\nimport { ErrorDialogComponent } from './error-dialog/error-dialog.component';\r\nimport { NoRelationshipsWarningDialogComponent } from '../classroom360/data-query/no-relationships-warning-dialog/no-relationships-warning-dialog.component';\r\nimport { OverlayHeaderComponent } from './overlay-header/overlay-header.component';\r\nimport { TemplatesFromClassicDialogComponent } from '../classroom360/data-query/add-edit-query-dialog/templates-from-classic-dialog/templates-from-classic-dialog.component';\r\nimport { SavedLayoutsDialogComponent } from './custom-layouts/saved-layouts-dialog/saved-layouts-dialog.component';\r\nimport { AboutPanelComponent } from './controls/about-panel/about-panel.component';\r\nimport { ProjectScoresInfoComponent } from './user-preferences/user-preferences-window/project-scores-info/project-scores-info.component';\r\nimport { CustomLayoutComponent } from './custom-layouts/custom-layout/custom-layout.component';\r\nimport { SaveLayoutDialogComponent } from './custom-layouts/save-layout-dialog/save-layout-dialog.component';\r\nimport { EFormViewerComponent } from './e-forms/e-form-viewer/e-form-viewer.component';\r\nimport { EFormViewerColumnComponent } from './e-forms/e-form-viewer/e-form-viewer-column/e-form-viewer-column.component';\r\nimport { EFormViewerRowComponent } from './e-forms/e-form-viewer/e-form-viewer-row/e-form-viewer-row.component';\r\nimport { EFormViewerControlComponent } from './e-forms/e-form-viewer/e-form-viewer-control/e-form-viewer-control.component';\r\nimport { SelectedSitesDialogComponent } from './controls/selected-sites-dialog/selected-sites-dialog.component';\r\nimport { SelectedRolesDialogComponent } from './controls/selected-roles-dialog/selected-roles-dialog.component';\r\nimport { EFormNotesComponent } from './e-forms/e-form-notes/e-form-notes.component';\r\nimport { MassEditReferralDialogComponent } from './behavior/mass-edit-referral-dialog/mass-edit-referral-dialog.component';\r\nimport { StudentListModalComponent } from './student-search/student-list-modal/student-list-modal.component';\r\nimport { ProgramsAndServicesComponent } from '../student360/programs-and-services/programs-and-services.component';\r\nimport { AnnouncementMessageComponent } from '../shared-modules/announcement/announcement-message/announcement-message.component';\r\nimport { AnnouncementTableComponent } from '../shared-modules/announcement/announcement-table/announcement-table.component';\r\nimport { LayoutUnsavedChangesDialogComponent } from './custom-layouts/layout-editor/layout-unsaved-changes-dialog/layout-unsaved-changes-dialog.component';\r\nimport { CustomLayoutSectionComponent } from './custom-layouts/custom-layout/custom-layout-section/custom-layout-section.component';\r\nimport { CustomLayoutFieldComponent } from './custom-layouts/custom-layout/custom-layout-field/custom-layout-field.component';\r\nimport { CustomLayoutFieldLabelComponent } from './custom-layouts/custom-layout/custom-layout-field-label/custom-layout-field-label.component';\r\nimport { AddEditStudentRegCodeDialogComponent } from './add-edit-student-reg-code-dialog/add-edit-student-reg-code-dialog.component';\r\nimport { SaveWarningDialogComponent } from '../classroom360/discipline-referral/save-warning-dialog/save-warning-dialog.component';\r\nimport { IepComponent } from '../student360/iep/iep.component';\r\nimport { JobSentToQueueComponent } from './job-sent-to-queue/job-sent-to-queue.component';\r\nimport { AddNoteComponent } from '../classroom360/discipline-referral/add-note/add-note.component';\r\nimport { StaffListDialogComponent } from './staff-search/staff-list-dialog/staff-list-dialog.component';\r\nimport { AdvancedStaffSearchComponent } from './staff-search/advanced-staff-search/advanced-staff-search.component';\r\nimport { GroupConditionInfoDialogComponent } from '../classroom360/data-query/data-query-filters/group-condition-info-dialog/group-condition-info-dialog.component';\r\nimport { TylRTFComponent } from './controls/tyl-rtf/tyl-rtf.component';\r\nimport { ReEnrollStudentsComponent } from './student-header/re-enroll-students/re-enroll-students.component';\r\nimport { NoInternetConnectionModalComponent } from './no-internet-connection-modal/no-internet-connection-modal.component';\r\nimport { TylKendoPdfExportComponent } from './kendo/tyl-kendo-pdf-export/tyl-kendo-pdf-export.component';\r\nimport { AddEditCommunicationLogComponent } from '../shared-modules/communication-log/add-edit-communication-log/add-edit-communication-log.component';\r\nimport { EditTranslationsComponent } from './translation/edit-translations/edit-translations.component';\r\nimport { EditRichTextComponent } from './translation/edit-translations/edit-rich-text/edit-rich-text.component';\r\nimport { GPARankLegendComponent } from '../counselor360/gpa-class-rank/gpa-rank-legend/gpa-rank-legend.component';\r\nimport { LegendComponent } from './legend/legend.component';\r\nimport { StudentImageDialogComponent } from './student-header/student-image-dialog/student-image-dialog.component';\r\nimport { MultipleFamiliesComponent } from '../student360/online-registration/student-update/multiple-families/multiple-families.component';\r\nimport { AdminCommentDialogComponent } from './behavior/mass-edit-referral-dialog/admin-comment-dialog/admin-comment-dialog.component';\r\nimport { GradebookAccessDeniedComponent } from '../classroom360/gradebook/v9/modals/gradebook-access-denied/gradebook-access-denied.component';\r\nimport { TylCalWidgetComponent } from './tyl-cal-widget/tyl-cal-widget.component';\r\nimport { ProgressBarComponent } from './controls/progress-bar/progress-bar.component';\r\nimport { NoClassSelectedWarningDialogComponent } from '../classroom360/guards/select-course/no-class-selected-warning-dialog/no-class-selected-warning-dialog.component';\r\nimport { GradeOverrideLegendComponent } from './controls/grade-override-legend/grade-override-legend.component';\r\nimport { EFormDesignerComponent } from './e-forms/e-form-designer/e-form-designer.component';\r\nimport { EFormColumnComponent } from './e-forms/e-form-designer/e-form-column/e-form-column.component';\r\nimport { EFormRowComponent } from './e-forms/e-form-designer/e-form-row/e-form-row.component';\r\nimport { EFormControlComponent } from './e-forms/e-form-designer/e-form-control/e-form-control.component';\r\nimport { EFormSidePanelComponent } from './e-forms/e-form-designer/e-form-side-panel/e-form-side-panel.component';\r\nimport { EFormNavigationPanelComponent } from './e-forms/e-form-designer/e-form-side-panel/e-form-navigation-panel/e-form-navigation-panel.component';\r\nimport { EFormPropertiesPanelComponent } from './e-forms/e-form-designer/e-form-side-panel/e-form-properties-panel/e-form-properties-panel.component';\r\nimport { EFormAvailableControlsComponent } from './e-forms/e-form-designer/e-form-side-panel/e-form-available-controls/e-form-available-controls.component';\r\nimport { MergeFieldDialogComponent } from './e-forms/e-form-designer/merge-field-dialog/merge-field-dialog.component';\r\nimport { EFormChoicesDialogComponent } from './e-forms/e-form-designer/e-form-choices-dialog/e-form-choices-dialog.component';\r\nimport { ValueFromAnotherFieldDialogComponent } from './e-forms/e-form-designer/value-from-another-field-dialog/value-from-another-field-dialog.component';\r\nimport { EFormTemplateInUseWarningComponent } from './e-forms/e-form-designer/e-form-template-in-use-warning/e-form-template-in-use-warning.component';\r\nimport { FloatingGridComponent } from './floating-grid/floating-grid.component';\r\nimport { StudentDocumentAccessHistoryComponent } from '../student360/student-documents/student-document-access-history/student-document-access-history.component';\r\nimport { QuillTextOnlyComponent } from './quill-text-only/quill-text-only.component';\r\nimport { QuillTextOnlyOneLineComponent } from './quill-text-only/quill-text-only-one-line/quill-text-only-one-line.component';\r\nimport { SelectorComponent } from './controls/selector/selector.component';\r\nimport { TylRaceEthnicityComponent } from './controls/tyl-race-ethnicity/tyl-race-ethnicity.component';\r\nimport { TylRaceEthnicityListComponent } from './controls/tyl-race-ethnicity/tyl-race-ethnicity-list.component';\r\nimport { TylTimeFieldComponent } from './controls/tyl-time-field/tyl-time-field.component';\r\nimport { TylDragSelectionComponent } from './controls/tyl-drag-selection/tyl-drag-selection.component';\r\nimport { MassEmailViewComponent } from '../shared-components/mass-email-view/mass-email-view.component';\r\nimport { SelectRecipientsComponent } from '../shared-components/mass-email-view/select-recipients/select-recipients.component';\r\nimport { UnselectedWarningComponent } from '../shared-components/mass-email-view/unselected-warning/unselected-warning.component';\r\nimport { NoEmailWarningComponent } from '../shared-components/mass-email-view/no-email-warning/no-email-warning.component';\r\nimport { MassEmailAttachmentComponent } from '../shared-components/mass-email-view/mass-email-attachment/mass-email-attachment.component';\r\nimport { SendEmailsWarningComponent } from '../shared-components/mass-email-view/send-emails-warning/send-emails-warning.component';\r\nimport { ByClassRowStudentComponent } from '../shared-components/mass-email-view/select-recipients/by-class-row-student/by-class-row-student.component';\r\nimport { ViewRecipientsModalComponent } from '../shared-components/mass-email-view/view-recipients-modal/view-recipients-modal.component';\r\nimport { SendTestEmailComponent } from '../shared-components/mass-email-view/send-test-email/send-test-email.component';\r\nimport { ByTeamRowStudentComponent } from '../shared-components/mass-email-view/select-recipients/by-team-row-student/by-team-row-student.component';\r\nimport { ByListRowStudentComponent } from '../shared-components/mass-email-view/select-recipients/by-list-row-student/by-list-row-student.component';\r\nimport { EFormViewerHeaderComponent } from './e-forms/e-form-viewer/e-form-viewer-header/e-form-viewer-header.component';\r\nimport { MassEditDialogComponent } from './mass-edit-dialog/mass-edit-dialog.component';\r\nimport { ValueToUpdateComponent } from './mass-edit-dialog/value-to-update/value-to-update.component';\r\nimport { TylToggleChipComponent } from './controls/tyl-toggle-chip/tyl-toggle-chip.component';\r\nimport { PortalMenuComponent } from './portal-menu/portal-menu.component';\r\nimport { ApplicationMenuComponent } from './portal-menu/application-menu/application-menu.component';\r\nimport { FavoriteMenuComponent } from './portal-menu/favorite-menu/favorite-menu.component';\r\nimport { StudentInFocusMenuComponent } from './portal-menu/student-in-focus-menu/student-in-focus-menu.component';\r\n\r\n// Services\r\nimport { LookupService } from './lookup/lookup.service';\r\nimport { StudentSearchService } from './student-search/student-search.service';\r\nimport { ProfileService } from './profile-table/profile.service';\r\nimport { FamilyRegistrationService } from '../shared-modules/family-registration/family-registration.service';\r\nimport { DisciplineReferralService } from '../classroom360/discipline-referral/discipline-referral.service';\r\nimport { SpinnerService } from './spinner/spinner.service';\r\nimport { CustomPageService } from './custom-page/custom-page.service';\r\nimport { SendEmailService } from '../shared-modules/send-email/send-email.service';\r\nimport { CustomLayoutsService } from './custom-layouts/custom-layouts.service';\r\nimport { StudentListsService } from '../classroom360/student-lists/student-lists.service';\r\nimport { AnnouncementService } from '../shared-modules/announcement/announcement.service';\r\nimport { BehaviorSharedService } from './behavior/behavior-shared.service';\r\nimport { EFormService } from './e-forms/e-form.service';\r\nimport { ProgramsAndServicesService } from '../student360/programs-and-services/programs-and-services.service';\r\nimport { StaffSearchService } from './staff-search/staff-search.service';\r\nimport { TranslationService } from './translation/translation.service';\r\nimport { BehaviorService } from '../counselor360/behavior/behavior.service';\r\nimport { CourseSectionSearchService } from './course-section-search/course-section-search.service';\r\nimport { EFormDesignerService } from './e-forms/e-form-designer/e-form-designer.service';\r\nimport { StaffCardsService } from '../classroom360/staff-home/staff-cards/staff-cards.service';\r\nimport { NotificationsService } from '../admin360/notifications/notifications.service';\r\nimport { CourseRequestMgmtService } from '../counselor360/scheduling/course-request-mgmt/course-request-mgmt.service';\r\nimport { ScheduleFolderService } from '../counselor360/scheduling/schedule-folder/schedule-folder.service';\r\nimport { MassEmailService } from '../shared-components/mass-email-view/mass-email.service';\r\n\r\n// Directives\r\nimport { Draggable } from './directives/draggable.directive';\r\nimport { AriaDirective } from './directives/aria.directive';\r\nimport { CdkDetailRowDirective } from './directives/cdk-detail-row.directive';\r\nimport { RegexDirective } from './directives/regex.directive';\r\nimport { NumbersOnlyDirective } from './directives/numbers-only.directive';\r\nimport { DateCharactersOnlyDirective } from './directives/dateCharactersOnly.directive';\r\nimport { DateValidator } from './tyl-datepicker/date.validator';\r\nimport { ScrollToRowDirective } from './angular-material/scroll-to-row.directive';\r\nimport { DynamicComponentDirective } from './directives/dynamic-component.directive';\r\nimport { PhoneFormatDirectiveValidator } from './validators/phone-format-validator.directive';\r\nimport { EmailFormatDirectiveValidator } from './validators/email-format-validator.directive';\r\nimport { EllipsisDirective } from './directives/ellipsis.directive';\r\nimport { DecimalFormatValidatorDirective } from './directives/decimal-format-validator.directive';\r\nimport { StudentInformationDirective } from './student-information/student-information.directive';\r\nimport { FalseyRequiredDirectiveValidator } from './validators/falsey-required-validator.directive';\r\nimport { DebounceDirective } from './directives/debounce.directive';\r\nimport { MinimumDirective } from './directives/minimum.directive';\r\nimport { MaximumDirective } from './directives/maximum.directive';\r\nimport { ExternalLinkDirective } from './directives/external-link.directive';\r\nimport { NumberMaskDirective } from './directives/number-mask.directive';\r\n\r\n// Pipes\r\nimport { SafeHtml } from './pipes/safe-html.pipe';\r\nimport {\r\n ChildPortalFilterPipe,\r\n PortalFilterPipe,\r\n TileFilterPipe,\r\n SchoolLayoutFilterPipe,\r\n SchoolLayoutAllFilterPipe\r\n} from './user-preferences/user-preferences-window/user-preferences-window.component';\r\nimport { MenuFilterByGroupPipe } from './pipes/menu-filter-by-group.pipe';\r\nimport { LookUpFilterPipe, LookUpDescription } from '../shared-modules/communication-log/communication-log.component';\r\nimport { YesNoPipe } from './pipes/yes-no.pipe';\r\nimport { FilterClass } from '../classroom360/classroom-summary/classFilter.pipe';\r\nimport { EllipsisPipe } from './pipes/ellipsis.pipe';\r\nimport { GetFieldDisplayNamePipe } from './custom-layouts/pipes/get-field-display-name.pipe';\r\nimport { GetDataTypePipe } from './custom-layouts/pipes/get-data-type.pipe';\r\nimport { GetSpecialFieldSectionIdPipe } from './custom-layouts/pipes/get-special-field-section-id.pipe';\r\nimport { SafeResourceUrlPipe } from './pipes/safe-resource-url.pipe';\r\nimport { CommaDelimitedPipe } from './pipes/comma-delimited.pipe';\r\nimport { MergeFieldPipe } from './e-forms/merge-field.pipe';\r\nimport { SanitizePipe } from './pipes/sanitize.pipe';\r\nimport { LastFirstNamePipe } from './pipes/lastFirstName.pipe';\r\nimport { DateIsTodayPipe } from './pipes/date-is-today.pipe';\r\nimport { TylTranslatePipe } from './pipes/tyl-translate.pipe';\r\nimport { TranslationsStatusComponent } from './translation/translations-status/translations-status.component';\r\nimport { MinimumEnforceDirective } from './directives/minimum-enforce.directive';\r\nimport { MaximumEnforceDirective } from './directives/maximum-enforce.directive';\r\nimport { PhoneNumberPipe } from './pipes/phone-number.pipe';\r\nimport { MaxPrecisionDirective } from './directives/max-precision.directive';\r\nimport { GetDesignerControlNamePipe } from './pipes/get-designer-control-name.pipe';\r\nimport { FormatEFormControlTypePipe } from './pipes/format-eform-control-type.pipe';\r\nimport { GetControlImagePipe } from './pipes/get-control-image.pipe';\r\nimport { EFormViewerModalComponent } from './e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component';\r\nimport { OverrideCreditcodeComponent } from '../student360/graduation-plan/override-creditcode/override-creditcode.component';\r\nimport { WarningDialogComponent } from '../classroom360/data-query/warning-dialog/warning-dialog.component';\r\nimport { EFormPdfNameComponent } from '../admin360/e-forms/e-form-submissions/e-Form-PDF-Name/e-form-pdf-name.component';\r\nimport { IncidentTypePipe } from './pipes/incident-type.pipe';\r\nimport { GradebookPreferencesResetWarningsComponent } from './user-preferences/user-preferences-window/gradebook-preferences-reset-warnings/gradebook-preferences-reset-warnings.component';\r\nimport { EFormRrowColumnLocationComponent } from './e-forms/e-form-designer/e-form-row-column-location/e-form-row-column-location';\r\nimport { EFormSelectedStudentsComponent } from '../admin360/e-forms/e-form-instances/e-form-selected-students/e-form-selected-students.component';\r\nimport { CustomizationFrameworkService } from '../shared-modules/customization-framework/customization-framework.service';\r\nimport { CustomDataFieldComponent } from '../shared-modules/customization-framework/custom-data-field/custom-data-field.component';\r\nimport { CustomizationService } from '../admin360/customization/customization.service';\r\nimport { SharedGradebookService } from '../classroom360/gradebook/shared/shared-gradebook.service';\r\nimport { GetSurveyAnswerByFieldIDPipe } from './e-forms/survey-answers-popup/get-survey-answer-by-field-id.pipe';\r\nimport { SurveyAnswersPopupComponent } from './e-forms/survey-answers-popup/survey-answers-popup.component';\r\nimport { SurveyAnswerIsCriticalPipe } from './e-forms/survey-answers-popup/survey-answer-is-critical.pipe';\r\nimport { PreferencesButtonComponent } from './preferences-button/preferences-button.component';\r\nimport { SurveyNotCompletedPopupComponent } from './e-forms/survey-not-completed-popup/survey-not-completed-popup.component';\r\nimport { EFormSurveyAnswerSummaryComponent } from './e-forms/e-form-survey-answer-summary/e-form-survey-answer-summary.component';\r\nimport { CalculatePercentPipe } from './pipes/calculate-percent.pipe';\r\nimport { ProgramAndServiceFieldsComponent } from './program-and-service-fields/program-and-service-fields.component';\r\nimport { NotificationsTableComponent } from './notifications-table/notifications-table.component';\r\nimport { NotificationDetailsDialogComponent } from './notifications-table/notification-details-dialog/notification-details-dialog.component';\r\nimport { StudentsToAddDialogComponent } from './students-to-add-dialog/students-to-add-dialog.component';\r\nimport { StudentNotesSharedComponent } from './student-notes-shared/student-notes-shared.component';\r\nimport { StudentNotesComponent } from '../classroom360/student-notes/student-notes.component';\r\nimport { StudentNotesService } from '../classroom360/student-notes/student-notes.service';\r\nimport { StudentInfoDirective } from '../admin360/student-info/student-info.directive';\r\nimport { SortByPipe } from './pipes/sort-by.pipe';\r\nimport { BehaviorLetterViewerModalComponent } from '../counselor360/behavior/behavior-letters/behavior-letter-viewer-modal/behavior-letter-viewer-modal.component';\r\nimport { EFormSurveyAnswerDetailsComponent } from './e-forms/e-form-survey-answer-details/e-form-survey-answer-details.component';\r\nimport { EFormSurveyAnswersFilterComponent } from './e-forms/e-form-survey-answer-details/e-form-survey-answers-filter/e-form-survey-answers-filter.component';\r\nimport { HouseholdFamilyDocumentComponent } from '../admin360/registration/detailed-registration/household-registration/household-family-document/household-family-document.component';\r\nimport { AddFamilyDocumentDialogComponent } from '../admin360/registration/detailed-registration/household-registration/household-family-document/add-family-document-dialog/add-family-document-dialog.component';\r\nimport { SelectStudentPipe } from '../admin360/registration/detailed-registration/household-registration/household-family-document/select-student.pipe';\r\nimport { RegistrationEnrollmentService } from '../admin360/registration/registration-enrollment.service';\r\nimport { SingleStudentComponent } from '../management360/program-and-service/single-student/single-student.component';\r\nimport { AddEditProgramServiceSingleStudentComponent } from '../management360/program-and-service/single-student/add-edit-program-service-single-student/add-edit-program-service-single-student.component';\r\nimport { InvalidSelectionDialogComponent } from '../management360/program-and-service/single-student/invalid-selection-dialog/invalid-selection-dialog.component';\r\nimport { DeleteProgramServiceDialogComponent } from '../management360/program-and-service/delete-program-service-dialog/delete-program-service-dialog.component';\r\nimport { CopyButtonComponent } from './controls/copy-and-paste-buttons/copy-button/copy-button.component';\r\nimport { PasteButtonComponent } from './controls/copy-and-paste-buttons/paste-button/paste-button.component';\r\nimport { AttendanceCheckInOutLegendComponent } from './attendance-check-in-out-legend/attendance-check-in-out-legend.component';\r\nimport { SelfCheckInOutHistoryDialogComponent } from './self-check-in-out-history-dialog/self-check-in-out-history-dialog.component';\r\nimport { StaffHeaderComponent } from './staff-header/staff-header.component';\r\nimport { AssignedSchoolsComponent } from './staff-header/modals/assigned-schools/assigned-schools.component';\r\nimport { StaffAlertComponent } from './staff-header/modals/staff-alert/staff-alert.component';\r\nimport { StudentHealthAlertComponent } from './student-health-alert/student-health-alert.component';\r\nimport { ViewAttachmentsComponent } from './view-attachments/view-attachments.component';\r\nimport { ViewAbsentNoticeHistoryDialogComponent } from './view-absent-notice-history-dialog/view-absent-notice-history-dialog.component';\r\nimport { CheckInOutViewHistoryDialogComponent } from './check-in-out-view-history-dialog/check-in-out-view-history-dialog.component';\r\nimport { YearDescriptionPipe } from './pipes/year-description.pipe';\r\nimport { HighlightSearchPipe } from './pipes/highlight-search.pipe';\r\nimport { SelectRecipientsPipe } from '../shared-components/mass-email-view/select-recipients/select-recipients.pipe';\r\nimport { ReplacePipe } from './pipes/replace.pipe';\r\nimport { EFormHeaderComponent } from './e-forms/e-form-designer/e-form-header/e-form-header.component';\r\nimport { CmpComponentDirective } from './directives/cmp-component.directive';\r\nimport { DataDefDropdownComponent } from './controls/data-def-control/data-def-dropdown/data-def-dropdown.component';\r\nimport { DataDefButtonComponent } from './controls/data-def-control/data-def-button/data-def-button.component';\r\nimport { DataDefinitionComponent } from '../admin360/data-definition/data-definition.component';\r\nimport { DataDefinitionStaticComponent } from '../admin360/data-definition/data-definition-static/data-definition-static.component';\r\nimport { DataDefinitionDynamicComponent } from '../admin360/data-definition/data-definition-dynamic/data-definition-dynamic.component';\r\nimport { AddEditDataDefinitionComponent } from '../admin360/data-definition/data-definition-static/add-edit-data-definition/add-edit-data-definition.component';\r\nimport { AddEditDynamicDataDefinitionComponent } from '../admin360/data-definition/data-definition-dynamic/add-edit-dynamic-data-definition/add-edit-dynamic-data-definition.component';\r\nimport { TylKendoHtmlEditorComponent } from './kendo/tyl-kendo-html-editor/tyl-kendo-html-editor.component';\r\nimport { DataDefRadioButtonsComponent } from './controls/data-def-control/data-def-radio-buttons/data-def-radio-buttons.component';\r\nimport { DataDefButtonListComponent } from './controls/data-def-control/data-def-button-list/data-def-button-list.component';\r\nimport { AssessmentComponent } from '../admin360/student-info/assessment/assessment.component';\r\nimport { AssessmentDataCategoryTableComponent } from '../admin360/student-info/assessment/assessment-data-category-table/assessment-data-category-table.component';\r\nimport { AssessmentDataTableComponent } from '../admin360/student-info/assessment/assessment-data-table/assessment-data-table.component';\r\nimport { AddAssessmentScoresComponent } from '../admin360/student-info/assessment/assessment-data-category-table/add-assessment-scores/add-assessment-scores.component';\r\nimport { AddAssessmentTabDialogComponent } from '../admin360/student-info/assessment/add-assessment-tab-dialog/add-assessment-tab-dialog.component';\r\nimport { MAT_TABS_CONFIG } from '@angular/material/tabs';\r\nimport { EFormFormatWarningComponent } from './e-forms/e-form-designer/e-form-format-warning/e-form-format-warning.component';\r\nimport { RequireStudentGuard } from './guards/require-student/require-student.guard';\r\nimport { RequireStaffGuard } from './guards/require-staff/require-staff.guard';\r\nimport { EFormConfirmSubmitComponent } from './e-forms/e-form-confirm-submit/e-form-confirm-submit.component';\r\nimport { AddEditNoteDialogComponent } from '../classroom360/student-notes/add-edit-note-dialog/add-edit-note-dialog.component';\r\nimport { ReportingFrameworkService } from '../classroom360/reporting-framework/reporting-framework.service';\r\nimport { DataDefMultiSelectComponent } from './controls/data-def-control/data-def-multi-select/data-def-multi-select.component';\r\nimport { BehaviorLetterTemplateSettingsComponent } from './behavior-letter-template-settings/behavior-letter-template-settings.component';\r\nimport { MyReportsComponent } from '../classroom360/reporting-framework/my-reports/my-reports.component';\r\nimport { MyReportsTabComponent } from '../classroom360/reporting-framework/my-reports/my-reports-tab/my-reports-tab.component';\r\nimport { AssignedReportsTabComponent } from '../classroom360/reporting-framework/my-reports/assigned-reports-tab/assigned-reports-tab.component';\r\nimport { AddMyReportFolderDialogComponent } from '../classroom360/reporting-framework/my-reports/add-my-report-folder-dialog/add-my-report-folder-dialog.component';\r\nimport { FoldersThisReportDialogComponent } from '../classroom360/reporting-framework/my-reports/folders-this-report-dialog/folders-this-report-dialog.component';\r\nimport { StaffImageDialogComponent } from './staff-header/modals/staff-image-dialog/staff-image-dialog.component';\r\nimport { AttachmentTableComponent } from './profile-table/attachment-table/attachment-table.component';\r\nimport { MonthDayPickerComponent } from './controls/month-day-picker/month-day-picker.component';\r\nimport { CourseSearchOptionComponent } from './course-search-option/course-search-option.component';\r\nimport { ColorLegendDialogComponent } from './color-legend-dialog/color-legend-dialog.component';\r\n\r\n// TODO break out some of these components into their own modules to avoid circular dependencies.\r\n@NgModule({\r\n declarations: [\r\n TylButtonComponent,\r\n TylHeaderButtonComponent,\r\n ChangeEmailComponent,\r\n ChangeEmailMessageComponent,\r\n ErrorPromptComponent,\r\n StudentHeaderComponent,\r\n StaffHeaderComponent,\r\n ExampleComponent,\r\n ModalWindowExampleComponent,\r\n ActionMenuAgGridComponent,\r\n ActionMenuComponent,\r\n SaveCancelButtonsComponent,\r\n Draggable,\r\n CdkDetailRowDirective,\r\n MassEmailComponent,\r\n SpinnerComponent,\r\n ExpandCollapseButtonsComponent,\r\n TabsComponent,\r\n StudentSelectionComponent,\r\n GeneralSelectionComponent,\r\n FilterComponent,\r\n FilterContentsComponent,\r\n SafeHtml,\r\n AriaDirective,\r\n RegexDirective,\r\n EllipsisDirective,\r\n StudentNameComponent,\r\n StudentSearchComponent,\r\n FavoritesComponent,\r\n AddLinkComponent,\r\n PageHeaderComponent,\r\n AddAttachmentDialogComponent,\r\n StudentAlertsComponent,\r\n AlertsDialogComponent,\r\n AddFileComponent,\r\n ProfileTableComponent,\r\n EditTopicDialogComponent,\r\n DeleteTopicDialogComponent,\r\n AddEditContentDialogComponent,\r\n AttachmentsMenuDialogComponent,\r\n AddProfileAttachmentDialogComponent,\r\n DeleteProfileAttachmentDialogComponent,\r\n AddTopicDialogComponent,\r\n ProfileViewerDialogComponent,\r\n ChildPortalFilterPipe,\r\n SchoolLayoutFilterPipe,\r\n SchoolLayoutAllFilterPipe,\r\n PortalFilterPipe,\r\n TileFilterPipe,\r\n EllipsisPipe,\r\n AdditionalTeacherWarningDialogComponent,\r\n CalculationPreferenceWarningDialogComponent,\r\n CustomSortWarningDialogComponent,\r\n NoGradingClassesDialogComponent,\r\n PrimaryTeacherWarningDialogComponent,\r\n SyncPreferencesDialogComponent,\r\n CourseDescriptionDialogComponent,\r\n DarkTabsComponent,\r\n NumbersOnlyDirective,\r\n DateCharactersOnlyDirective,\r\n TylDatepickerComponent,\r\n ErrorPromptMessagesComponent,\r\n TylMatMenuComponent,\r\n TylHeaderMatMenuComponent,\r\n TylFormFieldComponent,\r\n FavoritesComponent,\r\n FavoritesModalComponent,\r\n TylGeneralMatMenuComponent,\r\n TylCheckboxComponent,\r\n TylRadioGroupComponent,\r\n TylCheckboxListComponent,\r\n TylMultipleSelectListComponent,\r\n TylSelectCheckAllComponent,\r\n MenuFilterByGroupPipe,\r\n DateValidator,\r\n ScrollToRowDirective,\r\n VirtualizedTableComponent,\r\n FilterNotificationComponent,\r\n LookUpFilterPipe,\r\n LookUpDescription,\r\n SelectedSitesDialogComponent,\r\n GeneralConfirmationComponent,\r\n DynamicComponentDirective,\r\n AddEditReferralDialogComponent,\r\n AddNoteComponent,\r\n NoteTableComponent,\r\n CustomPageComponent,\r\n CustomFieldComponent,\r\n YesNoPipe,\r\n SelectCourseDialogComponent,\r\n NoClassSelectedWarningDialogComponent,\r\n ClassroomSummaryFilterComponent,\r\n FilterClass,\r\n AdvancedStudentSearchComponent,\r\n DataQueryFilterTableComponent,\r\n DataQueryFieldLabelComponent,\r\n DeleteRowDialogComponent,\r\n InsertFieldDialogComponent,\r\n FieldSearchComponent,\r\n DataQueryQueriesButtonComponent,\r\n ViewQueriesDialogComponent,\r\n AddEditQueryDialogComponent,\r\n ErrorsExistDialogComponent,\r\n DeleteQueryDialogComponent,\r\n DataQueryUnsavedChangesDialogComponent,\r\n ImportErrorDialogComponent,\r\n ErrorDialogComponent,\r\n NoRelationshipsWarningDialogComponent,\r\n PhoneFormatDirectiveValidator,\r\n EmailFormatDirectiveValidator,\r\n FalseyRequiredDirectiveValidator,\r\n OverlayHeaderComponent,\r\n FileTooLargeWarningDialogComponent,\r\n TemplatesFromClassicDialogComponent,\r\n ProjectScoresInfoComponent,\r\n AboutPanelComponent,\r\n PortalMenuComponent,\r\n ApplicationMenuComponent,\r\n FavoriteMenuComponent,\r\n StudentInFocusMenuComponent,\r\n LayoutEditorComponent,\r\n GetFieldDisplayNamePipe,\r\n SavedLayoutsDialogComponent,\r\n CustomLayoutComponent,\r\n SaveLayoutDialogComponent,\r\n LayoutUnsavedChangesDialogComponent,\r\n CustomLayoutSectionComponent,\r\n CustomLayoutFieldComponent,\r\n CustomLayoutFieldLabelComponent,\r\n GetDataTypePipe,\r\n GetSpecialFieldSectionIdPipe,\r\n StudentInFocusComponent,\r\n AddEditStudentListDialogComponent,\r\n EnterCsvDialogComponent,\r\n PortalAccessDeniedComponent,\r\n StudentSearchWarningComponent,\r\n EFormViewerComponent,\r\n EFormViewerColumnComponent,\r\n EFormViewerRowComponent,\r\n EFormViewerControlComponent,\r\n AnnouncementTableComponent,\r\n AnnouncementMessageComponent,\r\n SelectedRolesDialogComponent,\r\n SafeResourceUrlPipe,\r\n ProgramsAndServicesComponent,\r\n StudentInformationComponent,\r\n StudentInformationDirective,\r\n StudentInfoPortalComponent,\r\n BroadcastDialogComponent,\r\n MassEditReferralDialogComponent,\r\n AdminCommentDialogComponent,\r\n StudentListModalComponent,\r\n CourseSectionSearchComponent,\r\n CommaDelimitedPipe,\r\n TylTranslatePipe,\r\n MergeFieldPipe,\r\n TylTranslatePipe,\r\n EFormNotesComponent,\r\n AddEditStudentRegCodeDialogComponent,\r\n StaffSearchComponent,\r\n DecimalFormatValidatorDirective,\r\n AddNonStudentDialogComponent,\r\n SanitizePipe,\r\n SaveWarningDialogComponent,\r\n ProgressBarComponent,\r\n ExternalLinkDirective,\r\n NumberMaskDirective,\r\n StudentImageDialogComponent,\r\n MultipleFamiliesComponent,\r\n GradebookAccessDeniedComponent,\r\n DateIsTodayPipe,\r\n TylCalWidgetComponent,\r\n EditTranslationsComponent,\r\n EditRichTextComponent,\r\n IepComponent,\r\n GPARankLegendComponent,\r\n LegendComponent,\r\n GradeOverrideLegendComponent,\r\n MinimumDirective,\r\n MaximumDirective,\r\n LastFirstNamePipe,\r\n DebounceDirective,\r\n TylRTFComponent,\r\n ReEnrollStudentsComponent,\r\n NoInternetConnectionModalComponent,\r\n TylKendoPdfExportComponent,\r\n AddEditCommunicationLogComponent,\r\n TranslationsStatusComponent,\r\n StaffListDialogComponent,\r\n AdvancedStaffSearchComponent,\r\n GroupConditionInfoDialogComponent,\r\n MinimumEnforceDirective,\r\n MaximumEnforceDirective,\r\n PhoneNumberPipe,\r\n MaxPrecisionDirective,\r\n EFormDesignerComponent,\r\n EFormColumnComponent,\r\n EFormRowComponent,\r\n EFormControlComponent,\r\n EFormSidePanelComponent,\r\n EFormNavigationPanelComponent,\r\n EFormPropertiesPanelComponent,\r\n EFormAvailableControlsComponent,\r\n MergeFieldDialogComponent,\r\n EFormChoicesDialogComponent,\r\n ValueFromAnotherFieldDialogComponent,\r\n EFormTemplateInUseWarningComponent,\r\n GetDesignerControlNamePipe,\r\n FormatEFormControlTypePipe,\r\n GetControlImagePipe,\r\n EFormViewerModalComponent,\r\n OverrideCreditcodeComponent,\r\n WarningDialogComponent,\r\n EFormPdfNameComponent,\r\n FloatingGridComponent,\r\n IncidentTypePipe,\r\n GradebookPreferencesResetWarningsComponent,\r\n EFormRrowColumnLocationComponent,\r\n EFormSelectedStudentsComponent,\r\n CustomDataFieldComponent,\r\n StudentDocumentAccessHistoryComponent,\r\n QuillTextOnlyComponent,\r\n QuillTextOnlyOneLineComponent,\r\n SelectorComponent,\r\n TylRaceEthnicityComponent,\r\n TylRaceEthnicityListComponent,\r\n GetSurveyAnswerByFieldIDPipe,\r\n SurveyAnswersPopupComponent,\r\n SurveyAnswerIsCriticalPipe,\r\n PreferencesButtonComponent,\r\n SurveyNotCompletedPopupComponent,\r\n EFormSurveyAnswerSummaryComponent,\r\n CalculatePercentPipe,\r\n ProgramAndServiceFieldsComponent,\r\n NotificationsTableComponent,\r\n NotificationDetailsDialogComponent,\r\n StudentsToAddDialogComponent,\r\n StudentNotesComponent,\r\n StudentNotesSharedComponent,\r\n StudentInfoDirective,\r\n SortByPipe,\r\n BehaviorLetterViewerModalComponent,\r\n EFormSurveyAnswerDetailsComponent,\r\n EFormSurveyAnswersFilterComponent,\r\n HouseholdFamilyDocumentComponent,\r\n AddFamilyDocumentDialogComponent,\r\n SelectStudentPipe,\r\n SingleStudentComponent,\r\n AddEditProgramServiceSingleStudentComponent,\r\n InvalidSelectionDialogComponent,\r\n DeleteProgramServiceDialogComponent,\r\n TylTimeFieldComponent,\r\n CopyButtonComponent,\r\n PasteButtonComponent,\r\n AttendanceCheckInOutLegendComponent,\r\n SelfCheckInOutHistoryDialogComponent,\r\n AssignedSchoolsComponent,\r\n StaffAlertComponent,\r\n StudentHealthAlertComponent,\r\n ViewAttachmentsComponent,\r\n ViewAbsentNoticeHistoryDialogComponent,\r\n CheckInOutViewHistoryDialogComponent,\r\n TylDragSelectionComponent,\r\n YearDescriptionPipe,\r\n HighlightSearchPipe,\r\n MassEmailViewComponent,\r\n SelectRecipientsComponent,\r\n ViewRecipientsModalComponent,\r\n UnselectedWarningComponent,\r\n NoEmailWarningComponent,\r\n MassEmailAttachmentComponent,\r\n SendEmailsWarningComponent,\r\n JobSentToQueueComponent,\r\n SelectRecipientsPipe,\r\n ByClassRowStudentComponent,\r\n SendTestEmailComponent,\r\n ByTeamRowStudentComponent,\r\n ByListRowStudentComponent,\r\n ReplacePipe,\r\n EFormViewerHeaderComponent,\r\n EFormHeaderComponent,\r\n CmpComponentDirective,\r\n DataDefDropdownComponent,\r\n DataDefButtonComponent,\r\n DataDefinitionComponent,\r\n DataDefinitionStaticComponent,\r\n DataDefinitionDynamicComponent,\r\n AddEditDataDefinitionComponent,\r\n AddEditDynamicDataDefinitionComponent,\r\n TylKendoHtmlEditorComponent,\r\n MassEditDialogComponent,\r\n ValueToUpdateComponent,\r\n DataDefRadioButtonsComponent,\r\n DataDefButtonListComponent,\r\n AssessmentComponent,\r\n AssessmentDataCategoryTableComponent,\r\n AssessmentDataTableComponent,\r\n AddAssessmentScoresComponent,\r\n AddAssessmentTabDialogComponent,\r\n TylToggleChipComponent,\r\n EFormFormatWarningComponent,\r\n EFormConfirmSubmitComponent,\r\n AddEditNoteDialogComponent,\r\n DataDefMultiSelectComponent,\r\n BehaviorLetterTemplateSettingsComponent,\r\n MyReportsComponent,\r\n MyReportsTabComponent,\r\n AssignedReportsTabComponent,\r\n AddMyReportFolderDialogComponent,\r\n FoldersThisReportDialogComponent,\r\n StaffImageDialogComponent,\r\n AttachmentTableComponent,\r\n MonthDayPickerComponent,\r\n CourseSearchOptionComponent,\r\n ColorLegendDialogComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n TranslateModule,\r\n CdkTableModule,\r\n PlatformModule,\r\n QuillModule.forRoot(),\r\n MatTableModule,\r\n ColorPickerModule,\r\n TextMaskModule,\r\n OrderModule,\r\n PDFExportModule,\r\n DropDownsModule,\r\n MatChipsModule,\r\n EditorModule,\r\n ButtonsModule,\r\n WindowModule,\r\n InputsModule,\r\n FormFieldModule,\r\n LabelModule,\r\n NgxMaskModule.forRoot()\r\n ],\r\n exports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n TylButtonComponent,\r\n TylHeaderButtonComponent,\r\n ErrorPromptComponent,\r\n StudentHeaderComponent,\r\n StaffHeaderComponent,\r\n ActionMenuAgGridComponent,\r\n ActionMenuComponent,\r\n MaterialModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n SaveCancelButtonsComponent,\r\n TranslateModule,\r\n Draggable,\r\n CdkTableModule,\r\n CdkDetailRowDirective,\r\n PlatformModule,\r\n MassEmailComponent,\r\n SpinnerComponent,\r\n ExpandCollapseButtonsComponent,\r\n TabsComponent,\r\n StudentSelectionComponent,\r\n GeneralSelectionComponent,\r\n FilterComponent,\r\n FilterContentsComponent,\r\n SafeHtml,\r\n AriaDirective,\r\n RegexDirective,\r\n EllipsisDirective,\r\n QuillModule,\r\n StudentNameComponent,\r\n PageHeaderComponent,\r\n ColorPickerModule,\r\n StudentSearchComponent,\r\n PageHeaderComponent,\r\n AddAttachmentDialogComponent,\r\n StudentAlertsComponent,\r\n AddFileComponent,\r\n ProfileTableComponent,\r\n EditTopicDialogComponent,\r\n DeleteTopicDialogComponent,\r\n AddEditContentDialogComponent,\r\n AttachmentsMenuDialogComponent,\r\n AddProfileAttachmentDialogComponent,\r\n DeleteProfileAttachmentDialogComponent,\r\n AddTopicDialogComponent,\r\n ProfileViewerDialogComponent,\r\n ChildPortalFilterPipe,\r\n SchoolLayoutFilterPipe,\r\n SchoolLayoutAllFilterPipe,\r\n PortalFilterPipe,\r\n TileFilterPipe,\r\n EllipsisPipe,\r\n PhoneNumberPipe,\r\n AdditionalTeacherWarningDialogComponent,\r\n CalculationPreferenceWarningDialogComponent,\r\n CustomSortWarningDialogComponent,\r\n NoGradingClassesDialogComponent,\r\n PrimaryTeacherWarningDialogComponent,\r\n SyncPreferencesDialogComponent,\r\n CourseDescriptionDialogComponent,\r\n DarkTabsComponent,\r\n NumbersOnlyDirective,\r\n DateCharactersOnlyDirective,\r\n TylDatepickerComponent,\r\n FavoritesComponent,\r\n TextMaskModule,\r\n TylMatMenuComponent,\r\n TylHeaderMatMenuComponent,\r\n TylFormFieldComponent,\r\n TylGeneralMatMenuComponent,\r\n TylCheckboxComponent,\r\n TylRadioGroupComponent,\r\n TylCheckboxListComponent,\r\n TylMultipleSelectListComponent,\r\n TylSelectCheckAllComponent,\r\n MenuFilterByGroupPipe,\r\n DateValidator,\r\n ScrollToRowDirective,\r\n VirtualizedTableComponent,\r\n FilterNotificationComponent,\r\n LookUpFilterPipe,\r\n LookUpDescription,\r\n CustomPageComponent,\r\n CustomFieldComponent,\r\n YesNoPipe,\r\n ClassroomSummaryFilterComponent,\r\n DataQueryFilterTableComponent,\r\n DataQueryFieldLabelComponent,\r\n FieldSearchComponent,\r\n DataQueryQueriesButtonComponent,\r\n OrderModule,\r\n PhoneFormatDirectiveValidator,\r\n EmailFormatDirectiveValidator,\r\n FalseyRequiredDirectiveValidator,\r\n OverlayHeaderComponent,\r\n PortalMenuComponent,\r\n ApplicationMenuComponent,\r\n FavoriteMenuComponent,\r\n StudentInFocusMenuComponent,\r\n CustomLayoutComponent,\r\n EFormViewerComponent,\r\n SelectedSitesDialogComponent,\r\n AnnouncementTableComponent,\r\n SelectedRolesDialogComponent,\r\n SafeResourceUrlPipe,\r\n CommaDelimitedPipe,\r\n TylTranslatePipe,\r\n MergeFieldPipe,\r\n TylTranslatePipe,\r\n DecimalFormatValidatorDirective,\r\n ExternalLinkDirective,\r\n NumberMaskDirective,\r\n MultipleFamiliesComponent,\r\n TylCalWidgetComponent,\r\n DateIsTodayPipe,\r\n EditTranslationsComponent,\r\n EditRichTextComponent,\r\n MinimumDirective,\r\n MaximumDirective,\r\n LastFirstNamePipe,\r\n DebounceDirective,\r\n TylRTFComponent,\r\n PDFExportModule,\r\n DropDownsModule,\r\n InputsModule,\r\n EditorModule,\r\n ButtonsModule,\r\n WindowModule,\r\n LabelModule,\r\n FormFieldModule,\r\n TylKendoPdfExportComponent,\r\n TranslationsStatusComponent,\r\n AddEditCommunicationLogComponent,\r\n MinimumEnforceDirective,\r\n MaximumEnforceDirective,\r\n MaxPrecisionDirective,\r\n EFormDesignerComponent,\r\n MergeFieldDialogComponent,\r\n EFormChoicesDialogComponent,\r\n ValueFromAnotherFieldDialogComponent,\r\n EFormTemplateInUseWarningComponent,\r\n EFormViewerModalComponent,\r\n FloatingGridComponent,\r\n IncidentTypePipe,\r\n EFormSelectedStudentsComponent,\r\n CustomDataFieldComponent,\r\n StudentDocumentAccessHistoryComponent,\r\n QuillTextOnlyComponent,\r\n QuillTextOnlyOneLineComponent,\r\n SelectorComponent,\r\n TylRaceEthnicityComponent,\r\n SurveyAnswersPopupComponent,\r\n GetSurveyAnswerByFieldIDPipe,\r\n SurveyAnswerIsCriticalPipe,\r\n PreferencesButtonComponent,\r\n SurveyNotCompletedPopupComponent,\r\n EFormSurveyAnswerSummaryComponent,\r\n CalculatePercentPipe,\r\n ProgramAndServiceFieldsComponent,\r\n NotificationsTableComponent,\r\n StudentInfoDirective,\r\n SortByPipe,\r\n BehaviorLetterViewerModalComponent,\r\n MatChipsModule,\r\n HouseholdFamilyDocumentComponent,\r\n AddFamilyDocumentDialogComponent,\r\n SelectStudentPipe,\r\n SingleStudentComponent,\r\n AddEditProgramServiceSingleStudentComponent,\r\n InvalidSelectionDialogComponent,\r\n DeleteProgramServiceDialogComponent,\r\n TylTimeFieldComponent,\r\n CopyButtonComponent,\r\n PasteButtonComponent,\r\n AttendanceCheckInOutLegendComponent,\r\n SelfCheckInOutHistoryDialogComponent,\r\n AssignedSchoolsComponent,\r\n StaffAlertComponent,\r\n StudentHealthAlertComponent,\r\n ViewAttachmentsComponent,\r\n ViewAbsentNoticeHistoryDialogComponent,\r\n CheckInOutViewHistoryDialogComponent,\r\n TylDragSelectionComponent,\r\n YearDescriptionPipe,\r\n HighlightSearchPipe,\r\n ReplacePipe,\r\n CmpComponentDirective,\r\n DataDefDropdownComponent,\r\n DataDefButtonComponent,\r\n DataDefinitionComponent,\r\n DataDefinitionStaticComponent,\r\n DataDefinitionDynamicComponent,\r\n AddEditDataDefinitionComponent,\r\n AddEditDynamicDataDefinitionComponent,\r\n TylKendoHtmlEditorComponent,\r\n MassEditDialogComponent,\r\n ValueToUpdateComponent,\r\n DataDefRadioButtonsComponent,\r\n DataDefButtonListComponent,\r\n AssessmentComponent,\r\n TylToggleChipComponent,\r\n EFormFormatWarningComponent,\r\n EFormConfirmSubmitComponent,\r\n DataDefMultiSelectComponent,\r\n BehaviorLetterTemplateSettingsComponent,\r\n MyReportsComponent,\r\n MyReportsTabComponent,\r\n AssignedReportsTabComponent,\r\n AddMyReportFolderDialogComponent,\r\n FoldersThisReportDialogComponent,\r\n MonthDayPickerComponent,\r\n NgxMaskModule,\r\n CourseSearchOptionComponent\r\n ],\r\n providers: [\r\n MergeFieldPipe,\r\n BehaviorService,\r\n GetDesignerControlNamePipe,\r\n TylTranslatePipe,\r\n GetSurveyAnswerByFieldIDPipe,\r\n SurveyAnswerIsCriticalPipe,\r\n CalculatePercentPipe,\r\n StudentNotesService,\r\n SelectStudentPipe,\r\n RegistrationEnrollmentService,\r\n ReportingFrameworkService,\r\n ReplacePipe,\r\n RequireStudentGuard,\r\n RequireStaffGuard,\r\n { provide: MAT_TABS_CONFIG, useValue: { animationDuration: '0ms' } }\r\n ]\r\n})\r\nexport class SharedComponentsModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: SharedComponentsModule,\r\n providers: [\r\n LookupService,\r\n StudentSearchService,\r\n FamilyRegistrationService,\r\n OnlineRegistrationService,\r\n ProfileService,\r\n BehaviorSharedService,\r\n SpinnerService,\r\n CustomLayoutsService,\r\n CustomPageService,\r\n DisciplineReferralService,\r\n FilterClass,\r\n DataQueryService,\r\n SharedGradebookService,\r\n TranslationService,\r\n EFormService,\r\n StudentListsService,\r\n SendEmailService,\r\n ProgramsAndServicesService,\r\n AnnouncementService,\r\n StaffSearchService,\r\n CourseSectionSearchService,\r\n EFormDesignerService,\r\n CustomizationFrameworkService,\r\n CustomizationService,\r\n StaffCardsService,\r\n NotificationsService,\r\n CourseRequestMgmtService,\r\n ScheduleFolderService,\r\n MassEmailService\r\n ]\r\n };\r\n }\r\n}\r\n","export class MedicalCondition {\r\n Id: number;\r\n DateConditionStarted: Date;\r\n DateConditionEnded: Date;\r\n MedicalConditionCodeId: number;\r\n DateHomeTeachingStarte: Date;\r\n DateHomeTeachingEnded: Date;\r\n GenerateAlert: boolean;\r\n NonNurseViewable: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n DateReferralReturned: Date;\r\n UnderDoctorsCare: boolean;\r\n Comment: string;\r\n MedicalConditionCode: string;\r\n MedicalConditionDescription: string;\r\n}\r\n\r\nexport class MedicalConditionCodes {\r\n Id: number;\r\n ShowAlert: boolean;\r\n ViewableByNonNurse: boolean;\r\n Code: string;\r\n CodeDescription: string;\r\n Sequence: number;\r\n}","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable, TemplateRef} from '@angular/core';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport {NavigationEnd, Router} from '@angular/router';\r\nimport {TranslateService} from '@ngx-translate/core';\r\nimport {Observable, Subject} from 'rxjs';\r\nimport {take} from 'rxjs/operators';\r\nimport {\r\n MedicalCondition,\r\n MedicalConditionCodes\r\n} from '../admin360/student-info/health-information/medical-condition/medical-condition.model';\r\nimport {AttendanceCode} from '../classroom360/attendance/models/attendance-code.model';\r\nimport {Category} from '../classroom360/gradebook/shared/models/category.model';\r\nimport {DynamicPagesForStudentsColumn} from '../classroom360/scheduled-export/dynamic-pages-for-students-column.model';\r\nimport {StudentNoteCategory} from '../classroom360/student-notes/student-note-category.model';\r\nimport {CurriculumMarkTypes} from '../student360/grades/grades.model';\r\nimport {Doctors, HealthNotes, Immunizations, Insurance} from '../student360/health/health.model';\r\nimport {MealService} from '../student360/meal-service/meal-service.model';\r\nimport {OnlinePaymentConfiguration} from '../student360/online-payment/models/online-payment-config.model';\r\nimport {StaffInfo} from '../student360/online-payment/models/staff-info.model';\r\nimport {Service} from '../student360/programs-and-services/service.model';\r\nimport {CourseTerm} from '../student360/student-schedule/course-term.model';\r\nimport {AboutTyler} from './controls/about-panel/about-tyler.model';\r\nimport {Attachment} from './models/attachment.model';\r\nimport {TylTranslation} from './models/tyl-translation.model';\r\nimport {UserDefinedField} from './models/user-defined-field.model';\r\nimport {Portal} from './portal.model';\r\nimport {Enrollment} from './student/enrollment.model';\r\nimport {System} from './System';\r\nimport {CSTField} from '../shared-modules/customization-framework/models/custom-data-field.model';\r\nimport { SystemLog } from './models/system-log.model';\r\nimport {TylerUModel} from '../shared-modules/tyler-u/tyleru.model';\r\nimport { CMPComponent } from '../shared-modules/customization-framework/models/cmp-component.model';\r\n\r\nclass SnackbarData {\r\n label: string;\r\n buttonLabel: string;\r\n config: any;\r\n\r\n constructor(label: string, buttonLabel: string, config: any) {\r\n this.label = label;\r\n this.buttonLabel = buttonLabel;\r\n this.config = config;\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class SharedService {\r\n private _showAppHeader: boolean;\r\n public get showAppHeader(): boolean {\r\n if (this._showAppHeader == null) {\r\n return true;\r\n }\r\n return this._showAppHeader;\r\n }\r\n\r\n public set showAppHeader(value: boolean) {\r\n this._showAppHeader = value;\r\n this.observableShowAppHeader.next(value);\r\n }\r\n\r\n public observableShowAppHeader = new Subject();\r\n observableShowAppHeaderStream$ = this.observableShowAppHeader.asObservable();\r\n\r\n private _pageToPdfTrigger: boolean;\r\n public get pageToPdfTrigger(): boolean {\r\n if (this._pageToPdfTrigger == null) {\r\n return true;\r\n }\r\n return this._pageToPdfTrigger;\r\n }\r\n\r\n public set pageToPdfTrigger(value: boolean) {\r\n this._pageToPdfTrigger = value;\r\n this.observablePageToPdfTrigger.next(value);\r\n }\r\n\r\n public observablePageToPdfTrigger = new Subject();\r\n observablePageToPdfTrigger$ = this.observablePageToPdfTrigger.asObservable();\r\n\r\n private _progressBarPercent: number;\r\n public get progressBarPercent(): number {\r\n if (this._progressBarPercent == null) {\r\n return 0;\r\n }\r\n return this._progressBarPercent;\r\n }\r\n\r\n public set progressBarPercent(value: number) {\r\n this._progressBarPercent = value;\r\n this.observableProgressBarPercent.next(value);\r\n }\r\n\r\n public observableProgressBarPercent = new Subject();\r\n observableProgressBarPercentStream$ = this.observableProgressBarPercent.asObservable();\r\n\r\n private _currentMedicalConditionChecked: boolean;\r\n public get currentMedicalConditionChecked(): boolean {\r\n return this._currentMedicalConditionChecked;\r\n }\r\n\r\n public set currentMedicalConditionChecked(value: boolean) {\r\n this._currentMedicalConditionChecked = value;\r\n this.observableCurrentMedicalConditionChecked.next(value);\r\n }\r\n\r\n public observableCurrentMedicalConditionChecked = new Subject();\r\n observableobservableCurrentMedicalConditionCheckedStream$ = this.observableCurrentMedicalConditionChecked.asObservable();\r\n\r\n public observableClearStoredCustomFieldData = new Subject();\r\n observableClearStoredCustomFieldDataStream$ = this.observableClearStoredCustomFieldData.asObservable();\r\n\r\n abortWasClicked = false;\r\n currentUrl: string;\r\n previousUrl: string;\r\n translations: TylTranslation[] = [];\r\n copyRecordData = new MedicalCondition();\r\n copyPhysicianRecord = new Doctors();\r\n copyInsuranceRecord = new Insurance();\r\n copyClicked = false;\r\n editRegistrationStudentMode: boolean;\r\n\r\n // These are properties only set by the menu - because that's the only way they can be set.\r\n // In other words, it tracks *menu selections* and only *menu selections*\r\n private _currentPortal: Portal;\r\n private observableCurrentPortal = new Subject();\r\n observableCurrentPortalStream$ = this.observableCurrentPortal.asObservable();\r\n previousPortal: Portal;\r\n\r\n snackbarQueue: SnackbarData[] = [];\r\n snackbarShown = false;\r\n\r\n showFilter = false;\r\n filterTemplate: TemplateRef;\r\n\r\n // showOverlayDialog = false;\r\n\r\n // Copy and Paste\r\n copiedData: string;\r\n copyIdentifier: string;\r\n\r\n public visibleCMPComponents: CMPComponent[] = [];\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private router: Router,\r\n private snackbar: MatSnackBar,\r\n private translateService: TranslateService\r\n ) {\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd) {\r\n this.previousUrl = this.currentUrl;\r\n this.currentUrl = event.url;\r\n this.closeFilter();\r\n }\r\n });\r\n }\r\n\r\n get currentPortal(): Portal {\r\n return this._currentPortal;\r\n }\r\n\r\n set currentPortal(value: Portal) {\r\n this.previousPortal = this._currentPortal;\r\n this._currentPortal = value;\r\n this.observableCurrentPortal.next(this._currentPortal);\r\n }\r\n\r\n public showSpinner = true;\r\n observableShowSpinner = new Subject();\r\n observableShowSpinnerStream$ = this.observableShowSpinner.asObservable();\r\n\r\n public isPageLoaded = true;\r\n observableIsPageLoaded = new Subject();\r\n observableIsPageLoadedStream$ = this.observableIsPageLoaded.asObservable();\r\n\r\n public currentComponent = null;\r\n\r\n toggleShowSpinner() {\r\n const newValue = !this.showSpinner;\r\n\r\n this.showSpinner = newValue;\r\n this.observableShowSpinner.next(newValue);\r\n }\r\n\r\n updateShowSpinner(newValue) {\r\n this.showSpinner = newValue;\r\n this.observableShowSpinner.next(newValue);\r\n }\r\n\r\n toggleIsPageLoaded() {\r\n const newValue = !this.isPageLoaded;\r\n\r\n this.isPageLoaded = newValue;\r\n this.observableIsPageLoaded.next(this.isPageLoaded);\r\n }\r\n\r\n updateIsPageLoaded(newValue) {\r\n this.isPageLoaded = newValue;\r\n this.observableIsPageLoaded.next(newValue);\r\n }\r\n\r\n getHTMLtoPDFBase64(html: HTMLElement): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetHtmlToPDFBase64', [html.outerHTML]);\r\n }\r\n\r\n getAttachment(id: number, name: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetAttachment?attachmentId=${id}&screenName=${name}`);\r\n }\r\n\r\n showSnackbars() {\r\n if (!this.snackbarShown && this.snackbarQueue.length > 0) {\r\n this.snackbarShown = true;\r\n const snackbarData = this.snackbarQueue.pop();\r\n const openSnackbar = this.snackbar.open(\r\n snackbarData.label,\r\n snackbarData.buttonLabel,\r\n snackbarData.config\r\n );\r\n openSnackbar.afterDismissed().pipe(take(1)).subscribe(() => {\r\n this.snackbarShown = false;\r\n this.showSnackbars();\r\n });\r\n }\r\n }\r\n\r\n queueSnackbar(label: string, buttonLabel: string, config: any) {\r\n this.snackbarQueue.unshift(new SnackbarData(label, buttonLabel, config));\r\n this.showSnackbars();\r\n }\r\n\r\n showGoodSnackbar(label = 'Data successfully saved', buttonLabel = 'DISMISS'): void {\r\n label = this.translateService.instant(label);\r\n buttonLabel = this.translateService.instant(buttonLabel);\r\n this.queueSnackbar(label, buttonLabel, {\r\n horizontalPosition: 'right',\r\n panelClass: 'snackbarSuccess',\r\n duration: 5000\r\n });\r\n }\r\n\r\n showBadSnackbar(label = 'Data failed to save', buttonLabel = 'DISMISS'): void {\r\n label = this.translateService.instant(label);\r\n buttonLabel = this.translateService.instant(buttonLabel);\r\n this.queueSnackbar(label, buttonLabel, {\r\n horizontalPosition: 'right',\r\n panelClass: 'snackbarFailure',\r\n duration: 10000\r\n });\r\n }\r\n\r\n showCustomSnackbar(label: string, type: string, buttonLabel = 'DISMISS'): void {\r\n label = this.translateService.instant(label);\r\n buttonLabel = this.translateService.instant(buttonLabel);\r\n let style = 'snackbarSuccess';\r\n switch (type) {\r\n case 'success':\r\n style = 'snackbarSuccess';\r\n break;\r\n case 'failure':\r\n style = 'snackbarFailure';\r\n break;\r\n case 'notification':\r\n style = 'snackbarNotification';\r\n break;\r\n }\r\n this.queueSnackbar(label, buttonLabel, {\r\n horizontalPosition: 'right',\r\n panelClass: style,\r\n duration: 10000\r\n });\r\n }\r\n\r\n openFilter(filterTemplate: TemplateRef) {\r\n this.filterTemplate = filterTemplate;\r\n this.showFilter = true;\r\n }\r\n\r\n closeFilter() {\r\n this.showFilter = false;\r\n }\r\n\r\n toggleFilter(filterTemplate: TemplateRef) {\r\n if (this.showFilter) {\r\n this.closeFilter();\r\n } else {\r\n this.openFilter(filterTemplate);\r\n }\r\n }\r\n\r\n getErrorDetails(id: number, apiCall: string): Observable {\r\n const queryString = '?userId=' + id;\r\n return this.http\r\n .post(\r\n System.apiURL.Student + 'GetErrorDetails' + queryString,\r\n apiCall,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n });\r\n }\r\n\r\n generateError(): Observable {\r\n return this.http.get(System.apiURL.Shared + 'GenerateError');\r\n }\r\n\r\n saveWebPageAudit(studentId: number, schoolId: number, yearId: number, pageName: string) {\r\n const queryString = '?studentId=' + studentId +\r\n '&schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&pageName=' + pageName;\r\n return this.http.get(System.apiURL.Student + 'SaveWebPageAudit' + queryString);\r\n }\r\n\r\n getTylerUToken(isTeacher: boolean) {\r\n const queryString = '?isTeacher=' + isTeacher;\r\n return this.http.get(System.apiURL.Classroom + 'GetTylerUToken' + queryString);\r\n }\r\n\r\n getAboutTylerSIS() {\r\n return this.http.get(System.apiURL.Student + 'GetAboutTylerSIS');\r\n }\r\n\r\n createPulseKey(page: string, filter: string, embed: boolean) {\r\n return this.http.get(System.apiURL.Student + 'CreatePulseKey?page=' + page + '&filter=' + filter + '&embed=' + embed);\r\n }\r\n\r\n getReEnrollStudentsList(yearId: number, familyId: number, studentId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetReEnrollStudentsList?yearId=' + yearId + '&familyId=' + familyId + '&studentId=' + studentId);\r\n }\r\n\r\n markStudentsAsNew(yearId: number, familyId: number, studentIds: string, gradeLevelIds: string) {\r\n const queryString = '?yearId=' + yearId +\r\n '&familyId=' + familyId +\r\n '&studentIds=' + studentIds +\r\n '&gradeLevelIds=' + gradeLevelIds;\r\n return this.http.get(System.apiURL.Student + 'MarkReEnrolStudentsAsNew' + queryString);\r\n }\r\n\r\n getUserDefinedField(fieldName: string, isSysGen: boolean) {\r\n const queryString = '?fieldName=' + fieldName +\r\n '&isSysGen=' + isSysGen;\r\n return this.http.get(System.apiURL.Student + 'GetUserDefinedField' + queryString);\r\n }\r\n\r\n getCurriculumMarkTypesReadForSubject(siteSectionId: number): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetCurriculumMarkTypesReadForSubject?courseId=${siteSectionId}`);\r\n }\r\n\r\n getCategories(isTeacherUser: boolean, courseId: number, courseIds: string): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetGradebookAssignmentType?isTeacherUser=${isTeacherUser}&courseId=${courseId}&courseList=${courseIds}`);\r\n }\r\n\r\n getMealService(studentId: number, yearId: number, siteYearId: number) {\r\n return this.http.get(System.apiURL.Classroom + `GetMealServices?studentId=${studentId}&yearId=${yearId}&siteYearId=${siteYearId}`);\r\n }\r\n\r\n getStaffInfoByUserId(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetStaffInfoByUserId');\r\n }\r\n\r\n getStudentNoteCategories(schoolId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetStudentNoteCategories?schoolId=${schoolId}&yearId=${yearId}`);\r\n }\r\n\r\n getOnlinePaymentConfiguration(): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetOnlinePaymentConfiguration');\r\n }\r\n\r\n getAttendanceCodeLookup(isTeacher: boolean, schoolId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + `GetAttendanceCodeLookup?isTeacher=${isTeacher}&schoolId=${schoolId}&yearId=${yearId}`);\r\n }\r\n\r\n getDynamicPagesReadForStudentLookup(userIsTeacher: boolean): Observable {\r\n return this.http.get(System.apiURL.Classroom + `GetDynamicPagesReadForStudentLookup?userIsTeacher=${userIsTeacher}`);\r\n }\r\n\r\n getGradebookTermsBySiteSectionId(siteSectionId: number, tgsId: number, showTermOnly: boolean, yearId: number, schoolId: number, userId: number): Observable {\r\n const apiCallString = System.apiURL.Classroom + 'GetGradebookTermsBySiteSectionId?siteSectionId=' + siteSectionId\r\n + '&tgsId=' + tgsId\r\n + '&showTermOnly=' + showTermOnly\r\n + '&yearId=' + yearId\r\n + '&schoolId=' + schoolId\r\n + '&userId=' + userId;\r\n return this.http.get(apiCallString);\r\n }\r\n\r\n public getAllServices(): Observable {\r\n return this.http.get(System.apiURL.Student + `GetAllServices`);\r\n }\r\n\r\n getMedicalConditionByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Shared + `GetMedicalConditionReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n deleteMedicalConditionById(medicalConditionId: number): Observable {\r\n return this.http.get(System.apiURL.Shared + `DeleteMedicalConditionById?medicalConditionId=${medicalConditionId}`);\r\n }\r\n\r\n public saveMedicalCondition(studentId: number, siterYearId: number, data: MedicalCondition): Observable {\r\n return this.http.post(System.apiURL.Shared + `SaveMedicalCondition?studentId=${studentId}&siterYearId=${siterYearId}`, data);\r\n }\r\n\r\n getMedicalConditionCodes(): Observable {\r\n return this.http.get(System.apiURL.Shared + `GetMedicalConditionCodes`);\r\n }\r\n\r\n // Delete Immunizations\r\n deleteImmunizationById(immunizationId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?immunizationId=' + immunizationId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Shared + 'DeleteImmunizationById' + queryString);\r\n }\r\n\r\n deleteDoctorById(physiciansId: number): Observable {\r\n return this.http.get(System.apiURL.Shared + `DeleteDoctorById?physiciansId=${physiciansId}`);\r\n }\r\n\r\n saveMedicalPhysicianInformation(studentId: number, data: Doctors): Observable {\r\n return this.http.post(System.apiURL.Shared + `SaveMedicalPhysicianInformation?studentId=${studentId}`, data);\r\n }\r\n\r\n // Save Insurance\r\n saveInsurance(studentId: number, insuranceData: Insurance): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'SaveInsurance' + queryString, insuranceData);\r\n }\r\n\r\n // Delete Insurance\r\n deleteInsurance(physiciansId: number, insuranceId: number): Observable {\r\n const queryString = '?physiciansId=' + physiciansId + '&insuranceId=' + insuranceId;\r\n return this.http.get(System.apiURL.Student + 'DeleteInsurance' + queryString);\r\n }\r\n\r\n // Get Health Notes\r\n getHealthNotes(studentId: number): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetHealthNotes' + queryString);\r\n }\r\n\r\n // Save Health Notes\r\n saveHealthNotes(noteType: string, healthNotes: HealthNotes): Observable {\r\n const queryString = '?noteType=' + noteType;\r\n return this.http.post(System.apiURL.Student + 'SaveHealthNotes' + queryString, healthNotes);\r\n }\r\n\r\n // Save Immunization\r\n saveImmunization(studentId: number, yearId: number, schoolId: number, immunizationData: Immunizations): Observable {\r\n const queryString = '?studentId=' + studentId\r\n + '&yearId=' + yearId\r\n + '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Student + 'SaveImmunization' + queryString, immunizationData);\r\n }\r\n\r\n getCalendarUseAttendanceTypes(schoolId: number, yearId: number, studentId: number): Observable {\r\n const queryString = '?schoolId=' + schoolId\r\n + '&yearId=' + yearId\r\n + '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Shared + 'GetCalendarUseAttendanceTypes' + queryString);\r\n }\r\n\r\n getCustomDataFieldsByObjectID(objectID: number): Observable {\r\n const queryString = '?objectID=' + objectID;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomDataFieldsByObjectID' + queryString);\r\n }\r\n\r\n createImpersonationLog(impersonateUserId: number, userType = 2) {\r\n return this.http.get(System.apiURL.Admin + 'CreateImpersonationLog?impersonateUserId=' + impersonateUserId + '&userTypeId=' + userType);\r\n }\r\n\r\n createSystemLog(log: SystemLog): Observable {\r\n return this.http.post(System.apiURL.Shared + 'CreateSystemLog', log);\r\n }\r\n\r\n // Copying and Pasting Fields\r\n simpleCopy(fields: string[], object: any, identifier: string) {\r\n // PRE: a set of fields for the objects that will be made into JSON. The identifier determines what the name of the object is.\r\n // POST: creates a JSON string for the set of objects with the specified fields\r\n // NOTE: will not copy objects - you have to use the complex copy for that\r\n const jsonItem: {[key: string]: any} = {};\r\n fields.forEach(field => {\r\n if (typeof object[field] != 'object' || object[field] instanceof Date) {\r\n jsonItem[field] = object[field];\r\n }\r\n });\r\n this.copiedData = JSON.stringify(jsonItem);\r\n this.copyIdentifier = identifier;\r\n\r\n // Sending snackbar\r\n this.showGoodSnackbar('Fields copied!');\r\n }\r\n\r\n complexCopy(fields: any, object: any, identifier: string) {\r\n // PRE: a set of objects to make JSON out of. The fields are specified as key-value pairs of booleans or key-value pairs.\r\n // for example: fields = {\"A\": true, \"B\": {\"SubA\": true, \"SubB\": false\"}} and objects = [{\"A\": 123, \"B\": {\"SubA\": 456, \"SubB\": 789}}]\r\n // In this case, \"B\" is the name of a child object with fields \"SubA\" and \"SubB\"\r\n // Any field that is set to \"true\" will be put in the JSON\r\n // However, a child *object* must have the fields for that key also be an *object*\r\n // In the previous example, \"B\" will *not* print if the object = {\"A\": 123, \"B\": 456}\r\n // The identifier determines what the name of the object is.\r\n // POST: makes the JSON out of the specified fields and objects\r\n\r\n // Helper Function\r\n const createJSONObject = (createFields: any, createObject: any) => {\r\n const jsonItem: {[key: string]: any} = {};\r\n const fieldNames = Object.keys(createFields);\r\n fieldNames.forEach(fieldName => {\r\n if (createFields[fieldName]) {\r\n\r\n // If it is an object, create a JSON object for it and add it to the item\r\n if (\r\n typeof createFields[fieldName] == 'object'\r\n && typeof createObject[fieldName] == 'object'\r\n ) {\r\n jsonItem[fieldName] = createJSONObject(createFields[fieldName], createObject[fieldName]);\r\n }\r\n\r\n // If it is a boolean, add it's raw value\r\n else if (\r\n typeof createFields[fieldName] == 'boolean'\r\n && (\r\n typeof createObject[fieldName] != 'object'\r\n || createObject[fieldName] instanceof Date\r\n )\r\n ) {\r\n jsonItem[fieldName] = createObject[fieldName];\r\n }\r\n }\r\n });\r\n return jsonItem;\r\n };\r\n\r\n // Constructing the JSON\r\n this.copiedData = JSON.stringify(createJSONObject(fields, object));\r\n this.copyIdentifier = identifier;\r\n\r\n // Sending snackbar\r\n this.showGoodSnackbar('Fields copied!');\r\n }\r\n\r\n paste(objectToCopyTo?: any) {\r\n const parsedObject = JSON.parse(this.copiedData);\r\n if (objectToCopyTo) {\r\n Object.assign(objectToCopyTo, parsedObject);\r\n }\r\n return parsedObject;\r\n }\r\n\r\n getVisibleCMPComponents(): Observable {\r\n return this.http.get(System.apiURL.Shared + 'GetVisibleCMPComponents');\r\n }\r\n\r\n isCMPComponentVisible(componentEnum: string): boolean {\r\n return this.visibleCMPComponents.find(o => o.Enum == componentEnum) != null;\r\n }\r\n}\r\n","\r\n

Problem Encountered

\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Date{{currentDate | date: 'MM/dd/yy h:mm a'}}
User{{user}}
URL{{fullPath}}
\r\n Something unexpected has occurred and details have been logged.\r\n
\r\n Please report this to your district SIS Coordinator or helpdesk.\r\n
\r\n
\r\n
Program
\r\n
{{programName}}
\r\n
\r\n
Message
\r\n
{{message}}
\r\n
\r\n
Stack Trace
\r\n
{{stackTrace}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n","import {Component, OnInit, HostListener, Inject} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {SharedService} from '../shared.service';\r\nimport {LocationStrategy} from '@angular/common';\r\nimport {UserService} from '../user/user.service';\r\n\r\n@Component({\r\n selector: 'app-error-dialog',\r\n templateUrl: './error-dialog.component.html'\r\n})\r\nexport class ErrorDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n apiCall: string\r\n\r\n // Local Properties\r\n user: string;\r\n fullPath: string;\r\n programName: string;\r\n message: string;\r\n stackTrace: string;\r\n showErrorDetails = false;\r\n currentDate: Date = new Date();\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private sharedService: SharedService,\r\n private userService: UserService,\r\n private dialogRef: MatDialogRef,\r\n private location: LocationStrategy\r\n ) {}\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onKeyDown(event: Event) {\r\n let keyEvent: KeyboardEvent = event as KeyboardEvent;\r\n if (keyEvent.keyCode == 69 && keyEvent.ctrlKey && keyEvent.shiftKey) {\r\n this.sharedService.getErrorDetails(this.userService.userId, this.apiCall).subscribe(errorDetail => {\r\n if (errorDetail != undefined || errorDetail != null) {\r\n this.showErrorDetails = true;\r\n const substrings = errorDetail.split('||');\r\n this.programName = substrings[0];\r\n this.message = substrings[1];\r\n this.stackTrace = substrings[2];\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.fullPath = (this.location)._platformLocation.location.href;\r\n this.user = this.userService.username;\r\n if (this.data && this.data.apiCall) {\r\n this.apiCall = this.data.apiCall;\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpResponse,\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor\r\n} from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { LoaderService } from './loader-service.component';\r\nimport { ErrorDialogComponent } from '../error-dialog/error-dialog.component';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { UserService } from '../user/user.service';\r\nimport { SharedService } from '../shared.service';\r\nimport { Router } from '@angular/router';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { AppInsights } from 'applicationinsights-js';\r\n\r\n@Injectable()\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n\r\n public static TempExcludedURLs = [];\r\n public static ExcludedURLs = [\r\n 'GetLoginDistrictSettings',\r\n 'track',\r\n 'json',\r\n 'CheckBroadcast',\r\n 'CheckNotifications',\r\n 'DataQueryUpdateRecentQueries',\r\n 'GetDataQueryNextPage',\r\n 'GetGradebookV9StudentMarksByStudentId',\r\n 'GetParentNotificationCount',\r\n 'GetParentNotificationPage',\r\n 'GetMassEmailLogCount',\r\n 'GetMassEmailLogPage',\r\n 'GetReportEmailNotificationPage',\r\n 'GetReportEmailNotificationCount',\r\n 'CheckClassAutoSchedulerBatch',\r\n 'SaveGridTemplates',\r\n '/OneSISPortalMenuPreferences',\r\n '/OneSISFavorites',\r\n 'ViewCollectionDocument',\r\n 'ViewSpEdCollectionDocument',\r\n 'PrintBlankCollection'\r\n ];\r\n public static ExcludedURLsV10 = [\r\n 'GetBehaviorEvents',\r\n 'GetBehaviorEventCount'\r\n ];\r\n public static IgnoreErrors = [\r\n 'CheckBroadcast',\r\n 'CheckNotifications'\r\n ];\r\n\r\n private requests: HttpRequest[] = [];\r\n public errorDialogRef: MatDialogRef;\r\n\r\n constructor(\r\n private loaderService: LoaderService,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private loginService: LoginService\r\n ) {\r\n\r\n // This is in case of weird timing errors\r\n setInterval(() => {\r\n this.loaderService.isLoading.next(this.requests.length > 0);\r\n }, 1000);\r\n }\r\n\r\n removeRequest(req: HttpRequest) {\r\n const i = this.requests.indexOf(req);\r\n if (i >= 0) {\r\n this.requests.splice(i, 1);\r\n\r\n }\r\n this.loaderService.isLoading.next(this.requests.length > 0);\r\n }\r\n\r\n intercept(nextReq: HttpRequest, next: HttpHandler): Observable> {\r\n // prevent Edge from serving cached api calls\r\n let req = nextReq;\r\n if (nextReq.url.indexOf('/AppApi') >= 0) {\r\n req = req.clone({\r\n headers: req.headers.set('Cache-Control', 'no-cache')\r\n .set('Pragma', 'no-cache')\r\n .set('Expires', 'Sat, 01 Jan 2000 00:00:00 GMT')\r\n .set('If-Modified-Since', '0')\r\n });\r\n }\r\n\r\n if (!this.cardRetrieval(req.url)\r\n && !LoaderInterceptor.TempExcludedURLs.find(excludedURL => req.url.includes(excludedURL))\r\n && !LoaderInterceptor.ExcludedURLs.find(excludedURL => req.url.includes(excludedURL))\r\n && (!this.loginService.LoginSettings || !this.loginService.LoginSettings.V10 || !LoaderInterceptor.ExcludedURLsV10.find(excludedURL => req.url.includes(excludedURL)))\r\n ) {\r\n this.requests.push(req);\r\n this.loaderService.isLoading.next(true);\r\n }\r\n else {\r\n this.removeRequest(req);\r\n }\r\n return Observable.create(observer => {\r\n const subscription = next.handle(req)\r\n .subscribe(\r\n event => {\r\n if (event instanceof HttpResponse) {\r\n this.removeRequest(req);\r\n observer.next(event);\r\n }\r\n },\r\n err => {\r\n this.removeRequest(req);\r\n observer.error(err);\r\n if (!LoaderInterceptor.IgnoreErrors.find(ignoredURL => req.url.includes(ignoredURL))) {\r\n if (err.error != undefined && err.error.Message == 'Authorization has been denied for this request.') {\r\n this.dialog.closeAll();\r\n this.router.navigate(['']);\r\n }\r\n if (err.error != undefined && err.error.Message == 'An error has occurred.' && !this.errorDialogRef) {\r\n this.sharedService.updateShowSpinner(false);\r\n if (this.userService.username != null || this.userService.username != '') {\r\n this.errorDialogRef = this.dialog.open(ErrorDialogComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n apiCall: req.url\r\n }\r\n });\r\n this.errorDialogRef.afterClosed().subscribe(data => {\r\n this.errorDialogRef = undefined;\r\n });\r\n }\r\n }\r\n }\r\n },\r\n () => { this.removeRequest(req); observer.complete(); });\r\n // teardown logic in case of cancelled requests\r\n return () => {\r\n this.removeRequest(req);\r\n subscription.unsubscribe();\r\n };\r\n });\r\n }\r\n\r\n cardRetrieval(serviceName) {\r\n if (this.router.url == '/classroom360/cards') {\r\n if (serviceName.includes('GetMyClasses')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetAbsenceByCourseCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetSchoolsTodayCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetRecentBehaviorCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('getMyLinks')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetProgramEnrollmentCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetStaffTeamsCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetStaffWorkCard')) {\r\n return true;\r\n }\r\n else if (serviceName.includes('GetEFormSurveysForStaffCard')) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n\r\n@Injectable()\r\nexport class LoaderService {\r\n public isLoading = new BehaviorSubject(false);\r\n\r\n constructor() {}\r\n}\r\n\r\n\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class SpinnerService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // Hide Spinner\r\n private _HideSpinner: boolean = true;\r\n public get hideSpinner(): boolean {\r\n return this._HideSpinner;\r\n }\r\n\r\n public set hideSpinner(value: boolean) {\r\n this._HideSpinner = value;\r\n this.observableHideSpinner.next(value);\r\n } \r\n\r\n public observableHideSpinner = new Subject();\r\n observableHideSpinnerStream$ = this.observableHideSpinner.asObservable();\r\n\r\n // Show Spinner\r\n private _ShowSpinner: boolean;\r\n public get showSpinner(): boolean {\r\n return this._ShowSpinner;\r\n }\r\n\r\n public set showSpinner(value: boolean) {\r\n this._ShowSpinner = value;\r\n this.observableShowSpinner.next(value);\r\n }\r\n\r\n public observableShowSpinner = new Subject();\r\n observableShowSpinnerStream$ = this.observableShowSpinner.asObservable();\r\n}\r\n","\r\n
\r\n\r\n \r\n Advanced Staff Search\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Reset\r\n \r\n \r\n {{recentFilter.QueryName}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Conditions (Rows with the same group letter are joined with AND. Rows with different group letters are joined with OR.)\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n
\r\n SQL Translation\r\n
\r\n
\r\n {{filterTranslation}}\r\n
\r\n
\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, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { DataQueryService } from '../../../classroom360/data-query/data-query.service';\r\nimport { DataQuery } from '../../../classroom360/data-query/models/data-query.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { DataQueryField } from '../../../classroom360/data-query/models/data-query-field.model';\r\nimport { UserPreferencesService } from '../../user-preferences/user-preferences.service';\r\nimport { GeneralPreferences } from '../../user-preferences/general-preferences.model';\r\nimport { DataQueryFieldFilter } from '../../../classroom360/data-query/models/data-query-field-filter.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LookupService } from '../../lookup/lookup.service';\r\nimport { YearService } from '../../year/year.service';\r\nimport { AdvancedFilterComponent } from '../../advanced-filter/advanced-filter.component';\r\n\r\n@Component({\r\n selector: 'app-advanced-staff-search',\r\n templateUrl: './advanced-staff-search.component.html',\r\n styleUrls: ['./advanced-staff-search.component.css']\r\n})\r\nexport class AdvancedStaffSearchComponent extends AdvancedFilterComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n\r\n // Data Query Properties\r\n\r\n // Other Properties\r\n subscriptions: Subscription[] = [];\r\n generalPreferences: GeneralPreferences;\r\n allFilters: DataQueryFieldFilter[] = [];\r\n originalCurrentSchoolOnly = false;\r\n\r\n // Class Functions\r\n constructor(\r\n dialogBox: MatDialogRef,\r\n dataQueryService: DataQueryService,\r\n loginService: LoginService,\r\n lookupService: LookupService,\r\n yearService: YearService,\r\n userPreferencesService: UserPreferencesService,\r\n dialog: MatDialog\r\n ) {\r\n super(dataQueryService, userPreferencesService, loginService, dialogBox, lookupService, yearService, dialog);\r\n this.fieldsWithoutFilters = [\r\n 'Staff_ID'\r\n ];\r\n }\r\n\r\n // Overridden Methods\r\n initialize() {\r\n // POST: sets this up as staff search\r\n if (!this.dataQueryService.isStaffSearch) {\r\n this.dataQueryService.currentQuery = new DataQuery();\r\n this.dataQueryService.currentQuery.currentSchoolOnly = false;\r\n this.originalCurrentSchoolOnly = this.dataQueryService.currentSchoolOnly;\r\n this.dataQueryService.isStaffSearch = true;\r\n this.dataQueryService.currentSchoolOnly = false;\r\n }\r\n }\r\n\r\n takeDown() {\r\n // POST: resets data query\r\n this.dataQueryService.currentSchoolOnly = this.originalCurrentSchoolOnly;\r\n }\r\n\r\n setValueSwitch(field: DataQueryField, filter: DataQueryFieldFilter, updateUsing: boolean) {\r\n // POST: sets the filter's values (operator, value, and group)\r\n\r\n // Updating based on grid filters (these do not take priority, so they come first)\r\n switch (field.Alias) {\r\n // TODO\r\n default:\r\n break;\r\n }\r\n\r\n // Updating based on search criteria (these take priority, so they come last)\r\n switch (field.FieldName) {\r\n case 'lngFacultyStaffId':\r\n filter.hidden = true;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n setFilterPropertiesSwitch(field: DataQueryField, filter: DataQueryFieldFilter) {\r\n // POST: sets the filter's properties for staff search\r\n filter.Operator = '=';\r\n filter.Value = '';\r\n filter.Value2 = '';\r\n filter.Group = 'A';\r\n filter.DisplayMenu = false;\r\n filter.UseCurrentDate1 = false;\r\n filter.UseCurrentDate2 = false;\r\n filter.UseFilterForStudentSearch = false;\r\n filter.UseFilterForCourseSearch = false;\r\n filter.UseFilterForStaffSearch = false;\r\n filter.IsStudentFilter = false;\r\n filter.StudentFilterId = 0;\r\n filter.ApplyToAll = false;\r\n\r\n // Setting specific values for certain fields\r\n if (field.FieldName == 'PrimaryJob') {\r\n filter.Value = 'Y';\r\n filter.disableEdit = true;\r\n filter.UseFilterForStaffSearch = true;\r\n }\r\n }\r\n}\r\n","\r\n
{{studentTeam == true ? 'Associated Staff' : 'Selected Staff'}}
\r\n\r\n\r\n\r\n\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{isV10 ? 'Employee Number' : 'Employee #' }}\r\n \r\n \r\n \r\n \r\n {{staff.EmployeeNumber}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n First Name\r\n \r\n \r\n \r\n {{staff.FirstName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Middle Name\r\n \r\n \r\n \r\n {{staff.MiddleName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n \r\n {{staff.LastName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Name\r\n \r\n \r\n {{staff.StaffName}} \r\n \r\n\r\n \r\n \r\n \r\n {{isV10 ? 'Primary Job' : 'Role'}}\r\n \r\n \r\n \r\n {{staff.StaffRole}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{isV10 ? 'Primary School' : 'School'}}\r\n \r\n \r\n \r\n {{staff.SchoolName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n {{staff.StaffStatus}} \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { Staff } from '../staff.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../angular-material/extended.class';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-staff-list-dialog',\r\n templateUrl: './staff-list-dialog.component.html',\r\n styleUrls: ['./staff-list-dialog.component.css']\r\n})\r\nexport class StaffListDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n staff: Staff[] = [];\r\n isV10: boolean;\r\n studentTeam = false;\r\n\r\n // Local Properties\r\n tableData = new TylerMatTableDataSource();\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator, { static: true }) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.tableData.paginator = value;\r\n }\r\n columns = [\r\n 'employee-number',\r\n 'first-name',\r\n 'middle-name',\r\n 'last-name',\r\n 'primary-job',\r\n 'primary-school'\r\n ];\r\n\r\n // columns = [\r\n // 'employee-number', 'first-name', 'middle-name', 'last-name', 'primary-job'\r\n // ];\r\n\r\n // Class Functions\r\n constructor(\r\n private loginService: LoginService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef\r\n ) { }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this.tableData.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this.tableData.sort;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n if (!this.isV10) {\r\n this.columns = [];\r\n // this.columns = ['employee-number', 'staff-name', 'primary-school', 'primary-job', 'staff-status'];\r\n // this.columns = ['first-name'];\r\n\r\n this.columns = ['staff-name', 'employee-number'];\r\n }\r\n\r\n if (this.data && this.data.staff) {\r\n this.staff = this.data.staff;\r\n }\r\n\r\n if (this.data && this.data.studentTeam) {\r\n this.studentTeam = this.data.studentTeam;\r\n }\r\n\r\n if (this.isV10) {\r\n this.staff.sort((a, b) => {\r\n if (a.LastName && b.LastName) {\r\n const lastNameCompare = a.LastName.localeCompare(b.LastName);\r\n if (lastNameCompare != 0) {\r\n return lastNameCompare;\r\n }\r\n }\r\n if (a.FirstName && b.FirstName) {\r\n const firstNameCompare = a.FirstName.localeCompare(b.FirstName);\r\n if (firstNameCompare != 0) {\r\n return firstNameCompare;\r\n }\r\n }\r\n if (a.MiddleName && b.MiddleName) {\r\n return a.MiddleName.localeCompare(b.MiddleName);\r\n }\r\n return 0;\r\n });\r\n }\r\n else {\r\n this.staff.sort((a, b) => {\r\n const StaffName = a.StaffName ? a.StaffName.localeCompare(b.StaffName):-1;\r\n if (StaffName != 0) {\r\n return StaffName;\r\n }\r\n });\r\n }\r\n this.tableData.data = this.staff;\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n}\r\n","\r\n

\r\n Staff Search and Select\r\n Staff Search\r\n

\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n 1 && !isSpedMaintainTeamPage\" [value]='-1'>(All)\r\n {{school.SchoolName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n {{pg.Description}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n None\r\n \r\n \r\n {{recentFilter.QueryName}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {{Role.RoleName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n All\r\n \r\n \r\n Active\r\n \r\n \r\n Inactive\r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n No data matches selected search criteria.\r\n
\r\n\r\n
0\">\r\n \r\n \r\n
\r\n \r\n {{getColumnHeader(column)}}\r\n \r\n
\r\n \r\n
\r\n
\r\n 0\">\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{isV10 ? 'Employee Number' : 'Employee #' | translate}}\r\n \r\n \r\n \r\n {{element.EmployeeNumber}} \r\n \r\n\r\n \r\n \r\n First Name\r\n \r\n \r\n \r\n {{element.FirstName}} \r\n \r\n\r\n \r\n \r\n Middle Name\r\n \r\n \r\n \r\n {{element.MiddleName}} \r\n \r\n\r\n \r\n \r\n Last Name\r\n \r\n \r\n {{element.LastName}} \r\n \r\n\r\n \r\n \r\n Name\r\n \r\n \r\n \r\n {{element.StaffName}} \r\n \r\n\r\n \r\n \r\n Username\r\n \r\n \r\n {{element.UserName}} \r\n \r\n\r\n \r\n \r\n {{isV10 ? 'Primary School' : 'School' | translate}}\r\n \r\n \r\n \r\n {{element.SchoolName}} \r\n \r\n\r\n \r\n \r\n {{isV10 ? 'Primary School' : 'School' | translate}}\r\n \r\n \r\n \r\n {{element.SiteName}} \r\n \r\n\r\n \r\n \r\n Permissions Group\r\n \r\n \r\n \r\n {{element.PermissionGroup}} \r\n \r\n\r\n \r\n \r\n Inactive Date\r\n \r\n \r\n \r\n \r\n {{element.InActiveDate | date:'MM/dd/yy'}} \r\n \r\n\r\n \r\n \r\n {{isV10 ? 'Primary Job' : 'Role' | translate}}\r\n \r\n \r\n \r\n {{element.StaffRole}} \r\n \r\n\r\n \r\n \r\n Status\r\n \r\n \r\n \r\n {{element.StaffStatus}} \r\n \r\n\r\n \r\n \r\n Use In Scheduling\r\n \r\n \r\n \r\n {{element.UseInScheduling ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n State Id\r\n \r\n \r\n {{element.StateId}} \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n 0\">\r\n \r\n
\r\n\r\n\r\n\r\n \r\n \r\n \r\n\r\n","import { AfterViewInit, Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport { cloneDeep, sortBy } from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { DataQueryService } from '../../classroom360/data-query/data-query.service';\r\nimport { DataQueryInformation } from '../../classroom360/data-query/models/data-query-information';\r\nimport { DataQueryResult } from '../../classroom360/data-query/models/data-query-result.model';\r\nimport { DataQuery } from '../../classroom360/data-query/models/data-query.model';\r\nimport { PermissionGroupDescription } from '../../management360/staff/permissions-groups/permissions-groups.model';\r\nimport { PermissionsGroupsService } from '../../management360/staff/permissions-groups/permissions-groups.service';\r\nimport { StaffService } from '../../management360/staff/staff.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { School } from '../year/school.model';\r\nimport { YearService } from '../year/year.service';\r\nimport { AdvancedStaffSearchComponent } from './advanced-staff-search/advanced-staff-search.component';\r\nimport { StaffListDialogComponent } from './staff-list-dialog/staff-list-dialog.component';\r\nimport { StaffSearchService } from './staff-search.service';\r\nimport { Staff, StaffSearchCriteria } from './staff.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-staff-search',\r\n templateUrl: './staff-search.component.html',\r\n styleUrls: ['./staff-search.component.css']\r\n})\r\nexport class StaffSearchComponent implements OnInit, OnDestroy, AfterViewInit {\r\n\r\n // Data Query Properties\r\n private _currentQuery = new DataQuery();\r\n private _information = new DataQueryInformation();\r\n\r\n // Properties\r\n searchAndSelect = true;\r\n staff: Staff[] = [];\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource(this.staff);\r\n defaultColumns: string[] = [];\r\n columnsToDisplay: string[] = [];\r\n subscriptions: Subscription[] = [];\r\n allSelected: boolean;\r\n employeeNumber = '';\r\n firstName = '';\r\n lastName = '';\r\n selectedSchoolId = -99;\r\n selectedRoleId = 0;\r\n activeToday = false;\r\n schools: School[] = [];\r\n selectedStaffIds: number[] = [];\r\n selectedStaff: Staff[] = [];\r\n isSpedMaintainTeamPage = false;\r\n startOverClicked: boolean;\r\n\r\n @ViewChild('inputLastName', { static: false }) inputLastName: ElementRef;\r\n\r\n // @ViewChild(MatPaginator) paginator: MatPaginator;\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.dataSource.paginator = value;\r\n }\r\n _sort: MatSort;\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.dataSource.sort = value;\r\n }\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n isV10: boolean;\r\n todayDate: string;\r\n permissionGroups: PermissionGroupDescription[] = [];\r\n redirectUrl = '';\r\n userName = '';\r\n\r\n selectedPermissionGroupId = 0;\r\n Roles = [{ RoleName: '', Id: 0 },\r\n { RoleName: 'Teacher', Id: 1 },\r\n { RoleName: 'Substitute Teacher', Id: 2 },\r\n { RoleName: 'Advisor', Id: 3 },\r\n { RoleName: 'Counselor', Id: 4 },\r\n { RoleName: 'Nurse', Id: 5 },\r\n { RoleName: 'Disciplinarian', Id: 6 },\r\n { RoleName: 'Site Administrator', Id: 7 },\r\n { RoleName: 'District Administrator', Id: 8 },\r\n { RoleName: 'Principal', Id: 9 },\r\n { RoleName: 'Other Staff', Id: 10 },\r\n { RoleName: 'Special Ed Teacher', Id: 11 },\r\n { RoleName: 'Special Ed Service Provider', Id: 12 },\r\n { RoleName: 'Special Ed Case Manager', Id: 13 },\r\n { RoleName: 'Special Ed Supervisor', Id: 14 }\r\n ];\r\n teacher = '%';\r\n substitute = '%';\r\n advisor = '%';\r\n counselor = '%';\r\n nurse = '%';\r\n disciplinarian = '%';\r\n administrator = '%';\r\n superintendent = '%';\r\n principal = '%';\r\n other = '%';\r\n specialEdTeacher = '%';\r\n specialEdServiceProvider = '%';\r\n specialEdCaseManager = '%';\r\n staffStatus = 'All';\r\n showAllSchool = false;\r\n showAllPermissionGroups = false;\r\n\r\n isBusy = false;\r\n // Class Functions\r\n constructor(\r\n private loginService: LoginService,\r\n private staffSearchService: StaffSearchService,\r\n private yearService: YearService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private dataQueryService: DataQueryService,\r\n private permissionGroupService: PermissionsGroupsService,\r\n private staffService: StaffService,\r\n private router: Router\r\n ) { }\r\n\r\n get currentQuery(): DataQuery {\r\n return this._currentQuery;\r\n }\r\n\r\n set currentQuery(value: DataQuery) {\r\n this.dataQueryService.currentQuery = value;\r\n if (!value) {\r\n this.staffSearchService.unsavedQueryApplied = false;\r\n }\r\n }\r\n\r\n get information(): DataQueryInformation {\r\n return this._information;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.todayDate = new Date().toLocaleDateString();\r\n this.getPermissionGroup();\r\n\r\n // Setting the initial data\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n this.staffStatus = 'All';\r\n if (this.data.iseForm || this.isV10 == false) {\r\n this.staffStatus = 'Active';\r\n }\r\n\r\n\r\n if (this.isV10 == false) {\r\n this.getSearchCriteria();\r\n this.staffStatus = this.staffSearchService.staffSearchCriteria.Status != undefined ? this.staffSearchService.staffSearchCriteria.Status : 'Active';\r\n }\r\n if (!this.isV10 && this.data.pageName != null) {\r\n if (this.data.pageName == 'SchoolSections') {\r\n this.Roles = [];\r\n this.Roles = [\r\n { RoleName: 'Teacher', Id: 1 }\r\n ];\r\n this.selectedRoleId = 1;\r\n }\r\n if (this.data.pageName == 'behaviorReferral') {\r\n this.Roles = [];\r\n this.Roles = [\r\n { RoleName: 'Disciplinarian', Id: 6 }\r\n ];\r\n this.selectedRoleId = 6;\r\n }\r\n if (this.data.pageName == 'manageTeam') {\r\n this.isSpedMaintainTeamPage = true;\r\n this.Roles = [];\r\n this.Roles = [{ RoleName: '', Id: 0 },\r\n { RoleName: 'Special Ed Teacher', Id: 11 },\r\n { RoleName: 'Special Ed Service Provider', Id: 12 },\r\n { RoleName: 'Special Ed Case Manager', Id: 13 },\r\n { RoleName: 'Special Ed Supervisor', Id: 14 }\r\n ];\r\n }\r\n }\r\n if (this.data.selectedStaff) {\r\n this.selectedStaff = cloneDeep(this.data.selectedStaff);\r\n this.selectedStaffIds = this.data.selectedStaff.map(staff => staff.StaffId);\r\n }\r\n if (this.data.searchAndSelect != null) {\r\n this.searchAndSelect = this.data.searchAndSelect;\r\n }\r\n if (this.data.redirectUrl != null) {\r\n this.redirectUrl = this.data.redirectUrl;\r\n }\r\n\r\n // Setting up data query\r\n this.dataQueryService.getInformation().subscribe();\r\n this.dataQueryService.currentQuery = new DataQuery();\r\n this.dataQueryService.isStaffSearch = true;\r\n\r\n // Obtaining the schools that should be available in the dropdown\r\n if (this.data.schools) {\r\n this.schools = this.data.schools;\r\n this.setSelectedSchool();\r\n } else if (this.data.schoolIds) {\r\n this.subscriptions.push(this.yearService.getSchoolsBySchoolIds(this.data.schoolIds).subscribe(schools => {\r\n this.schools = sortBy(schools, ['SchoolName']);\r\n this.setSelectedSchool();\r\n }));\r\n } else {\r\n this.schools = this.yearService.schools;\r\n this.setSelectedSchool();\r\n }\r\n this.staffSearchService.unsavedQueryApplied = false;\r\n\r\n // Obtaining data\r\n this.subscriptions.push(\r\n\r\n // Syncing properties\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(query => {\r\n this._currentQuery = query;\r\n this._currentQuery.StudentSearch = false;\r\n this._currentQuery.CourseSearch = false;\r\n this._currentQuery.StaffSearch = true;\r\n this.dataQueryService.checkDefaultFilterFields(this._currentQuery.filterFields);\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this._information = information;\r\n if (this.currentQuery && !this.information.recentStaffFilters.find(filterQuery => filterQuery == this.currentQuery)) {\r\n const matchingQuery = this.information.recentStaffFilters.find(filterQuery => filterQuery.ID == this.currentQuery.ID);\r\n if (matchingQuery) {\r\n this.currentQuery = matchingQuery;\r\n }\r\n }\r\n if (!this.dataQueryService.obtainedRecentStaffQueries && !this.dataQueryService.isInformationCached()) {\r\n this.subscriptions.push(\r\n this.dataQueryService.getRecentQueries().subscribe(recentFilters => {\r\n this.information.recentStaffFilters = recentFilters;\r\n this.dataQueryService.obtainedRecentStaffQueries = true;\r\n })\r\n );\r\n }\r\n }),\r\n\r\n // Obtaining data\r\n this.dataQueryService.getPermissions().subscribe()\r\n );\r\n\r\n // Setting up the table\r\n if (this.isV10) {\r\n this.columnsToDisplay = ['select', 'EmployeeNumber', 'FirstName', 'MiddleName', 'LastName', 'StaffRole', 'SchoolName', 'UseInScheduling'];\r\n }\r\n else {\r\n this.columnsToDisplay = [];\r\n this.columnsToDisplay = ['select', 'StaffName', 'EmployeeNumber', 'UserName', 'SchoolName', 'PermissionGroup', 'StaffRole', 'InActiveDate'];\r\n }\r\n if (!this.searchAndSelect) {\r\n this.columnsToDisplay.splice(0, 1);\r\n }\r\n this.defaultColumns = this.columnsToDisplay.filter(column => column != 'select');\r\n this.dataSource.sort = this.sort;\r\n this.dataSource.sortingDataAccessor = (data: any, sortHeaderId: string): string | number => {\r\n // created defaultSortingAccessor so components can override sortingAccessor and still fall back on the default if needed\r\n const staff = data as Staff;\r\n switch (sortHeaderId) {\r\n case 'UseInScheduling':\r\n return staff.UseInScheduling ? 'Y' : '';\r\n default:\r\n return this.dataSource.defaultSortingAccessor(data, sortHeaderId);\r\n }\r\n };\r\n\r\n if (this.staffService.refreshStaffSearchGrid) {\r\n // Called to refresh the grid, when BACK button is hit on School Selection window.\r\n this.searchClick();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.inputLastName.nativeElement.focus());\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n searchClick() {\r\n this.startOverClicked = false;\r\n if (this.isSpedMaintainTeamPage == false) {\r\n this.saveSearchCriteria();\r\n }\r\n if (this.currentQuery.filterFields.length > 0) {\r\n this.dataQueryService.getResults(\r\n false,\r\n (results: DataQueryResult) => {\r\n this.processStaffFilterResults(results);\r\n },\r\n () => {\r\n },\r\n true\r\n );\r\n } else {\r\n this.getStaff();\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n staffSelected(staff: Staff) {\r\n staff.Selected = !staff.Selected;\r\n if (!staff.Selected) {\r\n this.allSelected = false;\r\n const i = this.selectedStaff.findIndex(o => o.StaffId == staff.StaffId);\r\n if (i >= 0) {\r\n if (this.dataSource.data.filter(x => x.StaffId == staff.StaffId && x.Selected == true).length == 0) {\r\n this.selectedStaff.splice(i, 1);\r\n }\r\n }\r\n const idIndex = this.selectedStaffIds.findIndex(staffId => staffId == staff.StaffId);\r\n if (idIndex >= 0) {\r\n this.selectedStaffIds.splice(idIndex, 1);\r\n }\r\n }\r\n else {\r\n if (this.selectedStaff.find(o => o.StaffId == staff.StaffId) == null) {\r\n this.selectedStaff.push(staff);\r\n }\r\n this.selectedStaffIds.push(staff.StaffId);\r\n }\r\n event.preventDefault();\r\n }\r\n\r\n showSelectedStaff() {\r\n // PRE: the Selected Staff in the footer is clicked\r\n // POST: opens the dialog to show the selected staff\r\n this.dialog.open(StaffListDialogComponent, {\r\n disableClose: true,\r\n maxWidth: '90%',\r\n minWidth: '90%',\r\n data: {\r\n staff: this.selectedStaff\r\n }\r\n });\r\n }\r\n\r\n checkAll() {\r\n this.allSelected = !this.allSelected;\r\n this.dataSource.filteredData.forEach(staff => {\r\n if (staff.Selected != this.allSelected) {\r\n this.staffSelected(staff);\r\n }\r\n });\r\n }\r\n\r\n rowSelected(staff: Staff) {\r\n if (!this.searchAndSelect) {\r\n this.staffService.selectedStaff = staff;\r\n this.staffService.updateStaff(this.staff, staff);\r\n this.route(staff);\r\n }\r\n }\r\n\r\n route(staff: Staff) {\r\n if (this.redirectUrl != '') {\r\n this.router.navigateByUrl(this.redirectUrl);\r\n }\r\n this.dialogRef.close(staff);\r\n }\r\n\r\n selectClick() {\r\n this.selectedStaff.forEach(staff => {\r\n const staffRows = this.dataSource.data.filter(o => o.StaffId == staff.StaffId);\r\n if (staffRows && staffRows.length > 0) {\r\n staff.SelectedSchools = [];\r\n staffRows.forEach(school => {\r\n if (school.Selected) {\r\n staff.SelectedSchools.push(school.SchoolName);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.dialogRef.close(this.selectedStaff);\r\n }\r\n\r\n clearFilter() {\r\n this.dataSource.removeAllFilters();\r\n }\r\n\r\n staffFiltersClick() {\r\n // PRE: the Staff Filter button on the footer is clicked\r\n // POST: opens the Advanced Staff Search dialog\r\n const dialogBox = this.dialog.open(AdvancedStaffSearchComponent, {\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((results: DataQueryResult) => {\r\n if (results) {\r\n\r\n // Setting up the grid based on the results\r\n this.processStaffFilterResults(results);\r\n\r\n // Toggling whether this is an unsaved query\r\n this.staffSearchService.unsavedQueryApplied = !this.currentQuery.QueryName;\r\n }\r\n });\r\n }\r\n\r\n // Local Methods\r\n setSelectedSchool() {\r\n const selectedSchool = this.schools.find(o => o.Id == this.yearService.defaultYear.SchoolID);\r\n if (selectedSchool) {\r\n this.selectedSchoolId = (this.isV10 == false && this.selectedSchoolId != -99) ? this.selectedSchoolId : selectedSchool.Id;\r\n }\r\n else {\r\n if (this.schools.length > 0) {\r\n this.selectedSchoolId = this.schools[0].Id;\r\n }\r\n }\r\n }\r\n\r\n getStaff() {\r\n const schoolIds = this.schools.map(o => o.Id);\r\n if (!this.isV10) {\r\n this.teacher = '%';\r\n this.substitute = '%';\r\n this.advisor = '%';\r\n this.counselor = '%';\r\n this.nurse = '%';\r\n this.disciplinarian = '%';\r\n this.administrator = '%';\r\n this.superintendent = '%';\r\n this.principal = '%';\r\n this.other = '%';\r\n this.specialEdTeacher = '%';\r\n this.specialEdServiceProvider = '%';\r\n this.specialEdCaseManager = '%';\r\n switch (this.selectedRoleId) {\r\n case 1:\r\n this.teacher = '1';\r\n break;\r\n case 2:\r\n this.substitute = '1';\r\n break;\r\n case 3:\r\n this.advisor = '1';\r\n break;\r\n case 4:\r\n this.counselor = '1';\r\n break;\r\n case 5:\r\n this.nurse = '1';\r\n break;\r\n case 6:\r\n this.disciplinarian = '1';\r\n break;\r\n case 7:\r\n this.administrator = '1';\r\n break;\r\n case 8:\r\n this.administrator = '1';\r\n break;\r\n case 9:\r\n this.principal = '1';\r\n break;\r\n case 10:\r\n this.other = '1';\r\n break;\r\n case 11:\r\n this.specialEdTeacher = '1';\r\n break;\r\n case 12:\r\n this.specialEdServiceProvider = '1';\r\n break;\r\n case 13 || 14:\r\n this.specialEdCaseManager = '13';\r\n break;\r\n default:\r\n this.selectedRoleId = this.selectedRoleId == 14 ? this.selectedRoleId : 0;\r\n break;\r\n }\r\n }\r\n this.isBusy = true;\r\n this.subscriptions.push(this.staffSearchService.getStaffSearch(\r\n this.selectedSchoolId,\r\n this.yearService.defaultYear.Id,\r\n this.activeToday,\r\n this.employeeNumber,\r\n this.firstName,\r\n this.lastName,\r\n schoolIds,\r\n this.teacher,\r\n this.substitute,\r\n this.advisor,\r\n this.counselor,\r\n this.nurse,\r\n this.disciplinarian,\r\n this.administrator,\r\n this.superintendent,\r\n this.principal, this.other,\r\n this.specialEdTeacher,\r\n this.specialEdServiceProvider,\r\n this.specialEdCaseManager,\r\n false,\r\n this.staffStatus,\r\n this.selectedPermissionGroupId,\r\n this.userName,\r\n this.showAllSchool,\r\n this.showAllPermissionGroups\r\n ).subscribe(staff => {\r\n this.allSelected = false;\r\n this.staff = staff;\r\n this.staff.forEach(staffMember => {\r\n const staffSelected = !!this.selectedStaffIds.find(staffId => staffId == staffMember.StaffId);\r\n const selectedStaff = this.selectedStaff.find(potentialSelection => potentialSelection.StaffId == staffMember.StaffId);\r\n if (staffSelected) {\r\n if (selectedStaff) {\r\n Object.assign(selectedStaff, staffMember);\r\n } else {\r\n this.selectedStaff.push(selectedStaff);\r\n }\r\n }\r\n });\r\n\r\n this.selectedStaff.forEach(s => {\r\n const gridStaff = this.staff.find(o => o.StaffId == s.StaffId);\r\n if (gridStaff) {\r\n Object.assign(s, gridStaff);\r\n gridStaff.Selected = true;\r\n }\r\n });\r\n if (!this.isV10 && this.staffStatus != 'All') {\r\n this.staff = [];\r\n this.staff = staff.filter(s => s.StaffStatus == this.staffStatus);\r\n }\r\n if (this.isSpedMaintainTeamPage == true) {\r\n this.staff = this.staff.filter(x => x.StaffRole.includes('SPED'));\r\n }\r\n\r\n if (this.showAllSchool) {\r\n this.selectedStaff.forEach(st => {\r\n this.staff.filter(o => o.StaffId == st.StaffId).forEach(school => {\r\n if (st.SelectedSchools && st.SelectedSchools.includes(school.SchoolName)) {\r\n school.Selected = true;\r\n } else {\r\n school.Selected = false;\r\n }\r\n });\r\n });\r\n\r\n this.clearSelectedStaff();\r\n }\r\n\r\n this.dataSource.data = this.staff;\r\n this.isBusy = false;\r\n }));\r\n }\r\n\r\n isDataFiltered(): boolean {\r\n return this.dataSource.isFiltered();\r\n }\r\n\r\n checkAdvancedFilter(): boolean {\r\n // POST: returns true if there is an advanced filter\r\n return this.staffSearchService.unsavedQueryApplied || this.currentQuery.ID != -1;\r\n }\r\n\r\n processStaffFilterResults(results: DataQueryResult) {\r\n // PRE: a set of results from data query\r\n // POST: applies those results to the grid\r\n\r\n // Constructing the courses based on the results\r\n const staff: Staff[] = [];\r\n if (this.isV10) {\r\n results.Data.forEach(datum => {\r\n const staffMember = new Staff();\r\n for (let i = 0; i < datum.length; i++) {\r\n switch (results.Columns[i].FieldName) {\r\n case 'Staff_ID':\r\n staffMember.StaffId = Number.parseInt(datum[i], 10);\r\n break;\r\n case 'Employee_Number':\r\n staffMember.EmployeeNumber = datum[i];\r\n break;\r\n case 'Employee_First_Name':\r\n staffMember.FirstName = datum[i];\r\n break;\r\n case 'Employee_Middle_Name':\r\n staffMember.MiddleName = datum[i];\r\n break;\r\n case 'Employee_Last_Name':\r\n staffMember.LastName = datum[i];\r\n break;\r\n case 'School_Name':\r\n staffMember.SchoolName = datum[i];\r\n break;\r\n case 'JobDesc':\r\n staffMember.StaffRole = datum[i];\r\n break;\r\n case 'UseForScheduling':\r\n staffMember.UseInScheduling = datum[i].toLowerCase() == 'true';\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n staff.push(staffMember);\r\n });\r\n } else {\r\n results.Data.forEach(datum => {\r\n const staffMember = new Staff();\r\n for (let i = 0; i < datum.length; i++) {\r\n switch (results.Columns[i].FieldName) {\r\n case 'ID':\r\n staffMember.EmployeeNumber = datum[i];\r\n break;\r\n case 'lngFacultyStaffId':\r\n staffMember.StaffId = Number.parseInt(datum[i], 10);\r\n break;\r\n case 'Name - First':\r\n staffMember.FirstName = datum[i];\r\n break;\r\n case 'Name - Middle':\r\n staffMember.MiddleName = datum[i];\r\n break;\r\n case 'Name - Last':\r\n staffMember.LastName = datum[i];\r\n break;\r\n case 'Name':\r\n staffMember.StaffName = datum[i];\r\n break;\r\n case 'Pri Assign Site Name':\r\n staffMember.SchoolName = datum[i];\r\n break;\r\n case 'Roles':\r\n staffMember.StaffRole = datum[i];\r\n break;\r\n case 'User Name':\r\n staffMember.UserName = datum[i];\r\n break;\r\n case 'Perm Group':\r\n staffMember.PermissionGroup = datum[i];\r\n break;\r\n case 'State ID':\r\n staffMember.StateId = datum[i];\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n staff.push(staffMember);\r\n });\r\n }\r\n\r\n // Applying the data to the grid\r\n this.dataSource.data = staff;\r\n this.isBusy = false;\r\n }\r\n\r\n keyDownFunction(event) {\r\n if (event.keyCode == 13) {\r\n this.searchClick();\r\n }\r\n }\r\n\r\n getPermissionGroup() {\r\n this.permissionGroupService.getPermissionGroupDescription().subscribe(result => {\r\n this.permissionGroups = result.filter(o => o.Active == true);\r\n });\r\n }\r\n\r\n startOverClick() {\r\n this.startOverClicked = true;\r\n this.restoreDefaultsClick();\r\n this.staffSearchService.staffSearchCriteria = new StaffSearchCriteria();\r\n this.employeeNumber = '';\r\n this.lastName = '';\r\n this.firstName = '';\r\n const selectedSchool = this.schools.find(o => o.Id == this.yearService.defaultYear.SchoolID);\r\n if (selectedSchool) {\r\n this.selectedSchoolId = selectedSchool.Id;\r\n }\r\n else {\r\n if (this.schools.length > 0) {\r\n this.selectedSchoolId = this.schools[0].Id;\r\n }\r\n }\r\n this.selectedPermissionGroupId = 0;\r\n this.selectedRoleId = 0;\r\n this.userName = '';\r\n this.staffStatus = 'Active';\r\n this.showAllSchool = false;\r\n this.showAllPermissionGroups = false;\r\n this.selectedStaff = [];\r\n this.inputLastName.nativeElement.focus();\r\n this.dataSource.data = [];\r\n }\r\n\r\n columnActive(column: string) {\r\n // PRE: the column name from the table definition\r\n // POST: returns whether or not that column is in the table\r\n return this.columnsToDisplay.includes(column);\r\n }\r\n\r\n getColumnHeader(column: string) {\r\n // PRE: the column name from the table definition\r\n // POST: returns the header from the table\r\n switch (column) {\r\n\r\n case 'EmployeeNumber':\r\n return this.isV10 ? 'Employee Number' : 'Employee #';\r\n\r\n case 'SchoolName':\r\n return this.isV10 ? 'Primary School' : 'School';\r\n\r\n case 'StaffRole':\r\n return this.isV10 ? 'Primary Job' : 'Role';\r\n\r\n default:\r\n return column;\r\n }\r\n }\r\n\r\n addColumn(column: string) {\r\n // PRE: one of the checkboxes from the column list is checked\r\n // POST: toggles whether that column is in the table\r\n if (!this.columnActive(column)) {\r\n this.columnsToDisplay.push(column);\r\n } else {\r\n this.columnsToDisplay.splice(this.columnsToDisplay.indexOf(column), 1);\r\n }\r\n this.columnsToDisplay.sort((a, b) => {\r\n const indexOfA = this.defaultColumns.indexOf(a);\r\n const indexOfB = this.defaultColumns.indexOf(b);\r\n return indexOfA - indexOfB;\r\n });\r\n }\r\n\r\n restoreDefaultsClick() {\r\n // PRE: The Restore Defaults button on the column list is checked\r\n // POST: sets the columns to their initial set\r\n this.columnsToDisplay = cloneDeep(this.defaultColumns);\r\n if (this.searchAndSelect) {\r\n this.columnsToDisplay.unshift('select');\r\n }\r\n }\r\n\r\n saveSearchCriteria() {\r\n this.staffSearchService.staffSearchCriteria.FirstName = this.firstName;\r\n this.staffSearchService.staffSearchCriteria.LastName = this.lastName;\r\n this.staffSearchService.staffSearchCriteria.UserName = this.userName;\r\n this.staffSearchService.staffSearchCriteria.EmployeeNumber = this.employeeNumber;\r\n this.staffSearchService.staffSearchCriteria.SchoolId = this.selectedSchoolId;\r\n this.staffSearchService.staffSearchCriteria.Status = this.staffStatus;\r\n this.staffSearchService.staffSearchCriteria.ShowAllSchools = this.showAllSchool;\r\n }\r\n\r\n getSearchCriteria() {\r\n this.firstName = this.staffSearchService.staffSearchCriteria.FirstName != undefined ? this.staffSearchService.staffSearchCriteria.FirstName : this.firstName;\r\n this.lastName = this.staffSearchService.staffSearchCriteria.LastName != undefined ? this.staffSearchService.staffSearchCriteria.LastName : this.lastName;\r\n this.userName = this.staffSearchService.staffSearchCriteria.UserName != undefined ? this.staffSearchService.staffSearchCriteria.UserName : this.userName;\r\n this.employeeNumber = this.staffSearchService.staffSearchCriteria.EmployeeNumber != undefined ? this.staffSearchService.staffSearchCriteria.EmployeeNumber : this.employeeNumber;\r\n this.selectedSchoolId = this.staffSearchService.staffSearchCriteria.SchoolId != undefined ? this.staffSearchService.staffSearchCriteria.SchoolId : this.selectedSchoolId;\r\n this.staffStatus = this.staffSearchService.staffSearchCriteria.Status != undefined ? this.staffSearchService.staffSearchCriteria.Status : this.staffStatus;\r\n this.showAllSchool = this.staffSearchService.staffSearchCriteria.ShowAllSchools != undefined ? this.staffSearchService.staffSearchCriteria.ShowAllSchools : this.showAllSchool;\r\n }\r\n\r\n showAllSchoolClick() {\r\n this.staffSearchService.staffSearchCriteria.ShowAllSchools = this.showAllSchool;\r\n this.getStaff();\r\n }\r\n\r\n showAllPermissionsGroupsClick() {\r\n this.staffSearchService.staffSearchCriteria.ShowAllPermissionsGroups = this.showAllPermissionGroups;\r\n this.getStaff();\r\n }\r\n\r\n checkPriorDate(date: string): boolean {\r\n if (date != '') {\r\n if (Date.parse(date) <= Date.parse(this.todayDate)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n clearSelectedStaff() {\r\n // this.selectedStaff.forEach((x, index) => {\r\n // if (x.HasSchoolSpecificPermissions) {\r\n // const schools = this.staff.filter(o => o.StaffId == x.StaffId);\r\n // if (schools.filter(s => s.Selected == true).length == 0) {\r\n // this.selectedStaff.splice(index, 1);\r\n // }\r\n // }\r\n // });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../System';\r\nimport { Staff, StaffSearchCriteria } from './staff.model';\r\nimport { Observable } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { YearService } from '../year/year.service';\r\n\r\n@Injectable()\r\nexport class StaffSearchService {\r\n\r\n // Properties\r\n unsavedQueryApplied: boolean;\r\n staffSearchCriteria = new StaffSearchCriteria()\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService\r\n ) { }\r\n\r\n // Service Methods\r\n getStaffSearchWithObject({\r\n schoolId = this.yearService.defaultYear.SchoolID,\r\n yearId = this.yearService.defaultYear.Id,\r\n activeToday = true,\r\n employeeNumber = '',\r\n firstName = '',\r\n lastName = '',\r\n schoolIds = [],\r\n teacher = '',\r\n substitute = '',\r\n advisor = '',\r\n counselor = '',\r\n nurse = '',\r\n disciplinarian = '',\r\n administrator = '',\r\n superintendent = '',\r\n principal = '',\r\n other = '',\r\n specialEdTeacher = '',\r\n specialEdServiceProvider = '',\r\n specialEdCaseManager = '',\r\n activeStaff = true,\r\n status = 'All',\r\n permissionGroupId = 0,\r\n username = '',\r\n showAllSchool = false,\r\n showAllPermissionGroups = false\r\n } = {}) {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&activeToday=' + activeToday +\r\n '&employeeNumber=' + employeeNumber +\r\n '&firstName=' + firstName +\r\n '&lastName=' + lastName +\r\n '&Teacher=' + teacher +\r\n '&Substitute=' + substitute +\r\n '&Advisor=' + advisor +\r\n '&Counselor=' + counselor +\r\n '&Nurse=' + nurse +\r\n '&Disciplinarian=' + disciplinarian +\r\n '&Administrator=' + administrator +\r\n '&Superintendent=' + superintendent +\r\n '&Principal=' + principal +\r\n '&Other=' + other +\r\n '&SpecialEdTeacher=' + specialEdTeacher +\r\n '&SpecialEdServiceProvider=' + specialEdServiceProvider +\r\n '&SpecialEdCaseManager=' + specialEdCaseManager +\r\n '&ActiveStaff=' + activeStaff +\r\n '&Status=' + status +\r\n '&PermissionGroupId=' + permissionGroupId +\r\n '&Username=' + username +\r\n '&ShowAllSchool=' + showAllSchool +\r\n '&ShowAllPermissionGroups=' + showAllPermissionGroups;\r\n return this.http.post(System.apiURL.Student + 'GetStaff' + queryString, schoolIds).pipe(take(1));\r\n }\r\n\r\n getStaffSearch(schoolId: number, yearId: number, activeToday: boolean, employeeNumber: string, firstName: string, lastName: string, schoolIds: number[],\r\n Teacher: string, Substitute: string, Advisor: string, Counselor: string, Nurse: string, Disciplinarian: string,\r\n Administrator: string, Superintendent: string, Principal: string, Other: string, SpecialEdTeacher: string,\r\n SpecialEdServiceProvider: string, SpecialEdCaseManager: string, ActiveStaff: boolean, Status = 'All',\r\n PermissionGroupId = 0, Username = '', ShowAllSchool = false, ShowAllPermissionGroups = false\r\n ): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&activeToday=' + activeToday +\r\n '&employeeNumber=' + employeeNumber +\r\n '&firstName=' + firstName +\r\n '&lastName=' + lastName +\r\n '&Teacher=' + Teacher +\r\n '&Substitute=' + Substitute +\r\n '&Advisor=' + Advisor +\r\n '&Counselor=' + Counselor +\r\n '&Nurse=' + Nurse +\r\n '&Disciplinarian=' + Disciplinarian +\r\n '&Administrator=' + Administrator +\r\n '&Superintendent=' + Superintendent +\r\n '&Principal=' + Principal +\r\n '&Other=' + Other +\r\n '&SpecialEdTeacher=' + SpecialEdTeacher +\r\n '&SpecialEdServiceProvider=' + SpecialEdServiceProvider +\r\n '&SpecialEdCaseManager=' + SpecialEdCaseManager +\r\n '&ActiveStaff=' + ActiveStaff +\r\n '&Status=' + Status +\r\n '&PermissionGroupId=' + PermissionGroupId +\r\n '&Username=' + Username +\r\n '&ShowAllSchool=' + ShowAllSchool +\r\n '&ShowAllPermissionGroups=' + ShowAllPermissionGroups;\r\n return this.http.post(System.apiURL.Student + 'GetStaff' + queryString, schoolIds);\r\n }\r\n\r\n getStaffByStaffIds(staffIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetStaffByStaffIds', staffIds);\r\n }\r\n}","import { StaffAddress } from '../../management360/staff/models/faculty-staff.model';\r\n\r\nexport class Staff {\r\n $id: number;\r\n StaffId: number;\r\n EmployeeNumber: string;\r\n FirstName: string;\r\n MiddleName: string;\r\n LastName: string;\r\n UserId: number;\r\n Selected: boolean;\r\n // v9\r\n StaffName: string;\r\n SchoolName: string;\r\n StaffRole: string;\r\n StaffStatus: string;\r\n UserName: string;\r\n PermissionGroup: string;\r\n StateId: string;\r\n ForceNewPassword: boolean;\r\n IsBlankPassword: boolean;\r\n LastLoginDate: Date;\r\n GenderTypeCode: string;\r\n PeopleId: number;\r\n // V9 Staff Header\r\n FTE = 1.000;\r\n HireDate: string;\r\n InActiveDate: string;\r\n SSN = '';\r\n CellPhone = '';\r\n Pager = '';\r\n EmailAddress = '';\r\n GenderTypeId: number;\r\n RaceTypeId: number;\r\n FamilyId: number;\r\n FacultyStaffId = 0;\r\n Pin = '';\r\n Unlisted = false;\r\n FacultyStaffEmail = '';\r\n SchoolExt = '';\r\n TeacherFlg = false;\r\n SpecialtyCodeId: number;\r\n SpecialeducationTeacherFlg = false;;\r\n SubstituteFlg = false;\r\n AdvisorFlg = false;\r\n CounselorFlg = false;\r\n NurseFlg = false;\r\n DisciplinarianFlg = false;\r\n AdministratorFlg = false;\r\n SuperintendentFlg = false;\r\n PrincipalFlg = false;\r\n OtherFlg = false;\r\n MinPerWeek = 0;\r\n SpecialServicesSupervisor = false;\r\n CaseManager = false;\r\n ServiceProvider = false;\r\n MedicaidSupervisorFlg = false;\r\n FormerSisId = '';\r\n HumanResourceId = '';\r\n PhotoTakenDate: Date;\r\n IdPrintedDate: Date;\r\n DateofBirth: Date = null;\r\n BilingualLanguageId: number;\r\n EmployeeStatusId: number;\r\n TerminationReasonId: number;\r\n StaffClassificationId: number;\r\n EthnicityTypeId: number;\r\n FormerLastName = '';\r\n TribalAffiliation = '';\r\n CertificationNumber = '';\r\n NurseType: string;\r\n HighlyQualified = false;;\r\n HighestCompletedLevel = '';\r\n GiftedEndorsed = false;\r\n HomeTel1 = '';\r\n HomeTel2 = '';\r\n MaritalStatus: number;\r\n PrefixId: number;\r\n SuffixId: number;\r\n SpousePrefixId: number;\r\n SpouseWorkPhone = '';\r\n SpouseExtension = '';\r\n SpouseFirstName = '';\r\n SpouseMiddleName = '';\r\n SpouseLastName = '';\r\n SpouseCellPhone = '';\r\n SpouseSuffixId: number;\r\n SpouseEmailAddress = '';\r\n SpousePeopleId: number;\r\n Employer = '';\r\n IsDisabled = false;\r\n StaffPrimaryAddress: StaffAddress;\r\n PrimarySiteYearId: number;\r\n HasSchoolSpecificPermissions: boolean;\r\n SiteId: number;\r\n SiteName: string;\r\n IsTeacher: boolean;\r\n\r\n // Non DTO Field V9 //\r\n TextFTE: string;\r\n readOnly = false;\r\n staffInactiveDate: Date;\r\n SelectedSchools: string[] = [];\r\n\r\n // V10\r\n UseInScheduling: boolean;\r\n}\r\n\r\nexport class StaffSearchCriteria {\r\n EmployeeNumber: string;\r\n FirstName: string;\r\n LastName: string;\r\n SchoolId: number;\r\n UserName: string;\r\n Status: string;\r\n ShowAllSchools: boolean;\r\n ShowAllPermissionsGroups: boolean;\r\n}\r\n\r\nexport class StaffEmergencyContact {\r\n Id: number;\r\n FamilyId: number;\r\n PeopleId: number;\r\n FirstName: string;\r\n LastName: string;\r\n MiddleName: string;\r\n FullName: string;\r\n CellPhone: string;\r\n RelationshipTypeId: number;\r\n RelationshipType: string;\r\n Comment: string;\r\n Note: string;\r\n Sequence: number;\r\n\r\n // Home Address Fields\r\n HomeAddressId: number;\r\n HomeAddress: string;\r\n HomeCity: string;\r\n HomeState: string;\r\n HomeZipCode: string;\r\n HomePhone: string;\r\n\r\n // // Work Address Fields\r\n WorkAddressId: number;\r\n WorkAddress: string;\r\n WorkCity: string;\r\n WorkState: string;\r\n WorkZipCode: string;\r\n WorkPhone: string;\r\n WorkPhoneExt: string;\r\n}\r\n\r\n","

\r\n Alerts for\r\n \r\n

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Alert\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n\r\n \r\n {{alert.Program}} - {{alert.Service}}\r\n \r\n\r\n \r\n {{alert.Program}} - {{alert.Service}}\r\n \r\n\r\n \r\n {{alert.Description}}\r\n \r\n \r\n {{alert.Description}}\r\n \r\n Start{{alert.StartDate}}End{{alert.EndDate}}
\r\n\r\n
\r\n\r\n \r\n","import { Component, Inject, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { forkJoin, Observable } from 'rxjs';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { FormWithinDocumentsService } from '../../../sped360/forms-within-documents/form-within-documents.service';\r\nimport { EditHtmlFormComponent } from '../../../sped360/forms-within-documents/modals/edit-html-form/edit-html-form.component';\r\nimport { Student360Service } from '../../../student360/student360.service';\r\nimport { StudentInfoPortalComponent } from '../../student-information/student-info-portal/student-info-portal.component';\r\nimport { Enrollment } from '../../student/enrollment.model';\r\nimport { Student } from '../../student/student.model';\r\nimport { StudentService } from '../../student/student.service';\r\nimport { System } from '../../System';\r\nimport { UserService } from '../../user/user.service';\r\nimport { YearService } from '../../year/year.service';\r\n\r\n@Component({\r\n selector: 'app-alerts-dialog',\r\n templateUrl: './alerts-dialog.component.html',\r\n styleUrls: ['./alerts-dialog.component.css']\r\n})\r\nexport class AlertsDialogComponent implements OnInit {\r\n @ViewChild('dateTpl') dateTpl: TemplateRef;\r\n @ViewChild('iconTpl') iconTpl: TemplateRef;\r\n studentId: number;\r\n isV10: boolean;\r\n student: Student;\r\n studentEnrollment: Enrollment;\r\n gridHeight;\r\n alerts: Alert[] = [];\r\n displayedColumns: string[] = ['alertIcon', 'description', 'start', 'end'];\r\n junkDateString = System.junkDateString;\r\n portalDialog: MatDialogRef;\r\n isIEP = true;\r\n useSection504 = false;\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n public dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n @Inject(MAT_DIALOG_DATA) public data: Alert[],\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private parentPortalService: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private formWithinDocumentsService: FormWithinDocumentsService\r\n ) {\r\n this.alerts = _.cloneDeep(data);\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n this.studentId = this.data.find(d => d.StudentId != undefined).StudentId;\r\n this.checkAlerts();\r\n this.getStudentDetails();\r\n }\r\n\r\n ngOnInit() {\r\n this.useSection504 = this.loginService.LoginSettings.UseSection504;\r\n }\r\n\r\n getStudentDetails() {\r\n const serverCalls: Observable = forkJoin(\r\n this.studentService.getStudent(this.studentId),\r\n this.studentService.getStudentEnrollment(this.studentId, this.yearService.defaultYear.Id)\r\n );\r\n\r\n serverCalls.subscribe(results => {\r\n if (results[0] != null) {\r\n this.student = results[0];\r\n }\r\n if (results[1] != null) {\r\n this.studentEnrollment = results[1];\r\n }\r\n });\r\n }\r\n\r\n checkAlerts() {\r\n // Format the dates for display\r\n // Null any values that are incorrect\r\n const userType = this.userService.currentUser.UserType;\r\n const v10 = this.isV10;\r\n this.alerts.forEach(alert => {\r\n alert.StartDate = moment(alert.StartDate, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY');\r\n alert.EndDate = moment(alert.EndDate, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY');\r\n if (alert.StartDate == '01/01/01') {\r\n alert.StartDate = '';\r\n }\r\n if (alert.EndDate == '01/01/01') {\r\n alert.EndDate = '';\r\n }\r\n\r\n if ((alert.AlertType == 'IEP' || alert.AlertType == '504 Special Service') && alert.UserHasPermisison == false) {\r\n if ((userType == 1 && v10 == true && this.classroom360Service.staffAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)\r\n || (userType != 1 && this.parentPortalService.parentAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)) {\r\n alert.UserHasPermisison = true;\r\n this.isIEP = true;\r\n }\r\n else if ((userType == 1 && this.classroom360Service.staffAssignedPortals.filter(o => o.PortalName == 'Programs and Services').length > 0 && alert.Program != '' && alert.Service != '')\r\n || (userType != 1 && this.parentPortalService.parentAssignedPortals.filter(o => o.PortalName == 'Programs and Services').length > 0 && alert.Program != '' && alert.Service != '')) {\r\n alert.UserHasPermisison = true;\r\n this.isIEP = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n programServiceClick(program: string, service: string) {\r\n this.studentService.selectedProgramName = program;\r\n this.studentService.selectedServiceName = service;\r\n if (this.studentService.selectedStudent == null || this.studentService.selectedStudent.Id != this.student.Id) {\r\n this.studentService.selectedStudent = this.student;\r\n this.studentService.studentEnrollment = this.studentEnrollment;\r\n }\r\n if (this.studentService.students == null || this.studentService.students.filter(o => o.Id == this.student.Id).length == 0) {\r\n this.studentService.students = [];\r\n this.studentService.students.push(this.student);\r\n }\r\n\r\n this.userService.selectedStudentInfoPortal = 'Programs and Services';\r\n this.portalDialog = this.dialog.open(StudentInfoPortalComponent, {\r\n panelClass: 'tyl-mat-dialog', width: '100%', minWidth: '100%', height: '100%', disableClose: true\r\n });\r\n\r\n this.portalDialog.componentInstance.showPortal('Programs and Services');\r\n this.portalDialog.afterClosed().subscribe(() => {\r\n this.student = this.studentService.selectedStudent;\r\n });\r\n\r\n this.dialogRef.close();\r\n }\r\n\r\n iepClick(alert) {\r\n if (this.studentService.selectedStudent == null || this.studentService.selectedStudent.Id != this.student.Id) {\r\n this.studentService.selectedStudent = this.student;\r\n this.studentService.studentEnrollment = this.studentEnrollment;\r\n }\r\n if (this.studentService.students == null || this.studentService.students.filter(o => o.Id == this.student.Id).length == 0) {\r\n this.studentService.students = [];\r\n this.studentService.students.push(this.student);\r\n }\r\n if ((this.loginService.LoginSettings.UseSection504 == true || this.loginService.LoginSettings.EnableSped360 == true) && alert.Description == 'Special Services' && alert.Program == 'Doc' && this.userService.userType == 1 && this.isV10 == false && this.router.url.indexOf('spedFormsWithinDocuments') > -1 && this.formWithinDocumentsService.editHtmlFormDialogOpen == true) {\r\n this.formWithinDocumentsService.callFromAlertDialog = true;\r\n const addEditReferralDialog = this.dialog.openDialogs.find(o => o.componentInstance instanceof EditHtmlFormComponent);\r\n if (addEditReferralDialog) {\r\n (addEditReferralDialog.componentInstance as EditHtmlFormComponent).closeClick('close');\r\n }\r\n }\r\n else if ((this.loginService.LoginSettings.UseSection504 == true || this.loginService.LoginSettings.EnableSped360 == true) && alert.Description == 'Special Services' && alert.Program == 'Doc' && this.userService.userType == 1 && this.isV10 == false && (this.router.url.indexOf('studentDocumentHome') == -1 || (this.router.url.indexOf('studentDocumentHome') > -1 && this.studentService.selectedStudent.Id != this.student.Id)) && this.formWithinDocumentsService.editHtmlFormDialogOpen == false) {\r\n this.router.navigateByUrl('/sped360/studentDocumentHome');\r\n this.dialog.closeAll();\r\n }\r\n else if (this.isIEP == true && alert.Program && alert.Program != '') {\r\n this.programServiceClick(alert.Program, alert.Service);\r\n }\r\n else {\r\n if (this.isIEP == true) {\r\n if (this.loginService.LoginSettings.SDMIntegration != null && this.loginService.LoginSettings.SDMIntegration == true) {\r\n this.userService.selectedStudentInfoPortal = 'Student Document Management';\r\n }\r\n else {\r\n this.userService.selectedStudentInfoPortal = this.isV10 == true ? 'Individualized Education Program' : 'Special Services';\r\n }\r\n this.portalDialog = this.dialog.open(StudentInfoPortalComponent, {\r\n panelClass: 'tyl-mat-dialog', width: '100%', minWidth: '100%', height: '100%', disableClose: true\r\n });\r\n\r\n if (this.loginService.LoginSettings.SDMIntegration != null && this.loginService.LoginSettings.SDMIntegration == true) {\r\n this.portalDialog.componentInstance.showPortal('Student Document Management');\r\n }\r\n else {\r\n this.portalDialog.componentInstance.showPortal(this.isV10 == true ? 'Individualized Education Program' : 'Special Services');\r\n }\r\n this.portalDialog.afterClosed().subscribe(() => {\r\n this.student = this.studentService.selectedStudent;\r\n });\r\n }\r\n else if (this.isIEP == false && alert.Program != '' && alert.Service != '') {\r\n this.programServiceClick(alert.Program, alert.Service);\r\n }\r\n }\r\n this.dialogRef.close();\r\n }\r\n}\r\n\r\nexport class Alert {\r\n AlertIcon: string;\r\n AlertType: string;\r\n ContactName: string;\r\n ContactRelationship: string;\r\n Description: string;\r\n EndDate: string;\r\n Id: number;\r\n IsConfidential: boolean;\r\n Program: string;\r\n Sequence: number;\r\n Service: string;\r\n StartDate: string;\r\n StudentId: number;\r\n UserHasPermisison: boolean;\r\n}\r\n","
\r\n \r\n \r\n \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, OnChanges, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Student360Service } from '../../student360/student360.service';\r\nimport { StudentAlerts } from '../models/student-alerts.model';\r\nimport { UserPreferencesService } from '../user-preferences/user-preferences.service';\r\nimport { UserService } from './../user/user.service';\r\nimport { AlertsDialogComponent } from './alerts-dialog/alerts-dialog.component';\r\n\r\n@Component({\r\n selector: 'student-alerts',\r\n templateUrl: './student-alerts.component.html',\r\n styleUrls: ['./student-alerts.component.css']\r\n})\r\nexport class StudentAlertsComponent implements OnInit, OnChanges {\r\n @Input() alerts: StudentAlerts[];\r\n @Input() alertHeight = 20;\r\n @Input() distanceBetween = 2; // This is the distance between each icon\r\n @Input() collapsed = false; // If this is set to true, it will display an icon at most once\r\n @Input() showAllAlerts = false;\r\n @Input() addEllipsis = false;\r\n @Input() setMaxAlertsForcefully = 0;\r\n @Input() fromStudentSearch = false;\r\n\r\n isV10: boolean;\r\n hasMedicalAlerts: boolean;\r\n maxAlerts: number;\r\n hasIepAlerts: boolean;\r\n hasReleaseAlerts: boolean;\r\n hasFamilyAlerts: boolean;\r\n hasProgramsAndServicesAlerts: boolean;\r\n hasClassroomAlerts: boolean;\r\n hasSpecialServices504: boolean;\r\n displayedAlerts: StudentAlerts[] = [];\r\n programsAndServicesAlerts: StudentAlerts[];\r\n userHasPermission = false;\r\n userType: number;\r\n showEllipsis = false;\r\n currentDate = new Date();\r\n useSection504 = false;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n public domSanitizer: DomSanitizer,\r\n public dialog: MatDialog,\r\n private userPreferences: UserPreferencesService,\r\n private userService: UserService,\r\n private router: Router,\r\n private parentPortalService: Student360Service,\r\n private classroom360Service: Classroom360Service\r\n ) {\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n this.userType = this.userService.currentUser.UserType;\r\n if (this.showAllAlerts == false && this.userPreferences.generalPreferences && this.userPreferences.generalPreferences.MaximumAlertIcon != 'All') {\r\n this.maxAlerts = parseInt(this.userPreferences.generalPreferences.MaximumAlertIcon, 10);\r\n } else {\r\n this.maxAlerts = 0;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.useSection504 = this.loginService.LoginSettings.UseSection504;\r\n this.userHasPermission = this.userType == 1 || this.alerts.find(alert => alert.UserHasPermisison) != null || this.alerts.find(alert => alert.AlertType == 'IEP') != null;\r\n this.processAlerts();\r\n }\r\n\r\n ngOnChanges() {\r\n this.userHasPermission = this.userType == 1 || this.alerts.find(alert => alert.UserHasPermisison) != null || this.alerts.find(alert => alert.AlertType == 'IEP') != null;\r\n this.processAlerts();\r\n }\r\n\r\n processAlerts() {\r\n // POST: Determes which alerts to show\r\n this.displayedAlerts = [];\r\n\r\n // If the icons are collapsed, show one of each\r\n if (this.collapsed) {\r\n const alertTypesCovered: string[] = [];\r\n const alertIconsCovered: number[][] = [];\r\n for (let i = 0; i < this.alerts.length; i++) {\r\n const alert = this.alerts[i];\r\n if (alert.AlertType == 'Programs And Services Alert') {\r\n if (alert.AlertIcon && !alertIconsCovered.includes(alert.AlertIcon)) {\r\n\r\n if (moment(this.currentDate).isBefore(alert.EndDate) || (moment(alert.EndDate, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01')) {\r\n this.displayedAlerts.push(alert);\r\n alertIconsCovered.push(alert.AlertIcon);\r\n }\r\n }\r\n else if (alert.Program == '504' && this.useSection504 == true) {\r\n this.displayedAlerts.push(alert);\r\n }\r\n }\r\n else {\r\n if (alert.AlertType && !alertTypesCovered.includes(alert.AlertType)) {\r\n if (alert.AlertType == 'IEP') {\r\n if ((this.userType == 1 && this.classroom360Service.staffAssignedPortals && this.classroom360Service.staffAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)\r\n || (this.userType != 1 && this.parentPortalService.parentAssignedPortals && this.parentPortalService.parentAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)) {\r\n alert.UserHasPermisison = true;\r\n }\r\n }\r\n this.displayedAlerts.push(alert);\r\n alertTypesCovered.push(alert.AlertType);\r\n }\r\n }\r\n }\r\n }\r\n // If not, display them according to some heuristics\r\n else {\r\n // Check for IEP Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'IEP')) {\r\n const iepAlerts = this.alerts.filter(alert => alert.AlertType == 'IEP');\r\n // Set User has permission flag\r\n if ((this.userType == 1 && this.classroom360Service.staffAssignedPortals && this.classroom360Service.staffAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)\r\n || (this.userType != 1 && this.parentPortalService.parentAssignedPortals && this.parentPortalService.parentAssignedPortals.filter(o => o.PortalDescription == '/iepAlerts').length > 0)) {\r\n iepAlerts[0].UserHasPermisison = true;\r\n }\r\n\r\n // For display purposes we only want 1 of this type\r\n this.displayedAlerts.push(iepAlerts[0]);\r\n this.hasIepAlerts = true;\r\n }\r\n // Check for medical Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Medical Alert')) {\r\n const medicalAlerts = this.alerts.filter(alert => alert.AlertType == 'Medical Alert');\r\n // For display purposes we only want 1 of this type\r\n this.displayedAlerts.push(medicalAlerts[0]);\r\n this.hasMedicalAlerts = true;\r\n }\r\n // Check for medical Restriction Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Medical Restriction Alert')) {\r\n const medicalRestrictionAlerts = this.alerts.filter(alert => alert.AlertType == 'Medical Restriction Alert');\r\n // For display purposes we only want 1 of this type\r\n this.displayedAlerts.push(medicalRestrictionAlerts[0]);\r\n this.hasMedicalAlerts = true;\r\n }\r\n // Check for family Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Family Alert')) {\r\n const familyAlerts = this.alerts.filter(alert => alert.AlertType == 'Family Alert');\r\n this.displayedAlerts.push(familyAlerts[0]);\r\n this.hasFamilyAlerts = true;\r\n }\r\n // Check for release Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Release Alert')) {\r\n const releaseAlerts = this.alerts.filter(alert => alert.AlertType == 'Release Alert');\r\n // For display purposes we only want 1 of this type\r\n this.displayedAlerts.push(releaseAlerts[0]);\r\n this.hasReleaseAlerts = true;\r\n }\r\n // Check for Program and Services Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Programs And Services Alert')) {\r\n this.hasProgramsAndServicesAlerts = true;\r\n this.programsAndServicesAlerts = this.alerts.filter(alert => alert.AlertType == 'Programs And Services Alert');\r\n this.displayedAlerts = this.displayedAlerts.concat(this.alerts.filter(alert => alert.AlertType == 'Programs And Services Alert'));\r\n }\r\n // Check for Classroom Alerts\r\n if (this.alerts.find(alert => alert.AlertType == 'Classroom Alert')) {\r\n // For display purposes we only want 1 of this type\r\n const classroomAlerts = this.alerts.filter(alert => alert.AlertType == 'Classroom Alert');\r\n this.displayedAlerts.push(classroomAlerts[0]);\r\n this.hasClassroomAlerts = true;\r\n }\r\n // Check for 504\r\n if (this.alerts.find(alert => alert.AlertType == '504 Special Service')) {\r\n // For display purposes we only want 1 of this type\r\n const specialServices504 = this.alerts.filter(alert => alert.AlertType == '504 Special Service');\r\n this.displayedAlerts.push(specialServices504[0]);\r\n this.hasSpecialServices504 = true;\r\n }\r\n }\r\n\r\n if (this.fromStudentSearch && !this.isV10) {\r\n const tmpDisplayedAlerts = this.displayedAlerts;\r\n this.displayedAlerts = [];\r\n tmpDisplayedAlerts.forEach(element => {\r\n\r\n const isDuplicate = this.displayedAlerts.find(a => a.AlertType == element.AlertType && a.Program == element.Program && a.Service == element.Service);\r\n if (!isDuplicate) {\r\n this.displayedAlerts.push(element);\r\n }\r\n });\r\n }\r\n\r\n // Cut down the displayedAlerts array to the user preference\r\n if (this.setMaxAlertsForcefully > 0) {\r\n if (this.addEllipsis && this.displayedAlerts.length > this.setMaxAlertsForcefully) {\r\n this.showEllipsis = true;\r\n }\r\n this.displayedAlerts = this.displayedAlerts.slice(0, this.setMaxAlertsForcefully);\r\n }\r\n else if (this.showAllAlerts == false && this.maxAlerts > 0) {\r\n if (this.addEllipsis && this.displayedAlerts.length > this.maxAlerts) {\r\n this.showEllipsis = true;\r\n }\r\n this.displayedAlerts = this.displayedAlerts.slice(0, this.maxAlerts);\r\n }\r\n }\r\n\r\n studentAlertsClick(alertType: string) {\r\n if (this.userHasPermission) {\r\n this.dialog.open(AlertsDialogComponent, {\r\n width: '800px',\r\n maxHeight: '80vh',\r\n data: this.alerts\r\n });\r\n }\r\n }\r\n}\r\n","

Student Notes

\r\n\r\n
\r\n
    \r\n
  • \r\n {{note.Note}}\r\n
  • \r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { StudentNote } from '../../../classroom360/student-notes/student-note.model';\r\n\r\n@Component({\r\n selector: 'app-student-notes-popup',\r\n templateUrl: './student-notes-popup.component.html',\r\n styleUrls: ['./student-notes-popup.component.css']\r\n})\r\nexport class StudentNotesPopupComponent implements OnInit {\r\n\r\n notes: StudentNote[];\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialogRef,\r\n ) {\r\n this.notes = data;\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n

\r\n {{selectedStudent.FirstName}} {{selectedStudent.LastName}}\r\n {{getStudentSuffix()}}\r\n

\r\n\r\n

\r\n {{useStudentName}}\r\n

\r\n\r\n \r\n \r\n\r\n
\r\n #{{selectedStudent.StudentNumber}} \r\n Grade\r\n {{studentEnrollment.GradeLevel}} - {{studentEnrollment.SchoolName}} - {{studentEnrollment.Calendar}}\r\n Withdrawn as of \r\n {{studentEnrollment.WithdrawalDate | date:'MM/dd/yy'}}\r\n Projected\r\n
\r\n\r\n
\r\n #{{selectedStudent.StudentNumber}} \r\n Grade\r\n {{studentEnrollment.GradeLevel}} - {{studentEnrollment.SchoolName}}\r\n - No Show\r\n
\r\n\r\n
\r\n {{noEnrollmentString}}\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
{{stepNumber}}
\r\n

{{pageTitle}}

\r\n
\r\n
\r\n Academic Year -\r\n \r\n \r\n \r\n {{year.Description}}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n Academic Year -\r\n \r\n \r\n \r\n {{defaultYear.Description}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Academic Year - {{ courseRequestYear.Description}}\r\n \r\n \r\n Academic Year - {{ courseRequestYear.Description }}\r\n \r\n
\r\n
\r\n Academic Year - {{ useYear ? useYear.Description : selectedYear.Description}}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{layout.Name}}\r\n \r\n \r\n \r\n
\r\n
0\" [ngStyle]=\"{'top': instanceName && instanceName.length > 0 ? '160px' : '140px'}\"\r\n style=\"position:absolute; right:17px;\">\r\n Type: {{selectedLayoutTypeName}}\r\n
\r\n
\r\n
\r\n
","import { Component, EventEmitter, Host, HostBinding, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { cloneDeep, filter, sortBy } from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { forkJoin, Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { StudentNote } from '../../classroom360/student-notes/student-note.model';\r\nimport { FamilyRegistrationService } from '../../shared-modules/family-registration/family-registration.service';\r\nimport { NewFamilyRegistrationYearSelectionComponent } from '../../shared-modules/family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component';\r\nimport { OnlineRegistrationService } from '../../student360/online-registration/online-registration.service';\r\nimport { StudentDetailsComponent } from '../../student360/student-details/student-details.component';\r\nimport { StudentNotesPopupComponent } from '../../student360/student-summary/student-notes-popup/student-notes-popup.component';\r\nimport { StudentSummaryService } from '../../student360/student-summary/student-summary.service';\r\nimport { Student360Service } from '../../student360/student360.service';\r\nimport { CustomLayoutsService } from '../custom-layouts/custom-layouts.service';\r\nimport { CustomLayoutType } from '../custom-layouts/Models/custom-layout-type.model';\r\nimport { CustomLayout } from '../custom-layouts/Models/custom-layout.model';\r\nimport { PermissionEnum } from '../security/permissions.enums';\r\nimport { SecurityService } from '../security/security.service';\r\nimport { Enrollment } from '../student/enrollment.model';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { System } from '../System';\r\nimport { UserService } from '../user/user.service';\r\nimport { Year } from '../year/year.model';\r\nimport { YearService } from '../year/year.service';\r\nimport { LoginService } from './../../shared-modules/login/login.service';\r\nimport { Alerts } from './../student/student.model';\r\nimport { StudentImageDialogComponent } from './student-image-dialog/student-image-dialog.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'student-header',\r\n templateUrl: './student-header.component.html',\r\n styleUrls: [\r\n './student-header.component.css'\r\n ]\r\n})\r\nexport class StudentHeaderComponent implements OnInit, OnDestroy {\r\n\r\n // Interface\r\n @HostBinding('class.sis-app-root') sisAppRoot: Host = true;\r\n\r\n @Input() showStudent = true;\r\n @Input() useParentPortalYear = false; // Use the defaultParentPortalYear rather than the currently selected year.\r\n @Input() showYearSelector: boolean; // shows or hides the year selector\r\n @Input() showAllYearOption: boolean;\r\n @Input() onlineRegistration: boolean;\r\n @Input() onlinePayment: boolean;\r\n @Input() parentPortalUpdate: boolean;\r\n @Input() disableYearSelect: boolean; // shows the year selector but it is disabled\r\n @Input() showCustomLayouts: boolean;\r\n @Input() disableNavigation: boolean;\t// Removes the ability to change students on the header\r\n @Input() pageTitle: string; // Blue title that displays on the header\r\n @Input() useYear: Year;\r\n @Input() courseRequestYear: Year;\r\n @Input() allowFutureYears = false;\r\n @Input() useStudents: Student[];\r\n @Input() noEnrollmentString = 'Not enrolled in this school year - Please select another year';\r\n @Input() useStudentName = '';\r\n @Input() showAYLabel = false;\r\n @Input() hideAlerts = false;\r\n @Input() showEnrollmentDates = false;\r\n @Input() stepNumber: number;\r\n\r\n @Output() studentChange = new EventEmitter();\r\n @Output() useYearChange = new EventEmitter();\r\n @Input() eForm: boolean;\r\n\r\n // Custom Layouts\r\n selectedLayoutId: number;\r\n customLayouts: CustomLayout[];\r\n ViewlayoutTypes: CustomLayoutType[] = [];\r\n selectedViewTypeId: number;\r\n selectedLayoutTypeName = '';\r\n\r\n // Students\r\n private _studentId: number;\r\n selectedStudent: Student;\r\n studentEnrollment: Enrollment;\r\n studentAlerts: Alerts[];\r\n\r\n // Years\r\n years: Year[];\r\n selectedYear: Year;\r\n defaultYear: Year;\r\n\r\n // Other\r\n subscriptions: Subscription[] = [];\r\n V10: boolean;\r\n showReEnrollButton = false;\r\n instanceName = '';\r\n\r\n ReEnrollYears: Year[] = [];\r\n frYearsDialogRef: MatDialogRef;\r\n medicalShowAlertSubscriptions: Subscription;\r\n\r\n showDetailsButton: boolean;\r\n hasPermission: boolean;\r\n\r\n // Class Functions\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private customLayoutService: CustomLayoutsService,\r\n private userService: UserService,\r\n private router: Router,\r\n private onlineRegistrationService: OnlineRegistrationService,\r\n private loginService: LoginService,\r\n private student360Service: Student360Service,\r\n private dialog: MatDialog,\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private studentSummaryService: StudentSummaryService,\r\n private securityService: SecurityService,\r\n\r\n\r\n ) {\r\n this.medicalShowAlertSubscriptions = this.studentService.observableMedicalShowAlertStream$.subscribe(() => {\r\n this.getStudentAlerts();\r\n });\r\n\r\n this.showDetailsButton = this.student360Service.showDetailsButtonOnStudentHeader;\r\n }\r\n\r\n get students(): Student[] {\r\n if (this.useStudents) {\r\n return this.useStudents;\r\n } else {\r\n return this.studentService.students;\r\n }\r\n }\r\n\r\n get totalStudents(): number {\r\n return this.students ? this.students.length : 0;\r\n }\r\n\r\n get studentId(): number {\r\n return this._studentId;\r\n }\r\n\r\n get userType(): number {\r\n return this.userService.currentUser.UserType;\r\n }\r\n\r\n @Input() set studentId(value: number) {\r\n if (this._studentId != value) {\r\n this._studentId = value;\r\n if (this._studentId) {\r\n this.loadSelectedStudent();\r\n }\r\n }\r\n }\r\n\r\n get showAlerts() {\r\n return (this.userType == 1 || !this.V10) && !this.hideAlerts;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // Setting intial properties\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.instanceName = this.loginService.LoginSettings.InstanceName;\r\n\r\n // Setting up custom layouts\r\n this.subscriptions.push(\r\n this.customLayoutService.observableSelectedLayoutStream$.subscribe(selectedLayout => {\r\n this.selectedLayoutId = selectedLayout.Id;\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.customLayoutService.observableSelectedLayoutViewTypeStream$.subscribe(selectedLayout => {\r\n this.selectedLayoutTypeName = this.customLayoutService.selectedLayoutType.Name.replace('Academic History', '');\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.customLayoutService.observableSavedLayoutsStream$.subscribe(savedLayouts => {\r\n this.customLayouts = savedLayouts;\r\n this.ViewlayoutTypes = this.customLayoutService.layoutTypes.filter(x => x.Name.indexOf(this.pageTitle) > -1);\r\n this.selectedViewTypeId = this.customLayoutService.selectedLayoutType.Id;\r\n this.selectedLayoutTypeName = this.customLayoutService.selectedLayoutType.Name.replace('Academic History', '');\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.yearService.observableYearStream$.subscribe(years => {\r\n this.getYears();\r\n })\r\n );\r\n // Obtaining the years for the selector\r\n this.getYears();\r\n\r\n // We respond to selected student unless we're using a custom list of students\r\n if (!this.useStudents) {\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (this.studentService.selectedStudent) {\r\n this.studentId = this.studentService.selectedStudent.Id; // studentId;\r\n if (this.students != null && this.students.findIndex(o => o.Id == this.studentService.selectedStudent.Id) < 0) {\r\n this.students.push(this.studentService.selectedStudent);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n // If we are using a custom set of students, then we want to be sure to capture all student changes\r\n if (this.useStudents) {\r\n if (!this.studentId) {\r\n this.studentId = this.useStudents[0].Id;\r\n }\r\n }\r\n\r\n // Loading the student immediately if we have it\r\n if (this.studentId && !this.selectedStudent) {\r\n this.loadSelectedStudent();\r\n }\r\n\r\n // Responding to year change\r\n this.subscriptions.push(\r\n this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.selectedYear = this.yearService.student360Year;\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n this.student360Service.observableParentAssignedPortalsStream$.subscribe(data => {\r\n if (this.router.url.toLowerCase().indexOf('/student360') >= 0) {\r\n let portalURL = this.router.url.toLowerCase().replace('/student360', '');\r\n if (portalURL.includes('?')) {\r\n portalURL = portalURL.substring(0, portalURL.indexOf('?'));\r\n }\r\n const parentAssignedPortal = data.filter(a => a.PortalDescription.toLowerCase() == portalURL && a.Disabled == true)[0];\r\n if (parentAssignedPortal != null) {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n else {\r\n this.setPortalYear();\r\n }\r\n }\r\n })\r\n );\r\n if (this.useParentPortalYear) {\r\n // Get the default year\r\n if (this.userType == 1) {\r\n // Because the header is the the same for parents, students and staff\r\n // invert this option for staff\r\n this.useParentPortalYear = false;\r\n } else {\r\n this.defaultYear = this.yearService.allYears.filter(y => y.Default)[0];\r\n }\r\n }\r\n\r\n if (this.securityService.IsAnyPermissionCodeAssigned('SD_VFD', 'SD_MFD')) {\r\n this.hasPermission = true;\r\n }\r\n }\r\n\r\n getStudentNotes() {\r\n // Determine wheather the user has permission to get StudentNotes\r\n if (this.V10) {\r\n\r\n if (this.securityService.IsAnyPermissionAssigned(PermissionEnum.StudentNotesCounselorView, PermissionEnum.StudentNotesMyStudentsView, PermissionEnum.StudentNotesStudentRecordView)) {\r\n this.subscriptions.push(forkJoin([this.studentSummaryService.getStudentNoteCategories(this.yearService.student360Year.SchoolID, this.yearService.student360Year.Id),\r\n this.studentSummaryService.getStudentNotesForPopup(this.selectedStudent.Id, this.yearService.student360Year.SchoolID, this.yearService.student360Year.Id)]).subscribe(result => {\r\n if (result) {\r\n const notesToDisplay: StudentNote[] = [];\r\n const categories = result[0];\r\n const notes = result[1];\r\n const popupCategories = sortBy(filter(categories, cat => cat.StudentNotesPopup), cat => cat.DisplayOrder);\r\n popupCategories.forEach(cat => {\r\n const popupNotes = sortBy(notes.filter(note => note.SNCID == cat.Id), n => n.Order);\r\n popupNotes.forEach(note => {\r\n if (cat.OncePerSession && this.studentSummaryService.acknowledgedStudentNotes.filter(n => n.Id == note.Id).length == 0) {\r\n notesToDisplay.push(note);\r\n this.studentSummaryService.acknowledgedStudentNotes.push(note);\r\n } else if (!cat.OncePerSession) {\r\n notesToDisplay.push(note);\r\n }\r\n });\r\n });\r\n if (notesToDisplay.length > 0) {\r\n const dialogRef = this.dialog.open(StudentNotesPopupComponent,\r\n {\r\n disableClose: true,\r\n data: sortBy(notesToDisplay, n => n.Order)\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n } else {\r\n this.subscriptions.push(\r\n this.userService.getUserPermissions(\r\n this.yearService.defaultYear.Id,\r\n this.yearService.defaultYear.SchoolID\r\n ).subscribe(permissions => {\r\n const userPermissions = permissions;\r\n if (userPermissions.find(permission => permission.PermissionName == 'View Student Notes') || userPermissions.find(permission => permission.PermissionName == 'Maintain Student Notes')) {\r\n this.subscriptions.push(forkJoin([this.studentSummaryService.getStudentNoteCategories(this.yearService.student360Year.SchoolID, this.yearService.student360Year.Id),\r\n this.studentSummaryService.getStudentNotesForPopup(this.selectedStudent.Id, this.yearService.student360Year.SchoolID, this.yearService.student360Year.Id)]).subscribe(result => {\r\n if (result) {\r\n const notesToDisplay: StudentNote[] = [];\r\n const categories = result[0];\r\n const notes = result[1];\r\n const popupCategories = sortBy(filter(categories, cat => cat.StudentNotesPopup), cat => cat.DisplayOrder);\r\n popupCategories.forEach(cat => {\r\n const popupNotes = sortBy(notes.filter(note => note.SNCID == cat.Id), n => n.Order);\r\n popupNotes.forEach(note => {\r\n if (cat.OncePerSession && this.studentSummaryService.acknowledgedStudentNotes.filter(n => n.Id == note.Id).length == 0) {\r\n notesToDisplay.push(note);\r\n this.studentSummaryService.acknowledgedStudentNotes.push(note);\r\n } else if (!cat.OncePerSession) {\r\n notesToDisplay.push(note);\r\n }\r\n });\r\n });\r\n if (notesToDisplay.length > 0) {\r\n const dialogRef = this.dialog.open(StudentNotesPopupComponent,\r\n {\r\n disableClose: true,\r\n data: sortBy(notesToDisplay, n => n.Order)\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n yearChanged(yearId: number) {\r\n // PRE: the year changed from the dropdown\r\n // POST: sets the year and emits a year change\r\n if (this.useYear) {\r\n this.useYear = this.years.find(year => year.Id == yearId);\r\n this.useYearChange.emit(this.useYear);\r\n } else {\r\n const year = this.years.filter(y => y.Id == yearId)[0];\r\n this.yearService.updateStudent360Year(year);\r\n this.useYearChange.emit(year);\r\n }\r\n if (!this.useStudents) { // Only update enrollment if we are using shared students\r\n this.updateStudentEnrollment();\r\n }\r\n }\r\n\r\n // Methods\r\n selectedLayoutChange() {\r\n const l = this.customLayouts.find(o => o.Id == this.selectedLayoutId);\r\n if (this.customLayoutService.selectedLayoutType.Id != l.LayoutTypeID) {\r\n this.selectedViewTypeId = l.LayoutTypeID;\r\n this.selectedLayoutTypeName = this.ViewlayoutTypes.filter(t => t.Id == this.selectedViewTypeId)[0].Name.replace('Academic History', '');\r\n this.selectedViewTypeChange();\r\n }\r\n this.customLayoutService.selectedLayout = System.copyObject(l, new CustomLayout());\r\n }\r\n\r\n selectedViewTypeChange() {\r\n const l = this.ViewlayoutTypes.find(o => o.Id == this.selectedViewTypeId);\r\n this.selectedLayoutTypeName = this.ViewlayoutTypes.filter(t => t.Id == this.selectedViewTypeId)[0].Name.replace('Academic History', '');\r\n this.customLayoutService.selectedLayoutViewType = System.copyObject(l, new CustomLayoutType());\r\n }\r\n\r\n loadSelectedStudent() {\r\n if (this.showStudent) {\r\n\r\n // If a student ID is provided and we have a list of students, use that\r\n if (this.studentId && this.students) {\r\n const selectedStudent = this.students.find(student => student.Id == this.studentId);\r\n if (selectedStudent) {\r\n this.selectedStudent = selectedStudent;\r\n this.getStudentPhoto();\r\n this.studentService.getStudentEnrollmentYears(this.studentId).pipe(take(1)).subscribe(enrollmentYears => {\r\n this.studentService.enrollmentYears = enrollmentYears;\r\n if (this.selectedYear) {\r\n this.studentService.getStudentEnrollment(this.studentId, this.selectedYear.Id).pipe(take(1)).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n this.studentService.studentEnrollment = enrollment;\r\n const url = this.router.url.toLowerCase();\r\n if (url.indexOf('/student360/onlineregistration') < 0 && url.indexOf('/student360/studentfields') < 0 && url.indexOf('registrationenrollment') < 0 && (this.studentEnrollment == null && this.selectedYear.Id > 0)) {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n this.getYears();\r\n this.studentChange.emit(this.studentId);\r\n // We need to set the portal year manually on V9\r\n if (!this.V10) {\r\n this.setPortalYear();\r\n }\r\n this.getStudentReEnrollStatus();\r\n });\r\n if (this.showAlerts) {\r\n this.getStudentAlerts();\r\n }\r\n if (this.userService.currentUser.UserType == 1) {\r\n this.getStudentNotes();\r\n }\r\n }\r\n });\r\n } else {\r\n this.selectedStudent = new Student();\r\n }\r\n }\r\n\r\n // If not student ID is provided or the user has no students, use the student in the student service\r\n else {\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.getStudentPhoto();\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n if (this.showAlerts && this.selectedStudent) {\r\n this.getStudentAlerts();\r\n }\r\n if (this.userService.currentUser.UserType == 1) {\r\n this.getStudentNotes();\r\n }\r\n this.getYears();\r\n\r\n // We need to set the portal year manually on V9\r\n if (!this.V10) {\r\n this.setPortalYear();\r\n }\r\n this.getStudentReEnrollStatus();\r\n }\r\n }\r\n }\r\n\r\n getStudentAlerts() {\r\n this.subscriptions.push(this.studentService.getAlerts([this.selectedStudent.Id]).subscribe(alerts => {\r\n this.studentAlerts = alerts;\r\n this.studentChange.emit(this.studentId);\r\n }));\r\n }\r\n\r\n getStudentPhoto() {\r\n // We don't always have the photo for students. If the selected student doesnt' have one, then we need to go get it.\r\n if (this.selectedStudent && (this.selectedStudent.Picture == null || this.selectedStudent.Picture.length == 0)) {\r\n const year = this.yearService.defaultYear ? this.yearService.defaultYear : this.yearService.student360Year;\r\n if (year) {\r\n this.studentService.getStudentPicture(this.selectedStudent.Id, year.SiteYearId).subscribe(pic => {\r\n this.selectedStudent.Picture = pic;\r\n });\r\n }\r\n }\r\n }\r\n\r\n getStudentReEnrollStatus() {\r\n this.showReEnrollButton = false;\r\n\r\n if (this.V10 == false && this.userType == 2 && this.selectedStudent != null) {\r\n this.familyRegistrationService.getORYears(this.selectedYear.Id, this.selectedStudent.Id).subscribe(students => {\r\n if (students.length > 0 && this.router.url.toLowerCase() != '/student360/eforms') {\r\n this.showReEnrollButton = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n getYears() {\r\n const url = this.router.url.toLowerCase();\r\n if (!this.allowFutureYears || this.V10) {\r\n if (!this.onlinePayment) {\r\n if (this.router.url.toLowerCase() != '/student360/graduationplan' && this.router.url.toLowerCase() != '/student360/transportation' && this.router.url.toLowerCase() != '/student360/courserequests' && this.router.url.toLowerCase() != '/student360/courserequest' && this.router.url.toLowerCase().indexOf('student360/onlinepayment') < 0 ) {\r\n if (this.useYear) {\r\n if (this.V10) {\r\n this.years = cloneDeep(this.studentService.enrollmentYears);\r\n }\r\n else {\r\n this.years = cloneDeep(this.yearService.years.filter(o => o.SchoolID == this.useYear.SchoolID));\r\n if (this.years.length == 0) {\r\n this.years = cloneDeep(this.yearService.studentYears);\r\n }\r\n }\r\n } else {\r\n if (this.V10) {\r\n this.years = cloneDeep(this.studentService.enrollmentYears);\r\n }\r\n else {\r\n if (this.userService.currentUser.UserType == 1 && this.showYearSelector) {\r\n this.years = cloneDeep(this.yearService.studentYears);\r\n }\r\n else if (this.userService.currentUser.UserType == 1 && !this.showYearSelector) {\r\n this.years = cloneDeep(this.yearService.yearsForC360);\r\n }\r\n else {\r\n this.years = cloneDeep(this.yearService.allYears.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID));\r\n }\r\n }\r\n if (url.indexOf('/student360/teams') > -1 || url.indexOf('/student360/behavior') > -1 || url.indexOf('/student360/awards') > -1) {\r\n const allYear = new Year();\r\n allYear.Description = '(All)';\r\n allYear.Id = -1;\r\n allYear.SchoolID = this.yearService.student360Year.SchoolID;\r\n if (this.years) {\r\n this.years.unshift(allYear);\r\n }\r\n }\r\n }\r\n } \r\n else {\r\n if (this.useYear) {\r\n this.years = this.yearService.years.filter(o => o.SchoolID == this.useYear.SchoolID);\r\n } else {\r\n this.years = this.yearService.years.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID);\r\n }\r\n }\r\n }\r\n else {\r\n if (this.useYear) {\r\n this.years = cloneDeep(this.yearService.years.filter(o => o.SchoolID == this.useYear.SchoolID && o.EnableOnlinePayment));\r\n } else {\r\n this.years = cloneDeep(this.yearService.years.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID && o.EnableOnlinePayment));\r\n }\r\n }\r\n this.setSelectedYear();\r\n }\r\n else {\r\n if (this.studentEnrollment) {\r\n this.yearService.getAllEnrolledYears(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId).subscribe(results => {\r\n this.years = results;\r\n this.setSelectedYear();\r\n });\r\n }\r\n else if (this.onlineRegistration) {\r\n this.years = cloneDeep(this.yearService.years);\r\n this.selectedYear = this.onlineRegistrationService.ORYear;\r\n }\r\n }\r\n }\r\n\r\n setSelectedYear() {\r\n if (this.useYear) {\r\n if (this.showAYLabel) {\r\n this.selectedYear = this.useYear;\r\n }\r\n else {\r\n this.selectedYear = this.years.find(o => o.Id == this.useYear.Id);\r\n if (!this.selectedYear && this.allowFutureYears) {\r\n this.selectedYear = this.years.find(o => o.AYIdentifier == this.useYear.AYIdentifier);\r\n }\r\n // ONE-7485 && Fixed Again for ONE-7727\r\n else if (!this.selectedYear && (this.userService.studentInformationView || this.router.url.indexOf('/classroom360/sendEmail') > -1)) {\r\n this.selectedYear = this.years.filter(o => o.AYIdentifier == this.useYear.AYIdentifier)[0];\r\n this.useYear = this.selectedYear;\r\n }\r\n }\r\n }\r\n else if (this.onlineRegistration) {\r\n this.selectedYear = this.years.find(o => o.Id == this.onlineRegistrationService.ORYear.Id);\r\n } else if (this.useParentPortalYear) {\r\n this.selectedYear = this.yearService.allYears.filter(y => y.Default)[0];\r\n this.updateStudentEnrollment();\r\n }\r\n else if (this.V10 == false && this.courseRequestYear != undefined && this.courseRequestYear != null) {\r\n this.selectedYear = this.courseRequestYear;\r\n }\r\n else {\r\n if (this.yearService.student360Year.Id == -1) {\r\n if (this.V10 && this.years.filter(y => y.Id == -1).length == 0) {\r\n this.selectedYear = this.yearService.years.filter(y => y.Default)[0];\r\n this.yearService.student360Year = this.selectedYear;\r\n }\r\n else if (this.years && this.years.filter(y => y.Id == -1).length == 0) {\r\n this.selectedYear = this.years.filter(y => y.Default)[0];\r\n this.yearService.student360Year = this.selectedYear;\r\n }\r\n }\r\n if (this.V10) {\r\n this.selectedYear = (this.years) ? this.years.filter(y => y.AYIdentifier == this.yearService.student360Year.AYIdentifier)[0] : this.yearService.student360Year;\r\n }\r\n else {\r\n this.selectedYear = this.yearService.student360Year;\r\n }\r\n }\r\n }\r\n\r\n setPortalYear() {\r\n // NOTE: V9 only\r\n if (this.student360Service.parentAssignedPortals != null) {\r\n let currentUrl = this.router.url;\r\n if (currentUrl.toLowerCase() != '/student360/graduationplan' &&\r\n currentUrl.toLowerCase() != '/student360/transportation' &&\r\n currentUrl.toLowerCase() != '/student360/onlineregistration' &&\r\n currentUrl.toLowerCase() != '/student360/courserequests' &&\r\n currentUrl.toLowerCase() != '/student360/courserequest' &&\r\n currentUrl.toLowerCase().indexOf('/student360/onlinepayment') < 0) {\r\n if (currentUrl.toLowerCase() == '/student360/setnotificationpreferences') {\r\n currentUrl = '/student360/notificationpreferences';\r\n }\r\n\r\n const academicYearAttention = this.student360Service.parentAssignedPortals.filter(o => o.PortalDescription != null && o.PortalDescription != '' && currentUrl.toLowerCase().includes('/student360' + o.PortalDescription.toLowerCase()) && o.Disabled == false)[0];\r\n if (academicYearAttention != undefined && this.years) {\r\n this.years.forEach((element, i) => {\r\n switch (element.Status) {\r\n case 0:\r\n if (academicYearAttention.ShowonPastYear == false) {\r\n this.years[i].Disabled = true;\r\n }\r\n break;\r\n case 1:\r\n if (academicYearAttention.ShowonCurrentYear == false) {\r\n this.years[i].Disabled = true;\r\n }\r\n break;\r\n case 2:\r\n if (academicYearAttention.ShowonFutureYear == false) {\r\n this.years[i].Disabled = true;\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n } else if (currentUrl.toLowerCase().indexOf('/student360/onlinepayment') > -1) {\r\n this.years.forEach((element) => {\r\n if (element.EnableOnlinePayment == false) {\r\n element.Disabled = true;\r\n }\r\n if (element.EnableOnlinePayment == true) {\r\n const paymentYear = this.student360Service.parentAssignedPortals.filter(x => x.PortalName == 'Meal Service' || x.PortalName == 'Fees & Billing')[0];\r\n switch (element.Status) {\r\n case 0:\r\n if (paymentYear.ShowonPastYear == false) {\r\n element.Disabled = true;\r\n }\r\n break;\r\n case 1:\r\n if (paymentYear.ShowonCurrentYear == false) {\r\n element.Disabled = true;\r\n }\r\n break;\r\n case 2:\r\n if (paymentYear.ShowonFutureYear == false) {\r\n element.Disabled = true;\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n getStudentSuffix(): string {\r\n const suffix = this.selectedStudent.Suffix;\r\n if (suffix != null && suffix.length > 0) {\r\n const numeralMatch = /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$|^\\d+$/;\r\n if (suffix.match(numeralMatch)) {\r\n return ' ' + suffix;\r\n } else {\r\n return ', ' + suffix;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n studentImageClicked(image) {\r\n // Open a modal with a larger student image\r\n this.dialog.open(StudentImageDialogComponent, { data: { studentImage: image }, disableClose: true, autoFocus: false });\r\n }\r\n\r\n onRightClick($event: MouseEvent) {\r\n return false;\r\n }\r\n\r\n updateStudentEnrollment() {\r\n if (this.selectedStudent && this.selectedYear && this.selectedYear.Id > 0) {\r\n this.studentService.getStudentEnrollment(this.selectedStudent.Id, this.selectedYear.Id).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n if (!this.useParentPortalYear) { // if using defaultParentPortalYear we dont want to update the enrollment in the service\r\n this.studentService.studentEnrollment = enrollment;\r\n }\r\n // We need to set the portal year manually on V9\r\n if (!this.V10) {\r\n this.setPortalYear();\r\n }\r\n this.getStudentReEnrollStatus();\r\n });\r\n }\r\n }\r\n\r\n reEnrollStudentClick() {\r\n this.familyRegistrationService.getORYears(0, this.selectedStudent.Id).subscribe(reEnrollYears => {\r\n this.ReEnrollYears = reEnrollYears;\r\n if (this.ReEnrollYears.length > 0) {\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px',\r\n data: {\r\n years: this.ReEnrollYears,\r\n reEnrollStudent: true,\r\n familyId: this.selectedStudent.FamilyId\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n viewStudentDetails() {\r\n this.student360Service.showDetailsButtonOnStudentHeader = false;\r\n const dialogRef = this.dialog.open(StudentDetailsComponent, {\r\n height: '100vh',\r\n width: '100vw',\r\n maxWidth: '100vw',\r\n // autoFocus: false,\r\n disableClose: true,\r\n data: {\r\n isOverlay: true\r\n }\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(res => {\r\n this.student360Service.showDetailsButtonOnStudentHeader = true;\r\n });\r\n }\r\n}\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-student-image-dialog',\r\n templateUrl: './student-image-dialog.component.html',\r\n styleUrls: ['./student-image-dialog.component.css']\r\n})\r\nexport class StudentImageDialogComponent implements OnInit {\r\n\r\n image: any;\r\n constructor(@Inject(MAT_DIALOG_DATA) private data: any, private dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit() {\r\n this.image = this.data.studentImage;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n onRightClick($event: MouseEvent) {\r\n return 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","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[student-information]'\r\n})\r\nexport class StudentInformationDirective {\r\n\r\n constructor(public viewContainerRef: ViewContainerRef) { }\r\n\r\n}\r\n","import { Component, ComponentFactoryResolver, ElementRef, OnDestroy, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { SingleStudentComponent } from '../../../management360/program-and-service/single-student/single-student.component';\r\nimport { AnnouncementComponent } from '../../../shared-modules/announcement/announcement.component';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { SendEmailComponent } from '../../../shared-modules/send-email/send-email.component';\r\nimport { FormsWithinDocumentsComponent } from '../../../sped360/forms-within-documents/forms-within-documents.component';\r\nimport { AcademicHistoryComponent } from '../../../student360/academic-history/academic-history.component';\r\nimport { AssessmentComponent } from '../../../student360/assessment/assessment.component';\r\nimport { AssignmentComponent } from '../../../student360/assignment/assignment.component';\r\nimport { AttendanceComponent } from '../../../student360/attendance/attendance.component';\r\nimport { AwardsComponent } from '../../../student360/awards/awards.component';\r\nimport { CalendarComponent } from '../../../student360/calendar/calendar.component';\r\nimport { DisciplineComponent } from '../../../student360/discipline/discipline.component';\r\nimport { EFormsComponent } from '../../../student360/e-forms/e-forms.component';\r\nimport { FeesAndBillingComponent } from '../../../student360/fees-and-billing/fees-and-billing.component';\r\nimport { FreeReducedMealAppSummaryComponent } from '../../../student360/free-reduced-meal-app-parent/free-reduced-meal-app-summary/free-reduced-meal-app-summary.component';\r\nimport { GradesComponent } from '../../../student360/grades/grades.component';\r\nimport { GraduationPlanComponent } from '../../../student360/graduation-plan/graduation-plan.component';\r\nimport { HealthComponent } from '../../../student360/health/health.component';\r\nimport { IepComponent } from '../../../student360/iep/iep.component';\r\nimport { MealServiceComponent } from '../../../student360/meal-service/meal-service.component';\r\nimport { PortfolioComponent } from '../../../student360/portfolio/portfolio.component';\r\nimport { ProgramsAndServicesComponent } from '../../../student360/programs-and-services/programs-and-services.component';\r\nimport { ScheduleHistoryComponent } from '../../../student360/schedule-history/schedule-history.component';\r\nimport { StudentCourseRequestComponent } from '../../../student360/student-course-request/student-course-request.component';\r\nimport { StudentDetailsComponent } from '../../../student360/student-details/student-details.component';\r\nimport { StudentDigitalContentComponent } from '../../../student360/student-digital-content/student-digital-content.component';\r\nimport { StudentDocumentsComponent } from '../../../student360/student-documents/student-documents.component';\r\nimport { StudentFieldsComponent } from '../../../student360/student-fields/student-fields.component';\r\nimport { StudentScheduleComponent } from '../../../student360/student-schedule/student-schedule.component';\r\nimport { StudentSummaryComponent } from '../../../student360/student-summary/student-summary.component';\r\nimport { TeamsComponent } from '../../../student360/teams/teams.component';\r\nimport { TransportationComponent } from '../../../student360/transportation/transportation.component';\r\nimport { RouteInfo } from '../../routeInfo';\r\nimport { SharedService } from '../../shared.service';\r\nimport { SpinnerService } from '../../spinner/spinner.service';\r\nimport { StudentNotesSharedComponent } from '../../student-notes-shared/student-notes-shared.component';\r\nimport { UserService } from '../../user/user.service';\r\nimport { StudentInformationDirective } from '../student-information.directive';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-student-info-portal',\r\n templateUrl: './student-info-portal.component.html',\r\n})\r\n\r\nexport class StudentInfoPortalComponent implements OnDestroy {\r\n\r\n portalName = '';\r\n studentViewRouteSubscription: Subscription;\r\n @ViewChild(StudentInformationDirective, { static: true }) studentInformation: StudentInformationDirective;\r\n\r\n @ViewChild('StudentInfo', { read: ElementRef, static: true }) elementRef: ElementRef;\r\n\r\n private _hasProgramAndServicePermission: any;\r\n public get hasProgramAndServicePermission(): any {\r\n return this._hasProgramAndServicePermission;\r\n }\r\n public set hasProgramAndServicePermission(value: any) {\r\n this._hasProgramAndServicePermission = value;\r\n }\r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private spinnerService: SpinnerService,\r\n private router: Router,\r\n private loginService: LoginService,\r\n private dialogRef: MatDialog,\r\n ) {\r\n this.studentViewRouteSubscription = this.userService.observableStudentInfoRouteStream$.subscribe((route) => {\r\n this.dialog.close();\r\n });\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n showPortal(portalName: string) {\r\n let componentFactory: any;\r\n switch (portalName) {\r\n case 'Academic History':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AcademicHistoryComponent);\r\n break;\r\n case 'Activities and Teams':\r\n case 'Activities':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(TeamsComponent);\r\n break;\r\n case 'Announcements':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AnnouncementComponent);\r\n break;\r\n case 'Assessments':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AssessmentComponent);\r\n break;\r\n case 'Assignments':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AssignmentComponent);\r\n break;\r\n case 'Attendance':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AttendanceComponent);\r\n break;\r\n case 'Calendar':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(CalendarComponent);\r\n break;\r\n case 'Behavior':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(DisciplineComponent);\r\n break;\r\n case 'Documents':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentDocumentsComponent);\r\n break;\r\n case 'Fees & Billing':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(FeesAndBillingComponent);\r\n break;\r\n case 'Grades':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(GradesComponent);\r\n break;\r\n case 'Graduation Plan Progress':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(GraduationPlanComponent);\r\n break;\r\n case 'Health':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(HealthComponent);\r\n break;\r\n case 'Meal Service':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(MealServiceComponent);\r\n break;\r\n case 'Send Email':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(SendEmailComponent);\r\n break;\r\n case 'Student Details':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentDetailsComponent);\r\n break;\r\n case 'Student Digital Content':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentDigitalContentComponent);\r\n break;\r\n case 'Student Portfolio':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(PortfolioComponent);\r\n break;\r\n case 'Student Schedule':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentScheduleComponent);\r\n break;\r\n case 'Student Summary':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentSummaryComponent);\r\n break;\r\n case 'Transportation':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(TransportationComponent);\r\n break;\r\n case 'Awards':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(AwardsComponent);\r\n break;\r\n case 'Programs and Services':\r\n if (this.hasProgramAndServicePermission) {\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(SingleStudentComponent);\r\n } else {\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(ProgramsAndServicesComponent);\r\n }\r\n break;\r\n case 'Monthly Lunch Menu':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(MealServiceComponent);\r\n break;\r\n case 'Student Fields':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentFieldsComponent);\r\n break;\r\n case 'Individualized Education Program':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(IepComponent);\r\n break;\r\n case 'Special Services':\r\n if (this.userService.userType == 1 && (this.loginService.LoginSettings.UseSection504 == true || this.loginService.LoginSettings.EnableSped360 == true) && !this.loginService.LoginSettings.V10) {\r\n this.router.navigateByUrl('/sped360/studentDocumentHome');\r\n this.dialogRef.closeAll();\r\n } else {\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(IepComponent);\r\n }\r\n break;\r\n case 'Student Notes':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentNotesSharedComponent);\r\n break;\r\n case 'e-Forms':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(EFormsComponent);\r\n break;\r\n case 'Schedule History':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(ScheduleHistoryComponent);\r\n break;\r\n case 'Course Requests':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(StudentCourseRequestComponent);\r\n break;\r\n case 'Free/Reduced Meal Application':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(FreeReducedMealAppSummaryComponent);\r\n break;\r\n case 'Form Within Document':\r\n componentFactory = this.componentFactoryResolver.resolveComponentFactory(FormsWithinDocumentsComponent);\r\n break;\r\n }\r\n\r\n const viewContainerRef = this.studentInformation.viewContainerRef;\r\n viewContainerRef.clear();\r\n viewContainerRef.createComponent(componentFactory);\r\n setTimeout(() => {\r\n this.elementRef.nativeElement.parentElement.firstChild.style.display = 'flex';\r\n this.elementRef.nativeElement.parentElement.firstChild.style.flexDirection = 'column';\r\n this.elementRef.nativeElement.parentElement.firstChild.style.flexGrow = '1';\r\n }, 0);\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n printClick() {\r\n const pagePrintStyle: string = RouteInfo.getPagePrintStyle(this.router.url);\r\n const styleURLs: string[] = ['./assets/styles/print-styles.css'];\r\n\r\n if (pagePrintStyle) {\r\n styleURLs.push(pagePrintStyle);\r\n }\r\n\r\n this.spinnerService.showSpinner = true;\r\n const dialogRefId: string = this.elementRef.nativeElement.parentElement.parentElement.parentElement.id != undefined ? this.elementRef.nativeElement.parentElement.parentElement.parentElement.id.toString() : '';\r\n\r\n // Timeout is needed to allow the spinner to show before the print preview load takes priority\r\n setTimeout(() => {\r\n setTimeout(() => {\r\n this.sharedService.pageToPdfTrigger = !this.sharedService.pageToPdfTrigger;\r\n }, 0);\r\n this.spinnerService.showSpinner = false;\r\n }, 500);\r\n\r\n }\r\n}\r\n","
\r\n
\r\n Student Information\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\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, OnDestroy } from '@angular/core';\r\nimport { StudentService } from '../student/student.service';\r\nimport { StudentInfoPortalComponent } from './student-info-portal/student-info-portal.component';\r\nimport { UserService } from '../user/user.service';\r\nimport { Portal } from '../portal.model';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { MealServiceService } from '../../student360/meal-service/meal-service.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { MyReportsComponent } from '../../shared-modules/reporting/my-reports/my-reports.component';\r\nimport { ReportingService } from '../../shared-modules/reporting/reporting.service';\r\nimport { ReportingComponent } from '../../shared-modules/reporting/reporting.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { YearService } from '../year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-student-information',\r\n templateUrl: './student-information.component.html'\r\n})\r\n\r\nexport class StudentInformationComponent implements OnDestroy {\r\n\r\n student: any;\r\n students: any = [];\r\n staffPortals: Portal[];\r\n portalDialog: MatDialogRef;\r\n studentViewRouteSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n myReportsDialogRef: MatDialogRef;\r\n portalName = '';\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private classroom360Service: Classroom360Service,\r\n private userService: UserService,\r\n private mealServiceService: MealServiceService,\r\n private reportService: ReportingService,\r\n private yearService: YearService,\r\n private loginService: LoginService\r\n\r\n ) {\r\n this.studentViewRouteSubscription = this.userService.observableStudentInfoRouteStream$.subscribe((route) => {\r\n const portal = this.staffPortals.filter(p => p.PortalDescription == route.replace('/student360', ''))[0];\r\n if (portal != undefined || route.indexOf('sendEmail') > -1) {\r\n if (route.indexOf('sendEmail') > -1) {\r\n this.portalClick('Send Email');\r\n }\r\n else {\r\n this.portalClick(portal.PortalName);\r\n }\r\n }\r\n });\r\n\r\n this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (this.portalName != '') {\r\n if (studentId > 0) {\r\n this.portalClick(this.portalName);\r\n this.selectedStudentSubscription.unsubscribe();\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n initMenu() {\r\n this.userService.studentInformationView = true;\r\n this.studentService.getStudent(this.student.Id).subscribe(student => {\r\n const studentIndex = this.students.findIndex(x => x.Id == student.Id);\r\n\r\n //ONE-13679\r\n if (this.students && this.students.filter(s => s.Id == student.Id)[0] != undefined)\r\n this.students[studentIndex].FamilyId = student.FamilyId;\r\n if (this.studentService.students && this.studentService.students.filter(s => s.Id == student.Id)[0] != undefined)\r\n this.studentService.students.filter(s => s.Id == student.Id)[0].FamilyId = student.FamilyId;\r\n\r\n this.studentService.updateStudents(this.students, studentIndex);\r\n if (this.portalName == '') {\r\n this.getStaffPortals();\r\n }\r\n });\r\n }\r\n\r\n portalClick(portalName: string) {\r\n this.userService.selectedStudentInfoPortal = portalName;\r\n\r\n // My Reports\r\n if (portalName == 'My Reports') {\r\n this.reportService.isReportsMenu = true;\r\n\r\n const dialogBox = this.dialog.open(ReportingComponent, {\r\n disableClose: true,\r\n // hasBackdrop: false,\r\n // panelClass: 'disableModalStyle'\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(course => {\r\n subscription.unsubscribe();\r\n return;\r\n });\r\n }\r\n else {\r\n this.studentService.getStudent((this.studentService.selectedStudent && this.studentService.selectedStudent.Id) ? (this.studentService.selectedStudent.Id) : (this.student.Id)).subscribe(student => {\r\n if (!this.studentService.selectedStudent) {\r\n this.studentService.selectedStudent = this.student;\r\n }\r\n this.studentService.selectedStudent.Picture = student.Picture;\r\n });\r\n this.portalDialog = this.dialog.open(StudentInfoPortalComponent, {\r\n panelClass: 'tyl-mat-dialog', width: '100%', minWidth: '100%', height: '100%', disableClose: true\r\n });\r\n if (portalName == 'Monthly Lunch Menu') {\r\n this.mealServiceService.selectionIndex = 1;\r\n }\r\n if (portalName == 'Meal Service') {\r\n this.mealServiceService.selectionIndex = 0;\r\n }\r\n if (portalName == 'Programs and Services') {\r\n this.userService.getUserPermissions(\r\n this.yearService.defaultYear.Id,\r\n this.yearService.defaultYear.SchoolID\r\n ).subscribe(permissions => {\r\n const userPermissions = permissions;\r\n // Determining if the user can edit program\r\n const hasPSPermission = userPermissions.find(permission => permission.PermissionName == 'Maintain ALL Student Programs and Services' || permission.PermissionName == 'View ALL Student Programs and Services');\r\n if (this.loginService.LoginSettings.ActivateProgramAndService360 && hasPSPermission) {\r\n this.portalDialog.componentInstance.hasProgramAndServicePermission = true;\r\n } else {\r\n this.portalDialog.componentInstance.hasProgramAndServicePermission = false;\r\n }\r\n this.portalDialog.componentInstance.showPortal(portalName);\r\n });\r\n }\r\n else {\r\n this.portalDialog.componentInstance.showPortal(portalName);\r\n }\r\n\r\n this.portalDialog.afterClosed().subscribe(() => {\r\n this.student = this.studentService.selectedStudent;\r\n if (this.portalName != '') {\r\n this.closeClick();\r\n }\r\n });\r\n } // end if My Reports\r\n }\r\n\r\n getStaffPortals() {\r\n this.classroom360Service.getStaffAssignedPortals().subscribe(data => {\r\n this.staffPortals = data.filter(portal => (portal.ParentModule == '/student360' || portal.PortalName == 'Send Email' || (portal.PortalName == 'Student Notes' && portal.GroupName != 'Tools')) && portal.ShowAsMenu && portal.PortalName != 'Student Summary' && portal.PortalDescription != '/eFormsStaff/:staffPage' && portal.PortalDescription != '/scheduleHistory/multipleStudent');\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.userService.selectedStudentInfoPortal = undefined;\r\n this.userService.studentInformationView = false;\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'student-notes-shared',\r\n templateUrl: './student-notes-shared.component.html',\r\n styleUrls: ['./student-notes-shared.component.css']\r\n})\r\nexport class StudentNotesSharedComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
","
\r\n \r\n Selected Students\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n\r\n \r\n \r\n \r\n Student #\r\n \r\n \r\n {{student.StudentNumber}}\r\n \r\n\r\n \r\n \r\n \r\n Student Name\r\n \r\n \r\n \r\n {{student.fullName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n {{student.EnrollmentStatus}}\r\n \r\n\r\n \r\n \r\n \r\n Grade\r\n \r\n \r\n {{student.Grade}}\r\n \r\n\r\n \r\n \r\n \r\n School\r\n \r\n \r\n {{student.EnrollmentSchool}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \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 {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Student} from '../../student/student.model';\r\nimport {UserPreferencesService} from '../../user-preferences/user-preferences.service';\r\nimport {TylerMatTableDataSource} from '../../angular-material/extended.class';\r\nimport {MatPaginator} from '@angular/material/paginator';\r\nimport {MatSort} from '@angular/material/sort';\r\nimport { cloneDeep } from 'lodash';\r\n@Component({\r\n selector: 'app-student-list-modal',\r\n templateUrl: './student-list-modal.component.html',\r\n styleUrls: ['./student-list-modal.component.css'],\r\n})\r\nexport class StudentListModalComponent implements OnInit, AfterViewInit {\r\n students: Student[] = [];\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n displayedColumns: string[] = ['StudentNumber', 'fullName', 'EnrollmentStatus', 'Grade', 'EnrollmentSchool' ];\r\n angularMatData = new TylerMatTableDataSource();\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: Student[],\r\n private userPreferences: UserPreferencesService\r\n ) {\r\n this.students = cloneDeep(this.data);\r\n if (this.userPreferences.generalPreferences == null || this.userPreferences.generalPreferences.StudentNameFormat == 'LNF') {\r\n this.sortByLastName();\r\n } else {\r\n this.sortByFirstName();\r\n }\r\n this.angularMatData.data = this.students;\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.angularMatData.paginator = this.paginator;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n closeClick(message: string) {\r\n this.dialogRef.close(message);\r\n }\r\n\r\n sortByFirstName() {\r\n this.students = this.students.sort(function (a, b) {\r\n if (a.FirstName < b.FirstName) {\r\n return -1;\r\n }\r\n if (a.FirstName > b.FirstName) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n sortByLastName() {\r\n this.students = this.students.sort(function (a, b) {\r\n if (a.LastName < b.LastName) {\r\n return -1;\r\n }\r\n if (a.LastName > b.LastName) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n}\r\n","import { DataQuery } from '../../classroom360/data-query/models/data-query.model';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\n\r\nexport class StudentSearchCriteria {\r\n\r\n // Constructors\r\n constructor(\r\n yearId: number,\r\n studentNumber: string,\r\n firstName: string,\r\n lastName: string,\r\n schoolId: string,\r\n status: string,\r\n viewAllStudentInThisSchoolYear = false,\r\n courseId = '0',\r\n listId = -1,\r\n enrollmentDate = null,\r\n getStudentHomerooms = false\r\n ) {\r\n this.yearId = yearId;\r\n this.studentNumber = studentNumber;\r\n this.lastName = lastName;\r\n this.firstName = firstName;\r\n this.schoolId = schoolId;\r\n this.status = status;\r\n this.viewAllStudentInThisSchoolYear = viewAllStudentInThisSchoolYear;\r\n this.courseId = courseId;\r\n this.listId = listId;\r\n this.enrollmentDate = enrollmentDate;\r\n this.getStudentHomerooms = getStudentHomerooms;\r\n }\r\n\r\n // Server Properties\r\n public yearId: number;\r\n public studentNumber: string;\r\n public lastName: string;\r\n public firstName: string;\r\n public schoolId: string; // NOTE: the application treats this like a number, but it's really a string on the DTO\r\n public status: string;\r\n public viewAllStudentInThisSchoolYear = false;\r\n public courseId = '';\r\n public listId = -1;\r\n public enrollmentDate = null;\r\n public getStudentHomerooms = false;\r\n\r\n // Local Properties\r\n currentQuery: DataQuery = null;\r\n studentList: StudentList = null;\r\n}\r\n","import {Directive} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[regex]'\r\n})\r\nexport class RegexDirective {\r\n\r\n static Contains(value: string, contains: string): boolean {\r\n // Returns a boolean\r\n const regExp = new RegExp(contains, 'g');\r\n return regExp.test(value);\r\n }\r\n static EndsWith(value: string, endsWith: string): boolean {\r\n // Returns a boolean\r\n const regExp = new RegExp(endsWith + '$', 'g');\r\n return regExp.test(value);\r\n }\r\n static StartsWith(value: string, startsWith: string): boolean {\r\n // Returns a boolean\r\n const regExp = new RegExp('^' + startsWith, 'g');\r\n return regExp.test(value);\r\n }\r\n static RegExBuilder(value: string, operator: string): RegExp {\r\n let regExp;\r\n switch (operator) {\r\n case 'startsWith':\r\n regExp = new RegExp('^' + value, 'g');\r\n break;\r\n case 'contains':\r\n regExp = new RegExp(value, 'g');\r\n break;\r\n case 'endsWith':\r\n regExp = new RegExp(value + '$', 'g');\r\n break;\r\n case 'doesNotStartWith':\r\n regExp = new RegExp('^(?!' + value + ').+', 'g');\r\n break;\r\n case 'doesNotEndWith':\r\n regExp = new RegExp('.+(?\r\n
\r\n\t
\r\n\t\tStudent Filters\r\n\t
\r\n\t
\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tReset\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{recentFilter.QueryName}}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n\t
\r\n\t\tConditions (Rows with the same group letter are joined with AND. Rows with different group letters are joined with OR.)\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\t\t
\r\n\t\t\tSQL Translation\r\n\t\t
\r\n\t\t
\r\n\t\t\t{{filterTranslation}}\r\n\t\t
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../angular-material/extended.class';\r\nimport { DataQueryService } from '../../../classroom360/data-query/data-query.service';\r\nimport { DataQueryFieldFilter } from '../../../classroom360/data-query/models/data-query-field-filter.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { DataQuery } from '../../../classroom360/data-query/models/data-query.model';\r\nimport { DataQueryField } from '../../../classroom360/data-query/models/data-query-field.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LookupService } from '../../lookup/lookup.service';\r\nimport { YearService } from '../../year/year.service';\r\nimport { GeneralPreferences } from '../../user-preferences/general-preferences.model';\r\nimport { UserPreferencesService } from '../../user-preferences/user-preferences.service';\r\nimport { AdvancedFilterComponent } from '../../advanced-filter/advanced-filter.component';\r\n\r\n@Component({\r\n selector: 'app-advanced-student-search',\r\n templateUrl: './advanced-student-search.component.html',\r\n styleUrls: ['./advanced-student-search.component.css']\r\n})\r\nexport class AdvancedStudentSearchComponent extends AdvancedFilterComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n initialStudentNumber = '';\r\n initialFirstName = '';\r\n initialLastName = '';\r\n initialGrade = '';\r\n initialEnrollment = '';\r\n initialEnrollDate = '';\r\n initialDOB = '';\r\n initialSchool = '';\r\n initialStatus = '';\r\n\r\n // Properties\r\n tableData = new TylerMatTableDataSource();\r\n subscriptions: Subscription[] = [];\r\n // information: DataQueryInformation;\r\n // preferences: DataQueryPreferences;\r\n generalPreferences: GeneralPreferences;\r\n allFilters: DataQueryFieldFilter[] = [];\r\n V10: boolean;\r\n\r\n // Class Functions\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n dialogBox: MatDialogRef,\r\n dataQueryService: DataQueryService,\r\n loginService: LoginService,\r\n lookupService: LookupService,\r\n yearService: YearService,\r\n userPreferencesService: UserPreferencesService,\r\n dialog: MatDialog\r\n ) {\r\n super(dataQueryService, userPreferencesService, loginService, dialogBox, lookupService, yearService, dialog);\r\n }\r\n\r\n // Event Functions\r\n addRosterFilter() {\r\n // PRE: the add roster filter button is clicked\r\n // POST: opens a dialog to select a number of courses. Then, adds those courses as a filter.\r\n this.dataQueryService.addRosterFilter(null, () => {\r\n\r\n // Re-establishing filter fields\r\n this.setAllFilters();\r\n\r\n // Setting table data\r\n this.tableData.data = this.allFilters;\r\n });\r\n }\r\n\r\n // Overridden Methods\r\n initialize() {\r\n // POST: initializes this component for staff search\r\n\r\n // Setting the injected properties\r\n if (this.data) {\r\n this.initialStudentNumber = this.data.initialStudentNumber;\r\n this.initialFirstName = this.data.initialFirstName;\r\n this.initialLastName = this.data.initialLastName;\r\n this.initialGrade = this.data.initialGrade;\r\n this.initialEnrollment = this.data.initialEnrollment;\r\n this.initialEnrollDate = this.data.initialEnrollDate;\r\n this.initialDOB = this.data.initialDOB;\r\n this.initialSchool = this.data.initialSchool;\r\n this.initialStatus = this.data.initialStatus;\r\n }\r\n\r\n // Undoing our current query to ensure no crossover from elsewhere\r\n if (!this.dataQueryService.isStudentSearch) {\r\n this.dataQueryService.currentQuery = new DataQuery();\r\n this.dataQueryService.isStudentSearch = true;\r\n }\r\n }\r\n\r\n setValueSwitch(field: DataQueryField, filter: DataQueryFieldFilter, updateUsing: boolean) {\r\n // POST: sets the values for the student search filters\r\n if (updateUsing) {\r\n filter.UseFilterForStudentSearch = false;\r\n }\r\n let val = '';\r\n\r\n // Updating based on grid filters (these do not take priority, so they come first)\r\n switch (field.Alias) {\r\n case 'Student ID':\r\n case 'Student Number':\r\n filter.Value = this.initialStudentNumber;\r\n break;\r\n case 'Name - First':\r\n case 'First Name':\r\n filter.Value = this.initialFirstName;\r\n break;\r\n case 'Name - Last':\r\n case 'Last Name':\r\n filter.Value = this.initialLastName;\r\n break;\r\n case 'Birth Date':\r\n case 'DOB':\r\n if (this.initialDOB) {\r\n const dateOfBirth = new Date(this.initialDOB);\r\n if (dateOfBirth.toString() != 'Invalid Date') {\r\n filter.Value = dateOfBirth.toString();\r\n }\r\n }\r\n break;\r\n case 'Grade':\r\n filter.Value = this.initialGrade;\r\n break;\r\n case 'School':\r\n filter.Value = this.initialSchool;\r\n break;\r\n case 'Enrollment Date':\r\n if (this.initialEnrollDate) {\r\n const enrollmentDate = new Date(this.initialEnrollDate);\r\n if (enrollmentDate.toString() != 'Invalid Date') {\r\n filter.Value = enrollmentDate.toString();\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // Updating based on search criteria (these take priority, so they come last)\r\n if (this.loginService.LoginSettings.V10) {\r\n if (field.FieldName == 'Student_ID') {\r\n field.Alias = 'StudentId';\r\n }\r\n switch (field.FieldName.toLowerCase()) {\r\n case 'student_number':\r\n if (this.dataQueryService.studentSearchFilters.StudentNumber) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.StudentNumber;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'student_id':\r\n field.Alias = 'StudentId';\r\n filter.hidden = true;\r\n break;\r\n case 'first_name':\r\n filter.Operator = 'Starts With';\r\n if (this.dataQueryService.studentSearchFilters.FirstName) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.FirstName;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'last_name':\r\n filter.Operator = 'Starts With';\r\n if (this.dataQueryService.studentSearchFilters.LastName) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.LastName;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'grade_level':\r\n field.Alias = 'Grade';\r\n if (this.dataQueryService.studentSearchFilters.Grade) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.Grade;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'school_name':\r\n field.Alias = 'School';\r\n val = this.dataQueryService.studentSearchFilters.EnrollmentSchool == null ? '' : this.dataQueryService.studentSearchFilters.EnrollmentSchool;\r\n if (val == '') {\r\n val = this.dataQueryService.studentSearchFilters.ddlSchool == null ? '' : this.dataQueryService.studentSearchFilters.ddlSchool;\r\n }\r\n\r\n if (val != 'All' && val != '(All)' && val != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.Value = val;\r\n }\r\n\r\n break;\r\n case 'primary':\r\n field.Alias = 'Enrollment';\r\n val = 'All';\r\n if (this.dataQueryService.studentSearchFilters.Enrollment) {\r\n val = this.dataQueryService.studentSearchFilters.Enrollment;\r\n }\r\n if (val != 'All' && val != '(All)' && val != '*' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.Value = val;\r\n }\r\n\r\n break;\r\n case 'entry_date':\r\n field.Alias = 'Enrollment Date';\r\n if (this.dataQueryService.studentSearchFilters.EnrollmentDate) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.EnrollmentDate;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'enrollment_status':\r\n field.Alias = 'Status';\r\n val = this.dataQueryService.studentSearchFilters.EnrollmentStatus == null ? '' : this.dataQueryService.studentSearchFilters.EnrollmentStatus;\r\n if (val == '') {\r\n val = this.dataQueryService.studentSearchFilters.rbStatus == null ? '' : this.dataQueryService.studentSearchFilters.rbStatus;\r\n }\r\n if (val != 'All' && val != '(All)' && val != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.Value = val;\r\n }\r\n break;\r\n case 'dob':\r\n if (this.dataQueryService.studentSearchFilters.DOB) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.DOB;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n }\r\n } else {\r\n switch (field.DisplayName) {\r\n case 'lngStudentId':\r\n case 'Primary':\r\n filter.hidden = true;\r\n break;\r\n case 'Student ID':\r\n if (this.dataQueryService.studentSearchFilters.StudentNumber) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.StudentNumber;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'Name - First':\r\n if (updateUsing || !filter.Operator || filter.Operator == '') {\r\n filter.Operator = 'Starts With';\r\n }\r\n if (this.dataQueryService.studentSearchFilters.FirstName) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.FirstName;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'Name - Last':\r\n if (updateUsing || !filter.Operator || filter.Operator == '') {\r\n filter.Operator = 'Starts With';\r\n }\r\n if (this.dataQueryService.studentSearchFilters.LastName) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.LastName;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'Grade':\r\n if (this.dataQueryService.studentSearchFilters.Grade) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.Grade;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'Primary Enrollment Site Name':\r\n val = this.dataQueryService.studentSearchFilters.EnrollmentSchool == null ? '' : this.dataQueryService.studentSearchFilters.EnrollmentSchool;\r\n if (val == '') {\r\n val = this.dataQueryService.studentSearchFilters.ddlSchool == null ? '' : this.dataQueryService.studentSearchFilters.ddlSchool;\r\n }\r\n if (val != 'All' && val != '(All)' && val != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.Value = val;\r\n }\r\n break;\r\n case 'Enrollment Date':\r\n if (this.dataQueryService.studentSearchFilters.EnrollmentDate) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.EnrollmentDate;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n case 'Enrollment Status':\r\n val = this.dataQueryService.studentSearchFilters.EnrollmentStatus == null ? '' : this.dataQueryService.studentSearchFilters.EnrollmentStatus;\r\n if (val == '') {\r\n val = this.dataQueryService.studentSearchFilters.rbStatus == null ? '' : this.dataQueryService.studentSearchFilters.rbStatus;\r\n }\r\n if (val != 'All' && val != '(All)' && val != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n filter.Value = val;\r\n }\r\n if (!filter.Value) {\r\n filter.Value = 'All';\r\n }\r\n break;\r\n case 'Birth Date':\r\n if (this.dataQueryService.studentSearchFilters.DOB) {\r\n filter.Value = this.dataQueryService.studentSearchFilters.DOB;\r\n }\r\n if (filter.Value && filter.Value != '' && updateUsing) {\r\n filter.UseFilterForStudentSearch = true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n setFilterPropertiesSwitch(field: DataQueryField, filter: DataQueryFieldFilter) {\r\n // POST: sets the filter's properties\r\n filter.Operator = '=';\r\n filter.Value = '';\r\n filter.Value2 = '';\r\n filter.Group = 'A';\r\n filter.DisplayMenu = false;\r\n filter.UseCurrentDate1 = false;\r\n filter.UseCurrentDate2 = false;\r\n filter.UseFilterForStudentSearch = true;\r\n filter.IsStudentFilter = false;\r\n filter.StudentFilterId = 0;\r\n filter.ApplyToAll = false;\r\n }\r\n}\r\n","export class StudentSearchPreferences {\r\n columnSettings: ColumnSetting[];\r\n}\r\nexport class ColumnSetting {\r\n name: string;\r\n regEx: string;\r\n active: boolean;\r\n}\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { UserService } from '../../user/user.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-student-search-warning',\r\n templateUrl: './student-search-warning.component.html',\r\n styles: []\r\n})\r\nexport class StudentSearchWarningComponent implements OnInit, OnDestroy {\r\n\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n okClick() {\r\n if (sessionStorage.getItem('loginFromLegacy') != null || sessionStorage.getItem('loginFromLegacy') == '1') {\r\n window.close();\r\n } else {\r\n this.router.navigateByUrl('/login');\r\n setTimeout(() => {\r\n window.location.reload();\r\n }, 0);\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n}\r\n","
No Student Selected
\r\n\r\n\r\n
No information can be displayed because a student has not been selected.
\r\n
Select OK to log out.
\r\n
Select Cancel to return to the Student Search.
\r\n
\r\n\r\n\r\n \r\n","\r\n
\r\n

Student Search

\r\n

Student Search and Select

\r\n
\r\n {{headerMessage}}\r\n
\r\n
\r\n

{{headerMessage}}

\r\n
\r\n
\r\n
\r\n Searching students available in Academic Year\r\n {{currentYear.Description}}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n (All)\r\n \r\n \r\n {{school.SchoolName}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n (All)\r\n Active\r\n Withdrawn\r\n Projected\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n None\r\n \r\n \r\n {{recentFilter.QueryName}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n None\r\n \r\n \r\n {{studentList.Name}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n {{col.name}}\r\n \r\n \r\n {{col.name}}\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Student #\r\n \r\n \r\n \r\n \r\n {{element.StudentNumber}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n First Name\r\n \r\n \r\n \r\n {{element.FirstName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n \r\n {{element.LastName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Alerts\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Grade\r\n \r\n \r\n \r\n {{element.Grade}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Enrollment\r\n \r\n \r\n \r\n {{element.Enrollment == 'Alternate' ? 'Additional' : element.Enrollment}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n Enroll Date\r\n \r\n \r\n \r\n {{element.EnrollmentDateAsDate | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Birth Date\r\n \r\n \r\n \r\n {{element.DateOfBirth | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n Birth Date\r\n \r\n \r\n \r\n {{element.DateOfBirthAsDate | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n School\r\n \r\n \r\n \r\n \r\n {{element.EnrollmentSchool}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n \r\n {{element.EnrollmentStatus}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Homeroom Teacher\r\n \r\n \r\n \r\n \r\n {{element.Homeroom_Teacher}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n State ID\r\n \r\n \r\n \r\n \r\n {{element.StudentDOENumber}}\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n","/* eslint-disable camelcase */\r\nimport { Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { DataQueryService } from '../../classroom360/data-query/data-query.service';\r\nimport { DataQueryInformation } from '../../classroom360/data-query/models/data-query-information';\r\nimport { DataQueryResult } from '../../classroom360/data-query/models/data-query-result.model';\r\nimport { DataQuery } from '../../classroom360/data-query/models/data-query.model';\r\nimport { AddEditStudentListDialogComponent } from '../../classroom360/student-lists/add-edit-student-list-dialog/add-edit-student-list-dialog.component';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\nimport { StudentListsService } from '../../classroom360/student-lists/student-lists.service';\r\nimport { MassEmailViewComponent } from '../../shared-components/mass-email-view/mass-email-view.component';\r\nimport { MassEmail } from '../../shared-components/mass-email-view/mass-email.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { ErrorList } from '../controls/error-prompt/error-list.model';\r\nimport { RegexDirective } from '../directives/regex.directive';\r\nimport { EnterCsvDialogComponent } from '../enter-csv-dialog/enter-csv-dialog.component';\r\nimport { SecurityService } from '../security/security.service';\r\nimport { SharedService } from '../shared.service';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { System } from '../System';\r\nimport { UserPreferencesService } from '../user-preferences/user-preferences.service';\r\nimport { UserPermission } from '../user/user-permission.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { School } from '../year/school.model';\r\nimport { YearService } from '../year/year.service';\r\nimport { AdvancedStudentSearchComponent } from './advanced-student-search/advanced-student-search.component';\r\nimport { StudentListModalComponent } from './student-list-modal/student-list-modal.component';\r\nimport { StudentSearchCriteria } from './student-search-criteria.model';\r\nimport { StudentSearchModel } from './student-search-model';\r\nimport { StudentSearchPreferences } from './student-search-preferences';\r\nimport { StudentSearchWarningComponent } from './student-search-warning/student-search-warning.component';\r\nimport { StudentSearchService } from './student-search.service';\r\n\r\n@Component({\r\n selector: 'student-search',\r\n templateUrl: 'student-search.component.html',\r\n styleUrls: ['./student-search.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class StudentSearchComponent implements OnInit, OnDestroy {\r\n // Properties\r\n errors: ErrorList[] = [];\r\n // @ViewChild(DatatableComponent) dataTableAPI: DatatableComponent;\r\n @ViewChild(MatMenuTrigger, { static: true }) trigger: MatMenuTrigger;\r\n subscriptions: Subscription[] = [];\r\n studentSearchData: Student[] = [];\r\n studentGridData: Student[] = [];\r\n selectedStudents: Student[] = [];\r\n // ----- MAt Table properties ONE-6748-------\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource(this.studentGridData);\r\n columnsToDisplay = ['SelectAll', 'Student #', 'First Name', 'Last Name', 'Alerts', 'Grade', 'Enrollment', 'Enroll Date', 'DOB', 'School', 'Status', 'Homeroom Teacher', 'State ID', 'Menue'];\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator, { static: true }) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.dataSource.paginator = value;\r\n }\r\n _sort: MatSort;\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.dataSource.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n // -------------------\r\n originalStudentSearchData: StudentSearchModel[] = [];\r\n searchCriteria: StudentSearchCriteria;\r\n sortOrder: any[];\r\n searchCriteriaLoaded = false;\r\n studentIds = [];\r\n regularExpressions = [{ name: 'Starts With', value: 'startsWith' }, { name: 'Ends With', value: 'endsWith' }, {\r\n name: 'Contains',\r\n value: 'contains'\r\n }];\r\n currentYear;\r\n showAlert = true;\r\n isV10: Boolean;\r\n showStudentAlerts: boolean;\r\n prepopulateStudentSearch: boolean;\r\n defaultCursorPosition: number;\r\n selectedStudentHistory: Student[];\r\n schools: School[];\r\n allStudentsSelected = false;\r\n gridHeight;\r\n closeClicked = false;\r\n activeFilters = [];\r\n referral = false;\r\n defaultColumns = [ // changing this requires a change to the restoreDefaultsClick function\r\n { name: 'Student #', active: true, regEx: 'startsWith' },\r\n { name: 'First Name', active: true, regEx: 'startsWith' },\r\n { name: 'Last Name', active: true, regEx: 'startsWith' },\r\n { name: 'Alerts', active: true, regEx: 'startsWith' },\r\n { name: 'Grade', active: true, regEx: 'startsWith' },\r\n { name: 'Enrollment', active: true, regEx: 'startsWith' },\r\n { name: 'Enroll Date', active: true, regEx: 'startsWith' },\r\n { name: 'DOB', active: true, regEx: 'startsWith' },\r\n { name: 'School', active: true, regEx: 'startsWith' },\r\n { name: 'Status', active: true, regEx: 'startsWith' },\r\n { name: 'Homeroom Teacher', active: false, regEx: 'startsWith' },\r\n { name: 'State ID', active: false, regEx: 'startsWith' }\r\n ];\r\n // defaultMatTableColumns is depends on defaultColumns // ONE-6748\r\n // if make any changes in defaultColumns object then changes should require in defaultMatTableColumns object\r\n defaultMatTableColumns = [\r\n { name: 'Student #', active: true, MatTableColumn: 'StudentNumber' },\r\n { name: 'First Name', active: true, MatTableColumn: 'FirstName' },\r\n { name: 'Last Name', active: true, MatTableColumn: 'LastName' },\r\n { name: 'Alerts', active: true, MatTableColumn: 'StudentAlerts' },\r\n { name: 'Grade', active: true, MatTableColumn: 'Grade' },\r\n { name: 'Enrollment', active: true, MatTableColumn: 'Enrollment' },\r\n { name: 'Enroll Date', active: true, MatTableColumn: 'EnrollmentDateAsDate' },\r\n { name: 'DOB', active: true, MatTableColumn: 'DateOfBirthAsDate' },\r\n // { name: 'Enroll Date', active: true, MatTableColumn: 'EnrollmentDate' },\r\n // { name: 'DOB', active: true, MatTableColumn: 'DateOfBirth' },\r\n { name: 'School', active: true, MatTableColumn: 'EnrollmentSchool' },\r\n { name: 'Status', active: true, MatTableColumn: 'EnrollmentStatus' },\r\n { name: 'Homeroom Teacher', active: false, MatTableColumn: 'Homeroom_Teacher' },\r\n { name: 'State ID', active: false, MatTableColumn: 'StudentDOENumber' }\r\n ];\r\n redirectUrl = '';\r\n allSchoolsValue: string;\r\n inputBuffer: boolean;\r\n studentSearchCalled = false;\r\n\r\n hideSaveButton = false;\r\n hidNextButton = false;\r\n showLargeHeaderMessage = false;\r\n\r\n // filters\r\n studentNumberFilter: string;\r\n firstNameFilter: string;\r\n lastNameFilter: string;\r\n gradeFilter: string;\r\n enrollmentFilter: string;\r\n enrollDateFilter: string;\r\n dateOfBirthFilter: string;\r\n schoolFilter: string;\r\n statusFilter: string;\r\n studentDOENumberFilter: string;\r\n homeroomTeacherFilter: string;\r\n\r\n headerMessage: string;\r\n acceptLabel = 'Select';\r\n studentNumberRegExp = /^[^\\s,]+(,[^\\s,]+)*$/;\r\n studentNumberKeyRestriction = /[^\\s,]|,/;\r\n toggleSelectedStudents = false;\r\n\r\n // Permissions\r\n permissions: UserPermission[] = [];\r\n addStudentListPrivilegeId = 2206;\r\n addStudentList = false;\r\n\r\n // Data Query Properties\r\n information = new DataQueryInformation();\r\n private _currentQuery = new DataQuery();\r\n\r\n // Student List Properties\r\n private _studentList: StudentList = null;\r\n studentLists: StudentList[] = [];\r\n\r\n // Injected Properties\r\n returnSelectedStudents = true;\r\n performRoute = false;\r\n searchAndSelect = false;\r\n returnSingle = false;\r\n returnAll = false;\r\n currentSchool: boolean;\r\n schoolId: number;\r\n creatingStudentList = false;\r\n useLastSelectedSchool = true;\r\n disableSchoolDropdown = false;\r\n shortingBy = '';\r\n checkErrorForStudents = false;\r\n clickHandler = (event: any) => { };\r\n\r\n // Class Functions\r\n constructor(\r\n private studentSearchService: StudentSearchService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private loginService: LoginService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialog: MatDialog,\r\n private dataQueryService: DataQueryService,\r\n private sharedService: SharedService,\r\n private studentListsService: StudentListsService,\r\n private userService: UserService,\r\n private classroom360Service: Classroom360Service,\r\n private securityService: SecurityService\r\n ) {\r\n }\r\n\r\n get currentQuery(): DataQuery {\r\n return this._currentQuery;\r\n }\r\n\r\n set currentQuery(value: DataQuery) {\r\n this.dataQueryService.currentQuery = value;\r\n this.searchCriteria.currentQuery = value;\r\n }\r\n\r\n get studentList(): StudentList {\r\n return this._studentList;\r\n }\r\n\r\n set studentList(value: StudentList) {\r\n this._studentList = value;\r\n if (this._studentList) {\r\n this.searchCriteria.listId = this._studentList.ID;\r\n } else {\r\n this.searchCriteria.listId = -1;\r\n }\r\n }\r\n\r\n // Lifecycle Hooks\r\n dateComparator = (a, b) => this.compareByDate(a, b);\r\n\r\n // eslint-disable-next-line complexity\r\n ngOnInit(): void {\r\n this.dataSource.sortingDataAccessor = (item: Student, property: string) => {\r\n switch (property) {\r\n case 'Enrollment':\r\n return item.Enrollment == 'Alternate' ? 'Additional' : item.Enrollment;\r\n default:\r\n return this.dataSource.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n\r\n // Setting initial values\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n this.currentYear = this.yearService.defaultYear;\r\n this.selectedStudentHistory = this.studentService.recentStudents;\r\n this.creatingStudentList = this.data.creatingStudentList;\r\n\r\n // Obtaining the schools and setting the \"all\" value\r\n if (this.isV10 && this.data.schools) {\r\n this.schools = this.data.schools;\r\n this.allSchoolsValue = '';\r\n this.schools.forEach(school => {\r\n if (this.allSchoolsValue) {\r\n this.allSchoolsValue += ',';\r\n }\r\n this.allSchoolsValue += school.Id;\r\n });\r\n } else {\r\n if (!this.isV10 && this.yearService.schoolsForC360 && this.yearService.schools.length < this.yearService.schoolsForC360.length) {\r\n this.schools = this.yearService.schoolsForC360;\r\n } else {\r\n this.schools = this.yearService.schools;\r\n }\r\n this.allSchoolsValue = '0';\r\n }\r\n\r\n this.useLastSelectedSchool = this.data.useLastSelectedSchool == null ? true : this.data.useLastSelectedSchool;\r\n\r\n // Setting up initial display ???\r\n this.sortSchools();\r\n this.setPreferences();\r\n this.getSearchCriteria();\r\n this.getStudentSearchPreferences();\r\n\r\n // Loading criteria\r\n this.loadSearchCriteria();\r\n this.loadFilterCriteria();\r\n this.getStudentLists();\r\n\r\n // Obtaining permissions\r\n if (this.isV10) {\r\n if (this.securityService.userPermissions.find(o => o.PrivilegeId == this.addStudentListPrivilegeId) != null) {\r\n this.addStudentList = true;\r\n }\r\n }\r\n else {\r\n this.addStudentList = true;\r\n }\r\n\r\n // Build out the column Definitions ** Needs to Be Here (ngOnInit) **\r\n if (this.data) {\r\n if (this.data.disableSchoolDropdown) {\r\n this.disableSchoolDropdown = this.data.disableSchoolDropdown;\r\n }\r\n if (this.data.clickHandler) {\r\n this.clickHandler = this.data.clickHandler;\r\n }\r\n if (this.data.schoolId) {\r\n this.searchCriteria.schoolId = this.data.schoolId.toString();\r\n } else if (this.data.currentSchool) {\r\n this.searchCriteria.schoolId = this.yearService.defaultYear.SchoolID.toString();\r\n }\r\n if (this.data.returnSelectedStudents) {\r\n this.returnSelectedStudents = this.data.returnSelectedStudents;\r\n }\r\n if (this.data.selectedStudents) {\r\n this.selectedStudents = System.copyArray(this.data.selectedStudents);\r\n }\r\n if (this.data.viewAllStudentsInThisSchoolYear) {\r\n this.searchCriteria.viewAllStudentInThisSchoolYear = this.data.viewAllStudentsInThisSchoolYear;\r\n }\r\n if (this.data.headerMessage) {\r\n this.headerMessage = this.data.headerMessage;\r\n }\r\n if (this.data.acceptLabel) {\r\n this.acceptLabel = this.data.acceptLabel;\r\n }\r\n if (this.data.referral) {\r\n this.referral = this.data.referral;\r\n }\r\n if (this.data.hidNextButton) {\r\n this.hidNextButton = this.data.hidNextButton;\r\n }\r\n if (this.data.hideSaveButton) {\r\n this.hideSaveButton = this.data.hideSaveButton;\r\n }\r\n if (this.data.showLargeHeaderMessage) {\r\n this.showLargeHeaderMessage = this.data.showLargeHeaderMessage;\r\n }\r\n if (this.data.checkErrorForStudents) {\r\n this.checkErrorForStudents = this.data.checkErrorForStudents;\r\n }\r\n }\r\n this.performRoute = this.data.performRoute;\r\n this.searchAndSelect = this.data.searchAndSelect;\r\n if (this.data.callFromSpedHome == true) {\r\n this.redirectUrl = '/sped360/studentDocumentHome';\r\n } else {\r\n this.redirectUrl = this.data.redirectUrl;\r\n }\r\n this.returnSingle = this.data.returnSingle;\r\n this.returnAll = this.data.returnAll;\r\n // Set the default sort order based on the user preference\r\n if (this.userPreferencesService.generalPreferences.StudentNameFormat == 'LNF') {\r\n this.sortOrder = [{ prop: 'LastName', dir: 'asc' }];\r\n this.shortingBy = 'LastName';\r\n } else {\r\n this.sortOrder = [{ prop: 'FirstName', dir: 'asc' }];\r\n this.shortingBy = 'FirstName';\r\n }\r\n\r\n // Subscribing to data query values\r\n this.studentSearchService.unsavedStudentFilter = false;\r\n this.dataQueryService.getInformation().subscribe();\r\n this.dataQueryService.currentQuery = new DataQuery();\r\n this.dataQueryService.isStudentSearch = true;\r\n this.dataQueryService.pageSize = this.dataQueryService.initialPageSize;\r\n this.subscriptions.push(\r\n // Syncing properties\r\n this.dataQueryService.observableCurrentQueryStream$.subscribe(query => {\r\n this._currentQuery = query;\r\n this._currentQuery.StudentSearch = true;\r\n this._currentQuery.CourseSearch = false;\r\n this.dataQueryService.checkDefaultFilterFields(this._currentQuery.filterFields);\r\n }),\r\n this.dataQueryService.observableInformationStream$.subscribe(information => {\r\n this.information = information;\r\n if (this.currentQuery && !this.information.recentStudentFilters.find(filterQuery => filterQuery == this.currentQuery)) {\r\n const matchingQuery = this.information.recentStudentFilters.find(filterQuery => filterQuery.ID == this.currentQuery.ID);\r\n if (matchingQuery) {\r\n this.currentQuery = matchingQuery;\r\n }\r\n }\r\n if (!this.dataQueryService.obtainedRecentStudentQueries && !this.dataQueryService.isInformationCached()) {\r\n this.subscriptions.push(\r\n this.dataQueryService.getRecentQueries().subscribe(recentFilters => {\r\n this.information.recentStudentFilters = recentFilters;\r\n this.dataQueryService.obtainedRecentStudentQueries = true;\r\n })\r\n );\r\n }\r\n }),\r\n\r\n // Obtaining data\r\n this.dataQueryService.getPermissions().subscribe()\r\n );\r\n // Resetting the filter query\r\n this.currentQuery = new DataQuery();\r\n this.dataQueryService.currentSchoolOnly = false;\r\n if (this.studentSearchService.searchCriteria) {\r\n if (this.studentSearchService.searchCriteria.currentQuery) {\r\n this.currentQuery = this.information.recentStudentFilters.find(rf => rf.ID == this.studentSearchService.searchCriteria.currentQuery.ID);\r\n }\r\n }\r\n // default table columans\r\n if (this.searchAndSelect) {\r\n this.columnsToDisplay = ['SelectAll'];\r\n }\r\n else {\r\n this.columnsToDisplay = [];\r\n }\r\n for (let i = 0; i < this.defaultMatTableColumns.length; i++) {\r\n if (this.defaultMatTableColumns[i].active == true && (this.defaultMatTableColumns[i].name != 'Alerts' || this.showStudentAlerts == true)) {\r\n this.columnsToDisplay.push(this.defaultMatTableColumns[i].MatTableColumn);\r\n }\r\n }\r\n }\r\n chooseColumn() {\r\n if (this.searchAndSelect) {\r\n this.columnsToDisplay = ['SelectAll'];\r\n }\r\n else {\r\n this.columnsToDisplay = [];\r\n }\r\n for (let i = 0; i < this.defaultColumns.length; i++) {\r\n if (this.defaultColumns[i].active == true && (this.defaultColumns[i].name != 'Alerts' || this.showStudentAlerts == true)) {\r\n for (let j = 0; j < this.defaultMatTableColumns.length; j++) {\r\n if (this.defaultColumns[i].name == this.defaultMatTableColumns[j].name) {\r\n this.columnsToDisplay.push(this.defaultMatTableColumns[i].MatTableColumn);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n selectAllContent($event) {\r\n $event.target.select();\r\n }\r\n\r\n getCellClass = ({ row, column, value }): any => {\r\n if (!this.isV10) {\r\n if (value == 'Projected') {\r\n return ' ProjectedStudent';\r\n }\r\n else if (value == 'Withdrawn') {\r\n return ' WithdrawnStudent';\r\n }\r\n else if (value == 'Future') {\r\n return ' FutureStudent';\r\n }\r\n }\r\n return '';\r\n }\r\n ngOnDestroy(): void {\r\n if (!this.closeClicked) {\r\n // Saves to the database\r\n this.saveStudentSearchPreferences();\r\n }\r\n\r\n // Unsubscribing from all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n\r\n // Replacing the current query in case we were in data query\r\n this.dataQueryService.isStudentSearch = false;\r\n this.dataQueryService.isCourseSearch = false;\r\n // Saves to the service for the session\r\n this.studentSearchService.saveFilterCriteria(this.activeFilters);\r\n }\r\n\r\n closeClick() {\r\n this.saveSearchCriteria();\r\n this.saveStudentSearchPreferences();\r\n if (this.loginService.LoginSettings.ActivateClassroom360 == false && (this.studentService.selectedStudent == null || this.studentService.selectedStudent.Id == null)) {\r\n const studentSearchWarningDialogRef = this.dialog.open(StudentSearchWarningComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '500px',\r\n disableClose: true\r\n });\r\n\r\n studentSearchWarningDialogRef.afterClosed().subscribe(result => {\r\n if (result == 'OK was clicked.') {\r\n this.closeClicked = true;\r\n this.dialogRef.close();\r\n }\r\n });\r\n } else {\r\n this.closeClicked = true;\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n saveSearchCriteria() {\r\n const previousSchoolId = this.searchCriteria.schoolId;\r\n this.studentSearchService.searchCriteria = this.searchCriteria;\r\n this.studentSearchService.searchCriteria.currentQuery = null; // We don't save filters\r\n }\r\n\r\n checkStudentFilter() {\r\n // Checks to see if a student filter is active\r\n // return true to disable the header filters\r\n return this.studentSearchService.unsavedStudentFilter || this.currentQuery.ID != -1;\r\n }\r\n\r\n enterStudentNumbers() {\r\n // PRE: the CSV button next to student number is clicked\r\n // POST: opens the enter CSV dialog as \"Enter Student Numbers\"\r\n const dialogBox = this.dialog.open(EnterCsvDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n header: 'Enter Student Numbers',\r\n helpString: 'Separate numbers with a comma (Ex. 12345,13423,12312,19712)',\r\n pattern: this.studentNumberRegExp,\r\n keyRestriction: this.studentNumberKeyRestriction,\r\n validator: (csv: string): ErrorList[] => {\r\n if (!csv) {\r\n return [\r\n {\r\n errorMsg: 'Required field.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n }\r\n if (csv[csv.length - 1] == ',') {\r\n return [\r\n {\r\n errorMsg: 'The CSV must not end with a comma.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n } else if (!csv.match(this.studentNumberRegExp)) {\r\n return [\r\n {\r\n errorMsg: 'Separate numbers by commas. No spaces or special characters.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n }\r\n return [];\r\n }\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(csv => {\r\n if (csv || csv == '') {\r\n this.searchCriteria.studentNumber = csv;\r\n }\r\n })\r\n );\r\n }\r\n\r\n loadSearchCriteria() {\r\n if (this.studentSearchService.searchCriteria) {\r\n this.searchCriteria.studentNumber = this.studentSearchService.searchCriteria.studentNumber;\r\n this.searchCriteria.firstName = this.studentSearchService.searchCriteria.firstName;\r\n this.searchCriteria.lastName = this.studentSearchService.searchCriteria.lastName;\r\n this.searchCriteria.schoolId = this.useLastSelectedSchool ? this.studentSearchService.searchCriteria.schoolId : this.yearService.defaultYear.SchoolID.toString();\r\n this.searchCriteria.status = this.studentSearchService.searchCriteria.status;\r\n this.searchCriteria.currentQuery = this.studentSearchService.searchCriteria.currentQuery;\r\n }\r\n\r\n // Loading the all value if the loaded school doesn't exist\r\n if (this.schools.findIndex(s => s.Id.toString() == this.searchCriteria.schoolId) < 0) {\r\n this.searchCriteria.schoolId = this.allSchoolsValue;\r\n }\r\n }\r\n\r\n loadFilterCriteria() {\r\n if (this.studentSearchService.filterCriteria) {\r\n this.studentSearchService.filterCriteria.forEach(f => {\r\n this.activeFilters.push(f);\r\n });\r\n this.activeFilters.forEach(f => {\r\n switch (f.name) {\r\n case 'StudentNumber':\r\n this.studentNumberFilter = f.filter;\r\n break;\r\n case 'FirstName':\r\n this.firstNameFilter = f.filter;\r\n break;\r\n case 'LastName':\r\n this.lastNameFilter = f.filter;\r\n break;\r\n case 'Grade':\r\n this.gradeFilter = f.filter;\r\n break;\r\n case 'Enrollment':\r\n this.enrollmentFilter = f.filter;\r\n break;\r\n case 'EnrollmentDate':\r\n this.enrollDateFilter = f.filter;\r\n break;\r\n case 'DateOfBirth':\r\n this.dateOfBirthFilter = f.filter;\r\n break;\r\n case 'EnrollmentSchool':\r\n this.schoolFilter = f.filter;\r\n break;\r\n case 'EnrollmentStatus':\r\n this.statusFilter = f.filter;\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n clearFilters() {\r\n this.studentNumberFilter = '';\r\n this.firstNameFilter = '';\r\n this.lastNameFilter = '';\r\n this.gradeFilter = '';\r\n this.enrollmentFilter = '';\r\n this.enrollDateFilter = '';\r\n this.dateOfBirthFilter = '';\r\n this.schoolFilter = '';\r\n this.statusFilter = '';\r\n }\r\n\r\n getStudentLists() {\r\n // POST: obtains the student lists from the server\r\n this.studentListsService.getStudentLists(\r\n false,\r\n this.searchCriteria.schoolId ? parseInt(this.searchCriteria.schoolId, 10) : this.yearService.defaultYear.SchoolID\r\n ).pipe(take(1)).subscribe(studentLists => {\r\n if (studentLists) {\r\n this.studentLists = studentLists.filter(o => o.Status == true).sort((a, b) =>\r\n a.Name.localeCompare(b.Name)\r\n );\r\n\r\n // Check for a student list in the session\r\n if (this.studentSearchService.searchCriteria) {\r\n if (this.studentSearchService.searchCriteria.listId) {\r\n this.studentList = this.studentLists.find(sl => sl.ID == this.studentSearchService.searchCriteria.listId);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n getStudents() {\r\n // Check if the homeroom teacher column is active\r\n this.defaultColumns.forEach(c => {\r\n if (c.name === 'Homeroom Teacher') {\r\n this.searchCriteria.getStudentHomerooms = c.active;\r\n }\r\n });\r\n this.subscriptions.push(\r\n this.studentSearchService.getStudentsBySearchCriteria(\r\n this.searchCriteria\r\n ).subscribe(\r\n data => {\r\n this.studentSearchCalled = true;\r\n this.originalStudentSearchData = JSON.parse(JSON.stringify(data));\r\n const studentData = data as StudentSearchModel[];\r\n this.studentSearchData = [];\r\n this.studentIds = [];\r\n // Convert the StudentSearchDTO to a student object\r\n for (let i = 0; i < studentData.length; i++) {\r\n const student = new Student();\r\n student.Id = studentData[i].StudentId;\r\n student.Grade = studentData[i].Grade;\r\n student.EnrollmentId = studentData[i].EnrollmentId;\r\n student.Enrollment = studentData[i].Enrollment;\r\n student.EnrollmentSchool = studentData[i].EnrollmentSchool;\r\n student.EnrollmentDate = moment(studentData[i].EnrollmentDate).format('MM/DD/YY');\r\n student.EnrollmentDateAsDate = new Date(studentData[i].EnrollmentDate);\r\n student.EnrollmentStatus = studentData[i].EnrollmentStatus;\r\n student.StudentNumber = studentData[i].StudentNumber;\r\n student.LastName = studentData[i].LastName;\r\n student.FirstName = studentData[i].FirstName;\r\n student.MiddleName = studentData[i].MiddleName;\r\n student.NickName = studentData[i].NickName;\r\n student.DateOfBirth = moment(studentData[i].DOB).format('MM/DD/YY');\r\n student.DateOfBirthAsDate = new Date(studentData[i].DOB);\r\n student.IEP = studentData[i].IEP;\r\n student.StudentAlerts = studentData[i].StudentAlerts;\r\n student.isSelected = false;\r\n student.HomeRoom_Class = studentData[i].HomeRoom_Class;\r\n student.Homeroom_CourseSection = studentData[i].Homeroom_CourseSection;\r\n student.Homeroom_Teacher = studentData[i].Homeroom_Teacher;\r\n student.StudentDOENumber = (studentData[i].State_ID != null) ? studentData[i].State_ID : '';\r\n // Add the ID to the list of studentIds\r\n this.studentIds.push(studentData[i].StudentId);\r\n\r\n if (this.userPreferencesService.generalPreferences != null && this.userPreferencesService.generalPreferences.ShowNickname && student.NickName != null && student.NickName != '') {\r\n student.FirstName = student.FirstName + ' \\\"' + student.NickName + '\\\"';\r\n }\r\n\r\n // Marking it as selected if it is in our selected students\r\n for (let j = 0; j < this.selectedStudents.length; j++) {\r\n if (student.Id == this.selectedStudents[j].Id) {\r\n this.selectedStudents[j] = student;\r\n }\r\n }\r\n\r\n // Add the student to the data grid\r\n this.studentSearchData.push(student);\r\n }\r\n this.studentGridData = this.studentSearchData;\r\n this.dataSource.data = this.studentGridData;\r\n if (!this.searchCriteriaLoaded) {\r\n this.updateSearchCriteria();\r\n }\r\n // If we have a list of selected students (passed in), mark them as selected\r\n if (this.selectedStudents.length > 0) {\r\n this.selectedStudents.forEach(s => {\r\n const studentObject = this.studentSearchData.find(o => Number(o.StudentNumber) == Number(s.StudentNumber));\r\n if (studentObject) {\r\n if (this.isV10) {\r\n Object.assign(s, studentObject);\r\n }\r\n studentObject.isSelected = true;\r\n }\r\n });\r\n }\r\n this.selectCheckBoxChange();\r\n this.processFilters();\r\n }, err => {\r\n // Error Getting Students\r\n console.log(err);\r\n }\r\n )\r\n );\r\n }\r\n\r\n getStudentSearchPreferences() {\r\n this.subscriptions.push(\r\n this.studentSearchService.getUserPreferences(0, '/studentSearchGrid').subscribe(data => {\r\n const studentSearchPreferences = JSON.parse(data[0]);\r\n // Make sure the user is using the latest version of settings\r\n if (studentSearchPreferences.hasOwnProperty('columnSettings')) {\r\n if (studentSearchPreferences.columnSettings.length == this.defaultColumns.length) {\r\n this.defaultColumns = studentSearchPreferences.columnSettings;\r\n this.setMatHeader();\r\n } else {\r\n this.saveStudentSearchPreferences();\r\n }\r\n } else {\r\n this.saveStudentSearchPreferences();\r\n }\r\n if (this.prepopulateStudentSearch) {\r\n this.getStudents();\r\n }\r\n })\r\n );\r\n }\r\n\r\n keyDownFunction(event) {\r\n if (event.keyCode == 13) {\r\n this.searchClick();\r\n }\r\n }\r\n\r\n menuClick() {\r\n // Do something when the menu is clicked\r\n }\r\n\r\n route() {\r\n if (this.redirectUrl != null && this.redirectUrl != '') {\r\n this.router.navigateByUrl(this.redirectUrl);\r\n\r\n const url = this.redirectUrl.toLowerCase().replace('?studentportal=true', '');\r\n if (this.classroom360Service.staffAssignedPortals.filter(o => (o.ParentModule + o.PortalDescription).toLowerCase() == url).length == 0) {\r\n setTimeout(() => {\r\n this.classroom360Service.updateStaffAssignedPortals(this.classroom360Service.staffAssignedPortals);\r\n }, 100);\r\n }\r\n } else if ((!this.sharedService.currentPortal || !this.sharedService.currentPortal.applyFilterStudents)) {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onSelectionChanged(event, rowData) {\r\n // Helper Functions\r\n const returnSingleStudent = () => {\r\n // POST: returns the single selected student\r\n this.inputBuffer = true;\r\n if (!this.referral) {\r\n this.saveStudentSearchPreferences();\r\n }\r\n const selectedStudent = rowData;\r\n if (this.userPreferencesService.generalPreferences != null && this.userPreferencesService.generalPreferences.ShowNickname) {\r\n const student = this.originalStudentSearchData.find(o => o.StudentId == selectedStudent.Id);\r\n if (student != null) {\r\n selectedStudent.FirstName = student.FirstName;\r\n }\r\n }\r\n this.dialogRef.close(selectedStudent);\r\n setTimeout(() => {\r\n this.inputBuffer = false;\r\n }, 1000);\r\n };\r\n const setStudentsToAllStudents = (callBack?: Function) => {\r\n // PRE: a callback function if you need to do processing after\r\n // POST: sets the selected students to all the students in the list, then performs the callback\r\n const selectedStudent: Student = rowData;\r\n const selectedStudents = [];\r\n for (let i = 0; i < this.dataSource.data.length; i++) {\r\n if (this.userPreferencesService.generalPreferences != null && this.userPreferencesService.generalPreferences.ShowNickname && this.dataSource.data[i].NickName != null && this.dataSource.data[i].NickName != '') {\r\n const student = this.originalStudentSearchData.filter(o => o.StudentId == this.dataSource.data[i].Id)[0];\r\n if (student != null) {\r\n this.dataSource.data[i].FirstName = student.FirstName;\r\n }\r\n }\r\n selectedStudents.push(this.dataSource.data[i]);\r\n }\r\n this.subscriptions.push(\r\n this.studentService.getStudent(selectedStudent.Id).subscribe(student => {\r\n const studentIndex = selectedStudents.findIndex(x => x.Id == student.Id);\r\n // Grade is NULL in getStudent Method. ONE-10790 #2\r\n student.Grade = selectedStudents[studentIndex].Grade;\r\n\r\n // Using the callback\r\n if (callBack) {\r\n callBack(selectedStudents, studentIndex);\r\n }\r\n\r\n // Updating the student\r\n selectedStudents[studentIndex] = student;\r\n this.studentService.updateStudents(selectedStudents, studentIndex);\r\n })\r\n );\r\n };\r\n\r\n // Making sure the event's row is set\r\n event.row = rowData;\r\n\r\n // Handling the click event\r\n if (event.type == 'click') {\r\n this.saveSearchCriteria();\r\n if (this.searchAndSelect) {\r\n // other search and select logic here\r\n if (rowData != undefined) {\r\n rowData.isSelected = !rowData.isSelected;\r\n // Manage the selected student list\r\n if (rowData.isSelected) {\r\n this.selectedStudents.push(rowData);\r\n } else {\r\n this.selectedStudents = this.selectedStudents.filter(s => s.Id !== rowData.Id);\r\n }\r\n\r\n // ############\r\n if (this.dataSource.sort.direction == 'asc') {\r\n this.selectedStudents = _.orderBy(this.selectedStudents, [this.dataSource.sort.active], ['asc']);\r\n }\r\n if (this.dataSource.sort.direction == 'desc') {\r\n this.selectedStudents = _.orderBy(this.selectedStudents, [this.dataSource.sort.active], ['desc']);\r\n }\r\n // ############\r\n\r\n // check the selection\r\n this.selectCheckBoxChange();\r\n }\r\n } else if (this.returnSingle) {\r\n if (rowData != undefined) {\r\n // inputBuffer prevents user double clicking and calling saveStudentSearchPreferences() twice\r\n if (!this.inputBuffer) {\r\n returnSingleStudent();\r\n }\r\n }\r\n } else if (this.returnAll) {\r\n if (rowData != undefined) {\r\n // inputBuffer prevents user double clicking and calling saveStudentSearchPreferences() twice\r\n if (!this.inputBuffer) {\r\n\r\n // Selecting out all the students\r\n setStudentsToAllStudents(() => {\r\n\r\n // Returning the selected student\r\n returnSingleStudent();\r\n });\r\n }\r\n }\r\n } else {\r\n this.saveStudentSearchPreferences();\r\n if (rowData != undefined && this.userPreferencesService.generalPreferences != null && this.userPreferencesService.generalPreferences.ShowNickname) {\r\n const student = this.originalStudentSearchData.find(o => o.StudentId == rowData.Id);\r\n if (student != null) {\r\n rowData.FirstName = student.FirstName;\r\n }\r\n }\r\n this.clickHandler(event);\r\n if (this.performRoute) {\r\n setStudentsToAllStudents(() => {\r\n\r\n // Waiting for portal changes before routing\r\n // TODO: fix hacky solution #Justin\r\n let numHits = 0;\r\n const subscription = this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(() => {\r\n numHits += 1;\r\n if (numHits == 2) {\r\n this.route();\r\n subscription.unsubscribe();\r\n }\r\n });\r\n });\r\n } else {\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n startOverClick() {\r\n this.errors = [];\r\n this.restoreDefaultsClick();\r\n this.studentSearchService.filterCriteria = undefined;\r\n this.studentSearchService.unsavedStudentFilter = false;\r\n this.searchCriteria = new StudentSearchCriteria(\r\n this.yearService.defaultYear.Id,\r\n '',\r\n '',\r\n '',\r\n this.data && this.data.schoolId ? this.data.schoolId.toString() : this.yearService.defaultYear.SchoolID.toString(),\r\n 'Active',\r\n );\r\n this.activeFilters = [];\r\n this.currentQuery = undefined;\r\n this.studentList = undefined;\r\n this.selectedStudents = [];\r\n this.allStudentsSelected = false;\r\n this.clearFilters();\r\n this.studentSearchData = [];\r\n this.studentGridData = [];\r\n this.dataSource.data = this.studentGridData;\r\n if (this.prepopulateStudentSearch) {\r\n this.getStudents();\r\n }\r\n }\r\n\r\n restoreDefaultsClick() {\r\n // reset the visible state on the default columns array\r\n this.defaultColumns = [\r\n { name: 'Student #', active: true, regEx: 'startsWith' },\r\n { name: 'First Name', active: true, regEx: 'startsWith' },\r\n { name: 'Last Name', active: true, regEx: 'startsWith' },\r\n { name: 'Alerts', active: true, regEx: 'startsWith' },\r\n { name: 'Grade', active: true, regEx: 'startsWith' },\r\n { name: 'Enrollment', active: true, regEx: 'startsWith' },\r\n { name: 'Enroll Date', active: true, regEx: 'startsWith' },\r\n { name: 'DOB', active: true, regEx: 'startsWith' },\r\n { name: 'School', active: true, regEx: 'startsWith' },\r\n { name: 'Status', active: true, regEx: 'startsWith' },\r\n { name: 'Homeroom Teacher', active: false, regEx: 'startsWith' },\r\n { name: 'State ID', active: false, regEx: 'startsWith' },\r\n ];\r\n this.setMatHeader();\r\n }\r\n\r\n setMatHeader() {\r\n this.defaultColumns.forEach(dc => {\r\n this.defaultMatTableColumns.forEach(dmc => {\r\n if (dc.name == dmc.name) {\r\n dmc.active = dc.active;\r\n }\r\n });\r\n });\r\n if (this.searchAndSelect) {\r\n this.columnsToDisplay = ['SelectAll'];\r\n }\r\n else {\r\n this.columnsToDisplay = [];\r\n }\r\n for (let i = 0; i < this.defaultMatTableColumns.length; i++) {\r\n if (this.defaultMatTableColumns[i].active == true && (this.defaultMatTableColumns[i].name != 'Alerts' || this.showStudentAlerts == true)) {\r\n this.columnsToDisplay.push(this.defaultMatTableColumns[i].MatTableColumn);\r\n }\r\n }\r\n }\r\n\r\n saveStudentSearchPreferences() {\r\n const prefs = new StudentSearchPreferences();\r\n prefs.columnSettings = this.defaultColumns;\r\n const xmlStream = [];\r\n xmlStream.push(JSON.stringify(prefs));\r\n // NOTE: we unsubscribe imperatively here to prevent it from being cancelled preemptively\r\n const subscription = this.studentSearchService.saveUserPreferences(0, '/studentSearchGrid', xmlStream).subscribe(\r\n data => {\r\n subscription.unsubscribe();\r\n },\r\n err => {\r\n console.log(err);\r\n subscription.unsubscribe();\r\n }\r\n );\r\n }\r\n\r\n searchClick() {\r\n this.saveSearchCriteria();\r\n if (this._currentQuery.filterFields.length > 0) {\r\n const schoolIds = '';\r\n // this.yearService.schools.forEach(school => {\r\n // if (school.SchoolName == this.dataQueryService.studentSearchFilters.ddlSchool || this.dataQueryService.studentSearchFilters.ddlSchool == '') {\r\n // schoolIds = schoolIds + (schoolIds == '' ? school.Id.toString() : ',' + school.Id.toString());\r\n // }\r\n // })\r\n\r\n this.dataQueryService.getResults(\r\n false,\r\n (results: DataQueryResult) => {\r\n this.processStudentFilterResults(results);\r\n },\r\n () => {\r\n },\r\n true,\r\n true,\r\n schoolIds\r\n );\r\n } else {\r\n this.getStudents();\r\n this.allStudentsSelected = false;\r\n }\r\n }\r\n\r\n selectClick() {\r\n this.errors = [];\r\n if (this.returnSelectedStudents) {\r\n if ((this.selectedStudents != null && this.selectedStudents.length > 0) || this.checkErrorForStudents == false) {\r\n if (this.userPreferencesService.generalPreferences != null && this.userPreferencesService.generalPreferences.ShowNickname) {\r\n this.selectedStudents.forEach(obj => {\r\n const student = this.originalStudentSearchData.find(o => o.StudentId == obj.Id);\r\n if (student != null) {\r\n obj.FirstName = student.FirstName;\r\n }\r\n });\r\n }\r\n this.dialogRef.close(this.selectedStudents);\r\n } else {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected in order to use this option.'\r\n });\r\n }\r\n } else {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n selectedSchoolChanged(event) {\r\n this.searchCriteria.schoolId = event.value;\r\n this.getStudentLists();\r\n }\r\n\r\n selectedStatusChanged(event) {\r\n this.searchCriteria.status = event.value;\r\n }\r\n\r\n studentFilterChange(event) {\r\n // Check if the user selected none in the student filter dropdown\r\n if (event.value == null) { // none\r\n // if so reset the unsavedStudentFilter\r\n this.studentSearchService.unsavedStudentFilter = false;\r\n }\r\n this.clearColumnFilters();\r\n }\r\n\r\n clearColumnFilters() {\r\n this.activeFilters = [];\r\n this.studentNumberFilter = undefined;\r\n this.firstNameFilter = undefined;\r\n this.lastNameFilter = undefined;\r\n this.gradeFilter = undefined;\r\n this.enrollmentFilter = undefined;\r\n this.enrollDateFilter = undefined;\r\n this.dateOfBirthFilter = undefined;\r\n this.schoolFilter = undefined;\r\n this.statusFilter = undefined;\r\n }\r\n\r\n studentFiltersClick() {\r\n // PRE: the student filter's button is clicked\r\n // POST: opens the student filter dialog. When closed with results, displays those results on the grid\r\n if (this.searchCriteria.schoolId) {\r\n const school = this.schools.find(s => s.Id.toString() == this.searchCriteria.schoolId);\r\n this.dataQueryService.studentSearchFilters.ddlSchool = school ? school.SchoolName : '';\r\n }\r\n this.dataQueryService.studentSearchFilters.rbStatus = this.searchCriteria.status;\r\n const dialogBox = this.dialog.open(AdvancedStudentSearchComponent, {\r\n disableClose: true,\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n width: '100%',\r\n height: '100%',\r\n data: {\r\n initialStudentNumber: this.studentNumberFilter,\r\n initialFirstName: this.firstNameFilter,\r\n initialLastName: this.lastNameFilter,\r\n initialGrade: this.gradeFilter,\r\n initialEnrollment: this.enrollmentFilter,\r\n initialEnrollDate: this.enrollDateFilter,\r\n initialDOB: this.dateOfBirthFilter,\r\n initialSchool: this.schoolFilter,\r\n initialStatus: this.statusFilter\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe((results: DataQueryResult) => {\r\n if (results) {\r\n this.studentSearchService.unsavedStudentFilter = !this.currentQuery.QueryName;\r\n this.selectedStudents = [];\r\n this.clearColumnFilters();\r\n this.processStudentFilterResults(results);\r\n }\r\n })\r\n );\r\n }\r\n\r\n processStudentFilterResults(results: DataQueryResult) {\r\n // PRE: a set of results obtained by student filter\r\n // POST: composes students from those results and updates the displayed data\r\n if (!results) {\r\n return;\r\n }\r\n const newData: Student[] = [];\r\n // eslint-disable-next-line complexity\r\n results.Data.forEach(datum => {\r\n const newStudent = new Student();\r\n for (let i = 0; i < results.ColumnHeaders.length; i++) {\r\n switch (results.ColumnHeaders[i]) {\r\n case 'Student Number':\r\n case 'Student #':\r\n case 'StudentNumber':\r\n case 'Student ID':\r\n newStudent.StudentNumber = datum[i];\r\n break;\r\n case 'StudentId':\r\n case 'lngStudentId':\r\n case 'Student_ID':\r\n newStudent.Id = parseInt(datum[i], 10);\r\n break;\r\n case 'First Name':\r\n case 'FirstName':\r\n case 'Name - First':\r\n newStudent.FirstName = datum[i];\r\n break;\r\n case 'Last Name':\r\n case 'LastName':\r\n case 'Name - Last':\r\n newStudent.LastName = datum[i];\r\n break;\r\n case 'Grade':\r\n case 'Grade Level':\r\n newStudent.Grade = datum[i];\r\n break;\r\n case 'School':\r\n case 'School Name':\r\n case 'Primary Enrollment Site Name':\r\n newStudent.EnrollmentSchool = datum[i];\r\n break;\r\n case 'Enrollment Date':\r\n case 'Entry Date':\r\n newStudent.EnrollmentDate = datum[i];\r\n break;\r\n case 'Status':\r\n case 'Enrollment Status':\r\n newStudent.EnrollmentStatus = datum[i];\r\n break;\r\n case 'DOB':\r\n case 'Date of Birth':\r\n case 'Birth Date':\r\n newStudent.DateOfBirth = datum[i];\r\n break;\r\n case 'Primary':\r\n switch (datum[i]) {\r\n case '1':\r\n newStudent.Enrollment = 'Primary';\r\n break;\r\n case '2':\r\n newStudent.Enrollment = 'Additional';\r\n break;\r\n default:\r\n newStudent.Enrollment = datum[i];\r\n break;\r\n }\r\n }\r\n }\r\n newData.push(newStudent);\r\n });\r\n newData.forEach(s => {\r\n if (s.EnrollmentDate) {\r\n s.EnrollmentDateAsDate = new Date(s.EnrollmentDate);\r\n }\r\n if (s.DateOfBirth) {\r\n s.DateOfBirthAsDate = new Date(s.DateOfBirth);\r\n }\r\n });\r\n this.studentSearchData = newData;\r\n if (this.selectedStudents.length > 0) {\r\n this.selectedStudents.forEach(s => {\r\n const studentObject = this.studentSearchData.find(o => Number(o.Id) == Number(s.Id));\r\n if (studentObject) {\r\n studentObject.isSelected = true;\r\n }\r\n });\r\n this.selectedStudents = [];\r\n this.selectedStudents = newData.filter(x => x.isSelected == true);\r\n }\r\n this.updateFilter();\r\n }\r\n\r\n updateFilter(val?, column?) {\r\n // UPDATING FILTER FOR DATA QUERY\r\n if (column) {\r\n this.dataQueryService.studentSearchFilters[column.prop] = column.searchCriteria;\r\n // Set the regEx for the column\r\n column.regEx = this.defaultColumns.find(c => c.name == column.name).regEx;\r\n }\r\n\r\n // Updating the filter value at the specified column\r\n if (val != undefined && val != null && column != undefined && column != null) {\r\n val = val.toLowerCase();\r\n if (this.activeFilters.find(col => col.name == column.prop)) {\r\n const index = this.activeFilters.map(function (x) {\r\n return x.name;\r\n }).indexOf(column.prop);\r\n if (val == '') {\r\n this.activeFilters.splice(index, 1);\r\n } else {\r\n this.activeFilters[index].filter = val;\r\n this.activeFilters[index].regEx = column.regEx;\r\n }\r\n } else {\r\n if (val != '') {\r\n const colFilter = { name: column.prop, filter: val, regEx: column.regEx };\r\n this.activeFilters.push(colFilter);\r\n }\r\n }\r\n }\r\n // Reset the data source\r\n // NOTE: uses the student list if one is provided\r\n this.studentGridData = this.studentSearchData;\r\n if (this.activeFilters.length > 0 && column) {\r\n // loop through and filter\r\n for (let i = 0; i < this.activeFilters.length; i++) {\r\n const regEx = RegexDirective.RegExBuilder(this.activeFilters[i].filter, column.regEx);\r\n this.studentGridData = this.studentGridData.filter(data => {\r\n return data[this.activeFilters[i].name].toString().toLowerCase().match(regEx);\r\n });\r\n }\r\n }\r\n this.dataSource.data = this.studentGridData;\r\n // Check the select box\r\n this.selectCheckBoxChange();\r\n }\r\n\r\n updateRegEx(column, newRegexValue?) {\r\n // Find the filter in the active filters and update it\r\n const gridData = _.cloneDeep(this.studentSearchData);\r\n // Find the column\r\n const col = this.defaultColumns.find(c => c.name.replace(/\\s+/g, '') == column.name.replace(/\\s+/g, ''));\r\n // Update the regEx value\r\n col.regEx = newRegexValue;\r\n setTimeout(() => {\r\n if (this.activeFilters.length > 0) {\r\n // loop through and filter\r\n for (let i = 0; i < this.activeFilters.length; i++) {\r\n const regEx = RegexDirective.RegExBuilder(this.activeFilters[i].filter, col.regEx);\r\n this.studentGridData = gridData.filter(data => {\r\n return data[this.activeFilters[i].name].toString().toLowerCase().match(regEx);\r\n });\r\n this.dataSource.data = this.studentGridData;\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n updateSearchCriteria() {\r\n if (this.searchCriteria != undefined) {\r\n }\r\n this.searchCriteriaLoaded = true;\r\n }\r\n\r\n lastSelectedStudentClick(lastSelectedStudent: Student) {\r\n this.studentService.students = this.studentService.recentStudents;\r\n this.studentService.updateSelectedStudent(lastSelectedStudent.Id);\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n if (this.redirectUrl != null && this.redirectUrl != '') {\r\n this.router.navigateByUrl(this.redirectUrl);\r\n } else {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n this.dialogRef.close();\r\n })\r\n );\r\n }\r\n\r\n createStudentList() {\r\n // POST: creates a student list\r\n // if this is student search and select, uses the selected students\r\n // if this is not student search and select, uses the visible students\r\n let students: Student[];\r\n if (this.searchAndSelect) {\r\n students = this.selectedStudents;\r\n } else {\r\n // students = this.studentGridData;\r\n students = this.dataSource.filteredData;\r\n }\r\n const dialogBox = this.dialog.open(AddEditStudentListDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n students: students,\r\n addMode: true,\r\n editMode: false,\r\n disableStudents: true\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(studentList => {\r\n if (studentList) {\r\n this.studentLists.push(studentList);\r\n this.studentLists = this.studentLists.sort((a, b) =>\r\n a.Name.localeCompare(b.Name)\r\n );\r\n this.studentSearchService.addStudentListEvent.emit(studentList);\r\n }\r\n })\r\n );\r\n }\r\n\r\n showSelectedStudents() {\r\n if (this.selectedStudents.length > 0) {\r\n this.displaySelectedStudentsModal(this.selectedStudents);\r\n }\r\n }\r\n\r\n massEmail() {\r\n const massEmail = new MassEmail();\r\n massEmail.ReferringPage = 'Student Search';\r\n if (this.searchAndSelect) {\r\n massEmail.StudentIds = this.selectedStudents.map(student => student.Id);\r\n } else {\r\n massEmail.StudentIds = this.dataSource.filteredData.map((student: Student) => student.Id);\r\n }\r\n this.dialog.open(MassEmailViewComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '100vw',\r\n height: '100vh',\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n disableClose: true,\r\n data: {\r\n massEmail: massEmail\r\n },\r\n });\r\n }\r\n\r\n displaySelectedStudentsModal(students) {\r\n this.dialog.open(StudentListModalComponent, {\r\n minWidth: '60%',\r\n minHeight: '50%',\r\n maxHeight: '65%',\r\n autoFocus: false,\r\n disableClose: true,\r\n data: students\r\n }).afterClosed().subscribe(message => {\r\n if (message == 'ClearStudents') {\r\n this.selectedStudents = [];\r\n if (this.data.selectedStudents) {\r\n this.data.selectedStudents = [];\r\n }\r\n this.studentGridData.forEach(s => {\r\n s.isSelected = false;\r\n });\r\n this.dataSource.data = this.studentGridData;\r\n }\r\n });\r\n }\r\n\r\n private sortSchools() {\r\n this.schools = this.schools.sort(function (a, b) {\r\n if (a.SchoolName < b.SchoolName) {\r\n return -1;\r\n }\r\n if (a.SchoolName > b.SchoolName) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n private setPreferences() {\r\n if (this.userPreferencesService.generalPreferences != null) {\r\n this.defaultCursorPosition = this.userPreferencesService.generalPreferences.DefaultCursorPosition;\r\n this.showStudentAlerts = this.userPreferencesService.generalPreferences.ShowStudentAlerts;\r\n this.prepopulateStudentSearch = this.userPreferencesService.generalPreferences.PrepopulateStudent;\r\n } else {\r\n this.defaultCursorPosition = 1;\r\n this.showStudentAlerts = false;\r\n this.prepopulateStudentSearch = true;\r\n }\r\n }\r\n\r\n private getSearchCriteria() {\r\n this.searchCriteria = this.studentSearchService.getSearchCriteria();\r\n if (!this.searchCriteria) {\r\n this.searchCriteria = new StudentSearchCriteria(\r\n this.yearService.defaultYear.Id,\r\n '',\r\n '',\r\n '',\r\n this.yearService.defaultYear.SchoolID.toString(),\r\n 'Active'\r\n );\r\n }\r\n }\r\n\r\n selectAllCheckBoxChange() {\r\n // ---ONE-ONE-10914----\r\n this.dataSource.filteredData.forEach(s => {\r\n s.isSelected = this.allStudentsSelected;\r\n });\r\n this.selectedStudents = [];\r\n // Add to the selected student list\r\n this.dataSource.filteredData.forEach(s => {\r\n if (s.isSelected) {\r\n if (this.selectedStudents.indexOf(s) == -1) {\r\n this.selectedStudents.push(s);\r\n }\r\n } else {\r\n this.selectedStudents = this.selectedStudents.filter(stu => stu.Id !== s.Id);\r\n }\r\n });\r\n\r\n // ############\r\n if (this.dataSource.sort.direction == 'asc') {\r\n this.selectedStudents = _.orderBy(this.selectedStudents, [this.dataSource.sort.active], ['asc']);\r\n }\r\n if (this.dataSource.sort.direction == 'desc') {\r\n this.selectedStudents = _.orderBy(this.selectedStudents, [this.dataSource.sort.active], ['desc']);\r\n }\r\n // ############\r\n }\r\n\r\n selectCheckBoxChange() {\r\n if (this.studentGridData.filter(s => s.isSelected == true).length == this.studentGridData.length) {\r\n this.allStudentsSelected = true;\r\n } else {\r\n this.allStudentsSelected = false;\r\n }\r\n }\r\n\r\n showColumn(columnName: string) {\r\n return this.defaultColumns.find(s => s.name == columnName).active;\r\n }\r\n\r\n getRegEx(columnName: string, regExValue?: string) {\r\n const col = this.defaultColumns.find(c => c.name == columnName);\r\n const reg = this.regularExpressions.find(r => r.value == col.regEx);\r\n if (reg) {\r\n return reg.value == regExValue;\r\n }\r\n }\r\n\r\n getRowClass = (row) => {\r\n if (row.isSelected) {\r\n return 'selected-row';\r\n }\r\n }\r\n\r\n validateStudentNumberKey(event: KeyboardEvent) {\r\n // PRE: a key is entered into the csv\r\n // POST: ensures that it matches the format\r\n if (!this.studentNumberKeyRestriction.test(event.key) &&\r\n event.key != 'Backspace' &&\r\n event.key != 'Tab') {\r\n event.preventDefault();\r\n return false;\r\n }\r\n }\r\n\r\n processFilters() {\r\n const gridData = _.cloneDeep(this.studentSearchData);\r\n setTimeout(() => {\r\n if (this.activeFilters.length > 0) {\r\n // loop through and filter\r\n for (let i = 0; i < this.activeFilters.length; i++) {\r\n const regEx = RegexDirective.RegExBuilder(this.activeFilters[i].filter, this.activeFilters[i].regEx);\r\n if (i == 0) {\r\n this.studentGridData = gridData.filter(data => {\r\n return data[this.activeFilters[i].name].toString().toLowerCase().match(regEx);\r\n });\r\n }\r\n else {\r\n this.studentGridData = this.studentGridData.filter(data => {\r\n return data[this.activeFilters[i].name].toString().toLowerCase().match(regEx);\r\n });\r\n }\r\n this.dataSource.data = this.studentGridData;\r\n }\r\n }\r\n }, 1);\r\n }\r\n\r\n private compareByDate(a, b): number {\r\n a = moment(a, 'MM/DD/YY');\r\n b = moment(b, 'MM/DD/YY');\r\n if (a < b) {\r\n return -1;\r\n } else if (b < a) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n clearFilter() {\r\n this.dataSource.removeAllFilters();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\nimport { Alerts } from '../student/student.model';\r\nimport { System } from '../System';\r\nimport { YearService } from '../year/year.service';\r\nimport { StudentSearchModel, StudentSearchAllYears } from './student-search-model';\r\nimport {StudentSearchCriteria} from './student-search-criteria.model';\r\n\r\n@Injectable()\r\nexport class StudentSearchService {\r\n filterCriteria: any[]; // Stores the inputs from the header columns of the grid.\r\n private _SearchCriteria: StudentSearchCriteria; // Stores the inputs from the top of the student search\r\n addStudentListEvent = new EventEmitter();\r\n unsavedStudentFilter = false; // This is used when creating a filter and selecting continue without saving.\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService) {\r\n }\r\n\r\n get searchCriteria() {\r\n return this._SearchCriteria;\r\n }\r\n\r\n set searchCriteria(searchCriteria: StudentSearchCriteria) {\r\n this._SearchCriteria = searchCriteria;\r\n }\r\n\r\n getStudentsBySearchCriteria(searchCriteria: StudentSearchCriteria): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetStudentsBySearchCriteria', searchCriteria);\r\n }\r\n\r\n getStudentsAllYears(firstName: string, lastName: string, studentNumber: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetStudentsAllYears?firstName=${firstName}&lastName=${lastName}&studentNumber=${studentNumber}`, {observe : 'response'});\r\n }\r\n\r\n getAlerts(studentIds: number[], yearId: number, schoolId: number, currentDate) {\r\n return this.http.post(System.apiURL.Student + `GetStudentAlerts?yearId=${yearId}&schoolId=${schoolId}¤tDate=${currentDate}`, studentIds);\r\n }\r\n\r\n getUserPreferences(studentId, pageURL, subjectListId?, subjectSection?, isDefaultPreferences?): Observable {\r\n return this.http.get(System.apiURL.Student + `GetUserPreferences?studentId=${studentId}&pageURL=${pageURL}&subjectListId=${subjectListId}&subjectSection=${subjectSection}&isDefaultPreferences=${isDefaultPreferences}`);\r\n }\r\n\r\n saveUserPreferences(studentId, pageURL, data, subjectListId?, subjectSection?, isDefaultPreferences?) {\r\n return this.http.post(System.apiURL.Student + `SaveUserPreferences?studentId=${studentId}&pageURL=${pageURL}&subjectListId=${subjectListId}&subjectSection=${subjectSection}&isDefaultPreferences=${isDefaultPreferences}`, data);\r\n }\r\n\r\n saveFilterCriteria(searchFields) {\r\n this.filterCriteria = searchFields;\r\n }\r\n\r\n getSearchCriteria() {\r\n return this.searchCriteria;\r\n }\r\n\r\n resetSearchCriteria() {\r\n this.searchCriteria = new StudentSearchCriteria(\r\n this.yearService.defaultYear.Id,\r\n '',\r\n '',\r\n '',\r\n this.yearService.defaultYear.SchoolID.toString(),\r\n 'Active'\r\n );\r\n }\r\n}\r\n","export class AcademicHistorySummary {\r\n Id: number;\r\n WeightedGPA: number;\r\n UnWeightedGPA: number;\r\n ClassRankIn: number;\r\n ClassRankOut: number;\r\n V9Flag: boolean;\r\n CalculatedOn: Date;\r\n CalculatedBy: string;\r\n RankCalculatedOn: Date;\r\n RankCalculatedBy: string;\r\n RankOutdated: boolean;\r\n S360ClassRank: boolean;\r\n}","import { CategoryAverage, ReportCardGradesStandards, ReportCardGradesTerm } from '../../student360/grades/grades.model';\r\nimport { Profile } from '../profile-table/profile.model';\r\nimport { System } from '../System';\r\nimport { AttendanceDetails } from './attendance-details.model';\r\nimport { CourseTerm } from './course-term.model';\r\nimport { Enrollment } from './enrollment.model';\r\n\r\nexport class CourseSchedule {\r\n\r\n\t// Properties\r\n\t// int MaxPeriod: static;\r\n\tId: number;\r\n\tSchoolId: number;\r\n\tSiteYearId: number;\r\n\tSiteSectionId: number;\r\n\tSiteSectionIds: number[];\r\n\tMeets: string;\r\n\tDropped: string;\r\n\tTerm: string;\r\n\tCourse: string;\r\n\tAbbreviatedTitle: string;\r\n\tTeacher: string;\r\n\tTeacherEmail: string;\r\n\tTeacherName: string;\r\n\tTeacherMemId: number;\r\n\tRoom: string;\r\n\tUsedForGrading: boolean;\r\n\tSubjectCode: string;\r\n\tSection: string;\r\n\tStartEndTime: string;\r\n\tSchoolName: string;\r\n\tSchoolCode: string;\r\n\tTeacherId: number;\r\n\tSubjectTermType: string;\r\n\tStartPeriod: number;\r\n\tConsecutivePeriod: number;\r\n\tAbsences: number;\r\n\tTardies: number;\r\n\tAttendanceDetails: AttendanceDetails[];\r\n\tCalendarAssignments: any[];\r\n\tCourseTerms: CourseTerm[];\r\n\tReportCardGradesTerms: ReportCardGradesTerm[];\r\n\tReportCardGradesStandards: ReportCardGradesStandards[];\r\n\tCreditEarned: number;\r\n\tCreditAttempted: number;\r\n\tShowTraditionalTab: boolean;\r\n\tShowStandardTab: boolean;\r\n\tCurriculum: string;\r\n\tDescription: string;\r\n\tIsCurrentLocation: boolean;\r\n\tIsHomeRoom: boolean;\r\n\tCourseProfile: Profile[];\r\n\tTeacherProfile: Profile[];\r\n\tStaffPicture: any[];\r\n\tCourseStartDate: Date = null;\r\n\tCourseEndDate: Date = null;\r\n\tDisplayDroppedClasses: boolean;\r\n\tEntryDate: Date = null;\r\n\tWithdrawalDate: Date = null;\r\n\tDroppedDate: Date = null;\r\n\tGradingCycle: string;\r\n\tPeriodDayCode: string;\r\n\tShowOnGradesPage: boolean;\r\n\tTeamCode: string;\r\n\tCategoryAverages: CategoryAverage[];\r\n\tCategoriesTerms: any;\r\n\tAttendanceType: string;\r\n\tHasClassProfile: boolean;\r\n\tHasTeacherProfile: boolean;\r\n\tCourseSection: string;\r\n\r\n\t// Local Properties\r\n\tprivate _showSchool: { [key: number]: boolean } = {};\r\n\tprivate _entryDate: Date;\r\n\tprivate _droppedDate: Date;\r\n\tTempReportCardGradesTerms: ReportCardGradesTerm[];\r\n\r\n\t// Methods\r\n\tgetShowSchool(studentEnrollment: Enrollment): boolean {\r\n\t\t// POST: determines if the school should be shown with the name\r\n\r\n\t\t// If no student enrollment is supplied, always return false\r\n\t\tif (!studentEnrollment) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Checking if we've set this one yet\r\n\t\tif (this._showSchool[studentEnrollment.Id] == undefined) {\r\n\t\t\tthis._showSchool[studentEnrollment.Id] = studentEnrollment.SchoolName &&\r\n\t\t\t\tthis.SchoolName &&\r\n\t\t\t\tstudentEnrollment.SchoolName.trim().toUpperCase() != this.SchoolName.trim().toUpperCase();\r\n\t\t}\r\n\r\n\t\t// Returning our cached value\r\n\t\treturn this._showSchool[studentEnrollment.Id];\r\n\t}\r\n\r\n\tgetEntryDate() {\r\n\t\t// POST: obtains the entry date if it's valid (removing the junk date)\r\n\t\tif (this._entryDate == undefined) {\r\n\t\t\tif (this.EntryDate && this.EntryDate.toString() != System.junkDateString && this.EntryDate.toString() != System.junkDate.toString()) {\r\n\t\t\t\tthis._entryDate = this.EntryDate;\r\n\t\t\t} else {\r\n\t\t\t\tthis._entryDate = null;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._entryDate;\r\n\t}\r\n\r\n\tgetDroppedDate() {\r\n\t\t// POSt: obtains the dropped date if it's valid (removing the junk date)\r\n\t\tif (this._droppedDate == undefined) {\r\n\t\t\tif (this.DroppedDate && this.DroppedDate.toString() != System.junkDateString && this.DroppedDate.toString() != System.junkDate.toString()) {\r\n\t\t\t\tthis._droppedDate = this.DroppedDate;\r\n\t\t\t} else {\r\n\t\t\t\tthis._droppedDate = null;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._droppedDate;\r\n\t}\r\n}\r\n","import { StudentDocumentAccessHistory } from './student-documents-accesshistory.model';\r\n\r\nexport class StudentDocuments {\r\n DocumentId: number;\r\n Name: string;\r\n DocumentType: string;\r\n FileType: string;\r\n Notes: string;\r\n DocumentFor: string;\r\n CreatedBy: string;\r\n CreatedOn: Date = undefined; // We do this for conversion\r\n FileName: string;\r\n FileBase64: string;\r\n FileMimeType: string;\r\n AccessHistory: StudentDocumentAccessHistory[];\r\n RecentAccessHistory: string;\r\n Delete: boolean;\r\n StudentName: string;\r\n StudentId: number;\r\n FamilyId: number;\r\n DocumentTypeId: number;\r\n PermissionsCategory: string;\r\n}\r\n","import { Component, OnInit, Input, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { UserPreferencesService } from '../../user-preferences/user-preferences.service';\r\nimport { Subscription } from '../../../../../node_modules/rxjs';\r\nimport { StudentService } from '../student.service';\r\nimport { UserService } from '../../user/user.service';\r\n\r\n@Component({\r\n selector: 'student-name',\r\n template: '{{formattedName}}',\r\n styleUrls: ['./student-name.component.css']\r\n})\r\nexport class StudentNameComponent implements OnInit, OnChanges {\r\n\r\n @Input() firstName: string;\r\n @Input() lastName: string;\r\n @Input() middleName: string;\r\n @Input() nickName: string;\r\n formattedName = '';\r\n generalPreferencesSubscription: Subscription;\r\n isComponentInitialized = false;\r\n\r\n constructor(\r\n private userPreferencesService: UserPreferencesService,\r\n private studentService: StudentService,\r\n private userService: UserService\r\n ) {\r\n this.generalPreferencesSubscription = this.userPreferencesService.observablegeneralPreferencesStream$.subscribe(\r\n preferences => {\r\n this.formatName();\r\n }\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.formatName();\r\n this.isComponentInitialized = true;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (this.isComponentInitialized) {\r\n this.formatName();\r\n }\r\n }\r\n\r\n formatName() {\r\n if (this.userService.userType == 1) {\r\n this.formattedName = this.studentService.formatStudentName(this.firstName, this.middleName, this.lastName, this.nickName);\r\n }\r\n else {\r\n this.formattedName = this.firstName + ' ' + this.lastName;\r\n }\r\n }\r\n}\r\n","import { GeneralPreferences } from './../user-preferences/general-preferences.model';\r\n\r\nexport class Student {\r\n\r\n // Properties\r\n Id: number;\r\n FamilyId: number;\r\n StudentNumber: string;\r\n StudentDOENumber: string;\r\n SocialSecurityNumber: string;\r\n LastName: string;\r\n FirstName: string;\r\n MiddleName: string;\r\n NickName: string;\r\n DateOfBirth: string;\r\n Gender: string;\r\n Ethnicity: string;\r\n EMail: string;\r\n CellPhone: string;\r\n Age: number;\r\n Picture: Uint8Array;\r\n DisciplineCode: number;\r\n InvolvementType: string;\r\n IncidentComments: string;\r\n NonStudent: boolean;\r\n UnknownStudent: boolean;\r\n DRP_ID: number;\r\n DeletedFromReferral: boolean;\r\n PriorReferrals: number;\r\n EnrollmentId: number;\r\n EnrollmentSchool: string;\r\n EnrollmentDate: string;\r\n EnrollmentStatus: string;\r\n Enrollment: string;\r\n IEP: boolean;\r\n StudentAlerts: Alerts[];\r\n Grade: string;\r\n MemId: number;\r\n Suffix: string;\r\n PrimaryContact: boolean;\r\n SchoolName: string;\r\n EnrollDate: Date;\r\n WithdrawnDate: Date;\r\n AddedOn: Date;\r\n isSelected: boolean;\r\n SchoolDomain: number;\r\n HomeRoom_Class: string;\r\n Homeroom_CourseSection: string;\r\n Homeroom_Teacher: string;\r\n NewStudent: boolean;\r\n studentSelectionName: string;\r\n PickUp: boolean;\r\n DropOff: boolean;\r\n CanSee: boolean;\r\n DayOfWeek: string;\r\n\r\n // NON DTO Variable\r\n // ONE-6748\r\n EnrollmentDateAsDate: Date;\r\n DateOfBirthAsDate: Date;\r\n\r\n\r\n // Class Functions\r\n get fullName(): string {\r\n return this.LastName + ' ' + this.FirstName;\r\n }\r\n\r\n // Methods\r\n formattedNameWithNumber(generalPreferences: GeneralPreferences): string {\r\n let nameWithNumber = this.formattedName(generalPreferences);\r\n if (generalPreferences.ShowStudentNumber) {\r\n if (this.NonStudent) {\r\n nameWithNumber += ' (' + this.StudentNumber + ')';\r\n } else {\r\n nameWithNumber += ' (#' + this.StudentNumber + ')';\r\n }\r\n }\r\n return nameWithNumber;\r\n }\r\n\r\n formattedName(generalPreferences: GeneralPreferences): string {\r\n let formattedName = '';\r\n if (generalPreferences) {\r\n const nameFormat = generalPreferences.StudentNameFormat;\r\n const middleNameFormat = generalPreferences.StudentMiddleNameFormat;\r\n const showNickname = generalPreferences.ShowNickname;\r\n if (nameFormat != '') {\r\n if (nameFormat == 'LNF') {\r\n formattedName = this.LastName + ', ';\r\n }\r\n if (nameFormat != 'FILN') {\r\n formattedName += this.FirstName;\r\n }\r\n if (nameFormat == 'FILN') {\r\n formattedName += this.FirstName.substr(0, 1);\r\n }\r\n if (showNickname && this.NickName != null && this.NickName != '') {\r\n formattedName += ' \"' + this.NickName + '\"';\r\n }\r\n if (middleNameFormat == 'SEN' && this.MiddleName != null && this.MiddleName != '') {\r\n formattedName += ' ' + this.MiddleName;\r\n }\r\n if (middleNameFormat == 'SFL' && this.MiddleName != null && this.MiddleName != '') {\r\n formattedName += ' ' + this.MiddleName.substr(0, 1);\r\n }\r\n if (nameFormat != 'LNF' && nameFormat != 'FNLI') {\r\n formattedName += ' ' + this.LastName;\r\n }\r\n if (nameFormat == 'FNLI') {\r\n formattedName += ' ' + this.LastName.substr(0, 1);\r\n }\r\n }\r\n }\r\n return formattedName;\r\n }\r\n formattedNumber(generalPreferences: GeneralPreferences, overridePref: boolean = false): string {\r\n let studentNumber = '';\r\n if (generalPreferences.ShowStudentNumber || overridePref) {\r\n if (this.NonStudent) {\r\n studentNumber += ' (' + this.StudentNumber + ')';\r\n } else {\r\n studentNumber += ' ' + this.StudentNumber;\r\n }\r\n }\r\n return studentNumber;\r\n }\r\n}\r\n\r\nexport class Alerts {\r\n Id: number;\r\n StudentId: number;\r\n AlertType: string;\r\n Program: string;\r\n Service: string;\r\n Description: string;\r\n StartDate: Date;\r\n EndDate: Date;\r\n AlertIcon: number[];\r\n Sequence: number;\r\n ContactName: string;\r\n ContactRelationship: string;\r\n UserHasPermisison: boolean;\r\n IsConfidential: boolean;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { FamilyRegistrationStudent } from '../../shared-modules/family-registration/family-registration-student.model';\r\nimport { StudentDailyAttendance } from '../../student360/attendance/daily-attendance/student-daily-attendance.model';\r\nimport { OnlinePaymentConfiguration } from '../../student360/online-payment/models/online-payment-config.model';\r\nimport { Portfolio } from '../../student360/portfolio/portfolio.model';\r\nimport { StudentDetail } from '../../student360/student-details/student-detail.model';\r\nimport { StudentDigitalContent } from '../../student360/student-digital-content/models/student-digital-content.model';\r\nimport { CardStudentGrades } from '../../student360/student-summary/cards/student/current-grades-card/card-student-grades';\r\nimport { CheckForErrorsGuard } from '../guards/check-for-errors/check-for-errors.guard';\r\nimport { UnsavedChangesGuard } from '../guards/unsaved-changes/unsaved-changes.guard';\r\nimport { StudentAlerts } from '../models/student-alerts.model';\r\nimport { SharedService } from '../shared.service';\r\nimport { System } from '../System';\r\nimport { UserPreferencesService } from '../user-preferences/user-preferences.service';\r\nimport { UserService } from '../user/user.service';\r\nimport { YearService } from '../year/year.service';\r\nimport { AcademicHistorySummary } from './academic-history-summary.model';\r\nimport { AcademicHistory } from './academic-history.model';\r\nimport { Attendance, ExcessiveAttendance, SpecialAdditionalAttendance, StudentTeamAttendance } from './attendance.model';\r\nimport { CourseSchedule } from './course-schedule.model';\r\nimport { Discipline } from './discipline.model';\r\nimport { Enrollment } from './enrollment.model';\r\nimport { StudentContact } from './student-contact.model';\r\nimport { StudentDocuments } from './student-documents.model';\r\nimport { Alerts, Student } from './student.model';\r\nimport { StudentAddress } from '../../student360/student-details/view-student-address/student-address.model';\r\nimport { Year } from '../year/year.model';\r\nimport { Router } from '@angular/router';\r\nimport { PhotoIdLayout } from '../../management360/staff/staff.model';\r\n\r\n@Injectable()\r\nexport class StudentService {\r\n\r\n private _previousSelectedStudent: Student;\r\n private _selectedStudent: Student;\r\n private observableSelectedStudent = new BehaviorSubject(-1);\r\n selectedStudentStream$ = this.observableSelectedStudent.asObservable();\r\n public lastSelectedStudent = null;\r\n public students: Student[];\r\n private observableStudents = new BehaviorSubject(null);\r\n observableStudentsStream$ = this.observableStudents.asObservable();\r\n student: Student;\r\n private observableStudentEnrollment = new BehaviorSubject(null);\r\n observableStudentEnrollmentStream$ = this.observableStudentEnrollment.asObservable();\r\n private _studentEnrollment: Enrollment;\r\n enrollmentYears: any[];\r\n studentPrimaryContacts: StudentContact[];\r\n recentStudents: Student[] = [];\r\n legacySelectedStudentId = 0;\r\n alerts: StudentAlerts[] = [];\r\n previousArrayForAlerts: number[] = [];\r\n selectedCourse: CourseSchedule;\r\n selectedSectionId = -1;\r\n selected: string;\r\n selectionIndex = 0;\r\n selectedProgramName: string;\r\n selectedServiceName: string;\r\n StandradTabByCurrentGrade = false;\r\n // V9 ONE-6156\r\n selectedCardCourse: CardStudentGrades;\r\n observableSelectedProgramAndService = new Subject();\r\n observableSelectedProgramAndServiceStream = this.observableSelectedProgramAndService.asObservable();\r\n\r\n // Common use in fine-billing, Meal-service, online Payment and fine -billing and Meal service card.\r\n // Online Payment Configuration\r\n private _onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n public get onlinePaymentConfiguration(): OnlinePaymentConfiguration {\r\n return this._onlinePaymentConfiguration;\r\n }\r\n\r\n public set onlinePaymentConfiguration(value: OnlinePaymentConfiguration) {\r\n this._onlinePaymentConfiguration = value;\r\n this.observableOnlinePaymentConfiguration.next(value);\r\n }\r\n\r\n public observableOnlinePaymentConfiguration = new Subject();\r\n observableOnlinePaymentConfigurationStream$ = this.observableOnlinePaymentConfiguration.asObservable();\r\n\r\n studentDocuments: StudentDocuments[];\r\n public observableStudentDocuments = new BehaviorSubject(null);\r\n observableStudentDocumentsStream$ = this.observableStudentDocuments.asObservable();\r\n private _panelFilter: boolean;\r\n public get panelFilter(): boolean {\r\n return this._panelFilter;\r\n }\r\n\r\n public set panelFilter(value: boolean) {\r\n this._panelFilter = value;\r\n this.observablePanelFilter.next(value);\r\n }\r\n public observablePanelFilter = new Subject();\r\n observablePanelFilterStream$ = this.observablePanelFilter.asObservable();\r\n\r\n\r\n private _medicalShowAlert: boolean;\r\n public get medicalShowAlert(): boolean {\r\n return this._medicalShowAlert;\r\n }\r\n\r\n public set medicalShowAlert(value: boolean) {\r\n this._medicalShowAlert = value;\r\n this.observableMedicalShowAlert.next(value);\r\n }\r\n\r\n public observableMedicalShowAlert = new Subject();\r\n observableMedicalShowAlertStream$ = this.observableMedicalShowAlert.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private sharedService: SharedService,\r\n private userPreferencesService: UserPreferencesService,\r\n private unsavedChangesGuard: UnsavedChangesGuard,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private router: Router\r\n ) {\r\n\r\n // If the academic year or school changes, reset the selected students\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.lastSelectedStudent = null;\r\n if (this.selectedStudent) {\r\n this.getStudentEnrollments(\r\n this.selectedStudent.Id,\r\n this.yearService.defaultYear.Id\r\n ).pipe(take(1)).subscribe(enrollments => {\r\n let hasEnrollment = false;\r\n enrollments.forEach(enrollment => {\r\n if (enrollment.SchoolId == this.yearService.defaultYear.SchoolID) {\r\n hasEnrollment = true;\r\n }\r\n });\r\n if (!hasEnrollment) {\r\n this.selectedStudent = null;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n get previousSelectedStudent(): Student {\r\n return this._previousSelectedStudent;\r\n }\r\n\r\n get selectedStudent(): Student {\r\n return this._selectedStudent;\r\n }\r\n\r\n set selectedStudent(value: Student) {\r\n // PRE: a student to set the selected student to\r\n // POST: updates the student, but does NOT signal the observable for timing reasons\r\n // Also, if the value is not null, sets that to the last selected student\r\n this._previousSelectedStudent = this.selectedStudent;\r\n this._selectedStudent = value;\r\n if (value) {\r\n this.lastSelectedStudent = value;\r\n this.updateRecentStudents(value);\r\n }\r\n }\r\n\r\n clearSelectedStudent() {\r\n this._selectedStudent = null;\r\n this.lastSelectedStudent = null;\r\n this.studentEnrollment = null;\r\n this.students = [];\r\n }\r\n\r\n getStudentIsValidForUser(studentId: number = 0): Observable {\r\n // added if statement due to default value not always being used\r\n if (!studentId) {\r\n studentId = 0;\r\n }\r\n\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentIsValidForUser' + queryString);\r\n }\r\n\r\n getParentAssignedStudents(userId, yearId, userType): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetParentAssignedStudents?loginid=' + userId + '&yearId=' + yearId + '&userType=' + userType);\r\n }\r\n\r\n public get studentEnrollment(): Enrollment {\r\n return this._studentEnrollment;\r\n }\r\n\r\n public set studentEnrollment(enrollment: Enrollment) {\r\n if (!_.isEqual(enrollment, this._studentEnrollment)) {\r\n this._studentEnrollment = enrollment;\r\n this.observableStudentEnrollment.next(enrollment);\r\n }\r\n }\r\n\r\n updateStudents(students: Student[], index = 0) {\r\n this.students = students;\r\n this.observableStudents.next(students);\r\n if (students.length > 0) {\r\n this.updateSelectedStudent(this.students[index].Id);\r\n }\r\n }\r\n\r\n updateRecentStudents(student: Student) {\r\n // Remove student if already exists\r\n this.recentStudents = this.recentStudents.filter(s => s.Id !== student.Id);\r\n // Add the student to the front of the list\r\n this.recentStudents.unshift(student);\r\n // Keep the list to 10 students\r\n if (this.recentStudents.length > 10) {\r\n this.recentStudents.length = 10;\r\n }\r\n }\r\n\r\n clearRecentStudents() {\r\n this.recentStudents.length = 0;\r\n }\r\n\r\n updateSelectedStudent(studentId: number) {\r\n const canContinue = this.unsavedChangesGuard.checkForDeactivation() && this.checkForErrorsGuard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n if (studentId != null) {\r\n this.updateStudentEnrollment(studentId);\r\n } else {\r\n this.observableSelectedStudent.next(null);\r\n }\r\n }\r\n });\r\n } else if (canContinue) {\r\n if (studentId != null) {\r\n this.updateStudentEnrollment(studentId);\r\n } else {\r\n this.selectedStudent = null;\r\n this.observableSelectedStudent.next(null);\r\n }\r\n }\r\n }\r\n\r\n updateStudentEnrollment(studentId: number) {\r\n if (this.selectedStudent == null || this.selectedStudent.Id != studentId) {\r\n this.selectedStudent = this.students.filter(student => student.Id == studentId)[0];\r\n this.yearService.getUserYears(this.userService.userId, this.userService.userType, studentId).subscribe(years => {\r\n\r\n // ONE-12175\r\n // This should be a temporary fix only. The header should not restrict years that a student is enrolled in outside of Student 360.\r\n // It may be a problem in other areas outside of Reg/Enroll, but this is likely the safest quick fix for now.\r\n const url = this.router.url;\r\n if (url.indexOf('registrationEnroll') == -1) {\r\n this.yearService.loadYears(years);\r\n this.yearService.studentYears = years;\r\n }\r\n\r\n if (this.yearService.student360Year != undefined) {\r\n this.getStudentEnrollment(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n if (this.userService.studentInformationView) {\r\n this.enrollmentYears = enrollment.EnrollmentYears;\r\n }\r\n this.observableSelectedStudent.next(studentId);\r\n });\r\n } else {\r\n this.getStudentEnrollment(this.selectedStudent.Id, this.yearService.defaultYear.Id).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n this.observableSelectedStudent.next(studentId);\r\n });\r\n }\r\n });\r\n } else {\r\n this.getStudentEnrollment(this.selectedStudent.Id, this.yearService.defaultYear.Id).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n if (this.userService.studentInformationView) {\r\n this.enrollmentYears = enrollment.EnrollmentYears;\r\n }\r\n this.observableSelectedStudent.next(studentId);\r\n });\r\n }\r\n }\r\n\r\n updateStudentsNFR(students: FamilyRegistrationStudent[]) {\r\n this.students = [];\r\n students.forEach(std => {\r\n const student = new Student();\r\n student.Id = std.id;\r\n student.FirstName = std.FirstNameNew;\r\n student.MiddleName = std.MiddleNameNew;\r\n student.LastName = std.LastNameNew;\r\n this.students.push(student);\r\n });\r\n }\r\n\r\n getStudentEnrollment(studentId: number, academicYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&academicYearId=' + academicYearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentEnrollment' + queryString);\r\n }\r\n\r\n getStudentEnrollmentById(enrollmentId: number): Observable {\r\n const queryString = '?enrollmentId=' + enrollmentId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentEnrollmentById' + queryString);\r\n }\r\n\r\n getStudentEnrollmentYears(studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentEnrollmentYears' + queryString);\r\n }\r\n\r\n getStudentEnrollments(studentId: number, academicYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&academicYearId=' + academicYearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentEnrollments' + queryString);\r\n }\r\n\r\n getStudentAttendance(studentId: number, yearId: number, showAllAttendanceCodes: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&showAllAttendanceCodes=' + showAllAttendanceCodes;\r\n return this.http.get(System.apiURL.Student + 'GetStudentAttendance' + queryString);\r\n }\r\n\r\n getStudentDailyAttendance(yearId: number, studentId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetStudentDailyAttendance?yearId=' + yearId + '&studentId=' + studentId);\r\n }\r\n\r\n\r\n getAcademicHistory(studentId: number, yearId: number, isShowHSTranscript: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&isShowHSTranscript=' + isShowHSTranscript;\r\n return this.http.get(System.apiURL.Student + 'GetAcademicHistory' + queryString);\r\n }\r\n\r\n getAcademicHistorySummary(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetAcademicHistorySummary' + queryString);\r\n }\r\n\r\n getStudentIdsByStudentNumbers(studentNumbers: string[]): Observable {\r\n return this.http.post(System.apiURL.Student + `getStudentIdsByStudentNumbers`, studentNumbers, { observe: 'response' });\r\n }\r\n\r\n getStudentSchedule(studentId: number, yearId: number, viewOption: number, includeAttendance: boolean, userid: number, includeDropped: boolean, includeWithdrawnStudent: boolean, blnIncludeTerms: boolean, showAllAttendanceCodes: boolean, termDefinationId = 0, nextSchoolDay = false): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&viewOption=' + viewOption +\r\n '&includeAttendance=' + includeAttendance +\r\n '&userid=' + userid +\r\n '&includeDropped=' + includeDropped +\r\n '&includeWithdrawnStudent=' + includeWithdrawnStudent +\r\n '&blnIncludeTerms=' + blnIncludeTerms +\r\n '&showAllAttendanceCodes=' + showAllAttendanceCodes +\r\n '&termDefinationId=' + termDefinationId +\r\n '&nextSchoolDay='+ nextSchoolDay;\r\n return this.http.get(System.apiURL.Student + 'GetStudentSchedule' + queryString);\r\n }\r\n\r\n getStudentGrades(studentId: number, yearId: number, includeStandards: boolean) {\r\n return this.http.get(System.apiURL.Student + 'GetStudentGrades?studentId=' + studentId + '&yearId=' + yearId + '&includeStandards=' + includeStandards);\r\n }\r\n\r\n getStudent(studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?id=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetStudent' + queryString);\r\n }\r\n\r\n /**\r\n * Retrieves an array of StudentContact for a given student\r\n * @param studentId The Id of the student whose contacts you want to retrieve\r\n */\r\n getStudentPrimaryContacts(studentId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentPrimaryContacts' + queryString);\r\n }\r\n\r\n getSpecialAttendance(studentId: number, yearId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetSpecialAttendance' + queryString);\r\n }\r\n\r\n getExcessiveAttendance(studentId: number, yearId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetExcessiveAttendance' + queryString);\r\n }\r\n\r\n getAttendanceDaysAndHoursInfo(studentId: number, yearId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetAttendanceDaysAndHoursInfo' + queryString);\r\n }\r\n\r\n getStudentDiscipline(studentId: number, yearId: number, userId: number) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentDiscipline' + queryString);\r\n }\r\n\r\n formatStudentName(firstName: string, middleName: string, lastName: string, nickName: string): string {\r\n let formattedName = '';\r\n if (this.userPreferencesService.generalPreferences) {\r\n const nameFormat = this.userPreferencesService.generalPreferences.StudentNameFormat;\r\n const middleNameFormat = this.userPreferencesService.generalPreferences.StudentMiddleNameFormat;\r\n const showNickname = this.userPreferencesService.generalPreferences.ShowNickname;\r\n if (nameFormat != '') {\r\n if (nameFormat == 'LNF') {\r\n formattedName = lastName + ', ';\r\n }\r\n if (nameFormat != 'FILN') {\r\n formattedName += firstName;\r\n }\r\n if (nameFormat == 'FILN') {\r\n formattedName += firstName.substr(0, 1);\r\n }\r\n if (showNickname && nickName != null && nickName != '') {\r\n formattedName += ' \"' + nickName + '\"';\r\n }\r\n if (middleNameFormat == 'SEN' && middleName != null && middleName != '') {\r\n formattedName += ' ' + middleName;\r\n }\r\n if (middleNameFormat == 'SFL' && middleName != null && middleName != '') {\r\n formattedName += ' ' + middleName.substr(0, 1);\r\n }\r\n if (nameFormat != 'LNF' && nameFormat != 'FNLI') {\r\n formattedName += ' ' + lastName;\r\n }\r\n if (nameFormat == 'FNLI') {\r\n formattedName += ' ' + lastName.substr(0, 1);\r\n }\r\n }\r\n }\r\n return formattedName;\r\n }\r\n\r\n getStudentDetails(studentId: number, yearId: number, userId: number, skipEnrollmentsContactsSiblings: boolean = false) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId +\r\n '&skipEnrollmentsContactsSiblings=' + skipEnrollmentsContactsSiblings;\r\n return this.http.get(System.apiURL.Student + 'GetStudentDetails' + queryString);\r\n }\r\n\r\n getStudentAddresses(studentId: number) {\r\n return this.http.get(System.apiURL.Student + 'GetStudentAddresses?studentId=' + studentId);\r\n }\r\n\r\n getStudentDocuments(studentId: number, yearId: number, showEntireFamilyDocuments: boolean = false, recentEvents: boolean = false) {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&ShowDocumentsEntireFamily=' + showEntireFamilyDocuments +\r\n '&recentEvents=' + recentEvents;\r\n return this.http.get(System.apiURL.Student + 'GetStudentDocuments' + queryString).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.length; i++) {\r\n results[i] = System.convert(results[i], new StudentDocuments());\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n deleteStudentDocuments(studentId: number, documentId: number, familyId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&documentId=' + documentId +\r\n '&familyId=' + familyId;\r\n return this.http.get(System.apiURL.Student + 'DeleteStudentAttachment' + queryString);\r\n }\r\n public saveAttachment(attachment: StudentDocuments, attachmentType: string): Observable {\r\n return this.http.post(System.apiURL.Student + `SaveStudentDocument?attachmentType=${attachmentType}`, attachment);\r\n }\r\n getAlerts(studentIds: number[]): Observable {\r\n // POST: obtains a list of student alerts from the server\r\n\r\n // If it is the previous call, just use our current alerts\r\n if (studentIds.find(studentId => this.previousArrayForAlerts.includes(studentId))) {\r\n studentIds.forEach(s => {\r\n return this.alerts.filter(x => x.StudentId == s); // ONE-5457\r\n });\r\n }\r\n\r\n // If this is not the previous call, get it from the server\r\n this.previousArrayForAlerts = studentIds;\r\n const currentDate = new Date();\r\n const dateString = currentDate.getMonth() + 1 + '/' + currentDate.getDate() + '/' + currentDate.getFullYear();\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '¤tDate=' + dateString;\r\n return this.http.post(System.apiURL.Student + 'GetStudentAlerts' + queryString, studentIds).pipe(\r\n map(result => {\r\n this.alerts = result;\r\n return this.alerts;\r\n })\r\n );\r\n }\r\n\r\n updateSelectedProgramAndService() {\r\n this.observableSelectedProgramAndService.next();\r\n }\r\n\r\n // Common use in fine-billing, Meal-service, online Payment and fine -billing and Meal service card.\r\n getOnlinePaymentConfiguration(): Observable {\r\n return this.sharedService.getOnlinePaymentConfiguration();\r\n }\r\n\r\n getStudentsByIds(studentIds: number[], showStudentPhoto = true): Observable {\r\n let queryString = '';\r\n queryString += '?showStudentPhoto=' + showStudentPhoto;\r\n return this.http.post(System.apiURL.Student + 'GetStudents' + queryString, studentIds);\r\n }\r\n\r\n getStudentsInformation(studentIds: number[]): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Student + 'GetStudentsInformation' + queryString, studentIds);\r\n }\r\n\r\n getStudentsBasicInformation(studentIds: number[]): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Student + 'GetStudentsBasicInformation' + queryString, studentIds);\r\n }\r\n\r\n public isStudentSpecialEd(studentId: number, forDate: Date): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId;\r\n queryString += '&forDate=' + forDate;\r\n\r\n return this.http.get(System.apiURL.Student + 'IsStudentSpecialEd' + queryString);\r\n }\r\n\r\n saveStudentDigitalContent(sdc: StudentDigitalContent, schoolId: number): Observable {\r\n let paramString = '';\r\n paramString += '?schoolId=' + schoolId;\r\n\r\n return this.http.post(System.apiURL.Student + 'SaveStudentDigitalContent' + paramString, sdc);\r\n }\r\n\r\n saveStudentPortfolio(document: Portfolio): Observable {\r\n return this.http.post(System.apiURL.Student + `SaveStudentPortfolio`, document, { observe: 'response' });\r\n }\r\n\r\n getStudentNamesByStudentIds(studentIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetStudentNamesByStudentIds', studentIds);\r\n }\r\n\r\n getStudentPicture(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId + '&siteYearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentPicture' + queryString);\r\n }\r\n\r\n getStudentTeamAttendanceAbsentTardiesCount(studentId: number, schoolId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentTeamAttendanceAbsentTardiesCount' + queryString);\r\n }\r\n\r\n getStudentTeams(studentId: number = 0): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&year=' + this.yearService.defaultYear.AYIdentifier;\r\n\r\n return this.http.get(System.apiURL.Classroom + 'GetStudentTeams' + queryString);\r\n }\r\n\r\n getStudentIdByNumber(studentNumber: string): Observable {\r\n const queryString = '?studentNumber=' + studentNumber;\r\n\r\n return this.http.get(System.apiURL.Student + 'getStudentIdByNumber' + queryString);\r\n }\r\n\r\n getStudentsByFamilyId(schoolId: number, yearId: number, familyId: number, includeAllStudents: boolean): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId +\r\n '&familyId=' + familyId +\r\n '&includeAllStudents=' + includeAllStudents;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetStudentsByFamilyId' + queryString);\r\n }\r\n\r\n getHouseholdParentsByFamilyID(familyId: number): Observable {\r\n const queryString = '?familyId=' + familyId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetHouseholdParentsByFamilyID' + queryString);\r\n }\r\n\r\n getStudentPhotoIdLayout(studentId: number, siteYearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Management + 'GetStudentPhotoIdLayout' + queryString);\r\n }\r\n}\r\n","\r\n
\r\n\t{{header}}\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tStudent #\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{{student.StudentNumber}}\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\tName\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{{student.formattedName(generalPreferences)}}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport {Student} from '../student/student.model';\r\nimport {TylerMatTableDataSource} from '../angular-material/extended.class';\r\nimport {GeneralPreferences} from '../user-preferences/general-preferences.model';\r\nimport {StudentService} from '../student/student.service';\r\nimport {UserPreferencesService} from '../user-preferences/user-preferences.service';\r\nimport {StudentInformationComponent} from '../student-information/student-information.component';\r\nimport {LoginService} from '../../shared-modules/login/login.service';\r\nimport {DisciplineReferralStudent} from '../../classroom360/discipline-referral/discipline-referral-student.model';\r\n\r\n@Component({\r\n\tselector: 'app-students-to-add-dialog',\r\n\ttemplateUrl: './students-to-add-dialog.component.html',\r\n\tstyleUrls: ['./students-to-add-dialog.component.css']\r\n})\r\nexport class StudentsToAddDialogComponent implements OnInit {\r\n\r\n\t// Injected Properties\r\n\theader = 'Mass Add Students';\r\n\tstudents: Student[] = [];\r\n\r\n\t// Local Properties\r\n\ttableData = new TylerMatTableDataSource();\r\n\tgeneralPreferences: GeneralPreferences;\r\n\tprivate _sort: MatSort;\r\n\tV10: boolean;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\t@Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\tprivate studentService: StudentService,\r\n\t\tprivate dialog: MatDialog,\r\n\t\tprivate userPreferencesService: UserPreferencesService,\r\n\t\tprivate loginService: LoginService\r\n\t) { }\r\n\r\n\tget sort(): MatSort {\r\n\t\treturn this._sort;\r\n\t}\r\n\r\n\t@ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n\t\tthis._sort = value;\r\n\t\tthis.tableData.sort = value;\r\n\t}\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tthis.students = this.data.students;\r\n\t\tif (this.data.header) {\r\n\t\t\tthis.header = this.data.header;\r\n\t\t}\r\n\t\tthis.tableData.data = this.students;\r\n\t\tthis.generalPreferences = this.userPreferencesService.generalPreferences;\r\n\t\tthis.V10 = this.loginService.LoginSettings.V10;\r\n\r\n\t\t// Changing the data accessor so that sorting happens correctly\r\n\t\tthis.tableData.sortingDataAccessor = (data: DisciplineReferralStudent, sortHeaderId: string): string|number => {\r\n\t\t\tswitch (sortHeaderId) {\r\n\t\t\t\tcase 'number':\r\n\t\t\t\t\tif (data.UnknownStudent) {\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t} else if (data.NonStudent) {\r\n\t\t\t\t\t\treturn -2;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn Number.parseInt(data.StudentNumber, 10);\r\n\t\t\t\t\t}\r\n\t\t\t\tcase 'name': return data.formattedName(this.generalPreferences);\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tif (data[sortHeaderId] instanceof Date) {\r\n\t\t\t\t\t\treturn data[sortHeaderId].getTime();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn this.tableData.defaultSortingAccessor(data, sortHeaderId);\r\n\t\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tclose() {\r\n\t\t// PRE: the close button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\tviewStudent(student: any) {\r\n\t\t// PRE: a student's name is clicked\r\n\t\t// POST: opens a sidenav for viewing student pages\r\n\t\tif (typeof student == 'number') {\r\n\t\t\tstudent = this.studentService.students.find(s => s.Id == student);\r\n\t\t}\r\n\t\tconst dialog = this.dialog.open(StudentInformationComponent, {\r\n\t\t\tpanelClass: 'tyl-mat-dialog',\r\n\t\t\tdisableClose: true,\r\n\t\t\theight: '100%',\r\n\t\t\tposition: {\r\n\t\t\t\ttop: '0px',\r\n\t\t\t\tright: '0px'\r\n\t\t\t}\r\n\t\t});\r\n\t\tdialog.componentInstance.student = student;\r\n\t\tdialog.componentInstance.students = [student];\r\n\t\tdialog.componentInstance.initMenu();\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TylTranslation } from '../models/tyl-translation.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../System';\r\n\r\n@Injectable()\r\nexport class TranslationService {\r\n\r\n\tpublic overrideTranslationPipe: boolean = false;\r\n\tpublic revertToEnglish: boolean = false;\r\n\tpublic overrideTranslations: TylTranslation[] = [];\r\n\tpublic currentLanguageTranslations: TylTranslation[] = [];\r\n\r\n\tpublic _currentLanguage = 'en';\r\n\tpublic observableCurrentLanguage = new Subject();\r\n\tobservableCurrentLanguageStream$ = this.observableCurrentLanguage.asObservable();\r\n\tpublic get currentLanguage(): string {\r\n\t\treturn this._currentLanguage;\r\n\t}\r\n\r\n\tpublic set currentLanguage(value: string) {\r\n\t\tthis._currentLanguage = value;\r\n\t\tthis.setTranslationLanguage();\r\n\t\tthis.getLanguageTranslations();\r\n\t\tthis.observableCurrentLanguage.next(value);\r\n\t}\r\n\r\n\tconstructor(private translateService: TranslateService,\r\n\t\tprivate http: HttpClient) {\r\n\r\n\t}\r\n\r\n\tsetTranslationLanguage() {\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.translateService.use(this.currentLanguage);\r\n\t\t}, 0);\r\n\t}\r\n\r\n\tpublic getLanguageTranslations() {\r\n\t\tlet language_ID: number;\r\n\r\n\t\t// TODO change to dto lookup\r\n\t\t// language must be 'en' for English, 'fr' for French, or 'es' for Spanish, or 'pt' for portuguese\r\n\t\tswitch (this.currentLanguage) {\r\n\t\t\tcase 'fr':\r\n\t\t\t\tlanguage_ID = 7;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'es':\r\n\t\t\t\tlanguage_ID = 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'pt':\r\n\t\t\t\tlanguage_ID = 107;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\t// en\r\n\t\t\t\tlanguage_ID = 9;\r\n\t\t}\r\n\r\n\t\tthis.getTranslationsForLanguage(language_ID).subscribe(result => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.currentLanguageTranslations = result;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetLanguageId(iso: string): number {\r\n\t\tlet language_ID: number;\r\n\r\n\t\tswitch (iso) {\r\n\t\t\tcase 'fr':\r\n\t\t\t\tlanguage_ID = 7;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'es':\r\n\t\t\t\tlanguage_ID = 1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'pt':\r\n\t\t\t\tlanguage_ID = 107;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\t// en\r\n\t\t\t\tlanguage_ID = 9;\r\n\t\t}\r\n\r\n\t\treturn language_ID;\r\n\t}\r\n\r\n\tgetLanguageCode(id: number): string {\r\n\t\tlet languageCode: string;\r\n\r\n\t\tswitch (id) {\r\n\t\t\tcase 7:\r\n\t\t\t\tlanguageCode = 'fr';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1:\r\n\t\t\t\tlanguageCode = 'es';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 107:\r\n\t\t\t\tlanguageCode = 'pt';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\t//9\r\n\t\t\t\tlanguageCode = 'en';\r\n\t\t}\r\n\r\n\t\treturn languageCode;\r\n\r\n\t}\r\n\r\n\t//------------------------------------------------------------------------------------\r\n\r\n\tgetTranslations(english: string[], language_ID: number): Observable {\r\n\t\tconst queryString = '?language_ID=' + language_ID;\r\n\t\treturn this.http.post(System.apiURL.Student + 'GetTranslations' + queryString, english);\r\n\t}\r\n\r\n\tgetTranslationsWithRichText(english: TylTranslation[], language_ID: number): Observable {\r\n\t\tconst queryString = '?language_ID=' + language_ID;\r\n\t\treturn this.http.post(System.apiURL.Student + 'GetTranslationsWithRichText' + queryString, english);\r\n\t}\r\n\r\n\tgetTranslationStatusForLanguages(english: TylTranslation[]): Observable {\r\n\t\treturn this.http.post(System.apiURL.Student + 'GetTranslationStatusForLanguages', english);\r\n\t}\r\n\r\n\tgetTranslationsForLanguage(language_ID: number): Observable {\r\n\t\tconst queryString = '?language_ID=' + language_ID;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetTranslationsForLanguage' + queryString);\r\n\t}\r\n\r\n\tsaveTranslations(translations: TylTranslation[], language_ID: number): Observable {\r\n\t\tconst queryString = '?language_ID=' + language_ID;\r\n\t\treturn this.http.post(System.apiURL.Student + 'SaveTranslations' + queryString, translations);\r\n\t}\r\n}\r\n\r\n","
\r\n
\r\n \r\n
\r\n
{{month | translate}} {{year}}
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
Sun
\r\n
\r\n \r\n
Mon
\r\n
\r\n \r\n
Tue
\r\n
\r\n \r\n
Wed
\r\n
\r\n \r\n
Thu
\r\n
\r\n \r\n
Fri
\r\n
\r\n \r\n
Sat
\r\n
\r\n \r\n
\r\n
{{date.day}}
\r\n
\r\n
\r\n
\r\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n selector: 'tyl-cal-widget',\r\n templateUrl: './tyl-cal-widget.component.html',\r\n styleUrls: ['./tyl-cal-widget.component.css']\r\n})\r\nexport class TylCalWidgetComponent implements OnInit {\r\n\r\n calendarDates: CalendarDay[] = [];\r\n private _date: string;\r\n private _nonAttendanceDates: string[];\r\n private _eventDates: string[];\r\n @Output() monthChange: EventEmitter = new EventEmitter();\r\n @Output() dayClick: EventEmitter = new EventEmitter();\r\n month: string;\r\n year: string;\r\n @Input() showBellIcon = false;\r\n\r\n constructor() {\r\n }\r\n\r\n get nonAttendanceDates(): string[] {\r\n return this._nonAttendanceDates;\r\n }\r\n\r\n get date(): string {\r\n return this._date;\r\n }\r\n\r\n get eventDates(): string[] {\r\n return this._eventDates;\r\n }\r\n\r\n @Input() set nonAttendanceDates(value: string[]) {\r\n this._nonAttendanceDates = value;\r\n if (!this._nonAttendanceDates) {\r\n this._nonAttendanceDates = [];\r\n }\r\n this.populateCalendar();\r\n }\r\n\r\n @Input() set date(value: string) {\r\n this._date = value;\r\n if (!this._date) {\r\n this._date = moment().format('MM/DD/YYYY');\r\n }\r\n this.populateCalendar();\r\n }\r\n\r\n @Input() set eventDates(value: string[]) {\r\n this._eventDates = value;\r\n if (!this._eventDates) {\r\n this._eventDates = [];\r\n }\r\n this.populateCalendar();\r\n }\r\n\r\n ngOnInit() {}\r\n\r\n populateCalendar() {\r\n this.calendarDates.length = 42;\r\n this.month = moment(this.date, 'MM/DD/YYYY').format('MMMM');\r\n this.year = moment(this.date, 'MM/DD/YYYY').format('YYYY');\r\n const firstDayOfMonth = moment(this.date, 'MM/DD/YYYY').startOf('month');\r\n const startOfMonth = moment(this.date, 'MM/DD/YYYY').startOf('month').day();\r\n const calendarIndex = moment(firstDayOfMonth).add(-startOfMonth, 'day');\r\n // starting at the indexed day count the dates backwards\r\n for (let i = 0; i < this.calendarDates.length; i++) {\r\n this.calendarDates[i] = {\r\n date: calendarIndex.format('MM/DD/YYYY'),\r\n day: calendarIndex.date(),\r\n isToday: (calendarIndex.format('MM/DD/YYYY') == moment().format('MM/DD/YYYY')) ? true : false,\r\n isCurrentMonth: (calendarIndex.month() == moment(this.date, 'MM/DD/YYYY').month()) ? true : false,\r\n hasSchool: this.hasSchool(calendarIndex.format('MM/DD/YYYY')),\r\n hasEvents: this.hasEvents(calendarIndex.format('MM/DD/YYYY'))\r\n };\r\n calendarIndex.add(1, 'day');\r\n }\r\n let count = 0;\r\n // Check to see if we need the last row in the calendar\r\n for (let i = 35; i < this.calendarDates.length; i++) {\r\n if (this.calendarDates[i].isCurrentMonth == false) {\r\n count++;\r\n }\r\n }\r\n if (count == 7) {\r\n this.calendarDates.length = 35;\r\n }\r\n }\r\n\r\n changeMonth(action: string) {\r\n if (action == 'previous') {\r\n this.date = moment(this.date, 'MM/DD/YYYY').add(-1, 'month').format('MM/DD/YYYY');\r\n } else if (action == 'next') {\r\n this.date = moment(this.date, 'MM/DD/YYYY').add(1, 'month').format('MM/DD/YYYY');\r\n }\r\n this.monthChange.emit(this.date);\r\n this.populateCalendar();\r\n }\r\n\r\n hasSchool(date: string) {\r\n if (this.nonAttendanceDates) {\r\n return !this.nonAttendanceDates.includes(date);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n hasEvents(date: string) {\r\n if (this.eventDates) {\r\n return this.eventDates.includes(date);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n dayClicked(date: any) {\r\n this.dayClick.emit(date);\r\n }\r\n}\r\n\r\nexport class CalendarDay {\r\n date: string;\r\n day: number;\r\n isToday: boolean;\r\n isCurrentMonth: boolean;\r\n hasSchool: boolean;\r\n hasEvents: boolean;\r\n}\r\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Injectable, Optional, Inject, NgModule } from '@angular/core';\nimport { DateAdapter, MAT_DATE_LOCALE, MAT_DATE_FORMATS } from '@angular/material/core';\nimport * as _rollupMoment from 'moment';\nimport _rollupMoment__default from 'moment';\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 moment = _rollupMoment__default || _rollupMoment;\n/** InjectionToken for moment date adapter to configure options. */\nconst MAT_MOMENT_DATE_ADAPTER_OPTIONS = new InjectionToken('MAT_MOMENT_DATE_ADAPTER_OPTIONS', {\n providedIn: 'root',\n factory: MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY() {\n return {\n useUtc: false,\n };\n}\n/** Creates an array and fills it with values. */\nfunction range(length, valueFunction) {\n const valuesArray = Array(length);\n for (let i = 0; i < length; i++) {\n valuesArray[i] = valueFunction(i);\n }\n return valuesArray;\n}\n/** Adapts Moment.js Dates for use with Angular Material. */\nclass MomentDateAdapter extends DateAdapter {\n constructor(dateLocale, _options) {\n super();\n this._options = _options;\n this.setLocale(dateLocale || moment.locale());\n }\n setLocale(locale) {\n super.setLocale(locale);\n let momentLocaleData = moment.localeData(locale);\n this._localeData = {\n firstDayOfWeek: momentLocaleData.firstDayOfWeek(),\n longMonths: momentLocaleData.months(),\n shortMonths: momentLocaleData.monthsShort(),\n dates: range(31, i => this.createDate(2017, 0, i + 1).format('D')),\n longDaysOfWeek: momentLocaleData.weekdays(),\n shortDaysOfWeek: momentLocaleData.weekdaysShort(),\n narrowDaysOfWeek: momentLocaleData.weekdaysMin(),\n };\n }\n getYear(date) {\n return this.clone(date).year();\n }\n getMonth(date) {\n return this.clone(date).month();\n }\n getDate(date) {\n return this.clone(date).date();\n }\n getDayOfWeek(date) {\n return this.clone(date).day();\n }\n getMonthNames(style) {\n // Moment.js doesn't support narrow month names, so we just use short if narrow is requested.\n return style == 'long' ? this._localeData.longMonths : this._localeData.shortMonths;\n }\n getDateNames() {\n return this._localeData.dates;\n }\n getDayOfWeekNames(style) {\n if (style == 'long') {\n return this._localeData.longDaysOfWeek;\n }\n if (style == 'short') {\n return this._localeData.shortDaysOfWeek;\n }\n return this._localeData.narrowDaysOfWeek;\n }\n getYearName(date) {\n return this.clone(date).format('YYYY');\n }\n getFirstDayOfWeek() {\n return this._localeData.firstDayOfWeek;\n }\n getNumDaysInMonth(date) {\n return this.clone(date).daysInMonth();\n }\n clone(date) {\n return date.clone().locale(this.locale);\n }\n createDate(year, month, date) {\n // Moment.js will create an invalid date if any of the components are out of bounds, but we\n // explicitly check each case so we can throw more descriptive errors.\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (month < 0 || month > 11) {\n throw Error(`Invalid month index \"${month}\". Month index has to be between 0 and 11.`);\n }\n if (date < 1) {\n throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n }\n }\n const result = this._createMoment({ year, month, date }).locale(this.locale);\n // If the result isn't valid, the date must have been out of bounds for this month.\n if (!result.isValid() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Invalid date \"${date}\" for month with index \"${month}\".`);\n }\n return result;\n }\n today() {\n return this._createMoment().locale(this.locale);\n }\n parse(value, parseFormat) {\n if (value && typeof value == 'string') {\n return this._createMoment(value, parseFormat, this.locale);\n }\n return value ? this._createMoment(value).locale(this.locale) : null;\n }\n format(date, displayFormat) {\n date = this.clone(date);\n if (!this.isValid(date) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('MomentDateAdapter: Cannot format invalid date.');\n }\n return date.format(displayFormat);\n }\n addCalendarYears(date, years) {\n return this.clone(date).add({ years });\n }\n addCalendarMonths(date, months) {\n return this.clone(date).add({ months });\n }\n addCalendarDays(date, days) {\n return this.clone(date).add({ days });\n }\n toIso8601(date) {\n return this.clone(date).format();\n }\n /**\n * Returns the given value if given a valid Moment or null. Deserializes valid ISO 8601 strings\n * (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid Moments and empty\n * string into null. Returns an invalid date for all other values.\n */\n deserialize(value) {\n let date;\n if (value instanceof Date) {\n date = this._createMoment(value).locale(this.locale);\n }\n else if (this.isDateInstance(value)) {\n // Note: assumes that cloning also sets the correct locale.\n return this.clone(value);\n }\n if (typeof value === 'string') {\n if (!value) {\n return null;\n }\n date = this._createMoment(value, moment.ISO_8601).locale(this.locale);\n }\n if (date && this.isValid(date)) {\n return this._createMoment(date).locale(this.locale);\n }\n return super.deserialize(value);\n }\n isDateInstance(obj) {\n return moment.isMoment(obj);\n }\n isValid(date) {\n return this.clone(date).isValid();\n }\n invalid() {\n return moment.invalid();\n }\n /** Creates a Moment instance while respecting the current UTC settings. */\n _createMoment(date, format, locale) {\n const { strict, useUtc } = this._options || {};\n return useUtc ? moment.utc(date, format, locale, strict) : moment(date, format, locale, strict);\n }\n}\nMomentDateAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateAdapter, deps: [{ token: MAT_DATE_LOCALE, optional: true }, { token: MAT_MOMENT_DATE_ADAPTER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nMomentDateAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateAdapter });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateAdapter, decorators: [{\n type: Injectable\n }], ctorParameters: function () {\n return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DATE_LOCALE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_MOMENT_DATE_ADAPTER_OPTIONS]\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 MAT_MOMENT_DATE_FORMATS = {\n parse: {\n dateInput: 'l',\n },\n display: {\n dateInput: 'l',\n monthYearLabel: 'MMM YYYY',\n dateA11yLabel: 'LL',\n monthYearA11yLabel: 'MMMM YYYY',\n },\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MomentDateModule {\n}\nMomentDateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMomentDateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateModule });\nMomentDateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateModule, providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n },\n ] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MomentDateModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [\n {\n provide: DateAdapter,\n useClass: MomentDateAdapter,\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n },\n ],\n }]\n }] });\nclass MatMomentDateModule {\n}\nMatMomentDateModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatMomentDateModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatMomentDateModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatMomentDateModule, imports: [MomentDateModule] });\nMatMomentDateModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatMomentDateModule, providers: [{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }], imports: [[MomentDateModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatMomentDateModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MomentDateModule],\n providers: [{ provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY, MAT_MOMENT_DATE_FORMATS, MatMomentDateModule, MomentDateAdapter, MomentDateModule };\n","import { Directive } from '@angular/core';\r\nimport * as moment from 'moment';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\n\r\n@Directive({\r\n\tselector: '[dateValidator]',\r\n\tproviders: [{ provide: NG_VALIDATORS, useExisting: DateValidator, multi: true }]\r\n})\r\nexport class DateValidator implements Validator {\r\n\tvalidate(control: AbstractControl): { [key: string]: any } | null {\r\n\t\tlet dateValue = new Date(control.value);\r\n\t\tlet momentDateValue: moment.Moment;\r\n\t\tif (control.value && dateValue.toString() != 'Invalid Date') {\r\n\t\t\tif (control.value.toString().indexOf('T') > -1) {\r\n\t\t\t\tmomentDateValue = moment(control.value);\r\n\t\t\t} else {\r\n\t\t\t\tmomentDateValue = moment(control.value, 'MM/DD/YY');\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!control.value || dateValue.toString() != 'Invalid Date') {\r\n\t\t\tif (momentDateValue != undefined && momentDateValue.toString().toLocaleLowerCase() == 'invalid date') {\r\n\t\t\t\treturn { 'invalidDate': true };\r\n\t\t\t} else {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn { 'invalidDate': true };\r\n\t\t}\r\n\t}\r\n}\r\n","
\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n {{label | translate}}\r\n \r\n {{label | translate}}\r\n {{label | translate}} \r\n \r\n mm/dd/yyyy\r\n {{label | translate}}\r\n {{customHint | translate}}\r\n \r\n {{errorMessage | translate}}\r\n \r\n Invalid date\r\n Required field\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { MAT_MOMENT_DATE_FORMATS, MomentDateAdapter } from '@angular/material-moment-adapter';\r\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\r\nimport { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { TextMaskConfig } from 'angular2-text-mask/src/angular2TextMask';\r\nimport * as moment from 'moment';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'tyl-datepicker',\r\n templateUrl: './tyl-datepicker.component.html',\r\n styleUrls: ['./tyl-datepicker.component.css'],\r\n providers: [\r\n { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS },\r\n ]\r\n})\r\nexport class TylDatepickerComponent implements OnInit, OnChanges, OnDestroy {\r\n constructor() { }\r\n\r\n displayControl = new FormControl('', { updateOn: 'blur' });\r\n hiddenControl = new FormControl('', { updateOn: 'blur' });\r\n innerValue: moment.Moment;\r\n isError = false;\r\n get localValue(): string | Date | moment.Moment {\r\n return this.innerValue;\r\n }\r\n\r\n set localValue(v: string | Date | moment.Moment) {\r\n let newVal: moment.Moment = null;\r\n if (v != null && v != '') {\r\n if (moment.isMoment(v)) {\r\n newVal = v;\r\n }\r\n else {\r\n if (v.toString().indexOf('T') > -1) {\r\n newVal = moment(v);\r\n } else {\r\n newVal = moment(v, 'MM/DD/YYYY');\r\n }\r\n }\r\n }\r\n this.innerValue = newVal;\r\n }\r\n\r\n @Input() label = '';\r\n @Input() value: string | Date | moment.Moment;\r\n @Input() id: string;\r\n @Input() floatLabel:FloatLabelType = 'auto';\r\n @Input() stopPropagation = false;\r\n @Input() isRequired: boolean;\r\n @Input() truncateLabel: boolean;\r\n @Input() showLabelAsHint = false;\r\n @Input() disabled = false;\r\n @Input() errorMessage = '';\r\n @Input() appearance:MatFormFieldAppearance = 'outline';\r\n @Input() hideRequiredMarker = false;\r\n @Input() allowEnter = false;\t// If this is true, pressing enter updates the model\r\n @Input() fullWidth: boolean;\r\n @Input() tabIndex = 0;\r\n @Output() valueChange = new EventEmitter();\r\n @Output() dateInputChange = new EventEmitter();\r\n @Input() postLabelSpace = false;\r\n @Input() clearable = false;\r\n @Input() customHint = '';\r\n @Input() showTodayButton = false;\r\n\r\n initialized = false;\r\n hovering = false;\r\n displayValue: string;\r\n updated = false;\r\n private _dateInput: ElementRef;\r\n public mask: TextMaskConfig = {\r\n guide: true,\r\n showMask: false,\r\n mask: (rawValue: string) => {\r\n if (rawValue) {\r\n const maskArray = [];\r\n maskArray.push(/\\d/);\r\n let secondDashPosition = 4;\r\n if (rawValue.length > 1\r\n && rawValue.charAt(1) == '/') {\r\n secondDashPosition -= 1;\r\n maskArray.push('/');\r\n } else {\r\n maskArray.push(/\\d/);\r\n maskArray.push('/');\r\n }\r\n maskArray.push(/\\d/);\r\n if (rawValue.length > secondDashPosition\r\n && rawValue.charAt(secondDashPosition) == '/'\r\n && rawValue.charAt(secondDashPosition - 1).match(/\\d/)) {\r\n maskArray.push('/');\r\n } else {\r\n maskArray.push(/\\d/);\r\n maskArray.push('/');\r\n }\r\n maskArray.push(/\\d/);\r\n maskArray.push(/\\d/);\r\n maskArray.push(/\\d/);\r\n maskArray.push(/\\d/);\r\n return maskArray;\r\n } else {\r\n return [/\\d/, /\\d/, '/', /\\d/, /\\d/, '/', /\\d/, /\\d/, /\\d/, /\\d/];\r\n }\r\n }\r\n };\r\n\r\n ngOnInit() {\r\n this.setDate(this.value);\r\n if (this.id == null || this.id == '') {\r\n this.id = this.label.replace(' ', '');\r\n }\r\n }\r\n\r\n get dateInput() {\r\n return this._dateInput;\r\n }\r\n\r\n @ViewChild('dateInput', { static: true }) set dateInput(value: ElementRef) {\r\n this._dateInput = value;\r\n this.dateInputChange.emit(this._dateInput);\r\n }\r\n\r\n setParentValue() {\r\n if (moment.isMoment(this.value)) {\r\n this.value = this.localValue;\r\n }\r\n else if (this.value instanceof Date) {\r\n if (this.innerValue != null) {\r\n this.value = this.innerValue.toDate();\r\n }\r\n else {\r\n this.value = null;\r\n }\r\n }\r\n else {\r\n if (this.innerValue != null) {\r\n this.value = this.innerValue.toDate();\r\n }\r\n else {\r\n this.value = '';\r\n }\r\n }\r\n this.valueChange.emit(this.value);\r\n this.updated = true;\r\n }\r\n\r\n enterPressed() {\r\n this.dateInput.nativeElement.blur();\r\n // this.dateInput.nativeElement.focus(); // ONE-5782 - if I use the [Tab] key to navigate to the next field, I receive the correct error message (Invalid Date). However, if I use the [Enter] key, it either just blanks out the field with no error or gives an \"Required Field\" error.\r\n }\r\n\r\n calendarDateChanged() {\r\n if (this.innerValue != null) {\r\n this.displayValue = this.innerValue.format('MM/DD/YYYY');\r\n }\r\n else {\r\n this.displayValue = '';\r\n }\r\n this.setParentValue();\r\n this.validate();\r\n }\r\n\r\n displayDateChanged() {\r\n if (!this.updated && this.initialized) {\r\n this.localValue = this.displayValue;\r\n this.setParentValue();\r\n this.validate();\r\n }\r\n }\r\n\r\n setDate(value: string | Date | moment.Moment) {\r\n setTimeout(() => {\r\n if (value != null && value != '') {\r\n this.localValue = value;\r\n if (value.toString().toLowerCase() != 'invalid date') {\r\n this.displayValue = this.innerValue.format('MM/DD/YYYY');\r\n }\r\n }\r\n else {\r\n this.localValue = null;\r\n this.displayValue = '';\r\n }\r\n this.initialized = true;\r\n }, 0);\r\n }\r\n\r\n todayClick() {\r\n // PRE: the today button is clicked\r\n // POST: sets the date to today\r\n const today = new Date();\r\n this.setDate(today);\r\n this.valueChange.emit(today);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && changes.value) {\r\n this.setDate(changes.value.currentValue);\r\n }\r\n }\r\n\r\n clearIfInvalid() {\r\n // POST: clears the date value if it is in valid\r\n const dateValueFromDisplay = new Date(this.displayValue);\r\n if (dateValueFromDisplay.toString() == 'Invalid Date') {\r\n this.clear();\r\n } else {\r\n let momentDatevaluefromDisplay: moment.Moment;\r\n if (this.displayValue.indexOf('T') > -1) {\r\n momentDatevaluefromDisplay = moment(this.displayValue);\r\n } else {\r\n momentDatevaluefromDisplay = moment(this.displayValue, 'MM/DD/YYYY');\r\n }\r\n if (momentDatevaluefromDisplay != null && momentDatevaluefromDisplay.toString().toLocaleLowerCase() == 'invalid date') {\r\n this.displayValue = '';\r\n this.displayDateChanged();\r\n }\r\n }\r\n }\r\n\r\n validate() {\r\n this.isError = false;\r\n if (new Date(this.displayValue) > new Date('06/06/2079')) {\r\n this.isError = true;\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n @HostListener('mouseenter', ['$event'])\r\n mouseEnter(event) {\r\n // PRE: the mouse enters this component\r\n // POST: sets hovering to true to allow showing the red X\r\n this.hovering = true;\r\n event.stopPropagation();\r\n }\r\n\r\n @HostListener('mouseleave')\r\n mouseLeave() {\r\n // PRE: the mouse leaves the component\r\n // POST: sets hovering to false to disable showing the red X\r\n this.hovering = false;\r\n }\r\n\r\n clear() {\r\n // POST: clears the date and display\r\n this.displayValue = '';\r\n this.updated = false;\r\n this.displayDateChanged();\r\n }\r\n}\r\n","export class ClassroomSummaryPreferences {\r\n static V10AllOptions: string[] = [];\r\n static V9AllOptions: string[] = [];\r\n AvailableOptions: string[] = [];\r\n AvailableColumns: ClassroomSummaryColumns[] = [];\r\n OptionsToShow: string[] = [];\r\n GridColumns = [];\r\n TermId: number;\r\n ViewId: number;\r\n IncludeEmptySections: boolean;\r\n HideEmptyAlerts: boolean;\r\n }\r\n\r\nexport class ClassroomSummaryColumns {\r\n Field: string;\r\n Name: string;\r\n Width: number;\r\n}","export class DataQueryPreferences {\r\n LoadMyDefaults: boolean;\r\n StartPage: string;\r\n DisplayRelationshipTab: boolean;\r\n ShowSQLTranslation: boolean;\r\n ShowObjectName: boolean;\r\n ShowUnrelatedCategories: boolean;\r\n DisplayRestrictedCategories: boolean;\r\n}","import {ScheduleSlot} from '../../counselor360/scheduling/schedule-student-list/schedule-slot';\r\n\r\nexport class ScheduleStudentListPreferences {\r\n\r\n // Server Properties\r\n AvailableSlots: string[] = [];\r\n ShowSchedulingSlots: string[] = [];\r\n AvailableMainGridColumns: string[] = [];\r\n ShowMainGridColumns: string[] = [];\r\n AvailableSubGridColumns: string[] = [];\r\n ShowSubGridColumns: string[] = [];\r\n CheckPeriodOverlaps: boolean;\r\n CheckDayOverlaps: boolean;\r\n CheckTermOverlaps: boolean;\r\n\r\n // Local Properties\r\n get termDisplay(): boolean {\r\n return this.ShowSchedulingSlots.includes(ScheduleSlot.Displays.Term);\r\n }\r\n\r\n get periodDisplay(): boolean {\r\n return this.ShowSchedulingSlots.includes(ScheduleSlot.Displays.Period);\r\n }\r\n\r\n get dayDisplay(): boolean {\r\n return this.ShowSchedulingSlots.includes(ScheduleSlot.Displays.Day);\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-gradebook-preferences-reset-warnings',\r\n templateUrl: './gradebook-preferences-reset-warnings.component.html',\r\n styles: []\r\n})\r\nexport class GradebookPreferencesResetWarningsComponent implements OnInit, OnDestroy {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n gradebookPreferencesClick() {\r\n this.dialogRef.close('Preferences was clicked.');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","
Gradebook Preferences
\r\n\r\n\r\n
A problem was encountered and your preferences regarding which columns to show have been reset.To show additional\r\n columns, change your preferences for Columns in Scores\r\n Grid.\r\n
\r\n
\r\n\r\n\r\n \r\n","export class CustomLayoutSchoolDefault { \r\n Id: number;\r\n Layout_Id: number;\r\n School_Domain: number;\r\n LayoutType_Id: number;\r\n SchoolName: string;\r\n }","export class BehaviorPreferences {\r\n Layout_ID: number;\r\n }","export class GeneralPreferences {\r\n PageSize: string = '';\r\n EmailFrom: string = '';\r\n IsActiveDirectoryUser: boolean;\r\n IgnoreInADPermissionUpdate: boolean;\r\n DefaultYearIdentifier: string = '';\r\n DefaultSchoolId: string = '';\r\n StudentNameFormat: string = '';\r\n StudentMiddleNameFormat: string = '';\r\n ShowNickname: boolean;\r\n PrepopulateStudent: boolean;\r\n DefaultCursorPosition: number;\r\n ShowStudentAlerts: boolean;\r\n MaximumAlertIcon: string = '';\r\n AvailableClassesOption: string[];\r\n SelectedClassesOption: string = '';\r\n SelectedClassesOptionText: string = '';\r\n DefaultLoginScreen: string = '';\r\n ShowStudentNumber: boolean;\r\n ShowSQLTranslation: boolean;\r\n UseActiveDirectoryIntegration: boolean;\r\n}","
\r\n
\r\n
WARNING - Additional Teacher
\r\n
\r\n
\r\n
\r\n You are an additional teacher for some classesa class. Only the primary teacher is able to make changes to the preferences for a class.\r\n
\r\n
\r\n Changes you make will apply only to the classes for which you are not an additional teacher.\r\n
\r\n
\r\n The Show Preferences For dropdown at the top of the page only lists classes for which you are not an additional teacher.\r\n
\r\n
\r\n Note that the class selected in the dropdown is NOT the current class.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n ","import { Component, Input } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'additional-teacher-warning-dialog',\r\n templateUrl: './additional-teacher-warning-dialog.component.html'\r\n})\r\nexport class AdditionalTeacherWarningDialogComponent {\r\n\r\n @Input() additionalTeacher:boolean;\r\n @Input() multipleAdditional:boolean;\r\n @Input() singleAdditional:boolean;\r\n @Input() syncPreferencesAcrossCourses:boolean;\r\n @Input() additionalTeacherClassFocus:boolean;\r\n\r\n constructor(private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n okClick() {\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'calculation-preference-warning-dialog',\r\n templateUrl: './calculation-preference-warning-dialog.component.html'\r\n})\r\nexport class CalculationPreferenceWarningDialogComponent {\r\n\r\n constructor(private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n okClick() {\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
Calculation Type Changed
\r\n
\r\n
\r\n You have changed the Gradebook Calculation Preference and one or more of the sections has assignment scores. You may need to open each gradebook and save it in order for these changes to take affect.\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n ","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'custom-sort-warning-dialog',\r\n templateUrl: './custom-sort-warning-dialog.component.html'\r\n})\r\nexport class CustomSortWarningDialogComponent {\r\n\r\n constructor(private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n okClick() {\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
Sort Order - Custom
\r\n
\r\n
\r\n
\r\n The custom order for each class can be set by selecting Set Custom Sort Order for Students from the Tools menu.\r\n
\r\n
\r\n For classes where a custom order has not been defined, the students will be sorted alphabetically by name.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n ","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'no-grading-classes-dialog',\r\n templateUrl: './no-grading-classes-dialog.component.html'\r\n})\r\nexport class NoGradingClassesDialogComponent {\r\n\r\n constructor( private dialogRef: MatDialogRef ) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n okClick(){\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick(){\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
WARNING
\r\n
\r\n
\r\n
\r\n To change Gradebook Preferences, you must be the primary teacher for at least one class open for grading.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'primary-teacher-warning-dialog',\r\n templateUrl: './primary-teacher-warning-dialog.component.html'\r\n})\r\nexport class PrimaryTeacherWarningDialogComponent {\r\n\r\n constructor( private dialogRef: MatDialogRef ) {\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n okClick(){\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick(){\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n You are not the primary teacher for this class.\r\n
\r\n
\r\n
\r\n Only the primary teacher is allowed to make changes to the preferences for a class.\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-project-scores-info',\r\n templateUrl: './project-scores-info.component.html'\r\n})\r\nexport class ProjectScoresInfoComponent {\r\n\r\n constructor(\r\n private dialog: MatDialogRef\r\n ) {\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n\r\n}\r\n","
\r\n Sync Preferences Across Classes\r\n
\r\n\r\n\r\n
\r\n Unchecking this setting will make the preferences for all classes be independent. From this point\r\n forward, if you make a preference change in one class and want the change to apply to all classes, you will\r\n have to manually go to the preference screen for each class and make the change.

\r\n Are you sure you want to turn off syncing?\r\n
\r\n
\r\n Checking this setting and saving will make the preferences for this class be applied to all\r\n classes. If instead you want the preferences from a different\r\n class to be applied to all classes, click Cancel, go to that other class, go to Preferences, click the\r\n Sync preferences checkbox, then click Save.

\r\n Are you sure you want to turn on syncing from this class?\r\n
\r\n
\r\n\r\n\r\n \r\n","
\r\n Project Future Scores\r\n
\r\n\r\n\r\n\r\n \r\n The columns shown are based on the Slot Weight Formula defined for this course's grading type. When grades have\r\n not been posted, only the first calculated period and all contributing periods will be displayed. When the grades have been posted\r\n all contributing periods up to the first unposted period, and the final grade will be displayed.\r\n \r\n\r\n\r\n\r\n\r\n \r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'sync-preferences-dialog',\r\n templateUrl: './sync-preferences-dialog.component.html'\r\n})\r\nexport class SyncPreferencesDialogComponent {\r\n\r\n syncPreferencesAcrossCourses: boolean;\r\n\r\n constructor(private dialogRef: MatDialogRef) {\r\n }\r\n\r\n okClick() {\r\n this.dialogRef.close('OK was clicked');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","\r\n
\r\n Scheduling\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n Class Roster\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the columns are displayed.\r\n
\r\n
\r\n\r\n \r\n
\r\n Classes by Course\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Main Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Main Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the columns are displayed.\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Sub Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Sub Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the columns are displayed.\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n Master Schedule\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Class Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Class Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the columns are displayed.\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Section Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Section Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the columns are displayed.\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n Period Statistics\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Statistics\r\n
\r\n
\r\n
\r\n
\r\n {{field}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show\r\n
\r\n
\r\n
\r\n
\r\n {{field}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Statistics into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the fields are displayed.\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n Room Scheduling Settings\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Columns\r\n
\r\n
\r\n
\r\n
\r\n {{field}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Columns\r\n
\r\n
\r\n
\r\n
\r\n {{field}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the fields are displayed.\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n \r\n
\r\n Schedule Student List\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Slots\r\n
\r\n
\r\n
\r\n
\r\n {{slot}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Scheduling Slots\r\n
\r\n
\r\n
\r\n
\r\n {{slot}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Slots into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the fields are displayed.\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Main Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Main Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the fields are displayed.\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n Available Add Student to Sections Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show Add Student to Sections Grid Columns\r\n
\r\n
\r\n
\r\n
\r\n {{column}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Columns into Show to add them to the grid.\r\n
\r\n Drag within Show to change the order in which the fields are displayed.\r\n
\r\n
\r\n
\r\n","import { LoginService } from './../../../../shared-modules/login/login.service';\r\nimport {Component, Input, OnInit} from '@angular/core';\r\nimport {MasterSchedulePreferences} from '../../master-schedule-preferences.model';\r\nimport {PeriodStatisticsPreferences} from '../../period-statistics-preferences.model';\r\nimport {CdkDragDrop, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';\r\nimport {ScheduleStudentListPreferences} from '../../schedule-student-list-preferences.model';\r\nimport {ClassesByCoursePreferences} from '../../classes-by-course-preferences.model';\r\nimport {ClassRosterPreferences} from '../../class-roster-preferences.model';\r\nimport {RoomSchedulingSettingsPreferences} from '../../room-scheduling-settings-preferences.model';\r\n\r\n@Component({\r\n selector: 'scheduling-tab',\r\n templateUrl: './scheduling-tab.component.html',\r\n styleUrls: [\r\n './scheduling-tab.component.css',\r\n '../user-preferences-window.component.css'\r\n ]\r\n})\r\nexport class SchedulingTabComponent implements OnInit {\r\n\r\n // Input Properties\r\n @Input() masterSchedulePreferences: MasterSchedulePreferences;\r\n @Input() periodStatisticsPreferences: PeriodStatisticsPreferences;\r\n @Input() scheduleStudentListPreferences: ScheduleStudentListPreferences;\r\n @Input() classesByCoursePreferences: ClassesByCoursePreferences;\r\n @Input() classRosterPreferences: ClassRosterPreferences;\r\n @Input() roomSchedulingSettingsPreferences: RoomSchedulingSettingsPreferences;\r\n @Input() canSeeMasterSchedule: boolean;\r\n @Input() canSeePeriodStatistics: boolean;\r\n @Input() canSeeScheduleStudentList: boolean;\r\n @Input() canSeeClassesByCourse: boolean;\r\n @Input() canSeeRoomSchedulingSettings: boolean;\r\n @Input() fieldDrop = (event: CdkDragDrop) => {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n else {\r\n transferArrayItem(event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex);\r\n }\r\n }\r\n \r\n // Local Properties\r\n public masterScheduleKendoGrid = false;\r\n\r\n // Constructor\r\n constructor(\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.masterScheduleKendoGrid = this.loginService.LoginSettings.ActivateKendoGridInMasterSchedule360\r\n }\r\n}\r\n","
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
Default\r\n
\r\n
Preferences
\r\n
\r\n for {{currentUser.FirstName}} {{currentUser.LastName}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
General
Attendance
Behavior
Classroom\r\n Summary
Communication\r\n Log
Data\r\n Query
Favorites
Gradebook
Home
Mass\r\n Email
\r\n Scheduling\r\n
\r\n My Reports\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n General\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Default From\r\n address when sending emails through the system \r\n \r\n \r\n \r\n {{ea.value}}\r\n \r\n \r\n \r\n
\r\n
\r\n ACTIVE DIRECTORY\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Active\r\n Directory user\r\n \r\n
\r\n \r\n Do not\r\n update this user's permissions from Active\r\n Directory\r\n \r\n
\r\n
\r\n
\r\n LOGIN\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Default Year after login\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{year.Description}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{year.Description}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Default School after login\r\n \r\n \r\n \r\n \r\n {{school.SchoolName}}\r\n \r\n \r\n \r\n
\r\n
\r\n When Enter is pressed\r\n on the Login screen, log me into\r\n
\r\n
\r\n
\r\n STUDENT ALERTS\r\n \r\n
\r\n
\r\n \r\n When student alerts are shown in a grid, maximum alert icons to show\r\n \r\n \r\n \r\n All\r\n \r\n 1\r\n 2\r\n 3\r\n 4\r\n 5\r\n 6\r\n 7\r\n 8\r\n 9\r\n 10\r\n \r\n \r\n \r\n
\r\n
\r\n STUDENT NAMES\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n Format
\r\n \r\n \r\n
Middle\r\n Name
\r\n \r\n \r\n
\r\n \r\n \r\n Show student nickname if it exists\r\n \r\n Show\r\n nickname if exists\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Attendance, Behavior Referrals, Communication\r\n Log, Gradebook, Student Notes\r\n \r\n \r\n Attendance, Behavior Referrals, Communication\r\n Log, Gradebook\r\n \r\n \r\n
\r\n \r\n Show student # column in tables on\r\n teacher-oriented pages:\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n STUDENT SEARCH\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Pre-populate Student Search grid with results when\r\n opened\r\n \r\n \r\n
Default\r\n cursor position for Student Search screen
\r\n \r\n \r\n
\r\n \r\n Show student\r\n alerts in Student Search grid\r\n \r\n
\r\n \r\n Show SQL\r\n Translation on Student Filter page\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Attendance\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Show all periods in the day\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Enter codes using
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Default for side panel
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Available\r\n Columns\r\n
\r\n
\r\n
\r\n {{column}}
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n Show\r\n
\r\n
\r\n
\r\n {{column}}
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n Drag names from Available Columns into Show to\r\n add them to the grid.
\r\n Drag within Show to change the order in which\r\n the columns are displayed.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Behavior\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Quick Add Layout\r\n \r\n \r\n \r\n \r\n (Use School Default)\r\n \r\n \r\n {{layout.Name}}\r\n \r\n \r\n \r\n \r\n \r\n Edit My Layouts\r\n Edit Layouts\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
Choose Default Layouts
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n School\r\n \r\n \r\n Layout\r\n
\r\n (All)\r\n \r\n \r\n \r\n \r\n {{layout.Name}}\r\n \r\n \r\n \r\n
\r\n {{defaultSchoolLayout.SchoolName}}\r\n \r\n \r\n \r\n \r\n {{layout.Name}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Classroom Summary\r\n Home\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Available\r\n Buttons\r\n
\r\n
\r\n
\r\n {{option}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n Show\r\n
\r\n
\r\n
\r\n
\r\n {{option}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Drag names from Available Buttons into Show to add them to the screen.
\r\n Drag within Show to change the order in which the buttons are displayed.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Communication Log\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Default\r\n for Show\r\n entries created by all staff
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n Display single line of text for Subject\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Data Query\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n When the Data Query page is first accessed\r\n
\r\n \r\n Load my default\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Display
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Display the Relationships\r\n tab\r\n \r\n
\r\n \r\n Show Object name as part of Field\r\n name\r\n \r\n
\r\n \r\n Show SQL Translation on Filters\r\n tab\r\n \r\n
\r\n \r\n Show Unrelated\r\n Categories\r\n \r\n
\r\n \r\n Display Restricted\r\n Categories\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n Gradebook\r\n \r\n \r\n Preferences cannot be changed for additional courses\r\n \r\n
\r\n Show Preferences\r\n For: \r\n 0\">\r\n \r\n \r\n {{course.Course}} ({{course.SubjectCode}}-{{course.Section}}) M:\r\n {{course.Meets}}\r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n {{course.Course}} ({{course.SubjectCode}}-{{course.Section}}) M:\r\n {{course.Meets}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n 0 && !isDefaultPreferences\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Sync preferences\r\n across classes\r\n \r\n
\r\n \r\n Show Unit Dropdown\r\n \r\n
\r\n \r\n Show \"Not on Portal\" row\r\n \r\n
\r\n \r\n Show letter grades\r\n \r\n
\r\n ADDING ASSIGNMENTS\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Use\r\n Quick Add window\r\n Disabled in\r\n School Policies\r\n \r\n
\r\n Default Show on parent/student portal\r\n
\r\n \r\n \r\n \r\n  Set\r\n in School Policies\r\n
\r\n Default Class(es) field to\r\n \r\n \r\n
\r\n
\r\n
\r\n ASSIGNMENT HEADING\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{option.DisplayName}}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Characters\r\n of Summary to show in columns:\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Characters\r\n of Summary to show in right-side\r\n panel:\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Show\r\n heading:
\r\n \r\n \r\n
\r\n
\r\n
Drag fields up or down to change the\r\n order in which they display.
\r\n
\r\n
\r\n ASSIGNMENT SORT\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
AscendDescend
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{option.Heading}}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n Drag rows up or down to change the sort order.\r\n
\r\n
\r\n ASSIGNMENT SCORES\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Show Comment column\r\n \r\n When\r\n editing a score, highlight:
\r\n \r\n \r\n
Show\r\n effective score as:\r\n \r\n Warn if score\r\n entered > possible points\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Enable number panel\r\n pop-up\r\n \r\n
\r\n
When using Fill Blank Scores\r\n
\r\n
Assign\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Score\r\n \r\n \r\n
\r\n \r\n \r\n Special\r\n mark\r\n \r\n \r\n \r\n \r\n {{specialMark.Code}}\r\n \r\n \r\n \r\n
\r\n
\r\n
to\r\n students without a score or special mark
\r\n \r\n Ask\r\n every time\r\n \r\n
\r\n
\r\n
\r\n AUTO-SAVE\r\n \r\n
\r\n
\r\n \r\n Every \r\n \r\n \r\n\r\n \r\n \r\n \r\n   minutes\r\n Disabled\r\n in School Policies\r\n
\r\n
\r\n COMMENTS\r\n \r\n
\r\n
\r\n \r\n \r\n Space\r\n Comma\r\n Semi-Colon\r\n \r\n \r\n
\r\n
\r\n Use\r\n Comment Codes instead of Comments\r\n
\r\n
\r\n COLUMNS IN SCORES GRID\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Available Columns\r\n \r\n
\r\n \r\n
\r\n \r\n {{column.DisplayName}}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Non-Scrolling Columns\r\n \r\n
\r\n
\r\n
\r\n {{column.DisplayName}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n Scrolling Columns\r\n \r\n
\r\n
\r\n \r\n {{column.DisplayName}}\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n Drag columns from Available Columns into either of the other\r\n boxes.
\r\n Drag within the center and right boxes to change the order in\r\n which the columns display.
\r\n Non-scrolling columns will be listed first and will stay\r\n visible as the grid is scrolled to the right.\r\n
\r\n
\r\n
\r\n \r\n REPORT CARD GRADES\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Past\r\n terms\r\n \r\n \r\n \r\n \r\n \r\n \r\n Future\r\n terms\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Show Report Card Grade Columns for all\r\n terms that include the current date\r\n \r\n
\r\n Also\r\n show\r\n
\r\n \r\n \r\n \r\n \r\n Ended within \r\n \r\n \r\n \r\n   days of current date\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Started within \r\n \r\n \r\n \r\n   days of current date\r\n \r\n
\r\n \r\n Project Future Scores\r\n \r\n
\r\n
\r\n Show\r\n Report Card Grade columns for\r\n
\r\n \r\n Progress\r\n Cycles\r\n \r\n
\r\n \r\n Terms\r\n \r\n
\r\n \r\n Semesters\r\n \r\n
\r\n \r\n Year-End\r\n \r\n
\r\n
\r\n
\r\n STANDARDS\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Show column headings:\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Show\r\n row for Special Mark\r\n \r\n
\r\n \r\n Show\r\n assignments on Report Card Grades tab\r\n \r\n
\r\n \r\n \r\n Show only Standards code\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n STUDENTS\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Sort Order:\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Show\r\n dropped/withdrawn\r\n
\r\n Set\r\n in School Policies
\r\n
\r\n
\r\n \r\n Show\r\n future students\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n FINAL GRADE CALCULATIONSet\r\n in the School Policy\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n Semester\r\n and Final grades are calculated using\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n Cannot select Total Points for calculating the Semester and\r\n Final Grade until an Administrator creates a Total Point\r\n formula\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n Semester and Final grades are calculated using\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n Cannot\r\n select Total\r\n Points for calculating the Semester and Final Grade\r\n until\r\n an Administrator creates a Total Point formula.\r\n Cannot\r\n select Total\r\n Points for calculation because Category Weights are not\r\n the\r\n same across Grading Periods.\r\n
\r\n
\r\n
\r\n
\r\n ROUNDING\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Assignments\r\n \r\n Set in the School Policy\r\n \r\n
\r\n \r\n Allow entry of\r\n \r\n \r\n \r\n 0\r\n 1\r\n 2\r\n \r\n \r\n \r\n decimal places\r\n \r\n
\r\n \r\n Grading Period/Course Work\r\n \r\n \r\n Set in the School Policy\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n 0\r\n 1\r\n 2\r\n \r\n \r\n
\r\n \r\n Semester/Term/Final Grades\r\n \r\n \r\n Set in the School Policy\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n 0\r\n 1\r\n 2\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Mass Email\r\n
\r\n
\r\n Default Create Communication Log entries\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n Signature (Also used in Send Email)\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n My Reports\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n If there are tabs for both 'My Reports' and 'Assigned Reports', default tab\r\n should be:\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n 0 || isDefaultPreferences))\"\r\n image=\"Save.png\" label=\"Save\" (clickEvent)=\"saveClick()\" style=\"float:right\">\r\n \r\n
\r\n
\r\n
","import { CdkDrag, CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\r\nimport { AfterViewInit, Component, ElementRef, Inject, Input, OnInit, Pipe, PipeTransform, ViewChild } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Router } from '../../../../../node_modules/@angular/router';\r\nimport { ClassroomSummary } from '../../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { GradebookPreferences } from '../../../classroom360/gradebook/shared/models/preferences/gradebook-preferences.model';\r\nimport { GradebookV9Service } from '../../../classroom360/gradebook/v9/gradebook-v9.service';\r\nimport { SpecialMark } from '../../../classroom360/gradebook/v9/models/special-mark.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { ErrorList } from '../../controls/error-prompt/error-list.model';\r\nimport { GeneralConfirmationComponent } from '../../controls/general-confirmation/general-confirmation.component';\r\nimport { CustomLayoutsService } from '../../custom-layouts/custom-layouts.service';\r\nimport { LayoutEditorComponent } from '../../custom-layouts/layout-editor/layout-editor.component';\r\nimport { CustomLayoutSchoolDefault } from '../../custom-layouts/Models/custom-layout-school-default.model';\r\nimport { CustomLayout } from '../../custom-layouts/Models/custom-layout.model';\r\nimport { SavedLayoutsDialogComponent } from '../../custom-layouts/saved-layouts-dialog/saved-layouts-dialog.component';\r\nimport { FavoritesComponent } from '../../favorites/favorites.component';\r\nimport { Portal } from '../../portal.model';\r\nimport { SecurityService } from '../../security/security.service';\r\nimport { SharedService } from '../../shared.service';\r\nimport { UserPermission } from '../../user/user-permission.model';\r\nimport { UserSchoolYearPolicies } from '../../user/user-school-year-policies.model';\r\nimport { User } from '../../user/user.model';\r\nimport { UserService } from '../../user/user.service';\r\nimport { School } from '../../year/school.model';\r\nimport { Year } from '../../year/year.model';\r\nimport { YearService } from '../../year/year.service';\r\nimport { AttendancePreferences } from '../attendance-preferences.model';\r\nimport { BehaviorPreferences } from '../behavior-preferences.model';\r\nimport { ClassRosterPreferences } from '../class-roster-preferences.model';\r\nimport { ClassesByCoursePreferences } from '../classes-by-course-preferences.model';\r\nimport { ClassroomSummaryPreferences } from '../classroom-summary-preferences.model';\r\nimport { CommunicationLogPreferences } from '../communication-log-preferences.model';\r\nimport { DataQueryPreferences } from '../data-query-preferences.model';\r\nimport { FavoritePreferences } from '../favorite-prefences.model';\r\nimport { GeneralPreferences } from '../general-preferences.model';\r\nimport { MassEmailPreferences } from '../mass-email-preferences.model';\r\nimport { MasterSchedulePreferences } from '../master-schedule-preferences.model';\r\nimport { MyReportsPreferences } from '../my-reports-preferences.model';\r\nimport { PeriodStatisticsPreferences } from '../period-statistics-preferences.model';\r\nimport { RoomSchedulingSettingsPreferences } from '../room-scheduling-settings-preferences.model';\r\nimport { ScheduleStudentListPreferences } from '../schedule-student-list-preferences.model';\r\nimport { UserPreferencesService } from '../user-preferences.service';\r\nimport { AdditionalTeacherWarningDialogComponent } from './additional-teacher-warning-dialog/additional-teacher-warning-dialog.component';\r\nimport { CalculationPreferenceWarningDialogComponent } from './calculation-preference-warning-dialog/calculation-preference-warning-dialog.component';\r\nimport { CustomSortWarningDialogComponent } from './custom-sort-warning-dialog/custom-sort-warning-dialog.component';\r\nimport { GradebookPreferencesResetWarningsComponent } from './gradebook-preferences-reset-warnings/gradebook-preferences-reset-warnings.component';\r\nimport { NoGradingClassesDialogComponent } from './no-grading-classes-dialog/no-grading-classes-dialog.component';\r\nimport { PrimaryTeacherWarningDialogComponent } from './primary-teacher-warning-dialog/primary-teacher-warning-dialog.component';\r\nimport { ProjectScoresInfoComponent } from './project-scores-info/project-scores-info.component';\r\nimport { SyncPreferencesDialogComponent } from './sync-preferences-dialog/sync-preferences-dialog.component';\r\n\r\n@Component({\r\n selector: 'user-preferences-window',\r\n templateUrl: './user-preferences-window.component.html',\r\n styleUrls: ['./user-preferences-window.component.css']\r\n})\r\nexport class UserPreferencesWindowComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() staffAssignedPortals: Portal[];\r\n @Input() courseId: number;\r\n @ViewChild('specialMarks') specialMarks: ElementRef;\r\n @ViewChild('scoreValue') scoreValue: ElementRef;\r\n @ViewChild('gradebookPreferencesDiv') gradebookPreferencesDiv: ElementRef;\r\n @ViewChild('columnsInScoreGridRow') columnsInScoreGridRow: ElementRef;\r\n public entryId: number;\r\n public form: FormGroup;\r\n private saveRequests: Observable[] = [];\r\n\r\n subscriptions: Subscription[] = [];\r\n // ------------User Data---------------------------\r\n staffAssignedPortalNames: boolean[] = [];\r\n generalPreferences: GeneralPreferences = new GeneralPreferences();\r\n sendingEmailAddress: any;\r\n currentYearSchools: School[];\r\n years: Year[];\r\n selectedYear: Year;\r\n attendancePreferences: AttendancePreferences;\r\n communicationLogPreferences: CommunicationLogPreferences;\r\n classroomSummaryPreferences: ClassroomSummaryPreferences = new ClassroomSummaryPreferences();\r\n dataQueryPreferences: DataQueryPreferences;\r\n massEmailPreferences: MassEmailPreferences;\r\n gradebookPreferences: GradebookPreferences = new GradebookPreferences();\r\n schoolYearSettings: any;\r\n favoritesPreferences: FavoritePreferences;\r\n behaviorPreferences: BehaviorPreferences;\r\n userPermissions: UserPermission[];\r\n @ViewChild('appFavorites', { static: true }) appFavorites: FavoritesComponent;\r\n schools: School[] = [];\r\n layouts: CustomLayout[] = [];\r\n // schoolLayouts: SchoolLayout[] = [];\r\n allLayoutsId = 0;\r\n defaultSchoolLayouts: CustomLayoutSchoolDefault[] = [];\r\n defaultUserLayoutId: number;\r\n numericZero = 0;\r\n masterSchedulePreferences: MasterSchedulePreferences;\r\n periodStatisticsPreferences: PeriodStatisticsPreferences;\r\n scheduleStudentListPreferences: ScheduleStudentListPreferences;\r\n classesByCoursePreferences: ClassesByCoursePreferences;\r\n classRosterPreferences: ClassRosterPreferences;\r\n roomSchedulingSettingsPreferences: RoomSchedulingSettingsPreferences;\r\n errors: ErrorList[] = [];\r\n // ------------Gradebook-----------------------------------\r\n selectedGradebookClass: ClassroomSummary;\r\n selectedGradebookClassId: any;\r\n myClasses: ClassroomSummary[] = [];\r\n additionalCourses: ClassroomSummary[] = [];\r\n gradebookSpecialMarks: SpecialMark[] = [];\r\n singleAdditional: boolean;\r\n multipleAdditional: boolean;\r\n additionalTeacher: boolean;\r\n additionalTeacherClassFocus: boolean;\r\n userSchoolYearPolicies: UserSchoolYearPolicies;\r\n setDefaultForStandardsView: boolean;\r\n warnIfCalculationPreferencesChanged: boolean;\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n activateClassroom360: boolean;\r\n userIsTeacher: boolean;\r\n selectedPreferenceTab: string;\r\n v10: boolean;\r\n rowDetailExpand: boolean[] = [];\r\n useUnifiedLoginPage: boolean;\r\n classroom360AttendanceCommentsEditable: boolean;\r\n isDefaultPreferences = false;\r\n c360ShowCommunicationLog: boolean;\r\n viewAllStaffCommunicationLogs: boolean;\r\n disciplineQuickEntryUserCreateLayout: boolean;\r\n disciplineQuickEntrySetDefaultSchoolLayout: boolean;\r\n disciplineQuickEntrySetDefaultDistrictLayout: boolean;\r\n disciplineQuickEntryUserSelectLayout: boolean;\r\n allowDisciplineQuickEntry: boolean;\r\n activateAttendanceAdministration = false;\r\n\r\n currentUser: User;\r\n gradebookStudentSortOrderOptions: string[] = ['Course Add Date', 'Custom', 'Status', 'Student Name'];\r\n // ------------Modal windows----------------------------------\r\n additionalTeacherWarningDialogRef: MatDialogRef;\r\n calculationPreferenceWarningDialogRef: MatDialogRef;\r\n customSortWarningDialogRef: MatDialogRef;\r\n noGradingClassesDialogRef: MatDialogRef;\r\n primaryTeacherWarningDialogRef: MatDialogRef;\r\n syncPrefDialogRef: MatDialogRef;\r\n projectScoresDialog: MatDialogRef;\r\n staffAssignedPortalsCopy: Portal[] = [];\r\n\r\n // -------------------- MY Reports ----------------------------\r\n myReportsPreferences: MyReportsPreferences;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private userPreferenceService: UserPreferencesService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private customLayoutService: CustomLayoutsService,\r\n private classroom360Service: Classroom360Service,\r\n private gradebookV9Service: GradebookV9Service,\r\n private sharedService: SharedService,\r\n private securityService: SecurityService,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) {\r\n this.form = new FormGroup({\r\n filler: new FormControl()\r\n });\r\n\r\n this.activateClassroom360 = loginService.LoginSettings.ActivateClassroom360;\r\n this.currentUser = this.userService.currentUser;\r\n this.userIsTeacher = userService.currentUser.UserIsTeacher;\r\n this.v10 = loginService.LoginSettings.V10;\r\n this.useUnifiedLoginPage = loginService.LoginSettings.UseUnifiedLoginPage;\r\n this.c360ShowCommunicationLog = loginService.LoginSettings.C360ShowCommunicationLog;\r\n this.classroom360AttendanceCommentsEditable = loginService.LoginSettings.Classroom360AttendanceCommentsEditable;\r\n this.activateAttendanceAdministration = loginService.LoginSettings.ActivateAttendanceAdministration360;\r\n this.dataQueryPreferences = new DataQueryPreferences;\r\n\r\n if (this.data == null || this.data.initialTab == undefined || this.data.initialTab == null) {\r\n this.selectedPreferenceTab = 'General';\r\n } else {\r\n this.selectedPreferenceTab = this.data.initialTab;\r\n if (!this.v10 && this.selectedPreferenceTab == 'Gradebook') {\r\n if (this.activateClassroom360 && !this.userIsTeacher || this.data.isDefaultPreferences) {\r\n this.selectedPreferenceTab = 'General';\r\n }\r\n }\r\n }\r\n\r\n if (this.data != null && this.data.isDefaultPreferences != undefined) {\r\n this.isDefaultPreferences = this.data.isDefaultPreferences;\r\n }\r\n\r\n this.getMyClass();\r\n this.getUserSchoolYearPolicies();\r\n this.getUserPermission();\r\n this.getSchoolYearSettings();\r\n\r\n this.getGeneralPreferences();\r\n this.getDataQueryPreferences();\r\n this.getAttendancePreferences();\r\n this.getClassroomSummaryPreferences();\r\n this.getCommunicationLogPreferences();\r\n this.getMassEmailPreferences();\r\n this.getMasterSchedulePreferences();\r\n this.getPeriodStatisticsPreferences();\r\n this.getScheduleStudentListPreferences();\r\n this.getClassesByCoursePreferences();\r\n this.getClassRosterPreferences();\r\n this.getRoomSchedulingSettingsPreferences();\r\n this.getMyReportsPreferences();\r\n }\r\n\r\n // --------------LifeCycle---------------------------------------\r\n\r\n ngOnInit() {\r\n // relies on @input that is not available until ngOnInit\r\n this.getStaffAssignedPortals();\r\n // requires getStaffAssignedPortals\r\n // this.getFavoritesPreferences();\r\n // relies on data\r\n if (this.data && this.data.selectedTab) {\r\n this.selectedPreferenceTab = this.data.selectedTab;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.data.scrollToElement != null && this.data.scrollToElement != '') {\r\n if (this.data.scrollToElement == 'COLUMNS IN SCORES GRID' && this.gradebookPreferencesDiv != null && this.columnsInScoreGridRow != null) {\r\n this.gradebookPreferencesDiv.nativeElement.scrollTop = this.columnsInScoreGridRow.nativeElement.offsetTop;\r\n }\r\n }\r\n }\r\n\r\n columnDropped(event) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n } else {\r\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n this.setGradebookStudentNumberColumn();\r\n }\r\n\r\n columnDroppedAndSort(event, column: string) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n } else {\r\n transferArrayItem(event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex);\r\n // //if transfer, recalculate the order of previous (the list from drag)\r\n // if(column) {\r\n // event.previousContainer.data.sort((a, b) => a[column] < b[column] ? -1 : a[column] > b[column] ? 1 : 0)\r\n // event.previousContainer.data.forEach((x, index) => {\r\n // x.order = index;\r\n // });\r\n // }\r\n // else {\r\n // event.previousContainer.data.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\r\n // }\r\n }\r\n // always, recalculate the order of the container (the list to drag)\r\n if (column) {\r\n event.container.data.sort((a, b) => a[column] < b[column] ? -1 : a[column] > b[column] ? 1 : 0);\r\n event.container.data.forEach((x, index) => {\r\n x.order = index;\r\n });\r\n } else {\r\n event.container.data.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\r\n }\r\n this.setGradebookStudentNumberColumn();\r\n }\r\n\r\n setGradebookStudentNumberColumn() {\r\n if (this.generalPreferences.ShowStudentNumber) {\r\n let studentNameColumn = this.gradebookPreferences.AvailableColumns.filter(c => c.Field == 'StudentName' || c.Field == 'StudentNumber')[0];\r\n if (studentNameColumn != undefined) {\r\n this.gradebookPreferences.AvailableColumns = this.gradebookPreferences.AvailableColumns.filter(c => c.Field != 'StudentName');\r\n this.gradebookPreferences.AvailableColumns = this.gradebookPreferences.AvailableColumns.filter(c => c.Field != 'StudentNumber');\r\n } else {\r\n studentNameColumn = this.gradebookPreferences.ScrollingColumns.filter(c => c.Field == 'StudentName' || c.Field == 'StudentNumber')[0];\r\n if (studentNameColumn != undefined) {\r\n this.gradebookPreferences.ScrollingColumns = this.gradebookPreferences.ScrollingColumns.filter(c => c.Field != 'StudentName');\r\n this.gradebookPreferences.ScrollingColumns = this.gradebookPreferences.ScrollingColumns.filter(c => c.Field != 'StudentNumber');\r\n }\r\n }\r\n if (studentNameColumn != undefined) {\r\n this.gradebookPreferences.NonScrollingColumns.unshift(studentNameColumn);\r\n }\r\n studentNameColumn = this.gradebookPreferences.NonScrollingColumns.filter(c => c.Field == 'StudentName' || c.Field == 'StudentNumber')[0];\r\n this.gradebookPreferences.NonScrollingColumns.unshift(this.gradebookPreferences.NonScrollingColumns.splice(this.gradebookPreferences.NonScrollingColumns.indexOf(studentNameColumn), 1)[0]);\r\n }\r\n }\r\n\r\n // ------------Get User Data---------------------------\r\n\r\n getStaffAssignedPortals() {\r\n\r\n // Helper Function\r\n const processStaffAssignedPortals = () => {\r\n for (let i = 0; i < this.staffAssignedPortals.length; i++) {\r\n if (this.staffAssignedPortals[i].Deleted == false) {\r\n if (this.staffAssignedPortals[i].PortalName != 'Attendance' || this.staffAssignedPortals[i].PortalDescription == '/classroomAttendance') {\r\n this.staffAssignedPortalNames[this.staffAssignedPortals[i].PortalName] = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Performing Processing\r\n this.staffAssignedPortalNames = [];\r\n if (this.userService.userType == 1) {\r\n this.staffAssignedPortalNames['Classroom Summary'] = true;\r\n this.staffAssignedPortalNames['Mass Email'] = true;\r\n }\r\n if (!this.staffAssignedPortals) {\r\n this.staffAssignedPortals = this.classroom360Service.staffAssignedPortals;\r\n processStaffAssignedPortals();\r\n } else {\r\n this.subscriptions.push(\r\n this.classroom360Service.getStaffAssignedPortals().subscribe(result => {\r\n this.staffAssignedPortals = result;\r\n processStaffAssignedPortals();\r\n })\r\n );\r\n }\r\n }\r\n\r\n getUserPermission() {\r\n this.viewAllStaffCommunicationLogs = false;\r\n\r\n this.userPermissions = this.securityService.userPermissions;\r\n\r\n if (this.loginService.LoginSettings.C360ShowCommunicationLog == false) {\r\n if (this.userPermissions.filter(x => x.PermissionName == 'View ALL Staff Parent Contact Logs').length > 0) {\r\n this.viewAllStaffCommunicationLogs = true;\r\n }\r\n } else {\r\n if (this.userPermissions.filter(x => x.PermissionName == 'View All Communication Logs').length > 0) {\r\n this.viewAllStaffCommunicationLogs = true;\r\n } else if (this.userPermissions.filter(x => x.PermissionName == 'Add Edit All Communication Logs').length > 0) {\r\n this.viewAllStaffCommunicationLogs = true;\r\n }\r\n }\r\n if (this.v10) {\r\n this.allowDisciplineQuickEntry = this.userPermissions.filter(x => x.PrivilegeId == 2204).length > 0;\r\n this.disciplineQuickEntryUserSelectLayout = this.userPermissions.filter(x => x.PrivilegeId == 2543).length > 0;\r\n this.disciplineQuickEntryUserCreateLayout = this.userPermissions.filter(x => x.PrivilegeId == 2544).length > 0;\r\n this.disciplineQuickEntrySetDefaultSchoolLayout = this.userPermissions.filter(x => x.PrivilegeId == 2545).length > 0;\r\n this.disciplineQuickEntrySetDefaultDistrictLayout = this.userPermissions.filter(x => x.PrivilegeId == 2546).length > 0;\r\n } else {\r\n this.allowDisciplineQuickEntry = this.userPermissions.filter(x => x.PermissionName == 'Allow user to use Quick Entry').length > 0;\r\n this.disciplineQuickEntryUserSelectLayout = this.userPermissions.filter(x => x.PermissionName == 'Allow user to select own Quick Entry layout').length > 0;\r\n this.disciplineQuickEntryUserCreateLayout = this.userPermissions.filter(x => x.PermissionName == 'Allow user to create Quick Entry layout').length > 0;\r\n this.disciplineQuickEntrySetDefaultSchoolLayout = this.userPermissions.filter(x => x.PermissionName == 'User can set default Quick Entry layout for school').length > 0;\r\n this.disciplineQuickEntrySetDefaultDistrictLayout = this.userPermissions.filter(x => x.PermissionName == 'User can set default Quick Entry layout for district').length > 0;\r\n }\r\n if (this.isDefaultPreferences || (this.disciplineQuickEntryUserSelectLayout && this.allowDisciplineQuickEntry)) {\r\n this.getLayoutType();\r\n }\r\n }\r\n\r\n getMyClass() {\r\n const selectedTermId = 0; // All terms\r\n const selectedViewValue = 3; // Merged For Grading\r\n\r\n this.userPreferenceService.getMyClasses(selectedTermId, Number(selectedViewValue), this.userService.currentUser.UserIsTeacher, false, this.loginService.LoginSettings.V10 ? null : new Date(Date.now())).subscribe(data => {\r\n this.myClasses = data.filter(x => x.UsedForGrading && !x.AdditionalTeacher);\r\n this.additionalCourses = data.filter(x => x.UsedForGrading && x.AdditionalTeacher);\r\n this.getGradebookPreferences();\r\n });\r\n }\r\n\r\n setEmailAddress() {\r\n this.sendingEmailAddress = [\r\n { id: 'Personal', value: 'My Email Address' },\r\n { id: 'No Reply', value: 'Parent Notification Default \"From\" Address' }];\r\n\r\n if (this.v10) {\r\n this.sendingEmailAddress[1].value = 'System\\'s No-Reply Email Address';\r\n }\r\n }\r\n\r\n getUserSchoolYear() {\r\n let year: any;\r\n this.years = [];\r\n\r\n // V10\r\n if (this.v10) {\r\n year = { Id: 'Current Year', Description: 'Current Year', AYIdentifier: 'Current Year' };\r\n this.years.push(year);\r\n\r\n for (year of this.yearService.allYears) {\r\n if (this.years.filter(y => y.AYIdentifier == year.AYIdentifier).length == 0) {\r\n this.years.push(year);\r\n }\r\n }\r\n\r\n const selectedYear = this.years.filter(y => y.AYIdentifier == this.generalPreferences.DefaultYearIdentifier)[0];\r\n this.selectedYear = selectedYear;\r\n this.getCurrentYearSchools(selectedYear);\r\n }\r\n\r\n // V9\r\n if (!this.v10) {\r\n for (year of this.yearService.years) {\r\n if (this.years.filter(x => x.Description == year.Description).length == 0) {\r\n this.years.push(year);\r\n }\r\n }\r\n this.getCurrentYearSchoolsV9(this.generalPreferences.DefaultYearIdentifier);\r\n }\r\n\r\n }\r\n\r\n getCurrentYearSchools(year: Year) {\r\n this.generalPreferences.DefaultYearIdentifier = (year) ? year.AYIdentifier : '';\r\n const yearDescription = (year) ? year.Description : '';\r\n this.currentYearSchools = [];\r\n let filterSchools: Year[] = [];\r\n\r\n let school: School = new School();\r\n school.Id = 0;\r\n school.SchoolName = '';\r\n this.currentYearSchools.push(school);\r\n\r\n if (yearDescription == 'Current Year') {\r\n const currentYear = this.yearService.allYears.find(x => x.Status == 1);\r\n if (currentYear) {\r\n filterSchools = this.yearService.allYears.filter(y => y.AYIdentifier == currentYear.AYIdentifier);\r\n }\r\n } else {\r\n filterSchools = (year) ? this.yearService.allYears.filter(y => y.AYIdentifier == year.AYIdentifier) : [];\r\n }\r\n\r\n if (filterSchools.length > 0) {\r\n for (let i = 0; i < filterSchools.length; i++) {\r\n school = new School();\r\n school.Id = filterSchools[i].SchoolID;\r\n school.SchoolName = filterSchools[i].SchoolName;\r\n this.currentYearSchools.push(school);\r\n }\r\n }\r\n }\r\n\r\n getCurrentYearSchoolsV9(yearDescription) {\r\n let school: School = new School();\r\n this.currentYearSchools = [];\r\n let filterSchools: Year[] = [];\r\n if (yearDescription == 'Current Year') {\r\n const currentYear = this.yearService.years.find(x => x.Status == 1);\r\n if (currentYear) {\r\n filterSchools = this.yearService.years.filter(x => x.Description == currentYear.Description);\r\n }\r\n } else {\r\n if (this.yearService.allYears.filter(x => x.SchoolID == 0).length > 0) {\r\n filterSchools = this.yearService.yearsForC360.filter(x => x.Id == parseInt(yearDescription, 10));\r\n } else {\r\n filterSchools = this.yearService.allYears.filter(x => x.Id == parseInt(yearDescription, 10));\r\n }\r\n }\r\n\r\n if (filterSchools.length > 0) {\r\n for (let i = 0; i < filterSchools.length; i++) {\r\n school = new School();\r\n\r\n school.Id = filterSchools[i].SchoolID;\r\n school.SchoolName = filterSchools[i].SchoolName;\r\n this.currentYearSchools.push(school);\r\n }\r\n }\r\n }\r\n\r\n getUserSchoolYearPolicies() {\r\n this.userService.getUserSchoolYearPolicies(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.userSchoolYearPolicies = data;\r\n });\r\n }\r\n\r\n getSchoolYearSettings() {\r\n this.schoolYearSettings = {};\r\n if (this.loginService.LoginSettings.V10 == false) {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n });\r\n }\r\n }\r\n\r\n // ------------Get Preference Data---------------------------\r\n\r\n getGeneralPreferences() {\r\n if (this.userPreferenceService.generalPreferences == undefined || this.isDefaultPreferences) {\r\n\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISGeneralPreferences', 0, '', this.isDefaultPreferences).subscribe(data => {\r\n this.generalPreferences = JSON.parse(data);\r\n this.setEmailAddress();\r\n this.getUserSchoolYear();\r\n if (this.generalPreferences.PageSize == '0') {\r\n this.generalPreferences.PageSize = '100';\r\n }\r\n });\r\n } else {\r\n this.generalPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.generalPreferences));\r\n this.setEmailAddress();\r\n this.getUserSchoolYear();\r\n if (this.generalPreferences.PageSize == '0') {\r\n this.generalPreferences.PageSize = '100';\r\n }\r\n }\r\n }\r\n\r\n getAttendancePreferences() {\r\n if (this.userPreferenceService.attendancePreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISAttendance', 0, '', this.isDefaultPreferences).subscribe(data => {\r\n this.attendancePreferences = JSON.parse(data);\r\n this.attendancePreferences.ShowAlert = this.yearService.defaultYear.DisplayStudentAlertsOnAttendance;\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.attendancePreferences = JSON.parse(JSON.stringify(this.attendancePreferences));\r\n }\r\n });\r\n } else {\r\n this.attendancePreferences = JSON.parse(JSON.stringify(this.userPreferenceService.attendancePreferences));\r\n this.attendancePreferences.ShowAlert = this.yearService.defaultYear.DisplayStudentAlertsOnAttendance;\r\n }\r\n }\r\n\r\n getBehaviorPreferences() {\r\n if (this.userPreferenceService.behaviorPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISBehavior', 0, '', this.isDefaultPreferences).subscribe(data => {\r\n if (data != null && data != '') {\r\n this.behaviorPreferences = JSON.parse(data);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.behaviorPreferences = JSON.parse(JSON.stringify(this.behaviorPreferences));\r\n }\r\n this.defaultUserLayoutId = this.behaviorPreferences.Layout_ID;\r\n }\r\n else {\r\n this.behaviorPreferences = new BehaviorPreferences();\r\n }\r\n });\r\n } else {\r\n this.behaviorPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.behaviorPreferences));\r\n this.defaultUserLayoutId = this.behaviorPreferences.Layout_ID;\r\n }\r\n }\r\n\r\n\r\n getClassroomSummaryPreferences() {\r\n if (this.userPreferenceService.classroomSummaryPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISClassroomSummary', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.classroomSummaryPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.classroomSummaryPreferences = JSON.parse(JSON.stringify(this.classroomSummaryPreferences));\r\n }\r\n });\r\n } else {\r\n this.classroomSummaryPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.classroomSummaryPreferences));\r\n }\r\n }\r\n\r\n getCommunicationLogPreferences() {\r\n if (this.userPreferenceService.communicationLogPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISCommunicationLog', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.communicationLogPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.communicationLogPreferences = JSON.parse(JSON.stringify(this.communicationLogPreferences));\r\n }\r\n });\r\n } else {\r\n this.communicationLogPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.communicationLogPreferences));\r\n }\r\n }\r\n\r\n getDataQueryPreferences() {\r\n if (this.userPreferenceService.dataQueryPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISDataQuery', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.dataQueryPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.dataQueryPreferences = JSON.parse(JSON.stringify(this.dataQueryPreferences));\r\n }\r\n });\r\n } else {\r\n this.dataQueryPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.dataQueryPreferences));\r\n }\r\n }\r\n\r\n getFavoritesPreferences() {\r\n if (this.userPreferenceService.favoritesPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISFavorites', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.favoritesPreferences = JSON.parse(results[0]);\r\n\r\n for (let i = 0; i < this.favoritesPreferences.FavoritePortals.length; i++) {\r\n const portalIndex: number = this.staffAssignedPortals.findIndex(x => x.PortalDescription == this.favoritesPreferences.FavoritePortals[i].PortalDescription);\r\n\r\n if (portalIndex != -1) {\r\n this.staffAssignedPortals[portalIndex].Selected = true;\r\n }\r\n }\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.favoritesPreferences = JSON.parse(JSON.stringify(this.favoritesPreferences));\r\n }\r\n });\r\n\r\n } else {\r\n this.favoritesPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.favoritesPreferences));\r\n\r\n for (let i = 0; i < this.favoritesPreferences.FavoritePortals.length; i++) {\r\n const portalIndex: number = this.staffAssignedPortals.findIndex(x => x.PortalDescription == this.favoritesPreferences.FavoritePortals[i].PortalDescription);\r\n\r\n if (portalIndex != -1) {\r\n this.staffAssignedPortals[portalIndex].Selected = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMassEmailPreferences() {\r\n if (this.userPreferenceService.massEmailPreferences == undefined || this.userPreferenceService.massEmailPreferences.Signature == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISMassEmail', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.massEmailPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.massEmailPreferences = JSON.parse(JSON.stringify(this.massEmailPreferences));\r\n }\r\n });\r\n } else {\r\n this.massEmailPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.massEmailPreferences));\r\n }\r\n }\r\n\r\n getGradebookPreferences() {\r\n if (this.selectedGradebookClass == undefined) {\r\n if (this.myClasses.length > 0) {\r\n this.selectedGradebookClass = this.myClasses.filter(x => x.Id == this.courseId)[0];\r\n if (this.selectedGradebookClass == undefined) {\r\n this.selectedGradebookClass = this.myClasses[0];\r\n }\r\n }\r\n else {\r\n this.selectedGradebookClass = this.additionalCourses.filter(x => x.Id == this.courseId)[0];\r\n if (this.selectedGradebookClass == undefined) {\r\n this.selectedGradebookClass = this.additionalCourses[0];\r\n }\r\n }\r\n }\r\n if (this.gradebookPreferences == undefined || !this.gradebookPreferences.SyncPreferencesAcrossCourses || this.v10 || this.isDefaultPreferences) {\r\n let subjectListId = 0;\r\n let subjectSection = '';\r\n if (!this.v10) {\r\n if (this.selectedGradebookClass != undefined && this.selectedGradebookClass.SiteSubjectListId != undefined) {\r\n subjectListId = this.selectedGradebookClass.SiteSubjectListId;\r\n subjectSection = this.selectedGradebookClass.Section;\r\n }\r\n\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISGradeBook', subjectListId, subjectSection, this.isDefaultPreferences).subscribe(results => {\r\n this.gradebookPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.gradebookPreferences = JSON.parse(JSON.stringify(this.gradebookPreferences));\r\n if (parseInt(this.gradebookPreferences.AutoSaveDuration, 10) < 0) {\r\n this.gradebookPreferences.AutoSaveDuration = '0';\r\n }\r\n if (this.gradebookPreferences != undefined && this.gradebookPreferences.DefaultForStandardsView == 'Show') {\r\n this.setDefaultForStandardsView = true;\r\n } else {\r\n this.setDefaultForStandardsView = false;\r\n }\r\n if (this.gradebookPreferences && this.gradebookPreferences.StudentSortOrder == 'Custom') {\r\n this.gradebookStudentSortOrderOptions = ['Course Add Date', 'Custom (Set custom order from Tools menu)', 'Status', 'StudentName'];\r\n } else {\r\n this.gradebookStudentSortOrderOptions = ['Course Add Date', 'Custom', 'Status', 'StudentName'];\r\n }\r\n }\r\n this.changeFillBlankScore();\r\n if (this.gradebookPreferences.ResetPreferences == true) {\r\n this.getGradebookPreferencesResetWarningWindow();\r\n }\r\n });\r\n } else {\r\n if (this.selectedGradebookClass != undefined) {\r\n subjectListId = this.selectedGradebookClass.Id;\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISGradeBook', subjectListId, subjectSection, this.isDefaultPreferences).subscribe(data => {\r\n this.gradebookPreferences = JSON.parse(data);\r\n\r\n if (this.userSchoolYearPolicies.ShowInactiveStudents) {\r\n this.gradebookPreferences.ShowDroppedWithdrawn = true;\r\n }\r\n if (this.userSchoolYearPolicies.DisableAutoSave) {\r\n this.gradebookPreferences.AutoSave = false;\r\n }\r\n if (!this.userSchoolYearPolicies.AllowQuickAddAssignments) {\r\n this.gradebookPreferences.UseQuickAddWindow = false;\r\n }\r\n if (this.userSchoolYearPolicies.DefaultParentPublish) {\r\n this.gradebookPreferences.DefaultShowOnPortal = true;\r\n }\r\n\r\n if (this.additionalCourses != undefined && this.additionalCourses.length > 0) {\r\n if (this.additionalCourses.length == 1) {\r\n this.singleAdditional = true;\r\n } else {\r\n this.multipleAdditional = true;\r\n }\r\n this.additionalTeacher = true;\r\n if (this.router.url == 'classroom360/gradebook/V10') {\r\n const gradebookClass = this.additionalCourses.filter(function (element) {\r\n return element.Id == this.userPreferenceService.courseId;\r\n })[0];\r\n if (gradebookClass != undefined && !this.gradebookPreferences.SyncPreferencesAcrossCourses) {\r\n this.additionalTeacherClassFocus = (gradebookClass.AdditionalTeacher) ? true : false;\r\n }\r\n }\r\n }\r\n\r\n if (!this.userSchoolYearPolicies.IsAllowTeacherToSetFinalGradeCalculation) {\r\n this.gradebookPreferences.FGradeCalculationType = this.userSchoolYearPolicies.FGradeCalculationType.toString();\r\n // Set Calculation Type Preferences From Policies\r\n if (this.gradebookPreferences.FGradeCalculationType == '1') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = '0';\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = '0';\r\n } else if (this.gradebookPreferences.FGradeCalculationType == '2') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = this.userSchoolYearPolicies.SemesterFinalGradeCalculation.toString();\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = '0';\r\n } else if (this.gradebookPreferences.FGradeCalculationType == '3') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = '0';\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = this.userSchoolYearPolicies.SemesterFinalGradeCalculation.toString();\r\n }\r\n }\r\n\r\n // Set Rounding Preferences From Policies\r\n if (!this.userSchoolYearPolicies.IsAllowTeacherToSelectAssignmentRoundingInGB) {\r\n this.gradebookPreferences.NumericalGradeRoundTo = this.userSchoolYearPolicies.NumericalGradeRoundTo.toString();\r\n }\r\n\r\n if (!this.userSchoolYearPolicies.IsAllowTeacherToSelectGPRoundingInGB) {\r\n if (this.userSchoolYearPolicies.IsGPCWRoundDown) {\r\n this.gradebookPreferences.GPCWRound = '1';\r\n } else if (this.userSchoolYearPolicies.IsGPCWRoundUp) {\r\n this.gradebookPreferences.GPCWRound = '2';\r\n } else {\r\n this.gradebookPreferences.GPCWRound = '3';\r\n }\r\n this.gradebookPreferences.GPCWRoundToValue = this.userSchoolYearPolicies.GPCWRoundToValue.toString();\r\n }\r\n if (!this.userSchoolYearPolicies.IsAllowTeacherToSelectSemRoundingInGB) {\r\n if (this.userSchoolYearPolicies.IsSemFinalRoundDown) {\r\n this.gradebookPreferences.SemFinalRound = '1';\r\n } else if (this.userSchoolYearPolicies.IsSemFinalRoundUp) {\r\n this.gradebookPreferences.SemFinalRound = '2';\r\n } else {\r\n this.gradebookPreferences.SemFinalRound = '3';\r\n }\r\n this.gradebookPreferences.SemFinalRoundToValue = this.userSchoolYearPolicies.SemFinalRoundToValue.toString();\r\n }\r\n\r\n this.userPreferenceService.gradebookPreferences = JSON.parse(JSON.stringify(this.gradebookPreferences));\r\n\r\n // Wait until gradebook preferences have loaded\r\n if (this.router.url == '/classroom360/gradebook/V10') {\r\n this.menuSelected('Gradebook');\r\n }\r\n\r\n this.userPreferenceService.getWarnIfCalculationPreferencesChanged(this.selectedGradebookClass.Id, this.gradebookPreferences.SyncPreferencesAcrossCourses).subscribe(result => {\r\n this.warnIfCalculationPreferencesChanged = result;\r\n });\r\n this.changeFillBlankScore();\r\n });\r\n } else {\r\n if (this.additionalCourses != undefined && this.additionalCourses.length > 0) {\r\n if (this.additionalCourses.length == 1) {\r\n this.singleAdditional = true;\r\n } else {\r\n this.multipleAdditional = true;\r\n }\r\n this.additionalTeacher = true;\r\n if (this.router.url == 'classroom360/gradebook/V10') {\r\n const gradebookClass = this.additionalCourses.filter(function (element) {\r\n return element.Id == this.userPreferenceService.courseId;\r\n })[0];\r\n if (gradebookClass != undefined && !this.gradebookPreferences.SyncPreferencesAcrossCourses) {\r\n this.additionalTeacherClassFocus = (gradebookClass.AdditionalTeacher) ? true : false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n this.gradebookPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.gradebookPreferences));\r\n if (this.additionalCourses != undefined && this.additionalCourses.length > 0) {\r\n if (this.additionalCourses.length == 1) {\r\n this.singleAdditional = true;\r\n } else {\r\n this.multipleAdditional = true;\r\n }\r\n this.additionalTeacher = true;\r\n if (this.router.url == 'classroom360/gradebook/V10') {\r\n const gradebookClass = this.additionalCourses.filter(function (element) {\r\n return element.Id == this.userPreferenceService.courseId;\r\n })[0];\r\n if (gradebookClass != undefined && !this.gradebookPreferences.SyncPreferencesAcrossCourses) {\r\n this.additionalTeacherClassFocus = (gradebookClass.AdditionalTeacher) ? true : false;\r\n }\r\n }\r\n }\r\n if (this.gradebookPreferences != undefined && this.gradebookPreferences.DefaultForStandardsView == 'Show') {\r\n this.setDefaultForStandardsView = true;\r\n } else {\r\n this.setDefaultForStandardsView = false;\r\n }\r\n this.changeFillBlankScore();\r\n }\r\n\r\n if (this.v10 == false && this.gradebookSpecialMarks.length == 0) {\r\n if (this.gradebookV9Service.specialMarks.length == 0) {\r\n this.gradebookV9Service.course = new ClassroomSummary();\r\n this.gradebookV9Service.course.Id = 0;\r\n this.gradebookV9Service.getGradebookV9SpecialMarks().subscribe(specialMarks => {\r\n this.gradebookV9Service.specialMarks = specialMarks;\r\n this.gradebookSpecialMarks = JSON.parse(JSON.stringify(this.gradebookV9Service.specialMarks.filter(o => o.Selected == true)));\r\n const specialMark: SpecialMark = {\r\n Id: 0,\r\n Code: '',\r\n Description: '',\r\n Value: 0,\r\n Operation: 0,\r\n Locked: false,\r\n Selected: true,\r\n InUse: false,\r\n IsSelected: false,\r\n IsEdited: false,\r\n OperationDescription: '',\r\n IsUsedInCurrentYear: false,\r\n ColorCode: ''\r\n };\r\n this.gradebookSpecialMarks.splice(0, 0, specialMark);\r\n });\r\n } else {\r\n this.gradebookSpecialMarks = JSON.parse(JSON.stringify(this.gradebookV9Service.specialMarks.filter(o => o.Selected == true)));\r\n const specialMark: SpecialMark = {\r\n Id: 0,\r\n Code: '',\r\n Description: '',\r\n Value: 0,\r\n Operation: 0,\r\n Locked: false,\r\n Selected: true,\r\n InUse: false,\r\n IsSelected: false,\r\n IsEdited: false,\r\n OperationDescription: '',\r\n IsUsedInCurrentYear: false,\r\n ColorCode: ''\r\n };\r\n this.gradebookSpecialMarks.splice(0, 0, specialMark);\r\n }\r\n }\r\n }\r\n\r\n getGradebookPreferencesResetWarningWindow() {\r\n const gradebookPreferencesResetWarningsRef = this.dialog.open(GradebookPreferencesResetWarningsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '425px',\r\n disableClose: true\r\n });\r\n\r\n gradebookPreferencesResetWarningsRef.afterClosed().subscribe(returnMessage => {\r\n if (returnMessage == 'Preferences was clicked.') {\r\n this.selectedPreferenceTab = 'Gradebook';\r\n setTimeout(() => {\r\n if (this.gradebookPreferencesDiv != null && this.columnsInScoreGridRow != null) {\r\n this.gradebookPreferencesDiv.nativeElement.scrollTop = this.columnsInScoreGridRow.nativeElement.offsetTop;\r\n }\r\n }, 100);\r\n }\r\n });\r\n }\r\n\r\n getMasterSchedulePreferences() {\r\n if (this.userPreferenceService.masterSchedulePreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISMasterSchedule', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.masterSchedulePreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.masterSchedulePreferences = JSON.parse(JSON.stringify(this.masterSchedulePreferences));\r\n }\r\n });\r\n } else {\r\n this.masterSchedulePreferences = JSON.parse(JSON.stringify(this.userPreferenceService.masterSchedulePreferences));\r\n }\r\n }\r\n\r\n getPeriodStatisticsPreferences() {\r\n if (this.userPreferenceService.periodStatisticsPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISPeriodStatistics', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.periodStatisticsPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.periodStatisticsPreferences = JSON.parse(JSON.stringify(this.periodStatisticsPreferences));\r\n }\r\n });\r\n } else {\r\n this.periodStatisticsPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.periodStatisticsPreferences));\r\n }\r\n\r\n }\r\n\r\n getScheduleStudentListPreferences() {\r\n if (this.userPreferenceService.scheduleStudentListPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISScheduleStudentList', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.scheduleStudentListPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.scheduleStudentListPreferences = JSON.parse(JSON.stringify(this.scheduleStudentListPreferences));\r\n }\r\n });\r\n } else {\r\n this.scheduleStudentListPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.scheduleStudentListPreferences));\r\n }\r\n }\r\n\r\n getClassesByCoursePreferences() {\r\n if (this.userPreferenceService.classesByCoursePreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISClassesByCourse', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.classesByCoursePreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.classesByCoursePreferences = JSON.parse(JSON.stringify(this.classesByCoursePreferences));\r\n }\r\n });\r\n } else {\r\n this.classesByCoursePreferences = JSON.parse(JSON.stringify(this.userPreferenceService.classesByCoursePreferences));\r\n }\r\n }\r\n\r\n getClassRosterPreferences() {\r\n if (this.userPreferenceService.classRosterPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISClassRoster', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.classRosterPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.classRosterPreferences = JSON.parse(JSON.stringify(this.classRosterPreferences));\r\n }\r\n });\r\n } else {\r\n this.classRosterPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.classRosterPreferences));\r\n }\r\n }\r\n\r\n getRoomSchedulingSettingsPreferences() {\r\n if (this.userPreferenceService.roomSchedulingSettingsPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISRoomSchedulingSettings', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.roomSchedulingSettingsPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.roomSchedulingSettingsPreferences = JSON.parse(JSON.stringify(this.roomSchedulingSettingsPreferences));\r\n }\r\n });\r\n } else {\r\n this.roomSchedulingSettingsPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.roomSchedulingSettingsPreferences));\r\n }\r\n }\r\n\r\n getMyReportsPreferences() {\r\n if (this.userPreferenceService.myReportsPreferences == undefined || this.isDefaultPreferences) {\r\n this.userPreferenceService.getUserPreferences(0, '/OneSISMyReports', 0, '', this.isDefaultPreferences).subscribe(results => {\r\n this.myReportsPreferences = JSON.parse(results[0]);\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.myReportsPreferences = JSON.parse(JSON.stringify(this.myReportsPreferences));\r\n }\r\n });\r\n } else {\r\n this.myReportsPreferences = JSON.parse(JSON.stringify(this.userPreferenceService.myReportsPreferences));\r\n }\r\n }\r\n\r\n // ------------Save Preference Data--------------------------\r\n saveClick() {\r\n this.errors = [];\r\n if (this.loginService.LoginSettings.ActivateClassroom360 == false) {\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.generalPreferences = this.generalPreferences;\r\n }\r\n this.saveUserPreferences('/OneSISGeneralPreferences', this.generalPreferences, 0, '');\r\n } else if (this.loginService.LoginSettings.V10 == false && this.gradebookPreferences.FillBlankScores == 'Score'\r\n && this.gradebookPreferences.FillBlankScoreValue == null) {\r\n this.errors.push({\r\n fieldName: 'Score',\r\n fieldRef: this.scoreValue,\r\n errorMsg: 'Score is required'\r\n });\r\n this.menuSelected('Gradebook');\r\n } else if (this.loginService.LoginSettings.V10 == false && this.gradebookPreferences.FillBlankScores == 'SpecialMark'\r\n && (this.gradebookPreferences.FillBlankScoreSpecialMarkId == null || this.gradebookPreferences.FillBlankScoreSpecialMarkId == '0')) {\r\n this.errors.push({\r\n fieldName: 'Special Mark',\r\n fieldRef: this.specialMarks,\r\n errorMsg: 'Special Mark is required'\r\n });\r\n this.menuSelected('Gradebook');\r\n } else {\r\n if (this.gradebookPreferences != null && ((this.loginService.LoginSettings.V10\r\n // && _.findWhere(this.gradebookPreferences.AvailableColumns, { Field: 'Final' }))\r\n && (this.gradebookPreferences.AvailableColumns.filter(x => x.Field == 'Final').length > 0))\r\n || (!this.loginService.LoginSettings.V10 && this.gradebookPreferences.ReportCardGrades == 0))) {\r\n this.gradebookPreferences.ShowProgressCycles = false;\r\n this.gradebookPreferences.ShowTerms = false;\r\n this.gradebookPreferences.ShowSemesters = false;\r\n this.gradebookPreferences.ShowYearEnd = false;\r\n this.gradebookPreferences.ShowAllTerms = false;\r\n }\r\n if (!this.isDefaultPreferences) {\r\n this.userPreferenceService.generalPreferences = this.generalPreferences;\r\n this.userPreferenceService.attendancePreferences = this.attendancePreferences;\r\n this.userPreferenceService.classroomSummaryPreferences = this.classroomSummaryPreferences;\r\n this.userPreferenceService.communicationLogPreferences = this.communicationLogPreferences;\r\n this.userPreferenceService.dataQueryPreferences = this.dataQueryPreferences;\r\n this.userPreferenceService.massEmailPreferences = this.massEmailPreferences;\r\n this.userPreferenceService.gradebookPreferences = this.gradebookPreferences;\r\n this.userPreferenceService.favoritesPreferences = this.favoritesPreferences;\r\n this.userPreferenceService.masterSchedulePreferences = this.masterSchedulePreferences;\r\n this.userPreferenceService.periodStatisticsPreferences = this.periodStatisticsPreferences;\r\n this.userPreferenceService.scheduleStudentListPreferences = this.scheduleStudentListPreferences;\r\n this.userPreferenceService.classesByCoursePreferences = this.classesByCoursePreferences;\r\n this.userPreferenceService.classRosterPreferences = this.classRosterPreferences;\r\n this.userPreferenceService.roomSchedulingSettingsPreferences = this.roomSchedulingSettingsPreferences;\r\n this.userPreferenceService.myReportsPreferences = this.myReportsPreferences;\r\n }\r\n\r\n // this.setFavoritesPreferences();\r\n this.saveUserPreferences('/OneSISGeneralPreferences', this.generalPreferences, 0, '');\r\n if (this.loginService.LoginSettings.V10 && this.router.url == 'classroom360/gradebook/V10') {\r\n this.saveUserPreferences('/OneSISAttendance', this.attendancePreferences, 0, '');\r\n } else {\r\n this.saveUserPreferences('/OneSISAttendance', this.attendancePreferences, 0, '');\r\n }\r\n\r\n this.saveUserPreferences('/OneSISClassroomSummary', this.classroomSummaryPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISCommunicationLog', this.communicationLogPreferences, 0, '');\r\n // this.saveUserPreferences('/OneSISFavorites', this.favoritesPreferences, 0, '');\r\n this.appFavorites.save();\r\n this.saveUserPreferences('/OneSISMassEmail', this.massEmailPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISDataQuery', this.dataQueryPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISMasterSchedule', this.masterSchedulePreferences, 0, '');\r\n this.saveUserPreferences('/OneSISPeriodStatistics', this.periodStatisticsPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISScheduleStudentList', this.scheduleStudentListPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISClassesByCourse', this.classesByCoursePreferences, 0, '');\r\n this.saveUserPreferences('/OneSISClassRoster', this.classRosterPreferences, 0, '');\r\n this.saveUserPreferences('/OneSISRoomSchedulingSettings', this.roomSchedulingSettingsPreferences, 0, '');\r\n if (!this.loginService.LoginSettings.V10) {\r\n this.saveUserPreferences('/OneSISMyReports', this.myReportsPreferences, 0, '');\r\n }\r\n\r\n if (!this.loginService.LoginSettings.V10) {\r\n let subjectListId = 0;\r\n let subjectSection = '';\r\n if (this.selectedGradebookClass != undefined && this.selectedGradebookClass.SiteSubjectListId != undefined) {\r\n subjectListId = this.selectedGradebookClass.SiteSubjectListId;\r\n subjectSection = this.selectedGradebookClass.Section;\r\n }\r\n if (this.gradebookPreferences.SummaryCharacterCount == undefined || this.gradebookPreferences.SummaryCharacterCount.toString().length == 0 || isNaN(this.gradebookPreferences.SummaryCharacterCount)) {\r\n this.gradebookPreferences.SummaryCharacterCount = 15;\r\n }\r\n if (this.gradebookPreferences.SummaryCharacterSlideCount == undefined || this.gradebookPreferences.SummaryCharacterSlideCount.toString().length == 0 || isNaN(this.gradebookPreferences.SummaryCharacterSlideCount)) {\r\n this.gradebookPreferences.SummaryCharacterSlideCount = 40;\r\n }\r\n this.saveUserPreferences('/OneSISGradeBook', this.gradebookPreferences, subjectListId, subjectSection);\r\n } else {\r\n if (this.myClasses.length > 0 && (this.selectedGradebookClass != null || this.isDefaultPreferences)) {\r\n const classId = (this.isDefaultPreferences) ? 0 : this.selectedGradebookClass.Id;\r\n this.saveUserPreferences('/OneSISGradeBook', this.gradebookPreferences, classId, '');\r\n }\r\n }\r\n\r\n if (this.isDefaultPreferences) {\r\n this.saveBehaviorDefaultLayouts();\r\n } else if (this.disciplineQuickEntryUserSelectLayout && this.allowDisciplineQuickEntry) {\r\n this.saveUserDefaultLayout();\r\n }\r\n }\r\n\r\n\r\n // Saving the requests as batch and then closing\r\n const batchRequest = forkJoin(this.saveRequests);\r\n const saveSubscription = batchRequest.subscribe(() => {\r\n saveSubscription.unsubscribe();\r\n this.dialogRef.close('Save was clicked.');\r\n });\r\n // this.classroom360Service.getStaffAssignedPortals(0, true).subscribe(staffAssignedPortals => {\r\n // this.classroom360Service.updateStaffAssignedPortals(staffAssignedPortals);\r\n // });\r\n }\r\n\r\n saveUserPreferences(pageUrl: string, preferenceData: any, subjectListId: number, subjectSection: string) {\r\n // PRE: the parameters needed to perform a preference save: pageUrl, the preferences, the subject list id, and the subject's section\r\n // POST: appends the save request to the list of save requests for batch saving\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(preferenceData));\r\n\r\n // Obtaining the save request\r\n const saveRequest = this.userPreferenceService.saveUserPreferences(0, pageUrl, xmlStream, subjectListId, subjectSection, this.isDefaultPreferences).pipe(\r\n map(result => {\r\n if (pageUrl == '/OneSISGradeBook') {\r\n this.userPreferenceService.updateGradebookPReferences();\r\n }\r\n return result;\r\n })\r\n );\r\n\r\n // Appending it to our list of save requests\r\n this.saveRequests.push(saveRequest);\r\n }\r\n\r\n // ------------Helper Methods--------------------------\r\n\r\n editLayoutsClick() {\r\n // ONE-7723 Behavior Quick Add - Disable Edit My Layouts\r\n // We need to temporarily Disable the use of \"Edit My Layout\" in Preferences > Behavior.\r\n // Once the customization framework is built for v9 then we will enable it again.\r\n if (this.v10) {\r\n this.dialog.open(SavedLayoutsDialogComponent, { height: '80vh', minWidth: '1000px', disableClose: true });\r\n // if (this.customLayoutService.layoutTypes.length == 0) {\r\n // this.subscriptions.push(this.customLayoutService.getLayoutTypes().subscribe(types => {\r\n // this.customLayoutService.layoutTypes = types;\r\n // this.customLayoutService.selectedLayoutType = types.find(t => t.Name == 'Behavior Quick Add');\r\n // this.openLayoutEditor();\r\n // }));\r\n // } else {\r\n // this.customLayoutService.selectedLayoutType = this.customLayoutService.layoutTypes.find(t => t.Name == 'Behavior Quick Add');\r\n // this.openLayoutEditor();\r\n // }\r\n }\r\n }\r\n\r\n openLayoutEditor() {\r\n // get default user layout before opening editor.\r\n this.subscriptions.push(this.customLayoutService.getUserDefaultLayout(this.customLayoutService.selectedLayoutType.Id, this.yearService.defaultYear.SchoolID, false).subscribe(layoutId => {\r\n this.customLayoutService.selectedLayout = this.layouts.find(o => o.Id == layoutId);\r\n const dialogRef = this.dialog.open(LayoutEditorComponent, {\r\n height: '100vh',\r\n width: '80vw',\r\n disableClose: true,\r\n });\r\n\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(result => {\r\n this.getBehaviorLayout();\r\n }));\r\n }));\r\n\r\n }\r\n\r\n getLayoutType() {\r\n if (this.customLayoutService.layoutTypes.length == 0) {\r\n this.subscriptions.push(this.customLayoutService.getLayoutTypes().subscribe(types => {\r\n this.customLayoutService.layoutTypes = types;\r\n this.customLayoutService.selectedLayoutType = types.find(t => t.Name == 'Behavior Quick Add');\r\n if (this.customLayoutService.selectedLayoutType) {\r\n this.getBehaviorLayout();\r\n }\r\n }));\r\n } else {\r\n this.customLayoutService.selectedLayoutType = this.customLayoutService.layoutTypes.find(t => t.Name == 'Behavior Quick Add');\r\n if (this.customLayoutService.selectedLayoutType) {\r\n this.getBehaviorLayout();\r\n }\r\n }\r\n }\r\n\r\n getBehaviorLayout() {\r\n this.getBehaviorPreferences();\r\n\r\n this.schools = this.yearService.schools;\r\n\r\n this.customLayoutService.getCustomLayoutSchoolDefaults(this.customLayoutService.selectedLayoutType.Id).subscribe(result => {\r\n this.defaultSchoolLayouts = result.filter(x => this.schools.findIndex(o => o.Id == x.School_Domain) != -1);\r\n this.defaultSchoolLayouts.sort(function (a, b) {\r\n if (a.SchoolName < b.SchoolName) {\r\n return -1;\r\n }\r\n if (a.SchoolName > b.SchoolName) {\r\n return 1;\r\n }\r\n });\r\n\r\n this.customLayoutService.getLayoutsByType(this.customLayoutService.selectedLayoutType.Id, this.yearService.defaultYear.Id, false).subscribe(results => {\r\n this.layouts = results;\r\n let defaultLayoutId = 0;\r\n\r\n const defaultLayoutIndex: number = this.layouts.findIndex(layout => layout.TylerDefault == true);\r\n if (defaultLayoutIndex != -1) {\r\n defaultLayoutId = this.layouts[defaultLayoutIndex].Id;\r\n }\r\n\r\n this.schools.forEach(school => {\r\n const schoolDefaultIndex: number = this.defaultSchoolLayouts.findIndex(x => x.School_Domain == school.Id);\r\n\r\n if (schoolDefaultIndex != -1) {\r\n this.defaultSchoolLayouts[schoolDefaultIndex].SchoolName = school.SchoolName;\r\n } else {\r\n const defaultSchoolLayout: CustomLayoutSchoolDefault = new CustomLayoutSchoolDefault();\r\n defaultSchoolLayout.Id = 0;\r\n defaultSchoolLayout.LayoutType_Id = 2;\r\n defaultSchoolLayout.Layout_Id = defaultLayoutId;\r\n defaultSchoolLayout.SchoolName = school.SchoolName;\r\n defaultSchoolLayout.School_Domain = school.Id;\r\n\r\n this.defaultSchoolLayouts.push(defaultSchoolLayout);\r\n }\r\n });\r\n\r\n this.defaultSchoolLayouts.sort(function (a, b) {\r\n if (a.SchoolName < b.SchoolName) {\r\n return -1;\r\n }\r\n if (a.SchoolName > b.SchoolName) {\r\n return 1;\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n saveBehaviorDefaultLayouts() {\r\n this.customLayoutService.saveDefaultSchoolLayouts(this.defaultSchoolLayouts).subscribe();\r\n }\r\n\r\n saveUserDefaultLayout() {\r\n this.behaviorPreferences = new BehaviorPreferences;\r\n this.behaviorPreferences.Layout_ID = this.defaultUserLayoutId;\r\n this.userPreferenceService.behaviorPreferences = this.behaviorPreferences;\r\n this.saveUserPreferences('/OneSISBehavior', this.behaviorPreferences, 0, '');\r\n }\r\n\r\n changeAllDefaultLayouts() {\r\n this.defaultSchoolLayouts.forEach(schoolLayout => {\r\n schoolLayout.Layout_Id = this.allLayoutsId;\r\n });\r\n }\r\n\r\n resetAllUsersToDefault() {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'WARNING';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to reset all users to default layout for the district?';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteUserDefaults: boolean) => {\r\n if (deleteUserDefaults) {\r\n this.customLayoutService.setUserLayoutToDefault(this.customLayoutService.selectedLayoutType.Id).subscribe(result => {\r\n this.sharedService.showCustomSnackbar('All users have been reset to the default layout.', 'success');\r\n });\r\n }\r\n });\r\n }\r\n\r\n checkShowPortal(portalName: string): boolean {\r\n if (this.staffAssignedPortalNames[portalName] != undefined) {\r\n return this.staffAssignedPortalNames[portalName];\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n checkForChildPortals(portal: Portal): boolean {\r\n return this.staffAssignedPortals.filter(x => x.ParentId == portal.Id).length > 0;\r\n }\r\n\r\n isEven(rowId): boolean {\r\n return (rowId % 2) === 0;\r\n }\r\n\r\n expandDetailSection(sectionName: string) {\r\n if (this.rowDetailExpand[sectionName] != null) {\r\n this.rowDetailExpand[sectionName] = !this.rowDetailExpand[sectionName];\r\n } else {\r\n this.rowDetailExpand[sectionName] = false;\r\n }\r\n }\r\n\r\n closeClick() {\r\n if (this.selectedPreferenceTab == 'Favorites') {\r\n this.staffAssignedPortals = JSON.parse(JSON.stringify(this.staffAssignedPortalsCopy));\r\n this.classroom360Service.updateStaffAssignedPortals(this.staffAssignedPortals);\r\n }\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n expandAllClick(expandSection) {\r\n\r\n if (this.selectedPreferenceTab == 'General') {\r\n this.rowDetailExpand['ACTIVE DIRECTORY'] = expandSection;\r\n this.rowDetailExpand['CLASSES IN DROPDOWN'] = expandSection;\r\n this.rowDetailExpand['LOGIN'] = expandSection;\r\n this.rowDetailExpand['STUDENT ALERTS'] = expandSection;\r\n this.rowDetailExpand['STUDENT NAMES'] = expandSection;\r\n this.rowDetailExpand['STUDENT SEARCH'] = expandSection;\r\n }\r\n if (this.selectedPreferenceTab == 'Favorites') {\r\n this.appFavorites.expandAll(expandSection);\r\n } else if (this.selectedPreferenceTab == 'Gradebook') {\r\n this.rowDetailExpand['ADDING ASSIGNMENTS'] = expandSection;\r\n this.rowDetailExpand['ASSIGNMENT HEADING'] = expandSection;\r\n this.rowDetailExpand['ASSIGNMENT SORT'] = expandSection;\r\n this.rowDetailExpand['ASSIGNMENT SCORES'] = expandSection;\r\n this.rowDetailExpand['AUTO-SAVE'] = expandSection;\r\n this.rowDetailExpand['COLUMNS IN SCORES GRID'] = expandSection;\r\n this.rowDetailExpand['STUDENTS'] = expandSection;\r\n this.rowDetailExpand['COMMENTS'] = expandSection;\r\n this.rowDetailExpand['REPORTCARDGRADES'] = expandSection;\r\n this.rowDetailExpand['STANDARDS'] = expandSection;\r\n this.rowDetailExpand['FINAL GRADE CALCULATION'] = expandSection;\r\n this.rowDetailExpand['ROUNDING'] = expandSection;\r\n }\r\n }\r\n\r\n menuSelected(selection: string) {\r\n if (selection == 'Gradebook') {\r\n if (!this.userService.currentUser.UserIsTeacher && !this.isDefaultPreferences && !this.userGBPreferencesPermission()) {\r\n this.PrimaryTeacherWarningModal();\r\n this.selectedPreferenceTab = 'General';\r\n return;\r\n }\r\n if (this.myClasses.length == 0 && !this.isDefaultPreferences) {\r\n this.NoGradingClassesModal();\r\n if (this.additionalCourses.length == 0) {\r\n this.selectedPreferenceTab = 'General';\r\n } else {\r\n this.selectedPreferenceTab = selection;\r\n }\r\n } else {\r\n if (this.additionalCourses != undefined && this.additionalCourses.length > 0) {\r\n this.AdditionalTeacherWarningModal();\r\n }\r\n this.selectedPreferenceTab = selection;\r\n }\r\n } else if (selection == 'Favorites') {\r\n this.staffAssignedPortalsCopy = JSON.parse(JSON.stringify(this.staffAssignedPortals));\r\n this.selectedPreferenceTab = selection;\r\n } else {\r\n this.selectedPreferenceTab = selection;\r\n }\r\n }\r\n\r\n AssignmentHeadingCheck(): boolean {\r\n return this.gradebookPreferences.AssignmentHeading.filter(x => x.Field == 'Summary' && x.value).length > 0;\r\n }\r\n\r\n validateField(Type: string) {\r\n let autoSaveDurationInt = 10;\r\n if (this.gradebookPreferences.AutoSaveDuration != undefined || this.gradebookPreferences.AutoSaveDuration == null) {\r\n autoSaveDurationInt = parseInt(this.gradebookPreferences.AutoSaveDuration, 10);\r\n }\r\n if (Type == 'Summary') {\r\n if (this.loginService.LoginSettings.C360GradebookAssignmentsLongSummary == false) {\r\n if (this.gradebookPreferences.SummaryCharacterCount < 1) {\r\n this.gradebookPreferences.SummaryCharacterCount = 1;\r\n }\r\n if (this.gradebookPreferences.SummaryCharacterCount > 50) {\r\n this.gradebookPreferences.SummaryCharacterCount = 50;\r\n }\r\n } else {\r\n if (this.gradebookPreferences.SummaryCharacterCount < 1) {\r\n this.gradebookPreferences.SummaryCharacterCount = 1;\r\n }\r\n if (this.gradebookPreferences.SummaryCharacterCount > 1000) {\r\n this.gradebookPreferences.SummaryCharacterCount = 1000;\r\n }\r\n }\r\n } else if (Type == 'AutoSaveDuration') {\r\n if (autoSaveDurationInt < 1) {\r\n this.gradebookPreferences.AutoSaveDuration = '1';\r\n }\r\n if (autoSaveDurationInt > 60) {\r\n this.gradebookPreferences.AutoSaveDuration = '60';\r\n }\r\n } else if (Type == 'FillBlankScoreValue') {\r\n if ($.isNumeric(this.gradebookPreferences.FillBlankScoreValue) == false) {\r\n this.gradebookPreferences.FillBlankScoreValue = 0;\r\n }\r\n }\r\n }\r\n\r\n changeGradePreferenceCourse() {\r\n this.getGradebookPreferences();\r\n }\r\n\r\n setCalculationValues() {\r\n if (this.gradebookPreferences.FGradeCalculationType == '1') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = '0';\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = '0';\r\n } else if (this.gradebookPreferences.FGradeCalculationType == '2') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = '1';\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = '0';\r\n } else if (this.gradebookPreferences.FGradeCalculationType == '3') {\r\n this.gradebookPreferences.SemesterFinalGradeCalculationPoints = '0';\r\n this.gradebookPreferences.SemesterFinalGradeCalculationCombo = '1';\r\n }\r\n }\r\n\r\n calculationTypeChanged() {\r\n if (this.warnIfCalculationPreferencesChanged) {\r\n this.CalculationPreferencesWarningModal();\r\n }\r\n }\r\n\r\n switchRCGType(type: string) {\r\n if (type == 'projection' && this.gradebookPreferences.ProjectFutureScores) {\r\n this.gradebookPreferences.ShowAllTerms = false;\r\n this.projectScoresDialog = this.dialog.open(ProjectScoresInfoComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '600px'\r\n });\r\n } else if (this.gradebookPreferences.ShowAllTerms) {\r\n this.gradebookPreferences.ProjectFutureScores = false;\r\n }\r\n }\r\n\r\n userGBPreferencesPermission() {\r\n return false;\r\n }\r\n\r\n // ------------Modal window-----------------------\r\n SyncPreferencesClick() {\r\n this.syncPrefDialogRef = this.dialog.open(SyncPreferencesDialogComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n this.syncPrefDialogRef.componentInstance.syncPreferencesAcrossCourses = this.gradebookPreferences.SyncPreferencesAcrossCourses;\r\n\r\n this.syncPrefDialogRef.afterClosed().subscribe(result => {\r\n if (result != 'OK was clicked') {\r\n this.gradebookPreferences.SyncPreferencesAcrossCourses = !this.gradebookPreferences.SyncPreferencesAcrossCourses;\r\n }\r\n });\r\n }\r\n\r\n NoGradingClassesModal() {\r\n this.noGradingClassesDialogRef = this.dialog.open(NoGradingClassesDialogComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '500px'\r\n });\r\n }\r\n\r\n CustomSortWarningModal() {\r\n if (this.gradebookPreferences.StudentSortOrder == 'Custom') {\r\n this.gradebookStudentSortOrderOptions = ['Course Add Date', 'Custom (Set custom order from Tools menu)', 'Status', 'StudentName'];\r\n this.customSortWarningDialogRef = this.dialog.open(CustomSortWarningDialogComponent, {\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n } else {\r\n this.gradebookStudentSortOrderOptions = ['Course Add Date', 'Custom', 'Status', 'StudentName'];\r\n }\r\n }\r\n\r\n AdditionalTeacherWarningModal() {\r\n this.additionalTeacherWarningDialogRef = this.dialog.open(AdditionalTeacherWarningDialogComponent, {\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n\r\n this.additionalTeacherWarningDialogRef.componentInstance.additionalTeacher = this.additionalTeacher;\r\n this.additionalTeacherWarningDialogRef.componentInstance.multipleAdditional = this.multipleAdditional;\r\n this.additionalTeacherWarningDialogRef.componentInstance.singleAdditional = this.singleAdditional;\r\n this.additionalTeacherWarningDialogRef.componentInstance.syncPreferencesAcrossCourses = this.gradebookPreferences.SyncPreferencesAcrossCourses;\r\n this.additionalTeacherWarningDialogRef.componentInstance.additionalTeacherClassFocus = this.additionalTeacherClassFocus;\r\n }\r\n\r\n PrimaryTeacherWarningModal() {\r\n this.primaryTeacherWarningDialogRef = this.dialog.open(PrimaryTeacherWarningDialogComponent, {\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n }\r\n\r\n CalculationPreferencesWarningModal() {\r\n this.calculationPreferenceWarningDialogRef = this.dialog.open(CalculationPreferenceWarningDialogComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '500px'\r\n });\r\n }\r\n\r\n showStudentNumberCheck() {\r\n if (this.generalPreferences.ShowStudentNumber && this.attendancePreferences && this.attendancePreferences.AvailableColumns.filter(c => c == 'Student #').length > 0) {\r\n const studentNumberColumn = this.attendancePreferences.AvailableColumns.filter(c => c == 'Student #')[0];\r\n if (studentNumberColumn != undefined) {\r\n this.attendancePreferences.ColumnsToShow.push(studentNumberColumn);\r\n this.attendancePreferences.AvailableColumns = this.attendancePreferences.AvailableColumns.filter(c => c != 'Student #');\r\n }\r\n }\r\n this.setGradebookStudentNumberColumn();\r\n }\r\n\r\n attendanceRestrict(item: CdkDrag) {\r\n if (item.data == 'Student Name' || item.data == 'Projected Enrollment') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n attendanceRestrictNumber(item: CdkDrag) {\r\n if (item.data == 'Student Name' || item.data == 'Student #' || item.data == 'Projected Enrollment') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n fieldDrop(event: CdkDragDrop) {\r\n if (event.previousContainer === event.container) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n } else {\r\n transferArrayItem(event.previousContainer.data,\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex);\r\n }\r\n }\r\n dropAssignmentSort(event: CdkDragDrop) {\r\n moveItemInArray(this.gradebookPreferences.AssignmentSort, event.previousIndex, event.currentIndex);\r\n // re-index the items\r\n for (let i = 0; i < this.gradebookPreferences.AssignmentSort.length; i++) {\r\n this.gradebookPreferences.AssignmentSort[i].LinkOrder = i;\r\n }\r\n }\r\n\r\n dropAssignmentHeading(event: CdkDragDrop) {\r\n moveItemInArray(this.gradebookPreferences.AssignmentHeading, event.previousIndex, event.currentIndex);\r\n // re-index the items\r\n for (let i = 0; i < this.gradebookPreferences.AssignmentHeading.length; i++) {\r\n this.gradebookPreferences.AssignmentHeading[i].LinkOrder = i;\r\n }\r\n }\r\n\r\n getStaticAttendanceColumnColor(column: string) {\r\n return column == 'Student Name' || column == 'Projected Enrollment' || (this.generalPreferences.ShowStudentNumber && column == 'Student #');\r\n }\r\n\r\n defaultForStandardsViewChange() {\r\n this.setDefaultForStandardsView = !this.setDefaultForStandardsView;\r\n if (this.setDefaultForStandardsView) {\r\n this.gradebookPreferences.DefaultForStandardsView = 'Show';\r\n } else {\r\n this.gradebookPreferences.DefaultForStandardsView = 'Hide';\r\n }\r\n }\r\n\r\n changeFillBlankScore() {\r\n this.errors = [];\r\n if (this.gradebookPreferences.FillBlankScores == 'Score') {\r\n this.gradebookPreferences.FillBlankScoreSpecialMarkId = '0';\r\n } else if (this.gradebookPreferences.FillBlankScores == 'SpecialMark') {\r\n this.gradebookPreferences.FillBlankScoreValue = null;\r\n }\r\n }\r\n\r\n showSchedulingTab() {\r\n return this.activateClassroom360 &&\r\n (\r\n this.staffAssignedPortalNames['Master Schedule']\r\n || this.staffAssignedPortalNames['Period Statistics']\r\n || this.staffAssignedPortalNames['Schedule Student List']\r\n || this.staffAssignedPortals['Classes By Course']\r\n );\r\n }\r\n\r\n showClassroomSummaryOption(option: string): boolean {\r\n if (this.staffAssignedPortalNames != null) {\r\n return this.staffAssignedPortalNames[option];\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'portalFilter',\r\n pure: false\r\n})\r\nexport class PortalFilterPipe implements PipeTransform {\r\n transform(items: Portal[]): any {\r\n // return items.filter(x => x.ShowAsMenu == true && x.ParentId == 0);\r\n return items.filter(x => x.ParentId == 0);\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'tileFilter',\r\n pure: false\r\n})\r\nexport class TileFilterPipe implements PipeTransform {\r\n transform(tiles: string[], staffAssignedPortalNames: string[]): any {\r\n // return items.filter(x => x.ShowAsMenu == true && x.ParentId == 0);\r\n return tiles.filter(name =>\r\n staffAssignedPortalNames[name]\r\n );\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'childPortalFilter',\r\n pure: false\r\n})\r\nexport class ChildPortalFilterPipe implements PipeTransform {\r\n transform(items: Portal[], filter: Object): any {\r\n return items.filter(x => x.ParentId == filter);\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'schoolLayoutFilter',\r\n pure: false\r\n})\r\nexport class SchoolLayoutFilterPipe implements PipeTransform {\r\n transform(items: CustomLayout[], filter: number): any {\r\n return items.filter(x =>\r\n x.SelectedSites == undefined ||\r\n x.SelectedSites.split(',').indexOf(filter.toString()) != -1);\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'schoolLayoutAllFilter',\r\n pure: false\r\n})\r\nexport class SchoolLayoutAllFilterPipe implements PipeTransform {\r\n transform(items: CustomLayout[], filter: number): any {\r\n return items.filter(x => x.SelectedSites == undefined);\r\n }\r\n}\r\n","export class RoomSchedulingSettingsPreferences {\r\n AvailableColumns: string[] = [];\r\n ShowColumns: string[] = [];\r\n}\r\n","import { System } from './../System';\r\n\r\nimport { Observable, of, ReplaySubject, BehaviorSubject } from 'rxjs';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { GeneralPreferences } from './general-preferences.model';\r\nimport { AttendancePreferences } from './attendance-preferences.model';\r\nimport { ClassroomSummaryPreferences } from './classroom-summary-preferences.model';\r\nimport { CommunicationLogPreferences } from './communication-log-preferences.model';\r\nimport { DataQueryPreferences } from './data-query-preferences.model';\r\nimport { MassEmailPreferences } from './mass-email-preferences.model';\r\nimport { GradebookPreferences } from '../../classroom360/gradebook/shared/models/preferences/gradebook-preferences.model';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { Year } from '../year/year.model';\r\nimport { Subscription } from '../../../../node_modules/rxjs';\r\nimport { YearService } from '../year/year.service';\r\nimport { Subject } from '../../../../node_modules/rxjs';\r\nimport { FavoritePreferences } from './favorite-prefences.model';\r\nimport { PortalMenuPreferences } from './portal-menu-preferences.model';\r\nimport { Portal } from '../portal.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { GradebookSelectionPreferences } from './gradebook-selection-preferences.model';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { BehaviorPreferences } from './behavior-preferences.model';\r\nimport { MasterSchedulePreferences } from './master-schedule-preferences.model';\r\nimport { PeriodStatisticsPreferences } from './period-statistics-preferences.model';\r\nimport { GradebookAnalysisSetting } from './gradebook-analysis-setting.model';\r\nimport { ScheduleStudentListPreferences } from './schedule-student-list-preferences.model';\r\nimport { ClassesByCoursePreferences } from './classes-by-course-preferences.model';\r\nimport { ClassRosterPreferences } from './class-roster-preferences.model';\r\nimport { RoomSchedulingSettingsPreferences } from './room-scheduling-settings-preferences.model';\r\nimport { MyReportsPreferences } from './my-reports-preferences.model';\r\n\r\n@Injectable()\r\nexport class UserPreferencesService {\r\n // General preferences\r\n private _generalPreferences: GeneralPreferences;\r\n public get generalPreferences(): GeneralPreferences {\r\n return this._generalPreferences;\r\n }\r\n\r\n public set generalPreferences(value: GeneralPreferences) {\r\n this._generalPreferences = value;\r\n this.observablegeneralPreferences.next(value);\r\n }\r\n\r\n public observablegeneralPreferences = new Subject();\r\n observablegeneralPreferencesStream$ = this.observablegeneralPreferences.asObservable();\r\n\r\n // Attendance preferences\r\n private _attendancePreferences: AttendancePreferences;\r\n public get attendancePreferences(): AttendancePreferences {\r\n return this._attendancePreferences;\r\n }\r\n\r\n public set attendancePreferences(value: AttendancePreferences) {\r\n this._attendancePreferences = value;\r\n this.observableAttendancePreferences.next(value);\r\n }\r\n\r\n public observableAttendancePreferences = new Subject();\r\n observableAttendancePreferencesStream$ = this.observableAttendancePreferences.asObservable();\r\n\r\n // ClassroomSummary preferences\r\n private _classroomSummaryPreferences: ClassroomSummaryPreferences;\r\n public get classroomSummaryPreferences(): ClassroomSummaryPreferences {\r\n return this._classroomSummaryPreferences;\r\n }\r\n\r\n public set classroomSummaryPreferences(value: ClassroomSummaryPreferences) {\r\n this._classroomSummaryPreferences = value;\r\n this.observableClassroomSummaryPreferences.next(value);\r\n }\r\n\r\n public observableClassroomSummaryPreferences = new Subject();\r\n observableclassroomSummaryPreferencesStream$ = this.observableClassroomSummaryPreferences.asObservable();\r\n\r\n // CommunicationLog preferences\r\n private _communicationLogPreferences: CommunicationLogPreferences;\r\n public get communicationLogPreferences(): CommunicationLogPreferences {\r\n return this._communicationLogPreferences;\r\n }\r\n\r\n public set communicationLogPreferences(value: CommunicationLogPreferences) {\r\n this._communicationLogPreferences = value;\r\n this.observableCommunicationLogPreferences.next(value);\r\n }\r\n\r\n public observableCommunicationLogPreferences = new Subject();\r\n observableCommunicationLogPreferencesStream$ = this.observableCommunicationLogPreferences.asObservable();\r\n\r\n // DataQuery preferences\r\n private _dataQueryPreferences: DataQueryPreferences;\r\n public get dataQueryPreferences(): DataQueryPreferences {\r\n return this._dataQueryPreferences;\r\n }\r\n\r\n public set dataQueryPreferences(value: DataQueryPreferences) {\r\n this._dataQueryPreferences = value;\r\n this.observableDataQueryPreferences.next(value);\r\n }\r\n public dataQueryPreferenceChange = new EventEmitter();\r\n public observableDataQueryPreferences = new Subject();\r\n observableDataQueryPreferencesStream$ = this.observableDataQueryPreferences.asObservable();\r\n\r\n // MassEmail preferences\r\n private _massEmailPreferences: MassEmailPreferences;\r\n public get massEmailPreferences(): MassEmailPreferences {\r\n return this._massEmailPreferences;\r\n }\r\n\r\n public set massEmailPreferences(value: MassEmailPreferences) {\r\n this._massEmailPreferences = value;\r\n this.observableMassEmailPreferences.next(value);\r\n }\r\n\r\n public observableMassEmailPreferences = new Subject();\r\n observableMassEmailPreferencesStream$ = this.observableMassEmailPreferences.asObservable();\r\n\r\n // Gradebook preferences\r\n private _gradebookPreferences: GradebookPreferences;\r\n public get gradebookPreferences(): GradebookPreferences {\r\n return this._gradebookPreferences;\r\n }\r\n\r\n public set gradebookPreferences(value: GradebookPreferences) {\r\n this._gradebookPreferences = value;\r\n }\r\n\r\n public observableGradebookPreferences = new Subject();\r\n observableGradebookPreferencesStream$ = this.observableGradebookPreferences.asObservable();\r\n\r\n // Favorites preferences\r\n private _favoritesPreferences: FavoritePreferences;\r\n private favoritesPreferencesObservable: Observable;\r\n public get favoritesPreferences(): FavoritePreferences {\r\n return this._favoritesPreferences;\r\n }\r\n\r\n public set favoritesPreferences(value: FavoritePreferences) {\r\n this._favoritesPreferences = value;\r\n this.observableFavoritesPreferences.next(value);\r\n }\r\n\r\n public observableFavoritesPreferences = new Subject();\r\n observableFavoritesPreferencesStream$ = this.observableFavoritesPreferences.asObservable();\r\n\r\n // Behavior preferences\r\n private _behaviorPreferences: BehaviorPreferences;\r\n public get behaviorPreferences(): BehaviorPreferences {\r\n return this._behaviorPreferences;\r\n }\r\n\r\n public set behaviorPreferences(value: BehaviorPreferences) {\r\n this._behaviorPreferences = value;\r\n this.observableBehaviorPreferences.next(value);\r\n }\r\n\r\n public observableBehaviorPreferences = new Subject();\r\n observableBehaviorPreferencesStream$ = this.observableBehaviorPreferences.asObservable();\r\n\r\n // Portal Menu Preferences\r\n private studentId = -1;\r\n private _studentPortalMenuPreferences: PortalMenuPreferences;\r\n private studentPortalMenuPreferenceObservable: Observable;\r\n public get studentPortalMenuPreferences(): PortalMenuPreferences {\r\n return this._studentPortalMenuPreferences;\r\n }\r\n\r\n public set studentPortalMenuPreferences(value: PortalMenuPreferences) {\r\n this._studentPortalMenuPreferences = value;\r\n this.observableStudentPortalMenuPreferences.next(value);\r\n }\r\n\r\n public observableStudentPortalMenuPreferences = new BehaviorSubject(null);\r\n observableStudentPortalMenuPreferencesStream$ = this.observableStudentPortalMenuPreferences.asObservable();\r\n\r\n private _staffPortalMenuPreferences: PortalMenuPreferences;\r\n private staffPortalMenuPreferenceObservable: Observable;\r\n public get staffPortalMenuPreferences(): PortalMenuPreferences {\r\n return this._staffPortalMenuPreferences;\r\n }\r\n\r\n public set staffPortalMenuPreferences(value: PortalMenuPreferences) {\r\n this._staffPortalMenuPreferences = value;\r\n this.observableStaffPortalMenuPreferences.next(value);\r\n }\r\n\r\n public observableStaffPortalMenuPreferences = new BehaviorSubject(null);\r\n observableStaffPortalMenuPreferencesStream$ = this.observableStaffPortalMenuPreferences.asObservable();\r\n\r\n // Master Schedule Preferences\r\n private _masterSchedulePreferences: MasterSchedulePreferences;\r\n public get masterSchedulePreferences(): MasterSchedulePreferences {\r\n return this._masterSchedulePreferences;\r\n }\r\n public set masterSchedulePreferences(value: MasterSchedulePreferences) {\r\n this._masterSchedulePreferences = value;\r\n this.observableMasterSchedulePreferences.next(value);\r\n }\r\n private observableMasterSchedulePreferences = new Subject();\r\n observableMasterSchedulePreferencesStream$ = this.observableMasterSchedulePreferences.asObservable();\r\n\r\n // Class Roster Preferences\r\n private _classRosterPreferences: ClassRosterPreferences;\r\n public get classRosterPreferences(): ClassRosterPreferences {\r\n return this._classRosterPreferences;\r\n }\r\n public set classRosterPreferences(value: ClassRosterPreferences) {\r\n this._classRosterPreferences = value;\r\n this.observableClassRosterPreferences.next(value);\r\n }\r\n private observableClassRosterPreferences = new Subject();\r\n observableClassRosterPreferencesStream$ = this.observableClassRosterPreferences.asObservable();\r\n\r\n // Period Statistics Preferences\r\n private _periodStatisticsPreferences: PeriodStatisticsPreferences;\r\n public get periodStatisticsPreferences(): PeriodStatisticsPreferences {\r\n return this._periodStatisticsPreferences;\r\n }\r\n public set periodStatisticsPreferences(value: PeriodStatisticsPreferences) {\r\n this._periodStatisticsPreferences = value;\r\n this.observablePeriodStatisticsPreferences.next(value);\r\n }\r\n private observablePeriodStatisticsPreferences = new Subject();\r\n observablePeriodStatisticsPreferencesStream$ = this.observablePeriodStatisticsPreferences.asObservable();\r\n\r\n // Schedule Student List Preferences\r\n private _scheduleStudentListPreferences: ScheduleStudentListPreferences;\r\n public get scheduleStudentListPreferences(): ScheduleStudentListPreferences {\r\n return this._scheduleStudentListPreferences;\r\n }\r\n public set scheduleStudentListPreferences(value: ScheduleStudentListPreferences) {\r\n this._scheduleStudentListPreferences = System.convert(value, new ScheduleStudentListPreferences());\r\n this.observableScheduleStudentListPreferences.next(value);\r\n }\r\n private observableScheduleStudentListPreferences = new Subject();\r\n observableScheduleStudentListPreferencesStream$ = this.observableScheduleStudentListPreferences.asObservable();\r\n\r\n // Classes By Course Preferences\r\n private _classesByCoursePreferences: ClassesByCoursePreferences;\r\n public get classesByCoursePreferences(): ClassesByCoursePreferences {\r\n return this._classesByCoursePreferences;\r\n }\r\n public set classesByCoursePreferences(value: ClassesByCoursePreferences) {\r\n this._classesByCoursePreferences = value;\r\n this.observableClassesByCoursePreferences.next(value);\r\n }\r\n private observableClassesByCoursePreferences = new Subject();\r\n observableClassesByCoursePreferencesStream$ = this.observableClassesByCoursePreferences.asObservable();\r\n\r\n // Room Scheduling Settings Preferences\r\n private _roomSchedulingSettingsPreferences: RoomSchedulingSettingsPreferences;\r\n public get roomSchedulingSettingsPreferences(): RoomSchedulingSettingsPreferences {\r\n return this._roomSchedulingSettingsPreferences;\r\n }\r\n public set roomSchedulingSettingsPreferences(value: RoomSchedulingSettingsPreferences) {\r\n this._roomSchedulingSettingsPreferences = System.convert(value, new RoomSchedulingSettingsPreferences());\r\n this.observableRoomSchedulingSettingsPreferences.next(value);\r\n }\r\n private observableRoomSchedulingSettingsPreferences = new ReplaySubject(1);\r\n observableRoomSchedulingSettingsPreferencesStream$ = this.observableRoomSchedulingSettingsPreferences.asObservable();\r\n\r\n // MyReports preferences\r\n private _myReportsPreferences: MyReportsPreferences;\r\n public get myReportsPreferences(): MyReportsPreferences {\r\n return this._myReportsPreferences;\r\n }\r\n\r\n public set myReportsPreferences(value: MyReportsPreferences) {\r\n this._myReportsPreferences = value;\r\n this.observableMyReportsPreferences.next(value);\r\n }\r\n\r\n public observableMyReportsPreferences = new Subject();\r\n observableMyReportsPreferencesStream$ = this.observableMyReportsPreferences.asObservable();\r\n\r\n defaultYear: Year;\r\n defaultYearSubscription: Subscription;\r\n courseId: any;\r\n siteSubjectListId: any;\r\n section: any;\r\n showAssignmentsonStandards: boolean;\r\n editFavorites = false;\r\n warnIfCalculationPreferencesChanged = false;\r\n gradebookV9SelectionPreferences: GradebookSelectionPreferences;\r\n gradebookV9AnalysisSettings: GradebookAnalysisSetting;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService\r\n ) {\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.defaultYearSubscription = yearService.observableDefaultYearStream$.subscribe(\r\n defaultYear => {\r\n this.defaultYear = defaultYear;\r\n }\r\n );\r\n }\r\n\r\n getUserPreferences(studentId: number, pageUrl: string, subjectListId: number = 0, subjectSection: string = '', isDefaultPreferences: boolean = false): Observable {\r\n let paramString = '';\r\n paramString += '?studentId=' + studentId;\r\n paramString += '&pageURL=' + pageUrl;\r\n paramString += '&subjectListId=' + subjectListId;\r\n paramString += '&subjectSection=' + subjectSection;\r\n paramString += '&isDefaultPreferences=' + isDefaultPreferences;\r\n return this.http.get(System.apiURL.Student + 'GetUserPreferences' + paramString).pipe(take(1));\r\n }\r\n\r\n saveUserPreferences(studentId: number, pageUrl: string, data: any, subjectListId: number, subjectSection: string, isDefaultPreferences: boolean = false): Observable {\r\n let paramString = '';\r\n paramString += '?studentId=' + studentId;\r\n paramString += '&pageURL=' + pageUrl;\r\n paramString += '&subjectListId=' + subjectListId;\r\n paramString += '&subjectSection=' + subjectSection;\r\n paramString += '&isDefaultPreferences=' + isDefaultPreferences;\r\n return this.http.post(System.apiURL.Student + 'SaveUserPreferences' + paramString, data).pipe(\r\n map(results => {\r\n if (pageUrl.toLowerCase().includes('dataquery')) {\r\n this.dataQueryPreferenceChange.emit();\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getGeneralPreferences(): Observable {\r\n if (this.generalPreferences) {\r\n return of(this.generalPreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISGeneralPreferences', 0, '', false).pipe(\r\n map(results => {\r\n this.generalPreferences = JSON.parse(results[0]);\r\n return this.generalPreferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getGradebookPreferences(course: ClassroomSummary): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetUserPreferences?studentId=0&pageURL=/OneSISGradeBook&subjectListId=' + course.Id + '&subjectSection=\\'\\'&isDefaultPreferences=false');\r\n }\r\n\r\n updateGradebookPReferences() {\r\n this.observableGradebookPreferences.next();\r\n }\r\n\r\n getAttendancePreferences(): Observable {\r\n return this.getUserPreferences(0, '/OneSISAttendance');\r\n }\r\n\r\n getWarnIfCalculationPreferencesChanged(courseId: number, syncPreference: boolean): Observable {\r\n let paramString = '';\r\n paramString += '?tgsId=' + courseId;\r\n paramString += '&syncPreferences=' + syncPreference;\r\n return this.http.get(System.apiURL.Student + 'WarnIfCalculationPreferencesChanged' + paramString);\r\n }\r\n\r\n saveAttendancePreferences() {\r\n this.saveUserPreferences(0, '/OneSISAttendance', this.attendancePreferences, 0, '');\r\n }\r\n\r\n getMyClasses(termId: number, viewId: number, isTeacher: boolean, includeAllCourses: boolean, dateItem: Date): Observable {\r\n const currentDate = new Date();\r\n const dateString = (currentDate.getUTCMonth() + 1) + '/' + currentDate.getDate() + '/' + currentDate.getUTCFullYear();\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + isTeacher +\r\n '&dateItem=' + dateItem +\r\n '&includeAllCourses=' + includeAllCourses +\r\n '¤tDate=' + dateString;\r\n return this.http.get\r\n (System.apiURL.Classroom + 'GetMyClasses' + queryString);\r\n }\r\n\r\n getStaffMenuPreferences(defaultPreference = false): Observable {\r\n if (this.staffPortalMenuPreferences) {\r\n return of(this.staffPortalMenuPreferences);\r\n } else if (this.staffPortalMenuPreferenceObservable) {\r\n return this.staffPortalMenuPreferenceObservable;\r\n } else {\r\n this.staffPortalMenuPreferenceObservable = this.getUserPreferences(\r\n 0,\r\n '/OneSISPortalMenuPreferences',\r\n 0,\r\n '',\r\n defaultPreference\r\n ).pipe(\r\n take(1),\r\n map(preferences => {\r\n this.staffPortalMenuPreferences = JSON.parse(preferences[0]) as PortalMenuPreferences;\r\n this.staffPortalMenuPreferenceObservable = null;\r\n return this.staffPortalMenuPreferences;\r\n })\r\n ) as Observable;\r\n return this.staffPortalMenuPreferenceObservable;\r\n }\r\n }\r\n\r\n getStudentMenuPreferences(studentId: number, defaultPreference = false): Observable {\r\n if (this.studentPortalMenuPreferences && studentId == this.studentId) {\r\n return of(this.studentPortalMenuPreferences);\r\n } else if (this.studentPortalMenuPreferenceObservable) {\r\n return this.studentPortalMenuPreferenceObservable;\r\n } else {\r\n this.studentId = studentId;\r\n this.studentPortalMenuPreferenceObservable = this.getUserPreferences(\r\n studentId,\r\n '/OneSISPortalMenuPreferences',\r\n 0,\r\n '',\r\n defaultPreference\r\n ).pipe(\r\n take(1),\r\n map(preferences => {\r\n this.studentPortalMenuPreferences = JSON.parse(preferences[0]) as PortalMenuPreferences;\r\n this.studentPortalMenuPreferenceObservable = null;\r\n return this.studentPortalMenuPreferences;\r\n })\r\n ) as Observable;\r\n return this.studentPortalMenuPreferenceObservable;\r\n }\r\n }\r\n\r\n getFavoritesPreferences(defaultPreference = false): Observable {\r\n if (this.favoritesPreferences) {\r\n return of(this.favoritesPreferences);\r\n } else if (this.favoritesPreferencesObservable) {\r\n return this.favoritesPreferencesObservable;\r\n } else {\r\n this.favoritesPreferencesObservable = this.getUserPreferences(\r\n 0,\r\n '/OneSISFavorites',\r\n 0,\r\n '',\r\n defaultPreference\r\n ).pipe(\r\n take(1),\r\n map(preferences => {\r\n this.favoritesPreferences = JSON.parse(preferences[0]) as FavoritePreferences;\r\n this.favoritesPreferencesObservable = null;\r\n return this.favoritesPreferences;\r\n })\r\n ) as Observable;\r\n return this.favoritesPreferencesObservable;\r\n }\r\n }\r\n\r\n getMasterSchedulePreferences() {\r\n if (this.masterSchedulePreferences) {\r\n return of(this.masterSchedulePreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISMasterSchedule');\r\n }\r\n }\r\n\r\n getPeriodStatisticsPreferences() {\r\n if (this.periodStatisticsPreferences) {\r\n return of(this.periodStatisticsPreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISPeriodStatistics').pipe(\r\n map(json => {\r\n return JSON.parse(json[0]) as PeriodStatisticsPreferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getScheduleStudentListPreferences() {\r\n if (this.scheduleStudentListPreferences) {\r\n return of(this.scheduleStudentListPreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISScheduleStudentList').pipe(\r\n map(json => {\r\n let preferences = JSON.parse(json[0]) as ScheduleStudentListPreferences;\r\n preferences = System.convert(preferences, new ScheduleStudentListPreferences());\r\n return preferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClassesByCoursePreferences() {\r\n if (this.classesByCoursePreferences) {\r\n return of(this.classesByCoursePreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISClassesByCourse').pipe(\r\n map(json => {\r\n const preferences = JSON.parse(json[0]) as ClassesByCoursePreferences;\r\n this.classesByCoursePreferences = preferences;\r\n return preferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getClassRosterPreferences() {\r\n if (this.classRosterPreferences) {\r\n return of(this.classRosterPreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISClassRoster').pipe(\r\n map(json => {\r\n const preferences = JSON.parse(json[0]) as ClassRosterPreferences;\r\n this.classRosterPreferences = preferences;\r\n return preferences;\r\n })\r\n );\r\n }\r\n }\r\n\r\n getRoomSchedulingSettingsPreferences() {\r\n if (this.roomSchedulingSettingsPreferences) {\r\n return of(this.roomSchedulingSettingsPreferences);\r\n } else {\r\n return this.getUserPreferences(0, '/OneSISRoomSchedulingSettings').pipe(\r\n map(json => {\r\n const preferences = JSON.parse(json[0]) as RoomSchedulingSettingsPreferences;\r\n this.roomSchedulingSettingsPreferences = preferences;\r\n return preferences;\r\n })\r\n );\r\n }\r\n }\r\n}\r\n","export class UserSchoolYearPolicies {\r\n Id: number;\r\n Name: string;\r\n IsAllowTeacherToSetFinalGradeCalculation: boolean;\r\n FGradeCalculationType: number;\r\n SemesterFinalGradeCalculation: number;\r\n IsAllowTeacherToSelectAssignmentRoundingInGB: boolean;\r\n NumericalGradeRoundTo: number;\r\n IsAllowTeacherToSelectGPRoundingInGB: boolean;\r\n IsGPCWRoundDown: boolean;\r\n IsGPCWRoundUp: boolean;\r\n IsGPCWRoundTo: boolean;\r\n GPCWRoundToValue: number;\r\n IsAllowTeacherToSelectSemRoundingInGB: boolean;\r\n IsSemFinalRoundDown: boolean;\r\n IsSemFinalRoundUp: boolean;\r\n IsSemFinalRoundTo: boolean;\r\n SemFinalRoundToValue: number;\r\n DefaultParentPublish: boolean;\r\n AllowQuickAddAssignments: boolean;\r\n ShowMessageOnS360GradesPage: boolean;\r\n S360GradesMessage: string;\r\n ShowInactiveStudents: boolean;\r\n ScoreExceedPossible: boolean;\r\n DisableAutoSave: boolean;\r\n DisplayReportCardGrades: string;\r\n S360AcademicHistoryHideSemesterColumns: boolean;\r\n S360AcademicHistoryOnlyShowCompletedCourses: boolean;\r\n S360GradesDisplayFinalScoreGrade: boolean;\r\n S360DisplayCategoryScores: boolean;\r\n UpdateAttendanceforDisciplineSuspensions: boolean;\r\n TeacherRequestsIsActive: boolean;\r\n S360SchedulingCourseRequests: boolean;\r\n S360SchedulingClassScheduling: boolean;\r\n S360SchedulingStudentScheduling: boolean;\r\n SchoolId: number;\r\n}\r\n","export enum UserType {\r\n Staff = 1,\r\n Parent = 2,\r\n Student = 3\r\n}","import { HttpClient, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { Link, NewLink } from '../../classroom360/links/link.model';\r\nimport { Card } from '../../student360/student-summary/card-container/card/card';\r\nimport { SharedService } from '../shared.service';\r\nimport { TranslationService } from '../translation/translation.service';\r\nimport { Year } from '../year/year.model';\r\nimport { System } from './../System';\r\nimport { GoogleUser } from './google-user.model';\r\nimport { UserPermission } from './user-permission.model';\r\nimport { UserRole } from './user-role.model';\r\nimport { UserSchoolYearPolicies } from './user-school-year-policies.model';\r\nimport { UserSchoolYear } from './user-school-year.model';\r\nimport { User } from './user.model';\r\n\r\n@Injectable()\r\nexport class UserService {\r\n public userId = 0;\r\n public username = '';\r\n public password = '';\r\n public firstname = '';\r\n public lastname = '';\r\n private _cards: Card[];\r\n public userType = 0;\r\n public studentId = 0;\r\n public links = [];\r\n private _currentUser: User;\r\n public observableCurrentUser = new Subject();\r\n observableCurrentUserStream$ = this.observableCurrentUser.asObservable();\r\n public isLoggedIn = new Subject();\r\n forceUserToClassic: boolean;\r\n isLoggedInStream$ = this.isLoggedIn.asObservable();\r\n staffUserStudentLocked: boolean;\r\n studentInformationView: boolean;\r\n userRoles: UserRole[];\r\n googleUser: GoogleUser;\r\n\r\n public observableStudentInfoRoute = new Subject();\r\n observableStudentInfoRouteStream$ = this.observableStudentInfoRoute.asObservable();\r\n\r\n public selectedStudentInfoPortal: string;\r\n\r\n get languageId() {\r\n let languageId: number;\r\n switch (this.currentLanguage) {\r\n case 'fr':\r\n languageId = 2;\r\n break;\r\n case 'es':\r\n languageId = 3;\r\n break;\r\n default:\r\n languageId = 1;\r\n }\r\n return languageId;\r\n }\r\n\r\n public get currentUser(): User {\r\n return this._currentUser;\r\n }\r\n\r\n public set currentUser(value: User) {\r\n this._currentUser = value;\r\n this.observableCurrentUser.next(value);\r\n }\r\n\r\n public get currentLanguage(): string {\r\n return this.translateService.currentLanguage;\r\n }\r\n\r\n public set currentLanguage(value: string) {\r\n this.translateService.currentLanguage = value;\r\n }\r\n\r\n public get cards() {\r\n return this._cards;\r\n }\r\n\r\n public set cards(cards: Card[]) {\r\n this._cards = cards;\r\n }\r\n\r\n constructor(\r\n private sharedService: SharedService,\r\n private http: HttpClient,\r\n private translateService: TranslationService\r\n ) {\r\n this.isLoggedIn.next(false);\r\n }\r\n\r\n logoutUser() {\r\n this.isLoggedIn.next(false);\r\n this.userId = 0;\r\n this.username = '';\r\n this.password = '';\r\n this.firstname = '';\r\n this.lastname = '';\r\n this.userType = 0;\r\n this.studentId = 0;\r\n this.sharedService.updateIsPageLoaded(false);\r\n }\r\n\r\n getUserLanguage() {\r\n // POST: gets the current user language\r\n // NOTE: this will set the current language and translation by default\r\n const queryString = '?studentId=' + this.studentId;\r\n const query = this.http.get(System.apiURL.Student + 'GetUserLanguage' + queryString).subscribe(result => {\r\n this.currentLanguage = result;\r\n });\r\n }\r\n\r\n getUserSchoolYearPolicies(yearId: number, schoolId: number): Observable {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId;\r\n paramString += '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'GetUserSchoolYearPolicies' + paramString);\r\n }\r\n\r\n getAllUserSchoolYearPolicies(yearId: number): Observable {\r\n const paramString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetAllUserSchoolYearPolicies' + paramString);\r\n }\r\n\r\n getUserPermissions(yearId: number, schoolId: number): Observable {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId;\r\n paramString += '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'GetUserPermission' + paramString);\r\n }\r\n\r\n getUserRoles(yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetUserRoles?yearId=' + yearId);\r\n }\r\n\r\n /**\r\n * Changes the users email\r\n * @param newEmail the new email for the user\r\n * @return null if email is invalid. Otherwise, returns an observable for the API call.\r\n */\r\n setUserEmail(newEmail: string): Observable> {\r\n const mailFormat = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$/;\r\n if (!newEmail.match(mailFormat)) {\r\n return null;\r\n } else {\r\n return this.http.get(\r\n System.apiURL.Student +\r\n 'SaveUserEmail?' +\r\n 'userId=' + this.currentUser.Id +\r\n '&email=' + newEmail,\r\n { observe: 'response' }\r\n );\r\n }\r\n }\r\n\r\n emailAlreadyExists(email: string): Observable {\r\n const queryString = '?email=' + email;\r\n return this.http.get(System.apiURL.Student + 'EmailAlreadyExists' + queryString);\r\n }\r\n\r\n canUserChangeEmail(email: string): Observable {\r\n const queryString = '?email=' + email;\r\n return this.http.get(System.apiURL.Student + 'CanUserChangeEmail' + queryString);\r\n }\r\n\r\n setUserLanguage(language: string): Observable {\r\n // PRE: language must be 'en' for English, 'fr' for French, or 'es' for Spanish, or 'pt' for portuguese\r\n // POST: sets the user's language to that language\r\n this.currentLanguage = language;\r\n const queryString = '?studentId=' + this.studentId +\r\n '&language=' + language;\r\n return this.http.get(System.apiURL.Student + 'SaveUserLanguage' + queryString);\r\n }\r\n\r\n changeUserPassword(userType: number, isExpired: boolean, area: string, data: string[]): Observable {\r\n return this.http.post(System.apiURL.Student + `SaveUserPassword?userType=${userType}&isExpired=${isExpired}&area=${area}`, data, { observe: 'response' });\r\n }\r\n\r\n getDefaultYear(userId: number): Observable {\r\n let paramString = '';\r\n paramString += '?userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetDefaultYear' + paramString);\r\n\r\n }\r\n\r\n getLinks(userId: number, studentId: number, ayIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Student + `getMyLinks?userid=${userId}&studentID=${studentId}&ayidentifier=${ayIdentifier}`, { observe: 'response' });\r\n }\r\n\r\n getParentStudentLinks(studentId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetParentStudentLinks?studentId=${studentId}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n saveLink(link: NewLink): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveLink', link, { observe: 'response' });\r\n }\r\n\r\n deleteLink(link: Link): Observable {\r\n return this.http.post(System.apiURL.Student + `DeleteLink?linkId=${link.Link_ID}`, link, { observe: 'response' });\r\n }\r\n\r\n updateLinkSequence(links: NewLink[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'UpdateLinkSequence', links, { observe: 'response' });\r\n }\r\n\r\n userLinks() {\r\n return this.links;\r\n }\r\n\r\n getImpersonateByUser(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetImpersonateByUser');\r\n }\r\n\r\n setNotificationPreferencesMenu(): Observable {\r\n return this.http.get(System.apiURL.Student + 'SetNotificationPreferencesMenu');\r\n }\r\n\r\n markWelcomeAsSeen(studentId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `MarkWelcomeAsSeen?studentId=${studentId}`, { observe: 'response' });\r\n }\r\n\r\n updateStudentViewRoute(route: string) {\r\n this.observableStudentInfoRoute.next(route);\r\n }\r\n\r\n getUserPermissionByPrivilegeIds(yearId: number, siteId: number, privilegeIds: number[]): Observable {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId;\r\n paramString += '&siteId=' + siteId;\r\n return this.http.post(System.apiURL.Student + 'GetUserPermissionByPrivilegeIds' + paramString, privilegeIds);\r\n }\r\n\r\n getUserPermissionBySchoolIds(YearId: number, privilegeId: number, siteIds: number[]): Observable {\r\n let paramString = '';\r\n paramString += '?YearId=' + YearId;\r\n paramString += '&privilegeId=' + privilegeId;\r\n return this.http.post(System.apiURL.Student + 'GetUserPermissionBySchoolIds' + paramString, siteIds);\r\n }\r\n\r\n isGALDSRoleAssigned(siteId: number): Observable {\r\n // PRE: the site to query at\r\n // POST: returns true if the user has the GALDS permission for this site\r\n const paramString = '?schoolId=' + siteId;\r\n return this.http.get(System.apiURL.Student + 'IsGALDSRolAssigned' + paramString);\r\n }\r\n\r\n isAZEdsRoleAssigned(): Observable {\r\n // POST: returns true if the user has the AZEds permission\r\n return this.http.get(System.apiURL.Student + 'IsAZEdsRolAssigned');\r\n }\r\n\r\n processADEConnect(): Observable {\r\n // POST: attempts to connect to AZEds\r\n return this.http.get(System.apiURL.Student + 'ProcessADEConnect');\r\n }\r\n\r\n getUserIsTeacher(schoolId: number, yearId: number): Observable {\r\n let paramString = '';\r\n paramString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetUserIsTeacher' + paramString);\r\n }\r\n\r\n getUserIsNurse(schoolId: number, yearId: number): Observable {\r\n let paramString = '';\r\n paramString += '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetUserIsNurse' + paramString);\r\n }\r\n\r\n getSchoolYearByFacultyStaffId(yearId: number, facultyStaffId: number): Observable {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId +\r\n '&facultyStaffId=' + facultyStaffId;\r\n return this.http.get(System.apiURL.Student + 'GetSchoolYearByFacultyStaffId' + paramString);\r\n }\r\n\r\n}","import {AbstractControl, NG_VALIDATORS, Validator} from '@angular/forms';\r\nimport {Directive, Input} from '@angular/core';\r\nimport {System} from '../System';\r\n\r\n@Directive({\r\n\tselector: '[emailFormat]',\r\n\tproviders: [{provide: NG_VALIDATORS, useExisting: EmailFormatDirectiveValidator, multi: true}]\r\n})\r\nexport class EmailFormatDirectiveValidator implements Validator {\r\n\t@Input('emailFormat') allowValidation = true;\r\n\temailFormat = System.mailRegexp;\r\n\r\n\tvalidate(control: AbstractControl): {[key: string]: any} | null {\r\n\t\treturn (typeof this.allowValidation != 'boolean' || this.allowValidation) && control.value && !control.value.toString().toLowerCase().match(this.emailFormat) ? {'emailFormat': control.value} : null;\r\n\t}\r\n}","import {AbstractControl, NG_VALIDATORS, Validator} from '@angular/forms';\r\nimport {Directive, Input} from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: '[falseyRequired]',\r\n\tproviders: [{provide: NG_VALIDATORS, useExisting: FalseyRequiredDirectiveValidator, multi: true}]\r\n})\r\nexport class FalseyRequiredDirectiveValidator implements Validator {\r\n\t@Input() falseyRequired = true;\r\n\r\n\tvalidate(control: AbstractControl): {[key: string]: any} | null {\r\n\t\treturn this.falseyRequired && (!control.value || control.value == '0') ? {'falseyRequried': control.value} : null;\r\n\t}\r\n}","

Absence Notices

\r\n
{{studentName}} - {{studentNumber}}
\r\n\r\n\r\n
No Absence Notices exist for student
\r\n
0\">\r\n \r\n\r\n \r\n \r\n Start Date\r\n \r\n \r\n {{st.StartDate | date: 'MM/dd/yy'}}\r\n \r\n\r\n \r\n \r\n End Date\r\n \r\n \r\n {{st.EndDate | date: 'MM/dd/yy'}}\r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n {{st.Status}}\r\n \r\n\r\n \r\n \r\n \r\n Submitted By\r\n \r\n \r\n {{st.SubmittedName}}\r\n \r\n\r\n \r\n \r\n \r\n \"paperclip\"\r\n \r\n \r\n Y\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Reason\r\n \r\n \r\n {{st.Reason}}\r\n \r\n\r\n \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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { take } from 'rxjs/operators';\r\nimport { AttendanceAdministrationService } from '../../admin360/attendance-administration/attendance-administration.service';\r\nimport { AbsentNotice } from '../../admin360/attendance-administration/review-absent-notices/absent-notice.model';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { StudentService } from '../student/student.service';\r\nimport { ViewAttachmentsComponent } from '../view-attachments/view-attachments.component';\r\n\r\n@Component({\r\n selector: 'app-view-absent-notice-history-dialog',\r\n templateUrl: './view-absent-notice-history-dialog.component.html',\r\n styleUrls: ['./view-absent-notice-history-dialog.component.css']\r\n})\r\nexport class ViewAbsentNoticeHistoryDialogComponent implements OnInit {\r\n studentId: number;\r\n absentNotices: AbsentNotice[] = [];\r\n\r\n columnsToDisplay = ['StartDate', 'EndDate', 'Status', 'SubmittedBy', 'Attachment', 'Reason'];\r\n angularMatData = new TylerMatTableDataSource(this.absentNotices);\r\n\r\n _sort: MatSort;\r\n\r\n studentName: string;\r\n studentNumber: string;\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private attendanceAdminService: AttendanceAdministrationService,\r\n private studentService: StudentService) { }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.angularMatData.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.studentId = this.data.studentId;\r\n this.studentName = this.studentService.formatStudentName(this.data.selectedStudent.FirstName, this.data.selectedStudent.MiddleName, this.data.selectedStudent.LastName, null);\r\n this.studentNumber = '#' + this.data.selectedStudent.StudentNumber;\r\n this.getSelfCheckInOutSubmissionHistory();\r\n }\r\n\r\n getSelfCheckInOutSubmissionHistory() {\r\n this.attendanceAdminService.getAbsentNoticesByStudentIdAndYearId(this.studentId).pipe(take(1)).subscribe(absentNotice => {\r\n this.absentNotices = absentNotice;\r\n this.angularMatData.data = this.absentNotices;\r\n });\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n viwAttachments(id: number) {\r\n this.attendanceAdminService.getAbsentNoticeAttachmentById(id).pipe(take(1)).subscribe(attachment => {\r\n this.dialog.open(ViewAttachmentsComponent, {\r\n data: {\r\n attachments: attachment\r\n },\r\n disableClose: true,\r\n minWidth: '750px'\r\n });\r\n });\r\n }\r\n\r\n}\r\n\r\n","
\r\n Attachments\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n {{AR.FileName}}\r\n \r\n \r\n \r\n \r\n Description\r\n \r\n {{AR.AttachmentDescription}}\r\n \r\n \r\n \r\n File Type\r\n \r\n {{AR.DocumentType}}\r\n \r\n \r\n \r\n Uploaded Date\r\n \r\n \r\n {{AR.AttachmentAddedOn|date:'MM/dd/yy h:mm a'}}\r\n \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, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../angular-material/extended.class';\r\nimport { Attachment } from '../models/attachment.model';\r\nimport { System } from '../System';\r\n\r\n@Component({\r\n selector: 'app-view-attachments',\r\n templateUrl: './view-attachments.component.html',\r\n styleUrls: ['./view-attachments.component.css']\r\n})\r\nexport class ViewAttachmentsComponent implements OnInit {\r\n attachmentMatTable = new TylerMatTableDataSource();\r\n attachmentColumnsToDisplay = ['FileName', 'Description', 'DocumentType', 'UploadedDate'];\r\n attachments: Attachment[] = [];\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n ngOnInit(): void {\r\n this.attachments = this.data.attachments;\r\n this.attachmentMatTable.data = this.attachments;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveAttachment(attachment: Attachment) {\r\n // PRE: an attachment to open\r\n // POST: takes you to the student attachment page\r\n if (attachment.FileName && !attachment.AttachmentFileName) {\r\n attachment.AttachmentFileName = attachment.FileName;\r\n }\r\n\r\n if (attachment.MyFileBase64String && attachment.AttachmentFileName && attachment.FileType) {\r\n System.viewFileFromBase(attachment.MyFileBase64String, attachment.FileType, attachment.AttachmentFileName);\r\n } else if (attachment.Id && attachment.AttachmentFileName) {\r\n System.viewFileFromId(attachment.Id, attachment.AttachmentFileName);\r\n }\r\n }\r\n\r\n}\r\n","export class NestedData {\r\n\r\n // Properties\r\n data: any;\r\n identifier: string;\r\n parent: NestedData;\r\n children: NestedData[] = [];\r\n showChildren = false;\r\n selected = false;\r\n header = false;\r\n ID: number | string;\r\n style: any = {};\r\n allowTab = false;\r\n ariaLabel: string;\r\n click = (event: MouseEvent, nestedData: NestedData) => { };\r\n keydown = (event: KeyboardEvent, nestedData: NestedData) => { };\r\n\r\n // Class Function\r\n constructor(data: any, parent: NestedData, ID: number | string, identifier?: string, children?: NestedData[]) {\r\n this.data = data;\r\n this.identifier = identifier;\r\n this.parent = parent;\r\n this.ID = ID;\r\n if (children) {\r\n this.children = children;\r\n }\r\n }\r\n\r\n get level(): number {\r\n let level = 0;\r\n let datum: NestedData = this;\r\n while (datum.parent) {\r\n level += 1;\r\n datum = datum.parent;\r\n }\r\n return level;\r\n }\r\n\r\n get shown(): boolean {\r\n let datum: NestedData = this;\r\n while (datum.parent) {\r\n if (datum.parent.showChildren == false) {\r\n return false;\r\n }\r\n datum = datum.parent;\r\n }\r\n return true;\r\n }\r\n\r\n get hasChildren(): boolean {\r\n return this.children && this.children.length > 0;\r\n }\r\n\r\n get showingChildren(): boolean {\r\n return this.hasChildren && this.showChildren;\r\n }\r\n\r\n get lastChild(): boolean {\r\n if (this.parent) {\r\n const index = this.parent.children.indexOf(this);\r\n if (index + 1 == this.parent.children.length) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // Methods\r\n parentSelected(levelsAbove = 1) {\r\n let datum: NestedData = this;\r\n while (levelsAbove > 0 && datum) {\r\n datum = datum.parent;\r\n levelsAbove -= 1;\r\n }\r\n return datum && datum.selected;\r\n }\r\n\r\n parentShowChildren(levelsAbove = 1) {\r\n let datum: NestedData = this;\r\n while (levelsAbove > 0 && datum) {\r\n datum = datum.parent;\r\n levelsAbove -= 1;\r\n }\r\n return datum && datum.showChildren;\r\n }\r\n}\r\n","\r\n\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \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 ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EmbeddedViewRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { NestedData } from './nested-data';\r\nimport { CdkVirtualForOf, CdkVirtualForOfContext, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\r\nimport { CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';\r\n\r\n/**\r\n * This provides a virtualized table for especially large data sets. It has a different styling from the other tables\r\n * and is meant to display large nested data structures. To use this, wrap your data using the NestedData model found\r\n * in this directory. Then, supply the following required properties. You may supply any of the optional properties.\r\n *\r\n * REQUIRED\r\n * @Input data: an array of nested data that will be displayed.\r\n * @Input columns: the columns that will be on the table. This is a dictionary of string keys to string arrays.\r\n * \t\t\tThe key is the identifier of the nested datum. The string array are the columns that display for that\r\n * \t\t\tidentifier.\r\n * @Input cellTemplate: a template that represents the contents of the cells. The template is supplied a context of\r\n * \t\t\tthe datum and the column of the cell as {datum: datum, column: column}.\r\n *\r\n * \tOPTIONAL\r\n * \t@Input height: this is the height styling for the viewport. It is a string and will be injected directly to the style.\r\n * \t@Input width: this is the width styling of the viewport. It is a string and will be injected directly to the style.\r\n * \t@Input paddingLeftPerLevel: this is the amount of padding there will be at a given level for each level of nesting.\r\n * @Input draggableIdentifiers: these are the datum that are draggable.\r\n * @Input draggableConnectedLists: this is a list of cdkDropLists that are capable of being dragged into\r\n *\r\n * \tOUTPUT\r\n * \t@Output dragStart: This event fires the nested data when the user starts dragging its cell\r\n * \t@Output dragEnd: This event fires the nested data when the user ends dragging its cell.\r\n * \t\t\tNOTE: this event is volatile and sometimes doesn't fire correctly. Avoid using it.\r\n */\r\n@Component({\r\n selector: 'virtualized-table',\r\n templateUrl: './virtualized-table.component.html',\r\n styleUrls: [\r\n './virtualized-table.component.css',\r\n '../../../assets/styles/angular-material.scss'\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class VirtualizedTableComponent implements OnInit, OnChanges {\r\n\r\n // Interface Properties\r\n @Input() data: NestedData[];\r\n @Input() columns: { [identifier: string]: string[] } = {};\r\n @Input() draggableIdentifiers: string[] = [];\r\n @Input() draggableConnectedLists: CdkDropList[];\r\n @Input() cellTemplate: TemplateRef;\r\n @Input() height = '300px';\r\n @Input() width = '100px';\r\n @Input() paddingLeftPerLevel = 20;\r\n @Output() fieldDrop = new EventEmitter>();\r\n @Output() dragStart = new EventEmitter();\r\n @Output() dragEnd = new EventEmitter();\r\n\r\n // Local Properties\r\n flatData: NestedData[] = [];\r\n @ViewChild('scrollComponent', { read: ElementRef, static: true }) scrollComponent: ElementRef;\r\n @ViewChild('virtualizedDropList', { read: CdkDropList, static: true }) virtualizedDropList: CdkDropList;\r\n @ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;\r\n\r\n // Class Functions\r\n constructor() { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: applying patch to prevent errors\r\n CdkVirtualForOf.prototype['_updateContext'] = function (this: any) {\r\n const count = this._data.length;\r\n let i = this._viewContainerRef.length;\r\n while (i--) {\r\n const view = this._viewContainerRef.get(i) as EmbeddedViewRef>;\r\n if (!view.destroyed) {\r\n view.context.index = this._renderedRange.start + i;\r\n view.context.count = count;\r\n this._updateComputedContextProperties(view.context);\r\n view.detectChanges();\r\n }\r\n }\r\n };\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: assembles the data whenever a property changes\r\n this.assembleData();\r\n }\r\n\r\n rowClick(event: MouseEvent, row: NestedData) {\r\n // PRE: a row is clicked\r\n // POST: expands its children and sets it as selected\r\n\r\n // If this is a header row, don't do anything\r\n if (row.header) {\r\n return;\r\n }\r\n\r\n // Showing children\r\n row.showChildren = !row.showChildren;\r\n\r\n // Running the datums click funciton\r\n if (event && row.click) {\r\n row.click(event, row);\r\n }\r\n\r\n // Don't do any selection if we're already selected\r\n if (row.selected) {\r\n return;\r\n }\r\n\r\n // Unselecting peers and their children\r\n this.flatData.forEach(data => {\r\n data.selected = false;\r\n });\r\n\r\n // Selecting the row\r\n row.selected = true;\r\n\r\n // Selecting the parents\r\n while (row.parent) {\r\n row.parent.selected = true;\r\n row = row.parent;\r\n }\r\n }\r\n\r\n rowKeydown(event: KeyboardEvent, row: NestedData) {\r\n // PRE: a row is focused while a key is pressed\r\n // POST: behaves identically to a click if enter is pressed\r\n if (event.key == 'Enter') {\r\n this.rowClick(null, row);\r\n }\r\n\r\n // Running the datum's keydown function\r\n if (row.keydown) {\r\n row.keydown(event, row);\r\n }\r\n }\r\n\r\n // Methods\r\n assembleData(data = this.data, initial = true, parent = null) {\r\n // POST: assembles the data for the virtual table recursively\r\n\r\n // On the first call, reset the data\r\n if (initial) {\r\n this.flatData = [];\r\n }\r\n\r\n // Applying the column header\r\n if (data.length > 0) {\r\n const ID = 'header' + (parent ? parent.ID : '');\r\n const headerData = new NestedData(null, parent, ID, data[0].identifier);\r\n headerData.header = true;\r\n this.flatData.push(headerData);\r\n }\r\n\r\n // For each data, push it to the flat data and push its children\r\n data.forEach(datum => {\r\n this.flatData.push(datum);\r\n if (datum.children) {\r\n this.assembleData(datum.children, false, datum);\r\n }\r\n });\r\n }\r\n\r\n filterShown() {\r\n // POST: returns the panelFiltered data that should be shown\r\n return this.flatData.filter(datum => datum.shown);\r\n }\r\n\r\n trackByID(index: number, item: NestedData) {\r\n // POST: tracks the items by their identifiers\r\n return item.ID;\r\n }\r\n\r\n createRange(indexes: number) {\r\n // POST: creates an array of numbers from 0 to indexes\r\n const arr = [];\r\n for (let i = 0; i < indexes; i++) {\r\n arr.push(i);\r\n }\r\n return arr;\r\n }\r\n}\r\n","export class School {\r\n Id: number;\r\n SchoolCode: string;\r\n SchoolName: string;\r\n SchoolDescription: string;\r\n SchoolType: string;\r\n StudentIds?: number[] = [];\r\n FamilyCount?: number;\r\n GradelevelDescription?: string[] = [];\r\n // FamilyInfo?: FamilyInfo[] = [];\r\n}\r\n\r\nexport class SchoolStudentFamiliesInfo {\r\n Parent_ID: number;\r\n Row_Count: number;\r\n ParentName: string;\r\n Student: string;\r\n StudentNumber: string;\r\n Grade: string;\r\n EnrolleDate?: Date;\r\n BirthDate?: Date;\r\n SchoolName: string;\r\n FamilyCount?: number;\r\n Student_ID: number;\r\n ParentMem_ID: number;\r\n Row_Number: number;\r\n}\r\n","\r\nexport class Year {\r\n Id: number;\r\n SiteYearId: number;\r\n Default: boolean;\r\n Status: number;\r\n YearType: number;\r\n Term: string;\r\n Description: string;\r\n Sequence: string;\r\n StartDate: Date;\r\n EndDate: Date;\r\n OpenForRegistration: boolean;\r\n UsedOnPortal: boolean;\r\n PortalDefault: boolean;\r\n EnableOnlinePayment: boolean;\r\n OnlineRegistration: boolean;\r\n ObjectiveByYear: boolean;\r\n CourseRequestYear: boolean;\r\n AYIdentifier: string;\r\n Disabled: boolean;\r\n SchoolID: number;\r\n SchoolCode: string;\r\n SchoolName: string;\r\n SchoolType: string;\r\n V10Flag: boolean;\r\n Visible: boolean;\r\n CurrentAttendanceDate: Date;\r\n DisplayStudentAlertsOnAttendance: boolean;\r\n IsOverride: boolean;\r\n EformYearEnabled: boolean;\r\n SelfRegistrationEnabled: boolean;\r\n QuickRegistrationEnabled: boolean;\r\n ReEnrollStudentEnabled: boolean;\r\n AddNewStudentEnabled: boolean;\r\n\r\n // client-side properties\r\n selected: boolean;\r\n FromGrade: number;\r\n ToGrade: number;\r\n\r\n constructor() { }\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { Observable, of, Subject } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { UnsavedChangesGuard } from '../guards/unsaved-changes/unsaved-changes.guard';\r\nimport { UserSchoolYear } from '../user/user-school-year.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { CheckForErrorsGuard } from './../guards/check-for-errors/check-for-errors.guard';\r\nimport { System } from './../System';\r\nimport { SchoolYearSettings } from './school-year-settings.model';\r\nimport { School } from './school.model';\r\nimport { Year } from './year.model';\r\n\r\n@Injectable()\r\nexport class YearService {\r\n\r\n // This is the default course request year\r\n defaultCourseRequestYear: Year;\r\n\r\n // This is the default Versatrans year\r\n defaultTransportationYear: Year;\r\n\r\n // This is the default year\r\n loginYear: Year;\r\n\r\n // This is the previously selected year, which will always hold the default years last value\r\n private _previousYear: Year;\r\n get previousYear(): Year {\r\n return this._previousYear;\r\n }\r\n\r\n // This is the selected year, which is initialized to the default year\r\n private _defaultYear: Year;\r\n get defaultYear(): Year {\r\n return this._defaultYear;\r\n }\r\n set defaultYear(value: Year) {\r\n this._previousYear = this._defaultYear;\r\n this._defaultYear = value;\r\n this.observableDefaultYear.next(this._defaultYear);\r\n }\r\n\r\n private _student360Year: Year;\r\n get student360Year(): Year {\r\n return this._student360Year;\r\n }\r\n set student360Year(value: Year) {\r\n this._student360Year = value;\r\n this.observableStudent360Year.next(this._student360Year);\r\n }\r\n\r\n public observableDefaultYear = new Subject();\r\n observableDefaultYearStream$ = this.observableDefaultYear.asObservable();\r\n\r\n public observableStudent360Year = new Subject();\r\n observableStudent360YearStream$ = this.observableStudent360Year.asObservable();\r\n\r\n public allYears: Year[];\r\n private _years: Year[];\r\n\r\n public get years(): Year[] {\r\n return this._years;\r\n }\r\n public set years(value: Year[]) {\r\n this._years = value;\r\n this.observableYears.next(value);\r\n }\r\n\r\n private _studentYears: Year[];\r\n public get studentYears(): Year[] {\r\n return this._studentYears;\r\n }\r\n public set studentYears(value: Year[]) {\r\n this._studentYears = value;\r\n }\r\n\r\n private _yearsForC360: Year[];\r\n public get yearsForC360(): Year[] {\r\n return this._yearsForC360;\r\n }\r\n public set yearsForC360(value: Year[]) {\r\n this._yearsForC360 = value;\r\n this.observableYears.next(value);\r\n }\r\n\r\n private _schools: School[] = [];\r\n private _schoolsForC360: School[] = [];\r\n public get schools(): School[] {\r\n return this._schools;\r\n }\r\n public set schools(value: School[]) {\r\n if (\r\n value\r\n && value != this._schools\r\n && (\r\n !this._schools\r\n || value.length != this._schools.length\r\n )\r\n ) {\r\n\r\n this._schools = value;\r\n this.observableSchools.next(value);\r\n }\r\n }\r\n public get schoolsForC360(): School[] {\r\n return this._schoolsForC360;\r\n }\r\n public set schoolsForC360(value: School[]) {\r\n this._schoolsForC360 = value;\r\n this.observableSchools.next(value);\r\n }\r\n\r\n private observableYears = new Subject();\r\n observableYearStream$ = this.observableYears.asObservable();\r\n private observableSchools = new Subject();\r\n observableSchoolsStream$ = this.observableSchools.asObservable();\r\n\r\n // This is used to Disabled School & Year dropdown based on Selected Tab\r\n observableSetSchoolDisabled = new Subject();\r\n observableSetSchoolDisabledStream$ = this.observableSetSchoolDisabled.asObservable();\r\n observableSetYearDisabled = new Subject();\r\n observableSetYearDisabledStream$ = this.observableSetYearDisabled.asObservable();\r\n\r\n private userSchools: School[];\r\n public allDistrictYears: Year[] = [];\r\n public allDistrictSchools: School[] = [];\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private unsavedChangesGuard: UnsavedChangesGuard,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private loginService: LoginService,\r\n private userService: UserService\r\n ) {\r\n }\r\n\r\n updateSelectedYear(newDefaultYear: Year) {\r\n const canContinue = this.unsavedChangesGuard.checkForDeactivation() && this.checkForErrorsGuard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n this.defaultYear = newDefaultYear;\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.allYears.filter(function (element) { return element.SchoolID == newDefaultYear.SchoolID; });\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.allYears, this.defaultYear);\r\n }\r\n }\r\n });\r\n } else if (canContinue) {\r\n this.defaultYear = newDefaultYear;\r\n if (this.allYears.filter(x => x.SchoolID == 0).length > 0) {\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.yearsForC360.filter(function (element) { return element.SchoolID == newDefaultYear.SchoolID; });\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.yearsForC360, this.defaultYear);\r\n }\r\n }\r\n else {\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.allYears.filter(function (element) { return element.SchoolID == newDefaultYear.SchoolID; });\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.allYears, this.defaultYear);\r\n }\r\n }\r\n this.updateStudent360Year(this.defaultYear);\r\n }\r\n }\r\n\r\n updateStudent360Year(student360Year: Year) {\r\n const canContinue = this.unsavedChangesGuard.checkForDeactivation() && this.checkForErrorsGuard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n this.defaultYear = student360Year;\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.allYears.filter(function (element) { return element.SchoolID == student360Year.SchoolID; });\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.allYears, this.defaultYear);\r\n }\r\n }\r\n });\r\n } else if (canContinue) {\r\n this.student360Year = student360Year;\r\n if (!this.loginService.LoginSettings.V10) {\r\n if (this.allYears.filter(x => x.SchoolID == 0).length > 0) {\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.yearsForC360.filter(function (element) { return element.SchoolID == student360Year.SchoolID; });\r\n if (this.years.length == 0) {\r\n this.years = this.allYears.filter(function (element) { return element.SchoolID == student360Year.SchoolID; });\r\n }\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.allYears, this.defaultYear);\r\n }\r\n }\r\n else {\r\n if (this.loginService.LoginSettings.V10 || this.userService.userType != 1) {\r\n this.years = this.allYears.filter(function (element) { return element.SchoolID == student360Year.SchoolID; });\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(this.allYears, this.defaultYear);\r\n }\r\n }\r\n }\r\n\r\n if (this.student360Year.CourseRequestYear == true) {\r\n this.defaultCourseRequestYear = this.student360Year;\r\n }\r\n else {\r\n let courseRequestYears = this.years.filter(o => o.CourseRequestYear == true);\r\n if (courseRequestYears.length == 0) {\r\n this.getDefaultCourseRequestYear().pipe(take(1)).subscribe();\r\n } else if (courseRequestYears.length == 1) {\r\n this.defaultCourseRequestYear = courseRequestYears[0];\r\n }\r\n else if (courseRequestYears.length > 1) {\r\n courseRequestYears = _.sortBy(courseRequestYears, ['EndDate'], ['DESC']);\r\n this.defaultCourseRequestYear = courseRequestYears[0];\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateSelectedSchool(schoolId: number) {\r\n const currentAY = this.defaultYear.AYIdentifier;\r\n let schoolYears = this.allYears.filter(function (element) { return element.SchoolID == schoolId; });\r\n if (schoolYears.length == 0) {\r\n schoolYears = this.yearsForC360.filter(function (element) { return element.SchoolID == schoolId; });\r\n }\r\n const newYear = schoolYears.filter(function (element) { return element.AYIdentifier == currentAY; })[0];\r\n if (newYear != undefined) {\r\n this.updateSelectedYear(newYear);\r\n }\r\n else {\r\n this.updateSelectedYear(schoolYears[0]);\r\n }\r\n }\r\n\r\n public isCurrentYear(year = this.defaultYear): boolean {\r\n return moment().isBetween(this.defaultYear.StartDate, this.defaultYear.EndDate, 'day', '[]');\r\n }\r\n\r\n getCurrentYear(): Year {\r\n for (let i = 0; i < this.years.length; i++) {\r\n if (this.isCurrentYear(this.years[i])) {\r\n return this.years[i];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getUserYears(userId: number, usertype: number = 0, studentId: number = 0): Observable {\r\n const queryString: string = '?userId=' + userId +\r\n '&usertype=' + usertype +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetUserYears' + queryString);\r\n }\r\n\r\n loadYears(years: Year[]) {\r\n this.allYears = years;\r\n const defaultCourseRequestYear = years.filter(y => y.CourseRequestYear)[0];\r\n if (!this.defaultCourseRequestYear) {\r\n if (defaultCourseRequestYear) {\r\n this.defaultCourseRequestYear = defaultCourseRequestYear;\r\n } else {\r\n this.getDefaultCourseRequestYear().pipe(take(1)).subscribe();\r\n }\r\n }\r\n this.setCurrentAttendanceDate(this.allYears);\r\n if (this.loginService.LoginSettings.V10) {\r\n this.schools = this.getSchoolsFromYears(years);\r\n }\r\n else {\r\n this.schools = this.getSchoolsForSelectedYear(years, this.defaultYear);\r\n }\r\n }\r\n\r\n loadYearsForC360(years: Year[]) {\r\n this.yearsForC360 = years;\r\n if (this.loginService.LoginSettings.V10) {\r\n this.schoolsForC360 = this.getSchoolsFromYears(this.yearsForC360);\r\n }\r\n else {\r\n this.schoolsForC360 = this.getSchoolsForSelectedYear(years, this.defaultYear);\r\n }\r\n }\r\n\r\n setCurrentAttendanceDate(years: Year[]) {\r\n // this should be set client-side rather than server-side to avoid time-zone mismatches which cause invalid dates\r\n years.forEach(year => {\r\n if (!year.CurrentAttendanceDate) {\r\n year.CurrentAttendanceDate = new Date();\r\n }\r\n });\r\n }\r\n\r\n getSchoolsFromYears(years: Year[]): School[] {\r\n const schools: School[] = [];\r\n for (let i = 0; i < years.length; i++) {\r\n if (schools.filter(function (element) { return element.Id == years[i].SchoolID; })[0] == undefined) {\r\n schools.push({ Id: years[i].SchoolID, SchoolName: years[i].SchoolName, SchoolCode: years[i].SchoolCode, SchoolDescription: '', SchoolType: years[i].SchoolType });\r\n }\r\n }\r\n return schools;\r\n }\r\n\r\n getSchoolsForSelectedYear(years: Year[], selectedYear: Year): School[] {\r\n const schools: School[] = [];\r\n const filteredYears = years.filter(o => o.Id == selectedYear.Id);\r\n filteredYears.forEach(obj => {\r\n if (schools.filter(o => o.Id == obj.SchoolID).length == 0) {\r\n schools.push({ Id: obj.SchoolID, SchoolName: obj.SchoolName, SchoolCode: obj.SchoolCode, SchoolDescription: '', SchoolType: obj.SchoolType });\r\n }\r\n });\r\n return schools;\r\n }\r\n\r\n getUserSchools(yearId: number, forceCheck = false): Observable {\r\n // PRE:\tyearId is the default user school year ID\r\n // \tforceCheck is true if you want to force the check to the server\r\n // POST: obtains the user schools\r\n\r\n // Checking the cache\r\n if (!forceCheck && this.userSchools) {\r\n return of(this.userSchools);\r\n }\r\n\r\n // Obtaining it from the server\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetUserSchools' + queryString).pipe(\r\n map(schools => {\r\n this.schools = schools;\r\n return this.schools;\r\n })\r\n );\r\n }\r\n\r\n getSchoolYearSettings(yearId: number, schoolId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'GetSchoolYearSettings' + queryString);\r\n }\r\n\r\n getDefaultYear(userId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetDefaultYear' + queryString);\r\n }\r\n\r\n getStudentSearchSchoolByYearId(yearId: number): Observable {\r\n // PRE: a year ID, probably the current one\r\n // POST: obtains the student search school using a supplied year ID\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentSearchSchoolByYearId' + queryString);\r\n }\r\n\r\n getAllSchoolYearsInDistrict(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetAllSchoolYearsInDistrict');\r\n }\r\n\r\n getDistrictYearsOnly(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetDistrictYearsOnly');\r\n }\r\n getDistrictYearbyIdentifier(): Observable {\r\n const queryString = '?ayIdentifier=' + this.defaultYear.AYIdentifier;\r\n return this.http.get(System.apiURL.Student + 'GetDistrictYearbyIdentifier' + queryString);\r\n }\r\n getAllSchools(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetAllSchools');\r\n }\r\n\r\n getAllEnrolledYears(studentId: number, schoolId: number): Observable {\r\n const queryString = '?studentId=' + studentId + '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'GetAllEnrolledYears' + queryString);\r\n }\r\n\r\n getSchoolsBySchoolIds(schoolIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetSchoolsBySchoolIds', schoolIds);\r\n }\r\n\r\n getSchoolsStudentIds(schoolIds: number[], yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.Student + 'GetSchoolsStudentIds' + queryString, schoolIds);\r\n }\r\n\r\n getDefaultCourseRequestYear(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetDefaultCourseRequestYear').pipe(\r\n map(result => {\r\n this.defaultCourseRequestYear = result;\r\n return result;\r\n })\r\n );\r\n }\r\n\r\n isDateWithinCurrentYear(testDate: Date | string | moment.Moment): boolean {\r\n return moment(testDate) >= moment(this.defaultYear.StartDate) && moment(testDate) <= moment(this.defaultYear.EndDate);\r\n }\r\n\r\n isDateWithinGivenYear(testDate: Date | string | moment.Moment, year: Year): boolean {\r\n return moment(testDate) >= moment(year.StartDate) && moment(testDate) <= moment(year.EndDate);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\n\r\n@Pipe({\r\n name: 'announcementFilter'\r\n})\r\nexport class AnnouncementFilterPipe implements PipeTransform {\r\n transform(announcementDataSource: TylerMatTableDataSource, school: string): TylerMatTableDataSource {\r\n return new TylerMatTableDataSource(\r\n announcementDataSource.data.filter(x => x.SchoolName == school)\r\n );\r\n }\r\n}\r\n","

\r\n District Message\r\n

\r\n\r\n
\r\n
\r\n {{districtMessage.Title}}\r\n \r\n Revised {{districtMessage.RevisedDate|date:'MM/dd/yy'}}\r\n \r\n
\r\n

\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import { System } from './../../../shared-components/System';\r\nimport {Component, OnInit, Inject} from '@angular/core';\r\nimport { Announcement } from '../announcement.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n// Class\r\n@Component ({\r\n selector: 'announcementMessage',\r\n templateUrl: './announcement-message.component.html'\r\n})\r\nexport class AnnouncementMessageComponent implements OnInit {\r\n\r\n // Properties\r\n districtMessages: Announcement[];\r\n dialogBox: MatDialogRef; // The dialog this is stored in\r\n stripHTML: (str: string) => string;\r\n junkDate = new Date('0001-01-01T00:00:00');\r\n\r\n // Class Functions\r\n constructor (\r\n private userService: UserService,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit () {\r\n // POST: captures district announcements to display\r\n this.stripHTML = System.stripHTML;\r\n this.districtMessages = this.data.districtMessages;\r\n }\r\n}\r\n","\r\n\r\n\r\n \r\n \r\n More \r\n \r\n \r\n \r\n \r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\t\r\n \r\n\t\t\t\tNew\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tCourse\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{{announcement.Course}}\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\t\tTeacher\r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{{announcement.Teacher}}\r\n\t\t\t\r\n\t\t\r\n\t\r\n\r\n \r\n \r\n \r\n Announcements\r\n \r\n \r\n\t\t\t\r\n \t{{announcement.StartDate | date:'MM/dd/yy'}} - {{announcement.Title}}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tNEW \r\n\t\t\t\t{{announcement.StartDate | date:'MM/dd/yy'}} - {{announcement.Title}}\r\n\t\t\t\r\n \r\n \r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\t\t\"Paperclip\"\r\n\t\t\t\tsrc=\"./assets/images/paperclip.png\"\r\n\t\t\t\tstyle=\"height:20px;\"\r\n\t\t\r\n\t\t\r\n\t\t\t{{announcement.AnnouncementAttachments && announcement.AnnouncementAttachments.length > 0 ? 'Y' : ''}}\r\n\t\t\r\n\t\r\n \r\n \r\n \r\n \r\n\r\n\t\t\t\r\n \r\n\r\n\t\t\t\r\n\t\t\t
0\"\r\n\t\t\t\tstyle=\"display: flex; flex-direction: column; width: 100%;\">\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{attachment.AttachmentFileName}}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{{attachment.AttachmentDescription}}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n","import { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from './../../../shared-components/angular-material/extended.class';\r\nimport { Component, Input, OnInit, ViewChild, OnChanges } from '@angular/core';\r\nimport { System } from '../../../shared-components/System';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Announcement } from '../announcement.model';\r\n\r\n@Component({\r\n selector: 'announcement-table',\r\n templateUrl: './announcement-table.component.html',\r\n styleUrls: [\r\n './announcement-table.component.css'\r\n ],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class AnnouncementTableComponent implements OnInit, OnChanges {\r\n\r\n // Properties\r\n _tableData = new TylerMatTableDataSource();\r\n @Input() classAnnouncements = false;\r\n columnsToDisplay = ['more', 'announcement'];\r\n stripHTML: (str: string) => string;\r\n V10: boolean;\r\n LoginSettings: LoginSettings;\r\n selectedRow: Announcement;\r\n _sort: MatSort;\r\n\r\n // Class Functions\r\n constructor(\r\n private loginService: LoginService,\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n @Input() set tableData(value: TylerMatTableDataSource) {\r\n this._tableData = value;\r\n }\r\n\r\n get tableData(): TylerMatTableDataSource {\r\n return this._tableData;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n this.tableData.sort = value;\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.stripHTML = System.stripHTML;\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.V10 = this.LoginSettings.V10;\r\n // Setting columns\r\n if (this.classAnnouncements) {\r\n this.columnsToDisplay.splice(1, 0, 'new', 'course', 'teacher');\r\n if (!this.loginService.LoginSettings.V10) {\r\n this.columnsToDisplay.push('attachments');\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: sets the table data to the right sort\r\n this.tableData.sort = this.sort;\r\n }\r\n\r\n showAttachment(attachment: Attachment) {\r\n // PRE: an attachment link is clicked\r\n // POST: opens the attachment in a new tab\r\n System.viewFileFromId(attachment.AttachmentId, attachment.AttachmentFileName);\r\n }\r\n\r\n transform(content) {\r\n return this.sanitizer.bypassSecurityTrustHtml(content);\r\n }\r\n // Methods\r\n}\r\n","\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n School Announcements\r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n {{school}}\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n

{{sectionNames[i]}}

\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n No announcements for selected date\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n 0\" image=\"announcement icon.png\" label=\"District Message\"\r\n (clickEvent)=\"showDistrictMessages()\">\r\n
\r\n
","import { System } from './../../shared-components/System';\r\nimport { Component, EventEmitter, OnInit } from '@angular/core';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { AnnouncementService } from './announcement.service';\r\nimport { Announcement } from './announcement.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport {forkJoin, Observable, Subscription} from 'rxjs';\r\nimport { AnnouncementMessageComponent } from './announcement-message/announcement-message.component';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { LoginService } from '../login/login.service';\r\nimport { Router } from '@angular/router';\r\nimport {Enrollment} from '../../shared-components/student/enrollment.model';\r\n\r\n// Class\r\n@Component({\r\n selector: 'announcement',\r\n templateUrl: './announcement.component.html',\r\n styleUrls: [\r\n './announcement.component.css'\r\n ]\r\n})\r\nexport class AnnouncementComponent implements OnInit {\r\n\r\n // Properties\r\n currentUser: User;\r\n defaultYear: Year;\r\n inputDate: Date;\r\n inputString: string;\r\n announcements: Announcement[] = [];\r\n districtMessages: Announcement[] = [];\r\n schoolNames: string[] = [];\r\n schoolExpanded: {[name: string]: boolean} = {};\r\n gotAnnouncements = false;\r\n noAnnouncements = false;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n isBusy: boolean;\r\n subscriptions: Subscription[] = [];\r\n v10: boolean;\r\n tableData: TylerMatTableDataSource[] = [];\r\n showTableFlags = [false, false, false];\r\n sectionNames = ['District Announcements', 'School Announcements', 'Class Announcements'];\r\n student360 = false;\r\n studentEnrollments: Enrollment[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private announcementService: AnnouncementService,\r\n private studentService: StudentService,\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private router: Router\r\n ) {\r\n\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the services and sets input date to the current date. Sets input string accordingly\r\n this.v10 = this.loginService.LoginSettings.V10;\r\n this.currentUser = this.userService.currentUser;\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.inputDate = new Date();\r\n this.inputString = this.inputDate.toLocaleDateString();\r\n this.student360 = this.router.url.toLowerCase().indexOf('/student360') >= 0;\r\n this.getAnnouncements();\r\n if (this.v10) {\r\n this.subscriptions.push(\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.getAnnouncements();\r\n }),\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.noAnnouncements = false;\r\n this.getAnnouncements();\r\n }),\r\n this.sharedService.observableIsPageLoadedStream$.subscribe(loaded => {\r\n this.isBusy = !loaded;\r\n })\r\n );\r\n }\r\n else {\r\n if (this.sharedService.currentPortal == undefined) {\r\n this.subscriptions.push(\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.getAnnouncements();\r\n }),\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.noAnnouncements = false;\r\n this.getAnnouncements();\r\n }),\r\n this.sharedService.observableIsPageLoadedStream$.subscribe(loaded => {\r\n this.isBusy = !loaded;\r\n })\r\n );\r\n }\r\n }\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n this.tableData[0].expandAll(toggle);\r\n this.tableData[1].expandAll(toggle);\r\n this.tableData[2].expandAll(toggle);\r\n this.schoolNames.forEach(schoolName => {\r\n this.schoolExpanded[schoolName] = toggle;\r\n });\r\n })\r\n );\r\n }\r\n\r\n // Methods\r\n getAnnouncements() {\r\n // POST: gets the announcements for the date input\r\n this.gotAnnouncements = false;\r\n if (this.inputDate != null && this.inputDate.toString() != 'Invalid Date') {\r\n if (this.currentUser.UserType == 1 &&\r\n (!this.sharedService.currentPortal || !this.sharedService.currentPortal.applyFilterStudents)) {\r\n if (this.student360) {\r\n this.subscriptions.push(\r\n this.announcementService.getStudentAnnouncements(this.inputDate).subscribe(data => {\r\n this.announcements = [];\r\n data.forEach(datum => {\r\n this.announcements.push(System.convert(datum, new Announcement()));\r\n });\r\n this.virtualize();\r\n })\r\n );\r\n }\r\n else {\r\n this.subscriptions.push(\r\n this.announcementService.getStaffAnnouncements(this.inputDate).subscribe(data => {\r\n this.announcements = [];\r\n data.forEach(datum => {\r\n this.announcements.push(System.convert(datum, new Announcement()));\r\n });\r\n this.virtualize();\r\n })\r\n );\r\n }\r\n } else {\r\n let observable: Observable = this.announcementService.getStudentAnnouncements(this.inputDate);\r\n if (this.student360) {\r\n observable = forkJoin(\r\n observable,\r\n this.studentService.getStudentEnrollments(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.defaultYear.Id\r\n )\r\n );\r\n }\r\n this.subscriptions.push(\r\n observable.subscribe(data => {\r\n this.announcements = [];\r\n const announcementData = this.student360 ? data[0] : data;\r\n announcementData.forEach(datum => {\r\n this.announcements.push(System.convert(datum, new Announcement()));\r\n });\r\n if (this.student360) {\r\n this.studentEnrollments = data[1];\r\n }\r\n this.virtualize();\r\n })\r\n );\r\n }\r\n this.gotAnnouncements = true;\r\n }\r\n if (!this.gotAnnouncements) {\r\n this.announcements = [];\r\n this.virtualize();\r\n }\r\n }\r\n\r\n virtualize() {\r\n this.noAnnouncements = false;\r\n // POST: transforms announcements into grid data\r\n\r\n // District student announcements\r\n const districtData = this.filterAnnouncements(this.announcements, 'D');\r\n this.tableData[0] = new TylerMatTableDataSource(districtData);\r\n this.showTableFlags[0] = districtData.length > 0;\r\n\r\n // Class staff announcements\r\n const classData = this.filterAnnouncements(this.announcements, 'C');\r\n this.tableData[2] = new TylerMatTableDataSource(classData);\r\n this.showTableFlags[2] = classData.length > 0;\r\n\r\n // District Message\r\n this.districtMessages = this.filterAnnouncements(this.announcements, 'M');\r\n\r\n // School staff announcements\r\n const schoolData = this.filterAnnouncements(this.announcements, 'S');\r\n this.schoolNames = [];\r\n schoolData.forEach(obj => {\r\n if (!this.schoolNames.includes(obj.SchoolName)) {\r\n this.schoolNames.push(obj.SchoolName);\r\n }\r\n this.schoolExpanded[obj.SchoolName] = true;\r\n });\r\n if (!this.student360) {\r\n this.schoolNames.sort((a, b) =>\r\n a.localeCompare(b)\r\n );\r\n } else {\r\n const primaryEnrollment = this.studentEnrollments.find(o => o.PrimaryEnrollment);\r\n this.schoolNames.sort((a, b) => {\r\n if (a == primaryEnrollment.SchoolName && b != primaryEnrollment.SchoolName) {\r\n return -1;\r\n } else if (b == primaryEnrollment.SchoolName && a != primaryEnrollment.SchoolName) {\r\n return 1;\r\n } else {\r\n return a.localeCompare(b);\r\n }\r\n });\r\n }\r\n this.tableData[1] = new TylerMatTableDataSource(schoolData);\r\n this.showTableFlags[1] = schoolData.length > 0;\r\n\r\n // Determining whether to show any announcements\r\n this.noAnnouncements = !this.showTableFlags[0] && !this.showTableFlags[1] && !this.showTableFlags[2];\r\n }\r\n\r\n private filterAnnouncements(announcements: Announcement[], type: string) {\r\n // PRE: a list of announcements and a single character type indicator\r\n // POST: filters the announcements for a given type. Returns those announcements whose type matches.\r\n return announcements.filter(function (announcement: Announcement) {\r\n return announcement.AnnouncementType == type;\r\n });\r\n }\r\n\r\n showDistrictMessages() {\r\n // POST: shows the district message\r\n const dialogBox = this.dialog.open(AnnouncementMessageComponent, {\r\n data: {\r\n districtMessages: this.districtMessages\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.componentInstance.dialogBox = dialogBox;\r\n }\r\n\r\n studentInfoView() {\r\n return this.sharedService.currentPortal && this.sharedService.currentPortal.applyFilterStudents;\r\n }\r\n\r\n showYearSelector() {\r\n return !this.v10;\r\n }\r\n}\r\n","// Imports\r\n\r\n// Class\r\nimport {System} from '../../shared-components/System';\r\nimport {Attachment} from '../../shared-components/models/attachment.model';\r\n\r\nexport class Announcement {\r\n\r\n // Properties\r\n id: number;\r\n AnnouncementAttachments: Attachment[];\r\n AnnouncementType: string;\r\n Course: string;\r\n Description: string;\r\n EndDate = new Date();\r\n Id: number;\r\n IsNewAnnouncement: boolean;\r\n IsValidForParents: boolean;\r\n IsValidForStudents: boolean;\r\n RevisedDate = new Date();\r\n SchoolName: string;\r\n ShowDaily: boolean;\r\n StartDate = new Date();\r\n StudentBirthDate = new Date();\r\n StudentName: string;\r\n Teacher: string;\r\n Title: string;\r\n\r\n // Methods\r\n\tgetRevisedDate(): Date {\r\n\t\treturn this.RevisedDate && this.RevisedDate.toString() != System.junkDateString && this.RevisedDate.toString() != 'Invalid Date' ? this.RevisedDate : null;\r\n\t}\r\n}\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport {Announcement} from '../announcement.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-broadcast-dialog',\r\n templateUrl: './broadcast-dialog.component.html',\r\n styleUrls: ['./broadcast-dialog.component.css']\r\n})\r\nexport class BroadcastDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n broadcast: Announcement;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.broadcast = this.data.broadcast;\r\n }\r\n\r\n close() {\r\n // PRE: the close button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}\r\n","\r\n
\r\n {{broadcast.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","import { System } from './../../shared-components/System';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Announcement } from './announcement.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {BroadcastDialogComponent} from './broadcast-dialog/broadcast-dialog.component';\r\nimport {LoginService} from '../login/login.service';\r\nimport {take} from 'rxjs/operators';\r\n\r\n// Class\r\n@Injectable ()\r\nexport class AnnouncementService {\r\n\r\n // Properties\r\n checkingBroadcast = false;\r\n\r\n // Class Functions\r\n constructor (\r\n private http: HttpClient,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n // Event Functions\r\n checkBroadcast () {\r\n // POST: waits for the student broadcast\r\n\r\n // We only want to do this one and if the system setting is set\r\n if (!this.checkingBroadcast && this.loginService.LoginSettings.ActivateBroadcast) {\r\n this.checkingBroadcast = true;\r\n\r\n // Setting up query string\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&userId=' + this.userService.currentUser.Id;\r\n let call: string;\r\n switch (this.userService.currentUser.UserType) {\r\n case 1:\r\n call = 'CheckBroadcastStaff';\r\n break;\r\n case 2:\r\n call = 'CheckBroadcastParent';\r\n break;\r\n case 3:\r\n call = 'CheckBroadcastStudent';\r\n break;\r\n }\r\n\r\n // Checking the broadcast upon initialization\r\n this.http.get(System.apiURL.Student + call + queryString).pipe(take(1)).subscribe(\r\n broadcasts => {\r\n if (broadcasts) {\r\n broadcasts.forEach(broadcast => {\r\n this.dialog.open(BroadcastDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n broadcast: broadcast\r\n }\r\n });\r\n });\r\n }\r\n }\r\n );\r\n\r\n // Setting the interval for checking broadcast\r\n setInterval(() => {\r\n this.http.get(System.apiURL.Student + call + queryString).pipe(take(1)).subscribe(\r\n broadcasts => {\r\n if (broadcasts) {\r\n broadcasts.forEach(broadcast => {\r\n this.dialog.open(BroadcastDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n broadcast: broadcast\r\n }\r\n });\r\n });\r\n }\r\n }\r\n );\r\n }, this.loginService.LoginSettings.BroadcastInterval * 1000);\r\n }\r\n }\r\n\r\n // Methods\r\n getStaffAnnouncements (currentDate: Date): Observable {\r\n // PRE: the route requires the user's id, the school's id, the year's id, and date of inquiry as a string formatted mm/dd/yy\r\n // POST: returns all staff announcements for the user of a given school during a given year at a given date\r\n const dateString = (currentDate.getMonth() + 1) + '/' + (currentDate.getDate()) + '/' + (currentDate.getFullYear().toString().slice(2));\r\n return this.http.get(\r\n System.apiURL.Student +\r\n 'GetStaffAnnouncements' +\r\n '?userId=' + this.userService.currentUser.Id +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '¤tDate=' + dateString\r\n );\r\n }\r\n\r\n getStudentAnnouncements (currentDate): Observable {\r\n // PRE: the route requires the student's id, the year's id, the user's id, the date of inquiry as a string formatted mm/dd/yy, and whether or not this is mobile\r\n // POST: returns all student announcements for the given student as a given user during a given year at a given date. Mobile changes the format (I think?).\r\n const dateString = (currentDate.getMonth() + 1) + '/' + (currentDate.getDate()) + '/' + (currentDate.getFullYear().toString().slice(2));\r\n return this.http.get(\r\n System.apiURL.Student +\r\n 'GetStudentAnnouncements' +\r\n '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tDate=' + dateString +\r\n '&isMobile=false' // TODO: make this a function\r\n );\r\n }\r\n}\r\n","import { Student } from \"../../shared-components/student/student.model\";\r\n\r\n\r\nexport class CommunicationLogFilterParam {\r\n\r\n studentNumber?: string;\r\n students?: Student[] = [];\r\n type?: string;\r\n subject?: string;\r\n result?: string;\r\n fromLogDate?: string;\r\n toLogDate?: string;\r\n \r\n constructor() {\r\n }\r\n }","import { MatDialog } from '@angular/material/dialog';\r\nimport { System } from '../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { CommunicationLogFilterParam } from './communication-log-param';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { CommunicationLog } from './models/communication-log.model';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport { School } from '../../shared-components/year/school.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { LoginService } from '../login/login.service';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { AddAttachmentDialogComponent } from '../../shared-components/add-attachment-dialog/add-attachment-dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CommunicationLogService {\r\n\r\n addEditSchools: School[];\r\n viewSchools: School[];\r\n\r\n _filterParam: CommunicationLogFilterParam;\r\n filterChange = new EventEmitter();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private sharedService: SharedService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog\r\n ) {\r\n this._filterParam = new CommunicationLogFilterParam();\r\n }\r\n\r\n set filterParam(filterParam: CommunicationLogFilterParam) {\r\n this._filterParam = filterParam;\r\n this.filterChange.emit();\r\n }\r\n\r\n get filterParam() {\r\n return this._filterParam;\r\n }\r\n\r\n isFiltered(): boolean {\r\n return !!this.filterParam.studentNumber ||\r\n (\r\n this.filterParam.students != null &&\r\n this.filterParam.students.length > 0\r\n ) ||\r\n !!this.filterParam.type ||\r\n !!this.filterParam.subject ||\r\n !!this.filterParam.result ||\r\n !!this.filterParam.toLogDate ||\r\n !!this.filterParam.fromLogDate;\r\n }\r\n\r\n getStaffIdByUserId() {\r\n return this.loginService.getStaffIdByUserId();\r\n }\r\n\r\n openAddEditAttachmentDialog(\r\n communicationLog: CommunicationLog,\r\n attachment: Attachment,\r\n documentTypes: Lookup[],\r\n callBack: (saved: boolean, attachment: Attachment) => void\r\n ) {\r\n\r\n // Initializing attachment\r\n let newAttachment = false;\r\n if (!attachment) {\r\n newAttachment = true;\r\n attachment = new Attachment();\r\n attachment.Id = -(communicationLog.AttachmentRecords.length + 1);\r\n attachment.DocumentId = 0;\r\n attachment.CommunicationLogId = communicationLog.Id;\r\n attachment.FileName = '';\r\n attachment.Description = '';\r\n attachment.UploadedDate = new Date();\r\n attachment.MyFileBase64String = '';\r\n attachment.FileType = '';\r\n attachment.Comment = '';\r\n attachment.ViewFileOnWebsite = true;\r\n }\r\n\r\n // Opening the dialog\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: newAttachment,\r\n editAttachment: !newAttachment,\r\n requireDocumentType: this.loginService.LoginSettings.V10,\r\n documentTypes: documentTypes\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((saved: boolean) => {\r\n callBack(saved, attachment);\r\n });\r\n }\r\n\r\n getCommunicationLog(yearId: number, schoolId: number, studentId: number, staffId: number, LogId: number, singleLineNote: any, LogIds: string = null, includeMoreAreaData = true, cardLogs = false) {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&studentId=' + studentId +\r\n '&staffId=' + staffId +\r\n '&LogId=' + LogId +\r\n '&singleLineNote=' + singleLineNote +\r\n '&LogIds=' + LogIds +\r\n '&includeMoreAreaData=' + includeMoreAreaData +\r\n '&cardLogs=' + cardLogs;\r\n return this.http.get(System.apiURL.Classroom + 'GetCommunicationLog' + paramString).pipe(\r\n map(logs => {\r\n\r\n // Changing reason to an array\r\n for (let i = 0; i < logs.length; i++) {\r\n logs[i] = System.convert(logs[i], new CommunicationLog());\r\n const log = logs[i];\r\n log.Date = new Date(log.Date);\r\n log.Time = new Date(log.Time);\r\n if (log.Reason) {\r\n log.Reason = (log.Reason as string).split(',');\r\n\r\n // Classic saves Reason with spaces after each comma\r\n // These need to be trimmed to match the value in 360\r\n for (let j = 0; j < log.Reason.length; j++) {\r\n const reasonString: string = log.Reason[j];\r\n log.Reason[j] = reasonString.trim();\r\n }\r\n }\r\n if (log.InformOthers) {\r\n log.InformOthers = (log.InformOthers as string).split(',');\r\n }\r\n }\r\n\r\n // Returning the logs\r\n return logs;\r\n })\r\n );\r\n }\r\n\r\n getCommunicationLogCount(yearId: number, schoolId: number, studentId: number, staffId: number): Observable {\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId +\r\n '&studentId=' + studentId +\r\n '&staffId=' + staffId;\r\n return this.http.get(System.apiURL.Classroom + 'GetCommunicationLogCount' + paramString);\r\n }\r\n\r\n convertReasons(log: CommunicationLog, reasons: Lookup[] = []) {\r\n let reasonsString = '';\r\n if (log.Reason && log.Reason instanceof Array) {\r\n log.Reason.forEach(reason => {\r\n if (reasonsString.length > 0) {\r\n reasonsString += ',';\r\n }\r\n reasonsString += reason;\r\n });\r\n log.Reason = reasonsString;\r\n } else if (log.Reason == 'all' && reasons) {\r\n reasons.forEach(reason => {\r\n if (reasonsString.length > 0) {\r\n reasonsString += ',';\r\n }\r\n reasonsString += reason.Code;\r\n });\r\n log.Reason = reasonsString;\r\n }\r\n }\r\n\r\n convertInformOthers(log: CommunicationLog, others: Lookup[] = []) {\r\n let othersString = '';\r\n if (log.InformOthers && log.InformOthers instanceof Array) {\r\n log.InformOthers.forEach(other => {\r\n if (othersString.length > 0) {\r\n othersString += ',';\r\n }\r\n othersString += other;\r\n });\r\n log.InformOthers = othersString;\r\n } else if (log.InformOthers == 'all' && others) {\r\n others.forEach(other => {\r\n if (othersString.length > 0) {\r\n othersString += ',';\r\n }\r\n othersString += other.Code;\r\n });\r\n log.InformOthers = othersString;\r\n }\r\n }\r\n\r\n saveCommunicationLog(yearId: number, schoolId: number, data: CommunicationLog, reasons: Lookup[] = null, informOthers: Lookup[] = null): Observable {\r\n\r\n // Changing reason from array to CSV\r\n // NOTE: we copy to prevent other errors from propagating\r\n const copyLog = new CommunicationLog();\r\n Object.assign(copyLog, data);\r\n this.convertReasons(copyLog, reasons);\r\n this.convertInformOthers(copyLog, informOthers);\r\n\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveCommunicationLog' + paramString, copyLog);\r\n }\r\n\r\n saveCommunicationLogs(yearId: number, schoolId: number, data: CommunicationLog[], reasons: Lookup[] = null, informOthers: Lookup[] = null): Observable {\r\n\r\n // Changing reason from array to CSV\r\n // NOTE: we copy to prevent other errors from propagating\r\n const copyLogs = [];\r\n data.forEach(datum => {\r\n const copyLog = new CommunicationLog();\r\n Object.assign(copyLog, datum);\r\n this.convertReasons(copyLog, reasons);\r\n this.convertInformOthers(copyLog, informOthers);\r\n copyLogs.push(copyLog);\r\n });\r\n\r\n let paramString = '';\r\n paramString += '?yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.post(System.apiURL.Classroom + 'SaveCommunicationLogs' + paramString, copyLogs);\r\n }\r\n\r\n deleteCommunicationLog(logId: number): Observable {\r\n let paramString = '';\r\n paramString += '?logId=' + logId;\r\n return this.http.post(System.apiURL.Classroom + 'DeleteCommunicationLog' + paramString, null);\r\n }\r\n\r\n saveCommunicationLogAttachment(AttachmentRecords: any): Observable {\r\n return this.http.post(System.apiURL.Classroom + 'SaveCommunicationLogAttachment', AttachmentRecords);\r\n }\r\n\r\n deleteCommunicationLogAttachment(logId: number): Observable {\r\n let paramString = '';\r\n paramString += '?Id=' + logId;\r\n return this.http.post(System.apiURL.Classroom + 'DeleteCommunicationLogAttachment' + paramString, null);\r\n }\r\n\r\n getCommunicationLogAttachment(attachmentId: number, massEmailAttachment: boolean): Observable {\r\n return this.http.get(System.apiURL.Classroom + 'GetCommunicationLogAttachment?attachmentId=' + attachmentId + '&massEmailAttachment=' + massEmailAttachment);\r\n }\r\n\r\n getAttachmentById(id: number): Observable {\r\n return this.sharedService.getAttachment(id, '');\r\n }\r\n\r\n}\r\n","import { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport * as moment from 'moment';\r\n\r\nexport class CommunicationLog {\r\n\r\n // Server Properties\r\n Id: number;\r\n StudentId: number;\r\n StaffId: number;\r\n StudentNumber: string;\r\n NickName: string;\r\n FirstName: string;\r\n MiddleName: string;\r\n LastName: string;\r\n StaffName: string;\r\n Site: string;\r\n Year: string;\r\n Date: Date;\r\n Time: string | Date; // I'm not sure why this is a datetime, but it is on the API\r\n TypeId: string;\r\n ContactPersonId: string;\r\n Notes: string;\r\n ResultId: string;\r\n Attach: string;\r\n Location: string;\r\n Duration: number;\r\n Comments: string;\r\n RequestedBy: string;\r\n RequestedByName: string;\r\n Reaction: string;\r\n NotifyCounselor: boolean;\r\n NotifyParent: boolean;\r\n NotifyStudent: boolean;\r\n NotifyTeacher: boolean;\r\n AddedOn: Date;\r\n LastUpdatedBy: string;\r\n LastUpdatedOn: Date;\r\n MassEmailLogId: number;\r\n isSelected: boolean;\r\n AttachmentRecords: Attachment[];\r\n Reason: string | string[] = [];\r\n ReasonIds: number[] = [];\r\n InformOthers: string | string[] = [];\r\n ConfidentialNote: string;\r\n Confidential: string;\r\n Subject: string;\r\n\r\n // Local Properties\r\n typeCode;\r\n personCode;\r\n resultCode;\r\n MoreAreaDataLoaded = false;\r\n\r\n // Methods\r\n get displayTime() {\r\n if (this.Time && this.Time instanceof Date) {\r\n return moment(this.Time).format('hh:mm a');\r\n } else {\r\n return this.Time;\r\n }\r\n }\r\n}\r\n","import { Component, ElementRef, ViewChild } from '@angular/core';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { DataDefControl } from '../data-def-control.directive';\r\n\r\n@Component({\r\n selector: 'data-def-radio-buttons',\r\n templateUrl: './data-def-radio-buttons.component.html',\r\n styleUrls: ['./data-def-radio-buttons.component.css']\r\n})\r\nexport class DataDefRadioButtonsComponent extends DataDefControl {\r\n\r\n labels: string[] = [];\r\n values: any[] = [];\r\n ids: string[] = [];\r\n\r\n private _controlRef: ElementRef;\r\n get controlRef(): ElementRef {\r\n return this._controlRef;\r\n }\r\n @ViewChild('control', { read: ElementRef }) set controlRef(value: ElementRef) {\r\n this._controlRef = value;\r\n this.controlEmitter.emit(value);\r\n }\r\n\r\n constructor(\r\n customizationFrameworkService: CustomizationFrameworkService,\r\n yearService: YearService,\r\n loginService: LoginService\r\n ) {\r\n super(customizationFrameworkService, yearService, loginService);\r\n }\r\n\r\n processOptions(): void {\r\n this.labels = this.options.map(opt => (this.dataDef.CodeNotRequired ? '' : (opt.Code ? opt.Code : '') + ' - ') + (opt.Description ? opt.Description : ''));\r\n this.values = this.options.map(o => this.useCodeAsValue ? o.Code : o.Id);\r\n this.ids = this.options.map(o => this.dataDef.Enum + '-opt-' + o.Id);\r\n }\r\n\r\n}\r\n","\r\n","\r\n\r\n \r\n {{(dataDef.CodeNotRequired ? '' : (opt.Code ? opt.Code : '') + ' - ') + (opt.Description ? opt.Description : '')}}\r\n \r\n\r\n","import { Component, ElementRef, ViewChild } from '@angular/core';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { YearService } from '../../../year/year.service';\r\nimport { DataDefControl } from '../data-def-control.directive';\r\n\r\n@Component({\r\n selector: 'data-def-button-list',\r\n templateUrl: './data-def-button-list.component.html',\r\n styleUrls: ['./data-def-button-list.component.css']\r\n})\r\nexport class DataDefButtonListComponent extends DataDefControl {\r\n\r\n private _controlRef: ElementRef;\r\n get controlRef(): ElementRef {\r\n return this._controlRef;\r\n }\r\n @ViewChild('control', { read: ElementRef }) set controlRef(value: ElementRef) {\r\n this._controlRef = value;\r\n this.controlEmitter.emit(value);\r\n }\r\n\r\n constructor(\r\n customizationFrameworkService: CustomizationFrameworkService,\r\n yearService: YearService,\r\n loginService: LoginService\r\n ) {\r\n super(customizationFrameworkService, yearService, loginService);\r\n }\r\n\r\n\r\n}\r\n","
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? field.EndRange : 99999}}\"\r\n />\r\n \r\n \r\n \r\n 0 ? field.EndRange : 99999}}\"\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {{field.DisplayName}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef, OnDestroy, AfterViewInit } from '@angular/core';\r\nimport { CustomizationFrameworkService } from '../customization-framework.service';\r\nimport { CSTField, CustomFieldDataObject } from '../models/custom-data-field.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { CustomFieldControlTypeEnum } from '../models/custom-data-control-type.model';\r\nimport { CustomFieldDataTypeEnum } from '../models/custom-data-field-type.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { System } from '../../../shared-components/System';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'custom-data-field',\r\n templateUrl: './custom-data-field.component.html',\r\n styleUrls: ['./custom-data-field.component.css']\r\n})\r\nexport class CustomDataFieldComponent implements OnInit, OnDestroy, AfterViewInit {\r\n static customFieldIncrementor = 1;\r\n private _internalIndex: number;\r\n public get internalIndex(): number {\r\n return this._internalIndex;\r\n }\r\n\r\n private _fieldName: string;\r\n @Input() set fieldName(value: string) {\r\n this._fieldName = value;\r\n if (this.initialized) {\r\n this.getFieldMetadata();\r\n }\r\n }\r\n get fieldName(): string {\r\n return this._fieldName;\r\n }\r\n\r\n private _label: string;\r\n get label(): string {\r\n return this._label;\r\n }\r\n @Input() set label(value: string) {\r\n this._label = value;\r\n if (this.field) {\r\n this.field.DisplayName = value;\r\n }\r\n }\r\n\r\n private _controlTypeID: number;\r\n get controlTypeID(): number {\r\n return this._controlTypeID;\r\n }\r\n @Input() set controlTypeID(value: number) {\r\n this._controlTypeID = value;\r\n if (this.field) {\r\n this.field.ControlTypeID = value;\r\n }\r\n }\r\n\r\n private _readOnly: boolean;\r\n get readOnly(): boolean {\r\n return this._readOnly;\r\n }\r\n @Input() set readOnly(value: boolean) {\r\n this._readOnly = value;\r\n if (this.field) {\r\n if (value == true) {\r\n this.field.ReadOnly = value;\r\n }\r\n else {\r\n const originalField = this.customizationFrameworkService.customDataFields.find(o => o.ID == this.field.ID);\r\n if (originalField) {\r\n this.field.ReadOnly = originalField.ReadOnly;\r\n }\r\n }\r\n this.checkFieldPermissions();\r\n }\r\n }\r\n\r\n private _required: boolean;\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n @Input() set required(value: boolean) {\r\n this._required = value;\r\n if (this.field) {\r\n if (value == true) {\r\n this.field.IsRequired = value;\r\n }\r\n else {\r\n const originalField = this.customizationFrameworkService.customDataFields.find(o => o.ID == this.field.ID);\r\n if (originalField) {\r\n this.field.IsRequired = originalField.IsRequired;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _value: any | null;\r\n get value(): any | null {\r\n return this._value;\r\n }\r\n @Input() set value(val: any | null) {\r\n if (this.transformDataType(val) != this._value) {\r\n this._value = this.transformDataType(val);\r\n this.textValue = this._value.toString();\r\n if (this.field) {\r\n if (this.field.DataTypeID == CustomFieldDataTypeEnum.Telephone) {\r\n this.setTelephoneDisplayValue();\r\n }\r\n else if (this.field.DataTypeID == CustomFieldDataTypeEnum.YesNo && (typeof val) == 'string') {\r\n this._value = val == 'true';\r\n }\r\n this.persistValue(false);\r\n }\r\n }\r\n }\r\n\r\n\r\n private _masterId: number;\r\n get masterId(): number {\r\n return this._masterId;\r\n }\r\n @Input() set masterId(value: number) {\r\n if (this.initialized && this.dataStore) {\r\n const ds = this.dataStore.find(f => f.CustomFieldID == this.field.ID && f.SiteYearId == this.yearService.defaultYear.SiteYearId && f.MasterId == this._masterId);\r\n if (ds) {\r\n ds.MasterId = value;\r\n }\r\n }\r\n this._masterId = value;\r\n }\r\n\r\n private _allowControlToHandleOwnData: boolean;\r\n public get allowControlToHandleOwnData(): boolean {\r\n return this._allowControlToHandleOwnData;\r\n }\r\n @Input() public set allowControlToHandleOwnData(value: boolean) {\r\n this._allowControlToHandleOwnData = value;\r\n this.checkFieldPermissions();\r\n }\r\n\r\n @Input() pageIndex: number;\r\n @Input() width: string;\r\n @Input() hideLabel: boolean;\r\n @Input() hintLabel: string;\r\n @Input() noteRows: number;\r\n @Input() alwaysShowControl: boolean;\r\n @Input() showTodayButton: boolean;\r\n @Input() showNowButton: boolean;\r\n @Input() ignoreRequired: boolean;\r\n @Input() dataStore: CustomFieldDataObject[];\r\n\r\n @Output() valueChange: EventEmitter = new EventEmitter();\r\n\r\n field: CSTField;\r\n controlTypes = CustomFieldControlTypeEnum;\r\n dataTypes = CustomFieldDataTypeEnum;\r\n subscriptions: Subscription[] = [];\r\n labels: string[] = [];\r\n values: string[] = [];\r\n ids: string[] = [];\r\n userCanView = true;\r\n userCanEdit = true;\r\n parentFieldValue: number;\r\n phoneMask = System.phoneTextMask;\r\n telephoneDisplayValue: string;\r\n initialized = false;\r\n metaDataRetrieved = false;\r\n timeControl: ElementRef;\r\n localDateValue: Date;\r\n localTimeValue: string;\r\n numberMask = '0.0';\r\n allowNegatives = false;\r\n textValue = '';\r\n\r\n private _control: ElementRef;\r\n @ViewChild('control', { read: ElementRef }) set control(value: ElementRef) {\r\n if (value) {\r\n this._control = value;\r\n }\r\n }\r\n get control(): ElementRef {\r\n if (this.field.ControlTypeID == this.controlTypes.Time || this.field.ControlTypeID == this.controlTypes.Date || this.field.ControlTypeID == this.controlTypes.DateTime) {\r\n return this.timeControl;\r\n }\r\n else {\r\n return this._control;\r\n }\r\n }\r\n\r\n constructor(\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private yearService: YearService,\r\n private securityService: SecurityService\r\n ) {\r\n this._internalIndex = CustomDataFieldComponent.customFieldIncrementor++;\r\n }\r\n\r\n ngOnInit() {\r\n this.getFieldMetadata();\r\n\r\n this.subscriptions.push(this.securityService.observablePermissionStream$.subscribe(o => {\r\n if (this.field) {\r\n this.checkFieldPermissions();\r\n }\r\n }));\r\n\r\n this.subscriptions.push(this.customizationFrameworkService.observableobservableFieldMetaDataRetrievedStream$.subscribe(o => {\r\n if (!this.metaDataRetrieved) {\r\n this.getFieldMetadata();\r\n }\r\n }));\r\n\r\n\r\n this.initialized = true;\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n getFieldMetadata() {\r\n if (this.fieldName) {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == this.fieldName);\r\n if (field) {\r\n this.metaDataRetrieved = true;\r\n this.setUpControl(field);\r\n }\r\n }\r\n }\r\n\r\n setUpControl(field: CSTField) {\r\n if (!field) {\r\n field = new CSTField();\r\n }\r\n const tmpField = cloneDeep(field);\r\n tmpField.PageIndex = this.pageIndex;\r\n if (this.label) {\r\n tmpField.DisplayName = this.label;\r\n }\r\n if (this.controlTypeID) {\r\n tmpField.ControlTypeID = this.controlTypeID;\r\n }\r\n if (this.readOnly) {\r\n tmpField.ReadOnly = true;\r\n }\r\n if (this.required) {\r\n tmpField.IsRequired = true;\r\n }\r\n this.field = tmpField;\r\n this.checkFieldPermissions();\r\n if (this.userCanView) {\r\n this.getValue();\r\n }\r\n if (this.field.DataTypeID == CustomFieldDataTypeEnum.Telephone && this.value) {\r\n this.setTelephoneDisplayValue();\r\n }\r\n if (this.field.DataTypeID == CustomFieldDataTypeEnum.Integer || this.field.DataTypeID == CustomFieldDataTypeEnum.Decimal) {\r\n this.allowNegatives = this.field.StartRange != null && this.field.StartRange >= 0 ? false : true;\r\n }\r\n if (this.field.DataTypeID == CustomFieldDataTypeEnum.Decimal) {\r\n let precision = 0;\r\n if (this.field.DecimalPrecision > 0) {\r\n precision = this.field.DecimalPrecision;\r\n this.numberMask = '0.' + precision + '-' + precision;\r\n }\r\n }\r\n }\r\n\r\n checkFieldPermissions() {\r\n this.userCanView = this.customizationFrameworkService.userCanViewField(this.field, !this.readOnly, this.allowControlToHandleOwnData);\r\n this.userCanEdit = this.customizationFrameworkService.userCanEditField(this.field, !this.readOnly, this.allowControlToHandleOwnData);\r\n this.setReadWriteAccess();\r\n }\r\n\r\n setReadWriteAccess() {\r\n if (this.field) {\r\n if (!this.userCanEdit || this.readOnly) {\r\n this.field.ReadOnly = true;\r\n }\r\n else {\r\n const originalField = this.customizationFrameworkService.customDataFields.find(o => o.ID == this.field.ID);\r\n if (!originalField.ReadOnly) {\r\n this.field.ReadOnly = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getValue() {\r\n if (!this.value) {\r\n const dataObj = this.getCustomFieldDataObject();\r\n if (dataObj) {\r\n this.value = this.transformDataType(dataObj.Value);\r\n // this.valueChange.emit(this.value); -- this breaks the unsaved changes guard in Reg/Enroll\r\n }\r\n }\r\n }\r\n\r\n transformDataType(val: any): any {\r\n if (this.field && val) {\r\n if (this.field.DataTypeID == CustomFieldDataTypeEnum.Date || this.field.DataTypeID == CustomFieldDataTypeEnum.Datetime) {\r\n return new Date(val);\r\n }\r\n else if (this.field.DataTypeID == CustomFieldDataTypeEnum.Decimal || this.field.DataTypeID == CustomFieldDataTypeEnum.Integer) {\r\n return Number(val);\r\n }\r\n else {\r\n return val;\r\n }\r\n }\r\n else {\r\n return val;\r\n }\r\n }\r\n\r\n getCustomFieldDataObject(): CustomFieldDataObject {\r\n return this.customizationFrameworkService.getCustomFieldDataObject(this.field, this.masterId, this.dataStore);\r\n }\r\n\r\n persistValue(isDirty: boolean) {\r\n const field = cloneDeep(this.field);\r\n field.Value = this.value;\r\n this.customizationFrameworkService.persistValue(field, !this.readOnly, this.allowControlToHandleOwnData, this.masterId, this.dataStore, isDirty);\r\n }\r\n\r\n valueChangeHandler() {\r\n this.persistValue(true);\r\n this.valueChange.emit(this.value);\r\n this.customizationFrameworkService.customDataFieldValueChanged(this.field);\r\n }\r\n\r\n numberValueChanged(val: number) {\r\n this._value = val;\r\n this.valueChangeHandler();\r\n }\r\n\r\n telephoneValueChanged() {\r\n let value = '';\r\n if (this.telephoneDisplayValue) {\r\n for (let i = 0; i < this.telephoneDisplayValue.length; i++) {\r\n if (this.telephoneDisplayValue[i] && this.telephoneDisplayValue[i] != ' ' && !isNaN(Number(this.telephoneDisplayValue[i]))) {\r\n value += this.telephoneDisplayValue[i];\r\n }\r\n }\r\n }\r\n this._value = value;\r\n this.valueChangeHandler();\r\n }\r\n\r\n retrieveValueFromDB() {\r\n const dataObj = this.getCustomFieldDataObject();\r\n if (dataObj && dataObj.Value != null) {\r\n this.value = this.transformDataType(dataObj.Value);\r\n }\r\n else {\r\n if (this.masterId && this.allowControlToHandleOwnData) {\r\n this.customizationFrameworkService.getCustomDataFieldValue(this.field.ID, this.masterId, this.yearService.defaultYear.SiteYearId).pipe(take(1)).subscribe(val => {\r\n this.value = this.transformDataType(val);\r\n this.persistValue(false);\r\n });\r\n }\r\n }\r\n }\r\n\r\n validate(): ErrorList[] {\r\n return this.customizationFrameworkService.validateCustomField(this.field, this.value, this.control, false, this.ignoreRequired);\r\n }\r\n\r\n // save(): ErrorList[] {\r\n // const errors = this.validate();\r\n // if (errors.length == 0 && !this.field.ReadOnly && this.allowControlToHandleOwnData && !this.persistDataInMemory && this.value != null) {\r\n // this.customizationFrameworkService.updateCustomDataFieldValue(this.field.ID, this.masterId, this.value ? this.value.toString() : '', this.yearService.defaultYear.SiteYearId).pipe(take(1)).subscribe(result => {\r\n // const success = result;\r\n // });\r\n // }\r\n // return errors;\r\n // }\r\n\r\n dateValueChanged(newDate: any | null) {\r\n this.localDateValue = newDate;\r\n if (this.field.ControlTypeID == CustomFieldControlTypeEnum.DateTime) {\r\n this._value = this.concatDateAndTime();\r\n }\r\n else {\r\n this._value = this.localDateValue;\r\n }\r\n this.valueChangeHandler();\r\n }\r\n\r\n timeValueChange(time: string) {\r\n this.localTimeValue = time;\r\n if (this.field.ControlTypeID == CustomFieldControlTypeEnum.DateTime) {\r\n this._value = this.concatDateAndTime();\r\n }\r\n else {\r\n this._value = this.localTimeValue;\r\n }\r\n this.valueChangeHandler();\r\n }\r\n\r\n concatDateAndTime(): Date {\r\n let dt: Date = null;\r\n let time = '0:00';\r\n if (this.localDateValue) {\r\n dt = new Date(this.localDateValue);\r\n if (this.localTimeValue) {\r\n time = this.localTimeValue;\r\n }\r\n if (dt && time) {\r\n const timeParts = time.split(':');\r\n if (timeParts.length == 2) {\r\n let hours = parseInt(timeParts[0].trim(), 10);\r\n let ampm = '';\r\n const minParts = timeParts[1].trim().split(' ');\r\n if (minParts.length > 0) {\r\n const minutes = parseInt(minParts[0].trim(), 10);\r\n if (minParts.length > 1) {\r\n ampm = minParts[1].trim();\r\n }\r\n if (ampm.toLowerCase() == 'pm') {\r\n hours += 12;\r\n }\r\n dt.setHours(hours);\r\n dt.setMinutes(minutes);\r\n }\r\n }\r\n }\r\n }\r\n return dt;\r\n }\r\n\r\n setLocalDateTime() {\r\n if (this.field.ControlTypeID == this.controlTypes.DateTime) {\r\n this.localDateValue = cloneDeep(this.value);\r\n this.localTimeValue = '';\r\n if (this.value) {\r\n let hours = (this.value as Date).getHours();\r\n const minutes = (this.value as Date).getMinutes();\r\n if (hours && minutes) {\r\n let ampm = 'am';\r\n let timeString = '';\r\n if (hours < 10) {\r\n timeString += '0';\r\n }\r\n else if (hours > 12) {\r\n hours = hours - 12;\r\n ampm = 'pm';\r\n }\r\n timeString += hours.toString();\r\n timeString += ':';\r\n if (minutes < 10) {\r\n timeString += '0';\r\n }\r\n timeString += minutes.toString();\r\n timeString += ' ';\r\n timeString += ampm;\r\n this.localTimeValue = timeString;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setTelephoneDisplayValue() {\r\n if (this.field && this.field.DataTypeID == CustomFieldDataTypeEnum.Telephone) {\r\n let displayVal = '';\r\n if (this.value && !isNaN(this.value)) {\r\n let charLimit = 10;\r\n if (this.value.toString().length < 10) {\r\n charLimit = this.value.toString().length;\r\n }\r\n for (let i = 0; i < charLimit; i++) {\r\n if (i == 0) {\r\n displayVal += '(';\r\n }\r\n displayVal += this.value.toString()[i];\r\n if (i == 2) {\r\n displayVal += ')';\r\n }\r\n else if (i == 5) {\r\n displayVal += '-';\r\n }\r\n }\r\n }\r\n this.telephoneDisplayValue = displayVal;\r\n }\r\n }\r\n\r\n getTimeFieldWidth(): string {\r\n let width = '100%';\r\n if (this.showNowButton && this.width && this.width.trim() != '100%') {\r\n const numbersOnly = this.width.match(/\\d+/)[0];\r\n if (numbersOnly && numbersOnly.length > 0) {\r\n width = (Number(numbersOnly) - 47) + 'px';\r\n }\r\n }\r\n return width;\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ContentChildren, QueryList, AfterViewInit, OnDestroy, HostBinding, ContentChild } from '@angular/core';\r\nimport { ThemePalette } from '@angular/material/core';\r\nimport { MatTabHeaderPosition, MatTabChangeEvent, MatTabGroup, MatTab, MatTabHeader } from '@angular/material/tabs';\r\nimport { CustomPageTabComponent } from '../custom-page-tab/custom-page-tab.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { CustomizationFrameworkService } from '../customization-framework.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { EFormControl } from '../../../shared-components/e-forms/e-form-control.model';\r\nimport { CSTField, CustomFieldDataObject } from '../models/custom-data-field.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { cloneDeep } from 'lodash';\r\nimport { CustomDesignPage } from '../../../admin360/customization/models/custom-design-page.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'custom-page-tab-group',\r\n templateUrl: './custom-page-tab-group.component.html',\r\n styleUrls: ['./custom-page-tab-group.component.css']\r\n})\r\nexport class CustomPageTabGroupComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @HostBinding('class') get classes() {\r\n let classes = '';\r\n if (this.isChildTabs) {\r\n classes += 'childTabs';\r\n }\r\n if (!this.showTabs) {\r\n classes += ' hideTabs';\r\n }\r\n return classes;\r\n }\r\n\r\n @Input() animationDuration = '0ms';\r\n @Input() backgroundColor: ThemePalette;\r\n @Input() color: ThemePalette;\r\n @Input() disableRipple: boolean;\r\n @Input() dynamicHeight: boolean;\r\n @Input() headerPosition: MatTabHeaderPosition;\r\n @Input() selectedIndex: number | null;\r\n private _isChildTabs: boolean;\r\n @Input() set isChildTabs(value: boolean) {\r\n this._isChildTabs = value;\r\n }\r\n get isChildTabs(): boolean {\r\n return this._isChildTabs;\r\n }\r\n private _dataStore: CustomFieldDataObject[] = [];\r\n public get dataStore(): CustomFieldDataObject[] {\r\n return this._dataStore;\r\n }\r\n @Input() public set dataStore(value: CustomFieldDataObject[]) {\r\n this._dataStore = value;\r\n if (this.tabs) {\r\n this.tabs.forEach(tab => {\r\n tab.dataStore = value;\r\n });\r\n }\r\n }\r\n\r\n @Output() animationDone: EventEmitter = new EventEmitter();\r\n @Output() focusChange: EventEmitter = new EventEmitter();\r\n @Output() selectedIndexChange: EventEmitter = new EventEmitter();\r\n @Output() selectedTabChange: EventEmitter = new EventEmitter();\r\n @Output() tabChangeErrors: EventEmitter = new EventEmitter();\r\n\r\n private _tabGroup: MatTabGroup;\r\n @ViewChild(MatTabGroup, { static: true })\r\n public set tabGroup(value: MatTabGroup) {\r\n this._tabGroup = value;\r\n this.subscriptions.push(this._tabGroup.selectedTabChange.subscribe(evt => this.handleSelectedTabChange(evt)));\r\n this._tabGroup._handleClick = this.interceptTabChange.bind(this);\r\n }\r\n\r\n public get tabGroup(): MatTabGroup {\r\n return this._tabGroup;\r\n }\r\n\r\n private _tabs: QueryList;\r\n @ContentChildren(CustomPageTabComponent)\r\n protected set tabs(value: QueryList) {\r\n this._tabs = value;\r\n if (this._tabs) {\r\n this.setTabs();\r\n if (this._tabs.length > 1) {\r\n this.showTabs = true;\r\n }\r\n else {\r\n this.showTabs = false;\r\n }\r\n if (this._tabs.length > 0) {\r\n this._tabs.forEach(tab => {\r\n tab.dataStore = this.dataStore;\r\n tab.tabGroupIsGettingMetadata = true;\r\n this.subscriptions.push(tab.isDirtyChange.subscribe(isDirty => {\r\n this.isDirtyChange.emit(isDirty);\r\n }));\r\n });\r\n setTimeout(() => {\r\n this.getMetadata();\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n protected get tabs(): QueryList {\r\n return this._tabs;\r\n }\r\n\r\n public get isDirty(): boolean {\r\n let result = false;\r\n if (this.tabs) {\r\n this.tabs.forEach(tab => {\r\n if (tab.isDirty) {\r\n result = true;\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n @Input() public set isDirty(value: boolean) {\r\n if (this.tabs) {\r\n this.tabs.forEach(tab => {\r\n tab.isDirty = value;\r\n });\r\n }\r\n }\r\n\r\n @Output() isDirtyChange: EventEmitter = new EventEmitter();\r\n\r\n subscriptions: Subscription[] = [];\r\n errors: ErrorList[] = [];\r\n doNotValidate = false;\r\n previousTabIndex = 0;\r\n showTabs = false;\r\n\r\n\r\n constructor(\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private yearService: YearService\r\n ) {\r\n if (!this.dataStore) {\r\n this.dataStore = this.customizationFrameworkService.getNewDataStore();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // this.getMetadata();\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n public ngAfterViewInit() {\r\n\r\n }\r\n\r\n private getMetadata() {\r\n if (this._tabs) {\r\n const designPageEvents: Observable[] = [];\r\n this._tabs.forEach(tab => {\r\n if (!tab.pageComponent && !tab.designPageComponent) {\r\n tab.tabGroupIsGettingMetadata = false;\r\n }\r\n else if (tab.designPageComponent && !tab.designPageComponent.designPage) {\r\n designPageEvents.push(tab.designPageComponent.observabledesignPageStream$);\r\n }\r\n });\r\n if (designPageEvents.length > 0) {\r\n // we need to wait for the design pages to be loaded before we can get the metadata\r\n forkJoin(designPageEvents).pipe(take(1)).subscribe(r => {\r\n this.getMetadata();\r\n });\r\n }\r\n else {\r\n const controls = this.getControlsOnAllTabs();\r\n const fieldNames = controls.map(o => o.CustomFieldName);\r\n if (fieldNames && fieldNames.length > 0) {\r\n if (!this.customizationFrameworkService.customDataFields) {\r\n this.customizationFrameworkService.customDataFields = [];\r\n }\r\n for (let i = fieldNames.length; i >= 0; i--) {\r\n if (this.customizationFrameworkService.customDataFields.find(o => o.FieldName == fieldNames[i])) {\r\n fieldNames.splice(i, 1);\r\n }\r\n }\r\n if (fieldNames.length > 0) {\r\n this.customizationFrameworkService.massGetCustomDataFieldByFieldName(fieldNames, this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).pipe(take(1)).subscribe(fields => {\r\n fields.forEach(f => {\r\n if (this.customizationFrameworkService.customDataFields.find(o => o.ID == f.ID) == null) {\r\n this.customizationFrameworkService.customDataFields.push(f);\r\n }\r\n });\r\n this.customizationFrameworkService.observableFieldMetaDataRetrieved.next(fields);\r\n this.getValues();\r\n });\r\n }\r\n else {\r\n this._tabs.forEach(tab => {\r\n if (tab.tabGroupIsGettingMetadata == true) {\r\n tab.tabGroupIsGettingMetadata = false;\r\n }\r\n });\r\n this.getValues();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getValues() {\r\n const fieldsToGet: CSTField[] = [];\r\n const allControls: EFormControl[] = [];\r\n if (this.tabs) {\r\n this.tabs.forEach(tab => {\r\n let controls: EFormControl[] = [];\r\n if (tab.designPageComponent) {\r\n controls = tab.designPageComponent.getAllCustomFields().filter(o => o.CustomFieldAllowControlToHandleOwnData);\r\n controls.forEach(c => {\r\n c.DesignPageIndex = tab.designPageComponent.designPageIndex;\r\n c.CustomFieldMasterId = tab.designPageComponent.masterId;\r\n });\r\n }\r\n else if (tab.pageComponent) {\r\n controls = tab.pageComponent.getAllCustomFieldControls();\r\n controls.forEach(c => {\r\n c.DesignPageIndex = tab.pageComponent.customPageIndex;\r\n c.CustomFieldMasterId = tab.pageComponent.masterId;\r\n });\r\n }\r\n controls.forEach(o => {\r\n if (o.Editable == null) {\r\n o.Editable = true;\r\n }\r\n const c = allControls.find(x => x.CustomFieldName == o.CustomFieldName);\r\n if (c) {\r\n c.Editable = c.Editable || o.Editable;\r\n c.CustomFieldAllowControlToHandleOwnData = c.CustomFieldAllowControlToHandleOwnData || o.CustomFieldAllowControlToHandleOwnData;\r\n }\r\n else {\r\n allControls.push(o);\r\n }\r\n const field = cloneDeep(this.customizationFrameworkService.customDataFields.find(f => f.FieldName == o.CustomFieldName));\r\n if (field) {\r\n field.MasterId = o.CustomFieldMasterId;\r\n if (o.CustomFieldAllowControlToHandleOwnData && this.customizationFrameworkService.userCanViewField(field, o.Editable, o.CustomFieldAllowControlToHandleOwnData)) {\r\n const dataObj = this.getCustomFieldDataObject(field);\r\n if (dataObj && dataObj.Value != null) {\r\n // we already have stored data, no need to get any\r\n }\r\n else if (o.CustomFieldMasterId > 0) {\r\n fieldsToGet.push(field);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n if (fieldsToGet.length > 0) {\r\n this.customizationFrameworkService.massGetCustomDataFieldValue(this.yearService.defaultYear.SiteYearId, fieldsToGet).pipe(take(1)).subscribe(fields => {\r\n fields.forEach(f => {\r\n const control = allControls.find(o => o.CustomFieldName == f.FieldName);\r\n this.customizationFrameworkService.persistValue(f, control.Editable, control.CustomFieldAllowControlToHandleOwnData, f.MasterId, this.dataStore, false);\r\n });\r\n this.customizationFrameworkService.observableFieldValuesRetrieved.next(fields);\r\n });\r\n }\r\n else {\r\n this.customizationFrameworkService.observableFieldValuesRetrieved.next([]); // tell custom pages they can load their controls\r\n }\r\n }\r\n\r\n getControlsOnAllTabs(): EFormControl[] {\r\n let controls: EFormControl[] = [];\r\n if (this.tabs) {\r\n this.tabs.forEach(tab => {\r\n if (tab.designPageComponent) {\r\n const dpControls = tab.designPageComponent.getAllCustomFields();\r\n dpControls.forEach(c => { c.DesignPageIndex = tab.designPageComponent.designPageIndex; });\r\n controls = controls.concat(dpControls);\r\n }\r\n else if (tab.pageComponent) {\r\n const cpControls = tab.pageComponent.getAllCustomFieldControls();\r\n cpControls.forEach(c => { c.DesignPageIndex = tab.pageComponent.customPageIndex; });\r\n controls = controls.concat(cpControls);\r\n }\r\n });\r\n }\r\n return controls;\r\n }\r\n\r\n getCustomFieldDataObject(field: CSTField): CustomFieldDataObject {\r\n return this.customizationFrameworkService.getCustomFieldDataObject(field, field.MasterId, this.dataStore);\r\n }\r\n\r\n setTabs() {\r\n setTimeout(() => {\r\n const matTabsFromQueryList = this.tabs.map((tab) => tab.matTab);\r\n const list = new QueryList();\r\n list.reset([matTabsFromQueryList]);\r\n this.tabGroup._allTabs = list;\r\n this.tabGroup._tabs = list;\r\n this.tabGroup.ngAfterContentInit();\r\n if (this.tabs && this.tabs.length > 0 && this.tabs.first.pageComponent) {\r\n // if the first tab is a custom page then we need to tell it to load its form.\r\n this.tabs.first.pageComponent.canShowForm = true;\r\n }\r\n }, 0);\r\n }\r\n\r\n interceptTabChange(tab: MatTab, tabHeader: MatTabHeader, idx: number) {\r\n if (!tab.disabled) {\r\n const previousTab = this.tabs.toArray()[this.previousTabIndex];\r\n if (previousTab) {\r\n // const errors = this.validateSinglePage(previousTab.label);\r\n const errors = [];\r\n if (errors.length == 0) {\r\n if (idx >= 0) {\r\n const cstTab = this.tabs.toArray()[idx];\r\n if (cstTab) {\r\n if (cstTab.pageComponent) {\r\n cstTab.pageComponent.canShowForm = true;\r\n }\r\n }\r\n }\r\n if (previousTab.pageComponent) {\r\n previousTab.pageComponent.canShowForm = false;\r\n }\r\n return MatTabGroup.prototype._handleClick.apply(this.tabGroup, arguments);\r\n }\r\n else {\r\n this.tabChangeErrors.emit(errors);\r\n return null;\r\n }\r\n }\r\n else {\r\n if (idx >= 0) {\r\n const cstTab = this.tabs.toArray()[idx];\r\n if (cstTab) {\r\n if (cstTab.pageComponent) {\r\n cstTab.pageComponent.canShowForm = true;\r\n }\r\n }\r\n }\r\n if (previousTab.pageComponent) {\r\n previousTab.pageComponent.canShowForm = false;\r\n }\r\n return MatTabGroup.prototype._handleClick.apply(this.tabGroup, arguments);\r\n }\r\n }\r\n }\r\n\r\n public validateAllPages(): ErrorList[] {\r\n this.errors = [];\r\n this.tabs.forEach(tab => {\r\n let errors: ErrorList[] = [];\r\n if (tab.pageComponent) {\r\n errors = tab.pageComponent.validateControls();\r\n }\r\n else if (tab.designPageComponent) {\r\n errors = tab.designPageComponent.validateControls();\r\n }\r\n if (tab.validateFunction) {\r\n errors = errors.concat(tab.validateFunction());\r\n }\r\n errors.forEach(e => {\r\n e.clickCallback = () => {\r\n this.selectTabByName(tab.label);\r\n };\r\n });\r\n if (!this.tabGroup.selectedIndex || this.tabGroup.selectedIndex < 0 || this.tabs[this.tabGroup.selectedIndex] != tab) {\r\n // these errors are not for the selected tab. Add the tab name to the error\r\n errors.forEach(e => {\r\n e.fieldName = tab.label.toUpperCase() + (e.fieldName ? ' - ' + e.fieldName : '');\r\n });\r\n }\r\n this.errors = this.errors.concat(errors);\r\n });\r\n return this.errors;\r\n }\r\n\r\n public validateSinglePage(tabName: string): ErrorList[] {\r\n let errors: ErrorList[] = [];\r\n const index = this.getTabIndexByName(tabName);\r\n if (index >= 0) {\r\n const tab = this.tabs.toArray()[index];\r\n if (tab.pageComponent) {\r\n errors = tab.pageComponent.validateControls();\r\n }\r\n else if (tab.validateFunction) {\r\n errors = tab.validateFunction();\r\n }\r\n }\r\n return errors;\r\n }\r\n\r\n public saveAllCustomPages(): ErrorList[] {\r\n this.validateAllPages();\r\n if (this.errors.length == 0) {\r\n this.customizationFrameworkService.saveAllCustomFieldsInMemory(this.dataStore);\r\n }\r\n return this.errors;\r\n }\r\n\r\n selectTabByName(tabName: string) {\r\n const i = this.getTabIndexByName(tabName);\r\n this.tabGroup.selectedIndex = this.getTabIndexByName(tabName);\r\n const tab = this.tabs.toArray()[i];\r\n if (tab.pageComponent) {\r\n tab.pageComponent.showErrorsOnInitialize = true;\r\n tab.pageComponent.canShowForm = true;\r\n }\r\n }\r\n\r\n getTabIndexByName(tabName: string): number {\r\n return this.tabGroup._tabs.toArray().findIndex(o => o.textLabel.toUpperCase() == tabName.toUpperCase());\r\n }\r\n\r\n handleSelectedTabChange(evt: MatTabChangeEvent) {\r\n this.selectedTabChange.emit(evt);\r\n this.previousTabIndex = evt.index;\r\n }\r\n\r\n refreshValuesForAllCustomPages() {\r\n this.getValues();\r\n }\r\n\r\n clearStoredData(masterId: number, objectId: number, fieldId: number) {\r\n let i = this.dataStore.length;\r\n while (i--) {\r\n const dataObj = this.dataStore[i];\r\n if ((masterId == null || dataObj.MasterId == masterId)\r\n && (objectId == null || dataObj.ObjectID == objectId)\r\n && (fieldId == null || dataObj.CustomFieldID == fieldId)) {\r\n this.dataStore.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n updateMasterIDForPersistedData(objectId: number, newMasterId: number, oldMasterId?: number) {\r\n this.dataStore.forEach(f => {\r\n if (f.ObjectID == objectId && (oldMasterId == null || f.MasterId == oldMasterId)) {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.ID == f.CustomFieldID && o.ObjectID == objectId);\r\n if (field) {\r\n f.MasterId = newMasterId;\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","\r\n \r\n\r\n","\r\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../shared-components/e-forms/e-form-config.model';\r\nimport { CSTCustomPage } from '../models/cst-custom-page.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { EFormViewerComponent } from '../../../shared-components/e-forms/e-form-viewer/e-form-viewer.component';\r\nimport { CustomizationFrameworkService } from '../customization-framework.service';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { EFormDataObject } from '../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { EFormControl } from '../../../shared-components/e-forms/e-form-control.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { CSTField, CustomFieldDataObject } from '../models/custom-data-field.model';\r\nimport * as _ from 'lodash';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'custom-page-viewer',\r\n templateUrl: './custom-page-viewer.component.html',\r\n styleUrls: ['./custom-page-viewer.component.css']\r\n})\r\nexport class CustomPageViewerComponent implements OnInit, OnDestroy {\r\n\r\n subscriptions: Subscription[] = [];\r\n validationTriggerSubscription: Subscription;\r\n saveTriggerSubscription: Subscription;\r\n config: EFormConfiguration = new EFormConfiguration();\r\n customPageIndex: number;\r\n showViewer = false;\r\n initialized = false;\r\n showErrorsOnInitialize = false;\r\n dataInitialized = false;\r\n\r\n private _canShowForm: boolean;\r\n public get canShowForm(): boolean {\r\n return this._canShowForm;\r\n }\r\n public set canShowForm(value: boolean) {\r\n this._canShowForm = value;\r\n if (value == true && this.initialized) {\r\n this.loadViewer();\r\n this.showViewer = value;\r\n }\r\n else if (value == false) {\r\n this.showViewer = false;\r\n }\r\n }\r\n\r\n private _customPage: CSTCustomPage;\r\n get customPage(): CSTCustomPage {\r\n return this._customPage;\r\n }\r\n\r\n @Input() set customPage(value: CSTCustomPage) {\r\n this._customPage = value;\r\n if (this.initialized) {\r\n this.loadViewer();\r\n }\r\n }\r\n\r\n // this is the identifying information used to get/set the data (studentID, FamilyID, etc)\r\n private _masterId: number;\r\n get masterId(): number {\r\n return this._masterId;\r\n }\r\n @Input() set masterId(value: number) {\r\n this._masterId = value;\r\n }\r\n\r\n\r\n @Input() hideTitle = false;\r\n @Input() set validationTrigger(trigger: EventEmitter) {\r\n if (this.validationTriggerSubscription) {\r\n const subIndex = this.subscriptions.indexOf(this.validationTriggerSubscription);\r\n if (subIndex > -1) {\r\n this.subscriptions.splice(subIndex, 1);\r\n }\r\n this.validationTriggerSubscription.unsubscribe();\r\n }\r\n this.validationTriggerSubscription = trigger.subscribe(o => {\r\n const errors = this.validateControls();\r\n this.validationErrors.emit(errors);\r\n });\r\n this.subscriptions.push(this.validationTriggerSubscription);\r\n }\r\n\r\n private _readOnly: boolean;\r\n public get readOnly(): boolean {\r\n return this._readOnly;\r\n }\r\n @Input() public set readOnly(value: boolean) {\r\n this._readOnly = value;\r\n if (this.config) {\r\n this.config.ReadOnly = value;\r\n }\r\n if (this.eFormViewer && !value) {\r\n this.eFormViewer.editable = false;\r\n }\r\n }\r\n\r\n @Output() validationErrors: EventEmitter = new EventEmitter();\r\n\r\n private _isDirty: boolean;\r\n public get isDirty(): boolean {\r\n return this._isDirty;\r\n }\r\n @Input() public set isDirty(value: boolean) {\r\n this._isDirty = value;\r\n }\r\n @Output() isDirtyChange: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild(EFormViewerComponent) eFormViewer: EFormViewerComponent;\r\n\r\n private _dataStore: CustomFieldDataObject[] = [];\r\n public get dataStore(): CustomFieldDataObject[] {\r\n return this._dataStore;\r\n }\r\n @Input() public set dataStore(value: CustomFieldDataObject[]) {\r\n this._dataStore = value;\r\n if (this.config) {\r\n this.config.CFDataStore = value;\r\n }\r\n }\r\n\r\n constructor(\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private eFormService: EFormService,\r\n private yearService: YearService\r\n ) {\r\n this.customPageIndex = this.customizationFrameworkService.designPageIndexIncrementor;\r\n this.customizationFrameworkService.designPageIndexIncrementor++;\r\n const x = this.masterId;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.canShowForm) {\r\n this.loadViewer();\r\n }\r\n\r\n this.subscriptions.push(this.yearService.observableDefaultYearStream$.subscribe(o => {\r\n this.getControlValues();\r\n }));\r\n\r\n this.subscriptions.push(this.customizationFrameworkService.observableFieldValuesRetrievedStream$.subscribe(fields => {\r\n this.getControlValues(fields);\r\n }));\r\n\r\n this.eFormService.observableControlValueChangedStream$.subscribe(c => {\r\n if (c.DesignPageIndex == this.customPageIndex && this.initialized && this.dataInitialized) {\r\n this.isDirty = true;\r\n this.isDirtyChange.emit(true);\r\n }\r\n });\r\n this.initialized = true;\r\n }\r\n\r\n loadViewer() {\r\n if (this.customPage) {\r\n this.config.Title = this.customPage.Name;\r\n this.config.UseInstance = false;\r\n this.config.ShowSubmittedBy = false;\r\n this.config.ViewMode = enmEFormViewModes.CustomPage;\r\n this.config.HideTitle = this.hideTitle;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.ReadOnly = this.readOnly;\r\n this.config.CFDataStore = this.dataStore;\r\n // switch (this.customPage.ObjectName.toLowerCase()) {\r\n // case 'student':\r\n // this.config.PageObjectType = PageObjectTypes.Student;\r\n // break;\r\n // case 'staff':\r\n // this.config.PageObjectType = PageObjectTypes.Staff;\r\n // break;\r\n // case 'other':\r\n // this.config.PageObjectType = PageObjectTypes.Other;\r\n // break;\r\n // }\r\n this.setFormData();\r\n }\r\n }\r\n\r\n setFormData() {\r\n this.customizationFrameworkService.reconcileChangesToCustomPage(this.customPage).pipe(take(1)).subscribe(formData => {\r\n this.customPage.FormData = JSON.stringify(formData);\r\n this.customPage.LocalVersion = this.customPage.SystemVersion;\r\n this.eFormService.selectedFormData = formData;\r\n });\r\n }\r\n\r\n getAllCustomFieldControls(): EFormControl[] {\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(this.customPage.FormData);\r\n } catch (err) {\r\n formData = new EFormDataObject();\r\n }\r\n\r\n const controls = this.eFormService.getAllFormControls(formData).filter(c => c.CustomField && c.CustomFieldName);\r\n return controls;\r\n }\r\n\r\n getControlValues(fields: CSTField[] = null): EFormControl[] {\r\n this.isDirty = false;\r\n this.dataInitialized = false; // prevents isDirty flag when initializing new data.\r\n let controls: EFormControl[] = [];\r\n if (this.eFormViewer) {\r\n controls = this.eFormViewer.getAllCustomFields(this.customPageIndex);\r\n }\r\n else {\r\n controls = this.getAllCustomFieldControls();\r\n }\r\n const fieldsToGet: CSTField[] = [];\r\n controls.forEach(controlToUpdate => {\r\n controlToUpdate.CustomFieldMasterId = this.masterId;\r\n const field = _.cloneDeep(this.customizationFrameworkService.customDataFields.find(f => f.FieldName == controlToUpdate.CustomFieldName));\r\n if (controlToUpdate.CustomFieldAllowControlToHandleOwnData && field && this.customizationFrameworkService.userCanViewField(field, controlToUpdate.Editable, controlToUpdate.CustomFieldAllowControlToHandleOwnData)) {\r\n const dataObj = this.getCustomFieldDataObject(field);\r\n if (dataObj && dataObj.Value != null) {\r\n field.Value = dataObj.Value;\r\n if (controlToUpdate) {\r\n controlToUpdate.Value = dataObj.Value;\r\n }\r\n }\r\n else if (this.masterId > 0 && fields) {\r\n const fieldWithValue = fields.find(f => controlToUpdate.CustomFieldName == f.FieldName && f.MasterId == this.masterId);\r\n if (fieldWithValue) {\r\n controlToUpdate.Value = fieldWithValue.Value;\r\n this.persistValue(field, controlToUpdate);\r\n }\r\n }\r\n else {\r\n controlToUpdate.Value = null;\r\n }\r\n }\r\n });\r\n setTimeout(() => {\r\n this.dataInitialized = true;\r\n }, 0);\r\n return controls;\r\n }\r\n\r\n getCustomFieldDataObject(field: CSTField): CustomFieldDataObject {\r\n return this.customizationFrameworkService.getCustomFieldDataObject(field, this.masterId, this.dataStore);\r\n }\r\n\r\n persistValue(field: CSTField, control: EFormControl) {\r\n this.customizationFrameworkService.persistValue(field, control.Editable, control.CustomFieldAllowControlToHandleOwnData, this.masterId, this.dataStore, false);\r\n }\r\n\r\n validateControls(): ErrorList[] {\r\n let errors: ErrorList[] = [];\r\n let controls: EFormControl[] = [];\r\n\r\n if (this.eFormViewer) {\r\n this.eFormViewer.validateButton.nativeElement.click();\r\n controls = this.eFormViewer.getAllCustomFields(this.customPageIndex);\r\n\r\n controls.forEach(c => {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == c.CustomFieldName);\r\n if (this.customizationFrameworkService.userCanEditField(field, c.Editable && !this.readOnly, c.CustomFieldAllowControlToHandleOwnData)) {\r\n errors = errors.concat(c.validateFunction());\r\n }\r\n });\r\n }\r\n else {\r\n controls = this.getControlValues();\r\n controls.forEach(c => {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == c.CustomFieldName);\r\n if (this.customizationFrameworkService.userCanEditField(field, c.Editable && !this.readOnly, c.CustomFieldAllowControlToHandleOwnData)) {\r\n errors = errors.concat(this.customizationFrameworkService.validateCustomField(field, c.Value, null, c.IsRequired));\r\n }\r\n });\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n ngOnDestroy() {\r\n const controlsToRemove: EFormControl[] = this.eFormService.allCustomFieldControls.filter(control => control.DesignPageIndex == this.customPageIndex);\r\n\r\n controlsToRemove.forEach(controlToRemove => {\r\n let index: number = this.eFormService.allCustomFieldControls.findIndex(control => control.Id == controlToRemove.Id);\r\n if (index > -1) {\r\n this.eFormService.allCustomFieldControls.splice(index, 1);\r\n }\r\n\r\n index = this.eFormService.allFormControls.findIndex(control => control.Id == controlToRemove.Id);\r\n if (index > -1) {\r\n this.eFormService.allFormControls.splice(index, 1);\r\n }\r\n });\r\n }\r\n\r\n renderCompleted() {\r\n if (this.showErrorsOnInitialize) {\r\n this.showErrorsOnInitialize = false;\r\n this.eFormViewer.validateButton.nativeElement.click();\r\n }\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n\r\n \r\n\r\n","import { Component, OnInit, ViewChild, Input, EventEmitter, Output, ContentChild, OnDestroy } from '@angular/core';\r\nimport { MatTab } from '@angular/material/tabs';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { CSTCustomPage } from '../models/cst-custom-page.model';\r\nimport { CustomPageViewerComponent } from '../custom-page-viewer/custom-page-viewer.component';\r\nimport { DesignPageViewerComponent } from '../design-page-viewer/design-page-viewer.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { CustomFieldDataObject } from '../models/custom-data-field.model';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'custom-page-tab',\r\n templateUrl: './custom-page-tab.component.html',\r\n styleUrls: ['./custom-page-tab.component.css']\r\n})\r\nexport class CustomPageTabComponent implements OnInit, OnDestroy {\r\n\r\n subscriptions: Subscription[] = [];\r\n @ViewChild(MatTab, { static: true })\r\n public matTab: MatTab;\r\n\r\n private _pageComponent: CustomPageViewerComponent;\r\n @ViewChild(CustomPageViewerComponent, { static: false})\r\n public set pageComponent(page: CustomPageViewerComponent) {\r\n this._pageComponent = page;\r\n if (page) {\r\n page.dataStore = this.dataStore;\r\n page.isDirtyChange.subscribe(isDirty => {\r\n this.isDirty = isDirty;\r\n });\r\n }\r\n }\r\n public get pageComponent(): CustomPageViewerComponent {\r\n return this._pageComponent;\r\n }\r\n\r\n _designPageComponent: DesignPageViewerComponent;\r\n @ContentChild(DesignPageViewerComponent)\r\n public set designPageComponent(page: DesignPageViewerComponent) {\r\n this._designPageComponent = page;\r\n if (page) {\r\n page.dataStore = this.dataStore;\r\n if (this.tabGroupIsGettingMetadata) {\r\n page.tabGroupIsGettingMetadata = this.tabGroupIsGettingMetadata;\r\n }\r\n page.isDirtyChange.subscribe(val => {\r\n this._isDirty = val;\r\n if (val == true) {\r\n this.isDirtyChange.emit(true);\r\n }\r\n });\r\n }\r\n }\r\n public get designPageComponent(): DesignPageViewerComponent {\r\n return this._designPageComponent;\r\n }\r\n\r\n private _label: string;\r\n @Input() set label(value: string) {\r\n if (value) {\r\n this._label = value;\r\n }\r\n else {\r\n this._label = '';\r\n }\r\n }\r\n get label(): string {\r\n return this._label;\r\n }\r\n @Input() disabled: boolean;\r\n @Input() customPage: CSTCustomPage;\r\n private _masterId: number;\r\n get masterId(): number {\r\n return this._masterId;\r\n }\r\n @Input() set masterId(value: number) {\r\n this._masterId = value;\r\n }\r\n @Input() hideTitle = false;\r\n @Input() readOnly: boolean;\r\n @Input() validateFunction: () => ErrorList[];\r\n\r\n private _tabGroupIsGettingMetadata: boolean;\r\n public get tabGroupIsGettingMetadata(): boolean {\r\n return this._tabGroupIsGettingMetadata;\r\n }\r\n public set tabGroupIsGettingMetadata(value: boolean) {\r\n this._tabGroupIsGettingMetadata = value;\r\n if (this.designPageComponent) {\r\n this.designPageComponent.tabGroupIsGettingMetadata = value;\r\n }\r\n }\r\n\r\n private _isDirty: boolean;\r\n public get isDirty(): boolean {\r\n return this._isDirty;\r\n }\r\n public set isDirty(value: boolean) {\r\n this._isDirty = value;\r\n if (this.designPageComponent) {\r\n this.designPageComponent.isDirty = value;\r\n }\r\n if (value == true) {\r\n this.isDirtyChange.emit(value);\r\n }\r\n }\r\n\r\n private _dataStore: CustomFieldDataObject[] = [];\r\n public get dataStore(): CustomFieldDataObject[] {\r\n return this._dataStore;\r\n }\r\n public set dataStore(value: CustomFieldDataObject[]) {\r\n this._dataStore = value;\r\n if (this.pageComponent) {\r\n this.pageComponent.dataStore = value;\r\n }\r\n else if (this.designPageComponent) {\r\n this.designPageComponent.dataStore = value;\r\n }\r\n }\r\n\r\n @Output() isDirtyChange: EventEmitter = new EventEmitter();\r\n\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n}\r\n","/* eslint-disable camelcase */\r\nimport { ElementRef, Injectable } from '@angular/core';\r\nimport { CSTField, CustomFieldDataObject } from './models/custom-data-field.model';\r\nimport { Observable, Subject, BehaviorSubject, of } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../../shared-components/System';\r\nimport { CustomFieldDataType, CustomFieldDataTypeEnum } from './models/custom-data-field-type.model';\r\nimport { CustomFieldControlType } from './models/custom-data-control-type.model';\r\nimport { CustomDataModule } from './models/custom-data-module.model';\r\nimport { CustomDataObject } from './models/custom-data-object.model';\r\nimport { DataDefinitionList, DataDefinition } from '../../admin360/data-definition/data-definition.model';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { CSTCustomPage } from './models/cst-custom-page.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { EFormDataObject } from '../../shared-components/e-forms/e-formDataObject.model';\r\nimport { EFormService } from '../../shared-components/e-forms/e-form.service';\r\nimport { EFormControl } from '../../shared-components/e-forms/e-form-control.model';\r\nimport { EFormRow } from '../../shared-components/e-forms/e-form-row.model';\r\nimport { CustomDesignPage } from '../../admin360/customization/models/custom-design-page.model';\r\nimport * as _ from 'lodash';\r\nimport { CSTImportResults } from './models/cst-import-results.model';\r\nimport { LoginService } from '../login/login.service';\r\nimport { EForm } from '../../shared-components/e-forms/e-form.model';\r\n\r\n@Injectable()\r\nexport class CustomizationFrameworkService {\r\n\r\n customDataFields: CSTField[] = [];\r\n dataTypes: CustomFieldDataType[] = [];\r\n controlTypes: CustomFieldControlType[] = [];\r\n modules: CustomDataModule[] = [];\r\n objects: CustomDataObject[] = [];\r\n designPageIndexIncrementor = 1;\r\n basePageOnly = false;\r\n dataDefinitionLists: DataDefinitionList[] = [];\r\n dataDefinitionListValues: { [enum_value: string]: DataDefinition[] } = {};\r\n dataDefSubjects: { [enum_value: string]: Subject } = {};\r\n dataDefListSubjects: { [enum_value: string]: Subject } = {};\r\n dataStores: { [index: number]: CustomFieldDataObject[] } = {};\r\n\r\n public observablesBasePageOnly = new Subject();\r\n observablesBasePageOnlyStream$ = this.observablesBasePageOnly.asObservable();\r\n\r\n public observableCustomDataFieldValueChanged = new Subject();\r\n observableCustomDataFieldValueChangedStream$ = this.observableCustomDataFieldValueChanged.asObservable();\r\n\r\n public observableFieldMetaDataRetrieved = new Subject();\r\n observableobservableFieldMetaDataRetrievedStream$ = this.observableFieldMetaDataRetrieved.asObservable();\r\n\r\n public observableFieldValuesRetrieved = new Subject();\r\n observableFieldValuesRetrievedStream$ = this.observableFieldValuesRetrieved.asObservable();\r\n\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private sharedService: SharedService,\r\n private yearService: YearService,\r\n private securityService: SecurityService,\r\n private eFormService: EFormService,\r\n private loginService: LoginService\r\n ) {\r\n this.sharedService.observableClearStoredCustomFieldDataStream$.subscribe(o => this.clearAllStoredCustomFieldData());\r\n }\r\n\r\n updateBasePageOnly(basePageOnly: boolean) {\r\n this.basePageOnly = basePageOnly;\r\n this.observablesBasePageOnly.next(basePageOnly);\r\n }\r\n\r\n customDataFieldValueChanged(field: CSTField) {\r\n this.observableCustomDataFieldValueChanged.next(field);\r\n }\r\n\r\n getCustomDataFields(yearId: number, siteYearId: number): Observable {\r\n const queryString = '?yearId=' + yearId\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomDataFields' + queryString);\r\n }\r\n\r\n getCustomDataFieldByID(fieldID: number): Observable {\r\n const queryString = '?fieldID=' + fieldID;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomDataFieldByID' + queryString);\r\n }\r\n\r\n getCustomDataFieldByFieldName(fieldName: string): Observable {\r\n const queryString = '?fieldName=' + fieldName;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomDataFieldByFieldName' + queryString);\r\n }\r\n\r\n getCustomFieldDataTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetCustomFieldDataTypes');\r\n }\r\n\r\n getCustomFieldControlTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetCustomFieldControlTypes');\r\n }\r\n\r\n getCustomDataFieldsByObjectID(objectID: number): Observable {\r\n return this.sharedService.getCustomDataFieldsByObjectID(objectID);\r\n }\r\n\r\n getCustomDataFieldValue(fieldID: number, masterId: number, siteYearId: number): Observable {\r\n const queryString = '?fieldID=' + fieldID\r\n + '&masterId=' + masterId\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomDataFieldValue' + queryString);\r\n }\r\n\r\n updateCustomDataFieldValue(fieldID: number, masterId: number, textValue: string, siteYearId: number): Observable {\r\n const queryString = '?fieldID=' + fieldID\r\n + '&masterId=' + masterId\r\n + '&textValue=' + textValue\r\n + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Admin + 'UpdateCustomDataFieldValue' + queryString);\r\n }\r\n\r\n getCSTModules(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetCSTModules');\r\n }\r\n\r\n getCSTObjects(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetCSTObjects');\r\n }\r\n\r\n getDataDefinitionList(yearId: number, siteId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.Admin + 'GetDataDefinitionList' + queryString);\r\n }\r\n\r\n getDataDefinitionListsWithCodes(yearId: number, siteYearId: number, masterId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&siteYearId=' + siteYearId +\r\n '&masterId=' + masterId;\r\n return this.http.get(System.apiURL.Admin + 'GetDataDefinitionListsWithCodes' + queryString);\r\n }\r\n\r\n getDataDefinitionListByEnum(\r\n enum_value: string,\r\n yearId = this.yearService.defaultYear.Id,\r\n siteYearId = this.yearService.defaultYear.SiteYearId,\r\n masterId: number = null\r\n ): Observable {\r\n let dataDefList: DataDefinitionList;\r\n // check if we have cached the data def list\r\n if (this.dataDefinitionLists) {\r\n dataDefList = this.dataDefinitionLists.find(o => o.Enum == enum_value);\r\n }\r\n if (dataDefList) { // we have cached this list\r\n // check if we have also cached the data def list options\r\n if (this.dataDefinitionListValues && this.dataDefinitionListValues[enum_value] && this.dataDefinitionListValues[enum_value].filter(o => o.YearId == yearId && o.SiteYearId == siteYearId && o.MasterId == masterId).length > 0) {\r\n // we have cached the data def list options.\r\n dataDefList.DataDefinitions = this.dataDefinitionListValues[enum_value].filter(o => o.YearId == yearId && o.SiteYearId == siteYearId && o.MasterId == masterId);\r\n return of(dataDefList);\r\n }\r\n else {\r\n // we have not cached the data def list options. We need to look them up.\r\n return this.getDataDefinition(enum_value, yearId, siteYearId, masterId).pipe(take(1)).pipe(map(dataDefs => {\r\n dataDefList.DataDefinitions = dataDefs;\r\n if (!this.dataDefinitionListValues[enum_value]) {\r\n this.dataDefinitionListValues[enum_value] = [];\r\n }\r\n if (dataDefs) {\r\n dataDefs.forEach(dd => {\r\n if (!this.dataDefinitionListValues[enum_value].find(o => o.Id == dd.Id)) {\r\n this.dataDefinitionListValues[enum_value].push(dd); // cache them for future use\r\n }\r\n });\r\n }\r\n return dataDefList;\r\n }));\r\n }\r\n }\r\n else {\r\n // we have not cached the list. This call could be made multiple times if the same data def is used multiple times on the same page. We will make a single\r\n // API call and use that same call for all subscriptions\r\n let sub = this.dataDefListSubjects[enum_value];\r\n if (!sub) {\r\n sub = new Subject();\r\n this.dataDefListSubjects[enum_value] = sub;\r\n const queryString = '?enum_value=' + enum_value +\r\n '&yearId=' + yearId +\r\n '&siteYearId=' + siteYearId +\r\n '&masterId=' + masterId;\r\n const obs = this.http.get(System.apiURL.Admin + 'GetDataDefinitionListByEnum' + queryString);\r\n obs.pipe(take(1)).subscribe(o => {\r\n sub.next(o);\r\n // cache the data\r\n if (o) {\r\n this.dataDefinitionLists.push(o);\r\n if (o.DataDefinitions) {\r\n if (!this.dataDefinitionListValues[enum_value]) {\r\n this.dataDefinitionListValues[enum_value] = [];\r\n }\r\n this.dataDefinitionListValues[enum_value].concat(o.DataDefinitions);\r\n }\r\n }\r\n this.dataDefListSubjects[enum_value] = null;\r\n });\r\n }\r\n return sub.asObservable().pipe(take(1));\r\n }\r\n }\r\n\r\n getDataDefinition(\r\n enum_value: string,\r\n yearId = this.yearService.defaultYear.Id,\r\n siteYearId = this.yearService.defaultYear.SiteYearId,\r\n masterId: number = null\r\n ): Observable {\r\n let dataDefListValues: DataDefinition[];\r\n // check if we have cached the data def list\r\n if (this.dataDefinitionListValues && this.dataDefinitionListValues[enum_value]) {\r\n dataDefListValues = this.dataDefinitionListValues[enum_value].filter(o => o.YearId == yearId && o.SiteYearId == siteYearId && o.MasterId == masterId);\r\n }\r\n if (dataDefListValues && dataDefListValues.length > 0) { // we have cached this list\r\n return of(dataDefListValues);\r\n }\r\n else {\r\n // we have not cached the list. This call could be made multiple times if the same data def is used multiple times on the same page. We will make a single\r\n // API call and use that same call for all subscriptions\r\n let bh = this.dataDefSubjects[enum_value];\r\n if (!bh) {\r\n bh = new Subject();\r\n this.dataDefSubjects[enum_value] = bh;\r\n let queryString = '';\r\n queryString += '?enum_value=' + enum_value +\r\n '&yearId=' + yearId +\r\n '&siteYearId=' + siteYearId +\r\n '&masterId=' + masterId;\r\n const obs = this.http.get(System.apiURL.Admin + 'GetDataDefinition' + queryString);\r\n obs.pipe(take(1)).subscribe(o => {\r\n bh.next(o);\r\n if (o) {\r\n if (!this.dataDefinitionListValues[enum_value]) {\r\n this.dataDefinitionListValues[enum_value] = [];\r\n }\r\n this.dataDefinitionListValues[enum_value].concat(o); // cache the data\r\n }\r\n this.dataDefSubjects[enum_value] = null;\r\n });\r\n }\r\n return bh.asObservable().pipe(take(1));\r\n }\r\n }\r\n\r\n importCustomFieldsFromClassic(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'ImportCustomFieldsFromClassic');\r\n }\r\n\r\n checkClassicFieldsForDuplicateNames(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'CheckClassicFieldsForDuplicateNames');\r\n }\r\n\r\n getCustomPagesByModuleObject(moduleId: number, objectId: number, siteYearId: number, area?: string): Observable {\r\n const queryString = '?moduleId=' + moduleId +\r\n '&objectId=' + objectId +\r\n '&siteYearId=' + siteYearId +\r\n '&area=' + area;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomPagesByModuleObject' + queryString);\r\n }\r\n\r\n massGetCustomDataFieldByFieldName(fieldNames: string[], yearId: number, siteId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&siteId=' + siteId;\r\n return this.http.post(System.apiURL.Admin + 'MassGetCustomDataFieldByFieldName' + queryString, fieldNames);\r\n }\r\n\r\n massGetCustomDataFieldValue(siteYearId: number, fields: CSTField[]): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Admin + 'MassGetCustomDataFieldValue' + queryString, fields);\r\n }\r\n\r\n massUpdateCustomDataFieldValue(siteYearId: number, fields: CSTField[]): Observable {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Admin + 'MassUpdateCustomDataFieldValues' + queryString, fields);\r\n }\r\n\r\n getDesignPageByIDs(basePageOnly: boolean = false, pageIDs: number[] = [], includeAllUserPagesForID: boolean = false): Observable {\r\n const queryString = '?basePageOnly=' + basePageOnly +\r\n '&includeAllUserPagesForID=' + includeAllUserPagesForID;\r\n return this.http.post(System.apiURL.Admin + 'GetDesignPageByIDs' + queryString, pageIDs);\r\n }\r\n\r\n validateCustomField(field: CSTField, value: string, fieldRef: ElementRef = null, isRequiredOverride: boolean = false, ignoreRequired: boolean = false): ErrorList[] {\r\n const errors: ErrorList[] = [];\r\n if (!field.ReadOnly || ((field.IsRequired || isRequiredOverride) && !ignoreRequired)) {\r\n if ((field.IsRequired || isRequiredOverride) && (value === null || value === undefined || value === '') && !ignoreRequired) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n let val = 0;\r\n if (value) {\r\n if (field.DataTypeID == CustomFieldDataTypeEnum.AlphaNumeric && !field.IsDataDef) {\r\n val = value.length;\r\n if (field.StartRange > 0 && val < field.StartRange) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be at least ' + field.StartRange + 'characters long.'\r\n });\r\n }\r\n if (field.EndRange > 0 && val > field.EndRange) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must not exceed ' + field.EndRange + 'characters in length.'\r\n });\r\n }\r\n }\r\n else if (field.DataTypeID == CustomFieldDataTypeEnum.Integer || field.DataTypeID == CustomFieldDataTypeEnum.Decimal) {\r\n if (!isNaN(Number(value))) {\r\n val = +value;\r\n }\r\n if (field.StartRange > 0 && val < field.StartRange) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be greather than or equal to ' + field.StartRange + '.'\r\n });\r\n }\r\n if (field.EndRange > 0 && val > field.EndRange) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be less than or equal to ' + field.EndRange + '.'\r\n });\r\n }\r\n if (field.DataTypeID == CustomFieldDataTypeEnum.Integer && (isNaN(Number(value)) || parseInt(Number(value).toString(), 10) != Number(value) || isNaN(parseInt(value, 10)))) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be a whole number.'\r\n });\r\n }\r\n if (field.DataTypeID == CustomFieldDataTypeEnum.Decimal) {\r\n if (isNaN(Number(value))) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be a valid number.'\r\n });\r\n }\r\n else if (field.DecimalPrecision >= 0) {\r\n let digitsAfterDecimal = 0;\r\n const numberParts = value.toString().split('.');\r\n if (numberParts.length > 1) {\r\n digitsAfterDecimal = numberParts[1].length;\r\n }\r\n if (digitsAfterDecimal > field.DecimalPrecision) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'only allows ' + field.DecimalPrecision + ' digits after the decimal.'\r\n });\r\n }\r\n }\r\n }\r\n }\r\n else if (field.DataTypeID == CustomFieldDataTypeEnum.Telephone) {\r\n // if (!telephoneDisplayvalue.match(System.phoneRegexp)) {\r\n if (value.length != 10) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'Invalid phone number.'\r\n });\r\n }\r\n }\r\n else if (field.DataTypeID == CustomFieldDataTypeEnum.Email) {\r\n if (!value.match(System.mailRegexp)) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'Invalid email address.'\r\n });\r\n }\r\n }\r\n else if (field.DataTypeID == CustomFieldDataTypeEnum.Time && !(value === null || value === undefined || value === '' || value == 'Invalid date')) {\r\n if (!value.match(System.twelveHourTimeRegexp)) {\r\n errors.push({\r\n fieldName: field.DisplayName,\r\n fieldRef: fieldRef,\r\n errorMsg: 'must be in time format, hh:mm [AM|PM].'\r\n });\r\n }\r\n }\r\n }\r\n\r\n }\r\n return errors;\r\n }\r\n\r\n validateAllCustomFieldsInMemory(dataStore: CustomFieldDataObject[]): ErrorList[] {\r\n let errors: ErrorList[] = [];\r\n dataStore.forEach(f => {\r\n if (f.UserCanEdit) {\r\n const field = this.customDataFields.find(o => o.ID == f.CustomFieldID);\r\n errors = errors.concat(this.validateCustomField(field, f.Value));\r\n }\r\n });\r\n return errors;\r\n }\r\n\r\n // //// ***IMPORTANT*** ////\r\n // saveAllCustomFields should always be called from the tab group rather than the customizationFrameworkService unless absolutely necessary\r\n // For example this.tabGroup.saveAllCustomPages();\r\n // instead of this.customizationFrameworkService.saveAllCustomFieldsInMemory();\r\n // ///////////////////////////\r\n saveAllCustomFieldsInMemory(dataStore: CustomFieldDataObject[]): ErrorList[] {\r\n const errors = this.validateAllCustomFieldsInMemory(dataStore);\r\n if (errors.length == 0) {\r\n const fieldsToSave: CSTField[] = [];\r\n dataStore.filter(o => o.MasterId > 0 && o.Value != null && o.SiteYearId == this.yearService.defaultYear.SiteYearId && o.UserCanEdit && o.IsDirty).forEach(c => {\r\n const field = this.customDataFields.find(o => o.ID == c.CustomFieldID);\r\n const f = _.cloneDeep(field);\r\n f.Value = c.Value;\r\n f.MasterId = c.MasterId;\r\n fieldsToSave.push(f);\r\n });\r\n if (fieldsToSave.length > 0) {\r\n this.massUpdateCustomDataFieldValue(this.yearService.defaultYear.SiteYearId, fieldsToSave).pipe(take(1)).subscribe(o => { });\r\n }\r\n }\r\n return errors;\r\n }\r\n\r\n clearAllStoredCustomFieldData() {\r\n this.dataStores = {};\r\n }\r\n\r\n removeCustomFieldDataObject(dataStore: CustomFieldDataObject[], obj: CustomFieldDataObject) {\r\n const i = dataStore.findIndex(o => o.CustomFieldID == obj.CustomFieldID && o.MasterId == obj.MasterId && o.ObjectID == obj.ObjectID && o.SiteYearId == obj.SiteYearId);\r\n if (i >= 0) {\r\n dataStore = dataStore.splice(i, 1);\r\n }\r\n }\r\n\r\n clearStoredCustomFieldDataByObject(dataStore: CustomFieldDataObject[], objectId: number, masterId: number) {\r\n dataStore = dataStore.filter(o => o.ObjectID != objectId || (o.ObjectID == objectId && masterId != null && o.MasterId != masterId));\r\n }\r\n\r\n\r\n // //// ***IMPORTANT*** ////\r\n // updateMasterIDForPersistedData should always be called from the custom page tab group rather than the customizationFrameworkService unless absolutely necessary\r\n // For example this.tabGroup.updateMasterIDForPersistedData(householdContactObjectId, parent1.Id, -1);\r\n // instead of this.customizationFrameworkService.updateMasterIDForPersistedData(householdContactObjectId, parent1.Id, -1);\r\n // ///////////////////////////\r\n updateMasterIDForPersistedData(dataStore: CustomFieldDataObject[], objectId: number, newMasterId: number, oldMasterId?: number) {\r\n dataStore.forEach(f => {\r\n const field = this.customDataFields.find(o => o.ID == f.CustomFieldID && o.ObjectID == objectId && (oldMasterId == null || f.MasterId == oldMasterId));\r\n if (field) {\r\n f.MasterId = newMasterId;\r\n }\r\n });\r\n }\r\n\r\n userCanViewField(field: CSTField, editable: boolean, handleOwnData: boolean): boolean {\r\n let userCanView = false;\r\n if (field && field.Active) {\r\n userCanView = this.userCanEditField(field, editable, handleOwnData)\r\n || !field.IsSecured\r\n || field.IsRequired\r\n || this.securityService.IsAllPermissionCodeAssigned('CST_VAUF')\r\n || this.securityService.IsAnyPermissionGroupAssigned(...field.ViewPermissionGroupIDs);\r\n }\r\n return userCanView;\r\n }\r\n\r\n userCanEditField(field: CSTField, editable: boolean, handleOwnData: boolean): boolean {\r\n let userCanEdit = false;\r\n if (field && field.Active && editable && !field.ReadOnly\r\n && (!handleOwnData || (handleOwnData && (!field.IsProcedureBased || field.WriteSPName)))\r\n ) {\r\n userCanEdit = !field.IsSecured\r\n || this.securityService.IsAllPermissionCodeAssigned('CST_MAUF')\r\n || this.securityService.IsAllPermissionCodeAssigned('CST_MACP')\r\n || this.securityService.IsAnyPermissionGroupAssigned(...field.ModifyPermissionGroupIDS);\r\n }\r\n return userCanEdit;\r\n }\r\n\r\n getCustomPageSystemTemplateByID(pageId: number): Observable {\r\n const queryString = '?pageId=' + pageId;\r\n return this.http.get(System.apiURL.Admin + 'GetCustomPageSystemTemplateByID' + queryString);\r\n }\r\n\r\n reconcileChangesToCustomPage(customPage: CSTCustomPage): Observable {\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(customPage.FormData);\r\n\r\n // need to reconcile any changes to the system version of this page to the local version\r\n if (customPage && customPage.IsSysGen && customPage.LocalVersion != customPage.SystemVersion) {\r\n return this.getCustomPageSystemTemplateByID(customPage.ID).pipe(map(systemPage => {\r\n let systemFormData = new EFormDataObject();\r\n try {\r\n systemFormData = JSON.parse(systemPage.FormData);\r\n } catch (err) {\r\n systemFormData = new EFormDataObject();\r\n }\r\n return this.compareSystemPageToLocalPage(systemFormData, formData);\r\n }));\r\n }\r\n else {\r\n return of(formData);\r\n }\r\n\r\n\r\n } catch (err) {\r\n formData = new EFormDataObject();\r\n return of(formData);\r\n }\r\n }\r\n\r\n reconcileChangesToDesignPage(designPage: CustomDesignPage): Observable {\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(designPage.FormData);\r\n\r\n // need to reconcile any changes to the system version of this page to the local version\r\n if (designPage && designPage.Version != designPage.BaseVersion) {\r\n return this.getDesignPageByIDs(true, [designPage.ID], false).pipe(map(systemPages => {\r\n const systemPage = systemPages.find(o => o.BasePage);\r\n let systemFormData = new EFormDataObject();\r\n try {\r\n systemFormData = JSON.parse(systemPage.FormData);\r\n } catch (err) {\r\n systemFormData = new EFormDataObject();\r\n }\r\n return this.compareSystemPageToLocalPage(systemFormData, formData);\r\n }));\r\n }\r\n else {\r\n return of(formData);\r\n }\r\n\r\n\r\n } catch (err) {\r\n formData = new EFormDataObject();\r\n return of(formData);\r\n }\r\n }\r\n\r\n compareSystemPageToLocalPage(systemFormData: EFormDataObject, localFormData: EFormDataObject): EFormDataObject {\r\n const systemPageControls = this.eFormService.getAllFormControls(systemFormData);\r\n const localPageControls = this.eFormService.getAllFormControls(localFormData);\r\n const newSystemControls: EFormControl[] = [];\r\n systemPageControls.forEach(sysControl => {\r\n if (sysControl.CustomField && sysControl.CustomFieldName && !localPageControls.find(o => o.CustomFieldName == sysControl.CustomFieldName)) {\r\n newSystemControls.push(sysControl);\r\n }\r\n });\r\n if (newSystemControls.length > 0 && localFormData && localFormData.Tabs.length > 0 && localFormData.Tabs[0].Pages.length > 0 && localFormData.Tabs[0].Pages[0].Columns.length > 0) {\r\n const col = localFormData.Tabs[0].Pages[0].Columns[0];\r\n if (col.Rows.length > 0) {\r\n newSystemControls.forEach(c => {\r\n const newRow = new EFormRow();\r\n newRow.Controls = [];\r\n newRow.Controls.push(c);\r\n col.Rows.push(newRow);\r\n });\r\n }\r\n else {\r\n newSystemControls.forEach(c => {\r\n col.Controls.push(c);\r\n });\r\n }\r\n }\r\n return localFormData;\r\n }\r\n\r\n getLinkedCustomFields(formData: EFormDataObject, eForm: EForm): Observable {\r\n const newValues: CSTField[] = [];\r\n if (this.loginService.LoginSettings.EnableCustomizationFramework && this.loginService.LoginSettings.C360CustomFieldsImported && eForm.TemplateType == 'student') {\r\n const controls = this.eFormService.getAllFormControls(formData);\r\n const fieldNames = controls.filter(o => o.LinkedCSTFieldName).map(o => o.LinkedCSTFieldName);\r\n return this.massGetCustomDataFieldByFieldName(fieldNames, this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).pipe(take(1)).pipe(map(fields => {\r\n controls.forEach(control => {\r\n if (control.LinkedCSTFieldName) {\r\n const dbField = fields.find(o => o.FieldName == control.LinkedCSTFieldName);\r\n if (dbField) {\r\n if (control.Value) {\r\n dbField.Value = control.Value.toString();\r\n }\r\n dbField.MasterId = eForm.Student_ID;\r\n newValues.push(dbField);\r\n }\r\n }\r\n });\r\n return newValues;\r\n }));\r\n\r\n }\r\n return of(newValues);\r\n }\r\n\r\n persistValue(field: CSTField, editableOverride: boolean, allowControlToHandleOwnData: boolean, masterId: number, dataStore: CustomFieldDataObject[], isDirty: boolean) {\r\n if (this.userCanViewField(field, editableOverride, allowControlToHandleOwnData)) {\r\n let dataObj = this.getCustomFieldDataObject(field, masterId, dataStore);\r\n if (!dataObj) {\r\n dataObj = new CustomFieldDataObject();\r\n dataObj.CustomFieldID = field.ID;\r\n dataObj.MasterId = masterId;\r\n dataObj.SiteYearId = this.yearService.defaultYear.SiteYearId;\r\n dataObj.Value = field.Value;\r\n dataObj.ObjectID = field.ObjectID;\r\n dataObj.UserCanEdit = this.userCanEditField(field, editableOverride, allowControlToHandleOwnData);\r\n dataObj.IsDirty = !!isDirty;\r\n if (dataStore) {\r\n dataStore.push(dataObj);\r\n }\r\n }\r\n else {\r\n dataObj.Value = field.Value;\r\n dataObj.IsDirty = isDirty || dataObj.IsDirty;\r\n dataObj.UserCanEdit = dataObj.IsDirty || this.userCanEditField(field, editableOverride, allowControlToHandleOwnData);\r\n }\r\n }\r\n }\r\n\r\n getCustomFieldDataObject(field: CSTField, masterId: number, dataStore: CustomFieldDataObject[]): CustomFieldDataObject {\r\n if (dataStore) {\r\n return dataStore.find(o => o.CustomFieldID == field.ID && o.MasterId == masterId && o.SiteYearId == this.yearService.defaultYear.SiteYearId);\r\n }\r\n return null;\r\n }\r\n\r\n getNewDataStore(): CustomFieldDataObject[] {\r\n const dataSource: CustomFieldDataObject[] = [];\r\n let nextIndex = 0;\r\n if (Object.keys(this.dataStores).length > 0) {\r\n nextIndex = Math.max.apply(null, Object.keys(this.dataStores));\r\n }\r\n this.dataStores[nextIndex] = dataSource;\r\n return dataSource;\r\n }\r\n\r\n}","

{{pageTitle}}

\r\n{{subtitle}}\r\n\r\n \r\n\r\n\r\n \r\n \r\n","import { Component, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport { CustomizationService } from '../../../../admin360/customization/customization.service';\r\nimport { ViewDesignPagesComponent } from '../view-design-pages.component';\r\n\r\n@Component({\r\n selector: 'app-view-design-pages-modal',\r\n templateUrl: './view-design-pages-modal.component.html',\r\n styleUrls: ['./view-design-pages-modal.component.css']\r\n})\r\nexport class ViewDesignPagesModalComponent implements OnInit {\r\n\r\n designPageId: number;\r\n pageTitle = 'Design Pages';\r\n subtitle = '';\r\n designPageUpdated = false;\r\n @ViewChild(ViewDesignPagesComponent, { static: true }) viewDesignPagesComponent: ViewDesignPagesComponent;\r\n\r\n public get showAddButton(): boolean {\r\n let showButton = false;\r\n if (this.viewDesignPagesComponent) {\r\n showButton = this.viewDesignPagesComponent.userCanEdit && this.viewDesignPagesComponent.allowViewEdit\r\n }\r\n return showButton;\r\n }\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private customizationService: CustomizationService\r\n ) {\r\n if (data) {\r\n this.designPageId = data.designPageId;\r\n this.pageTitle = data.pageTitle;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getSubTitle();\r\n }\r\n\r\n getSubTitle() {\r\n this.customizationService.getDesignPageByIDs(true, [this.designPageId], false).pipe(take(1)).subscribe(pages => {\r\n if (pages && pages.length > 0) {\r\n const p = pages[0];\r\n this.subtitle = p.ModuleName + ': ' + p.ObjectName + ' - ' + p.Name;\r\n } \r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close(this.designPageUpdated);\r\n }\r\n\r\n designPageUpdatedHandler() {\r\n this.designPageUpdated = true;\r\n }\r\n\r\n addClick() {\r\n if (this.viewDesignPagesComponent) {\r\n this.viewDesignPagesComponent.addVersion();\r\n }\r\n }\r\n\r\n}\r\n","\r\n\r\n \r\n","import { Component, OnInit, ViewChild, Input, Output, EventEmitter, OnChanges, OnDestroy } from '@angular/core';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { enmEFormViewModes, EFormConfiguration, PageObjectTypes } from '../../../shared-components/e-forms/e-form-config.model';\r\nimport { EFormControl } from '../../../shared-components/e-forms/e-form-control.model';\r\nimport { CustomDesignPage } from '../../../admin360/customization/models/custom-design-page.model';\r\nimport { EFormViewerComponent } from '../../../shared-components/e-forms/e-form-viewer/e-form-viewer.component';\r\nimport { CustomizationService } from '../../../admin360/customization/customization.service';\r\nimport { CustomizationFrameworkService } from '../customization-framework.service';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { CustomDataTemplateRef } from '../models/custom-data-template-ref.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { CSTField, CustomFieldDataObject } from '../models/custom-data-field.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { ViewDesignPagesModalComponent } from '../view-design-pages/view-design-pages-modal/view-design-pages-modal.component';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { EFormDataObject } from '../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { cloneDeep } from 'lodash';\r\n\r\n\r\n@Component({\r\n selector: 'app-design-page-viewer',\r\n templateUrl: './design-page-viewer.component.html',\r\n styleUrls: ['./design-page-viewer.component.css']\r\n})\r\nexport class DesignPageViewerComponent implements OnInit, OnDestroy {\r\n\r\n private subscriptions: Subscription[] = [];\r\n validationTriggerSubscription: Subscription;\r\n config: EFormConfiguration = new EFormConfiguration();\r\n designPageIndex: number;\r\n showViewer = false;\r\n userCanEditPage = false;\r\n tabGroupIsGettingMetadata = false;\r\n userControlsInitialized = false;\r\n systemControlsInitialized = false;\r\n\r\n private _designPage: CustomDesignPage;\r\n public observabledesignPage = new Subject();\r\n observabledesignPageStream$ = this.observabledesignPage.asObservable();\r\n public get designPage(): CustomDesignPage {\r\n return this._designPage;\r\n }\r\n public set designPage(value: CustomDesignPage) {\r\n this._designPage = value;\r\n this.observabledesignPage.next(value);\r\n this.observabledesignPage.complete();\r\n }\r\n\r\n private _dataValues: any[] = [];\r\n private _contentTemplates: CustomDataTemplateRef[];\r\n\r\n // custom templates defined in the parent component. You should always use the built-in custom fields when possible, but if you\r\n // need special functionality that the e-Form Designer does not support, you can define your own templates to inject into the form\r\n @Input() set contentTemplates(contentTemplates: CustomDataTemplateRef[]) {\r\n this._contentTemplates = contentTemplates;\r\n this.updateContentTemplates();\r\n }\r\n\r\n get contentTemplates(): CustomDataTemplateRef[] {\r\n return this._contentTemplates;\r\n }\r\n\r\n // This is the data that will be used to look up and store data for custom fields on this page.\r\n @Input() masterId: number;\r\n @Input() hideTitle = false;\r\n\r\n // this object contains the data for the default fields on this design page.\r\n // two-way binding is used to maintain data between the design page and the parnt component.\r\n @Input() set dataValues(object: any) {\r\n this._dataValues = object;\r\n this.updateDataValues();\r\n }\r\n\r\n get dataValues(): any {\r\n return this._dataValues;\r\n }\r\n\r\n @Input() ignoreRequiredFields: boolean;\r\n\r\n @Output() dataValuesChange: EventEmitter = new EventEmitter();\r\n @Output() valueChange: EventEmitter = new EventEmitter(); // emits when any value is changed on the page\r\n @Output() pageLoaded: EventEmitter = new EventEmitter(); // emits once the page has finished loading\r\n @Output() validationErrors: EventEmitter = new EventEmitter(); // emits errors found during validation\r\n @Output() eFormViewerInitialized = new EventEmitter(); // emits when the e-Form Viewer has loaded\r\n @Output() templateChanged = new EventEmitter(); // emits when a user edits the template or selects a different version of this design page.\r\n @Output() pageRetrieved = new Subject(); // emits when the design page has been retreived from the DB.\r\n @Input() set validationTrigger(trigger: EventEmitter) { // triggers validation on the page\r\n if (this.validationTriggerSubscription) {\r\n const subIndex = this.subscriptions.indexOf(this.validationTriggerSubscription);\r\n if (subIndex > -1) {\r\n this.subscriptions.splice(subIndex, 1);\r\n }\r\n this.validationTriggerSubscription.unsubscribe();\r\n }\r\n this.validationTriggerSubscription = trigger.subscribe(o => {\r\n const errors = this.validateControls();\r\n this.validationErrors.emit(errors);\r\n });\r\n this.subscriptions.push(this.validationTriggerSubscription);\r\n }\r\n\r\n @Input() designPageID: number; // CST_DesignPages.ID\r\n @Input() set manualDataUpdateTrigger(trigger) { // allows the parent page to force the design page to refresh data values\r\n this.updateDataValues();\r\n }\r\n\r\n private _readOnly: boolean;\r\n public get readOnly(): boolean {\r\n return this._readOnly;\r\n }\r\n @Input() public set readOnly(value: boolean) { // forces page into read-only mode\r\n this._readOnly = value;\r\n if (this.config) {\r\n this.config.ReadOnly = value;\r\n }\r\n if (this.eFormViewer && !value) {\r\n this.eFormViewer.editable = false;\r\n }\r\n }\r\n\r\n private _isDirty: boolean;\r\n public get isDirty(): boolean {\r\n return this._isDirty;\r\n }\r\n @Input() public set isDirty(value: boolean) { // sets dirty flag for page\r\n this._isDirty = value;\r\n }\r\n @Output() isDirtyChange: EventEmitter = new EventEmitter();\r\n\r\n private _eFormViewer: EFormViewerComponent;\r\n @ViewChild(EFormViewerComponent, {static: false}) set eFormViewer(eFormViewer: EFormViewerComponent) {\r\n this._eFormViewer = eFormViewer;\r\n if (eFormViewer) {\r\n this.getCustomDataFieldMetaData();\r\n }\r\n }\r\n get eFormViewer(): EFormViewerComponent {\r\n return this._eFormViewer;\r\n }\r\n\r\n @ViewChild(EFormViewerComponent) set content(content: EFormViewerComponent) {\r\n this.eFormViewer = content;\r\n this.updateDataValues();\r\n }\r\n\r\n metadataRetrieved = false;\r\n private _dataStore: CustomFieldDataObject[] = [];\r\n public get dataStore(): CustomFieldDataObject[] {\r\n return this._dataStore;\r\n }\r\n @Input() public set dataStore(value: CustomFieldDataObject[]) {\r\n this._dataStore = value;\r\n if (this.config) {\r\n this.config.CFDataStore = value;\r\n }\r\n }\r\n\r\n constructor(\r\n private customizationService: CustomizationService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private eFormService: EFormService,\r\n private yearService: YearService,\r\n private dialog: MatDialog,\r\n private securitService: SecurityService,\r\n private loginService: LoginService\r\n ) {\r\n this.designPageIndex = this.customizationFrameworkService.designPageIndexIncrementor;\r\n this.customizationFrameworkService.designPageIndexIncrementor++;\r\n this.eFormService.observableControlValueChangedStream$.subscribe(c => {\r\n if (c.DesignPageIndex == this.designPageIndex) {\r\n if (this.userControlsInitialized && this.systemControlsInitialized) {\r\n this.isDirty = true;\r\n this.isDirtyChange.emit(true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.getDesignPages();\r\n\r\n this.subscriptions.push(this.customizationFrameworkService.observablesBasePageOnly.subscribe(o => {\r\n this.getDesignPages();\r\n }));\r\n\r\n this.config.HideTitle = this.hideTitle;\r\n this.config.ReadOnly = this.readOnly;\r\n this.userCanEditPage = this.securitService.IsAllPermissionCodeAssigned('SUI_MDP') && this.loginService.LoginSettings.EnableCustomizationFramework;\r\n\r\n this.subscriptions.push(this.yearService.observableDefaultYearStream$.subscribe(o => {\r\n this.getControlValues();\r\n }));\r\n\r\n this.subscriptions.push(this.customizationFrameworkService.observableFieldValuesRetrievedStream$.subscribe(fields => {\r\n this.getControlValues(fields);\r\n }));\r\n\r\n this.subscriptions.push(this.customizationFrameworkService.observableobservableFieldMetaDataRetrievedStream$.subscribe(o => {\r\n if (this.tabGroupIsGettingMetadata) {\r\n this.tabGroupIsGettingMetadata = false;\r\n if (!this.metadataRetrieved) {\r\n this.getCustomDataFieldMetaData();\r\n }\r\n }\r\n }));\r\n }\r\n\r\n private getDesignPages() {\r\n this.showViewer = false;\r\n this.subscriptions.push(this.customizationService.getDesignPageByIDs(this.customizationFrameworkService.basePageOnly, [this.designPageID]).subscribe(pages => {\r\n if (pages && pages.length == 1) {\r\n this.designPage = pages[0];\r\n this.loadViewer();\r\n }\r\n }));\r\n }\r\n\r\n updateDataValues() {\r\n if (this.eFormViewer && this._dataValues) {\r\n setTimeout(() => {\r\n this.systemControlsInitialized = false;\r\n const controls = this.eFormViewer.getAllCustomFields(this.designPageIndex);\r\n\r\n controls.forEach(control => {\r\n if (control.CustomFieldRefName && control.CustomField && control.CustomFieldName && !control.CustomFieldAllowControlToHandleOwnData) {\r\n if (this._dataValues.hasOwnProperty(control.CustomFieldRefName)) {\r\n control.Value = this._dataValues[control.CustomFieldRefName];\r\n }\r\n else {\r\n control.Value = null;\r\n }\r\n this.eFormService.controlValueChanged(control);\r\n }\r\n });\r\n this.systemControlsInitialized = true;\r\n }, 0);\r\n }\r\n }\r\n\r\n updateContentTemplates() {\r\n if (!this.eFormService.contentTemplates) {\r\n this.eFormService.contentTemplates = [];\r\n }\r\n\r\n this._contentTemplates.forEach(template => {\r\n if (this.designPageIndex) {\r\n template.DesignPageIndex = this.designPageIndex;\r\n this.eFormService.contentTemplates.push(template);\r\n }\r\n });\r\n }\r\n\r\n valueChanged(refName: string) {\r\n const control: EFormControl = this.getControlByRefName(refName);\r\n if (control) {\r\n if (!this.dataValues) {\r\n this.dataValues = {};\r\n }\r\n this.dataValues[control.CustomFieldRefName] = control.Value;\r\n this.valueChange.emit();\r\n this.dataValuesChange.emit(this.dataValues);\r\n }\r\n }\r\n\r\n renderCompleted() {\r\n this.pageLoaded.emit(true);\r\n }\r\n\r\n loadViewer() {\r\n this.config.Title = this.designPage.Name;\r\n this.config.UseInstance = false;\r\n this.config.ShowSubmittedBy = false;\r\n this.config.ViewMode = enmEFormViewModes.Page;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.IgnoreRequiredFields = this.ignoreRequiredFields;\r\n this.config.CFDataStore = this.dataStore;\r\n switch (this.designPage.ObjectName.toLowerCase()) {\r\n case 'student':\r\n this.config.PageObjectType = PageObjectTypes.Student;\r\n break;\r\n case 'staff':\r\n this.config.PageObjectType = PageObjectTypes.Staff;\r\n break;\r\n case 'other':\r\n this.config.PageObjectType = PageObjectTypes.Other;\r\n break;\r\n }\r\n this.setFormData();\r\n }\r\n\r\n setFormData() {\r\n this.customizationFrameworkService.reconcileChangesToDesignPage(this.designPage).pipe(take(1)).subscribe(formData => {\r\n this.designPage.FormData = JSON.stringify(formData);\r\n this.designPage.Version = this.designPage.BaseVersion;\r\n this.eFormService.selectedFormData = formData;\r\n this.showViewer = true;\r\n });\r\n }\r\n\r\n getAllCustomFields(): EFormControl[] {\r\n if (this.eFormViewer) {\r\n return this.eFormViewer.getAllCustomFields(this.designPageIndex);\r\n }\r\n else {\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(this.designPage.FormData);\r\n } catch (err) {\r\n formData = new EFormDataObject();\r\n }\r\n\r\n const controls = this.eFormService.getAllFormControls(formData).filter(c => c.CustomField && c.CustomFieldName);\r\n return controls;\r\n }\r\n }\r\n\r\n getValueByRefName(refName: string): any {\r\n let value: any;\r\n\r\n const control: EFormControl = this.eFormViewer.getCustomFieldByRefName(refName, this.designPageIndex);\r\n\r\n if (control) {\r\n value = control.Value;\r\n }\r\n return value;\r\n }\r\n\r\n getControlByRefName(refName: string): EFormControl {\r\n return this.eFormViewer ? this.eFormViewer.getCustomFieldByRefName(refName, this.designPageIndex) : null;\r\n }\r\n\r\n setValueByRefName(value: any, refName: string) {\r\n this.eFormViewer.setCustomFieldByRefName(value, refName, this.designPageIndex);\r\n }\r\n\r\n setEditableByRefName(refName: string, editable: boolean) {\r\n const control = this.getControlByRefName(refName);\r\n\r\n if (control) {\r\n control.Editable = editable;\r\n this.eFormService.observableReadOnlyStatusChanged.next(control);\r\n }\r\n }\r\n\r\n validateControls(): ErrorList[] {\r\n this.eFormViewer.validateButton.nativeElement.click();\r\n let errors: ErrorList[] = [];\r\n\r\n const controls: EFormControl[] = this.getAllCustomFields();\r\n\r\n controls.forEach(c => {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == c.CustomFieldName);\r\n if (this.customizationFrameworkService.userCanEditField(field, c.Editable && !this.readOnly, c.CustomFieldAllowControlToHandleOwnData)) {\r\n errors = errors.concat(c.validateFunction());\r\n }\r\n });\r\n\r\n return errors;\r\n }\r\n\r\n initializedEFormViewerEvent() {\r\n this.eFormViewerInitialized.emit(true);\r\n }\r\n\r\n ngOnDestroy() {\r\n const controlsToRemove: EFormControl[] = this.eFormService.allCustomFieldControls.filter(control => control.DesignPageIndex == this.designPageIndex);\r\n const otherControlsToRemove: EFormControl[] = this.eFormService.allFormControls.filter(control => control.DesignPageIndex == this.designPageIndex);\r\n\r\n controlsToRemove.forEach(controlToRemove => {\r\n let index: number = this.eFormService.allCustomFieldControls.findIndex(control => control.Id == controlToRemove.Id);\r\n if (index > -1) {\r\n this.eFormService.allCustomFieldControls.splice(index, 1);\r\n }\r\n\r\n index = this.eFormService.allFormControls.findIndex(control => control.Id == controlToRemove.Id);\r\n if (index > -1) {\r\n this.eFormService.allFormControls.splice(index, 1);\r\n }\r\n });\r\n\r\n if (this.eFormService.contentTemplates) {\r\n const templatesToRemove: CustomDataTemplateRef[] = this.eFormService.contentTemplates.filter(template => template.DesignPageIndex == this.designPageIndex || !template.DesignPageIndex);\r\n \r\n templatesToRemove.forEach(templateToRemove => {\r\n const index: number = this.eFormService.contentTemplates.findIndex(template => template.RefName == templateToRemove.RefName);\r\n if (index > -1) {\r\n this.eFormService.contentTemplates.splice(index, 1);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getControlValues(fields: CSTField[] = null): EFormControl[] {\r\n this.isDirty = false;\r\n this.userControlsInitialized = false;\r\n let controls: EFormControl[] = [];\r\n // we only get controls that the user has added to the page (control handles own data)\r\n controls = this.getAllCustomFields().filter(o => o.CustomFieldAllowControlToHandleOwnData);\r\n controls.forEach(controlToUpdate => {\r\n controlToUpdate.CustomFieldMasterId = this.masterId;\r\n const field = cloneDeep(this.customizationFrameworkService.customDataFields.find(f => f.FieldName == controlToUpdate.CustomFieldName));\r\n if (controlToUpdate.CustomFieldAllowControlToHandleOwnData && field && this.customizationFrameworkService.userCanViewField(field, controlToUpdate.Editable, controlToUpdate.CustomFieldAllowControlToHandleOwnData)) {\r\n const dataObj = this.getCustomFieldDataObject(field);\r\n if (dataObj && dataObj.Value != null) {\r\n field.Value = dataObj.Value;\r\n if (controlToUpdate) {\r\n controlToUpdate.Value = dataObj.Value;\r\n }\r\n }\r\n else if (this.masterId > 0 && fields && fields.find(f => controlToUpdate.CustomFieldName == f.FieldName && f.MasterId == this.masterId)) {\r\n const fieldWithValue = fields.find(f => controlToUpdate.CustomFieldName == f.FieldName && f.MasterId == this.masterId);\r\n if (fieldWithValue) {\r\n controlToUpdate.Value = fieldWithValue.Value;\r\n this.persistValue(field, controlToUpdate);\r\n }\r\n }\r\n else {\r\n controlToUpdate.Value = null;\r\n }\r\n }\r\n });\r\n setTimeout(() => {\r\n this.userControlsInitialized = true;\r\n }, 0);\r\n return controls;\r\n}\r\n\r\n getCustomFieldDataObject(field: CSTField): CustomFieldDataObject {\r\n return this.customizationFrameworkService.getCustomFieldDataObject(field, this.masterId, this.dataStore);\r\n }\r\n\r\n persistValue(field: CSTField, control: EFormControl) {\r\n this.customizationFrameworkService.persistValue(field, control.Editable, control.CustomFieldAllowControlToHandleOwnData, this.masterId, this.dataStore, false);\r\n }\r\n\r\n getCustomDataFieldMetaData() {\r\n if (!this.metadataRetrieved && !this.tabGroupIsGettingMetadata) {\r\n this.metadataRetrieved = true;\r\n const fieldNames: string[] = [];\r\n const controls = this.getAllCustomFields();\r\n controls.forEach(c => {\r\n const field = this.customizationFrameworkService.customDataFields.find(o => o.FieldName == c.CustomFieldName);\r\n if (!field && c.CustomFieldName) {\r\n fieldNames.push(c.CustomFieldName);\r\n }\r\n });\r\n if (fieldNames.length > 0) {\r\n this.customizationFrameworkService.massGetCustomDataFieldByFieldName(fieldNames, this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).pipe(take(1)).subscribe(fields => {\r\n fields.forEach(f => {\r\n if (!this.customizationFrameworkService.customDataFields.find(o => o.FieldName == f.FieldName)) {\r\n this.customizationFrameworkService.customDataFields.push(f);\r\n }\r\n if (f.IsDataDef && f.DataDef) {\r\n if (!this.customizationFrameworkService.dataDefinitionLists.find(o => o.Enum == f.DataDef.Enum)) {\r\n this.customizationFrameworkService.dataDefinitionLists.push(f.DataDef);\r\n }\r\n f.DataDef.DataDefinitions.forEach(dd => {\r\n dd.YearId = this.yearService.defaultYear.Id;\r\n dd.SiteYearId = this.yearService.defaultYear.SiteYearId;\r\n });\r\n this.customizationFrameworkService.dataDefinitionListValues[f.DataDef.Enum] = f.DataDef.DataDefinitions;\r\n }\r\n });\r\n this.customizationFrameworkService.observableFieldMetaDataRetrieved.next();\r\n this.getControlValues();\r\n });\r\n }\r\n else {\r\n this.getControlValues();\r\n }\r\n }\r\n }\r\n\r\n editPageClick() {\r\n this.subscriptions.push(this.customizationService.getDesignPageByIDs(false, [this.designPageID], true).subscribe(pages => {\r\n const pageTitle = 'Design Page';\r\n const dialogRef = this.dialog.open(ViewDesignPagesModalComponent, {\r\n height: '90vh',\r\n maxHeight: '90vh',\r\n width: '80vw',\r\n maxWidth: '80vw',\r\n disableClose: true,\r\n data: { designPageId: this.designPageID, pageTitle: pageTitle}\r\n });\r\n dialogRef.afterClosed().subscribe((isTemplateChanged: boolean) => {\r\n if (isTemplateChanged) {\r\n this.templateChanged.emit(true);\r\n this.getDesignPages();\r\n }\r\n });\r\n }));\r\n }\r\n}\r\n","export interface CustomFieldControlType {\r\n ID: number;\r\n Description: string;\r\n }\r\n\r\n export enum CustomFieldControlTypeEnum {\r\n Textbox = 1,\r\n Image = 2,\r\n Buttons = 3,\r\n RadioButtons = 4,\r\n MultiLineTextbox = 5,\r\n Date = 6,\r\n Checkbox = 7,\r\n Dropdown = 8,\r\n Time = 9,\r\n DateTime = 10,\r\n Text = 11,\r\n Component = 12 // TODO\r\n}","export interface CustomFieldDataType {\r\n ID: number;\r\n Description: string;\r\n Format: string;\r\n }\r\n\r\nexport enum CustomFieldDataTypeEnum {\r\n AlphaNumeric = 1,\r\n Decimal = 3,\r\n Date = 4,\r\n Telephone = 5,\r\n // LunchPin = 6,\r\n // ID = 7,\r\n // StateID = 8,\r\n // SSN = 9,\r\n // GradeLevel = 10,\r\n Email = 11,\r\n Integer = 12,\r\n Datetime = 13,\r\n Time = 14,\r\n YesNo = 15\r\n}","\r\nimport { DataDefinition, DataDefinitionList } from '../../../admin360/data-definition/data-definition.model';\r\n\r\n export class CSTField {\r\n ID: number;\r\n ObjectID: number;\r\n FieldName: string;\r\n DisplayName: string;\r\n ExternalControlDataID: number;\r\n Description: string;\r\n DynamicPagesDataFiledsID: number;\r\n DynamicPagesDataFieldName: string;\r\n IsSysGen: boolean;\r\n FieldLength: number;\r\n StartRange: number;\r\n EndRange: number;\r\n DecimalPrecision: number;\r\n IsRequired: boolean;\r\n IsDataDef: boolean;\r\n LookupENUM: string;\r\n DataTypeID: number;\r\n ControlTypeID: number;\r\n ReadOnly: boolean;\r\n Active = true;\r\n IsFieldTracked: boolean;\r\n RequireNoGaps: boolean;\r\n AllowMultipleSelections: boolean;\r\n HeightInRows: number;\r\n IsSecured = false;\r\n PermissionCategory: string;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpdatedOn: Date;\r\n LastUpdatedBy: number;\r\n DelStatus: boolean;\r\n ExternalDataDescription: string;\r\n ReadSPName: string;\r\n WriteSPName: string;\r\n ValueColumnName: string;\r\n DisplayColumnName: string;\r\n ParentFieldID: number;\r\n UsedForStateReporting: boolean;\r\n DataDef: DataDefinitionList;\r\n TextFormat: string;\r\n Value: string;\r\n IsProcedureBased: boolean;\r\n MasterId: number;\r\n ViewPermissionGroupIDs: number[];\r\n ModifyPermissionGroupIDS: number[];\r\n StateReportingFieldMetaDataID: number;\r\n UseDataDefCode: boolean;\r\n\r\n // client properties\r\n PageIndex: number;\r\n }\r\n\r\n export class CustomFieldDataObject {\r\n CustomFieldID: number;\r\n MasterId: number;\r\n SiteYearId: number;\r\n Value: string;\r\n ObjectID: number;\r\n UserCanEdit: boolean;\r\n IsDirty: boolean;\r\n }","export interface CustomDataModule {\r\n ID: number;\r\n Name: string;\r\n }\r\n\r\nexport enum enmCSTModuleNames {\r\n HouseholdRegistration = 2,\r\n Staff = 3,\r\n StudentHealth = 4,\r\n Courses = 5,\r\n Behavior = 6\r\n}","import { CustomDataObjectArea } from './custom-data-object-area.model';\r\n\r\nexport interface CustomDataObject {\r\n ID: number;\r\n ModuleIDs: number[];\r\n Name: string;\r\n ObjectTypeID: number;\r\n ObjectAreas: CustomDataObjectArea[];\r\n IsValidForCustomPages: boolean;\r\n }\r\n\r\n export enum enmCustomDataObjects {\r\n Student = 4,\r\n Household = 7,\r\n HouseholdContact = 8,\r\n NonresidentParent = 9,\r\n EmergencyContact = 10,\r\n Enrollment = 11,\r\n FacultyStaff = 13,\r\n StudentByYear = 14,\r\n StaffHealthCondition = 15,\r\n StaffHealthVisit = 16,\r\n StaffAttendance = 17,\r\n StudentHealthPractitioner = 18,\r\n StudentHealthCondition = 19,\r\n StudentHealthPregnancy = 20,\r\n StudentHealthVisit = 21,\r\n StudentHealthRestriction = 22,\r\n StudentHealthInsurance = 23,\r\n StateReportingByYear = 24,\r\n StudentHealthDose = 25,\r\n StudentHealthHearingScreenings = 26,\r\n DistrictCourses = 28,\r\n StudentHealthSpinalScreenings = 30,\r\n StudentHealthPhysicalScreenings = 31,\r\n StudentHealthDentalScreenings = 32,\r\n StudentHealthVisionScreenings = 33,\r\n Sections = 34,\r\n SchoolCourses = 37,\r\n StudentHealthMedication = 38,\r\n Address = 39,\r\n UserLogin = 40,\r\n StateReporting = 41,\r\n BehaviorEvents = 42,\r\n BehaviorIncidents = 43,\r\n BehaviorActions = 44,\r\n BehaviorReferrals = 45\r\n}","import { TemplateRef } from \"@angular/core\";\r\n\r\nexport class CustomDataTemplateRef {\r\n RefName: String;\r\n TemplateRef: TemplateRef;\r\n DesignPageIndex: number;\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { CustomDesignPage } from '../../../admin360/customization/models/custom-design-page.model';\r\n\r\n@Pipe({\r\n name: 'cstUserDesignPagesByID'\r\n})\r\nexport class CstUserDesignPagesByIDPipe implements PipeTransform {\r\n\r\n transform(designPageId: number, designPages: CustomDesignPage[]): CustomDesignPage[] {\r\n return designPages.filter(p => !p.BasePage && p.DesignPageID == designPageId);\r\n }\r\n\r\n}\r\n","

\r\n Edit Description\r\n Add New Version\r\n Duplicate Version\r\n

\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, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { CustomDesignPage } from '../../models/custom-design-page.model';\r\n\r\n@Component({\r\n\tselector: 'app-add-edit-design-page-description',\r\n\ttemplateUrl: './add-edit-design-page-description.component.html'\r\n})\r\nexport class AddEditDesignPageDescriptionComponent implements OnInit {\r\n\r\n description: string = '';\r\n newTemplate: boolean = false;\r\n\tisDuplicate: boolean = false;\r\n page: CustomDesignPage;\r\n\r\n\tconstructor(\r\n\t\tprivate dialogRef: MatDialogRef,\r\n\t\tprivate dialog: MatDialog,\r\n\t\t@Inject(MAT_DIALOG_DATA) public data: any\r\n\t) {\r\n\t\tif (this.data.page) {\r\n this.page = this.data.page;\r\n this.description = this.page.Description;\r\n\t\t}\r\n\t\tif (this.data.newTemplate) {\r\n\t\t\tthis.newTemplate = this.data.newTemplate;\r\n\t\t}\r\n\t\tif (this.data.isDuplicate) {\r\n\t\t\tthis.isDuplicate = true;\r\n\t\t}\r\n\t}\r\n\r\n\tngOnInit() {\r\n \r\n\t}\r\n\r\n\tsaveClick() {\r\n this.page.Description = this.description;\r\n\t\tthis.dialogRef.close(this.page);\r\n\t}\r\n\r\n\tcloseClick() {\r\n\t\tthis.dialogRef.close(null);\r\n\t}\r\n\r\n}\r\n","export class CustomDesignPage {\r\n ID: number;\r\n Name: string;\r\n ObjectID: number;\r\n ObjectName: string;\r\n ModuleID: number;\r\n ModuleName: string;\r\n BasePage: boolean;\r\n FormData: string;\r\n AddedOn: Date;\r\n AddedBy: number;\r\n LastUpOn: Date;\r\n LastUpBy: number;\r\n DelStatus: boolean;\r\n Active: boolean;\r\n Version: number;\r\n DesignPageID: number;\r\n BaseVersion: number;\r\n ObjectTypeID: number;\r\n Description: string;\r\n HasDetailRows: boolean;\r\n\r\n AddedByName: string;\r\n LastUpByName: string;\r\n }","\r\n \r\n Added By\r\n {{detail.BasePage ? '' : detail.AddedByName}}\r\n \r\n \r\n Added\r\n \r\n {{detail.BasePage ? '' : (detail.AddedOn | date:'MM/dd/yy')}}\r\n \r\n \r\n \r\n Last Updated By\r\n {{detail.BasePage ? '' : detail.LastUpByName}}\r\n \r\n \r\n Last Updated\r\n \r\n {{detail.BasePage ? '' : (detail.LastUpOn | date:'MM/dd/yy h:mm a')}}\r\n \r\n \r\n \r\n Description\r\n {{detail.Description}}\r\n \r\n \r\n Active\r\n \r\n Y\r\n \r\n \r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, ViewChild, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { EFormService } from '../../../../shared-components/e-forms/e-form.service';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../../shared-components/e-forms/e-form-config.model';\r\nimport { CustomizationFrameworkService } from '../../../../shared-modules/customization-framework/customization-framework.service';\r\nimport { EFormDesignerService } from '../../../../shared-components/e-forms/e-form-designer/e-form-designer.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { EFormDesignerComponent } from '../../../../shared-components/e-forms/e-form-designer/e-form-designer.component';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport {take } from 'rxjs/operators';\r\nimport { CustomDesignPage } from '../../../../admin360/customization/models/custom-design-page.model';\r\nimport { CustomizationService } from '../../../../admin360/customization/customization.service';\r\nimport { AddEditDesignPageDescriptionComponent } from '../../../../admin360/customization/design-pages/add-edit-design-page-description/add-edit-design-page-description.component';\r\nimport { EFormViewerModalComponent } from '../../../../shared-components/e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component';\r\nimport { cloneDeep, orderBy } from 'lodash';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'design-page-details',\r\n templateUrl: './design-page-details.component.html',\r\n styleUrls: ['./design-page-details.component.css']\r\n})\r\nexport class DesignPageDetailsComponent implements OnInit, OnDestroy {\r\n\r\n // @Input() userDefinedPages: CustomDesignPage[] = [];\r\n private _userDefinedPages: CustomDesignPage[];\r\n public get userDefinedPages(): CustomDesignPage[] {\r\n return this._userDefinedPages;\r\n }\r\n @Input() public set userDefinedPages(value: CustomDesignPage[]) {\r\n this._userDefinedPages = value;\r\n this.loadTable();\r\n }\r\n @Input() designPageID = 0;\r\n @Input() userCanEdit = false;\r\n @Input() allowViewEdit = false;\r\n @Input() singlePageMode = false;\r\n @Output() updateBasePageEvent = new EventEmitter();\r\n @Output() designPageUpdated = new EventEmitter();\r\n\r\n private subscriptions: Subscription[] = [];\r\n columnsToDisplay: string[] = [ 'Description', 'AddedBy', 'AddedOn', 'LastUpBy', 'LastUpOn', 'Status'];\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n dataSource: TylerMatTableDataSource;\r\n config: EFormConfiguration = new EFormConfiguration();\r\n updateBasePageFlag = false;\r\n\r\n constructor(\r\n private customizationService: CustomizationService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.loadTable();\r\n\r\n this.config.ParentHandlesSave = true;\r\n this.config.PageFlag = true;\r\n this.config.CustomFieldsFlag = true;\r\n\r\n if (this.userCanEdit) {\r\n this.columnsToDisplay.push('Actions');\r\n }\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n editClick(page: CustomDesignPage) {\r\n this.customizationFrameworkService.getCustomDataFieldsByObjectID(page.ObjectID).subscribe(results => {\r\n if (results) {\r\n this.eFormDesignerService.availableCSTFields = results;\r\n }\r\n else {\r\n this.eFormDesignerService.availableCSTFields = [];\r\n }\r\n this.openDesigner(page);\r\n });\r\n }\r\n\r\n duplicateClick(page: CustomDesignPage) {\r\n let pageCopy = cloneDeep(page);\r\n pageCopy.ID = null;\r\n pageCopy.Active = false;\r\n pageCopy.AddedOn = new Date();\r\n pageCopy.AddedBy = null;\r\n pageCopy.LastUpOn = null;\r\n pageCopy.LastUpBy = null;\r\n const editDescriptionDialog = this.dialog.open(AddEditDesignPageDescriptionComponent, {\r\n disableClose: true,\r\n data: {\r\n page: pageCopy,\r\n newTemplate: true,\r\n isDuplicate: true\r\n }\r\n });\r\n editDescriptionDialog.afterClosed().subscribe((p: CustomDesignPage) => {\r\n if (p) {\r\n this.editClick(pageCopy);\r\n }\r\n });\r\n }\r\n\r\n viewClick(page: CustomDesignPage) {\r\n this.customizationFrameworkService.getCustomDataFieldsByObjectID(page.ObjectID).subscribe(results => {\r\n if (results) {\r\n this.eFormDesignerService.availableCSTFields = results;\r\n }\r\n else {\r\n this.eFormDesignerService.availableCSTFields = [];\r\n }\r\n this.openViewer(page);\r\n });\r\n }\r\n\r\n editDescriptionClick(page: CustomDesignPage) {\r\n const editDescriptionDialog = this.dialog.open(AddEditDesignPageDescriptionComponent, {\r\n disableClose: true,\r\n data: {\r\n page: page,\r\n newTemplate: false\r\n }\r\n });\r\n editDescriptionDialog.afterClosed().subscribe((p: CustomDesignPage) => {\r\n if (p) {\r\n this.customizationService.saveDesignPageTemplate(p).subscribe(result => {\r\n this.updateSelectedPage(result);\r\n });\r\n }\r\n });\r\n }\r\n\r\n\r\n getDesignPages() {\r\n if (this.updateBasePageFlag) {\r\n this.updateBasePageEvent.emit();\r\n this.updateBasePageFlag = false;\r\n }\r\n else {\r\n this.subscriptions.push(this.customizationService.getDesignPageByIDs(false, [this.designPageID], true).subscribe(pages => {\r\n if (this.singlePageMode) {\r\n this.userDefinedPages = orderBy(pages, ['BasePage', 'Description'], ['desc', 'asc']);\r\n const bp = pages.find(o => o.BasePage);\r\n if (bp) {\r\n bp.Description = 'System Page';\r\n }\r\n }\r\n else {\r\n this.userDefinedPages = pages.filter(p => !p.BasePage);\r\n }\r\n this.loadTable();\r\n }));\r\n }\r\n }\r\n\r\n loadTable() {\r\n this.dataSource = new TylerMatTableDataSource(this.userDefinedPages);\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n openDesigner(page: CustomDesignPage = new CustomDesignPage) {\r\n this.config.Title = page.Name;\r\n this.config.CSTFieldsManageOwnData = this.loginService.LoginSettings.CustomizationDevMode ? false : true;\r\n this.eFormService.selectedDesignPage = page;\r\n this.config.ViewMode = enmEFormViewModes.Page;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.AllowAttachmentControls = false;\r\n this.config.AllowColumnWidth = true;\r\n this.config.AllowShowTodayButton = true;\r\n this.customizationFrameworkService.reconcileChangesToDesignPage(page).pipe(take(1)).subscribe(formData => {\r\n page.FormData = JSON.stringify(formData);\r\n page.Version = page.BaseVersion;\r\n this.eFormService.selectedFormData = formData;\r\n const dialogRef = this.dialog.open(EFormDesignerComponent, {\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '100vw',\r\n maxWidth: '100vw',\r\n disableClose: true,\r\n autoFocus: false,\r\n data: { config: this.config, basePage: page.BasePage }\r\n });\r\n\r\n this.subscriptions.push(dialogRef.componentInstance.saveEvent.subscribe(pageSaved => {\r\n if (pageSaved == 'save' || pageSaved == 'saveBasePage') {\r\n this.customizationService.saveDesignPageTemplate(page).subscribe(result => {\r\n // If page is a duplicate, set the ID so a new page isn't created each time save is clicked.\r\n if (page.ID == null) {\r\n page.ID = result.ID;\r\n }\r\n this.updateSelectedPage(result);\r\n this.eFormService.selectedDesignPage = result;\r\n this.designPageUpdated.emit(true);\r\n this.getDesignPages();\r\n });\r\n }\r\n }));\r\n });\r\n }\r\n\r\n openViewer(page: CustomDesignPage) {\r\n this.config.Title = page.Name;\r\n this.config.CSTFieldsManageOwnData = this.loginService.LoginSettings.CustomizationDevMode ? false : true;\r\n this.eFormService.selectedDesignPage = page;\r\n this.config.ViewMode = enmEFormViewModes.Page;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.UseInstance = false;\r\n this.config.HideLanguageDropDown = true;\r\n this.customizationFrameworkService.reconcileChangesToDesignPage(page).pipe(take(1)).subscribe(formData => {\r\n page.FormData = JSON.stringify(formData);\r\n page.Version = page.BaseVersion;\r\n this.eFormService.selectedFormData = formData;\r\n const dialogRef = this.dialog.open(EFormViewerModalComponent, {\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '100vw',\r\n disableClose: true,\r\n data: { config: this.config }\r\n });\r\n });\r\n }\r\n\r\n deleteClick(page: CustomDesignPage) {\r\n if (page.Active) {\r\n this.updateBasePageFlag = true;\r\n this.customizationService.toggleActiveDesignPageTemplate(page.ID).subscribe(result => {\r\n result.DelStatus = true;\r\n this.customizationService.saveDesignPageTemplate(result).subscribe(() => {\r\n this.getDesignPages();\r\n });\r\n });\r\n }\r\n else {\r\n page.DelStatus = true;\r\n\r\n const pageIndex: number = this.userDefinedPages.findIndex(p => p.ID == page.ID);\r\n if (pageIndex > -1) {\r\n this.userDefinedPages[pageIndex].DelStatus = true;\r\n }\r\n\r\n if (this.userDefinedPages.filter(p => !p.DelStatus).length == 0) {\r\n this.updateBasePageFlag = true;\r\n }\r\n\r\n this.customizationService.saveDesignPageTemplate(page).subscribe(() => {\r\n this.getDesignPages();\r\n });\r\n }\r\n this.designPageUpdated.emit(true);\r\n }\r\n\r\n toggleActiveStatusClick(page: CustomDesignPage) {\r\n if (!this.singlePageMode) {\r\n // If the page is being changed from active to inactive then the base page will now be the active page\r\n // The base page will need to be updated\r\n if (page.Active) {\r\n this.updateBasePageFlag = true;\r\n }\r\n // If no user defined page is active then base page must be active and will need to be updated\r\n else if (this.userDefinedPages.findIndex(p => (!p.BasePage && p.Active) || (p.BasePage && !p.Active)) == -1) {\r\n this.updateBasePageFlag = true;\r\n }\r\n }\r\n\r\n this.customizationService.toggleActiveDesignPageTemplate(page.ID).pipe(take(1)).subscribe(result => {\r\n this.getDesignPages();\r\n });\r\n this.designPageUpdated.emit(true);\r\n }\r\n\r\n updateSelectedPage(page: CustomDesignPage) {\r\n const index: number = this.userDefinedPages.findIndex(p => p.ID == page.ID);\r\n if (index > -1) {\r\n this.userDefinedPages[index] = page;\r\n }\r\n this.loadTable();\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n 0\" class=\"material-icons\" [ngClass]=\"{\r\n 'detail-row-expanded-icon': rowsExpanded,\r\n 'detail-row-collapsed-icon': !rowsExpanded}\" (click)=\"expandCollapseAll()\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Page Name \r\n {{element.Name}} \r\n \r\n\r\n \r\n Page Type \r\n {{element.ObjectName}} \r\n \r\n\r\n \r\n Module \r\n {{element.ModuleName}} \r\n \r\n\r\n \r\n User Defined Page \r\n \r\n Y\r\n \r\n \r\n \r\n\r\n \r\n Active\r\n \r\n Y\r\n \r\n \r\n \r\n\r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \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, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { CustomizationService } from '../../../admin360/customization/customization.service';\r\nimport { AddEditDesignPageDescriptionComponent } from '../../../admin360/customization/design-pages/add-edit-design-page-description/add-edit-design-page-description.component';\r\nimport { CustomDesignPage } from '../../../admin360/customization/models/custom-design-page.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../shared-components/e-forms/e-form-config.model';\r\nimport { EFormDesignerComponent } from '../../../shared-components/e-forms/e-form-designer/e-form-designer.component';\r\nimport { EFormDesignerService } from '../../../shared-components/e-forms/e-form-designer/e-form-designer.service';\r\nimport { EFormViewerModalComponent } from '../../../shared-components/e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component';\r\nimport { EForm } from '../../../shared-components/e-forms/e-form.model';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { EFormDataObject } from '../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { CustomizationFrameworkService } from '../customization-framework.service';\r\nimport * as _ from 'lodash';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { orderBy } from 'lodash';\r\n\r\n@Component({\r\n selector: 'view-design-pages',\r\n templateUrl: './view-design-pages.component.html',\r\n styleUrls: ['./view-design-pages.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class ViewDesignPagesComponent implements OnInit {\r\n\r\n allDesignPages: CustomDesignPage[];\r\n @Input() designPageId: number;\r\n @Input() allowViewEdit: boolean;\r\n\r\n @Output() designPageUpdated: EventEmitter = new EventEmitter();\r\n\r\n\r\n private subscriptions: Subscription[] = [];\r\n columnsToDisplay: string[] = ['More', 'ModuleName', 'ObjectName', 'Name', 'Status', 'Actions'];\r\n @ViewChild(MatSort, { static: false }) set sort(value: MatSort) {\r\n this.dataSource.sort = value;\r\n }\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource();\r\n config: EFormConfiguration = new EFormConfiguration();\r\n userCanEdit = false;\r\n componentRef: any;\r\n // errorList: ErrorList[] = [];\r\n rowsExpanded = false;\r\n devMode = false;\r\n\r\n constructor(\r\n private customizationService: CustomizationService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private eFormService: EFormService,\r\n private eFormDesignerService: EFormDesignerService,\r\n private dialog: MatDialog,\r\n private securityService: SecurityService,\r\n private loginService: LoginService\r\n ) {\r\n this.config.ParentHandlesSave = true;\r\n this.config.PageFlag = true;\r\n this.config.CustomFieldsFlag = true;\r\n\r\n this.userCanEdit = this.securityService.IsAllPermissionCodeAssigned('SUI_MDP');\r\n this.devMode = this.loginService.LoginSettings.CustomizationDevMode ? true : false;\r\n }\r\n\r\n ngOnInit() {\r\n this.getDesignPages();\r\n }\r\n\r\n getDesignPages() {\r\n this.subscriptions.push(this.customizationService.getDesignPageByIDs(false, this.designPageId ? [this.designPageId] : [], true).subscribe(pages => {\r\n pages.forEach(page => {\r\n page.HasDetailRows = pages.filter(p => !p.BasePage && p.DesignPageID == page.DesignPageID).length > 0;\r\n });\r\n if (this.designPageId) {\r\n this.allDesignPages = orderBy(pages, ['BasePage', 'Description'], ['desc', 'asc']);\r\n const bp = pages.find(o => o.BasePage);\r\n if (bp) {\r\n bp.Description = 'System Page';\r\n }\r\n }\r\n else {\r\n this.allDesignPages = pages;\r\n }\r\n this.dataSource.data = pages.filter(p => p.BasePage);\r\n }));\r\n }\r\n\r\n addClick() {\r\n\r\n }\r\n\r\n editClick(page: CustomDesignPage) {\r\n this.customizationFrameworkService.getCustomDataFieldsByObjectID(page.ObjectID).subscribe(results => {\r\n if (results) {\r\n this.eFormDesignerService.availableCSTFields = results;\r\n }\r\n else {\r\n this.eFormDesignerService.availableCSTFields = [];\r\n }\r\n this.openDesigner(page);\r\n });\r\n }\r\n\r\n viewClick(page: CustomDesignPage) {\r\n const eForm: EForm = new EForm;\r\n\r\n eForm.FormData = page.FormData;\r\n\r\n this.eFormService.selectedForm = eForm;\r\n try {\r\n this.eFormService.selectedFormData = JSON.parse(eForm.FormData);\r\n } catch (err) {\r\n this.eFormService.selectedFormData = new EFormDataObject();\r\n }\r\n const vConfig = new EFormConfiguration();\r\n vConfig.ViewMode = enmEFormViewModes.Page;\r\n vConfig.ShowSubmittedBy = false;\r\n vConfig.DisableSubmission = true;\r\n vConfig.ReadOnly = false;\r\n vConfig.UseInstance = false;\r\n vConfig.Title = page.Name;\r\n vConfig.HideLanguageDropDown = true;\r\n const viewFormDialog = this.dialog.open(EFormViewerModalComponent, {\r\n disableClose: true,\r\n height: '100vh',\r\n width: '100vw',\r\n data: {\r\n config: vConfig\r\n }\r\n });\r\n }\r\n\r\n openDesigner(page: CustomDesignPage = new CustomDesignPage) {\r\n this.config.Title = page.Name;\r\n this.config.CSTFieldsManageOwnData = this.loginService.LoginSettings.CustomizationDevMode ? false : true;\r\n this.eFormService.selectedDesignPage = page;\r\n this.config.ViewMode = enmEFormViewModes.Page;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.AllowAttachmentControls = false;\r\n this.config.AllowColumnWidth = true;\r\n this.config.AllowShowTodayButton = true;\r\n this.customizationFrameworkService.reconcileChangesToDesignPage(page).pipe(take(1)).subscribe(formData => {\r\n page.FormData = JSON.stringify(formData);\r\n page.Version = page.BaseVersion;\r\n this.eFormService.selectedFormData = formData;\r\n const dialogRef = this.dialog.open(EFormDesignerComponent, {\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '100vw',\r\n maxWidth: '100vw',\r\n disableClose: true,\r\n autoFocus: false,\r\n data: { config: this.config, basePage: page.BasePage }\r\n });\r\n this.subscriptions.push(dialogRef.afterClosed().subscribe(pageSaved => {\r\n this.getDesignPages();\r\n }));\r\n this.subscriptions.push(dialogRef.componentInstance.saveEvent.subscribe(pageSaved => {\r\n if (pageSaved == 'save' || pageSaved == 'saveBasePage') {\r\n this.customizationService.saveDesignPageTemplate(page).subscribe(result => {\r\n page = result;\r\n this.eFormService.selectedDesignPage = result;\r\n this.designPageUpdated.emit(true);\r\n this.getDesignPages();\r\n });\r\n }\r\n }));\r\n });\r\n }\r\n\r\n addUserPageClick(basePage: CustomDesignPage) {\r\n const newUserPage: CustomDesignPage = new CustomDesignPage;\r\n newUserPage.ID = 0;\r\n newUserPage.Active = false;\r\n newUserPage.BasePage = false;\r\n newUserPage.FormData = _.clone(basePage.FormData);\r\n newUserPage.DesignPageID = basePage.DesignPageID;\r\n newUserPage.Version = basePage.Version;\r\n\r\n const editDescriptionDialog = this.dialog.open(AddEditDesignPageDescriptionComponent, {\r\n disableClose: true,\r\n data: {\r\n page: newUserPage,\r\n newTemplate: true\r\n }\r\n });\r\n editDescriptionDialog.afterClosed().subscribe((page: CustomDesignPage) => {\r\n if (page) {\r\n this.customizationFrameworkService.getCustomDataFieldsByObjectID(basePage.ObjectID).subscribe(results => {\r\n if (results) {\r\n this.eFormDesignerService.availableCSTFields = results;\r\n }\r\n else {\r\n this.eFormDesignerService.availableCSTFields = [];\r\n }\r\n this.openDesigner(newUserPage);\r\n });\r\n }\r\n });\r\n }\r\n\r\n addVersion() {\r\n const page = this.allDesignPages.find(o => o.DesignPageID == this.designPageId && o.BasePage);\r\n if (page) {\r\n this.addUserPageClick(page);\r\n }\r\n }\r\n\r\n expandCollapseAll() {\r\n let allCollapsed = true;\r\n this.dataSource.data.forEach(designPage => {\r\n if (designPage.detailRow) {\r\n allCollapsed = false;\r\n }\r\n });\r\n if (allCollapsed) {\r\n this.dataSource.expandAll(true);\r\n this.rowsExpanded = true;\r\n }\r\n else {\r\n this.dataSource.expandAll(false);\r\n this.rowsExpanded = false;\r\n }\r\n }\r\n\r\n revertClick(basePage: CustomDesignPage) {\r\n this.customizationService.toggleActiveDesignPageTemplate(basePage.ID).subscribe(() => {\r\n this.getDesignPages();\r\n this.designPageUpdated.emit(true);\r\n });\r\n }\r\n\r\n designPageUpdatedHandler() {\r\n this.designPageUpdated.emit(true);\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\n\r\n@Component({\r\n selector: 'app-email-not-sent',\r\n templateUrl: './email-not-sent.component.html',\r\n styleUrls: ['./email-not-sent.component.css']\r\n})\r\nexport class EmailNotSentComponent implements OnInit {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n modalInstanceCloseClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n\r\n}\r\n","\r\n

\r\n Email Not Sent\r\n

\r\n\r\n
\r\n The system was not able to send an email to your email address. Please contact the district for further instructions.\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
","import { System } from './../../shared-components/System';\r\nimport { FamilyRegistrationYear } from './family-registration-year.model';\r\nimport { FamilyRegistrationAddressSettings } from './family-registration-household-addresses/family-registration-address-settings.model';\r\nimport { Injectable } from '@angular/core';\r\nimport { FamilyRegistration } from './family-registration.model';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { FamilyRegistrationStudent } from './family-registration-student.model';\r\n\r\n@Injectable()\r\nexport class FamilyRegistrationService {\r\n\r\n // Properties\r\n public householdParent: FamilyRegistration;\r\n public years: FamilyRegistrationYear[];\r\n public defaultYear: FamilyRegistrationYear;\r\n public registerNewFamily: any;\r\n public students: FamilyRegistrationStudent[] = [];\r\n public redirectUrl: string;\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n // Methods\r\n getORYears(yearId = 0, studentId = 0): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetORYears' + queryString);\r\n }\r\n\r\n saveRegisterParent(familyRegistration: FamilyRegistration): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveRegisterParent', familyRegistration);\r\n }\r\n\r\n registerParent(emailAddress: string, languageId: number, url: string, clientIP: string, clientMachineName: string, serverIP: string): Observable {\r\n const data = [emailAddress, languageId, url, clientIP, clientMachineName, serverIP];\r\n return this.http.post(System.apiURL.Student + 'RegisterParent', data);\r\n }\r\n\r\n sendRegisterParentEmail(emailAddress: string, languageId: number, url: string): Observable {\r\n const data = [emailAddress, languageId, url];\r\n return this.http.post(System.apiURL.Student + 'SendRegisterParentEmail', data);\r\n }\r\n\r\n parentAlreadyExists(familyRegistration: FamilyRegistration): Observable {\r\n // PRE: edited family registration data with an email address\r\n // POST: sends to the server to see if that data is in use\r\n return this.http.post(System.apiURL.Student + 'ParentAlreadyExist', familyRegistration);\r\n }\r\n\r\n getFamilyRegistrationAddressSettings(): Observable {\r\n // POST: obtains the family registration address settings from the server\r\n return this.http.get(System.apiURL.Student + 'GetFamilyRegistrationAddressSettings');\r\n }\r\n\r\n saveRegisterParentAddress(familyRegistration: FamilyRegistration): Observable {\r\n // PRE: a family registration that has edited addresses\r\n // POST: saves the family registration addresses to the server\r\n return this.http.post(System.apiURL.Student + 'SaveRegisterParentAddress', familyRegistration);\r\n }\r\n\r\n getFamilyRegistrationStudents(): Observable {\r\n // POST: obtains the starting data for a family registration student\r\n return this.http.get(System.apiURL.Student + 'GetFamilyRegistrationStudent');\r\n }\r\n\r\n studentAlreadyExists(students: FamilyRegistrationStudent[]): Observable {\r\n // POST: returns a list of names indicating the duplicate students\r\n return this.http.post(System.apiURL.Student + 'StudentAlreadyExist', students);\r\n }\r\n\r\n saveFamilyRegistrationStudents(students: FamilyRegistrationStudent[]): Observable {\r\n // PRE: a set of family students\r\n // POST: saves the students to the server\r\n const queryString = '?ayIdentifier=' + this.householdParent.AyIdentifier;\r\n return this.http.post(System.apiURL.Student + 'SaveFamilyRegistrationStudent' + queryString, students);\r\n }\r\n\r\n CheckExistingEmail(emailAddress: string): Observable {\r\n const data = [emailAddress];\r\n return this.http.post(System.apiURL.Student + 'CheckExistingEmail', data);\r\n }\r\n}\r\n","

Re-Enroll Students into {{selectedYear.Description}}

\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Student\r\n \r\n {{ss.StudentName}}\r\n \r\n \r\n \r\n Grade Level into which Student will be Enrolling\r\n \r\n \r\n \r\n \r\n {{gl.Code}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Previous Enrollment
GradeSchoolWithdrawn
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{ss.GradeLevel}}\r\n {{ss.SchoolDescription}}\r\n {{ss.WithdrawalDate | date: 'MM/dd/yy'}}\r\n
\r\n
\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, OnInit, Inject, ElementRef } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Lookup } from '../../lookup/lookup.model';\r\nimport { LookupService } from '../../lookup/lookup.service';\r\nimport { SharedService } from '../../shared.service';\r\nimport { Enrollment } from '../../student/enrollment.model';\r\nimport { UserService } from '../../user/user.service';\r\nimport { User } from '../../user/user.model';\r\nimport { TylerMatTableDataSource } from '../../angular-material/extended.class';\r\nimport { StudentService } from '../../student/student.service';\r\nimport { YearService } from '../../year/year.service';\r\nimport { Student } from '../../student/student.model';\r\nimport { ErrorList } from '../../controls/error-prompt/error-list.model';\r\nimport { OnlineRegistrationService } from '../../../student360/online-registration/online-registration.service';\r\nimport { Year } from '../../year/year.model';\r\n\r\n@Component({\r\n selector: 'app-re-enroll-students',\r\n templateUrl: './re-enroll-students.component.html',\r\n styleUrls: ['./re-enroll-students.component.css']\r\n})\r\nexport class ReEnrollStudentsComponent implements OnInit {\r\n\r\n yearId: number;\r\n familyId: number;\r\n selectedYear: Year;\r\n columnToDisplay: string[] = ['Checked', 'Student', 'GradeLevel', 'Previous Enrollment'];\r\n // columnToDisplay: string[] = ['Student', 'GradeLevel'];\r\n gradeLevels: Lookup[];\r\n students: Enrollment[];\r\n currentUser: User;\r\n angularMatDataStudents = new TylerMatTableDataSource();\r\n allStudentsSelected = false;\r\n errors: ErrorList[] = [];\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogRef: MatDialogRef,\r\n private lookupService: LookupService,\r\n private sharedService: SharedService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private onlineRegistrationService: OnlineRegistrationService) { }\r\n\r\n ngOnInit() {\r\n this.currentUser = this.userService.currentUser;\r\n this.yearId = this.data.yearId;\r\n this.familyId = this.data.familyId;\r\n this.selectedYear = this.data.selectedYear;\r\n\r\n this.lookupService.getGradeLevelLookup(true, this.yearId).subscribe(result => {\r\n this.gradeLevels = result;\r\n });\r\n\r\n this.sharedService.getReEnrollStudentsList(this.yearId, this.familyId, 0).subscribe(students => {\r\n students.forEach(element => {\r\n element.EnrollmentGradeLevel = '';\r\n });\r\n this.students = students;\r\n this.angularMatDataStudents.data = this.students;\r\n });\r\n }\r\n\r\n modalInstanceCancelClick() {\r\n this.dialogRef.close('Cancel');\r\n }\r\n\r\n modalInstanceContinueClick() {\r\n this.validateStudents();\r\n if (this.errors.length == 0) {\r\n let studentIds = '';\r\n let gradeLevelIds = '';\r\n this.students.forEach(element => {\r\n if (element.Selected == true) {\r\n studentIds = studentIds == '' ? element.StudentId.toString() : (studentIds + ',' + element.StudentId.toString());\r\n gradeLevelIds = gradeLevelIds == '' ? element.EnrollmentGradeLevel.toString() : (gradeLevelIds + ',' + element.EnrollmentGradeLevel.toString());\r\n }\r\n });\r\n\r\n this.sharedService.markStudentsAsNew(this.yearId, this.familyId, studentIds, gradeLevelIds).subscribe(result => {\r\n this.studentService.getParentAssignedStudents(this.userService.userId, this.yearService.defaultYear.Id, this.userService.currentUser.UserType).subscribe((students: Student[]) => {\r\n this.studentService.selectedStudent = students.find(x => x.Id == this.studentService.selectedStudent.Id);\r\n this.studentService.updateStudents(students);\r\n });\r\n this.yearService.student360Year = this.selectedYear;\r\n this.onlineRegistrationService.ORYear = this.selectedYear;\r\n this.onlineRegistrationService.familyId = this.familyId;\r\n this.onlineRegistrationService.parentType = this.students[0].IsPrimaryParent == false ? 'Nonresident Parent' : '';\r\n this.dialogRef.close('Close');\r\n });\r\n }\r\n }\r\n\r\n selectAll() {\r\n if (this.allStudentsSelected) {\r\n this.angularMatDataStudents.data.forEach(student => {\r\n student.Selected = true;\r\n });\r\n }\r\n else {\r\n this.angularMatDataStudents.data.forEach(student => {\r\n student.Selected = false;\r\n });\r\n }\r\n }\r\n\r\n studentSelect() {\r\n this.allStudentsSelected = this.angularMatDataStudents.data.filter(x => x.Selected == true).length == this.angularMatDataStudents.data.length;\r\n }\r\n\r\n validateStudents() {\r\n this.errors = [];\r\n let element: ElementRef;\r\n if (this.students.filter(x => x.Selected == true).length == 0) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected.'\r\n });\r\n }\r\n\r\n for (let i = 0; i < this.students.length; i++) {\r\n if (this.students[i].Selected == true && (this.students[i].EnrollmentGradeLevel == '0' || this.students[i].EnrollmentGradeLevel == '')) {\r\n element = new ElementRef(document.getElementById('selectedGradeLevel' + this.students[i].StudentId));\r\n // $('#selectTylerFormField' + this.students[i].StudentId).css('border', 'thin solid red');\r\n this.students[i].EnrollmentGradeLevel = '0';\r\n this.errors.push({\r\n fieldName: 'Grade',\r\n fieldRef: element,\r\n errorMsg: 'Required for selected students'\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n}\r\n","\r\n
\r\n\tNew Family Registration\r\n
\r\n
\r\n\tRe-Enroll Students\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t 1\">\r\n\t\t
For which year do you want to register students?
\r\n\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t\t
Re-enrollment is currently available for the following years.
\r\n\t\t
\r\n\t\t
For which year do you want to re-enroll students?
\r\n\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n\r\n\t\r\n\t\r\n\t\t
Students registered using this process will be registered in the\r\n\t\t\tschool year currently in progress: {{defaultYear.Description}}.
\r\n\t\t
\r\n\t\t\t
Students registered using this process will be registered in the  
\r\n\t\t\t
{{defaultYear.Description}} 
\r\n\t\t\t
school year.
\r\n\t\t
Students registered using this process will\r\n\t\t\tbe registered in the upcoming {{defaultYear.Description}} school year, which begins on\r\n\t\t\t{{defaultYear.ORStartDate|date:'MM/dd/yy'}}.
\r\n\t
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\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 { FamilyRegistrationYear } from './../family-registration-year.model';\r\nimport { Component, OnInit, ElementRef, Inject } from '@angular/core';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { ReEnrollStudentsComponent } from '../../../shared-components/student-header/re-enroll-students/re-enroll-students.component';\r\n\r\n@Component({\r\n\tselector: 'app-new-family-registration-year-selection',\r\n\ttemplateUrl: './new-family-registration-year-selection.component.html',\r\n\tstyleUrls: [\r\n\t\t'./new-family-registration-year-selection.component.css',\r\n\t\t'../familiy-registration-shared-style.css'\r\n\t]\r\n})\r\nexport class NewFamilyRegistrationYearSelectionComponent implements OnInit {\r\n\tyears: FamilyRegistrationYear[];\r\n\tids: string[] = [];\r\n\tlabels: string[] = [];\r\n\tpublic errorList: ErrorList[] = [];\r\n\tLoginSettings: LoginSettings;\r\n\tdefaultYear: FamilyRegistrationYear;\r\n\tV10: boolean;\r\n\treEnrollStudent = false;\r\n\r\n\tconstructor(\r\n\t @Inject(MAT_DIALOG_DATA) private data: any,\r\n\t\tprivate familyRegistrationService: FamilyRegistrationService,\r\n\t\tprivate loginService: LoginService,\r\n\t\tprivate dialogRef: MatDialogRef,\r\n\t\tprivate router: Router,\r\n private dialog: MatDialog,\r\n\t) { }\r\n\r\n\tngOnInit() {\r\n\t\tif (this.data != undefined) {\r\n\t\t\tthis.reEnrollStudent = this.data.reEnrollStudent;\r\n\t\t}\r\n\t\tthis.V10 = this.loginService.LoginSettings.V10;\r\n\t\tthis.LoginSettings = this.loginService.LoginSettings;\r\n\t\tthis.defaultYear = this.familyRegistrationService.defaultYear;\r\n\t\tif (this.reEnrollStudent) {\r\n\t\t\tthis.years = this.data.years;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.years = this.familyRegistrationService.years;\r\n\t\t}\r\n\t\tfor (let i = 0; i < this.years.length; i++) {\r\n\t\t\tthis.ids.push('yearRadio' + i);\r\n\t\t\tlet yearLabel = '';\r\n\t\t\tif (this.V10) {\r\n\t\t\t\tif (this.years[i].Status == 1) {\r\n\t\t\t\t\tyearLabel += 'The current school year ';\r\n\t\t\t\t}\r\n\t\t\t\tif (this.years[i].Status == 2) {\r\n\t\t\t\t\tyearLabel += 'The upcoming school year ';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tyearLabel += this.years[i].Description;\r\n\t\t\tthis.labels.push(yearLabel);\r\n\t\t}\r\n\t}\r\n\r\n\tmodalInstanceOKClick() {\r\n\t\tthis.dialogRef.close('OK was clicked.');\r\n\t\tthis.familyRegistrationService.saveRegisterParent(this.familyRegistrationService.householdParent).subscribe(\r\n\t\t\t() => {\r\n\t\t\t\tthis.router.navigateByUrl('/familyregistration/householdparent');\r\n\t\t\t});\r\n\t}\r\n\r\n\tmodalInstanceNextClick() {\r\n\t\tif (this.validate() && this.reEnrollStudent) {\r\n\t\t\tconst dialogBox = this.dialog.open(ReEnrollStudentsComponent,\r\n {\r\n disableClose: true,\r\n width: '65vw',\r\n height: '58vh',\r\n data: {\r\n yearId: this.defaultYear.Id,\r\n\t\t\t\t\t\tfamilyId: this.data.familyId,\r\n\t\t\t\t\t\tselectedYear: this.defaultYear\r\n }\r\n });\r\n \r\n const subscription = dialogBox.afterClosed().subscribe(result => {\r\n if (result == 'Close') {\r\n\t\t\t\t\tthis.router.navigateByUrl('/student360/onlineRegistration');\r\n\t\t\t\t\tthis.dialogRef.close('OK was clicked.');\r\n\t\t\t\t}\r\n\t\t\t\telse if (result == 'Cancel') {\r\n\t\t\t\t\tthis.dialogRef.close('OK was clicked.');\r\n\t\t\t\t}\r\n });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.validate()) {\r\n\t\t\t\tthis.dialogRef.close('Next was clicked.');\r\n\t\t\t\tthis.familyRegistrationService.defaultYear = this.defaultYear;\r\n\t\t\t\tthis.familyRegistrationService.householdParent.YearId = this.familyRegistrationService.defaultYear.Id;\r\n\t\t\t\tthis.familyRegistrationService.householdParent.AyIdentifier = this.loginService.LoginSettings.V10 ? this.familyRegistrationService.defaultYear.AYIdentifier : this.familyRegistrationService.defaultYear.Description;\r\n\t\t\t\tthis.familyRegistrationService.saveRegisterParent(this.familyRegistrationService.householdParent).subscribe(\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tthis.router.navigateByUrl('/familyregistration/householdparent');\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(): boolean {\r\n\t\tthis.errorList = [];\r\n\t\tif (!this.defaultYear || this.defaultYear.Id == undefined) {\r\n\t\t\tlet htmlElement: Element = document.getElementById(this.ids[0]);\r\n\t\t\thtmlElement = htmlElement.getElementsByClassName('mat-radio-input')[0];\r\n\t\t\tconst element = new ElementRef(htmlElement);\r\n\t\t\tthis.errorList.push({\r\n\t\t\t\tfieldName: 'Year',\r\n\t\t\t\tfieldRef: element,\r\n\t\t\t\terrorMsg: 'Select Year'\r\n\t\t\t});\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\tmodalInstanceCancelClick() {\r\n\t\tthis.dialogRef.close('Cancel was clicked.');\r\n\t}\r\n\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { SystemSettingsService } from '../../classroom360/system-settings/system-settings.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { FreeReducedMealAppAdultIncomeSubType } from './models/free-reduced-meal-app-adult-income-sub-type.model';\r\nimport { FreeReducedMealAppAdultIncomeType } from './models/free-reduced-meal-app-adult-income-type.model';\r\nimport { FreeReducedMealAppAdult } from './models/free-reduced-meal-app-adult.model';\r\nimport { FreeReducedMealAppChildIncomeType } from './models/free-reduced-meal-app-child-income-type.model';\r\nimport { FreeReducedMealAppChild } from './models/free-reduced-meal-app-child.model';\r\nimport { FreeReducedMealAppFamily } from './models/free-reduced-meal-app-family.model';\r\nimport { FreeReducedMealAppIncome } from './models/free-reduced-meal-app-income.model';\r\nimport { FreeReducedMealAppPageChangeHistory } from './models/free-reduced-meal-app-page-change-history.model';\r\nimport { FreeReducedMealAppPageGroup } from './models/free-reduced-meal-app-page-group.model';\r\nimport { FreeReducedMealAppPage } from './models/free-reduced-meal-app-page.model';\r\nimport { FreeReducedMealAppProgram } from './models/free-reduced-meal-app-program.model';\r\nimport { FreeReducedMealAppStudentLunchStatus } from './models/free-reduced-meal-app-student-lunch-status.model';\r\nimport { FrmaAdultIncomeTypesEnum, FrmaPagesEnum } from './models/free-reduced-meal-app.enum';\r\nimport { FreeReducedMealApp } from './models/free-reduced-meal-app.model';\r\nimport { FRMALetterTemplate } from './models/frma-letter-template.model';\r\nimport { take } from 'rxjs/operators';\r\nimport { Subscription } from 'rxjs';\r\nimport { MailParameters } from '../send-email/mail-paremeters';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { SendEmailService } from '../send-email/send-email.service';\r\nimport { LoginService } from '../login/login.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { StudentContact } from '../../shared-components/student/student-contact.model';\r\nimport { FreeReducedMealAppAcceptedHistory } from './models/free-reduced-meal-app-accepted-history.model';\r\n\r\n\r\n@Injectable()\r\nexport class FreeReducedMealAppService {\r\n\r\n // student/adult income yes/no buttons are marked yes if records exist and no if records do not exist\r\n // because we require users to click either yes or no, we have to track when an answer is clicked so if no records exist AND they have selected an answer it will be marked no\r\n // otherwise, if no records exist and the user has not selected an answer, neither yes or no will be selected\r\n // these dictionaries will track user answers within the current FRMA\r\n childIncomeClicks: { [studentId: number]: { [incomeTypeId: number]: boolean } } = {};\r\n adultIncomeSubTypeClicks: { [adultId: number]: { [incomeSubTypeId: number]: boolean } } = {};\r\n adultIncomeClicks: { [adultId: number]: { [incomeTypeId: number]: boolean } } = {};\r\n\r\n selectedFamily: FreeReducedMealAppFamily;\r\n selectedLetterTemplate: FRMALetterTemplate;\r\n\r\n subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private userPreferencesService: UserPreferencesService,\r\n private sendEmailService: SendEmailService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n sampleData(): FreeReducedMealApp {\r\n const newApp = new FreeReducedMealApp(this.yearService.defaultYear.Id, -1);\r\n newApp.YearID = this.yearService.student360Year.Id;\r\n newApp.FamilyID = this.userService.currentUser.FamilyId;\r\n newApp.Programs = [];\r\n newApp.Adults = [];\r\n // newApp.StudentsInFamily = [];\r\n newApp.Children = [];\r\n const bob = new Student();\r\n bob.FirstName = 'Student1';\r\n bob.LastName = 'Example';\r\n bob.Id = 1;\r\n const suzy = new Student();\r\n suzy.FirstName = 'Student2';\r\n suzy.LastName = 'Example';\r\n suzy.Id = 2;\r\n // newApp.StudentsInFamily.push(bob);\r\n // newApp.StudentsInFamily.push(suzy);\r\n const other1 = new FreeReducedMealAppChild();\r\n const other2 = new FreeReducedMealAppChild();\r\n const other3 = new FreeReducedMealAppChild();\r\n const other4 = new FreeReducedMealAppChild();\r\n other3.ID = 3;\r\n other3.FirstName = bob.FirstName;\r\n other3.LastName = bob.LastName;\r\n other3.StudentID = bob.Id;\r\n other3.IsStudent = true;\r\n other3.IsEnrolled = true;\r\n other3.Programs = [];\r\n other4.ID = 4;\r\n other4.FirstName = suzy.FirstName;\r\n other4.LastName = suzy.LastName;\r\n other4.StudentID = suzy.Id;\r\n other4.IsStudent = true;\r\n other4.IsEnrolled = true;\r\n other4.Programs = [];\r\n other1.ID = 1;\r\n other1.FirstName = 'Other Student';\r\n other1.LastName = 'Example';\r\n other1.IsStudent = true;\r\n other1.IsEnrolled = false;\r\n other1.Programs = [];\r\n other2.ID = 2;\r\n other2.FirstName = 'Other Non-student';\r\n other2.LastName = 'Example';\r\n other2.Programs = [];\r\n newApp.Children.push(other1);\r\n newApp.Children.push(other2);\r\n newApp.Children.push(other3);\r\n newApp.Children.push(other4);\r\n const newParent = new FreeReducedMealAppAdult();\r\n newParent.ID = 1;\r\n newParent.FirstName = 'Household Parent 1';\r\n newParent.LastName = 'Example';\r\n newParent.PeopleID = 1;\r\n newParent.IncomeTypeIds = [];\r\n newApp.Adults.push(newParent);\r\n const newParent2 = new FreeReducedMealAppAdult();\r\n newParent2.ID = 2;\r\n newParent2.FirstName = 'Household Parent 2';\r\n newParent2.LastName = 'Example';\r\n newParent2.PeopleID = 2;\r\n newParent2.IncomeTypeIds = [];\r\n const newParent3 = new FreeReducedMealAppAdult();\r\n newParent3.ID = 3;\r\n newParent3.FirstName = 'Other Adult';\r\n newParent3.LastName = 'Example';\r\n newParent3.IncomeTypeIds = [];\r\n newApp.Adults.push(newParent3);\r\n return newApp;\r\n }\r\n\r\n formatName(firstName: string, middleName: string, lastName: string, suffix: string): string {\r\n return (firstName ? firstName : '') + (middleName ? ' ' + middleName : '') + (lastName ? ' ' + lastName : '') + (suffix ? ' ' + suffix : '');\r\n\r\n }\r\n\r\n calculateAnnualHouseholdIncome(app: FreeReducedMealApp): number {\r\n let annualIncome = 0;\r\n if (app) {\r\n if (app.Children) {\r\n app.Children.forEach(c => {\r\n if (c.Income) {\r\n c.Income.forEach(i => {\r\n annualIncome += this.convertIncomeToAnnual(i);\r\n });\r\n }\r\n });\r\n }\r\n if (app.Adults) {\r\n app.Adults.forEach(c => {\r\n if (c.Income) {\r\n c.Income.forEach(i => {\r\n annualIncome += this.convertIncomeToAnnual(i);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n return annualIncome;\r\n }\r\n\r\n convertIncomeToAnnual(income: FreeReducedMealAppIncome): number {\r\n let annualIncome = 0;\r\n let multiplier = 1;\r\n switch (income.Frequency.toLowerCase()) {\r\n case 'yearly':\r\n multiplier = 1;\r\n break;\r\n case 'monthly':\r\n multiplier = 12;\r\n break;\r\n case 'twice per month':\r\n multiplier = 24;\r\n break;\r\n case 'every two weeks':\r\n multiplier = 26;\r\n break;\r\n case 'weekly':\r\n multiplier = 52;\r\n break;\r\n case 'hourly':\r\n if (income.Per.toLowerCase() == 'week') { // weekly\r\n multiplier = 52 * (income.Hours ? income.Hours : 0);\r\n }\r\n else { // monthly\r\n multiplier = 12 * (income.Hours ? income.Hours : 0);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n if (isNaN(income.Amount)) {\r\n income.Amount = 0;\r\n }\r\n annualIncome = (income.Amount ? income.Amount : 0) * multiplier;\r\n return annualIncome;\r\n }\r\n\r\n getAdultIncomeTypeByPage(pageId: number): number {\r\n let adultIncomeTypeID: number = null;\r\n switch (pageId) {\r\n case FrmaPagesEnum.MilitaryIncome:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.Military;\r\n break;\r\n case FrmaPagesEnum.EarningsFromWork:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.Employment;\r\n break;\r\n case FrmaPagesEnum.IncomeFromPublicAssistance:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.PublicAssistance;\r\n break;\r\n case FrmaPagesEnum.IncomeFromAlimonyorChildSupport:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.AlimonyChildSupport;\r\n break;\r\n case FrmaPagesEnum.IncomeFromBenefits:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.Benefits;\r\n break;\r\n case FrmaPagesEnum.RetirementIncome:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.Retirement;\r\n break;\r\n case FrmaPagesEnum.OtherSourcesofIncome:\r\n adultIncomeTypeID = FrmaAdultIncomeTypesEnum.Other;\r\n break;\r\n default:\r\n break;\r\n }\r\n return adultIncomeTypeID;\r\n }\r\n\r\n pageHasBeenCompleted(app: FreeReducedMealApp, page: FreeReducedMealAppPage, selectedChild: FreeReducedMealAppChild, selectedAdult: FreeReducedMealAppAdult): boolean {\r\n return app.CompletedPages.find(o => o.PageID == page.ID\r\n && (!page.IsSingleChildPage || (selectedChild && o.ChildID == selectedChild.ID))\r\n && (!page.IsSingleAdultPage || (selectedAdult && o.AdultID == selectedAdult.ID))) != null;\r\n }\r\n\r\n sendAcceptedEmail(app: FreeReducedMealApp, children: FreeReducedMealAppChild[] = []) {\r\n if (children.length == 0) {\r\n this.getApplicationLunchStatusById(app.ID).pipe(take(1)).subscribe(c => {\r\n this.generateEmailBodyAndSend(app, c);\r\n });\r\n }\r\n else {\r\n this.generateEmailBodyAndSend(app, children);\r\n }\r\n }\r\n\r\n\r\n generateEmailBodyAndSend(app: FreeReducedMealApp, children: FreeReducedMealAppChild[]) {\r\n let body = '';\r\n const useSpanish = (app.FamilyLanguageId && app.FamilyLanguageId == 2) || app.SendMailingsInSpanish;\r\n\r\n if (this.selectedLetterTemplate && children) {\r\n if ((!useSpanish && this.selectedLetterTemplate.Body1) || (useSpanish && this.selectedLetterTemplate.Body1Spanish)) {\r\n body += '

' + (useSpanish ? this.selectedLetterTemplate.Body1Spanish : this.selectedLetterTemplate.Body1) + '

';\r\n }\r\n\r\n children.forEach(child => {\r\n let lunchStatus: string;\r\n const gradeLabel: string = useSpanish ? 'Grado' : 'Grade';\r\n const statusLabel: string = useSpanish ? 'Estatus' : 'Status';\r\n if (useSpanish) {\r\n switch (child.LunchStatus.toLowerCase()) {\r\n case 'free':\r\n lunchStatus = 'Gratis';\r\n break;\r\n case 'reduced':\r\n lunchStatus = 'Precio Reducido';\r\n break;\r\n case 'full student':\r\n lunchStatus = 'Percio Total';\r\n break;\r\n default:\r\n lunchStatus = child.LunchStatus;\r\n break;\r\n }\r\n }\r\n else {\r\n if (child.LunchStatus.toLowerCase() == 'full student') {\r\n lunchStatus = 'Full Price';\r\n }\r\n else {\r\n lunchStatus = child.LunchStatus;\r\n }\r\n }\r\n\r\n body += '' + child.LastName + ', ' + child.FirstName + '';\r\n body += '
    ';\r\n body += '
  • ' + gradeLabel + ' - ' + child.GradeLevel + '
  • ';\r\n body += '
  • ' + statusLabel + ' - ' + lunchStatus + '
  • ';\r\n body += '
';\r\n });\r\n\r\n if ((!useSpanish && this.selectedLetterTemplate.Body2) || (useSpanish && this.selectedLetterTemplate.Body2Spanish)) {\r\n body += '

' + (useSpanish ? this.selectedLetterTemplate.Body2Spanish : this.selectedLetterTemplate.Body2) + '

';\r\n }\r\n\r\n // Organizing the parameters\r\n const params = new MailParameters();\r\n params.userId = this.userService.currentUser.Id;\r\n params.EmailFrom = this.userPreferencesService.generalPreferences && this.userPreferencesService.generalPreferences.EmailFrom.toLowerCase() == 'no reply' ? this.loginService.LoginSettings.DefaultEmailReplyToAddress : this.userService.currentUser.Email;\r\n params.EmailTo = app.SubmittedByEmail;\r\n params.DisplayEmailToOnComment = 'To: ' + app.SubmittedByEmail;\r\n if (useSpanish) {\r\n params.Subject = 'Se acepta la presentación de la solicitud de comidas gratis / a precio reducido';\r\n }\r\n else {\r\n params.Subject = 'Free/Reduced Meal Application Submission Accepted';\r\n }\r\n params.Body = body;\r\n params.HtmlBody = true;\r\n\r\n // Sending the email\r\n this.subscriptions.push(\r\n this.sendEmailService.sendEmail(params, 'Free/Reduced Meal Application', true).subscribe(\r\n (result) => {\r\n if (result) {\r\n this.sharedService.showGoodSnackbar('Email sent');\r\n } else {\r\n this.sharedService.showBadSnackbar('Email failed to send');\r\n }\r\n },\r\n () => {\r\n this.sharedService.showBadSnackbar('Email failed to send');\r\n }\r\n )\r\n );\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar('Email failed to send');\r\n }\r\n }\r\n\r\n checkForStudentChange(application: FreeReducedMealApp, students: Student[]): boolean {\r\n const studentsInFamily = students.map(o => o.Id);\r\n const enrolledStudentsInFamily = students.filter(o => o.EnrollDate).map(o => o.Id);\r\n const studentsOnForm = application.Children.filter(o => o.StudentID).map(o => o.StudentID);\r\n if (application.ID > 0 && enrolledStudentsInFamily.find(o => !studentsOnForm.includes(o))) {\r\n // new enrolled students were added to the family that were not on this application previously\r\n return true;\r\n }\r\n if (application.ID > 0 && studentsOnForm.find(o => !studentsInFamily.includes(o))) {\r\n // there are students on the application that are no longer associated with the family\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n checkForParentChange(application: FreeReducedMealApp, parents: StudentContact[]): boolean {\r\n const parentsInFamily = parents.map(o => o.Id);\r\n const parentsOnForm = application.Adults.filter(o => o.PeopleID).map(o => o.PeopleID);\r\n if (application.ID > 0 && parentsInFamily.find(o => !parentsOnForm.includes(o))) {\r\n return true; // parents were added to the family that were not on this application previously\r\n }\r\n if (application.ID > 0 && parentsOnForm.find(o => !parentsInFamily.includes(o))) {\r\n return true; // there are parents on the application that are no longer associated with the family\r\n }\r\n return false;\r\n }\r\n\r\n getActiveFrmaPageById(pageId: number, yearId: number): Observable {\r\n const queryString = '?pageId=' + pageId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetActiveFrmaPageById' + queryString);\r\n }\r\n\r\n getDefaultFrmaPages(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetDefaultFrmaPages');\r\n }\r\n\r\n getAllFrmaUserTemplates(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetAllFrmaUserTemplates' + queryString);\r\n }\r\n\r\n updateFrmaUserTemplate(yearId: number, page: FreeReducedMealAppPage): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.Admin + 'UpdateFrmaUserTemplate' + queryString, page);\r\n }\r\n\r\n setActiveFrmaTemplate(yearId: number, page: FreeReducedMealAppPage): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.Admin + 'SetActiveFrmaTemplate' + queryString, page);\r\n }\r\n\r\n getFrmaPageGroups(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaPageGroups');\r\n }\r\n\r\n getFrmaPages(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaPages' + queryString);\r\n }\r\n\r\n getFrmaPrograms(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaPrograms');\r\n }\r\n\r\n getFrmaChildIncomeTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaChildIncomeTypes');\r\n }\r\n\r\n getFrmaAdultIncomeTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaAdultIncomeTypes');\r\n }\r\n\r\n getFrmaAdultIncomeSubTypes(): Observable {\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaAdultIncomeSubTypes');\r\n }\r\n\r\n saveFrmaApplication(app: FreeReducedMealApp): Observable {\r\n return this.http.post(System.apiURL.Admin + 'SaveFrmaApplication', app);\r\n }\r\n\r\n staffUpdateFrmaApplication(app: FreeReducedMealApp): Observable {\r\n return this.http.post(System.apiURL.Admin + 'StaffUpdateApplication', app);\r\n }\r\n\r\n getFrmaAppsByFamilyID(familyId: number, yearId: number): Observable {\r\n const queryString = '?familyId=' + familyId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaAppsByFamilyID' + queryString);\r\n }\r\n\r\n getFrmaAppWithPdf(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaAppWithPdf' + queryString);\r\n }\r\n\r\n getFrmaAppsByYearID(yearId: number, siteId: number, showCountsForAllSchools: boolean): Observable {\r\n const queryString = '?yearId=' + yearId\r\n + '&siteId=' + siteId\r\n + '&showCountsForAllSchools=' + showCountsForAllSchools;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaAppsByYearID' + queryString);\r\n }\r\n\r\n getFrmaApplication(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaApplication' + queryString);\r\n }\r\n\r\n getFRMAStudentStatus(familyId: number, yearId: number): Observable {\r\n const queryString = '?familyId=' + familyId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFRMAStudentStatus' + queryString);\r\n }\r\n\r\n deleteFrmaApplication(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'DeleteFrmaApplication' + queryString);\r\n }\r\n\r\n getFrmaPreviousChildren(familyId: number, yearId: number): Observable {\r\n const queryString = '?familyId=' + familyId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaPreviousChildren' + queryString);\r\n }\r\n\r\n getFrmaPreviousAdults(familyId: number, yearId: number): Observable {\r\n const queryString = '?familyId=' + familyId\r\n + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaPreviousAdults' + queryString);\r\n }\r\n\r\n deletFrmaeUserTemplate(userTemplateId: number): Observable {\r\n const queryString = '?userTemplateId=' + userTemplateId;\r\n return this.http.get(System.apiURL.Admin + 'DeletFrmaeUserTemplate' + queryString);\r\n }\r\n\r\n getPageChangeHistory(userTemplateId: number): Observable {\r\n const queryString = '?userTemplateId=' + userTemplateId;\r\n return this.http.get(System.apiURL.Admin + 'GetPageChangeHistory' + queryString);\r\n }\r\n\r\n getFrmaFamilies(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaFamilies' + queryString);\r\n }\r\n\r\n getFrmaLetterTemplateById(templateId: number): Observable {\r\n const queryString = '?templateId=' + templateId;\r\n return this.http.get(System.apiURL.Admin + 'GetFrmaLetterTemplateById' + queryString);\r\n }\r\n\r\n getApplicationLunchStatusById(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'GetApplicationLunchStatusById' + queryString);\r\n }\r\n\r\n getProjectedLunchStatusById(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'GetProjectedLunchStatusById' + queryString);\r\n }\r\n\r\n acceptApplicationAndMergeIntoClassic(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'AcceptApplicationAndMergeIntoClassic' + queryString);\r\n }\r\n\r\n getFRMAYearsForParent(familyId: number): Observable {\r\n const queryString = '?familyId=' + familyId;\r\n return this.http.get(System.apiURL.Admin + 'GetFRMAYearsForParent' + queryString);\r\n }\r\n\r\n getFRMAStudentsByFamilyId( yearId: number, familyId: number): Observable {\r\n const queryString = '?yearId=' + yearId\r\n + '&familyId=' + familyId;\r\n return this.http.get(System.apiURL.Admin + 'GetFRMAStudentsByFamilyId' + queryString);\r\n }\r\n\r\n getAcceptanceHistoryByAppID(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'GetAcceptanceHistoryByAppID' + queryString);\r\n }\r\n\r\n addAcceptToApplication(appId: number): Observable {\r\n const queryString = '?appId=' + appId;\r\n return this.http.get(System.apiURL.Admin + 'AddAcceptToApplication' + queryString);\r\n }\r\n}\r\n","export class FreeReducedMealAppHouseholdProgram {\r\n ID: number;\r\n AppID: number;\r\n ProgramID: number;\r\n CaseNumber: string;\r\n Selected: boolean;\r\n }","

{{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 {{suffix.CodeDescription}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\nimport { LookupService } from '../../../../shared-components/lookup/lookup.service';\r\nimport { FreeReducedMealAppPerson } from '../../models/free-reduced-meal-app-person.model';\r\n\r\n@Component({\r\n selector: 'app-frma-add-person',\r\n templateUrl: './frma-add-person.component.html',\r\n styleUrls: ['./frma-add-person.component.css']\r\n})\r\nexport class FrmaAddPersonComponent implements OnInit {\r\n\r\n person: FreeReducedMealAppPerson = new FreeReducedMealAppPerson();\r\n errors: ErrorList[] = [];\r\n suffixes: Lookup[] = [];\r\n title: string;\r\n selectedSuffix: Lookup;\r\n\r\n @ViewChild('form', { read: NgForm, static: true }) form: NgForm;\r\n @ViewChild('firstName', { read: ElementRef }) firstName: ElementRef;\r\n @ViewChild('lastName', { read: ElementRef }) lastName: ElementRef;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef,\r\n private lookupService: LookupService\r\n ) {\r\n if (data) {\r\n this.person.IsStudent = data.isStudent;\r\n this.title = data.title;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getSuffixes();\r\n }\r\n\r\n getSuffixes() {\r\n this.lookupService.getSuffixLookup('').pipe(take(1)).subscribe(suffixes => {\r\n this.suffixes = suffixes;\r\n });\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n Object.keys((this.form.form).controls).forEach(control => {\r\n this.form.form.get(control).markAsTouched();\r\n });\r\n if (!this.person.FirstName) {\r\n this.errors.push({\r\n fieldName: 'First Name',\r\n fieldRef: this.firstName,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n if (!this.person.LastName) {\r\n this.errors.push({\r\n fieldName: 'Last Name',\r\n fieldRef: this.lastName,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n\r\n saveClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.dialogRef.close(this.person);\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n suffixChange() {\r\n if (this.selectedSuffix && this.selectedSuffix.Id) {\r\n this.person.SuffixID = parseInt(this.selectedSuffix.Id, 10);\r\n }\r\n }\r\n\r\n}\r\n","export class FreeReducedMealAppInfoSharing {\r\n private static idIncrementor = -1;\r\n ID: number;\r\n AppID: number;\r\n WaiverProgramID: number;\r\n ProgramName: string;\r\n ShareWith: string;\r\n StudentIds: number[];\r\n\r\n constructor() {\r\n this.ID = FreeReducedMealAppInfoSharing.idIncrementor--;\r\n }\r\n }","export class FreeReducedMealAppCompletedPage {\r\n ID: number;\r\n AppID: number;\r\n PageID: number;\r\n ChildID = 0;\r\n AdultID = 0;\r\n}","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\n\r\n@Component({\r\n selector: 'app-frma-change-history-comment',\r\n templateUrl: './frma-change-history-comment.component.html',\r\n styleUrls: ['./frma-change-history-comment.component.css']\r\n})\r\nexport class FrmaChangeHistoryCommentComponent implements OnInit {\r\n\r\n comment = '';\r\n errors: ErrorList[] = [];\r\n @ViewChild('form', { read: NgForm, static: true }) form: NgForm;\r\n @ViewChild('frmaComment', { read: ElementRef, static: true }) frmaComment: ElementRef;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n validate() {\r\n Object.keys((this.form.form).controls).forEach(control => {\r\n this.form.form.get(control).markAsTouched();\r\n });\r\n this.errors = [];\r\n if (!this.comment) {\r\n this.errors.push({\r\n fieldName: 'Comment',\r\n fieldRef: this.frmaComment,\r\n errorMsg: ' is required.'\r\n });\r\n }\r\n }\r\n\r\n saveClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.dialogRef.close(this.comment);\r\n }\r\n }\r\n\r\n}\r\n","

Comments on Changes

\r\n\r\n
\r\n Enter comments explaining what was changed and why.
\r\n (These will show in the Change History.)\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n","\r\n\r\n \r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n 0\">\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n {{application.SignedByName}}\r\n {{application.SignedDate | date: 'MM/dd/yyyy'}}\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n {{program.ProgramID | frmaProgramName: programs: false}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n Yes\r\n No\r\n \r\n \r\n\r\n \r\n \r\n \r\n Which students?\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n Yes\r\n No\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n Yes\r\n No\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n Yes\r\n No\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n Do you want to:\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n 0\">\r\n and these children\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Delete\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
[] have income from any of the sources listed above or any other source?' | translate | frmaFillStudentName: child: suffixes | safeHtml\">
\r\n
[]   have income from any of the sources listed above or any other source?' | translate | frmaFillStudentName: child: suffixes | safeHtml\">
\r\n \r\n Yes\r\n No\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n 0\">\r\n and these adults\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Delete\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
    \r\n
  • \r\n {{incomeType.Question | translate | mergeField: false: mergeFieldTrigger }}\r\n \r\n Yes\r\n No\r\n \r\n
  • \r\n
\r\n
\r\n\r\n \r\n \r\n
    \r\n
  • \r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n
\r\n
\r\n\r\n \r\n \r\n {{'Is [] currently deployed?' | translate | frmaFillAdultName: selectedAdult: suffixes }}\r\n \r\n Yes\r\n No\r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n No SSN\r\n \r\n\r\n \r\n \r\n
\r\n To save you time and effort, the information you gave on this application may be shared with other programs for which your child(ren) may qualify.\r\n
\r\n 0\">\r\n
\r\n To save you time and effort, the information you gave on this application may be shared with other programs for which your child(ren) may qualify. For the following programs,\r\n we must have your permission to share your information. Your answers here will not change whether your children get free or reduced-price meals.\r\n
\r\n
\r\n Do you want school officials to share information from this Free/Reduced Meal Application with the following programs?\r\n
\r\n \r\n \r\n \r\n {{element.ProgramName}} \r\n \r\n\r\n \r\n No \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n Yes \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n Yes, but only for these students \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n Students Attending {{districtName}}\r\n
\r\n
\r\n
\r\n \r\n \r\n
    \r\n
  • Foster child
  • \r\n \r\n
  • {{program.ProgramID | frmaProgramName: programs: true}}
  • \r\n \r\n \r\n
  • {{income.ChildIncomeTypeID | frmaChildIncomeType: childIncomeTypes: true | translate}} - ${{income.Amount | number: '1.2-2'}} {{income.Frequency | translate}}\r\n \r\n  x {{income.Hours}} hours per {{income.Per | translate}} = ${{(income.Amount * income.Hours) | number: '1.2-2'}}  per {{income.Per | translate}}\r\n \r\n
  • \r\n
    \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
0\">\r\n
\r\n Other Children\r\n
\r\n
\r\n
\r\n \r\n
    \r\n
  • Foster child
  • \r\n \r\n
  • {{program.ProgramID | frmaProgramName: programs: true}}
  • \r\n \r\n \r\n
  • {{income.ChildIncomeTypeID | frmaChildIncomeType: childIncomeTypes: true | translate}} - ${{income.Amount | number: '1.2-2'}} {{income.Frequency | translate}}\r\n \r\n  x {{income.Hours}} hours per {{income.Per | translate}} = ${{(income.Amount * income.Hours) | number: '1.2-2'}}  per {{income.Per | translate}}\r\n \r\n
  • \r\n
    \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Adults\r\n
\r\n
\r\n
\r\n \r\n
    0\">\r\n
  • {{income.AdultIncomeSubTypeID | frmaAdultIncomeSubTypeName: allAdultIncomeSubTypes: true | translate}} - ${{income.Amount | number: '1.2-2'}} {{income.Frequency | translate}}\r\n \r\n  x {{income.Hours}} hours per {{income.Per | translate}} = ${{(income.Amount * income.Hours) | number: '1.2-2'}}  per {{income.Per | translate}}\r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Total Household Income\r\n
\r\n
\r\n {{application | frmaAnnualHouseholdIncome}} per year\r\n
\r\n NOTE: We calculated this number by converting all the income you reported into an annual amount. Remember, this should be a gross amount, so it will be more than what you receive as take-home pay.\r\n
\r\n
\r\n
\r\n
\r\n
0\">\r\n
\r\n Assistance Program Case Numbers\r\n
\r\n
\r\n
{{program.ProgramID | frmaProgramName: programs: false}} - #{{program.CaseNumber}}
\r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n 0\">\r\n I certify* that my household participates in \r\n {{application.Programs | frmaSummaryProgramString: programs}}\r\n \r\n \r\n \r\n \r\n I certify* that the information provided on this page is correct to the best of my knowledge.\r\n \r\n \r\n \r\n I certify* that {{application.Children.length + application.Adults.length}} PEOPLE are in my household and that our household income is about {{application | frmaAnnualHouseholdIncome}} PER YEAR.\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n","import { AfterViewInit, Component, ComponentFactoryResolver, ElementRef, Inject, Injector, Input, OnDestroy, OnInit, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../../shared-components/e-forms/e-form-config.model';\r\nimport { EFormDesignerComponent } from '../../../shared-components/e-forms/e-form-designer/e-form-designer.component';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { EFormDataObject } from '../../../shared-components/e-forms/e-formDataObject.model';\r\nimport { FreeReducedMealAppPage } from '../models/free-reduced-meal-app-page.model';\r\nimport {cloneDeep, isEqual, isEqualWith, sortBy} from 'lodash';\r\nimport { FreeReducedMealAppService } from '../free-reduced-meal-app.service';\r\nimport { FreeReducedMealAppPageGroup } from '../models/free-reduced-meal-app-page-group.model';\r\nimport { EFormViewerComponent } from '../../../shared-components/e-forms/e-form-viewer/e-form-viewer.component';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatHorizontalStepper, MatStep, MatStepper } from '@angular/material/stepper';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { FreeReducedMealApp } from '../models/free-reduced-meal-app.model';\r\nimport { CustomDataTemplateRef } from '../../customization-framework/models/custom-data-template-ref.model';\r\nimport { CustomizationFrameworkService } from '../../customization-framework/customization-framework.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { FreeReducedMealAppChild } from '../models/free-reduced-meal-app-child.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { FreeReducedMealAppProgram } from '../models/free-reduced-meal-app-program.model';\r\nimport { FreeReducedMealAppHouseholdProgram } from '../models/free-reduced-meal-app-household-program.model';\r\nimport { FrmaAdultIncomeTypesEnum, FrmaPagesEnum, FrmaProgramsEnum } from '../models/free-reduced-meal-app.enum';\r\nimport { FreeReducedMealAppChildProgram } from '../models/free-reduced-meal-app-child-program.model';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { FreeReducedMealAppChildIncomeType } from '../models/free-reduced-meal-app-child-income-type.model';\r\nimport { FreeReducedMealAppAdult } from '../models/free-reduced-meal-app-adult.model';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { FrmaSuffixPipe } from '../pipes/frma-suffix.pipe';\r\nimport { FrmaAddPersonComponent } from './frma-add-person/frma-add-person.component';\r\nimport { FreeReducedMealAppAdultIncomeType } from '../models/free-reduced-meal-app-adult-income-type.model';\r\nimport { FreeReducedMealAppAdultIncomeSubType } from '../models/free-reduced-meal-app-adult-income-sub-type.model';\r\nimport { FreeReducedMealAppAdultIncome } from '../models/free-reduced-meal-app-adult-income.model';\r\nimport { FreeReducedMealAppInfoSharing } from '../models/free-reduced-meal-app-info-sharing.model';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport { FreeReducedMealAppCompletedPage } from '../models/free-reduced-meal-app-completed-pages.model';\r\nimport { FreeReducedMealAppPerson } from '../models/free-reduced-meal-app-person.model';\r\nimport { FrmaPreviousPersonSelectorComponent } from './frma-previous-person-selector/frma-previous-person-selector.component';\r\nimport { FrmaChangeHistoryCommentComponent } from '../frma-change-history-comment/frma-change-history-comment.component';\r\nimport { PDFDocument } from 'pdf-lib';\r\nimport { SpinnerService } from '../../../shared-components/spinner/spinner.service';\r\nimport { FrmaChildIncomeDetailsComponent } from './frma-child-income-details/frma-child-income-details.component';\r\nimport { FreeReducedMealAppChildIncome } from '../models/free-reduced-meal-app-child-income.model';\r\nimport { FrmaAdultIncomeDetailsComponent } from './frma-adult-income-details/frma-adult-income-details.component';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport { CheckForErrorsGuard } from '../../../shared-components/guards/check-for-errors/check-for-errors.guard';\r\nimport { HasErrors } from '../../../shared-components/guards/check-for-errors/HasErrors';\r\nimport { RouterStateSnapshot } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'app-free-reduced-meal-app',\r\n templateUrl: './free-reduced-meal-app.component.html',\r\n styleUrls: ['./free-reduced-meal-app.component.css']\r\n})\r\nexport class FreeReducedMealAppComponent implements OnInit, AfterViewInit, OnDestroy, HasErrors {\r\n\r\n @ViewChild('frmaContainer', { static: true, read: ViewContainerRef }) frmaContainer: ViewContainerRef;\r\n @ViewChild(MatHorizontalStepper) stepper: MatHorizontalStepper;\r\n\r\n @ViewChildren(NgForm) forms: QueryList;\r\n @ViewChildren(FrmaChildIncomeDetailsComponent) childIncomeDetails: QueryList;\r\n @ViewChildren(FrmaAdultIncomeDetailsComponent) adultIncomeDetails: QueryList;\r\n\r\n // ///// custom templates to inject into form //////////////////////////////////////////////////////////\r\n customTemplateList: string[] = ['knownStudents', 'signatureCheckbox', 'signatureStamp', 'otherStudentList', 'householdPrograms', 'fosterCareButtons', 'fosterCareStudentList',\r\n 'mckinneyVentoButtons', 'mEPButtons', 'runawayYouthButtons', 'programSummary', 'proceedOrSubmit', 'allStudents', 'nonStudentChildren', 'studentIncomeStudentList', 'childIncomeQuestions'\r\n , 'childHasIncomeList', 'knownAdults', 'otherAdults', 'adultIncomeTypeQuestions', 'adultIncomeSubTypeQuestions', 'isDeployed', 'ssn', 'noSSN', 'sharingInformationGrid', 'summary'];\r\n @ViewChild('knownStudents', { static: true }) knownStudents: TemplateRef;\r\n @ViewChild('signatureCheckbox', { static: true }) signatureCheckbox: TemplateRef;\r\n @ViewChild('signatureStamp', { static: true }) signatureStamp: TemplateRef;\r\n @ViewChild('otherStudentList', { static: false }) otherStudentList: TemplateRef;\r\n @ViewChild('householdPrograms', { static: true }) householdPrograms: TemplateRef;\r\n @ViewChild('fosterCareButtons', { static: true }) fosterCareButtons: TemplateRef;\r\n @ViewChild('fosterCareStudentList', { static: true }) fosterCareStudentList: TemplateRef;\r\n @ViewChild('mckinneyVentoButtons', { static: true }) mckinneyVentoButtons: TemplateRef;\r\n @ViewChild('mEPButtons', { static: true }) mEPButtons: TemplateRef;\r\n @ViewChild('runawayYouthButtons', { static: true }) runawayYouthButtons: TemplateRef;\r\n @ViewChild('programSummary', { static: true }) programSummary: TemplateRef;\r\n @ViewChild('proceedOrSubmit', { static: true }) proceedOrSubmit: TemplateRef;\r\n @ViewChild('allStudents', { static: true }) allStudents: TemplateRef;\r\n @ViewChild('nonStudentChildren', { static: true }) nonStudentChildren: TemplateRef;\r\n @ViewChild('studentIncomeStudentList', { static: true }) studentIncomeStudentList: TemplateRef;\r\n @ViewChild('childIncomeQuestions', { static: true }) childIncomeQuestions: TemplateRef;\r\n @ViewChild('childHasIncomeList', { static: true }) childHasIncomeList: TemplateRef;\r\n @ViewChild('knownAdults', { static: true }) knownAdults: TemplateRef;\r\n @ViewChild('otherAdults', { static: true }) otherAdults: TemplateRef;\r\n @ViewChild('adultIncomeTypeQuestions', { static: true }) adultIncomeTypeQuestions: TemplateRef;\r\n @ViewChild('adultIncomeSubTypeQuestions', { static: true }) adultIncomeSubTypeQuestions: TemplateRef;\r\n @ViewChild('isDeployed', { static: true }) isDeployed: TemplateRef;\r\n @ViewChild('ssn', { static: true }) ssn: TemplateRef;\r\n @ViewChild('noSSN', { static: true }) noSSN: TemplateRef;\r\n @ViewChild('sharingInformationGrid', { static: true }) sharingInformationGrid: TemplateRef;\r\n @ViewChild('summary', { static: true }) summary: TemplateRef;\r\n // ///////////////////////////////////////////////////////////////////////////////////////////////////////////\r\n\r\n // // element refs for error links //////////////////////////////////\r\n @ViewChild('signatureRef', {read: ElementRef}) signatureRef: ElementRef;\r\n @ViewChild('ssnRef', {read: ElementRef}) ssnRef: ElementRef;\r\n @ViewChild('iCertifyRef', {read: ElementRef}) iCertifyRef: ElementRef;\r\n @ViewChildren('caseNumberRef ', {read: ElementRef}) caseNumberRefs: QueryList;\r\n // //////////////////////////////////////////////////////////////////\r\n\r\n\r\n page: FreeReducedMealAppPage;\r\n isDesignMode: boolean;\r\n showViewer = false;\r\n showDesigner = false;\r\n config = new EFormConfiguration();\r\n pageTitle = 'Free/Reduced Meal Application';\r\n pageGroups: FreeReducedMealAppPageGroup[] = [];\r\n allPages: FreeReducedMealAppPage[] = [];\r\n selectedStepIndex = 0;\r\n selectedStep: any;\r\n errors: ErrorList[] = [];\r\n isLP = false;\r\n isFP = true;\r\n singlePageMode = true;\r\n subscriptions: Subscription[] = [];\r\n application: FreeReducedMealApp;\r\n designPageIndex: number;\r\n isSigned = false;\r\n // otherStudents: FreeReducedMealAppChild[] = [];\r\n // otherChildren: FreeReducedMealAppChild[] = [];\r\n programs: FreeReducedMealAppProgram[] = [];\r\n childPrograms: FreeReducedMealAppProgram[] = [];\r\n isFosterFamily: boolean = null;\r\n isMckinneyVento: boolean = null;\r\n isMEP: boolean = null;\r\n isRunawayYouth: boolean = null;\r\n frmaPagesEnum = FrmaPagesEnum; // assigned to variable for use in template\r\n frmaProgramsEnum = FrmaProgramsEnum; // assigned to variable for use in template\r\n continueOrSubmit: string;\r\n childIncomeTypes: FreeReducedMealAppChildIncomeType[];\r\n adultIncomeTypes: FreeReducedMealAppAdultIncomeType[];\r\n allAdultIncomeSubTypes: FreeReducedMealAppAdultIncomeSubType[];\r\n adultIncomeSubTypes: FreeReducedMealAppAdultIncomeSubType[];\r\n selectedChild: FreeReducedMealAppChild;\r\n selectedAdult: FreeReducedMealAppAdult;\r\n suffixes: Lookup[];\r\n mealApplicationConfidentiallyWaiverLookups: Lookup[] = [];\r\n isCertified = false;\r\n districtName = '';\r\n familyWarningShown = false;\r\n selectedYear: Year;\r\n mergeFieldTrigger = false;\r\n previousChildrenChecked = false;\r\n previousAdultsChecked = false;\r\n printFlag = false;\r\n eFormViewerInstance: EFormViewerComponent;\r\n originalApplication: FreeReducedMealApp;\r\n appSaved: boolean;\r\n infoSharingColumns = ['ProgramName', 'No', 'Yes', 'Selected'];\r\n unenrolledChildren: FreeReducedMealAppChild[] = [];\r\n unenrolledStudentLabel: string;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private componentFactoryResolver: ComponentFactoryResolver,\r\n private eFormService: EFormService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private frmaService: FreeReducedMealAppService,\r\n private customizationFrameworkService: CustomizationFrameworkService,\r\n private freeReducedMealAppService: FreeReducedMealAppService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private dialog: MatDialog,\r\n private lookupService: LookupService,\r\n private suffixPipe: FrmaSuffixPipe,\r\n private loginService: LoginService,\r\n private spinnerService: SpinnerService,\r\n private checkForErrorsGuard: CheckForErrorsGuard,\r\n private translateService: TranslateService\r\n ) {\r\n if (data) {\r\n this.isDesignMode = data.isDesignMode;\r\n this.singlePageMode = this.data.singlePageMode;\r\n this.page = cloneDeep(data.page);\r\n this.selectedYear = data.selectedYear;\r\n if (data.appData) {\r\n this.application = data.appData;\r\n }\r\n else {\r\n this.application = this.freeReducedMealAppService.sampleData();\r\n this.selectedChild = this.application.Children[0];\r\n this.selectedAdult = this.application.Adults[0];\r\n this.unenrolledChildren = cloneDeep(this.application.Children.filter(o => o.IsStudent && !o.IsEnrolled));\r\n }\r\n }\r\n this.designPageIndex = this.customizationFrameworkService.designPageIndexIncrementor++;\r\n this.districtName = this.loginService.LoginSettings.DistrictName;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.subscriptions.push(this.eFormService.observableMergeFieldsRetrievedStream$.subscribe(o => {\r\n this.updateMergeFieldValues();\r\n }));\r\n this.setConfig();\r\n if (this.singlePageMode) {\r\n if (this.isDesignMode) {\r\n this.showDesigner = true;\r\n }\r\n this.getSuffixes(null);\r\n }\r\n else {\r\n this.getSuffixes(\r\n () => {\r\n this.getFamilyStudents();\r\n this.getFamilyParents();\r\n this.setUpApplication();\r\n }\r\n );\r\n }\r\n this.getPrograms();\r\n this.getChildIncomeTypes();\r\n this.getAdultIncomeTypes();\r\n this.getAdultIncomeSubTypes();\r\n this.getMealWaiverLookups();\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.showDesigner && this.page) {\r\n this.loadDesigner();\r\n }\r\n this.interceptStepChange();\r\n this.loadTemplateControls();\r\n if (this.singlePageMode && !this.isDesignMode) {\r\n this.loadViewer(this.page);\r\n }\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n const templatesToRemove: CustomDataTemplateRef[] = this.eFormService.contentTemplates.filter(template => template.DesignPageIndex == this.designPageIndex || !template.DesignPageIndex);\r\n\r\n templatesToRemove.forEach(templateToRemove => {\r\n const index: number = this.eFormService.contentTemplates.findIndex(template => template.RefName == templateToRemove.RefName);\r\n if (index > -1) {\r\n this.eFormService.contentTemplates.splice(index, 1);\r\n }\r\n });\r\n\r\n this.frmaService.adultIncomeClicks = {};\r\n this.frmaService.adultIncomeSubTypeClicks = {};\r\n this.frmaService.childIncomeClicks = {};\r\n }\r\n\r\n setConfig() {\r\n this.config.CustomFieldsFlag = false;\r\n this.config.ViewMode = enmEFormViewModes.FRMA;\r\n this.config.AllowSaveToDB = false;\r\n this.config.AllowPages = false;\r\n this.config.AllowTabs = false;\r\n this.config.AllowAttachmentControls = false;\r\n this.config.UseInstance = false;\r\n this.config.IsDynamicWidth = true;\r\n if (this.page) {\r\n this.pageTitle = this.page.Name;\r\n this.config.Title = this.page.Name;\r\n }\r\n if (!this.isDesignMode) {\r\n this.config.HideTitle = false;\r\n }\r\n if (this.singlePageMode) {\r\n this.config.AllowConditionalObjects = true;\r\n this.config.IsPreview = true;\r\n }\r\n }\r\n\r\n loadDesigner() {\r\n this.showViewer = false;\r\n this.data.config = this.config;\r\n const allowStudentSpecificMergeFields = this.page.IsSingleChildPage;\r\n const allowAdultSpecificMergeFields = this.page.IsSingleAdultPage;\r\n\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(this.page.FormData);\r\n } catch {\r\n formData = new EFormDataObject();\r\n }\r\n this.eFormService.selectedFormData = formData;\r\n\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(EFormDesignerComponent);\r\n\r\n const viewContainerRef = this.frmaContainer;\r\n viewContainerRef.clear();\r\n this.setPageData(this.page);\r\n const inj = Injector.create({\r\n providers: [\r\n {\r\n provide: MAT_DIALOG_DATA,\r\n useValue: {config: this.config, allowStudentSpecificMergeFields: allowStudentSpecificMergeFields, allowAdultSpecificMergeFields: allowAdultSpecificMergeFields}\r\n }\r\n ]\r\n });\r\n\r\n const componentRef = viewContainerRef.createComponent(componentFactory, 0, inj);\r\n componentRef.instance.closeEvent.pipe(take(1)).subscribe((saveClicked: boolean) => {\r\n if (!saveClicked) {\r\n this.dialogRef.close(false);\r\n }\r\n });\r\n\r\n this.subscriptions.push(componentRef.instance.saveEvent.subscribe((newForm: string) => {\r\n const commentDialog = this.dialog.open(FrmaChangeHistoryCommentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n commentDialog.afterClosed().pipe(take(1)).subscribe(comment => {\r\n this.page.Comment = comment;\r\n this.page.FormData = newForm;\r\n this.frmaService.updateFrmaUserTemplate(this.selectedYear.Id, this.page).subscribe(r => {\r\n this.dialogRef.close(true);\r\n });\r\n });\r\n }));\r\n }\r\n\r\n loadViewer(page: FreeReducedMealAppPage) {\r\n let formData = new EFormDataObject();\r\n try {\r\n formData = JSON.parse(page.FormData);\r\n } catch {\r\n formData = new EFormDataObject();\r\n }\r\n this.eFormService.selectedFormData = formData;\r\n\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(EFormViewerComponent);\r\n\r\n const viewContainerRef = this.frmaContainer;\r\n viewContainerRef.clear();\r\n this.setPageData(page);\r\n const componentRef = viewContainerRef.createComponent(componentFactory);\r\n this.eFormViewerInstance = componentRef.instance;\r\n componentRef.instance.config = this.config;\r\n componentRef.instance.showPrintDiv = this.printFlag;\r\n if (this.printFlag) {\r\n\r\n this.subscriptions.push(componentRef.instance.renderCompleted.subscribe(o => {\r\n if (page.ID == this.frmaPagesEnum.CertifyandSubmit) {\r\n this.renderCompleted();\r\n if (!this.isLP) {\r\n this.changePage(this.getNextPageIndex());\r\n }\r\n this.printFlag = false;\r\n }\r\n else {\r\n this.errors = [];\r\n this.validatePage(page);\r\n if (this.errors.length == 0) {\r\n this.changePage(this.getNextPageIndex());\r\n }\r\n else {\r\n this.printFlag = false;\r\n this.spinnerService.showSpinner = false;\r\n this.loadViewer(page);\r\n }\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(componentRef.instance.renderCompleted.subscribe(o => {\r\n // this.setPageData(page);\r\n }));\r\n }\r\n this.showViewer = true;\r\n }\r\n\r\n async renderCompleted() {\r\n const multiPdfDoc = await PDFDocument.create();\r\n\r\n for (let i = 0; i < this.eFormService.pdfDataURIs.length; i++) {\r\n const pdfDoc = await PDFDocument.load(this.eFormService.pdfDataURIs[i]);\r\n\r\n for (let j = 0; j < pdfDoc.getPageCount(); j++) {\r\n const copiedPage = await multiPdfDoc.copyPages(pdfDoc, [j]);\r\n const [page] = copiedPage;\r\n multiPdfDoc.addPage(page);\r\n }\r\n }\r\n\r\n const pdfBase64 = await multiPdfDoc.saveAsBase64();\r\n\r\n // System.saveFile(pdfBase64, 'pdf', 'FRMA_Test' + '.pdf');\r\n this.application.ApplicationAsPDF = pdfBase64;\r\n\r\n this.spinnerService.showSpinner = false;\r\n\r\n this.saveApp(false);\r\n}\r\n\r\n setUpApplication() {\r\n this.frmaService.getFrmaPageGroups().pipe(take(1)).subscribe(groups => {\r\n this.pageGroups = groups;\r\n this.interceptStepChange();\r\n });\r\n this.frmaService.getFrmaPages(this.selectedYear.Id).pipe(take(1)).subscribe(pages => {\r\n this.allPages = pages;\r\n if (pages) {\r\n this.page = pages[0];\r\n this.setApplicationData();\r\n this.loadViewer(this.page);\r\n }\r\n });\r\n }\r\n\r\n interceptStepChange() {\r\n setTimeout(() => {\r\n if (this.stepper) {\r\n this.stepper.steps.forEach((step: MatStep, idx: number) => {\r\n step.select = () => {\r\n const previousPageIndex = this.getPreviousPageIndex();\r\n const previousPageGroupId = this.allPages[previousPageIndex].PageGroupID;\r\n const previousStepIndex = this.pageGroups.findIndex(o => o.ID == previousPageGroupId);\r\n if (idx < this.selectedStepIndex && idx <= previousStepIndex) {\r\n this.errors = [];\r\n this.validatePage(this.page);\r\n if (this.errors.length == 0) {\r\n const group = this.pageGroups[idx];\r\n const newPageIndex = this.allPages.findIndex(o => o.PageGroupID == group.ID);\r\n this.changePage(newPageIndex);\r\n }\r\n }\r\n };\r\n });\r\n }\r\n }, 0);\r\n }\r\n\r\n changePage(newPageIndex: number) {\r\n const nextPage = this.allPages[newPageIndex];\r\n if (nextPage.PageGroupID != this.page.PageGroupID) {\r\n const groupIndex = this.pageGroups.findIndex(o => o.ID == nextPage.PageGroupID);\r\n this.selectedStepIndex = groupIndex;\r\n }\r\n this.page = nextPage;\r\n if (newPageIndex == 0) {\r\n this.isFP = true;\r\n }\r\n else {\r\n this.isFP = false;\r\n }\r\n if (this.allPages.length == newPageIndex + 1) {\r\n this.isLP = true;\r\n }\r\n else {\r\n this.isLP = false;\r\n }\r\n this.loadViewer(this.page);\r\n }\r\n\r\n loadTemplateControls() {\r\n if (!this.eFormService.contentTemplates) {\r\n this.eFormService.contentTemplates = [];\r\n }\r\n this.customTemplateList.forEach(refName => {\r\n if (this.designPageIndex) {\r\n this.eFormService.contentTemplates.push(this.generateCustomDataTemplateRef(refName));\r\n }\r\n });\r\n }\r\n\r\n generateCustomDataTemplateRef(refName: string): CustomDataTemplateRef {\r\n const ref = new CustomDataTemplateRef();\r\n ref.TemplateRef = this[refName];\r\n ref.RefName = refName;\r\n ref.DesignPageIndex = this.designPageIndex;\r\n return ref;\r\n }\r\n\r\n // #region Data Methods\r\n getFamilyStudents() {\r\n this.freeReducedMealAppService.getFRMAStudentsByFamilyId(this.selectedYear.Id, this.application.FamilyID).pipe(take(1)).subscribe(students => {\r\n if (this.freeReducedMealAppService.checkForStudentChange(this.application, students)) {\r\n // student was enrolled or withdrawn since application was started, must create new application\r\n this.showFamilyChangedWarning();\r\n }\r\n else {\r\n students.forEach(s => {\r\n if (this.application.ID > 0) {\r\n // mark unenrolled students\r\n let frmaChild = this.application.Children.find(o => o.StudentID == s.Id);\r\n if (frmaChild) {\r\n if (!s.EnrollDate) {\r\n frmaChild.IsEnrolled = false;\r\n const childCopy = cloneDeep(frmaChild);\r\n childCopy.isSelected = true;\r\n this.unenrolledChildren.push(childCopy);\r\n }\r\n else {\r\n frmaChild.IsEnrolled = true;\r\n }\r\n }\r\n else if (!s.EnrollDate) {\r\n frmaChild = new FreeReducedMealAppChild();\r\n if (this.suffixes) {\r\n const suffix = this.suffixes.find(sfx => sfx.CodeDescription == s.Suffix);\r\n if (suffix) {\r\n frmaChild.SuffixID = parseInt(suffix.Id, 10);\r\n }\r\n }\r\n frmaChild.FirstName = s.FirstName;\r\n frmaChild.LastName = s.LastName;\r\n frmaChild.MiddleName = s.MiddleName;\r\n frmaChild.StudentID = s.Id;\r\n frmaChild.IsStudent = true;\r\n frmaChild.IsEnrolled = false;\r\n this.unenrolledChildren.push(frmaChild);\r\n }\r\n }\r\n else {\r\n // set up new application\r\n const frmaChild = new FreeReducedMealAppChild();\r\n if (this.suffixes) {\r\n const suffix = this.suffixes.find(sfx => sfx.CodeDescription == s.Suffix);\r\n if (suffix) {\r\n frmaChild.SuffixID = parseInt(suffix.Id, 10);\r\n }\r\n }\r\n frmaChild.FirstName = s.FirstName;\r\n frmaChild.LastName = s.LastName;\r\n frmaChild.MiddleName = s.MiddleName;\r\n frmaChild.StudentID = s.Id;\r\n frmaChild.IsStudent = true;\r\n if (!s.EnrollDate) {\r\n frmaChild.IsEnrolled = false;\r\n this.unenrolledChildren.push(frmaChild);\r\n }\r\n else {\r\n this.application.Children.push(frmaChild);\r\n }\r\n }\r\n });\r\n this.originalApplication = cloneDeep(this.application);\r\n }\r\n });\r\n }\r\n\r\n getFamilyParents() {\r\n this.studentService.getHouseholdParentsByFamilyID(this.application.FamilyID).pipe(take(1)).subscribe(parents => {\r\n if (this.freeReducedMealAppService.checkForParentChange(this.application, parents)) {\r\n // parent was added or removed since application was started, must start new application\r\n this.showFamilyChangedWarning();\r\n }\r\n else {\r\n parents.forEach(p => {\r\n if (!this.application.Adults.find(o => o.PeopleID == p.Id)) {\r\n // set up new application\r\n const newParent = new FreeReducedMealAppAdult();\r\n if (this.suffixes) {\r\n const suffix = this.suffixes.find(sfx => sfx.CodeDescription == p.Suffix);\r\n if (suffix) {\r\n newParent.SuffixID = parseInt(suffix.Id, 10);\r\n }\r\n }\r\n newParent.FirstName = p.FirstName;\r\n newParent.LastName = p.LastName;\r\n newParent.MiddleName = p.MiddleName;\r\n newParent.PeopleID = p.Id;\r\n this.application.Adults.push(newParent);\r\n }\r\n });\r\n this.originalApplication = cloneDeep(this.application);\r\n }\r\n });\r\n }\r\n\r\n getSuffixes(callback: Function) {\r\n this.lookupService.getSuffixLookup('').pipe(take(1)).subscribe(suffixes => {\r\n this.suffixes = suffixes;\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n getPrograms() {\r\n this.frmaService.getFrmaPrograms().pipe(take(1)).subscribe(programs => {\r\n this.programs = programs;\r\n const householdPrograms = programs.filter(o => o.IsHouseholdProgram);\r\n this.childPrograms = programs.filter(o => o.IsChildProgram);\r\n householdPrograms.forEach(p => {\r\n if (!this.application.Programs.find(o => o.ProgramID == p.ID)) {\r\n const program = new FreeReducedMealAppHouseholdProgram();\r\n program.ProgramID = p.ID;\r\n program.Selected = undefined;\r\n this.application.Programs.push(program);\r\n }\r\n });\r\n this.normalizeChildPrograms();\r\n });\r\n }\r\n\r\n normalizeChildPrograms() {\r\n this.application.Children.forEach(child => {\r\n if (!child.Programs) {\r\n child.Programs = [];\r\n }\r\n this.childPrograms.forEach(p => {\r\n if (!child.Programs.find(o => o.ProgramID == p.ID)) {\r\n const program = new FreeReducedMealAppChildProgram();\r\n program.ProgramID = p.ID;\r\n if (this.isDesignMode && this.page.ID == this.frmaPagesEnum.ContinueorSubmit) {\r\n program.Selected = true;\r\n }\r\n else {\r\n program.Selected = undefined;\r\n }\r\n child.Programs.push(program);\r\n }\r\n });\r\n });\r\n this.originalApplication = cloneDeep(this.application);\r\n }\r\n\r\n getChildIncomeTypes() {\r\n this.frmaService.getFrmaChildIncomeTypes().pipe(take(1)).subscribe(incomeTypes => {\r\n this.childIncomeTypes = incomeTypes;\r\n });\r\n }\r\n\r\n getAdultIncomeTypes() {\r\n this.frmaService.getFrmaAdultIncomeTypes().pipe(take(1)).subscribe(incomeTypes => {\r\n this.adultIncomeTypes = incomeTypes;\r\n });\r\n }\r\n\r\n getAdultIncomeSubTypes() {\r\n this.frmaService.getFrmaAdultIncomeSubTypes().pipe(take(1)).subscribe(incomeTypes => {\r\n this.allAdultIncomeSubTypes = incomeTypes;\r\n this.filterAdultIncomeSubTypes(this.page);\r\n });\r\n }\r\n\r\n getMealWaiverLookups() {\r\n this.lookupService.getMealApplicationConfidentiallyWaiverLookups().pipe(take(1)).subscribe(lookups => {\r\n this.mealApplicationConfidentiallyWaiverLookups = lookups;\r\n this.normalizeMealWaiverPrograms();\r\n });\r\n }\r\n\r\n normalizeMealWaiverPrograms() {\r\n if (this.application && this.mealApplicationConfidentiallyWaiverLookups) {\r\n const initialPrograms = this.application.InfoSharing ? cloneDeep(this.application.InfoSharing) : [];\r\n this.application.InfoSharing = [];\r\n sortBy(this.mealApplicationConfidentiallyWaiverLookups, 'Sequence').forEach(program => {\r\n if (!isNaN(Number(program.Id))) {\r\n const p = initialPrograms.find(o => o.WaiverProgramID == Number(program.Id));\r\n if (p) {\r\n p.ProgramName = program.CodeDescription;\r\n this.application.InfoSharing.push(p);\r\n }\r\n else {\r\n const newProgram = new FreeReducedMealAppInfoSharing();\r\n newProgram.ProgramName = program.CodeDescription;\r\n newProgram.WaiverProgramID = Number(program.Id);\r\n newProgram.AppID = this.application.ID;\r\n newProgram.StudentIds = [];\r\n this.application.InfoSharing.push(newProgram);\r\n }\r\n }\r\n });\r\n }\r\n this.originalApplication = cloneDeep(this.application);\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n validatePage(page: FreeReducedMealAppPage) {\r\n this.markAsTouched();\r\n switch (page.ID) {\r\n case FrmaPagesEnum.Signature: {\r\n if (!this.isSigned && (!this.application.SignedBy || this.application.SignedBy <= 0)) {\r\n this.errors.push({\r\n fieldName: 'Electronic Signature',\r\n fieldRef: this.signatureRef,\r\n errorMsg: 'must be checked.'\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.AssistancePrograms: {\r\n let refIndex = 0;\r\n for (let i = 0; i < this.application.Programs.length; i++) {\r\n const program = this.application.Programs[i];\r\n if (program.Selected) {\r\n const elementRef = this.caseNumberRefs.find((_, e) => e == i);\r\n refIndex++;\r\n if (!program.CaseNumber) {\r\n const p = this.programs.find(o => o.ID == program.ProgramID);\r\n this.errors.push({\r\n fieldName: p.ShortName + ' Case Number',\r\n fieldRef: elementRef,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.FosterCare: {\r\n if (this.isFosterFamily == null) {\r\n this.errors.push({\r\n fieldName: 'Foster Care',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else if (this.isFosterFamily && this.application.Children.find(o => o.IsFosterChild) == null) {\r\n this.errors.push({\r\n fieldName: 'Foster Care',\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected.'\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.YourChildrenCanAlsoQualify: {\r\n if (this.isMckinneyVento == null) {\r\n this.errors.push({\r\n fieldName: 'McKinney-Vento',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else if (this.isMckinneyVento && this.application.Children.find(c => c.Programs.find(p => p.ProgramID == FrmaProgramsEnum.McKinneyVento && p.Selected)) == null) {\r\n this.errors.push({\r\n fieldName: 'McKinney-Vento',\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected.'\r\n });\r\n }\r\n if (this.isMEP == null) {\r\n this.errors.push({\r\n fieldName: 'MEP',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else if (this.isMEP && this.application.Children.find(c => c.Programs.find(p => p.ProgramID == FrmaProgramsEnum.MEP && p.Selected)) == null) {\r\n this.errors.push({\r\n fieldName: 'MEP',\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected.'\r\n });\r\n }\r\n if (this.isRunawayYouth == null) {\r\n this.errors.push({\r\n fieldName: 'Runaway Youth',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else if (this.isRunawayYouth && this.application.Children.find(c => c.Programs.find(p => p.ProgramID == FrmaProgramsEnum.RunawayYouth && p.Selected)) == null) {\r\n this.errors.push({\r\n fieldName: 'Runaway Youth',\r\n fieldRef: null,\r\n errorMsg: 'At least one student must be selected.'\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.ContinueorSubmit: {\r\n if (!this.continueOrSubmit) {\r\n this.errors.push({\r\n fieldName: 'Do you want to',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.TheNextFewQuestionsAreAboutYourChildrensIncome: {\r\n this.application.Children.forEach(child => {\r\n if (child.HasIncome == null) {\r\n this.errors.push({\r\n fieldName: 'Does ' + this.frmaService.formatName(child.FirstName, child.MiddleName, child.LastName, this.suffixPipe.transform(child.SuffixID, this.suffixes)) + ' have income',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n });\r\n break;\r\n }\r\n case FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources: {\r\n if (this.selectedChild) {\r\n if (!this.application.ID || this.application.ID <= 0 || !this.frmaService.pageHasBeenCompleted(this.application, page, this.selectedChild, this.selectedAdult)) {\r\n this.childIncomeTypes.forEach(type => {\r\n if (!this.selectedChild.Income.find(o => o.ChildIncomeTypeID == type.ID)) {\r\n const dict = this.frmaService.childIncomeClicks[this.selectedChild.ID];\r\n if (!dict || dict[type.ID] == null) {\r\n this.errors.push({\r\n fieldName: type.ShortName,\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n if (this.selectedChild.Income.length == 0) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'On a previous page, you indicated that ' + this.frmaService.formatName(this.selectedChild.FirstName, this.selectedChild.MiddleName, this.selectedChild.LastName, this.suffixPipe.transform(this.selectedChild.SuffixID, this.suffixes)) + ' receives income. Please enter this income above or correct your previous answer.'\r\n });\r\n }\r\n else {\r\n this.selectedChild.Income.forEach(i => {\r\n if (!i.Amount) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getChildIncomeElementRef(i, 'amount'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else {\r\n if (isNaN(Number(i.Amount))) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getChildIncomeElementRef(i, 'amount'),\r\n errorMsg: 'must be a number.'\r\n });\r\n }\r\n else if (i.Amount <= 0) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getChildIncomeElementRef(i, 'amount'),\r\n errorMsg: 'must be greater than zero.'\r\n });\r\n }\r\n }\r\n if (!i.Frequency) {\r\n this.errors.push({\r\n fieldName: 'Frequency',\r\n fieldRef: this.getChildIncomeElementRef(i, 'frequency'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n if (i.Frequency == 'hourly') {\r\n if (!i.Hours) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getChildIncomeElementRef(i, 'hours'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else {\r\n if (isNaN(Number(i.Hours))) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getChildIncomeElementRef(i, 'hours'),\r\n errorMsg: 'must be a number.'\r\n });\r\n }\r\n else if (i.Hours <= 0) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getChildIncomeElementRef(i, 'hours'),\r\n errorMsg: 'must be greater than zero.'\r\n });\r\n }\r\n else {\r\n let maxHours = 744; // max hours in a month\r\n if (i.Per == 'Week') {\r\n maxHours = 168;\r\n }\r\n if (i.Hours > maxHours) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getChildIncomeElementRef(i, 'hours'),\r\n errorMsg: 'Please enter a valid number of hours.'\r\n });\r\n }\r\n }\r\n }\r\n if (!i.Per) {\r\n this.errors.push({\r\n fieldName: 'Per',\r\n fieldRef: this.getChildIncomeElementRef(i, 'per'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.TheNextQuestionsAreAllAboutNameOfAdult: {\r\n if (this.selectedAdult && (!this.application.ID || this.application.ID <= 0 || !this.frmaService.pageHasBeenCompleted(this.application, page, this.selectedChild, this.selectedAdult))) {\r\n this.adultIncomeTypes.forEach(o => {\r\n if (!this.selectedAdult.IncomeTypeIds.includes(o.ID)) {\r\n const dict = this.frmaService.adultIncomeClicks[this.selectedAdult.ID];\r\n if (!dict || dict[o.ID] == null) {\r\n this.errors.push({\r\n fieldName: o.Question.replace('<>', this.frmaService.formatName(this.selectedAdult.FirstName, this.selectedAdult.MiddleName, this.selectedAdult.LastName, this.suffixPipe.transform(this.selectedAdult.SuffixID, this.suffixes))),\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.MilitaryIncome: {\r\n if (this.selectedAdult.IsDeployed == null) {\r\n this.errors.push({\r\n fieldName: 'Is ' + this.frmaService.formatName(this.selectedAdult.FirstName, this.selectedAdult.MiddleName, this.selectedAdult.LastName, this.suffixPipe.transform(this.selectedAdult.SuffixID, this.suffixes)) + ' currently deployed?',\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n if (!this.application.ID || this.application.ID <= 0 || !this.frmaService.pageHasBeenCompleted(this.application, page, this.selectedChild, this.selectedAdult)) {\r\n const dict = this.frmaService.adultIncomeSubTypeClicks[this.selectedAdult.ID];\r\n const subTypes = this.adultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == this.frmaService.getAdultIncomeTypeByPage(page.ID));\r\n subTypes.forEach(t => {\r\n if (!this.selectedAdult.Income.find(o => o.AdultIncomeSubTypeID == t.ID)) {\r\n if (!dict || dict[t.ID] == null) {\r\n this.errors.push({\r\n fieldName: t.Name,\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n this.validateAdultIncome(this.selectedAdult.Income, page.ID);\r\n break;\r\n }\r\n case FrmaPagesEnum.EarningsFromWork:\r\n case FrmaPagesEnum.IncomeFromPublicAssistance:\r\n case FrmaPagesEnum.IncomeFromAlimonyorChildSupport:\r\n case FrmaPagesEnum.IncomeFromBenefits:\r\n case FrmaPagesEnum.RetirementIncome:\r\n case FrmaPagesEnum.OtherSourcesofIncome:\r\n if (!this.application.ID || this.application.ID <= 0 || !this.frmaService.pageHasBeenCompleted(this.application, page, this.selectedChild, this.selectedAdult)) {\r\n const dict = this.frmaService.adultIncomeSubTypeClicks[this.selectedAdult.ID];\r\n const subTypes = this.adultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == this.frmaService.getAdultIncomeTypeByPage(page.ID));\r\n subTypes.forEach(t => {\r\n if (!this.selectedAdult.Income.find(o => o.AdultIncomeSubTypeID == t.ID)) {\r\n if (!dict || dict[t.ID] == null) {\r\n this.errors.push({\r\n fieldName: t.Name,\r\n fieldRef: null,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n this.validateAdultIncome(this.selectedAdult.Income, page.ID);\r\n break;\r\n case FrmaPagesEnum.AlmostDone: {\r\n if (!this.application.NoSSN) {\r\n if (!this.application.LastFourSSN) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'You must either provide the four digits or check No SSN.'\r\n });\r\n }\r\n else if (this.application.LastFourSSN.length != 4) {\r\n this.errors.push({\r\n fieldName: 'Last Four Digits',\r\n fieldRef: this.ssnRef,\r\n errorMsg: 'Please provide only the last four digits of the Social Security number.'\r\n });\r\n }\r\n else if (isNaN(Number(this.application.LastFourSSN))) {\r\n this.errors.push({\r\n fieldName: 'Last Four Digits',\r\n fieldRef: this.ssnRef,\r\n errorMsg: 'Please provide only the last four digits of the Social Security number.'\r\n });\r\n }\r\n }\r\n else if (this.application.LastFourSSN) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'Do not check No SSN if you have provided the last four digits of your Social Security number.'\r\n });\r\n }\r\n break;\r\n }\r\n case FrmaPagesEnum.SharingInformationwithOtherPrograms: {\r\n this.application.InfoSharing.forEach(o => {\r\n if (!o.ShareWith) {\r\n this.errors.push({\r\n fieldName: this.formatErrorFieldname(o.ProgramName),\r\n fieldRef: null,\r\n errorMsg: 'Yes or No must be selected.'\r\n });\r\n }\r\n else if (o.ShareWith == 'selected' && (!o.StudentIds || o.StudentIds.length == 0)) {\r\n this.errors.push({\r\n fieldName: this.formatErrorFieldname(o.ProgramName),\r\n fieldRef: null,\r\n errorMsg: 'Select at least one student.'\r\n });\r\n }\r\n });\r\n break;\r\n }\r\n case FrmaPagesEnum.CertifyandSubmit: {\r\n if (!this.isCertified && (!this.application.CertifiedBy || this.application.CertifiedBy <= 0)) {\r\n this.errors.push({\r\n fieldName: 'I certify...',\r\n fieldRef: this.iCertifyRef,\r\n errorMsg: 'must be checked before the application can be submitted.'\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n markAsTouched() {\r\n if (this.eFormViewerInstance) {\r\n this.eFormViewerInstance.validateButton.nativeElement.click();\r\n }\r\n this.adultIncomeDetails.forEach(o => {\r\n o.markAsTouched();\r\n });\r\n this.childIncomeDetails.forEach(o => {\r\n o.markAsTouched();\r\n });\r\n this.forms.forEach(form => {\r\n Object.keys((form.form).controls).forEach(control => {\r\n form.form.get(control).markAsTouched();\r\n });\r\n });\r\n }\r\n\r\n formatErrorFieldname(fieldName: string): string {\r\n if (fieldName.length > 15) {\r\n return fieldName.substring(0, 15) + '...';\r\n }\r\n else {\r\n return fieldName;\r\n }\r\n }\r\n\r\n setApplicationData() {\r\n if (this.application) {\r\n if (this.application.SignedBy > 0) {\r\n this.isSigned = true;\r\n }\r\n if (this.application.Children && this.application.Children.length > 0) {\r\n this.isFosterFamily = this.application.Children.find(o => o.IsFosterChild) != null;\r\n this.isMckinneyVento = this.application.Children.find(o => o.Programs.find(p => p.ProgramID == FrmaProgramsEnum.McKinneyVento && p.Selected)) != null;\r\n this.isMEP = this.application.Children.find(o => o.Programs.find(p => p.ProgramID == FrmaProgramsEnum.MEP && p.Selected)) != null;\r\n this.isRunawayYouth = this.application.Children.find(o => o.Programs.find(p => p.ProgramID == FrmaProgramsEnum.RunawayYouth && p.Selected)) != null;\r\n const fosterPage = this.allPages.find(o => o.ID == this.frmaPagesEnum.FosterCare);\r\n const programPage = this.allPages.find(o => o.ID == this.frmaPagesEnum.YourChildrenCanAlsoQualify);\r\n if (!this.isFosterFamily && (!fosterPage || !this.frmaService.pageHasBeenCompleted(this.application, fosterPage, this.selectedChild, this.selectedAdult))) {\r\n this.isFosterFamily = null;\r\n }\r\n if (!programPage || !this.frmaService.pageHasBeenCompleted(this.application, programPage, this.selectedChild, this.selectedAdult)) {\r\n if (!this.isMckinneyVento) {\r\n this.isMckinneyVento = null;\r\n }\r\n if (!this.isMEP) {\r\n this.isMEP = null;\r\n }\r\n if (!this.isRunawayYouth) {\r\n this.isRunawayYouth = null;\r\n }\r\n }\r\n this.application.Children.forEach(child => {\r\n const childIncomePage = this.allPages.find(o => o.ID == this.frmaPagesEnum.TheNextFewQuestionsAreAboutYourChildrensIncome);\r\n if (!child.HasIncome && (!childIncomePage || !this.frmaService.pageHasBeenCompleted(this.application, childIncomePage, child, null))) {\r\n child.HasIncome = null;\r\n }\r\n });\r\n }\r\n if (this.application.CertifiedBy > 0) {\r\n this.isCertified = true;\r\n }\r\n }\r\n this.originalApplication = cloneDeep(this.application);\r\n }\r\n\r\n // setOtherStudents() {\r\n // this.otherStudents = this.application.Children.filter(o => o.IsStudent && !o.StudentID);\r\n // this.otherChildren = this.application.Children.filter(o => !o.IsStudent);\r\n // }\r\n\r\n getChildIncomeElementRef(i: FreeReducedMealAppChildIncome, field: string): ElementRef {\r\n const details = this.childIncomeDetails.find(o => o.childIncomeType.ID == i.ChildIncomeTypeID);\r\n if (details) {\r\n return details.getElementReference(i, field);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n getAdultIncomeElementRef(i: FreeReducedMealAppAdultIncome, field: string): ElementRef {\r\n const details = this.adultIncomeDetails.find(o => o.adultIncomeSubType.ID == i.AdultIncomeSubTypeID);\r\n if (details) {\r\n return details.getElementReference(i, field);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n\r\n validateAdultIncome(adultIncome: FreeReducedMealAppAdultIncome[], pageId: FrmaPagesEnum) {\r\n const subTypeIds = this.adultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == this.frmaService.getAdultIncomeTypeByPage(pageId)).map(o => o.ID);\r\n const filteredIncome = adultIncome.filter(o => subTypeIds.includes(o.AdultIncomeSubTypeID));\r\n if (filteredIncome.length == 0) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'On a previous page, you indicated ' + this.frmaService.formatName(this.selectedAdult.FirstName, this.selectedAdult.MiddleName, this.selectedAdult.LastName, this.suffixPipe.transform(this.selectedAdult.SuffixID, this.suffixes)) + ' receives income from one of the above sources. Please enter this income or correct your previous answer.'\r\n });\r\n }\r\n else {\r\n filteredIncome.forEach(i => {\r\n if (!i.Amount) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'amount'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else {\r\n if (isNaN(Number(i.Amount))) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'amount'),\r\n errorMsg: 'must be a number.'\r\n });\r\n }\r\n else if (i.Amount <= 0) {\r\n this.errors.push({\r\n fieldName: 'Amount',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'amount'),\r\n errorMsg: 'must be greater than zero.'\r\n });\r\n }\r\n }\r\n if (!i.Frequency) {\r\n this.errors.push({\r\n fieldName: 'Frequency',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'frequency'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n if (i.Frequency == 'hourly') {\r\n if (!i.Hours) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'hours'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n else {\r\n if (isNaN(Number(i.Hours))) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'hours'),\r\n errorMsg: 'must be a number.'\r\n });\r\n }\r\n else if (i.Hours <= 0) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'hours'),\r\n errorMsg: 'must be greater than zero.'\r\n });\r\n }\r\n else {\r\n let maxHours = 744; // max hours in a month\r\n if (i.Per == 'Week') {\r\n maxHours = 168;\r\n }\r\n if (i.Hours > maxHours) {\r\n this.errors.push({\r\n fieldName: 'Hours',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'hours'),\r\n errorMsg: 'Please enter a valid number of hours.'\r\n });\r\n }\r\n }\r\n }\r\n if (!i.Per) {\r\n this.errors.push({\r\n fieldName: 'Per',\r\n fieldRef: this.getAdultIncomeElementRef(i, 'per'),\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n setPageData(page: FreeReducedMealAppPage) {\r\n this.filterAdultIncomeSubTypes(page);\r\n this.updateMergeFieldValues();\r\n this.checkForPreviousChildren();\r\n this.checkForPreviousAdults();\r\n this.setInfoSharingColumns();\r\n this.setUnenrolledStudentLabel();\r\n }\r\n\r\n updateMergeFieldValues() {\r\n if (this.selectedChild) {\r\n const mergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n if (mergeField) {\r\n mergeField.Value = this.frmaService.formatName(this.selectedChild.FirstName, this.selectedChild.MiddleName, this.selectedChild.LastName, this.suffixPipe.transform(this.selectedChild.SuffixID, this.suffixes));\r\n }\r\n }\r\n if (this.selectedAdult) {\r\n const mergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n if (mergeField) {\r\n mergeField.Value = this.frmaService.formatName(this.selectedAdult.FirstName, this.selectedAdult.MiddleName, this.selectedAdult.LastName, this.suffixPipe.transform(this.selectedAdult.SuffixID, this.suffixes));\r\n }\r\n }\r\n const districtMergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n if (districtMergeField) {\r\n districtMergeField.Value = this.loginService.LoginSettings.DistrictName;\r\n }\r\n const yearMergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n if (yearMergeField) {\r\n yearMergeField.Value = this.selectedYear.Description;\r\n }\r\n this.mergeFieldTrigger = !this.mergeFieldTrigger;\r\n }\r\n\r\n filterAdultIncomeSubTypes(page: FreeReducedMealAppPage) {\r\n this.adultIncomeSubTypes = [];\r\n if (page && this.allAdultIncomeSubTypes) {\r\n switch (page.ID) {\r\n case FrmaPagesEnum.MilitaryIncome:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.Military);\r\n break;\r\n case FrmaPagesEnum.EarningsFromWork:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.Employment);\r\n break;\r\n case FrmaPagesEnum.IncomeFromPublicAssistance:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.PublicAssistance);\r\n break;\r\n case FrmaPagesEnum.IncomeFromAlimonyorChildSupport:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.AlimonyChildSupport);\r\n break;\r\n case FrmaPagesEnum.IncomeFromBenefits:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.Benefits);\r\n break;\r\n case FrmaPagesEnum.RetirementIncome:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.Retirement);\r\n break;\r\n case FrmaPagesEnum.OtherSourcesofIncome:\r\n this.adultIncomeSubTypes = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == FrmaAdultIncomeTypesEnum.Other);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n setSelectedChild(child: FreeReducedMealAppChild) {\r\n this.selectedChild = child;\r\n // const mergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n // if (mergeField) {\r\n // mergeField.Value = this.frmaService.formatName(child.FirstName, child.MiddleName, child.LastName, this.suffixPipe.transform(child.SuffixID, this.suffixes));\r\n // }\r\n }\r\n\r\n setSelectedAdult(adult: FreeReducedMealAppAdult) {\r\n this.selectedAdult = adult;\r\n // const mergeField = this.eFormService.mergeFields.find(o => o.FieldName == '<>' && o.UseOnFRMA);\r\n // if (mergeField) {\r\n // mergeField.Value = this.frmaService.formatName(adult.FirstName, adult.MiddleName, adult.LastName, this.suffixPipe.transform(adult.SuffixID, this.suffixes));\r\n // }\r\n }\r\n\r\n showFamilyChangedWarning() {\r\n if (!this.familyWarningShown) {\r\n this.familyWarningShown = true;\r\n const warningDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n const firstBlock = marker('The members of your household have changed since you started this application, so it cannot be edited.').toString();\r\n const secondBlock = marker('You will need to start a new application.').toString();\r\n const title = marker('UNABLE TO EDIT').toString();\r\n warningDialog.componentInstance.headerLabel = title;\r\n warningDialog.componentInstance.confirmMessage = firstBlock;\r\n warningDialog.componentInstance.secondMessage = secondBlock;\r\n warningDialog.componentInstance.warning = true;\r\n warningDialog.componentInstance.headerCenterAlign = true;\r\n warningDialog.componentInstance.informational = true;\r\n warningDialog.afterClosed().pipe(take(1)).subscribe(() => {\r\n this.dialogRef.close(false);\r\n });\r\n }\r\n }\r\n\r\n setCompletedPage(page: FreeReducedMealAppPage) {\r\n const completedPage = new FreeReducedMealAppCompletedPage();\r\n completedPage.PageID = page.ID;\r\n if (page.IsSingleChildPage && this.selectedChild) {\r\n completedPage.ChildID = this.selectedChild.ID;\r\n }\r\n if (page.IsSingleAdultPage && this.selectedAdult) {\r\n completedPage.AdultID = this.selectedAdult.ID;\r\n }\r\n if (this.application.CompletedPages.find(o => o.PageID == completedPage.PageID && o.ChildID == completedPage.ChildID && o.AdultID == completedPage.AdultID) == null) {\r\n this.application.CompletedPages.push(completedPage);\r\n }\r\n }\r\n\r\n checkForPreviousChildren() {\r\n if (this.page.ID == this.frmaPagesEnum.OtherChildrenInTheHousehold && !this.previousChildrenChecked && !this.frmaService.pageHasBeenCompleted(this.application, this.page, this.selectedChild, this.selectedAdult)) {\r\n this.frmaService.getFrmaPreviousChildren(this.application.FamilyID, this.selectedYear.Id).pipe(take(1)).subscribe(children => {\r\n if (children) {\r\n const previousChildren: FreeReducedMealAppChild[] = [];\r\n children.forEach(c => {\r\n if (!this.application.Children.find(o => o.FirstName == c.FirstName && o.MiddleName == c.MiddleName && o.LastName == c.LastName && o.SuffixID == c.SuffixID)) {\r\n c.ID = FreeReducedMealAppPerson.frmaPersonIncrementor--;\r\n previousChildren.push(c);\r\n }\r\n });\r\n if (previousChildren.length > 0) {\r\n const dialogBox = this.dialog.open(FrmaPreviousPersonSelectorComponent, {\r\n disableClose: true,\r\n width: '450px',\r\n data: {\r\n previousPeople: previousChildren,\r\n suffixes: this.suffixes,\r\n isChildren: true\r\n }\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((selectedChildren: FreeReducedMealAppChild[]) => {\r\n this.previousChildrenChecked = true;\r\n if (selectedChildren && selectedChildren.length > 0) {\r\n selectedChildren.forEach(selectedChild => {\r\n this.application.Children.push(selectedChild);\r\n });\r\n this.application.Children = cloneDeep(this.application.Children); // reassign for change detection\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n checkForPreviousAdults() {\r\n if (this.page.ID == this.frmaPagesEnum.WhatAdultsLiveInYourHousehold && !this.previousAdultsChecked && !this.frmaService.pageHasBeenCompleted(this.application, this.page, this.selectedChild, this.selectedAdult)) {\r\n this.frmaService.getFrmaPreviousAdults(this.application.FamilyID, this.selectedYear.Id).pipe(take(1)).subscribe(adults => {\r\n if (adults) {\r\n const previousAdults: FreeReducedMealAppAdult[] = [];\r\n adults.forEach(c => {\r\n if (!this.application.Adults.find(o => o.FirstName == c.FirstName && o.MiddleName == c.MiddleName && o.LastName == c.LastName && o.SuffixID == c.SuffixID)) {\r\n c.ID = FreeReducedMealAppPerson.frmaPersonIncrementor--;\r\n previousAdults.push(c);\r\n }\r\n });\r\n if (previousAdults.length > 0) {\r\n const dialogBox = this.dialog.open(FrmaPreviousPersonSelectorComponent, {\r\n disableClose: true,\r\n width: '450px',\r\n data: {\r\n previousPeople: previousAdults,\r\n suffixes: this.suffixes,\r\n isAdults: true\r\n }\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((selectedAdults: FreeReducedMealAppAdult[]) => {\r\n this.previousAdultsChecked = true;\r\n if (selectedAdults && selectedAdults.length > 0) {\r\n selectedAdults.forEach(selectedAdult => {\r\n this.application.Adults.push(selectedAdult);\r\n });\r\n this.application.Adults = cloneDeep(this.application.Adults); // reassign for change detection\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n setInfoSharingColumns() {\r\n if (this.page.ID == this.frmaPagesEnum.SharingInformationwithOtherPrograms) {\r\n if (this.application.Children && this.application.Children.filter(o => o.IsStudent && o.StudentID > 0).length > 1) {\r\n this.infoSharingColumns = ['ProgramName', 'No', 'Yes', 'Selected'];\r\n }\r\n else {\r\n this.infoSharingColumns = ['ProgramName', 'No', 'Yes'];\r\n }\r\n }\r\n }\r\n\r\n setUnenrolledStudentLabel() {\r\n if (this.page.ID == this.frmaPagesEnum.StudentsInTheHousehold && !this.unenrolledStudentLabel) {\r\n const translated = this.translateService.instant('Our records also show other children associated with your household who are not currently enrolled for {1}.
Please select any of these who will be attending {2} in {1}:');\r\n this.unenrolledStudentLabel = translated.replace(/\\{1\\}/g, '<<Selected Year>>').replace('{2}', '<<District Name>>');\r\n }\r\n }\r\n // #endregion\r\n\r\n // #region Footer Methods\r\n addChildClick(isStudent: boolean) {\r\n const dialogBox = this.dialog.open(FrmaAddPersonComponent, {\r\n disableClose: true,\r\n data: {\r\n isStudent: isStudent,\r\n title: isStudent ? 'Add Student' : 'Add Child'\r\n }\r\n });\r\n\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((newChild: FreeReducedMealAppChild) => {\r\n if (newChild) {\r\n newChild.Income = [];\r\n newChild.Programs = [];\r\n this.application.Children.push(newChild);\r\n this.application.Children = cloneDeep(this.application.Children); // reassign as new object for change detection\r\n this.normalizeChildPrograms();\r\n }\r\n });\r\n }\r\n\r\n addAdultClick() {\r\n const dialogBox = this.dialog.open(FrmaAddPersonComponent, {\r\n disableClose: true,\r\n data: {\r\n title: 'Add Adult'\r\n }\r\n });\r\n\r\n dialogBox.afterClosed().pipe(take(1)).subscribe((newAdult: FreeReducedMealAppAdult) => {\r\n if (newAdult) {\r\n newAdult.Income = [];\r\n newAdult.IncomeTypeIds = [];\r\n this.application.Adults.push(newAdult);\r\n this.application.Adults = cloneDeep(this.application.Adults); // reassign as new object for change detection\r\n }\r\n });\r\n }\r\n\r\n previousClick() {\r\n this.errors = [];\r\n this.changePage(this.getPreviousPageIndex());\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n getPreviousPageIndex(): number {\r\n const currentIndex = this.allPages.findIndex(o => o.ID == this.page.ID);\r\n let nextIndex = currentIndex - 1;\r\n switch (this.page.ID) {\r\n case FrmaPagesEnum.UseofInformationUSDANonDescrimination:\r\n if (this.application.Programs.find(o => o.Selected)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.AssistancePrograms);\r\n }\r\n else if (this.application.Children.every(o => o.IsFosterChild)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.FosterCare);\r\n }\r\n else if (this.application.Children.every(o => o.IsFosterChild || o.Programs.find(p => p.Selected) != null) && this.continueOrSubmit == 'Submit') {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.ContinueorSubmit);\r\n }\r\n break;\r\n case FrmaPagesEnum.AlmostDone:\r\n this.setSelectedAdult(this.application.Adults[this.application.Adults.length - 1]);\r\n nextIndex = this.getPreviousAdultIncomePageIndex();\r\n break;\r\n case FrmaPagesEnum.MilitaryIncome:\r\n case FrmaPagesEnum.EarningsFromWork:\r\n case FrmaPagesEnum.IncomeFromPublicAssistance:\r\n case FrmaPagesEnum.IncomeFromAlimonyorChildSupport:\r\n case FrmaPagesEnum.IncomeFromBenefits:\r\n case FrmaPagesEnum.RetirementIncome:\r\n case FrmaPagesEnum.OtherSourcesofIncome:\r\n nextIndex = this.getPreviousAdultIncomePageIndex();\r\n break;\r\n case FrmaPagesEnum.TheNextQuestionsAreAllAboutNameOfAdult:\r\n const nextAdultIndex = this.application.Adults.findIndex(o => o == this.selectedAdult);\r\n if (nextAdultIndex > 0) {\r\n this.setSelectedAdult(this.application.Adults[nextAdultIndex - 1]);\r\n nextIndex = this.getPreviousAdultIncomePageIndex();\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.WhatAdultsLiveInYourHousehold);\r\n }\r\n break;\r\n case FrmaPagesEnum.WhatAdultsLiveInYourHousehold:\r\n this.selectedChild = null;\r\n for (let i = this.application.Children.length - 1; i >= 0; i--) {\r\n if (this.application.Children[i].HasIncome && !this.selectedChild) {\r\n this.setSelectedChild(this.application.Children[i]);\r\n }\r\n }\r\n if (this.selectedChild) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.TheNextFewQuestionsAreAboutYourChildrensIncome);\r\n }\r\n break;\r\n case FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources:\r\n let childFound = false;\r\n for (let i = this.application.Children.findIndex(o => o == this.selectedChild) - 1; i >= 0; i--) {\r\n if (this.application.Children[i].HasIncome && !childFound) {\r\n this.setSelectedChild(this.application.Children[i]);\r\n childFound = true;\r\n }\r\n }\r\n if (childFound) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.TheNextFewQuestionsAreAboutYourChildrensIncome);\r\n }\r\n break;\r\n case FrmaPagesEnum.OtherChildrenInTheHousehold:\r\n if (this.application.Children.every(o => o.IsFosterChild || o.Programs.find(p => p.Selected) != null)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.ContinueorSubmit);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.YourChildrenCanAlsoQualify);\r\n }\r\n break;\r\n case FrmaPagesEnum.CertifyandSubmit:\r\n if (this.mealApplicationConfidentiallyWaiverLookups && this.mealApplicationConfidentiallyWaiverLookups.length > 0) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.SharingInformationwithOtherPrograms);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.UseofInformationUSDANonDescrimination);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return nextIndex;\r\n }\r\n\r\n getPreviousAdultIncomePageIndex(): number {\r\n const currentIndex = this.allPages.findIndex(o => o.ID == this.page.ID);\r\n let nextIndex = currentIndex - 1;\r\n if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherSourcesofIncome) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Other)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherSourcesofIncome);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromBenefits) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Benefits)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromBenefits);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromAlimonyorChildSupport) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.AlimonyChildSupport)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromAlimonyorChildSupport);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromPublicAssistance) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.PublicAssistance)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromPublicAssistance);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Employment)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Employment)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork);\r\n }\r\n else if (currentIndex > this.allPages.findIndex(o => o.ID == FrmaPagesEnum.MilitaryIncome) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Military)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.MilitaryIncome);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.TheNextQuestionsAreAllAboutNameOfAdult);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n nextClick() {\r\n this.errors = [];\r\n this.validatePage(this.page);\r\n if (this.errors.length == 0) {\r\n this.setCompletedPage(this.page);\r\n this.changePage(this.getNextPageIndex());\r\n }\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n getNextPageIndex(): number {\r\n const currentIndex = this.allPages.findIndex(o => o.ID == this.page.ID);\r\n let nextIndex = currentIndex + 1;\r\n\r\n switch (this.page.ID) {\r\n case FrmaPagesEnum.AssistancePrograms:\r\n if (this.application.Programs.find(o => o.Selected)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.UseofInformationUSDANonDescrimination);\r\n }\r\n break;\r\n case FrmaPagesEnum.FosterCare:\r\n if (this.application.Children.every(o => o.IsFosterChild)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.UseofInformationUSDANonDescrimination);\r\n }\r\n break;\r\n case FrmaPagesEnum.YourChildrenCanAlsoQualify:\r\n if (this.application.Children.every(o => !o.IsStudent || o.IsFosterChild || o.Programs.find(p => p.Selected) != null)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.ContinueorSubmit);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherChildrenInTheHousehold);\r\n }\r\n break;\r\n case FrmaPagesEnum.ContinueorSubmit:\r\n if (this.continueOrSubmit == 'Continue') {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherChildrenInTheHousehold);\r\n }\r\n else if (this.continueOrSubmit == 'Submit') {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.UseofInformationUSDANonDescrimination);\r\n }\r\n else {\r\n nextIndex = currentIndex;\r\n }\r\n break;\r\n case FrmaPagesEnum.TheNextFewQuestionsAreAboutYourChildrensIncome:\r\n this.selectedChild = null;\r\n for (let i = 0; i < this.application.Children.length; i++) {\r\n if (this.application.Children[i].HasIncome && !this.selectedChild) {\r\n this.setSelectedChild(this.application.Children[i]);\r\n }\r\n }\r\n if (this.selectedChild) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.WhatAdultsLiveInYourHousehold);\r\n }\r\n break;\r\n case FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources:\r\n let childFound = false;\r\n for (let i = this.application.Children.findIndex(o => o == this.selectedChild) + 1; i < this.application.Children.length; i++) {\r\n if (this.application.Children[i].HasIncome && !childFound) {\r\n this.setSelectedChild(this.application.Children[i]);\r\n childFound = true;\r\n }\r\n }\r\n if (childFound) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.DoesStudentHaveIncomeFromAnyOfTheFollowingSources);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.WhatAdultsLiveInYourHousehold);\r\n }\r\n break;\r\n case FrmaPagesEnum.WhatAdultsLiveInYourHousehold:\r\n this.selectedAdult = null;\r\n if (this.application.Adults) {\r\n this.setSelectedAdult(this.application.Adults[0]);\r\n }\r\n break;\r\n case FrmaPagesEnum.TheNextQuestionsAreAllAboutNameOfAdult:\r\n case FrmaPagesEnum.MilitaryIncome:\r\n case FrmaPagesEnum.EarningsFromWork:\r\n case FrmaPagesEnum.IncomeFromPublicAssistance:\r\n case FrmaPagesEnum.IncomeFromAlimonyorChildSupport:\r\n case FrmaPagesEnum.IncomeFromBenefits:\r\n case FrmaPagesEnum.RetirementIncome:\r\n case FrmaPagesEnum.OtherSourcesofIncome:\r\n nextIndex = this.getNextAdultIncomePageIndex();\r\n break;\r\n case FrmaPagesEnum.UseofInformationUSDANonDescrimination:\r\n if (this.mealApplicationConfidentiallyWaiverLookups && this.mealApplicationConfidentiallyWaiverLookups.length > 0) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.SharingInformationwithOtherPrograms);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.CertifyandSubmit);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return nextIndex;\r\n }\r\n\r\n getNextAdultIncomePageIndex(): number {\r\n const currentIndex = this.allPages.findIndex(o => o.ID == this.page.ID);\r\n let nextIndex = currentIndex + 1;\r\n let nextAdultIndex = 0;\r\n if (this.selectedAdult) {\r\n nextAdultIndex = this.application.Adults.findIndex(o => o == this.selectedAdult) + 1;\r\n }\r\n if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.MilitaryIncome) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Military)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.MilitaryIncome);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Employment)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.EarningsFromWork);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromPublicAssistance) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.PublicAssistance)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromPublicAssistance);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromAlimonyorChildSupport) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.AlimonyChildSupport)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromAlimonyorChildSupport);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromBenefits) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Benefits)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.IncomeFromBenefits);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.RetirementIncome) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Retirement)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.RetirementIncome);\r\n }\r\n else if (currentIndex < this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherSourcesofIncome) && this.selectedAdult.IncomeTypeIds.includes(FrmaAdultIncomeTypesEnum.Other)) {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.OtherSourcesofIncome);\r\n }\r\n else if (nextAdultIndex < this.application.Adults.length) {\r\n this.setSelectedAdult(this.application.Adults[nextAdultIndex]);\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.TheNextQuestionsAreAllAboutNameOfAdult);\r\n }\r\n else {\r\n nextIndex = this.allPages.findIndex(o => o.ID == FrmaPagesEnum.AlmostDone);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n cancelClick() {\r\n this.errors = [];\r\n if (this.singlePageMode && !this.isDesignMode) {\r\n this.dialogRef.close(false); // this is a preview of a single page. No need to validate.\r\n }\r\n else {\r\n const canContinue = this.checkForErrorsGuard.checkForDeactivation(this);\r\n if (canContinue instanceof Observable) {\r\n canContinue.pipe(take(1)).subscribe(clickedOk => {\r\n if (clickedOk) {\r\n if (this.application.ID > 0) {\r\n this.dialogRef.close(false); // existing app. no need to refresh grid\r\n }\r\n else {\r\n this.dialogRef.close(this.appSaved); // new app may have been saved. need to refresh grid.\r\n }\r\n }\r\n });\r\n }\r\n else if (canContinue) {\r\n if (this.application.ID > 0) {\r\n this.dialogRef.close(false); // existing app. no need to refresh grid\r\n }\r\n else {\r\n this.dialogRef.close(this.appSaved); // new app may have been saved. need to refresh grid.\r\n }\r\n }\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n saveAndFinishLaterClick() {\r\n this.saveApp(true);\r\n }\r\n\r\n submitClick() {\r\n this.errors = [];\r\n this.validatePage(this.page);\r\n if (this.errors.length == 0) {\r\n this.application.Status = 'submitted';\r\n this.application.SubmittedBy = this.userService.currentUser.MemberId;\r\n this.application.SubmittedDate = new Date();\r\n this.application.Children.forEach(c => {\r\n if (c.Income) {\r\n c.Income.forEach(i => {\r\n i.ConvertedToAnnual = this.frmaService.convertIncomeToAnnual(i);\r\n });\r\n }\r\n });\r\n this.application.Adults.forEach(a => {\r\n if (a.Income) {\r\n a.Income.forEach(i => {\r\n i.ConvertedToAnnual = this.frmaService.convertIncomeToAnnual(i);\r\n });\r\n }\r\n });\r\n this.generatePDF();\r\n }\r\n }\r\n\r\n generatePDF() {\r\n this.eFormService.pdfDataURIs = [];\r\n this.spinnerService.showSpinner = true;\r\n this.printFlag = true;\r\n this.changePage(0);\r\n }\r\n\r\n saveApp(closeAfterSave: boolean) {\r\n if (!this.application.ID || this.application.ID <= 0) {\r\n this.application.CreatedBy = this.userService.currentUser.MemberId;\r\n }\r\n this.frmaService.saveFrmaApplication(this.application).pipe(take(1)).subscribe(newApp => {\r\n if (closeAfterSave) {\r\n this.dialogRef.close(true);\r\n }\r\n });\r\n }\r\n\r\n\r\n // #endregion\r\n\r\n // #region Template Methods\r\n signatureBoxClick() {\r\n if (!this.isSigned) {\r\n this.application.SignedBy = null;\r\n this.application.SignedDate = null;\r\n this.application.SignedByName = '';\r\n }\r\n else {\r\n this.application.SignedBy = this.userService.currentUser.MemberId;\r\n this.application.SignedDate = new Date();\r\n this.application.SignedByName = this.frmaService.formatName(this.userService.currentUser.FirstName, null, this.userService.currentUser.LastName, this.userService.currentUser.Suffix);\r\n }\r\n }\r\n\r\n certifiedBoxClick() {\r\n if (!this.isCertified) {\r\n this.application.CertifiedBy = null;\r\n this.application.CertifiedDate = null;\r\n this.application.CertifiedByName = '';\r\n }\r\n else {\r\n this.application.CertifiedBy = this.userService.currentUser.Id;\r\n this.application.CertifiedDate = new Date();\r\n this.application.CertifiedByName = this.userService.currentUser.FirstName + ' ' + this.userService.currentUser.LastName;\r\n }\r\n }\r\n\r\n fosterCareChange(isFosterFamily: boolean) {\r\n this.isFosterFamily = isFosterFamily;\r\n if (!isFosterFamily) {\r\n this.application.Children.forEach(c => {\r\n c.IsFosterChild = false;\r\n });\r\n }\r\n }\r\n\r\n childProgramChange(isSelected: boolean, programId: number) {\r\n if (!isSelected) {\r\n this.application.Children.forEach(c => {\r\n const program = c.Programs.find(p => p.ProgramID == programId);\r\n if (program) {\r\n program.Selected = false;\r\n }\r\n });\r\n }\r\n switch (programId) {\r\n case FrmaProgramsEnum.McKinneyVento: {\r\n this.isMckinneyVento = isSelected;\r\n break;\r\n }\r\n case FrmaProgramsEnum.MEP: {\r\n this.isMEP = isSelected;\r\n break;\r\n }\r\n case FrmaProgramsEnum.RunawayYouth: {\r\n this.isRunawayYouth = isSelected;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n deleteChildClick(child: FreeReducedMealAppChild) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete ' + (child.IsStudent ? 'Student' : 'Child');\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete ' + this.frmaService.formatName(child.FirstName, child.MiddleName, child.LastName, this.suffixPipe.transform(child.SuffixID, this.suffixes)) + '?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n const i = this.application.Children.findIndex(o => o.ID == child.ID);\r\n if (i >= 0) {\r\n this.application.Children.splice(i, 1);\r\n this.application.Children = cloneDeep(this.application.Children);\r\n }\r\n }\r\n });\r\n }\r\n\r\n deleteAdultClick(adult: FreeReducedMealAppAdult) {\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Delete Adult';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete ' + this.frmaService.formatName(adult.FirstName, adult.MiddleName, adult.LastName, this.suffixPipe.transform(adult.SuffixID, this.suffixes)) + '?';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n const i = this.application.Adults.findIndex(o => o.ID == adult.ID);\r\n if (i >= 0) {\r\n this.application.Adults.splice(i, 1);\r\n this.application.Adults = cloneDeep(this.application.Adults);\r\n }\r\n }\r\n });\r\n }\r\n\r\n selectedAdultdHasIncome(incomeTypeID: number): boolean {\r\n let hasIncome: boolean = null;\r\n if (this.selectedAdult) {\r\n if (this.selectedAdult.IncomeTypeIds.find(o => o == incomeTypeID) != null) {\r\n hasIncome = true;\r\n }\r\n else {\r\n if (this.application.ID > 0 && this.frmaService.pageHasBeenCompleted(this.application, this.page, this.selectedChild, this.selectedAdult)) {\r\n hasIncome = false;\r\n }\r\n else {\r\n const dict = this.frmaService.adultIncomeClicks[this.selectedAdult.ID];\r\n if (dict && dict[incomeTypeID] == true) {\r\n hasIncome = false;\r\n }\r\n }\r\n }\r\n }\r\n return hasIncome;\r\n }\r\n\r\n adultHasIncomeClick(incomeTypeID: number, hasIncome: boolean) {\r\n if (this.selectedAdult) {\r\n // for new applications we have to track if an answer was selected or not\r\n if (!this.frmaService.adultIncomeClicks[this.selectedAdult.ID]) {\r\n this.frmaService.adultIncomeClicks[this.selectedAdult.ID] = {};\r\n }\r\n this.frmaService.adultIncomeClicks[this.selectedAdult.ID][incomeTypeID] = true;\r\n if (hasIncome && !this.selectedAdult.IncomeTypeIds.find(o => o == incomeTypeID)) {\r\n this.selectedAdult.IncomeTypeIds.push(incomeTypeID);\r\n }\r\n else if (!hasIncome) {\r\n for (let i = this.selectedAdult.IncomeTypeIds.length - 1; i >= 0; i--) {\r\n if (this.selectedAdult.IncomeTypeIds[i] == incomeTypeID) {\r\n this.selectedAdult.IncomeTypeIds.splice(i, 1);\r\n }\r\n }\r\n const subTypeIds = this.allAdultIncomeSubTypes.filter(o => o.AdultIncomeTypeID == incomeTypeID).map(o => o.ID);\r\n for (let i = this.selectedAdult.Income.length; i >= 0; i--) {\r\n const income = this.selectedAdult.Income[i];\r\n if (income && subTypeIds.includes(income.AdultIncomeSubTypeID)) {\r\n this.selectedAdult.Income.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n adultHasSubTypeClick(incomeSubTypeID: number, hasIncome: boolean) {\r\n if (this.selectedAdult) {\r\n if (hasIncome && !this.selectedAdult.Income.find(o => o.AdultIncomeSubTypeID == incomeSubTypeID)) {\r\n this.addAdultIncome(this.selectedAdult, incomeSubTypeID);\r\n }\r\n else if (!hasIncome) {\r\n for (let i = this.selectedAdult.Income.length - 1; i >= 0; i--) {\r\n if (this.selectedAdult.Income[i].AdultIncomeSubTypeID == incomeSubTypeID) {\r\n this.selectedAdult.Income.splice(i, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addAdultIncome(adult: FreeReducedMealAppAdult, incomeSubTypeID: number) {\r\n if (adult && incomeSubTypeID) {\r\n const newIncome = new FreeReducedMealAppAdultIncome();\r\n newIncome.AdultIncomeSubTypeID = incomeSubTypeID;\r\n newIncome.AdultIncomeSubTypeID = adult.ID;\r\n if (!adult.Income) {\r\n adult.Income = [];\r\n }\r\n adult.Income.push(newIncome);\r\n }\r\n }\r\n\r\n selectedAdultdHasSubType(incomeSubTypeID: number): boolean {\r\n if (this.selectedAdult) {\r\n return this.selectedAdult.Income.find(o => o.AdultIncomeSubTypeID == incomeSubTypeID) != null;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n canShareStudentInfo(program: FreeReducedMealAppInfoSharing, child: FreeReducedMealAppChild) {\r\n if (program && child && program.StudentIds && child.StudentID > 0) {\r\n return program.StudentIds.includes(child.StudentID);\r\n }\r\n return false;\r\n }\r\n\r\n\r\n shareInfoClick(program: FreeReducedMealAppInfoSharing, child: FreeReducedMealAppChild) {\r\n if (program && program.ShareWith == 'selected' && child && child.StudentID > 0) {\r\n if (!program.StudentIds) {\r\n program.StudentIds = [];\r\n }\r\n const i = program.StudentIds.findIndex(o => o == child.StudentID);\r\n if (i >= 0) {\r\n program.StudentIds.splice(i, 1);\r\n }\r\n else {\r\n program.StudentIds.push(child.StudentID);\r\n }\r\n }\r\n }\r\n\r\n shareWithRadioClick(program: FreeReducedMealAppInfoSharing, shareWith: string) {\r\n if (program) {\r\n program.ShareWith = shareWith;\r\n if (shareWith != 'selected') {\r\n program.StudentIds = [];\r\n }\r\n }\r\n }\r\n\r\n checkErrors(nextState?: RouterStateSnapshot): number {\r\n const customizer = (objValue: any, otherValue: any, index: any, obj: any): boolean => {\r\n if (index == 'CompletedPages') {\r\n return true;\r\n }\r\n if (!isEqual(objValue, otherValue)) {\r\n return undefined;\r\n }\r\n return undefined;\r\n };\r\n if (isEqualWith(this.application, this.originalApplication, customizer)) {\r\n return 2;\r\n }\r\n else {\r\n return 0;\r\n }\r\n }\r\n\r\n continuedWithoutSave() { }\r\n\r\n save() {\r\n this.appSaved = true;\r\n this.saveApp(true);\r\n }\r\n\r\n unenrolledStudentClick(student: FreeReducedMealAppChild) {\r\n if (student.isSelected) {\r\n this.application.Children.push(cloneDeep(student));\r\n }\r\n else {\r\n const i = this.application.Children.findIndex(o => o.StudentID == student.StudentID);\r\n if (i >= 0) {\r\n this.application.Children.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n}\r\n","
\r\n {{adultIncomeSubType.Name | translate}} (made available to the household)\r\n \r\n Yes\r\n No\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Yearly\r\n Monthly\r\n Twice per month\r\n Every two weeks\r\n Weekly\r\n Hourly\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Week\r\n Month\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
","import { Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport { FreeReducedMealAppService } from '../../free-reduced-meal-app.service';\r\nimport { FreeReducedMealAppAdultIncomeSubType } from '../../models/free-reduced-meal-app-adult-income-sub-type.model';\r\nimport { FreeReducedMealAppAdultIncome } from '../../models/free-reduced-meal-app-adult-income.model';\r\nimport { FreeReducedMealAppAdult } from '../../models/free-reduced-meal-app-adult.model';\r\nimport { FreeReducedMealAppPage } from '../../models/free-reduced-meal-app-page.model';\r\nimport { FreeReducedMealApp } from '../../models/free-reduced-meal-app.model';\r\n\r\n@Component({\r\n selector: 'frma-adult-income-details',\r\n templateUrl: './frma-adult-income-details.component.html',\r\n styleUrls: ['./frma-adult-income-details.component.css']\r\n})\r\nexport class FrmaAdultIncomeDetailsComponent implements OnInit {\r\n\r\n static frmaAdultDetailsIncrementor = 1;\r\n\r\n @Input() adultIncomeSubType: FreeReducedMealAppAdultIncomeSubType;\r\n @Input() adult: FreeReducedMealAppAdult;\r\n @Input() showMilitaryAdditionalText: boolean;\r\n @Input() app: FreeReducedMealApp;\r\n @Input() selectedPage: FreeReducedMealAppPage;\r\n\r\n @ViewChildren('txtAmount', {read: ElementRef}) txtAmount: QueryList;\r\n @ViewChildren('ddlFrequency', {read: ElementRef}) ddlFrequency: QueryList;\r\n @ViewChildren('txtHours', {read: ElementRef}) txtHours: QueryList;\r\n @ViewChildren('ddlPer', {read: ElementRef}) ddlPer: QueryList;\r\n @ViewChild('form', { read: NgForm }) form: NgForm;\r\n\r\n localId: number;\r\n adultIncome: FreeReducedMealAppAdultIncome[] = [];\r\n additionalQuestionText: string;\r\n\r\n constructor(\r\n private frmaService: FreeReducedMealAppService\r\n ) {\r\n this.localId = FrmaAdultIncomeDetailsComponent.frmaAdultDetailsIncrementor++;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.adult.Income) {\r\n this.adult.Income = [];\r\n }\r\n this.adultIncome = this.adult.Income.filter(o => o.AdultIncomeSubTypeID == this.adultIncomeSubType.ID);\r\n }\r\n\r\n adultHasIncomeClick(hasIncome: boolean) {\r\n // for new applications we have to track if an answer was selected or not\r\n if (!this.frmaService.adultIncomeSubTypeClicks[this.adult.ID]) {\r\n this.frmaService.adultIncomeSubTypeClicks[this.adult.ID] = {};\r\n }\r\n this.frmaService.adultIncomeSubTypeClicks[this.adult.ID][this.adultIncomeSubType.ID] = true;\r\n if (this.adult) {\r\n if (hasIncome && !this.adult.Income.find(o => o.AdultIncomeSubTypeID == this.adultIncomeSubType.ID)) {\r\n this.addAdultIncome();\r\n }\r\n else if (!hasIncome) {\r\n for (let i = this.adult.Income.length - 1; i >= 0; i--) {\r\n if (this.adult.Income[i].AdultIncomeSubTypeID == this.adultIncomeSubType.ID) {\r\n this.adult.Income.splice(i, 1);\r\n this.adultIncome = this.adult.Income.filter(o => o.AdultIncomeSubTypeID == this.adultIncomeSubType.ID);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addAdultIncome() {\r\n if (this.adult && this.adultIncomeSubType) {\r\n const newIncome = new FreeReducedMealAppAdultIncome();\r\n newIncome.AdultIncomeSubTypeID = this.adultIncomeSubType.ID;\r\n newIncome.AdultID = this.adult.ID;\r\n if (!this.adult.Income) {\r\n this.adult.Income = [];\r\n }\r\n this.adult.Income.push(newIncome);\r\n this.adultIncome = this.adult.Income.filter(o => o.AdultIncomeSubTypeID == this.adultIncomeSubType.ID);\r\n }\r\n }\r\n\r\n removeClick(adultIncome: FreeReducedMealAppAdultIncome) {\r\n const i = this.adult.Income.findIndex(o => o == adultIncome);\r\n if (i >= 0) {\r\n this.adult.Income.splice(i, 1);\r\n this.adultIncome = this.adult.Income.filter(o => o.AdultIncomeSubTypeID == this.adultIncomeSubType.ID);\r\n }\r\n }\r\n\r\n adultHasIncome(): boolean {\r\n let hasIncome: boolean = null;\r\n if (this.adult) {\r\n if (this.adultIncome && this.adultIncome.length > 0) {\r\n hasIncome = true;\r\n }\r\n else {\r\n if (this.app.ID > 0 && this.frmaService.pageHasBeenCompleted(this.app, this.selectedPage, null, this.adult)) {\r\n hasIncome = false;\r\n }\r\n else {\r\n const dict = this.frmaService.adultIncomeSubTypeClicks[this.adult.ID];\r\n if (dict && dict[this.adultIncomeSubType.ID] == true) {\r\n hasIncome = false;\r\n }\r\n }\r\n }\r\n }\r\n return hasIncome;\r\n }\r\n\r\n public getElementReference(ci: FreeReducedMealAppAdultIncome, field: string): ElementRef {\r\n const index = this.adultIncome.findIndex(o => o == ci);\r\n if (index >= 0 && field) {\r\n if (field.toLowerCase() == 'amount') {\r\n if (this.txtAmount.length > index) {\r\n const ref = this.txtAmount.find((_, i) => i == index);\r\n return this.txtAmount.find((_, i) => i == index);\r\n }\r\n }\r\n else if (field.toLowerCase() == 'frequency') {\r\n if (this.ddlFrequency.length > index) {\r\n return this.ddlFrequency.find((_, i) => i == index);\r\n }\r\n }\r\n else {\r\n let subIndex = -1; // we need to calculate the index for the hours and per controls, since there may not be one for every ChilcIncome object\r\n for (let i = 0; i <= index; i++) {\r\n if (this.adultIncome[i] && this.adultIncome[i].Frequency.toLowerCase() == 'hourly') {\r\n subIndex++;\r\n }\r\n }\r\n if (subIndex >= 0) {\r\n if (field.toLowerCase() == 'hours') {\r\n if (this.txtHours.length > subIndex) {\r\n return this.txtHours.find((_, i) => i == subIndex);\r\n }\r\n }\r\n else if (field.toLowerCase() == 'per') {\r\n if (this.ddlPer.length > subIndex) {\r\n return this.ddlPer.find((_, i) => i == subIndex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n markAsTouched() {\r\n Object.keys((this.form.form).controls).forEach(control => {\r\n this.form.form.get(control).markAsTouched();\r\n });\r\n }\r\n\r\n getNumberMask() {\r\n return {\r\n guide: true,\r\n mask: createNumberMask({\r\n prefix: '',\r\n includeThousandsSeparator: false,\r\n allowDecimal: true,\r\n decimalLimit: 2\r\n })\r\n };\r\n }\r\n}\r\n","import { FreeReducedMealAppIncome } from \"./free-reduced-meal-app-income.model\";\r\n\r\nexport class FreeReducedMealAppChildIncome extends FreeReducedMealAppIncome {\r\n ChildID: number;\r\n ChildIncomeTypeID: number;\r\n }","
\r\n {{childIncomeType.Name | translate}}\r\n \r\n Yes\r\n No\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n Yearly\r\n Monthly\r\n Twice per month\r\n Every two weeks\r\n Weekly\r\n Hourly\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Week\r\n Month\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
","import { Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { FormGroup, NgForm } from '@angular/forms';\r\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport { FreeReducedMealAppService } from '../../free-reduced-meal-app.service';\r\nimport { FreeReducedMealAppChildIncomeType } from '../../models/free-reduced-meal-app-child-income-type.model';\r\nimport { FreeReducedMealAppChildIncome } from '../../models/free-reduced-meal-app-child-income.model';\r\nimport { FreeReducedMealAppChild } from '../../models/free-reduced-meal-app-child.model';\r\nimport { FreeReducedMealAppPage } from '../../models/free-reduced-meal-app-page.model';\r\nimport { FreeReducedMealApp } from '../../models/free-reduced-meal-app.model';\r\n\r\n@Component({\r\n selector: 'frma-child-income-details',\r\n templateUrl: './frma-child-income-details.component.html',\r\n styleUrls: ['./frma-child-income-details.component.css']\r\n})\r\nexport class FrmaChildIncomeDetailsComponent implements OnInit {\r\n\r\n static frmaChildDetailsIncrementor = 1;\r\n\r\n @Input() childIncomeType: FreeReducedMealAppChildIncomeType;\r\n @Input() child: FreeReducedMealAppChild;\r\n @Input() app: FreeReducedMealApp;\r\n @Input() selectedPage: FreeReducedMealAppPage;\r\n @Input() formGroup: FormGroup;\r\n\r\n localId: number;\r\n childIncome: FreeReducedMealAppChildIncome[] = [];\r\n\r\n @ViewChildren('txtAmount', {read: ElementRef}) txtAmount: QueryList;\r\n @ViewChildren('ddlFrequency', {read: ElementRef}) ddlFrequency: QueryList;\r\n @ViewChildren('txtHours', {read: ElementRef}) txtHours: QueryList;\r\n @ViewChildren('ddlPer', {read: ElementRef}) ddlPer: QueryList;\r\n @ViewChild('form', { read: NgForm }) form: NgForm;\r\n\r\n constructor(\r\n private frmaService: FreeReducedMealAppService\r\n ) {\r\n this.localId = FrmaChildIncomeDetailsComponent.frmaChildDetailsIncrementor++;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.child.Income) {\r\n this.child.Income = [];\r\n }\r\n this.childIncome = this.child.Income.filter(o => o.ChildIncomeTypeID == this.childIncomeType.ID);\r\n }\r\n\r\n childHasIncomeClick(hasIncome: boolean) {\r\n // for new applications we have to track if an answer was selected or not\r\n if (!this.frmaService.childIncomeClicks[this.child.ID]) {\r\n this.frmaService.childIncomeClicks[this.child.ID] = {};\r\n }\r\n this.frmaService.childIncomeClicks[this.child.ID][this.childIncomeType.ID] = true;\r\n if (this.child) {\r\n if (hasIncome && !this.child.Income.find(o => o.ChildIncomeTypeID == this.childIncomeType.ID)) {\r\n this.addChildIncome();\r\n }\r\n else if (!hasIncome) {\r\n for (let i = this.child.Income.length - 1; i >= 0; i--) {\r\n if (this.child.Income[i].ChildIncomeTypeID == this.childIncomeType.ID) {\r\n this.child.Income.splice(i, 1);\r\n this.childIncome = this.child.Income.filter(o => o.ChildIncomeTypeID == this.childIncomeType.ID);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addChildIncome() {\r\n if (this.child && this.childIncomeType) {\r\n const newIncome = new FreeReducedMealAppChildIncome();\r\n newIncome.ChildIncomeTypeID = this.childIncomeType.ID;\r\n newIncome.ChildID = this.child.ID;\r\n if (!this.child.Income) {\r\n this.child.Income = [];\r\n }\r\n this.child.Income.push(newIncome);\r\n this.childIncome = this.child.Income.filter(o => o.ChildIncomeTypeID == this.childIncomeType.ID);\r\n }\r\n }\r\n\r\n removeClick(childIncome: FreeReducedMealAppChildIncome) {\r\n const i = this.child.Income.findIndex(o => o == childIncome);\r\n if (i >= 0) {\r\n this.child.Income.splice(i, 1);\r\n this.childIncome = this.child.Income.filter(o => o.ChildIncomeTypeID == this.childIncomeType.ID);\r\n }\r\n }\r\n\r\n childHasIncome(): boolean {\r\n let hasIncome: boolean = null;\r\n if (this.child) {\r\n if (this.childIncome && this.childIncome.length > 0) {\r\n hasIncome = true;\r\n }\r\n else {\r\n if (this.app.ID > 0 && this.frmaService.pageHasBeenCompleted(this.app, this.selectedPage, this.child, null)) {\r\n hasIncome = false;\r\n }\r\n else {\r\n const dict = this.frmaService.childIncomeClicks[this.child.ID];\r\n if (dict && dict[this.childIncomeType.ID] == true) {\r\n hasIncome = false;\r\n }\r\n }\r\n }\r\n }\r\n return hasIncome;\r\n }\r\n\r\n public getElementReference(ci: FreeReducedMealAppChildIncome, field: string): ElementRef {\r\n const index = this.childIncome.findIndex(o => o == ci);\r\n if (index >= 0 && field) {\r\n if (field.toLowerCase() == 'amount') {\r\n if (this.txtAmount.length > index) {\r\n const ref = this.txtAmount.find((_, i) => i == index);\r\n return this.txtAmount.find((_, i) => i == index);\r\n }\r\n }\r\n else if (field.toLowerCase() == 'frequency') {\r\n if (this.ddlFrequency.length > index) {\r\n return this.ddlFrequency.find((_, i) => i == index);\r\n }\r\n }\r\n else {\r\n let subIndex = -1; // we need to calculate the index for the hours and per controls, since there may not be one for every ChilcIncome object\r\n for (let i = 0; i <= index; i++) {\r\n if (this.childIncome[i] && this.childIncome[i].Frequency.toLowerCase() == 'hourly') {\r\n subIndex++;\r\n }\r\n }\r\n if (subIndex >= 0) {\r\n if (field.toLowerCase() == 'hours') {\r\n if (this.txtHours.length > subIndex) {\r\n return this.txtHours.find((_, i) => i == subIndex);\r\n }\r\n }\r\n else if (field.toLowerCase() == 'per') {\r\n if (this.ddlPer.length > subIndex) {\r\n return this.ddlPer.find((_, i) => i == subIndex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n markAsTouched() {\r\n Object.keys((this.form.form).controls).forEach(control => {\r\n this.form.form.get(control).markAsTouched();\r\n });\r\n }\r\n\r\n getNumberMask() {\r\n return {\r\n guide: true,\r\n mask: createNumberMask({\r\n prefix: '',\r\n includeThousandsSeparator: false,\r\n allowDecimal: true,\r\n decimalLimit: 2\r\n })\r\n };\r\n }\r\n\r\n}\r\n","import { DecimalPipe } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'frma-currency-input',\r\n templateUrl: './frma-currency-input.component.html',\r\n styleUrls: ['./frma-currency-input.component.css']\r\n})\r\nexport class FrmaCurrencyInputComponent implements OnInit {\r\n\r\n static localIterator = 1;\r\n private allowedKeys = ['Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'Control', 'Delete', 'Enter', 'NumLock', '.', ','];\r\n private _amount: number;\r\n public get amount(): number {\r\n return this._amount;\r\n }\r\n @Input() public set amount(value: number) {\r\n if (value != this._amount) {\r\n this._amount = value;\r\n if (value) {\r\n this.formattedAmount = this.decimalPipe.transform(value, '1.2-2');\r\n }\r\n }\r\n }\r\n @Output() amountChange = new EventEmitter();\r\n formattedAmount: string;\r\n localId: number;\r\n constructor(\r\n private decimalPipe: DecimalPipe\r\n ) {\r\n this.localId = FrmaCurrencyInputComponent.localIterator++;\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n onChange() {\r\n this._amount = Number(this.formattedAmount.replace(/,/g, ''));\r\n this.amountChange.emit(this.amount);\r\n }\r\n\r\n onBlur() {\r\n this.formattedAmount = this.decimalPipe.transform(this.formattedAmount, '1.2-2');\r\n }\r\n\r\n onFocus() {\r\n this.formattedAmount = this.formattedAmount.replace(/,/g, '');\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n","

\r\n Additional Children \r\n Other Adults\r\n

\r\n\r\n On your previous submission this year, the following additional children were listed as living with you.\r\n On your previous submission this year, the following adults were listed as living with you.\r\n\r\n
Please check the box next to the names of any who still live in your household.
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\nimport { FreeReducedMealAppPerson } from '../../models/free-reduced-meal-app-person.model';\r\n\r\n@Component({\r\n selector: 'app-frma-previous-person-selector',\r\n templateUrl: './frma-previous-person-selector.component.html',\r\n styleUrls: ['./frma-previous-person-selector.component.css']\r\n})\r\nexport class FrmaPreviousPersonSelectorComponent implements OnInit {\r\n\r\n isChildren = false;\r\n isAdults = false;\r\n suffixes: Lookup[];\r\n previousPeople: FreeReducedMealAppPerson[];\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n if (data) {\r\n this.suffixes = data.suffixes;\r\n this.previousPeople = data.previousPeople;\r\n this.isChildren = data.isChildren;\r\n this.isAdults = data.isAdults;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n continueClick() {\r\n let selectedPeople: FreeReducedMealAppPerson[] = [];\r\n if (this.previousPeople) {\r\n selectedPeople = this.previousPeople.filter(o => o.isSelected);\r\n }\r\n this.dialogRef.close(selectedPeople);\r\n }\r\n\r\n}\r\n","import { FreeReducedMealAppIncome } from './free-reduced-meal-app-income.model';\r\n\r\nexport class FreeReducedMealAppAdultIncome extends FreeReducedMealAppIncome {\r\n AdultID: number;\r\n AdultIncomeSubTypeID: number;\r\n AdultIncomeTypeID: number;\r\n}","import { FreeReducedMealAppAdultIncome } from './free-reduced-meal-app-adult-income.model';\r\nimport { FreeReducedMealAppPerson } from './free-reduced-meal-app-person.model';\r\n\r\nexport class FreeReducedMealAppAdult extends FreeReducedMealAppPerson {\r\n IsDeployed: boolean;\r\n Income: FreeReducedMealAppAdultIncome[] = [];\r\n IncomeTypeIds: number[] = [];\r\n\r\n //Non-DTO fields\r\n WorkIncome: number;\r\n OtherIncome: number;\r\n\r\n constructor() {\r\n super();\r\n }\r\n }","export class FreeReducedMealAppChildProgram {\r\n ID: number;\r\n AppID: number;\r\n ProgramID: number;\r\n Selected: boolean;\r\n }","import { FreeReducedMealAppChildIncome } from './free-reduced-meal-app-child-income.model';\r\nimport { FreeReducedMealAppChildProgram } from './free-reduced-meal-app-child-program.model';\r\nimport { FreeReducedMealAppPerson } from './free-reduced-meal-app-person.model';\r\n\r\nexport class FreeReducedMealAppChild extends FreeReducedMealAppPerson {\r\n\r\n StudentID: number;\r\n IsFosterChild: boolean;\r\n HasIncome: boolean;\r\n LunchStatus: string;\r\n GradeLevel: string;\r\n Income: FreeReducedMealAppChildIncome[] = [];\r\n Programs: FreeReducedMealAppChildProgram[] = [];\r\n\r\n constructor() {\r\n super();\r\n }\r\n}","export class FreeReducedMealAppIncome {\r\n ID: number;\r\n Amount: number;\r\n Frequency: string ;\r\n Hours: number;\r\n Per: string ;\r\n ConvertedToAnnual: number;\r\n\r\n // client-only properties\r\n hasFocus: boolean;\r\n }","import { FreeReducedMealAppIncome } from './free-reduced-meal-app-income.model';\r\n\r\nexport class FreeReducedMealAppPerson {\r\n static frmaPersonIncrementor = -1;\r\n ID: number;\r\n AppID: number;\r\n PeopleID: number;\r\n FirstName: string;\r\n MiddleName: string;\r\n LastName: string;\r\n SuffixID: number;\r\n IsStudent: boolean;\r\n Income: FreeReducedMealAppIncome[] = [];\r\n\r\n // client properties\r\n isSelected: boolean;\r\n TotalIncome: number;\r\n TotalIncomeFrequency: string;\r\n TotalAnnualIncome: number;\r\n TotalIncomeHours: number;\r\n TotalIncomePer: string;\r\n UseAnnual = false;\r\n IsEnrolled = true;\r\n\r\n constructor() {\r\n this.ID = FreeReducedMealAppPerson.frmaPersonIncrementor--;\r\n }\r\n}","export enum FrmaPagesEnum {\r\n BeforeYouBegin = 1,\r\n ThingsYouWillNeed = 2,\r\n Signature = 3,\r\n StudentsInTheHousehold = 4,\r\n AssistancePrograms = 5,\r\n FosterCare = 6,\r\n YourChildrenCanAlsoQualify = 7,\r\n ContinueorSubmit = 8,\r\n OtherChildrenInTheHousehold = 9,\r\n TheNextFewQuestionsAreAboutYourChildrensIncome = 10,\r\n DoesStudentHaveIncomeFromAnyOfTheFollowingSources = 11,\r\n WhatAdultsLiveInYourHousehold = 12,\r\n TheNextQuestionsAreAllAboutNameOfAdult = 13,\r\n MilitaryIncome = 14,\r\n EarningsFromWork = 15,\r\n IncomeFromPublicAssistance = 16,\r\n IncomeFromAlimonyorChildSupport = 17,\r\n IncomeFromBenefits = 18,\r\n RetirementIncome = 19,\r\n OtherSourcesofIncome = 20,\r\n AlmostDone = 21,\r\n UseofInformationUSDANonDescrimination = 22,\r\n SharingInformationwithOtherPrograms = 23,\r\n CertifyandSubmit = 24,\r\n Thankyou = 25\r\n}\r\n\r\nexport enum FrmaProgramsEnum {\r\n SNAP = 1,\r\n TANF = 2,\r\n FDPIR = 3,\r\n McKinneyVento = 4,\r\n MEP = 5,\r\n RunawayYouth = 6\r\n}\r\n\r\n\r\n\r\nexport enum FrmaAdultIncomeTypesEnum {\r\n Military = 1,\r\n Employment = 2,\r\n PublicAssistance = 3,\r\n AlimonyChildSupport = 4,\r\n Benefits = 5,\r\n Retirement = 6,\r\n Other = 7\r\n}\r\n\r\nexport enum AcceptRejectModesEnum {\r\n SnapTanfFdpir = 1,\r\n AllFoster = 2,\r\n AllFosterHomelessMigrantOrRunaway = 3,\r\n Other = 4\r\n}\r\n","import { Student } from '../../../shared-components/student/student.model';\r\nimport { FreeReducedMealAppAdult } from './free-reduced-meal-app-adult.model';\r\nimport { FreeReducedMealAppChild } from './free-reduced-meal-app-child.model';\r\nimport { FreeReducedMealAppCompletedPage } from './free-reduced-meal-app-completed-pages.model';\r\nimport { FreeReducedMealAppHouseholdProgram } from './free-reduced-meal-app-household-program.model';\r\nimport { FreeReducedMealAppInfoSharing } from './free-reduced-meal-app-info-sharing.model';\r\n\r\nexport class FreeReducedMealApp {\r\n ID: number;\r\n YearID: number;\r\n FamilyID: number;\r\n FamilyLanguageId: number;\r\n Status: string ;\r\n CreatedDate: Date;\r\n CreatedBy: number;\r\n CreatedByName: string;\r\n SubmittedBy: number;\r\n SubmittedDate: Date;\r\n SubmittedByName: string;\r\n SubmittedByEmail: string;\r\n SignedBy: number;\r\n SignedByName: string;\r\n SignedDate: Date;\r\n CertifiedBy: number;\r\n CertifiedDate: Date;\r\n CertifiedByName: string;\r\n ParentName: string;\r\n PrimaryParentFirstName: string;\r\n PrimaryParentLastName: string;\r\n PrimaryParentSuffixId: number;\r\n LastFourSSN: string;\r\n NoSSN: boolean;\r\n ShareInfo: boolean;\r\n Children: FreeReducedMealAppChild[];\r\n Adults: FreeReducedMealAppAdult[];\r\n Programs: FreeReducedMealAppHouseholdProgram[];\r\n InfoSharing: FreeReducedMealAppInfoSharing[];\r\n CompletedPages: FreeReducedMealAppCompletedPage[];\r\n Note: string;\r\n ApplicationAsPDF: string;\r\n Students: Student[] = [];\r\n SendMailingsInSpanish: boolean;\r\n TimesAccepted: number;\r\n LastAcceptedByName: string;\r\n\r\n constructor(yearId: number, familyId: number) {\r\n this.YearID = yearId;\r\n this.FamilyID = familyId;\r\n this.Status = 'not submitted';\r\n this.Children = [];\r\n this.Adults = [];\r\n this.Programs = [];\r\n this.InfoSharing = [];\r\n this.CompletedPages = [];\r\n }\r\n }\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\n\r\n@Pipe({\r\n name: 'frmaSuffix'\r\n})\r\nexport class FrmaSuffixPipe implements PipeTransform {\r\n\r\n transform(suffixID: number, suffixes: Lookup[]): string {\r\n let result = '';\r\n if (suffixes && suffixID) {\r\n const suffix = suffixes.find(o => o.Id == suffixID.toString());\r\n if (suffix) {\r\n result = suffix.CodeDescription;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n}\r\n","export class LoginSettings {\r\n Id: number;\r\n DistrictLogo: number[];\r\n CountryCode: string;\r\n AttemptsAllowed: number;\r\n FreezeTime: number;\r\n EnablePasswordComplexity: boolean;\r\n MinimumLength: number;\r\n PasswordExpirationInterval: number;\r\n PreventPasswordReuse: boolean;\r\n PreventEqualPassUserName: boolean;\r\n PasswordRequiresUpper: boolean;\r\n PasswordRequiresNumeric: boolean;\r\n PasswordRequiresSpecial: boolean;\r\n DisplayDistrictNameOnLoginPage: number;\r\n DisplayClassMeetsOnStudentScheduleCard: boolean;\r\n DisplayForgotUserName: boolean;\r\n DisplayForgotPassword: boolean;\r\n DisplaySeparateUserTypes: boolean;\r\n ParentPortalDisciplineShowComments: boolean;\r\n ParentPortalCourseScheduleProfiles: boolean;\r\n ParentPortalAssignmentsDisplayProfiles: boolean;\r\n ParentPortalAssignmentsShowEffectiveScore: boolean;\r\n ParentPortalAssignmentsShowGradeColumn: boolean;\r\n ParentPortalAttendanceCommentsByPeriod: boolean;\r\n ParentPortalStudentSubjectDelStatus: boolean;\r\n ParentPortalNotificationSettingsByStudent: boolean;\r\n ParentPortalNotificationSettingsSelectFrequency: boolean;\r\n ParentPortalHealthShowMedicineFrequency: boolean;\r\n ParentPortalHealthShowDoctorAddress: boolean;\r\n ParentPortalHealthShowDoctorEmail: boolean;\r\n ParentPortalReportCardGradesShowCitizenship: boolean;\r\n StudentUserNameLabel: string;\r\n NumberOfFailedAttemptsPriorToLockout: number;\r\n DistrictName: string;\r\n DistrictSpanishName: string;\r\n DistrictFrenchName: string;\r\n DistrictURL: string;\r\n DistrictLoginMessage: string;\r\n LoginAssistMessage: string;\r\n TimeoutTime: number;\r\n DisplayCustodyIssue: boolean;\r\n DisplayBus: boolean;\r\n DisplayReportCardTranscriptOnHold: boolean;\r\n DisplayEmergencyPhoneNumberInGrid: boolean;\r\n DisplayIsGuardian: boolean;\r\n DisplayCanPickup: boolean;\r\n DisplayHasCustody: boolean;\r\n ParentPortalORShowAttachments: boolean;\r\n ParentPortalORv10Data: boolean;\r\n ParentPortalORCustomFormWidth: number;\r\n ParentPortalUHDv10Data: boolean;\r\n ParentPortalCourseRequestsShowRequirements: boolean;\r\n ParentPortalShowStudentTeams: boolean;\r\n ParentPortalAssessmentsShowBestOf: boolean;\r\n ParentPortalShowMonthlyLunchMeal: boolean;\r\n DisplayChangeEmailAddress: boolean;\r\n PasswordCaseSensitive: boolean;\r\n DisplayProgressGradesCheckBox: boolean;\r\n ParentPortalShowAttendExcessiveTab: boolean;\r\n ParentPortalShowAttendSpecialTab: boolean;\r\n Student360StaffLoginChangeUserName: boolean;\r\n MinimumPasswordLength: number;\r\n PasswordRequiresMixedLettersAndNumbers: boolean;\r\n Student360StaffPasswordCaseSensitive: boolean;\r\n Classroom360AttendanceDateAllowEditing: boolean;\r\n Classroom360AttendanceAllowMerging: boolean;\r\n Classroom360AttendanceSeatingChartView: boolean;\r\n Classroom360AttendanceLunchCountAdults: boolean;\r\n Classroom360AttendanceAllPeriods: boolean;\r\n Classroom360AttendancePerfectOverwrites: boolean;\r\n Classroom360AttendanceCommentsEditable: boolean;\r\n Classroom360AttendanceShowTardyTime: boolean;\r\n OneSISVersion: string;\r\n MyClassesShowView: boolean;\r\n ParentPortalShowParentTab: boolean;\r\n ParentPortalShowStudentTab: boolean;\r\n ParentPortalShowOnlinePayment: boolean;\r\n ParentPortalShowParentStudentLinks: boolean;\r\n C360ShowCommunicationLog: boolean;\r\n ActivateStudent360: boolean;\r\n ActivateClassroom360: boolean;\r\n StaffUserUseADPassword: boolean;\r\n StudentUserUseADPassword: boolean;\r\n ActiveDirectoryAgentURL: string;\r\n C360GradebookGradingPeriod: boolean;\r\n C360GradebookAllowMerging: boolean;\r\n C360GradebookUnits: boolean;\r\n C360GradebookAllowCategoryEditing: boolean;\r\n C360GradebookCourseSpecificCategories: boolean;\r\n C360GradebookUseCategoryCodes: boolean;\r\n C360GradebookAssignmentsLongSummary: boolean;\r\n C360GradebookAssignmentsGPSpecific: boolean;\r\n C360GradebookUseStandards: boolean;\r\n C360GradebookRequireDateAssigned: boolean;\r\n C360GradebookLimitTo100: boolean;\r\n C360GradebookWeightIsPercent: boolean;\r\n C360GradebookAssignmentForSelectedStudents: boolean;\r\n C360GradebookExcludeAssignmentsFromCalculations: boolean;\r\n C360GradebookAssignmentAttachmentDescriptions: boolean;\r\n C360GradebookSGGradesAsAssignments: boolean;\r\n C360GradebookUseSpecialMarks: boolean;\r\n C360GradebookSpecialGradingScaleForStudent: boolean;\r\n C360GradebookUserDefinedScorePrecision: boolean;\r\n C360GradebookModifyScoresWhenCopying: boolean;\r\n C360GradebookGradingScalesAllowNumbers: boolean;\r\n C360GradebookSpecialMarksEditable: boolean;\r\n C360GradebookAllowTeacherComments: boolean;\r\n C360GradebookSpanishComments: boolean;\r\n C360GradebookAllowCustomAssignmentComments: boolean;\r\n ShowForgotPasswordLink: boolean;\r\n TabSpecificForgotPasswordLink: boolean;\r\n ShowForgotUserNameLink: boolean;\r\n ShowLoginAssistanceInfo: boolean;\r\n V10: boolean;\r\n Classroom360AttendanceChangeAll: boolean;\r\n C360DisciplineReferralsv10PBIS: boolean;\r\n C360DisciplineReferralsv10PBISClassroom: boolean;\r\n AllowStudentsToChangeTheirPassword: boolean;\r\n LegacyURL: string;\r\n RedirectTeachersTo360: boolean;\r\n UseUnifiedLoginPage: boolean;\r\n AllowNewFamiliesToSelfRegister: boolean;\r\n AllowExistingFamiliesToAddNewStudentsInOR: boolean;\r\n AllowExistingFamiliesToAddNewStudentsInUHHD: boolean;\r\n S360HealthShowScreenings: boolean;\r\n S360DisplayImmunizations: boolean;\r\n S360DisplayMedications: boolean;\r\n S360DisplayHealthVisitLog: boolean;\r\n S360DisplayDoctors: boolean;\r\n S360DisplayInsurane: boolean;\r\n S360DisplayScreenings: boolean;\r\n AllowParentStudentEmail: boolean;\r\n InstanceName: string;\r\n DisplayFullBulletins: boolean;\r\n UseDisciplineEventModel: boolean;\r\n C360DataQueryAllowEditing: boolean;\r\n AddReferralsForAllStudents: boolean;\r\n UsernamePasswordRequestEmail: string;\r\n UsernamePasswordRequestPhone: string;\r\n MassEmailContactsGrouped: boolean;\r\n DefaultEmailReplyToAddress: string;\r\n UtilizeDistributebyEmail: boolean;\r\n TeachersMustMarkAttendanceForProjectedStudent: boolean;\r\n PresentAttendanceCode: string;\r\n ImportGradeBookFromCanvas: boolean;\r\n ScoreStandardsByAssignment: boolean;\r\n LegacyVersion: string;\r\n ReportsVersion: string;\r\n StudentNotes: boolean;\r\n AllowSpanishLanguageMailings: boolean;\r\n DisableAllEmail: boolean;\r\n AllowAutoRunReport: boolean;\r\n MaxReportSnapshotAllowed: number;\r\n EnablePulseSSO: boolean;\r\n PulseURL: string;\r\n DisplayGoogleClassroom: boolean;\r\n TraversaEnabled: boolean;\r\n VersatransEnabled: boolean;\r\n AllowGALDSStudentPortal: boolean;\r\n AllowGALDSParentPortal: boolean;\r\n GALDSServiceURL: string;\r\n DisplaySchoology: boolean;\r\n ShowTraversaBusNumber: boolean;\r\n ShowTraversaBusRoute: boolean;\r\n ActivateDisciplineTeams: boolean;\r\n TryNewApplication: boolean;\r\n State: string;\r\n ReportDefinitionsOption: number;\r\n AllowArchiveReportPDF: boolean;\r\n UtilizeTranscriptTracking: boolean;\r\n BlockClassroom360: boolean;\r\n AllowFutureFeeBillingPayments: boolean;\r\n ActivateApplicationMonitoring: boolean;\r\n EFormUseRoles: boolean;\r\n EFormNonResident: boolean;\r\n ActivateBehavior360: boolean;\r\n ActivateEForms: boolean;\r\n MailServer: string;\r\n GoogleAuthentication: boolean;\r\n GoogleClientId: string;\r\n DisplayItsLearning: boolean;\r\n SDMIntegration: boolean;\r\n ActivateBroadcast: boolean;\r\n BroadcastInterval: number;\r\n ForceNewApplication: boolean;\r\n ForceNewApplicationPS: boolean;\r\n CreateServiceActivityForHonorRoll: boolean;\r\n HonorRollProgramID: number;\r\n CreditDecimalPlaces: number;\r\n ActivateGoogleAuthenticationForStaff: boolean;\r\n ActivateGoogleAuthenticationForStudent: boolean;\r\n CustomizationDevMode: boolean;\r\n ActivateRegistrationEnrollment360: boolean;\r\n ActivateAttendanceAdministration360: boolean;\r\n ActivateNotificationFramework360: boolean;\r\n ActivateGlobalSearch360: boolean;\r\n S360HideAttendanceComments: boolean;\r\n BehaviorLetterDocumentType: string;\r\n ActivateEFormsPremium: boolean;\r\n ActivateAcademicHistory360: boolean;\r\n ActivateProgramAndService360: boolean;\r\n ActivateFeesAndBilling: boolean;\r\n EnableDataDefinitions: boolean;\r\n EnableCustomizationFramework: boolean;\r\n CombineGoalsAndObjectives: boolean;\r\n C360CustomFieldsImported: boolean;\r\n ForceTeachersDate: Date;\r\n UseSection504: boolean;\r\n EnableSelfRegistrationCode: boolean;\r\n ClassicIsGone: boolean;\r\n ViewDocumentBeforeApproval: boolean;\r\n AllowCopy: boolean;\r\n AllowCopyToCreateAmendedDocument: boolean;\r\n AllowCopyToCreateAnnualDocument: boolean;\r\n AllowSpEdAssessment: boolean;\r\n AllowCheckInOutSpEdForms: boolean;\r\n AllowCopyToCreateBothDocument: boolean;\r\n AllowPrintWithoutWorkingDraft: boolean;\r\n ShowParentInformation: boolean;\r\n ShowIEPInformation: boolean;\r\n ShowEvalInformation: boolean;\r\n ShowReferralInformation: boolean;\r\n ForceSDMADMINAudit: boolean;\r\n EnableMergeSectionsForAttendance: boolean;\r\n EnableMergeSectionsForGradebook: boolean;\r\n ActivateKendoGridInMasterSchedule360: boolean;\r\n EnableFreeReducedMealApp: boolean;\r\n IntegrateWithTylerU: boolean;\r\n EnableDistrictCourses360: boolean;\r\n UseNewSped: boolean;\r\n AllowGradingGPADecimals: boolean;\r\n AllowGradingRCGDecimals: boolean;\r\n AllowGradingTermOverrideCodes: boolean;\r\n ActivateKendoGridInProgramsAndServices360: boolean;\r\n UseEdFiModel: boolean;\r\n EnableWithdrawalOptions: boolean;\r\n EnableSped360: boolean;\r\n EnableEFormFees: boolean;\r\n EnableMyReports: boolean;\r\n UseTID: boolean;\r\n EnableScheduling360: boolean;\r\n AllowEFormFees: boolean;\r\n InactiveSpEdModule: boolean;\r\n EnableClassInformationandTeacherProfiles: boolean;\r\n EnableDataQueryAddSimpleMode: boolean;\r\n EnableDataQueryPermissionMetadata: boolean;\r\n ShowFormulaMessageOnAssignmentsTab: boolean;\r\n EnableSummerWithdrawal: boolean;\r\n EnableSPEDAssessment: boolean;\r\n EnableStaffFindID: boolean;\r\n PayPalSandbox: string;\r\n EnableGenderPronouns: boolean;\r\n EnableGoogleIdentityServices: boolean;\r\n}","/* eslint-disable camelcase */\r\nimport { User, UserManager, UserManagerSettings } from 'oidc-client';\r\nimport { Injectable } from '@angular/core';\r\nimport { LoginService } from './login.service';\r\nimport { Router } from '@angular/router';\r\nimport { from, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nexport { User };\r\n\r\n@Injectable()\r\nexport class AuthService {\r\n userManager: UserManager;\r\n\r\n constructor(private loginService: LoginService, private router: Router) {\r\n const settings = {\r\n authority: this.loginService.OidcSettings?.Authority,\r\n client_id: this.loginService.OidcSettings?.ClientId,\r\n redirect_uri: this.loginService.OidcSettings?.RedirectUri,\r\n silent_redirect_uri:\r\n this.loginService.OidcSettings?.SilentRedirectUri,\r\n post_logout_redirect_uri:\r\n this.loginService.OidcSettings?.PostLogoutRedirectUri,\r\n response_type: 'id_token token',\r\n scope: this.loginService.OidcSettings?.Scope,\r\n };\r\n this.userManager = new UserManager(settings);\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager.removeUser();\r\n this.gotoPostLogoutUrl();\r\n });\r\n this.userManager.events.addAccessTokenExpired(async () => {\r\n await this.userManager.removeUser();\r\n this.gotoPostLogoutUrl();\r\n });\r\n }\r\n\r\n public getUser(): Promise {\r\n return this.userManager.getUser();\r\n }\r\n\r\n public login(): Promise {\r\n return this.userManager.signinRedirect();\r\n }\r\n\r\n public renewToken(): Promise {\r\n return this.userManager.signinSilent();\r\n }\r\n\r\n public logout(): Promise {\r\n return this.userManager.signoutRedirect();\r\n }\r\n\r\n async signinCallback() {\r\n try {\r\n const user = await this.userManager.signinRedirectCallback();\r\n this.router.navigate(['/login']);\r\n } catch (error) {\r\n console.error('oidcHelper.signinRedirectCallback error: ' + error);\r\n this.gotoPostLogoutUrl();\r\n }\r\n }\r\n\r\n async signinSilent() {\r\n try {\r\n await this.userManager.signinSilentCallback();\r\n } catch (error) {\r\n console.error('oidcHelper.signinSilentCallback error: ' + error);\r\n }\r\n }\r\n\r\n isLoggedInObs(): Observable {\r\n return from(this.userManager.getUser()).pipe(map(\r\n (user) => {\r\n if (user) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n ));\r\n }\r\n\r\n gotoPostLogoutUrl() {\r\n if (this.loginService.OidcSettings.PostLogoutRedirectUri) {\r\n window.location.assign(\r\n this.loginService.OidcSettings.PostLogoutRedirectUri\r\n );\r\n } else {\r\n window.location.reload();\r\n }\r\n }\r\n}\r\n","import { AbstractControl, FormGroup, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { LoginSettings } from '../loginSetting.model';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { System } from '../../../shared-components/System';\r\n\r\nexport function validateCurrentPassword(currentPass: string, loginSettings: LoginSettings, user?: User): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (control.value != null) {\r\n if (control.value != currentPass) {\r\n if (control.value.toLowerCase() !== currentPass.toLowerCase() || (user.UserType == 1 && loginSettings.Student360StaffPasswordCaseSensitive == true) || loginSettings.PasswordCaseSensitive == true) {\r\n return { 'invalidCurrentPassword': true };\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\nexport function validateCurrentPasswordV9(currentPass: string): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (control.value !== undefined && control.value !== null && control.value !== currentPass) {\r\n return { 'invalidCurrentPassword': true };\r\n }\r\n return null;\r\n };\r\n}\r\nexport const passwordsMatch: ValidatorFn = (control: FormGroup): ValidationErrors | null => {\r\n const newPassword = control.get('newPassword');\r\n const repeatNewPassword = control.get('repeatNewPassword');\r\n if (newPassword.value !== repeatNewPassword.value) {\r\n return { 'passwordsMustMatch': true };\r\n }\r\n return null;\r\n};\r\n\r\nexport function passwordsMatchForChangePassword(loginSettings: LoginSettings, user?: User): ValidatorFn {\r\n return (control: FormGroup): ValidationErrors | null => {\r\n const newPassword = control.get('newPassword');\r\n const repeatNewPassword = control.get('repeatNewPassword');\r\n if (newPassword.value && repeatNewPassword.value) {\r\n if (newPassword.value !== repeatNewPassword.value) {\r\n if (!loginSettings.V10) {\r\n if ((user.UserType == 1 && loginSettings.Student360StaffPasswordCaseSensitive == true) || loginSettings.PasswordCaseSensitive == true || newPassword.value.toLowerCase() !== repeatNewPassword.value.toLowerCase()) {\r\n return { 'passwordsMustMatch': true };\r\n }\r\n }\r\n else {\r\n return { 'passwordsMustMatch': true };\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function requiresUpperCase(loginSettings: LoginSettings): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n const regexp = new RegExp('(?=.*[A-Z])');\r\n if (control.value !== undefined && !regexp.test(control.value) && loginSettings.V10 == true && loginSettings.PasswordRequiresUpper == true) {\r\n return { 'mustContainUpperCase': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function isValidEmail(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n const regexp = System.mailRegexp;\r\n if (control.value !== undefined && !regexp.test(control.value)) {\r\n return { 'notValidEmail': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function requiresNumeric(loginSettings: LoginSettings): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n const regexp = new RegExp('(?=.*[0-9])');\r\n if (control.value !== undefined && !regexp.test(control.value) && loginSettings.V10 == true && loginSettings.PasswordRequiresNumeric == true) {\r\n return { 'mustContainNumeric': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function requiresSpecial(loginSettings: LoginSettings): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n const regexp = new RegExp('(?=.*[^a-zA-Z0-9+])');\r\n if (control.value !== undefined && !regexp.test(control.value) && loginSettings.V10 == true && loginSettings.PasswordRequiresSpecial == true) {\r\n return { 'mustContainSpecial': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function mustBeDifferent(user: User, loginSettings: LoginSettings): ValidatorFn {\r\n const currentPassword = user.Password ?? '';\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (loginSettings.V10 && control.value !== undefined && control.value == currentPassword) {\r\n return { 'mustBeDifferent': true };\r\n }\r\n\r\n if (!loginSettings.V10 && control.value !== undefined) {\r\n if (user.UserType == 1 && loginSettings.Student360StaffPasswordCaseSensitive == true && control.value == currentPassword) {\r\n return { 'mustBeDifferent': true };\r\n }\r\n else if (user.UserType == 1 && loginSettings.Student360StaffPasswordCaseSensitive == false && control.value && control.value.toLowerCase() === currentPassword.toLowerCase()) {\r\n return { 'mustBeDifferent': true };\r\n }\r\n else if (control.value && control.value.toLowerCase() === currentPassword.toLowerCase()) {\r\n return { 'mustBeDifferent': true };\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function notSameAsUsername(user: User, loginSettings: LoginSettings): ValidatorFn {\r\n const userName = user.UserName;\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (control.value !== undefined && control.value == userName && loginSettings.PreventEqualPassUserName) {\r\n return { 'notSameAsUsername': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function requiresMixedLettersNumbers(loginSettings: LoginSettings, user?: User): ValidatorFn {\r\n const passwordFormat = /^(?=.*\\d)(?=.*[A-Za-z])[0-9a-zA-Z_@./#!$%^&*+-]*$/;\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n const value = control.value;\r\n if ((control.value !== undefined && control.value !== null) && !value.match(passwordFormat) && !loginSettings.V10 && (user ? user.UserType == 1 : true) && loginSettings.PasswordRequiresMixedLettersAndNumbers) {\r\n return { 'requiresMixedLettersNumbers': true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function preventPasswordReuse(loginSettings: LoginSettings, user: User): ValidatorFn {\r\n const previousPasswords = user.ExpiredPasswords;\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n if (control.value !== undefined && loginSettings.PreventPasswordReuse && previousPasswords.indexOf(control.value) > -1) {\r\n return { 'preventPasswordReuse': true };\r\n }\r\n return null;\r\n };\r\n}\r\n","import { System } from './../../shared-components/System';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { LoginSettings } from './LoginSetting.model';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { AccessHistory } from '../../classroom360/system-settings/system-settings-v9/upgrade-access-history/access-history-sub-tab/access-history-sub-tab.model';\r\nimport { OIDCSettings } from './oidcSetting.model';\r\n\r\n@Injectable()\r\nexport class LoginService {\r\n\r\n public LoginSettings: LoginSettings;\r\n public OidcSettings: OIDCSettings;\r\n public googleError = '';\r\n public hasSignedIntoGoogle = false;\r\n public hasSignedIntoTylerId = false;\r\n public isLogin: boolean;\r\n public redirectingToClassic: boolean;\r\n\r\n private _IntegrateWithTylerU: boolean;\r\n get IntegrateWithTylerU(): boolean {\r\n return this._IntegrateWithTylerU;\r\n }\r\n set IntegrateWithTylerU(value: boolean) {\r\n this._IntegrateWithTylerU = value;\r\n this.observableIntegrateWithTylerU.next(this._IntegrateWithTylerU);\r\n }\r\n\r\n observableLogin = new Subject();\r\n observableLoginStream$ = this.observableLogin.asObservable();\r\n\r\n observableLoginError = new Subject();\r\n observableLoginErrorStream$ = this.observableLoginError.asObservable();\r\n\r\n observableIntegrateWithTylerU = new Subject();\r\n observableIntegrateWithTylerUStream$ = this.observableIntegrateWithTylerU.asObservable();\r\n public resetLanguage = new EventEmitter();\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getDistrictSettings(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetLoginDistrictSettings');\r\n }\r\n\r\n getOIDCSettings(): Observable {\r\n return this.http.get(System.apiURL.Student + 'getOIDCSettings');\r\n }\r\n\r\n logonTID(idToken: string, userType: number): Observable {\r\n const data = 'grant_type=tyler_oAuth' +\r\n '&idToken=' + encodeURIComponent(idToken) +\r\n '&userType=' + userType;\r\n return this.http.post(System.tokenURL, data);\r\n }\r\n\r\n getApplicationVersion(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetApplicationVersion');\r\n }\r\n\r\n saveDistrictSettings(schoolId: number, yearId: number, settings: LoginSettings): Observable {\r\n const queryString = '?schoolId=' + schoolId +\r\n '&yearId=' + yearId;\r\n return this.http.post(System.apiURL.Student + 'SaveLoginDistrictSettings' + queryString, settings);\r\n }\r\n\r\n logon(userName: string, password: string, userType = 1): Observable {\r\n const data = 'grant_type=password&username=' + encodeURIComponent(userName) + '&password=' + encodeURIComponent(password) + '&scope=' + userType;\r\n return this.http.post(System.tokenURL, data);\r\n }\r\n\r\n logonGoogle(idToken: string, userType: number, grantType: string): Observable {\r\n const data = 'grant_type=' + grantType +\r\n '&idToken=' + encodeURIComponent(idToken) +\r\n '&userType=' + userType;\r\n return this.http.post(System.tokenURL, data);\r\n }\r\n\r\n getUser(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetUser');\r\n }\r\n\r\n getForgetPasswordDetail(params: string[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetForgetPasswordDetail', params);\r\n }\r\n\r\n getRegisterParent(id: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetRegisterParent?id=' + id);\r\n }\r\n\r\n getRegisterParentInfo(parentEmail: string, verificationCode: string): Observable {\r\n let queryString = '';\r\n queryString += '?parentEmail=' + encodeURIComponent(parentEmail) +\r\n '&verificationCode=' + verificationCode;\r\n return this.http.get(System.apiURL.Student + 'GetRegisterParentInfo' + queryString);\r\n }\r\n\r\n\r\n getUserDefaultSchoolYearIsBlocked(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetUserDefaultSchoolYearIsBlocked');\r\n }\r\n\r\n saveUserLoginInfo(userId: number, userType: number, height: number, width: number, loginAction: number, loginName: string): void {\r\n this.getClientInformation().subscribe((clientInfo) => {\r\n const userAgent = window.navigator.userAgent;\r\n\r\n let queryString = '';\r\n queryString += '?userId=' + userId +\r\n '&userType=' + userType +\r\n '&clientIP=' + clientInfo[0] +\r\n '&clientMachineName=' + clientInfo[1] +\r\n '&serverIP=' + clientInfo[2] +\r\n '&screenHeight=' + height +\r\n '&screenWidth=' + width +\r\n '&loginAction=' + loginAction +\r\n '&loginName=' + loginName +\r\n '&userAgent=' + userAgent;\r\n\r\n this.http.get(System.apiURL.Student + 'SaveUserLoginInfo' + queryString).subscribe();\r\n });\r\n }\r\n\r\n getClientInformation(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetClientInformation');\r\n }\r\n\r\n sendForgetUserNameEmail(firstName: string, lastName: string, emailAddress: string, userType: number): Observable {\r\n let queryString = '';\r\n queryString += '?firstName=' + firstName +\r\n '&lastName=' + lastName +\r\n '&emailAddress=' + emailAddress +\r\n '&userType=' + userType;\r\n return this.http.get(System.apiURL.Student + 'SendForgetUserNameEmail' + queryString);\r\n }\r\n\r\n saveForgetPassword(password: string, area: string, forgetPasswordParams: any): Observable {\r\n password = encodeURIComponent(password);\r\n return this.http.post(System.apiURL.Student + `SaveForgetPassword?password=${password}&area=${area}`, forgetPasswordParams, { observe: 'response' });\r\n }\r\n\r\n sendForgetPasswordEmail(userName: string, userType: number, setPassword: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?userName=' + userName +\r\n '&userType=' + userType +\r\n '&setPassword=' + setPassword;\r\n return this.http.get(System.apiURL.Student + 'SendForgetPasswordEmail' + queryString);\r\n }\r\n\r\n getStaffIdByUserId(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetStaffIdByUserId');\r\n }\r\n\r\n saveTylerAccessHistory(accessHistory: AccessHistory) {\r\n return this.http.post(System.apiURL.Classroom + 'SaveTylerAccessHistory', accessHistory);\r\n }\r\n\r\n}\r\n","import { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\n\r\n\r\nexport class AttendanceHistoryByClassReport {\r\n SiteSectionId: number;\r\n DistrictSubjectId: number;\r\n TermDescription: string;\r\n Course: string;\r\n StartPeriod: number;\r\n SubjectTitle: string;\r\n TeacherName: string;\r\n RoomNumber: string;\r\n StudentCount: number;\r\n Selected = false;\r\n}\r\n\r\n// export enum ShowTotalHoursOption {\r\n// IncludeAllAbsences = 0,\r\n// IncludeSelectedAbsences = 1,\r\n// }\r\n\r\n// export enum PeriodsToTallyOption {\r\n// OnlyPeriodsforEachSection = 0,\r\n// AllPeriodsForEachStudent = 1,\r\n// }\r\n\r\nexport class ReportParameters {\r\n\r\n // enum showTotalHoursSelection {\r\n // includeAllAbsences,\r\n // }\r\n\r\n // select on history dates\r\n SelectHistoryDates: boolean;\r\n HistoryFrom: Date;\r\n HistoryTo: Date; // string; // Date;\r\n\r\n // select on residency codes\r\n SelectResidencyCodes: boolean;\r\n ResidencyCodeFrom: string; // pub_strResidencyCodeFrom\r\n ResidencyCodeTo: string; // pub_strResidencyCodeTo\r\n ResidencyCodes: Lookup[] = [];\r\n\r\n // select on category codes\r\n SelectCategoryCodes: boolean;\r\n CategoryCodes: Lookup[] = [];\r\n CategoryCodeFrom: string; // pub_strCategoryCodeFrom\r\n CategoryCodeTo: string; // pub_strCategoryCodeTo\r\n\r\n // select on grade levels\r\n SelectGradeLevels: boolean;\r\n // pub_strGradeLevelRankFrom\r\n // pub_strGradeLevelRankTo\r\n GradeLevels: Lookup[] = [];\r\n GradeLevelFrom: string;\r\n GradeLevelTo: string;\r\n\r\n GradeLevelRankFrom: string;\r\n GradeLevelRankTo: string;\r\n\r\n AttendanceCodes: Lookup[] = [];\r\n\r\n // history codes to tally\r\n HistoryCodesToTally: string; // pub_strHistoryCodesToTally\r\n\r\n // show total hours\r\n // ShowTotalHours: number;\r\n // IncludeAbsences: string;\r\n IncludeAllAbsences: boolean;\r\n IncludeSelectedAbsences: boolean;\r\n\r\n HistoryMinMax: boolean;\r\n\r\n\r\n // periods to tally\r\n TallyTardies: boolean;\r\n // PeriodsToTally: number;\r\n HistoryCountMin: string; // number;\r\n HistoryCountMax: string; // number;\r\n\r\n OnlyPeriodsforEachSection: boolean;\r\n\r\n Count1Day: boolean;\r\n SplitABDays: boolean;\r\n\r\n\r\n\r\n // tally tardies\r\n\r\n // days (full/half) select codes\r\n // pub_strDayFullHalfCode\r\n\r\n DaysFullHalf: boolean;\r\n FullDay: boolean;\r\n HalfDay: boolean;\r\n\r\n // todays current codes tally\r\n\r\n CurrentMinMax: boolean;\r\n CurrentCodesTallyCountMin: string; // number;\r\n CurrentCodesTallyCountMax: string; // number;\r\n\r\n TodaysCurrentTally: boolean; // pub_blnTodaysCurrentTally = this.reportParameters.TodaysCurrentTally;\r\n DaysCodes: string;\r\n\r\n DaysCountMin: string; // number;\r\n DaysCountMax: string; // number;\r\n\r\n\r\n\r\n\r\n // checkboxes\r\n DoubleSpaceAfterStudentName: boolean;\r\n ShowHistoryRecords: boolean;\r\n ShowOnlySelectedRecords: boolean;\r\n ShowComments: boolean;\r\n IgnoreAttendance: boolean;\r\n ShowPresentCount :boolean;\r\n}\r\n\r\nexport class AttendanceHistoryByStudentPreferences {\r\n // pub_intReportType: number;\r\n // pub_blnParentInfo: boolean;\r\n // pub_strStudentSelectionStatus: string;\r\n // pub_blnSelectHistoryDates: boolean;\r\n // pub_datHistoryFrom: Date;\r\n // pub_datHistoryTo: Date;\r\n // pub_blnSelectResidencyCodes: boolean;\r\n // pub_strResidencyCodeFrom: string;\r\n // pub_strResidencyCodeTo: string;\r\n // pub_blnSelectCategoryCodes: boolean;\r\n // pub_strCategoryCodeFrom: string;\r\n // pub_strCategoryCodeTo: string;\r\n // pub_blnSelectGradeLevels: boolean;\r\n // pub_strGradeLevelRankFrom: string;\r\n // pub_strGradeLevelRankTo: string;\r\n // pub_strHistoryCodesToTallyIds: string;\r\n // pub_strHistoryCodesToTally: string;\r\n // pub_blnCount1PerDay: boolean;\r\n // pub_blnSplitABDays: boolean;\r\n // pub_strHistoryPeriodsToTally: string;\r\n // pub_blnOnlyPeriodsforEachSection: boolean;\r\n // pub_blnSelectHistoryCountMinMax: boolean;\r\n // pub_intHistoryCountMin: number;\r\n // pub_intHistoryCountMax: number;\r\n // pub_blnTallyTardies: boolean;\r\n // pub_strTallyTardiesCodesIds: string;\r\n // pub_strTallyTardiesCodes: string;\r\n // pub_blnDaysFullHalfSelect: boolean;\r\n // pub_blnFullDay: boolean;\r\n // pub_blnHalfDay: boolean;\r\n // pub_strDayFullHalfCode: string;\r\n // pub_intDaysCountMin: number;\r\n // pub_intDaysCountMax: number;\r\n // pub_blnTodaysCurrentTally: boolean;\r\n // pub_strTodaysCodesToTallyIds: string;\r\n // pub_strTodaysCodesToTally: string;\r\n // pub_blnCurrentMinMax: boolean;\r\n // pub_intCurrentCodesTallyCountMin: number;\r\n // pub_intCurrentCodesTallyCountMax: number;\r\n // pub_blnDoubleSpaceAfterStudentName: boolean;\r\n // pub_blnShowHistoryRecords: boolean;\r\n // pub_blnShowOnlySelectedRecords: boolean;\r\n // pub_blnShowComments: boolean;\r\n // pub_blnShowCurrentAtndSteps: boolean;\r\n // pub_blnIgnoreAttendance: boolean;\r\n // pub_blnNotEnrolled: boolean;\r\n // pub_blnIncludeAllAbsences: boolean;\r\n // pub_blnConsecutiveDays: boolean;\r\n\r\n pub_intReportType: number;\r\n pub_strStudentSelectionStatus: string;\r\n pub_blnSelectHistoryDates: boolean;\r\n pub_datHistoryTo: Date;\r\n pub_blnSelectResidencyCodes: boolean;\r\n pub_strResidencyCodeFrom: string;\r\n pub_strResidencyCodeTo: string;\r\n pub_blnSelectCategoryCodes: boolean;\r\n pub_strCategoryCodeFrom: string;\r\n pub_strCategoryCodeTo: string;\r\n pub_blnSelectGradeLevels: boolean;\r\n pub_strGradeLevelRankFrom: string;\r\n pub_strGradeLevelRankTo: string;\r\n pub_blnSplitABDays: boolean;\r\n pub_blnOnlyPeriodsforEachSection: boolean;\r\n pub_blnSelectHistoryCountMinMax: boolean;\r\n pub_intHistoryCountMin: string; // number;\r\n pub_intHistoryCountMax: string; // number;\r\n pub_blnTallyTardies: boolean;\r\n pub_blnDaysFullHalfSelect: boolean;\r\n pub_blnFullDay: boolean;\r\n pub_blnHalfDay: boolean;\r\n pub_intDaysCountMin: string; // number;\r\n pub_intDaysCountMax: string; // number;\r\n pub_blnTodaysCurrentTally: boolean;\r\n pub_blnCurrentMinMax: boolean;\r\n pub_intCurrentCodesTallyCountMin = '1';\r\n pub_intCurrentCodesTallyCountMax = '999';\r\n pub_blnDoubleSpaceAfterStudentName: boolean;\r\n pub_blnShowHistoryRecords: boolean;\r\n pub_blnShowPresentCount: boolean;\r\n pub_blnShowOnlySelectedRecords: boolean;\r\n pub_blnShowComments: boolean;\r\n pub_blnShowCurrentAtndSteps: boolean;\r\n pub_blnNotEnrolled: boolean;\r\n pub_blnIncludeAllAbsences: boolean;\r\n pub_blnParentInfo: boolean;\r\n pub_blnCount1PerDay: boolean;\r\n pub_strHistoryCodesToTally: string;\r\n pub_strTallyTardiesCodes: string;\r\n pub_strTodaysCodesToTally: string;\r\n pub_strDayFullHalfCode: string;\r\n pub_strReportTitle: string;\r\n\r\n // NOT IN USER PREFERENCES DTO\r\n pub_datHistoryFrom: Date;\r\n pub_strTallyTardiesCodesIds: string;\r\n pub_strHistoryCodesToTallyIds: string;\r\n pub_strTodaysCodesToTallyIds: string;\r\n pub_blnIgnoreAttendance: boolean;\r\n pub_strHistoryPeriodsToTally: string;\r\n pub_blnConsecutiveDays: boolean;\r\n}\r\n\r\n/*\r\n\r\nOnlyPeriodsforEachSection\r\n\r\nhistoryCodesToTallyIds\r\nhistoryCodesToTally\r\ntallyTardiesCodesIds\r\ntallyTardiesCodes\r\ndayFullHalfCode\r\n\r\ntodayCodesToTallyIds\r\ntodayCodesToTally\r\n\r\n pub_intReportType = this.Report.ReportType;\r\n pub_blnParentInfo = false;\r\n pub_strStudentSelectionStatus = 'Active';\r\n pub_blnSelectHistoryDates = this.reportParameters.SelectHistoryDates;\r\n pub_datHistoryFrom = this.reportParameters.HistoryFrom\r\n pub_datHistoryTo = this.reportParameters.HistoryTo\r\n pub_blnSelectResidencyCodes = this.reportParameters.SelectResidencyCodes\r\n pub_strResidencyCodeFrom = this.reportParameters.ResidencyCodeFrom\r\n pub_strResidencyCodeTo = this.reportParameters.ResidencyCodeTo\r\n pub_blnSelectCategoryCodes = this.reportParameters.SelectCategoryCodes\r\n pub_strCategoryCodeFrom = this.reportParameters.CategoryCodeFrom\r\n pub_strCategoryCodeTo = this.reportParameters.CategoryCodeTo\r\n pub_blnSelectGradeLevels = this.reportParameters.SelectGradeLevels\r\n pub_strGradeLevelRankFrom = this.reportParameters.GradeLevelRankFrom\r\n pub_strGradeLevelRankTo = this.reportParameters.GradeLevelRankTo\r\n pub_strHistoryCodesToTallyIds = this.historyCodesToTallyIds;\r\n pub_strHistoryCodesToTally = this.historyCodesToTally;\r\n\r\n pub_blnCount1PerDay = this.reportParameters.Count1Day;\r\n pub_blnSplitABDays = this.reportParameters.SplitABDays;\r\n pub_strHistoryPeriodsToTally = \"\";\r\n pub_blnOnlyPeriodsforEachSection = this.reportParameters.OnlyPeriodsforEachSection;\r\n\r\n pub_blnSelectHistoryCountMinMax = this.reportParameters.HistoryMinMax;\r\n pub_intHistoryCountMin = this.reportParameters.SelectHistoryCountMin;\r\n pub_intHistoryCountMax = this.reportParameters.SelectHistoryCountMax;\r\n\r\n pub_blnTallyTardies = this.reportParameters.TallyTardies;\r\n pub_strTallyTardiesCodesIds = this.tallyTardiesCodesIds;\r\n pub_strTallyTardiesCodes = this.tallyTardiesCodes;\r\n\r\n pub_blnDaysFullHalfSelect = this.reportParameters.DaysFullHalf;\r\n pub_blnFullDay = this.reportParameters.FullDay;\r\n pub_blnHalfDay = this.reportParameters.HalfDay;\r\n pub_strDayFullHalfCode = dayFullHalfCode;\r\n pub_intDaysCountMin = this.reportParameters.DaysCountMin;\r\n pub_intDaysCountMax = this.reportParameters.DaysCountMax;\r\n pub_blnTodaysCurrentTally = this.reportParameters.TodaysCurrentTally;\r\n pub_strTodaysCodesToTallyIds = todayCodesToTallyIds;\r\n pub_strTodaysCodesToTally = todayCodesToTally;\r\n pub_blnCurrentMinMax = this.reportParameters.CurrentMinMax;\r\n pub_intCurrentCodesTallyCountMin = this.reportParameters.CurrentCodesTallyCountMin;\r\n pub_intCurrentCodesTallyCountMax = this.reportParameters.CurrentCodesTallyCountMax;\r\n pub_blnDoubleSpaceAfterStudentName = this.reportParameters.DoubleSpaceAfterStudentName\r\n pub_blnShowHistoryRecords = this.reportParameters.ShowHistoryRecords;\r\n pub_blnShowOnlySelectedRecords = this.reportParameters.OnlySelectedRecords;\r\n pub_blnShowComments = this.reportParameters.ShowComments\r\n pub_blnShowCurrentAtndSteps = this.reportParameters.ShowCurrentAtndSteps;\r\n pub_blnIgnoreAttendance = this.reportParameters.IgnoreAttendance;\r\n pub_blnNotEnrolled = this.reportParameters.MarkNoEnrollment;\r\n pub_blnIncludeAllAbsences = this.reportParameters.IncludeAllAbsences;\r\n pub_blnConsecutiveDays = false;\r\n pub_blnShowPresentCount = this.reportParameters.ShowPresentCount;\r\n\r\n*/","\r\n
\r\n

{{report.Description}}

\r\n
\r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{result.LongDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n Per {{element.Period}} Term {{element.TermCode}} Subject {{element.SubjectCode}}Sec{{element.Section}} Title {{element.AbbreviatedTitle}} Teacher Name{{element.TeacherName}} #Std{{element.StudentCount}} Days{{element.DaysGroupDescription}}
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n
Selection & Options:
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
From:To:
\r\n \r\n \r\n Select on History Dates\r\n \r\n \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 on Residency Codes\r\n \r\n \r\n \r\n \r\n \r\n {{residencyCode.CodeDescription}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{residencyCode.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Select on Category Codes\r\n \r\n \r\n \r\n \r\n {{categoryCode.CodeDescription}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{categoryCode.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Select on Grade Levels\r\n \r\n \r\n \r\n \r\n {{gradelevel.CodeDescription}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{gradelevel.CodeDescription}}\r\n \r\n \r\n \r\n \r\n
\r\n History Codes to Tally\r\n \r\n \r\n
\r\n \r\n \r\n {{attCode.TextField}}\r\n \r\n
\r\n
\r\n Show Total Hours\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n Include all absences on days that have selected codes\r\n \r\n \r\n Only include absences that match selected codes\r\n \r\n \r\n\r\n \r\n
\r\n Periods to Tally\r\n \r\n
\r\n \r\n \r\n \r\n Only Periods for Each Class‑Section\r\n \r\n \r\n All Periods for Each Student\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Count 1/day\r\n \r\n \r\n Split A/B Days\r\n \r\n\r\n
\r\n \r\n Select on Min/Max for above Tally\r\n \r\n \r\n \r\n \r\n \r\n To\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Tally Tardies\r\n \r\n
\r\n \r\n \r\n {{attCode.TextField}}\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Days (Full/Half) Select Codes\r\n \r\n \r\n
\r\n \r\n {{attCode.TextField}}\r\n \r\n
\r\n\r\n
\r\n \r\n FullDay\r\n \r\n HalfDay\r\n \r\n \r\n \r\n \r\n To\r\n \r\n \r\n \r\n
\r\n \r\n \r\n Today's Current Codes Tally\r\n \r\n \r\n
\r\n \r\n {{attCode.TextField}}\r\n \r\n
\r\n
\r\n \r\n Select on Min/Max for above Tally\r\n \r\n \r\n \r\n \r\n \r\n To\r\n \r\n \r\n \r\n
\r\n \r\n Double‑space (after Student Name)\r\n \r\n \r\n
\r\n \r\n Show Present Count\r\n \r\n \r\n
\r\n \r\n Show History Records\r\n \r\n \r\n \r\n Only for Selected Records\r\n \r\n
\r\n \r\n Show Comments\r\n \r\n \r\n\r\n
\r\n \r\n Ignore Attendance prior to Student's current ReInstate Date\r\n \r\n
\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, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { formatDate } from '@angular/common';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport * as moment from 'moment';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\nimport { LookupService } from '../../../../shared-components/lookup/lookup.service';\r\nimport { DataSource } from '../../models/data-source.model';\r\nimport { AttendanceHistoryByStudentPreferences, ReportParameters } from './attendance-history-by-class.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { TextMaskConfig } from 'angular2-text-mask/src/angular2TextMask';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-attendance-history-by-class',\r\n templateUrl: './attendance-history-by-class.component.html',\r\n styleUrls: ['./attendance-history-by-class.component.css'],\r\n})\r\nexport class AttendanceHistoryByClassComponent implements OnInit, OnDestroy {\r\n subscriptions: Subscription[] = [];\r\n schoolYearSettings: SchoolYearSettings;\r\n userPreferences: AttendanceHistoryByStudentPreferences;\r\n reportParameter = new ReportParameterV9();\r\n dialogRef: MatDialogRef;\r\n term: CourseTerm;\r\n dataSource: MatTableDataSource;\r\n gridColumns: string[] = ['SelectAll', 'Period', 'TermCode', 'SubjectCode', 'Section', 'AbbreviatedTitle', 'TeacherName', 'StudentCount', 'DaysGroupDescription'];\r\n report: ReportV9;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n reportParameters = new ReportParameters();\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n public numberMask: TextMaskConfig;\r\n showRun = false;\r\n reportType: number;\r\n reportName: string;\r\n workflowReport = false;\r\n inDebugMode = false;\r\n\r\n @ViewChild('ReportTitle', { read: ElementRef }) reportTitle: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n @ViewChild('FromPeriod', { read: ElementRef }) fromPeriod: ElementRef;\r\n @ViewChild('ToPeriod', { read: ElementRef }) toPeriod: ElementRef;\r\n @ViewChild('HistoryFrom', { read: ElementRef }) historyFrom: ElementRef;\r\n @ViewChild('HistoryTo', { read: ElementRef }) historyTo: ElementRef;\r\n @ViewChild('ResidencyCodeFrom', { read: ElementRef }) residencyCodeFrom: ElementRef;\r\n @ViewChild('ResidencyCodeTo', { read: ElementRef }) residencyCodeTo: ElementRef;\r\n @ViewChild('CategoryCodeFrom', { read: ElementRef }) categoryCodeFrom: ElementRef;\r\n @ViewChild('CategoryCodeTo', { read: ElementRef }) categoryCodeTo: ElementRef;\r\n @ViewChild('GradeLevelFrom', { read: ElementRef }) gradeLevelFrom: ElementRef;\r\n @ViewChild('GradeLevelTo', { read: ElementRef }) gradeLevelTo: ElementRef;\r\n @ViewChild('HistoryCountMin', { read: ElementRef }) historyCountMin: ElementRef;\r\n @ViewChild('HistoryCountMax', { read: ElementRef }) historyCountMax: ElementRef;\r\n @ViewChild('CurrentCodesTallyCountMin', { read: ElementRef }) currentCodesTallyCountMin: ElementRef;\r\n @ViewChild('CurrentCodesTallyCountMax', { read: ElementRef }) currentCodesTallyCountMax: ElementRef;\r\n @ViewChild('FullDay', { read: ElementRef }) fullDay: ElementRef;\r\n @ViewChild('DaysCountMin', { read: ElementRef }) daysCountMin: ElementRef;\r\n @ViewChild('DaysCountMax', { read: ElementRef }) daysCountMax: ElementRef;\r\n\r\n isDataExist = false;\r\n\r\n historyCodesToTally: DataSource[] = [];\r\n tallyTardiesCodes: DataSource[] = [];\r\n todaysCodesToTally: DataSource[] = [];\r\n daysCodes: DataSource[] = [];\r\n\r\n historyCodesToTallyIds = ''; // string; // number[] = [];\r\n tallyTardiesCodesIds: string; // number[] = [];\r\n todaysCodesToTallyIds: string; // number[] = [];\r\n siteSectionIds = '';\r\n\r\n dayFullHalfCode: string;\r\n userPreferencePageName: string; // must match what's in UserPreferences DTO\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n AttendanceHistoryByClassDialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private lookupService: LookupService,\r\n ) {\r\n this.dialogRef = AttendanceHistoryByClassDialogRef;\r\n this.report = data.Report;\r\n }\r\n\r\n ngOnInit() {\r\n // NOTE: this is a C1 report and if user selects > 5 classes it will go to workflow, otherwise it will be a student attachment\r\n\r\n // if (this.inDebugMode) {\r\n // console.log(this.report);\r\n // }\r\n\r\n this.inDebugMode = this.reportingService.inDebugMode;\r\n this.report.ReportName = this.reportName;\r\n this.numberMask = this.reportingService.getNumberMask();\r\n this.reportName = 'CreateAttendanceHistoryByClass';\r\n this.userPreferencePageName = '/HistoryByClassCO.aspx'; // '/AttendanceHistoryByClass.aspx'; // must match what's in UserPreferences DTO\r\n this.reportParameter.ReportTitle = 'Attendance History By Class';\r\n this.reportType = 2; // this.userPreferences.pub_intReportType;\r\n this.getLookups(); // DEV NOTE: GETTING PREFERENCES IN getLookups()\r\n this.getSchoolYearSettings();\r\n this.getTerms();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n getLookups() {\r\n\r\n this.subscriptions.push(\r\n // Residency Codes\r\n this.reportingService.getResidencyCodesLookup().subscribe(lookups => {\r\n this.reportParameters.ResidencyCodes = lookups;\r\n })\r\n\r\n );\r\n\r\n this.subscriptions.push(\r\n // Category Codes\r\n this.reportingService.getEnrollmentCategoriesLookup().subscribe(lookups => {\r\n this.reportParameters.CategoryCodes = lookups;\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n // Grade Levels\r\n this.reportingService.getAllGradeLevelsLookup().subscribe(lookups => {\r\n this.reportParameters.GradeLevels = lookups;\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n // Attendance Codes\r\n this.reportingService.getAttendanceCodesLookup(false, 0).subscribe(lookups => {\r\n this.reportParameters.AttendanceCodes = lookups;\r\n this.getUserPreferences(); // we need to get the attendance code lookups before calling this\r\n\r\n this.reportingService.populateDataSourceFromLookup(this.historyCodesToTally, this.reportParameters.AttendanceCodes);\r\n this.reportingService.populateDataSourceFromLookup(this.tallyTardiesCodes, this.reportParameters.AttendanceCodes);\r\n this.reportingService.populateDataSourceFromLookup(this.daysCodes, this.reportParameters.AttendanceCodes);\r\n this.reportingService.populateDataSourceFromLookup(this.todaysCodesToTally, this.reportParameters.AttendanceCodes);\r\n })\r\n\r\n );\r\n\r\n }\r\n\r\n getSchoolYearSettings() {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n this.reportParameter.isValueChange = false;\r\n this.reportParameter.isReportList = false;\r\n this.reportParameter.PrintDate = formatDate(new Date, 'MM/dd/yyyy', 'en-US');\r\n this.reportParameter.AttendanceDate = moment(this.yearService.defaultYear.CurrentAttendanceDate).format('MM/DD/YYYY');\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n // const weekDay = moment.utc(this.reportParameter.AttendanceDate, 'MM/DD/YYYY').toDate().getDay();\r\n\r\n this.reportParameter.TermId = 0; // Default to All\r\n this.refreshGrid();\r\n });\r\n }\r\n\r\n getUserPreferences() {\r\n this.userPreferencesService.getUserPreferences(0, this.userPreferencePageName).subscribe(results => {\r\n\r\n if (!results) {\r\n return;\r\n }\r\n\r\n this.userPreferences = JSON.parse(results[0]);\r\n\r\n // if (this.reportingService.hasStringValueNotEmpty(this.userPreferences.pub_strReportTitle)) {\r\n // this.reportParameter.ReportTitle = this.userPreferences.pub_strReportTitle;\r\n // }\r\n\r\n // SELECT ON HISTORY DATES\r\n this.reportParameters.SelectHistoryDates = this.userPreferences.pub_blnSelectHistoryDates;\r\n if (this.userPreferences.pub_datHistoryFrom != null && this.userPreferences.pub_datHistoryFrom != undefined) {\r\n this.reportParameters.HistoryFrom = this.reportingService.getMonthDayYear(this.userPreferences.pub_datHistoryFrom);\r\n }\r\n\r\n if (this.userPreferences.pub_datHistoryTo != null && this.userPreferences.pub_datHistoryTo != undefined) {\r\n this.reportParameters.HistoryTo = this.reportingService.getMonthDayYear(this.userPreferences.pub_datHistoryTo);\r\n }\r\n else {\r\n this.reportParameters.HistoryTo = this.reportingService.getMonthDayYear(new Date());\r\n }\r\n\r\n\r\n // SELECT ON RESIDENCY CODES\r\n this.reportParameters.SelectResidencyCodes = this.userPreferences.pub_blnSelectResidencyCodes;\r\n if (this.reportParameters.SelectResidencyCodes) {\r\n this.reportParameters.ResidencyCodeFrom = this.userPreferences.pub_strResidencyCodeFrom;\r\n this.reportParameters.ResidencyCodeTo = this.userPreferences.pub_strResidencyCodeTo;\r\n }\r\n\r\n // SELECT ON CATEGORY CODES\r\n this.reportParameters.SelectCategoryCodes = this.userPreferences.pub_blnSelectCategoryCodes;\r\n if (this.reportParameters.SelectCategoryCodes) {\r\n this.reportParameters.CategoryCodeFrom = this.userPreferences.pub_strCategoryCodeFrom;\r\n this.reportParameters.CategoryCodeTo = this.userPreferences.pub_strCategoryCodeTo;\r\n }\r\n\r\n this.reportParameters.SelectGradeLevels = this.userPreferences.pub_blnSelectGradeLevels;\r\n this.reportParameters.GradeLevelRankFrom = this.userPreferences.pub_strGradeLevelRankFrom;\r\n this.reportParameters.GradeLevelRankTo = this.userPreferences.pub_strGradeLevelRankTo;\r\n\r\n this.setGradeLevelFrom();\r\n this.setGradeLevelTo();\r\n\r\n // ******* HISTORY CODES TO TALLY ******************************************\r\n this.reportingService.setSelectedItemsFromUserPrefereneces(this.userPreferences.pub_strHistoryCodesToTally, this.historyCodesToTally);\r\n this.reportParameters.HistoryMinMax = this.userPreferences.pub_blnSelectHistoryCountMinMax;\r\n this.reportParameters.HistoryCountMin = this.userPreferences.pub_intHistoryCountMin.toString();\r\n this.reportParameters.HistoryCountMax = this.userPreferences.pub_intHistoryCountMax.toString();\r\n\r\n\r\n this.reportParameters.TallyTardies = this.userPreferences.pub_blnTallyTardies;\r\n this.tallyTardiesCodesIds = this.userPreferences.pub_strTallyTardiesCodesIds;\r\n\r\n if (this.userPreferences.pub_blnIncludeAllAbsences) {\r\n this.reportParameters.IncludeAllAbsences = true;\r\n }\r\n else {\r\n this.reportParameters.IncludeAllAbsences = false;\r\n }\r\n\r\n\r\n\r\n // PERIODS TO TALLY\r\n\r\n if (this.userPreferences.pub_blnOnlyPeriodsforEachSection) {\r\n this.reportParameters.OnlyPeriodsforEachSection = true;\r\n }\r\n else {\r\n this.reportParameters.OnlyPeriodsforEachSection = false;\r\n }\r\n\r\n this.reportParameters.Count1Day = this.userPreferences.pub_blnCount1PerDay;\r\n this.reportParameters.SplitABDays = this.userPreferences.pub_blnSplitABDays;\r\n\r\n // TALLY TARDIES\r\n\r\n this.historyCodesToTallyIds = this.userPreferences.pub_strHistoryCodesToTallyIds;\r\n this.reportingService.setSelectedItemsFromUserPrefereneces(this.userPreferences.pub_strTallyTardiesCodes, this.tallyTardiesCodes);\r\n\r\n\r\n // ******* DAYS FULL/HALF SELECT CODES ******************************************\r\n\r\n if (this.userPreferences.pub_blnDaysFullHalfSelect) {\r\n this.reportParameters.DaysFullHalf = this.userPreferences.pub_blnDaysFullHalfSelect;\r\n this.reportingService.setSelectedItemsFromUserPrefereneces(this.userPreferences.pub_strDayFullHalfCode, this.daysCodes);\r\n this.reportParameters.FullDay = this.userPreferences.pub_blnFullDay;\r\n this.reportParameters.HalfDay = this.userPreferences.pub_blnHalfDay;\r\n this.dayFullHalfCode = this.userPreferences.pub_strDayFullHalfCode;\r\n }\r\n else {\r\n this.reportParameters.DaysFullHalf = false;\r\n this.reportParameters.FullDay = false;\r\n this.reportParameters.HalfDay = false;\r\n }\r\n this.reportParameters.DaysCountMin = this.userPreferences.pub_intDaysCountMin;\r\n this.reportParameters.DaysCountMax = this.userPreferences.pub_intDaysCountMax;\r\n\r\n // ******* TODAY'S CURRENT CODES TALLY ******************************************\r\n\r\n if (this.userPreferences.pub_blnTodaysCurrentTally) {\r\n this.reportParameters.TodaysCurrentTally = this.userPreferences.pub_blnTodaysCurrentTally;\r\n this.reportingService.setSelectedItemsFromUserPrefereneces(this.userPreferences.pub_strTodaysCodesToTally, this.todaysCodesToTally);\r\n this.todaysCodesToTallyIds = this.userPreferences.pub_strTodaysCodesToTallyIds;\r\n }\r\n else {\r\n this.reportParameters.TodaysCurrentTally = false;\r\n }\r\n\r\n this.reportParameters.CurrentMinMax = this.userPreferences.pub_blnCurrentMinMax;\r\n this.reportParameters.CurrentCodesTallyCountMin = this.userPreferences.pub_intCurrentCodesTallyCountMin;\r\n this.reportParameters.CurrentCodesTallyCountMax = this.userPreferences.pub_intCurrentCodesTallyCountMax;\r\n\r\n\r\n // ******* CHECKBOXES AT END ******************************************\r\n this.reportParameters.DoubleSpaceAfterStudentName = this.userPreferences.pub_blnDoubleSpaceAfterStudentName;\r\n this.reportParameters.ShowHistoryRecords = this.userPreferences.pub_blnShowHistoryRecords;\r\n this.reportParameters.ShowOnlySelectedRecords = this.userPreferences.pub_blnShowOnlySelectedRecords;\r\n this.reportParameters.ShowComments = this.userPreferences.pub_blnShowComments;\r\n if (this.userPreferences.pub_blnIgnoreAttendance) {\r\n this.reportParameters.IgnoreAttendance = true;\r\n }\r\n else {\r\n this.reportParameters.IgnoreAttendance = false;\r\n }\r\n this.reportParameters.ShowPresentCount = this.userPreferences.pub_blnShowPresentCount;\r\n });\r\n }\r\n\r\n saveUserPreferences() {\r\n\r\n const UserPreferencesObj = this.userPreferences;\r\n UserPreferencesObj.pub_strReportTitle = this.reportParameter.ReportTitle;\r\n UserPreferencesObj.pub_intReportType = this.reportType; // C1\r\n UserPreferencesObj.pub_blnParentInfo = false;\r\n UserPreferencesObj.pub_strStudentSelectionStatus = 'Active';\r\n UserPreferencesObj.pub_blnSelectHistoryDates = this.reportParameters.SelectHistoryDates;\r\n if (this.reportParameters.SelectHistoryDates) {\r\n UserPreferencesObj.pub_datHistoryFrom = this.reportParameters.HistoryFrom;\r\n UserPreferencesObj.pub_datHistoryTo = this.reportParameters.HistoryTo;\r\n }\r\n else {\r\n UserPreferencesObj.pub_datHistoryFrom = null;\r\n UserPreferencesObj.pub_datHistoryTo = null;\r\n }\r\n UserPreferencesObj.pub_blnSelectResidencyCodes = this.reportParameters.SelectResidencyCodes;\r\n UserPreferencesObj.pub_strResidencyCodeFrom = this.reportParameters.ResidencyCodeFrom;\r\n UserPreferencesObj.pub_strResidencyCodeTo = this.reportParameters.ResidencyCodeTo;\r\n UserPreferencesObj.pub_blnSelectCategoryCodes = this.reportParameters.SelectCategoryCodes;\r\n UserPreferencesObj.pub_strCategoryCodeFrom = this.reportParameters.CategoryCodeFrom;\r\n UserPreferencesObj.pub_strCategoryCodeTo = this.reportParameters.CategoryCodeTo;\r\n UserPreferencesObj.pub_blnSelectGradeLevels = this.reportParameters.SelectGradeLevels;\r\n UserPreferencesObj.pub_strGradeLevelRankFrom = this.reportParameters.GradeLevelRankFrom;\r\n UserPreferencesObj.pub_strGradeLevelRankTo = this.reportParameters.GradeLevelRankTo;\r\n UserPreferencesObj.pub_strHistoryCodesToTallyIds = this.historyCodesToTallyIds;\r\n UserPreferencesObj.pub_strHistoryCodesToTally = this.reportingService.getSelectedItemsAsDelimitedString(this.historyCodesToTally, true, '', true);\r\n\r\n UserPreferencesObj.pub_blnCount1PerDay = this.reportParameters.Count1Day;\r\n UserPreferencesObj.pub_blnSplitABDays = this.reportParameters.SplitABDays;\r\n UserPreferencesObj.pub_strHistoryPeriodsToTally = '';\r\n UserPreferencesObj.pub_blnOnlyPeriodsforEachSection = this.reportParameters.OnlyPeriodsforEachSection;\r\n\r\n UserPreferencesObj.pub_blnSelectHistoryCountMinMax = this.reportParameters.HistoryMinMax;\r\n UserPreferencesObj.pub_intHistoryCountMin = this.reportParameters.HistoryCountMin;\r\n UserPreferencesObj.pub_intHistoryCountMax = this.reportParameters.HistoryCountMax;\r\n\r\n UserPreferencesObj.pub_blnTallyTardies = this.reportParameters.TallyTardies;\r\n UserPreferencesObj.pub_strTallyTardiesCodesIds = this.tallyTardiesCodesIds;\r\n UserPreferencesObj.pub_strTallyTardiesCodes = this.reportingService.getSelectedItemsAsDelimitedString(this.tallyTardiesCodes, true, '', true);\r\n\r\n UserPreferencesObj.pub_blnDaysFullHalfSelect = this.reportParameters.DaysFullHalf;\r\n UserPreferencesObj.pub_blnFullDay = this.reportParameters.FullDay;\r\n UserPreferencesObj.pub_blnHalfDay = this.reportParameters.HalfDay;\r\n UserPreferencesObj.pub_strDayFullHalfCode = this.dayFullHalfCode;\r\n UserPreferencesObj.pub_intDaysCountMin = this.reportParameters.DaysCountMin;\r\n UserPreferencesObj.pub_intDaysCountMax = this.reportParameters.DaysCountMax;\r\n UserPreferencesObj.pub_blnTodaysCurrentTally = this.reportParameters.TodaysCurrentTally;\r\n UserPreferencesObj.pub_strTodaysCodesToTallyIds = this.reportingService.hasStringValueNotEmpty(this.todaysCodesToTallyIds) ? this.todaysCodesToTallyIds : '';\r\n UserPreferencesObj.pub_strTodaysCodesToTally = this.reportingService.getSelectedItemsAsDelimitedString(this.todaysCodesToTally, true, '', true);\r\n UserPreferencesObj.pub_blnCurrentMinMax = this.reportParameters.CurrentMinMax;\r\n UserPreferencesObj.pub_intCurrentCodesTallyCountMin = this.reportParameters.CurrentCodesTallyCountMin;\r\n UserPreferencesObj.pub_intCurrentCodesTallyCountMax = this.reportParameters.CurrentCodesTallyCountMax;\r\n UserPreferencesObj.pub_blnDoubleSpaceAfterStudentName = this.reportParameters.DoubleSpaceAfterStudentName;\r\n UserPreferencesObj.pub_blnShowHistoryRecords = this.reportParameters.ShowHistoryRecords;\r\n UserPreferencesObj.pub_blnShowOnlySelectedRecords = this.reportParameters.ShowOnlySelectedRecords;\r\n UserPreferencesObj.pub_blnShowComments = this.reportParameters.ShowComments;\r\n UserPreferencesObj.pub_blnShowCurrentAtndSteps = false;\r\n UserPreferencesObj.pub_blnIgnoreAttendance = this.reportParameters.IgnoreAttendance;\r\n UserPreferencesObj.pub_blnNotEnrolled = false;\r\n UserPreferencesObj.pub_blnIncludeAllAbsences = this.reportParameters.IncludeAllAbsences;\r\n UserPreferencesObj.pub_blnConsecutiveDays = false;\r\n UserPreferencesObj.pub_blnShowPresentCount = this.reportParameters.ShowPresentCount;\r\n\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(UserPreferencesObj));\r\n\r\n this.userPreferencesService.saveUserPreferences(0, this.userPreferencePageName, xmlStream, 0, '').subscribe(response => { }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n\r\n }\r\n\r\n getTerms() {\r\n this.reportingService.getTermsforCourses(0, this.yearService.defaultYear.SiteYearId).subscribe(data => {\r\n this.reportParameter.Terms = data.filter(function (element) { return (element.TermTypeId != 2); });\r\n this.term = new CourseTerm();\r\n this.term.Id = 0;\r\n this.term.LongDescription = ' All Terms';\r\n this.reportParameter.Terms.push(this.term);\r\n });\r\n }\r\n\r\n\r\n changeValue() {\r\n this.reportParameter.isValueChange = true;\r\n if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n }\r\n if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n }\r\n }\r\n\r\n cancelShowReportParameters() {\r\n this.dialogRef.close();\r\n }\r\n\r\n refreshGrid() {\r\n this.errors = [];\r\n if ((this.reportParameter.FromPeriod == undefined || this.reportParameter.FromPeriod == 0 || this.reportParameter.FromPeriod == null) && $.isNumeric(this.reportParameter.FromPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'From Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.fromPeriod\r\n });\r\n }\r\n if ((this.reportParameter.ToPeriod == undefined || this.reportParameter.ToPeriod == 0 || this.reportParameter.ToPeriod == null) && $.isNumeric(this.reportParameter.ToPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'To Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.toPeriod\r\n });\r\n }\r\n\r\n\r\n if (this.errors.length == 0) {\r\n this.reportParameter.ReportGridData = [];\r\n this.reportingService.getTeacherPreviewGridData(this.yearService.defaultYear.SiteYearId, this.reportParameter.TermId, moment.utc(this.reportParameter.AttendanceDate, 'MM-DD-YYYY HH:mm a').toDate(), this.reportParameter.FromPeriod, this.reportParameter.ToPeriod).subscribe(results => {\r\n\r\n // console.log(results);\r\n\r\n this.reportParameter.ReportGridData = results;\r\n if (this.reportParameter.ReportGridData.length > 0) {\r\n this.isDataExist = true;\r\n }\r\n else {\r\n this.isDataExist = false;\r\n }\r\n this.reportParameter.isValueChange = false;\r\n this.dataSource = new MatTableDataSource(this.reportParameter.ReportGridData);\r\n this.reportParameter.selectAllReportGridData = true;\r\n this.selectAll(true);\r\n });\r\n }\r\n }\r\n\r\n selectAll(value) {\r\n this.reportParameter.ReportGridData.forEach(o => {\r\n o.Select = value;\r\n }\r\n );\r\n }\r\n\r\n selectClass() {\r\n const result = this.reportParameter.ReportGridData.filter(o => o.Select == false);\r\n if (result.length > 0) {\r\n this.reportParameter.selectAllReportGridData = false;\r\n }\r\n else if (result.length == 0) {\r\n this.reportParameter.selectAllReportGridData = true;\r\n }\r\n }\r\n\r\n checkErrors() {\r\n this.errors = [];\r\n\r\n const selectedGridData = this.reportParameter.ReportGridData.filter(o => o.Select);\r\n if (selectedGridData.length == 0) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'No Classes Selected!',\r\n fieldRef: this.select\r\n });\r\n }\r\n\r\n if (selectedGridData.length > 0) { // change back to > 5 if issue with student attachment is addressed, JS always went to workflow\r\n this.workflowReport = true;\r\n }\r\n // else {\r\n // this.workflowReport = false;\r\n // }\r\n\r\n if (this.reportParameter.isValueChange) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'Selection Criteria Changed Please click Update Display button again!',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n // Report Title\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameter.ReportTitle)) {\r\n this.errors.push({\r\n fieldName: 'Report Title',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.reportTitle\r\n });\r\n }\r\n\r\n // History Dates\r\n\r\n if (this.reportParameters.SelectHistoryDates && (this.reportParameters.HistoryFrom == undefined || this.reportParameters.HistoryFrom == null)) {\r\n this.errors.push({\r\n fieldName: 'History From',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.historyFrom\r\n });\r\n }\r\n\r\n if (this.reportParameters.SelectHistoryDates && (this.reportParameters.HistoryTo == undefined || this.reportParameters.HistoryTo == null)) {\r\n this.errors.push({\r\n fieldName: 'History To',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.historyTo\r\n });\r\n }\r\n\r\n // Residency Codes\r\n\r\n if (this.reportParameters.SelectResidencyCodes) {\r\n if (this.reportParameters.ResidencyCodeFrom == undefined || this.reportParameters.ResidencyCodeFrom.trim() == '' || this.reportParameters.ResidencyCodeFrom == null) {\r\n this.errors.push({\r\n fieldName: 'Residency Code From',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.residencyCodeFrom\r\n });\r\n }\r\n if (this.reportParameters.ResidencyCodeTo == undefined || this.reportParameters.ResidencyCodeTo.trim() == '' || this.reportParameters.ResidencyCodeTo == null) {\r\n this.errors.push({\r\n fieldName: 'Residency Code To',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.residencyCodeTo\r\n });\r\n }\r\n }\r\n\r\n // Category Codes\r\n\r\n if (this.reportParameters.SelectCategoryCodes) {\r\n if (this.reportParameters.CategoryCodeFrom == undefined || this.reportParameters.CategoryCodeFrom.trim() == '' || this.reportParameters.CategoryCodeFrom == null) {\r\n this.errors.push({\r\n fieldName: 'Category Code From',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.categoryCodeFrom\r\n });\r\n }\r\n if (this.reportParameters.CategoryCodeTo == undefined || this.reportParameters.CategoryCodeTo.trim() == '' || this.reportParameters.CategoryCodeTo == null) {\r\n this.errors.push({\r\n fieldName: 'Category Code To',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.categoryCodeTo\r\n });\r\n }\r\n }\r\n\r\n // Grade Levels\r\n\r\n if (this.reportParameters.SelectGradeLevels) {\r\n if (this.reportParameters.GradeLevelFrom == undefined || this.reportParameters.GradeLevelFrom.trim() == '' || this.reportParameters.GradeLevelFrom == null) {\r\n this.errors.push({\r\n fieldName: 'Grade Level From',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.gradeLevelFrom\r\n });\r\n }\r\n if (this.reportParameters.GradeLevelTo == undefined || this.reportParameters.GradeLevelTo.trim() == '' || this.reportParameters.GradeLevelTo == null) {\r\n this.errors.push({\r\n fieldName: 'Grade Level To',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.gradeLevelTo\r\n });\r\n }\r\n }\r\n\r\n // Tally Tardies\r\n\r\n if (this.reportParameters.TallyTardies) {\r\n if (this.reportingService.getSelectedItemsAsDelimitedString(this.tallyTardiesCodes, true, '', true) == '') {\r\n this.errors.push({\r\n fieldName: null,\r\n errorMsg: 'You must select at least one code for Tally Tardies',\r\n fieldRef: null\r\n });\r\n }\r\n }\r\n\r\n // history min/max\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('this.reportParameters.HistoryMinMax');\r\n // console.log(this.reportParameters.HistoryMinMax);\r\n // console.log('this.reportParameters.HistoryCountMin');\r\n // console.log(this.reportParameters.HistoryCountMin);\r\n // console.log('this.reportParameters.HistoryCountMax');\r\n // console.log(this.reportParameters.HistoryCountMax);\r\n\r\n // }\r\n\r\n if (this.reportParameters.HistoryMinMax) {\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.HistoryCountMin)) {\r\n this.errors.push({\r\n fieldName: 'History Count Min',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.historyCountMin\r\n });\r\n }\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.HistoryCountMax)) {\r\n this.errors.push({\r\n fieldName: 'History Count Max',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.historyCountMax\r\n });\r\n }\r\n\r\n if (this.reportingService.minIsGreaterThanMax(this.reportParameters.HistoryCountMin, this.reportParameters.HistoryCountMax)) {\r\n this.errors.push({\r\n fieldName: 'History Count Min',\r\n errorMsg: 'Min must not be greater than Max',\r\n fieldRef: this.historyCountMin\r\n });\r\n\r\n }\r\n\r\n } // END history min/max\r\n\r\n // Days (Full/Half)\r\n\r\n if (this.reportParameters.DaysFullHalf) {\r\n\r\n if (this.reportingService.getSelectedItemsAsDelimitedString(this.daysCodes, true, '', true) == '') {\r\n this.errors.push({\r\n fieldName: null, // 'Days (Full/Half)',\r\n errorMsg: 'You must select at least one code for Days (Full/Half)',\r\n fieldRef: null // this.daysFullHalfSelect\r\n });\r\n }\r\n\r\n if (this.reportParameters.FullDay == false && this.reportParameters.HalfDay == false) {\r\n this.errors.push({\r\n fieldName: 'FullDay/HalfDay',\r\n errorMsg: 'Select FullDay or HalfDay',\r\n fieldRef: this.fullDay\r\n });\r\n }\r\n\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.DaysCountMin)) {\r\n this.errors.push({\r\n fieldName: 'Days Count Min',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.daysCountMin\r\n });\r\n }\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.DaysCountMax)) {\r\n this.errors.push({\r\n fieldName: 'Days Count Max',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.daysCountMax\r\n });\r\n } \r\n\r\n if (this.reportingService.minIsGreaterThanMax(this.reportParameters.DaysCountMin, this.reportParameters.DaysCountMax)) {\r\n this.errors.push({\r\n fieldName: 'Days Count Min',\r\n errorMsg: 'Min must not be greater than Max',\r\n fieldRef: this.daysCountMin\r\n });\r\n\r\n } \r\n \r\n } // END Days (Full/Half)\r\n\r\n // Today's Current Codes Tally\r\n\r\n if (this.reportParameters.TodaysCurrentTally) {\r\n if (this.reportingService.getSelectedItemsAsDelimitedString(this.todaysCodesToTally, true, '', true) == '') {\r\n this.errors.push({\r\n fieldName: null,\r\n errorMsg: 'You must select at least one code for Today`s Current Codes Tally',\r\n fieldRef: null\r\n });\r\n }\r\n }\r\n\r\n if (this.reportParameters.CurrentMinMax) {\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.CurrentCodesTallyCountMin)) {\r\n this.errors.push({\r\n fieldName: 'Tally Count Min',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.currentCodesTallyCountMin\r\n });\r\n }\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameters.CurrentCodesTallyCountMax)) {\r\n this.errors.push({\r\n fieldName: 'Tally Count Max',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.currentCodesTallyCountMax\r\n });\r\n }\r\n\r\n if (this.reportingService.minIsGreaterThanMax(this.reportParameters.CurrentCodesTallyCountMin, this.reportParameters.CurrentCodesTallyCountMax)) {\r\n this.errors.push({\r\n fieldName: 'Tally Count Min',\r\n errorMsg: 'Min must not be greater than Max',\r\n fieldRef: this.currentCodesTallyCountMin\r\n });\r\n\r\n }\r\n\r\n } // END current tally min/max\r\n // } -- ONE-15181 - I moved this above as I noticed these other validations were not occurring unless days full/half was checked while working on ticket\r\n }\r\n\r\n setReportParameters() {\r\n this.reportParameter.PrintDate = this.reportingService.getMonthDayYear(new Date()).toString();\r\n\r\n this.parameters = [];\r\n this.param = [];\r\n this.param.push({ ParamName: 'strReportSiteHeader', ParamStringValue: this.yearService.defaultYear.SchoolName });\r\n this.param.push({ ParamName: 'strReportSiteAddress', ParamStringValue: '' });\r\n this.param.push({ ParamName: 'strReportDate', ParamStringValue: ((new Date().getMonth() + 1) + '/' + new Date().getDate() + '/' + new Date().getFullYear()) });\r\n this.param.push({ ParamName: 'strReportTitle', ParamStringValue: this.reportParameter.ReportTitle });\r\n this.param.push({ ParamName: 'strSiteYearCode', ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier });\r\n this.param.push({ ParamName: 'strSiteTypeCode', ParamStringValue: 'HS' });\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'intSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'strUserName', ParamStringValue: ' ' + this.reportingService.currentUser.UserName });\r\n this.param.push({ ParamName: 'datCurrentAttendanceDate', ParamStringValue: ((new Date().getMonth() + 1) + '/' + new Date().getDate() + '/' + new Date().getFullYear()) });\r\n this.param.push({ ParamName: 'bytReportType', ParamStringValue: this.reportType });\r\n this.param.push({ ParamName: 'strStudentSelectionStatus', ParamStringValue: 'Active' });\r\n\r\n const selectedGridData = this.reportParameter.ReportGridData.filter(o => o.Select);\r\n let selectedSectionIds = '';\r\n for (let x = 0; x < selectedGridData.length; x++) {\r\n if (selectedSectionIds == '') {\r\n selectedSectionIds += selectedGridData[x].SiteSectionId;\r\n } else {\r\n selectedSectionIds = selectedSectionIds + ',' + selectedGridData[x].SiteSectionId;\r\n }\r\n }\r\n this.siteSectionIds = selectedSectionIds;\r\n\r\n if (this.siteSectionIds != '') {\r\n this.param.push({ ParamName: 'strSiteSectionIds', ParamStringValue: this.siteSectionIds });\r\n }\r\n\r\n // residency codes\r\n\r\n if (this.reportingService.hasStringValueNotEmpty(this.reportParameters.ResidencyCodeFrom)) {\r\n this.param.push({ ParamName: 'strResidencyCodeFrom', ParamStringValue: this.reportParameters.ResidencyCodeFrom });\r\n }\r\n\r\n if (this.reportingService.hasStringValueNotEmpty(this.reportParameters.ResidencyCodeTo)) {\r\n this.param.push({ ParamName: 'strResidencyCodeTo', ParamStringValue: this.reportParameters.ResidencyCodeTo });\r\n }\r\n\r\n // category codes\r\n\r\n if (this.reportingService.hasStringValueNotEmpty(this.reportParameters.CategoryCodeFrom)) {\r\n this.param.push({ ParamName: 'strCategoryCodeFrom', ParamStringValue: this.reportParameters.CategoryCodeFrom });\r\n }\r\n\r\n if (this.reportingService.hasStringValueNotEmpty(this.reportParameters.CategoryCodeTo)) {\r\n this.param.push({ ParamName: 'strCategoryCodeTo', ParamStringValue: this.reportParameters.CategoryCodeTo });\r\n }\r\n\r\n\r\n // grade levels\r\n\r\n if (this.reportParameters.SelectGradeLevels && this.reportingService.hasStringValueNotEmpty(this.reportParameters.GradeLevelFrom)) {\r\n this.param.push({ ParamName: 'strGradeLevelCodeFrom', ParamStringValue: this.reportParameters.GradeLevelFrom });\r\n\r\n const gradeLevelRankFrom = this.reportParameters.GradeLevelRankFrom.split(',')[0];\r\n this.param.push({ ParamName: 'strGradeLevelRankFrom', ParamStringValue: gradeLevelRankFrom });\r\n // param = param + \", {ParamName: 'strGradeLevelCodeFrom', ParamStringValue: '\" + this.reportParameters.GradeLevelsRankFrom.Code + \"'}\";\r\n // param = param + \", {ParamName: 'strGradeLevelRankFrom', ParamStringValue: '\" + this.reportParameters.GradeLevelsRankFrom.Ranking + \"'}\";\r\n }\r\n\r\n if (this.reportParameters.SelectGradeLevels && this.reportingService.hasStringValueNotEmpty(this.reportParameters.GradeLevelTo)) {\r\n this.param.push({ ParamName: 'strGradeLevelCodeTo', ParamStringValue: this.reportParameters.GradeLevelTo });\r\n const gradeLevelRankTo = this.reportParameters.GradeLevelRankTo.split(',')[0];\r\n this.param.push({ ParamName: 'strGradeLevelRankTo', ParamStringValue: gradeLevelRankTo });\r\n // param = param + \", {ParamName: 'strGradeLevelCodeTo', ParamStringValue: '\" + this.reportParameters.GradeLevelsRankTo.Code + \"'}\";\r\n // param = param + \", {ParamName: 'strGradeLevelRankTo', ParamStringValue: '\" + this.reportParameters.GradeLevelsRankTo.Ranking + \"'}\";\r\n }\r\n\r\n\r\n // select history dates\r\n\r\n if (this.reportParameters.SelectHistoryDates) {\r\n\r\n // if (this.inDebugMode) {\r\n // console.log(this.reportParameters.HistoryFrom);\r\n // console.log(this.reportParameters.HistoryTo);\r\n // }\r\n\r\n // this.param.push({ ParamName: 'datHistoryDateFrom', ParamStringValue: this.reportingService.getMonthDayYear(this.reportParameters.HistoryFrom) });\r\n this.param.push({ ParamName: 'datHistoryDateFrom', ParamStringValue: ((this.reportParameters.HistoryFrom.getMonth() + 1) + '/' + this.reportParameters.HistoryFrom.getDate() + '/' + this.reportParameters.HistoryFrom.getFullYear()) });\r\n\r\n\r\n this.param.push({ ParamName: 'datHistoryDateTo', ParamStringValue: ((this.reportParameters.HistoryTo.getMonth() + 1) + '/' + this.reportParameters.HistoryTo.getDate() + '/' + this.reportParameters.HistoryTo.getFullYear()) });\r\n // this.param.push({ ParamName: 'datHistoryDateTo', ParamStringValue: this.reportParameters.HistoryTo });\r\n }\r\n\r\n this.param.push({ ParamName: 'strAttndHistoryCodesToTally', ParamStringValue: this.historyCodesToTallyIds });\r\n this.param.push({ ParamName: 'blnOnlyPeriodsEachSection', ParamStringValue: this.reportParameters.OnlyPeriodsforEachSection });\r\n this.param.push({ ParamName: 'blnCount1PerDay', ParamStringValue: this.reportParameters.Count1Day });\r\n\r\n\r\n if (this.reportParameters.HistoryMinMax && this.reportParameters.HistoryCountMin != undefined && this.reportParameters != null) {\r\n this.param.push({ ParamName: 'intHistoryCountMin', ParamStringValue: this.reportParameters.HistoryCountMin });\r\n }\r\n\r\n if (this.reportParameters.HistoryMinMax && this.reportParameters.HistoryCountMax != undefined && this.reportParameters != null) {\r\n this.param.push({ ParamName: 'intHistoryCountMax', ParamStringValue: this.reportParameters.HistoryCountMax });\r\n }\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.tallyTardiesCodesIds)) {\r\n this.tallyTardiesCodesIds = '';\r\n }\r\n\r\n this.param.push({ ParamName: 'strTardiesCodesToTally', ParamStringValue: (this.reportParameters.TallyTardies ? this.tallyTardiesCodesIds : '') });\r\n this.param.push({ ParamName: 'blnFullDay', ParamStringValue: (this.reportParameters.DaysFullHalf ? this.reportParameters.FullDay : false) });\r\n this.param.push({ ParamName: 'blnHalfDay', ParamStringValue: (this.reportParameters.DaysFullHalf ? this.reportParameters.HalfDay : false) });\r\n\r\n if (this.reportParameters.DaysFullHalf && this.dayFullHalfCode != '') {\r\n this.dayFullHalfCode = this.reportingService.getSelectedItemsAsDelimitedString(this.daysCodes, true, ',', true);\r\n this.param.push({ ParamName: 'strDayFullHalfCodes', ParamStringValue: this.dayFullHalfCode });\r\n }\r\n\r\n // days count\r\n\r\n if (this.reportParameters.DaysFullHalf && this.reportParameters.DaysCountMin != undefined && this.reportParameters.DaysCountMin != null) {\r\n this.param.push({ ParamName: 'intDaysCountMin', ParamStringValue: this.reportParameters.DaysCountMin });\r\n }\r\n\r\n if (this.reportParameters.DaysFullHalf && this.reportParameters.DaysCountMax != undefined && this.reportParameters.DaysCountMax != null) {\r\n this.param.push({ ParamName: 'intDaysCountMax', ParamStringValue: this.reportParameters.DaysCountMax });\r\n }\r\n\r\n // todays\r\n\r\n this.param.push({ ParamName: 'strTodayCodesToTally', ParamStringValue: (this.reportParameters.TodaysCurrentTally ? this.todaysCodesToTallyIds : '') });\r\n\r\n\r\n if (this.reportParameters.CurrentMinMax && this.reportParameters.CurrentCodesTallyCountMin != undefined && this.reportParameters.CurrentCodesTallyCountMin != null) {\r\n this.param.push({ ParamName: 'intTodayCountMin', ParamStringValue: this.reportParameters.CurrentCodesTallyCountMin });\r\n }\r\n if (this.reportParameters.CurrentMinMax && this.reportParameters.CurrentCodesTallyCountMax != undefined && this.reportParameters.CurrentCodesTallyCountMax != null) {\r\n this.param.push({ ParamName: 'intTodayCountMax', ParamStringValue: this.reportParameters.CurrentCodesTallyCountMax });\r\n }\r\n\r\n // checkboxes\r\n this.param.push({ ParamName: 'blnDoubleSpaceAfterStudentName', ParamStringValue: this.reportParameters.DoubleSpaceAfterStudentName });\r\n this.param.push({ ParamName: 'blnSplitABDays', ParamStringValue: this.reportParameters.SplitABDays });\r\n this.param.push({ ParamName: 'blnShowHistoryRecords', ParamStringValue: this.reportParameters.ShowHistoryRecords });\r\n this.param.push({ ParamName: 'blnShowOnlySelectedRecords', ParamStringValue: this.reportParameters.ShowOnlySelectedRecords });\r\n this.param.push({ ParamName: 'blnShowComments', ParamStringValue: this.reportParameters.ShowComments });\r\n this.param.push({ ParamName: 'blnShowCurrentAttndSteps', ParamStringValue: false });\r\n this.param.push({ ParamName: 'blnIgnoreAttendancePrior', ParamStringValue: this.reportParameters.IgnoreAttendance });\r\n this.param.push({ ParamName: 'blnIncludeAllAbsences', ParamStringValue: this.reportParameters.IncludeAllAbsences });\r\n this.param.push({ ParamName: 'blnExport', ParamStringValue: false });\r\n this.param.push({ ParamName: 'blnParentInfo', ParamStringValue: false });\r\n this.param.push({ paramname: 'blnShowPresentCount', ParamStringValue: this.reportParameters.ShowPresentCount });\r\n\r\n const stringifiedParameters = JSON.stringify(this.param);\r\n this.parameters = [];\r\n this.parameters.push(stringifiedParameters);\r\n }\r\n\r\n runClick() {\r\n this.checkErrors();\r\n if (this.errors.length == 0) {\r\n this.getSelectedIdsAsCommaDelimitedString();\r\n this.setReportParameters();\r\n this.saveUserPreferences();\r\n if (this.workflowReport) {\r\n this.addToReportQueue();\r\n } else {\r\n this.openStudentAttachment();\r\n }\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n setGradeLevelFrom() {\r\n if (this.reportParameters.SelectGradeLevels && this.reportParameters.GradeLevelRankFrom.includes(',')) {\r\n this.reportParameters.GradeLevelFrom = this.reportParameters.GradeLevelRankFrom.split(',')[1];\r\n }\r\n }\r\n\r\n setGradeLevelTo() {\r\n if (this.reportParameters.SelectGradeLevels && this.reportParameters.GradeLevelRankTo.includes(',')) {\r\n this.reportParameters.GradeLevelTo = this.reportParameters.GradeLevelRankTo.split(',')[1];\r\n }\r\n }\r\n\r\n setGradeLevelRankFrom() {\r\n if (this.reportParameters.SelectGradeLevels && this.reportingService.hasStringValueNotEmpty(this.reportParameters.GradeLevelFrom)) {\r\n for (let x = 0; x < this.reportParameters.GradeLevels.length; x++) {\r\n if (this.reportParameters.GradeLevelFrom == this.reportParameters.GradeLevels[x].Code) {\r\n this.reportParameters.GradeLevelRankFrom = this.reportParameters.GradeLevels[x].Id + ',' + this.reportParameters.GradeLevels[x].Code;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n setGradeLevelRankTo() {\r\n if (this.reportParameters.SelectGradeLevels && this.reportingService.hasStringValueNotEmpty(this.reportParameters.GradeLevelTo)) {\r\n for (let x = 0; x < this.reportParameters.GradeLevels.length; x++) {\r\n if (this.reportParameters.GradeLevelTo == this.reportParameters.GradeLevels[x].Code) {\r\n this.reportParameters.GradeLevelRankTo = this.reportParameters.GradeLevels[x].Id + ',' + this.reportParameters.GradeLevels[x].Code;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n addToReportQueue() {\r\n this.reportingService.runV9Report(this.reportName, this.reportType, this.workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.openReportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n\r\n openStudentAttachment() {\r\n this.reportingService.openStudentAttachmentReport(0, this.reportName, '', '', '', this.parameters, this.reportType);\r\n }\r\n\r\n\r\n\r\n handleCheckboxAll(attCode: DataSource, event: boolean, dataSourceArray: DataSource[]) {\r\n this.reportingService.handleCheckboxAll(attCode, dataSourceArray);\r\n }\r\n\r\n nextClick() {\r\n this.showRun = true;\r\n }\r\n\r\n prevClick() {\r\n this.showRun = false;\r\n }\r\n\r\n openReportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n\r\n getSelectedIdsAsCommaDelimitedString() {\r\n this.historyCodesToTallyIds = this.reportingService.getSelectedItemsAsDelimitedString(this.historyCodesToTally, true, ',', true);\r\n this.tallyTardiesCodesIds = this.reportingService.getSelectedItemsAsDelimitedString(this.tallyTardiesCodes, true, ',', true);\r\n this.todaysCodesToTallyIds = this.reportingService.getSelectedItemsAsDelimitedString(this.todaysCodesToTally, true, ',', true);\r\n this.dayFullHalfCode = this.reportingService.getSelectedItemsAsDelimitedString(this.daysCodes, true, '', true);\r\n }\r\n}","import { Component, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentAttachment } from '../../../student-attachment/student-attachment.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\nimport { User } from '../../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\n\r\n\r\n@Component({\r\n selector: 'class-list-all-attendance-not-marked',\r\n templateUrl: './class-list-all-attendance-not-marked.component.html',\r\n styleUrls: ['./class-list-all-attendance-not-marked.component.css'],\r\n})\r\nexport class ClassListAllAttendanceNotMarkedComponent implements OnInit, OnDestroy {\r\n schoolYearSettings: SchoolYearSettings;\r\n userPreferences: any;\r\n currentUser: User;\r\n reportParameter = new ReportParameterV9();\r\n thisDialogRef: MatDialogRef;\r\n term: CourseTerm;\r\n report: ReportV9;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n public numberMask = {};\r\n teacherUserId = 0;\r\n // @ViewChild('Week1Date', { read: ElementRef }) week1Date: ElementRef;\r\n // @ViewChild('Week2Date', { read: ElementRef }) week2Date: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n // @ViewChild('FromPeriod', { read: ElementRef }) fromPeriod: ElementRef;\r\n // @ViewChild('ToPeriod', { read: ElementRef }) toPeriod: ElementRef;\r\n isDataExist = false;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ClassListAllDialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private userService: UserService,\r\n ) {\r\n this.thisDialogRef = ClassListAllDialogRef;\r\n this.report = data.Report;\r\n }\r\n\r\n ngOnInit() {\r\n this.reportParameter.ReportTitle = 'Class List - Attendance Not Marked';\r\n this.reportParameter.PrintDate = new Date().toISOString().substring(0, 10);\r\n this.numberMask = this.reportingService.getNumberMask();\r\n this.currentUser = this.userService.currentUser;\r\n // this.getUserPreferences(); // no preferences to parse so I commented this for now\r\n this.getSchoolYearSettings();\r\n // this.getDynamicPagesReadForStudentLookup();\r\n\r\n }\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n getUser() {\r\n\r\n this.loginService.getUser();\r\n }\r\n getSchoolYearSettings() {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n this.reportParameter.isValueChange = false;\r\n this.reportParameter.isReportList = false;\r\n // this.setReportTitle();\r\n this.reportParameter.TermId = -1;\r\n });\r\n }\r\n getUserPreferences() {\r\n this.userPreferencesService.getUserPreferences(0, '/ClassListAll.aspx').subscribe(results => {\r\n this.userPreferences = JSON.parse(results[0]);\r\n if (this.userPreferences != null) {\r\n this.reportParameter.radValue = (this.userPreferences.pub_blnPrintNoField ? 'radNoField' : (this.userPreferences.pub_blnPrintStudentId ? 'radPrintStudentID' : 'radOtherField'));\r\n this.reportParameter.SkipLineBetweenStudent = this.userPreferences.pub_blnSkipLinesBetweenStudent;\r\n this.reportParameter.PrintWithGreyHeading = this.userPreferences.pub_blnPrintWithGreyHeadings;\r\n this.reportParameter.PrintStudentAbsencesAlreadyEntered = this.userPreferences.pub_blnPrintStudentAbsencesAlreadyEntered;\r\n this.reportParameter.PrintTeacherSignatureLine = this.userPreferences.pub_blnPrintTeacherSignatureLine;\r\n if (this.reportParameter.OtherFields != null && this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField;\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n getDynamicPagesReadForStudentLookup() {\r\n this.reportingService.getDynamicPagesReadForStudentLookup(false).subscribe(results => {\r\n this.reportParameter.OtherFields = results;\r\n if (results.length > 0) {\r\n this.reportParameter.OtherField = results[0].Id;\r\n if (this.userPreferences != null) {\r\n if (this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField.toString();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // setReportTitle() {\r\n // if (this.loginService.LoginSettings.State != 'CA') {\r\n // if (moment(this.reportParameter.Week1Date).isValid() && moment(this.reportParameter.Week2Date).isValid()) {\r\n // this.reportParameter.ReportTitle = 'Weeks of: ' + moment.utc(this.reportParameter.Week1Date).format('MM/DD/YYYY') + ' and ' + moment.utc(this.reportParameter.Week2Date).format('MM/DD/YYYY');\r\n // }\r\n // } else {\r\n // this.reportParameter.ReportTitle = 'Attendance Roster Verification';\r\n // }\r\n // }\r\n\r\n changeValue() {\r\n this.reportParameter.isValueChange = true;\r\n if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n }\r\n if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n }\r\n }\r\n cancelShowReportParameters() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n\r\n runClick() {\r\n this.errors = [];\r\n if (typeof this.reportParameter.ReportTitle == 'undefined') {\r\n this.errors.push({\r\n fieldName: 'Title',\r\n errorMsg: ' Please add a Report Title!',\r\n fieldRef: null\r\n });\r\n }\r\n if (typeof this.reportParameter.PrintDate == 'undefined') {\r\n this.errors.push({\r\n fieldName: 'Date',\r\n errorMsg: ' Please add a Report Date!',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n if (this.errors.length == 0) {\r\n\r\n\r\n const workflowReport = false;\r\n\r\n // if user is teacher then set Id\r\n if (this.currentUser.UserIsTeacher) {\r\n this.teacherUserId = this.currentUser.Id;\r\n }\r\n\r\n // this.saveUserPreferences();\r\n this.parameters = [];\r\n this.param = [];\r\n this.param.push({ ParamName: 'strReportDate', ParamStringValue: this.reportParameter.PrintDate });\r\n this.param.push({ ParamName: 'strReportSiteHeader', ParamStringValue: this.yearService.defaultYear.SchoolName });\r\n this.param.push({ ParamName: 'strReportTitle', ParamStringValue: this.reportParameter.ReportTitle });\r\n this.param.push({ ParamName: 'strSiteYearCode', ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier });\r\n this.param.push({ ParamName: 'strReportOutputFile', ParamStringValue: 'NOFILE' });\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'lngTeacherUserId', ParamStringValue: this.teacherUserId });\r\n this.param.push({ ParamName: 'bytStartPeriod', ParamStringValue: '0' });\r\n this.param.push({ ParamName: 'bytEndPeriod', ParamStringValue: '12' });\r\n this.param.push({ ParamName: 'blnOnlyUnMarked', ParamStringValue: true }); // not sure if this needs to be passed\r\n this.param.push({ ParamName: 'intSortOrder', ParamStringValue: 3 });\r\n\r\n\r\n this.parameters.push(JSON.stringify(this.param));\r\n if (workflowReport) {\r\n this.reportingService.runV9Report(this.report.ReportName, this.report.ReportType, workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.reportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n } else {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: this.report.ReportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: this.report.ReportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n this.thisDialogRef.close();\r\n }\r\n }\r\n\r\n saveUserPreferences() {\r\n const UserPreferencesObj = this.userPreferences;\r\n UserPreferencesObj.pub_blnPrintNoField = (this.reportParameter.radValue == 'radNoField' ? true : false);\r\n UserPreferencesObj.pub_blnPrintStudentId = (this.reportParameter.radValue == 'radPrintStudentID' ? true : false);\r\n UserPreferencesObj.pub_blnPrintOtherField = (this.reportParameter.radValue == 'radOtherField' ? true : false);\r\n if (this.reportParameter.OtherField != '') {\r\n UserPreferencesObj.pub_strOtherField = this.reportParameter.OtherField;\r\n }\r\n UserPreferencesObj.pub_blnSkipLinesBetweenStudent = this.reportParameter.SkipLineBetweenStudent;\r\n UserPreferencesObj.pub_blnPrintWithGreyHeadings = this.reportParameter.PrintWithGreyHeading;\r\n UserPreferencesObj.pub_blnPrintStudentAbsencesAlreadyEntered = this.reportParameter.PrintStudentAbsencesAlreadyEntered;\r\n UserPreferencesObj.pub_blnPrintTeacherSignatureLine = this.reportParameter.PrintTeacherSignatureLine;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(UserPreferencesObj));\r\n this.userPreferencesService.saveUserPreferences(0, '/ManualEntryRosters.aspx', xmlStream, 0, '').subscribe(response => { }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n reportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n} // end class"," \r\n
\r\n

{{report.Description}}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \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, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentAttachment } from '../../../student-attachment/student-attachment.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\nimport { User } from '../../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\n\r\n\r\n@Component({\r\n selector: 'class-list-all',\r\n templateUrl: './class-list-all.component.html',\r\n styleUrls: ['./class-list-all.component.css'],\r\n})\r\nexport class ClassListAllComponent implements OnInit, OnDestroy {\r\n schoolYearSettings: SchoolYearSettings;\r\n userPreferences: any;\r\n currentUser: User;\r\n reportParameter = new ReportParameterV9();\r\n thisDialogRef: MatDialogRef;\r\n term: CourseTerm;\r\n report: ReportV9;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n public numberMask = {};\r\n teacherUserId = 0;\r\n // @ViewChild('Week1Date', { read: ElementRef }) week1Date: ElementRef;\r\n // @ViewChild('Week2Date', { read: ElementRef }) week2Date: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n // @ViewChild('FromPeriod', { read: ElementRef }) fromPeriod: ElementRef;\r\n // @ViewChild('ToPeriod', { read: ElementRef }) toPeriod: ElementRef;\r\n isDataExist = false;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ClassListAllDialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private userService: UserService,\r\n ) {\r\n this.thisDialogRef = ClassListAllDialogRef;\r\n this.report = data.Report;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n this.reportParameter.ReportTitle = 'Class List - All';\r\n this.reportParameter.PrintDate = new Date().toISOString().substring(0, 10);\r\n this.numberMask = this.reportingService.getNumberMask();\r\n this.currentUser = this.userService.currentUser;\r\n // this.getUserPreferences(); // no preferences for this report in DTO so I commented this for now\r\n this.getSchoolYearSettings();\r\n // this.getDynamicPagesReadForStudentLookup();\r\n\r\n }\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n getUser() {\r\n\r\n this.loginService.getUser()\r\n }\r\n getSchoolYearSettings() {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n this.reportParameter.isValueChange = false;\r\n this.reportParameter.isReportList = false;\r\n // this.setReportTitle();\r\n this.reportParameter.TermId = -1;\r\n });\r\n }\r\n getUserPreferences() {\r\n this.userPreferencesService.getUserPreferences(0, '/ClassListAll.aspx').subscribe(results => {\r\n this.userPreferences = JSON.parse(results[0]);\r\n if (this.userPreferences != null) {\r\n this.reportParameter.ReportTitle = this.userPreferences.ReportTitle;\r\n this.reportParameter.PrintDate = this.userPreferences.PrintDate;\r\n }\r\n\r\n });\r\n }\r\n\r\n getDynamicPagesReadForStudentLookup() {\r\n this.reportingService.getDynamicPagesReadForStudentLookup(false).subscribe(results => {\r\n this.reportParameter.OtherFields = results;\r\n if (results.length > 0) {\r\n this.reportParameter.OtherField = results[0].Id;\r\n if (this.userPreferences != null) {\r\n if (this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField.toString();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // setReportTitle() {\r\n // if (this.loginService.LoginSettings.State != 'CA') {\r\n // if (moment(this.reportParameter.Week1Date).isValid() && moment(this.reportParameter.Week2Date).isValid()) {\r\n // this.reportParameter.ReportTitle = 'Weeks of: ' + moment.utc(this.reportParameter.Week1Date).format('MM/DD/YYYY') + ' and ' + moment.utc(this.reportParameter.Week2Date).format('MM/DD/YYYY');\r\n // }\r\n // } else {\r\n // this.reportParameter.ReportTitle = 'Attendance Roster Verification';\r\n // }\r\n // }\r\n\r\n changeValue() {\r\n this.reportParameter.isValueChange = true;\r\n if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n }\r\n if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n }\r\n }\r\n cancelShowReportParameters() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n\r\n runClick() {\r\n\r\n this.errors = [];\r\n if (typeof this.reportParameter.ReportTitle == 'undefined') {\r\n this.errors.push({\r\n fieldName: 'Title',\r\n errorMsg: ' Please add a Report Title!',\r\n fieldRef: null\r\n });\r\n }\r\n if (typeof this.reportParameter.PrintDate == 'undefined') {\r\n this.errors.push({\r\n fieldName: 'Date',\r\n errorMsg: ' Please add a Report Date!',\r\n fieldRef: null\r\n });\r\n }\r\n\r\n if (this.errors.length == 0) {\r\n\r\n\r\n\r\n const workflowReport = false;\r\n\r\n // if user is teacher then set Id\r\n if (this.currentUser.UserIsTeacher) {\r\n this.teacherUserId = this.currentUser.Id;\r\n }\r\n\r\n // this.saveUserPreferences();\r\n this.parameters = [];\r\n this.param = [];\r\n this.param.push({ ParamName: 'strReportDate', ParamStringValue: this.reportParameter.PrintDate });\r\n this.param.push({ ParamName: 'strReportSiteHeader', ParamStringValue: this.yearService.defaultYear.SchoolName });\r\n this.param.push({ ParamName: 'strReportTitle', ParamStringValue: this.reportParameter.ReportTitle });\r\n this.param.push({ ParamName: 'strSiteYearCode', ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier });\r\n this.param.push({ ParamName: 'strReportOutputFile', ParamStringValue: 'NOFILE' });\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'lngTeacherUserId', ParamStringValue: this.teacherUserId });\r\n this.param.push({ ParamName: 'bytStartPeriod', ParamStringValue: '0' });\r\n this.param.push({ ParamName: 'bytEndPeriod', ParamStringValue: '12' });\r\n this.param.push({ ParamName: 'blnOnlyUnMarked', ParamStringValue: false }); // not sure if this needs to be passed\r\n this.param.push({ ParamName: 'intSortOrder', ParamStringValue: 3 });\r\n\r\n\r\n this.parameters.push(JSON.stringify(this.param));\r\n if (workflowReport) {\r\n this.reportingService.runV9Report(this.report.ReportName, this.report.ReportType, workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.reportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n } else {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: this.report.ReportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: this.report.ReportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n this.thisDialogRef.close();\r\n }\r\n }\r\n\r\n saveUserPreferences() {\r\n const UserPreferencesObj = this.userPreferences;\r\n UserPreferencesObj.pub_blnPrintNoField = (this.reportParameter.radValue == 'radNoField' ? true : false);\r\n UserPreferencesObj.pub_blnPrintStudentId = (this.reportParameter.radValue == 'radPrintStudentID' ? true : false);\r\n UserPreferencesObj.pub_blnPrintOtherField = (this.reportParameter.radValue == 'radOtherField' ? true : false);\r\n if (this.reportParameter.OtherField != '') {\r\n UserPreferencesObj.pub_strOtherField = this.reportParameter.OtherField;\r\n }\r\n UserPreferencesObj.pub_blnSkipLinesBetweenStudent = this.reportParameter.SkipLineBetweenStudent;\r\n UserPreferencesObj.pub_blnPrintWithGreyHeadings = this.reportParameter.PrintWithGreyHeading;\r\n UserPreferencesObj.pub_blnPrintStudentAbsencesAlreadyEntered = this.reportParameter.PrintStudentAbsencesAlreadyEntered;\r\n UserPreferencesObj.pub_blnPrintTeacherSignatureLine = this.reportParameter.PrintTeacherSignatureLine;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(UserPreferencesObj));\r\n this.userPreferencesService.saveUserPreferences(0, '/ManualEntryRosters.aspx', xmlStream, 0, '').subscribe(response => { }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n reportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n} // end class"," \r\n
\r\n

{{report.Description}}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n"," \r\n
\r\n

{{reportTitleInSystem}}

\r\n
\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n {{result.LongDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n {{department.TextField}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n {{course.TextField}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{teacher.TextField}}\r\n \r\n \r\n \r\n
Note: Set Teacher field to All to allow selecting Department
\r\n \r\n\r\n \r\n \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, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentAttachment } from '../../../student-attachment/student-attachment.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\n// import { TeacherPreview } from '../../models/teacher-preview.model';\r\n\r\nimport { LookupService } from '../../../../shared-components/lookup/lookup.service';\r\n\r\n\r\nimport { DataSource } from '../../models/data-source.model';\r\nimport { v9ReportParameterName } from '../../reporting.service';\r\nimport { ClassroomSummary } from '../../../../classroom360/classroom-summary/models/classroom-summary.model';\r\n\r\n@Component({\r\n selector: 'app-gradebook-assignments-by-standard',\r\n templateUrl: './gradebook-assignments-by-standard.component.html',\r\n styleUrls: ['./gradebook-assignments-by-standard.component.css'],\r\n})\r\nexport class GradebookAssignmentsByStandardComponent implements OnInit, OnDestroy {\r\n dialogRef: MatDialogRef;\r\n subscriptions: Subscription[] = [];\r\n schoolYearSettings: SchoolYearSettings;\r\n reportParameter = new ReportParameterV9();\r\n term: CourseTerm;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n errors: ErrorList[] = [];\r\n numberMask = {};\r\n showRunButton = true;\r\n reportType: number;\r\n reportName: string;\r\n // reportTitle: string;\r\n reportTitleInSystem: string;\r\n // userPreferencePageName = '/GradebookAssignmentsByStandard.aspx'; // must match what's in UserPreferences DTO\r\n workflowReport = false;\r\n inDebugMode = false;\r\n siteSectionIds = '';\r\n siteYearId: number;\r\n courses: DataSource[] = [];\r\n selectedCourse: string;\r\n departments: DataSource[] = [];\r\n selectedDepartment: string;\r\n teacher: string;\r\n allCourses: ClassroomSummary[] = [];\r\n // userPreferences: AttendanceHistoryByStudentPreferences; // AttendanceHistoryByClassPreferences;\r\n\r\n // field refs\r\n\r\n @ViewChild('ReportTitle', { read: ElementRef, static: true }) reportTitle: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n @ViewChild('FromPeriod', { read: ElementRef }) fromPeriod: ElementRef;\r\n @ViewChild('ToPeriod', { read: ElementRef }) toPeriod: ElementRef;\r\n @ViewChild('UpdateDisplay', { read: ElementRef }) updateDisplay: ElementRef;\r\n\r\n // grid\r\n gridDataExists: boolean;\r\n dataSource: MatTableDataSource;\r\n gridColumns: string[] = ['selectAllCourses', 'Period', 'TermCode', 'SubjectCode', 'Section', 'AbbreviatedTitle', 'TeacherName', 'StudentCount', 'DaysGroupDescription'];\r\n\r\n\r\n // enums\r\n\r\n v9parameterName = v9ReportParameterName; // parameter name enum\r\n selectedTeacher: string;\r\n teachers: DataSource[] = [];\r\n\r\n filteredCourses: DataSource[] = [];\r\n showDepartment = false;\r\n userIsTeacher: boolean;\r\n selectedFacultyStaffId: number;\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n gradebookAssignmentsByStandardDialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private lookupService: LookupService,\r\n ) {\r\n this.dialogRef = gradebookAssignmentsByStandardDialogRef;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n this.inDebugMode = this.reportingService.inDebugMode;\r\n this.numberMask = this.reportingService.getNumberMask();\r\n\r\n this.siteYearId = this.yearService.defaultYear.SiteYearId;\r\n\r\n // report specific settings\r\n this.reportType = 2;\r\n this.reportName = 'CreateGradebookAssignmentsByObjectiveReport';\r\n this.reportTitleInSystem = 'Gradebook Assignments By Standard';\r\n this.reportParameter.ReportTitle = this.reportTitleInSystem;\r\n\r\n this.reportParameter.TermId = 0;\r\n\r\n this.showDepartment = false;\r\n this.userIsTeacher = this.reportingService.currentUser.UserIsTeacher;\r\n if (this.userIsTeacher) {\r\n this.showDepartment = false;\r\n this.selectedTeacher = this.reportingService.currentUser.LastName + ', ' + this.reportingService.currentUser.FirstName;\r\n } else {\r\n this.showDepartment = true;\r\n }\r\n\r\n this.populateParameters();\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n // unsubscribe\r\n\r\n }\r\n\r\n selectTeacher(teacher: DataSource) {\r\n this.getFilteredCourses();\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log(teacher);\r\n }\r\n\r\n if (teacher.ValueField == '') {\r\n this.showDepartment = true;\r\n } else {\r\n this.showDepartment = false;\r\n }\r\n\r\n // if (this.selectedTeacher == '') {\r\n // this.showDepartment = false;\r\n // } else {\r\n // this.showDepartment = true;\r\n // }\r\n }\r\n\r\n selectDepartment(dept: any) {\r\n this.getFilteredCourses();\r\n }\r\n\r\n termChanged() {\r\n this.getMyClasses();\r\n }\r\n\r\n getFilteredCourses() {\r\n\r\n this.filteredCourses = [];\r\n // Add 'All' for courses\r\n const dataSourceAll = new DataSource();\r\n dataSourceAll.TextField = ' All';\r\n dataSourceAll.ValueField = '0';\r\n dataSourceAll.Id = '0';\r\n this.filteredCourses.push(dataSourceAll);\r\n\r\n if (this.selectedTeacher == undefined || this.selectedTeacher == null || this.selectedTeacher == '') {\r\n return; // we only populate course dropdown if a teacher is selected\r\n }\r\n\r\n for (let x = 0; x < this.allCourses.length; x++) {\r\n // if (this.allCourses[x].Instructor == 'Mathman, Jim') {\r\n // console.log(this.allCourses[x]);\r\n // }\r\n if (this.reportParameter.TermId > 0 && this.allCourses[x].TermId != this.reportParameter.TermId) {\r\n continue;\r\n }\r\n if (this.selectedTeacher > '') {\r\n if (this.allCourses[x].Instructor != this.selectedTeacher) {\r\n continue;\r\n }\r\n }\r\n // if (this.selectedDepartment > '' && this.selectedDepartment != '0' ) {\r\n // if (this.allCourses[x]. != this.selectedDepartment) {\r\n // continue;\r\n // }\r\n // }\r\n const course = new DataSource();\r\n course.TextField = this.allCourses[x].SubjectCode + '-' + this.allCourses[x].Course;\r\n course.ValueField = this.allCourses[x].SubjectId.toString();\r\n course.Id = this.allCourses[x].Id.toString();\r\n this.selectedFacultyStaffId = this.allCourses[x].TeacherId;\r\n this.filteredCourses.push(course);\r\n\r\n }\r\n\r\n }\r\n\r\n populateParameters() {\r\n\r\n this.getSchoolYearSettings();\r\n this.getLookups();\r\n this.getTerms();\r\n // this.getMyClasses();\r\n if (!this.reportingService.currentUser.UserIsTeacher) {\r\n this.getDepartments();\r\n }\r\n // this.getFilteredCourses();\r\n }\r\n\r\n getSchoolYearSettings() {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n // this.reportParameter.isValueChange = false;\r\n // this.reportParameter.isReportList = false;\r\n // this.reportParameter.PrintDate = formatDate(new Date, 'MM/dd/yyyy', 'en-US');\r\n // this.reportParameter.AttendanceDate = moment(this.yearService.defaultYear.CurrentAttendanceDate).format('MM/DD/YYYY');\r\n // this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n // this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n\r\n // this.reportParameter.TermId = 0; // Default to All\r\n // this.refreshGrid();\r\n });\r\n }\r\n\r\n getLookups() {\r\n\r\n // this.subscriptions.push(\r\n // this.reportingService.getResidencyCodesLookup().subscribe(lookups => {\r\n // this.reportParameters.ResidencyCodes = lookups;\r\n // })\r\n\r\n // );\r\n\r\n }\r\n\r\n getDepartments() {\r\n this.reportingService.getDistrictDepartmentsReadForGradebookAssignmentsLookup(this.siteYearId).subscribe(departments => {\r\n\r\n this.departments = [];\r\n\r\n for (let x = 0; x < departments.length; x++) {\r\n const dataSource = new DataSource();\r\n dataSource.TextField = departments[x].CodeDescription;\r\n dataSource.ValueField = departments[x].Code;\r\n dataSource.Id = departments[x].Id.toString();\r\n this.departments.push(dataSource);\r\n }\r\n\r\n if (this.departments.length > 0) {\r\n this.selectedDepartment = departments[0].Code;\r\n }\r\n\r\n\r\n // const dataSourceAll = new DataSource();\r\n // dataSourceAll.TextField = ' All';\r\n // dataSourceAll.ValueField = '0';\r\n // dataSourceAll.Id = '0';\r\n // this.departments.push(dataSourceAll);\r\n\r\n // this.selectedDepartment = '0'; // default to All });\r\n });\r\n }\r\n\r\n getTerms() {\r\n this.reportingService.getTermsforCourses(0, this.yearService.defaultYear.SiteYearId).subscribe(data => {\r\n this.reportParameter.Terms = data; // .filter(function (element) { return (element.TermTypeId != 2); });\r\n // this.term = new CourseTerm();\r\n // this.term.Id = 0;\r\n // this.term.LongDescription = ' All Terms';\r\n // this.reportParameter.Terms.push(this.term);\r\n\r\n this.reportParameter.AddTermAll();\r\n // this.term.Id = 0;\r\n\r\n // if (this.inDebugMode) {\r\n // console.log(this.reportParameter.Terms);\r\n // }\r\n\r\n // termId: number, viewId: number, isTeacher: boolean, includeAllCourses: boolean, dateItem: Date\r\n\r\n this.getMyClasses();\r\n });\r\n }\r\n\r\n getMyClasses() {\r\n // const termId = 0;\r\n\r\n // console.log(this.reportParameter.TermId);\r\n\r\n const currentDate = this.yearService.defaultYear.CurrentAttendanceDate;\r\n\r\n this.reportingService.getMyClasses(this.reportParameter.TermId, 0, this.reportingService.currentUser.UserIsTeacher, true, currentDate).subscribe(courses => {\r\n\r\n // console.log(courses);\r\n courses = this.getUniqueCourses(courses);\r\n // console.log(courses);\r\n // console.log(this.selectedTeacher);\r\n\r\n if (this.selectedTeacher != null || this.selectedTeacher != undefined && this.selectedTeacher > '') { // we are only populating course dropdown if a teacher is selected\r\n for (let x = 0; x < courses.length; x++) {\r\n // console.log('ADDING COURSES');\r\n const dataSource = new DataSource();\r\n dataSource.TextField = courses[x].SubjectCode + '-' + courses[x].Course;\r\n dataSource.ValueField = courses[x].SubjectId.toString();\r\n dataSource.Id = courses[x].Id.toString();\r\n\r\n this.courses.push(dataSource);\r\n }\r\n }\r\n\r\n // Add 'All' for courses\r\n const dataSourceAll = new DataSource();\r\n dataSourceAll.TextField = ' All';\r\n dataSourceAll.ValueField = '0';\r\n dataSourceAll.Id = '0';\r\n this.courses.push(dataSourceAll);\r\n\r\n this.selectedCourse = '0'; // default to All\r\n\r\n // termId: number, viewId: number, isTeacher: boolean, includeAllCourses: boolean, dateItem: Date\r\n\r\n this.teachers = [];\r\n if (!this.reportingService.currentUser.UserIsTeacher) {\r\n const ds = new DataSource();\r\n ds.TextField = 'All'; // '';\r\n ds.ValueField = ''; // = courses[x].Instructor;\r\n this.teachers.push(ds);\r\n this.selectedTeacher = '';\r\n }\r\n\r\n for (let x = 0; x < courses.length; x++) {\r\n\r\n if (courses[x].Instructor > '') {\r\n\r\n // for (let y = 0; y < this.teachers.length; y++) {\r\n const tempUsers = this.teachers.find(t => t.TextField == courses[x].Instructor);\r\n if (tempUsers == null || tempUsers == undefined) {\r\n // this.teachers.push(this.ReportBatches[x].AddedByName);\r\n const dataSource = new DataSource();\r\n dataSource.TextField = courses[x].Instructor;\r\n dataSource.ValueField = courses[x].Instructor;\r\n this.teachers.push(dataSource);\r\n }\r\n // }\r\n // const dataSource = new DataSource();\r\n // dataSource.TextField = courses[x].Instructor;\r\n // dataSource.ValueField = courses[x].Instructor;\r\n // this.teachers.push(dataSource);\r\n }\r\n }\r\n\r\n this.allCourses = courses;\r\n this.getFilteredCourses();\r\n\r\n if (this.reportingService.currentUser.UserIsTeacher) {\r\n this.selectedTeacher = this.reportingService.currentUser.LastName + ', ' + this.reportingService.currentUser.FirstName;\r\n // console.log(this.selectedTeacher);\r\n }\r\n });\r\n }\r\n\r\n // teacherChanged(teach: DataSource) {\r\n // this.selectedTeacher = teach.ValueField;\r\n // if (this.selectedTeacher == '') {\r\n // this.showDepartment = false;\r\n // } else {\r\n // this.showDepartment = true;\r\n // }\r\n // }\r\n\r\n getUniqueCourses(origArr) {\r\n // return origArr;\r\n\r\n const newArr = [];\r\n const origLen = origArr.length;\r\n // found, x, y;\r\n\r\n for (let x = 0; x < origLen; x++) {\r\n // if (origArr[x].Instructor == 'Mathman, Jim') {\r\n // console.log(origArr[x]);\r\n // }\r\n // let found = false; // = undefined;\r\n\r\n const rec = newArr.find(c => c.SubjectCode == origArr[x].SubjectCode && c.Course == origArr[x].Course && c.Instructor == origArr[x].Instructor);\r\n // if (origArr[x].Instructor == 'Mathman, Jim') {\r\n // console.log(rec);\r\n // }\r\n if (rec == null || rec == undefined) {\r\n newArr.push(origArr[x]);\r\n }\r\n // for (let y = 0; y < newArr.length; y++) {\r\n // if (origArr[x].SubjectCode === newArr[y].SubjectCode && origArr[x].Course === newArr[y].Course) {\r\n // // if (origArr[x].SubjectCode === newArr[y].SubjectCode && origArr[x].Course === newArr[y].Course) {\r\n // found = true;\r\n // break;\r\n // }\r\n // }\r\n // if (!found) {\r\n // if (origArr[x].Instructor == 'Mathman, Jim') {\r\n // console.log(origArr[x]);\r\n // }\r\n // newArr.push(origArr[x]);\r\n // }\r\n }\r\n return newArr;\r\n }\r\n\r\n\r\n runReportClick() {\r\n this.checkErrors();\r\n\r\n if (this.errors.length == 0) {\r\n this.setReportParameters();\r\n this.saveUserPreferences();\r\n\r\n if (this.workflowReport) {\r\n this.addToReportQueue();\r\n } else {\r\n this.openStudentAttachment();\r\n }\r\n\r\n this.dialogRef.close();\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n checkErrors() {\r\n this.errors = [];\r\n\r\n\r\n // Report Title\r\n\r\n if (!this.reportingService.hasStringValueNotEmpty(this.reportParameter.ReportTitle)) {\r\n this.errors.push({\r\n fieldName: 'Report Title',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.reportTitle\r\n });\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n setReportParameters() {\r\n // this.reportParameter.PrintDate = this.reportingService.getMonthDayYear(new Date()).toString();\r\n\r\n this.param = [];\r\n this.addCoreParameters();\r\n\r\n\r\n // report specific parameters\r\n\r\n // lngDistrictDepartmentId\r\n // strDepartmentDesc\r\n // lngDistrictSubjectId\r\n // strSubjectDesc\r\n\r\n let dept = '0';\r\n if (this.selectedTeacher == '') {\r\n dept = this.selectedDepartment;\r\n this.param.push({ ParamName: 'strStaffUserName', ParamStringValue: this.reportingService.currentUser.LastName + ', ' + this.reportingService.currentUser.FirstName });\r\n this.param.push({ ParamName: 'lngFacultyStaffId', ParamStringValue: 0 }); // TeacherId\r\n }\r\n else {\r\n this.param.push({ ParamName: 'strStaffUserName', ParamStringValue: this.selectedTeacher });\r\n this.param.push({ ParamName: 'lngFacultyStaffId', ParamStringValue: this.selectedFacultyStaffId }); // TeacherId\r\n\r\n }\r\n\r\n\r\n // this.param.push({ ParamName: 'lngDistrictDepartmentId', ParamStringValue: dept });\r\n this.param.push({ ParamName: 'lngDistrictDepartmentId', ParamStringValue: 0 });\r\n this.param.push({ ParamName: 'strDepartmentDesc', ParamStringValue: '' });\r\n this.param.push({ ParamName: 'lngDistrictSubjectId', ParamStringValue: this.selectedCourse });\r\n\r\n if (this.selectedCourse == '0') {\r\n this.param.push({ ParamName: 'strSubjectDesc', ParamStringValue: 'All' });\r\n }\r\n else {\r\n const course = this.courses.find(c => c.ValueField == this.selectedCourse);\r\n\r\n this.param.push({ ParamName: 'strSubjectDesc', ParamStringValue: course.TextField });\r\n }\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log(this.param);\r\n }\r\n\r\n\r\n this.parameters = [];\r\n this.parameters.push(JSON.stringify(this.param));\r\n\r\n }\r\n\r\n\r\n addCoreParameters() {\r\n this.reportingService.addCoreParametersV9\r\n (\r\n this.param,\r\n this.reportParameter.ReportTitle,\r\n this.reportType,\r\n // core parameter flags ()\r\n /* eslint-disable no-bitwise */\r\n this.v9parameterName.strReportDate |\r\n this.v9parameterName.strReportSiteHeader |\r\n this.v9parameterName.strReportTitle |\r\n this.v9parameterName.strSiteYearCode |\r\n this.v9parameterName.lngSiteYearId |\r\n // this.v9parameterName.strStaffUserName_LNFN |\r\n this.v9parameterName.strOutputFile_NOFILE |\r\n this.v9parameterName.strReportTime\r\n /* eslint-enable no-bitwise */\r\n );\r\n\r\n }\r\n\r\n saveUserPreferences() {\r\n\r\n // const UserPreferencesObj = this.userPreferences;\r\n // UserPreferencesObj.pub_strReportTitle = this.reportParameter.ReportTitle;\r\n // UserPreferencesObj.pub_intReportType = this.reportType; // C1\r\n\r\n }\r\n\r\n addToReportQueue() {\r\n // this.reportingService.runV9Report(this.reportName, this.reportType, this.workflowReport, this.parameters).subscribe(response => {\r\n this.reportingService.runV9Report(this.reportName, this.reportType, this.workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.openReportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n\r\n openReportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n\r\n\r\n\r\n openStudentAttachment() {\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log(this.parameters);\r\n // }\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: this.reportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: this.reportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n\r\n","import { Assignment } from '../../../../classroom360/gradebook/v9/models/assignment.model';\r\n\r\n\r\nexport class GradebookStatisticalAnalysisReport {\r\n SiteSectionId: number;\r\n DistrictSubjectId: number;\r\n TermDescription: string;\r\n Course: string;\r\n StartPeriod: number;\r\n SubjectTitle: string;\r\n TeacherName: string;\r\n RoomNumber: string;\r\n StudentCount: number;\r\n Selected = false;\r\n }\r\n\r\n export class ReportParameters {\r\n AssignmentSelection = 1;\r\n EnrolmentStatus = 0;\r\n AddressWindowEnvelop = true;\r\n PrintGradeForIndevedual = true;\r\n GroupByAssignmentType = true;\r\n ShowAssignmentDate = true;\r\n AverageMean = true;\r\n Marks = 1.0;\r\n chMarks = true;\r\n PrintDate: Date;\r\n Percentage = 1.0;\r\n chkPercentage = true;\r\n chkTerm = true;\r\n TermAndSem = true;\r\n PrintNameColumnOnly: boolean;\r\n PrintGridLines: boolean;\r\n BlankRowBetweenStudent: boolean;\r\n OnlyTotalsAndTermCols: boolean;\r\n PrintAssignmentNotes: boolean;\r\n BlankColAtEnd: boolean;\r\n ShowStudentsComments: boolean;\r\n ParentSinatureLines: boolean;\r\n Progress: boolean;\r\n TermQtr: boolean;\r\n ShowAssignmentNumber: boolean;\r\n Semester: boolean;\r\n StandardDeviation: boolean;\r\n MaxMinScore: boolean;\r\n Median: boolean;\r\n DroppedStudents: boolean;\r\n HideNameBy: boolean;\r\n AlsoSortByThisId: boolean;\r\n HideAndSortBy: number;\r\n Footer: boolean;\r\n BlankColBetweenAssignments: boolean;\r\n FooterMessage: string;\r\n ddlPercentage: string[] = ['=', '>', '<'];\r\n SortByID: boolean;\r\n SelectAssignment: string;\r\n classSelectionPage: boolean;\r\n SiteSectionIds: string = null;\r\n Title: string;\r\n Term: string;\r\n Teacher: string;\r\n Section: string;\r\n Period: number;\r\n siteSectionHeader: string;\r\n SelectClasses: string;\r\n SelectStudents: string;\r\n RangeScores: string;\r\n RangeFrom: number;\r\n RangeTo: number;\r\n ShowAYPGroups: boolean;\r\n ReportType: number;\r\n Listing: number;\r\n ValueReported: number;\r\n GroupScore: number;\r\n Labels: number;\r\n HorizantalValue: number;\r\n ShowLabels: boolean;\r\n ScoreRange: boolean;\r\n SpecificAssignments: Assignment[] = [];\r\n SpecificAssignment: Assignment;\r\n AssignmentTypes: GradeBookAssignmentTypeBySiteSectionIds[] = [];\r\n AssignmentType: GradeBookAssignmentTypeBySiteSectionIds;\r\n IsViewGradebookForAllTeacher: boolean;\r\n StatisticalAnalysisRetports: GradebookStatisticalAnalysisReport[] = [];\r\n ReportTitle: string;\r\n}\r\n\r\nexport class StatisticalAnalysisReportPreferences {\r\n pub_bytReportType: number;\r\n pub_bytListing: number;\r\n pub_bytValueReported: number;\r\n pub_bytLabels: number;\r\n pub_bytHorizantalValue: number;\r\n pub_bytselectedStudent: number;\r\n pub_blnShowAyp: boolean;\r\n pub_blnSelectRange: boolean;\r\n pub_blnSelectedAssignment: boolean;\r\n pub_blnRangeUse: boolean;\r\n pub_blnOverrideLineTo: boolean;\r\n pub_strOverrideLineToHeader: string;\r\n pub_strRangeFrom: string;\r\n pub_strRangeTo: string;\r\n pub_strSiteSectionIds: string;\r\n pub_blnAllClasses: boolean;\r\n pub_intScoreUseIndex: number;\r\n pub_intAssignmentTypeId: number;\r\n pub_intAssignmentSequence: number;\r\n pub_intGroupByInterval: number;\r\n pub_intSelectedAssignmentIndex: number;\r\n pub_intTeacherId: number;\r\n pub_intDistrictSubjectId: number;\r\n pub_blnShowLabels: boolean;\r\n }\r\n\r\n export class GradeBookAssignmentTypeBySiteSectionIds {\r\n Id: string;\r\n Code: string;\r\n CodeDescription: string;\r\n Default: boolean;\r\n Sequence: number;\r\n State: string;\r\n }\r\n\r\n export class ScoreRange {\r\n Value: number;\r\n Description: string;\r\n }"," \r\n
\r\n

{{report.Description}}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Print Student absences already entered\r\n \r\n
\r\n \r\n Teacher signature line\r\n \r\n
\r\n \r\n Print w/Grey\r\n Headings\r\n \r\n
\r\n \r\n Skip Line\r\n Between Student\r\n \r\n
\r\n
\r\n \r\n \r\n
Display Weeks of:\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{result.Code}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{result.LongDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n Title {{element.AbbreviatedTitle}} Teacher Name{{element.TeacherName}} Per {{element.Period}} Term {{element.TermCode}} Dept {{element.DepartmentCode}} Subject {{element.SubjectCode}}Sec{{element.Section}} Room{{element.RoomNumber}} Days{{element.DaysGroupDescription}}
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n","/* eslint-disable complexity */\r\n/* eslint-disable camelcase */\r\nimport { formatDate } from '@angular/common';\r\nimport { Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TextMaskConfig } from 'angular2-text-mask/src/angular2TextMask';\r\nimport * as moment from 'moment';\r\nimport { forkJoin, Observable } from 'rxjs';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Lookup } from '../../../../shared-components/lookup/lookup.model';\r\nimport { SecurityService } from '../../../../shared-components/security/security.service';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport { StudentAttachment } from '../../../student-attachment/student-attachment.model';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { TeacherPreview } from '../../models/teacher-preview.model';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportingService } from '../../reporting.service';\r\n\r\n@Component({\r\n selector: 'app-manual-entry-rosters',\r\n templateUrl: './manual-entry-rosters.component.html',\r\n styleUrls: ['./manual-entry-rosters.component.css'],\r\n})\r\nexport class ManualEntryRostersComponent implements OnInit, OnDestroy {\r\n schoolYearSettings: SchoolYearSettings;\r\n userPreferences: any;\r\n reportParameter = new ReportParameterV9();\r\n thisDialogRef: MatDialogRef;\r\n term: CourseTerm;\r\n dataSource: MatTableDataSource;\r\n gridColumns: string[] = ['SelectAll', 'AbbreviatedTitle', 'TeacherName', 'Period', 'TermCode', 'DepartmentCode', 'SubjectCode', 'Section', 'RoomNumber', 'DaysGroupDescription'];\r\n report: ReportV9;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n exportCLick = false;\r\n public numberMask: TextMaskConfig;\r\n @ViewChild('Week1Date', { read: ElementRef, static: true }) week1Date: ElementRef;\r\n @ViewChild('Week2Date', { read: ElementRef, static: true }) week2Date: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n @ViewChild('FromPeriod', { read: ElementRef, static: true }) fromPeriod: ElementRef;\r\n @ViewChild('ToPeriod', { read: ElementRef, static: true }) toPeriod: ElementRef;\r\n isDataExist = false;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ManualEntryRostersDialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private securityService: SecurityService\r\n ) {\r\n this.thisDialogRef = ManualEntryRostersDialogRef;\r\n this.report = data.Report;\r\n }\r\n\r\n ngOnInit() {\r\n this.numberMask = this.reportingService.getNumberMask();\r\n this.initialize();\r\n\r\n }\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n initialize() {\r\n const serverCalls: Observable = forkJoin(\r\n this.userPreferencesService.getUserPreferences(0, '/ManualEntryRosters.aspx'),\r\n this.reportingService.getTermsforCourses(0, this.yearService.defaultYear.SiteYearId),\r\n this.reportingService.getDynamicPagesReadForStudentLookup(false),\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID)\r\n );\r\n\r\n serverCalls.subscribe(results => {\r\n if (results[0] != null) {\r\n if (results[0].length == 1) {\r\n this.getUserPreferences(results[0][0]);\r\n }\r\n }\r\n if (results[1] != null) {\r\n this.getTerms(results[1]);\r\n }\r\n if (results[2] != null) {\r\n this.getDynamicPagesReadForStudentLookup(results[2]);\r\n }\r\n if (results[3] != null) {\r\n this.getSchoolYearSettings(results[3]);\r\n }\r\n });\r\n }\r\n\r\n getUserPreferences(userPreferences: string) {\r\n this.userPreferences = JSON.parse(userPreferences);\r\n if (this.userPreferences != null) {\r\n this.reportParameter.radValue = (this.userPreferences.pub_blnPrintNoField ? 'radNoField' : (this.userPreferences.pub_blnPrintStudentId ? 'radPrintStudentID' : 'radOtherField'));\r\n this.reportParameter.SkipLineBetweenStudent = this.userPreferences.pub_blnSkipLinesBetweenStudent;\r\n this.reportParameter.PrintWithGreyHeading = this.userPreferences.pub_blnPrintWithGreyHeadings;\r\n this.reportParameter.PrintStudentAbsencesAlreadyEntered = this.userPreferences.pub_blnPrintStudentAbsencesAlreadyEntered;\r\n this.reportParameter.PrintTeacherSignatureLine = this.userPreferences.pub_blnPrintTeacherSignatureLine;\r\n this.reportParameter.blnCalledFrom360 = this.userPreferences.pub_blnCalledFrom360;\r\n if (this.reportParameter.OtherFields != null && this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField;\r\n }\r\n }\r\n }\r\n getTerms(terms: CourseTerm[]) {\r\n this.reportParameter.Terms = terms.filter(function (element) { return (element.TermTypeId != 2); });\r\n this.term = new CourseTerm();\r\n this.term.Id = -1;\r\n this.term.LongDescription = ' Today\\'s Only';\r\n this.reportParameter.Terms.push(this.term);\r\n this.term = new CourseTerm();\r\n this.term.Id = 0;\r\n this.term.LongDescription = ' All Terms';\r\n this.reportParameter.Terms.push(this.term);\r\n }\r\n getDynamicPagesReadForStudentLookup(otherFields: Lookup[]) {\r\n this.reportParameter.OtherFields = otherFields;\r\n if (otherFields.length > 0) {\r\n this.reportParameter.OtherField = otherFields[0].Id;\r\n if (this.userPreferences != null) {\r\n if (this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField.toString();\r\n }\r\n }\r\n }\r\n }\r\n getSchoolYearSettings(schoolYearSettings: SchoolYearSettings) {\r\n this.schoolYearSettings = schoolYearSettings;\r\n this.reportParameter.isValueChange = false;\r\n this.reportParameter.isReportList = false;\r\n this.reportParameter.PrintDate = formatDate(new Date, 'MM/dd/yyyy', 'en-US');\r\n this.reportParameter.AttendanceDate = moment(this.yearService.defaultYear.CurrentAttendanceDate).format('MM/DD/YYYY');\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n const weekDay = moment.utc(this.reportParameter.AttendanceDate, 'MM/DD/YYYY').toDate().getDay();\r\n this.reportParameter.Week1Date = moment(this.yearService.defaultYear.CurrentAttendanceDate).subtract(weekDay, 'days').format('MM/DD/YYYY');\r\n this.reportParameter.Week2Date = moment(this.yearService.defaultYear.CurrentAttendanceDate).add(-weekDay + 7, 'days').format('MM/DD/YYYY');\r\n this.setReportTitle();\r\n this.reportParameter.TermId = -1;\r\n this.refreshGrid();\r\n }\r\n setReportTitle() {\r\n if (this.loginService.LoginSettings.State != 'CA') {\r\n if (moment(this.reportParameter.Week1Date).isValid() && moment(this.reportParameter.Week2Date).isValid()) {\r\n this.reportParameter.ReportTitle = 'Weeks of: ' + moment.utc(this.reportParameter.Week1Date).format('MM/DD/YYYY') + ' and ' + moment.utc(this.reportParameter.Week2Date).format('MM/DD/YYYY');\r\n }\r\n } else {\r\n this.reportParameter.ReportTitle = 'Attendance Roster Verification';\r\n }\r\n }\r\n\r\n changeValue() {\r\n this.reportParameter.isValueChange = true;\r\n if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n }\r\n if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n }\r\n }\r\n cancelShowReportParameters() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n refreshGrid() {\r\n this.errors = [];\r\n if ((this.reportParameter.FromPeriod == undefined || this.reportParameter.FromPeriod == 0 || this.reportParameter.FromPeriod == null) && $.isNumeric(this.reportParameter.FromPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'From Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.fromPeriod\r\n });\r\n }\r\n if ((this.reportParameter.ToPeriod == undefined || this.reportParameter.ToPeriod == 0 || this.reportParameter.ToPeriod == null) && $.isNumeric(this.reportParameter.ToPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'To Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.toPeriod\r\n });\r\n }\r\n if (this.errors.length == 0) {\r\n this.reportParameter.ReportGridData = [];\r\n this.reportingService.getTeacherPreviewGridData(this.yearService.defaultYear.SiteYearId, this.reportParameter.TermId, moment.utc(this.reportParameter.AttendanceDate, 'MM-DD-YYYY HH:mm a').toDate(), this.reportParameter.FromPeriod, this.reportParameter.ToPeriod).subscribe(results => {\r\n this.reportParameter.ReportGridData = results;\r\n if (this.reportParameter.ReportGridData.length > 0) {\r\n this.isDataExist = true;\r\n }\r\n else {\r\n this.isDataExist = false;\r\n }\r\n this.reportParameter.isValueChange = false;\r\n this.dataSource = new MatTableDataSource(this.reportParameter.ReportGridData);\r\n this.reportParameter.selectAllReportGridData = true;\r\n this.selectAll(true);\r\n });\r\n }\r\n }\r\n\r\n selectAll(value) {\r\n this.reportParameter.ReportGridData.forEach(o => {\r\n o.Select = value;\r\n }\r\n );\r\n }\r\n\r\n selectClass() {\r\n const result = this.reportParameter.ReportGridData.filter(o => o.Select == false);\r\n if (result.length > 0) {\r\n this.reportParameter.selectAllReportGridData = false;\r\n }\r\n else if (result.length == 0) {\r\n this.reportParameter.selectAllReportGridData = true;\r\n }\r\n }\r\n\r\n runClick() {\r\n let backgroundColor = '';\r\n this.errors = [];\r\n if (this.reportParameter.PrintWithGreyHeading) {\r\n backgroundColor = '#bbbec1';\r\n }\r\n const selectedGridData = this.reportParameter.ReportGridData.filter(o => o.Select);\r\n if (selectedGridData.length == 0) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'No Rosters Selected!',\r\n fieldRef: this.select\r\n });\r\n }\r\n if (this.reportParameter.isValueChange) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'Selection Criteria Changed Please click Update Display button again!',\r\n fieldRef: null\r\n });\r\n }\r\n if (this.reportParameter.Week1Date == undefined || this.reportParameter.Week1Date == '' || this.reportParameter.Week1Date == null) {\r\n this.errors.push({\r\n fieldName: 'Week1',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.week1Date\r\n });\r\n }\r\n\r\n if (this.reportParameter.Week2Date == undefined || this.reportParameter.Week2Date == '' || this.reportParameter.Week2Date == null) {\r\n this.errors.push({\r\n fieldName: 'Week2',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.week2Date\r\n });\r\n }\r\n if (this.errors.length == 0) {\r\n let sectionIds = '';\r\n selectedGridData.forEach((el, i) => {\r\n if (sectionIds == '') {\r\n sectionIds += selectedGridData[i].SiteSectionId;\r\n } else {\r\n sectionIds = sectionIds + ',' + selectedGridData[i].SiteSectionId;\r\n }\r\n });\r\n\r\n\r\n let workflowReport = false;\r\n if (selectedGridData.length >= 5) {\r\n workflowReport = true;\r\n }\r\n\r\n const userPermissions = this.securityService.userPermissions;\r\n let viewSSN = false;\r\n let viewStudentPortalId = false;\r\n let viewReleaseAlert = false;\r\n let viewLunchStatus = false;\r\n let viewStudentFields = false;\r\n if (userPermissions != null) {\r\n if (userPermissions.filter(o => o.PermissionCode == 'GO_VSSSN').length > 0) {\r\n viewSSN = true;\r\n }\r\n if (userPermissions.filter(o => o.PermissionCode == 'SD_VPPP').length > 0) {\r\n viewStudentPortalId = true;\r\n }\r\n if (userPermissions.filter(o => o.PermissionCode == 'SD_VSRA').length > 0) {\r\n viewReleaseAlert = true;\r\n }\r\n if (userPermissions.filter(o => o.PermissionCode == 'GO_VSFRS').length > 0) {\r\n viewLunchStatus = true;\r\n }\r\n if (userPermissions.filter(o => o.PermissionCode == 'SR_VSF').length > 0) {\r\n viewStudentFields = true;\r\n }\r\n }\r\n\r\n this.saveUserPreferences();\r\n this.parameters = [];\r\n this.param = [];\r\n this.param.push({ ParamName: 'strReportDate', ParamStringValue: this.reportParameter.PrintDate });\r\n this.param.push({ ParamName: 'strReportSiteHeader', ParamStringValue: this.yearService.defaultYear.SchoolName });\r\n this.param.push({ ParamName: 'strReportTitle', ParamStringValue: this.reportParameter.ReportTitle });\r\n this.param.push({ ParamName: 'strSiteYearCode', ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier });\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n this.param.push({ ParamName: 'strSiteSectionIds', ParamStringValue: sectionIds });\r\n this.param.push({ ParamName: 'datWeek1', ParamStringValue: moment.utc(this.reportParameter.Week1Date).format('MM/DD/YYYY') });\r\n this.param.push({ ParamName: 'datWeek2', ParamStringValue: moment.utc(this.reportParameter.Week2Date).format('MM/DD/YYYY') });\r\n this.param.push({ ParamName: 'blnPrintStudentId', ParamStringValue: (this.reportParameter.radValue == 'radPrintStudentID' ? true : false) });\r\n this.param.push({ ParamName: 'strOtherField', ParamStringValue: (this.reportParameter.radValue == 'radOtherField' ? this.reportParameter.OtherField : '') });\r\n this.param.push({ ParamName: 'blnSkipLinesBetweenStudent', ParamStringValue: this.reportParameter.SkipLineBetweenStudent });\r\n this.param.push({ ParamName: 'blnPrintGray', ParamStringValue: this.reportParameter.PrintWithGreyHeading });\r\n this.param.push({ ParamName: 'strBackgroundColor', ParamStringValue: backgroundColor });\r\n this.param.push({ ParamName: 'blnPrintStudentAbsencesAlreadyEntered', ParamStringValue: this.reportParameter.PrintStudentAbsencesAlreadyEntered });\r\n this.param.push({ ParamName: 'blnPrintTeacherSignatureLine', ParamStringValue: this.reportParameter.PrintTeacherSignatureLine });\r\n this.param.push({ ParamName: 'blnViewSSN', ParamStringValue: viewSSN });\r\n this.param.push({ ParamName: 'blnViewStudentPortalId', ParamStringValue: viewStudentPortalId });\r\n this.param.push({ ParamName: 'blnViewReleaseAlert', ParamStringValue: viewReleaseAlert });\r\n this.param.push({ ParamName: 'blnViewLunchStatus', ParamStringValue: viewLunchStatus });\r\n this.param.push({ ParamName: 'blnViewStudentFields', ParamStringValue: viewStudentFields });\r\n this.param.push({ ParamName: 'blnCalledFrom360', ParamStringValue: true });\r\n if(this.exportCLick){\r\n this.param.push({ ParamName: 'Export', ParamStringValue: true });\r\n this.param.push({ ParamName: 'blnIncludeAbsences', ParamStringValue: '0' });\r\n }\r\n this.parameters.push(JSON.stringify(this.param));\r\n if (workflowReport) {\r\n this.reportingService.runV9Report(this.report.ReportName, this.report.ReportType, workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.reportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n } else {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: this.report.ReportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: this.report.ReportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.localStorage.removeItem('v9ReportParameter_exportTXT');\r\n if (this.exportCLick == true) {\r\n window.localStorage.setItem('v9ReportParameter_exportTXT', this.report.ReportName + '_' + new Date().toLocaleDateString());\r\n }\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n this.thisDialogRef.close();\r\n }\r\n }\r\n saveUserPreferences() {\r\n const UserPreferencesObj = this.userPreferences;\r\n UserPreferencesObj.pub_blnPrintNoField = (this.reportParameter.radValue == 'radNoField' ? true : false);\r\n UserPreferencesObj.pub_blnPrintStudentId = (this.reportParameter.radValue == 'radPrintStudentID' ? true : false);\r\n UserPreferencesObj.pub_blnPrintOtherField = (this.reportParameter.radValue == 'radOtherField' ? true : false);\r\n if (this.reportParameter.OtherField != '') {\r\n UserPreferencesObj.pub_strOtherField = this.reportParameter.OtherField;\r\n }\r\n UserPreferencesObj.pub_blnSkipLinesBetweenStudent = this.reportParameter.SkipLineBetweenStudent;\r\n UserPreferencesObj.pub_blnPrintWithGreyHeadings = this.reportParameter.PrintWithGreyHeading;\r\n UserPreferencesObj.pub_blnPrintStudentAbsencesAlreadyEntered = this.reportParameter.PrintStudentAbsencesAlreadyEntered;\r\n UserPreferencesObj.pub_blnPrintTeacherSignatureLine = this.reportParameter.PrintTeacherSignatureLine;\r\n UserPreferencesObj.pub_blnCalledFrom360 = this.reportParameter.blnCalledFrom360;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(UserPreferencesObj));\r\n this.userPreferencesService.saveUserPreferences(0, '/ManualEntryRosters.aspx', xmlStream, 0, '').subscribe(response => { }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n reportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { V9ParameterRow, V9ParameterRows } from '../../models/v9-parameter-row.model';\r\n\r\n@Pipe({\r\n name: 'v9ReportParameterTabsFilter'\r\n})\r\nexport class V9ReportParameterTabsFilterPipe implements PipeTransform {\r\n\r\n transform(chunkedParameters: V9ParameterRow[], tabName: string): any {\r\n const reportparameters = new V9ParameterRows();\r\n chunkedParameters.forEach(obj => {\r\n if (obj.Parameters.filter(x => x.TabName == tabName).length > 0) {\r\n const parameterRow = new V9ParameterRow();\r\n parameterRow.IncludeLineAtEndOfGroup = obj.IncludeLineAtEndOfGroup;\r\n parameterRow.IncludeLineAtStartOfGroup = obj.IncludeLineAtStartOfGroup;\r\n const parameters = obj.Parameters.filter(x => x.TabName == tabName);\r\n parameters.forEach(element => {\r\n parameterRow.Parameters.push(element);\r\n });\r\n reportparameters.Rows.push(parameterRow);\r\n }\r\n });\r\n return reportparameters.Rows;\r\n }\r\n}\r\n","\r\n\r\n
Print and Delivery Options
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {{parameter.Name}}\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {{parameter.Name}}\r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n {{dataItem.TextField}}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 1\">\r\n Multiple Selected\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{disCol}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{row[disCol]}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \"Image\"\r\n
\r\n\r\n
{{parameter.Hint}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n","import { Component, ElementRef, Inject, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { TylerMatTableDataSource } from '../../../../../shared-components/angular-material/extended.class';\r\nimport { ErrorList } from '../../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { ReportV9 } from '../../../models/report-v9.model';\r\nimport { V9ParameterRow, V9ParameterRows } from '../../../models/v9-parameter-row.model';\r\nimport { V9ReportParameter } from '../../../models/v9-report-parameter.model';\r\nimport { ReportingService } from '../../../reporting.service';\r\n\r\n@Component({\r\n selector: 'app-v9-letter-report-parameters',\r\n templateUrl: './v9-letter-report-parameters.component.html',\r\n styles: []\r\n})\r\nexport class V9LetterReportParametersComponent implements OnInit {\r\n\r\n reportParameters: V9ReportParameter[] = [];\r\n chunkedParameters: V9ParameterRows;\r\n errors: ErrorList[] = [];\r\n selectedReport: ReportV9;\r\n gridDataMatDataSource: TylerMatTableDataSource;\r\n columnToDisplay: string[];\r\n selectAllGridRecords = false;\r\n\r\n constructor(\r\n private reportingService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (this.data != undefined) {\r\n this.selectedReport = this.data.selectedReport;\r\n this.reportParameters = this.data.reportParameters;\r\n this.setParameterRows();\r\n }\r\n }\r\n\r\n getParameterStyle(parameter: V9ReportParameter): object {\r\n let obj: object = null;\r\n if (parameter != null && parameter.ParameterStyle != '') {\r\n obj = JSON.parse('{' + parameter.ParameterStyle + '}');\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n setParameterRows() {\r\n this.chunkedParameters = new V9ParameterRows();\r\n const reportParameter = this.reportParameters[this.reportParameters.length - 1];\r\n if (reportParameter != null) {\r\n for (let rowIndex = 0; rowIndex < reportParameter.RowNumberInTable; rowIndex++) {\r\n const parameterRow = new V9ParameterRow();\r\n let includeLineAtStartOfGroup = true;\r\n let includeLineAtEndOfGroup = true;\r\n this.reportParameters.filter(o => o.RowNumberInTable == rowIndex + 1 && o.IsLetterParameter == true).forEach(obj => {\r\n obj.Disabled = false;\r\n if (obj.DataType == 'BIT') {\r\n if (typeof (obj.Value) != 'boolean') {\r\n obj.Value = obj.Value != null && obj.Value.toUpperCase() == 'TRUE' ? true : false;\r\n }\r\n }\r\n if (obj.IncludeLineAtStartOfGroup != includeLineAtStartOfGroup) {\r\n includeLineAtStartOfGroup = false;\r\n }\r\n if (obj.IncludeLineAtEndOfGroup != includeLineAtEndOfGroup) {\r\n includeLineAtEndOfGroup = false;\r\n }\r\n if (obj.ParentId != null && obj.ParentId > 0) {\r\n const parentReportParameter = this.reportParameters.filter(o => o.Id == obj.ParentId)[0];\r\n if (parentReportParameter.ControlType == 'rbl') {\r\n const parentValue = obj.ParentValue.split(',');\r\n if (parentValue.length > 1) {\r\n if (parentValue.indexOf(parentReportParameter.Value) > -1) {\r\n obj.Disabled = false;\r\n }\r\n else {\r\n obj.Disabled = true;\r\n }\r\n obj.Disabled = obj.Disabled == false && parentReportParameter.Disabled == true ? true : obj.Disabled;\r\n }\r\n else {\r\n obj.Disabled = parentReportParameter.Disabled == true ? true : obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase() && obj.ParentValue != '';\r\n }\r\n\r\n const parameterParentValue = this.reportParameters.filter(x => x.Id == obj.ParentId)[0];\r\n if (parameterParentValue != undefined && parameterParentValue != null && parameterParentValue.Value == 'Journal') {\r\n this.reportParameters.filter(x => x.IsLetterParameter == true && x.ParameterName != 'blnPrimaryParentsAddress' && x.ParameterName != 'blnAlternateParentsAddress'\r\n && x.ParameterName != 'blnAlternateParAddrOnlyIfRequested' && x.ParameterName !='blnStudentAddress' && x.ParameterName != 'strReportType' && x.ParameterName != 'bytMailingLanguage').forEach(o => {\r\n o.Disabled = true;\r\n if (o.ParameterName == 'blnIncludePdfAttachment') {\r\n o.Value = null;\r\n }\r\n if (o.ParameterName == 'strEmailOptions') {\r\n o.Value = 'SendEmail';\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n if (parentReportParameter != null && parentReportParameter.Value != null) {\r\n if (obj.DataSource == null && obj.ControlType == 'ddl') {\r\n // parentReportParameter.Disabled = true;\r\n }\r\n if (parentReportParameter.Disabled == true) {\r\n obj.Disabled = true;\r\n }\r\n else {\r\n if (obj.ParentValue.toUpperCase() != '') {\r\n if (obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase()) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n }\r\n // obj.Disabled = parentReportParameter.Disabled == true ? true : obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase();\r\n }\r\n }\r\n }\r\n\r\n if (obj.ControlType == 'cbl') {\r\n if (obj.DataSource != null) {\r\n if (obj.DataSource.length > 0) {\r\n const variable = obj.Value.split(',');\r\n variable.forEach(ele => {\r\n obj.DataSource.forEach(element => {\r\n if (element.ValueField == ele) {\r\n element.IsSelected = true;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (obj.ControlType == 'ddcbl') {\r\n if (obj.Value != '' && obj.Value != null) {\r\n const objValue: string[] = [];\r\n const variable = obj.Value.split(',');\r\n variable.forEach(element => {\r\n objValue.push(element);\r\n });\r\n if (objValue.length > 0) {\r\n obj.Value = objValue;\r\n }\r\n }\r\n }\r\n\r\n if (obj.ControlType == 'img') {\r\n if (obj.Value != '' && obj.Value != null) {\r\n if (obj.Value['changingThisBreaksApplicationSecurity'] == undefined && obj.Value['changingThisBreaksApplicationSecurity'] == null) {\r\n obj.Value = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/png;base64, ' + obj.Value);\r\n }\r\n }\r\n }\r\n\r\n if (obj.ControlType == 'ddl') {\r\n if (obj.Value != '') {\r\n if (obj.DataSource != null) {\r\n const objDataSourceValue = obj.DataSource.filter(x => x.ValueField == obj.Value);\r\n if (objDataSourceValue.length == 0) {\r\n if (obj.DataSource != null && obj.DataSource.length > 0) {\r\n obj.Value = obj.DataSource[0].ValueField;\r\n }\r\n }\r\n }\r\n else if (obj.DataSource == null) {\r\n obj.Value = '';\r\n }\r\n }\r\n }\r\n\r\n parameterRow.Parameters.push(obj);\r\n });\r\n parameterRow.IncludeLineAtStartOfGroup = includeLineAtStartOfGroup;\r\n parameterRow.IncludeLineAtEndOfGroup = includeLineAtEndOfGroup;\r\n this.chunkedParameters.Rows.push(parameterRow);\r\n }\r\n }\r\n\r\n }\r\n\r\n parameterChanged(parameter: V9ReportParameter) {\r\n if (parameter.ControlType == 'chk') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id).forEach(obj => {\r\n obj.Disabled = false;\r\n if (obj.ParentValue != null && parameter.Value != null) {\r\n if (obj.ParentValue.toUpperCase() != parameter.Value.toString().toUpperCase()) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == obj.Id).forEach(element => {\r\n element.Disabled = obj.Disabled;\r\n });\r\n });\r\n }\r\n if (parameter.ControlType == 'rbl') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id).forEach(obj => {\r\n obj.Disabled = false;\r\n const parentValue = obj.ParentValue.split(',');\r\n if (parentValue.length > 1) {\r\n if (parentValue.indexOf(parameter.Value) > -1 && obj.IsRequired == false) {\r\n obj.Disabled = false;\r\n }\r\n else {\r\n obj.Disabled = true;\r\n if (obj.ControlType == 'chk') {\r\n obj.Value = null;\r\n }\r\n }\r\n }\r\n else {\r\n if (obj.ParentValue != null && parameter.Value != null) {\r\n if (obj.ParentValue != parameter.Value && obj.ParentValue != '') {\r\n obj.Disabled = true;\r\n obj.Value = null;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == obj.Id).forEach(element => {\r\n if (obj.Value != null && element.ParentValue.toUpperCase() != obj.Value.toString().toUpperCase()) {\r\n element.Disabled = true;\r\n }\r\n else {\r\n if (obj.Value == null) {\r\n element.Disabled = true;\r\n }\r\n else {\r\n element.Disabled = obj.Disabled;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n if (parameter.Value == 'Journal') {\r\n this.reportParameters.filter(x => x.IsLetterParameter == true && x.ParameterName != 'blnPrimaryParentsAddress' && x.ParameterName != 'blnAlternateParentsAddress'\r\n && x.ParameterName != 'blnAlternateParAddrOnlyIfRequested' && x.ParameterName !='blnStudentAddress' && x.ParameterName != 'strReportType' && x.ParameterName != 'bytMailingLanguage').forEach(obj => {\r\n obj.Disabled = true;\r\n if (obj.ParameterName == 'blnIncludePdfAttachment') {\r\n obj.Value = null;\r\n }\r\n if (obj.ParameterName == 'strEmailOptions') {\r\n obj.Value = 'SendEmail';\r\n }\r\n });\r\n }\r\n else if (parameter.Value == 'Report' || parameter.Value == 'Letters') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id && o.ControlType == 'rbl').forEach(obj => {\r\n this.reportParameters.filter(o => o.ParentId == obj.Id).forEach(ele => {\r\n ele.Disabled = false;\r\n const parentValues = ele.ParentValue.split(',');\r\n if (parentValues.length > 1) {\r\n if (parentValues.indexOf(obj.Value) > -1 && ele.IsRequired == false) {\r\n ele.Disabled = false;\r\n }\r\n else {\r\n ele.Disabled = true;\r\n }\r\n }\r\n else {\r\n if (ele.ParentValue != null && obj.Value != null) {\r\n if (ele.ParentValue != obj.Value && ele.ParentValue != '') {\r\n ele.Disabled = true;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == ele.Id).forEach(element => {\r\n element.Disabled = ele.Disabled;\r\n });\r\n }\r\n });\r\n });\r\n this.reportParameters.forEach(obj => {\r\n if (obj.ParameterName == 'blnUsingSchoolLetterHead') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'bytPrintLogo') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'blnPrintToMailFormat') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'blnPrintSchoolAddress') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'blnReverseName') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'blnPrintFullDuplex') {\r\n obj.Disabled = false;\r\n }\r\n if (obj.ParameterName == 'blnPrintTeacherName') {\r\n obj.Disabled = false;\r\n }\r\n });\r\n }\r\n const parameterParentValue = this.reportParameters.filter(x => x.Id == parameter.ParentId)[0];\r\n if (parameterParentValue != undefined && parameterParentValue != null && parameterParentValue.Value == 'Journal') {\r\n this.reportParameters.filter(x => x.IsLetterParameter == true && x.ParameterName != 'blnPrimaryParentsAddress' && x.ParameterName != 'blnAlternateParentsAddress'\r\n && x.ParameterName != 'blnAlternateParAddrOnlyIfRequested' && x.ParameterName !='blnStudentAddress' && x.ParameterName != 'strReportType' && x.ParameterName != 'bytMailingLanguage').forEach(obj => {\r\n obj.Disabled = true;\r\n if (obj.ParameterName == 'blnIncludePdfAttachment') {\r\n obj.Value = null;\r\n }\r\n if (obj.ParameterName == 'strEmailOptions') {\r\n obj.Value = 'SendEmail';\r\n }\r\n });\r\n }\r\n\r\n }\r\n }\r\n\r\n validationFields() {\r\n this.errors = [];\r\n this.selectedReport.ReportParameters = this.reportParameters.filter(o => o.IsLetterParameter == true && o.ParentId != 0 && o.IsRequired == false);\r\n this.selectedReport.ReportParameters.forEach(obj => {\r\n const parentobject = this.reportParameters.filter(o => o.Id == obj.ParentId)[0];\r\n if (parentobject) {\r\n if (this.selectedReport.ReportParameters.filter(x => x.Id == parentobject.Id).length == 0) {\r\n this.selectedReport.ReportParameters.push(parentobject);\r\n }\r\n }\r\n });\r\n this.reportingService.getV9ReportParameterValidation(this.selectedReport).subscribe(result => {\r\n if (result != '') {\r\n const errormessage = result.split('|');\r\n errormessage.forEach(obj => {\r\n if (obj != '' && obj != 'Subject is required' && obj !='Message is required') {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: obj\r\n });\r\n }\r\n else if (obj != '' && obj == 'Subject is required'){\r\n const parentobject = this.selectedReport.ReportParameters.filter(o => o.ColumnName == 'strEmailSubject')[0];\r\n if (parentobject) {\r\n const strFieldId ='txt' + parentobject.ParameterName + '_' + parentobject.Id;\r\n const htmlElement: Element = document.getElementById(strFieldId);\r\n const control = new ElementRef(htmlElement);\r\n this.errors.push({\r\n fieldName: 'Subject',\r\n fieldRef: control,\r\n errorMsg: obj\r\n });\r\n }\r\n }\r\n else if (obj =='Message is required'){\r\n const parentobject = this.selectedReport.ReportParameters.filter(o => o.ColumnName == 'strEmailBody')[0];\r\n if (parentobject) {\r\n const strFieldId ='rtxt' + parentobject.ParameterName + '_' + parentobject.Id;\r\n const htmlElement: Element = document.getElementById(strFieldId);\r\n const control = new ElementRef(htmlElement);\r\n this.errors.push({\r\n fieldName: 'Message',\r\n fieldRef: control,\r\n errorMsg: obj\r\n });\r\n }\r\n }\r\n });\r\n }\r\n this.validateRequiredFields();\r\n this.okClick();\r\n });\r\n }\r\n\r\n validateRequiredFields() {\r\n this.reportParameters.filter(o => o.IsVisible == true && o.Disabled == false && o.IsRequired == true).forEach(obj => {\r\n if (obj.Value == null || obj.Value.toString() == '') {\r\n let fieldName: string;\r\n if (obj.Name != null && obj.Name != '') {\r\n fieldName = obj.Name;\r\n }\r\n else if (obj.ParentId != null && obj.ParentId > 0) {\r\n const parentObject = this.reportParameters.filter(o => o.Id == obj.ParentId)[0];\r\n if (parentObject != null && parentObject.Name != null && parentObject.Name != '') {\r\n fieldName = parentObject.Name;\r\n }\r\n }\r\n fieldName = fieldName.replace(':', '');\r\n\r\n this.errors.push({\r\n fieldName: fieldName,\r\n fieldRef: null,\r\n errorMsg: 'Field is required'\r\n });\r\n }\r\n });\r\n }\r\n\r\n selectAllGridRecordsChange() {\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close(null);\r\n }\r\n\r\n okClick() {\r\n if (this.errors.length == 0) {\r\n this.dialogRef.close(this.reportParameters);\r\n }\r\n }\r\n\r\n}\r\n","
0\">\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{area.MEDICALAREA | translate}}\r\n \r\n \r\n \r\n \r\n \r\n 0\" aria-label=\"Expand row for more details\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{field.FIELDTEXT}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n 0\" name=\"ddl{{field.FIELDTEXT}}_{{i}}\"\r\n [(ngModel)]=\"field.TO\" id=\"ddl{{field.FIELDTEXT}}_{{i}}\"\r\n [disabled]=\"!areaRow.Select\" (selectionChange)=\"validate(areaRow, field);\">\r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n \r\n
","/* eslint-disable complexity */\r\n\r\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { LoginService } from '../../../login/login.service';\r\nimport { V9ReportParameter } from '../../models/v9-report-parameter.model';\r\nimport { AreaField, MedicalArea } from './medical-data-listing-grid.model';\r\n\r\n@Component({\r\n selector: 'app-medical-data-listing-grid',\r\n templateUrl: './medical-data-listing-grid.component.html',\r\n styleUrls: ['./medical-data-listing-grid.component.css'],\r\n animations: [detailExpand],\r\n})\r\nexport class MedicalDataListingGridComponent implements OnInit {\r\n // @Input() parameters: V9ReportParameter[];\r\n @Input() reportParameters: V9ReportParameter[];\r\n @Output() syncParametersEvent = new EventEmitter();\r\n areaList: MedicalArea[] = [];\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay: string[] = ['Select', 'Area', 'Expand'];\r\n columnsToDisplayDetailRow: string[] = ['FIELDTEXT', 'FROM', 'TO'];\r\n strStateCode = 'IL';\r\n constructor(private loginService: LoginService,) {\r\n\r\n }\r\n ngOnInit() {\r\n // if (this.parameters && this.parameters.length > 0) {\r\n // this.reportParameters = JSON.parse(JSON.stringify(this.parameters));\r\n // }\r\n this.initialize();\r\n }\r\n initialize() {\r\n this.strStateCode = this.loginService.LoginSettings.State;\r\n if (this.reportParameters && this.reportParameters.find(x => x.ControlType === 'medicaldatalistinggrid')) {\r\n const param = this.reportParameters.find(x => x.ControlType === 'medicaldatalistinggrid');\r\n const tempDataSource: any[] = JSON.parse(param.GridDataSource);\r\n tempDataSource.filter(x => x.MEDICALAREA).forEach(area => {\r\n this.areaList.push({ ID: area.ID, MEDICALAREA: area.MEDICALAREA, Fileds: [] } as MedicalArea);\r\n });\r\n const allFields: AreaField[] = tempDataSource.filter(x => x.FIELDDATATYPE && x.FIELDTEXT);\r\n this.areaList.forEach(element => {\r\n element.Select = false;\r\n element.Fileds = allFields.filter(x => x.SUBID == element.ID);\r\n element.Fileds.forEach(field => {\r\n if (field.DEFAULTVALUE.length > 0) {\r\n field.Lookup = [];\r\n field.DEFAULTVALUE.split('|').forEach(value => {\r\n if (value.split(',')[0].length > 0) {\r\n field.Lookup.push({\r\n Id: '', IsSelected: false, ValueField: value.split(',')[0], TextField: value.split(',')[1]\r\n });\r\n }\r\n });\r\n }\r\n\r\n });\r\n });\r\n this.angularMatData = new TylerMatTableDataSource(this.areaList);\r\n // this.expandAll(true);\r\n\r\n }\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n validate(area: MedicalArea, selectedfield: AreaField) {\r\n\r\n let strPutQuote = '';\r\n let strimmunizationWhere = '';\r\n let strMedicationWhere = '';\r\n let strMedicalConditionWhere = '';\r\n let strPhysicianWhere = '';\r\n let strHearingScreeningWhere = '';\r\n let strSpinalScreeningWhere = '';\r\n let strVisionScreeningWhere = '';\r\n let strDentalExamWhere = '';\r\n let strRestrictionsWhere = '';\r\n let strClinicLogWhere = '';\r\n let strPregnancyWhere = '';\r\n let strPhysicalExamWhere = '';\r\n const dtMinDate: Date = new Date(1900, 1, 1);\r\n const dtMaxDate: Date = new Date(2079, 6, 6);\r\n let strSelectionCriteria = '';\r\n\r\n let strOpenParens = '';\r\n let strCloseParens = '';\r\n area.Fileds.forEach(field => {\r\n if (field.FIELDDATATYPE.toUpperCase() == 'DATETYPE') {\r\n if (typeof (field.FROM) == 'object') { field.FROM = new Date(field.FROM).toLocaleDateString(); }\r\n if (typeof (field.TO) == 'object') { field.TO = new Date(field.TO).toLocaleDateString(); }\r\n }\r\n if (field.FROM.trim().length > 0) {\r\n\r\n // FROM Condition\r\n let strSign = '>=';\r\n let strAndOr = ' AND ';\r\n\r\n switch (field.FIELDDATATYPE.toUpperCase()) {\r\n case 'STRINGTYPE':\r\n strPutQuote = '\\'';\r\n break;\r\n case 'STRINGTYPEEQUALS':\r\n strPutQuote = '\\'';\r\n strSign = ' = ';\r\n if (field.TO.trim().length > 0) {\r\n strOpenParens = '(';\r\n strCloseParens = ')';\r\n strAndOr = ' OR ';\r\n }\r\n\r\n break;\r\n case 'INTEGERTYPE':\r\n const tempValue = parseInt(field.FROM);\r\n if (isNaN(tempValue) == false) {\r\n // TODO throw (\"Invalid Numeric Value in Data From!\");\r\n }\r\n strPutQuote = '';\r\n break;\r\n case 'BOOLEANTYPE':\r\n strPutQuote = '';\r\n break;\r\n case 'BOOLEANTYPEEQUALS':\r\n strPutQuote = '';\r\n strSign = ' = ';\r\n break;\r\n case 'DATETYPE':\r\n if ((new Date(field.FROM) > dtMaxDate) || (new Date(field.FROM) < dtMinDate)) {\r\n // throw Date From must be between dtMinDate and dtMaxDate\r\n }\r\n\r\n strPutQuote = '\\'';\r\n break;\r\n }\r\n\r\n // ---- taking value\r\n switch (area.MEDICALAREA.toUpperCase()) {\r\n case 'IMMUNIZATION':\r\n strimmunizationWhere = strimmunizationWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'MEDICATION':\r\n strMedicationWhere = strMedicationWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'MEDICAL CONDITIONS':\r\n strMedicalConditionWhere = strMedicalConditionWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'DENTAL EXAMS':\r\n strDentalExamWhere = strDentalExamWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'CLINIC LOG/VISITS':\r\n strClinicLogWhere = strClinicLogWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'HEARING SCREENINGS':\r\n strHearingScreeningWhere = strHearingScreeningWhere + ' '\r\n + strOpenParens\r\n + field.FIELDVALUE\r\n + strSign\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + strAndOr;\r\n break;\r\n case 'PHYSICAL EXAM':\r\n strPhysicalExamWhere = strPhysicalExamWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'PHYSICIAN INFORMATION':\r\n strPhysicianWhere = strPhysicianWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'RESTRICTIONS':\r\n strRestrictionsWhere = strRestrictionsWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'SPINAL SCREENING':\r\n strSpinalScreeningWhere = strSpinalScreeningWhere + ' '\r\n + field.FIELDVALUE\r\n + strSign\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'VISION SCREENING':\r\n strVisionScreeningWhere = strVisionScreeningWhere + ' '\r\n + strOpenParens\r\n + field.FIELDVALUE\r\n + strSign\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + strAndOr;\r\n break;\r\n case 'PREGNANCY':\r\n strPregnancyWhere = strPregnancyWhere + ' '\r\n + field.FIELDVALUE + ' >= '\r\n + strPutQuote\r\n + field.FROM.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n }\r\n\r\n }\r\n\r\n if (field.TO.trim().length > 0) {\r\n let strSign = '>=';\r\n switch (field.FIELDDATATYPE.toUpperCase()) {\r\n case 'STRINGTYPEEQUALS':\r\n strPutQuote = '\\'';\r\n strSign = ' = ';\r\n break;\r\n case 'STRINGTYPE':\r\n strPutQuote = '\\'';\r\n break;\r\n case 'INTEGERTYPE':\r\n const tempValue = parseInt(field.TO);\r\n if (isNaN(tempValue) == false) {\r\n // throw 'Invalid Numeric Value in Data To!'\r\n }\r\n\r\n break;\r\n case 'BOOLEANTYPE':\r\n break;\r\n case 'DATETYPE':\r\n strSign = ' <= ';\r\n if ((new Date(field.TO) > dtMaxDate) || (new Date(field.TO) < dtMinDate)) {\r\n // throw 'Date To must be between dtMinDate and dtMaxDate\r\n }\r\n\r\n strPutQuote = '\\'';\r\n break;\r\n }\r\n\r\n // ---- taking value\r\n switch (area.MEDICALAREA.toUpperCase()) {\r\n case 'IMMUNIZATION':\r\n strimmunizationWhere = strimmunizationWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'MEDICATION':\r\n strMedicationWhere = strMedicationWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'MEDICAL CONDITIONS':\r\n strMedicalConditionWhere = strMedicalConditionWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'DENTAL EXAMS':\r\n strDentalExamWhere = strDentalExamWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'CLINIC LOG/VISITS':\r\n strClinicLogWhere = strClinicLogWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'HEARING SCREENINGS':\r\n strHearingScreeningWhere = strHearingScreeningWhere + ' '\r\n + field.FIELDVALUE\r\n + strSign\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote\r\n + strCloseParens + ' And ';\r\n break;\r\n case 'PHYSICAL EXAM':\r\n strPhysicalExamWhere = strPhysicalExamWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'PHYSICIAN INFORMATION':\r\n strPhysicianWhere = strPhysicianWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'RESTRICTIONS':\r\n strRestrictionsWhere = strRestrictionsWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'SPINAL SCREENING':\r\n strSpinalScreeningWhere = strSpinalScreeningWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n case 'VISION SCREENING':\r\n strVisionScreeningWhere = strVisionScreeningWhere + ' '\r\n + field.FIELDVALUE\r\n + strSign\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote\r\n + strCloseParens + ' And ';\r\n break;\r\n case 'PREGNANCY':\r\n strPregnancyWhere = strPregnancyWhere + ' '\r\n + field.FIELDVALUE + ' <= '\r\n + strPutQuote\r\n + field.TO.trim()\r\n + strPutQuote + ' And ';\r\n break;\r\n }\r\n\r\n }\r\n\r\n // '----------------- Now Adding the selecting Criteria which user selected\r\n if (field.FROM.length > 0) {\r\n if (area.MEDICALAREA.toUpperCase() == 'VISION SCREENING') {\r\n const strFieldName: string = field.FIELDTEXT;\r\n let strValueToUse: string = field.FROM + (field.TO.length > 0 ? ' => ' : '') + field.TO;\r\n if (this.strStateCode == 'IL') {\r\n if (field.FIELDTEXT.toLowerCase().trim().startsWith('diagnosis')) {\r\n strValueToUse = strValueToUse.replace('1', 'Normal');\r\n strValueToUse = strValueToUse.replace('2', 'Mypoia');\r\n strValueToUse = strValueToUse.replace('3', 'Hyperopia');\r\n strValueToUse = strValueToUse.replace('4', 'Astigmatism');\r\n strValueToUse = strValueToUse.replace('5', 'Strabismus');\r\n strValueToUse = strValueToUse.replace('6', 'Amblyopia');\r\n strValueToUse = strValueToUse.replace('7', 'Other');\r\n if (strValueToUse.trim().indexOf('=>') >= 0) {\r\n strValueToUse = strValueToUse.replace('=>', 'Or');\r\n }\r\n\r\n }\r\n\r\n if (strFieldName.toLowerCase().trim().startsWith('screening tool')) {\r\n if ((strValueToUse == null)) {\r\n strValueToUse = '';\r\n }\r\n\r\n if (strValueToUse.trim().indexOf('=>') >= 0) {\r\n const strList: string[] = strValueToUse.split('=>');\r\n strValueToUse = '';\r\n if ((strList.length >= 2)) {\r\n let strValueOne: string = strList[0];\r\n strValueOne = strValueOne.trim().replace('>', '').replace('=', '').trim();\r\n let strValueTwo: string = strList[1];\r\n strValueTwo = strValueTwo.trim().replace('>', '').replace('=', '').trim();\r\n const strFirst: string = this.getScreeningToolStr(strValueOne);\r\n const strSecond: string = this.getScreeningToolStr(strValueTwo);\r\n strValueToUse = (strFirst + (' => ' + strSecond));\r\n }\r\n else {\r\n strValueToUse = this.getScreeningToolStr(strValueToUse);\r\n }\r\n\r\n // end if there is just one value, not => set of values\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n strSelectionCriteria = '****** VISION SCREENING ******;' + field.FIELDTEXT + ' : ' + strValueToUse;\r\n }\r\n else {\r\n strSelectionCriteria = '****** ' + area.MEDICALAREA + ' ******;'\r\n + field.FIELDTEXT + ' : ' + field.FROM + (field.TO.length > 0 ? ' => ' : '') + field.TO;\r\n }\r\n }\r\n else {\r\n strSelectionCriteria = 'Any Records!';\r\n }\r\n });\r\n this.reportParameters = this.reportParameters.filter(x => x.ParameterName != 'strClinicLogWhere' && x.ParameterName != 'strDentalExamWhere'\r\n && x.ParameterName != 'strHearingScreeningWhere' && x.ParameterName != 'strImmunizationWhere'\r\n && x.ParameterName != 'strMedicalConditionWhere' && x.ParameterName != 'strMedicationWhere'\r\n && x.ParameterName != 'strPhysicalExamWhere' && x.ParameterName != 'strPhysicianWhere'\r\n && x.ParameterName != 'strPregnancyWhere' && x.ParameterName != 'strRestrictionsWhere'\r\n && x.ParameterName != 'strSpinalScreeningWhere' && x.ParameterName != 'strVisionScreeningWhere');\r\n // SET VALUES IN PARAMETERstr.slice(0, str.length - 3)\r\n if (strClinicLogWhere && strClinicLogWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strClinicLogWhere', strClinicLogWhere.trim().slice(0, strClinicLogWhere.trim().length - 3)));\r\n }\r\n else{\r\n this.reportParameters.push(this.createNewParam('strClinicLogWhere', ' '));\r\n }\r\n if (strDentalExamWhere && strDentalExamWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strDentalExamWhere', strDentalExamWhere.trim().slice(0, strDentalExamWhere.trim().length - 3)));\r\n }\r\n else{\r\n this.reportParameters.push(this.createNewParam('strDentalExamWhere', ' '));\r\n }\r\n if (strHearingScreeningWhere && strHearingScreeningWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strHearingScreeningWhere', strHearingScreeningWhere.trim().slice(0, strHearingScreeningWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strHearingScreeningWhere', ' '));\r\n }\r\n\r\n if (strimmunizationWhere && strimmunizationWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strImmunizationWhere', strimmunizationWhere.trim().slice(0, strimmunizationWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strImmunizationWhere', ' '));\r\n }\r\n\r\n if (strMedicalConditionWhere && strMedicalConditionWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strMedicalConditionWhere', strMedicalConditionWhere.trim().slice(0, strMedicalConditionWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strMedicalConditionWhere', ' '));\r\n }\r\n\r\n if (strMedicationWhere && strMedicationWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strMedicationWhere', strMedicationWhere.trim().slice(0, strMedicationWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strMedicationWhere', ' '));\r\n }\r\n\r\n if (strPhysicalExamWhere && strPhysicalExamWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strPhysicalExamWhere', strPhysicalExamWhere.trim().slice(0, strPhysicalExamWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strPhysicalExamWhere', ' '));\r\n }\r\n\r\n if (strPhysicianWhere && strPhysicianWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strPhysicianWhere', strPhysicianWhere.trim().slice(0, strPhysicianWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strPhysicianWhere', ' '));\r\n }\r\n\r\n if (strPregnancyWhere && strPregnancyWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strPregnancyWhere', strPregnancyWhere.trim().slice(0, strPregnancyWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strPregnancyWhere', ' '));\r\n }\r\n\r\n if (strRestrictionsWhere && strRestrictionsWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strRestrictionsWhere', strRestrictionsWhere.trim().slice(0, strRestrictionsWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strRestrictionsWhere', ' '));\r\n }\r\n\r\n if (strSpinalScreeningWhere && strSpinalScreeningWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strSpinalScreeningWhere', strSpinalScreeningWhere.trim().slice(0, strSpinalScreeningWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strSpinalScreeningWhere', ' '));\r\n }\r\n\r\n if (strVisionScreeningWhere && strVisionScreeningWhere.trim().length > 0) {\r\n this.reportParameters.push(this.createNewParam('strVisionScreeningWhere', strVisionScreeningWhere.trim().slice(0, strVisionScreeningWhere.trim().length - 3)));\r\n }else{\r\n this.reportParameters.push(this.createNewParam('strVisionScreeningWhere', ' '));\r\n }\r\n\r\n // if (strClinicLogWhere && strClinicLogWhere.trim().length > 0) {\r\n // this.reportParameters.push(this.createNewParam('strClinicLogWhere', strClinicLogWhere.trim()));\r\n // }\r\n if (this.reportParameters.find(x => x.ParameterName == 'MedSelectionCriteria')) {\r\n this.reportParameters.find(x => x.ParameterName == 'MedSelectionCriteria').Value = strSelectionCriteria ? strSelectionCriteria : '';\r\n }\r\n // if (this.reportParameters && this.reportParameters.length > 0) {\r\n // this.parameters = JSON.parse(JSON.stringify(this.reportParameters));\r\n // }\r\n this.reportParameters = [...this.reportParameters];\r\n this.syncParametersEvent.emit(this.reportParameters);\r\n return true;\r\n\r\n }\r\n\r\n getScreeningToolStr(strIdString: string): string {\r\n let strScreeningTool = '';\r\n if (strIdString.trim() == '1') {\r\n strScreeningTool = 'Snellen';\r\n }\r\n else if (strIdString.trim() == '2') {\r\n strScreeningTool = 'Snellen-E';\r\n }\r\n else if (strIdString.trim() == '3') {\r\n strScreeningTool = 'Titmus';\r\n }\r\n else if (strIdString.trim() == '4') {\r\n strScreeningTool = 'McDowell';\r\n }\r\n else if (strIdString.trim() == '5') {\r\n strScreeningTool = 'LEA';\r\n }\r\n else if (strIdString.trim() == '6') {\r\n strScreeningTool = 'Lighthouse';\r\n }\r\n else if (strIdString.trim() == '7') {\r\n strScreeningTool = 'Sloan';\r\n }\r\n else if (strIdString.trim() == '8') {\r\n strScreeningTool = 'HOTV';\r\n }\r\n else if (strIdString.trim() == '9') {\r\n strScreeningTool = 'Sure Sight';\r\n }\r\n else if (strIdString.trim() == '10') {\r\n strScreeningTool = 'Photoscreener';\r\n }\r\n\r\n return strScreeningTool;\r\n }\r\n\r\n createNewParam(parameterName: string, value: string): V9ReportParameter {\r\n return {\r\n Id: 0,\r\n ParentId: 0,\r\n Name: '',\r\n ColumnName: '',\r\n ParameterName: parameterName,\r\n DataType: '',\r\n ControlType: '',\r\n Value: value,\r\n ParentValue: null,\r\n Hint: '',\r\n MaxLength: 0,\r\n RowNumberInTable: 0,\r\n ColumnNumberInTable: 0,\r\n SpanNumberOfRows: 0,\r\n SpanNumberOfColumns: 0,\r\n ChildPaddingLeft: 0,\r\n ShowOptionsVertically: false,\r\n IncludeLineAtStartOfGroup: false,\r\n IncludeLineAtEndOfGroup: false,\r\n IsVisible: false,\r\n IsRequired: false,\r\n UserPreferencesParameterName: '',\r\n ParameterStyle: '',\r\n DataSource: [],\r\n Disabled: false,\r\n GridDataSource: '',\r\n LookupProcedureName: '',\r\n IsLetterParameter: false,\r\n TabName: '',\r\n GridDataSources: null,\r\n ColumnToDisplay: [],\r\n ColumnControlSpec: [],\r\n selectedStaffNames: '',\r\n selectedStaffNumbers: '',\r\n staffpickerControlType: '',\r\n\r\n\r\n\r\n } as V9ReportParameter;\r\n }\r\n\r\n medicalAreaChkChange() {\r\n\r\n if (this.reportParameters && this.reportParameters.length > 0) {\r\n this.areaList.forEach(area => {\r\n\r\n if (area.MEDICALAREA.toUpperCase() == 'IMMUNIZATION') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayImmunization')[0].Value = area.Select;\r\n }\r\n\r\n if (area.MEDICALAREA.toUpperCase() == 'MEDICATION') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayMedication')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'MEDICAL CONDITIONS') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayMedicalCondition')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'DENTAL EXAMS') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayDentalExam')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'CLINIC LOG/VISITS') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayClinicLog')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'HEARING SCREENINGS') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayHearingScreening')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'PHYSICAL EXAM') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayPhysicalExam')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'PHYSICIAN INFORMATION') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayPhysician')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'RESTRICTIONS') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayRestrictions')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'SPINAL SCREENING') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplaySpinalScreening')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'VISION SCREENING') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayVisionScreening')[0].Value = area.Select;\r\n }\r\n if (area.MEDICALAREA.toUpperCase() == 'PREGNANCY') {\r\n this.reportParameters.filter(x => x.ParameterName == 'blnDisplayPregnancy')[0].Value = area.Select;\r\n }\r\n\r\n area.Fileds.forEach(field => {\r\n if (area.Select) {\r\n this.validate(area, field);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n dateChange(date: Date, area: MedicalArea, field: AreaField, type: string) {\r\n if (type == 'FROM') {\r\n field.FROM = new Date(date).toLocaleDateString();\r\n } else if (type == 'TO') {\r\n field.TO = new Date(date).toLocaleDateString();\r\n }\r\n this.validate(area, field);\r\n }\r\n}\r\n","\r\n\r\n
{{selectedReport.Description}}
\r\n\r\n\r\n
\r\n 0\" animationDuration=\"0ms\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {{parameter.Name}}\r\n\r\n \r\n \r\n 0 ? parameter.MaxLength : 4000}}\" id=\"txt{{parameter.ParameterName}}_{{parameter.Id}}\"\r\n [disabled]=\"parameter.Disabled\" [required]=\"parameter.IsRequired\" />\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {{parameter.Name}}\r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n {{dataItem.TextField}}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 1\">\r\n Multiple Selected\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{disCol}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{row[disCol]}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \"Image\"\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
{{parameter.Hint}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n {{parameter.Name}}\r\n\r\n \r\n \r\n 0 ? parameter.MaxLength : 4000}}\" id=\"txt{{parameter.ParameterName}}_{{parameter.Id}}\"\r\n [disabled]=\"parameter.Disabled\" [required]=\"parameter.IsRequired\" />\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n {{parameter.Name}}\r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n {{dataItem.TextField}}\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n 1\">\r\n Multiple Selected\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n {{parameter.Name}}\r\n
\r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n {{disCol}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{row[disCol]}}\r\n \r\n \r\n\r\n 0\">\r\n
\r\n
\r\n {{row[disCol]}}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
{{parameter.Hint}}
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n\r\n","/* eslint-disable complexity */\r\nimport { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { StudentSearchComponent } from '../../../../shared-components/student-search/student-search.component';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { V9ReportParameter } from '../../models/v9-report-parameter.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { V9ParameterRows, V9ParameterRow } from '../../models/v9-parameter-row.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { GradebookStudent } from '../../../../classroom360/gradebook/v9/models/gradebook-student.model';\r\nimport { V9LetterReportParametersComponent } from './v9-letter-report-parameters/v9-letter-report-parameters.component';\r\nimport { GenericListItem, GenericList } from '../../../../shared-components/generic-list-selector/generic-list.model';\r\nimport { GenericListSelectorComponent } from '../../../../shared-components/generic-list-selector/generic-list-selector.component';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { DataQueryField } from '../../../../classroom360/data-query/models/data-query-field.model';\r\nimport { Year } from '../../../../shared-components/year/year.model';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { StaffSearchComponent } from '../../../../shared-components/staff-search/staff-search.component';\r\nimport { Staff } from '../../../../shared-components/staff-search/staff.model';\r\nimport { ExportResultDialogComponent } from '../../../../sped360/modals/export-result-dialog/export-result-dialog.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-v9-report-parameters',\r\n templateUrl: './v9-report-parameters.component.html',\r\n styles: []\r\n})\r\nexport class V9ReportParametersComponent implements OnInit, OnDestroy {\r\n\r\n selectedReport: ReportV9;\r\n reportForSaveRCM: ReportV9;\r\n refreshGrid: ReportV9;\r\n reportParameters: V9ReportParameter[] = [];\r\n chunkedParameters: V9ParameterRows;\r\n selectedSiteSectionId = 0;\r\n selectedStudentIds: GradebookStudent[] = [];\r\n errors: ErrorList[] = [];\r\n showLegend = false;\r\n selectAllGridRecords = true;\r\n gridDataMatDatasource = new TylerMatTableDataSource();\r\n gridDataSource: any[] = [];\r\n columnToDisplay: string[] = [];\r\n tabNames: string[] = [];\r\n blnIsParameterLink = false;\r\n dataColumns: DataQueryField[] = [];\r\n selectedStudentIdsArray: number[] = [];\r\n blnSaveReportCardMessage = false;\r\n blnReportCardsGrade = false;\r\n defaultYear: Year;\r\n schoolYearSettings: SchoolYearSettings;\r\n strParameterLinkName: string;\r\n showExportButton = false;\r\n exportCLick = false;\r\n exportOnly = false;\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n this.gridDataMatDatasource.sort = val;\r\n }\r\n @ViewChild(MatSort) sortValue: MatSort;\r\n studentNameFormat: string;\r\n studentMiddleNameFormat: string;\r\n ShowNickname: string;\r\n imageIconName: string;\r\n selectedStaff: Staff[] = [];\r\n\r\n lastIndex = 0;\r\n lastValue = 0;\r\n constructor(\r\n private reportingService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private studentListSelectorDialog: MatDialog,\r\n private sanitizer: DomSanitizer,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.defaultYear = this.yearService.defaultYear;\r\n if (this.data != undefined) {\r\n this.selectedReport = this.data.Report;\r\n this.selectedSiteSectionId = this.data.selectedSectionId == undefined ? 0 : this.data.selectedSectionId;\r\n this.selectedStudentIds = this.data.studentSelection;\r\n this.blnReportCardsGrade = this.data.blnReportCardsGrade == undefined ? false : this.data.blnReportCardsGrade;\r\n\r\n if (this.selectedReport.Description.indexOf('(Export Only)') > 0) {\r\n this.exportOnly = true;\r\n }\r\n }\r\n if (this.selectedSiteSectionId != 0) {\r\n this.getV9StudentNameFormat();\r\n }\r\n this.getV9ReportParameters();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n getV9ReportParameters() {\r\n this.reportingService.getV9ReportParameters(this.selectedReport.Id, this.selectedSiteSectionId, 0).subscribe(result => {\r\n this.reportParameters = result;\r\n if (this.reportParameters.find(x => x.ParameterName == 'Export')) {\r\n this.showExportButton = true;\r\n }\r\n this.reportParameters.forEach(obj => {\r\n if (obj.TabName != '' && obj.TabName != undefined) {\r\n if (!this.tabNames.includes(obj.TabName)) {\r\n this.tabNames.push(obj.TabName);\r\n }\r\n }\r\n });\r\n if (this.tabNames.length > 0) {\r\n if (this.tabNames.includes('Report Card Messages') || this.tabNames.includes('Messages')) {\r\n this.blnSaveReportCardMessage = true;\r\n this.reportForSaveRCM = this.selectedReport;\r\n }\r\n // if (this.tabNames.includes('Messages')) {\r\n // this.reportForSaveRCM = this.selectedReport;\r\n // }\r\n }\r\n this.setParameterRows();\r\n });\r\n }\r\n\r\n getV9StudentNameFormat() {\r\n this.reportingService.getV9ReportParameterStudentNameFormat(this.selectedSiteSectionId).subscribe(result => {\r\n const studentName = result.split(',');\r\n if (studentName.length > 0) {\r\n this.studentNameFormat = studentName[0];\r\n this.studentMiddleNameFormat = studentName[1];\r\n this.ShowNickname = studentName[2];\r\n }\r\n });\r\n }\r\n\r\n getParameterStyle(parameter: V9ReportParameter): object {\r\n let obj: object = null;\r\n if (parameter != null && parameter.ParameterStyle != '') {\r\n obj = JSON.parse('{' + parameter.ParameterStyle + '}');\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n runReportClick() {\r\n const reportType = this.reportParameters.filter(o => o.ColumnName == 'reportType' || o.ColumnName == 'PrintLetters' || o.ColumnName == 'CustomInfo' || o.ColumnName == 'ReportStyle')[0];\r\n if (reportType != undefined && (reportType.Value == 'Letters' || reportType.Value == 'Export' || reportType.Value == true)) {\r\n alert('Not yet implemented!');\r\n }\r\n else {\r\n this.errors = [];\r\n const reportFullSheets = this.reportParameters.filter(o => o.ParameterName == 'strFullSheet')[0];\r\n if (reportFullSheets != undefined) {\r\n if (reportFullSheets.Value == 'GridPage') {\r\n this.selectedReport.WorkflowReport = false;\r\n }\r\n }\r\n const journalReportType = this.reportParameters.filter(o => o.ParameterName == 'strReportType')[0];\r\n if (journalReportType != undefined) {\r\n if (journalReportType.Value == 'Journal') {\r\n const emailOptions = this.reportParameters.filter(o => o.ParameterName == 'strEmailOptions')[0];\r\n if (emailOptions != undefined && emailOptions.Value == 'SendEmailAndLetter') {\r\n this.selectedReport.WorkflowReport = false;\r\n }\r\n }\r\n if (journalReportType.Value == 'P') {\r\n this.selectedReport.WorkflowReport = false;\r\n }\r\n }\r\n\r\n this.reportParameters.filter(o => o.ControlType == 'cbl').forEach(obj => {\r\n obj.Value = '';\r\n if (obj.DataSource != null) {\r\n obj.DataSource.filter(o => o.IsSelected == true).forEach(dsObj => {\r\n obj.Value += dsObj.ValueField + ',';\r\n });\r\n }\r\n });\r\n\r\n this.reportParameters.filter(o => o.ControlType == 'ddcbl').forEach(obj => {\r\n let objValue = '';\r\n if (obj.Value != '' && Array.isArray(obj.Value)) {\r\n obj.Value.forEach(element => {\r\n objValue += element + ',';\r\n });\r\n\r\n if (objValue != '') {\r\n obj.Value = '';\r\n obj.Value = objValue;\r\n }\r\n }\r\n else {\r\n obj.Value = '';\r\n }\r\n });\r\n\r\n this.reportParameters.filter(o => o.ControlType == 'grid').forEach(obj => {\r\n obj.Value = '';\r\n this.gridDataSource.filter(o => o.Selected == true).forEach(dsObj => {\r\n obj.Value += dsObj.Id + ',';\r\n });\r\n });\r\n\r\n this.reportParameters.filter(o => o.ControlType == 'editablegrid').forEach(obj => {\r\n obj.Value = '';\r\n const tempObj: any[] = JSON.parse(JSON.stringify(obj.GridDataSources.data));\r\n tempObj.forEach(dsObj => {\r\n obj.ColumnControlSpec.forEach(spec => {\r\n if (spec.includeInOutput == 'true') {\r\n if (dsObj[spec.columnName] != undefined) {\r\n obj.Value += dsObj[spec.columnName] + '|';\r\n }\r\n }\r\n });\r\n obj.Value += ',';\r\n });\r\n });\r\n this.reportParameters.filter(o => o.ControlType == 'stp').forEach(obj => {\r\n obj.Value = obj.selectedStaffNumbers;\r\n });\r\n\r\n this.validateRequiredFields();\r\n\r\n if (this.errors.length == 0) {\r\n let studentIds = '';\r\n const studentSelection = this.reportParameters.filter(o => o.ControlType == 'ssrbl')[0];\r\n if (studentSelection != null && studentSelection.Value != null && (studentSelection.Value.toString() == 'Custom' || studentSelection.Value.toString() == '5')) {\r\n if (this.selectedStudentIds != undefined && this.selectedStudentIds.length > 0) {\r\n const students = new GenericList();\r\n this.selectedStudentIds.forEach(obj => {\r\n const student = new GenericListItem();\r\n students.DialogTitle = 'Select Student(s)';\r\n students.ColumnHeader = 'Student';\r\n student.Id = this.blnReportCardsGrade == false ? obj.Id.toString() : obj.StudentId.toString();\r\n student.TextField = this.studentName(obj) + ' (' + obj.StudentNumber + ')';\r\n\r\n student.ValueField = this.blnReportCardsGrade == false ? obj.Id.toString() : obj.StudentId.toString();\r\n student.IsSelected = true;\r\n if (this.selectedStudentIdsArray.length > 0) {\r\n const studentSelect = this.selectedStudentIdsArray.find(s => s.toString() == obj.StudentId.toString());\r\n if (studentSelect == null || studentSelect == undefined) {\r\n student.IsSelected = false;\r\n }\r\n }\r\n students.Items.push(student);\r\n });\r\n const studentListSelectorDialogRef = this.studentListSelectorDialog.open(\r\n GenericListSelectorComponent,\r\n {\r\n data: students,\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n minWidth: '50vw',\r\n maxWidth: '100vw',\r\n minHeight: '75vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n studentListSelectorDialogRef.afterClosed().subscribe(resultValue => {\r\n if (resultValue != undefined) {\r\n const studentId: number[] = resultValue;\r\n this.selectedStudentIdsArray = [];\r\n for (let x = 0; x < studentIds.length; x++) {\r\n this.selectedStudentIdsArray.push(studentId[x]);\r\n }\r\n resultValue.forEach(obj => {\r\n studentIds = studentIds + obj + ',';\r\n });\r\n this.printReportWithValidation(studentIds);\r\n }\r\n else {\r\n this.errors.push({\r\n fieldName: 'Student Selection',\r\n fieldRef: null,\r\n errorMsg: 'Select at least one student'\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n if (this.selectedReport.ReportName == 'CreateProfileReport') {\r\n this.selectedReport.ReportParameters = this.reportParameters;\r\n this.reportingService.getV9ReportParameterValidation(this.selectedReport).subscribe(resultError => {\r\n if (resultError != '') {\r\n const errormessage = resultError.split('|');\r\n errormessage.forEach(obj => {\r\n if (obj != '') {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: obj\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this.selectedReport.ReportParameters = [];\r\n const studentSearchDialogRef = this.dialog.open(\r\n StudentSearchComponent,\r\n {\r\n data: {\r\n searchAndSelect: true,\r\n returnSelectedStudents: true\r\n },\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n\r\n studentSearchDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined && result.length > 0) {\r\n result.forEach(obj => {\r\n studentIds = studentIds + obj.Id + ',';\r\n });\r\n this.printReportWithValidation(studentIds);\r\n }\r\n else {\r\n this.errors.push({\r\n fieldName: 'Student Selection',\r\n fieldRef: null,\r\n errorMsg: 'Select at least one student'\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n else {\r\n const studentSearchDialogRef = this.dialog.open(\r\n StudentSearchComponent,\r\n {\r\n data: {\r\n searchAndSelect: true,\r\n returnSelectedStudents: true\r\n },\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n\r\n studentSearchDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined && result.length > 0) {\r\n result.forEach(obj => {\r\n studentIds = studentIds + obj.Id + ',';\r\n });\r\n this.printReportWithValidation(studentIds);\r\n }\r\n else {\r\n this.errors.push({\r\n fieldName: 'Student Selection',\r\n fieldRef: null,\r\n errorMsg: 'Select at least one student'\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n if (this.selectedReport.ReportName == 'CreateProfileReport') {\r\n this.selectedReport.ReportParameters = this.reportParameters;\r\n this.reportingService.getV9ReportParameterValidation(this.selectedReport).subscribe(resultError => {\r\n if (resultError != '') {\r\n const errormessage = resultError.split('|');\r\n errormessage.forEach(obj => {\r\n if (obj != '') {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: obj\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this.printReportWithValidation(studentIds);\r\n }\r\n });\r\n\r\n }\r\n else {\r\n this.printReportWithValidation(studentIds);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n selectAllGridRecordsChange(parameter: any) {\r\n if (parameter.GridDataSources != undefined && parameter.GridDataSources.filteredData != undefined) {\r\n parameter.GridDataSources.filteredData.forEach(row => {\r\n row['Selected'] = this.selectAllGridRecords;\r\n });\r\n } else {\r\n this.gridDataSource.forEach(row => {\r\n row['Selected'] = this.selectAllGridRecords;\r\n });\r\n }\r\n\r\n }\r\n\r\n printReport(studentIds: string) {\r\n if (this.exportCLick == true) {\r\n const exportParam = this.reportParameters.find(x => x.ParameterName == 'Export');\r\n if (exportParam) {\r\n exportParam.Value = 'true';\r\n if(this.selectedReport.ReportName == 'CreateWASchoolEnrollment360'){\r\n const schoolEnrollmentSelectionParam = this.reportParameters.find(x => x.ParameterName == 'intSchoolEnrollmentSelection');\r\n if(schoolEnrollmentSelectionParam) {\r\n schoolEnrollmentSelectionParam.Value = '3'; // Set it to Export\r\n this.exportCLick = false; // GO with Report Call, Export logic is integretated for this report\r\n this.reportParameters = this.reportParameters.filter(x=>x.ParameterName != 'Export');\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.selectedStudentIds != undefined && this.selectedStudentIds.length > 0 && studentIds == '') {\r\n this.selectedStudentIds.forEach(obj => {\r\n studentIds = studentIds + obj.StudentId + ',';\r\n });\r\n }\r\n this.selectedReport.StudentIds = studentIds;\r\n this.reportParameters.filter(x => x.ControlType == 'img').forEach(obj => {\r\n obj.Value = '';\r\n });\r\n\r\n this.reportParameters.filter(x => x.ControlType == 'grid' || x.ControlType == 'editablegrid').forEach(obj => {\r\n obj.GridDataSources = null;\r\n obj.ColumnToDisplay = [];\r\n });\r\n\r\n this.selectedReport.ReportParameters = this.reportParameters;\r\n if (this.selectedReport.WorkflowReport == true && studentIds.length > 0) {\r\n if (studentIds.split(',').length <= this.selectedReport.MinimumStudentsForWorkflow) {\r\n this.selectedReport.WorkflowReport = false;\r\n }\r\n }\r\n\r\n if (this.selectedReport.WorkflowReport == false) {\r\n const studentAttachment: ReportV9 = {\r\n Id: this.selectedReport.Id,\r\n ParentId: this.selectedReport.ParentId,\r\n Description: this.selectedReport.Description,\r\n ReportName: this.selectedReport.ReportName,\r\n ReportTitle: this.selectedReport.ReportTitle,\r\n ReportType: this.selectedReport.ReportType,\r\n Active: this.selectedReport.Active,\r\n WorkflowReport: this.selectedReport.WorkflowReport,\r\n MinimumStudentsForWorkflow: this.selectedReport.MinimumStudentsForWorkflow,\r\n ReportParameterClassName: this.selectedReport.ReportParameterClassName,\r\n StudentIds: this.selectedReport.StudentIds,\r\n ReportsList: this.selectedReport.ReportsList,\r\n ReportParameters: this.selectedReport.ReportParameters,\r\n ReportValue: this.selectedReport.ReportValue,\r\n SchoolId: this.yearService.defaultYear.SchoolID,\r\n YearId: this.yearService.defaultYear.Id,\r\n SiteSectionId: this.selectedSiteSectionId,\r\n IsSelected: false,\r\n checkRowIndeterminate: false\r\n };\r\n window.localStorage.setItem('v9ReportParameter', JSON.stringify(studentAttachment));\r\n window.localStorage.removeItem('v9ReportParameter_exportTXT');\r\n const exportTXT = this.selectedReport.ReportParameters.filter(o => o.ColumnName == 'Export' || o.ColumnName == 'tmp_Export');\r\n if (this.exportCLick == true || (exportTXT.length > 0 && (exportTXT[0].Value == true || exportTXT[0].Value == 'true'))) {\r\n const exportParam = this.selectedReport.ReportParameters.find(x => x.ParameterName == 'Export');\r\n if (exportParam) {\r\n exportParam.Value = 'true';\r\n }\r\n window.localStorage.setItem('v9ReportParameter_exportTXT', this.getFileName(this.selectedReport.Description));\r\n }\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n else {\r\n this.reportingService.runV9ReportByParameter(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id, this.selectedSiteSectionId, 0, this.selectedReport).subscribe(result => {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n });\r\n }\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n getFileName(reportTitle: string) {\r\n const title: string = reportTitle.replace(/\\s/g,'').length > 20 ? reportTitle.replace(/\\s/g,'').substring(0, 20) : reportTitle.replace(/\\s/g,'');\r\n return title + '_' + (new Date().getMonth() + 1).toString() + new Date().getDate().toString() + new Date().getFullYear().toString() + new Date().getSeconds().toString() + new Date().getMilliseconds().toString();\r\n }\r\n\r\n parameterChanged(parameter: V9ReportParameter) {\r\n if (parameter.ControlType == 'chk') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id).forEach(obj => {\r\n obj.Disabled = false;\r\n if (obj.ParentValue != null && parameter.Value != null) {\r\n if (obj.ParentValue.toUpperCase() != parameter.Value.toString().toUpperCase()) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == obj.Id).forEach(element => {\r\n element.Disabled = false;\r\n if (obj.Value != null && element.Value != null) {\r\n if (element.ParentValue.toUpperCase() != obj.Value.toString().toUpperCase()) {\r\n element.Disabled = true;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n if (parameter.ControlType == 'rbl' || parameter.ControlType == 'ssrbl') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id).forEach(obj => {\r\n obj.Disabled = false;\r\n const parentValue = obj.ParentValue.split(',');\r\n if (parentValue.length > 1) {\r\n if (parentValue.indexOf(parameter.Value) > -1) {\r\n obj.Disabled = false;\r\n }\r\n else {\r\n obj.Disabled = true;\r\n }\r\n }\r\n else {\r\n if (obj.ParentValue != null && parameter.Value != null) {\r\n if (obj.ParentValue != parameter.Value) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == obj.Id).forEach(element => {\r\n element.Disabled = obj.Disabled;\r\n });\r\n }\r\n });\r\n }\r\n if (parameter.ControlType == 'ddl') {\r\n this.reportParameters.filter(o => o.ParentId == parameter.Id).forEach(obj => {\r\n obj.Disabled = false;\r\n if (obj.ParentValue != null && parameter.Value != null) {\r\n if (obj.ParentValue.toUpperCase() != parameter.Value.toString().toUpperCase()) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n this.reportParameters.filter(x => x.ParentId == obj.Id).forEach(element => {\r\n element.Disabled = false;\r\n if (obj.Value != null && element.Value != null) {\r\n if (element.ParentValue.toUpperCase() != obj.Value.toString().toUpperCase()) {\r\n element.Disabled = true;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n setParameterRows() {\r\n this.chunkedParameters = new V9ParameterRows();\r\n const reportParameter = this.reportParameters[this.reportParameters.length - 1];\r\n if (reportParameter != null) {\r\n for (let rowIndex = 0; rowIndex < reportParameter.RowNumberInTable; rowIndex++) {\r\n const parameterRow = new V9ParameterRow();\r\n let includeLineAtStartOfGroup = true;\r\n let includeLineAtEndOfGroup = true;\r\n this.reportParameters.filter(o => o.RowNumberInTable == rowIndex + 1 && o.IsLetterParameter == false).forEach(obj => {\r\n if (obj.DataType == 'BIT' && obj.ControlType != 'rbl') {\r\n if (typeof (obj.Value) != 'boolean') {\r\n obj.Value = obj.Value != null && obj.Value.toUpperCase() == 'TRUE' ? true : false;\r\n }\r\n }\r\n if (obj.IncludeLineAtStartOfGroup != includeLineAtStartOfGroup) {\r\n includeLineAtStartOfGroup = false;\r\n }\r\n if (obj.IncludeLineAtEndOfGroup != includeLineAtEndOfGroup) {\r\n includeLineAtEndOfGroup = false;\r\n }\r\n if (obj.ParentId != null && obj.ParentId > 0) {\r\n const parentReportParameter = this.reportParameters.filter(o => o.Id == obj.ParentId)[0];\r\n if (parentReportParameter.ControlType == 'rbl' || parentReportParameter.ControlType == 'ssrbl') {\r\n const parentValue = obj.ParentValue.split(',');\r\n if (parentValue.length > 1) {\r\n if (parentValue.indexOf(parentReportParameter.Value) > -1) {\r\n obj.Disabled = false;\r\n }\r\n else {\r\n obj.Disabled = true;\r\n }\r\n obj.Disabled = obj.Disabled == false && parentReportParameter.Disabled == true ? true : obj.Disabled;\r\n }\r\n else {\r\n obj.Disabled = parentReportParameter.Disabled == true ? true : obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase();\r\n }\r\n }\r\n else {\r\n if (parentReportParameter != null && parentReportParameter.Value != null) {\r\n if (parentReportParameter.Disabled == true) {\r\n obj.Disabled = true;\r\n }\r\n else {\r\n if (obj.ParentValue.toUpperCase() != '') {\r\n if (obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase()) {\r\n obj.Disabled = true;\r\n }\r\n }\r\n }\r\n // obj.Disabled = parentReportParameter.Disabled == true ? true : obj.ParentValue.toUpperCase() != parentReportParameter.Value.toString().toUpperCase();\r\n }\r\n }\r\n if (obj.DataSource == null) {\r\n if (obj.LookupProcedureName != '') {\r\n let parentValue = '';\r\n if (parentReportParameter.DataSource != null && parentReportParameter.DataSource.length > 0) {\r\n parentValue = parentReportParameter.Value == '' ? parentReportParameter.DataSource[0].ValueField : parentReportParameter.Value;\r\n }\r\n else {\r\n parentValue = parentReportParameter.Value;\r\n }\r\n this.reportingService.getV9ReportParameterSelectionByLookupName(obj.Id, this.selectedSiteSectionId, parentValue, obj.LookupProcedureName, 0, obj.ControlType).subscribe(result => {\r\n if (obj.ControlType == 'grid' || obj.ControlType == 'editablegrid') {\r\n obj.GridDataSource = result.GridDataSource;\r\n obj.ColumnToDisplay = [];\r\n if (obj.Disabled == false) {\r\n obj.ColumnToDisplay = ['Selected'];\r\n }\r\n if (obj.GridDataSource != null && obj.GridDataSource != '') {\r\n this.gridDataSource = JSON.parse(obj.GridDataSource);\r\n if (obj.ControlType == 'editablegrid') {\r\n obj.ColumnControlSpec = this.gridDataSource[0];\r\n this.gridDataSource = this.gridDataSource.splice(0, 1);\r\n }\r\n obj.GridDataSources = new TylerMatTableDataSource(this.gridDataSource);\r\n obj.GridDataSources.sort = this.sort;\r\n if (this.gridDataSource.length > 0) {\r\n obj.ColumnToDisplay = obj.ColumnToDisplay.concat(Object.keys(this.gridDataSource[0]));\r\n\r\n if (obj.ColumnToDisplay.includes('Id')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('Id'), 1);\r\n }\r\n if (obj.ColumnToDisplay.includes('RANKING')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('RANKING'), 1);\r\n }\r\n }\r\n }\r\n }\r\n else if (obj.ControlType == 'rtxt') {\r\n obj.Value = result.Value;\r\n }\r\n else {\r\n if (result.DataSource != null) {\r\n obj.DataSource = result.DataSource;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n if (obj.ControlType == 'cbl') {\r\n if (obj.DataSource != null) {\r\n if (obj.DataSource.length > 0) {\r\n const variable = obj.Value.split(',');\r\n variable.forEach(ele => {\r\n obj.DataSource.forEach(element => {\r\n if (element.ValueField == ele) {\r\n element.IsSelected = true;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n if (obj.ControlType == 'ddcbl') {\r\n const objValue: string[] = [];\r\n if (obj.DataSource != null && obj.DataSource.filter(x => x.TextField.trim() == 'ALL').length > 0) {\r\n obj.DataSource.forEach(obj1 => {\r\n objValue.push(obj1.ValueField);\r\n });\r\n }\r\n else {\r\n if (obj.Value != '' && obj.Value != null) {\r\n const variable = obj.Value.split(',');\r\n variable.forEach(element => {\r\n if (element != '') {\r\n objValue.push(element);\r\n }\r\n });\r\n }\r\n }\r\n if (objValue.length > 0) {\r\n obj.Value = objValue;\r\n }\r\n }\r\n if (obj.ControlType == 'grid' || obj.ControlType == 'editablegrid') {\r\n if (obj.GridDataSource != null) {\r\n obj.ColumnToDisplay = [];\r\n if ((obj.ControlType == 'grid' && obj.Disabled == false)) {\r\n obj.ColumnToDisplay = ['Selected'];\r\n }\r\n if (obj.GridDataSource != null && obj.GridDataSource != '') {\r\n this.gridDataSource = JSON.parse(obj.GridDataSource);\r\n if (obj.ControlType == 'editablegrid') {\r\n obj.ColumnControlSpec = this.gridDataSource[0].controlConfig;\r\n this.gridDataSource = this.gridDataSource.splice(1, this.gridDataSource.length - 1);\r\n\r\n }\r\n obj.GridDataSources = new TylerMatTableDataSource(this.gridDataSource);\r\n if (this.gridDataSource.length > 0) {\r\n obj.ColumnToDisplay = obj.ColumnToDisplay.concat(Object.keys(this.gridDataSource[0]));\r\n if (obj.ColumnToDisplay.includes('Id')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('Id'), 1);\r\n }\r\n if (obj.ColumnToDisplay.includes('RANKING')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('RANKING'), 1);\r\n }\r\n }\r\n obj.GridDataSources.sort = this.sort;\r\n }\r\n }\r\n }\r\n if (obj.ControlType == 'lnk') {\r\n this.blnIsParameterLink = true;\r\n this.strParameterLinkName = obj.Name;\r\n obj.IsVisible = false;\r\n }\r\n if (obj.ControlType == 'img') {\r\n if (obj.Value != '' && obj.Value != null) {\r\n if (obj.Value['changingThisBreaksApplicationSecurity'] == undefined && obj.Value['changingThisBreaksApplicationSecurity'] == null) {\r\n obj.Value = this.sanitizer.bypassSecurityTrustResourceUrl('data:image/png;base64, ' + obj.Value);\r\n }\r\n }\r\n }\r\n if (obj.ControlType == 'ddl') {\r\n if (obj.Value != '') {\r\n if (obj.DataSource != null || obj.DataSource != undefined) {\r\n const objDataSourceValue = obj.DataSource.filter(x => x.ValueField == obj.Value);\r\n if (objDataSourceValue.length == 0) {\r\n if (obj.DataSource != null && obj.DataSource.length > 0) {\r\n obj.Value = obj.DataSource[0].ValueField;\r\n }\r\n }\r\n }\r\n const childReportParameters = this.reportParameters.filter(o => o.ParentId == obj.Id);\r\n if (childReportParameters != undefined && childReportParameters.length > 0) {\r\n this.parameterSelectionChange(obj);\r\n }\r\n }\r\n }\r\n if (obj.ControlType == 'btn') {\r\n switch (obj.Value) {\r\n case 'RefreshGrid':\r\n this.imageIconName = 'refresh.png';\r\n break;\r\n case 'AttendanceDay':\r\n this.imageIconName = 'refresh.png';\r\n break;\r\n case 'StaffSearch':\r\n this.imageIconName = 'search normal.png';\r\n obj.Name = '';\r\n break;\r\n case 'StaffSearchSelect':\r\n this.imageIconName = 'search normal.png';\r\n obj.Name = '';\r\n break;\r\n }\r\n }\r\n if (obj.ControlType == 'stp') {\r\n this.imageIconName = 'search normal.png';\r\n obj.staffpickerControlType = obj.Value;\r\n }\r\n this.selectAllGridRecordsChange(obj); // ONE-10517\r\n parameterRow.Parameters.push(obj);\r\n });\r\n parameterRow.IncludeLineAtStartOfGroup = includeLineAtStartOfGroup;\r\n parameterRow.IncludeLineAtEndOfGroup = includeLineAtEndOfGroup;\r\n this.chunkedParameters.Rows.push(parameterRow);\r\n }\r\n }\r\n }\r\n\r\n validateRequiredFields() {\r\n this.reportParameters.filter(o => o.IsVisible == true && o.Disabled == false && o.IsRequired == true && o.IsLetterParameter == false).forEach(obj => {\r\n if (obj.Value == null || obj.Value.toString() == '') {\r\n let fieldName: string;\r\n if (obj.Name != null && obj.Name != '') {\r\n fieldName = obj.Name;\r\n }\r\n else if (obj.ParentId != null && obj.ParentId > 0) {\r\n const parentObject = this.reportParameters.filter(o => o.Id == obj.ParentId)[0];\r\n if (parentObject != null && parentObject.Name != null && parentObject.Name != '') {\r\n fieldName = parentObject.Name;\r\n }\r\n }\r\n fieldName = fieldName.replace(':', '');\r\n\r\n this.errors.push({\r\n fieldName: fieldName,\r\n fieldRef: null,\r\n errorMsg: 'Field is required'\r\n });\r\n }\r\n });\r\n }\r\n\r\n parameterSelectionChange(parameter: V9ReportParameter) {\r\n const reportParentParameter = this.reportParameters.filter(o => o.ParentId == parameter.Id);\r\n reportParentParameter.forEach(obj => {\r\n this.reportingService.getV9ReportParameterSelectionByLookupName(obj.Id, this.selectedSiteSectionId, parameter.Value, obj.LookupProcedureName, 0, obj.ControlType).subscribe(result => {\r\n if (obj.ControlType == 'grid') {\r\n obj.GridDataSource = result.GridDataSource;\r\n obj.ColumnToDisplay = [];\r\n if (obj.Disabled == false) {\r\n obj.ColumnToDisplay = ['Selected'];\r\n }\r\n if (obj.GridDataSource != null && obj.GridDataSource != '') {\r\n this.gridDataSource = JSON.parse(obj.GridDataSource);\r\n obj.GridDataSources = new TylerMatTableDataSource(this.gridDataSource);\r\n obj.GridDataSources.sort = this.sort;\r\n if (this.gridDataSource.length > 0) {\r\n obj.ColumnToDisplay = obj.ColumnToDisplay.concat(Object.keys(this.gridDataSource[0]));\r\n if (obj.ColumnToDisplay.includes('Id')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('Id'), 1);\r\n }\r\n if (obj.ColumnToDisplay.includes('RANKING')) {\r\n obj.ColumnToDisplay.splice(obj.ColumnToDisplay.indexOf('RANKING'), 1);\r\n }\r\n }\r\n }\r\n }\r\n else if (obj.ControlType == 'rtxt') {\r\n obj.Value = result.Value;\r\n }\r\n else if (obj.ControlType == 'rbl') {\r\n\r\n }\r\n else if (obj.ControlType == 'ddl') {\r\n\r\n }\r\n else {\r\n obj.DataSource = result.DataSource;\r\n }\r\n });\r\n });\r\n }\r\n\r\n parameterLinkClick(parameterName: string) {\r\n if (parameterName == 'Print and Delivery Options') {\r\n const letterReportParameters = this.reportParameters.filter(x => x.IsLetterParameter == true);\r\n if (letterReportParameters.length > 0) {\r\n const letterPrintOptionDialogRef = this.dialog.open(V9LetterReportParametersComponent, {\r\n data: {\r\n reportParameters: this.reportParameters,\r\n selectedReport: this.selectedReport\r\n },\r\n disableClose: true,\r\n minWidth: '50vw',\r\n maxWidth: '100vw',\r\n minHeight: '50vh',\r\n maxHeight: '100vh'\r\n });\r\n letterPrintOptionDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined && result.length > 0) {\r\n this.reportParameters = result;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n private _compare(a: number | string, b: number | string, isAsc: boolean) {\r\n return (a < b ? -1 : 1) * (isAsc ? 1 : -1);\r\n }\r\n\r\n sortData(sort: Sort, gridDataSource: TylerMatTableDataSource) {\r\n // Sort sorts the current list, but it wasnt updating it unless i reassigned.\r\n gridDataSource.data = gridDataSource.data.sort((a, b) => {\r\n const isAsc = sort.direction === 'asc';\r\n return this._compare(a[sort.active], b[sort.active], isAsc);\r\n });\r\n }\r\n\r\n printReportWithValidation(studentIds: string) {\r\n if (this.selectedReport.ReportName == 'MissingGrades') {\r\n this.selectedReport.ReportParameters = this.reportParameters;\r\n\r\n this.reportingService.getV9ReportParameterValidation(this.selectedReport).subscribe(resultError => {\r\n if (resultError != '') {\r\n const reportParameter = this.reportParameters[this.reportParameters.length - 1];\r\n if (reportParameter != null) {\r\n for (let rowIndex = 0; rowIndex < reportParameter.RowNumberInTable; rowIndex++) {\r\n this.reportParameters.filter(o => o.RowNumberInTable == rowIndex + 1 && o.IsLetterParameter == false).forEach(obj => {\r\n if (obj.ControlType == 'ddcbl') {\r\n const objValue: string[] = [];\r\n if (obj.DataSource != null && obj.DataSource.filter(x => x.TextField.trim() == 'ALL').length > 0) {\r\n obj.DataSource.forEach(obj1 => {\r\n objValue.push(obj1.ValueField);\r\n });\r\n }\r\n else {\r\n if (obj.Value != '' && obj.Value != null) {\r\n const variable = obj.Value.split(',');\r\n variable.forEach(element => {\r\n if (element != '') {\r\n objValue.push(element);\r\n }\r\n });\r\n }\r\n }\r\n if (objValue.length > 0) {\r\n obj.Value = objValue;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n const errormessage = resultError.split('|');\r\n errormessage.forEach(obj => {\r\n if (obj != '') {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: obj\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this.selectedReport.ReportParameters = [];\r\n this.printReport(studentIds);\r\n }\r\n });\r\n }\r\n else if (this.selectedReport.ReportName == 'CreateStaffPermissionsComparisonReport') {\r\n this.selectedReport.ReportParameters = this.reportParameters;\r\n this.reportingService.getV9ReportParameterValidation(this.selectedReport).subscribe(result => {\r\n if (result != '') {\r\n const errormessage = result.split('|');\r\n errormessage.forEach(obj => {\r\n if (obj != '') {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: obj\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n this.printReport(studentIds);\r\n }\r\n });\r\n }\r\n else if (this.selectedReport.ReportName == 'CreateStaffPermissionsReport') {\r\n if (this.reportParameters.filter(x => x.ParameterName == 'strEmployeeIds' && x.Value == '').length > 0) {\r\n this.errors.push({\r\n fieldName: 'Select Staff',\r\n fieldRef: null,\r\n errorMsg: 'At least one staff must be selected'\r\n });\r\n }\r\n else {\r\n this.printReport(studentIds);\r\n }\r\n }\r\n else if (this.selectedReport.ReportName.startsWith('SPED_')) {\r\n const dateBeginDate = this.reportParameters.find(x => x.ParameterName == 'datBeginDate');\r\n const dateEndDate = this.reportParameters.find(x => x.ParameterName.toLowerCase() == 'datenddate');\r\n if (dateBeginDate && dateEndDate && new Date(dateBeginDate.Value).toString().length > 0 && new Date(dateEndDate.Value).toString().length > 0) {\r\n if (new Date(dateBeginDate.Value) > new Date(dateEndDate.Value)) {\r\n this.errors.push({\r\n fieldName: 'To Date',\r\n fieldRef: null,\r\n errorMsg: 'To date should be greater than From Date.'\r\n });\r\n } else {\r\n this.printReport(studentIds);\r\n }\r\n }\r\n else {\r\n this.printReport(studentIds);\r\n }\r\n }\r\n else {\r\n this.printReport(studentIds);\r\n }\r\n }\r\n\r\n saveRCMessages() {\r\n this.reportForSaveRCM.ReportParameters = this.reportParameters.filter(x => x.ParameterName != '' && (x.TabName == 'Report Card Messages' || x.TabName == 'Messages'));\r\n this.reportingService.saveReportCardMessage(this.reportForSaveRCM).subscribe(result => {\r\n\r\n });\r\n }\r\n\r\n studentName(CL: GradebookStudent) {\r\n // Formats student name based on general preferences\r\n\r\n let middle: string;\r\n let name: string;\r\n let nickName: string;\r\n\r\n // Check gen pref and add middle name if selected\r\n switch (this.studentMiddleNameFormat) {\r\n case 'SEN': // Show Entire Name\r\n if (CL.MiddleName) {\r\n middle = ' ' + CL.MiddleName + ' ';\r\n } else {\r\n middle = ' ';\r\n }\r\n break;\r\n case 'SFL': // Show First Letter\r\n if (this.checkChar(CL.MiddleName)) {\r\n middle = ' ' + CL.MiddleName.charAt(0) + ' ';\r\n } else {\r\n middle = ' ';\r\n }\r\n break;\r\n default: // Do not show\r\n middle = ' ';\r\n break;\r\n }\r\n\r\n // Check gen pref and add nickname if selected\r\n if (this.ShowNickname == '1' && CL.NickName != undefined && CL.NickName != '') {\r\n nickName = '\"' + CL.NickName + '\"';\r\n } else {\r\n nickName = '';\r\n }\r\n\r\n // Check gen pref and format first/last name\r\n switch (this.studentNameFormat) {\r\n case 'FNF': // First Name First\r\n name = CL.FirstName + nickName + middle + CL.LastName;\r\n break;\r\n case 'LNF': // Last Name First\r\n name = CL.LastName + ', ' + CL.FirstName + ' ' + nickName + middle;\r\n break;\r\n case 'FILN': // First Initial Last Name\r\n if (this.checkChar(CL.FirstName)) {\r\n name = CL.FirstName.charAt(0) + nickName + middle + CL.LastName;\r\n } else {\r\n name = nickName + middle + CL.LastName;\r\n }\r\n break;\r\n case 'FNLI': // First Name Last Initial\r\n if (this.checkChar(CL.LastName)) {\r\n name = CL.FirstName + nickName + middle + CL.LastName.charAt(0);\r\n } else {\r\n name = CL.FirstName + nickName + middle;\r\n }\r\n break;\r\n default:\r\n return 'Invalid Format';\r\n }\r\n return name;\r\n }\r\n\r\n checkChar(str: string): boolean {\r\n return str != '' && str != null;\r\n }\r\n\r\n parameterDropdownlistSelectChange(parameter: V9ReportParameter, parameterValue: string) {\r\n let objValue: string[] = [];\r\n if (parameter.Value == '0') {\r\n parameter.DataSource.forEach(obj => {\r\n objValue.push(obj.ValueField);\r\n });\r\n }\r\n else {\r\n if (parameter.Value.length > 0) {\r\n const isParameterValue = parameter.Value.indexOf('0') > -1 && parameterValue == '0';\r\n const isUncheckAll = !parameter.Value.includes('0') && parameterValue == '0';\r\n if (parameter.DataSource.length != parameter.Value.length) {\r\n if (parameter.Value.includes('0')) {\r\n if (isParameterValue) {\r\n parameter.DataSource.forEach(obj => {\r\n objValue.push(obj.ValueField);\r\n });\r\n } else {\r\n parameter.Value.forEach(obj => {\r\n if (obj != '0') {\r\n objValue.push(obj);\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n parameter.Value.forEach(obj => {\r\n if (isParameterValue) {\r\n objValue.push(obj);\r\n }\r\n else {\r\n if (obj != '0') {\r\n objValue.push(obj);\r\n }\r\n }\r\n });\r\n if (isUncheckAll) {\r\n objValue = [];\r\n }\r\n }\r\n }\r\n else {\r\n parameter.Value.forEach(obj => {\r\n objValue.push(obj);\r\n });\r\n }\r\n }\r\n }\r\n parameter.Value = objValue;\r\n }\r\n searchClick(parameter: V9ReportParameter) {\r\n if (this.selectedReport.ReportName == 'CreateStaffPermissionsComparisonReport' && parameter.ControlType == 'stp') {\r\n parameter.Value = parameter.staffpickerControlType;\r\n }\r\n if (parameter.Value == 'StaffSearch' || parameter.Value == 'StaffSearchSelect' || parameter.Value == 'SelectStaffButton') {\r\n const schoolIds: number[] = [];\r\n this.yearService.schools.forEach(p => {\r\n if (!schoolIds.includes(p.Id)) {\r\n schoolIds.push(p.Id);\r\n }\r\n });\r\n const staffSearchDialog = this.dialog.open(StaffSearchComponent, {\r\n height: '100vh',\r\n width: '100vw',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n disableClose: true,\r\n data: {\r\n schoolIds: schoolIds,\r\n selectedStaff: this.selectedStaff,\r\n searchAndSelect: (parameter.Value == 'StaffSearchSelect' || parameter.Value == 'SelectStaffButton' ? true : false)\r\n }\r\n });\r\n staffSearchDialog.afterClosed().subscribe((staffs: Staff) => {\r\n if (staffs) {\r\n this.selectedStaff = [];\r\n this.chunkedParameters.Rows.forEach(parameterRow => {\r\n const index = parameterRow.Parameters.findIndex(o => o.ParameterName == parameter.ParameterName);\r\n if (index > -1) {\r\n if (Array.isArray(staffs)) {\r\n this.selectedStaff = staffs;\r\n let staffNumbers = '';\r\n let staffNames = '';\r\n staffs.forEach(obj => {\r\n staffNumbers = staffNumbers + obj.EmployeeNumber.trim() + ',';\r\n staffNames = staffNames + obj.LastName + ', ' + obj.FirstName + ',';\r\n });\r\n if (parameterRow.Parameters[index].ControlType == 'stp') {\r\n parameterRow.Parameters[index].selectedStaffNames = staffNames;\r\n parameterRow.Parameters[index].selectedStaffNumbers = staffNumbers;\r\n } else {\r\n if (parameterRow.Parameters[index - 1] != undefined) {\r\n parameterRow.Parameters[index - 1].Value = staffNumbers;\r\n }\r\n if (parameterRow.Parameters[index + 1] != undefined && parameterRow.Parameters[index].ControlType == 'btnNoImage') {\r\n parameterRow.Parameters[index + 1].Name = staffs.length.toString() + ' Staff Selected';\r\n parameterRow.Parameters[index + 2].Value = staffNumbers;\r\n }\r\n }\r\n } else {\r\n this.selectedStaff.push(staffs);\r\n if (parameterRow.Parameters[index].ControlType == 'stp') {\r\n parameterRow.Parameters[index].selectedStaffNames = staffs.LastName + ', ' + staffs.FirstName;\r\n parameterRow.Parameters[index].selectedStaffNumbers = staffs.EmployeeNumber;\r\n } else {\r\n parameterRow.Parameters[index - 1].Value = staffs.EmployeeNumber;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n if (parameter.Value == 'DefaultBelow') {\r\n this.reportParameters.filter(o => o.ControlType != 'grid' && o.ControlType == 'editablegrid').forEach(obj => {\r\n let ind = 0;\r\n obj.GridDataSources.data.forEach(dsObj => {\r\n obj.ColumnControlSpec.forEach(spec => {\r\n if (ind >= this.lastIndex && spec.type == 'txt') {\r\n dsObj[spec.columnName] = this.lastValue;\r\n }\r\n });\r\n ind++;\r\n });\r\n });\r\n }\r\n if (parameter.Value == 'RefreshGrid') {\r\n this.refreshGrid = this.selectedReport;\r\n this.refreshGrid.ReportParameters = this.reportParameters.filter(o => o.ControlType != 'grid' && o.ControlType != 'editablegrid');\r\n const refreshGrid = this.reportParameters.filter(o => o.ControlType == 'grid')[0];\r\n this.reportingService.getV9ReportParameterBtnRefreshData('RefreshGrid', this.selectedReport).subscribe(result => {\r\n if (refreshGrid.ControlType == 'grid') {\r\n refreshGrid.GridDataSource = result.GridDataSource;\r\n if (refreshGrid.GridDataSource != '') {\r\n refreshGrid.ColumnToDisplay = [];\r\n if (refreshGrid.Disabled == false) {\r\n refreshGrid.ColumnToDisplay = ['Selected'];\r\n }\r\n }\r\n\r\n if (refreshGrid.GridDataSource != null && refreshGrid.GridDataSource != '') {\r\n this.gridDataSource = JSON.parse(refreshGrid.GridDataSource);\r\n refreshGrid.GridDataSources = new TylerMatTableDataSource(this.gridDataSource);\r\n refreshGrid.GridDataSources.sort = this.sort;\r\n if (this.gridDataSource.length > 0) {\r\n refreshGrid.ColumnToDisplay = refreshGrid.ColumnToDisplay.concat(Object.keys(this.gridDataSource[0]));\r\n if (refreshGrid.ColumnToDisplay.includes('Id')) {\r\n refreshGrid.ColumnToDisplay.splice(refreshGrid.ColumnToDisplay.indexOf('Id'), 1);\r\n }\r\n this.selectAllGridRecordsChange(refreshGrid.GridDataSource);\r\n }\r\n }\r\n else {\r\n refreshGrid.GridDataSources.data = [];\r\n }\r\n }\r\n });\r\n }\r\n if (parameter.Value == 'AttendanceDay') {\r\n this.refreshGrid = this.selectedReport;\r\n this.refreshGrid.ReportParameters = this.reportParameters;\r\n this.reportingService.getV9ReportParameterBtnRefreshData('AttendanceDay', this.selectedReport).subscribe(result => {\r\n if (result.Name) {\r\n const calendarDay = this.reportParameters.filter(o => o.ColumnName == 'CalendarDay')[0];\r\n calendarDay.Name = result.Name;\r\n }\r\n });\r\n }\r\n if (parameter.Value == 'ReportCardMessage') {\r\n this.saveRCMessages();\r\n }\r\n }\r\n\r\n getIndex(rowData, index) {\r\n this.lastValue = rowData;\r\n this.lastIndex = index;\r\n }\r\n\r\n syncParameters(params: V9ReportParameter[]) {\r\n if (params.length > 0) {\r\n this.reportParameters = [...params];\r\n }\r\n }\r\n}\r\n"," \r\n
\r\n

{{report.Description}}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Print Address and Telephone on ADDs to Class\r\n \r\n
\r\n \r\n Print Attendance Comments\r\n \r\n
\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n {{term.LongDescription}}\r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n Title {{element.AbbreviatedTitle}} Teacher Name{{element.TeacherName}} Per {{element.Period}} Term {{element.TermCode}} Dept {{element.DepartmentCode}} Subject {{element.SubjectCode}}Sec{{element.Section}} Room{{element.RoomNumber}} Days{{element.DaysGroupDescription}}
\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, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { UserPreferencesService } from '../../../../shared-components/user-preferences/user-preferences.service';\r\nimport { SchoolYearSettings } from '../../../../shared-components/year/school-year-settings.model';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { CourseTerm } from '../../../../student360/student-schedule/course-term.model';\r\nimport * as moment from 'moment';\r\nimport { ReportV9 } from '../../models/report-v9.model';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentAttachment } from '../../../student-attachment/student-attachment.model';\r\nimport { System } from '../../../../shared-components/System';\r\nimport { ReportQueueComponent } from '../../report-queue/report-queue.component';\r\nimport { ReportParameterV9 } from '../../models/report-parameter-v9.model';\r\nimport { User } from '../../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { ReportParameters } from '../gradebook-statistical-analysis-report/gradebook-statistical-analysis-report.model';\r\nimport { TeacherPreview } from '../../models/teacher-preview.model';\r\nimport { TextMaskConfig } from 'angular2-text-mask/src/angular2TextMask';\r\n\r\n\r\n@Component({\r\n selector: 'teacher-summary-preview',\r\n templateUrl: './teacher-summary-preview.component.html',\r\n styleUrls: ['./teacher-summary-preview.component.css'],\r\n})\r\nexport class TeacherSummaryPreviewComponent implements OnInit, OnDestroy {\r\n schoolYearSettings: SchoolYearSettings;\r\n userPreferences: any;\r\n currentUser: User;\r\n reportParameter = new ReportParameterV9();\r\n ReportParameters = new ReportParameters();\r\n dataSource: MatTableDataSource;\r\n thisDialogRef: MatDialogRef;\r\n terms: CourseTerm[] = [];\r\n selectedTerm = new CourseTerm();\r\n report: ReportV9;\r\n ErrorCount: 0;\r\n parameters = [];\r\n param = [];\r\n gridColumns: string[] = ['SelectAll', 'AbbreviatedTitle', 'TeacherName', 'Period', 'TermCode', 'DepartmentCode', 'SubjectCode', 'Section', 'RoomNumber', 'DaysGroupDescription'];\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n public numberMask: TextMaskConfig;\r\n teacherUserId = 0;\r\n // @ViewChild('Week1Date', { read: ElementRef }) week1Date: ElementRef;\r\n // @ViewChild('Week2Date', { read: ElementRef }) week2Date: ElementRef;\r\n @ViewChild('Select', { read: ElementRef }) select: ElementRef;\r\n @ViewChild('FromPeriod', { read: ElementRef, static: true }) fromPeriod: ElementRef;\r\n @ViewChild('ToPeriod', { read: ElementRef, static: true }) toPeriod: ElementRef;\r\n isDataExist = false;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n TeacherSummaryPreviewDialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private reportingService: ReportingService,\r\n private userService: UserService,\r\n ) {\r\n this.thisDialogRef = TeacherSummaryPreviewDialogRef;\r\n this.report = data.Report;\r\n }\r\n\r\n ngOnInit() {\r\n this.numberMask = this.reportingService.getNumberMask();\r\n this.currentUser = this.userService.currentUser;\r\n // this.getUserPreferences(); // no preferences for this report in JS app\r\n this.getSchoolYearSettings();\r\n\r\n // set defaults\r\n this.reportParameter.ToPeriod = 9;\r\n this.reportParameter.FromPeriod = 0;\r\n const today = new Date();\r\n const todayDate = moment(today).format('MM/DD/YYYY');\r\n this.reportParameter.AttendanceDate = todayDate;\r\n this.reportParameter.ReportTitle = 'Teacher Summary Preview: ' + todayDate;\r\n this.reportParameter.PrintDate = todayDate;\r\n\r\n }\r\n ngOnDestroy() {\r\n\r\n }\r\n changeTerm(term: CourseTerm) {\r\n\r\n this.selectedTerm = term;\r\n this.reportParameter.TermId = this.selectedTerm.Id;\r\n }\r\n\r\n getTermsforCourses() {\r\n this.terms = [];\r\n this.reportingService.getTermsforCourses(0, this.yearService.defaultYear.SiteYearId).subscribe(results => {\r\n\r\n // userModel.defaultUserSchoolYear.SchoolYearId\r\n\r\n this.terms = results.filter(function (element) { return (element.TermTypeId != 2); });\r\n this.terms.push({ $id: null, EndDate: '', Id: -1, LongDescription: \"Today's Only\", MediumDescription: '', ParentId: null, Sequence: null, ShortDescription: null, StartDate: null, TermTypeId: null, Code: '' });\r\n this.terms.push({ $id: null, EndDate: '', Id: 0, LongDescription: 'All Terms', MediumDescription: '', ParentId: null, Sequence: null, ShortDescription: null, StartDate: null, TermTypeId: null, Code: '' });\r\n // set default to today's\r\n this.selectedTerm = this.terms.find(o => o.Id == -1);\r\n this.refreshGrid();\r\n // })\r\n // .error(function () {\r\n // })\r\n // .then(function () {\r\n // });\r\n });\r\n }\r\n\r\n\r\n getUser() {\r\n\r\n this.loginService.getUser()\r\n }\r\n getSchoolYearSettings() {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.yearService.defaultYear.SchoolID).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n this.reportParameter.isValueChange = false;\r\n this.reportParameter.isReportList = false;\r\n // this.setReportTitle();\r\n this.reportParameter.TermId = -1;\r\n this.reportParameter.PrintComment = false;\r\n this.reportParameter.PrintAdds = false;\r\n this.getTermsforCourses();\r\n // this.refreshGrid();\r\n });\r\n }\r\n getUserPreferences() {\r\n this.userPreferencesService.getUserPreferences(0, '/ClassListAll.aspx').subscribe(results => {\r\n this.userPreferences = JSON.parse(results[0]);\r\n if (this.userPreferences != null) {\r\n this.reportParameter.radValue = (this.userPreferences.pub_blnPrintNoField ? 'radNoField' : (this.userPreferences.pub_blnPrintStudentId ? 'radPrintStudentID' : 'radOtherField'));\r\n this.reportParameter.SkipLineBetweenStudent = this.userPreferences.pub_blnSkipLinesBetweenStudent;\r\n this.reportParameter.PrintWithGreyHeading = this.userPreferences.pub_blnPrintWithGreyHeadings;\r\n this.reportParameter.PrintStudentAbsencesAlreadyEntered = this.userPreferences.pub_blnPrintStudentAbsencesAlreadyEntered;\r\n this.reportParameter.PrintTeacherSignatureLine = this.userPreferences.pub_blnPrintTeacherSignatureLine;\r\n if (this.reportParameter.OtherFields != null && this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField;\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n getDynamicPagesReadForStudentLookup() {\r\n this.reportingService.getDynamicPagesReadForStudentLookup(false).subscribe(results => {\r\n this.reportParameter.OtherFields = results;\r\n if (results.length > 0) {\r\n this.reportParameter.OtherField = results[0].Id;\r\n if (this.userPreferences != null) {\r\n if (this.userPreferences.pub_strOtherField != '') {\r\n this.reportParameter.OtherField = this.userPreferences.pub_strOtherField.toString();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n // setReportTitle() {\r\n // if (this.loginService.LoginSettings.State != 'CA') {\r\n // if (moment(this.reportParameter.Week1Date).isValid() && moment(this.reportParameter.Week2Date).isValid()) {\r\n // this.reportParameter.ReportTitle = 'Weeks of: ' + moment.utc(this.reportParameter.Week1Date).format('MM/DD/YYYY') + ' and ' + moment.utc(this.reportParameter.Week2Date).format('MM/DD/YYYY');\r\n // }\r\n // } else {\r\n // this.reportParameter.ReportTitle = 'Attendance Roster Verification';\r\n // }\r\n // }\r\n\r\n changeValue() {\r\n this.reportParameter.isValueChange = true;\r\n if (this.reportParameter.FromPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.FromPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.FromPeriod = this.schoolYearSettings.MinumumPeriodPerDay;\r\n }\r\n if (this.reportParameter.ToPeriod > this.schoolYearSettings.MaximumPeriodsPerDay || this.reportParameter.ToPeriod < this.schoolYearSettings.MinumumPeriodPerDay) {\r\n this.reportParameter.ToPeriod = this.schoolYearSettings.MaximumPeriodsPerDay;\r\n }\r\n }\r\n cancelShowReportParameters() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n refreshGrid() {\r\n this.errors = [];\r\n if ((this.reportParameter.FromPeriod == undefined || this.reportParameter.FromPeriod == 0 || this.reportParameter.FromPeriod == null) && $.isNumeric(this.reportParameter.FromPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'From Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.fromPeriod\r\n });\r\n }\r\n if ((this.reportParameter.ToPeriod == undefined || this.reportParameter.ToPeriod == 0 || this.reportParameter.ToPeriod == null) && $.isNumeric(this.reportParameter.ToPeriod) == false) {\r\n this.errors.push({\r\n fieldName: 'To Period',\r\n errorMsg: 'Field is required',\r\n fieldRef: this.toPeriod\r\n });\r\n }\r\n if (this.errors.length == 0) {\r\n this.reportParameter.ReportGridData = [];\r\n\r\n // var attDate = new Date(this.reportParameter.AttendanceDate)\r\n // attDate.toString();\r\n this.reportParameter.AttendanceDate = moment(this.reportParameter.AttendanceDate).format('MM/DD/YYYY');\r\n\r\n\r\n this.reportingService.getTeacherPreviewGridData(this.yearService.defaultYear.SiteYearId, this.reportParameter.TermId, moment.utc(this.reportParameter.AttendanceDate, 'MM-DD-YYYY HH:mm a').toDate(), this.reportParameter.FromPeriod, this.reportParameter.ToPeriod).subscribe(results => {\r\n this.reportParameter.ReportGridData = results;\r\n if (this.reportParameter.ReportGridData.length > 0) {\r\n this.isDataExist = true;\r\n }\r\n else {\r\n this.isDataExist = false;\r\n }\r\n this.reportParameter.isValueChange = false;\r\n this.dataSource = new MatTableDataSource(this.reportParameter.ReportGridData);\r\n this.reportParameter.selectAllReportGridData = true;\r\n this.selectAll(true);\r\n });\r\n }\r\n }\r\n\r\n selectAll(value) {\r\n this.reportParameter.ReportGridData.forEach(o => {\r\n o.Select = value;\r\n }\r\n );\r\n }\r\n\r\n selectClass() {\r\n const result = this.reportParameter.ReportGridData.filter(o => o.Select == false);\r\n if (result.length > 0) {\r\n this.reportParameter.selectAllReportGridData = false;\r\n }\r\n else if (result.length == 0) {\r\n this.reportParameter.selectAllReportGridData = true;\r\n }\r\n }\r\n\r\n runClick() {\r\n const selectedGridData = this.reportParameter.ReportGridData.filter(o => o.Select);\r\n if (selectedGridData.length == 0) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'No Rosters Selected!',\r\n fieldRef: this.select\r\n });\r\n }\r\n if (this.reportParameter.isValueChange) {\r\n this.errors.push({\r\n fieldName: '',\r\n errorMsg: 'Selection Criteria Changed Please click Update Display button again!',\r\n fieldRef: null\r\n });\r\n }\r\n if (this.errors.length == 0) {\r\n let sectionIds = '';\r\n selectedGridData.forEach((el, i) => {\r\n if (sectionIds == '') {\r\n sectionIds += selectedGridData[i].SiteSectionId;\r\n } else {\r\n sectionIds = sectionIds + ',' + selectedGridData[i].SiteSectionId;\r\n }\r\n this.ReportParameters.SiteSectionIds = sectionIds;\r\n });\r\n\r\n let workflowReport = false;\r\n\r\n // if user is teacher then set Id\r\n if (this.currentUser.UserIsTeacher) {\r\n this.teacherUserId = this.currentUser.Id;\r\n }\r\n\r\n // this.reportParameter.PrintDate = moment.utc(this.reportParameter.PrintDate, 'MM-DD-YYYY').toString();\r\n\r\n // this.saveUserPreferences();\r\n this.parameters = [];\r\n this.param = [];\r\n this.param.push({ ParamName: 'strReportDate', ParamStringValue: this.reportParameter.PrintDate });\r\n this.param.push({ ParamName: 'strReportSiteHeader', ParamStringValue: this.yearService.defaultYear.SchoolName });\r\n this.param.push({ ParamName: 'strReportTitle', ParamStringValue: this.reportParameter.ReportTitle });\r\n this.param.push({ ParamName: 'strSiteYearCode', ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier });\r\n this.param.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n\r\n this.param.push({ ParamName: 'strSiteSectionIds', ParamStringValue: this.ReportParameters.SiteSectionIds });\r\n this.param.push({ ParamName: 'datCurrentAttendanceDate', ParamStringValue: this.reportParameter.AttendanceDate }); // get from parameter\r\n this.param.push({ ParamName: 'blnPrintAdds', ParamStringValue: this.reportParameter.PrintAdds });\r\n this.param.push({ ParamName: 'blnPrintComment', ParamStringValue: this.reportParameter.PrintComment });\r\n\r\n\r\n this.parameters.push(JSON.stringify(this.param));\r\n if (workflowReport) {\r\n this.reportingService.runV9Report(this.report.ReportName, this.report.ReportType, workflowReport, this.parameters).subscribe(response => {\r\n setTimeout(() => {\r\n this.reportQueueList();\r\n }, 500);\r\n }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n } else {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: 0,\r\n DocumentName: this.report.ReportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: '',\r\n ReportParameters: this.parameters,\r\n ReportType: this.report.ReportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n this.thisDialogRef.close();\r\n }\r\n } // end run click\r\n\r\n saveUserPreferences() {\r\n const UserPreferencesObj = this.userPreferences;\r\n UserPreferencesObj.pub_blnPrintNoField = (this.reportParameter.radValue == 'radNoField' ? true : false);\r\n UserPreferencesObj.pub_blnPrintStudentId = (this.reportParameter.radValue == 'radPrintStudentID' ? true : false);\r\n UserPreferencesObj.pub_blnPrintOtherField = (this.reportParameter.radValue == 'radOtherField' ? true : false);\r\n if (this.reportParameter.OtherField != '') {\r\n UserPreferencesObj.pub_strOtherField = this.reportParameter.OtherField;\r\n }\r\n UserPreferencesObj.pub_blnSkipLinesBetweenStudent = this.reportParameter.SkipLineBetweenStudent;\r\n UserPreferencesObj.pub_blnPrintWithGreyHeadings = this.reportParameter.PrintWithGreyHeading;\r\n UserPreferencesObj.pub_blnPrintStudentAbsencesAlreadyEntered = this.reportParameter.PrintStudentAbsencesAlreadyEntered;\r\n UserPreferencesObj.pub_blnPrintTeacherSignatureLine = this.reportParameter.PrintTeacherSignatureLine;\r\n const xmlStream: string[] = [];\r\n xmlStream.push(JSON.stringify(UserPreferencesObj));\r\n this.userPreferencesService.saveUserPreferences(0, '/ManualEntryRosters.aspx', xmlStream, 0, '').subscribe(response => { }\r\n , err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n reportQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n }\r\n} // end class\r\n","import { Component, OnDestroy, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ReportToEmail',\r\n templateUrl: './confirm-cancel-archive.component.html',\r\n styleUrls: ['./confirm-cancel-archive.component.css']\r\n})\r\n\r\nexport class ConfirmCancelArchiveReportComponent implements OnDestroy, OnInit {\r\n\r\n\r\n\r\n // private snapshotToDelete: AutoRunSnapshot;\r\n\r\n // private _reportName: string;\r\n // private _autoRunDate: Date;\r\n\r\n // get reportName(): string {\r\n // return this._reportName;\r\n // }\r\n\r\n // set reportName(value: string) {\r\n // this._reportName = value;\r\n // }\r\n\r\n // get autoRunDate(): Date {\r\n // return this._autoRunDate;\r\n // }\r\n\r\n // set autoRunDate(value: Date) {\r\n // this._autoRunDate = value;\r\n // }\r\n\r\n // isDistributebyEmail: boolean; // ONE-4387\r\n\r\n selectedRecipients: string;\r\n\r\n header = 'Cancel Report to Archive';\r\n messageLine1 = 'Are you sure you want to cancel this report to archive?';\r\n messageLine2 = 'If you continue, this archive batch will be cancelled and any associated archived reports will be removed.';\r\n removeArchivedFiles = true;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n\r\n private dialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n ) {\r\n if (data) {\r\n if (data.header) {\r\n this.header = data.header;\r\n }\r\n\r\n if (data.messageLine1) {\r\n this.messageLine1 = data.messageLine1;\r\n this.messageLine2 = data.messageLine2;\r\n }\r\n }\r\n\r\n\r\n // this.snapshotToDelete = reportService.autoRunSnapshot;\r\n\r\n // this.autoRunDate = this.snapshotToDelete.TimeStamp;\r\n // this.reportName = this.snapshotToDelete.ReportName;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n\r\n }\r\n\r\n continueClick() {\r\n\r\n // const snapshotId = this.snapshotToDelete.AutoRunReportSnapshots_ID;\r\n\r\n // this.reportService.deleteReportSnapshot(snapshotId).subscribe(res => {\r\n\r\n // // todo: check that the delete was successful\r\n // this.reportService.autoRunSnapshot = null;\r\n // // this.ReportToEmailEvent.emit(true);\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n\r\n // // }\r\n // });\r\n\r\n this.reportService.removeArchivedFiles = this.removeArchivedFiles;\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n exitClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n}","
{{header}}
\r\n\r\n \r\n \r\n\r\n
\r\n {{ messageLine1 }}\r\n
\r\n {{ messageLine2 }}\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n ","
Report to Archive - Processes
\r\n\r\n\r\n\r\n
\r\n Click refresh to update the status of your archiving process(es).\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n Status\r\n \r\n \r\n \r\n \r\n {{process.TextField}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Added By\r\n \r\n \r\n \r\n \r\n {{user.TextField}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n\r\n \r\n Status\r\n \r\n Report\r\n \r\n Archive To\r\n \r\n Added On\r\n \r\n Added By\r\n \r\n Total Students\r\n \r\n # Completed\r\n
\r\n Cancel\r\n 0 && allowDeleteArchivedReports && !Batch.InProcess\" (click)=\"deleteClick(Batch)\">Delete\r\n \r\n {{ Batch.ProcessingDescription }}\r\n \r\n {{ Batch.ReportName }}\r\n \r\n {{ Batch.OperationDescriptions }}\r\n \r\n {{ Batch.AddedOnDate_Display }}\r\n \r\n {{ Batch.AddedByName }}\r\n \r\n {{ Batch.TotalNumberOfStudents }}\r\n \r\n Unknown\r\n \r\n {{ Batch.NumberOfStudentsCompleted }}\r\n
\r\n \r\n {{ Batch.ErrMsg.substr(0, 200) }} 199\">...\r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { ReportBatch } from '../models/report-batch.model';\r\nimport { ConfirmCancelArchiveReportComponent } from './confirm-cancel-archive.component';\r\nimport { DataSource } from '../models/data-source.model';\r\nimport * as moment from 'moment';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'appArchiveProcess',\r\n templateUrl: './archive-process.component.html',\r\n styleUrls: ['./archive-process.component.css']\r\n})\r\n\r\nexport class ArchiveProcessComponent implements OnDestroy, OnInit {\r\n\r\n\r\n\r\n // private snapshotToDelete: AutoRunSnapshot;\r\n\r\n private _reportName: string;\r\n // private _autoRunDate: Date;\r\n\r\n get reportName(): string {\r\n return this._reportName;\r\n }\r\n\r\n set reportName(value: string) {\r\n this._reportName = value;\r\n }\r\n\r\n archiveTypes = '';\r\n\r\n fromDate: Date;\r\n // processStatus: string[] = [];\r\n\r\n // get autoRunDate(): Date {\r\n // return this._autoRunDate;\r\n // }\r\n\r\n // set autoRunDate(value: Date) {\r\n // this._autoRunDate = value;\r\n // }\r\n\r\n ReportBatches: ReportBatch[] = [];\r\n confirmCancelArchiveDialogRef: MatDialogRef;\r\n\r\n processes: DataSource[] = [];\r\n selectedProcess: string;\r\n filteredBatches: ReportBatch[] = [];\r\n\r\n addedBys: DataSource[] = [];\r\n addedBy: string;\r\n\r\n viewArchiveProcessesFromAllUsers: boolean;\r\n allowCancelArchiveProcesses: boolean;\r\n allowDeleteArchivedReports: boolean;\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n private confirmCancelArchiveDialog: MatDialog,\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n\r\n\r\n this.viewArchiveProcessesFromAllUsers = this.reportService.viewArchiveProcessesFromAllUsers;\r\n this.allowCancelArchiveProcesses = this.reportService.allowCancelArchiveProcesses;\r\n this.allowDeleteArchivedReports = this.reportService.allowDeleteArchivedReports;\r\n\r\n const today = this.reportService.getDateWithoutTime(); // new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), 0, 0, 0);\r\n\r\n // this.fromDate = today; // new Date();\r\n\r\n if (this.reportService.SelectedReport != null && this.reportService.SelectedReport != undefined) {\r\n this.reportName = this.reportService.SelectedReport.Name;\r\n }\r\n // if (this.reportService.SelectedReport.StudentDigitalContent != null) {\r\n // this.archiveTypes = this.archiveTypes + 'Student Digital Content\\n';\r\n // }\r\n\r\n // if (this.reportService.SelectedReport.StudentPortfolio != null) {\r\n // this.archiveTypes = this.archiveTypes + 'Student Portfolio\\n';\r\n // }\r\n\r\n // if (this.reportService.SelectedReport.ArchiveToTCM) {\r\n // this.archiveTypes = this.archiveTypes + 'Tyler Content Manager\\n';\r\n // }\r\n\r\n this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n for (let x = 0; x < archiveBatches.length; x++) {\r\n this.setAddedOnDate_Display(archiveBatches[x]);\r\n }\r\n\r\n\r\n\r\n this.ReportBatches = archiveBatches;\r\n this.filteredBatches = archiveBatches;\r\n this.getAddedBys();\r\n\r\n this.fromDate = this.getMinDate();\r\n\r\n let process = new DataSource();\r\n process = new DataSource();\r\n process.TextField = 'All';\r\n this.selectedProcess = 'All';\r\n this.processes.push(process);\r\n\r\n for (let x = 0; x < archiveBatches.length; x++) {\r\n if (!this.processes.find(p => p.TextField == archiveBatches[x].ProcessingDescription)) {\r\n process = new DataSource();\r\n process.TextField = archiveBatches[x].ProcessingDescription;\r\n this.processes.push(process);\r\n }\r\n }\r\n\r\n // var minDate=new Date(Math.min.apply(null, archiveBatches.));\r\n\r\n\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n // itemExistsInArray() {\r\n\r\n // }\r\n\r\n getAddedBys() {\r\n const users: string[] = [];\r\n\r\n for (let x = 0; x < this.ReportBatches.length; x++) {\r\n\r\n const tempUsers = users.find(u => u == this.ReportBatches[x].AddedByName);\r\n if (tempUsers == null || tempUsers == undefined) {\r\n users.push(this.ReportBatches[x].AddedByName);\r\n }\r\n }\r\n const sortedAddedBys = users.sort((a, b): number => {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n\r\n let addby = new DataSource();\r\n addby.TextField = 'All';\r\n this.addedBys.push(addby);\r\n this.addedBy = 'All'; // default\r\n\r\n for (let w = 0; w < sortedAddedBys.length; w++) {\r\n addby = new DataSource();\r\n addby.TextField = sortedAddedBys[w];\r\n this.addedBys.push(addby);\r\n }\r\n\r\n }\r\n\r\n getMinDate(): Date {\r\n let myMinDate = new Date();\r\n for (let x = 0; x < this.ReportBatches.length; x++) {\r\n if (new Date(this.ReportBatches[x].AddedOn).getTime() < new Date(myMinDate).getTime()) {\r\n myMinDate = this.ReportBatches[x].AddedOn;\r\n }\r\n }\r\n return myMinDate;\r\n }\r\n\r\n\r\n\r\n setAddedOnDate_Display(batch: ReportBatch) {\r\n batch.AddedOnDate_Display = moment(batch.AddedOn).format('MM/DD/YYYY h:mm:ss a');\r\n }\r\n\r\n fromDateChanged() {\r\n this.filteredBatches = this.getFilteredItems();\r\n }\r\n\r\n processChanged() {\r\n this.filteredBatches = this.getFilteredItems();\r\n }\r\n\r\n getFilteredItems(): ReportBatch[] {\r\n const batches: ReportBatch[] = [];\r\n\r\n for (let x = 0; x < this.ReportBatches.length; x++) {\r\n\r\n if (this.selectedProcess != 'All') {\r\n // filtering on process\r\n if (this.ReportBatches[x].ProcessingDescription == this.selectedProcess) {\r\n\r\n if ( // moment(this.fromDate, ['MM/DD/YYYY']).isValid() &&\r\n // moment(this.ReportBatches[x].AddedOn).isAfter(this.fromDate)\r\n this.isThisDateEqualToOrAfterThatDate(this.ReportBatches[x].AddedOn, this.fromDate)\r\n && (this.addedBy == 'All' || this.ReportBatches[x].AddedByName == this.addedBy)) {\r\n batches.push(this.ReportBatches[x]);\r\n }\r\n\r\n }\r\n }\r\n else {\r\n // not filtering on process\r\n if ( // moment(this.fromDate, ['MM/DD/YYYY']).isValid() &&\r\n // moment(this.ReportBatches[x].AddedOn).isAfter(this.fromDate)\r\n\r\n this.isThisDateEqualToOrAfterThatDate(this.ReportBatches[x].AddedOn, this.fromDate)\r\n && (this.addedBy == 'All' || this.ReportBatches[x].AddedByName == this.addedBy)) {\r\n batches.push(this.ReportBatches[x]);\r\n }\r\n }\r\n }\r\n\r\n return batches;\r\n }\r\n\r\n isThisDateEqualToOrAfterThatDate(thisDate: Date | string, thatDate: Date | string) {\r\n const date1 = new Date(thisDate).getTime();\r\n const date2 = new Date(thatDate).getTime();\r\n if (!(date1 < date2)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // getDate(batch: ReportBatch) {\r\n // return moment(batch.AddedOn, ['MM/DD/YYYY']);\r\n // }\r\n\r\n itemExistsInArray(textFieldToFind: string, batchesToCheck: ReportBatch[]): boolean {\r\n let itemExists = false;\r\n\r\n for (let x = 0; x < batchesToCheck.length; x++) {\r\n if (batchesToCheck.find(p => p.ProcessingDescription == textFieldToFind)) {\r\n itemExists = true;\r\n break;\r\n }\r\n }\r\n\r\n return itemExists;\r\n\r\n }\r\n\r\n cancelClick(batch: ReportBatch) {\r\n // confirm they want to cancel the report to archive\r\n this.confirmCancelArchiveDialogRef = this.confirmCancelArchiveDialog.open(ConfirmCancelArchiveReportComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.confirmCancelArchiveDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result == true) {\r\n this.cancelBatch(batch);\r\n // this.thisDialogRef.close();\r\n }\r\n });\r\n\r\n // batch.InProcess = false;\r\n\r\n // // mark as cancelling\r\n // this.reportService.cancellingReportBatch(batch).subscribe(batches => {\r\n // this.ReportBatches = batches;\r\n // });\r\n\r\n // // now kick off background cancel\r\n // const asyncSub = this.reportService.startCancelReportBatchCleanupProcess(batch).subscribe(() => { });\r\n // setTimeout(() => {\r\n // asyncSub.unsubscribe();\r\n // }, 0);\r\n\r\n // this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(archiveBatches);\r\n // }\r\n // this.ReportBatches = archiveBatches;\r\n // });\r\n }\r\n\r\n\r\n cancelBatch(batch: ReportBatch) {\r\n batch.InProcess = false;\r\n\r\n // mark as cancelling\r\n this.reportService.cancellingReportBatch(batch).subscribe(batches => {\r\n this.ReportBatches = batches;\r\n\r\n batch.RemoveArchivedFiles = this.reportService.removeArchivedFiles;\r\n this.reportService.removeArchivedFiles = false; // reset to default behavior\r\n\r\n // // now kick off background cancel\r\n // const asyncSub = this.reportService.startCancelReportBatchCleanupProcess(batch).subscribe(() => { });\r\n // setTimeout(() => {\r\n // // asyncSub.unsubscribe();\r\n // this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n\r\n // for (let x = 0; x < archiveBatches.length; x++) {\r\n // this.setAddedOnDate_Display(archiveBatches[x]);\r\n // }\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(archiveBatches);\r\n // }\r\n // this.ReportBatches = archiveBatches;\r\n\r\n // }); // END getReportBatches\r\n // }, 0);\r\n\r\n\r\n this.reportService.startCancelReportBatchCleanupProcess(batch).subscribe(results => {\r\n // asyncSub.unsubscribe();\r\n this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n\r\n for (let x = 0; x < archiveBatches.length; x++) {\r\n this.setAddedOnDate_Display(archiveBatches[x]);\r\n }\r\n this.ReportBatches = archiveBatches;\r\n\r\n }); // END getReportBatches\r\n });\r\n\r\n\r\n\r\n }); // END cancellingReportBatch\r\n\r\n // // now kick off background cancel\r\n // const asyncSub = this.reportService.startCancelReportBatchCleanupProcess(batch).subscribe(() => { });\r\n // setTimeout(() => {\r\n // asyncSub.unsubscribe();\r\n // }, 0);\r\n\r\n // this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(archiveBatches);\r\n // }\r\n // this.ReportBatches = archiveBatches;\r\n // });\r\n }\r\n\r\n deleteClick(batch: ReportBatch) {\r\n // confirm they want to delete any reports which have already been archived\r\n this.confirmCancelArchiveDialogRef = this.confirmCancelArchiveDialog.open(ConfirmCancelArchiveReportComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n header: 'Delete archived reports?',\r\n messageLine1: 'Are you sure you want to delete any archived reports in this batch?',\r\n messageLine2: 'If you continue, the reports will be deleted and this archive batch will be cancelled'\r\n }\r\n });\r\n\r\n this.confirmCancelArchiveDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result == true) {\r\n this.cancelBatch(batch);\r\n // this.thisDialogRef.close();\r\n }\r\n });\r\n\r\n // this.cancelBatch(batch);\r\n }\r\n\r\n getAddedOn(batch: ReportBatch) {\r\n return batch.AddedOn.toString().replace('T', ',');\r\n }\r\n\r\n getStatusFontColor(batch: ReportBatch) {\r\n if (batch.InProcess) {\r\n return 'green';\r\n } else {\r\n if (batch.HasError || batch.ProcessingDescription == 'Errored') {\r\n return 'red';\r\n } else {\r\n return 'default';\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n refreshClick() {\r\n\r\n this.reportService.getReportBatches().subscribe(archiveBatches => {\r\n for (let x = 0; x < archiveBatches.length; x++) {\r\n this.setAddedOnDate_Display(archiveBatches[x]);\r\n }\r\n this.ReportBatches = archiveBatches;\r\n this.filteredBatches = this.getFilteredItems();\r\n });\r\n }\r\n\r\n closeClick() {\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n\r\n}","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportOptionsHowTo',\r\n templateUrl: './report-options-how-to.component.html',\r\n styleUrls: ['./report-options-how-to.component.css']\r\n\r\n})\r\n\r\nexport class ReportOptionsHowToComponent implements OnInit, OnDestroy {\r\n\r\n thisDialogRef: MatDialogRef;\r\n\r\n constructor(\r\n dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n\r\n ) {\r\n this.thisDialogRef = dialogRef;\r\n\r\n } // end constructor\r\n\r\n\r\n ngOnInit() {\r\n\r\n // place holder\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n\r\n closeClick() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n}// end class","\r\n
\r\n
\r\n Report Options - How To\r\n
\r\n\r\n \r\n
\r\n\r\n

\r\n Report Options are used to save/hide parameters you would like, and these will be pre-populated\r\n whenever\r\n you come into a report.\r\n

\r\n

\r\n User level parameters which have been marked to save will be updated with the latest value you have selected each time you run a\r\n report.\r\n

\r\n

\r\n If you select to hide a parameter, save will be checked as well, as this will be the actual value since\r\n it will not be visible unless you click \"Show Hidden Parameters\" on the report page.\r\n

\r\n

\r\n District level parameters can only be defined by administrators, and will override any user saved\r\n parameters.\r\n

\r\n

\r\n For district level parameters, you should select any values you would like to save/hide prior to coming\r\n to\r\n the report options page, as these are the values which will be saved.\r\n

\r\n\r\n

\r\n To be safe you should click \"Show Hidden Parameters\" on the report page to see which values will be saved.\r\n

\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n
","\r\n
Report Options - {{reportName}}
\r\n\r\n\r\n\r\n\r\n
\r\n Please ensure you have selected any parameter values you want to save or hide prior to coming to this page.\r\n
\r\n \r\n \r\n It is strongly recommeneded you click the \"How To\" below to understand the behavior.\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n Personal\r\n District\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n
Parameter\r\n \r\n \r\n Save\r\n \r\n \r\n \r\n Hide\r\n Is UserIs DistrictIs System
{{reportDef.ParameterLabel}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, OnDestroy } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatRadioChange } from '@angular/material/radio';\r\nimport { LoginService } from '../../login/login.service';\r\n// import { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { Report } from '../models/report.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportDefinition } from '../models/report-definition.model';\r\nimport { ReportLegendComponent } from '../report-legend/report-legend.component';\r\nimport { ReportOptionsHowToComponent } from './report-options-how-to.component';\r\n\r\nimport { CheckForErrorsMessageComponent } from '../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\n\r\n// import { AddReportFolderComponent } from './add-folder/add-folder.component';\r\n// import { DeleteReportFolderComponent } from './delete-folder/delete-folder.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportOptions',\r\n templateUrl: './report-options.component.html',\r\n styleUrls: ['./report-options.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportOptionsComponent implements OnInit, OnDestroy {\r\n\r\n thisDialogRef: MatDialogRef;\r\n reportLegendDialogRef: MatDialogRef;\r\n selectedReport: Report;\r\n reportName: string;\r\n howToDialogRef: MatDialogRef;\r\n\r\n reportDefinitions: ReportDefinition[] = [];\r\n userHasDistrictPermissions: boolean;\r\n isDistrictDefinitions: boolean;\r\n inDebugMode: boolean;\r\n saveAllChecked: boolean;\r\n hideAllChecked: boolean;\r\n // cancelCloseLabel: string;\r\n isFromMenu: boolean;\r\n isDirty: boolean;\r\n\r\n previouslySavedUserDefinitions: number[]; // existing ParameterValue.IDs\r\n previouslySavedDistrictDefinitions: number[]; // existing ParameterValue.IDs\r\n\r\n // reportFolders: ReportFolder[];\r\n\r\n // addReportFolderDialogRef: MatDialogRef;\r\n // deleteReportFolderDialogRef: MatDialogRef;\r\n\r\n // reportFolderChanged = false;\r\n\r\n // addReportFolderDialog: MatDialog;\r\n\r\n constructor(\r\n reportOptionsDialogRef: MatDialogRef,\r\n private reportLegendDialog: MatDialog,\r\n private howToDialog: MatDialog,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n // private checkForErrorsGuard: CheckForErrorsGuard,\r\n\r\n // private addReportFolderDialog: MatDialog,\r\n // private deleteReportFolderDialog: MatDialog,\r\n\r\n ) {\r\n\r\n this.thisDialogRef = reportOptionsDialogRef;\r\n }\r\n\r\n ngOnInit() {\r\n this.isDirty = false;\r\n this.inDebugMode = this.reportService.inDebugMode;\r\n this.selectedReport = this.reportService.SelectedReport;\r\n this.reportName = this.selectedReport.Name;\r\n this.userHasDistrictPermissions = this.reportService.userHasPrivilegeAddEditDistrictReportDefinitions;\r\n this.isDistrictDefinitions = false; // defaults to personal\r\n this.isFromMenu = this.reportService.isFromMenu;\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('isFromMenu = ');\r\n // console.log(this.isFromMenu);\r\n // }\r\n\r\n // REMOVE AFTER TESTING\r\n // this.selectedReport.Parameters.length = 0;\r\n\r\n\r\n // need to populate the report parameters if coming from actions menu instead of report parameters component\r\n if (this.isFromMenu) {\r\n this.getDefaultReportParametersForUser();\r\n }\r\n else {\r\n // we already have the parameters so go get the definitions\r\n this.getReportDefinitions();\r\n }\r\n }\r\n ngOnDestroy() { }\r\n\r\n getDefaultReportParametersForUser() {\r\n this.reportService.getReportParameters(-1, this.selectedReport, false).subscribe(selectedReport => {\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('In getDefaultReportParametersForUser()');\r\n // console.log(selectedReport);\r\n // }\r\n\r\n this.getReportDefinitions();\r\n\r\n for (let i = 0; i < this.selectedReport.Parameters.length; i++) {\r\n\r\n // if (this.selectedReport.Parameters[i].ParameterReportDefinition.HasParameterValueDefined\r\n // && this.selectedReport.Parameters[i].ParameterReportDefinition.IsSystem == false\r\n // ) {\r\n // this.selectedReport.Parameters[i].SetBackgroundColorForSavedDefinition = true;\r\n // }\r\n\r\n // handle bit parameters if saved definition to convert from string\r\n\r\n if (this.selectedReport.Parameters[i].DataType == 'bit') {\r\n if (this.selectedReport.Parameters[i].ParameterReportDefinition.Value == '1') {\r\n this.selectedReport.Parameters[i].ParameterReportDefinition.Value = true;\r\n this.selectedReport.Parameters[i].Value = true;\r\n }\r\n else {\r\n this.selectedReport.Parameters[i].ParameterReportDefinition.Value = false;\r\n this.selectedReport.Parameters[i].Value = false;\r\n }\r\n\r\n }\r\n }\r\n\r\n // this.reportService.SelectedReport = selectedReport;\r\n this.selectedReport = selectedReport;\r\n this.selectedReport.IsDistrictReportDefinitions = false;\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n // cancelClick() {\r\n // this.thisDialogRef.close(this.isDirty);\r\n // }\r\n\r\n closeClick() {\r\n\r\n const parameterDefinitions: ReportDefinition[] = this.getUnsavedChanges();\r\n\r\n\r\n if (this.isDirty) {\r\n\r\n const dialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n\r\n dialog.componentInstance.dialogBox = dialog;\r\n dialog.afterClosed().subscribe(result => {\r\n console.log(result);\r\n switch (result) {\r\n case 1: { // save and continue\r\n this.reportService.saveReportOptions(parameterDefinitions, true).subscribe(saveWasSuccessful => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('saveWasSuccessful: ' + saveWasSuccessful);\r\n // console.log(parameterDefinitions);\r\n // }\r\n\r\n // close after save\r\n this.thisDialogRef.close(true);\r\n\r\n });\r\n break;\r\n }\r\n case 0: { // continue without save\r\n this.thisDialogRef.close(false);\r\n break;\r\n }\r\n case -1: { // cancel\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n\r\n }\r\n else { // no unsaved changes\r\n this.thisDialogRef.close(false);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // cancelClick() {\r\n // switch (this.selectedTab) {\r\n // case 'Event': {\r\n // if (this.eventTab.formIsDirty) {\r\n // const dialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n // disableClose: true,\r\n // data: {\r\n // errors: []\r\n // }\r\n // });\r\n // dialog.componentInstance.dialogBox = dialog;\r\n // dialog.afterClosed().subscribe(result => {\r\n\r\n // switch (result) {\r\n // case 1: { // save and continue\r\n // if (this.validateTab()) {\r\n // this.saveBehaviorEvent(true);\r\n // }\r\n // break;\r\n // }\r\n // case 0: { // continue without save\r\n // this.dialogRef.close(null);\r\n // break;\r\n // }\r\n // case -1: { // cancel\r\n // break;\r\n // }\r\n // default: {\r\n // break;\r\n // }\r\n // }\r\n // });\r\n // }\r\n // else {\r\n // this.dialogRef.close(null);\r\n // }\r\n // break;\r\n // }\r\n // default: {\r\n // this.dialogRef.close(this.behaviorEvent);\r\n // break;\r\n // }\r\n // }\r\n // }\r\n\r\n saveAllChanged(isChecked: boolean) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(isChecked);\r\n // }\r\n\r\n for (let i = 0; i < this.reportDefinitions.length; i++) {\r\n if (!this.isDisabled(this.reportDefinitions[i])) {\r\n this.reportDefinitions[i].SaveChecked = isChecked;\r\n this.saveChecked(this.reportDefinitions[i]);\r\n }\r\n }\r\n\r\n }\r\n\r\n hideAllChanged(isChecked: boolean) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(isChecked);\r\n // }\r\n\r\n for (let i = 0; i < this.reportDefinitions.length; i++) {\r\n if (!this.isDisabled(this.reportDefinitions[i])) {\r\n this.reportDefinitions[i].HideChecked = isChecked;\r\n this.hideChecked(this.reportDefinitions[i]);\r\n }\r\n }\r\n\r\n }\r\n\r\n getReportDefinitions() {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.selectedReport);\r\n // }\r\n\r\n // this.cancelCloseLabel = 'Close';\r\n\r\n this.selectedReport.IsDistrictReportDefinitions = this.isDistrictDefinitions;\r\n\r\n this.reportService.getReportDefinitions(true).subscribe(reportDefs => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reportDefs);\r\n // }\r\n\r\n\r\n this.reportDefinitions = reportDefs;\r\n\r\n for (let i = 0; i < this.reportDefinitions.length; i++) {\r\n\r\n // if HasParameterValueDefined we also need to uncheck any user level defs saved if running for district\r\n if (this.reportDefinitions[i].HasParameterValueDefined == 1 && (!this.isDistrictDefinitions || this.reportDefinitions[i].IsDistrictDefinedParameter)) {\r\n if (this.reportDefinitions[i].CanSave) {\r\n this.reportDefinitions[i].SaveChecked = true;\r\n }\r\n if (this.reportDefinitions[i].IsHidden) {\r\n this.reportDefinitions[i].HideChecked = true;\r\n }\r\n }\r\n if (!this.reportDefinitions[i].SaveChecked) {\r\n this.reportDefinitions[i].SaveChecked = false;\r\n }\r\n this.reportDefinitions[i].CanSave = this.reportDefinitions[i].SaveChecked;\r\n if (!this.isDisabled(this.reportDefinitions[i])) {\r\n this.reportDefinitions[i].IsUserDefinedParameter = !this.isDistrictDefinitions;\r\n this.reportDefinitions[i].IsDistrictDefinedParameter = this.isDistrictDefinitions;\r\n\r\n if (this.reportDefinitions[i].IsUserDefinedParameter) {\r\n // eslint-disable-next-line camelcase\r\n this.reportDefinitions[i].Login_ID = this.reportService.login_ID;\r\n }\r\n else {\r\n // eslint-disable-next-line camelcase\r\n this.reportDefinitions[i].Login_ID = -1;\r\n }\r\n }\r\n this.setBackgroundColorForSavedDefinition(this.reportDefinitions[i]);\r\n\r\n // set the value coming from the report parameters page\r\n\r\n for (let p = 0; p < this.selectedReport.Parameters.length; p++) {\r\n // if (this.selectedReport.Parameters[p].ParameterName == '@' + this.reportDefinitions[i].ParameterName)\r\n if (this.selectedReport.Parameters[p].ParameterName == '@' + this.reportDefinitions[i].ParameterName) {\r\n\r\n // since the saved definition value may be different than the current parameter value we need to check for isDirty even if they never check any checkboxes\r\n if (!this.isDirty) {\r\n\r\n // todo: we may need to handle the _Y/_N bit parameters here as well\r\n\r\n if (this.isDistrictDefinitions && this.reportDefinitions[i].IsDistrictDefinedParameter) {\r\n if (this.reportDefinitions[i].HasParameterValueDefined && this.reportDefinitions[i].Value != this.selectedReport.Parameters[p].Value) {\r\n this.isDirty = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n this.reportDefinitions[i].Value = this.selectedReport.Parameters[p].Value;\r\n // if (this.inDebugMode) {\r\n // console.log('Setting definition value');\r\n // console.log(this.selectedReport.Parameters[p]);\r\n // console.log(this.reportDefinitions[i]);\r\n // }\r\n break; // continue;\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.reportDefinitions);\r\n // }\r\n\r\n\r\n });\r\n\r\n }\r\n\r\n saveChecked(reportDef: ReportDefinition) {\r\n reportDef.CanSave = reportDef.SaveChecked;\r\n\r\n if (this.isDistrictDefinitions) {\r\n reportDef.IsDistrictDefinedParameter = true;\r\n reportDef.IsUserDefinedParameter = false;\r\n }\r\n else {\r\n reportDef.IsDistrictDefinedParameter = false;\r\n reportDef.IsUserDefinedParameter = true;\r\n }\r\n\r\n\r\n // we need to save any parameters marked to hide\r\n\r\n if (reportDef.HideChecked) {\r\n reportDef.SaveChecked = true;\r\n this.isDisabled(reportDef);\r\n // this.hideChecked(reportDef);\r\n }\r\n\r\n this.setBackgroundColorForSavedDefinition(reportDef);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reportDef);\r\n // }\r\n\r\n }\r\n\r\n hideChecked(reportDef: ReportDefinition) {\r\n reportDef.IsHidden = reportDef.HideChecked;\r\n\r\n if (this.isDistrictDefinitions) {\r\n reportDef.IsDistrictDefinedParameter = true;\r\n reportDef.IsUserDefinedParameter = false;\r\n }\r\n else {\r\n reportDef.IsDistrictDefinedParameter = false;\r\n reportDef.IsUserDefinedParameter = true;\r\n }\r\n\r\n // we need to save any parameters marked to hide\r\n\r\n if (reportDef.HideChecked) {\r\n reportDef.SaveChecked = true;\r\n this.saveChecked(reportDef);\r\n }\r\n\r\n this.setBackgroundColorForSavedDefinition(reportDef);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reportDef);\r\n // }\r\n\r\n }\r\n\r\n saveReportOptionsClick() {\r\n const parameterDefinitions: ReportDefinition[] = this.getUnsavedChanges();\r\n\r\n if (this.inDebugMode) {\r\n console.log('Saving...');\r\n console.log(parameterDefinitions);\r\n }\r\n\r\n // need to save any changes\r\n this.reportService.saveReportOptions(parameterDefinitions, true).subscribe(saveWasSuccessful => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('saveWasSuccessful: ' + saveWasSuccessful);\r\n // console.log(parameterDefinitions);\r\n // }\r\n\r\n // close after save\r\n this.thisDialogRef.close(true);\r\n\r\n });\r\n\r\n // if (this.isDirty) {\r\n\r\n // // need to save any changes\r\n // this.reportService.saveReportOptions(parameterDefinitions, true).subscribe(saveWasSuccessful => {\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n // // console.log('saveWasSuccessful: ' + saveWasSuccessful);\r\n // // console.log(parameterDefinitions);\r\n // // }\r\n\r\n // // close after save\r\n // this.thisDialogRef.close(this.isDirty);\r\n\r\n // });\r\n\r\n // }\r\n // else { // NO need to save any changes\r\n // this.thisDialogRef.close(this.isDirty);\r\n // }\r\n\r\n }\r\n\r\n // saveReportOptionsClick() {\r\n\r\n // const parameterDefinitions: ReportDefinition[] = [];\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n // // console.log(this.reportDefinitions);\r\n // // }\r\n\r\n // for (let i = 0; i < this.reportDefinitions.length; i++) {\r\n\r\n // let thisReportDef: ReportDefinition;\r\n // thisReportDef = this.reportDefinitions[i];\r\n\r\n // // handle bit parameters since we need them as 1 or 0 in database but boolean in typescript\r\n // if (thisReportDef.DataType == 'bit') {\r\n // if (thisReportDef.Value == true) {\r\n // thisReportDef.Value = '1';\r\n // }\r\n // else {\r\n // thisReportDef.Value = '0';\r\n // }\r\n // }\r\n\r\n // if (\r\n // // we want to ignore any system parameters\r\n // !(thisReportDef.IsSystem && !thisReportDef.AllowUserSaveParameter && !thisReportDef.AllowUserHideParameter)\r\n\r\n // // we want to ignore any parameters that don't have a saved definition and have no options checked\r\n // // && !(thisReportDef.HasReportDefinition == 0 && !thisReportDef.CanSave && !thisReportDef.IsHidden)\r\n // && !(thisReportDef.HasReportDefinition == 0 && !thisReportDef.SaveChecked && !thisReportDef.IsHidden)\r\n\r\n // ) {\r\n // if (thisReportDef.SaveChecked) {\r\n // thisReportDef.CanSave = true;\r\n // }\r\n // else {\r\n // thisReportDef.CanSave = false;\r\n // }\r\n\r\n // if (thisReportDef.HideChecked) {\r\n // thisReportDef.IsHidden = true;\r\n // }\r\n // else {\r\n // thisReportDef.IsHidden = false;\r\n // }\r\n\r\n // // now we need to determine if this component needs to be marked as isDirty\r\n\r\n // // first we will look at new definitions to be saved\r\n\r\n // if (!this.isDirty && thisReportDef.HasParameterValueDefined == 0 && thisReportDef.SaveChecked) {\r\n\r\n // if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n // this.isDirty = true;\r\n // }\r\n // else if (!this.isDistrictDefinitions && thisReportDef.IsUserDefinedParameter) {\r\n // this.isDirty = true;\r\n // }\r\n // }\r\n\r\n // // now we will look at existing definitions that have been unchecked to save\r\n\r\n // if (!this.isDirty && thisReportDef.HasParameterValueDefined == 1 && !thisReportDef.SaveChecked) {\r\n\r\n // if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n // this.isDirty = true;\r\n // }\r\n // else if (!this.isDistrictDefinitions && thisReportDef.IsUserDefinedParameter) {\r\n // this.isDirty = true;\r\n // }\r\n // }\r\n\r\n\r\n\r\n\r\n // // // set the value coming from the report parameters page\r\n // // if (thisReportDef.CanSave) {\r\n // // for (let p = 0; p < this.selectedReport.Parameters.length; p++) {\r\n // // if (this.selectedReport.Parameters[p].ParameterReportDefinition.ParameterName_ID == thisReportDef.ParameterName_ID) {\r\n // // thisReportDef.Value = this.selectedReport.Parameters[p].Value;\r\n // // }\r\n // // }\r\n // // }\r\n\r\n\r\n // // handle district parameters\r\n // // this.selectedReport.IsDistrictReportDefinitions\r\n // if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n // parameterDefinitions.push(thisReportDef);\r\n // }\r\n\r\n // // handle user parameter definitions\r\n // // this.selectedReport.IsDistrictReportDefinitions\r\n // if (!this.selectedReport.IsDistrictReportDefinitions && !thisReportDef.IsDistrictDefinedParameter && (thisReportDef.SaveChecked || thisReportDef.HideChecked)) {\r\n // thisReportDef.Login_ID = this.reportService.login_ID;\r\n // parameterDefinitions.push(thisReportDef);\r\n // }\r\n\r\n // }\r\n\r\n // }\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n // // console.log(parameterDefinitions);\r\n // // }\r\n\r\n // if (this.isDirty) {\r\n\r\n // // need to save any changes\r\n // this.reportService.saveReportOptions(parameterDefinitions, true).subscribe(saveWasSuccessful => {\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n // // console.log('saveWasSuccessful: ' + saveWasSuccessful);\r\n // // console.log(parameterDefinitions);\r\n // // }\r\n\r\n // // close after save\r\n // this.thisDialogRef.close(this.isDirty);\r\n\r\n // });\r\n\r\n // }\r\n // else { // NO need to save any changes\r\n // this.thisDialogRef.close(this.isDirty);\r\n // }\r\n\r\n\r\n\r\n // }\r\n\r\n\r\n getUnsavedChanges(): ReportDefinition[] {\r\n\r\n this.isDirty = false;\r\n\r\n const parameterDefinitions: ReportDefinition[] = [];\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.reportDefinitions);\r\n // }\r\n\r\n for (let i = 0; i < this.reportDefinitions.length; i++) {\r\n\r\n const thisReportDef = this.reportDefinitions[i];\r\n\r\n // handle bit parameters since we need them as 1 or 0 in database but boolean in typescript\r\n if (thisReportDef.DataType == 'bit') {\r\n if (thisReportDef.Value == true) {\r\n thisReportDef.Value = '1';\r\n }\r\n else {\r\n thisReportDef.Value = '0';\r\n }\r\n }\r\n\r\n if (\r\n // we want to ignore any system parameters\r\n !(thisReportDef.IsSystem && !thisReportDef.AllowUserSaveParameter && !thisReportDef.AllowUserHideParameter)\r\n\r\n // we want to ignore any parameters that don't have a saved definition and have no options checked\r\n // && !(thisReportDef.HasReportDefinition == 0 && !thisReportDef.CanSave && !thisReportDef.IsHidden)\r\n && !(thisReportDef.HasReportDefinition == 0 && !thisReportDef.SaveChecked && !thisReportDef.IsHidden)\r\n\r\n ) {\r\n if (thisReportDef.SaveChecked) {\r\n thisReportDef.CanSave = true;\r\n }\r\n else {\r\n thisReportDef.CanSave = false;\r\n }\r\n\r\n if (thisReportDef.HideChecked) {\r\n thisReportDef.IsHidden = true;\r\n }\r\n else {\r\n thisReportDef.IsHidden = false;\r\n }\r\n\r\n // now we need to determine if this component needs to be marked as isDirty\r\n\r\n // first we will look at new definitions to be saved\r\n\r\n if (!this.isDirty && thisReportDef.HasParameterValueDefined == 0 && thisReportDef.SaveChecked) {\r\n\r\n if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n this.isDirty = true;\r\n\r\n if (this.inDebugMode) {\r\n console.log('isDirty');\r\n console.log(thisReportDef);\r\n }\r\n }\r\n else if (!this.isDistrictDefinitions && thisReportDef.IsUserDefinedParameter) {\r\n this.isDirty = true;\r\n if (this.inDebugMode) {\r\n console.log('isDirty');\r\n console.log(thisReportDef);\r\n }\r\n }\r\n }\r\n\r\n // now we will look at existing definitions that have been unchecked to save\r\n\r\n if (!this.isDirty && thisReportDef.HasParameterValueDefined == 1 && !thisReportDef.SaveChecked) {\r\n\r\n if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n this.isDirty = true;\r\n if (this.inDebugMode) {\r\n console.log('isDirty');\r\n console.log(thisReportDef);\r\n }\r\n }\r\n else if (!this.isDistrictDefinitions && thisReportDef.IsUserDefinedParameter) {\r\n this.isDirty = true;\r\n if (this.inDebugMode) {\r\n console.log('isDirty');\r\n console.log(thisReportDef);\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // // set the value coming from the report parameters page\r\n // if (thisReportDef.CanSave) {\r\n // for (let p = 0; p < this.selectedReport.Parameters.length; p++) {\r\n // if (this.selectedReport.Parameters[p].ParameterReportDefinition.ParameterName_ID == thisReportDef.ParameterName_ID) {\r\n // thisReportDef.Value = this.selectedReport.Parameters[p].Value;\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n // handle district parameters\r\n // this.selectedReport.IsDistrictReportDefinitions\r\n if (this.isDistrictDefinitions && thisReportDef.IsDistrictDefinedParameter) {\r\n parameterDefinitions.push(thisReportDef);\r\n }\r\n\r\n // handle user parameter definitions\r\n // this.selectedReport.IsDistrictReportDefinitions\r\n if (!this.selectedReport.IsDistrictReportDefinitions && !thisReportDef.IsDistrictDefinedParameter && (thisReportDef.SaveChecked || thisReportDef.HideChecked)) {\r\n // eslint-disable-next-line camelcase\r\n thisReportDef.Login_ID = this.reportService.login_ID;\r\n parameterDefinitions.push(thisReportDef);\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n return parameterDefinitions;\r\n\r\n\r\n // if (this.isDirty) {\r\n\r\n // // need to save any changes\r\n // this.reportService.saveReportOptions(parameterDefinitions, true).subscribe(saveWasSuccessful => {\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n // // console.log('saveWasSuccessful: ' + saveWasSuccessful);\r\n // // console.log(parameterDefinitions);\r\n // // }\r\n\r\n // // close after save\r\n // this.thisDialogRef.close(this.isDirty);\r\n\r\n // });\r\n\r\n // }\r\n // else { // NO need to save any changes\r\n // this.thisDialogRef.close(this.isDirty);\r\n // }\r\n\r\n\r\n\r\n }\r\n\r\n isDisabled(reportDef: ReportDefinition) {\r\n let isDisabled = false;\r\n // disable user parameters where there is a district override\r\n if (!this.isDistrictDefinitions && reportDef.IsDistrictDefinedParameter && reportDef.HasParameterValueDefined == 1) {\r\n isDisabled = true;\r\n }\r\n // if (reportDef.HideChecked) {\r\n // isDisabled = true;\r\n // }\r\n return isDisabled;\r\n }\r\n\r\n isSaveDisabled(reportDef: ReportDefinition) {\r\n let isDisabled = false;\r\n // disable user parameters where there is a district override\r\n if (!this.isDistrictDefinitions && reportDef.IsDistrictDefinedParameter && reportDef.HasParameterValueDefined == 1) {\r\n isDisabled = true;\r\n }\r\n if (reportDef.HideChecked) {\r\n isDisabled = true;\r\n }\r\n return isDisabled;\r\n }\r\n\r\n IsDistrictReportDefinitionsChanged(event: MatRadioChange) {\r\n\r\n // this.selectedReport.IsDistrictReportDefinitions = !this.selectedReport.IsDistrictReportDefinitions;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // // console.log('IsDistrictReportDefinitionsChanged()');\r\n // console.log(event.value);\r\n // // console.log('this.selectedReport.IsDistrictReportDefinitions');\r\n // // console.log(this.selectedReport.IsDistrictReportDefinitions);\r\n // }\r\n\r\n if (event.value == 'true') {\r\n this.isDistrictDefinitions = true;\r\n this.selectedReport.IsDistrictReportDefinitions = true;\r\n }\r\n else {\r\n this.isDistrictDefinitions = false;\r\n this.selectedReport.IsDistrictReportDefinitions = false;\r\n }\r\n // we need to reload the report for appropriate saved report defs\r\n\r\n // this.selectedReport.GetSelectedReportDefintionsOnly = false;\r\n\r\n this.getReportDefinitions();\r\n\r\n // this.selectedReport.Parameters.length = 0;\r\n // this.selectedReport.ReportDefinitions.length = 0;\r\n\r\n\r\n // this.reportService.getReportParameters(-1, this.selectedReport).subscribe(report => {\r\n // this.selectedReport = report; // update the local reference\r\n // });\r\n\r\n\r\n }\r\n\r\n setBackgroundColorForSavedDefinition(repDef: ReportDefinition) {\r\n if (repDef.HideChecked || repDef.SaveChecked) {\r\n if (repDef.IsDistrictDefinedParameter) {\r\n repDef.BackgroundColorForSavedDefinition = this.reportService.backgroundColorForDistrictDefinedDefinition;\r\n }\r\n else if (repDef.IsUserDefinedParameter) {\r\n repDef.BackgroundColorForSavedDefinition = this.reportService.backgroundColorForUserDefinedDefinition;\r\n }\r\n }\r\n else {\r\n repDef.BackgroundColorForSavedDefinition = null;\r\n }\r\n }\r\n\r\n defintionsToConsole() {\r\n console.log(this.reportDefinitions);\r\n console.log('IsDirty: ' + this.isDirty);\r\n }\r\n\r\n selectedReportToConsole() {\r\n console.log(this.selectedReport);\r\n }\r\n\r\n // folderDeleteClick(folder: ReportFolder) {\r\n // this.reportService.reportFolderIdToDelete = folder.Id;\r\n // this.reportService.reportFolderNameToDelete = folder.Name;\r\n // this.deleteReportFolderDialogRef = this.deleteReportFolderDialog.open(DeleteReportFolderComponent, {\r\n // panelClass: 'tyl-mat-dialog',\r\n // disableClose: true\r\n // });\r\n\r\n // this.deleteReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('deleteReportFolderDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result == true) {\r\n // // we need to refresh report folders\r\n\r\n // this.getMyReportFolders();\r\n // }\r\n\r\n // });\r\n // }\r\n\r\n // addFolderClick() {\r\n\r\n // this.addReportFolderDialogRef = this.addReportFolderDialog.open(AddReportFolderComponent, {\r\n // panelClass: 'tyl-mat-dialog',\r\n // disableClose: true\r\n // });\r\n\r\n // this.addReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('addReportFolderDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result == true) {\r\n // // we need to refresh report folders\r\n\r\n // this.getMyReportFolders();\r\n // }\r\n\r\n // });\r\n\r\n\r\n // }\r\n\r\n // getMyReportFolders(): void {\r\n // this.reportService.getMyReportFolders().subscribe(folders => {\r\n // this.reportFolders = folders;\r\n // this.reportService.ReportFolders = this.reportFolders;\r\n\r\n // });\r\n // }\r\n\r\n\r\n // closeClick() {\r\n // // this.getMyReportFolders();\r\n // this.thisDialogRef.close(this.isDirty);\r\n // }\r\n\r\n\r\n // saveFolderReports(selectedFolderIds: number[]) {\r\n\r\n // // // we need to save the report folders\r\n // // this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n // // this.thisDialogRef.close('Folders Saved');\r\n // // });\r\n // }\r\n\r\n legendClick() {\r\n this.reportLegendDialogRef = this.reportLegendDialog.open(ReportLegendComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n }\r\n\r\n howToClick() {\r\n this.howToDialogRef = this.howToDialog.open(ReportOptionsHowToComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n }\r\n\r\n\r\n}","export class DataSource {\r\n Id: string;\r\n TextField: string;\r\n ValueField: string;\r\n IsSelected: boolean;\r\n}\r\n\r\n","import { Report } from './report.model';\r\n\r\nexport class ReportFolder {\r\n Description: string;\r\n Id: number;\r\n Name: string;\r\n Reports: Report[];\r\n ReportInFolder: boolean;\r\n IsDetailRowExpanded: boolean;\r\n Order: number;\r\n}","import { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { CourseTerm } from '../../../student360/student-schedule/course-term.model';\r\nimport { TeacherPreview } from './teacher-preview.model';\r\nexport class ReportParameterV9 {\r\n IsCriteriaChange: boolean;\r\n ReportTitle: string;\r\n isValueChange: boolean;\r\n isReportList: boolean;\r\n PrintDate: string;\r\n AttendanceDate = '';\r\n FromPeriod: number;\r\n ToPeriod: number;\r\n Week1Date = '';\r\n Week2Date = '';\r\n TermId: number;\r\n radValue: string;\r\n SkipLineBetweenStudent = false;\r\n PrintWithGreyHeading = false;\r\n PrintStudentAbsencesAlreadyEntered = false;\r\n PrintTeacherSignatureLine = false;\r\n OtherFields: Lookup[];\r\n Terms: CourseTerm[];\r\n OtherField: string;\r\n Select: boolean;\r\n ReportGridData: TeacherPreview[];\r\n selectAllReportGridData: boolean;\r\n PrintAdds = false;\r\n PrintComment = false;\r\n blnCalledFrom360 = true;\r\n \r\n AddTermAll() {\r\n const term = new CourseTerm();\r\n term.Id = 0;\r\n term.LongDescription = ' All Terms';\r\n this.Terms.push(term);\r\n }\r\n\r\n\r\n\r\n}\r\n","import { V9ReportParameter } from './v9-report-parameter.model';\r\n\r\nexport class ReportV9 {\r\n Id: number;\r\n ParentId: number;\r\n Description: string;\r\n ReportName: string;\r\n ReportTitle: string;\r\n ReportType: number;\r\n Active: boolean;\r\n WorkflowReport: boolean;\r\n MinimumStudentsForWorkflow: number;\r\n ReportParameterClassName: string;\r\n StudentIds: string;\r\n ReportsList: ReportV9[];\r\n ReportParameters: V9ReportParameter[];\r\n ReportValue: number;\r\n SchoolId: number;\r\n YearId: number;\r\n SiteSectionId: number;\r\n\r\n // Non DTO Field..\r\n IsSelected = false;\r\n checkRowIndeterminate = false;\r\n}\r\n","\r\nimport { AutoRunSnapshot } from './auto-run-report-snapshots.model';\r\nimport { ParameterDependency } from './parameter-dependency.model';\r\nimport { ReportParameter } from './report-parameter.model';\r\nimport { ReportDefinition } from './report-definition.model';\r\nimport { StudentDigitalContent } from '../../../student360/student-digital-content/models/student-digital-content.model';\r\n// import { StudentDocuments} from '../../../shared-components/student/student-documents.model';\r\nimport { Portfolio } from '../../../student360/portfolio/portfolio.model';\r\nimport { DocumentArchivePermissions } from './document-archive-permissions.model';\r\nimport { ReportBatch } from './report-batch.model';\r\n\r\nexport class Report {\r\n Id: number;\r\n Name: string;\r\n Procedure: string;\r\n Type: string;\r\n URL: string;\r\n AutoRun: string;\r\n AutoRunReport: boolean;\r\n AutoRunSchedule_ID: number;\r\n AutoRunFrequency: number;\r\n AutoRunDate: Date;\r\n AutoRunTime: string;\r\n AutoRunDay: string;\r\n Snapshots: AutoRunSnapshot[];\r\n ReportFolder: string;\r\n ReportFormat: string;\r\n Parameters: ReportParameter[];\r\n Dependencies: ParameterDependency[];\r\n ReportDefinitions: ReportDefinition[];\r\n IsSysGen: number;\r\n ShowReportOptions: boolean;\r\n SendToEmail: boolean;\r\n IsDistributeByEmail: boolean;\r\n EmailFrom: string;\r\n EmailsToSendReport: string;\r\n EmailSubject: string;\r\n EmailBody: string;\r\n IsDistrictReportDefinitions: boolean;\r\n GetSelectedReportDefintionsOnly: boolean;\r\n AllowAutoRun: boolean;\r\n AllowTCMArchiving: boolean;\r\n AllowStudentDigitalContent: boolean;\r\n AllowStudentPortfolio: boolean;\r\n // properties from services to attempt to pre-populate certain parameters in the DTO\r\n SelectedSubjectId: number;\r\n SelectedSubjectCode: string;\r\n SelectedSectionId: number;\r\n SelectedSectionName: string;\r\n SelectedStudentId: number;\r\n\r\n // UseReportDefinitions: boolean;\r\n // ParameterRows: ParameterRow[];\r\n // WeeklyTime: string;\r\n // DailyTime\r\n\r\n // archive properties:\r\n IsArchiveReport: boolean;\r\n\r\n StudentDigitalContent: StudentDigitalContent;\r\n HasUniqueStudentParameter: boolean;\r\n HasDistributeByEmailParameter: boolean;\r\n\r\n StudentPortfolio: Portfolio; // StudentDocuments;\r\n\r\n ArchiveToTCM: boolean; // when they click to save to TCM\r\n TCM_DocumentType: string;\r\n\r\n ShowArchiveToPdfButton: boolean;\r\n DocumentArchivePermissions: DocumentArchivePermissions[];\r\n\r\n // parameter groups\r\n\r\n UseParameterGroups: boolean; // so I can turn off this functionality until I get all of the parts into place -- ONE-2400\r\n\r\n // parameter formatting\r\n\r\n UseParameterFormatting: boolean; // so I can turn off this functionality until I get all of the parts into place -- ONE-2400\r\n\r\n ReportBatch: ReportBatch;\r\n ArchiveToStudentPortfolio: boolean;\r\n ArchiveToStudentDigitalContent: boolean;\r\n\r\n QueryString: string;\r\n Login_ID: number;\r\n\r\n UtilizeTranscriptTracking: boolean;\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { V9ReportParameter } from './v9-report-parameter.model';\r\n\r\nexport class V9ParameterRow {\r\n Parameters: V9ReportParameter[] = [];\r\n IncludeLineAtStartOfGroup: boolean;\r\n IncludeLineAtEndOfGroup: boolean;\r\n}\r\n\r\nexport class V9ParameterRows {\r\n Rows: V9ParameterRow[] = [];\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { AutoRunSnapshot } from '../models/auto-run-report-snapshots.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'DeleteSnapshot',\r\n templateUrl: './confirm-delete-snapshot.component.html',\r\n styleUrls: ['./confirm-delete-snapshot.component.css']\r\n})\r\n\r\nexport class ConfirmDeleteSnapshotComponent implements OnDestroy {\r\n\r\n // private reportService: ReportingService;\r\n\r\n // @Output() deleteSnapshotEvent: EventEmitter = new EventEmitter();\r\n\r\n private snapshotToDelete: AutoRunSnapshot;\r\n\r\n private _reportName: string;\r\n private _autoRunDate: Date;\r\n\r\n get reportName(): string {\r\n return this._reportName;\r\n }\r\n\r\n set reportName(value: string) {\r\n this._reportName = value;\r\n }\r\n\r\n get autoRunDate(): Date {\r\n return this._autoRunDate;\r\n }\r\n\r\n set autoRunDate(value: Date) {\r\n this._autoRunDate = value;\r\n }\r\n\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n\r\n this.snapshotToDelete = reportService.autoRunSnapshot;\r\n\r\n this.autoRunDate = this.snapshotToDelete.TimeStamp;\r\n this.reportName = this.snapshotToDelete.ReportName;\r\n }\r\n\r\n okClick() {\r\n\r\n const snapshotId = this.snapshotToDelete.AutoRunReportSnapshots_ID;\r\n\r\n this.reportService.deleteReportSnapshot(snapshotId).subscribe(res => {\r\n\r\n // todo: check that the delete was successful\r\n this.reportService.autoRunSnapshot = null;\r\n // this.deleteSnapshotEvent.emit(true);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n\r\n // }\r\n });\r\n\r\n // flag that a snapshot was deleted and a reload is needed after close\r\n this.reportService.snapshotDeleted = true;\r\n this.dialogRef.close(snapshotId);\r\n }\r\n\r\n cancelClick() {\r\n // this.deleteSnapshotEvent.emit(false);\r\n this.dialogRef.close();\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n}","
\r\n
Delete Snapshot
\r\n
\r\n \r\n \r\n
This will delete the snapshot of {{reportName}} taken {{autoRunDate|date:'MM/dd/yy\r\n HH:mm a'}}.\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n ","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n\r\n@Pipe({\r\n name: 'reportInFolderFilter',\r\n pure: false\r\n})\r\nexport class ReportInFolderFilter implements PipeTransform {\r\n\r\n transform(reports, reportSearch): any {\r\n if (reports != null) {\r\n return reports.filter(\r\n\r\n report =>\r\n reportSearch == undefined || reportSearch == 'All' || report.ReportFolder == reportSearch\r\n );\r\n\r\n }\r\n // console.log('reportsFilter class');\r\n }\r\n\r\n\r\n\r\n\r\n // code from angular js\r\n // return function (reports, folder) {\r\n // var filteredReports = [];\r\n // if (reports != null) {\r\n // reports.forEach(function (report) {\r\n // if (folder == null || _.findWhere(folder.Reports, { Id: report.Id }) != null) {\r\n // if (_.findWhere(filteredReports, { Id: report.Id }) == null)\r\n // filteredReports.push(report);\r\n // }\r\n // })\r\n // }\r\n // return filteredReports;\r\n // }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { AutoRunSnapshot } from '../models/auto-run-report-snapshots.model';\r\n\r\n@Pipe({\r\n name: 'snapshotInFolderFilter',\r\n pure: false\r\n})\r\nexport class SnapshotInFolderFilter implements PipeTransform {\r\n\r\n transform(snapshots: AutoRunSnapshot[], folderSearch: string, reportSearch: string): AutoRunSnapshot[] {\r\n // console.log(snapshots);\r\n // console.log(folderSearch);\r\n // console.log(reportSearch);\r\n\r\n if (snapshots != null) {\r\n return snapshots.filter(\r\n\r\n snapshot =>\r\n (folderSearch == undefined || folderSearch == 'All' || snapshot.FolderName == folderSearch)\r\n && (reportSearch == undefined || reportSearch == 'All' || snapshot.ReportName == reportSearch)\r\n );\r\n\r\n }\r\n }\r\n\r\n\r\n}","

Report Snapshots

\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {{Folder.Name}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{Report.Name}} \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
FolderReportSnapshot TakenErrorActions
{{Snapshot.FolderName}}{{Snapshot.ReportName}}{{Snapshot.TimeStamp|date:'MM/dd/yy\r\n HH:mm a'}}{{Snapshot.Error}}\r\n \r\n Delete\r\n \r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n \r\n \r\n","import { Component, OnInit, OnDestroy, Input, Injectable } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\n// import { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\n// import { MyReportsComponent } from '../my-reports/my-reports.component';\r\nimport { AutoRunSnapshot } from '../models/auto-run-report-snapshots.model';\r\n\r\nimport { ConfirmDeleteSnapshotComponent } from './confirm-delete-snapshot.component';\r\n\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportSnapshots',\r\n templateUrl: './report-snapshots.component.html',\r\n styleUrls: ['./report-snapshots.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ReportSnapshotsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() confirmDeleteSnapshot: boolean;\r\n\r\n thisDialogRef: MatDialogRef;\r\n deleteSnapshotDialogRef: MatDialogRef;\r\n\r\n selectedReport: Report;\r\n // selectedReportModuleId: number;\r\n // ReportModules: ReportModule[];\r\n IsReportSearch: boolean;\r\n allSnapshots: AutoRunSnapshot[] = [];\r\n selectedFolderId: number;\r\n selectedFolderName: string;\r\n\r\n\r\n SelectedSnapshotFolder: ReportFolder;\r\n // SelectedSnapshotReport: Report;\r\n\r\n reportFolders: ReportFolder[] = [];\r\n\r\n allReports: Report[] = [];\r\n sortedReports: Report[] = [];\r\n\r\n // get sortedDistinctReports(): Report[] {\r\n\r\n // const distinctReports: number[] = [];\r\n // const unsortedDistinctReports: Report[] = [];\r\n\r\n // for (let i = 0; i < this.allReports.length; i++) {\r\n // // if (!distinctReports.includes(this.allReports[i].IsSysGen)) {\r\n // // distinctReports.push(this.allReports[i].IsSysGen);\r\n // // unsortedDistinctReportNames.push(this.allReports[i].Name);\r\n // // }\r\n // if (this.selectedFolderName == 'All') {\r\n // if (unsortedDistinctReports.find(r => r.Name == this.allReports[i].Name) == undefined) {\r\n // unsortedDistinctReports.push(this.allReports[i]);\r\n // }\r\n // }\r\n // else {\r\n // unsortedDistinctReports.push(this.allReports[i]);\r\n // }\r\n // }\r\n\r\n // // console.log(unsortedDistinctReportNames.sort());\r\n\r\n // this.sortedReports = unsortedDistinctReports.sort(this.compare);\r\n\r\n\r\n // return this.sortedReports;\r\n // }\r\n\r\n snapshotCheckAll = false;\r\n\r\n constructor(\r\n reportSnapshotsDialogRef: MatDialogRef,\r\n private deleteSnapshotDialog: MatDialog,\r\n private reportService: ReportingService,\r\n private loginService: LoginService\r\n ) {\r\n\r\n this.thisDialogRef = reportSnapshotsDialogRef;\r\n this.selectedReport = reportService.SelectedReport;\r\n this.IsReportSearch = false;\r\n // this.allSnapshots = this.selectedReport.Snapshots;\r\n // this.reportFolders = reportService.ReportFolders;\r\n this.selectedFolderId = reportService.selectedReportFolderId;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // reset this flag when coming back to snapshots\r\n this.reportService.snapshotDeleted = false;\r\n // we need to include the 'All' folder\r\n\r\n const allFolder = new ReportFolder();\r\n allFolder.Id = 0;\r\n allFolder.Name = 'All';\r\n allFolder.Order = -1;\r\n allFolder.Reports = [];\r\n this.reportFolders.push(allFolder); // we want this one first in the array\r\n\r\n const allReport = new Report();\r\n allReport.Id = 0;\r\n allReport.Name = 'All';\r\n allReport.ReportFolder = 'All';\r\n this.allReports.push(allReport);\r\n\r\n // we only want folders with reports AND SNAPSHOTS\r\n const reportFoldersWithReports: ReportFolder[] = [];\r\n for (let f = 0; f < this.reportService.ReportFolders.length; f++) {\r\n if (this.reportService.ReportFolders[f].Reports.length > 0) {\r\n let reportHasSnapshot = false;\r\n for (let r = 0; r < this.reportService.ReportFolders[f].Reports.length; r++) {\r\n if (this.reportService.ReportFolders[f].Reports[r].Snapshots.length > 0) {\r\n reportHasSnapshot = true;\r\n }\r\n }\r\n if (reportHasSnapshot) {\r\n reportFoldersWithReports.push(this.reportService.ReportFolders[f]);\r\n }\r\n }\r\n }\r\n\r\n // this.reportFolders = this.reportFolders.concat(this.reportService.ReportFolders);\r\n this.reportFolders = this.reportFolders.concat(reportFoldersWithReports);\r\n\r\n // we need to include the 'All' report option\r\n\r\n // const allReport = new Report();\r\n // allReport.Id = 0;\r\n // allReport.Name = 'All';\r\n // allReport.ReportFolder = 'All';\r\n // this.allReports.unshift(allReport); // we want this one first in the array\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.reportService.ReportFolders);\r\n console.log(this.reportFolders);\r\n }\r\n\r\n // i is starting at 1 to avoid the 'All' folder\r\n for (let i = 1; i < this.reportFolders.length; i++) {\r\n if (this.reportFolders[i].Id == this.selectedFolderId) {\r\n this.SelectedSnapshotFolder = this.reportFolders[i];\r\n this.selectedFolderName = this.reportFolders[i].Name;\r\n }\r\n for (let r = 0; r < this.reportFolders[i].Reports.length; r++) {\r\n\r\n // we only want reports with saved snapshots\r\n if (this.reportFolders[i].Reports[r].Snapshots.length == 0) {\r\n continue;\r\n }\r\n\r\n // we need to add the report to the 'All' folder\r\n const report = this.reportFolders[i].Reports[r];\r\n // report.ReportFolder = 'All';\r\n // this.reportFolders[0].Reports.push(report);\r\n this.reportFolders[0].Reports.push(this.getReportForAllFolder(report));\r\n\r\n // set the folder in the reports for filtering purposes\r\n this.reportFolders[i].Reports[r].ReportFolder = this.reportFolders[i].Name;\r\n\r\n // add reports to 'All' folder\r\n this.allReports.push(this.reportFolders[i].Reports[r]);\r\n\r\n\r\n for (let s = 0; s < this.reportFolders[i].Reports[r].Snapshots.length; s++) {\r\n const snap = this.reportFolders[i].Reports[r].Snapshots[s];\r\n if (this.reportFolders[i].Reports[r].ReportFolder == this.reportFolders[i].Name) {\r\n snap.FolderName = this.reportFolders[i].Name;\r\n snap.ReportName = this.reportFolders[i].Reports[r].Name;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('this.reportFolders[' + i + '].Reports[' + r + '].Snapshots[' + s + ']');\r\n // console.log(snap);\r\n // }\r\n }\r\n this.allSnapshots.push(snap);\r\n\r\n }\r\n\r\n }\r\n // setting All as default when coming from reports menu\r\n if (this.reportService.isReportsMenu) {\r\n this.selectedFolderName = 'All';\r\n this.selectedReport = allReport;\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n // // we need to include the 'All' folder\r\n\r\n // const allFolder = new ReportFolder();\r\n // allFolder.Id = 0;\r\n // allFolder.Name = 'All';\r\n // allFolder.Order = -1;\r\n // this.reportFolders.unshift(allFolder); // we want this one first in the array\r\n\r\n // // we need to include the 'All' report option\r\n\r\n // const allReport = new Report();\r\n // allReport.Id = 0;\r\n // allReport.Name = 'All';\r\n // allReport.ReportFolder = 'All';\r\n // this.allReports.unshift(allReport); // we want this one first in the array\r\n\r\n // const allReport = new Report();\r\n // allReport.Id = 0;\r\n // allReport.Name = 'All';\r\n // allReport.ReportFolder = 'All';\r\n // this.allReports.push(allReport);\r\n\r\n // this.sortedDistinctReports = this.allReports.filter((x, i, a) => x && a.indexOf(x) === i);\r\n\r\n this.getsortedDistinctReports();\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('allSnapshots');\r\n console.log(this.allSnapshots);\r\n console.log('this.reportFolders');\r\n console.log(this.reportFolders);\r\n\r\n console.log('this.allReports');\r\n console.log(this.allReports);\r\n console.log(this.sortedReports);\r\n }\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n getsortedDistinctReports(): Report[] {\r\n\r\n const distinctReports: number[] = [];\r\n const unsortedDistinctReports: Report[] = [];\r\n\r\n\r\n for (let i = 0; i < this.allReports.length; i++) {\r\n // if (!distinctReports.includes(this.allReports[i].IsSysGen)) {\r\n // distinctReports.push(this.allReports[i].IsSysGen);\r\n // unsortedDistinctReportNames.push(this.allReports[i].Name);\r\n // }\r\n\r\n // console.log(unsortedDistinctReports.find(r => r.Name == this.allReports[i].Name));\r\n\r\n if (unsortedDistinctReports.find(r => r.Name == this.allReports[i].Name)) {\r\n\r\n }\r\n else {\r\n unsortedDistinctReports.push(this.allReports[i]);\r\n }\r\n // }\r\n // else {\r\n // unsortedDistinctReports.push(this.allReports[i]);\r\n // }\r\n }\r\n\r\n // console.log(unsortedDistinctReportNames.sort());\r\n\r\n this.sortedReports = unsortedDistinctReports.sort(this.compare);\r\n\r\n\r\n return this.sortedReports;\r\n }\r\n\r\n\r\n\r\n compare(a: Report, b: Report) {\r\n return a.Name.localeCompare(b.Name);\r\n // if (a.last_nom < b.last_nom)\r\n // return -1;\r\n // if (a.last_nom > b.last_nom)\r\n // return 1;\r\n // return 0;\r\n }\r\n\r\n // objs.sort(compare);\r\n\r\n isSnapshotVisible(snap: AutoRunSnapshot): boolean {\r\n let isVisible = false;\r\n if (\r\n (snap.FolderName == this.selectedFolderName\r\n && snap.ReportName == this.selectedReport.Name)\r\n ||\r\n (this.selectedFolderName == 'All' && snap.ReportName == this.selectedReport.Name)\r\n ||\r\n (this.selectedFolderName == 'All' && this.selectedReport.Name == 'All')\r\n ) {\r\n isVisible = true;\r\n }\r\n return isVisible;\r\n }\r\n\r\n snapshotCheckAllClick(event?: boolean) {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // // console.log(event);\r\n // console.log(this.snapshotCheckAll);\r\n // console.log(this.allSnapshots);\r\n // }\r\n\r\n for (let i = 0; i < this.allSnapshots.length; i++) {\r\n\r\n // we only want to check the visible checkboxes!\r\n if (this.isSnapshotVisible(this.allSnapshots[i])) {\r\n this.allSnapshots[i].IsSelected = this.snapshotCheckAll;\r\n }\r\n else {\r\n this.allSnapshots[i].IsSelected = false;\r\n }\r\n\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.allSnapshots);\r\n }\r\n }\r\n\r\n snapshotCheckClick(snap: AutoRunSnapshot, event?: boolean) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n // console.log(event);\r\n console.log(this.snapshotCheckAll);\r\n console.log(this.allSnapshots);\r\n }\r\n // uncheck the All checkbox if ANY checkbox is unselected\r\n for (let i = 0; i < this.allSnapshots.length; i++) {\r\n\r\n if (!this.allSnapshots[i].IsSelected) {\r\n this.snapshotCheckAll = false; // uncheck All\r\n break;\r\n }\r\n }\r\n\r\n // we need to check the ALL checkbox if ALL other checkboxes are checked\r\n\r\n let allCheckBoxesAreChecked = true;\r\n\r\n\r\n for (let i = 0; i < this.allSnapshots.length; i++) {\r\n if (!this.allSnapshots[i].IsSelected) {\r\n allCheckBoxesAreChecked = false;\r\n break;\r\n }\r\n }\r\n\r\n this.snapshotCheckAll = allCheckBoxesAreChecked;\r\n\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('snapshotCheckClick() END:');\r\n console.log(this.snapshotCheckAll);\r\n }\r\n\r\n }\r\n\r\n getReportForAllFolder(report: Report) {\r\n let newReport: Report;\r\n newReport = report;\r\n report.ReportFolder = 'All';\r\n return newReport;\r\n }\r\n\r\n\r\n selectedFolderChanged() {\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.SelectedSnapshotFolder);\r\n console.log(this.selectedFolderName);\r\n console.log(this.allReports);\r\n }\r\n\r\n // default the reports to All??\r\n for (let i = 0; i < this.allReports.length; i++) {\r\n if (this.allReports[i].Name == 'All') {\r\n this.selectedReport = this.allReports[i];\r\n }\r\n }\r\n\r\n if (this.selectedFolderName == 'All') {\r\n // this.currencies = curr.filter((x, i, a) => x && a.indexOf(x) === i);\r\n }\r\n }\r\n\r\n getReportSnapshot(snap: AutoRunSnapshot) {\r\n\r\n this.reportService.getReportSnapshot(snap.AutoRunReportSnapshots_ID).subscribe(res => {\r\n\r\n // allow user to download the PDF\r\n ReportingService.saveFile(res, 'application/pdf', snap.ReportName + '.pdf');\r\n // dataBase64\r\n\r\n });\r\n\r\n }\r\n\r\n // deleteSelectedSnapshotsClick() {\r\n\r\n // }\r\n\r\n snapshotDeleteClick(snap: AutoRunSnapshot) {\r\n\r\n // todo: confirm delete\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('snapshotDeleteClick()');\r\n console.log(this.confirmDeleteSnapshot);\r\n }\r\n\r\n this.reportService.autoRunSnapshot = snap;\r\n this.deleteSnapshotDialogRef = this.deleteSnapshotDialog.open(ConfirmDeleteSnapshotComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n\r\n this.deleteSnapshotDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('deleteSnapshotAfterClosed()');\r\n console.log(result);\r\n console.log(this.selectedReport);\r\n\r\n }\r\n\r\n // now lets remove it from our array\r\n for (let i = 0; i < this.allSnapshots.length; i++) {\r\n if (this.allSnapshots[i].AutoRunReportSnapshots_ID == result) {\r\n this.allSnapshots.splice(i, 1);\r\n }\r\n }\r\n });\r\n\r\n\r\n // this.reportService.deleteReportSnapshot(snap.AutoRunReportSnapshots_ID).subscribe(res => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n\r\n // }\r\n // });\r\n\r\n\r\n\r\n }\r\n\r\n deleteSnapshotAfterClosed() {\r\n\r\n this.deleteSnapshotDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('deleteSnapshotAfterClosed()');\r\n console.log(result);\r\n console.log(this.selectedReport);\r\n }\r\n });\r\n }\r\n\r\n // snapshotFilter() {\r\n\r\n // }\r\n\r\n // getReportModules() {\r\n\r\n // }\r\n\r\n\r\n closeClick() {\r\n this.thisDialogRef.close(this.reportService.snapshotDeleted);\r\n }\r\n\r\n} // end class","
\r\n

My Reports

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n In this area you can create, view, and maintain your own set of report folders to\r\n organize reports and\r\n identify\r\n the reports you use most often for quick access.
The first step is to select the Add\r\n Entry icon in\r\n the bottom\r\n bar to create your first report folder.\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{ReportFolders.Name}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
ReportSnapshotsAuto-RunActions
\r\n {{Report.Name}}\r\n \r\n \r\n {{Report.Snapshots.length}}\r\n \r\n \r\n {{Report.AutoRun}}\r\n \r\n \r\n\r\n
\r\n \"Actions\"\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Application Area\r\n \r\n \r\n {{rf.Description}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {{rpt.Description}}\r\n
\r\n
\r\n
\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, OnInit, OnDestroy, Input } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { LoginService } from '../../login/login.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginSettings } from '../../login/LoginSetting.model';\r\n\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\nimport { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { ReportSettingsFoldersComponent } from '../report-settings/report-settings.folders.component';\r\nimport { ReportSnapshotsComponent } from '../report-snapshots/report-snapshots.component';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { ReportSettingsAutoRunComponent } from '../report-settings/report-settings-autorun.component';\r\nimport { ReportOptionsComponent } from '../definitions/report-options.component';\r\nimport { ReportAutoRunMessageComponent } from '../report-settings/report-autorun-message.component';\r\nimport { ReportV9 } from '../models/report-v9.model';\r\nimport { ManualEntryRostersComponent } from '../V9/manual-entry-rosters/manual-entry-rosters.component';\r\nimport { ClassListAllComponent } from '../V9/class-list-all/class-list-all.component';\r\nimport { TeacherSummaryPreviewComponent } from '../V9/teacher-summary-preview/teacher-summary-preview.component';\r\nimport { GradebookProgessReportComponent } from '../V9/gradebook-progress-report/gradebook-progress-report.component';\r\nimport { ClassListAllAttendanceNotMarkedComponent } from '../V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component';\r\nimport { AttendanceHistoryByClassComponent } from '../V9/attendance-history-by-class/attendance-history-by-class.component'; // ONE-4251\r\nimport { GradebookAssignmentsByStandardComponent } from '../V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component';\r\nimport { v9ReportParameterName } from '../reporting.service';\r\nimport { ReportTemplateClassListComponent } from '../V9/report-template-class-list/report-template-class-list.component';\r\nimport { GradebookByClassGridComponent } from '../V9/gradebook-by-class-grid/gradebook-by-class-grid.component';\r\nimport { System } from '../../../shared-components/System';\r\nimport { V9ReportParametersComponent } from '../V9/parameters/v9-report-parameters.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'myReports',\r\n templateUrl: './my-reports.component.html',\r\n styleUrls: ['./my-reports.component.css'],\r\n // Animation for when the detail row is expanded or collapsed\r\n animations: [detailExpand]\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class MyReportsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() expandAllFolders: boolean;\r\n @Input() refreshedReportFolders: boolean;\r\n\r\n // @Output() public expandAllEvent = new EventEmitter(); // to send to report settings component\r\n\r\n loginSettings: LoginSettings;\r\n yearService: YearService;\r\n utilizeDistributebyEmail: boolean;\r\n allowAutoRunReport: boolean;\r\n angularMatData = new TylerMatTableDataSource;\r\n columnsToDisplay: string[] = ['More', 'ReportFolderName'];\r\n columnsToDisplayDetailRow: string[] = ['ReportFolderName', 'ReportName', 'ReportSnapshotsLength', 'AutoRun', 'Actions'];\r\n useReportDefinitions: boolean;\r\n reportOptionsDialogRef: MatDialogRef;\r\n manualEntryRostersDialogRef: MatDialogRef;\r\n ClassListAllDialogRef: MatDialogRef;\r\n ClassListAllAttendanceNotMarkedDialogRef: MatDialogRef;\r\n TeacherSummaryPreviewDialogRef: MatDialogRef;\r\n GradebookProgessReportDialogRef: MatDialogRef;\r\n attendanceHistoryByClassDialogRef: MatDialogRef; // ONE-4251\r\n gradebookAssignmentsByStandardDialogRef: MatDialogRef; // ONE-4254\r\n reportTemplateClassListDialogRef: MatDialogRef;\r\n gradebookByClassGridDialogRef: MatDialogRef;\r\n isForSchedule: boolean;\r\n\r\n private _showNoFoldersMessage: boolean;\r\n\r\n get showNoFoldersMessage(): boolean {\r\n return this._showNoFoldersMessage;\r\n // return this.reportingService.showNoFoldersMessage;\r\n }\r\n\r\n set showNoFoldersMessage(value: boolean) {\r\n this._showNoFoldersMessage = value;\r\n this.reportingService.showNoFoldersMessage = value;\r\n }\r\n // expandedRows: number[] = [];\r\n ReportFolders: ReportFolder[] = [];\r\n Reports: ReportV9[] = [];\r\n ReportModules: ReportV9[] = [];\r\n // rowDetailExpand: [number[], boolean];\r\n\r\n\r\n SelectedReport: Report;\r\n reportParametersDialogRef: MatDialogRef;\r\n reportSettingsDialogRef: MatDialogRef;\r\n reportSettingsAutoRunDialogRef: MatDialogRef;\r\n reportSnapshotsDialogRef: MatDialogRef;\r\n reportAutoRunMessageDialogRef: MatDialogRef;\r\n\r\n // enums\r\n v9parameterName = v9ReportParameterName; // parameter name enum\r\n\r\n tylerMatData = new TylerMatTableDataSource();\r\n isExpandAll = false;\r\n columnDisplayV9 = ['More', 'Description'];\r\n\r\n constructor(\r\n private reportingService: ReportingService,\r\n private loginService: LoginService,\r\n private reportParametersDialog: MatDialog,\r\n private reportSettingsDialog: MatDialog,\r\n private reportSettingsAutoRunDialog: MatDialog,\r\n private reportSnapshotsDialog: MatDialog,\r\n private reportOptionsDialog: MatDialog,\r\n private reportAutoRunMessageDialog: MatDialog,\r\n private manualEntryRostersDialog: MatDialog,\r\n private classListAllDialog: MatDialog,\r\n private classListAllAttendanceNotMarkedDialog: MatDialog,\r\n private TeacherSummaryPreviewDialog: MatDialog,\r\n private ReportCardDialog: MatDialog,\r\n private attendanceHistoryByClassDialog: MatDialog, // ONE-4251\r\n private gradebookAssignmentsByStandardDialog: MatDialog, // ONE-4254\r\n private dialog: MatDialog\r\n\r\n ) {\r\n this.loginSettings = loginService.LoginSettings;\r\n this.allowAutoRunReport = this.reportingService.allowAutoRunReport;\r\n this.angularMatData = new TylerMatTableDataSource(this.ReportFolders);\r\n this.useReportDefinitions = reportingService.useReportDefinitions;\r\n this.isForSchedule = this.reportingService.isForSchedule;\r\n\r\n // this.utilizeDistributebyEmail = this.loginSettings.UtilizeDistributebyEmail;\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('MyReportsComponent constructor');\r\n // console.log(this.reportingService.showNoFoldersMessage);\r\n // }\r\n\r\n // this.getMyReportFolders();\r\n\r\n } // end constructor\r\n\r\n ngOnInit() {\r\n if (this.loginSettings.V10 == true) {\r\n this.getMyReportFolders();\r\n } else {\r\n this.getMyV9Reports();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('MyReportsComponent => ngOnDestroy');\r\n // }\r\n }\r\n\r\n loadReportData(): void {\r\n // load data into Angular Material table\r\n this.angularMatData.data = this.ReportFolders;\r\n\r\n // default to expand all folders\r\n this.angularMatData.expandAll(true);\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('loadReportData()');\r\n // }\r\n }\r\n\r\n\r\n expandAllFoldersClick(expandAll: boolean) {\r\n this.expandAllFolders = expandAll;\r\n this.expandAllRows(-1, expandAll);\r\n\r\n // send emitted property to the Angular Material function\r\n this.expandAll(expandAll);\r\n\r\n\r\n // console.log('expandAllFoldersClick: ' + expandAll);\r\n // console.log(this.ReportFolders);\r\n // console.log('expandAllFoldersClick -- END');\r\n\r\n }\r\n\r\n getMyReportFolders(): void {\r\n this.reportingService.getMyReportFolders().subscribe(reportFolders => {\r\n this.ReportFolders = reportFolders;\r\n this.reportingService.ReportFolders = this.ReportFolders;\r\n\r\n if (this.ReportFolders.length > 0) {\r\n this.showNoFoldersMessage = false;\r\n this.reportingService.showNoFoldersMessage = false;\r\n }\r\n else {\r\n this.showNoFoldersMessage = true;\r\n this.reportingService.showNoFoldersMessage = true;\r\n }\r\n\r\n // this.showNoFoldersMessage = this.reportingService.showNoFoldersMessage;\r\n\r\n this.expandAllRows(-1, true);\r\n\r\n this.loadReportData();\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('MyReportsComponent => angularMatData');\r\n // console.log(this.angularMatData);\r\n // console.log('MyReportsComponent => SelectFolders length: ' + this.ReportFolders.length);\r\n // console.log(this.ReportFolders);\r\n // console.log(this.showNoFoldersMessage);\r\n // }\r\n\r\n\r\n\r\n\r\n });\r\n\r\n\r\n // this.showNoFoldersMessage = this.reportingService.showNoFoldersMessage;\r\n }\r\n\r\n getMyV9Reports(): void {\r\n this.reportingService.getV9Reports('TeacherMenu').subscribe(rpt => {\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log(rpt);\r\n }\r\n\r\n // remove progress report for now, can only get to it from the gradebook\r\n let i = 0;\r\n rpt.forEach(f => {\r\n const ri = f.ReportsList.filter(r => r.ReportName != 'GradeBookProgressReport');\r\n if (i >= 0) {\r\n rpt[i].ReportsList = System.convert(ri, new Array());\r\n }\r\n i++;\r\n }\r\n );\r\n\r\n this.Reports = System.convert(rpt, new Array());\r\n\r\n const IsReportsList: boolean = rpt.filter(x => x.ReportsList.length > 0).length > 0;\r\n if (IsReportsList == true) {\r\n this.ReportModules = rpt.filter(x => x.ParentId == 0);\r\n } else {\r\n this.Reports = [];\r\n const obj = new ReportV9();\r\n obj.Id = 0;\r\n obj.ReportsList = rpt;\r\n this.Reports.push(obj);\r\n }\r\n\r\n this.tylerMatData.data = this.Reports;\r\n });\r\n }\r\n\r\n expandAllRows(folderID: number, expandAll: boolean) {\r\n\r\n if (folderID == -1) {\r\n // -1 is ALL folders\r\n for (let f = 0; f < this.ReportFolders.length; f++) {\r\n this.ReportFolders[f].IsDetailRowExpanded = expandAll;\r\n\r\n // this.expandedRows.push(this.ReportFolders[f].Id);\r\n }\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('expandedRows: ' + this. expandedRows);\r\n // }\r\n }\r\n\r\n }\r\n\r\n expandCollapseFolder(reportFolder: ReportFolder) {\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('MyReportsComponent => expandCollapseFolder()');\r\n // console.log(reportFolder);\r\n // }\r\n reportFolder.IsDetailRowExpanded = !reportFolder.IsDetailRowExpanded;\r\n // this.reportingService.ReportFolders[reportFolder.Id].IsDetailRowExpanded = reportFolder.IsDetailRowExpanded;\r\n // this.ReportFolders[folderID].IsDetailRowExpanded = !this.ReportFolders[folderID].IsDetailRowExpanded;\r\n\r\n }\r\n\r\n reportClicked(report) {\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('MyReportsComponent => reportClicked(' + report.Name + ', IsSysGen=' + report.IsSysGen + ')');\r\n // }\r\n\r\n this.reportingService.isFromMenu = false;\r\n\r\n this.reportingService.getReportParameters(-1, report).subscribe(selectedReport => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log(selectedReport);\r\n // }\r\n\r\n this.reportingService.SelectedReport = selectedReport;\r\n this.openReportParametersWindow();\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n openReportParametersWindow() {\r\n this.reportParametersDialogRef = this.reportParametersDialog.open(ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n // this.reportsDialogRef.beforeClose().subscribe(result => {\r\n // console.log('shared/HeaderComponent =>reportsDialogRef.beforeClose()');\r\n // });\r\n\r\n\r\n this.reportParametersDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('myReportsComponent =>reportParametersDialogRef.afterClosed()');\r\n // console.log('reportService.isForSchedule: ' + this.reportingService.isForSchedule.toString());\r\n // console.log('this.isForSchedule: ' + this.isForSchedule.toString());\r\n // }\r\n\r\n if (result > '' && this.isForSchedule == true) {\r\n this.getMyReportFolders();\r\n\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n\r\n reportSettingsClick(report: Report) {\r\n this.reportingService.SelectedReport = report;\r\n this.reportingService.ReportFolders = this.ReportFolders;\r\n this.reportSettingsDialogRef = this.reportSettingsDialog.open(ReportSettingsFoldersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportSettingsDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('myReportsComponent =>reportSettingsDialogRef.afterClosed()');\r\n // }\r\n\r\n if (result > '') {\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n }\r\n\r\n autorunSettingsClick(report: Report) {\r\n\r\n this.reportingService.SelectedReport = report;\r\n this.reportingService.ReportFolders = this.ReportFolders;\r\n this.reportingService.isForSchedule = true;\r\n this.isForSchedule = true;\r\n\r\n // check that allowAutoRunReport (system) and AllowAutoRun(report and that report is in a folder\r\n // if not, show message\r\n if (this.allowAutoRunReport == false || report.AllowAutoRun == false || report.ReportFolder == '') {\r\n this.reportAutoRunMessageDialogRef = this.reportAutoRunMessageDialog.open(ReportAutoRunMessageComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n return;\r\n }\r\n // call report params load and pop up and show autorun setting within\r\n\r\n // we will need to determine if this is a new or existing autorun when populating parameters\r\n\r\n let isExistingAutorun = false;\r\n if (report.AutoRunSchedule_ID > 0) {\r\n // pull saved parameters\r\n isExistingAutorun = true;\r\n }\r\n\r\n this.reportingService.getReportParameters(-1, report, isExistingAutorun).subscribe(selectedReport => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log(selectedReport);\r\n // }\r\n\r\n this.reportingService.SelectedReport = selectedReport;\r\n this.openReportParametersWindow();\r\n\r\n });\r\n\r\n\r\n // this.reportParametersDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('myReportsComponent =>reportParametersDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result > '') {\r\n // this.getMyReportFolders();\r\n // }\r\n // });\r\n\r\n // this.reportSettingsAutoRunDialogRef = this.reportSettingsAutoRunDialog.open(ReportSettingsAutoRunComponent, {\r\n // panelClass: 'tyl-mat-dialog',\r\n // disableClose: true\r\n // });\r\n\r\n // this.reportSettingsAutoRunDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('myReportsComponent =>reportSettingsAutoRunDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result > '') {\r\n // this.getMyReportFolders();\r\n // }\r\n\r\n // });\r\n\r\n }\r\n\r\n reportOptionsClick(report: Report) {\r\n this.reportingService.SelectedReport = report;\r\n this.reportingService.isFromMenu = true;\r\n // this.reportingService.ReportFolders = this.myReportFolders;\r\n\r\n this.reportOptionsDialogRef = this.reportOptionsDialog.open(ReportOptionsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportOptionsDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('AllReportsComponent =>reportOptionsDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result > '') {\r\n // this.getMyReportFolders();\r\n // }\r\n\r\n });\r\n\r\n }\r\n\r\n reportSnapshotsClick(report: Report, folderId: number) {\r\n\r\n // console.log('HEY, IN reportSnapshotsClick()');\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('reportSnapshotsClick()');\r\n // console.log(this.ReportFolders);\r\n // console.log('this.reportingService.ReportFolders');\r\n // console.log(this.reportingService.ReportFolders);\r\n // }\r\n\r\n this.reportingService.SelectedReport = report;\r\n this.reportingService.ReportFolders = this.ReportFolders;\r\n this.reportingService.selectedReportFolderId = folderId;\r\n this.reportSnapshotsDialogRef = this.reportSnapshotsDialog.open(ReportSnapshotsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportSnapshotsDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportingService.inDebugMode) {\r\n // console.log('myReportsComponent =>reportSnapshotsDialogRef.afterClosed()');\r\n // }\r\n\r\n if (result == true) {\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n }\r\n\r\n reportSettingsV9Click(rpt) {\r\n this.reportingService.SelectedReport = rpt;\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log('REPORT CLICKED!');\r\n console.log(rpt);\r\n }\r\n\r\n if (rpt.ReportName == 'ManualEntryRosters') {\r\n this.manualEntryRostersDialogRef = this.manualEntryRostersDialog.open(ManualEntryRostersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - All') {\r\n this.ClassListAllDialogRef = this.classListAllDialog.open(ClassListAllComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateCurrentDayAttendanceByClass' && rpt.ReportTitle == 'Class List - Attendance Not Marked') {\r\n this.ClassListAllAttendanceNotMarkedDialogRef = this.classListAllAttendanceNotMarkedDialog.open(ClassListAllAttendanceNotMarkedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'AttendancePreviewByTeacher') {\r\n this.TeacherSummaryPreviewDialogRef = this.TeacherSummaryPreviewDialog.open(TeacherSummaryPreviewComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'CreateAttendanceHistoryByClass' || rpt.Description == 'Attendance History by Class') {\r\n this.attendanceHistoryByClassDialogRef = this.attendanceHistoryByClassDialog.open(AttendanceHistoryByClassComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else if (rpt.ReportName == 'GradeCommentList') {\r\n\r\n /*\r\n\r\n Public Class pub_clsReportCardCommentParameters\r\n 'Connection String\r\n Public strConnectionString As String = \"\"\r\n 'Report Parameters\r\n Public strReportOutputFile As String = \"\"\r\n Public strReportOutputFolderUNC As String = \"\"\r\n 'Option Based Parameters\r\n Public strReportDate As String = \"\"\r\n Public strReportSiteHeader As String = \"\"\r\n Public strReportTitle As String = \"\"\r\n Public strSiteYearCode As String = \"\"\r\n Public intSiteYearId As Integer = 0\r\n Public strStudentSelectionStatus As String = \"\"\r\n Public strStudentIds As String = \"\"\r\n Public blnPageBreakAfterEachStudent As Boolean = False\r\n End Class\r\n */\r\n\r\n const reportType = 1;\r\n const reportTitle = 'Report Card Comment List';\r\n const reportName = 'GradeCommentList'; // 'CreateReportCardCommentsReport'; // 'GradeCommentList';\r\n\r\n const param = [];\r\n /* eslint-disable no-bitwise */\r\n this.reportingService.addCoreParametersV9\r\n (\r\n param,\r\n reportTitle,\r\n reportType,\r\n // this.v9parameterName.strReportSiteAddress |\r\n this.v9parameterName.strReportDate |\r\n this.v9parameterName.strReportSiteHeader |\r\n this.v9parameterName.strReportTitle |\r\n this.v9parameterName.strSiteYearCode |\r\n this.v9parameterName.lngSiteYearId\r\n // this.v9parameterName.intSiteYearId |\r\n // this.v9parameterName.strOutputFile_NOFILE\r\n // this.v9parameterName.bytReportType ||\r\n // this.v9parameterName.strOutputFile_NOFILE\r\n\r\n );\r\n /* eslint-enable no-bitwise */\r\n\r\n // Public strStudentSelectionStatus As String = \"\"\r\n // Public strStudentIds As String = \"\"\r\n // Public blnPageBreakAfterEachStudent As Boolean = False\r\n\r\n const parameters = [];\r\n const stringifiedParameters = JSON.stringify(param);\r\n parameters.push(stringifiedParameters);\r\n\r\n if (this.reportingService.inDebugMode) {\r\n console.log('REPORT PARAMETERS TO BE RUN:');\r\n console.log(param);\r\n console.log('REPORT PARAMETERS STRINGIFIED:');\r\n console.log(stringifiedParameters);\r\n }\r\n\r\n this.reportingService.openStudentAttachmentReport(0, reportName, '', '', '', parameters, reportType);\r\n\r\n }\r\n else if (rpt.ReportName == 'CreateGradebookAssignmentsByObjectiveReport') {\r\n this.gradebookAssignmentsByStandardDialogRef = this.gradebookAssignmentsByStandardDialog.open(GradebookAssignmentsByStandardComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n }\r\n else {\r\n const v9ReportParametersDialogRef = this.dialog.open(V9ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: { Report: rpt },\r\n minWidth: '50vw',\r\n maxWidth: '100vw',\r\n minHeight: '50vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n v9ReportParametersDialogRef.componentInstance.selectedReport = JSON.parse(JSON.stringify(rpt));\r\n\r\n v9ReportParametersDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined) {\r\n this.getMyV9Reports();\r\n }\r\n });\r\n }\r\n } // end reportSettingsV9Click\r\n\r\n\r\n isEven(folderId) {\r\n return (folderId % 2) === 0;\r\n }\r\n\r\n\r\n closeClick() {\r\n\r\n // this.reportingService.close();\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n // These methods are used to allow calls to the TylerMatTableDataSource methods from the html\r\n toggleExpanded(row: any) {\r\n // Toggles row between expanded and collapsed\r\n if (this.loginSettings.V10 == true) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n else {\r\n this.tylerMatData.toggleExpanded(row);\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n // Return true if expanded and false if collapsed\r\n if (this.loginSettings.V10 == true) {\r\n return this.angularMatData.checkExpanded(row);\r\n } else {\r\n return this.tylerMatData.checkExpanded(row);\r\n }\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // Expand or collapse all rows\r\n // true => expand all false => collapse all\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n if (this.loginService.LoginSettings.V10 == true) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n } else {\r\n this.tylerMatData.rowKeyPress(event, row);\r\n }\r\n\r\n }\r\n\r\n expandAllV9() {\r\n this.isExpandAll = !this.isExpandAll;\r\n for (const row of this.tylerMatData.data) {\r\n row.detailRow = this.isExpandAll;\r\n }\r\n }\r\n\r\n} // end export class MyReports\r\n\r\n\r\n\r\n\r\n","import { ReportParameter } from './report-parameter.model';\r\n\r\nexport class ParameterRow {\r\n Parameters: ReportParameter[] = [];\r\n HasParameterInGroup: boolean;\r\n IncludeGroupLabel: boolean;\r\n Group_ID: number;\r\n MaxNumberOfParameters: number;\r\n Colspan: number;\r\n GroupLabel: string;\r\n IncludeLineAtStartOfGroup: boolean;\r\n IncludeLineAtEndOfGroup: boolean;\r\n AlreadyCheckedForGroupStart: boolean;\r\n AlreadyCheckedForGroupEnd: boolean;\r\n IsStartOfVisibleGroup: boolean;\r\n IsEndOfVisibleGroup: boolean;\r\n\r\n // constructor(parameters: ReportParameter[]) {\r\n // this.Parameters = parameters;\r\n // }\r\n}\r\n\r\n\r\n\r\n\r\n // RowNumber: number;\r\n // ParameterIds: number[] = [];\r\n // NumberOfColumns: number;\r\n","import { ParameterRow } from './parameter-row-model';\r\n\r\nexport class ParameterRows {\r\n Rows: ParameterRow[] = [];\r\n}\r\n","
{{header}}
\r\n\r\n \r\n \r\n\r\n
\r\n Are you sure you want to send this report to the emails listed?\r\n
\r\n If you continue, the report will be sent to the recipient(s) once the report is processed.\r\n
\r\n\r\n
\r\n Are you sure you want to distribute this report to the emails of the student/contact(s) listed?\r\n
{{selectedRecipients}}

\r\n If you continue, this report will be emailed to ALL students/contacts selected. You will receive an email with the results.\r\n
\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n \r\n ","import { Component, OnDestroy, OnInit, } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ReportToEmail',\r\n templateUrl: './confirm-report-to-email.component.html',\r\n styleUrls: ['./confirm-report-to-email.component.css']\r\n})\r\n\r\nexport class ConfirmReportToEmailComponent implements OnDestroy, OnInit {\r\n\r\n\r\n\r\n // private snapshotToDelete: AutoRunSnapshot;\r\n\r\n // private _reportName: string;\r\n // private _autoRunDate: Date;\r\n\r\n // get reportName(): string {\r\n // return this._reportName;\r\n // }\r\n\r\n // set reportName(value: string) {\r\n // this._reportName = value;\r\n // }\r\n\r\n // get autoRunDate(): Date {\r\n // return this._autoRunDate;\r\n // }\r\n\r\n // set autoRunDate(value: Date) {\r\n // this._autoRunDate = value;\r\n // }\r\n\r\n isDistributebyEmail: boolean; // ONE-4387\r\n\r\n selectedRecipients: string;\r\n\r\n header = 'Report to Email';\r\n\r\n constructor(\r\n // private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n ) {\r\n\r\n // this.snapshotToDelete = reportService.autoRunSnapshot;\r\n\r\n // this.autoRunDate = this.snapshotToDelete.TimeStamp;\r\n // this.reportName = this.snapshotToDelete.ReportName;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n this.isDistributebyEmail = this.reportService.isDistributebyEmail;\r\n\r\n\r\n\r\n if (this.reportService.isDistributebyEmail) {\r\n\r\n this.header = 'Distribute By Email';\r\n\r\n }\r\n\r\n this.selectedRecipients = '';\r\n\r\n\r\n if (this.reportService.distributeByEmailOption_StudentSelected) {\r\n this.selectedRecipients += 'Student, ';\r\n }\r\n if (this.reportService.distributeByEmailOption_PrimaryContactSelected) {\r\n this.selectedRecipients += ' Primary Contact, ';\r\n }\r\n if (this.reportService.distributeByEmailOption_AllElectronicContactsSelected) {\r\n this.selectedRecipients += ' All Electronic Contacts, ';\r\n }\r\n\r\n let temp = '';\r\n temp = this.selectedRecipients.substring(0, this.selectedRecipients.length - 2); // remove trailing ,\r\n this.selectedRecipients = temp;\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.isDistributebyEmail);\r\n console.log(this.selectedRecipients);\r\n }\r\n\r\n }\r\n\r\n okClick() {\r\n\r\n // const snapshotId = this.snapshotToDelete.AutoRunReportSnapshots_ID;\r\n\r\n // this.reportService.deleteReportSnapshot(snapshotId).subscribe(res => {\r\n\r\n // // todo: check that the delete was successful\r\n // this.reportService.autoRunSnapshot = null;\r\n // // this.ReportToEmailEvent.emit(true);\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n\r\n // // }\r\n // });\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancelClick() {\r\n // this.ReportToEmailEvent.emit(false);\r\n this.dialogRef.close(false);\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n}","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ReportToEmail',\r\n templateUrl: './confirm-archive-report.component.html',\r\n styleUrls: ['./confirm-archive-report.component.css']\r\n})\r\n\r\nexport class ConfirmArchiveReportComponent implements OnDestroy, OnInit {\r\n\r\n\r\n\r\n // private snapshotToDelete: AutoRunSnapshot;\r\n\r\n private _reportName: string;\r\n // private _autoRunDate: Date;\r\n\r\n get reportName(): string {\r\n return this._reportName;\r\n }\r\n\r\n set reportName(value: string) {\r\n this._reportName = value;\r\n }\r\n\r\n archiveTypes = '';\r\n\r\n // get autoRunDate(): Date {\r\n // return this._autoRunDate;\r\n // }\r\n\r\n // set autoRunDate(value: Date) {\r\n // this._autoRunDate = value;\r\n // }\r\n\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.reportName = this.reportService.SelectedReport.Name;\r\n // if (this.reportService.SelectedReport.StudentDigitalContent != null) {\r\n // this.archiveTypes = this.archiveTypes + 'Student Digital Content\\n';\r\n // }\r\n\r\n // if (this.reportService.SelectedReport.StudentPortfolio != null) {\r\n // this.archiveTypes = this.archiveTypes + 'Student Portfolio\\n';\r\n // }\r\n\r\n // if (this.reportService.SelectedReport.ArchiveToTCM) {\r\n // this.archiveTypes = this.archiveTypes + 'Tyler Content Manager\\n';\r\n // }\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n okClick() {\r\n\r\n // const snapshotId = this.snapshotToDelete.AutoRunReportSnapshots_ID;\r\n\r\n // this.reportService.deleteReportSnapshot(snapshotId).subscribe(res => {\r\n\r\n // // todo: check that the delete was successful\r\n // this.reportService.autoRunSnapshot = null;\r\n // // this.ReportToEmailEvent.emit(true);\r\n\r\n // // if (this.reportService.inDebugMode) {\r\n\r\n // // }\r\n // });\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancelClick() {\r\n // this.ReportToEmailEvent.emit(false);\r\n this.dialogRef.close(false);\r\n }\r\n\r\n\r\n}","
Archive Report
\r\n\r\n \r\n \r\n
\r\n Are you sure you want to archive the report {{reportName}}?\r\n
\r\n If you continue, the report will be archived to your selected destination(s) once the report is through being processed.\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n ","\r\n\r\nexport class ReportBatch {\r\n Id: number;\r\n TotalNumberOfStudents: number;\r\n NumberOfStudentsCompleted: number;\r\n BatchDescription: string;\r\n ReportName: string;\r\n IsSysGen: number;\r\n AddedByLogin_Id: number;\r\n AddedOn: Date;\r\n AddedByName: string;\r\n ErrorMessage_Id: number;\r\n HasError: boolean;\r\n ErrMsg = '';\r\n ProcessingDescription: string;\r\n Cancel: boolean;\r\n InProcess: boolean;\r\n OperationDescriptions: string;\r\n Operations: ReportBatchOperation[] = [];\r\n RemoveArchivedFiles: boolean;\r\n ShowTotalNumberOfStudents: boolean;\r\n // SkipActuallyArchivingReport = false; // for testing process without actually pushing report out\r\n\r\n AddedOnDate_Display: string;\r\n AddedOnTime_Display: string;\r\n\r\n viewArchiveProcessesFromAllUsers: boolean;\r\n allowCancelArchiveProcesses: boolean;\r\n allowDeleteArchivedReports: boolean;\r\n\r\n sendEmailNotification: boolean;\r\n DistributeByEmailOption: string; // comma delimited string, 1 = Student, 2 = PrimaryContact, 3 = AllElectronicContacts\r\n\r\n EmailFrom: string;\r\n EmailsToSendReport: string;\r\n EmailSubject: string;\r\n EmailBody: string;\r\n}\r\n\r\nexport class ReportBatchOperation {\r\n Batch_Id: number;\r\n Operation_Id: number;\r\n OperationOrder: number;\r\n OperationDescription: string;\r\n ProcessingDescription: string;\r\n CurrentStudent_Id: number;\r\n ErrorMessage_Id: number;\r\n HasError: boolean;\r\n ErrMsg = '';\r\n // RemoveArchivedFiles: boolean;\r\n}\r\n\r\n","
\r\n Archive Report\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n {{reportName}}
\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n Archive in Student Digital Content\r\n \r\n \r\n \r\n \r\n \r\n {{type.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n \r\n Archive in Student Portfolio\r\n \r\n \r\n \r\n \r\n \r\n {{category.StuPortCategoryName}}\r\n \r\n \r\n \r\n
\r\n \r\n Archive in Tyler Content Manager\r\n \r\n \r\n \r\n \r\n \r\n {{docType.TextField}}\r\n \r\n \r\n \r\n
\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n '' && allowArchiveToStudentPortfolio\" style=\"width:100%;\">\r\n\r\n \r\n\r\n\r\n \r\n\r\n\r\n
\r\n \r\n Send Email Notifications (Only for Student Portfolio)\r\n \r\n\r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Send emails to:\r\n \r\n \r\n Student\r\n \r\n \r\n Primary Contact\r\n \r\n \r\n All Electronic Contacts\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, ViewChild, Inject, ElementRef } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n// import { StudentDigitalContentService } from '../student-digital-content.service';\r\n// import { StudentDigitalContent } from '../models/student-digital-content.model';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\n\r\nimport { StudentDigitalContent } from '../../../student360/student-digital-content/models/student-digital-content.model';\r\nimport { Portfolio } from '../../../student360/portfolio/portfolio.model';\r\nimport { PortfolioService } from '../../../student360/portfolio/portfolio.service';\r\n\r\nimport { ReportingService } from '../reporting.service';\r\n// import { AnyARecord } from 'dns';\r\n\r\nimport { DataSource } from '../models/data-source.model';\r\nimport { ConfirmArchiveReportComponent } from './confirm-archive-report.component';\r\nimport { ArchiveProcessComponent } from './archive-process.component';\r\nimport { ReportBatch } from '../models/report-batch.model';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { Report } from '../models/report.model';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'archive-report-modal',\r\n templateUrl: './archive-report-modal.component.html'\r\n})\r\n\r\nexport class ArchiveReportModalComponent implements OnInit {\r\n\r\n studentDigitalContent: StudentDigitalContent;\r\n studentPortfolio: Portfolio;\r\n\r\n documentTypeIdString: string;\r\n descriptionString: string;\r\n fileNameString: string;\r\n portfolioCategories: any[];\r\n fileCategoryId: number;\r\n\r\n newFile: boolean;\r\n fileError: boolean;\r\n documentTypes: Lookup[] = [];\r\n errors: ErrorList[] = [];\r\n\r\n selectedTCMdocument: string;\r\n tcmDocumentTypes: DataSource[] = [];\r\n reportName: string;\r\n batchDescription: string;\r\n MailServer: string;\r\n selectedReport: Report;\r\n sendEmailStudent: boolean;\r\n sendEmailPrimaryContact: boolean;\r\n sendEmailAllElectronicContacts: boolean;\r\n sendEmailNotification: boolean;\r\n\r\n emailBody = '';\r\n emailSubject = '';\r\n emailFrom = '';\r\n\r\n\r\n @ViewChild('fileNameInput', { read: ElementRef, static: true }) fileNameInput: ElementRef;\r\n @ViewChild('documentTypeInput', { read: ElementRef, static: true }) documentTypeInput: ElementRef;\r\n @ViewChild('fileCategoryInput', { read: ElementRef, static: true }) fileCategoryInput: ElementRef;\r\n @ViewChild('documentTypeTCMInput', { read: ElementRef, static: true }) documentTypeTCMInput: ElementRef;\r\n @ViewChild('EmailSubjectRef', { read: ElementRef }) emailSubjectRef: ElementRef;\r\n @ViewChild('EmailFromRef', { read: ElementRef }) emailFromRef: ElementRef;\r\n\r\n\r\n\r\n confirmArchiveReportDialogRef: MatDialogRef;\r\n archiveProcessDialogRef: MatDialogRef;\r\n\r\n // @ViewChild(AddFileComponent) addFile;\r\n\r\n showErrorMustSelectStudent = false;\r\n studentInfo = '';\r\n\r\n archiveToStudentDigitalContent = false;\r\n archiveToStudentPortfolio = false;\r\n archiveToTCM = false;\r\n\r\n // archiveToStudentDigitalContent_touched = false;\r\n // archiveToStudentPortfolio_touched = false;\r\n // archiveToTCM_touched = false;\r\n\r\n // archiveToStudentDigitalContent_touched_count = 0;\r\n // archiveToStudentPortfolio_touched_count = 0;\r\n // archiveToTCM_touched_count = 0;\r\n\r\n allowArchiveToStudentDigitalContent = false;\r\n allowArchiveToStudentPortfolio = false;\r\n allowArchiveToTCM = false;\r\n\r\n isForSchedule: boolean;\r\n\r\n\r\n constructor(private yearService: YearService,\r\n private lookupService: LookupService,\r\n private portfolioService: PortfolioService,\r\n private reportService: ReportingService,\r\n private loginService: LoginService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n // private studentService: StudentService,\r\n private dialogRef: MatDialogRef,\r\n // private confirmArchiveReportDialogRef: MatDialogRef,\r\n private confirmArchiveReportDialog: MatDialog,\r\n private archiveProcessDialog: MatDialog,\r\n ) {\r\n this.MailServer = this.loginService.LoginSettings.MailServer;\r\n }\r\n\r\n ngOnInit() {\r\n // this.studentDigitalContent = this.data.studentDigitalContent;\r\n\r\n this.reportName = this.reportService.SelectedReport.Name;\r\n this.selectedReport = this.reportService.SelectedReport;\r\n // this.selectedReport.EmailBody = '';\r\n this.emailFrom = this.selectedReport.EmailFrom;\r\n this.emailSubject = this.reportName;\r\n\r\n this.isForSchedule = false; // this.reportService.i\r\n this.allowArchiveToStudentDigitalContent = this.reportService.SelectedReport.AllowStudentDigitalContent;\r\n this.allowArchiveToStudentPortfolio = this.reportService.SelectedReport.AllowStudentPortfolio;\r\n this.allowArchiveToTCM = this.reportService.SelectedReport.AllowTCMArchiving;\r\n\r\n this.studentDigitalContent = new StudentDigitalContent;\r\n this.newFile = true;\r\n this.fileNameString = this.reportService.SelectedReport.Name;\r\n this.descriptionString = this.reportService.SelectedReport.Name;\r\n this.batchDescription = 'Archive Reports'; // this.descriptionString + ' - ' + new Date().toDateString() + ' ' + new Date().toLocaleTimeString();\r\n\r\n // getHours(), getMinutes(), getSeconds(), getMilliseconds()\r\n\r\n if (this.reportService.SelectedReport.AllowTCMArchiving) {\r\n this.allowArchiveToTCM = true;\r\n this.populate_TCM_DocumentTypes();\r\n }\r\n\r\n\r\n this.studentPortfolio = new Portfolio();\r\n\r\n // if (this.studentDigitalContent == undefined) {\r\n // this.studentDigitalContent = new StudentDigitalContent;\r\n // this.newFile = true;\r\n // this.fileNameString = this.reportService.SelectedReport.Name;\r\n // }\r\n // else {\r\n // this.documentTypeIdString = this.studentDigitalContent.DocumentTypeId.toString();\r\n // this.descriptionString = this.studentDigitalContent.Description;\r\n // this.fileNameString = this.studentDigitalContent.FileName;\r\n // }\r\n\r\n // get Document Types for Student Digital Content\r\n\r\n // if (this.reportService.documentTypes.length == 0) {\r\n this.lookupService.getORFormDocumentType(this.yearService.defaultYear.SchoolID).subscribe(result => {\r\n this.reportService.documentTypes = result;\r\n this.documentTypes = this.reportService.documentTypes;\r\n if (this.documentTypes.length == 0) {\r\n this.reportService.SelectedReport.AllowStudentDigitalContent = false;\r\n this.allowArchiveToStudentDigitalContent = false;\r\n }\r\n });\r\n // }\r\n // else {\r\n // this.documentTypes = this.reportService.documentTypes;\r\n // }\r\n\r\n // get Portfolio Categories for Student Portfolio\r\n\r\n // if (this.reportService.documentTypes.length == 0) {\r\n\r\n this.portfolioService.getPortfolioCategories(this.reportService.currentUser.Id).subscribe(res => {\r\n this.portfolioCategories = res;\r\n\r\n if (this.portfolioCategories.length == 0) {\r\n this.reportService.SelectedReport.AllowStudentPortfolio = false;\r\n this.allowArchiveToStudentPortfolio = false;\r\n }\r\n\r\n });\r\n\r\n\r\n\r\n // }\r\n // else {\r\n // this.documentTypes = this.reportService.documentTypes;\r\n // }\r\n\r\n\r\n }\r\n\r\n OnDestroy() { }\r\n\r\n populate_TCM_DocumentTypes() {\r\n\r\n let tcmDocumentType: DataSource;\r\n\r\n // if (this.reportService.SelectedReport.AllowTCMArchiving)\r\n\r\n // if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentAttendance')) {\r\n // tcmDocumentType = new DataSource();\r\n // tcmDocumentType.TextField = 'Student Attendance';\r\n // tcmDocumentType.ValueField = 'TeStuAttendance';\r\n // this.tcmDocumentTypes.push(tcmDocumentType);\r\n // }\r\n\r\n // if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentDiscipline')) {\r\n // tcmDocumentType = new DataSource();\r\n // tcmDocumentType.TextField = 'Student Discipline';\r\n // tcmDocumentType.ValueField = 'TeStuDiscipline';\r\n // this.tcmDocumentTypes.push(tcmDocumentType);\r\n // }\r\n\r\n if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentGeneral')) {\r\n tcmDocumentType = new DataSource();\r\n tcmDocumentType.TextField = 'Student General';\r\n tcmDocumentType.ValueField = 'TeStuGeneral'; // this is what TCM is looking for\r\n this.tcmDocumentTypes.push(tcmDocumentType);\r\n }\r\n\r\n if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentGrades')) {\r\n tcmDocumentType = new DataSource();\r\n tcmDocumentType.TextField = 'Student Grades';\r\n tcmDocumentType.ValueField = 'TeStuGrades';\r\n this.tcmDocumentTypes.push(tcmDocumentType);\r\n }\r\n\r\n if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentHealth')) {\r\n tcmDocumentType = new DataSource();\r\n tcmDocumentType.TextField = 'Student Health';\r\n tcmDocumentType.ValueField = 'TeStuHealth';\r\n this.tcmDocumentTypes.push(tcmDocumentType);\r\n }\r\n\r\n if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentRegistration')) {\r\n tcmDocumentType = new DataSource();\r\n tcmDocumentType.TextField = 'Student Registration';\r\n tcmDocumentType.ValueField = 'TeStuRegistration';\r\n this.tcmDocumentTypes.push(tcmDocumentType);\r\n }\r\n\r\n if (this.reportService.SelectedReport.DocumentArchivePermissions.find(p => p.PrivilegeType == 'StudentServiceActivity')) {\r\n tcmDocumentType = new DataSource();\r\n tcmDocumentType.TextField = 'Student Service Activity';\r\n tcmDocumentType.ValueField = 'TeStuServiceActivity';\r\n this.tcmDocumentTypes.push(tcmDocumentType);\r\n }\r\n\r\n if (this.tcmDocumentTypes.length == 0) {\r\n this.allowArchiveToTCM = false;\r\n }\r\n\r\n\r\n }\r\n\r\n saveClick() {\r\n\r\n this.checkInputs();\r\n\r\n if (this.errors.length == 0) {\r\n\r\n // confirm they want to archive the report\r\n this.confirmArchiveReportDialogRef = this.confirmArchiveReportDialog.open(ConfirmArchiveReportComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.confirmArchiveReportDialogRef.afterClosed().subscribe(result => {\r\n\r\n\r\n if (result == true) {\r\n this.prepareArchiveReportAsync();\r\n // this.thisDialogRef.close();\r\n }\r\n });\r\n\r\n\r\n } // END this.errors.length == 0\r\n\r\n }\r\n\r\n prepareArchiveReportAsync() {\r\n\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption = '';\r\n\r\n // if (this.sendEmailStudent) {\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption = '1';\r\n // }\r\n\r\n // if (this.sendEmailPrimaryContact) {\r\n // if (this.selectedReport.ReportBatch.DistributeByEmailOption > '') {\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption += ',2';\r\n // } else {\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption = '2';\r\n // }\r\n // }\r\n\r\n // if (this.sendEmailAllElectronicContacts) {\r\n // if (this.selectedReport.ReportBatch.DistributeByEmailOption > '') {\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption += ',3';\r\n // } else {\r\n // this.selectedReport.ReportBatch.DistributeByEmailOption = '3';\r\n // }\r\n // }\r\n\r\n if (this.archiveToStudentDigitalContent) {\r\n\r\n // START Archive To Student Digital Content *************************************\r\n\r\n // this.studentDigitalContent.DocumentOwnerId : set in Reports DTO\r\n this.studentDigitalContent.DocumentType = this.documentTypes.find(x => x.Id == this.documentTypeIdString).CodeDescription;\r\n this.studentDigitalContent.DocumentTypeId = parseInt(this.documentTypeIdString, 10);\r\n this.studentDigitalContent.Description = this.fileNameString; // this.descriptionString;\r\n this.studentDigitalContent.FileName = this.fileNameString + '.pdf';\r\n\r\n if (this.newFile) {\r\n this.studentDigitalContent.FileExtension = '.pdf';\r\n // this.studentDigitalContent.OriginalFileName = this.addFile.fileName;\r\n // this.studentDigitalContent.MyFileBase64String = this.addFile.fileString; // THIS WILL BE SET IN THE BACKGROUND IN DTO\r\n this.studentDigitalContent.FileType = 'pdf';\r\n this.studentDigitalContent.FileName = this.fileNameString + '.pdf';\r\n }\r\n\r\n this.reportService.SelectedReport.StudentDigitalContent = this.studentDigitalContent;\r\n this.reportService.SelectedReport.ArchiveToStudentDigitalContent = true;\r\n\r\n } // END Archive To Student Digital Content\r\n else {\r\n this.reportService.SelectedReport.StudentDigitalContent = null;\r\n this.reportService.SelectedReport.ArchiveToStudentDigitalContent = false;\r\n }\r\n\r\n\r\n // START Archive to Student Portfolio **********************************************\r\n\r\n if (this.archiveToStudentPortfolio) {\r\n // this.studentPortfolio.StudentID : set in Reports DTO\r\n\r\n // let fileSize = window.atob(this.addFile.fileString).length;\r\n // let sizeUnit = 'bytes';\r\n // if (fileSize > 1024) {\r\n // fileSize = this.roundToTwo(fileSize / 1024);\r\n // sizeUnit = 'KB';\r\n // }\r\n // if (fileSize > 1000) {\r\n // fileSize = this.roundToTwo(fileSize / 1024);\r\n // sizeUnit = 'MB';\r\n // }\r\n\r\n // build of the portfolio object\r\n const portfolio: Portfolio = new Portfolio();\r\n portfolio.CategoryID = this.fileCategoryId;\r\n // portfolio.StudentID : set in DTO\r\n portfolio.Name = this.fileNameString + '.pdf';\r\n portfolio.Description = this.fileNameString; // this.descriptionString;\r\n // portfolio.FileBase64 = this.addFile.fileString; // set in Reports DTO\r\n portfolio.FilePath = this.fileNameString + '.pdf';\r\n portfolio.AYIdentifier = this.yearService.defaultYear.AYIdentifier;\r\n portfolio.AddedBy = this.reportService.currentUser.MemberId.toString();\r\n // portfolio.Size = fileSize;\r\n // portfolio.SizeUnit = sizeUnit;\r\n\r\n this.reportService.SelectedReport.StudentPortfolio = portfolio;\r\n this.reportService.SelectedReport.ArchiveToStudentPortfolio = true;\r\n\r\n }\r\n else {\r\n this.reportService.SelectedReport.StudentPortfolio = null;\r\n this.reportService.SelectedReport.ArchiveToStudentPortfolio = false;\r\n } // end Archive to Student Portfolio\r\n\r\n // START Archive To TCM *************************************\r\n\r\n if (this.archiveToTCM) {\r\n this.reportService.SelectedReport.TCM_DocumentType = this.selectedTCMdocument;\r\n this.reportService.SelectedReport.ArchiveToTCM = true;\r\n\r\n }\r\n else {\r\n this.reportService.SelectedReport.TCM_DocumentType = ''; // do I want this null?\r\n this.reportService.SelectedReport.ArchiveToTCM = false;\r\n }\r\n\r\n // NOW, we save any archives to the database\r\n\r\n if (this.archiveToStudentDigitalContent || this.archiveToStudentPortfolio || this.archiveToTCM) {\r\n\r\n this.reportService.SelectedReport.IsArchiveReport = true;\r\n this.archiveReportAsync();\r\n }\r\n else {\r\n this.reportService.SelectedReport.IsArchiveReport = false;\r\n this.reportService.SelectedReport.ArchiveToTCM = false;\r\n this.reportService.SelectedReport.StudentDigitalContent = null;\r\n this.reportService.SelectedReport.StudentPortfolio = null;\r\n }\r\n\r\n // this.dialogRef.close(true);\r\n\r\n }\r\n\r\n\r\n archiveReportAsync() {\r\n\r\n // this will archive to any available selected options for archiving\r\n // we immediately unsubscribe so it runs in background\r\n\r\n // TODO: UNCOMMENT SO ARCHIVIVING ACTUALLY WORKS!!!!\r\n\r\n // const asyncSub = this.reportService.archiveReport(this.yearService.defaultYear.SchoolID).subscribe(() => { });\r\n // setTimeout(() => {\r\n // asyncSub.unsubscribe();\r\n // }, 0);\r\n\r\n const reportBatch: ReportBatch = new ReportBatch();\r\n reportBatch.Id = 0;\r\n reportBatch.Operations = [];\r\n reportBatch.AddedByName = this.reportService.getCurrentUserName_FNLN();\r\n reportBatch.AddedByLogin_Id = this.reportService.getCurrentUserId();\r\n // reportBatch.ReportName = this.reportService.SelectedReport.Name;\r\n reportBatch.ReportName = this.fileNameString;\r\n reportBatch.BatchDescription = this.batchDescription;\r\n reportBatch.AddedOn = new Date();\r\n\r\n reportBatch.sendEmailNotification = this.sendEmailNotification;\r\n\r\n reportBatch.DistributeByEmailOption = '';\r\n\r\n // if (reportBatch.sendEmailNotification) {\r\n\r\n if (this.sendEmailStudent) {\r\n reportBatch.DistributeByEmailOption = '1';\r\n }\r\n\r\n if (this.sendEmailPrimaryContact) {\r\n if (reportBatch.DistributeByEmailOption > '') {\r\n reportBatch.DistributeByEmailOption += ',2';\r\n } else {\r\n reportBatch.DistributeByEmailOption = '2';\r\n }\r\n }\r\n\r\n if (this.sendEmailAllElectronicContacts) {\r\n if (reportBatch.DistributeByEmailOption > '') {\r\n reportBatch.DistributeByEmailOption += ',3';\r\n } else {\r\n reportBatch.DistributeByEmailOption = '3';\r\n }\r\n }\r\n\r\n reportBatch.EmailFrom = this.emailFrom;\r\n reportBatch.EmailSubject = this.emailSubject;\r\n reportBatch.EmailBody = this.emailBody;\r\n // }\r\n\r\n\r\n\r\n this.reportService.addReportBatch(reportBatch).subscribe(results => {\r\n // kickoff batch asynchronously\r\n // const asyncSub = this.reportService.startReportBatch(reportBatch).subscribe(() => { });\r\n // setTimeout(() => {\r\n // asyncSub.unsubscribe();\r\n // }, 0);\r\n\r\n // this.openArchiveProcess();\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('here');\r\n // console.log(results);\r\n // }\r\n\r\n this.reportService.reportBatch = results;\r\n\r\n\r\n // // kickoff batch asynchronously\r\n const asyncSub = this.reportService.startReportBatch(this.selectedReport).subscribe(() => { });\r\n setTimeout(() => {\r\n this.reportService.reportBatch = null;\r\n asyncSub.unsubscribe();\r\n }, 1000);\r\n\r\n\r\n\r\n this.openArchiveProcess();\r\n\r\n });\r\n\r\n\r\n // // kickoff batch asynchronously\r\n // const asyncSub = this.reportService.startReportBatch(reportBatch).subscribe(() => { });\r\n // setTimeout(() => {\r\n // asyncSub.unsubscribe();\r\n // }, 0);\r\n\r\n\r\n // this.openArchiveProcess();\r\n\r\n }\r\n\r\n openArchiveProcess() {\r\n // confirm they want to archive the report\r\n this.archiveProcessDialogRef = this.archiveProcessDialog.open(ArchiveProcessComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n this.archiveProcessDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(result);\r\n // }\r\n\r\n if (result == true) {\r\n\r\n\r\n\r\n // this.reportService.getReportBatches();\r\n\r\n this.reportService.SelectedReport = null;\r\n this.reportService.reportBatch = null;\r\n\r\n this.dialogRef.close(true);\r\n }\r\n });\r\n }\r\n\r\n archiveToStudentDigitalContentChecked(isChecked: boolean) {\r\n this.archiveToStudentDigitalContent = isChecked;\r\n this.populateEmailBody();\r\n // this.archiveToStudentDigitalContent_touched = true;\r\n // this.archiveToStudentDigitalContent_touched_count += 1;\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.documentTypeIdString);\r\n // }\r\n }\r\n\r\n archiveToStudentPortfolioChecked(isChecked: boolean) {\r\n this.archiveToStudentPortfolio = isChecked;\r\n // this.archiveToStudentPortfolio_touched = true;\r\n // this.archiveToStudentPortfolio_touched_count += 1;\r\n this.populateEmailBody();\r\n\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.fileCategoryId);\r\n // }\r\n }\r\n\r\n archiveToTCMChecked(isChecked: boolean) {\r\n this.archiveToTCM = isChecked;\r\n this.populateEmailBody();\r\n // this.archiveToTCM_touched = true;\r\n // this.archiveToTCM_touched_count += 1;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.selectedTCMdocument);\r\n // }\r\n\r\n // this.reportService.SelectedReport.ArchiveToTCM = this.archiveToTCM;\r\n // if (isChecked) {\r\n // this.reportService.SelectedReport.TCM_DocumentType = this.selectedTCMdocument;\r\n // }\r\n }\r\n\r\n populateEmailBody() {\r\n\r\n if (!this.archiveToTCM && !this.archiveToStudentPortfolio && !this.archiveToStudentDigitalContent) {\r\n this.emailBody = '';\r\n return;\r\n }\r\n\r\n this.emailBody = this.selectedReport.Name + ' for student [StudentFirstName] [StudentLastName]';\r\n\r\n if (this.archiveToStudentPortfolio) {\r\n this.emailBody += ' is now available under Student Portfolio.';\r\n }\r\n\r\n\r\n // if (this.archiveToTCM && !this.archiveToStudentPortfolio && !this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Documents.';\r\n // }\r\n\r\n // if (!this.archiveToTCM && this.archiveToStudentPortfolio && !this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Portfolio.';\r\n // }\r\n\r\n // if (!this.archiveToTCM && !this.archiveToStudentPortfolio && this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Digital Content.';\r\n // }\r\n\r\n // if (!this.archiveToTCM && this.archiveToStudentPortfolio && this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Digital Content and Student Portfolio.';\r\n // }\r\n\r\n // if (this.archiveToTCM && !this.archiveToStudentPortfolio && this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Digital Content and Documents.';\r\n // }\r\n\r\n // if (this.archiveToTCM && this.archiveToStudentPortfolio && !this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Portfolio and Documents.';\r\n // }\r\n\r\n // if (this.archiveToTCM && this.archiveToStudentPortfolio && this.archiveToStudentDigitalContent) {\r\n // this.emailBody += ' is now available under Student Digital Content, Student Portfolio, and Documents.';\r\n // }\r\n }\r\n\r\n\r\n\r\n checkInputs() {\r\n // let isValidFile = true;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // ConsoleReporter.log();\r\n // ConsoleReporter.log();\r\n // ConsoleReporter.log();\r\n // }\r\n\r\n // if (\r\n // (this.archiveToStudentDigitalContent && this.archiveToStudentDigitalContent_touched_count == 1 && this.documentTypeIdString == undefined) ||\r\n // (this.archiveToStudentPortfolio && this.archiveToStudentPortfolio_touched_count == 1 && this.fileCategoryId == undefined) ||\r\n // (this.archiveToTCM && this.archiveToTCM_touched_count == 1 && this.selectedTCMdocument == undefined)\r\n // ) {\r\n // return; // no need to validate yet\r\n // }\r\n\r\n this.errors = [];\r\n\r\n if (!this.archiveToStudentDigitalContent && !this.archiveToStudentPortfolio && !this.archiveToTCM) {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: 'You must select at least one archive type.'\r\n });\r\n }\r\n\r\n // if (this.fileNameString == undefined || this.fileNameString == null || this.fileNameString == '') {\r\n // this.errors.push({\r\n // fieldName: 'File Name',\r\n // fieldRef: this.fileNameInput,\r\n // errorMsg: 'Field is required.'\r\n // });\r\n // }\r\n\r\n // if (this.archiveToStudentDigitalContent) {\r\n\r\n // // START Archive To Student Digital Content\r\n\r\n\r\n\r\n // if (this.documentTypeIdString == undefined || this.documentTypeIdString == null || this.documentTypeIdString == '') {\r\n // this.errors.push({\r\n // fieldName: 'Document Type',\r\n // fieldRef: this.documentTypeInput,\r\n // errorMsg: 'Field is required.'\r\n // });\r\n // }\r\n\r\n // if (this.newFile) {\r\n\r\n // if (this.fileNameString.length == 0) {\r\n // this.fileError = true;\r\n // isValidFile = false;\r\n // } else {\r\n // this.fileError = false;\r\n // }\r\n\r\n // ANY/ALL archive options use this field\r\n\r\n if (this.fileNameString == undefined || this.fileNameString == null || this.fileNameString == '') {\r\n this.errors.push({\r\n fieldName: 'File Name',\r\n fieldRef: this.fileNameInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n if (this.archiveToStudentDigitalContent) {\r\n\r\n // START Archive To Student Digital Content\r\n\r\n if (this.documentTypeIdString == undefined || this.documentTypeIdString == null || this.documentTypeIdString == '') {\r\n this.errors.push({\r\n fieldName: 'Student Digital Content Document Type',\r\n fieldRef: this.documentTypeInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n } // END Archive To Student Digital Content\r\n\r\n\r\n if (this.archiveToStudentPortfolio) {\r\n\r\n // START Archive To Student Portfolio\r\n\r\n if (this.fileCategoryId == undefined || this.fileCategoryId == null || !(this.fileCategoryId > 0)) {\r\n this.errors.push({\r\n fieldName: 'Student Portfolio Document Type',\r\n fieldRef: this.fileCategoryInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n } // END Archive To Student Digital Content\r\n\r\n if (this.archiveToTCM) {\r\n\r\n // START TCM -- Tyler Content Management\r\n\r\n if (this.selectedTCMdocument == undefined || this.selectedTCMdocument == null || this.selectedTCMdocument == '') {\r\n this.errors.push({\r\n fieldName: 'TCM Document Type',\r\n fieldRef: this.documentTypeTCMInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n }\r\n\r\n this.validateEmailFields();\r\n\r\n\r\n\r\n\r\n // }\r\n\r\n // for ALL archive options\r\n\r\n // if (this.fileNameString.length == 0) {\r\n // this.fileError = true;\r\n // isValidFile = false;\r\n // } else {\r\n // this.fileError = false;\r\n // }\r\n\r\n\r\n // if (!isValidFile) {\r\n // this.errors.push({\r\n // fieldName: 'File',\r\n // fieldRef: this.fileNameInput,\r\n // errorMsg: 'Field is required.'\r\n // });\r\n // }\r\n\r\n\r\n } // end checkInputs()\r\n\r\n validateEmailFields() {\r\n if (this.sendEmailNotification && !this.sendEmailStudent && !this.sendEmailPrimaryContact && !this.sendEmailAllElectronicContacts) {\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'You must select at least one option for Send emails to.'\r\n });\r\n }\r\n\r\n\r\n /********************* START EMAIL SUBJECT VALIDATION *********************/\r\n\r\n // Email Subject required\r\n if (this.sendEmailNotification && this.selectedReport.EmailSubject.trim().length == 0) {\r\n this.errors.push({\r\n fieldName: 'Email Subject',\r\n fieldRef: this.emailSubjectRef,\r\n errorMsg: 'Required Field'\r\n });\r\n }\r\n\r\n\r\n /********************* START EMAIL FROM VALIDATION *********************/\r\n\r\n const emailFormat = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$/;\r\n // const emailsTo: string[] = this.selectedReport.EmailsToSendReport.replace(' ', '').split(';');\r\n\r\n // // remove final empty string from split\r\n // if (emailsTo.length > 1) {\r\n // if (emailsTo[emailsTo.length - 1] == '') {\r\n // emailsTo.length = emailsTo.length - 1;\r\n // }\r\n // }\r\n\r\n // Email From required -- FIRST MESSAGE\r\n if (this.selectedReport.EmailFrom.trim().length == 0) {\r\n\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Required field.',\r\n fieldRef: this.emailFromRef\r\n });\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('this.selectedReport.EmailFrom.trim().length');\r\n // console.log(this.selectedReport.EmailFrom.trim().length);\r\n // }\r\n }\r\n else {\r\n\r\n // errorMsg: this.selectedReport.EmailFrom.trim() + ' is not a valid email format',\r\n\r\n // check Email From format -- SECOND MESSAGE\r\n if (this.selectedReport.EmailFrom.trim().match(emailFormat) == null) {\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Invalid email address.',\r\n fieldRef: this.emailFromRef\r\n });\r\n\r\n }\r\n\r\n else {\r\n\r\n // check Email From is a single email -- THIRD MESSAGE\r\n if (this.selectedReport.EmailFrom.split(';').length > 1) {\r\n\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Must be a single email.',\r\n fieldRef: this.emailFromRef\r\n });\r\n\r\n }\r\n }\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('this.selectedReport.EmailFrom.trim().match(emailFormat)');\r\n // console.log(this.selectedReport.EmailFrom.trim().match(emailFormat));\r\n // }\r\n\r\n }\r\n\r\n }\r\n\r\n // addFileChanges(event) {\r\n // // check if a file has been selected\r\n // if (this.addFile.hasOwnProperty('fileName')) {\r\n // this.fileError = false;\r\n // }\r\n // }\r\n\r\n getEmailRegexp() {\r\n return this.reportService.getEmailRegexp();\r\n }\r\n\r\n sendToEmailChecked(isChecked: boolean) {\r\n\r\n // right now the only errors being handled are for report to email\r\n // so clear them out if they uncheck the checkbox\r\n if (!isChecked) {\r\n this.errors = [];\r\n }\r\n }\r\n\r\n\r\n closeClick() {\r\n this.reportService.SelectedReport.IsArchiveReport = false;\r\n this.reportService.SelectedReport.ArchiveToTCM = false;\r\n this.reportService.SelectedReport.ArchiveToStudentDigitalContent = false;\r\n this.reportService.SelectedReport.ArchiveToStudentDigitalContent = false;\r\n this.reportService.SelectedReport.StudentDigitalContent = null;\r\n this.reportService.SelectedReport.StudentPortfolio = null;\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","
\r\n\r\n \r\n
\r\n

{{selectedReport.Name}} - Auto-Run Settings

\r\n\r\n
\r\n\r\n \r\n\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n '' \" style=\"width:100%;\">\r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\r\n \r\n\r\n \r\n Report to Email\r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n
{{parameterRow.GroupLabel}}{{parameterRow.GroupLabel}}\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n {{parameter.Name}}\r\n \r\n\r\n\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n \r\n {{dataItem.TextField}}\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n {{parameter.Name}}\r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n {{dataItem.TextField}}\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n ''\"\r\n style='white-space: no-wrap; width: 100%;'\r\n >\r\n \r\n\r\n \r\n\r\n\r\n\r\n
\r\n\r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n
\r\n","/* eslint-disable camelcase */\r\nimport {\r\n Component,\r\n OnInit,\r\n OnDestroy,\r\n ViewChild,\r\n ElementRef\r\n} from '@angular/core';\r\nimport { NgForm } from '@angular/forms';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatRadioChange } from '@angular/material/radio'; // ???\r\n\r\nimport { ReportingService } from '../reporting.service';\r\n\r\nimport { LoginService } from '../../login/login.service';\r\nimport { LoginSettings } from '../../login/LoginSetting.model';\r\n\r\nimport { Report } from '../models/report.model';\r\nimport { ReportParameter } from '../models/report-parameter.model';\r\nimport { ParameterRow } from '../models/parameter-row-model';\r\nimport { ParameterRows } from '../models/parameter-rows.model';\r\n\r\nimport { DataSource } from '../models/data-source.model';\r\n\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { UserPreferencesService } from '../../../shared-components/user-preferences/user-preferences.service';\r\n\r\n// import { ClassroomSummaryService } from '../../../classroom360/classroom-summary/classroom-summary.service';\r\n// import { StudentService } from '../../../shared-components/student/student.service';\r\nimport { ClassroomSummary } from '../../../classroom360/classroom-summary/models/classroom-summary.model';\r\n\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { ReportOptionsComponent } from '../definitions/report-options.component';\r\nimport { ReportLegendComponent } from '../report-legend/report-legend.component';\r\nimport { ReportSettingsAutoRunComponent } from '../report-settings/report-settings-autorun.component';\r\nimport { ConfirmReportToEmailComponent } from './confirm-report-to-email.component';\r\n\r\n// import { Form } from '../../../form.model';\r\nimport { HasErrors } from '../../../shared-components/guards/check-for-errors/HasErrors';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentSearchComponent } from '../../../shared-components/student-search/student-search.component';\r\n// import moment = require('moment');\r\n\r\nimport { ArchiveReportModalComponent } from '../archive-report/archive-report-modal.component';\r\n\r\n\r\n\r\n// import { toUnicode } from 'punycode';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportParameters',\r\n templateUrl: './report-parameters.component.html',\r\n styleUrls: ['./report-parameters.component.css']\r\n // changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\n// HasErrors\r\n\r\nexport class ReportParametersComponent implements OnInit, OnDestroy, HasErrors {\r\n\r\n // @Output() showReportToPDF = new EventEmitter();\r\n @ViewChild(ReportSettingsAutoRunComponent)\r\n private AutoRunComponent: ReportSettingsAutoRunComponent;\r\n\r\n thisDialogRef: MatDialogRef;\r\n reportOptionsDialogRef: MatDialogRef;\r\n reportLegendDialogRef: MatDialogRef;\r\n confirmReportToEmailDialogRef: MatDialogRef;\r\n StudentSearchDialogRef: MatDialogRef;\r\n archiveReportModalDialogRef: MatDialogRef;\r\n loginSettings: LoginSettings;\r\n utilizeDistributebyEmail: boolean;\r\n selectedReport: Report;\r\n userEmail: string;\r\n isInFolder: boolean;\r\n showReportToPDF: boolean;\r\n showCancelSendToEmail: boolean;\r\n showCancelShowReportOptions: boolean;\r\n // cancelShowReport: boolean = false;\r\n cancelShowReport = false;\r\n allowAutoRunReport: boolean;\r\n inDebugMode: boolean;\r\n MailServer: string;\r\n maxNumberOfColumns: number;\r\n ChunkedParameters: ParameterRows;\r\n subscriptions: Subscription[] = [];\r\n maxTableCellsPerRow: number;\r\n\r\n // showFooter = true;\r\n\r\n isForSchedule: boolean;\r\n userPreferences: any;\r\n\r\n selectedCourse: ClassroomSummary;\r\n selectedStudent: Student;\r\n selectedStudentSearch: Student;\r\n studentList = [];\r\n studentListString: string;\r\n ParamColWidth: string;\r\n useReportDefinitions: boolean;\r\n showHiddenParameters: boolean;\r\n hiddenParametersLabel: string;\r\n userHasPrivilegeAddEditDistrictReportDefinitions: boolean;\r\n\r\n showDistributebyEmail: boolean; // ONE-4387\r\n\r\n distributeByEmailOption_StudentSelected: boolean;\r\n distributeByEmailOption_PrimaryContactSelected: boolean;\r\n distributeByEmailOption_AllElectronicContactsSelected: boolean;\r\n\r\n utilizeTranscriptTracking: boolean; // ONE-4343\r\n isTylerAdmin = false;\r\n debugMessage = '';\r\n\r\n\r\n showReportToConsole = false;\r\n isDebugModeInProduction = false;\r\n\r\n // ERROR HANDLING\r\n // form: Form;\r\n errors: ErrorList[] = [];\r\n // @ViewChild('tableContainer', { read: ElementRef }) tableContainerRef: ElementRef;\r\n @ViewChild('ngForm', { read: NgForm }) ngForm: NgForm;\r\n @ViewChild('emailFrom', { read: ElementRef }) emailFrom: ElementRef;\r\n @ViewChild('emailsToSendReport', { read: ElementRef }) emailsToSendReport: ElementRef;\r\n @ViewChild('emailSubject', { read: ElementRef }) emailSubject: ElementRef;\r\n // @ViewChild('DebugInfo', { read: ElementRef }) debugInfo: ElementRef;\r\n\r\n // numbers: number[] = [];\r\n selectedPostHsInstitution = '';\r\n PostHsInstitutions: DataSource[];\r\n\r\n constructor(\r\n\r\n reportParametersDialogRef: MatDialogRef,\r\n private studentSearchDialog: MatDialog,\r\n private reportLegendDialog: MatDialog,\r\n private confirmReportToEmailDialog: MatDialog,\r\n private reportOptionsDialog: MatDialog,\r\n\r\n private reportService: ReportingService,\r\n private loginService: LoginService,\r\n private userPreferencesService: UserPreferencesService,\r\n\r\n private thisDialog: MatDialog,\r\n private archiveReportModalDialog: MatDialog,\r\n // private classroomSummaryService: ClassroomSummaryService,\r\n // private studentService: StudentService,\r\n // @Inject(MAT_DIALOG_DATA) public data: any\r\n\r\n // private changeDetector: ChangeDetectorRef\r\n ) {\r\n\r\n\r\n // for (let index = 0; index < 10000; index++) {\r\n // this.numbers.push(index);\r\n // }\r\n\r\n this.userPreferences = this.userPreferencesService;\r\n this.MailServer = this.loginService.LoginSettings.MailServer;\r\n\r\n /* BEGIN CONSTRUCTOR */\r\n // this.loginSettings = loginService.LoginSettings;\r\n // this.utilizeDistributebyEmail = this.loginSettings.UtilizeDistributebyEmail;\r\n // this.selectedReport = this.reportService.SelectedReport;\r\n\r\n // this.userEmail = this.reportService.userEmail;\r\n // this.inDebugMode = this.inDebugMode;\r\n\r\n // this.isForSchedule = this.reportService.isForSchedule;\r\n\r\n // this.allowAutoRunReport = this.loginSettings.AllowAutoRunReport;\r\n // this.showReportToPDF = true;\r\n // this.showCancelSendToEmail = false;\r\n // this.showCancelShowReportOptions = false;\r\n\r\n\r\n\r\n this.thisDialogRef = reportParametersDialogRef;\r\n\r\n\r\n\r\n\r\n\r\n // this.getReportDefinitions();\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('ReportParametersComponent => constructor() - selectedReport BELOW');\r\n // console.log(this.selectedReport);\r\n // }\r\n\r\n } // end constructor\r\n\r\n // ngOnInit() {\r\n\r\n // // this.showReportToPDF.emit(true);\r\n\r\n // // we need to select all ddcbl items if none are selected\r\n // // this.checkAllCheckBoxes();\r\n\r\n // } // end ngOnInit\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.isTylerAdmin = this.reportService.isTylerAdmin;\r\n\r\n // this.loginSettings = this.loginService.LoginSettings;\r\n // this.utilizeDistributebyEmail = this.loginSettings.UtilizeDistributebyEmail;\r\n this.selectedReport = this.reportService.SelectedReport;\r\n\r\n\r\n this.loginSettings = this.loginService.LoginSettings;\r\n\r\n this.selectedReport.Login_ID = this.loginSettings.Id;\r\n this.utilizeDistributebyEmail = this.loginSettings.UtilizeDistributebyEmail;\r\n // this.selectedReport = this.reportService.SelectedReport;\r\n this.inDebugMode = this.reportService.inDebugMode;\r\n if (this.inDebugMode || (this.reportService.isTylerAdmin && this.isDebugModeInProduction)) {\r\n this.showReportToConsole = true;\r\n }\r\n\r\n this.isForSchedule = this.reportService.isForSchedule;\r\n\r\n this.allowAutoRunReport = this.loginSettings.AllowAutoRunReport;\r\n this.showReportToPDF = true;\r\n this.showCancelSendToEmail = false;\r\n this.showCancelShowReportOptions = false;\r\n this.showHiddenParameters = false;\r\n this.hiddenParametersLabel = 'Show Hidden Parameters';\r\n\r\n if (!this.isForSchedule) {\r\n this.userEmail = this.reportService.userEmail;\r\n // this.selectedCourse = this.classroomSummaryService.selectedCourse;\r\n // this.selectedStudent = this.studentService.selectedStudent;\r\n this.selectedCourse = this.reportService.selectedCourse;\r\n this.selectedStudent = this.reportService.selectedStudent;\r\n this.useReportDefinitions = this.reportService.useReportDefinitions;\r\n this.userHasPrivilegeAddEditDistrictReportDefinitions = this.reportService.userHasPrivilegeAddEditDistrictReportDefinitions;\r\n this.selectedReport.AutoRunReport = false;\r\n }\r\n\r\n if (this.selectedReport.ReportFolder == '') {\r\n this.isInFolder = false;\r\n } else {\r\n this.isInFolder = true;\r\n }\r\n\r\n this.utilizeTranscriptTracking = this.loginService.LoginSettings.UtilizeTranscriptTracking;\r\n\r\n // const transcriptTrackingParam = this.selectedReport.Parameters.find((param) => {\r\n // return param.ControlType == 'trctrl';\r\n // });\r\n\r\n // if (transcriptTrackingParam) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(transcriptTrackingParam);\r\n // }\r\n // }\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // this.reportService.utilizeDistributebyEmail = true; // SET FOR TESTING PURPOSES\r\n // // console.log(this.MailServer);\r\n // // console.log(this.reportService.utilizeDistributebyEmail);\r\n // // console.log(this.selectedReport.HasDistributeByEmailParameter);\r\n // // console.log(this.selectedReport.HasUniqueStudentParameter);\r\n // }\r\n\r\n this.reportService.isDistributebyEmail = false;\r\n this.selectedReport.IsDistributeByEmail = false;\r\n\r\n if (this.MailServer > '' && this.reportService.utilizeDistributebyEmail && this.selectedReport.HasDistributeByEmailParameter && this.selectedReport.HasUniqueStudentParameter) {\r\n // NOTE: THIS CAN STILL BLOW UP IF THE RESULTS DO NOT HAVE Student_ID IN THE RESULTS!!!!\r\n this.showDistributebyEmail = true;\r\n }\r\n\r\n\r\n if (!this.isForSchedule) {\r\n this.selectedReport.EmailFrom = this.userPreferences.generalPreferences.EmailFrom == 'Personal' ? this.userEmail : this.loginSettings.DefaultEmailReplyToAddress;\r\n this.selectedReport.EmailsToSendReport = this.userEmail;\r\n this.selectedReport.EmailSubject = this.selectedReport.Name;\r\n this.selectedReport.EmailBody = 'Please see the attached PDF for this report.';\r\n }\r\n\r\n this.initParameters();\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n // do any necessary cleanup\r\n\r\n }\r\n\r\n\r\n initParameters() {\r\n if (this.reportService.inDebugMode) {\r\n console.log('here');\r\n }\r\n\r\n // set params when coming from certain areas\r\n\r\n this.setBackgroundColorForSavedDefinitions();\r\n\r\n if (this.reportService.isAllReports || this.reportService.isMyReports) {\r\n this.maxTableCellsPerRow = 3;\r\n }\r\n else {\r\n this.maxTableCellsPerRow = 2; // report settings and definitions?\r\n }\r\n this.maxNumberOfColumns = this.maxTableCellsPerRow;\r\n\r\n this.setParameterRows(this.maxTableCellsPerRow);\r\n\r\n\r\n if (this.maxNumberOfColumns == 1) {\r\n this.ParamColWidth = '400px';\r\n }\r\n else if (this.maxNumberOfColumns == 2) {\r\n this.ParamColWidth = '350px';\r\n }\r\n else if (this.maxNumberOfColumns == 3) {\r\n this.ParamColWidth = '400px';\r\n }\r\n else {\r\n this.ParamColWidth = '200px';\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n setBackgroundColorForSavedDefinitions() {\r\n if (!this.useReportDefinitions) {\r\n return; // drop out here\r\n }\r\n for (let i = 0; i < this.selectedReport.Parameters.length; i++) {\r\n\r\n if (this.selectedReport.Parameters[i].ParameterReportDefinition.HasParameterValueDefined\r\n && this.selectedReport.Parameters[i].ParameterReportDefinition.IsSystem == false\r\n ) {\r\n this.selectedReport.Parameters[i].SetBackgroundColorForSavedDefinition = true;\r\n }\r\n\r\n /* ***************************** CONVERT ANY SAVED DEFINITIONS ******************************/\r\n\r\n // handle bit parameters if saved definition to convert from string\r\n if (this.selectedReport.Parameters[i].DataType == 'bit' && this.selectedReport.Parameters[i].ParameterReportDefinition.HasParameterValueDefined) {\r\n if (this.selectedReport.Parameters[i].ParameterReportDefinition.Value == '1' || this.selectedReport.Parameters[i].ParameterReportDefinition.Value == true) {\r\n this.selectedReport.Parameters[i].ParameterReportDefinition.Value = true;\r\n this.selectedReport.Parameters[i].Value = true;\r\n }\r\n else {\r\n this.selectedReport.Parameters[i].ParameterReportDefinition.Value = false;\r\n this.selectedReport.Parameters[i].Value = false;\r\n }\r\n\r\n }\r\n\r\n // handle datepicker value conversion here\r\n if ((this.selectedReport.Parameters[i].DataType == 'date' || this.selectedReport.Parameters[i].DataType == 'datetime') && this.selectedReport.Parameters[i].ParameterReportDefinition.HasParameterValueDefined) {\r\n const dateParts = this.selectedReport.Parameters[i].ParameterReportDefinition.Value.split('/');\r\n if (dateParts.length == 3) {\r\n // note: saved dates are in format \"5/9/2018\"\r\n const savedDate = new Date(dateParts[2], dateParts[0] - 1, dateParts[1]);\r\n this.selectedReport.Parameters[i].Value = savedDate;\r\n }\r\n\r\n }\r\n\r\n /* ***************************** END - CONVERT ANY SAVED DEFINITIONS ******************************/\r\n\r\n }\r\n }\r\n\r\n getBackgroundColorForSavedDefinition(parameter: ReportParameter) {\r\n\r\n let backgroundColor: string;\r\n if (parameter.ParameterReportDefinition.IsDistrictDefinedParameter) {\r\n backgroundColor = this.reportService.backgroundColorForDistrictDefinedDefinition;\r\n }\r\n else if (parameter.ParameterReportDefinition.Login_ID > 0) {\r\n backgroundColor = this.reportService.backgroundColorForUserDefinedDefinition;\r\n }\r\n return backgroundColor;\r\n }\r\n\r\n\r\n\r\n setParameterRows(tableCellsPerRow: number) {\r\n\r\n\r\n // this.ChunkedParameters = this.chunkParameters(this.selectedReport.Parameters, tableCellsPerRow);\r\n\r\n this.ChunkedParameters = new ParameterRows();\r\n\r\n this.chunkParameters(this.selectedReport.Parameters, tableCellsPerRow);\r\n\r\n\r\n\r\n\r\n\r\n }\r\n\r\n handleDistributeByEmailOption(recipients: string) {\r\n\r\n // const recipients: string = value.Value;\r\n\r\n if (recipients.indexOf('1') !== -1) {\r\n this.distributeByEmailOption_StudentSelected = true; // student is checked (-1 is all and would include this)\r\n }\r\n else {\r\n this.distributeByEmailOption_StudentSelected = false;\r\n }\r\n\r\n if (recipients.indexOf('2') !== -1) {\r\n this.distributeByEmailOption_PrimaryContactSelected = true; // primary contact is checked\r\n }\r\n else {\r\n this.distributeByEmailOption_PrimaryContactSelected = false;\r\n }\r\n\r\n if (recipients.indexOf('3') !== -1) {\r\n this.distributeByEmailOption_AllElectronicContactsSelected = true; // all electronic contacts is checked\r\n }\r\n else {\r\n this.distributeByEmailOption_AllElectronicContactsSelected = false;\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n chunkParameters(params: ReportParameter[], maxNumberOfColumns: number) {\r\n const nonPrivateParameters: ReportParameter[] = [];\r\n\r\n let newParamsRows: ReportParameter[][] = []; // new ReportParameter();\r\n const group_Ids: number[] = [];\r\n\r\n for (let p = 0; p < params.length; p++) {\r\n\r\n // handle bit parameters\r\n if (params[p].DataType == 'bit') {\r\n if (params[p].Value == '1') {\r\n params[p].Value = true;\r\n }\r\n else {\r\n params[p].Value = false;\r\n }\r\n }\r\n\r\n // if ((this.showHiddenParameters && !params[p].ParameterName.toLowerCase().startsWith('@p_')) || !params[p].ParameterReportDefinition.IsHidden) {\r\n if (\r\n (\r\n (\r\n this.userHasPrivilegeAddEditDistrictReportDefinitions || !params[p].ParameterReportDefinition.IsDistrictDefinedParameter\r\n )\r\n && this.showHiddenParameters && !params[p].IsSystemHiddenParameter // !params[p].ParameterName.startsWith('@p_')\r\n )\r\n || !params[p].ParameterReportDefinition.IsHidden) {\r\n\r\n // don't push group parameters yet if grouping is turned on, we will add them later\r\n\r\n // if (this.reportService.useParameterGroups) {\r\n // if (!params[p].IsInGroup) {\r\n // nonPrivateParameters.push(params[p]);\r\n // }\r\n // }\r\n // else {\r\n // NOT using groups\r\n\r\n // if (params[p].Group_ID > 0 && !group_Ids.includes(params[p].Group_ID)) {\r\n // group_Ids.push(params[p].Group_ID);\r\n // }\r\n\r\n // get a distinct list of group_Ids, including zero for non-grouped parameters\r\n if (!group_Ids.includes(params[p].Group_ID)) {\r\n group_Ids.push(params[p].Group_ID);\r\n }\r\n\r\n // // TODO: COMMENT OR REMOVE AFTER TESTING!!!\r\n // if (params[p].ParameterName == '@GradeLevelIdentifier' || params[p].ParameterName == '@CampusEnrollment') {\r\n // params[p].ShowOptionsVertically = true;\r\n // }\r\n\r\n\r\n\r\n\r\n if (params[p].ParameterName.toLowerCase() == '@distributebyemailoption') {\r\n\r\n const recipients: string = params[p].Value;\r\n\r\n this.handleDistributeByEmailOption(recipients);\r\n }\r\n\r\n // ONE-4386 - HIDE DISTRIBUTE BY EMAIL PARAMETERS -- THIS WILL BE NEED TO BE REMOVED AFTER ONE-4387 HAS BEEN COMPLETED\r\n\r\n // THESE PARAMETERS ARE TO BE EXCLUDED FROM THE PARAMETERS SCREEN\r\n if ( // params[p].ParameterName.toLowerCase() == '@distributebyemailoption'\r\n // HIDE PARAMETERS BELOW (also need to hide them in spOneSISReporting_GetReportDefinitions)\r\n params[p].ParameterName.toLowerCase() == '@distributebyemailsubject' // ONE-4387 I'm gonna still hide these optional parameters\r\n || params[p].ParameterName.toLowerCase() == '@distributebyemailbody'\r\n || params[p].ParameterName.toLowerCase() == '@distributebyemailfromaddress'\r\n\r\n || (!this.loginService.LoginSettings.UtilizeDistributebyEmail && params[p].ParameterName.toLowerCase() == '@distributebyemailoption')\r\n || params[p].ControlType == 'trctrl' // transcript tracking\r\n || (this.utilizeTranscriptTracking == false && (params[p].ParameterName == '@p_Post_HS_Contact_Type' || params[p].ParameterName == '@p_Post_HS_Institution' || params[p].ParameterName == '@p_Post_HS_Comments'))\r\n // || (!this.loginService.LoginSettings.UtilizeTranscriptTracking && params[p].ControlType == 'trctrl')\r\n ) {\r\n // DO NOT ADD PARAMETER, we want to exclude these for now\r\n }\r\n else {\r\n\r\n nonPrivateParameters.push(params[p]);\r\n }\r\n\r\n\r\n\r\n // }\r\n\r\n // nonPrivateParameters.push(System.convert(params[p], new ReportParameter()));\r\n }\r\n } // end going through ALL parameters\r\n\r\n // now break up into individual groups\r\n\r\n\r\n const groupParameters: ReportParameter[][] = [];\r\n\r\n const tempParmArray: ReportParameter[][] = [];\r\n\r\n for (let g = 0; g < group_Ids.length; g++) {\r\n let thisGroupParameters: ReportParameter[] = [];\r\n\r\n for (let p = 0; p < nonPrivateParameters.length; p++) {\r\n if (nonPrivateParameters[p].Group_ID == group_Ids[g]) {\r\n\r\n thisGroupParameters.push(nonPrivateParameters[p]);\r\n\r\n }\r\n } // END looping through group parameterrs\r\n\r\n thisGroupParameters = this.getGroup(thisGroupParameters);\r\n\r\n groupParameters.push(thisGroupParameters);\r\n const tempGroup: number[] = [];\r\n tempGroup.push(group_Ids[g]);\r\n\r\n const tempParameterRows: ParameterRows[] = [];\r\n\r\n tempParameterRows.push(this.getParameterRows(thisGroupParameters, maxNumberOfColumns, tempGroup));\r\n\r\n for (let r = 0; r < tempParameterRows.length; r++) {\r\n const myParamRows = tempParameterRows[r];\r\n for (let rw = 0; rw < myParamRows.Rows.length; rw++) {\r\n const myParamRow = myParamRows.Rows[rw];\r\n for (let p = 0; p < myParamRow.Parameters.length; p++) {\r\n\r\n // if (this.inDebugMode) {\r\n // console.log(myParamRow.Parameters[p]);\r\n // }\r\n\r\n // newParamsRows.push(myParamRow.Parameters[p]);\r\n\r\n // newParamsRows.push\r\n }\r\n\r\n\r\n tempParmArray.push(myParamRow.Parameters);\r\n\r\n }\r\n\r\n }\r\n\r\n } // END looping through groups\r\n\r\n newParamsRows = tempParmArray; // ReportParamter[][]\r\n\r\n for (let pr = 0; pr < newParamsRows.length; pr++) {\r\n const newParamRow = new ParameterRow();\r\n const newGroupParamRow = new ParameterRow();\r\n newParamRow.Parameters = newParamsRows[pr];\r\n let thisGroupHasBeenHandled = false;\r\n\r\n // handle groups??\r\n for (let p = 0; p < newParamRow.Parameters.length; p++) {\r\n\r\n if (newParamRow.Parameters[p].Group_ID > 0) {\r\n\r\n // START ONE-2400 TESTING *************\r\n if (newParamRow.Parameters[p].ParameterReportDefinition.IsHidden) {\r\n continue;\r\n }\r\n // END ONE-2400 TESTING *************\r\n\r\n\r\n // BEGIN HANDLING GROUP\r\n\r\n if (newParamRow.Parameters[p].Group_ID) {\r\n\r\n newGroupParamRow.Group_ID = newParamRow.Parameters[p].Group_ID;\r\n\r\n }\r\n\r\n\r\n if (newParamRow.Parameters[p].IsStartOfVisibleGroup) {\r\n\r\n newGroupParamRow.IsStartOfVisibleGroup = newParamRow.Parameters[p].IsStartOfVisibleGroup;\r\n\r\n }\r\n\r\n if (newParamRow.Parameters[p].IncludeLineAtStartOfGroup) {\r\n\r\n newGroupParamRow.IncludeLineAtStartOfGroup = newParamRow.Parameters[p].IncludeLineAtStartOfGroup;\r\n\r\n }\r\n\r\n if (newParamRow.Parameters[p].IsStartOfVisibleGroup) {\r\n newGroupParamRow.IsStartOfVisibleGroup = newParamRow.Parameters[p].IsStartOfVisibleGroup;\r\n }\r\n\r\n if (newParamRow.Parameters[p].IncludeGroupLabel) {\r\n newGroupParamRow.IncludeGroupLabel = newParamRow.Parameters[p].IncludeGroupLabel;\r\n }\r\n\r\n if (newParamRow.Parameters[p].GroupLabel > '') {\r\n newGroupParamRow.GroupLabel = newParamRow.Parameters[p].GroupLabel;\r\n }\r\n\r\n }\r\n\r\n if (newGroupParamRow.Group_ID > 0 && thisGroupHasBeenHandled == false) {\r\n\r\n this.ChunkedParameters.Rows.push(newGroupParamRow);\r\n thisGroupHasBeenHandled = true;\r\n }\r\n\r\n\r\n }\r\n\r\n this.ChunkedParameters.Rows.push(newParamRow);\r\n\r\n }\r\n\r\n return newParamsRows;\r\n\r\n }\r\n\r\n getGroup(reportParametersInGroup: ReportParameter[]): ReportParameter[] {\r\n return (reportParametersInGroup);\r\n }\r\n\r\n\r\n getParameterRowParameters(paramRows: ParameterRow): ReportParameter[] {\r\n const paramRowParams: ReportParameter[] = [];\r\n\r\n for (let p = 0; p < paramRows.Parameters.length; p++) {\r\n\r\n const params: ReportParameter[] = [];\r\n paramRowParams.push(paramRows[p]);\r\n\r\n }\r\n\r\n return paramRowParams;\r\n }\r\n\r\n handleParameterGroups(paramsRows: ParameterRows) {\r\n // NOW WE START TO HANDLE GROUPS\r\n\r\n let needToAddNewParameterRow = false;\r\n\r\n for (let r = 0; r < paramsRows.Rows.length; r++) {\r\n\r\n needToAddNewParameterRow = false;\r\n const paramRow = new ParameterRow();\r\n paramRow.HasParameterInGroup = false;\r\n\r\n // now we need to handle parameter groups at the parameter row level\r\n\r\n const groupParamRow = new ParameterRow();\r\n\r\n for (let pr = 0; pr < paramRow.Parameters.length; pr++) {\r\n\r\n if (!paramRow.AlreadyCheckedForGroupStart) {\r\n\r\n if (!paramRow.Parameters[pr].IsInGroup) {\r\n continue;\r\n }\r\n\r\n // groupParamRow\r\n groupParamRow.HasParameterInGroup = true;\r\n\r\n if (paramRow.Parameters[pr].IsStartOfVisibleGroup) {\r\n groupParamRow.IsStartOfVisibleGroup = true;\r\n paramRow.HasParameterInGroup = true; // mark the 'regular' param row\r\n groupParamRow.AlreadyCheckedForGroupStart = true;\r\n groupParamRow.IncludeGroupLabel = paramRow.Parameters[pr].IncludeGroupLabel;\r\n if (groupParamRow.IncludeGroupLabel) {\r\n groupParamRow.GroupLabel = paramRow.Parameters[pr].GroupLabel;\r\n }\r\n groupParamRow.IncludeLineAtStartOfGroup = paramRow.Parameters[pr].IncludeLineAtStartOfGroup;\r\n\r\n break; // we only need to check one start parameter in the row\r\n\r\n } // END IsStartOfVisibleGroup\r\n\r\n } // END AlreadyCheckedForGroupStart\r\n\r\n if (!paramRow.AlreadyCheckedForGroupEnd) {\r\n\r\n if (!paramRow.Parameters[pr].IsInGroup) {\r\n continue;\r\n }\r\n\r\n groupParamRow.HasParameterInGroup = true;\r\n\r\n if (paramRow.Parameters[pr].IsEndOfVisibleGroup) {\r\n groupParamRow.IsEndOfVisibleGroup = true;\r\n groupParamRow.AlreadyCheckedForGroupEnd = true;\r\n\r\n groupParamRow.IncludeLineAtEndOfGroup = paramRow.Parameters[pr].IncludeLineAtEndOfGroup;\r\n\r\n break; // we only need to check one end parameter in the row\r\n\r\n }\r\n\r\n } // END IsEndOfVisibleGroup\r\n\r\n\r\n if (groupParamRow.IncludeLineAtStartOfGroup && groupParamRow.HasParameterInGroup && groupParamRow.Parameters.length == 0) {\r\n paramsRows.Rows.push(groupParamRow);\r\n }\r\n\r\n\r\n } // END looping through GROUP parameters\r\n\r\n\r\n\r\n }\r\n // END HANDLE GROUPS\r\n }\r\n\r\n getParameterRows(nonPrivateParameters: ReportParameter[], maxNumberOfColumns: number, group_Ids: number[]): ParameterRows {\r\n\r\n const newParamsRows = new ParameterRows();\r\n let group_Id = 0;\r\n\r\n const groupParameters: ReportParameter[] = [];\r\n // this gets run for each parameter group, group_Id will be zero if they are not in a Definitions.ReportGroup\r\n\r\n for (let g = 0; g < group_Ids.length; g++) {\r\n\r\n group_Id = group_Ids[g];\r\n // const C: ReportParameter[] = [];\r\n // groupParameters.length = 0;\r\n\r\n // first we need to grab only the parameters in the particular group\r\n for (let p = 0; p < nonPrivateParameters.length; p++) {\r\n\r\n if (nonPrivateParameters[p].Group_ID == group_Id) {\r\n groupParameters.push(nonPrivateParameters[p]);\r\n }\r\n }\r\n\r\n let paramRow = new ParameterRow();\r\n newParamsRows.Rows = [];\r\n paramRow.Parameters = [];\r\n let currentColumn = 1;\r\n\r\n for (let p = 0; p < groupParameters.length; p++) {\r\n\r\n groupParameters[p].ParameterHasBeenAddedToRow = false;\r\n if (groupParameters[p].IsStartOfVisibleGroup) {\r\n\r\n const startOfGroupParamRow = new ParameterRow();\r\n startOfGroupParamRow.IsStartOfVisibleGroup = true;\r\n startOfGroupParamRow.Group_ID = groupParameters[p].Group_ID;\r\n startOfGroupParamRow.GroupLabel = groupParameters[p].GroupLabel;\r\n startOfGroupParamRow.IncludeLineAtStartOfGroup = groupParameters[p].IncludeLineAtStartOfGroup;\r\n startOfGroupParamRow.IncludeGroupLabel = groupParameters[p].IncludeGroupLabel;\r\n startOfGroupParamRow.MaxNumberOfParameters = 0;\r\n newParamsRows.Rows.push(startOfGroupParamRow);\r\n }\r\n\r\n if (groupParameters[p].SpanEntireRow) {\r\n // we need to break out any parameters which span the entire row to a new row\r\n\r\n // first, we need to look for parameters which have NOT been added to a row\r\n // because they did not reach the max number of parameters\r\n\r\n const paramRowForParamsNotAddedYet = new ParameterRow();\r\n\r\n for (let x = 0; x < p; x++) {\r\n\r\n if (!groupParameters[x].ParameterHasBeenAddedToRow) {\r\n\r\n paramRowForParamsNotAddedYet.Parameters.push(groupParameters[x]);\r\n }\r\n }\r\n\r\n if (paramRowForParamsNotAddedYet.Parameters.length > 0) {\r\n\r\n this.setParameterHasBeenAddedToRow(paramRowForParamsNotAddedYet);\r\n\r\n\r\n newParamsRows.Rows.push(paramRowForParamsNotAddedYet);\r\n }\r\n\r\n paramRow = new ParameterRow();\r\n\r\n if (groupParameters[p].IsInGroup) {\r\n paramRow.HasParameterInGroup = true;\r\n paramRow.Group_ID = group_Id;\r\n }\r\n\r\n groupParameters[p].ParameterHasBeenAddedToRow = true;\r\n paramRow.Parameters.push(groupParameters[p]);\r\n paramRow.MaxNumberOfParameters = 1;\r\n newParamsRows.Rows.push(paramRow);\r\n\r\n if (groupParameters[p].IsEndOfVisibleGroup) {\r\n const endOfGroupParamRow = new ParameterRow();\r\n endOfGroupParamRow.IsEndOfVisibleGroup = true;\r\n endOfGroupParamRow.Group_ID = groupParameters[p].Group_ID;\r\n endOfGroupParamRow.GroupLabel = groupParameters[p].GroupLabel;\r\n endOfGroupParamRow.IncludeLineAtEndOfGroup = groupParameters[p].IncludeLineAtEndOfGroup;\r\n endOfGroupParamRow.IncludeGroupLabel = groupParameters[p].IncludeGroupLabel;\r\n endOfGroupParamRow.MaxNumberOfParameters = 0;\r\n newParamsRows.Rows.push(endOfGroupParamRow);\r\n }\r\n\r\n currentColumn = 1;\r\n paramRow = new ParameterRow();\r\n\r\n continue;\r\n }\r\n\r\n else { // DOES NOT SPAN WHOLE ROW\r\n\r\n if (currentColumn <= maxNumberOfColumns) {\r\n\r\n paramRow.Parameters.push(groupParameters[p]);\r\n paramRow.MaxNumberOfParameters = maxNumberOfColumns;\r\n\r\n }\r\n\r\n if (currentColumn == maxNumberOfColumns || p == groupParameters.length - 1) {\r\n // we've reached maxNumberOfColumns\r\n\r\n if (groupParameters[p].IsInGroup) {\r\n paramRow.HasParameterInGroup = true;\r\n paramRow.Group_ID = group_Id;\r\n\r\n }\r\n\r\n this.setParameterHasBeenAddedToRow(paramRow);\r\n\r\n newParamsRows.Rows.push(paramRow);\r\n\r\n if (groupParameters[p].IsEndOfVisibleGroup) {\r\n const endOfGroupParamRow = new ParameterRow();\r\n endOfGroupParamRow.IsEndOfVisibleGroup = true;\r\n endOfGroupParamRow.Group_ID = groupParameters[p].Group_ID;\r\n endOfGroupParamRow.GroupLabel = groupParameters[p].GroupLabel;\r\n endOfGroupParamRow.IncludeLineAtEndOfGroup = groupParameters[p].IncludeLineAtEndOfGroup;\r\n endOfGroupParamRow.IncludeGroupLabel = groupParameters[p].IncludeGroupLabel;\r\n endOfGroupParamRow.MaxNumberOfParameters = 0;\r\n newParamsRows.Rows.push(endOfGroupParamRow);\r\n }\r\n\r\n paramRow = new ParameterRow();\r\n if (groupParameters[p].IsInGroup) {\r\n paramRow.HasParameterInGroup = true;\r\n paramRow.Group_ID = group_Id;\r\n }\r\n\r\n currentColumn = 1;\r\n continue;\r\n // }\r\n\r\n }\r\n\r\n currentColumn++;\r\n\r\n }\r\n\r\n\r\n\r\n // } // end handling group\r\n\r\n } // END for (let p\r\n\r\n } // END handling ALL groups - for (let g\r\n\r\n\r\n\r\n this.handleParameterGroups(newParamsRows);\r\n\r\n return newParamsRows;\r\n }\r\n\r\n setParameterHasBeenAddedToRow(paramRow: ParameterRow) {\r\n for (let i = 0; i < paramRow.Parameters.length; i++) {\r\n paramRow.Parameters[i].ParameterHasBeenAddedToRow = true;\r\n }\r\n }\r\n\r\n showHiddenParametersChecked() {\r\n this.showHiddenParameters = !this.showHiddenParameters;\r\n if (this.showHiddenParameters) {\r\n this.hiddenParametersLabel = 'Hide Hidden Parameters';\r\n }\r\n else {\r\n this.hiddenParametersLabel = 'Show Hidden Parameters';\r\n }\r\n\r\n this.initParameters();\r\n }\r\n\r\n distributeByEmailClick() {\r\n\r\n this.reportService.isDistributebyEmail = true;\r\n this.selectedReport.IsDistributeByEmail = true;\r\n\r\n this.reportService.distributeByEmailOption_StudentSelected = this.distributeByEmailOption_StudentSelected;\r\n this.reportService.distributeByEmailOption_PrimaryContactSelected = this.distributeByEmailOption_PrimaryContactSelected;\r\n this.reportService.distributeByEmailOption_AllElectronicContactsSelected = this.distributeByEmailOption_AllElectronicContactsSelected;\r\n\r\n /*\r\n select 'Student' as TextField, 1 as ValueField\r\n union all\r\n select 'Primary Contact' as TextField, 2 as ValueField\r\n union all\r\n select 'All Electronic Contacts' as TextField, 3 as ValueField\r\n */\r\n\r\n // confirm they want to send the emails\r\n this.confirmReportToEmailDialogRef = this.confirmReportToEmailDialog.open(ConfirmReportToEmailComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.confirmReportToEmailDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result == true) {\r\n this.executeDistributeByEmailAsync();\r\n this.thisDialogRef.close(); // close report parameters\r\n }\r\n });\r\n\r\n this.reportService.SelectedReport = this.selectedReport;\r\n\r\n }\r\n\r\n archiveReportClick() {\r\n\r\n this.reportService.SelectedReport = this.selectedReport;\r\n\r\n // open archive popup\r\n this.archiveReportModalDialogRef = this.archiveReportModalDialog.open(ArchiveReportModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.archiveReportModalDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result == true) {\r\n this.thisDialogRef.close();\r\n }\r\n });\r\n\r\n }\r\n\r\n isEven(rownum: number) {\r\n return (rownum % 2) == 0;\r\n }\r\n\r\n reportOptionsClick() {\r\n this.reportService.SelectedReport = this.selectedReport;\r\n\r\n this.reportOptionsDialogRef = this.reportOptionsDialog.open(ReportOptionsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportOptionsDialogRef.afterClosed().subscribe(isDirty => {\r\n\r\n if (isDirty) {\r\n\r\n\r\n // do we really want to reload the report here?\r\n\r\n // clearing the parameters and definitions here so the DTO knows it is another initial load\r\n this.selectedReport.Parameters.length = 0;\r\n this.selectedReport.ReportDefinitions.length = 0;\r\n\r\n this.reportService.getReportParameters(-1, this.selectedReport, false).subscribe(selectedReport => {\r\n\r\n this.reportService.SelectedReport = selectedReport;\r\n\r\n this.ngOnInit();\r\n\r\n });\r\n\r\n } // end if (isDirty)\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n\r\n radioButtonChange(event: MatRadioChange, param: ReportParameter) {\r\n if (param.ParameterReportDefinition.CanSave) {\r\n param.ParameterReportDefinition.Value = event.value;\r\n }\r\n }\r\n\r\n\r\n datePickerChanged(param: ReportParameter) {\r\n\r\n if (param.ParameterReportDefinition.CanSave) {\r\n param.ParameterReportDefinition.Value = param.Value;\r\n }\r\n\r\n }\r\n\r\n\r\n SelectedReportToConsole() {\r\n console.log(this.ChunkedParameters);\r\n console.log(this.selectedReport);\r\n\r\n }\r\n\r\n sendToEmailChecked(isChecked: boolean) {\r\n\r\n // right now the only errors being handled are for report to email\r\n // so clear them out if they uncheck the checkbox\r\n if (!isChecked) {\r\n this.errors = [];\r\n }\r\n }\r\n\r\n\r\n // ERROR CHECKING\r\n\r\n // START - Implementing for HasErrors **********************\r\n\r\n save() {\r\n\r\n }\r\n\r\n checkErrors(): number {\r\n this.errors = [];\r\n this.validateFields();\r\n return this.errors.length;\r\n\r\n }\r\n\r\n validateFields() {\r\n this.errors = [];\r\n\r\n if (this.selectedReport.SendToEmail) {\r\n this.validateEmailFields();\r\n\r\n }\r\n\r\n }\r\n\r\n // END - Implementing for HasErrors **********************\r\n\r\n\r\n validateEmailFields() {\r\n const emailFormat = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$/;\r\n const emailsTo: string[] = this.selectedReport.EmailsToSendReport.replace(' ', '').split(';');\r\n\r\n // remove final empty string from split\r\n if (emailsTo.length > 1) {\r\n if (emailsTo[emailsTo.length - 1] == '') {\r\n emailsTo.length = emailsTo.length - 1;\r\n }\r\n }\r\n\r\n /* ******************** START EMAIL FROM VALIDATION *********************/\r\n\r\n // Email From required -- FIRST MESSAGE\r\n if (this.selectedReport.EmailFrom.trim().length == 0) {\r\n\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Required field.',\r\n fieldRef: this.emailFrom\r\n });\r\n\r\n }\r\n else {\r\n\r\n // check Email From format -- SECOND MESSAGE\r\n if (this.selectedReport.EmailFrom.trim().match(emailFormat) == null) {\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Invalid email address.',\r\n fieldRef: this.emailFrom\r\n });\r\n\r\n }\r\n\r\n else {\r\n\r\n // check Email From is a single email -- THIRD MESSAGE\r\n if (this.selectedReport.EmailFrom.split(';').length > 1) {\r\n\r\n this.errors.push({\r\n fieldName: 'Email From',\r\n errorMsg: 'Must be a single email.',\r\n fieldRef: this.emailFrom\r\n });\r\n\r\n }\r\n }\r\n\r\n }\r\n\r\n /* ******************** START EMAIL TO VALIDATION *********************/\r\n\r\n // Send to Email required -- FIRST MESSAGE\r\n if (this.selectedReport.EmailsToSendReport.trim().length == 0) {\r\n\r\n this.errors.push({\r\n fieldName: 'Send to Email(s)',\r\n errorMsg: 'Required field.',\r\n fieldRef: this.emailsToSendReport\r\n });\r\n\r\n }\r\n else {\r\n\r\n // check Send to Email(s) format -- SECOND MESSAGE\r\n for (let i = 0; i < emailsTo.length; i++) {\r\n if (emailsTo[i].length > 0 && emailsTo[i].trim().match(emailFormat) == null) {\r\n\r\n this.errors.push({\r\n fieldName: 'Send to Email(s)',\r\n errorMsg: emailsTo[i].trim() + ' is not a valid email format',\r\n fieldRef: this.emailsToSendReport\r\n });\r\n\r\n }\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n /* ******************** START EMAIL SUBJECT VALIDATION *********************/\r\n\r\n // Email Subject required\r\n if (this.selectedReport.EmailSubject.trim().length == 0) {\r\n\r\n this.errors.push({\r\n fieldName: 'Email Subject',\r\n errorMsg: 'Required field.',\r\n fieldRef: this.emailSubject\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n runReportToEmail(reportType: string) {\r\n const errCount = this.checkErrors();\r\n\r\n if (errCount > 0) {\r\n // drop out here\r\n return;\r\n }\r\n\r\n\r\n // confirm they want to send the emails\r\n this.confirmReportToEmailDialogRef = this.confirmReportToEmailDialog.open(ConfirmReportToEmailComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.confirmReportToEmailDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result == true) {\r\n this.executeRunReportToEmailAsync();\r\n this.thisDialogRef.close();\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n\r\n // this will kick off a background process by unsubscribing immediately\r\n executeRunReportToEmailAsync() {\r\n const asyncSub = this.reportService.runReportToEmail().subscribe(() => { });\r\n setTimeout(() => {\r\n asyncSub.unsubscribe();\r\n }, 0);\r\n }\r\n\r\n // this will kick off a background process by unsubscribing immediately\r\n executeDistributeByEmailAsync() {\r\n const asyncSub = this.reportService.distributeByEmail().subscribe(() => { });\r\n setTimeout(() => {\r\n asyncSub.unsubscribe();\r\n }, 0);\r\n }\r\n\r\n\r\n getReportParameters(paramId: number) {\r\n this.reportService.getReportParameters(paramId, this.selectedReport).subscribe(report => {\r\n\r\n this.selectedReport = report; // update the local reference\r\n\r\n // IMPORTANT: we need to update the chunked rows to refresh the references to the updated parameters\r\n\r\n this.initParameters();\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n cancelSendToEmailClick() {\r\n\r\n this.selectedReport.SendToEmail = !this.selectedReport.SendToEmail;\r\n this.showCancelSendToEmail = !this.showCancelSendToEmail;\r\n\r\n }\r\n\r\n cancelShowReportOptionsClick() {\r\n\r\n this.selectedReport.ShowReportOptions = !this.selectedReport.ShowReportOptions;\r\n this.showCancelShowReportOptions = !this.showCancelShowReportOptions;\r\n\r\n }\r\n\r\n\r\n cancelShowReportParameters() {\r\n // this.cancelShowReport = true;\r\n\r\n // if auto-run then use close dialog on that component for unsaved changes\r\n if (this.selectedReport.AutoRunReport && this.reportService.isForSchedule) {\r\n this.AutoRunComponent.cancelClick();\r\n } else {\r\n this.thisDialogRef.close();\r\n }\r\n }\r\n\r\n\r\n // gets the email regex for validation\r\n getEmailRegexp() {\r\n return this.reportService.getEmailRegexp();\r\n }\r\n\r\n getColumnWidth(parameter: ReportParameter) {\r\n if (parameter.SpanEntireRow) {\r\n return '100%';\r\n }\r\n else {\r\n return this.ParamColWidth;\r\n }\r\n }\r\n\r\n getFlexDirection(parameter: ReportParameter) {\r\n if (parameter.ShowOptionsVertically) {\r\n return 'column';\r\n }\r\n else {\r\n return 'row';\r\n }\r\n }\r\n\r\n getArrangeDirection(parameter: ReportParameter) {\r\n if (parameter.ShowOptionsVertically) {\r\n return 'vertical';\r\n }\r\n else {\r\n return 'horizontal';\r\n }\r\n }\r\n\r\n getWrap(parameter: ReportParameter) {\r\n if (parameter.NoWrap) {\r\n return 'nowrap';\r\n }\r\n else {\r\n return 'wrap';\r\n }\r\n }\r\n\r\n\r\n ddlChange(parameter: ReportParameter) {\r\n\r\n this.parameterChanged(parameter);\r\n\r\n }\r\n\r\n ddbcblChanged(parameter: ReportParameter, dataItem: DataSource) {\r\n dataItem.IsSelected = !dataItem.IsSelected;\r\n\r\n let allIndex = -1;\r\n\r\n for (let x = 0; x < parameter.DataSource.length; x++) {\r\n if (parameter.DataSource[x].TextField.toString().toLowerCase() == 'all' && parameter.DataSource[x].ValueField == '-1') {\r\n allIndex = x;\r\n }\r\n }\r\n\r\n if (allIndex > -1) { // has ALL checkbox\r\n\r\n\r\n // check/uncheck when All is changed\r\n if (dataItem.TextField.toString().toLowerCase() == 'all' && dataItem.ValueField == '-1') { // -1 is All\r\n\r\n // now set the others to match All\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n parameter.DataSource[i].IsSelected = parameter.DataSource[allIndex].IsSelected;\r\n }\r\n\r\n }\r\n\r\n // uncheck the All checkbox if ANY checkbox is unselected\r\n\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n\r\n if (i != allIndex && !parameter.DataSource[i].IsSelected) {\r\n parameter.DataSource[allIndex].IsSelected = false; // uncheck All\r\n break;\r\n }\r\n }\r\n\r\n\r\n // we need to check the ALL checkbox if ALL other checkboxes are checked\r\n\r\n let allCheckBoxesAreChecked = true;\r\n\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n if (i != allIndex && !parameter.DataSource[i].IsSelected) {\r\n allCheckBoxesAreChecked = false;\r\n break;\r\n }\r\n }\r\n if (allCheckBoxesAreChecked) {\r\n parameter.DataSource[allIndex].IsSelected = true;\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n\r\n // we need to update the MultiValue based on the selected checkboxes\r\n\r\n const newMulivalues: string[] = []; // must initialize for push to work!\r\n\r\n // parameter.MultiValue.\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n if (parameter.DataSource[i].IsSelected) {\r\n newMulivalues.push(parameter.DataSource[i].ValueField);\r\n }\r\n }\r\n\r\n parameter.MultiValue = newMulivalues;\r\n\r\n\r\n this.parameterChanged(parameter);\r\n }\r\n\r\n autoRunSaveClick() {\r\n this.AutoRunComponent.saveClick();\r\n }\r\n\r\n\r\n parameterChanged(parameter: ReportParameter, event?: any, index?: number) {\r\n\r\n // for cbl we need to reset the parameter's value to match the DataSource.IsSelected is true\r\n\r\n if (parameter.ControlType == 'cbl') {\r\n this.handleAllChecked(parameter, index);\r\n parameter.Value = '';\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n if (parameter.DataSource[i].IsSelected) {\r\n parameter.Value += parameter.DataSource[i].ValueField + ',';\r\n }\r\n\r\n // parameter.Value = parameter.Value.replace(/(^,)|(,$)/g, '');\r\n }\r\n\r\n if (parameter.Value.endsWith(',')) {\r\n // now remove trailing comma\r\n parameter.Value = parameter.Value.slice(0, -1);\r\n }\r\n\r\n }\r\n\r\n\r\n // for ddcbl we need to reset the parameter's value to match the MultiValue property\r\n\r\n if (parameter.ControlType == 'ddcbl') {\r\n\r\n parameter.Value = '';\r\n\r\n for (let i = 0; i < parameter.MultiValue.length; i++) {\r\n parameter.Value += parameter.MultiValue[i] + ',';\r\n }\r\n\r\n parameter.Value = parameter.Value.replace(/(^,)|(,$)/g, '');\r\n }\r\n\r\n if (parameter.IsParent) {\r\n\r\n this.getReportParameters(parameter.RC_ID);\r\n\r\n }\r\n\r\n if (parameter.ParameterName.toLowerCase() == '@distributebyemailoption') {\r\n\r\n\r\n const recipients: string = parameter.Value;\r\n\r\n this.handleDistributeByEmailOption(recipients);\r\n\r\n }\r\n }\r\n\r\n handleAllChecked(parameter: ReportParameter, index: number) {\r\n // check/uncheck when All is changed\r\n if (index == 0 && parameter.DataSource[0].TextField.toString().toLowerCase() == 'all' && parameter.DataSource[0].ValueField == '-1') { // -1 is All\r\n\r\n // now set the others to match All\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n parameter.DataSource[i].IsSelected = parameter.DataSource[0].IsSelected;\r\n }\r\n return; // drop out here\r\n }\r\n\r\n // otherwise, we need to set the All checkbox based on selections\r\n\r\n let firstCheckBoxIsAll = false;\r\n\r\n if (parameter.DataSource[0].TextField.toString().toLowerCase() == 'all' && parameter.DataSource[0].ValueField == '-1') {\r\n firstCheckBoxIsAll = true;\r\n }\r\n\r\n // uncheck the All checkbox if ANY checkbox is unselected\r\n if (firstCheckBoxIsAll) {\r\n for (let i = 1; i < parameter.DataSource.length; i++) { // starting at index 1 instead of o to skip looking at All\r\n\r\n if (!parameter.DataSource[i].IsSelected) {\r\n parameter.DataSource[0].IsSelected = false; // uncheck All\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // we need to check the ALL checkbox if ALL other checkboxes are checked\r\n\r\n let allCheckBoxesAreChecked = true;\r\n\r\n if (firstCheckBoxIsAll) {\r\n for (let i = 1; i < parameter.DataSource.length; i++) {\r\n if (!parameter.DataSource[i].IsSelected) {\r\n allCheckBoxesAreChecked = false;\r\n break;\r\n }\r\n }\r\n if (allCheckBoxesAreChecked) {\r\n parameter.DataSource[0].IsSelected = true;\r\n }\r\n }\r\n\r\n\r\n this.selectedReport.Parameters[parameter.Id].ParameterReportDefinition.Value = parameter.Value;\r\n\r\n\r\n }\r\n\r\n textChanged(parameter: ReportParameter) {\r\n\r\n }\r\n\r\n\r\n runReport(reportType: string) {\r\n\r\n this.selectedReport.ReportFormat = reportType;\r\n this.reportService.SelectedReport = this.selectedReport; // ???\r\n\r\n this.reportService.runReport().subscribe(results => {\r\n\r\n if (reportType == 'PDF' || reportType == 'EXCEL') {\r\n this.runReportByType(reportType, results);\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n runReportByType(reportType: string, results): void {\r\n\r\n try {\r\n\r\n this.selectedReport.ReportFormat = reportType; // 'PDF';\r\n\r\n const byteCharacters: string = atob(results);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n\r\n const byteArray: Uint8Array = new Uint8Array(byteNumbers);\r\n\r\n\r\n let fileExtension: string;\r\n let mimeType: string;\r\n if (this.selectedReport.ReportFormat == 'PDF') {\r\n mimeType = 'application/pdf';\r\n fileExtension = '.pdf';\r\n } else if (reportType == 'EXCEL') {\r\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset-utf-8;';\r\n fileExtension = '.xls';\r\n }\r\n\r\n let FileAsBlob: Blob;\r\n\r\n if (reportType == 'PDF') {\r\n FileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n }\r\n else if (reportType == 'EXCEL') {\r\n FileAsBlob = new Blob([byteArray], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + results });\r\n }\r\n\r\n // For other browsers:\r\n // Create a link pointing to the ObjectURL containing the blob.\r\n\r\n const reportNameWithoutSpaces: string = this.selectedReport.Name.replace(/ /g, '');\r\n\r\n const data = window.URL.createObjectURL(FileAsBlob);\r\n const link = document.createElement('a');\r\n link.href = data;\r\n link.download = reportNameWithoutSpaces + fileExtension;\r\n\r\n link.click();\r\n\r\n // For Firefox it is necessary to delay revoking the ObjectURL\r\n setTimeout(this.revokeObjectURL(data), 100);\r\n\r\n } catch { }\r\n\r\n } // end runReportPDF\r\n\r\n // For Firefox it is necessary to delay revoking the ObjectURL\r\n revokeObjectURL(data): any {\r\n window.URL.revokeObjectURL(data);\r\n }\r\n\r\n\r\n rblChanged(parameter: ReportParameter, dataItem: DataSource) {\r\n\r\n const selectedValueField = dataItem.ValueField;\r\n\r\n this.selectedReport.Parameters[parameter.Id].Value = selectedValueField;\r\n\r\n if (parameter.IsParent) {\r\n\r\n this.getReportParameters(parameter.RC_ID);\r\n }\r\n\r\n this.selectedReport.Parameters[parameter.Id] = parameter;\r\n\r\n this.reportService.SelectedReport.Parameters[parameter.Id] = parameter;\r\n\r\n } // END rblChanged\r\n\r\n\r\n\r\n cblChanged(parameter: ReportParameter, dataItem: DataSource) {\r\n\r\n // first toggle the checkbox\r\n\r\n dataItem.IsSelected = !dataItem.IsSelected;\r\n\r\n\r\n // check/uncheck when All is changed\r\n if (dataItem.TextField.toString().toLowerCase() == 'all' && dataItem.ValueField == '-1') { // -1 is All\r\n\r\n // now set the others to match All\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n parameter.DataSource[i].IsSelected = parameter.DataSource[0].IsSelected;\r\n }\r\n }\r\n\r\n let firstCheckBoxIsAll = false;\r\n\r\n if (parameter.DataSource[0].TextField.toString().toLowerCase() == 'all' && parameter.DataSource[0].ValueField == '-1') {\r\n firstCheckBoxIsAll = true;\r\n }\r\n\r\n // uncheck the All checkbox if ANY checkbox is unselected\r\n if (firstCheckBoxIsAll) {\r\n for (let i = 1; i < parameter.DataSource.length; i++) { // starting at index 1 instead of o to skip looking at All\r\n\r\n if (!parameter.DataSource[i].IsSelected) {\r\n parameter.DataSource[0].IsSelected = false; // uncheck All\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // we need to check the ALL checkbox if ALL other checkboxes are checked\r\n\r\n let allCheckBoxesAreChecked = true;\r\n\r\n if (firstCheckBoxIsAll) {\r\n for (let i = 1; i < parameter.DataSource.length; i++) {\r\n if (!parameter.DataSource[i].IsSelected) {\r\n allCheckBoxesAreChecked = false;\r\n break;\r\n }\r\n }\r\n if (allCheckBoxesAreChecked) {\r\n parameter.DataSource[0].IsSelected = true;\r\n }\r\n }\r\n\r\n\r\n // now we need to reset the value of this parameter to include only selected items\r\n\r\n let newValue = '';\r\n\r\n for (let i = 0; i < parameter.DataSource.length; i++) {\r\n if (parameter.DataSource[i].IsSelected) {\r\n\r\n // we need set the comma delimited value\r\n\r\n newValue += parameter.DataSource[i].ValueField + ',';\r\n\r\n }\r\n\r\n } // END for loop\r\n\r\n if (newValue.toString().endsWith(',')) {\r\n // now remove trailing comma\r\n newValue = newValue.toString().slice(0, -1);\r\n }\r\n\r\n parameter.Value = newValue; // ??\r\n\r\n\r\n // to update any dependencies\r\n\r\n if (parameter.IsParent) {\r\n\r\n this.getReportParameters(parameter.RC_ID);\r\n }\r\n\r\n this.parameterChanged(parameter); // ?????\r\n\r\n\r\n this.selectedReport.Parameters[parameter.Id] = parameter;\r\n\r\n } // END cblChanged\r\n\r\n legendClick() {\r\n this.reportLegendDialogRef = this.reportLegendDialog.open(ReportLegendComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n }\r\n\r\n studentSearchClick(parameter: ReportParameter) {\r\n this.StudentSearchDialogRef = this.studentSearchDialog.open(\r\n StudentSearchComponent,\r\n {\r\n data: {\r\n searchAndSelect: true,\r\n returnSelectedStudents: true\r\n\r\n },\r\n disableClose: true,\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n this.subscriptions.push(\r\n this.StudentSearchDialogRef.afterClosed().subscribe(result => {\r\n if (result != undefined) {\r\n this.selectedStudentSearch = result;\r\n\r\n this.studentList = [];\r\n\r\n for (const key of Object.keys(this.selectedStudentSearch)) {\r\n\r\n this.studentList.push(this.selectedStudentSearch[key].StudentNumber);\r\n\r\n // remove commas, replace with carriage return\r\n this.studentListString = this.studentList.join('\\r\\n');\r\n }\r\n\r\n parameter.Value = this.studentListString; // set the parameters value\r\n\r\n this.selectedStudentSearch = undefined; // cleanup\r\n this.studentList = undefined; // cleanup\r\n\r\n }\r\n })\r\n );\r\n } // end studentSearchClick\r\n\r\n getQueryString() {\r\n // FOR DEBUGGING PURPOSES\r\n this.reportService.getReportQueueQuery(this.selectedReport).subscribe(queryString => {\r\n\r\n this.debugMessage = queryString; // this.debugMessage + queryString + '\\r\\n\\r\\n';\r\n\r\n });\r\n }\r\n\r\n isDebugModeInProductionChecked(checked: boolean) {\r\n this.isDebugModeInProduction = checked;\r\n this.reportService.isDebugModeInProduction = this.isDebugModeInProduction;\r\n if (this.inDebugMode || (this.reportService.isTylerAdmin && this.isDebugModeInProduction)) {\r\n this.showReportToConsole = true;\r\n }\r\n else {\r\n this.showReportToConsole = false;\r\n }\r\n }\r\n\r\n continuedWithoutSave(): any {\r\n }\r\n\r\n getBooleanValue(val: string): boolean {\r\n let isChecked = false;\r\n if(val.toLocaleLowerCase() == 'true') {\r\n isChecked = true;\r\n }\r\n return isChecked;\r\n }\r\n\r\n\r\n\r\n} // END class ReportParametersComponent\r\n\r\n\r\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportLegend',\r\n templateUrl: './report-legend.component.html',\r\n styleUrls: ['./report-legend.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportLegendComponent implements OnInit, OnDestroy {\r\n\r\n thisDialogRef: MatDialogRef;\r\n backgroundColorForDistrictDefinedDefinition: string;\r\n backgroundColorForUserDefinedDefinition: string;\r\n\r\n legendItem_1 = 'Personal Report Options'; // default\r\n legendItem_2 = 'District Report Options'; // default\r\n\r\n\r\n constructor(\r\n reportLegendDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent,\r\n // private loginService: LoginService,\r\n private dialog: MatDialog,\r\n\r\n\r\n\r\n ) {\r\n this.thisDialogRef = reportLegendDialogRef;\r\n // get definition colors from reportService\r\n this.backgroundColorForUserDefinedDefinition = this.reportService.backgroundColorForUserDefinedDefinition;\r\n this.backgroundColorForDistrictDefinedDefinition = this.reportService.backgroundColorForDistrictDefinedDefinition;\r\n\r\n\r\n if (this.data != null && this.data != undefined) {\r\n this.legendItem_1 = data.legendItem_1;\r\n this.legendItem_2 = data.legendItem_2;\r\n }\r\n\r\n } // end constructor\r\n\r\n\r\n ngOnInit() {\r\n\r\n // place holder\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n this.reportService.isForSchedule = false;\r\n }\r\n\r\n\r\n closeClick() {\r\n\r\n this.thisDialogRef.close();\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n}// end class","\r\n
\r\n
\r\n
Legend
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n\r\n \r\n
\r\n             \r\n \r\n     {{ legendItem_1 }} \r\n
\r\n             \r\n \r\n     {{ legendItem_2 }}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
","import { System } from '../../../shared-components/System';\r\n\r\nexport class ReportqueueFilter {\r\n // Properties\r\n\tprivate _startDate: Date = undefined;\r\n\tprivate _endDate: Date = undefined;\r\n\tSISCode = '';\r\n Term = '';\r\n ReportName = '';\r\n RunDate: Date = undefined;\r\n ReportStatus = '';\r\n UserName = '';\r\n\tSubmitted: boolean = false;\r\n\tRunning: boolean = false;\r\n\tCompleted: boolean = false;\r\n\tErrorStatus: boolean = false;\r\n\r\n\t// Methods\r\n\tget startDate(): Date {\r\n\t\treturn this._startDate;\r\n\t}\r\n\r\n\tset startDate(value: Date) {\r\n\t\tSystem.roundDateDown(value);\r\n\t\tthis._startDate = value;\r\n\t}\r\n\r\n\tget endDate(): Date {\r\n\t\treturn this._endDate;\r\n\t}\r\n\r\n\tset endDate(value: Date) {\r\n\t\tSystem.roundDateUp(value);\r\n\t\tthis._endDate = value;\r\n\t}\r\n}\r\n","\r\n
\r\n \r\n Reports Queue\r\n \r\n
\r\n \r\n
\r\n

Report Queue

\r\n
\r\n \r\n \r\n {{school.SchoolName}}\r\n \r\n \r\n \r\n \r\n {{year.Description}}\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Report\r\n \r\n \r\n \r\n \r\n {{report.ReportName}}\r\n {{report.ReportName}}\r\n \r\n \r\n \r\n \r\n Site\r\n \r\n \r\n \r\n \r\n {{report.SISCode}}\r\n \r\n \r\n \r\n \r\n \r\n Year\r\n \r\n \r\n \r\n \r\n {{report.Term}}\r\n \r\n \r\n\r\n \r\n \r\n User\r\n \r\n \r\n \r\n \r\n {{report.UserName}}\r\n \r\n \r\n \r\n \r\n Run\r\n \r\n \r\n \r\n \r\n {{report.RunDate | date:'MM/dd/yy h:mm a'}}\r\n \r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n \r\n {{report.ReportStatus}}\r\n \r\n \r\n \r\n Actions\r\n \r\n Delete\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Filter\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n Submitted\r\n \r\n
\r\n
\r\n \r\n Running\r\n \r\n
\r\n
\r\n \r\n Completed\r\n \r\n
\r\n
\r\n \r\n Error\r\n \r\n
\r\n
\r\n
\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, OnInit, TemplateRef, ViewChild, EventEmitter, ChangeDetectorRef, Output } from '@angular/core';\r\nimport { GeneralPreferences } from '../../../shared-components/user-preferences/general-preferences.model';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { ReportsQueue } from '../models/reports-queue.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { DatePipe } from '@angular/common';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { StudentAttachment } from '../../student-attachment/student-attachment.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { Router } from '@angular/router';\r\nimport { Location } from '@angular/common';\r\nimport { UserPreferencesService } from '../../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { ReportqueueFilter } from './reportqueue-filter';\r\nimport * as moment from 'moment';\r\nimport { SpinnerService } from '../../../shared-components/spinner/spinner.service';\r\n// @ts-ignore\r\nimport printJS from 'print-js';\r\nimport { RouteInfo } from '../../../shared-components/routeInfo';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport * as _ from 'lodash';\r\nimport { School } from '../../../shared-components/year/school.model';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\n\r\n@Component({\r\n selector: 'app-report-queue',\r\n templateUrl: './report-queue.component.html',\r\n styleUrls: ['./report-queue.component.css']\r\n})\r\nexport class ReportQueueComponent implements OnInit {\r\n @ViewChild('filterMenu', { read: TemplateRef }) filterMenu: TemplateRef;\r\n\r\n reportsQueue: ReportsQueue[] = [];\r\n gridField: ReportsQueue;\r\n generalPreferences: GeneralPreferences;\r\n angularMatData = new TylerMatTableDataSource;\r\n checkedAll: boolean;\r\n checkIndeterminate: boolean;\r\n selectedReportQueue: number[] = [];\r\n columnsToDisplay: string[] = ['CheckBox', 'ReportName', 'SISCode', 'Term', 'UserName', 'RunDate', 'ReportStatus', 'Actions'];\r\n years: Year[] = [];\r\n selectedYear: Year;\r\n schools: School[] = [];\r\n selectedSchool: School;\r\n isDataFiltered: boolean;\r\n studentAttachment = new StudentAttachment();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator;\r\n public gridHeight = 650;\r\n public gridWidth = 100;\r\n reportQueqe = false;\r\n pageSizes = [\r\n 50,\r\n 100,\r\n 250,\r\n 500\r\n ];\r\n pageSize = 50;\r\n isFiltered: boolean = false;\r\n @Output() clearFilterEvent = new EventEmitter();\r\n ShowAllUsers: boolean = false;\r\n ShowCompleted: boolean = false;\r\n filter = new ReportqueueFilter();\r\n previousFilter = new ReportqueueFilter();\r\n showFilter: boolean = false;\r\n userName: string;\r\n constructor(\r\n private userService: UserService,\r\n private reportService: ReportingService,\r\n private sharedService: SharedService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private datePipe: DatePipe,\r\n private location: Location,\r\n private router: Router,\r\n private userPreferencesService: UserPreferencesService,\r\n private changeDetector: ChangeDetectorRef,\r\n private spinnerService: SpinnerService,\r\n private yearService: YearService,\r\n private securityService: SecurityService\r\n ) {\r\n if (this.location.path() == '/classroom360/reportsQueue') {\r\n this.reportQueqe = true;\r\n }\r\n this.generalPreferences = this.userPreferencesService.generalPreferences;\r\n this.userName = this.userService.currentUser.UserName.toUpperCase();\r\n this.years = _.uniqBy(this.yearService.years, 'Id');\r\n //this.years = this.yearService.years.filter(year => year.SchoolID == this.yearService.defaultYear.SchoolID);\r\n this.selectedYear = this.years.find(o => o.Id == this.yearService.defaultYear.Id);\r\n this.schools = this.yearService.schools;\r\n if (this.schools.filter(o => o.SchoolName == 'All').length == 0) {\r\n const sch = new School();\r\n sch.Id = 0;\r\n sch.SchoolName = 'All';\r\n this.schools.unshift(sch);\r\n }\r\n this.selectedSchool = this.schools.find(o => o.Id == this.yearService.defaultYear.SchoolID);\r\n const permission = this.securityService.userPermissions.find(o => o.GroupPermissionName == 'SDM Admin Group');\r\n if (permission != undefined && permission != null) {\r\n const yr = new Year();\r\n yr.Id = 0;\r\n yr.Description = 'All';\r\n yr.SchoolID = 0;\r\n this.years.unshift(yr);\r\n }\r\n }\r\n ngOnInit() {\r\n const dialogRefId: string = this.dialogRef.id != undefined ? this.dialogRef.id.toString() : '';\r\n if (dialogRefId != '') {\r\n this.reportQueqe = false;\r\n }\r\n if (this.userName == 'SDMADMIN') {\r\n this.ShowAllUsers = true;\r\n this.ShowCompleted = true;\r\n\r\n }\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.Completed = true;\r\n this.filter.ErrorStatus = true;\r\n this.getReportsQueue(this.ShowAllUsers);\r\n }\r\n get initialPageSize(): number {\r\n if (this.generalPreferences.PageSize != null) {\r\n return +this.generalPreferences.PageSize;\r\n }\r\n else {\r\n this.pageSize = 50;\r\n }\r\n }\r\n getReportsQueue(ShowAllUsers: boolean) {\r\n this.reportService.getReportsQueue(ShowAllUsers, this.selectedSchool.Id, this.selectedYear.Id).subscribe(result => {\r\n if (!this.ShowAllUsers) {\r\n this.columnsToDisplay.splice(this.columnsToDisplay.indexOf('UserName'), 1);\r\n if (this.userName != 'SDMADMIN') {\r\n this.ShowAllUsers = false;\r\n this.ShowCompleted = false;\r\n }\r\n }\r\n result.forEach(x => x.Selected = false);\r\n this.reportsQueue = result;\r\n this.checkedAll = false;\r\n this.checkIndeterminate = false;\r\n this.selectedReportQueue = [];\r\n this.applyFilters();\r\n setTimeout(() => {\r\n this.gridHeight = window.innerHeight - 260;\r\n }, 0);\r\n });\r\n }\r\n\r\n checkAll() {\r\n this.angularMatData.data.forEach(x => x.Selected = this.checkedAll);\r\n this.getCheckedIds();\r\n }\r\n\r\n setAllCheckbox() {\r\n this.checkedAll = false;\r\n this.checkIndeterminate = false;\r\n const selectedCount = this.angularMatData.data.filter(x => x.Selected).length;\r\n if (selectedCount > 0) {\r\n if (this.angularMatData.data.length === selectedCount) {\r\n this.checkedAll = true;\r\n }\r\n else {\r\n this.checkIndeterminate = true;\r\n }\r\n }\r\n this.getCheckedIds();\r\n }\r\n\r\n getCheckedIds() {\r\n this.selectedReportQueue = [];\r\n this.reportsQueue.forEach(element => {\r\n if (element.Selected == true) {\r\n this.selectedReportQueue.push(element.Id);\r\n }\r\n });\r\n }\r\n\r\n closeClick() {\r\n if (this.reportQueqe == true) {\r\n this.dialog.closeAll();\r\n this.router.navigateByUrl('classroom360/cards');\r\n } else {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n // reportList() {\r\n // this.dialogRef.close();\r\n // }\r\n\r\n deleteReportQueue(report: ReportsQueue) {\r\n\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = 'Confirm Deletion';\r\n deleteConfirmDialog.componentInstance.confirmMessage = 'Delete ' + report.ReportName + ' run at ' + (this.datePipe.transform(report.RunDate, 'MM/dd/yy h:mm a'));\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject && report.Id > 0) {\r\n const reportIds: number[] = [];\r\n reportIds.push(report.Id);\r\n this.reportService.deleteReportsQueue(reportIds).subscribe(result => {\r\n this.getReportsQueue(this.ShowAllUsers);\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteSelected() {\r\n if (this.selectedReportQueue.length > 0) {\r\n this.reportService.deleteReportsQueue(this.selectedReportQueue).subscribe(result => {\r\n this.getReportsQueue(this.ShowAllUsers);\r\n });\r\n }\r\n }\r\n refreshPage() {\r\n this.getReportsQueue(this.ShowAllUsers);\r\n }\r\n saveFile(report: ReportsQueue) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: report.Id,\r\n DocumentName: report.ReportName,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: 'ReportQueue',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n clearFilter() {\r\n // Clearing the filter\r\n this.filter = new ReportqueueFilter();\r\n if (this.userName == 'SDMADMIN') {\r\n this.ShowCompleted = true;\r\n }\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.Completed = true;\r\n this.filter.ErrorStatus = true;\r\n this.previousFilter = new ReportqueueFilter();\r\n this.clearFilterEvent.emit();\r\n this.angularMatData.removeAllFilters();\r\n this.applyFilter();\r\n }\r\n formChanged() {\r\n if (!this.ShowCompleted) {\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.ErrorStatus = true;\r\n this.filter.Completed = false;\r\n }\r\n else if (this.ShowCompleted) {\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.ErrorStatus = true;\r\n this.filter.Completed = true;\r\n }\r\n this.applyFilters();\r\n }\r\n applyFilters() {\r\n this.columnsToDisplay = [];\r\n let tableData: ReportsQueue[] = [];\r\n this.columnsToDisplay = ['CheckBox', 'ReportName', 'SISCode', 'Term', 'UserName', 'RunDate', 'ReportStatus', 'Actions'];\r\n // Set the table data after finishing filtering\r\n if (this.isPanelPreviousFiltered() == true) {\r\n Object.assign(this.filter, this.previousFilter);\r\n\r\n if (this.ShowCompleted && this.showFilter) {\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.ErrorStatus = true;\r\n this.filter.Completed = this.ShowCompleted;\r\n }\r\n }\r\n else if (this.userName != 'SDMADMIN') {\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.Completed = true;\r\n this.filter.ErrorStatus = true;\r\n }\r\n if (!this.ShowAllUsers) {\r\n this.columnsToDisplay.splice(this.columnsToDisplay.indexOf('UserName'), 1);\r\n }\r\n\r\n if (this.ShowCompleted && this.ShowAllUsers) {\r\n tableData = this.reportsQueue;\r\n }\r\n else if (!this.ShowCompleted && this.ShowAllUsers) {\r\n tableData = this.reportsQueue.filter(r => r.ReportStatus != 'Completed');\r\n }\r\n else if (!this.ShowCompleted && !this.ShowAllUsers && this.userName == 'SDMADMIN') {\r\n tableData = this.reportsQueue.filter(r => r.ReportStatus != 'Completed' && (r.UserName).toUpperCase() == this.userName);\r\n }\r\n else if (!this.ShowAllUsers) {\r\n tableData = this.reportsQueue.filter(r => (r.UserName).toUpperCase() == this.userName);\r\n }\r\n if (this.showFilter) {\r\n\r\n tableData = tableData.filter(be => (be.ReportStatus == 'Submitted' && this.filter.Submitted) ||\r\n (be.ReportStatus == 'Completed' && this.filter.Completed) ||\r\n (be.ReportStatus == 'Running' && this.filter.Running) ||\r\n (be.ReportStatus == 'Error' && this.filter.ErrorStatus)\r\n );\r\n if (this.filter.ReportName) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.ReportName.toLowerCase().includes(this.filter.ReportName.toLowerCase()));\r\n }\r\n if (this.filter.SISCode) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.SISCode.toLowerCase().includes(this.filter.SISCode.toLowerCase()));\r\n }\r\n if (this.filter.UserName && this.ShowAllUsers) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.UserName.toLowerCase().includes(this.filter.UserName.toLowerCase()));\r\n }\r\n\r\n if (this.filter.startDate && this.filter.startDate.toString() != 'Invalid Date') {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => moment(moment(be.RunDate, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY'), 'MM/DD/YY').isSameOrAfter(fromDate));\r\n }\r\n if (this.filter.endDate && this.filter.endDate.toString() != 'Invalid Date') {\r\n tableData = tableData.filter(be => moment(moment(be.RunDate, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY'), 'MM/DD/YY').isSameOrBefore(this.filter.endDate));\r\n }\r\n }\r\n if (this.isPanelPreviousFiltered() == true) {\r\n this.applyFilter();\r\n }\r\n else {\r\n\r\n this.angularMatData = new TylerMatTableDataSource(tableData);\r\n this.angularMatData.data = tableData;\r\n this.angularMatData.sort = this.sort;\r\n this.angularMatData.paginator = this.paginator;\r\n this.isFiltered = false;\r\n if ((!!this.filter.startDate || !!this.filter.endDate || !!this.filter.ReportName\r\n || !!this.filter.SISCode || !!this.filter.UserName) ||\r\n (!this.filter.Completed || !this.filter.Submitted || !this.filter.Running || !this.filter.ErrorStatus)) {\r\n this.isFiltered = true;\r\n }\r\n\r\n }\r\n }\r\n\r\n openFilter() {\r\n this.showFilter = true;\r\n this.gridWidth = this.showFilter ? 84 : 100;\r\n if (this.userName == 'SDMADMIN' && this.ShowCompleted) {\r\n this.filter.Submitted = true;\r\n this.filter.Completed = true;\r\n this.filter.Running = true;\r\n this.filter.ErrorStatus = true;\r\n }\r\n this.applyFilters();\r\n }\r\n\r\n // Methods\r\n applyFilter() {\r\n // POST: applies the filter\r\n // Dates\r\n let tableData: ReportsQueue[] = [];\r\n tableData = this.reportsQueue;\r\n if (this.userName == 'SDMADMIN' && (!this.filter.Completed || !this.filter.Submitted || !this.filter.Running || !this.filter.ErrorStatus)) {\r\n this.ShowCompleted = false;\r\n }\r\n else if (this.userName == 'SDMADMIN' && this.filter.Completed && (this.filter.Submitted && this.filter.Running && this.filter.ErrorStatus)) {\r\n this.ShowCompleted = this.filter.Completed;\r\n }\r\n tableData = tableData.filter(be => (be.ReportStatus == 'Submitted' && this.filter.Submitted) ||\r\n (be.ReportStatus == 'Completed' && this.filter.Completed) ||\r\n (be.ReportStatus == 'Running' && this.filter.Running) ||\r\n (be.ReportStatus == 'Error' && this.filter.ErrorStatus)\r\n );\r\n if (this.filter.ReportName) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.ReportName.toLowerCase().includes(this.filter.ReportName.toLowerCase()));\r\n }\r\n if (this.filter.SISCode) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.SISCode.toLowerCase().includes(this.filter.SISCode.toLowerCase()));\r\n }\r\n if (this.filter.UserName && this.ShowAllUsers) {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => be.UserName.toLowerCase().includes(this.filter.UserName.toLowerCase()));\r\n }\r\n\r\n if (this.filter.startDate && this.filter.startDate.toString() != 'Invalid Date') {\r\n const fromDate = this.filter.startDate;\r\n tableData = tableData.filter(be => moment(moment(be.RunDate, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY'), 'MM/DD/YY').isSameOrAfter(fromDate));\r\n }\r\n if (this.filter.endDate && this.filter.endDate.toString() != 'Invalid Date') {\r\n tableData = tableData.filter(be => moment(moment(be.RunDate, 'YYYY-MM-DDTHH:mm:ss').format('MM/DD/YY'), 'MM/DD/YY').isSameOrBefore(this.filter.endDate));\r\n }\r\n\r\n this.angularMatData = new TylerMatTableDataSource(tableData);\r\n this.angularMatData.data = tableData;\r\n this.angularMatData.sort = this.sort;\r\n this.angularMatData.paginator = this.paginator;\r\n this.isFiltered = false;\r\n if ((!!this.filter.startDate || !!this.filter.endDate || !!this.filter.ReportName\r\n || !!this.filter.SISCode || !!this.filter.UserName) ||\r\n (!this.filter.Completed || !this.filter.Submitted || !this.filter.Running || !this.filter.ErrorStatus)) {\r\n this.isFiltered = true;\r\n }\r\n }\r\n\r\n saveFilter() {\r\n // PRE: the save button is clicked in the filter\r\n // POST: saves the filter and closes the menu\r\n this.showFilter = false;\r\n this.gridWidth = this.showFilter ? 84 : 100;\r\n setTimeout(\r\n () => {\r\n // Saving the filter to the previous filter\r\n this.previousFilter = new ReportqueueFilter();\r\n Object.assign(this.previousFilter, this.filter);\r\n // Applying the filter\r\n this.applyFilters();\r\n // Detecting changes to prevent errors\r\n this.changeDetector.detectChanges();\r\n },\r\n 0\r\n );\r\n }\r\n\r\n closeFilter() {\r\n this.showFilter = false;\r\n this.gridWidth = this.showFilter ? 84 : 100;\r\n // PRE: the close filter button is clicked\r\n // POST: reverts the filter and closes the menu\r\n setTimeout(\r\n () => {\r\n // Resetting the filter\r\n if (this.isPanelPreviousFiltered() == false) {\r\n this.initialFilter();\r\n }\r\n // Applying the filter\r\n this.applyFilters();\r\n // Detecting page changes to deal with ExpressionChanged errors\r\n this.changeDetector.detectChanges();\r\n },\r\n 0\r\n );\r\n }\r\n isPanelFiltered(): boolean {\r\n return !!this.filter.startDate ||\r\n !!this.filter.endDate ||\r\n !!this.filter.ReportName ||\r\n !!this.filter.SISCode ||\r\n !!this.filter.UserName ||\r\n this.filter.Completed ||\r\n this.filter.Submitted ||\r\n this.filter.Running ||\r\n this.filter.ErrorStatus;\r\n }\r\n isPanelPreviousFiltered(): boolean {\r\n return !!this.previousFilter.startDate ||\r\n !!this.previousFilter.endDate ||\r\n !!this.previousFilter.ReportName ||\r\n !!this.previousFilter.SISCode ||\r\n !!this.previousFilter.UserName ||\r\n this.previousFilter.Completed ||\r\n this.previousFilter.Submitted ||\r\n this.previousFilter.Running ||\r\n this.previousFilter.ErrorStatus;\r\n }\r\n initialFilter() {\r\n this.filter = new ReportqueueFilter();\r\n if (this.userName == 'SDMADMIN') {\r\n this.ShowAllUsers = true;\r\n this.ShowCompleted = true;\r\n }\r\n this.filter.Submitted = true;\r\n this.filter.Running = true;\r\n this.filter.Completed = true;\r\n this.filter.ErrorStatus = true;\r\n }\r\n printClick() {\r\n if (this.router.url.indexOf('classroom360/reportsQueue') > 0) {\r\n // Timeout is needed to allow the spinner to show before the print preview load takes priority\r\n setTimeout(() => {\r\n this.sharedService.pageToPdfTrigger = !this.sharedService.pageToPdfTrigger;\r\n }, 0);\r\n }\r\n else {\r\n // If page open from matDialog should use Id\r\n const dialogRefId: string = this.dialogRef.id != undefined ? this.dialogRef.id.toString() : '';\r\n const pagePrintStyle: string = RouteInfo.getPagePrintStyle(this.router.url);\r\n const styleURLs: string[] = ['./assets/styles/print-styles.css'];\r\n\r\n if (pagePrintStyle) {\r\n styleURLs.push(pagePrintStyle);\r\n }\r\n this.spinnerService.showSpinner = true;\r\n // Timeout is needed to allow the spinner to show before the print preview load takes priority\r\n setTimeout(() => {\r\n printJS({\r\n printable: this.router.url.toString() == '/classroom360/reportsQueue' ? 'print-content' : dialogRefId,\r\n documentTitle: 'OneSIS',\r\n type: 'html',\r\n css: styleURLs,\r\n ignoreElements: ['print-ignore'],\r\n targetStyles: ['*'],\r\n maxWidth: 1500\r\n });\r\n this.spinnerService.showSpinner = false;\r\n }, 500);\r\n }\r\n }\r\n\r\n yearChange() {\r\n this.yearService.getUserSchools(this.selectedYear.Id).subscribe(results => {\r\n this.schools = results;\r\n if (this.schools.filter(o => o.SchoolName == 'All').length == 0) {\r\n const sch = new School();\r\n sch.Id = 0;\r\n sch.SchoolName = 'All';\r\n this.schools.unshift(sch);\r\n }\r\n const selectedSchool: School = this.schools.find(o => o.Id == this.selectedSchool.Id) != undefined ? this.schools.find(o => o.Id == this.selectedSchool.Id) : this.schools.find(o => o.Id == this.selectedYear.SchoolID);\r\n this.selectedSchool = selectedSchool;\r\n });\r\n }\r\n\r\n schoolChange() { }\r\n\r\n searchClick() {\r\n this.getReportsQueue(this.ShowAllUsers);\r\n }\r\n}\r\n","
\r\n
\r\n\r\n
\r\n Setup Necessary\r\n
\r\n\r\n
\r\n {{Report.Name}} must be added to a report folder before being scheduled for Auto-Run. \r\n
\r\n\r\n
\r\n Scheduling Auto-Run reports is disabled.
\r\n Please contact your system administrator for more information.\r\n
\r\n\r\n
\r\n Auto-Run is disabled for {{Report.Name}}.
\r\n Please contact your system administrator for more information.\r\n
\r\n\r\n
\r\n {{Report.Name}} can not be removed from all report folders.
\r\n Please disable scheduled auto-runs first.\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportParametersComponent } from '../parameters/report-parameters.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportAutoRunMessage',\r\n templateUrl: './report-autorun-message.component.html'\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportAutoRunMessageComponent implements OnInit, OnDestroy {\r\n\r\n thisDialogRef: MatDialogRef;\r\n\r\n // loginSettings: LoginSettings;\r\n allowAutoRunReport: boolean;\r\n reportFolders: ReportFolder[] = [];\r\n // //ReportParameters: ReportParameter[]; //??\r\n\r\n Report: Report;\r\n // reportSettingsDialogRef: MatDialogRef;\r\n\r\n reportsMode: number; // enum: MyReports = 1, AllReports = 2\r\n inDebugMode: boolean;\r\n selectedFolderIds: number[] = [];\r\n reportParametersDialogRef: MatDialogRef;\r\n\r\n constructor(\r\n reportAutoRunMessageDialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent,\r\n // private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private reportParametersDialog: MatDialog,\r\n // private allReportsComponent: AllReportsComponent\r\n\r\n ) {\r\n\r\n this.thisDialogRef = reportAutoRunMessageDialogRef;\r\n // this.allowAutoRunReport = this.loginService.LoginSettings.AllowAutoRunReport;\r\n // this.loginSettings = loginService.LoginSettings;\r\n this.allowAutoRunReport = this.reportService.allowAutoRunReport;\r\n this.inDebugMode = reportService.inDebugMode;\r\n this.Report = this.reportService.SelectedReport;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // only needs called if in all reports\r\n this.selectedFolderIds = this.reportService.selectedFolderIds;\r\n\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n this.reportService.isForSchedule = false;\r\n }\r\n\r\n closeClick() {\r\n\r\n this.thisDialogRef.close();\r\n\r\n }\r\n\r\n} // end class\r\n","\r\n\r\n\r\n\r\n
\r\n \r\n\r\n\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n Maximum Snapshots is set to {{maxReportSnapshotAllowed}}\r\n
\r\n
\r\n \r\n Once a Week\r\n
\r\n\r\n \r\n\r\n \r\n Monday\r\n Tuesday\r\n Wednesday\r\n Thursday\r\n Friday\r\n Saturday\r\n Sunday\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n 01\r\n 02\r\n 03\r\n 04\r\n 05\r\n 06\r\n 07\r\n 08\r\n 09\r\n 10\r\n 11\r\n 12\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n 00\r\n 05\r\n 10\r\n 15\r\n 20\r\n 25\r\n 30\r\n 35\r\n 40\r\n 45\r\n 50\r\n 55\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n AM\r\n PM\r\n\r\n \r\n\r\n \r\n
\r\n \r\n Once a Day\r\n
\r\n\r\n \r\n\r\n \r\n 01\r\n 02\r\n 03\r\n 04\r\n 05\r\n 06\r\n 07\r\n 08\r\n 09\r\n 10\r\n 11\r\n 12\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n 00\r\n 05\r\n 10\r\n 15\r\n 20\r\n 25\r\n 30\r\n 35\r\n 40\r\n 45\r\n 50\r\n 55\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n AM\r\n PM\r\n\r\n \r\n\r\n \r\n
\r\n \r\n Once Only\r\n
\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n\r\n \r\n 01\r\n 02\r\n 03\r\n 04\r\n 05\r\n 06\r\n 07\r\n 08\r\n 09\r\n 10\r\n 11\r\n 12\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n 00\r\n 05\r\n 10\r\n 15\r\n 20\r\n 25\r\n 30\r\n 35\r\n 40\r\n 45\r\n 50\r\n 55\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n AM\r\n PM\r\n\r\n \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, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n// import { LoginService } from '../../login/login.service';\r\n// import { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\n// import { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { NgForm } from '@angular/forms';\r\nimport { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { CheckForErrorsMessageComponent } from '../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\nimport { System } from '../../../shared-components/System';\r\n// import { MyReportsComponent } from '../my-reports/my-reports.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportSettingsAutoRun',\r\n templateUrl: './report-settings-autorun.component.html',\r\n styleUrls: ['./report-settings.folders.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportSettingsAutoRunComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild('autorunForm', { read: NgForm, static: true }) autorunForm: NgForm;\r\n // @ViewChildren('timePickerForm', {read: NgForm}) timePickerForm: NgForm;\r\n thisDialogRef: MatDialogRef;\r\n\r\n // loginSettings: LoginSettings;\r\n allowAutoRunReport: boolean;\r\n autoRunTime: string;\r\n autoRunTime24: string;\r\n hoursNum: Number;\r\n reportFolders: ReportFolder[] = [];\r\n // //ReportParameters: ReportParameter[]; //??\r\n\r\n selectedReport: Report;\r\n // reportSettingsDialogRef: MatDialogRef;\r\n\r\n reportsMode: number; // enum: MyReports = 1, AllReports = 2\r\n foldersChkAll: boolean;\r\n noFolderSelected: boolean;\r\n isChecked: boolean;\r\n inDebugMode: boolean;\r\n // MaximumSnapshots: number;\r\n maxReportSnapshotAllowed: number;\r\n reportParametersDialogRef: MatDialogRef;\r\n isDirty: boolean;\r\n AutoRunHour_0: string;\r\n AutoRunMinute_0: string;\r\n AutoRunPeriod_0: string;\r\n AutoRunHour_1: string;\r\n AutoRunMinute_1: string;\r\n AutoRunPeriod_1: string;\r\n AutoRunHour_2: string;\r\n AutoRunMinute_2: string;\r\n AutoRunPeriod_2: string;\r\n today: Date;\r\n\r\n constructor(\r\n reportSettingsDialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent,\r\n // private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private reportParametersDialog: MatDialog,\r\n // private allReportsComponent: AllReportsComponent\r\n\r\n ) {\r\n\r\n this.thisDialogRef = reportSettingsDialogRef;\r\n this.selectedReport = reportService.SelectedReport;\r\n this.reportFolders = reportService.ReportFolders;\r\n // this.allowAutoRunReport = this.loginService.LoginSettings.AllowAutoRunReport;\r\n // this.loginSettings = loginService.LoginSettings;\r\n this.allowAutoRunReport = this.reportService.allowAutoRunReport;\r\n this.inDebugMode = reportService.inDebugMode;\r\n this.maxReportSnapshotAllowed = this.reportService.maxReportSnapshotAllowed;\r\n\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // only needs called if in all reports\r\n if (this.reportService.isAllReports) {\r\n this.getMyReportFolders();\r\n }\r\n\r\n // set form auto-run time for frequency if exists\r\n if (this.selectedReport.AutoRunReport && this.selectedReport.AutoRunTime > '') {\r\n this.convertTime24to12(this.selectedReport.AutoRunTime, this.selectedReport.AutoRunFrequency);\r\n }\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.reportFolders);\r\n console.log(this.reportService.ReportFolders);\r\n }\r\n this.reportService.isForSchedule = true;\r\n\r\n // allow auto run when this component is opened and report is in a folder\r\n if (this.selectedReport.ReportFolder == '') {\r\n this.selectedReport.AutoRunReport = false;\r\n } else {\r\n this.selectedReport.AutoRunReport = true;\r\n\r\n }\r\n\r\n this.isDirty = false;\r\n\r\n // default date picker to today if not set in DB (new autorun)\r\n if (this.selectedReport.AutoRunDate.toString() == '0001-01-01T00:00:00') {\r\n this.today = new Date();\r\n this.selectedReport.AutoRunDate = this.today;\r\n }\r\n\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n this.reportService.isForSchedule = false;\r\n }\r\n\r\n initFolder() {\r\n\r\n\r\n let reportIsInAllFolders = false;\r\n let reportIsInThisFolder = false;\r\n let folderCount = 0;\r\n\r\n for (let f = 0; f < this.reportFolders.length; f++) {\r\n for (let r = 0; r < this.reportFolders[f].Reports.length; r++) {\r\n if (this.reportFolders[f].Reports[r].Id == this.selectedReport.Id) {\r\n this.reportFolders[f].ReportInFolder = true;\r\n reportIsInThisFolder = true;\r\n folderCount += 1;\r\n break;\r\n }\r\n else {\r\n this.reportFolders[f].ReportInFolder = false;\r\n reportIsInThisFolder = false;\r\n }\r\n }\r\n }\r\n if (folderCount == this.reportFolders.length) {\r\n reportIsInAllFolders = true;\r\n this.foldersChkAll = true;\r\n this.noFolderSelected = false;\r\n }\r\n else {\r\n this.foldersChkAll = false;\r\n }\r\n if (folderCount == 0) {\r\n this.noFolderSelected = true;\r\n }\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.reportFolders);\r\n console.log('foldersChkAll:');\r\n console.log(this.foldersChkAll);\r\n console.log('folderCount');\r\n console.log(folderCount);\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.selectedReport);\r\n console.log(this.reportFolders);\r\n\r\n // this.loginService.MaximumSnapshots\r\n\r\n }\r\n\r\n // this.MaximumSnapshots = this.reportService.maxReportSnapshotAllowed;\r\n\r\n this.setSelectedFolders();\r\n this.getReportParameters();\r\n }\r\n\r\n getMyReportFolders(): void {\r\n this.reportService.getMyReportFolders().subscribe(reportFolders => {\r\n this.reportFolders = reportFolders;\r\n this.reportService.ReportFolders = this.reportFolders;\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsAutoRunComponent=>getMyReportFolders()');\r\n console.log(this.reportFolders);\r\n }\r\n this.initFolder();\r\n });\r\n }\r\n\r\n // openAutorunDefaultParametersDialog() {\r\n // this.reportParametersDialogRef = this.reportParametersDialog.open(ReportParametersComponent, {\r\n // panelClass: 'tyl-mat-dialog',\r\n // disableClose: true\r\n // });\r\n\r\n // // this.reportsDialogRef.beforeClose().subscribe(result => {\r\n // // console.log('shared/HeaderComponent =>reportsDialogRef.beforeClose()');\r\n // // });\r\n\r\n\r\n // this.reportParametersDialogRef.afterClosed().subscribe(result => {\r\n // this.reportService.SelectedReport = null;\r\n // this.reportService.autoRunSnapshot = null;\r\n // this.reportService.isForSchedule = false;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n\r\n // }\r\n // });\r\n // }\r\n\r\n // openReportParametersWindow() {\r\n\r\n\r\n\r\n // }\r\n\r\n getReportParameters() {\r\n // todo: forschedule = true!!!\r\n this.reportService.getReportParameters(this.reportService.login_ID, this.selectedReport, true).subscribe(report => {\r\n // GetReportParameters?userId=72646¶mId=-1&ayIdentifier=1819&schoolId=10&forSchedule=true\r\n if (this.reportService.inDebugMode) {\r\n console.log(report);\r\n }\r\n\r\n this.selectedReport = report;\r\n this.reportService.SelectedReport = report;\r\n // this.openReportParametersWindow();\r\n\r\n });\r\n }\r\n\r\n SelectedReportToConsole() {\r\n console.log(this.selectedReport);\r\n }\r\n\r\n convertTime12to24(time12h: string) {\r\n\r\n const [time, period] = time12h.split(' ');\r\n\r\n let [hours, minutes] = time.split(':');\r\n\r\n if (hours === '12') {\r\n hours = '00';\r\n }\r\n\r\n if (period === 'PM') {\r\n this.hoursNum = parseInt(hours, 10) + 12;\r\n hours = this.hoursNum.toString();\r\n }\r\n // to avoid error\r\n minutes = minutes;\r\n\r\n return hours + ':' + minutes;\r\n }\r\n\r\n isValidDate(d) {\r\n if (Object.prototype.toString.call(d) === '[object Date]' && isFinite(d)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // isValidDate(d) {\r\n // if (Object.prototype.toString.call(d) === '[object Date]') {\r\n // // it is a date\r\n // if (isNaN(d.getTime())) { // d.valueOf() could also work\r\n // return false; // date is not valid\r\n // } else {\r\n // return true; // date is valid\r\n // }\r\n // } else {\r\n // return false; // not a date\r\n // }\r\n // }\r\n\r\n saveClick() { // save auto-run settings\r\n\r\n // if is existing autorun and user wants to delte it, no validation necessary\r\n\r\n if (this.selectedReport.AutoRunReport) {\r\n\r\n System.forceUpdateValidity(this.autorunForm);\r\n // this.TimePicker.validate();\r\n // System.forceUpdateValidity(this.TimePicker.timePickerForm);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(this.selectedReport.AutoRunFrequency);\r\n // console.log(this.selectedReport.AutoRunDate);\r\n // console.log(this.AutoRunHour_2);\r\n // console.log(this.AutoRunMinute_2);\r\n // console.log(this.AutoRunPeriod_2);\r\n // }\r\n // set & convert time from timePicker\r\n // debugger;\r\n switch (this.selectedReport.AutoRunFrequency) {\r\n case 0: // Weekly\r\n if (!System.isValid(this.selectedReport.AutoRunDay) || !System.isValid(this.AutoRunHour_0) || !System.isValid(this.AutoRunMinute_0) || !System.isValid(this.AutoRunPeriod_0)) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('System.isValid(this.selectedReport.AutoRunDay)');\r\n console.log(System.isValid(this.selectedReport.AutoRunDay));\r\n console.log('System.isValid(this.AutoRunHour_0)');\r\n console.log(System.isValid(this.AutoRunHour_0));\r\n console.log('System.isValid(this.AutoRunMinute_0)');\r\n console.log(System.isValid(this.AutoRunMinute_0));\r\n console.log('System.isValid(this.AutoRunHour_0)');\r\n console.log(System.isValid(this.AutoRunPeriod_0));\r\n }\r\n\r\n return;\r\n\r\n } else {\r\n\r\n this.autoRunTime = this.AutoRunHour_0 + ':' + this.AutoRunMinute_0 + ' ' + this.AutoRunPeriod_0;\r\n }\r\n\r\n break;\r\n\r\n case 1: // Daily\r\n if (!System.isValid(this.AutoRunHour_1) || !System.isValid(this.AutoRunMinute_1) || !System.isValid(this.AutoRunPeriod_1)) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n\r\n console.log('System.isValid(this.AutoRunHour_1)');\r\n console.log(System.isValid(this.AutoRunHour_1));\r\n console.log('System.isValid(this.AutoRunMinute_1)');\r\n console.log(System.isValid(this.AutoRunMinute_1));\r\n console.log('System.isValid(this.AutoRunPeriod_1)');\r\n console.log(System.isValid(this.AutoRunPeriod_1));\r\n }\r\n\r\n return;\r\n\r\n } else {\r\n this.autoRunTime = this.AutoRunHour_1 + ':' + this.AutoRunMinute_1 + ' ' + this.AutoRunPeriod_1;\r\n }\r\n\r\n break;\r\n\r\n case 2: // Once\r\n // System.roundDateDown(this.selectedReport.AutoRunDate);\r\n // if (!this.isValidDate(this.selectedReport.AutoRunDate) || !System.isValid(this.AutoRunHour_2) || !System.isValid(this.AutoRunMinute_2) || !System.isValid(this.AutoRunPeriod_2)) {\r\n if (!(System.isValid(this.selectedReport.AutoRunDate) || this.isValidDate(this.selectedReport.AutoRunDate) || !System.isValid(this.AutoRunHour_2) || !System.isValid(this.AutoRunMinute_2) || !System.isValid(this.AutoRunPeriod_2))) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('Once');\r\n console.log('System.isValid(this.selectedReport.AutoRunDate)');\r\n console.log(System.isValid(this.selectedReport.AutoRunDate));\r\n console.log(this.selectedReport.AutoRunDate);\r\n console.log('System.isValid(this.AutoRunHour_2)');\r\n console.log(System.isValid(this.AutoRunHour_2));\r\n console.log('System.isValid(this.AutoRunMinute_2)');\r\n console.log(System.isValid(this.AutoRunMinute_2));\r\n console.log('System.isValid(this.AutoRunPeriod_2)');\r\n console.log(System.isValid(this.AutoRunPeriod_2));\r\n }\r\n\r\n return;\r\n\r\n } else {\r\n\r\n this.autoRunTime = this.AutoRunHour_2 + ':' + this.AutoRunMinute_2 + ' ' + this.AutoRunPeriod_2;\r\n }\r\n\r\n break;\r\n } // end switch\r\n\r\n // this.autoRunTime = this.TimePicker.AutoRunHour + ':' + this.TimePicker.AutoRunMinute + ' ' + this.TimePicker.AutoRunPeriod;\r\n this.reportService.SelectedReport.AutoRunTime = this.convertTime12to24(this.autoRunTime);\r\n\r\n } // end validation\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('passed validation');\r\n }\r\n\r\n\r\n this.reportService.saveReportAutoRunSettings().subscribe(res => {\r\n this.thisDialogRef.close('Auto Run Saved');\r\n\r\n\r\n });\r\n // const selectedFolderIds: number[] = [];\r\n // for (let i = 0; i < this.reportFolders.length; i++) {\r\n // if (this.reportFolders[i].ReportInFolder) {\r\n // selectedFolderIds.push(this.reportFolders[i].Id);\r\n // }\r\n // }\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('saveClick()');\r\n // console.log(selectedFolderIds);\r\n // }\r\n\r\n // this.saveFolderReports(selectedFolderIds);\r\n\r\n // void SaveFolderReports(int loginId, int reportId, System.Collections.Generic.List folderIds);\r\n\r\n }\r\n\r\n deleteClick() {\r\n\r\n this.selectedReport.AutoRunReport = false;\r\n this.reportService.saveReportAutoRunSettings().subscribe(res => {\r\n this.thisDialogRef.close('Auto Run Saved - delete');\r\n\r\n });\r\n }\r\n\r\n saveFolderReports(selectedFolderIds: number[]) {\r\n\r\n // first we need to save auto run settings\r\n this.reportService.saveReportAutoRunSettings().subscribe(res => {\r\n\r\n // now we need to save the report folders\r\n this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n this.thisDialogRef.close('Folders Saved');\r\n });\r\n\r\n });\r\n\r\n // this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n // this.thisDialogRef.close('Folders Saved');\r\n // });\r\n\r\n }\r\n\r\n\r\n setSelectedFolders() {\r\n\r\n let reportIsInAllFolders = false;\r\n let reportIsInThisFolder = false;\r\n let folderCount = 0;\r\n for (let f = 0; f < this.reportFolders.length; f++) {\r\n for (let r = 0; r < this.reportFolders[f].Reports.length; r++) {\r\n if (this.reportFolders[f].Reports[r].Id == this.selectedReport.Id) {\r\n this.reportFolders[f].ReportInFolder = true;\r\n reportIsInThisFolder = true;\r\n folderCount += 1;\r\n break;\r\n }\r\n }\r\n if (!reportIsInThisFolder) {\r\n this.reportFolders[f].ReportInFolder = false;\r\n }\r\n }\r\n if (folderCount == this.reportFolders.length) {\r\n reportIsInAllFolders = true;\r\n this.foldersChkAll = true;\r\n this.noFolderSelected = false;\r\n }\r\n else {\r\n this.foldersChkAll = false;\r\n }\r\n if (folderCount == 0) {\r\n this.noFolderSelected = true;\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('report-setting-autorun.setSelectedFolders()');\r\n console.log(this.reportFolders);\r\n console.log('foldersChkAll:');\r\n console.log(this.foldersChkAll);\r\n console.log('folderCount');\r\n console.log(folderCount);\r\n }\r\n\r\n }\r\n\r\n\r\n cancelClick() {\r\n this.checkIsDirty();\r\n if (this.reportService.inDebugMode) {\r\n console.log('isDirty: ' + this.isDirty.toString());\r\n }\r\n\r\n if (this.isDirty) {\r\n\r\n const dialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n\r\n dialog.componentInstance.dialogBox = dialog;\r\n dialog.afterClosed().subscribe(result => {\r\n console.log(result);\r\n switch (result) {\r\n case 1: { // determine if edit or new folder > save and continue\r\n this.saveClick();\r\n break;\r\n }\r\n case 0: { // continue without save\r\n this.thisDialogRef.close(false);\r\n break;\r\n }\r\n case -1: { // cancel\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n\r\n }\r\n else { // no unsaved changes\r\n this.thisDialogRef.close(); // true to refreshFolders\r\n }\r\n\r\n }\r\n\r\n autoRunReportClick() {\r\n }\r\n\r\n\r\n checkAllFolders(foldersChkAll: boolean) {\r\n\r\n this.foldersChkAll = foldersChkAll; // this.isChecked;\r\n this.noFolderSelected = !foldersChkAll; // this.isChecked;\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => checkAllFolders( ' + foldersChkAll + ')');\r\n console.log(this.reportFolders);\r\n console.log(this.foldersChkAll);\r\n console.log(this.noFolderSelected);\r\n }\r\n\r\n\r\n for (let i = 0; i < this.reportFolders.length; i++) {\r\n if (this.foldersChkAll) {\r\n this.reportFolders[i].ReportInFolder = true;\r\n }\r\n\r\n else {\r\n this.reportFolders[i].ReportInFolder = false;\r\n }\r\n\r\n }\r\n if (this.noFolderSelected == true) {\r\n this.selectedReport.AutoRunReport = false;\r\n }\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('ReportSettingsComponent => checkAllFolders( ' + foldersChkAll + ')');\r\n // console.log(this.reportFolders);\r\n // }\r\n\r\n }\r\n\r\n chkFolder(folder: ReportFolder) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => chkFolder( ' + folder + ')');\r\n console.log(this.reportFolders);\r\n }\r\n\r\n // this.setSelectedFolders();\r\n\r\n // this.noFolderSelected = true;\r\n let reportInFolderCount = 0;\r\n\r\n for (let x = 0; x < this.reportFolders.length; x++) {\r\n if (this.reportFolders[x].ReportInFolder == true) {\r\n reportInFolderCount += 1;\r\n }\r\n }\r\n\r\n\r\n if (reportInFolderCount < this.reportFolders.length) {\r\n this.foldersChkAll = false;\r\n return;\r\n }\r\n\r\n if (reportInFolderCount == this.reportFolders.length) {\r\n this.checkAllFolders(true);\r\n return;\r\n }\r\n\r\n if (reportInFolderCount == 0) {\r\n this.selectedReport.AutoRunReport = false;\r\n this.checkAllFolders(false);\r\n this.noFolderSelected = true;\r\n return;\r\n }\r\n\r\n // this.reportService.ReportFolders = this.reportFolders; // ??\r\n\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => chkFolder( ' + folder + ')');\r\n }\r\n\r\n }\r\n\r\n setFrequency(frequency) {\r\n\r\n // this.selectedReport.AutoRunFrequency = frequency;\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => setFrequency( ' + frequency + ')');\r\n }\r\n this.selectedReport.AutoRunFrequency = frequency;\r\n // this.reportService.SelectedReport.AutoRunFrequency = frequency;\r\n // this.TimePicker.selectedReport.AutoRunFrequency = frequency;\r\n }\r\n\r\n convertTime24to12(time24h: string, frequency: number) {\r\n let period = 'AM';\r\n let [hours, minutes] = time24h.split(':');\r\n\r\n if (hours > '12') {\r\n this.hoursNum = parseInt(hours, 10) - 12;\r\n hours = this.hoursNum.toString();\r\n period = 'PM';\r\n }\r\n\r\n // need to account for 12 since it was defaulting to AM\r\n\r\n if (hours == '12') {\r\n period = 'PM';\r\n }\r\n\r\n if (hours.length == 1) {\r\n hours = '0' + hours;\r\n }\r\n\r\n // to avoid error\r\n minutes = minutes;\r\n\r\n switch (frequency) {\r\n case 0:\r\n if (hours.length == 1) {\r\n this.AutoRunHour_0 = '0' + hours;\r\n\r\n } else { this.AutoRunHour_0 = hours; }\r\n this.AutoRunMinute_0 = minutes;\r\n this.AutoRunPeriod_0 = period;\r\n break;\r\n case 1:\r\n if (hours.length == 1) {\r\n this.AutoRunHour_1 = '0' + hours;\r\n\r\n } else { this.AutoRunHour_1 = hours; }\r\n this.AutoRunMinute_1 = minutes;\r\n this.AutoRunPeriod_1 = period;\r\n break;\r\n case 2:\r\n if (hours.length == 1) {\r\n this.AutoRunHour_2 = '0' + hours;\r\n\r\n } else { this.AutoRunHour_2 = hours; }\r\n this.AutoRunMinute_2 = minutes;\r\n this.AutoRunPeriod_2 = period;\r\n break;\r\n } // end switch\r\n\r\n\r\n // return hours + ':' + minutes + period;\r\n }\r\n\r\n checkIsDirty() {\r\n // compare control values against whats in report service\r\n // convert time in forms\r\n\r\n\r\n // check if user changed frequency\r\n if (this.selectedReport.AutoRunFrequency != this.reportService.SelectedReport.AutoRunFrequency) {\r\n\r\n this.isDirty = true;\r\n }\r\n\r\n switch (this.selectedReport.AutoRunFrequency) {\r\n case 0:\r\n this.autoRunTime = this.AutoRunHour_0 + ':' + this.AutoRunMinute_0 + ' ' + this.AutoRunPeriod_0;\r\n this.autoRunTime24 = this.convertTime12to24(this.autoRunTime);\r\n\r\n if (this.selectedReport.AutoRunDay != this.reportService.SelectedReport.AutoRunDay ||\r\n this.autoRunTime24 != this.reportService.SelectedReport.AutoRunTime) {\r\n\r\n this.isDirty = true;\r\n }\r\n break;\r\n\r\n case 1:\r\n this.autoRunTime = this.AutoRunHour_1 + ':' + this.AutoRunMinute_1 + ' ' + this.AutoRunPeriod_1;\r\n this.autoRunTime24 = this.convertTime12to24(this.autoRunTime);\r\n\r\n if (this.autoRunTime24 != this.reportService.SelectedReport.AutoRunTime) {\r\n\r\n this.isDirty = true;\r\n }\r\n break;\r\n case 2:\r\n this.autoRunTime = this.AutoRunHour_2 + ':' + this.AutoRunMinute_2 + ' ' + this.AutoRunPeriod_2;\r\n this.autoRunTime24 = this.convertTime12to24(this.autoRunTime);\r\n\r\n if (this.selectedReport.AutoRunDate != this.reportService.SelectedReport.AutoRunDate ||\r\n this.autoRunTime24 != this.reportService.SelectedReport.AutoRunTime) {\r\n\r\n this.isDirty = true;\r\n }\r\n break;\r\n } // end switch\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => checkIsDirty()');\r\n console.log(this.selectedReport.AutoRunFrequency);\r\n console.log(this.selectedReport.AutoRunDate);\r\n console.log(this.selectedReport.AutoRunDay);\r\n console.log(this.autoRunTime24);\r\n console.log('checkIsDirty() > report service');\r\n\r\n console.log(this.reportService.SelectedReport.AutoRunFrequency);\r\n console.log(this.reportService.SelectedReport.AutoRunDate);\r\n console.log(this.reportService.SelectedReport.AutoRunDay);\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n\r\n\r\n // open(){\r\n // // this.open = function ($event, index) {\r\n // // $event.preventDefault();\r\n // // $event.stopPropagation();\r\n // // this.opened.forEach(function (item, index) { this.opened[index] = false; });\r\n // // this.opened[index] = true;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('ReportSettingsComponent => open( ' + '' + ')');\r\n // }\r\n // }\r\n\r\n\r\n} // end class\r\n\r\n","\r\n
Report Folders
\r\n\r\n\r\n\r\n\r\n
Include {{selectedReport.Name}} in the\r\n following folders:
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Folder\r\n \r\n Description\r\n
\r\n \r\n \r\n {{Folder.Name}}\r\n \r\n {{Folder.Description}}\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\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, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n// import { LoginService } from '../../login/login.service';\r\n// import { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\n// import { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { CheckForErrorsMessageComponent } from '../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\nimport { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { System } from '../../../shared-components/System';\r\nimport { ReportAutoRunMessageComponent } from './report-autorun-message.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportSettings',\r\n templateUrl: './report-settings.folders.component.html',\r\n styleUrls: ['./report-settings.folders.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportSettingsFoldersComponent implements OnInit, OnDestroy {\r\n @ViewChild(ReportAutoRunMessageComponent) myReportAutoRunMessageComponent: ReportAutoRunMessageComponent;\r\n\r\n thisDialogRef: MatDialogRef;\r\n\r\n // loginSettings: LoginSettings;\r\n allowAutoRunReport: boolean;\r\n reportFolders: ReportFolder[] = [];\r\n // //ReportParameters: ReportParameter[]; //??\r\n\r\n selectedReport: Report;\r\n // reportSettingsDialogRef: MatDialogRef;\r\n\r\n reportsMode: number; // enum: MyReports = 1, AllReports = 2\r\n foldersChkAll: boolean;\r\n noFolderSelected: boolean;\r\n isChecked: boolean;\r\n inDebugMode: boolean;\r\n MaximumSnapshots: number;\r\n\r\n reportParametersDialogRef: MatDialogRef;\r\n isDirty: boolean;\r\n onLoad_FolderIds: number[] = [];\r\n current_FolderIds: number[] = [];\r\n reportAutoRunMessageDialogRef: MatDialogRef;\r\n\r\n constructor(\r\n reportSettingsDialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent\r\n // private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private reportParametersDialog: MatDialog,\r\n private reportAutoRunMessageDialog: MatDialog,\r\n\r\n ) {\r\n\r\n this.thisDialogRef = reportSettingsDialogRef;\r\n this.selectedReport = reportService.SelectedReport;\r\n this.reportFolders = reportService.ReportFolders;\r\n // this.allowAutoRunReport = this.loginService.LoginSettings.AllowAutoRunReport;\r\n // this.loginSettings = loginService.LoginSettings;\r\n this.allowAutoRunReport = this.reportService.allowAutoRunReport;\r\n this.inDebugMode = reportService.inDebugMode;\r\n // https://fdvm1sisapp1.tylertech.com/ClientTierN/AppApi/TylerSis/Student/GetReportParameters?userId=72646¶mId=-1&ayIdentifier=1819&schoolId=10&forSchedule=true\r\n // https://fdvm1sisapp1.tylertech.com/ClientTierN/AppApi/TylerSis/Student/GetReportParameters?userId=72646¶mId=-1&ayIdentifier=1819&schoolId=10&forSchedule=true\r\n\r\n\r\n }\r\n\r\n ngOnInit() {\r\n // call getMyReportFolders() conditionally somehow?\r\n // only needs called if change made in all reports\r\n // this.getMyReportFolders();\r\n // this.reportFolders = this.reportService.ReportFolders;\r\n this.isDirty = false;\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.reportFolders);\r\n console.log(this.reportService.ReportFolders);\r\n }\r\n\r\n this.reportService.isForSchedule = true;\r\n\r\n // if (this.selectedReport.AutoRunDate == '0001-01-01T00:00:00') {\r\n // this.selectedReport.AutoRunDate = '11/6/2018';\r\n // }\r\n\r\n let reportIsInAllFolders = false;\r\n let reportIsInThisFolder = false;\r\n let folderCount = 0;\r\n\r\n for (let f = 0; f < this.reportFolders.length; f++) {\r\n for (let r = 0; r < this.reportFolders[f].Reports.length; r++) {\r\n if (this.reportFolders[f].Reports[r].Id == this.selectedReport.Id) {\r\n this.reportFolders[f].ReportInFolder = true;\r\n reportIsInThisFolder = true;\r\n folderCount += 1;\r\n break;\r\n }\r\n else {\r\n this.reportFolders[f].ReportInFolder = false;\r\n reportIsInThisFolder = false;\r\n }\r\n }\r\n }\r\n if (folderCount == this.reportFolders.length) {\r\n reportIsInAllFolders = true;\r\n this.foldersChkAll = true;\r\n this.noFolderSelected = false;\r\n }\r\n else {\r\n this.foldersChkAll = false;\r\n }\r\n if (folderCount == 0) {\r\n this.noFolderSelected = true;\r\n }\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.reportFolders);\r\n console.log('foldersChkAll:');\r\n console.log(this.foldersChkAll);\r\n console.log('folderCount');\r\n console.log(folderCount);\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.selectedReport);\r\n console.log(this.reportFolders);\r\n\r\n // this.loginService.MaximumSnapshots\r\n\r\n }\r\n\r\n this.MaximumSnapshots = this.reportService.maxReportSnapshotAllowed;\r\n\r\n this.setSelectedFolders();\r\n this.getReportParameters();\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n this.reportService.isForSchedule = false;\r\n }\r\n\r\n getMyReportFolders(): void {\r\n this.reportService.getMyReportFolders().subscribe(reportFolders => {\r\n this.reportFolders = reportFolders;\r\n this.reportService.ReportFolders = this.reportFolders;\r\n // this.showNoFoldersMessage = this.reportService.showNoFoldersMessage;\r\n });\r\n }\r\n\r\n\r\n openAutorunDefaultParametersDialog() {\r\n this.reportParametersDialogRef = this.reportParametersDialog.open(ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n // this.reportsDialogRef.beforeClose().subscribe(result => {\r\n // console.log('shared/HeaderComponent =>reportsDialogRef.beforeClose()');\r\n // });\r\n\r\n\r\n this.reportParametersDialogRef.afterClosed().subscribe(result => {\r\n this.reportService.SelectedReport = null;\r\n this.reportService.autoRunSnapshot = null;\r\n this.reportService.isForSchedule = false;\r\n\r\n if (this.reportService.inDebugMode) {\r\n\r\n }\r\n });\r\n }\r\n\r\n // openReportParametersWindow() {\r\n\r\n\r\n\r\n // }\r\n\r\n getReportParameters() {\r\n // todo: forschedule = true!!!\r\n this.reportService.getReportParameters(-1, this.selectedReport, true).subscribe(report => {\r\n // GetReportParameters?userId=72646¶mId=-1&ayIdentifier=1819&schoolId=10&forSchedule=true\r\n if (this.reportService.inDebugMode) {\r\n console.log(report);\r\n }\r\n\r\n this.selectedReport = report;\r\n this.reportService.SelectedReport = report;\r\n // this.openReportParametersWindow();\r\n\r\n });\r\n }\r\n\r\n SelectedReportToConsole() {\r\n console.log(this.selectedReport);\r\n }\r\n\r\n saveClick() {\r\n const selectedFolderIds: number[] = [];\r\n for (let i = 0; i < this.reportFolders.length; i++) {\r\n if (this.reportFolders[i].ReportInFolder) {\r\n selectedFolderIds.push(this.reportFolders[i].Id);\r\n }\r\n }\r\n\r\n this.reportService.selectedFolderIds = selectedFolderIds;\r\n \r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('saveClick()');\r\n console.log(selectedFolderIds);\r\n }\r\n\r\n // if autorun is turned on, do not allow remove from folder\r\n if (this.selectedReport.AutoRun == 'Y' && selectedFolderIds.length < 1) {\r\n //pop up message and block save action\r\n this.reportAutoRunMessageDialogRef = this.reportAutoRunMessageDialog.open(ReportAutoRunMessageComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n return;\r\n }\r\n\r\n this.saveFolderReports(selectedFolderIds);\r\n\r\n // void SaveFolderReports(int loginId, int reportId, System.Collections.Generic.List folderIds);\r\n\r\n }\r\n\r\n saveFolderReports(selectedFolderIds: number[]) {\r\n\r\n // first we need to save auto run settings\r\n this.reportService.saveReportAutoRunSettings().subscribe(res => {\r\n\r\n // now we need to save the report folders\r\n this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n this.thisDialogRef.close('Folders Saved');\r\n });\r\n\r\n });\r\n\r\n\r\n // this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n // this.thisDialogRef.close('Folders Saved');\r\n // });\r\n\r\n }\r\n\r\n\r\n\r\n /*\r\n\r\n SaveReportAutoRunSettings(int loginId, Sis.OneSis.Client.UI.Portal.StudentServices.ReportsDTO myReport)\r\n\r\n // Save Click\r\n $scope.SaveClick = function () {\r\n var selectedFolderIds = [];\r\n for (var i = 0; i < $scope.ReportFolders.length; i++) {\r\n if ($scope.ReportFolders[i].ReportInFolder)\r\n selectedFolderIds.push($scope.ReportFolders[i].Id);\r\n }\r\n if ($scope.SelectedReportSettings.AutoRunReport) {\r\n $scope.validateFields();\r\n if ($scope.ReportSettingsErrorCount == 0) {\r\n if ($scope.SelectedReportSettings.AutoRunFrequency == 0)\r\n $scope.SelectedReportSettings.AutoRunTime = $scope.SelectedReportSettings.WeeklyTime;\r\n else if ($scope.SelectedReportSettings.AutoRunFrequency == 1)\r\n $scope.SelectedReportSettings.AutoRunTime = $scope.SelectedReportSettings.DailyTime;\r\n else if ($scope.SelectedReportSettings.AutoRunFrequency == 2)\r\n $scope.SelectedReportSettings.AutoRunTime = $scope.SelectedReportSettings.SingleTime;\r\n $scope.SelectedReportSettings.AutoRunDate = $scope.AutoRunDate;\r\n }\r\n }\r\n\r\n if ($scope.ReportSettingsErrorCount == 0) {\r\n $scope.isReportsBusy = true;\r\n // Promise Chaining\r\n $q.all([sisService.saveFolderReports($scope.SelectedReportSettings.Id, selectedFolderIds), sisService.saveReportAutoRunSettings($scope.SelectedReportSettings)])\r\n .then(function (results) {\r\n $scope.isReportsBusy = false;\r\n getMyReports(false);\r\n $scope.getReportModules()\r\n });\r\n $uibModalInstance.dismiss('Save was clicked.');\r\n }\r\n }\r\n */\r\n\r\n setSelectedFolders() {\r\n\r\n let reportIsInAllFolders = false;\r\n let reportIsInThisFolder = false;\r\n let folderCount = 0;\r\n for (let f = 0; f < this.reportFolders.length; f++) {\r\n for (let r = 0; r < this.reportFolders[f].Reports.length; r++) {\r\n if (this.reportFolders[f].Reports[r].Id == this.selectedReport.Id) {\r\n this.reportFolders[f].ReportInFolder = true;\r\n reportIsInThisFolder = true;\r\n folderCount += 1;\r\n break;\r\n }\r\n }\r\n if (!reportIsInThisFolder) {\r\n this.reportFolders[f].ReportInFolder = false;\r\n }\r\n }\r\n if (folderCount == this.reportFolders.length) {\r\n reportIsInAllFolders = true;\r\n this.foldersChkAll = true;\r\n this.noFolderSelected = false;\r\n }\r\n else {\r\n this.foldersChkAll = false;\r\n }\r\n if (folderCount == 0) {\r\n this.noFolderSelected = true;\r\n }\r\n\r\n\r\n for (let i = 0; i < this.reportFolders.length; i++) {\r\n if (this.reportFolders[i].ReportInFolder) {\r\n this.onLoad_FolderIds.push(this.reportFolders[i].Id);\r\n }\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(this.reportFolders);\r\n console.log('foldersChkAll:');\r\n console.log(this.foldersChkAll);\r\n console.log('folderCount');\r\n console.log(folderCount);\r\n }\r\n\r\n }\r\n\r\n\r\n cancelClick() {\r\n this.checkIsDirty();\r\n if (this.reportService.inDebugMode) {\r\n console.log('isDirty: ' + this.isDirty.toString());\r\n }\r\n\r\n if (this.isDirty) {\r\n\r\n const dialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n\r\n dialog.componentInstance.dialogBox = dialog;\r\n dialog.afterClosed().subscribe(result => {\r\n console.log(result);\r\n switch (result) {\r\n case 1: { // determine if edit or new folder > save and continue\r\n this.saveClick();\r\n break;\r\n }\r\n case 0: { // continue without save\r\n this.thisDialogRef.close(false);\r\n break;\r\n }\r\n case -1: { // cancel\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n\r\n }\r\n else { // no unsaved changes\r\n this.thisDialogRef.close(); // true to refreshFolders\r\n }\r\n }\r\n\r\n autoRunReportClick() {\r\n\r\n }\r\n\r\n\r\n checkAllFolders(foldersChkAll: boolean) {\r\n\r\n this.foldersChkAll = foldersChkAll; // this.isChecked;\r\n this.noFolderSelected = !foldersChkAll; // this.isChecked;\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => checkAllFolders( ' + foldersChkAll + ')');\r\n console.log(this.reportFolders);\r\n console.log(this.foldersChkAll);\r\n console.log(this.noFolderSelected);\r\n }\r\n\r\n\r\n for (let i = 0; i < this.reportFolders.length; i++) {\r\n if (this.foldersChkAll) {\r\n this.reportFolders[i].ReportInFolder = true;\r\n }\r\n\r\n else {\r\n this.reportFolders[i].ReportInFolder = false;\r\n }\r\n\r\n }\r\n if (this.noFolderSelected == true) {\r\n this.selectedReport.AutoRunReport = false;\r\n }\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('ReportSettingsComponent => checkAllFolders( ' + foldersChkAll + ')');\r\n // console.log(this.reportFolders);\r\n // }\r\n\r\n }\r\n\r\n chkFolder(folder: ReportFolder) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => chkFolder( ' + folder + ')');\r\n console.log(this.reportFolders);\r\n }\r\n\r\n // this.setSelectedFolders();\r\n\r\n // this.noFolderSelected = true;\r\n let reportInFolderCount = 0;\r\n\r\n for (let x = 0; x < this.reportFolders.length; x++) {\r\n if (this.reportFolders[x].ReportInFolder == true) {\r\n reportInFolderCount += 1;\r\n }\r\n }\r\n\r\n\r\n if (reportInFolderCount < this.reportFolders.length) {\r\n this.foldersChkAll = false;\r\n return;\r\n }\r\n\r\n if (reportInFolderCount == this.reportFolders.length) {\r\n this.checkAllFolders(true);\r\n return;\r\n }\r\n\r\n if (reportInFolderCount == 0) {\r\n this.selectedReport.AutoRunReport = false;\r\n this.checkAllFolders(false);\r\n this.noFolderSelected = true;\r\n return;\r\n }\r\n\r\n // this.reportService.ReportFolders = this.reportFolders; // ??\r\n\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => chkFolder( ' + folder + ')');\r\n }\r\n\r\n }\r\n\r\n setFrequency(frequency) {\r\n\r\n // this.selectedReport.AutoRunFrequency = frequency;\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportSettingsComponent => setFrequency( ' + frequency + ')');\r\n }\r\n this.selectedReport.AutoRunFrequency = frequency;\r\n }\r\n\r\n checkIsDirty() {\r\n\r\n for (let i = 0; i < this.reportFolders.length; i++) {\r\n if (this.reportFolders[i].ReportInFolder) {\r\n this.current_FolderIds.push(this.reportFolders[i].Id);\r\n }\r\n }\r\n\r\n if (System.isEqual(this.current_FolderIds, this.onLoad_FolderIds)) {\r\n\r\n this.isDirty = false;\r\n } else {\r\n this.isDirty = true;\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('checkIsDirty()');\r\n console.log(this.current_FolderIds);\r\n console.log(this.onLoad_FolderIds);\r\n }\r\n\r\n }\r\n\r\n // open(){\r\n // // this.open = function ($event, index) {\r\n // // $event.preventDefault();\r\n // // $event.stopPropagation();\r\n // // this.opened.forEach(function (item, index) { this.opened[index] = false; });\r\n // // this.opened[index] = true;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('ReportSettingsComponent => open( ' + '' + ')');\r\n // }\r\n // }\r\n\r\n\r\n} // end class\r\n\r\n","
\r\n \r\n My Reports\r\n All Reports\r\n \r\n
\r\n\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, OnInit, OnDestroy, Input, Output, EventEmitter, ViewChild } from '@angular/core';\r\n// import { MatDialogRef } from '@angular/material';\r\nimport { ReportingService } from './reporting.service';\r\n\r\nimport { LoginService } from '../login/login.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginSettings } from '../login/LoginSetting.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\n\r\nimport { ClassroomSummaryService } from '../../classroom360/classroom-summary/classroom-summary.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\n\r\nimport { MyReportsComponent } from './my-reports/my-reports.component';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'report',\r\n templateUrl: './reporting.component.html'\r\n})\r\n\r\nexport class ReportingComponent implements OnInit, OnDestroy {\r\n @ViewChild(MyReportsComponent) myReportsComponent: MyReportsComponent;\r\n\r\n loginSettings: LoginSettings;\r\n\r\n // for expanding/collapsing MyReports folders\r\n @Output() expandAllFolders: EventEmitter = new EventEmitter();\r\n @Output() hideFoldersButton: EventEmitter = new EventEmitter(); // for footer\r\n\r\n @Input() refreshedReportFolders: boolean; // from footer after adding first folder?\r\n private _isMyReports: boolean;\r\n private _isAllReports: boolean;\r\n private _userCanAutoRunReports: boolean;\r\n\r\n get isMyReports(): boolean {\r\n return this.reportService.isMyReports;\r\n }\r\n\r\n set isMyReports(value: boolean) {\r\n this.reportService.isMyReports = value;\r\n }\r\n\r\n get isAllReports(): boolean {\r\n return this.reportService.isAllReports;\r\n }\r\n\r\n set isAllReports(value: boolean) {\r\n this.reportService.isAllReports = value;\r\n }\r\n\r\n get userCanAutoRunReports(): boolean {\r\n return this._userCanAutoRunReports;\r\n }\r\n\r\n set userCanAutoRunReports(value: boolean) {\r\n this._userCanAutoRunReports = value;\r\n this.reportService.userCanAutoRunReports = value;\r\n }\r\n\r\n private _showNoFoldersMessage: boolean;\r\n\r\n get showNoFoldersMessage(): boolean {\r\n return this.reportService.showNoFoldersMessage;\r\n }\r\n\r\n set showNoFoldersMessage(value: boolean) {\r\n this._showNoFoldersMessage = value;\r\n this.reportService.showNoFoldersMessage = value;\r\n }\r\n showAllReportsComponent: boolean;\r\n\r\n hasClassroom360Role: boolean;\r\n hasStudent360Role: boolean;\r\n hasCounselor360Role: boolean;\r\n\r\n allowArchiveReportPDF: boolean;\r\n utilizeTranscriptTracking: boolean;\r\n callByV9MyReports = false;\r\n\r\n\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private studentService: StudentService,\r\n private securityService: SecurityService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n ) {\r\n this.loginSettings = loginService.LoginSettings;\r\n\r\n } // end constructor\r\n\r\n\r\n ngOnInit() {\r\n this.reportService.isMyReports = true; // defaults to my reports\r\n this.reportService.isAllReports = false;\r\n\r\n this.isMyReports = this.reportService.isMyReports;\r\n this.isAllReports = this.reportService.isAllReports;\r\n\r\n this.showAllReportsComponent = false;\r\n this.getUserPermissions();\r\n this.reportService.maxReportSnapshotAllowed = this.loginService.LoginSettings.MaxReportSnapshotAllowed;\r\n this.reportService.defaultAcademicYear = this.yearService.defaultYear.AYIdentifier;\r\n this.reportService.selectedCourse = this.classroomSummaryService.selectedCourse;\r\n this.reportService.selectedStudent = this.studentService.selectedStudent;\r\n this.reportService.getReportingConfigurationSettings(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.AYIdentifier)\r\n .subscribe(settings => {\r\n this.reportService.reportingConfigurationSettings = settings;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // do any necessary cleanup here for instance properties in the reporting service\r\n this.reportService.autoRunSnapshot = null;\r\n this.reportService.SelectedReport = null;\r\n this.reportService.ReportFolders = null;\r\n this.reportService.ReportFolderToEdit = null;\r\n }\r\n\r\n getUserPermissions() {\r\n\r\n this.userCanAutoRunReports = this.loginService.LoginSettings.AllowAutoRunReport;\r\n\r\n this.utilizeTranscriptTracking = this.loginService.LoginSettings.UtilizeTranscriptTracking;\r\n\r\n this.allowArchiveReportPDF = this.loginService.LoginSettings.AllowArchiveReportPDF;\r\n\r\n // POST: obtains the permissions from the server\r\n const permissions = this.securityService.userPermissions;\r\n\r\n // Add/Edit & Autorun Report Configuration & AddEditAutorunConfiguration\r\n\r\n if (permissions.find(permission => permission.PermissionName == 'Report Definition Options')) {\r\n this.reportService.userHasPrivilegeAddEditDistrictReportDefinitions = true;\r\n }\r\n else {\r\n this.reportService.userHasPrivilegeAddEditDistrictReportDefinitions = false;\r\n }\r\n\r\n // report archive permissions\r\n if (permissions.find(permission => permission.PermissionName == 'View Archive Processes From All Users')) {\r\n this.reportService.viewArchiveProcessesFromAllUsers = true;\r\n }\r\n else {\r\n this.reportService.viewArchiveProcessesFromAllUsers = false;\r\n }\r\n\r\n if (permissions.find(permission => permission.PermissionName == 'Allow Cancel Archive Processes')) {\r\n this.reportService.allowCancelArchiveProcesses = true;\r\n }\r\n else {\r\n this.reportService.allowCancelArchiveProcesses = false;\r\n }\r\n\r\n if (permissions.find(permission => permission.PermissionName == 'Allow Delete Archived Reports')) {\r\n this.reportService.allowDeleteArchivedReports = true;\r\n }\r\n else {\r\n this.reportService.allowDeleteArchivedReports = false;\r\n }\r\n }\r\n\r\n expandAllFoldersClick(expand: any) {\r\n let expandAll = false;\r\n if(expand) {\r\n expandAll = true;\r\n }\r\n this.myReportsComponent.expandAllFoldersClick(expandAll);\r\n if (expand != null) {\r\n this.expandAllFolders.emit(expandAll);\r\n }\r\n }\r\n\r\n reportFoldersRefreshed(wereRefreshed: boolean) {\r\n if (wereRefreshed == true) {\r\n this.myReportsComponent.getMyReportFolders();\r\n }\r\n\r\n }\r\n\r\n closeClick() {\r\n this.dialog.closeAll();\r\n }\r\n} // end export class ReportingComponent\r\n\r\n\r\n","
\r\n Add Report Folder\r\n Edit Report Folder\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \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, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../../reporting.service';\r\nimport { ReportFolder } from '../../models/report-folder.model';\r\nimport { CheckForErrorsMessageComponent } from '../../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\n\r\n\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'AddReportFolder',\r\n templateUrl: './add-folder.component.html',\r\n styleUrls: ['./add-folder.component.css']\r\n})\r\n\r\nexport class AddReportFolderComponent implements OnInit, OnDestroy {\r\n\r\n // private reportService: ReportingService;\r\n\r\n // @Output() deleteSnapshotEvent: EventEmitter = new EventEmitter();\r\n\r\n // private snapshotToDelete: AutoRunSnapshot;\r\n\r\n // private _reportName: string;\r\n // private _autoRunDate: Date;\r\n\r\n // get reportName(): string {\r\n // return this._reportName;\r\n // }\r\n\r\n // set reportName(value: string) {\r\n // this._reportName = value;\r\n // }\r\n\r\n // get autoRunDate(): Date {\r\n // return this._autoRunDate;\r\n // }\r\n\r\n // set autoRunDate(value: Date) {\r\n // this._autoRunDate = value;\r\n // }\r\n\r\n folderName: string;\r\n folderDescription: string;\r\n isFolderEdit: boolean;\r\n reportFolder: ReportFolder;\r\n ReportFolderToEdit: ReportFolder;\r\n isDirty: boolean;\r\n\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog\r\n\r\n ) {\r\n\r\n this.isFolderEdit = this.reportService.isFolderEdit;\r\n this.ReportFolderToEdit = this.reportService.ReportFolderToEdit;\r\n\r\n if (this.isFolderEdit) {\r\n\r\n this.folderName = this.ReportFolderToEdit.Name;\r\n this.folderDescription = this.ReportFolderToEdit.Description;\r\n }\r\n\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('AddReportFolderComponent > isFolderEdit: ' + this.isFolderEdit.toString());\r\n }\r\n // this.snapshotToDelete = reportService.autoRunSnapshot;\r\n\r\n // this.autoRunDate = this.snapshotToDelete.TimeStamp;\r\n // this.reportName = this.snapshotToDelete.ReportName;\r\n }\r\n\r\n ngOnInit() {\r\n this.isDirty = false;\r\n }\r\n\r\n saveReportFolderClick() {\r\n // they must enter a folder name to pass validation\r\n if (typeof this.folderName === 'undefined') {\r\n return;\r\n }\r\n\r\n let folderAlreadyExists = false;\r\n for (let i; i < this.reportService.ReportFolders.length; i++) {\r\n if (this.reportService.ReportFolders[i].Name.toLowerCase() == this.folderName.toLowerCase()) {\r\n folderAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n if (!folderAlreadyExists) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('saveReportFolderClick()');\r\n }\r\n\r\n // avoid printing 'undefined' as folder desc\r\n if (typeof this.folderDescription === 'undefined') {\r\n this.folderDescription = '';\r\n // return;\r\n }\r\n\r\n // if (typeof this.folderDescription == 'undefined' || this.folderDescription == '') {\r\n // // this.folderDescription = '';\r\n // return;\r\n\r\n // }\r\n\r\n const newReportFolder = new ReportFolder();\r\n newReportFolder.Name = this.folderName;\r\n newReportFolder.Description = this.folderDescription;\r\n newReportFolder.Id = -1;\r\n\r\n this.reportService.saveReportFolder(newReportFolder).subscribe(res => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(res);\r\n }\r\n });\r\n }\r\n\r\n this.dialogRef.close(true); // true to refreshFolders\r\n\r\n\r\n }\r\n\r\n saveEditClick() {\r\n\r\n // they must enter a folder name to pass validation\r\n if (typeof this.folderName === 'undefined') {\r\n return;\r\n }\r\n\r\n let folderAlreadyExists = false;\r\n for (let i = 0; i < this.reportService.ReportFolders.length; i++) {\r\n if (this.reportService.ReportFolders[i].Name.toLowerCase() == this.folderName.toLowerCase()) {\r\n folderAlreadyExists = true;\r\n break;\r\n }\r\n }\r\n if (!folderAlreadyExists) {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('saveEditClick()');\r\n console.log('folderName');\r\n console.log(this.folderName);\r\n console.log('folderDescription');\r\n console.log(this.folderDescription);\r\n\r\n }\r\n\r\n // avoid printing 'undefined' as folder desc\r\n if (typeof this.folderDescription === 'undefined') {\r\n this.folderDescription = '';\r\n // return;\r\n }\r\n\r\n if (this.folderDescription == 'null' || this.folderDescription == null) {\r\n this.folderDescription = '';\r\n }\r\n\r\n // if (typeof this.folderDescription == 'undefined' || this.folderDescription == '') {\r\n // // this.folderDescription = '';\r\n // return;\r\n\r\n // }\r\n\r\n this.ReportFolderToEdit.Name = this.folderName;\r\n this.ReportFolderToEdit.Description = this.folderDescription;\r\n\r\n\r\n this.reportService.saveReportFolder(this.ReportFolderToEdit).subscribe(res => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(res);\r\n }\r\n });\r\n }\r\n\r\n this.dialogRef.close(true); // true to refreshFolders\r\n\r\n\r\n }\r\n checkIsDirty() {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('folderName: ' + this.folderName);\r\n console.log('folderDesc: ' + this.folderDescription);\r\n }\r\n\r\n if (this.isFolderEdit) {\r\n if (this.folderName != this.ReportFolderToEdit.Name || this.folderDescription != this.ReportFolderToEdit.Description) {\r\n\r\n this.isDirty = true;\r\n\r\n\r\n }\r\n } else { // not edit\r\n if (typeof this.folderDescription === 'undefined' && typeof this.folderName === 'undefined') {\r\n\r\n this.isDirty = false;\r\n\r\n } else {\r\n this.isDirty = true;\r\n }\r\n }\r\n }\r\n\r\n\r\n cancelClick() {\r\n\r\n this.checkIsDirty();\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('isDirty: ' + this.isDirty.toString());\r\n }\r\n\r\n if (this.isDirty) {\r\n\r\n const dialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n\r\n dialog.componentInstance.dialogBox = dialog;\r\n dialog.afterClosed().subscribe(result => {\r\n console.log(result);\r\n switch (result) {\r\n case 1: { // determine if edit or new folder > save and continue\r\n if (this.isFolderEdit) {\r\n this.saveEditClick();\r\n } else if (!this.isFolderEdit) {\r\n this.saveReportFolderClick();\r\n }\r\n break;\r\n }\r\n case 0: { // continue without save\r\n this.dialogRef.close(false);\r\n break;\r\n }\r\n case -1: { // cancel\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n\r\n }\r\n else { // no unsaved changes\r\n this.dialogRef.close(false); // true to refreshFolders\r\n }\r\n\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n}","import { Component, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../../reporting.service';\r\n\r\n// import { AutoRunSnapshot } from './../models/auto-run-report-snapshots.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'DeleteFolder',\r\n templateUrl: './delete-folder.component.html',\r\n styleUrls: ['./delete-folder.component.css']\r\n})\r\n\r\nexport class DeleteReportFolderComponent implements OnDestroy {\r\n\r\n // private reportService: ReportingService;\r\n\r\n // @Output() deleteSnapshotEvent: EventEmitter = new EventEmitter();\r\n\r\n // private _folderToDelete: ReportFolder;\r\n\r\n private _reportFolderName: string;\r\n private _reportFolderIdToDelete: number;\r\n\r\n get reportFolderName(): string {\r\n return this._reportFolderName;\r\n }\r\n\r\n set reportFolderName(value: string) {\r\n this._reportFolderName = value;\r\n }\r\n\r\n get reportFolderIdToDelete(): number {\r\n return this._reportFolderIdToDelete;\r\n }\r\n\r\n set reportFolderIdToDelete(value: number) {\r\n this._reportFolderIdToDelete = value;\r\n }\r\n\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n\r\n this.reportFolderIdToDelete = reportService.reportFolderIdToDelete;\r\n this.reportFolderName = reportService.reportFolderNameToDelete;\r\n\r\n // this.snapshotToDelete = reportService.autoRunSnapshot;\r\n\r\n // this.autoRunDate = this.snapshotToDelete.TimeStamp;\r\n // this.reportName = this.snapshotToDelete.ReportName;\r\n }\r\n\r\n okClick() {\r\n\r\n // const snapshotId = this.snapshotToDelete.AutoRunReportSnapshots_ID;\r\n\r\n this.reportService.deleteReportFolder(this.reportFolderIdToDelete).subscribe(res => {\r\n\r\n // todo: check that the delete was successful\r\n this.reportService.reportFolderNameToDelete = null;\r\n this.reportService.reportFolderIdToDelete = null;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n\r\n // }\r\n });\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n cancelClick() {\r\n // this.deleteSnapshotEvent.emit(false);\r\n this.dialogRef.close(false);\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n}","

Delete Report Folder

\r\n\r\n\r\n
This will delete the folder {{reportFolderName}}.\r\n
\r\n
\r\n\r\n\r\n \r\n","

Report Folders

\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n Folder\r\n \r\n \r\n {{Folder.Name}}\r\n \r\n \r\n\r\n \r\n Description\r\n \r\n \r\n {{Folder.Description}}\r\n \r\n \r\n\r\n \r\n Total Reports\r\n \r\n \r\n {{Folder.Reports.length}}\r\n \r\n \r\n\r\n \r\n Actions\r\n \r\n \r\n
\r\n \"Actions\"\r\n\r\n
\r\n \r\n
\r\n Edit\r\n
\r\n
\r\n Delete\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\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, OnInit, OnDestroy } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { AddReportFolderComponent } from './add-folder/add-folder.component';\r\nimport { DeleteReportFolderComponent } from './delete-folder/delete-folder.component';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportFolders',\r\n templateUrl: './report-folders.component.html',\r\n styleUrls: ['./report-folders.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\nexport class ReportFoldersComponent implements OnInit, OnDestroy {\r\n\r\n thisDialogRef: MatDialogRef;\r\n angularMatData = new TylerMatTableDataSource;\r\n columnsToDisplay: string[] = ['ReportFolderName', 'Description', 'Total', 'Actions'];\r\n\r\n reportFolders: ReportFolder[];\r\n reportFoldersOnLoad: ReportFolder[];\r\n\r\n addReportFolderDialogRef: MatDialogRef;\r\n deleteReportFolderDialogRef: MatDialogRef;\r\n isDirty: boolean;\r\n\r\n reportFolderChanged = false;\r\n\r\n // addReportFolderDialog: MatDialog;\r\n\r\n constructor(\r\n reportFoldersDialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n\r\n private addReportFolderDialog: MatDialog,\r\n private deleteReportFolderDialog: MatDialog,\r\n\r\n ) {\r\n\r\n this.thisDialogRef = reportFoldersDialogRef;\r\n this.angularMatData = new TylerMatTableDataSource(this.reportFolders);\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.reportFolders = this.reportService.ReportFolders;\r\n this.reportFoldersOnLoad = this.reportFolders;\r\n this.isDirty = false;\r\n this.loadReportData();\r\n if (this.reportService.inDebugMode) {\r\n console.log('Report-Folders Component ngOnInit()');\r\n\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n loadReportData(): void {\r\n // load data into Angular Material table\r\n this.angularMatData.data = this.reportFolders;\r\n if (this.reportService.inDebugMode) {\r\n console.log('Report-Folders Component => angularMatData');\r\n console.log(this.reportFolders);\r\n console.log(this.angularMatData);\r\n }\r\n }\r\n folderDeleteClick(folder: ReportFolder) {\r\n this.reportService.reportFolderIdToDelete = folder.Id;\r\n this.reportService.reportFolderNameToDelete = folder.Name;\r\n this.deleteReportFolderDialogRef = this.deleteReportFolderDialog.open(DeleteReportFolderComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.deleteReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('deleteReportFolderDialogRef.afterClosed()');\r\n }\r\n\r\n if (result == true) {\r\n // we need to refresh report folders\r\n\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n }\r\n\r\n folderEditClick(folder: ReportFolder) {\r\n this.reportService.isFolderEdit = true;\r\n this.reportService.ReportFolderToEdit = folder;\r\n\r\n // use add folder dialog - prepopulate name and desc\r\n this.addReportFolderDialogRef = this.addReportFolderDialog.open(AddReportFolderComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.addReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('addReportFolderDialogRef.afterClosed()');\r\n }\r\n\r\n if (result == true) {\r\n // we need to refresh report folders\r\n\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n }\r\n\r\n addFolderClick() {\r\n\r\n this.reportService.isFolderEdit = false;\r\n this.addReportFolderDialogRef = this.addReportFolderDialog.open(AddReportFolderComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.addReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('addReportFolderDialogRef.afterClosed()');\r\n }\r\n\r\n if (result == true) {\r\n // we need to refresh report folders\r\n\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n getMyReportFolders(): void {\r\n this.reportService.getMyReportFolders().subscribe(folders => {\r\n this.reportFolders = folders;\r\n this.reportService.ReportFolders = this.reportFolders;\r\n this.loadReportData();\r\n });\r\n }\r\n\r\n\r\n closeClick() {\r\n if (this.reportFolders == this.reportFoldersOnLoad) {\r\n this.isDirty = false;\r\n } else {\r\n this.isDirty = true;\r\n\r\n }\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('isDirty: ' + this.isDirty);\r\n }\r\n\r\n this.thisDialogRef.close(this.isDirty);\r\n }\r\n\r\n\r\n saveFolderReports(selectedFolderIds: number[]) {\r\n\r\n // // we need to save the report folders\r\n // this.reportService.saveFolderReports(this.reportService.login_ID, this.selectedReport.Id, selectedFolderIds).subscribe(results => {\r\n // this.thisDialogRef.close('Folders Saved');\r\n // });\r\n }\r\n\r\n}","\r\nexport class Element {\r\n\r\n Element_ID: number;\r\n ElementArea_ID: number;\r\n ElementAreaName: string;\r\n ElementSubAreaName: string;\r\n ElementSubAreas: string[] = [];\r\n ElementName: string;\r\n ControlName: string;\r\n XPath: string;\r\n ParameterName: string;\r\n ParameterValue: string;\r\n Action: string;\r\n Actions: string[] = [];\r\n}\r\n\r\nexport class ElementAction {\r\n Element: Element;\r\n Action: string;\r\n}\r\n\r\nexport enum AutomatedTestStatus {\r\n InProgress = 0,\r\n ReadyForReview = 1,\r\n Approved = 2,\r\n IsObsolete = 3\r\n}\r\n\r\nexport class AutomatedTest {\r\n Test_ID: number;\r\n TestArea_ID: number;\r\n TestAreaName: string;\r\n TestSubAreaName: string;\r\n TestName: string;\r\n TestOrder: number;\r\n InProgress: boolean;\r\n ReadyForReview: boolean;\r\n Approved: boolean;\r\n IsObsolete: boolean;\r\n IsSubTestOnly: boolean;\r\n IsInsertedStep = false;\r\n SubTestElement_ID: number;\r\n Parameter: AutomatedTestParameter;\r\n SelectedStatus: AutomatedTestStatus;\r\n SelectedStatusDescription: string;\r\n Comments: string;\r\n CopyTestId: number;\r\n}\r\n\r\nexport class AutomatedTestStep {\r\n Test_ID: number;\r\n TestArea_ID: number;\r\n TestAreaName: string;\r\n TestSubAreaName: string;\r\n TestName: string;\r\n TestOrder: number;\r\n InProgress: boolean;\r\n ReadyForReview: boolean;\r\n Approved: boolean;\r\n IsSubTestOnly: boolean;\r\n Step_ID: number;\r\n StepName: string;\r\n StepOrder: number;\r\n Elements: Element[] = [];\r\n Element: Element;\r\n Element_ID: number;\r\n ElementArea_ID: number;\r\n ElementAreaName: string;\r\n ElementSubAreaName: string;\r\n ElementSubAreas: string[] = [];\r\n ElementName: string;\r\n PageTitle: string;\r\n XPath: string;\r\n ControlName: string;\r\n Action_ID: number;\r\n ActionName = '';\r\n Parameter_ID: number;\r\n ParameterName: string;\r\n ParameterValue: string;\r\n InnerTest_ID: number;\r\n InnerTestName: string;\r\n Comments: string;\r\n}\r\n\r\nexport class AutomatedTestArea {\r\n Area_ID: number;\r\n AreaName: string;\r\n SubAreaName: string;\r\n}\r\n\r\nexport class AutomatedTestParameter {\r\n ID: number;\r\n ParameterName: string;\r\n ParameterValue: string;\r\n Test_ID: number;\r\n}\r\n\r\nexport class SubTestDependentTest {\r\n Area_ID: number;\r\n AreaName: string;\r\n SubAreaName: string;\r\n Test_ID: number;\r\n TestName: string;\r\n StepOrder: number;\r\n}\r\n\r\nexport class AutomatedTestStepQuickView {\r\n Test_ID: number;\r\n TestArea_ID: number;\r\n TestAreaName: string;\r\n TestSubAreaName: string;\r\n TestName: string;\r\n TestOrder: number;\r\n InProgress: boolean;\r\n ReadyForReview: boolean;\r\n Approved: boolean;\r\n IsSubTestOnly: boolean;\r\n Step_ID: number;\r\n StepName: string;\r\n StepOrder: number;\r\n Elements: Element[] = [];\r\n Element: Element;\r\n Element_ID: number;\r\n ElementArea_ID: number;\r\n ElementAreaName: string;\r\n ElementSubAreaName: string;\r\n ElementName: string;\r\n PageTitle: string;\r\n XPath: string;\r\n ControlName: string;\r\n Action_ID: number;\r\n ActionName = '';\r\n Parameter_ID: number;\r\n ParameterName: string;\r\n ParameterValue: string;\r\n InnerTest_ID: number;\r\n InnerTestName: string;\r\n TestComments: string;\r\n StepComments: string;\r\n}\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 \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n
Parameter NameParameter Value
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n\r\n
ModulePortalTest NameTest Order
\r\n \r\n \r\n \r\n {{item.AreaName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item}}\r\n \r\n \r\n \r\n \r\n \r\n {{selectedTest.TestName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Shared Test\r\n \r\n\r\n \r\n \r\n \r\n In Progress\r\n Ready for Review\r\n Approved\r\n Obsolete\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n\r\n
\r\n Comments
\r\n \r\n
\r\n\r\n \r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n \r\n\r\n \r\n\r\n","/* eslint-disable camelcase */\r\nimport { Component, OnInit, OnDestroy, Inject, } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { AutomatedTest, AutomatedTestArea, AutomatedTestParameter, AutomatedTestStatus } from '../models/ast-element.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'automatedTestingModal',\r\n templateUrl: './automated-testing-modal.component.html',\r\n styleUrls: ['./automated-testing-modal.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\n\r\n\r\nexport class AutomatedTestingModalComponent implements OnInit, OnDestroy {\r\n\r\n\r\n\r\n thisDialogRef: MatDialogRef;\r\n\r\n // testAreas: string[];\r\n // testArea = '';\r\n\r\n // testSubAreas: string[];\r\n // testSubArea = '';\r\n\r\n // elementAreas: string[];\r\n // elementArea = '';\r\n\r\n // elementSubAreas: string[];\r\n // elementSubArea = '';\r\n\r\n // tests: AutomatedTest[] = [];\r\n // test: AutomatedTest;\r\n\r\n\r\n // testSteps: AutomatedTestStep[] = [];\r\n\r\n // allElements: Element[];\r\n // elements: Element[];\r\n // // element: Element;\r\n\r\n // // elementActions: ElementAction[];\r\n\r\n // identifiers: string[];\r\n\r\n // actions: string[];\r\n\r\n // action = '';\r\n // controlName = '';\r\n // identifier = '';\r\n // dataInput = '';\r\n // testText = '';\r\n // testData = '';\r\n\r\n // elementListItems: DataSource[] = [];\r\n // allElementsListItems: DataSource[] = [];\r\n\r\n // showTests = true;\r\n // showTestSteps = false;\r\n\r\n action: string;\r\n title: string;\r\n\r\n editTest = false;\r\n addTest = false;\r\n addSubTest = false;\r\n\r\n test: AutomatedTest;\r\n tests: AutomatedTest[] = [];\r\n testsInArea: AutomatedTest[] = [];\r\n // selectedTest: AutomatedTest;\r\n\r\n testAreas: string[] = [];\r\n testArea = '';\r\n\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctAreas: AutomatedTestArea[] = [];\r\n distinctTestAreas: AutomatedTestArea[] = [];\r\n\r\n selectedArea: string; // AutomatedTestArea;\r\n\r\n testSubAreas: string[] = [];\r\n testSubArea = '';\r\n\r\n testOrder: number;\r\n stepOrder: number;\r\n\r\n insertStep = false;\r\n insertStepType = '';\r\n\r\n addStep = false;\r\n addStepType = '';\r\n addParameter = false;\r\n editParameter = false;\r\n\r\n parameterName: string;\r\n parameterValue: string;\r\n\r\n\r\n parameter: AutomatedTestParameter;\r\n\r\n copyTestId: number;\r\n copyTest = false;\r\n parentTest_ID: number;\r\n inDebugMode = true;\r\n\r\n // addStepComment = false;\r\n // editStepComment = false;\r\n // step: AutomatedTestStep;\r\n\r\n\r\n constructor(\r\n automatedTestingModalDialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n\r\n ) {\r\n\r\n this.inDebugMode = false;\r\n\r\n this.thisDialogRef = automatedTestingModalDialogRef;\r\n\r\n if (data.parameter == null || data.parameter == undefined) {\r\n this.parameter = new AutomatedTestParameter();\r\n this.parameterName = '';\r\n this.parameterValue = '';\r\n }\r\n else {\r\n this.parameter = data.parameter;\r\n this.parameterName = this.parameter.ParameterName;\r\n this.parameterValue = this.parameter.ParameterValue;\r\n }\r\n\r\n this.title = data.title;\r\n\r\n\r\n\r\n // console.log(this.parameter);\r\n\r\n\r\n this.testAreas = data.testAreas;\r\n this.testSubAreas = data.testSubAreas;\r\n this.testOrder = data.testOrder;\r\n this.stepOrder = data.stepOrder;\r\n this.parentTest_ID = data.parentTest_ID;\r\n this.tests = data.tests.filter(t => t.Test_ID != this.parentTest_ID); // we want to exclude the test we are coming from\r\n // console.log(this.tests);\r\n // console.log(this.parentTest_ID);\r\n\r\n this.allAreas = data.allAreas;\r\n // this.step = data.step;\r\n\r\n this.distinctAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n if (this.data.action == 'copyTest') {\r\n this.copyTest = true;\r\n this.copyTestId = data.copyTestId;\r\n } else {\r\n this.copyTest = false;\r\n this.copyTestId = 0;\r\n }\r\n\r\n if (this.data.action == 'editTest' || this.data.action == 'addParameter' || this.data.action == 'editParameter') {\r\n this.test = data.test;\r\n this.selectedArea = this.test.TestAreaName;\r\n this.testSubArea = this.test.TestSubAreaName;\r\n this.testArea = this.test.TestAreaName;\r\n }\r\n\r\n if (this.data.action == 'editTest') {\r\n this.editTest = true;\r\n }\r\n\r\n const tst = this.tests.filter(t => t.Test_ID != this.parentTest_ID);\r\n // console.log(tst);\r\n }\r\n\r\n ngOnInit() {\r\n\r\n // console.log(this.data);\r\n\r\n for (let x = 0; x < this.distinctAreas.length; x++) {\r\n // we only want top level portals for tests\r\n // if (this.distinctAreas[x].AreaName == 'Classroom360' || this.distinctAreas[x].AreaName == 'Student360' || this.distinctAreas[x].AreaName == 'Practice360' || this.distinctAreas[x].AreaName == 'Portal') {\r\n // this.distinctTestAreas.push(this.distinctAreas[x]);\r\n // }\r\n\r\n this.distinctTestAreas.push(this.distinctAreas[x]);\r\n }\r\n\r\n if (this.data.action == 'editTest' || this.data.action == 'addParameter' || this.data.action == 'editParameter') {\r\n // console.log(this.data.action);\r\n } else {\r\n this.test = new AutomatedTest();\r\n this.test.Test_ID = 0;\r\n\r\n this.test.InProgress = true;\r\n this.test.ReadyForReview = false;\r\n this.test.Approved = false;\r\n this.test.IsObsolete = false;\r\n this.test.SelectedStatus = AutomatedTestStatus.InProgress;\r\n }\r\n\r\n\r\n if (this.data.action == 'copyTest') {\r\n this.test.CopyTestId = this.copyTestId;\r\n }\r\n\r\n if (this.data.action == 'addTest' || this.data.action == 'copyTest') {\r\n this.addTest = true;\r\n this.test.TestOrder = this.testOrder;\r\n\r\n // // console.log(this.testOrder);\r\n }\r\n\r\n if (this.data.action == 'addSubTest') {\r\n this.addSubTest = true;\r\n // this.test.TestOrder = this.testOrder;\r\n\r\n // // console.log(this.tests);\r\n }\r\n\r\n if (this.data.action == 'insertStep') {\r\n this.insertStep = true;\r\n this.addSubTest = true;\r\n this.insertStepType = 'Regular Step';\r\n // this.test.TestOrder = this.testOrder;\r\n\r\n }\r\n\r\n if (this.data.action == 'addParameter') {\r\n this.addParameter = true;\r\n }\r\n\r\n if (this.data.action == 'editParameter') {\r\n this.editParameter = true;\r\n }\r\n\r\n // if (this.data.action == 'editStepComment') {\r\n // this.editStepComment = true;\r\n // }\r\n\r\n // if (this.data.action == 'addStepComment') {\r\n // this.addStepComment = true;\r\n // }\r\n\r\n\r\n // console.log(this.insertStepType);\r\n\r\n // for (let x = 0; x < this.allAreas.length; x++) {\r\n // if (this.allAreas[x].AreaName == this.selectedArea && this.allAreas[x].SubAreaName == this.testSubArea) {\r\n // this.test.TestArea_ID = this.allAreas[x].Area_ID;\r\n // }\r\n // }\r\n\r\n\r\n if (this.test.IsSubTestOnly == null || this.test.IsSubTestOnly == undefined) {\r\n this.test.IsSubTestOnly = false;\r\n }\r\n\r\n // console.log(this.test);\r\n // console.log(this.parameter);\r\n\r\n\r\n\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n\r\n\r\n toggleStepType() {\r\n\r\n // console.log('BEFORE:');\r\n // console.log(this.insertStepType);\r\n if (this.insertStepType == 'Regular Step') {\r\n this.insertStepType = 'Shared Test';\r\n } else {\r\n this.insertStepType = 'Regular Step';\r\n }\r\n\r\n // console.log('AFTER:');\r\n // console.log(this.insertStepType);\r\n }\r\n\r\n saveClick() {\r\n if (this.addParameter || this.editParameter) {\r\n\r\n // Parameter_ID: number;\r\n // ParameterName: string;\r\n // ParameterValue: string;\r\n\r\n // console.log('HERE!!!!');\r\n\r\n if (this.parameter.ParameterName == null || this.parameter.ParameterName == undefined || this.parameter.ParameterName == '') {\r\n // doing this until I wire up required checks\r\n return;\r\n }\r\n\r\n if (this.parameter.ParameterValue == null || this.parameter.ParameterValue == undefined) {\r\n this.parameter.ParameterValue = '';\r\n }\r\n\r\n\r\n // console.log(this.parameter);\r\n\r\n this.test.Parameter = this.parameter;\r\n\r\n this.reportService.saveAutomatedTestParameter(this.test.Test_ID, this.parameter).subscribe(results => {\r\n // console.log(results);\r\n\r\n // if (this.test.Parameter.ID == 0) {\r\n // this.test.Parameter.ID = results;\r\n // }\r\n this.thisDialogRef.close('addParameter');\r\n });\r\n\r\n // this.thisDialogRef.close(this.test);\r\n\r\n } else {\r\n\r\n this.test.TestSubAreaName = this.testSubArea;\r\n this.test.TestAreaName = this.testArea; // ??\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.test);\r\n console.log(this.testArea);\r\n console.log(this.testSubArea);\r\n console.log(this.selectedArea);\r\n console.table(this.allAreas);\r\n }\r\n\r\n\r\n for (let x = 0; x < this.allAreas.length; x++) {\r\n if (this.allAreas[x].AreaName == this.selectedArea && this.allAreas[x].SubAreaName == this.testSubArea) {\r\n this.test.TestArea_ID = this.allAreas[x].Area_ID;\r\n }\r\n }\r\n\r\n\r\n this.reportService.saveAutomatedTest(this.test.Test_ID, this.test).subscribe(results => {\r\n // console.log(results);\r\n\r\n if (this.test.Test_ID == 0) {\r\n this.test.Test_ID = results;\r\n }\r\n this.thisDialogRef.close(this.test);\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n }\r\n\r\n\r\n closeClick() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n okClick() {\r\n // console.log(this.insertStep);\r\n // console.log(this.insertStepType);\r\n // console.log(this.addStepComment);\r\n // console.log(this.editStepComment);\r\n\r\n // if (this.addStepComment || this.editStepComment) {\r\n // console.log(this.step);\r\n // this.thisDialogRef.close(this.step);\r\n // return;\r\n // }\r\n\r\n this.test.IsInsertedStep = false;\r\n if (this.insertStep && this.insertStepType == 'Regular Step') {\r\n this.thisDialogRef.close(this.insertStepType);\r\n } else {\r\n\r\n if (this.insertStep && this.insertStepType == 'Shared Test') {\r\n this.test.IsInsertedStep = true;\r\n }\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.test);\r\n }\r\n // console.log(this.test);\r\n this.thisDialogRef.close(this.test);\r\n }\r\n }\r\n\r\n testAreaChanged() {\r\n\r\n // console.log(this.test);\r\n // console.log(this.selectedArea);\r\n\r\n\r\n this.testSubAreas = [];\r\n for (let x = 0; x < this.allAreas.length; x++) {\r\n if (this.allAreas[x].AreaName == this.selectedArea) {\r\n this.testSubAreas.push(this.allAreas[x].SubAreaName);\r\n }\r\n }\r\n // // console.log(this.tests);\r\n\r\n this.testsInArea = [];\r\n for (let x = 0; x < this.tests.length; x++) {\r\n this.testsInArea.push(this.tests[x]);\r\n // if (this.tests[x].TestAreaName == this.testArea && this.tests[x].TestSubAreaName == this.testSubArea) {\r\n // this.testsInArea.push(this.tests[x]);\r\n // }\r\n }\r\n\r\n\r\n }\r\n\r\n testSubAreaChanged(event: any) {\r\n this.testsInArea = [];\r\n // // console.log(event);\r\n // console.table(this.tests);\r\n for (let x = 0; x < this.tests.length; x++) {\r\n // // console.log(this.testArea);\r\n // // console.log(this.testSubArea);\r\n\r\n if (this.tests[x].TestAreaName == this.testArea && this.tests[x].TestSubAreaName == this.testSubArea) {\r\n this.testsInArea.push(this.tests[x]);\r\n }\r\n }\r\n }\r\n\r\n testChanged() {\r\n\r\n }\r\n\r\n setTestArea(area: AutomatedTestArea) {\r\n // // console.log(area);\r\n this.testArea = area.AreaName;\r\n // // console.log(this.testArea);\r\n }\r\n\r\n setTestSubArea(subarea: string) {\r\n // // console.log(subarea);\r\n this.testSubArea = subarea;\r\n }\r\n\r\n copyTestClick() {\r\n\r\n }\r\n\r\n testStatusChange(theTest: AutomatedTest, event: number) {\r\n\r\n theTest.InProgress = false;\r\n theTest.ReadyForReview = false;\r\n theTest.Approved = false;\r\n theTest.IsObsolete = false;\r\n if (event == AutomatedTestStatus.InProgress) {\r\n theTest.InProgress = true;\r\n }\r\n if (event == AutomatedTestStatus.ReadyForReview) {\r\n theTest.ReadyForReview = true;\r\n }\r\n if (event == AutomatedTestStatus.Approved) {\r\n theTest.Approved = true;\r\n }\r\n if (event == AutomatedTestStatus.IsObsolete) {\r\n theTest.IsObsolete = true;\r\n }\r\n\r\n // console.log(theTest);\r\n // console.log(event);\r\n\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","
{{PageTitle}}
\r\n\r\n\r\n \r\n\r\n
\r\n

Changes have been entered but not saved.

\r\n
\r\n\r\n
\r\n {{Message}}\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n","import { Component, OnDestroy, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ConfirmModal',\r\n templateUrl: './confirm.component.html',\r\n styleUrls: ['./confirm.component.css']\r\n})\r\n\r\nexport class ConfirmModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n okClick() {\r\n this.dialogRef.close(true);\r\n }\r\n\r\n continueWithoutSavingClick() {\r\n this.dialogRef.close('ContinueWithoutSaving');\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n\r\n}\r\n","
{{PageTitle}}
\r\n\r\n \r\n \r\n
\r\n {{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
Module NamePortal NameTest NameStep
\r\n {{test.AreaName}}\r\n \r\n {{test.SubAreaName}}\r\n \r\n {{test.TestName}}\r\n \r\n #{{test.StepOrder}}\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Parameters
{{param.ParameterName}}{{param.ParameterValue}}
\r\n
 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
Steps
Shared TestPageTab/ViewElement NameControlActionData InputStep Comments
\r\n #{{step.StepOrder}}\r\n \r\n {{step.TestName}}\r\n \r\n {{step.ElementAreaName}}\r\n \r\n {{step.ElementSubAreaName}}\r\n \r\n {{step.ElementName}} \r\n \r\n {{step.ControlName}}\r\n \r\n {{step.ActionName}}
\r\n
\r\n {{step.ParameterValue}}\r\n \r\n {{step.StepComments}}\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n ","import { Component, OnDestroy, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { AutomatedTest, SubTestDependentTest, AutomatedTestStepQuickView, AutomatedTestParameter } from '../models/ast-element.model';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ASTQuickView',\r\n templateUrl: './quickview.component.html',\r\n styleUrls: ['./quickview.component.css']\r\n})\r\n\r\nexport class QuickViewModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n Test: AutomatedTest;\r\n dependentTests: SubTestDependentTest[] = [];\r\n ActionToTake: string;\r\n viewDependentTests = false;\r\n showTestSteps = false;\r\n testSteps: AutomatedTestStepQuickView[] = [];\r\n parameters: AutomatedTestParameter[] = [];\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n this.Test = data.Test;\r\n this.viewDependentTests = data.viewDependentTests;\r\n this.showTestSteps = data.showTestSteps;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n if (this.viewDependentTests) {\r\n this.reportService.getSubTestDependentTests(this.Test.Test_ID).subscribe(dependentTests => {\r\n // console.log(dependentTests);\r\n this.dependentTests = dependentTests;\r\n });\r\n }\r\n\r\n if (this.showTestSteps) {\r\n this.reportService.getAutomatedTestQuickView(this.Test.Test_ID).subscribe(testSteps => {\r\n // console.log(testSteps);\r\n this.testSteps = testSteps;\r\n\r\n this.reportService.getAutomatedTestParameters(this.Test.Test_ID, 0).subscribe(res => {\r\n // console.log(res);\r\n this.parameters = res;\r\n\r\n });\r\n });\r\n }\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n // showComments(comments: string) {\r\n // console.log(comments);\r\n // }\r\n\r\n // okClick() {\r\n\r\n\r\n\r\n // this.dialogRef.close(true);\r\n // }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n\r\n}","
{{ PageTitle }}
\r\n\r\n \r\n \r\n
\r\n {{ Message }}\r\n \r\n \r\n Page Name
\r\n \r\n \r\n {{ item.AreaName }}\r\n \r\n \r\n \r\n \r\n Tab / View
\r\n \r\n \r\n {{ item }}\r\n \r\n \r\n \r\n \r\n Element Name
\r\n \r\n \r\n \r\n XPath
\r\n \r\n \r\n \r\n Control Type
\r\n \r\n \r\n {{ item }}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n \r\n
\r\n {{ Message }}\r\n \r\n \r\n Module | Page Name
\r\n \r\n \r\n {{ item.AreaName }}\r\n \r\n \r\n \r\n \r\n Portal | Tab / View
\r\n \r\n \r\n {{ item }}\r\n \r\n \r\n \r\n \r\n Element Name
\r\n \r\n \r\n \r\n XPath
\r\n \r\n \r\n \r\n Control Type
\r\n \r\n \r\n {{ item }}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n","/* eslint-disable camelcase */\r\nimport { Component, OnDestroy, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { Element, AutomatedTestArea } from '../models/ast-element.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { MenuItem } from '../../../shared-components/controls/menus/menu-item.model';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ElementAddEditModalComponent',\r\n templateUrl: './element-add-edit-modal.component.html',\r\n styleUrls: ['./element-add-edit-modal.component.css']\r\n})\r\n\r\nexport class ElementAddEditModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n\r\n dataSource: TylerMatTableDataSource;\r\n\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n allElements: Element[] = [];\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctTestAreas: AutomatedTestArea[] = [];\r\n distinctElements: Element[] = [];\r\n selectedArea: AutomatedTestArea[] = []; // This is used to set the Area ID\r\n selection: string;\r\n\r\n elemAreas: string[] = [];\r\n elemSubAreas: string[] = [];\r\n allControlNames: string[] = [];\r\n\r\n elementArea: string;\r\n elementSubArea: string;\r\n elementControlName: string;\r\n newModuleName: string;\r\n newPortalName: string;\r\n elementId: number;\r\n areaId: number;\r\n\r\n elementName: string;\r\n @ViewChild('NewElementName') name: ElementRef;\r\n\r\n elementXPath: string;\r\n @ViewChild('NewElementXPath') xpath: ElementRef;\r\n\r\n @ViewChild('NewAreaName') module: ElementRef;\r\n\r\n @ViewChild('NewPortalName') portal: ElementRef;\r\n\r\n newElement: Element = {\r\n Element_ID: 0,\r\n ElementArea_ID: 0,\r\n ElementName: '',\r\n ElementAreaName: '',\r\n ElementSubAreaName: '',\r\n ElementSubAreas: [],\r\n ControlName: '',\r\n XPath: '',\r\n ParameterName: '',\r\n ParameterValue: '',\r\n Action: '',\r\n Actions: []\r\n };\r\n\r\n newArea: AutomatedTestArea = {\r\n Area_ID: 0,\r\n AreaName: '',\r\n SubAreaName: ''\r\n };\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay: string[] = []\r\n subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n\r\n this.elementArea = data.elementArea;\r\n this.elementSubArea = data.elementSubArea;\r\n this.elementName = data.elementName;\r\n this.elementXPath = data.elementXPath;\r\n this.elementControlName = data.elementControlName;\r\n this.elementId = data.elementId;\r\n }\r\n\r\n ngOnInit() {\r\n this.getTestAreas();\r\n this.getControlTypes();\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n okClick() {\r\n switch (this.PageTitle) {\r\n case 'Create New Element':\r\n this.createNewElement();\r\n break;\r\n case 'Edit Element':\r\n this.updateElement();\r\n break;\r\n default:\r\n alert('This functionality not yet implemented.');\r\n break;\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n setElementArea(area: AutomatedTestArea) {\r\n this.elementArea = area.AreaName;\r\n }\r\n\r\n setElementSubArea(subarea: string) {\r\n this.elementSubArea = subarea;\r\n }\r\n\r\n setElementName() {\r\n this.elementName = this.name.nativeElement.value;\r\n }\r\n\r\n setElementXPath() {\r\n this.elementXPath = this.xpath.nativeElement.value;\r\n }\r\n\r\n setElementControl(controlname: string) {\r\n this.elementControlName = controlname;\r\n }\r\n\r\n getTestAreas() {\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n this.allAreas = myAreas;\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n this.distinctTestAreas.sort((a, b) => a.AreaName > b.AreaName ? 1 : -1);\r\n });\r\n }\r\n\r\n getElements(area: AutomatedTestArea) {\r\n // get elements for test\r\n this.reportService.getAutomatedTestElements(0).subscribe(elem => {\r\n this.allElements = elem;\r\n this.allElements = this.allElements.filter(e => e.ElementAreaName == area.AreaName);\r\n this.allElements.sort((a, b) => a.ElementName > b.ElementName ? 1 : -1);\r\n });\r\n }\r\n\r\n getSubAreas(areaName: string) {\r\n const filteredAreas = this.allAreas.filter(a => a.AreaName === areaName).sort((a, b) => a.SubAreaName > b.SubAreaName ? 1 : -1);\r\n\r\n for (const item of filteredAreas) {\r\n this.elemSubAreas.push(item.SubAreaName);\r\n }\r\n }\r\n\r\n createNewElement() {\r\n // Assemble the new element from the information that has been input by the user\r\n this.setElementName();\r\n this.setElementXPath();\r\n\r\n this.newElement.ElementAreaName = this.elementArea;\r\n this.newElement.ElementSubAreaName = this.elementSubArea;\r\n this.newElement.ElementName = this.elementName;\r\n this.newElement.XPath = this.elementXPath;\r\n this.newElement.ControlName = this.elementControlName;\r\n\r\n if (this.elementArea === undefined\r\n || this.elementSubArea === undefined\r\n || this.elementName === undefined\r\n || this.elementName === ''\r\n || this.elementXPath === undefined\r\n || this.elementXPath === ''\r\n || this.elementControlName === undefined) {\r\n alert('Please make sure that all of the fields are populated.');\r\n } else {\r\n // Save the new element to the AST_Elements table\r\n this.reportService.saveAutomatedTestElement(this.newElement).subscribe(results => { });\r\n\r\n alert(`New element ${ this.elementName } successfully created.`);\r\n\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n\r\n updateElement() {\r\n this.setElementName();\r\n this.setElementXPath();\r\n this.newElement.ElementAreaName = this.elementArea;\r\n this.newElement.ElementSubAreaName = this.elementSubArea;\r\n this.newElement.ElementName = this.elementName;\r\n this.newElement.XPath = this.elementXPath;\r\n this.newElement.ControlName = this.elementControlName;\r\n\r\n if (this.elementArea === undefined\r\n || this.elementSubArea === undefined\r\n || this.elementName === undefined\r\n || this.elementName === ''\r\n || this.elementXPath === undefined\r\n || this.elementXPath === ''\r\n || this.elementControlName === undefined\r\n ) {\r\n alert('Please make sure that all of the fields are populated.');\r\n } else if (this.elementId === undefined) {\r\n alert('Ain\\'t got no legs, Lieutenant Dan.');\r\n } else {\r\n // Save the new element to the AST_Elements table\r\n this.reportService.updateAutomatedTestElement(this.elementId, this.newElement).subscribe(results => { });\r\n\r\n alert(`Element ${ this.elementName } successfully updated.`);\r\n\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n\r\n getControlTypes() {\r\n // get elements to pull control types from\r\n this.reportService.getAutomatedTestElements(0).subscribe(elem => {\r\n this.allElements = elem;\r\n\r\n for (const item of this.allElements) {\r\n if (!(this.allControlNames.includes(item.ControlName, 0))) {\r\n this.allControlNames.push(item.ControlName);\r\n this.allControlNames.sort((a, b) => a > b ? 1 : -1);\r\n }\r\n }\r\n });\r\n }\r\n\r\n}\r\n","
{{ PageTitle }}
\r\n\r\n\r\n \r\n
\r\n {{ Message }}\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n Page Name\r\n \r\n \r\n {{ element.ElementAreaName }}\r\n \r\n \r\n \r\n Tab / View\r\n \r\n \r\n {{ element.ElementSubAreaName }}\r\n \r\n \r\n \r\n Element Name\r\n \r\n \r\n {{ element.ElementName }}\r\n \r\n \r\n \r\n XPath \r\n \r\n \r\n {{ element.XPath }}\r\n \r\n \r\n \r\n Control Type\r\n \r\n \r\n {{ element.ControlName }}\r\n \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n","/* eslint-disable camelcase */\r\nimport { Component, OnDestroy, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { Element, AutomatedTestArea } from '../models/ast-element.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { MenuItem } from '../../../shared-components/controls/menus/menu-item.model';\r\nimport { ElementAddEditModalComponent } from './element-add-edit-modal.component';\r\n\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'ElementListModalComponent',\r\n templateUrl: './element-list.component.html',\r\n styleUrls: ['./element-list.component.css']\r\n})\r\n\r\nexport class ElementListModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n\r\n dataSource: TylerMatTableDataSource;\r\n\r\n elementAddEditDialogRef: MatDialogRef;\r\n\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n topActionMenuItems: string[] = ['Edit'];\r\n\r\n\r\n allElements: Element[] = [];\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctTestAreas: AutomatedTestArea[] = [];\r\n distinctElements: Element[] = [];\r\n selectedArea: AutomatedTestArea[] = []; // This is used to set the Area ID\r\n selection: string;\r\n\r\n elementProperties: string[] = [];\r\n\r\n elementArea: string;\r\n elementSubArea: string;\r\n elementControlName: string;\r\n newModuleName: string;\r\n newPortalName: string;\r\n elementId: number;\r\n areaId: number;\r\n\r\n elementName: string;\r\n @ViewChild('NewElementName') name: ElementRef;\r\n\r\n elementXPath: string;\r\n @ViewChild('NewElementXPath') xpath: ElementRef;\r\n\r\n @ViewChild('NewPortalName') portal: ElementRef;\r\n\r\n newElement: Element = {\r\n Element_ID: 0,\r\n ElementArea_ID: 0,\r\n ElementName: '',\r\n ElementAreaName: '',\r\n ElementSubAreaName: '',\r\n ElementSubAreas: [],\r\n ControlName: '',\r\n XPath: '',\r\n ParameterName: '',\r\n ParameterValue: '',\r\n Action: '',\r\n Actions: []\r\n };\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay: string[] = []\r\n subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n _elementAddEditDialogRef: MatDialogRef,\r\n private _elementAddEditDialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n }\r\n\r\n ngOnInit() {\r\n this.columnsToDisplay = ['ElementAreaName', 'ElementSubAreaName', 'ElementName', 'XPath', 'ControlType', 'Action'];\r\n this.getAllElements();\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n setElementArea(area: AutomatedTestArea) {\r\n this.elementArea = area.AreaName;\r\n }\r\n\r\n setElementAreaForUpdate(area: string) {\r\n this.elementArea = area;\r\n }\r\n\r\n setElementSubArea(subarea: string) {\r\n this.elementSubArea = subarea;\r\n }\r\n\r\n setElementName() {\r\n this.elementName = this.name.nativeElement.value;\r\n }\r\n\r\n setElementNameForUpdate(elementName: string) {\r\n this.elementName = elementName;\r\n }\r\n\r\n setElementXPath() {\r\n this.elementXPath = this.xpath.nativeElement.value;\r\n }\r\n\r\n setElementXPathForUpdate(xpath: string) {\r\n this.elementXPath = xpath;\r\n }\r\n\r\n setElementControl(controlname: string) {\r\n this.elementControlName = controlname;\r\n }\r\n\r\n setElementId(id: number) {\r\n this.elementId = id;\r\n }\r\n\r\n // This method is used for getting all of the elements for the Element List page.\r\n getAllElements() {\r\n this.reportService.getAutomatedTestElements(0).subscribe(elem => {\r\n // Get and sort all elements; filter out tests.\r\n this.allElements = elem;\r\n this.allElements.sort((a, b) => a.ElementAreaName > b.ElementAreaName ? 1: -1);\r\n this.allElements = this.allElements.filter(e => e.ControlName !== 'Test');\r\n\r\n // Populate table and paginate. Filtering will need to be implemented.\r\n this.dataSource = new TylerMatTableDataSource(this.allElements);\r\n this.dataSource.paginator = this.paginator;\r\n });\r\n }\r\n\r\n // This will display the dialog for adding new elements\r\n showElementAdd() {\r\n\r\n this.elementAddEditDialogRef = this._elementAddEditDialog.open(ElementAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Create New Element',\r\n Message: 'Create a new element.',\r\n }\r\n });\r\n\r\n }\r\n\r\n // This will display the dialog for updating existing elements upon clicking the 'Edit' Action button\r\n showElementEdit() {\r\n\r\n this.elementAddEditDialogRef = this._elementAddEditDialog.open(ElementAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Edit Element',\r\n Message: 'Edit an existing element.',\r\n elementArea: this.elementArea,\r\n elementSubArea: this.elementSubArea,\r\n elementName: this.elementName,\r\n elementXPath: this.elementXPath,\r\n elementControlName: this.elementControlName,\r\n elementId: this.elementId,\r\n }\r\n });\r\n\r\n this.elementAddEditDialogRef.afterClosed().subscribe( res => {\r\n this.ngOnInit();\r\n });\r\n\r\n }\r\n\r\n // Table-related methods --------------------------------\r\n\r\n getAriaRow(row: any): string {\r\n return '';\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n actionMenuClick(menuItem: MenuItem) {\r\n // const data: ElementsAndAreasModalComponent = menuItem.data;\r\n console.log(this.elementId);\r\n\r\n // this.elementProperties = [this.elementArea, this.elementSubArea, this.elementName, this.elementXPath, this.elementControlName];\r\n\r\n switch (menuItem.itemName) {\r\n case 'Edit':\r\n this.showElementEdit();\r\n break;\r\n }\r\n }\r\n\r\n\r\n}\r\n","
{{ PageTitle }}
\r\n\r\n\r\n \r\n
\r\n {{ Message }}\r\n \r\n Module
\r\n \r\n \r\n {{ item.AreaName }}\r\n \r\n \r\n \r\n \r\n Portal
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n {{ Message }}\r\n \r\n Page Name
\r\n \r\n \r\n \r\n Tab / View
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n {{ Message }}\r\n \r\n Module
\r\n \r\n \r\n {{ item.AreaName }}\r\n \r\n \r\n \r\n \r\n Portal
\r\n \r\n \r\n
\r\n\r\n\r\n \r\n
\r\n {{ Message }}\r\n \r\n Page Name
\r\n \r\n \r\n \r\n Tab / View
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n","/* eslint-disable camelcase */\r\nimport { Component, OnDestroy, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { AutomatedTestArea } from '../models/ast-element.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'AreaAddEditModal',\r\n templateUrl: './area-add-edit-modal.component.html',\r\n styleUrls: ['./area-add-edit-modal.component.css']\r\n})\r\n\r\nexport class AreaAddEditModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n\r\n dataSource: TylerMatTableDataSource;\r\n\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n topActionMenuItems: string[] = ['Update'];\r\n\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctTestAreas: AutomatedTestArea[] = [];\r\n selectedArea: AutomatedTestArea[] = []; // This is used to set the Area ID\r\n selection: string;\r\n\r\n elementArea: string;\r\n elemAreas: string[] = [];\r\n elemSubAreas: string[] = [];\r\n\r\n newModuleName: string;\r\n newPortalName: string;\r\n areaId: number;\r\n\r\n areaName: string;\r\n subAreaName: string;\r\n\r\n @ViewChild('NewAreaName') module: ElementRef;\r\n\r\n @ViewChild('NewPortalName') portal: ElementRef;\r\n\r\n newArea: AutomatedTestArea = {\r\n Area_ID: 0,\r\n AreaName: '',\r\n SubAreaName: ''\r\n };\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay: string[] = []\r\n subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n this.distinctTestAreas = data.distinctTestAreas;\r\n this.areaId = data.areaId;\r\n this.areaName = data.areaName;\r\n this.subAreaName = data.subAreaName;\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n okClick() {\r\n switch (this.PageTitle) {\r\n case 'Add Portal':\r\n this.createNewArea();\r\n break;\r\n case 'Add Page and/or Tab / View':\r\n this.createNewArea();\r\n break;\r\n case 'Edit Portal':\r\n this.updateArea();\r\n break;\r\n case 'Edit Page and / or Tab / View':\r\n this.updateArea();\r\n break;\r\n default:\r\n alert('This functionality not yet implemented.');\r\n break;\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n\r\n setModuleName() {\r\n this.newModuleName = this.module.nativeElement.value;\r\n }\r\n\r\n setPortalName() {\r\n this.newPortalName = this.portal.nativeElement.value;\r\n }\r\n\r\n setAreaId(subarea: string) {\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n this.allAreas = myAreas;\r\n this.selectedArea = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n this.selectedArea = this.allAreas.filter(a => a.SubAreaName === subarea && a.AreaName === this.elementArea);\r\n this.areaId = this.selectedArea[0].Area_ID;\r\n });\r\n }\r\n\r\n setAreaName(areaName: string) {\r\n this.newModuleName = areaName;\r\n console.log(this.newModuleName);\r\n }\r\n\r\n getTestAreas() {\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n this.allAreas = myAreas;\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n this.distinctTestAreas.sort((a, b) => a.AreaName > b.AreaName ? 1 : -1);\r\n });\r\n }\r\n\r\n getSubAreas(areaName: string) {\r\n const filteredAreas = this.allAreas.filter(a => a.AreaName === areaName).sort((a, b) => a.SubAreaName > b.SubAreaName ? 1 : -1);\r\n\r\n for (const item of filteredAreas) {\r\n this.elemSubAreas.push(item.SubAreaName);\r\n }\r\n }\r\n\r\n createNewArea() {\r\n // Assemble the new area from the information that has been input by the user\r\n if(this.newModuleName === '' || this.newModuleName === undefined){\r\n this.setModuleName();\r\n }\r\n this.setPortalName();\r\n\r\n console.log(this.newModuleName);\r\n console.log(this.newPortalName);\r\n\r\n this.newArea.AreaName = this.newModuleName;\r\n this.newArea.SubAreaName = this.newPortalName;\r\n\r\n if (this.newModuleName === '' || this.newModuleName === undefined) {\r\n alert('Please make sure that there is an area name.');\r\n } else {\r\n // Save the new area to the AST_Areas table\r\n this.reportService.saveAutomatedTestArea(this.newArea).subscribe(results => { });\r\n\r\n alert(`New module / portal ${ this.newModuleName } / ${ this.newPortalName } successfully created.`);\r\n\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n\r\n // This method is executed upon clicking 'Update' in the Action menu; it will display the Module /Portal Update Tool if an area has been selected.\r\n showUpdateAreaWindow() {\r\n if (this.areaId === undefined) {\r\n alert('Please make sure that all of the fields are populated.');\r\n } else {\r\n this.PageTitle = 'Module / Portal Update Tool';\r\n this.Message = `Update the Module / Portal ${ this.elementArea } by entering new information below. Please note these changes cannot currently be undone. `;\r\n }\r\n }\r\n\r\n updateArea() {\r\n // Assemble the new area from the information that has been input by the user\r\n if(this.newModuleName === '' || this.newModuleName === undefined){\r\n this.setModuleName();\r\n }\r\n\r\n this.setPortalName();\r\n this.newArea.AreaName = this.newModuleName;\r\n this.newArea.SubAreaName = this.newPortalName;\r\n\r\n if (this.newModuleName === '' || this.newModuleName === undefined) {\r\n alert('Please make sure that there is a Module or Page name.');\r\n } else {\r\n // Save the new area to the AST_Areas table\r\n this.reportService.updateAutomatedTestArea(this.areaId, this.newArea).subscribe(results => { });\r\n\r\n alert(`${ this.newModuleName} / ${ this.newPortalName } successfully updated.`);\r\n\r\n this.dialogRef.close(true);\r\n }\r\n\r\n }\r\n\r\n}\r\n","
{{ PageTitle }}
\r\n\r\n\r\n \r\n
\r\n {{ Message }}\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n Module\r\n Page\r\n \r\n \r\n {{ area.AreaName }}\r\n \r\n \r\n \r\n Portal\r\n Tab / View\r\n \r\n \r\n {{ area.SubAreaName }}\r\n \r\n \r\n \r\n Action\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n","/* eslint-disable camelcase */\r\nimport { Component, OnDestroy, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { AutomatedTestArea } from '../models/ast-element.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { Subscription } from 'rxjs';\r\nimport { MenuItem } from '../../../shared-components/controls/menus/menu-item.model';\r\nimport { AreaAddEditModalComponent } from './area-add-edit-modal.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'AreaListModal',\r\n templateUrl: './area-list.component.html',\r\n styleUrls: ['./area-list.component.css']\r\n})\r\n\r\nexport class AreaListModalComponent implements OnDestroy, OnInit {\r\n\r\n PageTitle: string;\r\n Message: string;\r\n\r\n areaAddEditDialogRef: MatDialogRef;\r\n\r\n dataSource: TylerMatTableDataSource;\r\n\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n topActionMenuItems: string[] = ['Edit'];\r\n\r\n areaToggle = 1;\r\n\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctTestAreas: AutomatedTestArea[] = [];\r\n selectedArea: AutomatedTestArea[] = []; // This is used to set the Area ID\r\n\r\n elemAreas: string[] = [];\r\n elemSubAreas: string[] = [];\r\n allControlNames: string[] = [];\r\n\r\n elementArea: string;\r\n elementSubArea: string;\r\n elementControlName: string;\r\n newModuleName: string;\r\n newPortalName: string;\r\n areaId: number;\r\n areaName: string;\r\n subAreaName: string;\r\n\r\n\r\n @ViewChild('NewAreaName') module: ElementRef;\r\n\r\n @ViewChild('NewPortalName') portal: ElementRef;\r\n\r\n newArea: AutomatedTestArea = {\r\n Area_ID: 0,\r\n AreaName: '',\r\n SubAreaName: ''\r\n };\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay: string[] = []\r\n subscriptions: Subscription[] = [];\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private dialogRef: MatDialogRef,\r\n _areaAddEditDialogRef: MatDialogRef,\r\n private _areaAddEditDialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n ) {\r\n this.PageTitle = data.PageTitle;\r\n this.Message = data.Message;\r\n }\r\n\r\n ngOnInit() {\r\n this.columnsToDisplay = ['AreaName', 'SubAreaName', 'Action'];\r\n switch(this.PageTitle) {\r\n\r\n case 'Module / Portal List': {\r\n this.getAllModulesAndPortals();\r\n break;\r\n }\r\n\r\n case 'Page & Tab / View List': {\r\n this.getAllPagesAndTabs();\r\n break;\r\n }\r\n\r\n default:{\r\n alert('Mistakes have been made.');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n setModuleName() {\r\n this.newModuleName = this.module.nativeElement.value;\r\n }\r\n\r\n setPortalName() {\r\n this.newPortalName = this.portal.nativeElement.value;\r\n }\r\n\r\n setAreaId(id: number) {\r\n this.areaId = id;\r\n }\r\n\r\n setAreaName(areaName: string){\r\n this.areaName = areaName;\r\n }\r\n\r\n setSubAreaName(subAreaName: string){\r\n this.subAreaName = subAreaName;\r\n }\r\n\r\n getAllPagesAndTabs() {\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n this.allAreas = myAreas;\r\n\r\n this.allAreas = this.allAreas.filter(a => a.AreaName !== 'Classroom360'\r\n && a.AreaName !== 'Student360'\r\n && a.AreaName !== 'General'\r\n && a.AreaName !== 'AcademicHistory'\r\n && a.AreaName !== 'Practice360'\r\n && a.AreaName !== 'Behavior');\r\n\r\n // this.allAreas.sort((a, b) => a.SubAreaName > b.SubAreaName ? 1 : -1);\r\n this.allAreas.sort((a, b) => a.AreaName > b.AreaName ? 1 : -1);\r\n\r\n this.dataSource = new TylerMatTableDataSource(this.allAreas);\r\n this.dataSource.paginator = this.paginator;\r\n });\r\n }\r\n\r\n getAllModulesAndPortals() {\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n this.allAreas = myAreas;\r\n\r\n this.allAreas = this.allAreas.filter(a => a.AreaName === 'Classroom360'\r\n || a.AreaName === 'Student360'\r\n || a.AreaName === 'General'\r\n || a.AreaName === 'AcademicHistory'\r\n || a.AreaName === 'Practice360'\r\n || a.AreaName === 'Behavior');\r\n\r\n // this.allAreas.sort((a, b) => a.SubAreaName > b.SubAreaName ? 1 : -1);\r\n this.allAreas.sort((a, b) => a.AreaName > b.AreaName ? 1 : -1);\r\n\r\n this.dataSource = new TylerMatTableDataSource(this.allAreas);\r\n this.dataSource.paginator = this.paginator;\r\n });\r\n }\r\n\r\n getSubAreas(areaName: string) {\r\n const filteredAreas = this.allAreas.filter(a => a.AreaName === areaName).sort((a, b) => a.SubAreaName > b.SubAreaName ? 1 : -1);\r\n\r\n for (const item of filteredAreas) {\r\n this.elemSubAreas.push(item.SubAreaName);\r\n }\r\n }\r\n\r\n createNewArea() {\r\n // Assemble the new area from the information that has been input by the user\r\n this.setModuleName();\r\n this.setPortalName();\r\n\r\n this.newArea.AreaName = this.newModuleName;\r\n this.newArea.SubAreaName = this.newPortalName;\r\n\r\n if (this.newModuleName === '' || this.newModuleName === undefined) {\r\n alert('Please make sure that there is a Module name.');\r\n } else {\r\n // Save the new area to the AST_Areas table\r\n this.reportService.saveAutomatedTestArea(this.newArea).subscribe(results => { });\r\n\r\n alert(`New module / portal ${ this.newModuleName } / ${ this.newPortalName } successfully created.`);\r\n\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n\r\n\r\n // This method is executed when clicking the 'Add Portal' button on the Module / Portal List page.\r\n showPortalAddWindow() {\r\n\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n this.areaAddEditDialogRef = this._areaAddEditDialog.open(AreaAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Add Portal',\r\n Message: 'Create a new portal.',\r\n distinctTestAreas: this.distinctTestAreas,\r\n }\r\n });\r\n\r\n this.areaAddEditDialogRef.afterClosed().subscribe( res => {\r\n this.ngOnInit();\r\n });\r\n }\r\n\r\n // This method is executed when clicking the 'Add Portal' button on the Module / Portal List page.\r\n showPageTabAddWindow() {\r\n\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n this.areaAddEditDialogRef = this._areaAddEditDialog.open(AreaAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Add Page and/or Tab / View',\r\n Message: 'Create a new page and/or tab / view.',\r\n distinctTestAreas: this.distinctTestAreas,\r\n }\r\n });\r\n\r\n this.areaAddEditDialogRef.afterClosed().subscribe( res => {\r\n this.ngOnInit();\r\n });\r\n }\r\n\r\n // This method is executed upon clicking 'Edit' in the Action menu; it will display the Module /Portal Edit Tool if an area has been selected.\r\n showUpdatePortalWindow() {\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n if (this.areaId === undefined) {\r\n alert('Please make sure that all of the fields are populated.');\r\n } else {\r\n this.areaAddEditDialogRef = this._areaAddEditDialog.open(AreaAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Edit Portal',\r\n Message: 'Edit an existing portal.',\r\n distinctTestAreas: this.distinctTestAreas,\r\n areaId: this.areaId,\r\n areaName: this.areaName,\r\n subAreaName: this.subAreaName,\r\n }\r\n });\r\n\r\n\r\n this.areaAddEditDialogRef.afterClosed().subscribe( res => {\r\n this.ngOnInit();\r\n });\r\n }\r\n }\r\n\r\n\r\n // This method is executed upon clicking 'Edit' in the Action menu; it will display the Module /Portal Edit Tool if an area has been selected.\r\n showUpdatePageTabViewWindow() {\r\n this.distinctTestAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n if (this.areaId === undefined) {\r\n alert('Please make sure that all of the fields are populated.');\r\n } else {\r\n this.areaAddEditDialogRef = this._areaAddEditDialog.open(AreaAddEditModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Edit Page and / or Tab / View',\r\n Message: 'Edit an existing page, tab, or view.',\r\n distinctTestAreas: this.distinctTestAreas,\r\n areaId: this.areaId,\r\n areaName: this.areaName,\r\n subAreaName: this.subAreaName,\r\n }\r\n });\r\n\r\n\r\n this.areaAddEditDialogRef.afterClosed().subscribe( res => {\r\n this.ngOnInit();\r\n });\r\n }\r\n }\r\n\r\n updateArea() {\r\n // Assemble the new area from the information that has been input by the user\r\n this.setModuleName();\r\n this.setPortalName();\r\n this.newArea.AreaName = this.newModuleName;\r\n this.newArea.SubAreaName = this.newPortalName;\r\n\r\n if (this.newModuleName === '' || this.newModuleName === undefined) {\r\n alert('Please make sure that there is a Module or Page name.');\r\n } else {\r\n // Save the new area to the AST_Areas table\r\n this.reportService.updateAutomatedTestArea(this.areaId, this.newArea).subscribe(results => { });\r\n\r\n alert(`${ this.newModuleName} / ${ this.newPortalName } successfully edited.`);\r\n\r\n this.dialogRef.close(true);\r\n\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n // Table-related methods --------------------------------\r\n\r\n getAriaRow(row: any): string {\r\n return '';\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n actionMenuClick(menuItem: MenuItem) {\r\n // const data: ElementsAndAreasModalComponent = menuItem.data;\r\n switch (menuItem.itemName) {\r\n case 'Edit':\r\n if(this.PageTitle === 'Module / Portal List') {\r\n this.showUpdatePortalWindow();\r\n } else {\r\n this.showUpdatePageTabViewWindow();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n\r\n}\r\n","\r\n

{{test.TestName}} -\r\n Steps

\r\n

{{test.TestName}} - Steps\r\n (Shared Test)

\r\n\r\n Test\r\n Results \r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Module\r\n \r\n \r\n \r\n \r\n \r\n {{element.TestAreaName}}\r\n \r\n \r\n \r\n \r\n Portal\r\n \r\n \r\n \r\n \r\n \r\n {{element.TestSubAreaName}}\r\n \r\n \r\n \r\n \r\n Test Name\r\n \r\n \r\n \r\n {{element.TestName}}\r\n \r\n \r\n \r\n Shared Test\r\n \r\n \r\n \r\n {{element.IsSubTestOnly ? 'Y' : ''}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Status\r\n \r\n \r\n \r\n \r\n {{element.InProgress ? 'In Progress' : ''}}\r\n {{element.Approved ? 'Approved' : ''}}\r\n {{element.IsObsolete ? 'Obsolete' : ''}}\r\n {{element.ReadyForReview ? 'Ready for Review' : ''}}\r\n \r\n \r\n\r\n \r\n\r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n

Parameters - {{test.TestName}}

\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n
Parameter NameParameter ValueActions
{{thisParameter.ParameterName}}\r\n \r\n {{thisParameter.ParameterValue}}\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n
Page NameTab/View NameObject NameActionData InputInsertCommentsDelete
\r\n #{{testStep.StepOrder}}\r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n {{item.AreaName}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n {{item}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{item.ElementName}}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n\r\n","/* eslint-disable camelcase */\r\nimport { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort, Sort } from '@angular/material/sort';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport {Element, AutomatedTest, AutomatedTestStep, AutomatedTestArea, AutomatedTestParameter, AutomatedTestStatus } from '../models/ast-element.model';\r\nimport { AutomatedTestingModalComponent } from './automated-testing-modal.component';\r\nimport { ConfirmModalComponent } from './confirm.component';\r\nimport {TylerMatTableDataSource} from '../../../shared-components/angular-material/extended.class';\r\nimport { ReportLegendComponent } from '../report-legend/report-legend.component';\r\nimport { QuickViewModalComponent } from './quickview.component';\r\nimport { ElementListModalComponent } from './element-list.component';\r\nimport { AreaListModalComponent } from './area-list.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'automatedTestingSetup',\r\n templateUrl: './automated-testing-setup.component.html',\r\n styleUrls: ['./automated-testing-setup.component.css']\r\n\r\n // entryComponents: [\r\n // ReportParametersComponent\r\n // ]\r\n})\r\n\r\n\r\n\r\nexport class AutomatedTestingSetupComponent implements OnInit, OnDestroy {\r\n\r\n\r\n\r\n thisDialogRef: MatDialogRef;\r\n\r\n modalDialogRef: MatDialogRef;\r\n confirmDialogRef: MatDialogRef;\r\n reportLegendDialogRef: MatDialogRef;\r\n elementListDialogRef: MatDialogRef;\r\n areaListDialogRef: MatDialogRef;\r\n quickViewDialogRef: MatDialogRef;\r\n\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n testAreas: string[];\r\n testArea = '';\r\n\r\n testSubAreas: string[];\r\n testSubArea = '';\r\n\r\n elementAreas: string[];\r\n elementArea = '';\r\n\r\n elementSubAreas: string[];\r\n elementSubArea = '';\r\n\r\n tests: AutomatedTest[] = [];\r\n test = new AutomatedTest();\r\n\r\n\r\n testSteps: AutomatedTestStep[] = [];\r\n\r\n allElements: Element[] = [];\r\n elements: Element[] = [];\r\n // element: Element;\r\n\r\n allAreas: AutomatedTestArea[] = [];\r\n distinctAreas: AutomatedTestArea[] = [];\r\n selectedArea: AutomatedTestArea = new AutomatedTestArea();\r\n\r\n // elementActions: ElementAction[];\r\n\r\n identifiers: string[] = [];\r\n\r\n actions: string[] = [];\r\n\r\n actionName: string;\r\n\r\n action = '';\r\n controlName = '';\r\n identifier = '';\r\n dataInput = '';\r\n testText = '';\r\n testData = '';\r\n\r\n dataSource: TylerMatTableDataSource;\r\n columnsToDisplay: string[] = [];\r\n showFilter = false;\r\n checkAllIsSubTestOnly = false;\r\n\r\n // elementListItems: DataSource[] = [];\r\n // allElementsListItems: DataSource[] = [];\r\n\r\n showTests = true;\r\n showTestSteps = false;\r\n\r\n insertStepType = '';\r\n insertStepNumber = 0;\r\n\r\n parameters: AutomatedTestParameter[] = [];\r\n parameter: AutomatedTestParameter;\r\n showParameters = false;\r\n\r\n testSaved = false;\r\n\r\n inDebugMode = false;\r\n\r\n isFiltered = false;\r\n\r\n V10: boolean;\r\n // step: AutomatedTestStep;\r\n\r\n constructor(\r\n automatedTestingSetupDialogRef: MatDialogRef,\r\n automatedTestingModalDialogRef: MatDialogRef,\r\n private modalDialog: MatDialog,\r\n private reportLegendDialog: MatDialog,\r\n\r\n _elementListDialogRef: MatDialogRef,\r\n private _elementListDialog: MatDialog,\r\n\r\n _areaListDialogRef: MatDialogRef,\r\n private _areaListDialog: MatDialog,\r\n\r\n _confirmDialogRef: MatDialogRef,\r\n private _confirmDialog: MatDialog,\r\n\r\n private reportService: ReportingService,\r\n // private myReportsComponent: MyReportsComponent\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private quickViewDialog: MatDialog,\r\n ) {\r\n\r\n this.thisDialogRef = automatedTestingSetupDialogRef;\r\n this.modalDialogRef = automatedTestingModalDialogRef;\r\n this.confirmDialogRef = _confirmDialogRef;\r\n this.elementListDialogRef = _elementListDialogRef;\r\n }\r\n\r\n ngOnInit() {\r\n this.inDebugMode = false;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n\r\n if (this.reportService.inDebugMode) {\r\n this.inDebugMode = true;\r\n\r\n }\r\n\r\n // this.columnsToDisplay = ['TestAreaName', 'TestSubAreaName', 'TestName', 'IsSubTestOnly', 'Approved', 'TestStatus', 'Actions'];\r\n this.columnsToDisplay = ['TestAreaName', 'TestSubAreaName', 'TestName', 'IsSubTestOnly', 'TestStatus', 'Actions'];\r\n\r\n // let tests: any;\r\n this.getAutomatedTests(0); // 0 to get only the tests, not the steps\r\n\r\n // this.getAutomatedTestParameters(0, 0);\r\n\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n // openConfirmPopup(title: string, message: string): boolean {\r\n\r\n // this.confirmDialogRef = this._confirmDialog.open(\r\n // ConfirmModalComponent,\r\n // {\r\n // data: {\r\n // PageTitle: title,\r\n // Message: message\r\n // },\r\n // panelClass: 'tyl-mat-dialog',\r\n // disableClose: true,\r\n\r\n // });\r\n\r\n // this.confirmDialogRef.afterClosed().subscribe(result => {\r\n\r\n // return result;\r\n\r\n\r\n // });\r\n\r\n // }\r\n\r\n checkIsSubTestOnly(element: AutomatedTest, checked: boolean) {\r\n\r\n // // console.log(element);\r\n // // console.log(checked);\r\n\r\n }\r\n\r\n allIsSubTestOnlyChecked() {\r\n this.checkAllIsSubTestOnly = !this.checkAllIsSubTestOnly;\r\n }\r\n\r\n allEventChecked() {\r\n // this.selectedEvents = [];\r\n for (const item of this.dataSource.data) {\r\n item.IsSubTestOnly = this.checkAllIsSubTestOnly;\r\n\r\n\r\n }\r\n }\r\n\r\n editTestClick(theTest: AutomatedTest) {\r\n this.test = theTest;\r\n this.openModalPopup('editTest');\r\n }\r\n\r\n viewTestStepsClick(thisTest: AutomatedTest) {\r\n this.testSaved = true;\r\n // console.log(thisTest);\r\n this.test = thisTest;\r\n this.showTests = false;\r\n this.showTestSteps = true;\r\n this.getAutomatedTestSteps(thisTest.Test_ID);\r\n this.getAutomatedTestParameters(thisTest.Test_ID, 0);\r\n }\r\n\r\n viewDependentTests(thisTest: AutomatedTest) {\r\n console.log(thisTest);\r\n\r\n this.quickViewDialogRef = this.quickViewDialog.open(QuickViewModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: thisTest.TestAreaName + ' - ' + thisTest.TestSubAreaName + ' - ' + thisTest.TestName,\r\n Test: thisTest,\r\n Message: 'The following tests are dependent on this shared test',\r\n viewDependentTests: true,\r\n showTestSteps: false,\r\n },\r\n\r\n });\r\n }\r\n\r\n showQuickView(thisTest: AutomatedTest) {\r\n\r\n // console.log(thisTest);\r\n\r\n this.quickViewDialogRef = this.quickViewDialog.open(QuickViewModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: thisTest.TestAreaName + ' - ' + thisTest.TestSubAreaName + ' - ' + thisTest.TestName,\r\n Test: thisTest,\r\n Message: thisTest.Comments,\r\n viewDependentTests: false,\r\n showTestSteps: true,\r\n },\r\n\r\n });\r\n }\r\n\r\n copyTestClick (thisTest: AutomatedTest) {\r\n this.test = this.test = thisTest;\r\n this.openModalPopup('copyTest');\r\n\r\n // console.log(thisTest);\r\n // this.test = thisTest;\r\n // this.showTests = false;\r\n // this.showTestSteps = true;\r\n // this.getAutomatedTestSteps(thisTest.Test_ID);\r\n // this.getAutomatedTestParameters(thisTest.Test_ID, 0);\r\n }\r\n\r\n\r\n toggleExpanded(row: any) {\r\n this.dataSource.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.dataSource.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.dataSource.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.dataSource.rowKeyPress(event, row);\r\n }\r\n\r\n showFilterClick() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n clearFilter() {\r\n // this.clearFilterEvent.emit();\r\n this.dataSource.removeAllFilters();\r\n // this.communicationLogFilter.clearFilter();\r\n }\r\n\r\n trackByFn(item: AutomatedTest, index: number) {\r\n // POST: returns a value to track an item by so we can avoid change detection\r\n return item.Test_ID;\r\n }\r\n\r\n openModalPopup(actionToTake: string) {\r\n\r\n // console.log(this.test);\r\n // console.log(this.parameter);\r\n\r\n\r\n // console.log(actionToTake);\r\n const testOrder = this.tests.length + 1;\r\n\r\n let pageTitle: string;\r\n let copyTestId: number;\r\n\r\n if (actionToTake == 'copyTest') {\r\n pageTitle = 'Add New Test - Copy Steps from: ' + this.test.TestName;\r\n copyTestId = this.test.Test_ID;\r\n this.test = new AutomatedTest();\r\n this.parameter = null; // ??\r\n // parentTest_ID: this.test.Test_ID,\r\n }\r\n\r\n\r\n if (actionToTake == 'addTest') {\r\n pageTitle = 'Add New Test';\r\n this.test = new AutomatedTest();\r\n this.test.Test_ID = null;\r\n }\r\n\r\n if (actionToTake == 'addSubTest') {\r\n pageTitle = 'Add Shared Test';\r\n }\r\n\r\n if (actionToTake == 'editTest') {\r\n pageTitle = 'Edit Test';\r\n }\r\n\r\n if (actionToTake == 'insertStep') {\r\n pageTitle = 'Insert Step';\r\n }\r\n\r\n if (actionToTake == 'addParameter') {\r\n pageTitle = 'Add Parameter';\r\n }\r\n\r\n if (actionToTake == 'editParameter') {\r\n pageTitle = 'Edit Parameter';\r\n }\r\n\r\n // if (actionToTake == 'addStepComment') {\r\n // pageTitle = 'Add Step #' + this.step.StepOrder + ' Comment';\r\n // }\r\n\r\n // if (actionToTake == 'editStepComment') {\r\n // pageTitle = 'Edit Step #' + this.step.StepOrder + ' Comment';\r\n // }\r\n\r\n\r\n // console.log(this.parameter);\r\n\r\n this.modalDialogRef = this.modalDialog.open(\r\n AutomatedTestingModalComponent,\r\n {\r\n data: {\r\n action: actionToTake,\r\n title: pageTitle,\r\n testAreas: this.testAreas,\r\n testSubAreas: this.testSubAreas,\r\n testOrder: testOrder,\r\n tests: this.tests,\r\n allAreas: this.allAreas,\r\n test: this.test,\r\n parameter: this.parameter,\r\n parentTest_ID: this.test.Test_ID,\r\n copyTestId: copyTestId,\r\n // step: this.step,;\r\n },\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n\r\n });\r\n\r\n this.modalDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.inDebugMode) {\r\n console.log('HERE');\r\n console.log(result);\r\n }\r\n\r\n // return;\r\n\r\n if (result == undefined || result == null) {\r\n return;\r\n }\r\n\r\n\r\n if (result == undefined || result == null || actionToTake == 'editParameter' || actionToTake == 'addParameter') {\r\n\r\n // console.log(result);\r\n\r\n this.reportService.getAutomatedTestParameters(this.test.Test_ID, 0).subscribe(res => {\r\n this.parameters = res;\r\n if (this.inDebugMode) {\r\n console.log(this.parameters);\r\n }\r\n // console.log(this.parameters);\r\n this.showParameterGrid(false);\r\n\r\n if (this.inDebugMode) {\r\n console.log('HERE');\r\n }\r\n return;\r\n });\r\n }\r\n\r\n\r\n if (result == undefined || result == null || actionToTake == 'editParameter' || actionToTake == 'addParameter') {\r\n return;\r\n }\r\n\r\n if (this.inDebugMode) {\r\n console.log('HERE');\r\n }\r\n\r\n if (actionToTake === 'addTest' && result !== undefined) {\r\n this.test = result;\r\n // this.getAutomatedTestSteps(this.test.Test_ID); // This is an alternative fix.\r\n this.testSteps = [];\r\n this.showTests = false;\r\n this.showTestSteps = true;\r\n return;\r\n }\r\n\r\n // console.log(this.insertStepType);\r\n\r\n // if (result instanceof AutomatedTestStep) {\r\n // this.step.Comments = result.Comments;\r\n // // this.insertStepType = 'Regular Step';\r\n // console.log(this.testSteps);\r\n // return;\r\n // }\r\n\r\n // console.log(this.step);\r\n\r\n if (result == 'Regular Step') {\r\n // // console.log(result);\r\n this.insertStepType = 'Regular Step';\r\n this.addStep(false);\r\n return;\r\n\r\n } else if (this.insertStepType) {\r\n // .log(result);\r\n\r\n // let t: AutomatedTest;\r\n const t = result;\r\n // // console.log(t);\r\n\r\n this.insertStepType = 'Shared Test';\r\n // this.addStep(true);\r\n return;\r\n }\r\n\r\n if (actionToTake === 'editTest') {\r\n // this.resetPageForShowingTests();\r\n return;\r\n }\r\n\r\n // if (actionToTake == 'editParameter' || actionToTake == 'addParameter') {\r\n\r\n // // console.log(result);\r\n\r\n // this.reportService.getAutomatedTestParameters(this.test.Test_ID, 0).subscribe(res => {\r\n // this.parameters = res;\r\n // // console.log(this.parameters);\r\n // this.showParameterGrid(false);\r\n\r\n // });\r\n // }\r\n\r\n this.insertStepType = '';\r\n\r\n this.reportService.getAutomatedTestAreas(0).subscribe(myAreas => {\r\n\r\n this.allAreas = myAreas;\r\n\r\n // // // // console.log(myAreas);\r\n\r\n // get tests only\r\n this.reportService.getAutomatedTests(0).subscribe(results => {\r\n\r\n // // console.log(results);\r\n\r\n this.tests = results;\r\n this.setTestStatus();\r\n if (this.tests == null || this.tests == undefined) {\r\n this.tests = [];\r\n }\r\n\r\n this.dataSource = new TylerMatTableDataSource(this.tests);\r\n this.getTestAreas();\r\n });\r\n\r\n\r\n });\r\n\r\n // console.log('HERE');\r\n // console.log(result);\r\n\r\n if (result != undefined) {\r\n // // // // console.log(result);\r\n\r\n // let subTest: AutomatedTest;\r\n const subTest = result;\r\n\r\n const newStep = new AutomatedTestStep();\r\n newStep.Test_ID = 0; // this.test.Test_ID;\r\n\r\n newStep.ElementAreaName = subTest.TestAreaName;\r\n newStep.ElementSubAreaName = subTest.TestSubAreaName;\r\n\r\n newStep.ElementName = subTest.TestName;\r\n newStep.InnerTest_ID = subTest.Test_ID;\r\n newStep.StepOrder = this.testSteps.length + 1;\r\n\r\n // if this is an inserted step, adjust step orders\r\n\r\n if (subTest.IsInsertedStep) {\r\n newStep.StepOrder = this.insertStepNumber;\r\n\r\n for (let x = this.insertStepNumber - 1; x < this.testSteps.length; x++) {\r\n this.testSteps[x].StepOrder++;\r\n }\r\n }\r\n\r\n const elem = new Element();\r\n elem.ElementName = subTest.TestName;\r\n elem.ElementAreaName = subTest.TestAreaName;\r\n elem.ElementSubAreaName = subTest.TestSubAreaName;\r\n\r\n elem.Actions.push('Execute Steps');\r\n elem.Action = 'Execute Steps';\r\n\r\n newStep.ActionName = 'Execute Steps';\r\n\r\n newStep.Element = elem;\r\n newStep.Elements.push(elem);\r\n\r\n this.testSteps.push(newStep);\r\n\r\n }\r\n });\r\n\r\n }\r\n\r\n getBackgroundColor(step: AutomatedTestStep): string {\r\n if (step.InnerTest_ID > 0) {\r\n // indicates it is a shared test\r\n if (step.Approved) {\r\n return 'AliceBlue';\r\n } else {\r\n return 'LavenderBlush';\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n getAutomatedTests(testId: number) {\r\n\r\n this.reportService.getAutomatedTestAreas(testId).subscribe(myAreas => {\r\n\r\n this.allAreas = myAreas;\r\n\r\n this.distinctAreas = this.allAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.AreaName === thing.AreaName) === i\r\n );\r\n\r\n // // // // console.log(myAreas);\r\n\r\n if (testId == 0 ) {\r\n // get tests only\r\n this.reportService.getAutomatedTests(testId).subscribe(results => {\r\n\r\n this.tests = results;\r\n\r\n if (this.inDebugMode) {\r\n console.log(this.tests);\r\n }\r\n\r\n this.setTestStatus();\r\n this.getTestAreas();\r\n\r\n // get elements for test\r\n this.reportService.getAutomatedTestElements(testId).subscribe(elem => {\r\n\r\n this.allElements = elem;\r\n\r\n // handle filters\r\n this.dataSource = new TylerMatTableDataSource(this.tests);\r\n\r\n this.dataSource.sortingDataAccessor = (item: AutomatedTest, property: string) => {\r\n switch (property) {\r\n case 'TestStatus':\r\n return item.InProgress ? 'In Progress' : (item.Approved ? 'Approved' : (item.ReadyForReview ? 'Ready For Review' : (item.IsObsolete ? 'Is Obsolete' : ' ')));\r\n case 'IsSubTestOnly':\r\n return item.IsSubTestOnly ? 'Y' : '';\r\n default:\r\n return this.dataSource.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n\r\n // Handle sorting\r\n this.dataSource.sort = this.sort;\r\n\r\n const sortState: Sort = {active: 'TestAreaName', direction: 'asc'};\r\n this.sort.active = sortState.active;\r\n this.sort.direction = sortState.direction;\r\n this.sort.sortChange.emit(sortState);\r\n\r\n // // console.log(this.dataSource);\r\n });\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n showTestsClick() {\r\n\r\n // If the test isn't saved, put up a confirm dialog.\r\n if (this.testSaved === false) {\r\n\r\n this.confirmDialogRef = this._confirmDialog.open(\r\n ConfirmModalComponent,\r\n {\r\n data: {\r\n PageTitle: 'WARNING',\r\n Message: 'If you continue without saving, the changes will be lost.'\r\n },\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n\r\n this.confirmDialogRef.afterClosed().subscribe(result => {\r\n\r\n // user clicked OK\r\n if (result === 'ContinueWithoutSaving') {\r\n this.resetPageForShowingTests();\r\n return;\r\n }\r\n\r\n if (result === true) {\r\n this.saveTestStepsClick();\r\n this.resetPageForShowingTests();\r\n } else if (result === false) {\r\n return;\r\n }\r\n\r\n });\r\n }\r\n\r\n else if (this.testSaved === true) {\r\n // testSubAreas: string[];\r\n // testSubArea = '';\r\n this.resetPageForShowingTests();\r\n }\r\n }\r\n\r\n getAutomatedTestSteps(testId: number) {\r\n this.testSteps = [];\r\n\r\n this.reportService.getAutomatedTestSteps(testId).subscribe(steps => {\r\n // console.log(steps);\r\n\r\n // get test steps\r\n // this.allElements = [];\r\n\r\n // // // // console.log(this.testAreas);\r\n // // // // console.log(this.allAreas);\r\n\r\n\r\n\r\n if (steps == undefined || steps == null || steps.length == 0) {\r\n\r\n return;\r\n }\r\n\r\n\r\n for (let x = 0; x < steps.length; x++) {\r\n if (steps[x].Test_ID > 0) {\r\n this.testSteps.push(steps[x]);\r\n }\r\n\r\n const elem = new Element();\r\n elem.ElementArea_ID = steps[x].ElementArea_ID;\r\n elem.ElementAreaName = steps[x].ElementAreaName;\r\n elem.ElementSubAreaName = steps[x].ElementSubAreaName;\r\n elem.ControlName = steps[x].ControlName;\r\n elem.Element_ID = steps[x].Element_ID;\r\n elem.ElementName = steps[x].ElementName;\r\n elem.XPath = steps[x].XPath;\r\n elem.ParameterName = steps[x].ParameterName;\r\n elem.ParameterValue = steps[x].ParameterValue;\r\n this.allElements.push(elem);\r\n }\r\n\r\n // // // // console.log(this.allElements);\r\n\r\n // const distinctTests = this.testSteps.filter(\r\n // (thing, i, arr) => arr.findIndex(t => t.Test_ID === thing.Test_ID) === i\r\n // );\r\n\r\n // this.tests = [];\r\n // let thisTest: AutomatedTest;\r\n // for (let x = 0; x < distinctTests.length; x++) {\r\n\r\n\r\n // if (distinctTests[x].Test_ID == null || distinctTests[x].Test_ID == undefined) {\r\n // continue;\r\n // }\r\n\r\n // // // // // // // console.log(distinctTests[x]);\r\n\r\n // thisTest = new AutomatedTest();\r\n // thisTest.Test_ID = distinctTests[x].Test_ID;\r\n // thisTest.TestName = distinctTests[x].TestName;\r\n // thisTest.TestArea_ID = distinctTests[x].TestArea_ID;\r\n // thisTest.TestAreaName = distinctTests[x].TestAreaName;\r\n // thisTest.TestSubAreaName = distinctTests[x].TestSubAreaName;\r\n // thisTest.Approved = distinctTests[x].Approved;\r\n // thisTest.InProgress = distinctTests[x].InProgress;\r\n // thisTest.ReadyForReview = distinctTests[x].ReadyForReview;\r\n\r\n // this.tests.push(thisTest);\r\n // }\r\n\r\n // this.getTestAreas();\r\n\r\n\r\n this.getElementAreas();\r\n\r\n // console.log(this.testSteps);\r\n });\r\n\r\n\r\n }\r\n\r\n addTest() {\r\n\r\n this.openModalPopup('addTest');\r\n }\r\n\r\n // This block is reused, so it has been converted into a method.\r\n resetPageForShowingTests() {\r\n this.showParameters = false;\r\n\r\n this.elementAreas = [];\r\n this.elementArea = '';\r\n this.elementSubAreas = [];\r\n this.elementSubArea = '';\r\n this.tests = [];\r\n this.test = null;\r\n this.testSteps = [];\r\n // this.allElements = [];\r\n this.elements = [];\r\n\r\n this.testSaved = false;\r\n\r\n this.showTests = true;\r\n this.showTestSteps = false;\r\n\r\n this.getAutomatedTests(0);\r\n }\r\n\r\n getAllElements() {\r\n // this.allElements = [];\r\n // for (let x = 0; x < this.testSteps.length; x++) {\r\n // const elem = new Element();\r\n // elem.ElementArea_ID = this.testSteps[x].ElementArea_ID;\r\n // elem.ElementAreaName = this.testSteps[x].ElementAreaName;\r\n // elem.ElementSubAreaName = this.testSteps[x].ElementSubAreaName;\r\n // elem.ControlName = this.testSteps[x].ControlName;\r\n // elem.Element_ID = this.testSteps[x].Element_ID;\r\n // elem.ElementName = this.testSteps[x].ElementName;\r\n // elem.XPath = this.testSteps[x].XPath;\r\n // elem.ParameterName = this.testSteps[x].ParameterName;\r\n // elem.ParameterValue = this.testSteps[x].ParameterValue;\r\n // this.testSteps[x].Element = elem;\r\n // this.allElements.push(elem);\r\n\r\n // let listItem: DataSource;\r\n // listItem = new DataSource();\r\n // listItem.TextField = elem.ElementName;\r\n // listItem.ValueField = elem.Element_ID.toString();\r\n // listItem.IsSelected = false;\r\n\r\n // if (elem.Element_ID == this.testSteps[x].Element_ID) {\r\n // listItem.IsSelected = true;\r\n // }\r\n\r\n\r\n // this.elementListItems.push(listItem);\r\n // // this.allElementsListItems.push\r\n // }\r\n\r\n // // // // // // // console.log(this.elementListItems);\r\n }\r\n\r\n getTestAreas() {\r\n\r\n const distinctTestAreas = this.tests.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.TestArea_ID === thing.TestArea_ID) === i\r\n );\r\n\r\n // // // // console.log(distinctTestAreas);\r\n\r\n this.testAreas = [];\r\n for (let x = 0; x < distinctTestAreas.length; x++) {\r\n\r\n if (distinctTestAreas[x].TestArea_ID != null) {\r\n // right now for tests we only want the Portals in the automation DB\r\n\r\n\r\n if (distinctTestAreas[x].TestAreaName == 'Classroom360' || distinctTestAreas[x].TestAreaName == 'Student360' || distinctTestAreas[x].TestAreaName == 'Practice360' || distinctTestAreas[x].TestAreaName == 'Portal') {\r\n this.testAreas.push(distinctTestAreas[x].TestAreaName);\r\n }\r\n }\r\n\r\n }\r\n\r\n const distinctSubAreas = distinctTestAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.TestSubAreaName === thing.TestSubAreaName) === i\r\n );\r\n\r\n this.testSubAreas = [];\r\n for (let x = 0; x < distinctSubAreas.length; x++) {\r\n if (distinctSubAreas[x].TestSubAreaName != null) {\r\n this.testSubAreas.push(distinctSubAreas[x].TestSubAreaName);\r\n }\r\n\r\n }\r\n\r\n // // // // // // console.log(this.testAreas);\r\n // // // // // // console.log(this.testSubAreas);\r\n\r\n if (this.testSubAreas.length > 0) {\r\n this.testSubArea = this.testSubAreas[0];\r\n }\r\n\r\n if (this.testAreas.length > 0) {\r\n this.testArea = this.testAreas[0];\r\n }\r\n\r\n // if (this.tests.length > 0) {\r\n // this.test = this.tests[0];\r\n // }\r\n\r\n\r\n // this.areas.push()\r\n }\r\n\r\n getSubAreas(testStep: AutomatedTestStep) {\r\n console.log(testStep);\r\n // this.testSubAreas = [];\r\n // for (let x = 0; x < distinctSubAreas.length; x++) {\r\n // if (distinctSubAreas[x].TestSubAreaName != null) {\r\n // this.testSubAreas.push(distinctSubAreas[x].TestSubAreaName);\r\n // }\r\n\r\n // }\r\n\r\n }\r\n\r\n // testClick(thisTest: AutomatedTest) {\r\n // this.test = thisTest;\r\n // this.showTests = false;\r\n // this.showTestSteps = true;\r\n // this.getAutomatedTestSteps(thisTest.Test_ID);\r\n // }\r\n\r\n getElementAreas() {\r\n // // // // // // console.log('getElementAreas()');\r\n // // // // // // console.log(this.elementAreas);\r\n // // // // // // console.log(this.elementArea);\r\n // // // // // // console.log(this.testSteps);\r\n\r\n const distinctElementAreas = this.allElements.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.ElementArea_ID === thing.ElementArea_ID) === i\r\n );\r\n\r\n this.elementAreas = [];\r\n for (let x = 0; x < distinctElementAreas.length; x++) {\r\n\r\n if (distinctElementAreas[x].ElementArea_ID != null) {\r\n this.elementAreas.push(distinctElementAreas[x].ElementAreaName);\r\n }\r\n\r\n }\r\n\r\n // this.elementArea = this.elementAreas[0]; // TODO:???\r\n // // // // // // console.log(this.elementArea);\r\n\r\n // const distinctSubAreas = distinctElementAreas.filter(\r\n // (thing, i, arr) => arr.findIndex(t => t.ElementSubAreaName === thing.ElementSubAreaName) === i\r\n // );\r\n\r\n // this.elementSubAreas = [];\r\n // for (let x = 0; x < distinctSubAreas.length; x++) {\r\n // if (distinctSubAreas[x].ElementSubAreaName != null) {\r\n // this.elementSubAreas.push(distinctSubAreas[x].ElementSubAreaName);\r\n // }\r\n\r\n // }\r\n\r\n\r\n // // // // // // console.log(this.elementArea);\r\n // // // // // // console.log(this.elementSubArea);\r\n\r\n for (let x = 0; x < this.testSteps.length; x++) {\r\n if (this.elementArea == null || this.elementArea == undefined || this.elementArea == '') {\r\n this.elementArea = this.testSteps[x].ElementAreaName;\r\n }\r\n if (this.elementSubArea == null || this.elementSubArea == undefined || this.elementSubArea == '') {\r\n this.elementSubArea = this.testSteps[x].ElementSubAreaName;\r\n }\r\n this.elementAreaChanged(this.testSteps[x]);\r\n }\r\n\r\n // this.getElements();\r\n\r\n\r\n // this.areas.push()\r\n }\r\n\r\n testAreaChanged() {\r\n\r\n this.testSubAreas = [];\r\n for (let x = 0; x < this.allAreas.length; x++) {\r\n if (this.allAreas[x].AreaName == this.selectedArea.AreaName) {\r\n this.testSubAreas.push(this.allAreas[x].SubAreaName);\r\n }\r\n }\r\n // // // // console.log(this.testSubAreas);\r\n\r\n }\r\n\r\n elementAreaChanged(testStep: AutomatedTestStep) {\r\n\r\n // // // console.log(testStep);\r\n // testStep.ElementAreaName = this.elementArea; // ??\r\n // testStep.ElementSubAreaName = this.elementSubArea; // ??\r\n\r\n // const distinctSubAreas = this.distinctAreas.filter(\r\n // (thing, i, arr) => arr.findIndex(t => t.SubAreaName === thing.SubAreaName) === i\r\n // );\r\n\r\n // testStep.Element.ElementSubAreas = [];\r\n\r\n // testStep.ElementSubAreas = []; // ??\r\n // for (let x = 0; x < this.allAreas.length; x++) {\r\n // if (this.allAreas[x].AreaName == testStep.ElementAreaName) {\r\n // testStep.ElementSubAreas.push(this.allAreas[x].SubAreaName);\r\n // }\r\n\r\n // }\r\n\r\n const unsortedElementSubAreas: string[] = []; // ??\r\n for (let x = 0; x < this.allAreas.length; x++) {\r\n if (this.allAreas[x].AreaName == testStep.ElementAreaName) {\r\n unsortedElementSubAreas.push(this.allAreas[x].SubAreaName);\r\n }\r\n\r\n }\r\n\r\n // sort the sub areas\r\n const sortedElementSubAreas = unsortedElementSubAreas.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\r\n\r\n testStep.ElementSubAreas = sortedElementSubAreas.filter(\r\n (thing, i, arr) => arr.findIndex(t => t === thing) === i\r\n );\r\n\r\n // if (this.inDebugMode) {\r\n // console.log('HERE NOW');\r\n // console.table(testStep.ElementSubAreas);\r\n // }\r\n\r\n // // TODO: REMOVE\r\n // this.elementSubAreas = [];\r\n // for (let x = 0; x < this.allAreas.length; x++) {\r\n // if (this.allAreas[x].AreaName == testStep.ElementAreaName) {\r\n // this.elementSubAreas.push(this.allAreas[x].SubAreaName);\r\n // }\r\n\r\n // }\r\n\r\n // // // // // console.log(testStep);\r\n // // // // // console.log(this.elementArea);\r\n // // // // console.log('sup?');\r\n // // // // console.log(this.elementSubAreas);\r\n\r\n this.getElements(testStep);\r\n\r\n testStep.Elements = this.elements; // ??\r\n\r\n // testStep.Element = new Element(); // ??\r\n\r\n }\r\n\r\n // elementSubAreaChanged() {\r\n // // // // // // console.log('elementSub-AreaChanged()');\r\n // this.getElements();\r\n // }\r\n\r\n // getTestSteps() {\r\n // // // // // // // console.log(this.test);\r\n // // // // // // // console.log(this.testSteps);\r\n // // this.getElements();\r\n\r\n // }\r\n\r\n getElements(step: AutomatedTestStep) {\r\n this.elements = [];\r\n // this.elements = this.allElements.filter(e => e.ElementAreaName == this.testArea);\r\n // this.elements = this.allElements.filter(e => e.ElementAreaName == this.elementArea && (e.ElementSubAreaName == null || e.ElementSubAreaName == undefined || e.ElementSubAreaName == this.elementSubArea));\r\n this.elements = this.allElements.filter(e => e.ElementAreaName === step.ElementAreaName && e.ElementSubAreaName === step.ElementSubAreaName);\r\n\r\n // Filter the elements so that only distinct elements appear in the drop-down.\r\n this.elements = this.elements.filter(\r\n (thing, i, arr) => arr.findIndex(t => t.ElementName === thing.ElementName) === i\r\n );\r\n // const E = this.elements.filter(e => e.ElementAreaName == 'Classroom Summary' && e.ElementSubAreaName == 'Side Menu')\r\n\r\n // Sort elements in alphabetical order\r\n this.elements.sort((a, b) => a.ElementName > b.ElementName ? 1 : -1);\r\n\r\n step.Elements = this.elements;\r\n\r\n // // console.log(E);\r\n // // console.log(step);\r\n\r\n // // // // // console.log(this.allElements);\r\n // // // // // console.log(this.allAreas);\r\n // // // // // console.log(this.elementArea);\r\n // // // // // console.log(this.elementSubArea);\r\n\r\n // // // // // console.log(this.elements);\r\n // // // // // console.log('here');\r\n\r\n // // // // // console.log(step.Element);\r\n // // // // console.log(step);\r\n\r\n\r\n // if (step.Element == null || step.Element == undefined) {\r\n // step.Element = this.getElementByElement_ID(step.Element_ID);\r\n // }\r\n\r\n // if (step.Element == null || step.Element == undefined) {\r\n // step.Elements = this.elements;\r\n // step.Element_ID = this.elements[0].Element_ID;\r\n // step.Element = this.elements[0];\r\n // }\r\n\r\n // // // // // // // console.log(step.Element);\r\n // // // // // // // console.log(step);\r\n\r\n\r\n this.getActions(step.Element, step);\r\n\r\n\r\n }\r\n\r\n getElementByElement_ID(element_ID: number): Element {\r\n const tempElements = this.allElements.filter(e => e.Element_ID == element_ID);\r\n return tempElements[0];\r\n }\r\n\r\n // getStepByStep_ID(step_ID: number): AutomatedTestStep {\r\n // const tempItems = this.testSteps.filter(e => e.Test_ID == element_ID);\r\n // return tempElements[0];\r\n // }\r\n\r\n getActions(item: Element, step: AutomatedTestStep) {\r\n\r\n // // // console.log(item);\r\n // // // console.log(step);\r\n\r\n // this.actions = [];\r\n\r\n step.Element = item;\r\n\r\n // // // // // console.log(item);\r\n // // // // // console.log(step);\r\n // // // // // // console.log(step.Element);\r\n\r\n if (step.Element == null || step.Element == undefined) {\r\n step.Element = this.getElementByElement_ID(step.Element_ID);\r\n // // // // console.log('here');\r\n // // // // console.log(step.Element);\r\n }\r\n\r\n if (step.Element_ID == 0) {\r\n if (step.Element != null && step.Element != undefined) {\r\n step.Element_ID = step.Element.Element_ID;\r\n }\r\n }\r\n step.Element.Action = '';\r\n step.Element.Actions = [];\r\n\r\n // // // // // // // console.log(step.Element.ElementName);\r\n\r\n // // // // // // console.log(item);\r\n\r\n // const tempElements = this.allElements.filter(e => e.Element_ID.toString() == item.ValueField);\r\n // if (tempElements.length > 0) {\r\n // // this.element = tempElements[0];\r\n\r\n // // // // // // // console.log(tempElements);\r\n // // step.Element = tempElements[0];\r\n\r\n // // // // // // // console.log(this.testSteps);\r\n\r\n // const tempSteps = this.testSteps.filter(e => e.Step_ID == step.Step_ID);\r\n\r\n // // // // // // // console.log(tempSteps);\r\n\r\n // const element_ID = Number(item.ValueField);\r\n\r\n // const myElement = this.getElementByElement_ID(element_ID);\r\n // // // // // // // console.log(myElement);\r\n\r\n // if (tempSteps[0] !== null) {\r\n // tempSteps[0].Element = myElement;\r\n\r\n // // tempSteps[0].Element = step.Element;\r\n // tempSteps[0].Element_ID = myElement.Element_ID; // step.Element.Element_ID;\r\n // tempSteps[0].ElementName = myElement.ElementName;\r\n // tempSteps[0].ElementArea_ID = myElement.ElementArea_ID;\r\n // tempSteps[0].ElementAreaName = myElement.ElementAreaName;\r\n // tempSteps[0].ElementSubAreaName = myElement.ElementSubAreaName;\r\n // }\r\n\r\n\r\n\r\n\r\n // // tempSteps[0].Element = step.Element;\r\n // // tempSteps[0].Element_ID = step.Element.Element_ID;\r\n // // tempSteps[0].ElementName = step.Element.ElementName;\r\n // // tempSteps[0].ElementArea_ID = step.Element.ElementArea_ID;\r\n // // tempSteps[0].ElementAreaName = step.Element.ElementAreaName;\r\n // // tempSteps[0].ElementSubAreaName = step.Element.ElementSubAreaName;\r\n // // }\r\n // // const tempItems = this.elementListItems.filter(e => e.ValueField == this.element.Element_ID.toString());\r\n // // for (let x = 0; x < tempItems.length; x++) {\r\n\r\n // // // // // // // // console.log(tempItems[x]);\r\n\r\n // // if (tempItems[x].ValueField = item.ValueField) {\r\n // // tempItems[x].IsSelected = true;\r\n // // step.Element.ElementName = tempItems[x].TextField;\r\n // // step.Element.Element_ID = Number(item.ValueField);\r\n // // } else {\r\n // // tempItems[x].IsSelected = false;\r\n // // }\r\n // // }\r\n // // // // // // // console.log(tempItems);\r\n // }\r\n\r\n // // // // // // // console.log(this.testSteps);\r\n // // // for (let x = 0; x < this.testSteps.length; x++) {\r\n // // // // // // // console.log (this.testSteps[x].Element);\r\n // // // }\r\n // // // // // // // // console.log(tempElements);\r\n\r\n // // // // // // // // console.log(item);\r\n\r\n // // // // // // // // console.log(this.element);\r\n // // // // // // // // console.log('here now');\r\n // // // // // // // // console.log(event);\r\n // // // // // // // // console.log(this.test);\r\n\r\n // // if (this.element == null || this.element == undefined) {\r\n // // return;\r\n // // }\r\n\r\n\r\n if (step.Element.ControlName == 'Test') {\r\n step.Element.Actions.push('Execute Steps'); // (@TextToEnter)\r\n }\r\n else {\r\n step.Element.Actions.push('Validate Value');\r\n step.Element.Actions.push('Verify Exists');\r\n\r\n if (step.Element.ControlName == 'Table Cell') {\r\n step.Element.Actions.push('Click Cell');\r\n step.Element.Actions.push('Click Cell By Row Number');\r\n step.Element.Actions.push('Validate Value By Row Number');\r\n } else if (step.Element.ControlName == 'Table Row') {\r\n step.Element.Actions.push('Click Row Number');\r\n }\r\n else {\r\n // most controls\r\n step.Element.Actions.push('Click');\r\n }\r\n\r\n }\r\n\r\n\r\n if (step.Element.ControlName == 'Text Box') {\r\n step.Element.Actions.push('Enter Text'); // (@TextToEnter)\r\n step.Element.Actions.push('Clear');\r\n }\r\n\r\n if (step.Element.ControlName == 'Button') {\r\n // step.Element.Actions.push('Click');\r\n }\r\n\r\n if (step.Element.ControlName === 'Sort Button') {\r\n step.Element.Actions.push('Click Sort Button By Column And Row'); // Column !NAME! and Row !NUMBER!\r\n }\r\n\r\n if (step.Element.ControlName == 'Combo Box') {\r\n step.Element.Actions.push('Select Combo Box Item');\r\n step.Element.Actions.push('Select Combo Box Value');\r\n }\r\n\r\n if (step.Element.ControlName == 'Drop Down List') {\r\n // step.Element.Actions.push('Click');\r\n }\r\n\r\n // if (step.Element.ControlName == 'Table Cell') {\r\n // step.Element.Actions.push('Click Cell'); // (@CellValue)\r\n // }\r\n\r\n if (step.Element.ControlName == 'Table Row') {\r\n // step.Element.Actions.push('Click'); // (@TextToEnter)\r\n }\r\n\r\n for (let x = 0; x < step.Element.Actions.length; x++) {\r\n if (step.Element.Actions[x] == step.ActionName) {\r\n step.Element.Action = step.Element.Actions[x];\r\n }\r\n }\r\n\r\n // // // console.log(step);\r\n // if (this.actions != null && this.actions != undefined) {\r\n // this.action = this.actions[0];\r\n // }\r\n\r\n // step.Element.Actions = this.actions;\r\n // step.Element.Action = this.action;\r\n\r\n // // // // // // console.log(this.actions);\r\n // // // // // // console.log(this.action);\r\n\r\n // // // // console.log(step.Element);\r\n // // // // console.log(step.Element.Actions);\r\n // // // // console.log(step.Element.Action);\r\n\r\n // // this.getDataInputs();\r\n\r\n }\r\n\r\n getDataInputs() {\r\n\r\n // // // // // // // console.log('here');\r\n // // // // // // // console.log(this.action);\r\n // // // // // // // console.log(this.element);\r\n // this.dataInput = '';\r\n\r\n\r\n // if (this.action == 'Enter Text') {\r\n\r\n // this.dataInput = this.element.parameterName + ' = ' + this.element.parameterValue;\r\n\r\n // }\r\n\r\n }\r\n\r\n\r\n addStep(isSubTest: boolean) {\r\n\r\n this.testSaved = false;\r\n // // // // // // console.log(this.elementArea);\r\n // // // // // // console.log(this.elementSubArea);\r\n // // // // // // console.log('addStep()');\r\n\r\n // console.log('HERE');\r\n\r\n // console.log(this.insertStepNumber);\r\n // console.log(this.insertStepType);\r\n\r\n\r\n if (this.insertStepType == 'Shared Test') {\r\n this.insertStepType = '';\r\n // this.addTest();\r\n }\r\n\r\n let stepOrder = this.testSteps.length + 1;\r\n\r\n if (this.insertStepType == 'Regular Step') { // (this.insertStepNumber > 0) {\r\n stepOrder = this.insertStepNumber - 1;\r\n // bump up the remaining step orders\r\n // for (let x = this.insertStepNumber - 1; x < this.testSteps.length; x++) {\r\n // this.testSteps[x].StepOrder++;\r\n // }\r\n }\r\n\r\n // for (let x = 0; x < this.testSteps.length; x++) {\r\n // this.testSteps[x].StepOrder = x + 1;\r\n // }\r\n\r\n // console.log(stepOrder);\r\n\r\n const newStep = new AutomatedTestStep();\r\n newStep.StepOrder = stepOrder;\r\n newStep.Step_ID = 0;\r\n newStep.Elements = [];\r\n newStep.Element = new Element();\r\n\r\n\r\n\r\n // // // // // // console.log(this.testArea);\r\n // // // // // // console.log(this.testSubArea);\r\n\r\n\r\n if (isSubTest) {\r\n\r\n this.openModalPopup('addSubTest'); // we need to select sub test\r\n\r\n // newStep.Test_ID = 0; // this.test.Test_ID;\r\n\r\n // newStep.ElementAreaName = this.testArea;\r\n // newStep.ElementSubAreaName = this.testSubArea;\r\n\r\n // newStep.ElementName = this.test.TestName;\r\n\r\n // const elem = new Element();\r\n // elem.ElementName = this.test.TestName;\r\n // elem.ElementAreaName = this.testArea;\r\n // elem.ElementSubAreaName = this.testSubArea;\r\n\r\n // elem.Actions.push('Execute Steps');\r\n // elem.Action = 'Execute Steps';\r\n // newStep.Element = elem;\r\n // newStep.Elements.push(elem);\r\n }\r\n else {\r\n // regular step\r\n newStep.Test_ID = this.test.Test_ID;\r\n\r\n newStep.ElementAreaName = ''; // this.elementArea;\r\n newStep.ElementSubAreaName = ''; // this.elementSubArea;\r\n\r\n // this.getElements(newStep);\r\n // newStep.ElementName = this.elements[0].ElementName;\r\n\r\n // // // // console.log(newStep.Elements);\r\n // // // // console.log(newStep.Element);\r\n // // // // console.log(newStep.ActionName);\r\n // // // // console.log(newStep.Element.Action);\r\n // // // // console.log(newStep.Element.Actions);\r\n\r\n // // // // console.log(newStep);\r\n\r\n\r\n // this.testStep = step;\r\n\r\n // console.log(stepOrder);\r\n\r\n if (this.insertStepType == 'Regular Step') {\r\n // this.testSteps.unshift(newStep); // push to beginning of array\r\n this.testSteps.splice(stepOrder, 0, newStep); // push to beginning of array\r\n } else {\r\n this.testSteps.push(newStep); // push to end of array\r\n\r\n }\r\n\r\n }\r\n\r\n this.insertStepType = '';\r\n\r\n\r\n // const sortedSteps = this.testSteps.sort((a, b) => a.StepOrder < b.StepOrder ? -1 : a.StepOrder > b.StepOrder ? 1 : 0);\r\n\r\n // console.log(this.testSteps);\r\n // // console.log(sortedSteps);\r\n\r\n // reorder steps\r\n for (let x = 0; x < this.testSteps.length; x++) {\r\n this.testSteps[x].StepOrder = x + 1;\r\n }\r\n\r\n // console.log(this.testSteps);\r\n\r\n\r\n // for (let x = 0; x < sortedSteps.length; x++) {\r\n\r\n // }\r\n\r\n\r\n // // // // // // // console.log(this.area);\r\n // // // // // // // console.log(this.element);\r\n // // // // // // // console.log(this.action);\r\n // // // // // // // console.log(this.actions);\r\n\r\n // let tempAction = this.action;\r\n // if (this.action == 'EnterText(@TextToEnter)') {\r\n // if (this.element.ElementName == 'UserName') {\r\n // tempAction = 'EnterText(@UserName)';\r\n // }\r\n // else if (this.element.ElementName == 'Password') {\r\n // tempAction = 'EnterText(@Password)';\r\n // }\r\n // else if (this.element.ElementName == 'StudentFirstName') {\r\n // tempAction = 'EnterText(@StudentFirstName)';\r\n // }\r\n // else if (this.element.ElementName == 'StudentLastName') {\r\n // tempAction = 'EnterText(@StudentLastName)';\r\n // }\r\n // else if (this.element.ElementName == 'StudentNumber') {\r\n // tempAction = 'EnterText(@StudentNumber)';\r\n // }\r\n // }\r\n\r\n // if (this.action == 'ClickCell(@CellValue)') {\r\n // this.testText += '\\n' + 'set @TableHeaderText= StudentNumber';\r\n // tempAction = 'ClickCell(@TableHeaderText, @StudentNumber)';\r\n // }\r\n\r\n\r\n // this.testText += '\\n' + this.testArea + '_' + this.element.ElementName + '.' + tempAction;\r\n\r\n }\r\n\r\n deleteStep(step: AutomatedTestStep) {\r\n // // // // // console.log(step);\r\n\r\n this.confirmDialogRef = this._confirmDialog.open(\r\n ConfirmModalComponent,\r\n {\r\n data: {\r\n PageTitle: 'Confirm Delete Step',\r\n Message: 'Are you sure you want to DELETE this STEP?'\r\n },\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n\r\n this.confirmDialogRef.afterClosed().subscribe(result => {\r\n\r\n // user clicked OK\r\n if (result == true) {\r\n\r\n // console.log(step);\r\n\r\n this.reportService.deleteAutomatedTestStep(step.Step_ID).subscribe(res => {\r\n });\r\n\r\n this.testSteps = this.testSteps.filter(obj => obj !== step);\r\n\r\n for (let x = 0; x < this.testSteps.length; x++) {\r\n this.testSteps[x].StepOrder--;\r\n }\r\n\r\n // reorder steps\r\n for (let x = 0; x < this.testSteps.length; x++) {\r\n this.testSteps[x].StepOrder = x + 1;\r\n }\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n // this.reportService.deleteAutomatedTestStep(step.Step_ID).subscribe(res => {\r\n // });\r\n\r\n // this.testSteps = this.testSteps.filter(obj => obj !== step);\r\n }\r\n\r\n saveTest(test: AutomatedTest) {\r\n // // console.log(test);\r\n this.reportService.saveAutomatedTest(test.Test_ID, test).subscribe(results => {\r\n\r\n });\r\n\r\n }\r\n\r\n setIsSubTestOnly(thisTest: AutomatedTest, checked: boolean) {\r\n // thisTest.IsSubTestOnly = !thisTest.IsSubTestOnly;\r\n // // // console.log('checked');\r\n // // // console.log(checked);\r\n if (checked) {\r\n thisTest.IsSubTestOnly = true;\r\n } else {\r\n thisTest.IsSubTestOnly = false;\r\n }\r\n\r\n // // console.log(thisTest);\r\n\r\n this.saveTest(thisTest);\r\n }\r\n\r\n setApproved(thisTest: AutomatedTest, checked: boolean) {\r\n // thisTest.Approved = !thisTest.Approved;\r\n // // // console.log('checked');\r\n // // // console.log(checked);\r\n if (checked) {\r\n thisTest.Approved = true;\r\n } else {\r\n thisTest.Approved = false;\r\n }\r\n // // console.log(thisTest);\r\n this.saveTest(thisTest);\r\n }\r\n\r\n saveTestStepsClick() {\r\n\r\n\r\n // for (let x = 0; x < this.testSteps.length; x++) {\r\n // this.testSteps[x].Element_ID = this.testSteps[x].Element.Element_ID;\r\n // this.testSteps[x].ActionName = this.testSteps[x].Element.Action;\r\n // this.testSteps[x].ElementArea_ID = this.testSteps[x].Element.ElementArea_ID;\r\n // if (this.testSteps[x].InnerTest_ID == null || this.testSteps[x].InnerTest_ID == undefined) {\r\n // this.testSteps[x].InnerTest_ID = 0;\r\n // }\r\n // }\r\n\r\n for (let x = 0; x < this.testSteps.length; x++) {\r\n // if (this.testSteps[x].Element_ID == 0 || this.testSteps[x].Element_ID == null || this.testSteps[x].Element_ID == undefined) {\r\n if (this.testSteps[x].Element != null && this.testSteps[x].Element != undefined) {\r\n this.testSteps[x].Element_ID = this.testSteps[x].Element.Element_ID;\r\n }\r\n // }\r\n }\r\n\r\n\r\n // // console.log(this.testSteps);\r\n // // console.log('here');\r\n\r\n this.reportService.saveAutomatedTestSteps(this.test.Test_ID, this.testSteps).subscribe(res => {\r\n\r\n // // // // // console.log(res);\r\n\r\n\r\n this.getAutomatedTests(0);\r\n\r\n this.testSaved = true;\r\n\r\n // this.testSteps = [];\r\n // this.showTests = true;\r\n // this.showTestSteps = false;\r\n });\r\n\r\n }\r\n\r\n actionClicked(testStep: AutomatedTestStep, event: any) {\r\n // console.log(event);\r\n // testStep.ActionName = this.actionName;\r\n // console.log(testStep);\r\n // // // // console.log(this.testSteps);\r\n }\r\n\r\n // deleteTest(test_ID: number) {\r\n // this.reportService.deleteAutomatedTest(test_ID).subscribe(res => {\r\n // });\r\n // this.testSteps = [];\r\n // this.getAutomatedTests(0);\r\n // // this.tests = this.tests.filter(obj => obj.Test_ID !== test_ID);\r\n // }\r\n\r\n\r\n insertStep(step: AutomatedTestStep) {\r\n // new step will have step order of step clicked\r\n\r\n this.insertStepNumber = step.StepOrder;\r\n\r\n this.openModalPopup('insertStep');\r\n\r\n // the remaining steps after this new step need their order bumped up by one\r\n // // console.log(step);\r\n // for (let x = 0; x < this.testSteps.length; x++) {\r\n // if (this.testSteps[x].StepOrder == step.StepOrder - 1) {\r\n // this.testSteps[x].StepOrder = step.StepOrder;\r\n // step.StepOrder = step.StepOrder - 1;\r\n // }\r\n // }\r\n\r\n }\r\n\r\n\r\n deleteTest(theTest: AutomatedTest) {\r\n // // // // // console.log(step);\r\n\r\n const test_ID = theTest.Test_ID;\r\n\r\n this.confirmDialogRef = this._confirmDialog.open(\r\n ConfirmModalComponent,\r\n {\r\n data: {\r\n PageTitle: 'Confirm Delete Test - ' + theTest.TestName,\r\n Message: 'Are you sure you want to DELETE this TEST?'\r\n },\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n\r\n this.confirmDialogRef.afterClosed().subscribe(result => {\r\n\r\n // user clicked OK\r\n if (result == true) {\r\n\r\n this.reportService.deleteAutomatedTest(test_ID).subscribe(res => {\r\n this.testSteps = [];\r\n this.getAutomatedTests(0);\r\n });\r\n // this.testSteps = [];\r\n // this.getAutomatedTests(0);\r\n }\r\n\r\n\r\n });\r\n\r\n\r\n // this.reportService.deleteAutomatedTestStep(step.Step_ID).subscribe(res => {\r\n // });\r\n\r\n // this.testSteps = this.testSteps.filter(obj => obj !== step);\r\n }\r\n\r\n legendClick() {\r\n this.reportLegendDialogRef = this.reportLegendDialog.open(ReportLegendComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n legendItem_1: 'Shared Test',\r\n legendItem_2: 'Unapproved'\r\n\r\n },\r\n\r\n });\r\n\r\n }\r\n\r\n getBackgroundColorForTest(element: any) {\r\n if (element.IsSubTestOnly && element.Approved) {\r\n return 'AliceBlue';\r\n }\r\n if (!element.Approved) {\r\n return 'LavenderBlush';\r\n }\r\n // console.log(element);\r\n }\r\n\r\n\r\n\r\n closeClick() {\r\n this.thisDialogRef.close();\r\n }\r\n\r\n testChanged() {\r\n\r\n }\r\n\r\n getAutomatedTestParameters(testId: number, paramId: number) { // testId, int paramId)\r\n\r\n this.reportService.getAutomatedTestParameters(testId, paramId).subscribe(res => {\r\n this.parameters = res;\r\n // console.log(this.parameters);\r\n\r\n });\r\n }\r\n\r\n // saveAutomatedTestParameter(testId: number, paramId: number) { // testId, int paramId)\r\n\r\n // // this.reportService.saveAutomatedTestParameter(testId, paramId).subscribe(res => {\r\n\r\n // // });\r\n\r\n // }\r\n\r\n showParameterGrid(show: boolean) {\r\n\r\n this.showParameters = show;\r\n this.showTestSteps = !show;\r\n this.showTests = false;\r\n\r\n // this.reportService.getAutomatedTestParameters(this.test.Test_ID, 0).subscribe(res => {\r\n // this.parameters = res;\r\n // // console.log(this.parameters);\r\n // });\r\n\r\n }\r\n\r\n editParameterClick(param: AutomatedTestParameter) {\r\n this.parameter = param;\r\n this.openModalPopup('editParameter');\r\n }\r\n\r\n addParameter() {\r\n\r\n this.parameter = new AutomatedTestParameter;\r\n this.parameter.ParameterValue = '';\r\n this.openModalPopup('addParameter');\r\n }\r\n\r\n deleteParameter(param: AutomatedTestParameter) {\r\n this.confirmDialogRef = this._confirmDialog.open(\r\n ConfirmModalComponent,\r\n {\r\n data: {\r\n PageTitle: 'Confirm Delete Parameter ' + param.ParameterName,\r\n Message: 'Are you sure you want to DELETE this PARAMETER?'\r\n },\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n\r\n this.confirmDialogRef.afterClosed().subscribe(result => {\r\n\r\n // user clicked OK\r\n if (result == true) {\r\n\r\n this.reportService.deleteAutomatedTestParameter(param.Test_ID, param.ID).subscribe(success => {\r\n\r\n this.reportService.getAutomatedTestParameters(0, 0).subscribe(res => {\r\n this.parameters = res;\r\n // console.log(this.parameters);\r\n this.showParameterGrid(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 // this.reportService.deleteAutomatedTestStep(step.Step_ID).subscribe(res => {\r\n // });\r\n\r\n // this.testSteps = this.testSteps.filter(obj => obj !== step);\r\n}\r\n\r\nsetTestStatus() {\r\n for (let x = 0; x < this.tests.length; x++) {\r\n\r\n this.tests[x].SelectedStatus = AutomatedTestStatus.InProgress; // default\r\n this.tests[x].SelectedStatusDescription = 'In Progress';\r\n\r\n if (this.tests[x].IsObsolete) {\r\n this.tests[x].SelectedStatus = AutomatedTestStatus.IsObsolete;\r\n this.tests[x].SelectedStatusDescription = 'Obsolete';\r\n }\r\n else if (this.tests[x].InProgress) {\r\n this.tests[x].SelectedStatus = AutomatedTestStatus.InProgress;\r\n this.tests[x].SelectedStatusDescription = 'In Progress';\r\n }\r\n else if (this.tests[x].Approved) {\r\n this.tests[x].SelectedStatus = AutomatedTestStatus.Approved;\r\n this.tests[x].SelectedStatusDescription = 'Approved';\r\n }\r\n else if (this.tests[x].ReadyForReview) {\r\n this.tests[x].SelectedStatus = AutomatedTestStatus.ReadyForReview;\r\n this.tests[x].SelectedStatusDescription = 'Ready for Review';\r\n\r\n }\r\n\r\n // in case all bit flags are false\r\n if (this.tests[x].SelectedStatus == AutomatedTestStatus.InProgress) {\r\n this.tests[x].InProgress = true;\r\n }\r\n }\r\n // console.log(this.tests);\r\n}\r\n\r\n showElementList() {\r\n\r\n this.elementListDialogRef = this._elementListDialog.open(ElementListModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Element List',\r\n Message: 'A list of all the elements. You may click the Action button to interact with the element.',\r\n }\r\n });\r\n\r\n }\r\n\r\n showModulePortalList() {\r\n\r\n this.areaListDialogRef = this._areaListDialog.open(AreaListModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Module / Portal List',\r\n Message: 'A list of all the Modules and Portals. You may click the Action button to interact with the Portal.',\r\n }\r\n });\r\n\r\n }\r\n\r\n showPageTabList() {\r\n\r\n this.areaListDialogRef = this._areaListDialog.open(AreaListModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: {\r\n PageTitle: 'Page & Tab / View List',\r\n Message: 'A list of all the pages and their tabs and views. You may click the Action button to interact with the page / tab / view.',\r\n }\r\n });\r\n\r\n }\r\n\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, OnInit, AfterViewInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\n\r\nimport { LoginService } from '../../login/login.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { AllReportsComponent } from '../all-reports/all-reports.component';\r\n\r\nimport { ReportFoldersComponent } from '../report-folders/report-folders.component';\r\nimport { AddReportFolderComponent } from '../report-folders/add-folder/add-folder.component';\r\n\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportQueueComponent } from '../report-queue/report-queue.component';\r\nimport { ArchiveProcessComponent } from '../archive-report/archive-process.component';\r\nimport { AutomatedTestingSetupComponent } from '../automated-testing-setup/automated-testing-setup.component';\r\nimport { Router } from '@angular/router';\r\nimport { ReportingFrameworkService } from '../../../classroom360/reporting-framework/reporting-framework.service';\r\nimport { MyReportsComponent } from '../../../classroom360/reporting-framework/my-reports/my-reports.component';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'reportFooter',\r\n templateUrl: './report-footer.component.html',\r\n styleUrls: ['./report-footer.component.css']\r\n})\r\nexport class ReportFooterComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n automatedTestingSetupDialogRef: MatDialogRef;\r\n\r\n loginSettings: LoginSettings;\r\n // ExpandCollapseButtonsComponent: ExpandCollapseButtonsComponent;\r\n // ReportFolders: ReportFolder[];\r\n // Reports: Report[];\r\n AllReportsDialogRef: MatDialogRef;\r\n ReportFoldersDialogRef: MatDialogRef;\r\n\r\n addReportFolderDialogRef: MatDialogRef; // for Add Entry in My Reports if no report folders exist\r\n\r\n\r\n\r\n @Input() hideFoldersButton: boolean;\r\n @Input() callByV9MyReports = false;\r\n\r\n expandedRows: boolean[] = [];\r\n @Output() expandAllFolders: EventEmitter = new EventEmitter();\r\n // @Output() isMyReports: EventEmitter = new EventEmitter();\r\n @Output() refreshedReportFolders: EventEmitter = new EventEmitter();\r\n\r\n archiveProcessDialogRef: MatDialogRef;\r\n hideReportToArchiveButton: boolean;\r\n\r\n showAutomatedTestsButton = false;\r\n isMyReportPage = false;\r\n\r\n // @Input() private _IsMyReports: boolean;\r\n // @Input() private _IsAllReports: boolean;\r\n\r\n // get IsMyReports() {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('GET IsMyReports()');\r\n // console.log(this._IsMyReports);\r\n // }\r\n // return this._IsMyReports;\r\n // }\r\n\r\n // @Input()\r\n // set IsMyReports(value) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('SET IsMyReports(value)');\r\n // console.log(value);\r\n // }\r\n // this._IsMyReports = value;\r\n // }\r\n\r\n\r\n // get IsAllReports() {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('GET IsAllReports()');\r\n // console.log(this._IsAllReports);\r\n // }\r\n // return this._IsMyReports;\r\n // }\r\n\r\n // @Input()\r\n // set IsAllReports(value) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('set IsAllReports(value)');\r\n // console.log(value);\r\n // }\r\n // this._IsAllReports = value;\r\n // }\r\n\r\n private _showNoFoldersMessage: boolean;\r\n\r\n get showNoFoldersMessage(): boolean {\r\n // return this._showNoFoldersMessage;\r\n return this.reportService.showNoFoldersMessage;\r\n }\r\n\r\n // set showNoFoldersMessage(value: boolean) {\r\n // //this._showNoFoldersMessage = value;\r\n // this.reportService.showNoFoldersMessage = value;\r\n // }\r\n\r\n\r\n // public IsMyReports: boolean;\r\n // public IsAllReports: boolean;\r\n myReportsDialogRef: MatDialogRef\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private reportService: ReportingService,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private dialog: MatDialog,\r\n private reportingFrameworkService: ReportingFrameworkService,\r\n private addReportFolderDialog: MatDialog,\r\n private archiveProcessDialog: MatDialog,\r\n\r\n private automatedTestingSetupDialog: MatDialog,\r\n private router: Router\r\n ) {\r\n this.loginSettings = loginService.LoginSettings;\r\n // this.userCanAutoRunReports = this.reportService.userCanAutoRunReports;\r\n\r\n\r\n } // end constructor\r\n\r\n ngOnInit() {\r\n this.getMyReportPageStatus();\r\n\r\n if (this.reportService.reportingConfigurationSettings == null || this.reportService.reportingConfigurationSettings == undefined) {\r\n this.reportService.getReportingConfigurationSettings(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.AYIdentifier)\r\n .subscribe(settings => {\r\n this.reportService.reportingConfigurationSettings = settings;\r\n this.hideReportToArchiveButton = this.reportService.reportingConfigurationSettings.HideReportToArchiveButton;\r\n });\r\n }\r\n\r\n if (this.reportService.currentUser.UserName.toLowerCase() == 'tyleradmin' || this.reportService.currentUser.UserName.toLowerCase() == 'sdmadmin') {\r\n this.showAutomatedTestsButton = true;\r\n } else {\r\n this.showAutomatedTestsButton = false;\r\n }\r\n\r\n\r\n // this.userCanAutoRunReports = this.reportService.userCanAutoRunReports;\r\n }\r\n\r\n getMyReportPageStatus() {\r\n this.reportingFrameworkService.checkDefaultLandingPage().subscribe(isMyReportPage => {\r\n this.isMyReportPage = isMyReportPage;\r\n });\r\n }\r\n\r\n\r\n ngAfterViewInit() {\r\n // this.userCanAutoRunReports = this.reportService.userCanAutoRunReports;\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n\r\n openAutomatedTestingSetup() {\r\n // confirm they want to archive the report\r\n this.automatedTestingSetupDialogRef = this.automatedTestingSetupDialog.open(AutomatedTestingSetupComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n this.automatedTestingSetupDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(result);\r\n }\r\n\r\n if (result == true) {\r\n\r\n\r\n\r\n // this.reportService.getReportBatches();\r\n\r\n\r\n\r\n // this.dialogRef.close(true);\r\n }\r\n });\r\n }\r\n\r\n\r\n addMyReportsEntryClick() {\r\n // add report folder\r\n\r\n this.addReportFolderDialogRef = this.addReportFolderDialog.open(AddReportFolderComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.addReportFolderDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('addReportFolderDialogRef.afterClosed()');\r\n console.log(result);\r\n\r\n }\r\n\r\n if (result == true) {\r\n // we need to refresh report folders\r\n\r\n // this.reportService.getMyReportFolders();\r\n this.getMyReportFolders();\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n getMyReportFolders(): void {\r\n this.reportService.getMyReportFolders().subscribe(reportFolders => {\r\n // this.ReportFolders = reportFolders;\r\n this.reportService.ReportFolders = reportFolders;\r\n // this.reportService.reportFoldersChanged(true);\r\n\r\n // this.refreshedReportFolders.emit(true);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // // console.log('MyReportsComponent => SelectFolders length: ' + this.reportService.ReportFolders.length);\r\n // }\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n // console.log('ReportFooterComponent.ts => closeClick()');\r\n // this.allReportsDialogRef.close();\r\n }\r\n\r\n v9MyReportsClick() {\r\n if (this.isMyReportPage == false) {\r\n // POST: navigates to My Reports page\r\n this.myReportsDialogRef = this.dialog.open(MyReportsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '100vw',\r\n maxWidth: '100vw',\r\n minHeight: '100vh',\r\n maxHeight: '100vh'\r\n });\r\n this.myReportsDialogRef.componentInstance.showAsDialog = true;\r\n } else {\r\n this.dialogRef.close();\r\n }\r\n\r\n }\r\n\r\n openReportFoldersWindow() {\r\n // console.log('ReportFooterComponent.ts => openAllReportsWindow()');\r\n\r\n this.ReportFoldersDialogRef = this.dialog.open(ReportFoldersComponent, {\r\n panelClass: 'tyl-mat-dialog', disableClose: true\r\n // disableClose = true\r\n });\r\n\r\n this.ReportFoldersDialogRef.afterClosed().subscribe(result => {\r\n\r\n // this.reportService.reportFoldersChanged(true);\r\n\r\n this.refreshedReportFolders.emit(result);\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log('ReportFoldersDialogRef.afterClosed()');\r\n console.log(result);\r\n }\r\n\r\n });\r\n\r\n\r\n // this.reportFolders\r\n\r\n }\r\n\r\n // openReportArchivesWindow() {\r\n\r\n // }\r\n\r\n openArchiveProcess() {\r\n // confirm they want to archive the report\r\n this.archiveProcessDialogRef = this.archiveProcessDialog.open(ArchiveProcessComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n minWidth: '85vw',\r\n maxWidth: '100vw',\r\n minHeight: '85vh',\r\n maxHeight: '100vh'\r\n });\r\n\r\n this.archiveProcessDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (this.reportService.inDebugMode) {\r\n console.log(result);\r\n }\r\n\r\n if (result == true) {\r\n\r\n\r\n\r\n // this.reportService.getReportBatches();\r\n\r\n\r\n\r\n // this.dialogRef.close(true);\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n // expandAll(expand) {\r\n\r\n // // //loop to get folder names and set to value of expand\r\n // for (let i = 0; i < this.ReportFolders.length; i++) {\r\n // this.expandedRows[this.ReportFolders[i].Name] = expand;\r\n\r\n // }\r\n\r\n\r\n reportModeIsAllReports(): boolean {\r\n return this.reportService.isAllReports;\r\n }\r\n\r\n reportModeIsMyReports(): boolean {\r\n return this.reportService.isMyReports;\r\n }\r\n\r\n showMyReportsComponent() {\r\n this.reportService.isMyReports = true;\r\n this.reportService.isAllReports = false;\r\n // this.isMyReports.emit(true);\r\n // this.isAllReports.emit(false);\r\n }\r\n\r\n showAllReportsComponent() {\r\n this.reportService.isMyReports = false;\r\n this.reportService.isAllReports = true;\r\n // this.isAllReports.emit(true);\r\n // this.isMyReports.emit(false);\r\n }\r\n\r\n showReportFoldersDialog() {\r\n\r\n }\r\n\r\n\r\n expandAll(expand: boolean) {\r\n if (this.expandAllFolders != null) {\r\n this.expandAllFolders.emit(expand);\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n openQueueList() {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n }\r\n\r\n showV9MyReports() {\r\n this.dialogRef.close();\r\n this.router.navigateByUrl('/classroom360/reportingFramework/myReport');\r\n }\r\n\r\n\r\n\r\n // console.log('MyReportComponent.ts => expandAllClick( ' + expand + ')');\r\n // console.log(this.ReportFolders);\r\n\r\n\r\n\r\n // }\r\n\r\n\r\n\r\n} // end export class ReportFooterComponent\r\n","export class ReportModule {\r\n ID: number;\r\n Description: string;\r\n IsSelected: boolean;\r\n}\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n \r\n \r\n {{reportModule.Description}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n Report\r\n Name\r\n \r\n {{Report.Name}}\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n Auto-Run \r\n \r\n \r\n {{Report.AutoRun}} \r\n \r\n\r\n \r\n\r\n \r\n \r\n My Reports Folder\r\n \r\n \r\n {{Report.ReportFolder}} \r\n \r\n \r\n\r\n \r\n Actions\r\n \r\n \r\n\r\n \r\n\r\n
\r\n \"Actions\"\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\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, OnInit, OnDestroy } from '@angular/core';\r\nimport { ReportingService } from '../reporting.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { LoginSettings } from '../../login/LoginSetting.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Report } from '../models/report.model';\r\nimport { ReportFolder } from '../models/report-folder.model';\r\nimport { ReportModule } from '../models/report-module.model';\r\nimport { ReportParametersComponent } from '../parameters/report-parameters.component';\r\nimport { ReportSettingsFoldersComponent } from '../report-settings/report-settings.folders.component';\r\nimport { ReportOptionsComponent } from '../definitions/report-options.component';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportSettingsAutoRunComponent } from '../report-settings/report-settings-autorun.component';\r\nimport { ReportAutoRunMessageComponent } from '../report-settings/report-autorun-message.component';\r\n\r\nexport const enum OneSisModule {\r\n All = 0\r\n // Classroom360 = 2,\r\n // Student360 = 4,\r\n // Counselor360 = 3\r\n}\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'allReports',\r\n templateUrl: './all-reports.component.html',\r\n styleUrls: ['./all-reports.component.css']\r\n\r\n // entryComponents: [\r\n // ]\r\n})\r\n\r\nexport class AllReportsComponent implements OnInit, OnDestroy {\r\n\r\n loginSettings: LoginSettings;\r\n utilizeDistributebyEmail: boolean;\r\n expandedRows: boolean[] = [];\r\n ReportFolders: ReportFolder[] = [];\r\n myReportFolders: ReportFolder[] = [];\r\n folderIds: number[] = [];\r\n reportIds: number[] = [];\r\n Reports: Report[];\r\n ReportModules: ReportModule[] = [];\r\n selectedReportModule: number;\r\n angularMatData = new MatTableDataSource;\r\n // columnsToDisplay: string[] = ['ReportName', 'Type', 'AutoRun', 'MyReports', 'Actions'];\r\n columnsToDisplay: string[] = ['ReportName', 'AutoRun', 'MyReports', 'Actions'];\r\n useReportDefinitions: boolean;\r\n SelectedReport: Report;\r\n reportParametersDialogRef: MatDialogRef;\r\n reportSettingsDialogRef: MatDialogRef;\r\n reportSettingsAutoRunDialogRef: MatDialogRef;\r\n reportOptionsDialogRef: MatDialogRef;\r\n reportAutoRunMessageDialogRef: MatDialogRef;\r\n // reportsMode: number; // enum: MyReports = 1, AllReports = 2\r\n reportSearch: string;\r\n showSearchMessage: boolean;\r\n allowAutoRunReport: boolean;\r\n\r\n selectedSchoolId: number;\r\n\r\n private _moduleId: number;\r\n filterValue: string;\r\n showReportToPDF = false;\r\n\r\n // get oneSisModules(): ReportModule[] {\r\n // return this.reportService.oneSisModules;\r\n // }\r\n\r\n // set oneSisModules(value: ReportModule[]) {\r\n // this.reportService.oneSisModules = value;\r\n // }\r\n\r\n constructor(\r\n private reportService: ReportingService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private reportSettingsDialog: MatDialog,\r\n private reportSettingsAutoRunDialog: MatDialog,\r\n private reportOptionsDialog: MatDialog,\r\n private reportAutoRunMessageDialog: MatDialog,\r\n private yearService: YearService,\r\n\r\n ) {\r\n\r\n this.loginSettings = loginService.LoginSettings;\r\n this.utilizeDistributebyEmail = this.loginSettings.UtilizeDistributebyEmail;\r\n this.allowAutoRunReport = this.reportService.allowAutoRunReport;\r\n this.selectedSchoolId = this.yearService.defaultYear.SchoolID;\r\n this.useReportDefinitions = reportService.useReportDefinitions;\r\n // Load data into a DataSource object\r\n // MatTableDataSource extends DataSource to allow sorting, pagination and basic filtering\r\n // TylerMatTableDataSource extends MatTableDataSource and allows complex filtering and detail rows\r\n this.angularMatData = new MatTableDataSource(this.Reports);\r\n\r\n\r\n } // end constructor\r\n\r\n ngOnInit() {\r\n // this.populateReportModules();\r\n\r\n this.getReportModulesByRole(true);\r\n // const allReportsFolder = new ReportFolder();\r\n\r\n // allReportsFolder.Id = 0;\r\n // allReportsFolder.IsDetailRowExpanded = true;\r\n // allReportsFolder.Name = 'All Reports';\r\n // allReportsFolder.Reports = [];\r\n // this.ReportFolders.push(allReportsFolder);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('this.selectedSchoolId:' + this.selectedSchoolId);\r\n // }\r\n\r\n this.getAllReports(OneSisModule.All, this.selectedSchoolId);\r\n\r\n // getting My reports now due to folder and auto run settings being\r\n // accessable from the all reports page\r\n // this.getMyReportFolders();\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n // filter material table\r\n applyFilter(filterValue: string) {\r\n\r\n this.angularMatData.filter = filterValue.trim().toLowerCase();\r\n\r\n // this.loadReportData()\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('applyFilter()');\r\n // console.log(this.angularMatData);\r\n // }\r\n }\r\n\r\n loadReportData(): void {\r\n // load data into Angular Material table\r\n this.angularMatData.data = this.Reports;\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('loadReportData()');\r\n // }\r\n }\r\n\r\n getReportModulesByRole(isInit: boolean) {\r\n // const selectedSchoolDomain = this.yearService.defaultYear.SchoolID;\r\n this.reportService.getReportModulesByRole(this.selectedSchoolId).subscribe(reportModules => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reportModules);\r\n // }\r\n\r\n // clear the array\r\n this.ReportModules.length = 0;\r\n\r\n if (reportModules.length > 1) {\r\n // then need to add ALL\r\n const allReportsReportModule = new ReportModule();\r\n allReportsReportModule.ID = 0;\r\n allReportsReportModule.Description = 'All';\r\n allReportsReportModule.IsSelected = true;\r\n reportModules.unshift(allReportsReportModule); // push it to the fromt of the array\r\n }\r\n\r\n // for (let i; i < reportModules.length; i++) {\r\n // this.ReportModules.push(reportModules[i]);\r\n // }\r\n\r\n if (reportModules.length > 0) {\r\n reportModules[0].IsSelected = true;\r\n this.selectedReportModule = reportModules[0].ID;\r\n }\r\n // this.selectedReportModule = OneSisModule.All;\r\n\r\n this.ReportModules = reportModules;\r\n // this.reportService.oneSisModules = reportModules;\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reportModules);\r\n // console.log(this.ReportModules);\r\n\r\n // }\r\n\r\n // this.ReportModules = this.oneSisModules;\r\n\r\n if (isInit) {\r\n this.getMyReportFolders();\r\n }\r\n\r\n\r\n });\r\n }\r\n\r\n\r\n // private populateReportModules() {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('In populateReportModules()');\r\n // }\r\n\r\n // // const enum reportModule {\r\n // // All = 0,\r\n // // Classroom360 = 1,\r\n // // Student360 = 2\r\n // // }\r\n\r\n // this.showReportToPDF = false; // ????\r\n\r\n\r\n // // const allReportsReportModule = new ReportModule();\r\n // // allReportsReportModule.ID = OneSisModule.All;\r\n // // allReportsReportModule.Description = 'All';\r\n // // allReportsReportModule.IsSelected = true;\r\n // // this.ReportModules.push(allReportsReportModule);\r\n\r\n // // const classroom360ReportModule = new ReportModule();\r\n // // classroom360ReportModule.ID = OneSisModule.Classroom360;\r\n // // classroom360ReportModule.Description = 'Classroom';\r\n // // classroom360ReportModule.IsSelected = false;\r\n // // this.ReportModules.push(classroom360ReportModule);\r\n\r\n // // const student360ReportModule = new ReportModule();\r\n // // student360ReportModule.ID = OneSisModule.Student360;\r\n // // student360ReportModule.Description = 'Student';\r\n // // student360ReportModule.IsSelected = false;\r\n // // this.ReportModules.push(student360ReportModule);\r\n\r\n // // const counselor360ReportModule = new ReportModule();\r\n // // counselor360ReportModule.ID = OneSisModule.Counselor360;\r\n // // counselor360ReportModule.Description = 'Counselor';\r\n // // counselor360ReportModule.IsSelected = false;\r\n // // this.ReportModules.push(counselor360ReportModule);\r\n\r\n // // this.ReportModules = this.reportService.oneSisModules;\r\n\r\n // // this.selectedReportModule = OneSisModule.All; // defaults to ALL\r\n // }\r\n\r\n\r\n reportSettingsClick(report: Report) {\r\n this.reportService.SelectedReport = report;\r\n this.reportService.ReportFolders = this.myReportFolders;\r\n\r\n this.reportSettingsDialogRef = this.reportSettingsDialog.open(ReportSettingsFoldersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportSettingsDialogRef.afterClosed().subscribe(result => {\r\n\r\n if (result > '') {\r\n\r\n // refresh folder list for next use of report folder settings\r\n this.getMyReportFolders();\r\n\r\n // refresh folder list on all reports page\r\n this.getAllReports(OneSisModule.All, this.selectedSchoolId);\r\n // this.ReportFolders = this.reportService.ReportFolders;\r\n }\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent =>reportSettingsDialogRef.afterClosed()');\r\n // }\r\n });\r\n }\r\n\r\n autorunSettingsClick(report: Report) {\r\n this.reportService.SelectedReport = report;\r\n this.reportService.ReportFolders = this.ReportFolders;\r\n this.reportService.isForSchedule = true;\r\n\r\n // check that allowAutoRunReport (system) and AllowAutoRun(report and that report is in a folder\r\n // if not, show message\r\n if (this.allowAutoRunReport == false || report.AllowAutoRun == false || report.ReportFolder == '') {\r\n this.reportAutoRunMessageDialogRef = this.reportAutoRunMessageDialog.open(ReportAutoRunMessageComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n return;\r\n }\r\n\r\n\r\n // call report params load and pop up and show autorun setting within\r\n\r\n // we will need to determine if this is a new or existing autorun when populating parameters\r\n\r\n let isExistingAutorun = false;\r\n if (report.AutoRunSchedule_ID > 0) {\r\n // pull saved parameters\r\n isExistingAutorun = true;\r\n }\r\n\r\n this.reportService.getReportParameters(-1, report, isExistingAutorun).subscribe(selectedReport => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(selectedReport);\r\n // }\r\n\r\n this.reportService.SelectedReport = selectedReport;\r\n this.openReportParametersWindow();\r\n\r\n });\r\n }\r\n\r\n reportOptionsClick(report: Report) {\r\n this.reportService.SelectedReport = report;\r\n this.reportService.isFromMenu = true;\r\n // this.reportService.ReportFolders = this.myReportFolders;\r\n\r\n this.reportOptionsDialogRef = this.reportOptionsDialog.open(ReportOptionsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n this.reportOptionsDialogRef.afterClosed().subscribe(result => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent =>reportOptionsDialogRef.afterClosed()');\r\n // }\r\n\r\n // if (result > '') {\r\n // this.getMyReportFolders();\r\n // }\r\n\r\n });\r\n\r\n }\r\n\r\n getMyReportFolders(): void {\r\n this.reportService.getMyReportFolders().subscribe(reportFolders => {\r\n this.reportService.ReportFolders = reportFolders;\r\n this.myReportFolders = reportFolders;\r\n\r\n // this.expandAllRows(-1, true);\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent => reportService.ReportFolders: ' + this.reportService.ReportFolders.length);\r\n // console.log('AllReportsComponent => getMyReportFolders() - Report Folder(s) below');\r\n // console.log(this.reportService.ReportFolders);\r\n // }\r\n });\r\n }\r\n\r\n\r\n getAllReports(moduleId: number, schoolId: number): void {\r\n schoolId = this.selectedSchoolId;\r\n this.reportService.getAllReports(moduleId, schoolId).subscribe(reports => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(reports);\r\n // console.log(this.ReportFolders);\r\n // }\r\n\r\n\r\n // this.ReportFolders[0].Reports = reports;\r\n this.Reports = reports;\r\n this.reportService.ReportFolders = this.ReportFolders;\r\n\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent => SelectFolders length: ' + this.reportService.ReportFolders.length);\r\n // console.log('AllReportsComponent => folderIds: ' + this.folderIds);\r\n // console.log('AllReportsComponent => reportIds: ' + this.reportIds);\r\n // console.log(this.ReportFolders);\r\n\r\n\r\n\r\n\r\n // }\r\n\r\n this.loadReportData();\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent => angularMatData');\r\n // console.log(this.angularMatData);\r\n\r\n // }\r\n });\r\n }\r\n\r\n selectFolder(folderID) {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent => selectFolder(' + folderID + ')');\r\n // }\r\n\r\n }\r\n\r\n reportClicked(report) {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportsComponent => reportClicked(' + report.Name + ', IsSysGen=' + report.IsSysGen + ')');\r\n // }\r\n\r\n this.reportService.isFromMenu = false;\r\n\r\n this.reportService.getReportParameters(-1, report).subscribe(selectedReport => {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log(selectedReport);\r\n // }\r\n\r\n this.reportService.SelectedReport = selectedReport;\r\n this.openReportParametersWindow();\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n openReportParametersWindow() {\r\n this.reportParametersDialogRef = this.dialog.open(ReportParametersComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n\r\n // this.reportParametersDialogRef.beforeClose().subscribe(result => {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('shared/HeaderComponent =>reportsDialogRef.beforeClose()');\r\n // }\r\n // });\r\n\r\n // this.reportParametersDialogRef.afterClosed().subscribe(result => {\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('shared/HeaderComponent =>reportsDialogRef.afterClosed()');\r\n // }\r\n // });\r\n\r\n\r\n }\r\n\r\n\r\n\r\n\r\n isEven(folderId) {\r\n return (folderId % 2) === 0;\r\n }\r\n\r\n\r\n closeClick() {\r\n\r\n // this.reportParametersDialogRef.close();\r\n // this.reportService.close();\r\n }\r\n\r\n\r\n\r\n getReports(moduleId: number) {\r\n\r\n // console.log(moduleId);\r\n this.getAllReports(moduleId, this.selectedSchoolId);\r\n\r\n\r\n }\r\n\r\n filterReports(report) {\r\n if (this.reportSearch == '' || this.reportSearch == '%') {\r\n return true;\r\n }\r\n else {\r\n if (this.reportSearch.charAt(0) == '\"' && this.reportSearch.charAt(this.reportSearch.length - 1) == '\"') {\r\n return this.reportSearch.toLowerCase().substring(1, this.reportSearch.length - 1) == report.Name.toLowerCase();\r\n }\r\n else {\r\n const searchTerm = this.reportSearch + '%';\r\n return new RegExp('^' + searchTerm.toLowerCase().split('%').join('.*') + '$').test(report.Name.toLowerCase());\r\n }\r\n }\r\n\r\n }\r\n\r\n setSearchMessageVisible(showSearchMessage: boolean) {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('setSearchMessageVisible');\r\n // console.log(showSearchMessage);\r\n // }\r\n this.showSearchMessage = !this.showSearchMessage;\r\n }\r\n\r\n\r\n\r\n\r\n searchReport() {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log();\r\n // }\r\n\r\n this.showSearchMessage = !this.showSearchMessage;\r\n\r\n\r\n }\r\n\r\n\r\n clearSearchReport() {\r\n // this.reportFilter.reportSearch = '';\r\n // this.searchReport();\r\n // this.IsReportSearch = false;\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportComponent.ts => clearSearchReport()');\r\n // }\r\n }\r\n\r\n expandAll(expand) {\r\n\r\n // if (this.reportService.inDebugMode) {\r\n // console.log('AllReportComponent.ts => expandAllClick( ' + expand + ')');\r\n // console.log('ReportFolders: ' + this.ReportFolders);\r\n // console.log('expandedRows: ' + this.expandedRows);\r\n // }\r\n\r\n\r\n\r\n }\r\n\r\n} // end export class MyReports\r\n\r\n\r\n\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { SharedComponentsModule } from '../../shared-components/shared-components.module';\r\nimport { ReportingComponent } from './reporting.component';\r\n\r\nimport { ReportHeaderComponent } from './header/report-header.component';\r\nimport { MyReportsComponent } from './my-reports/my-reports.component';\r\n\r\nimport { ReportFooterComponent } from './footer/report-footer.component';\r\nimport { ReportParametersComponent } from './parameters/report-parameters.component';\r\nimport { AllReportsComponent } from './all-reports/all-reports.component';\r\nimport { ReportsFilter } from './all-reports/all-reports.reportsFilter';\r\nimport { ReportSettingsFoldersComponent } from './report-settings/report-settings.folders.component';\r\nimport { ReportSnapshotsComponent } from './report-snapshots/report-snapshots.component';\r\nimport { ReportFoldersComponent } from './report-folders/report-folders.component';\r\nimport { ReportOptionsComponent } from './definitions/report-options.component';\r\nimport { AddReportFolderComponent } from './report-folders/add-folder/add-folder.component';\r\nimport { DeleteReportFolderComponent } from './report-folders/delete-folder/delete-folder.component';\r\nimport { ConfirmDeleteSnapshotComponent } from './report-snapshots/confirm-delete-snapshot.component';\r\nimport { ReportInFolderFilter } from './filters/report-in-folder-filter';\r\nimport { SnapshotInFolderFilter } from './filters/snapshot-in-folder-filter';\r\n\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ReportSettingsAutoRunComponent } from './report-settings/report-settings-autorun.component';\r\nimport { ReportLegendComponent } from './report-legend/report-legend.component';\r\nimport { ReportAutoRunMessageComponent } from './report-settings/report-autorun-message.component';\r\nimport { ConfirmReportToEmailComponent } from './parameters/confirm-report-to-email.component';\r\nimport { ReportOptionsHowToComponent } from './definitions/report-options-how-to.component';\r\n\r\nimport { ArchiveReportModalComponent } from './archive-report/archive-report-modal.component';\r\nimport { PortfolioService } from '../../student360/portfolio/portfolio.service';\r\nimport { ConfirmArchiveReportComponent } from './archive-report/confirm-archive-report.component';\r\nimport { ReportQueueComponent } from './report-queue/report-queue.component';\r\nimport { DatePipe } from '@angular/common';\r\nimport { ManualEntryRostersComponent } from './V9/manual-entry-rosters/manual-entry-rosters.component';\r\nimport { GradebookStatisticalAnalysisReportComponent } from './V9/gradebook-statistical-analysis-report/gradebook-statistical-analysis-report.component';\r\nimport { ClassListAllComponent } from './V9/class-list-all/class-list-all.component';\r\nimport { ClassListAllAttendanceNotMarkedComponent } from './V9/class-list-all-attendance-not-marked/class-list-all-attendance-not-marked.component';\r\nimport { TeacherSummaryPreviewComponent } from './V9/teacher-summary-preview/teacher-summary-preview.component';\r\nimport { GradebookProgessReportComponent } from './V9/gradebook-progress-report/gradebook-progress-report.component';\r\nimport { AttendanceHistoryByClassComponent } from './V9/attendance-history-by-class/attendance-history-by-class.component';\r\nimport { GradebookAssignmentsByStandardComponent } from './V9/gradebook-assignments-by-standard/gradebook-assignments-by-standard.component';\r\nimport { ReportTemplateClassListComponent } from './V9/report-template-class-list/report-template-class-list.component';\r\nimport { StudentGradebookIDsComponent } from './V9/student-gradebook-ids/student-gradebook-ids.component';\r\nimport { GenericReportComponent } from './V9/generic-report/generic-report.component';\r\nimport { GradebookByClassGridComponent } from './V9/gradebook-by-class-grid/gradebook-by-class-grid.component';\r\nimport { GenericListSelectorComponent } from '../../shared-components/generic-list-selector/generic-list-selector.component';\r\nimport { ArchiveProcessComponent } from './archive-report/archive-process.component';\r\nimport { ConfirmCancelArchiveReportComponent } from './archive-report/confirm-cancel-archive.component';\r\nimport { LetterPrintOptionComponent } from './V9/letter-print-option/letter-print-option.component';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { V9ReportParametersComponent } from './V9/parameters/v9-report-parameters.component';\r\n\r\nimport { AutomatedTestingSetupComponent } from './automated-testing-setup/automated-testing-setup.component';\r\nimport { AutomatedTestingModalComponent } from './automated-testing-setup/automated-testing-modal.component';\r\nimport { ConfirmModalComponent } from './automated-testing-setup/confirm.component';\r\nimport { QuickViewModalComponent } from './automated-testing-setup/quickview.component';\r\n\r\nimport { V9LetterReportParametersComponent } from './V9/parameters/v9-letter-report-parameters/v9-letter-report-parameters.component';\r\nimport { V9ReportParameterTabsFilterPipe } from './V9/parameters/v9-report-parameter-tabs-filter.pipe';\r\nimport { ElementListModalComponent } from './automated-testing-setup/element-list.component';\r\nimport { ElementAddEditModalComponent } from './automated-testing-setup/element-add-edit-modal.component';\r\nimport { AreaListModalComponent } from './automated-testing-setup/area-list.component';\r\nimport { AreaAddEditModalComponent } from './automated-testing-setup/area-add-edit-modal.component';\r\nimport { MedicalDataListingGridComponent } from './V9/medical-data-listing-grid/medical-data-listing-grid.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ReportingComponent,\r\n ReportHeaderComponent,\r\n MyReportsComponent,\r\n ReportParametersComponent,\r\n AllReportsComponent,\r\n ReportFooterComponent,\r\n ReportOptionsComponent,\r\n ReportsFilter,\r\n ReportSettingsFoldersComponent,\r\n ReportSnapshotsComponent,\r\n ConfirmDeleteSnapshotComponent,\r\n ReportInFolderFilter,\r\n SnapshotInFolderFilter,\r\n ReportFoldersComponent,\r\n AddReportFolderComponent,\r\n DeleteReportFolderComponent,\r\n ReportSettingsAutoRunComponent,\r\n ReportLegendComponent,\r\n ReportAutoRunMessageComponent,\r\n ConfirmReportToEmailComponent,\r\n ReportOptionsHowToComponent,\r\n ArchiveReportModalComponent,\r\n ConfirmArchiveReportComponent,\r\n ManualEntryRostersComponent,\r\n ClassListAllComponent,\r\n ClassListAllAttendanceNotMarkedComponent,\r\n ReportQueueComponent,\r\n GradebookStatisticalAnalysisReportComponent,\r\n TeacherSummaryPreviewComponent,\r\n GradebookProgessReportComponent,\r\n GradebookAssignmentsByStandardComponent,\r\n ReportTemplateClassListComponent,\r\n AttendanceHistoryByClassComponent,\r\n StudentGradebookIDsComponent,\r\n GenericReportComponent,\r\n GradebookByClassGridComponent,\r\n GenericListSelectorComponent,\r\n ArchiveProcessComponent,\r\n ConfirmCancelArchiveReportComponent,\r\n LetterPrintOptionComponent,\r\n MedicalDataListingGridComponent,\r\n V9ReportParametersComponent,\r\n AutomatedTestingSetupComponent,\r\n AutomatedTestingModalComponent,\r\n ConfirmModalComponent,\r\n V9LetterReportParametersComponent,\r\n V9ReportParameterTabsFilterPipe,\r\n ElementListModalComponent,\r\n ElementAddEditModalComponent,\r\n AreaListModalComponent,\r\n AreaAddEditModalComponent,\r\n QuickViewModalComponent,\r\n ],\r\n imports: [\r\n SharedComponentsModule,\r\n MatDialogModule,\r\n FormsModule,\r\n ScrollingModule,\r\n ],\r\n providers: [PortfolioService, DatePipe, V9ReportParameterTabsFilterPipe]\r\n}) // end @NgModule\r\n\r\nexport class ReportingModule {\r\n} // end export class ReportingModule\r\n","export class ReportDefinition {\r\n HasReportDefinition: number;\r\n HasReportParameterDefined: number;\r\n HasParameterValueDefined: number;\r\n IsSysGen: number;\r\n School_Domain: number;\r\n AllowUserSaveReport: boolean;\r\n AllowUserHideReport: boolean;\r\n IsSystem: boolean;\r\n AllowUserSaveParameter: boolean;\r\n AllowUserHideParameter: boolean;\r\n HiddenByDefault: boolean;\r\n AlwaysHidden: boolean;\r\n ReportParameter_ID: number;\r\n ParameterName_ID: number;\r\n ParameterName: String;\r\n ParameterValue_ID: number;\r\n Login_ID: number;\r\n // Value: String;\r\n Value: any;\r\n IsHidden: boolean;\r\n CanSave: boolean;\r\n RC_ID: number;\r\n Control: String;\r\n DataType: String;\r\n ShowAll: boolean;\r\n ShowOptionsVertically: boolean;\r\n IsDistrictDefinedParameter: boolean;\r\n IsUserDefinedParameter: boolean;\r\n SaveChecked: boolean;\r\n HideChecked: boolean;\r\n BackgroundColorForSavedDefinition: string;\r\n ParameterLabel: string;\r\n }\r\n","import { ReportDefinition } from './report-definition.model';\r\nimport { NameValueBool } from './name-value-bool.model';\r\nimport { DataSource } from './data-source.model';\r\n\r\n\r\nexport class ReportParameter {\r\n Id: number;\r\n RC_ID: number;\r\n Name: string;\r\n ColumnName: string;\r\n ParameterName: string;\r\n ShowAll: boolean;\r\n IsParent: boolean;\r\n Value: any; // parameter values can bes strings, dates, bools, etc.\r\n DataType: string;\r\n ControlType: string;\r\n DataSource: DataSource[];\r\n MultiValue: string[];\r\n MaxLength: number;\r\n ParameterReportDefinition: ReportDefinition;\r\n ParameterOptions: NameValueBool[];\r\n //////////////////////////////\r\n RowNumberInTable: number;\r\n ColumnNumberInTableCell: number;\r\n Colspan: number;\r\n HighlightParameter: boolean; // when coming from other areas such as a selected student or course\r\n SetBackgroundColorForSavedDefinition: boolean;\r\n\r\n // ONE-2400 - groups/sorting\r\n\r\n ParameterHasBeenAddedToRow: boolean;\r\n\r\n OrdinalPosition: number; // we will set this to the Id (zero based consecutive) for now since the sp (spOneSIS_GetProcedureParameters) for pulling parameters returns them by OrdinalPosition\r\n SortOrder: number; // this is the order we will display parameters\r\n IsInGroup: boolean;\r\n Group_ID: number;\r\n IncludeGroupLabel: boolean;\r\n GroupLabel: string; // only set on first parameter in group\r\n // GroupName: string; // unnecessary for now\r\n IncludeLineAtStartOfGroup: boolean;\r\n IncludeLineAtEndOfGroup: boolean;\r\n GroupSortOrder: number; // this is at GROUP level and NOT parameter in group level\r\n // GroupParameterSortOrder: number;\r\n IsStartOfVisibleGroup: boolean;\r\n IsEndOfVisibleGroup: boolean;\r\n EntireGroupIsHidden: boolean;\r\n\r\n // ONE-2400 - formatting options\r\n\r\n HasFormatting: boolean;\r\n NoWrap: boolean;\r\n ShowOptionsVertically: boolean;\r\n SpanEntireRow: boolean;\r\n SpanNumberOfColumns: number;\r\n IsVisible: boolean;\r\n IsSystemHiddenParameter: boolean;\r\n\r\n parameterId: number;\r\n\r\n // IsFromGradeBook: boolean;\r\n // IsEmailDistributionParameter: boolean;\r\n // IsHiddenParameterPassedFromApp: boolean;\r\n\r\n\r\n\r\n getMultiValue_Labels(): string[] {\r\n const labels: string[] = [];\r\n for (let d = 0; d < this.DataSource.length; d++) {\r\n labels.push(this.DataSource[d].TextField);\r\n }\r\n return labels;\r\n }\r\n\r\n getMultiValue_StringValues(): string[] {\r\n const values: string[] = [];\r\n for (let d = 0; d < this.DataSource.length; d++) {\r\n values.push(this.DataSource[d].ValueField);\r\n }\r\n return values;\r\n }\r\n\r\n getMultiValue_BoolValues(): boolean[] {\r\n const values: boolean[] = [];\r\n for (let d = 0; d < this.DataSource.length; d++) {\r\n values.push(this.DataSource[d].IsSelected);\r\n }\r\n return values;\r\n }\r\n\r\n\r\n getMultiValue_Ids(): string[] {\r\n const ids: string[] = [];\r\n for (let d = 0; d < this.DataSource.length; d++) {\r\n ids.push('MultiVal_' + this.Id + '_' + d.toString());\r\n }\r\n return ids;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n","export class ReportingConfigurationSettings {\r\n\r\n HideReportToArchiveButton: boolean;\r\n}","import { formatDate } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport createNumberMask from 'text-mask-addons/dist/createNumberMask';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { Category } from '../../classroom360/gradebook/shared/models/category.model';\r\nimport { Assignment } from '../../classroom360/gradebook/v9/models/assignment.model';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { SchoolYearSettings } from '../../shared-components/year/school-year-settings.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { CourseTerm } from '../../student360/student-schedule/course-term.model';\r\nimport { LoginService } from '../login/login.service';\r\nimport { LoginSettings } from '../login/LoginSetting.model';\r\nimport { DataSource } from '../reporting/models/data-source.model';\r\nimport { StudentAttachment } from '../student-attachment/student-attachment.model';\r\nimport { System } from './../../shared-components/System';\r\nimport { AutomatedTest, AutomatedTestArea, AutomatedTestParameter, AutomatedTestStep, AutomatedTestStepQuickView, Element, SubTestDependentTest } from './models/ast-element.model';\r\nimport { AutoRunSnapshot } from './models/auto-run-report-snapshots.model';\r\nimport { ReportBatch } from './models/report-batch.model';\r\nimport { ReportDefinition } from './models/report-definition.model';\r\nimport { ReportFolder } from './models/report-folder.model';\r\nimport { ReportLogos } from './models/report-logos.model';\r\nimport { ReportModule } from './models/report-module.model';\r\nimport { ReportParameter } from './models/report-parameter.model';\r\nimport { ReportV9 } from './models/report-v9.model';\r\nimport { Report } from './models/report.model';\r\nimport { ReportingConfigurationSettings } from './models/reporting-configuration-settings.model';\r\nimport { ReportsQueue } from './models/reports-queue.model';\r\nimport { TeacherPreview } from './models/teacher-preview.model';\r\nimport { V9ReportParameter } from './models/v9-report-parameter.model';\r\nimport { GradeBookAssignmentTypeBySiteSectionIds, GradebookStatisticalAnalysisReport } from './V9/gradebook-statistical-analysis-report/gradebook-statistical-analysis-report.model';\r\n\r\nexport enum v9ReportParameterName {\r\n strReportDate = 2 ** 1,\r\n strReportSiteHeader = 2 ** 2,\r\n strReportTitle = 2 ** 3,\r\n bytReportType = 2 ** 4,\r\n strSiteYearCode = 2 ** 5,\r\n lngSiteYearId = 2 ** 6,\r\n strStaffUserName_LNFN = 2 ** 7,\r\n strOutputFile_NOFILE = 2 ** 8,\r\n strReportTime = 2 ** 9,\r\n strReportSiteAddress = 2 ** 10,\r\n intSiteYearId = 2 ** 11,\r\n}\r\n\r\nexport enum V9ReportName {\r\n AssignmentListing = 'GradeBookAssignmentListByClass',\r\n AttendanceHistoryByClass = 'CreateAttendanceHistoryByClass',\r\n CommunicationLog = 'CreateContactLog',\r\n DisciplineReferralList = 'ReferralListOneSIS',\r\n GradebookAssignmentsByStandard = 'CreateGradebookAssignmentsByObjectiveReport',\r\n GradeBookByClassListGridReport = 'GradeBookByClassListGridReport',\r\n ReportCardGradeCalculationReport = 'GradeBookFormulaCalculationReport',\r\n StudentGradebookIDs = 'GradeBookSISInternalIndex'\r\n}\r\n\r\n\r\n@Injectable()\r\nexport class ReportingService {\r\n\r\n // Properties\r\n inDebugMode = false;\r\n SelectedReport: Report;\r\n ReportFolders: ReportFolder[] = [];\r\n login_ID: number;\r\n userEmail: string;\r\n selectedReportFolderId: number;\r\n showNoFoldersMessage = false;\r\n snapshotDeleted = false;\r\n reportFolderIdToDelete: number;\r\n reportFolderNameToDelete: string;\r\n isFolderEdit = false;\r\n ReportFolderToEdit: ReportFolder;\r\n selectedFolderIds: number[] = [];\r\n isMyReports = false;\r\n isAllReports = false;\r\n isForSchedule = false;\r\n isFromMenu = false;\r\n allowAutoRunReport: boolean;\r\n maxReportSnapshotAllowed: number;\r\n currentUserSubscription: Subscription;\r\n private _currentUser: User;\r\n public get currentUser(): User {\r\n if (this._currentUser == undefined || this._currentUser == null) {\r\n this._currentUser = this.userService.currentUser;\r\n }\r\n return this._currentUser;\r\n }\r\n public LoginSettings: LoginSettings;\r\n deleteReportSnapshot_ID: number;\r\n showReportToPDF = false;\r\n autoRunSnapshot: AutoRunSnapshot;\r\n userCanAutoRunReports: boolean;\r\n userHasPrivilegeAddEditDistrictReportDefinitions: boolean;\r\n useReportDefinitions = false;\r\n backgroundColorForDistrictDefinedDefinition: string; // set in constuctor if report options are turned on\r\n backgroundColorForUserDefinedDefinition: string; // set in constuctor if report options are turned on\r\n selectedCourse: ClassroomSummary;\r\n selectedStudent: Student;\r\n isReportsMenu: boolean;\r\n documentTypes: Lookup[] = []; // student digital content\r\n defaultAcademicYear: string; // = this.yearService.defaultYear.AYIdentifier;\r\n useParameterGroups: boolean; // so I can turn off this functionality until I get all of the parts into place -- ONE-2400\r\n useParameterFormatting: boolean; // so I can turn off this functionality until I get all of the parts into place -- ONE-2400\r\n utilizeDistributebyEmail: boolean; // ONE-4387\r\n isDistributebyEmail: boolean; // ONE-4387\r\n distributeByEmailOption_StudentSelected: boolean;\r\n distributeByEmailOption_PrimaryContactSelected: boolean;\r\n distributeByEmailOption_AllElectronicContactsSelected: boolean;\r\n removeArchivedFiles: boolean;\r\n // report archive permissions\r\n viewArchiveProcessesFromAllUsers: boolean;\r\n allowCancelArchiveProcesses: boolean;\r\n allowDeleteArchivedReports: boolean;\r\n dateFormat = /-?\\d+/;\r\n v9parameterName = v9ReportParameterName; // parameter name enum\r\n v9ReportName = V9ReportName;\r\n skipRunningReportWhileInDebugMode = false;\r\n isTylerAdmin = false;\r\n isDebugModeInProduction = false;\r\n reportingConfigurationSettings: ReportingConfigurationSettings;\r\n\r\n reportBatch: ReportBatch;\r\n\r\n\r\n static saveFile(dataBase64, fileType, fileName) {\r\n // PRE: a base64, a file type, and a file name to set up a download\r\n // POST: downloads the file from the browser\r\n const byteCharacters = atob(dataBase64);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: fileType });\r\n const url = window.URL.createObjectURL(blob);\r\n const a = document.createElement('a');\r\n a.style.display = 'none';\r\n document.body.appendChild(a);\r\n a.href = url;\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService\r\n\r\n ) {\r\n this.inDebugMode = false; // isDevMode(); // to disable in production for now\r\n\r\n this.skipRunningReportWhileInDebugMode = false; // this.inDebugMode;\r\n this.useParameterGroups = true;\r\n this.useParameterFormatting = true;\r\n\r\n this.currentUserSubscription = this.userService.observableCurrentUserStream$\r\n .subscribe(user => {\r\n this._currentUser = user;\r\n this.login_ID = this._currentUser.Id;\r\n this.userEmail = this._currentUser.Email;\r\n });\r\n\r\n this._currentUser = this.userService.currentUser;\r\n if (this._currentUser) {\r\n this.login_ID = this._currentUser.Id;\r\n this.userEmail = this._currentUser.Email;\r\n }\r\n\r\n if (userService.currentUser && userService.currentUser.UserName.toLowerCase() == 'tyleradmin') {\r\n this.isTylerAdmin = true;\r\n } else {\r\n this.isTylerAdmin = false;\r\n }\r\n\r\n this.allowAutoRunReport = this.loginService.LoginSettings.AllowAutoRunReport;\r\n this.utilizeDistributebyEmail = this.loginService.LoginSettings.UtilizeDistributebyEmail;\r\n this.maxReportSnapshotAllowed = this.loginService.LoginSettings.MaxReportSnapshotAllowed;\r\n if (this.loginService.LoginSettings.ReportDefinitionsOption > 0) {\r\n this.useReportDefinitions = true;\r\n }\r\n\r\n this.backgroundColorForDistrictDefinedDefinition = 'lavenderblush';\r\n this.backgroundColorForUserDefinedDefinition = 'aliceblue';\r\n\r\n if (!this.allowAutoRunReport) {\r\n this.isMyReports = false;\r\n this.isAllReports = true;\r\n } else {\r\n this.isMyReports = true;\r\n }\r\n }\r\n\r\n // Methods\r\n getReportingConfigurationSettings(schoolId: number, AYIdentifier: string): Observable {\r\n\r\n return this.http.get(System.apiURL.Student + 'getReportingConfigurationSettings?schoolId=' + schoolId + '&AYIdentifier=' + AYIdentifier).pipe(\r\n map(results => {\r\n results = System.convert(results, new ReportingConfigurationSettings());\r\n return results;\r\n })\r\n );\r\n\r\n }\r\n\r\n getDateWithoutTime(): Date {\r\n return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate(), 0, 0, 0);\r\n }\r\n\r\n distributeByEmail(): Observable {\r\n return this.http.post(System.apiURL.Student + 'DistributeByEmail?loginId=' + this.login_ID, this.SelectedReport);\r\n }\r\n\r\n\r\n getEmailRegexp() {\r\n return System.mailRegexp;\r\n }\r\n\r\n saveFolderReports(loginId: number, reportId: number, folderIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'SaveFolderReports?loginId=' + loginId + '&reportid=' + reportId, folderIds);\r\n }\r\n\r\n deleteReportFolder(folderId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'DeleteReportFolder?folderId=' + folderId);\r\n }\r\n\r\n saveReportAutoRunSettings() { // SelectedReportSettings: any\r\n return this.http.post(System.apiURL.Student + 'saveReportAutoRunSettings?loginId=' + this.login_ID, this.SelectedReport);\r\n }\r\n\r\n getReportSnapshot(snapshotId: number) {\r\n return this.http.get(System.apiURL.Student + 'getReportSnapshot?snapshotId=' + snapshotId);\r\n }\r\n\r\n deleteReportSnapshot(snapshotId: number) {\r\n return this.http.post(System.apiURL.Student + 'DeleteReportSnapshot?snapId=' + snapshotId, null);\r\n }\r\n\r\n getReportDefinitions(getUnsavedDefinitions: boolean): Observable {\r\n let Login_ID_Parameter = this.login_ID;\r\n if (getUnsavedDefinitions && this.SelectedReport.IsDistrictReportDefinitions) {\r\n Login_ID_Parameter = -1;\r\n }\r\n return this.http.get(System.apiURL.Student + 'GetReportDefinitions?loginId=' + Login_ID_Parameter + '&reportid=' + this.SelectedReport.Id + '&getUnsavedDefinitions=' + getUnsavedDefinitions);\r\n }\r\n\r\n saveReportOptions(parameterDefinitions: ReportDefinition[], saveHideSaveOptions: boolean): Observable {\r\n let Login_ID_Parameter = this.login_ID;\r\n\r\n if (saveHideSaveOptions && this.SelectedReport.IsDistrictReportDefinitions) {\r\n Login_ID_Parameter = -1;\r\n }\r\n\r\n return this.http.post(System.apiURL.Student + 'SaveReportDefinitions?loginId=' + Login_ID_Parameter + '&reportid=' + this.SelectedReport.Id + '&isDistrict=' + this.SelectedReport.IsDistrictReportDefinitions + '&saveHideSaveOptions=' + saveHideSaveOptions, parameterDefinitions);\r\n }\r\n\r\n\r\n saveReportFolder(folder: ReportFolder): Observable {\r\n return this.http.get(System.apiURL.Student + 'saveReportFolder?userId=' + this.login_ID + '&id=' + folder.Id + '&name=' + folder.Name + '&description=' + folder.Description);\r\n\r\n }\r\n\r\n getMyReportFolders(): Observable {\r\n\r\n return this.http.get(System.apiURL.Student + 'GetmyReports?loginId=' + this.login_ID).pipe(\r\n map(results => {\r\n results = System.convert(results, new Array());\r\n // if no report folders, if has permissions to add folders, show message to add a folder\r\n const folders: ReportFolder[] = results;\r\n if (folders == null || folders.length == 0) {\r\n this.showNoFoldersMessage = true;\r\n } else {\r\n this.showNoFoldersMessage = false;\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getReportModulesByRole(schoolId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetReportModulesByRole?loginId=' + this.login_ID + '&schoolId=' + schoolId).pipe(\r\n map(topLevelmodules => {\r\n topLevelmodules = System.convert(topLevelmodules, new Array());\r\n return topLevelmodules;\r\n })\r\n );\r\n }\r\n\r\n\r\n getAllReports(moduleId: number, schoolId: number): Observable {\r\n\r\n return this.http.get(System.apiURL.Student + 'GetReports?moduleId=' + moduleId + '&loginId=' + this.login_ID + '&schoolId=' + schoolId).pipe(\r\n map(reports => {\r\n reports = System.convert(reports, new Array());\r\n return reports;\r\n })\r\n );\r\n }\r\n\r\n\r\n getReportByIsSysGen(isSysGen: number): Observable {\r\n\r\n return this.http.get(System.apiURL.Student + 'GetReportByIsSysGen?loginId=' + this.login_ID + '&isSysGen=' + isSysGen).pipe(\r\n map(reports => {\r\n reports = System.convert(reports, new Report());\r\n return reports;\r\n })\r\n );\r\n }\r\n\r\n getReportParameters(paramId: number, report: Report, forSchedule?: boolean): Observable {\r\n\r\n if (forSchedule == undefined || forSchedule == null) {\r\n forSchedule = false;\r\n }\r\n\r\n report.UseParameterGroups = this.useParameterGroups;\r\n report.UseParameterFormatting = this.useParameterFormatting;\r\n\r\n let selectedSubjectId = 0;\r\n let selectedSectionId = 0;\r\n let selectedStudentId = 0;\r\n let selectedSubjectCode = '';\r\n let selectedSectionName = '';\r\n let selectedStudentNumber = '';\r\n\r\n if (this.selectedCourse != null && this.selectedCourse != undefined) {\r\n selectedSubjectId = this.selectedCourse.SubjectId;\r\n selectedSubjectCode = this.selectedCourse.SubjectCode;\r\n selectedSectionId = this.selectedCourse.SSEC_ID;\r\n if (this.selectedCourse.ReportingSectionName != null && this.selectedCourse.ReportingSectionName != undefined) {\r\n // I'm doing this check to be safe, this new field ReportingSectionName (really just the SubjectSection.SSecName) was added by Mat for ONE-5843\r\n selectedSectionName = this.selectedCourse.ReportingSectionName;\r\n } else {\r\n selectedSectionName = this.selectedCourse.Section;\r\n }\r\n }\r\n\r\n if (this.selectedStudent != null && this.selectedStudent != undefined) {\r\n selectedStudentId = this.selectedStudent.Id;\r\n selectedStudentNumber = this.selectedStudent.StudentNumber;\r\n }\r\n\r\n const urlArgs =\r\n '?userId=' + this.login_ID +\r\n '¶mId=' + paramId +\r\n '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier +\r\n '&schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&forSchedule=' + forSchedule +\r\n '&selectedSubjectId=' + selectedSubjectId +\r\n '&selectedSubjectCode=' + selectedSubjectCode +\r\n '&selectedSectionId=' + selectedSectionId +\r\n '&selectedSectionName=' + selectedSectionName +\r\n '&selectedStudentId=' + selectedStudentId +\r\n '&selectedStudentNumber=' + selectedStudentNumber;\r\n\r\n\r\n return this.http.post(System.apiURL.Student + 'GetReportParameters' + urlArgs, report).pipe(\r\n map(results => {\r\n results = System.convert(results, new Report());\r\n for (let i = 0; i < results.Parameters.length; i++) {\r\n results.Parameters[i] = System.convert(results.Parameters[i], new ReportParameter());\r\n results.Parameters[i].ParameterReportDefinition = System.convert(results.Parameters[i].ParameterReportDefinition, new ReportDefinition());\r\n }\r\n\r\n return results;\r\n })\r\n );\r\n\r\n\r\n }\r\n\r\n runReport(): Observable {\r\n const results = this.http.post(System.apiURL.Student + 'RunReport', this.SelectedReport);\r\n return results;\r\n }\r\n\r\n\r\n runManualReport(isSysGen: number, queryString: string): Observable {\r\n const results = this.http.get(System.apiURL.Student + 'RunManualReport?isSysGen=' + isSysGen + '&queryString=' + queryString);\r\n return results;\r\n }\r\n\r\n\r\n runReportToEmail(): Observable {\r\n const results = this.http.post(System.apiURL.Student + 'SendReportPdfToEmails', this.SelectedReport);\r\n return results;\r\n }\r\n\r\n handleCheckboxAll(checkedDataSource: DataSource, dataSourceArray: DataSource[]) {\r\n // check/uncheck when All is changed\r\n if (checkedDataSource.TextField == 'All' && checkedDataSource.ValueField == '-1') { // -1 is All\r\n // set the others to match All\r\n for (let i = 0; i < dataSourceArray.length; i++) {\r\n dataSourceArray[i].IsSelected = checkedDataSource.IsSelected;\r\n }\r\n }\r\n\r\n let firstCheckBoxIsAll = false;\r\n let allItemsAreChecked = true;\r\n\r\n if (dataSourceArray[0].TextField == 'All' && dataSourceArray[0].ValueField == '-1') {\r\n firstCheckBoxIsAll = true;\r\n }\r\n\r\n // uncheck the All checkbox if ANY checkbox is unselected\r\n if (firstCheckBoxIsAll) {\r\n for (let i = 1; i < dataSourceArray.length; i++) { // starting at index 1 instead of 0 to skip looking at All\r\n\r\n if (!dataSourceArray[i].IsSelected) {\r\n dataSourceArray[0].IsSelected = false; // uncheck All\r\n allItemsAreChecked = false;\r\n break;\r\n }\r\n }\r\n // check the All checkbox if ALL checkboxes are selected\r\n if (allItemsAreChecked) {\r\n dataSourceArray[0].IsSelected = true;\r\n }\r\n }\r\n }\r\n\r\n populateDataSourceFromLookup(dataSourceArray: DataSource[], lookups: Lookup[]) {\r\n dataSourceArray.length = 0;\r\n let dataSource: DataSource; // = new DataSource();\r\n dataSource = new DataSource();\r\n dataSource.TextField = 'All';\r\n dataSource.ValueField = '-1';\r\n dataSource.Id = '-1';\r\n dataSourceArray.push(dataSource);\r\n // let myLookup: Lookup;\r\n for (let i = 0; i < lookups.length; i++) {\r\n if (lookups[i].CodeDescription == '' || lookups[i].CodeDescription == undefined) {\r\n continue;\r\n }\r\n dataSource = new DataSource();\r\n dataSource.TextField = lookups[i].CodeDescription; // lookups[i].CodeDescription;\r\n dataSource.ValueField = lookups[i].Code; // lookups[i].Code;\r\n // dataSource.IsSelected = true;\r\n dataSource.Id = lookups[i].Id;\r\n dataSourceArray.push(dataSource);\r\n }\r\n }\r\n\r\n hasStringValueNotEmpty(stringToCheck: string): boolean {\r\n if (stringToCheck != undefined && stringToCheck != '' && stringToCheck != null) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n minIsGreaterThanMax(min: string, max: string) {\r\n if (parseInt(min, 10) > parseInt(max, 10)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n getMonthDayYear(date) {\r\n return new Date(parseInt((this.dateFormat.exec(date.toString()))[0], 10));\r\n }\r\n\r\n getSelectedItemsAsDelimitedString(datasourceArray: DataSource[], getTextField: boolean, delimiter: string, hasShowAll: boolean): string {\r\n let delimitedString = '';\r\n if (delimiter == null || delimiter == undefined) {\r\n delimiter = ','; // defaults to comma\r\n }\r\n let startIndex = 0;\r\n if (hasShowAll) {\r\n startIndex = 1;\r\n }\r\n for (let x = startIndex; x < datasourceArray.length; x++) {\r\n if (!datasourceArray[x].IsSelected) {\r\n continue;\r\n }\r\n if (getTextField) {\r\n delimitedString = delimitedString + datasourceArray[x].TextField + delimiter;\r\n } else {\r\n delimitedString = delimitedString + datasourceArray[x].ValueField + delimiter;\r\n }\r\n }\r\n if (delimitedString.endsWith(',')) {\r\n delimitedString = delimitedString.replace(/,\\s*$/, ''); // remove trailing comma\r\n }\r\n return delimitedString;\r\n }\r\n\r\n setSelectedItemsFromUserPrefereneces(codesFromPreferences: string, dataSourceArray: DataSource[]) {\r\n const attCodesFromPreferences = codesFromPreferences.split('');\r\n let selectedCount = 0;\r\n for (let k = 0; k < attCodesFromPreferences.length; k++) {\r\n for (let i = 1; i < dataSourceArray.length; i++) {\r\n\r\n if (attCodesFromPreferences[k] == dataSourceArray[i].TextField) {\r\n dataSourceArray[i].IsSelected = true;\r\n selectedCount++;\r\n } else {\r\n if (dataSourceArray[i].IsSelected == undefined) {\r\n dataSourceArray[i].IsSelected = false;\r\n }\r\n }\r\n }\r\n }\r\n if (selectedCount > 0 && selectedCount == dataSourceArray.length - 1) { // -1 to handle All checkbox\r\n dataSourceArray[0].IsSelected = true; // NEED TO SELECT THE ALL CHECKBOX\r\n }\r\n\r\n }\r\n\r\n getMyClasses(termId: number, viewId: number, isTeacher: boolean, includeAllCourses: boolean, dateItem: Date): Observable {\r\n // TODO: Fix Duplicate Service Call\r\n const currentDate = new Date();\r\n const dateString = (currentDate.getUTCMonth() + 1) + '/' + currentDate.getDate() + '/' + currentDate.getUTCFullYear();\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&termId=' + termId +\r\n '&viewId=' + viewId +\r\n '&isTeacher=' + isTeacher +\r\n '&dateItem=' + dateItem +\r\n '&includeAllCourses=' + includeAllCourses +\r\n '¤tDate=' + dateString;\r\n return this.http.get\r\n (System.apiURL.Classroom + 'GetMyClasses' + queryString);\r\n }\r\n\r\n\r\n getV9Reports(pageName: string): Observable {\r\n const urlArgs = '?pageName=' + pageName + '&yearId=' + this.yearService.defaultYear.Id + '&schoolId=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.get(System.apiURL.Student + 'GetV9Reports' + urlArgs).pipe(\r\n map(results => {\r\n results = System.convert(results, new Array());\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n getTermsforCourses(termDefinitionId: number, siteYearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetTermsforCourses?termDefinitionId=' + termDefinitionId + '&siteYearId=' + siteYearId);\r\n }\r\n\r\n getGradebookTermsBySiteSectionId(siteSectionId: number, tgsId: number, showTermOnly: boolean, yearId: number, schoolId: number, userId: number): Observable {\r\n // TODO: Fix Duplicate Service Call\r\n const apiCallString = System.apiURL.Classroom + 'GetGradebookTermsBySiteSectionId?siteSectionId=' + siteSectionId\r\n + '&tgsId=' + tgsId\r\n + '&showTermOnly=' + showTermOnly\r\n + '&yearId=' + yearId\r\n + '&schoolId=' + schoolId\r\n + '&userId=' + userId;\r\n return this.http.get(apiCallString);\r\n }\r\n\r\n\r\n getDistrictDepartmentsReadForGradebookAssignmentsLookup(siteYearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetDistrictDepartmentsReadForGradebookAssignmentsLookup?siteYearId=' + siteYearId);\r\n }\r\n\r\n\r\n getDynamicPagesReadForStudentLookup(userIsTeacher: boolean): Observable {\r\n // TODO: Fix Duplicate Service Call\r\n return this.http.get(System.apiURL.Classroom + 'GetDynamicPagesReadForStudentLookup?userIsTeacher=' + userIsTeacher);\r\n }\r\n\r\n getResidencyCodesLookup(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetResidencyCodeLookup');\r\n }\r\n\r\n getEnrollmentCategoriesLookup(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetEnrollmentCategoryLookup');\r\n }\r\n\r\n getAllGradeLevelsLookup(): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetAllGradeLevels?yearId=' + this.yearService.defaultYear.Id + '&qrFamily=false&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier);\r\n }\r\n\r\n getAttendanceCodesLookup(isTeacher: boolean, schoolId: number): Observable {\r\n // TODO: Fix Duplicate Service Call\r\n return this.http.get(System.apiURL.Counselor + 'GetAttendanceCodeLookup?IsTeacher=' + isTeacher + '&schoolId= ' + schoolId);\r\n }\r\n\r\n getGradebookAssignmentTypesLookup(siteSectionIds: string): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetGradeBookAssignmentTypeBySiteSectionIdsLookup', siteSectionIds);\r\n }\r\n\r\n getGradebookAssignmentType(courseId: number, courseIds: string): Observable {\r\n // TODO: Fix Duplicate Service Call\r\n const currentUser = this.currentUser != undefined ? this.currentUser : this.userService.currentUser;\r\n const apiCallString = System.apiURL.Classroom + 'GetGradebookAssignmentType?isTeacherUser=' + currentUser.UserIsTeacher // userId=' + this.currentUser.Id\r\n + '&courseId=' + courseId\r\n + '&courseList=' + courseIds;\r\n return this.http.get(apiCallString).pipe(\r\n map(assignmentTypes => {\r\n assignmentTypes = System.convert(assignmentTypes, new Array());\r\n for (let x = 0; x < assignmentTypes.length; x++) {\r\n assignmentTypes[x].isSelected = false;\r\n }\r\n return assignmentTypes;\r\n })\r\n );\r\n\r\n }\r\n\r\n getGradebookAssignments(siteSectionId: number, assignmentTypeId: number, gradebookUnitId: number, termId: number, gradebookAssignmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteSectionId=' + siteSectionId +\r\n '&termId=' + termId +\r\n '&assignmentTypeId=' + assignmentTypeId +\r\n '&gradebookUnitId=' + gradebookUnitId +\r\n '&gradebookAssignmentId=' + gradebookAssignmentId;\r\n return this.http.get(System.apiURL.Classroom + 'GetGradebookV9Assignments' + queryString);\r\n }\r\n\r\n addCoreParametersV9(parameters: any[], reportTitle: string, reportType: number, parameterNameFlags: number) {\r\n const flags = v9ReportParameterName;\r\n\r\n /* eslint-disable no-bitwise */\r\n if (flags.strReportSiteHeader & parameterNameFlags) {\r\n parameters.push({\r\n ParamName: 'strReportSiteHeader',\r\n ParamStringValue: this.yearService.defaultYear.SchoolName\r\n });\r\n }\r\n\r\n if (flags.strReportSiteAddress & parameterNameFlags) {\r\n parameters.push({ ParamName: 'strReportSiteAddress', ParamStringValue: '' });\r\n }\r\n\r\n if (flags.strReportDate & parameterNameFlags) {\r\n parameters.push({\r\n ParamName: 'strReportDate',\r\n ParamStringValue: ((new Date().getMonth() + 1) + '/' + new Date().getDate() + '/' + new Date().getFullYear())\r\n });\r\n }\r\n\r\n if (flags.strReportTitle & parameterNameFlags) {\r\n parameters.push({ ParamName: 'strReportTitle', ParamStringValue: reportTitle });\r\n }\r\n\r\n if (flags.strSiteYearCode & parameterNameFlags) {\r\n parameters.push({\r\n ParamName: 'strSiteYearCode',\r\n ParamStringValue: this.yearService.defaultYear.SchoolCode + '' + this.yearService.defaultYear.AYIdentifier\r\n });\r\n }\r\n\r\n if (flags.lngSiteYearId & parameterNameFlags) {\r\n parameters.push({ ParamName: 'lngSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n }\r\n\r\n if (flags.bytReportType & parameterNameFlags) {\r\n parameters.push({ ParamName: 'bytReportType', ParamStringValue: reportType });\r\n }\r\n\r\n if (flags.strStaffUserName_LNFN & parameterNameFlags) {\r\n parameters.push({\r\n ParamName: 'strStaffUserName',\r\n ParamStringValue: this.currentUser.LastName + ', ' + this.currentUser.FirstName\r\n });\r\n }\r\n\r\n if (flags.strOutputFile_NOFILE & parameterNameFlags) {\r\n parameters.push({ ParamName: 'strOutputFile', ParamStringValue: 'NOFILE' });\r\n }\r\n\r\n if (flags.strReportTime & parameterNameFlags) {\r\n parameters.push({ ParamName: 'strReportTime', ParamStringValue: new Date().toTimeString().split(' ')[0] });\r\n }\r\n\r\n if (flags.intSiteYearId & parameterNameFlags) {\r\n parameters.push({ ParamName: 'intSiteYearId', ParamStringValue: this.yearService.defaultYear.SiteYearId });\r\n }\r\n }\r\n\r\n getTodaysDate() {\r\n const today = new Date();\r\n return (today.getMonth() + 1) + '/' + today.getDate() + '/' + new Date().getFullYear();\r\n }\r\n\r\n getSelectedIdsAsCommaDelimitedString(dataSourceArray: DataSource[]): string {\r\n let selectedIds = '';\r\n for (let x = 0; x < dataSourceArray.length; x++) {\r\n if (dataSourceArray[x].TextField == 'All' && dataSourceArray[x].ValueField == '-1') {\r\n continue; // skip All checkbox\r\n }\r\n if (dataSourceArray[x].IsSelected) {\r\n selectedIds = selectedIds + ',' + dataSourceArray[x].Id;\r\n }\r\n if (selectedIds.startsWith(',')) {\r\n selectedIds = selectedIds.slice(1);\r\n }\r\n }\r\n return selectedIds;\r\n }\r\n\r\n openStudentAttachmentReport(documentId: number, reportName: string, documentBase64: string, documentMimeType: string, documentModuleName: string, reportParameters: any[], reportType: number) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: documentId,\r\n DocumentName: reportName,\r\n DocumentBase64: documentBase64,\r\n DocumentMimeType: documentMimeType,\r\n DocumentModuleName: documentModuleName,\r\n ReportParameters: reportParameters,\r\n ReportType: reportType\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n window.open(System.baseUrl + 'studentattachment', '_blank');\r\n }\r\n\r\n getTeacherPreviewGridData(siteYearId: number, termDefinitionId: number, currentAttendanceDate: Date, startPeriod: number, endPeriod: number): Observable {\r\n const currentAttDate = formatDate(currentAttendanceDate, 'MM/dd/yyyy', 'en-US');\r\n return this.http.get(System.apiURL.Student + 'GetTeacherPreviewGridData?siteYearId=' + siteYearId + '&termDefinitionId=' + termDefinitionId + '¤tAttendanceDate=' + currentAttDate + '&startPeriod=' + startPeriod + '&endPeriod=' + endPeriod);\r\n }\r\n\r\n runV9Report(reportName: string, reportType: number, workflowReport: boolean, reportParameters): Observable {\r\n return this.http.post(System.apiURL.Student + 'RunV9Report?reportName=' + reportName + '&reportType=' + reportType + '&workflowReport=' + workflowReport, reportParameters);\r\n }\r\n\r\n getNumberMask() {\r\n return {\r\n guide: true,\r\n mask: createNumberMask({\r\n prefix: '',\r\n includeThousandsSeparator: false,\r\n integerLimit: 2,\r\n allowDecimal: false,\r\n decimalLimit: false\r\n })\r\n };\r\n }\r\n\r\n getReportsQueue(showAllUsers: boolean = false, schoolId = this.yearService.defaultYear.SchoolID, yearId = this.yearService.defaultYear.Id,): Observable {\r\n const urlArgs = '?schoolId=' + schoolId + '&yearId=' + yearId + '&showAllUsers=' + showAllUsers;\r\n return this.http.get(System.apiURL.Student + 'GetReportsQueue' + urlArgs).pipe(\r\n map(results => {\r\n results = System.convert(results, new Array());\r\n return results;\r\n })\r\n );\r\n }\r\n\r\n deleteReportsQueue(ReportQueueIds: number[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'DeleteReportsQueue', ReportQueueIds);\r\n }\r\n\r\n public GetGradeBookSectionListReadbyTeacherId(siteYearId: number, allClasses: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&allClasses=' + allClasses;\r\n return this.http.get(System.apiURL.Student + 'GetGradeBookSectionListReadbyTeacherId' + queryString);\r\n }\r\n\r\n public GetGradeBookAssignmentTypeBySiteSectionIdsLookup(siteSectionIds: any[]): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetGradeBookAssignmentTypeBySiteSectionIdsLookup', siteSectionIds);\r\n }\r\n\r\n public getGradeCyclesReadBySiteYearIdLookup(siteYearId: number): Observable {\r\n\r\n return this.http.get(System.apiURL.Student + 'GetGradeCyclesReadBySiteYearIdLookup' + '?siteYearId=' + siteYearId);\r\n }\r\n\r\n public getTermGradeCycleHeaderRead(siteYearId: number, termGradeCycleId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&termGradeCycleId=' + termGradeCycleId;\r\n return this.http.get(System.apiURL.Student + 'getTermGradeCycleHeaderRead' + queryString);\r\n }\r\n\r\n public getReportCardAttendanceCodesReadBySiteYearIdLookup(siteYearId: number, tardy: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId +\r\n '&tardy=' + tardy;\r\n return this.http.get(System.apiURL.Student + 'getReportCardAttendanceCodesReadBySiteYearIdLookup' + queryString);\r\n }\r\n\r\n public updateGradingOptionsTemplate(userId: number, schoolYearSettings: SchoolYearSettings): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + userId +\r\n '&schoolYearSettingsDTO=' + schoolYearSettings;\r\n return this.http.get(System.apiURL.Student + 'updateGradingOptionsTemplate' + queryString);\r\n }\r\n\r\n public getReportLogos(userId: number, schoolId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + userId +\r\n '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'getReportLogos' + queryString);\r\n }\r\n\r\n // REPORT BATCH\r\n\r\n public addReportBatch(batch: ReportBatch): Observable {\r\n this.SelectedReport.ReportBatch = batch;\r\n if (this.inDebugMode) {\r\n console.log(this.SelectedReport.ReportBatch);\r\n }\r\n\r\n // this.reportBatch = batch;\r\n\r\n // map(b => {\r\n // this.SelectedReport.ReportBatch = System.convert(batch, new ReportBatch());\r\n\r\n // });\r\n\r\n let queryString = '';\r\n queryString += '?AyIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n queryString += '&schoolDomain=' + this.yearService.defaultYear.SchoolID;\r\n return this.http.post(System.apiURL.Student + 'AddReportBatch' + queryString, this.SelectedReport);\r\n }\r\n\r\n public getReportBatches(): Observable {\r\n let userId: number;\r\n if (this.viewArchiveProcessesFromAllUsers) {\r\n userId = -1;\r\n } else {\r\n userId = this.currentUser.Id;\r\n }\r\n let queryString = '';\r\n queryString += '?userId=' + userId;\r\n queryString += '&schoolID=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.get(System.apiURL.Student + 'GetReportBatches' + queryString);\r\n }\r\n\r\n public startReportBatch(report: Report): Observable {\r\n\r\n report.ReportBatch = this.reportBatch;\r\n\r\n let queryString = '';\r\n queryString += '?userId=' + this.currentUser.Id;\r\n queryString += '&schoolID=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.post(System.apiURL.Student + 'StartReportBatch' + queryString, report);\r\n }\r\n\r\n public cancellingReportBatch(batch: ReportBatch): Observable {\r\n let queryString = '';\r\n queryString += '?batchId=' + batch.Id;\r\n queryString += '&userId=' + this.currentUser.Id;\r\n queryString += '&schoolID=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.post(System.apiURL.Student + 'CancellingReportBatch' + queryString, batch);\r\n }\r\n\r\n\r\n public startCancelReportBatchCleanupProcess(batch: ReportBatch): Observable {\r\n let queryString = '';\r\n queryString += '?batchId=' + batch.Id;\r\n return this.http.get(System.apiURL.Student + 'StartCancelReportBatchCleanupProcess' + queryString);\r\n }\r\n\r\n public deleteReportBatch(batch: ReportBatch): Observable {\r\n let queryString = '';\r\n queryString += '?batchId=' + batch.Id;\r\n queryString += '&userId=' + this.currentUser.Id;\r\n queryString += '&schoolID=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&ayIdentifier=' + this.yearService.defaultYear.AYIdentifier;\r\n return this.http.post(System.apiURL.Student + 'DeleteReportBatch' + queryString, batch);\r\n }\r\n\r\n public getCurrentUserName_FNLN(): string {\r\n return this.currentUser.FirstName + ' ' + this.currentUser.LastName;\r\n }\r\n\r\n public getCurrentUserName_LNFN(): string {\r\n return this.currentUser.LastName + ' - ' + this.currentUser.FirstName;\r\n }\r\n\r\n public getCurrentUserId(): number {\r\n return this.currentUser.Id;\r\n }\r\n\r\n public getReportQueueQuery(report: Report): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetReportQueueQuery', this.SelectedReport);\r\n }\r\n\r\n getV9ReportParameters(reportId: number, siteSectionId: number, studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&reportId=' + reportId;\r\n queryString += '&siteSectionId=' + siteSectionId;\r\n queryString += '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetV9ReportParameters' + queryString);\r\n }\r\n\r\n runV9ReportByParameter(schoolId: number, yearId: number, siteSectionId: number, studentId: number, report: ReportV9): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + schoolId;\r\n queryString += '&yearId=' + yearId;\r\n queryString += '&siteSectionId=' + siteSectionId;\r\n queryString += '&studentId=' + studentId;\r\n\r\n System.removeIdFields(report.ReportParameters);\r\n return this.http.post(System.apiURL.Student + 'RunV9ReportByParameter' + queryString, report);\r\n }\r\n\r\n getV9ReportParameterValidation(report: ReportV9): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n System.removeIdFields(report.ReportParameters);\r\n return this.http.post(System.apiURL.Student + 'GetV9ReportParameterValidationMessage' + queryString, report);\r\n }\r\n\r\n getV9ReportParameterStudentNameFormat(siteSectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&siteSectionId=' + siteSectionId;\r\n return this.http.get(System.apiURL.Student + 'GetV9ReportParameterStudentNameFormat' + queryString);\r\n }\r\n\r\n saveReportCardMessage(report: ReportV9): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveReportCardMessage' + queryString, report);\r\n }\r\n\r\n getV9ReportParameterBtnRefreshData(keyWordValue: string, report: ReportV9): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&siteYearId=' + this.yearService.defaultYear.SiteYearId;\r\n queryString += '&keyWordValue=' + keyWordValue;\r\n System.removeIdFields(report.ReportParameters);\r\n return this.http.post(System.apiURL.Student + 'GetV9ReportParameterBtnRefreshData' + queryString, report);\r\n }\r\n\r\n getAutomatedTests(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTests' + queryString);\r\n }\r\n\r\n getAutomatedTestSteps(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTestSteps' + queryString);\r\n }\r\n\r\n saveAutomatedTest(testId: number, test: AutomatedTest): Observable {\r\n // console.log(test);\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Reporting + 'SaveAutomatedTest' + queryString, test);\r\n }\r\n\r\n saveAutomatedTestSteps(testId: number, testSteps: AutomatedTestStep[]): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Reporting + 'SaveAutomatedTestSteps' + queryString, testSteps);\r\n }\r\n\r\n saveAutomatedTestElement(element: Element): Observable {\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Reporting + 'SaveAutomatedTestElement', element);\r\n }\r\n\r\n saveAutomatedTestArea(area: AutomatedTestArea): Observable {\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.post(System.apiURL.Reporting + 'SaveAutomatedTestArea', area);\r\n }\r\n\r\n updateAutomatedTestElement(elementId: number, element: Element): Observable {\r\n let queryString = '';\r\n queryString += '?elementId=' + elementId;\r\n return this.http.post(System.apiURL.Reporting + 'UpdateAutomatedTestElement' + queryString, element);\r\n }\r\n\r\n updateAutomatedTestArea(areaId: number, area: AutomatedTestArea): Observable {\r\n let queryString = '';\r\n queryString += '?areaId=' + areaId;\r\n return this.http.post(System.apiURL.Reporting + 'UpdateAutomatedTestArea' + queryString, area);\r\n }\r\n\r\n getAutomatedTestAreas(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTestAreas' + queryString);\r\n }\r\n\r\n\r\n getAutomatedTestElements(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTestElements' + queryString);\r\n }\r\n\r\n deleteAutomatedTest(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?testId=' + testId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'DeleteAutomatedTest' + queryString);\r\n }\r\n\r\n deleteAutomatedTestStep(stepId: number): Observable {\r\n let queryString = '';\r\n queryString += '?stepId=' + stepId;\r\n // queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.Reporting + 'DeleteAutomatedTestStep' + queryString);\r\n }\r\n\r\n getV9ReportParameterSelectionByLookupName(reportParameterId: number, siteSectionId: number, reportParameterParentValueId: string, lookupProcedureName: string, studentId: number, controlType: string): Observable {\r\n let queryString = '';\r\n queryString += '?schoolId=' + this.yearService.defaultYear.SchoolID;\r\n queryString += '&yearId=' + this.yearService.defaultYear.Id;\r\n queryString += '&reportParameterId=' + reportParameterId;\r\n queryString += '&siteSectionId=' + siteSectionId;\r\n queryString += '&reportParameterParentValue=' + reportParameterParentValueId;\r\n queryString += '&lookupProcedureName=' + lookupProcedureName;\r\n queryString += '&studentId=' + studentId;\r\n queryString += '&controlType=' + controlType;\r\n return this.http.get(System.apiURL.Student + 'GetV9ReportParameterSelectionByLookupName' + queryString);\r\n }\r\n\r\n\r\n getAutomatedTestParameters(testId: number, paramId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + this.login_ID;\r\n queryString += '&testId=' + testId;\r\n queryString += '¶mId=' + paramId;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTestParameters' + queryString);\r\n }\r\n\r\n saveAutomatedTestParameter(testId: number, parameter: AutomatedTestParameter): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + this.login_ID;\r\n queryString += '&testId=' + testId;\r\n queryString += '¶mId=' + parameter;\r\n return this.http.post(System.apiURL.Reporting + 'SaveAutomatedTestParameter' + queryString, parameter);\r\n }\r\n\r\n deleteAutomatedTestParameter(testId: number, paramId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + this.login_ID;\r\n queryString += '&testId=' + testId;\r\n queryString += '¶mId=' + paramId;\r\n return this.http.get(System.apiURL.Reporting + 'DeleteAutomatedTestParameter' + queryString);\r\n }\r\n\r\n getSubTestDependentTests(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + this.login_ID;\r\n queryString += '&testId=' + testId;\r\n return this.http.get(System.apiURL.Reporting + 'GetSubTestDependentTests' + queryString);\r\n }\r\n\r\n getAutomatedTestQuickView(testId: number): Observable {\r\n let queryString = '';\r\n queryString += '?userId=' + this.login_ID;\r\n queryString += '&testId=' + testId;\r\n return this.http.get(System.apiURL.Reporting + 'GetAutomatedTestQuickView' + queryString);\r\n }\r\n\r\n\r\n} // end class ReportingService\r\n","import { Attachment } from '../../shared-components/models/attachment.model';\r\n\r\nexport class EmailAttachment extends Attachment {\r\n\r\n // Server Properties\r\n IsFileUpload: boolean;\r\n Base64String: string; // Please don't ask why we use 5 different variables for the same exact data...\r\n\r\n // Local Properties\r\n size: number;\r\n}\r\n","import { EmailAttachment } from './email-attachment.model';\r\n\r\nexport class MailDetail {\r\n\r\n // Properties\r\n toSelectedMailId = '';\r\n CCSelectedMailId = '';\r\n CCDisplayMailId = '';\r\n BCCSelectedMailId = '';\r\n BCCDisplayMailId = '';\r\n toMailId = '';\r\n CCMailId = '';\r\n BCCMailId = '';\r\n peopleIds = '';\r\n subject = '';\r\n message = '';\r\n attachments: EmailAttachment[] = [];\r\n personCodeMother: number;\r\n personCodeFather: number;\r\n\r\n // Constructor\r\n constructor() {\r\n for (let i = 0; i < 5; i++) {\r\n this.attachments.push(new EmailAttachment());\r\n }\r\n }\r\n}","import { EmailAttachment } from './email-attachment.model';\r\n\r\nexport class MailParameters {\r\n userId = -1;\r\n EmailFrom = '';\r\n EmailTo = '';\r\n DisplayEmailToOnComment = '';\r\n DisplayEmailCcOnComment = '';\r\n DisplayEmailBccOnComment = '';\r\n EmailToCc = '';\r\n EmailToBcc = '';\r\n Subject = '';\r\n Body = '';\r\n AddEmailToParentContactLog = false;\r\n PeopleIds = '';\r\n ToMemIds: number[] = [];\r\n CCMemIds: number[] = [];\r\n BCCMemIds: number[] = [];\r\n PersonCode: number;\r\n Attachments: EmailAttachment[] = [];\r\n HtmlBody: boolean;\r\n}\r\n","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'option-not-available',\r\n templateUrl: './option-not-available-dialog.component.html',\r\n styleUrls: [\r\n './option-not-available-dialog.component.css'\r\n ]\r\n})\r\nexport class OptionNotAvailableDialogComponent {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef\r\n ) {}\r\n\r\n // Event Functions\r\n ok() {\r\n // PRE: the ok button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}","\r\n

\r\n Option Not Available\r\n

\r\n\r\n\r\n\r\n This option is not available because there is no email
\r\n address on file for you. Please contact the school
\r\n and provide the neccesary information.\r\n
\r\n\r\n\r\n\r\n \r\n \r\n","\r\n
\r\n\r\n \r\n
\r\n
\r\n WARNING\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n This email has no subject.\r\n
\r\n
\r\n This email has no content.\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'send-email-warning',\r\n templateUrl: './send-email-warning-dialog.component.html',\r\n styleUrls: [\r\n './send-email-warning-dialog.component.css'\r\n ]\r\n})\r\nexport class SendEmailWarningDialogComponent implements OnInit {\r\n\r\n // Injected Properties\r\n noSubject = true;\r\n noContent = true;\r\n\r\n // Class Functions\r\n constructor (\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected dialog data with the injected properties\r\n // POST: initializes the data\r\n this.noSubject = this.data.noSubject;\r\n this.noContent = this.data.noContent;\r\n }\r\n\r\n sendAnyway() {\r\n // PRE: the send anyway button is clicked\r\n // POST: closes the dialog box with true\r\n this.dialogBox.close(true);\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: closes the dialog box with false\r\n this.dialogBox.close(false);\r\n }\r\n\r\n // Methods\r\n}","\r\n

\r\n Attachments\r\n

\r\n\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 { EmailAttachment } from '../email-attachment.model';\r\nimport { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\n\r\n// FileName: null,\r\n// Base64String: null,\r\n// IsFileUpload: false,\r\n// FileType: null,\r\n// OriginalFileName: null,\r\n// FileExtension: null\r\n@Component({\r\n selector: 'add-attachments',\r\n templateUrl: './add-attachments-dialog.component.html',\r\n styleUrls: [\r\n './add-attachments-dialog.component.css'\r\n ]\r\n})\r\nexport class AddAttachmentsDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n originalAttachments: EmailAttachment[];\r\n attachments: EmailAttachment[];\r\n totalAttachmentSize = 10485760;\r\n maxAttachmentSize = 10485760;\r\n errors: ErrorList[] = [];\r\n\r\n // Class Functions\r\n constructor (\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected data with a list of attachments\r\n // POST: initializes the data\r\n this.attachments = this.data.attachments;\r\n this.originalAttachments = [];\r\n this.attachments.forEach(attachment => {\r\n this.originalAttachments.push(Object.assign(new EmailAttachment(), attachment));\r\n });\r\n console.log(this.originalAttachments);\r\n this.determineMaxFileSize();\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: sets the original names of the files\r\n this.attachments.forEach(attachment => {\r\n attachment.OriginalFileName = attachment.FileName;\r\n });\r\n }\r\n\r\n setFileSize(attachment: EmailAttachment, size: number) {\r\n // PRE: the file is changed\r\n // POST: sets this attachments size and the size of all of our attachments\r\n\r\n // Setting this particular attachments size\r\n attachment.size = size;\r\n\r\n // Determining the size of all of our attachments\r\n this.determineMaxFileSize();\r\n }\r\n\r\n printAttachments(index: number, attachment: EmailAttachment) {\r\n console.log(index);\r\n console.log(attachment);\r\n console.log(this.attachments);\r\n }\r\n\r\n ok() {\r\n this.errors = [];\r\n for (let attachment of this.attachments.filter(a => a.Base64String)) {\r\n if (attachment.FileExtension.toLowerCase() != 'pdf' &&\r\n attachment.FileExtension.toLowerCase() != 'jpg' &&\r\n attachment.FileExtension.toLowerCase() != 'png' &&\r\n attachment.FileExtension.toLowerCase() != 'txt' &&\r\n attachment.FileExtension.toLowerCase() != 'doc' &&\r\n attachment.FileExtension.toLowerCase() != 'docx' &&\r\n attachment.FileExtension.toLowerCase() != 'xls' &&\r\n attachment.FileExtension.toLowerCase() != 'xlsx') {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'Only .txt, .doc(x), .xls(x), .pdf, .jpg, and .png files can be uploaded.'\r\n });\r\n break;\r\n }\r\n }\r\n\r\n if (this.errors.length == 0)\r\n this.dialogBox.close(true);\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: restores the attachments and closes the dialog box\r\n\t\tfor (let i = 0; i < this.attachments.length; i++) {\r\n\t\t\tif (!this.originalAttachments[i].Base64String) {\r\n\t\t\t\tthis.deleteAttachment(this.attachments[i]);\r\n\t\t\t} else {\r\n\t\t\t\tObject.assign(this.attachments[i], this.originalAttachments[i]);\r\n\t\t\t}\r\n\t\t}\r\n this.dialogBox.close(false);\r\n }\r\n\r\n // Methods\r\n determineMaxFileSize() {\r\n // POST: sets the maximum file zie\r\n let currentAttachmentSize = 0;\r\n for (let i = 0; i < this.attachments.length; i++) {\r\n if (this.attachments[i] && this.attachments[i].size) {\r\n currentAttachmentSize += this.attachments[i].size;\r\n }\r\n }\r\n this.maxAttachmentSize = this.totalAttachmentSize - currentAttachmentSize;\r\n }\r\n\r\n deleteAttachment(attachment: EmailAttachment) {\r\n // PRE: an attachment to delete\r\n // POST: clears the content of that attachment\r\n attachment.FileName = null;\r\n attachment.Base64String = null;\r\n attachment.FileType = null;\r\n attachment.FileExtension = null;\r\n attachment.OriginalFileName = null;\r\n attachment.IsFileUpload = undefined;\r\n }\r\n}\r\n","import { MatDialogRef } from '@angular/material/dialog';\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'recipient-change-warning',\r\n templateUrl: './recipient-change-warning-dialog.component.html',\r\n styleUrls: [\r\n './recipient-change-warning-dialog.component.css'\r\n ]\r\n})\r\nexport class RecipientChangeWarningDialogComponent {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef\r\n ) {}\r\n\r\n // Event Functions\r\n ok() {\r\n // PRE: the okay button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}","\r\n

\r\n Recipient Change\r\n

\r\n\r\n\r\n\r\n In order to prevent contacts from seeing each
\r\n other's email addresses, when more than one
\r\n parent/contact recipient is selected, they can only
\r\n be marked as BCC.\r\n
\r\n\r\n\r\n\r\n \r\n \r\n","export class Recipient {\r\n $id: number;\r\n CourseList?: string[];\r\n Email: string;\r\n FirstName: string;\r\n GradeLevel?: any;\r\n Id: number;\r\n LastName: string;\r\n MiddleName: string;\r\n Name: string;\r\n NickName: string;\r\n Relationship: string;\r\n Section?: string;\r\n SiteYearID: number;\r\n StudentContacts?: any;\r\n StudentNumber?: any;\r\n SubjectCode?: string;\r\n SubjectSections?: any;\r\n TeacherName: string;\r\n Term?: string;\r\n UserType: number;\r\n RelationshiptCourseList?: string[];\r\n}","\r\n

\r\n Select Recipients\r\n

\r\n\r\n\r\n\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
List teachers for
\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n Also list\r\n
\r\n
\r\n \r\n All Advisors\r\n \r\n \r\n All Co-Teachers\r\n \r\n \r\n All Counselors\r\n \r\n \r\n All Principals\r\n \r\n \r\n All Site Administrators\r\n \r\n \r\n All District Administrators\r\n \r\n \r\n All Nurses\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n To\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n CC\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n BCC\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Name\r\n \r\n \r\n {{recipient.Name}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Relationship\r\n \r\n \r\n
\r\n \r\n
\r\n Teacher - {{course}}\r\n
\r\n
\r\n
\r\n {{recipient.Relationship}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{course}}\r\n
\r\n
\r\n {{recipient.Relationship}}\r\n
\r\n
\r\n
\r\n {{recipient.Relationship}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n Additional\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\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 { RecipientChangeWarningDialogComponent } from '../recipient-change-warning-dialog/recipient-change-warning-dialog.component';\r\nimport { SendEmailService } from '../send-email.service';\r\nimport { Recipient } from '../recipient.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MailDetail } from '../mail-detail';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\r\nimport { Component, Inject, OnInit, OnDestroy } from '@angular/core';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\n\r\n/**\r\n * DO\r\n * NOT\r\n * CHANGE\r\n * THE\r\n * REFERENCES\r\n * FOR\r\n * TOSELECTIONS\r\n * CCSELECTIONS\r\n * BCCSELECTIONS\r\n */\r\n@Component({\r\n selector: 'change-recipients',\r\n templateUrl: './change-recipients-dialog.component.html',\r\n styleUrls: [\r\n './change-recipients-dialog.component.css'\r\n ]\r\n})\r\nexport class ChangeRecipientsDialogComponent implements OnInit, OnDestroy {\r\n\r\n // Injected Properties\r\n private _viewOption = 3;\r\n mailDetail: MailDetail;\r\n teacherEmailAddress: string;\r\n userEmailAddress: string;\r\n\r\n // Local Properties\r\n private _allAdvisors = false;\r\n private _allPrincipals = false;\r\n private _allCounselors = false;\r\n private _allSiteAdministrators = false;\r\n private _allDistrictAdministrators = false;\r\n private _allCoTeachers = true;\r\n private _allNurses = false;\r\n errors: ErrorList[] = [];\r\n V10: boolean;\r\n toSelections: number[] = []; // DO NOT CHANGE THIS REFERENCE\r\n originalToSelections: number[] = [];\r\n CCSelections: number[] = []; // DO NOT CHANGE THIS REFERENCE\r\n originalCCSelections: number[] = [];\r\n BCCSelections: number[] = []; // DO NOT CHANGE THIS REFERENCE\r\n originalBCCSelections: number[] = [];\r\n _recipients: Recipient[] = [];\r\n subscriptions: Subscription[] = [];\r\n tableData: TylerMatTableDataSource;\r\n columns = ['to', 'CC', 'BCC', 'name', 'relationship'];\r\n userType: number;\r\n disableCCTo = false;\r\n CCDisabledEmailId: number;\r\n getRecipientSubscription: Subscription;\r\n obtainingRecipients = false;\r\n toSelected = false;\r\n additionalTo: string;\r\n additionalCc: string;\r\n additionalBcc: string;\r\n\r\n // Class Functions\r\n constructor(\r\n private dialogBox: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private loginService: LoginService,\r\n private sendEmailService: SendEmailService,\r\n private userService: UserService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n get allAdvisors(): boolean {\r\n return this._allAdvisors;\r\n }\r\n\r\n set allAdvisors(value: boolean) {\r\n this._allAdvisors = value;\r\n this.getRecipients();\r\n }\r\n\r\n get allPrincipals(): boolean {\r\n return this._allPrincipals;\r\n }\r\n\r\n set allPrincipals(value: boolean) {\r\n this._allPrincipals = value;\r\n this.getRecipients();\r\n }\r\n\r\n get allCounselors(): boolean {\r\n return this._allCounselors;\r\n }\r\n\r\n set allCounselors(value: boolean) {\r\n this._allCounselors = value;\r\n this.getRecipients();\r\n }\r\n\r\n get allSiteAdministrators(): boolean {\r\n return this._allSiteAdministrators;\r\n }\r\n\r\n set allSiteAdministrators(value: boolean) {\r\n this._allSiteAdministrators = value;\r\n this.getRecipients();\r\n }\r\n\r\n get allDistrictAdministrators(): boolean {\r\n return this._allDistrictAdministrators;\r\n }\r\n\r\n set allDistrictAdministrators(value: boolean) {\r\n this._allDistrictAdministrators = value;\r\n this.getRecipients();\r\n }\r\n\r\n get viewOption(): number {\r\n return this._viewOption;\r\n }\r\n\r\n set viewOption(value: number) {\r\n this._viewOption = value;\r\n this.getRecipients(true);\r\n }\r\n\r\n get allCoTeachers(): boolean {\r\n return this._allCoTeachers;\r\n }\r\n\r\n set allCoTeachers(value: boolean) {\r\n this._allCoTeachers = value;\r\n this.getRecipients();\r\n }\r\n\r\n get allNurses(): boolean {\r\n return this._allNurses;\r\n }\r\n\r\n set allNurses(value: boolean) {\r\n this._allNurses = value;\r\n this.getRecipients();\r\n }\r\n\r\n\r\n recipients: Recipient[];\r\n\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // PRE: injected dialog data with the injected properties\r\n // POST: initializes the data\r\n\r\n // Checking injected data members\r\n this._viewOption = this.data.viewOption;\r\n this.mailDetail = this.data.mailDetail;\r\n this.teacherEmailAddress = this.data.teacherEmailAddress;\r\n this.userEmailAddress = this.data.userEmailAddress;\r\n if (this.data.toSelections) {\r\n this.toSelections = this.data.toSelections;\r\n this.originalToSelections = Object.assign([], this.data.toSelections);\r\n }\r\n if (this.data.CCSelections) {\r\n this.CCSelections = this.data.CCSelections;\r\n this.originalCCSelections = Object.assign([], this.data.CCSelections);\r\n }\r\n if (this.data.BCCSelections) {\r\n this.BCCSelections = this.data.BCCSelections;\r\n this.originalBCCSelections = Object.assign([], this.data.BCCSelections);\r\n }\r\n\r\n if (this.data.additionalTo) {\r\n this.additionalTo = this.data.additionalTo;\r\n }\r\n if (this.data.additionalCc) {\r\n this.additionalCc = this.data.additionalCc;\r\n }\r\n if (this.data.additionalBcc) {\r\n this.additionalBcc = this.data.additionalBcc;\r\n }\r\n\r\n // Initializing local data members\r\n this._allAdvisors = this.sendEmailService.allAdvisors;\r\n this._allCounselors = this.sendEmailService.allCounselors;\r\n this._allPrincipals = this.sendEmailService.allPrincipals;\r\n this._allSiteAdministrators = this.sendEmailService.allSiteAdmin;\r\n this._allDistrictAdministrators = this.sendEmailService.allDistrictAdmin;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.userType = this.userService.currentUser.UserType;\r\n this.subscriptions.push(\r\n this.sendEmailService.observableRecipientsStream$.subscribe(recipients => {\r\n this.recipients = recipients;\r\n if (this.V10 == false && this.recipients.length != 0) {\r\n let currentUserRecipientId = 0;\r\n if ((this.recipients.find(x => x.Email == this.userService.currentUser.Email)) && this.recipients.find(x => x.Email == this.userService.currentUser.Email).Id) {\r\n currentUserRecipientId = this.recipients.find(x => x.Email == this.userService.currentUser.Email).Id;\r\n }\r\n // const currentUserRecipientId = this.recipients.find(x => x.Email == this.userService.currentUser.Email).Id;\r\n if (currentUserRecipientId == null || currentUserRecipientId == 0 || this.CCSelections.indexOf(currentUserRecipientId) < 0) {\r\n this.CCSelections.splice(0, this.CCSelections.length);\r\n this.CCSelections.push(this.recipients.find(x => x.Email == this.userService.currentUser.Email).Id);\r\n }\r\n }\r\n this.tableData = new TylerMatTableDataSource(this.recipients);\r\n })\r\n );\r\n if (this.recipients.length == 0) {\r\n this.getRecipients();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n ok() {\r\n this.errors = [];\r\n // PRE: the ok button is clicked\r\n // POST: closes the dialogBox\r\n\r\n // Checking for errors\r\n if (this.toSelections.length == 0 && this.userType != 1) {\r\n this.errors = [];\r\n this.errors.push({\r\n fieldName: null,\r\n fieldRef: null,\r\n errorMsg: 'At least one To recipient must be selected.'\r\n });\r\n }\r\n const re = new RegExp('^(([a-zA-Z0-9_\\\\-\\\\.]+)@([a-zA-Z0-9_\\\\-\\\\.]+)\\\\.([a-zA-Z]{2,5}){1,25}(($)|( *;+ *$)|( *;+ *(?=[a-zA-Z0-9_\\\\-\\\\.]))))*$');\r\n\r\n // Validate the email string\r\n if (this.additionalTo != undefined && this.additionalTo && this.additionalTo != '' && !re.test(this.additionalTo)) {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: 'One or more emails in the \"To:\" recipient field is invalid'\r\n });\r\n }\r\n\r\n if (this.additionalCc != undefined && this.additionalCc && this.additionalCc != '' && !re.test(this.additionalCc)) {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: 'One or more emails in the \"Cc:\" recipient field is invalid'\r\n });\r\n }\r\n\r\n if (this.additionalBcc != undefined && this.additionalBcc && this.additionalBcc != '' && !re.test(this.additionalBcc)) {\r\n this.errors.push({\r\n fieldName: '',\r\n fieldRef: null,\r\n errorMsg: 'One or more emails in the \"Bcc:\" recipient field is invalid'\r\n });\r\n }\r\n\r\n if (this.errors && this.errors.length > 0) {\r\n\r\n }\r\n // Continuing with save\r\n else {\r\n\r\n // Adjusting the mail details\r\n this.mailDetail.peopleIds = '';\r\n this.mailDetail.personCodeMother = 0;\r\n this.mailDetail.personCodeFather = 0;\r\n this.mailDetail.toSelectedMailId = '';\r\n this.mailDetail.CCSelectedMailId = '';\r\n this.mailDetail.CCDisplayMailId = '';\r\n this.mailDetail.BCCSelectedMailId = '';\r\n this.mailDetail.BCCDisplayMailId = '';\r\n this.toSelected = undefined;\r\n\r\n // Adjusting the To selections\r\n this.recipients.forEach(recipient => {\r\n if (recipient.Id != null && this.toSelections.length > 0) {\r\n this.toSelected = true;\r\n if (this.toSelections.indexOf(recipient.Id) > -1) {\r\n let addedRecipient = recipient.Name;\r\n if (recipient.UserType == 1 || this.userService.currentUser.UserType == 1) {\r\n addedRecipient += ' <' + recipient.Email + '>';\r\n }\r\n if (this.mailDetail.toSelectedMailId.length == 0) {\r\n this.mailDetail.toSelectedMailId = addedRecipient;\r\n this.mailDetail.toMailId = recipient.Email;\r\n }\r\n else {\r\n this.mailDetail.toSelectedMailId = this.mailDetail.toSelectedMailId + '; ' + addedRecipient;\r\n this.mailDetail.toMailId = this.mailDetail.toMailId + ';' + recipient.Email;\r\n }\r\n\r\n if (this.mailDetail.peopleIds == '') {\r\n this.mailDetail.peopleIds = recipient.Id + '||' + recipient.Relationship;\r\n } else {\r\n this.mailDetail.peopleIds = this.mailDetail.peopleIds + ',' + recipient.Id + '|| ';\r\n }\r\n\r\n if (recipient.Relationship == 'Mother' || recipient.Relationship == 'Step Mother') {\r\n this.mailDetail.personCodeMother = 1;\r\n }\r\n if (recipient.Relationship == 'Father' || recipient.Relationship == 'Step Father') {\r\n this.mailDetail.personCodeFather = 2;\r\n }\r\n }\r\n }\r\n });\r\n // Add additional To\r\n if (this.additionalTo && this.additionalTo != '' && this.userType == 1) {\r\n if (this.mailDetail.toMailId && this.mailDetail.toMailId != '') {\r\n this.mailDetail.toMailId = this.mailDetail.toMailId + ';' + this.additionalTo;\r\n this.mailDetail.toSelectedMailId = this.mailDetail.toSelectedMailId + ' ;' + 'Additional, Recipient <' + this.additionalTo + '>';\r\n }\r\n else {\r\n this.mailDetail.toMailId = this.additionalTo;\r\n this.mailDetail.toSelectedMailId = 'Additional, Recipient <' + this.additionalTo + '>';\r\n }\r\n }\r\n\r\n // Adjusting the CC selections\r\n this.recipients.forEach(recipient => {\r\n if (recipient.Id != null && this.CCSelections.length > 0) {\r\n if (this.CCSelections.indexOf(recipient.Id) > -1) {\r\n let addedRecipient = recipient.Name;\r\n if (recipient.UserType == 1 || this.userService.currentUser.UserType == 1) {\r\n addedRecipient += ' <' + recipient.Email + '>';\r\n }\r\n if (this.mailDetail.CCDisplayMailId.length == 0) {\r\n this.mailDetail.CCDisplayMailId = addedRecipient;\r\n } else {\r\n this.mailDetail.CCDisplayMailId = this.mailDetail.CCDisplayMailId + '; ' + addedRecipient;\r\n }\r\n if (this.mailDetail.CCSelectedMailId.length == 0) {\r\n this.mailDetail.CCSelectedMailId = addedRecipient;\r\n this.mailDetail.CCMailId = recipient.Email;\r\n }\r\n else {\r\n this.mailDetail.CCSelectedMailId = this.mailDetail.CCSelectedMailId + addedRecipient + ' ';\r\n this.mailDetail.CCMailId = this.mailDetail.CCMailId + ';' + recipient.Email;\r\n }\r\n\r\n if (this.mailDetail.peopleIds == '') {\r\n this.mailDetail.peopleIds = recipient.Id + '||' + recipient.Relationship;\r\n } else {\r\n this.mailDetail.peopleIds = this.mailDetail.peopleIds + ',' + recipient.Id + '|| ';\r\n }\r\n\r\n if (recipient.Relationship == 'Mother' || recipient.Relationship == 'Step Mother') {\r\n this.mailDetail.personCodeMother = 1;\r\n }\r\n if (recipient.Relationship == 'Father' || recipient.Relationship == 'Step Father') {\r\n this.mailDetail.personCodeFather = 2;\r\n }\r\n }\r\n }\r\n });\r\n // Add additional Cc\r\n if (this.additionalCc && this.additionalCc != '' && this.userType == 1) {\r\n if (this.mailDetail.CCMailId && this.mailDetail.CCMailId != '') {\r\n this.mailDetail.CCMailId = this.mailDetail.CCMailId + ';' + this.additionalCc;\r\n this.mailDetail.CCSelectedMailId = this.mailDetail.CCSelectedMailId + ' ;' + 'Additional, Recipient <' + this.additionalCc + '>';\r\n this.mailDetail.CCDisplayMailId = this.mailDetail.CCDisplayMailId + ' ;' + 'Additional, Recipient <' + this.additionalCc + '>';\r\n }\r\n else {\r\n this.mailDetail.CCMailId = this.additionalCc;\r\n this.mailDetail.CCSelectedMailId = 'Additional, Recipient <' + this.additionalCc + '>';\r\n this.mailDetail.CCDisplayMailId = 'Additional, Recipient <' + this.additionalCc + '>';\r\n }\r\n }\r\n\r\n // Adjusting the BCC selections\r\n this.recipients.forEach(recipient => {\r\n if (recipient.Id != null && this.BCCSelections.length > 0) {\r\n if (this.BCCSelections.indexOf(recipient.Id) > -1) {\r\n let addedRecipient = recipient.Name;\r\n if (recipient.UserType == 1 || this.userService.currentUser.UserType == 1) {\r\n addedRecipient += ' <' + recipient.Email + '>';\r\n }\r\n if (this.mailDetail.BCCDisplayMailId.length == 0) {\r\n this.mailDetail.BCCDisplayMailId = addedRecipient;\r\n } else {\r\n this.mailDetail.BCCDisplayMailId = this.mailDetail.BCCDisplayMailId + '; ' + addedRecipient;\r\n }\r\n if (this.mailDetail.BCCSelectedMailId.length == 0) {\r\n this.mailDetail.BCCSelectedMailId = addedRecipient + ' ';\r\n this.mailDetail.BCCMailId = recipient.Email;\r\n }\r\n else {\r\n this.mailDetail.BCCSelectedMailId = this.mailDetail.BCCSelectedMailId + addedRecipient + ' ';\r\n this.mailDetail.BCCMailId = this.mailDetail.BCCMailId + ';' + recipient.Email;\r\n }\r\n\r\n if (this.mailDetail.peopleIds == '') {\r\n this.mailDetail.peopleIds = recipient.Id + '||' + recipient.Relationship;\r\n } else {\r\n this.mailDetail.peopleIds = this.mailDetail.peopleIds + ',' + recipient.Id + '|| ';\r\n }\r\n\r\n if (recipient.Relationship == 'Mother' || recipient.Relationship == 'Step Mother') {\r\n this.mailDetail.personCodeMother = 1;\r\n }\r\n if (recipient.Relationship == 'Father' || recipient.Relationship == 'Step Father') {\r\n this.mailDetail.personCodeFather = 2;\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Add additional Bcc\r\n if (this.additionalBcc && this.additionalBcc != '' && this.userType == 1) {\r\n if (this.mailDetail.BCCMailId && this.mailDetail.BCCMailId != '') {\r\n this.mailDetail.BCCMailId = this.mailDetail.BCCMailId + ';' + this.additionalBcc;\r\n this.mailDetail.BCCSelectedMailId = this.mailDetail.BCCSelectedMailId + ' ;' + 'Additional, Recipient <' + this.additionalBcc + '>';\r\n this.mailDetail.BCCDisplayMailId = this.mailDetail.BCCDisplayMailId + ' ;' + 'Additional, Recipient <' + this.additionalBcc + '>';\r\n }\r\n else {\r\n this.mailDetail.BCCMailId = this.additionalBcc;\r\n this.mailDetail.BCCSelectedMailId = 'Additional, Recipient <' + this.additionalBcc + '>';\r\n this.mailDetail.BCCDisplayMailId = 'Additional, Recipient <' + this.additionalBcc + '>';\r\n }\r\n }\r\n\r\n // Closing the dialog box\r\n this.dialogBox.close(true);\r\n }\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: resets the data and closes the dialog box\r\n // NOTE: we don't just use filter because we want to keep the reference\r\n if (this.mailDetail.toSelectedMailId == '') {\r\n this.toSelected = undefined;\r\n }\r\n for (let i = 0; i < this.toSelections.length; i++) {\r\n if (!this.originalToSelections.includes(this.toSelections[i])) {\r\n this.toSelections.splice(i, 1);\r\n i -= 1;\r\n }\r\n }\r\n for (let i = 0; i < this.CCSelections.length; i++) {\r\n if (!this.originalCCSelections.includes(this.CCSelections[i])) {\r\n this.CCSelections.splice(i, 1);\r\n i -= 1;\r\n }\r\n }\r\n for (let i = 0; i < this.BCCSelections.length; i++) {\r\n if (!this.originalBCCSelections.includes(this.BCCSelections[i])) {\r\n this.BCCSelections.splice(i, 1);\r\n i -= 1;\r\n }\r\n }\r\n this.dialogBox.close(false);\r\n }\r\n\r\n deselectAll() {\r\n // PRE: the deselect all button is clicked\r\n // POST: unselects all checkboxes\r\n // NOTE: WE MUST MAINTAIN THE REFERENCES, DO NOT RESET THEM TO EMPTY ARRAYS\r\n this.disableCCTo = false;\r\n this.toSelections.splice(0, this.toSelections.length);\r\n this.CCSelections.splice(0, this.CCSelections.length);\r\n this.BCCSelections.splice(0, this.BCCSelections.length);\r\n\r\n // Parent is always selected\r\n if (this.CCDisabledEmailId) {\r\n this.CCSelections.push(this.CCDisabledEmailId);\r\n }\r\n }\r\n\r\n // Methods\r\n changeTerm(term: number) {\r\n // PRE: a new term is selected\r\n // POST: resets the data for the selected term\r\n // NOTE: WE MUST MAINTAIN THE REFERENCES, DO NOT RESET THEM TO EMPTY ARRAYS\r\n this.disableCCTo = false;\r\n this.viewOption = term;\r\n // this.value = term;\r\n this.toSelections.splice(0, this.toSelections.length);\r\n this.CCSelections.splice(0, this.CCSelections.length);\r\n this.BCCSelections.splice(0, this.BCCSelections.length);\r\n this.getRecipients();\r\n }\r\n\r\n getRecipients(force = false) {\r\n // POST: obtains the student recipients\r\n\r\n // Ensuring that the send email service's properties are synced\r\n const differences = this.allAdvisors != this.sendEmailService.allAdvisors\r\n || this.allCounselors != this.sendEmailService.allCounselors\r\n || this.allPrincipals != this.sendEmailService.allPrincipals\r\n || this.allSiteAdministrators != this.sendEmailService.allSiteAdmin\r\n || this.allDistrictAdministrators != this.sendEmailService.allDistrictAdmin\r\n || this.allCoTeachers != this.sendEmailService.allCoTeachers\r\n || this.allNurses != this.sendEmailService.allNurses;\r\n this.sendEmailService.allAdvisors = this.allAdvisors;\r\n this.sendEmailService.allCounselors = this.allCounselors;\r\n this.sendEmailService.allPrincipals = this.allPrincipals;\r\n this.sendEmailService.allSiteAdmin = this.allSiteAdministrators;\r\n this.sendEmailService.allDistrictAdmin = this.allDistrictAdministrators;\r\n this.sendEmailService.allCoTeachers = this.allCoTeachers;\r\n this.sendEmailService.allNurses = this.allNurses;\r\n\r\n // Only run the call if the properties are different or we haven't gotten them yet\r\n if (!this.getRecipientSubscription || differences || force) {\r\n\r\n // Ensuring we only ever have one recipient subscription\r\n if (this.getRecipientSubscription) {\r\n this.getRecipientSubscription.unsubscribe();\r\n }\r\n\r\n // Running the subscription\r\n this.getRecipientSubscription = this.sendEmailService.getStudentRecipients(this.viewOption).subscribe((recipients) => {\r\n if (this.V10 && recipients.filter(r => r.Id == this.userService.currentUser.MemberId).length == 0) {\r\n const currentRecipient = new Recipient();\r\n currentRecipient.Email = this.userService.currentUser.Email;\r\n currentRecipient.Id = this.userService.currentUser.MemberId;\r\n currentRecipient.Name = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n currentRecipient.TeacherName = currentRecipient.Name;\r\n currentRecipient.UserType = currentRecipient.UserType;\r\n recipients.push(currentRecipient);\r\n }\r\n this.checkDefaultMails();\r\n });\r\n this.subscriptions.push(this.getRecipientSubscription);\r\n }\r\n }\r\n\r\n canSendTo(recipient: Recipient) {\r\n // PRE: a recipient to check\r\n // POST: returns true if you can send mail to the recipient\r\n return this.userType == 1 ||\r\n recipient.UserType == 1 ||\r\n recipient.Relationship == 'Teacher' ||\r\n recipient.Relationship == 'Counselor' ||\r\n recipient.Relationship == 'Principal' ||\r\n recipient.Relationship == 'Assistant Principal' ||\r\n recipient.Relationship == 'Site Administrator' ||\r\n recipient.Relationship == 'Advisor';\r\n }\r\n\r\n canCCTo(recipient: Recipient) {\r\n // PRE: a recipient to check\r\n // POST: returns true if you can CC mail to the recipient\r\n let canCC = false;\r\n if (this.BCCSelections.filter(s => s == recipient.Id).length > 0) {\r\n canCC = true;\r\n }\r\n else if ((recipient.UserType != 2 || this.disableCCTo != true) && recipient.Id != this.CCDisabledEmailId) {\r\n canCC = true;\r\n }\r\n return canCC;\r\n }\r\n\r\n toggleSelection(recipient: Recipient, idArray: Array, forceValidation = false, checkBCC = false) {\r\n // PRE: a recipient to toggle and an id array to toggle within\r\n // POST: removes the recipient if that recipient is in the array. Otherwise, adds the recipient to that array.\r\n // Also, performs validation sometimes (???)\r\n const index = idArray.indexOf(recipient.Id);\r\n if (index > -1) {\r\n idArray.splice(index, 1);\r\n } else {\r\n idArray.push(recipient.Id);\r\n }\r\n if (this.userType == 1 || forceValidation) {\r\n this.validateSelections();\r\n }\r\n if (checkBCC && recipient.UserType == 2) {\r\n let BCCParentContactCount = 0;\r\n for (let i = 0; i < this.BCCSelections.length; i++) {\r\n const BCCRecipient = this.recipients.find(r => r.Id == this.BCCSelections[i]);\r\n if (BCCRecipient && BCCRecipient.UserType == 2) {\r\n BCCParentContactCount = BCCParentContactCount + 1;\r\n }\r\n }\r\n if (BCCParentContactCount < 2) {\r\n this.disableCCTo = false;\r\n }\r\n }\r\n if (checkBCC) {\r\n // This is logically unnecessary because it literally does nothing\r\n // Also, DO NOT CHANGE THE REFERENCE\r\n // if (this.CCSelections.filter(s => s == recipient.Id)[0] != undefined) {\r\n // this.CCSelections = this.CCSelections.filter(s => s != recipient.Id);\r\n // }\r\n if (this.CCDisabledEmailId == recipient.Id && this.BCCSelections.filter(s => s == recipient.Id).length == 0 && this.CCSelections.filter(s => s == recipient.Id).length == 0) {\r\n this.CCSelections.push(recipient.Id);\r\n }\r\n }\r\n }\r\n\r\n validateSelections() {\r\n // POST: performs validation on a selection to show warning modal\r\n // This shows if more than 1 parent has been selected\r\n const selectionMoreThanOne = [];\r\n\r\n // Validating To selections\r\n if (this.toSelections != undefined && this.toSelections != null) {\r\n for (let i = 0; i < this.toSelections.length; i++) {\r\n const toSelection = this.recipients.find(recipient => recipient.Id == this.toSelections[i]);\r\n if (toSelection != undefined && toSelection != null && toSelection.UserType == 2) {\r\n selectionMoreThanOne.push(toSelection.Id);\r\n }\r\n }\r\n }\r\n\r\n // Validating CC selections\r\n if (this.CCSelections != undefined && this.CCSelections != null && this.CCSelections.length > 0) {\r\n\r\n // Determining how many people we have CCed\r\n let ccCount = 0;\r\n for (let i = 0; i < this.CCSelections.length; i++) {\r\n const CCSelection = this.recipients.find(recipient => recipient.Id == this.CCSelections[i]);\r\n if (CCSelection.UserType == 2) {\r\n ccCount += 1;\r\n }\r\n }\r\n\r\n // Determining if we've selected more than one CC\r\n if (ccCount > 1) {\r\n for (let i = 0; i < this.CCSelections.length; i++) {\r\n const CCSelection = this.recipients.find(recipient => recipient.Id == this.CCSelections[i]);\r\n const index = selectionMoreThanOne.indexOf(this.CCSelections[i]);\r\n if (CCSelection != undefined && CCSelection != null && CCSelection.UserType == 2 && index == -1) {\r\n selectionMoreThanOne.push(CCSelection.Id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Validing BCC selections\r\n if (this.BCCSelections != undefined && this.BCCSelections != null && this.BCCSelections.length > 0 && selectionMoreThanOne.length > 0) {\r\n for (let i = 0; i < this.BCCSelections.length; i++) {\r\n const BCCselection = this.recipients.find(recipient => recipient.Id == this.BCCSelections[i]);\r\n const index = selectionMoreThanOne.indexOf(this.BCCSelections[i]);\r\n if (BCCselection != undefined && BCCselection != null && BCCselection.UserType == 2 && index == -1) {\r\n selectionMoreThanOne.push(BCCselection.Id);\r\n }\r\n }\r\n }\r\n\r\n // Check validity\r\n if (selectionMoreThanOne != undefined && selectionMoreThanOne != null && selectionMoreThanOne.length > 1) {\r\n\r\n // Showing warning\r\n const dialogBox = this.dialog.open(RecipientChangeWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n\r\n // Upon warning close, resolve errors\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n this.disableCCTo = false;\r\n\r\n // Ensuring there are selections to copy from\r\n if (this.CCSelections != undefined && this.CCSelections != null && this.CCSelections.length > 0 || this.toSelections != undefined && this.toSelections != null && this.toSelections.length > 0) {\r\n\r\n // Ensuring there are BCC selections to copy to\r\n if (this.BCCSelections == undefined || this.BCCSelections == null) {\r\n this.BCCSelections.splice(0, this.BCCSelections.length); // DO NOT CHANGE THE REFERENCE\r\n }\r\n\r\n // If this is a teacher, copy over all to selections\r\n if (this.userType == 1) {\r\n for (let i = 0; i < this.toSelections.length; i++) {\r\n const toSelection = this.recipients.find(recipient => recipient.Id == this.toSelections[i]);\r\n if (toSelection && toSelection.UserType == 2) {\r\n if (this.BCCSelections.indexOf(this.toSelections[i]) == -1) {\r\n this.BCCSelections.push(this.toSelections[i]);\r\n }\r\n const index = this.toSelections.indexOf(this.toSelections[i]);\r\n if (index > -1) {\r\n this.toSelections.splice(index, 1);\r\n i--;\r\n }\r\n this.disableCCTo = true;\r\n }\r\n }\r\n }\r\n\r\n // for both teachers and parents, copy over all CC selections\r\n for (let i = 0; i < this.CCSelections.length; i++) {\r\n const CCSelection = this.recipients.find(recipient => recipient.Id == this.CCSelections[i]);\r\n if (CCSelection && CCSelection.UserType == 2) {\r\n if (this.BCCSelections.indexOf(this.CCSelections[i]) == -1) {\r\n this.BCCSelections.push(this.CCSelections[i]);\r\n }\r\n if (CCSelection.Id != this.CCDisabledEmailId) {\r\n const index = this.CCSelections.indexOf(this.CCSelections[i]);\r\n if (index > -1) {\r\n this.CCSelections.splice(index, 1);\r\n i--;\r\n }\r\n this.disableCCTo = true;\r\n }\r\n }\r\n }\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n checkDefaultMails() {\r\n // PRE: the recipients must be set\r\n // POST: checks the default emails\r\n // NOTE: WE MUST MAINTAIN THE REFERENCES, DO NOT RESET THEM TO EMPTY ARRAYS\r\n // this.toSelections.splice(0, this.toSelections.length);\r\n const existingMail = this.mailDetail.BCCMailId.split(';');\r\n const mail = existingMail.find(o => o == this.teacherEmailAddress);\r\n this.recipients.forEach(recipient => {\r\n if (recipient.Email == this.teacherEmailAddress) {\r\n if (mail == undefined || (mail != this.teacherEmailAddress) || this.mailDetail.toSelectedMailId) {\r\n if (recipient.Id) {\r\n const index = this.toSelections.indexOf(recipient.Id);\r\n if (index == -1) {\r\n this.toSelections.push(recipient.Id);\r\n }\r\n }\r\n }\r\n }\r\n if (recipient.Email == this.userEmailAddress) {\r\n if (recipient.Id) {\r\n this.CCDisabledEmailId = recipient.Id;\r\n const index = this.CCSelections.indexOf(recipient.Id);\r\n if (index == -1) {\r\n let BCCParentContactCount = 0;\r\n this.BCCSelections.forEach(BCCSelect => {\r\n if (this.recipients.find(recipient2 => recipient2.Id == BCCSelect).UserType == 2) {\r\n BCCParentContactCount += 1;\r\n }\r\n });\r\n this.CCSelections.forEach(CCSelect => {\r\n if (this.recipients.find(recipient2 => recipient2.Id == CCSelect).UserType == 2) {\r\n BCCParentContactCount += 1;\r\n }\r\n });\r\n if (BCCParentContactCount < 1) {\r\n this.CCSelections.push(recipient.Id);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n getScreenHeight() {\r\n return window.innerHeight - 100;\r\n }\r\n}\r\n","import { StudentService } from '../../../shared-components/student/student.service';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'enrollment-warning',\r\n templateUrl: './enrollment-warning-dialog.component.html',\r\n styleUrls: [\r\n './enrollment-warning-dialog.component.css'\r\n ]\r\n})\r\nexport class EnrollmentWarningDialogComponent implements OnInit {\r\n\r\n // Properties\r\n selectedStudent: Student;\r\n\r\n // Class Functions\r\n constructor (\r\n private studentService: StudentService,\r\n private dialogBox: MatDialogRef\r\n ) {}\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n }\r\n\r\n ok() {\r\n // PRE: the ok button is clicked\r\n // POST: closes the dialog box\r\n this.dialogBox.close();\r\n }\r\n\r\n // Methods\r\n}","\r\n

\r\n Select Recipients\r\n

\r\n\r\n\r\n\r\n
\r\n {{selectedStudent.FirstName}} {{selectedStudent.LastName}} - Not Enrolled in This School Year\r\n
\r\n
\r\n Select a different year using the Year button in the top bar.\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n \r\n","\r\n \r\n \r\n\r\n
\r\n {{banner}}\r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n {{noReplyEmail}}\r\n \r\n \r\n\r\n \r\n \r\n {{currentUser.LastName}}, {{currentUser.FirstName}} <{{currentUser.Email}}>\r\n \r\n \r\n {{currentUser.LastName}} {{currentUser.FirstName ? currentUser.FirstName.substring(0, 1) : ''}}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n {{teacherName}} {{teacherEmailAddress ? '<' + teacherEmailAddress + '>' : ''}}\r\n \r\n \r\n {{selectedEmailName}} {{emailAddress ? '<' + emailAddress + '>' : ''}}\r\n \r\n \r\n {{mailDetail.toSelectedMailId}}\r\n \r\n
\r\n
\r\n \r\n \r\n {{teacherName}} {{teacherEmailAddress ? '<' + teacherEmailAddress + '>' : ''}}\r\n \r\n \r\n {{selectedEmailName}} {{emailAddress ? '<' + emailAddress + '>' : ''}}\r\n \r\n \r\n {{mailDetail.toSelectedMailId}}\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{mailDetail.CCDisplayMailId}}\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n {{mailDetail.BCCDisplayMailId}}\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {{attachment.FileName}}\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\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 { AfterViewInit, Component, ElementRef, HostListener, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { Enrollment } from '../../shared-components/student/enrollment.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { GeneralPreferences } from '../../shared-components/user-preferences/general-preferences.model';\r\nimport { MassEmailPreferences } from '../../shared-components/user-preferences/mass-email-preferences.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../login/login.service';\r\nimport { AddAttachmentsDialogComponent } from './add-attachments-dialog/add-attachments-dialog.component';\r\nimport { ChangeRecipientsDialogComponent } from './change-recipients-dialog/change-recipients-dialog.component';\r\nimport { EnrollmentWarningDialogComponent } from './enrollment-warning-dialog/enrollment-warning-dialog.component';\r\nimport { MailDetail } from './mail-detail';\r\nimport { MailParameters } from './mail-paremeters';\r\nimport { OptionNotAvailableDialogComponent } from './option-not-available-dialog/option-not-available-dialog.component';\r\nimport { Recipient } from './recipient.model';\r\nimport { SendEmailWarningDialogComponent } from './send-email-warning-dialog/send-email-warning-dialog.component';\r\nimport { SendEmailService } from './send-email.service';\r\n\r\n@Component({\r\n selector: 'send-email',\r\n templateUrl: './send-email.component.html',\r\n styleUrls: [\r\n './send-email.component.css'\r\n ]\r\n})\r\nexport class SendEmailComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // Properties\r\n currentUser: User;\r\n teacherName: string;\r\n teacherEmailAddress: string;\r\n mailDetail = new MailDetail();\r\n subscriptions: Subscription[] = [];\r\n studentEnrollment: Enrollment;\r\n errors: ErrorList[] = [];\r\n recipients: Recipient[] = [];\r\n toSelections: number[] = [];\r\n CCSelections: number[] = [];\r\n BCCSelections: number[] = [];\r\n optionNotAvailable = false;\r\n viewOption = 3;\r\n createCommLogEntry = false;\r\n V10: boolean;\r\n yearSettings: any;\r\n selectedStudent: Student;\r\n @ViewChild('bodyContainer', { read: ElementRef }) bodyContainer: ElementRef;\r\n bodyHeight: number;\r\n emailChanged = false;\r\n emailAddress: string;\r\n selectedEmailName: string;\r\n staffUser = false;\r\n loginYear: Year;\r\n massEmailPreferences: MassEmailPreferences;\r\n modal = false;\r\n banner = '';\r\n maxTotalFileSize = 10485760;\r\n generalPreferences: GeneralPreferences;\r\n noReplyEmail = '';\r\n toSelected = false;\r\n footerWarning: string;\r\n sendEmailButtonLabel = 'Send';\r\n closeWithoutEmailButtonLabel = 'Close without Email';\r\n includeCloseWithoutEmailButton = false;\r\n\r\n additionalTo: string;\r\n additionalCc: string;\r\n additionalBcc: string;\r\n\r\n // Class Functions\r\n constructor(\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private userService: UserService,\r\n private sendEmailService: SendEmailService,\r\n private studentService: StudentService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n private userPreferencesService: UserPreferencesService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) { }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data and shows initial warnings\r\n\r\n // Setting up local data\r\n this.currentUser = this.userService.currentUser;\r\n this.mailDetail.toMailId = this.teacherEmailAddress;\r\n this.mailDetail.toMailId = this.emailAddress;\r\n this.mailDetail.CCMailId = this.currentUser.Email;\r\n if (this.currentUser.UserType == 1) {\r\n this.mailDetail.CCDisplayMailId = this.currentUser.LastName + ', ' + this.currentUser.FirstName + ' <' + this.currentUser.Email + '>';\r\n } else {\r\n this.mailDetail.CCDisplayMailId = this.currentUser.LastName + ' ' + (this.currentUser.FirstName ? this.currentUser.FirstName.substring(0, 1) : '');\r\n }\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.staffUser = this.userService.userType == 1;\r\n this.loginYear = this.yearService.loginYear;\r\n this.noReplyEmail = this.loginService.LoginSettings.DefaultEmailReplyToAddress;\r\n\r\n // Setting injected data\r\n if (this.data) {\r\n if (this.data.modal) {\r\n this.modal = this.data.modal;\r\n }\r\n if (this.data.banner) {\r\n this.banner = this.data.banner;\r\n }\r\n if (this.data.footerWarning) {\r\n this.footerWarning = this.data.footerWarning;\r\n }\r\n if (this.data.sendEmailButtonLabel) {\r\n this.sendEmailButtonLabel = this.data.sendEmailButtonLabel;\r\n }\r\n if (this.data.closeWithoutEmailButtonLabel) {\r\n this.closeWithoutEmailButtonLabel = this.data.closeWithoutEmailButtonLabel;\r\n } \r\n this.includeCloseWithoutEmailButton = this.data.includeCloseWithoutEmailButton; \r\n }\r\n\r\n // Show option not available if the user doesn't have an email\r\n if (!this.currentUser.Email) {\r\n this.optionNotAvailable = true;\r\n this.dialog.open(OptionNotAvailableDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n\r\n // Setting up subscriptions\r\n this.subscriptions.push(\r\n\r\n // Checking for recipient changes\r\n this.sendEmailService.observableRecipientsStream$.subscribe(recipients => {\r\n this.recipients = recipients;\r\n\r\n if (this.toSelections.length == 0 && (this.teacherName != null || this.teacherEmailAddress != null)) {\r\n for (let i = 0; i < this.recipients.length; i++) {\r\n if ((this.teacherName != null && this.recipients[i].Name.toLowerCase() === this.teacherName.toLowerCase()) ||\r\n (this.teacherEmailAddress != null && this.recipients[i].Email.toLowerCase() === this.teacherEmailAddress.toLowerCase())) {\r\n this.toSelections.push(this.recipients[i].Id);\r\n }\r\n }\r\n this.mailDetail.toMailId = this.teacherEmailAddress;\r\n }\r\n }),\r\n\r\n // Checking for selected student change\r\n // Note, this is called immediately as this is a behavior subject\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n\r\n // If there is a student, change recipient/sender\r\n if (this.studentService.selectedStudent || this.modal) {\r\n this.mailDetail = new MailDetail();\r\n this.teacherName = this.sendEmailService.teacherName;\r\n this.teacherEmailAddress = this.sendEmailService.teacherEmailAddress;\r\n \r\n if (!this.modal) {\r\n if (this.selectedStudent != null && this.selectedStudent.Id != this.studentService.selectedStudent.Id) {\r\n this.toSelections.splice(0, this.toSelections.length);\r\n this.CCSelections.splice(0, this.CCSelections.length);\r\n this.BCCSelections.splice(0, this.BCCSelections.length);\r\n }\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n this.mailDetail.CCMailId = (this.mailDetail.CCMailId == undefined) ? this.currentUser.Email : this.mailDetail.CCMailId;\r\n if (this.currentUser.UserType == 1) {\r\n this.mailDetail.CCDisplayMailId = this.currentUser.LastName + ', ' + this.currentUser.FirstName + ' <' + this.currentUser.Email + '>';\r\n } else {\r\n this.mailDetail.CCDisplayMailId = this.currentUser.LastName + ' ' + (this.currentUser.FirstName ? this.currentUser.FirstName.substring(0, 1) : '');\r\n }\r\n if (this.V10 && this.CCSelections.filter(s => s == this.currentUser.MemberId).length == 0) {\r\n this.CCSelections.push(this.currentUser.MemberId);\r\n }\r\n else if (!this.V10 && this.CCSelections.filter(s => s == this.currentUser.Id).length == 0) {\r\n this.CCSelections.push(this.currentUser.Id);\r\n }\r\n this.sendEmailService.recipients = [];\r\n if (this.studentEnrollment || this.modal) {\r\n if (!this.optionNotAvailable && !this.teacherEmailAddress && (!this.emailAddress || this.emailAddress.length < 1)) {\r\n this.changeRecipients();\r\n }\r\n } else {\r\n this.dialog.open(EnrollmentWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n }\r\n // If there is no student, return to summary\r\n else {\r\n this.emailChanged = false;\r\n if (this.userService.userType == 1) {\r\n this.router.navigateByUrl('classroom360/cards');\r\n } else {\r\n this.router.navigateByUrl('student360/studentSummary');\r\n }\r\n }\r\n })\r\n ); \r\n\r\n // Setting injected data after mailDetail is initialized\r\n if (this.data && this.mailDetail) {\r\n if (this.data.subject) {\r\n this.mailDetail.subject = this.data.subject;\r\n }\r\n if (this.data.message) {\r\n this.mailDetail.message = this.data.message;\r\n }\r\n }\r\n\r\n // If this is a teacher and we're not in V10, check the year settings\r\n if (this.currentUser.UserType == 1 && !this.V10) {\r\n this.subscriptions.push(\r\n this.yearService.getSchoolYearSettings(\r\n this.yearService.loginYear.Id,\r\n this.yearService.loginYear.SchoolID\r\n ).subscribe(yearSettings => {\r\n this.yearSettings = yearSettings;\r\n this.createCommLogEntry = !this.modal ? this.yearSettings.AutoAddEmail : false;\r\n })\r\n );\r\n }\r\n\r\n // Applying the signature\r\n if (this.userService.userType == 1) {\r\n this.getPreferences();\r\n }\r\n }\r\n\r\n @HostListener('window:resize')\r\n ngAfterViewInit() {\r\n // POST: sets the initial height to the body\r\n // NOTE: the -50 has to do with Angular padding and margins\r\n setTimeout(() => {\r\n if (this.bodyContainer) {\r\n this.bodyHeight = this.bodyContainer.nativeElement.offsetHeight - 50;\r\n }\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n send() {\r\n // PRE: the send button is clicked\r\n // POST: sends the email\r\n\r\n // Checking for errors\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n\r\n // Checking for warnings\r\n if (!this.mailDetail.subject || !this.mailDetail.message) {\r\n const dialogBox = this.dialog.open(SendEmailWarningDialogComponent, {\r\n data: {\r\n noSubject: !this.mailDetail.subject,\r\n noContent: !this.mailDetail.message\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(sendAnyway => {\r\n if (sendAnyway) {\r\n this.sendMail();\r\n }\r\n })\r\n );\r\n }\r\n\r\n // Sending mail\r\n else {\r\n this.sendMail();\r\n }\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n\r\n closeWithoutEmailClick() {\r\n this.dialogRef.close('Close without email was clicked.');\r\n }\r\n\r\n cancel() {\r\n // PRE: the cancel button is clicked\r\n // POST: navigates to the previous URL\r\n // NOTE: this was depreciated since this was made a page. It might be changed to a modal in the future.\r\n this.router.navigateByUrl(this.sharedService.previousUrl);\r\n }\r\n\r\n // Methods\r\n getPreferences() {\r\n // POST: obtains the preferences, specifically for the signature\r\n this.subscriptions.push(\r\n this.userPreferencesService.getUserPreferences(0, '/OneSISMassEmail').subscribe(results => {\r\n this.userPreferencesService.massEmailPreferences = JSON.parse(results[0]);\r\n this.massEmailPreferences = JSON.parse(JSON.stringify(this.userPreferencesService.massEmailPreferences));\r\n if (this.massEmailPreferences.Signature != '' && this.mailDetail.message == '') {\r\n this.mailDetail.message = this.mailDetail.message + '




' + this.massEmailPreferences.Signature;\r\n }\r\n }),\r\n this.userPreferencesService.getGeneralPreferences().subscribe(result => {\r\n this.generalPreferences = result;\r\n })\r\n );\r\n }\r\n\r\n changeRecipients() {\r\n // POST: opens the change recipients dialog\r\n if (this.studentEnrollment) {\r\n const dialogIndex = this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance instanceof ChangeRecipientsDialogComponent);\r\n if (dialogIndex == -1) {\r\n const dialogBox = this.dialog.open(ChangeRecipientsDialogComponent, {\r\n data: {\r\n viewOption: this.viewOption,\r\n mailDetail: this.mailDetail,\r\n toSelections: this.toSelections,\r\n CCSelections: this.CCSelections,\r\n BCCSelections: this.BCCSelections,\r\n teacherEmailAddress: this.teacherEmailAddress,\r\n userEmailAddress: this.currentUser.Email,\r\n additionalTo: this.additionalTo,\r\n additionalCc: this.additionalCc,\r\n additionalBcc: this.additionalBcc,\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(changed => {\r\n this.additionalTo = dialogBox.componentInstance.additionalTo;\r\n this.additionalCc = dialogBox.componentInstance.additionalCc;\r\n this.additionalBcc = dialogBox.componentInstance.additionalBcc;\r\n this.viewOption = dialogBox.componentInstance.viewOption;\r\n if (changed) {\r\n this.toSelected = dialogBox.componentInstance.toSelected;\r\n this.emailChanged = changed;\r\n }\r\n })\r\n );\r\n }\r\n } else {\r\n this.dialog.open(EnrollmentWarningDialogComponent);\r\n }\r\n }\r\n\r\n addAttachment() {\r\n // POST: shows the add attachments dialog\r\n const dialogBox = this.dialog.open(AddAttachmentsDialogComponent, {\r\n data: {\r\n attachments: this.mailDetail.attachments\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(changed => {\r\n if (changed) {\r\n this.emailChanged = changed;\r\n }\r\n })\r\n );\r\n }\r\n\r\n validate() {\r\n // POST: sets the errors\r\n this.errors = [];\r\n\r\n const mailFormat = System.mailRegexp;\r\n\r\n // The email must have something for content\r\n let attachments = false;\r\n for (let i = 0; i < this.mailDetail.attachments.length; i++) {\r\n if (this.mailDetail.attachments[i].Base64String) {\r\n attachments = true;\r\n break;\r\n }\r\n }\r\n if (attachments) {\r\n let attachmentSize = 0;\r\n for (let j = 0; j < this.mailDetail.attachments.length; j++) {\r\n if (this.mailDetail.attachments[j].Base64String != undefined && this.mailDetail.attachments[j].Base64String != null && this.mailDetail.attachments[j].Base64String != '') {\r\n attachmentSize = attachmentSize + (window.atob(this.mailDetail.attachments[j].Base64String).length / (1024 * 1024));\r\n }\r\n }\r\n if (attachmentSize > 10) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: '',\r\n errorMsg: 'The total size of the files you have attached exceeds the 10 MB limit.'\r\n });\r\n }\r\n }\r\n\r\n if (!this.mailDetail.subject && !this.mailDetail.message && !attachments) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: '',\r\n errorMsg: 'Email has no content, subject, or attachment.'\r\n });\r\n }\r\n\r\n if (this.modal && this.mailDetail.CCMailId) {\r\n let validEmails = true;\r\n\r\n if (!this.mailDetail.CCMailId.match(mailFormat)) {\r\n const splitEmails: string[] = this.mailDetail.CCMailId.split(';');\r\n splitEmails.forEach(email => {\r\n if (!email.match(mailFormat) && email != '') {\r\n validEmails = false;\r\n }\r\n });\r\n }\r\n\r\n if (!validEmails) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: '',\r\n errorMsg: 'Invalid email address(es) in the CC field'\r\n });\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n sendMail() {\r\n // POST: sends the email\r\n\r\n // Removed for ONE-10154 as it was replacing spaces with % on the Mass Email Log page\r\n // // Determining the subject\r\n // const subject = encodeURIComponent(this.mailDetail.subject).replace(/[!'()]/g, escape).replace(/\\*/g, '%2A');\r\n\r\n // Organizing the parameters\r\n const params = new MailParameters();\r\n params.userId = this.currentUser.Id;\r\n params.EmailFrom = this.generalPreferences && this.generalPreferences.EmailFrom.toLowerCase() == 'no reply' ? this.noReplyEmail : this.currentUser.Email;\r\n params.EmailTo = this.mailDetail.toMailId;\r\n params.DisplayEmailToOnComment = 'To: ' + this.mailDetail.toSelectedMailId;\r\n if (this.modal) {\r\n params.DisplayEmailCcOnComment = 'CC: ' + this.mailDetail.CCMailId;\r\n }\r\n else if (this.mailDetail.CCSelectedMailId && this.mailDetail.CCSelectedMailId.length > 0) {\r\n params.DisplayEmailCcOnComment = 'CC: ' + this.mailDetail.CCSelectedMailId;\r\n } else if (this.currentUser.Email) {\r\n params.DisplayEmailCcOnComment = 'CC: ' + this.currentUser.FirstName + ' ' + this.currentUser.LastName + '<' + this.currentUser.Email + '> ';\r\n }\r\n else {\r\n params.DisplayEmailBccOnComment = 'BCC: ' + this.mailDetail.BCCSelectedMailId;\r\n }\r\n if (this.mailDetail.BCCSelectedMailId && this.mailDetail.BCCSelectedMailId.length > 0) {\r\n params.DisplayEmailBccOnComment = 'BCC: ' + this.mailDetail.BCCSelectedMailId;\r\n }\r\n params.EmailToCc = this.mailDetail.CCMailId;\r\n params.EmailToBcc = this.mailDetail.BCCMailId;\r\n params.Subject = this.mailDetail.subject;\r\n params.Body = this.mailDetail.message;\r\n params.HtmlBody = true;\r\n params.AddEmailToParentContactLog = this.createCommLogEntry;\r\n params.PeopleIds = this.mailDetail.peopleIds;\r\n if (this.V10) {\r\n params.ToMemIds = this.toSelections;\r\n params.CCMemIds = this.CCSelections;\r\n params.BCCMemIds = this.BCCSelections;\r\n }\r\n if (this.mailDetail.personCodeMother > 0) {\r\n params.PersonCode = this.mailDetail.personCodeMother;\r\n } else {\r\n params.PersonCode = this.mailDetail.personCodeFather;\r\n }\r\n\r\n // Adding the attachments\r\n params.Attachments = [];\r\n this.mailDetail.attachments.forEach(attachment => {\r\n if (attachment.Base64String) {\r\n params.Attachments.push(attachment);\r\n }\r\n });\r\n\r\n // Sending the email\r\n this.subscriptions.push(\r\n this.sendEmailService.sendEmail(params, 'Single Student', this.modal).subscribe(\r\n (result) => {\r\n if (result) {\r\n this.sharedService.showGoodSnackbar('Email sent');\r\n this.emailChanged = false;\r\n if (this.sharedService.previousUrl && !this.userService.studentInformationView) {\r\n this.router.navigateByUrl(this.sharedService.previousUrl);\r\n }\r\n if (this.modal || this.userService.studentInformationView == true) {\r\n this.dialogRef.close('Email sent.');\r\n }\r\n } else {\r\n this.sharedService.showBadSnackbar('Email failed to send');\r\n }\r\n },\r\n () => {\r\n this.sharedService.showBadSnackbar('Email failed to send');\r\n }\r\n )\r\n );\r\n }\r\n\r\n viewFile = (base64: string, fileType: string, fileName: string) => {\r\n System.viewFileFromBase(base64, fileType, fileName);\r\n }\r\n}\r\n","import { MailParameters } from './mail-paremeters';\r\nimport { Recipient } from './recipient.model';\r\nimport { Observable, BehaviorSubject } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { map } from 'rxjs/operators';\r\nimport { LoginService } from '../login/login.service';\r\n\r\n@Injectable()\r\nexport class SendEmailService {\r\n\r\n // Properties\r\n private _teacherName: string;\r\n private _teacherEmailAddress: string;\r\n allAdvisors = false;\r\n allCounselors = false;\r\n allPrincipals = false;\r\n allSiteAdmin = false;\r\n allDistrictAdmin = false;\r\n allCoTeachers = false;\r\n allNurses = false;\r\n from360Portal = false;\r\n from360Email: string;\r\n subject: string;\r\n\r\n private _recipients: Recipient[] = [];\r\n private observableRecipients = new BehaviorSubject(this._recipients);\r\n observableRecipientsStream$ = this.observableRecipients.asObservable();\r\n\r\n // Class Functions\r\n constructor(\r\n private http: HttpClient,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService\r\n ) {}\r\n\r\n get recipients(): Recipient[] {\r\n return this._recipients;\r\n }\r\n\r\n set recipients(value: Recipient[]) {\r\n this._recipients = value;\r\n this.observableRecipients.next(this._recipients);\r\n }\r\n\r\n get teacherName(): string {\r\n // This makes it so the teacher name can only be obtained once\r\n const name = this._teacherName;\r\n this._teacherName = '';\r\n return name;\r\n }\r\n\r\n set teacherName(value: string) {\r\n this._teacherName = value;\r\n }\r\n\r\n get teacherEmailAddress(): string {\r\n // This makes it so the teacher email address can only be obtained once\r\n const email = this._teacherEmailAddress;\r\n this._teacherEmailAddress = '';\r\n return email;\r\n }\r\n\r\n set teacherEmailAddress(value: string) {\r\n this._teacherEmailAddress = value;\r\n }\r\n\r\n // Methods\r\n getStudentRecipients (viewOption: number): Observable {\r\n // PRE: a view option\r\n // POST: returns the recipients for the view option\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '&yearId=' + this.yearService.defaultYear.Id +\r\n '&siteYearId=' + this.studentService.studentEnrollment.SiteYearId +\r\n '&viewOption=' + viewOption +\r\n '&allAdvisors=' + this.allAdvisors +\r\n '&allCounselors=' + this.allCounselors +\r\n '&allPrincipals=' + this.allPrincipals +\r\n '&allSiteAdmin=' + this.allSiteAdmin +\r\n '&allDistrictAdmin=' + this.allDistrictAdmin +\r\n '&allCoTeachers=' + this.allCoTeachers +\r\n '&allNurses=' + this.allNurses\r\n ;\r\n return this.http.get(System.apiURL.Student + 'GetStudentRecipients' + queryString).pipe(\r\n map(recipients => {\r\n this.recipients = recipients;\r\n return this.recipients;\r\n })\r\n );\r\n }\r\n\r\n sendEmail(parameters: MailParameters, area: string, noStudent: boolean = false, documentIds: string = ''): Observable {\r\n // PRE: a list of parameters for the email and an area to send it from\r\n // POST: sends the email from the server\r\n const schoolId = this.yearService.defaultYear.SchoolID > 0 ? this.yearService.defaultYear.SchoolID : 0;\r\n const studentId = noStudent ? 0 : this.studentService.selectedStudent.Id;\r\n\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id +\r\n '&studentId=' + studentId +\r\n '&schoolId=' + schoolId +\r\n '&area=' + area +\r\n '&documentIds=' + documentIds;\r\n return this.http.post(System.apiURL.Student + 'SendEmail' + queryString, parameters);\r\n }\r\n}\r\n","export class StudentAttachment {\r\n DocumentId: number;\r\n DocumentName: string;\r\n DocumentBase64: string;\r\n DocumentMimeType: string;\r\n DocumentModuleName: string;\r\n ReportParameters = [];\r\n ReportType: number;\r\n}\r\n","import { System } from '../../shared-components/System';\r\n\r\nexport enum StudentHealthInfoTabsIndex {\r\n HealthConditions,\r\n Restrictions,\r\n Practitioners,\r\n Insurance,\r\n Pregnancy\r\n}\r\n\r\nexport enum StudentHealthChartTabsIndex {\r\n HealthVisits,\r\n Immunizations,\r\n Medications,\r\n Screenings\r\n}\r\n\r\nexport class HealthCondition {\r\n Id: number;\r\n GradeLevelId: number;\r\n DateConditionStart: Date;\r\n DateConditionEnd: Date;\r\n HealthConditionCodeId: number;\r\n DateHomeTeachingStart: Date;\r\n DateHomeTeachingEnd: Date;\r\n GenerateAlert: boolean;\r\n NonNurseViewable: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n DateReferralReturn: Date;\r\n UnderDoctorsCare: boolean;\r\n Comment: string;\r\n GradeLevelCode: string;\r\n GradeLevelDescription: string;\r\n HealthConditionCode: string;\r\n HealthConditionDescription: string;\r\n HealthConditionCodeDesc: string;\r\n SiteCode: string;\r\n YearCode: string;\r\n Notes: string;\r\n Attachment: boolean;\r\n ShowAccessingStudentHealth: boolean;\r\n AcuteCondition: boolean;\r\n ChronicCondition: boolean;\r\n HealthConditionAttachments: HealthConditionAttachment[] = [];\r\n\r\n // non DTO fields\r\n NonNurseViewableValue: string;\r\n GenerateAlertValue: string;\r\n}\r\n\r\nexport class HealthConditionAttachment {\r\n DocumentId: number;\r\n HealthConditionId: number;\r\n Description: string;\r\n FileName: string;\r\n FileMimeType: string;\r\n AttachmentAddedOn: string;\r\n AttachmentAddedBy: string;\r\n Deleted: boolean;\r\n DocumentBase64: string;\r\n\r\n // Non DTO Filed\r\n MyFileBase64String: string;\r\n FileType: string;\r\n}\r\n\r\nexport class HealthConditionCode {\r\n Id: number;\r\n SequenceNo: number;\r\n Code: string;\r\n Description: string;\r\n ShowAlert: boolean;\r\n ViewableByNonNurse: boolean;\r\n ShowAccessingStudentHealth: boolean;\r\n InActive: boolean;\r\n}\r\n\r\nexport class Pregnancy {\r\n Id: number;\r\n StudentId: number;\r\n SiteId: number;\r\n YearId: number;\r\n DateOfTest: Date;\r\n DateExpecting: Date;\r\n DateOfDeliveryOrTermination: Date;\r\n DateHomeTeachingStart: Date;\r\n DateHomeTeachingEnd: Date;\r\n ClinicName: string;\r\n HospitalName: string;\r\n GradeLevelCode: string;\r\n DeliveryResultCode: string;\r\n DeliveryResultId: number;\r\n Comment: string;\r\n GradeLevelDescription: string;\r\n SiteCode: string;\r\n YearCode: string;\r\n Attachment: boolean;\r\n PregnancyAttachments: PregnancyAttachment[] = [];\r\n\r\n // Non DTO Filed\r\n tempDeliveryResultId: string;\r\n}\r\n\r\n\r\nexport class PregnancyAttachment {\r\n DocumentId: number;\r\n PregnancyId: number;\r\n Description: string;\r\n FileName: string;\r\n FileMimeType: string;\r\n AttachmentAddedOn: string;\r\n AttachmentAddedBy: string;\r\n Deleted: boolean;\r\n DocumentBase64: string;\r\n\r\n // Non DTO Filed\r\n MyFileBase64String: string;\r\n FileType: string;\r\n}\r\n\r\nexport class HealthRestriction {\r\n Id: number;\r\n GradeLevelId: number;\r\n DateRestrictionStart: Date;\r\n DateRestrictionEnd: Date;\r\n Period: string;\r\n GenerateAlert: boolean;\r\n NonNurseViewableAlert: boolean;\r\n ShowOnStudentHealth: boolean;\r\n Practioner: string;\r\n PractionerId: number;\r\n UnderDoctorsCare: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n DateReferralReturn: Date;\r\n Comment: string;\r\n GradeLevelCode: string;\r\n GradeLevelDescription: string;\r\n SiteCode: string;\r\n YearCode: string;\r\n Notes: string;\r\n Attachment: boolean;\r\n HealthRestrictionAttachments: RestrictionAttachment[] = [];\r\n\r\n // Non DTO Filed\r\n tempPractionerId: string;\r\n NonNurseViewableValue: string;\r\n GenerateAlertValue: string;\r\n}\r\n\r\nexport class RestrictionAttachment {\r\n DocumentId: number;\r\n RestrictionId: number;\r\n Description: string;\r\n FileName: string;\r\n FileMimeType: string;\r\n AttachmentAddedOn: string;\r\n AttachmentAddedBy: string;\r\n Deleted: boolean;\r\n DocumentBase64: string;\r\n\r\n // Non DTO Filed\r\n MyFileBase64String: string;\r\n FileType: string;\r\n}\r\n\r\nexport class PractitionersAndInsurances {\r\n Id: number;\r\n PractitionerType: string;\r\n PhysicianName: string;\r\n PractitionerNameOrPolicy: string;\r\n Policy: string;\r\n Primary: string;\r\n Phone: string;\r\n DateStart: Date;\r\n DateEnd: Date;\r\n Comment: string;\r\n Address: string;\r\n Email: string;\r\n ExchangePhone: string;\r\n PractitionerTypeId: number;\r\n PhysiciansCode: string;\r\n Attachment: boolean;\r\n PhysiciansAttachments: PhysiciansAttachment[] = [];\r\n\r\n // Non DTO Filed\r\n tempPractitionerTypeId: string;\r\n}\r\n\r\nexport class PhysiciansAttachment {\r\n DocumentId: number;\r\n PhysiciansId: number;\r\n Description: string;\r\n FileName: string;\r\n FileMimeType: string;\r\n AttachmentAddedOn: string;\r\n AttachmentAddedBy: string;\r\n Deleted: boolean;\r\n DocumentBase64: string;\r\n\r\n // Non DTO Filed\r\n MyFileBase64String: string;\r\n FileType: string;\r\n}\r\n\r\nexport class HealthVisit {\r\n Id: number;\r\n DateOfVisit: Date;\r\n TimeIn: string;\r\n TimeOut: string;\r\n Reason: string;\r\n ReasonDescription: string;\r\n Action: string;\r\n SentTo: string;\r\n TreatedBy: string;\r\n Medication: string;\r\n SiteCode: string;\r\n Deleted: boolean;\r\n YearId: number;\r\n MedicationId: string;\r\n DOHSurveillanceId: number;\r\n CallMadeTo: string;\r\n InjuryMajor: boolean;\r\n InjuryMinor: boolean;\r\n Referral: boolean;\r\n Report: boolean;\r\n Illness: boolean;\r\n EMSCall: boolean;\r\n Treated: boolean;\r\n NoticeSent: boolean;\r\n AEDUsed: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n Temperature: number;\r\n ICD9: string;\r\n EvaluationOfClinicVisit: string;\r\n Comments: string;\r\n Glucose: string;\r\n Units: string;\r\n Carb: string;\r\n BloodPressure: string;\r\n OnDutyUserId: number;\r\n SelectedCodeTreatmentIds: string;\r\n DateReferralReturned: Date;\r\n ClinicVisitLogCodeId: number;\r\n LastUpdatedByUserName: string;\r\n LastUpdatedDate: Date;\r\n NatureOfInjuryId: number;\r\n TimePeriodOfInjuryId: number;\r\n LocationOfInjuryId: number;\r\n Pulse: string;\r\n Respiration: string;\r\n SpO2: string;\r\n SentId: number;\r\n PeriodsExcused: string;\r\n ClinicVisitNoShowId: number;\r\n ClinicTreatmentIds: number[] = [];\r\n ClinicLogMedications: HealthVisitMedications[];\r\n // Non DTO Field //\r\n TreatmentIds: string[] = [];\r\n filterActionTakens: string;\r\n filteredMedications: string;\r\n IsTodaysLog: boolean;\r\n AllowEdit: boolean;\r\n}\r\n\r\nexport class StudentHealthNotes {\r\n StudentId: number;\r\n MedicalConditionNote: string;\r\n RestrictionNote: string;\r\n PractitionerNote: string;\r\n InsuranceNote: string;\r\n PregnancyNote: string;\r\n HealthVisitNote: string;\r\n ImmunizationNote: string;\r\n MedicationNote: string;\r\n ScreeningNote: string;\r\n RecordStatus: string;\r\n Note: string;\r\n}\r\n\r\nexport class HealthVisitMedications {\r\n Id: number;\r\n ClinicLogMedicationId: number;\r\n MedicationCodeId: number;\r\n RouteId: number;\r\n Selected: boolean;\r\n Code: string;\r\n Description: string;\r\n Dose: string;\r\n Route: string;\r\n Frequency: string;\r\n DispenceTime: string;\r\n Comments: string;\r\n ScheduledFrequencyId: number;\r\n ScheduledDispenseTime: string;\r\n ScheduledDose: string;\r\n ScheduledRouteId: number;\r\n ParentPermissionToDispense: boolean;\r\n DocPermissionToDispense: boolean;\r\n ScheduledDoseOrder: string;\r\n ScheduledFrequency: string;\r\n ScheduledRoute: string;\r\n MedicationStartDate: Date;\r\n MedicationEndDate: Date;\r\n Administered: string;\r\n // Non DTO Field //\r\n Deleted: boolean;\r\n}\r\n\r\nexport class HearingScreening {\r\n Id: number;\r\n YearId: number;\r\n ScreeningName: string;\r\n ScreeningSeries: string;\r\n ScreenedOn = new Date(System.junkDateString);\r\n Results: string;\r\n Referred: boolean;\r\n ReferredStatus: string;\r\n Comments: string;\r\n StudentId: number;\r\n ScreeningNameId: number;\r\n ScreeningSeriesId: number;\r\n ScreeningReasonId: number;\r\n ScreeningResultsId: number;\r\n ScreenedById: number;\r\n LastUpdatedByUserName: string;\r\n Right2501Hz: string;\r\n Right5001Hz: string;\r\n Right10001Hz: string;\r\n Right20001Hz: string;\r\n Right40001Hz: string;\r\n Right80001Hz: string;\r\n Left2501Hz: string;\r\n Left5001Hz: string;\r\n Left10001Hz: string;\r\n Left20001Hz: string;\r\n Left40001Hz: string;\r\n Left80001Hz: string;\r\n HasAssistHearingDevice: boolean;\r\n UnderDoctorsCare: boolean;\r\n UsedAtScreening: boolean;\r\n FollowUpDate = new Date(System.junkDateString);\r\n ParentContact: string;\r\n ParentContactId: number;\r\n ScreeningResults: string;\r\n ScreeningReason: string;\r\n RightEarTestCode: string;\r\n RightEarTestDescription: string;\r\n LeftEarTestCode: string;\r\n LeftEarTestDescription: string;\r\n ReferredDate = new Date(System.junkDateString);\r\n AudiologistReferralId: number;\r\n TreatmentReportSent: boolean;\r\n TreatmentReportReceived: string;\r\n DateInitiated = new Date(System.junkDateString);\r\n DateOfExam = new Date(System.junkDateString);\r\n DateReportReceived = new Date(System.junkDateString);\r\n ReferredStatusId: number;\r\n DiagnosisId: number;\r\n TreatmentId: number;\r\n AudiologistRecommendations: string;\r\n DiagnosisDate = new Date(System.junkDateString);\r\n ReferralReturned: boolean;\r\n ReferralReturnDate = new Date(System.junkDateString);\r\n RightEardB: number;\r\n RightEarHz: number;\r\n LeftEardB: number;\r\n LeftEarHz: number;\r\n AudiogramDate1 = new Date(System.junkDateString);\r\n NextAudiogramDue = new Date(System.junkDateString);\r\n WatchList: boolean;\r\n SignerUsed: boolean;\r\n PureToneAvgRight1: string;\r\n PureToneAvgLeft1: string;\r\n MeetsCriteriaReferralId: number;\r\n MonitorAudiogram1Id: number;\r\n ScheduleOn = new Date(System.junkDateString);\r\n ScreenedBy: string;\r\n EnteredBy: string;\r\n EnteredById: number;\r\n LastUpdatedOn = new Date(System.junkDateString);\r\n StudentFirstName: string;\r\n StudentLastName: string;\r\n StudentMiddleName: string;\r\n StudentNumber: string;\r\n Gender: string;\r\n Grade: string;\r\n SchoolName: string;\r\n SchoolCode: string;\r\n ClassroomScreeningTool: boolean;\r\n MedicalReferralNotCompleted: boolean;\r\n CommunicationAccommodations: boolean;\r\n\r\n AudiogramDate2 = new Date(System.junkDateString);\r\n MonitorAudiogram2Id: number;\r\n Right2502Hz: string;\r\n Right5002Hz: string;\r\n Right10002Hz: string;\r\n Right20002Hz: string;\r\n Right40002Hz: string;\r\n Right80002Hz: string;\r\n Left2502Hz: string;\r\n Left5002Hz: string;\r\n Left10002Hz: string;\r\n Left20002Hz: string;\r\n Left40002Hz: string;\r\n Left80002Hz: string;\r\n PureToneAvgRight2: string;\r\n PureToneAvgLeft2: string;\r\n HearingAidWorn: boolean;\r\n ScreeningRightId: number;\r\n ScreeningLeftId: number;\r\n ReScreeningRightId: number;\r\n ReScreeningLeftId: number;\r\n\r\n ScreeningDiagnosis: string;\r\n ScreeningTreatment: string;\r\n StudentName: string;\r\n\r\n MonitorAudiogram1: string;\r\n MonitorAudiogram2: string;\r\n ScreeningRight: string;\r\n ScreeningLeft: string;\r\n ReScreeningRight: string;\r\n ReScreeningLeft: string;\r\n MeetsCriteriaForReferral: string;\r\n AudiologistReferrelIndicated: string;\r\n ReferralDiagnosisId: number;\r\n ReferralTreatmentId: number;\r\n ReferralDiagnosis: string;\r\n ReferralTreatment: string;\r\n SensitivityResultRight1Id: number;\r\n SensitivityResultLeft1Id: number;\r\n SensitivityResultRight2Id: number;\r\n SensitivityResultLeft2Id: number;\r\n EnteredOn = new Date(System.junkDateString);\r\n RightEardB2: number;\r\n RightEarHz2: number;\r\n LeftEardB2: number;\r\n LeftEarHz2: number;\r\n // Non DTO\r\n\r\n get kendoSelectBy() {\r\n return this.Id;\r\n }\r\n}\r\nexport class ScreeningNames {\r\n ID: number;\r\n Code: string;\r\n Description: string;\r\n ScreeningTypeID: number;\r\n Inactive: boolean;\r\n}\r\nexport class ScreeningSeries {\r\n ID: number;\r\n Code: string;\r\n Description: string;\r\n ScreeningTypeID: number;\r\n ScreeningNameID: number;\r\n Inactive: boolean;\r\n}\r\n\r\nexport class ExistScreeningsRecord {\r\n ScreeningId: number;\r\n StudentId: number;\r\n StudentName: string;\r\n}\r\n\r\nexport class SpinalScreening {\r\n Id: number;\r\n YearId: number;\r\n ScreeningName: string;\r\n ScreeningSeries: string;\r\n ScreenedOn = new Date(System.junkDateString);\r\n Results: string;\r\n ScreeningResultsId: number;\r\n ScreenedBy: string;\r\n ScreenedById: number;\r\n EnteredBy: string;\r\n EnteredById: number;\r\n EnteredOn = new Date(System.junkDateString);\r\n ContinueObservation: string;\r\n ContinueObservationId: number;\r\n ParentContact: string;\r\n ParentContactId: number;\r\n UnderDoctorsCare: boolean;\r\n FollowUpDate = new Date(System.junkDateString);\r\n Comments: string;\r\n Referred: boolean;\r\n ReferredDate = new Date(System.junkDateString);\r\n ReferredStatus: string;\r\n ReferredStatusId: number;\r\n ReferralReturnDate = new Date(System.junkDateString);\r\n ReferralReturned: boolean;\r\n ScreeningNameId: number;\r\n ScreeningSeriesId: number;\r\n ReferralDiagnosis: string;\r\n ReferralDiagnosisId: number;\r\n ReferralTreatment: string;\r\n ReferralTreatmentId: number;\r\n DiagnosisTreatmentDate = new Date(System.junkDateString);\r\n LastUpdatedByUserName: string;\r\n LastUpdatedOn = new Date(System.junkDateString);\r\n StudentFirstName: string;\r\n StudentLastName: string;\r\n StudentMiddleName: string;\r\n StudentNumber: string;\r\n Gender: string;\r\n Grade: string;\r\n SchoolName: string;\r\n SchoolCode: string;\r\n StudentName: string;\r\n StudentId: number;\r\n // Non DTO\r\n get kendoSelectBy() {\r\n return this.Id;\r\n }\r\n}\r\n\r\nexport class PhysicalScreening {\r\n Id: number;\r\n YearId: number;\r\n ScreeningName: string;\r\n ScreeningSeries: string;\r\n ScreenedOn = new Date(System.junkDateString);\r\n Results: string;\r\n ScreeningNameId: number;\r\n ScreeningSeriesId: number;\r\n ScreeningResultsId: number;\r\n ScreenedBy: string;\r\n ScreenedById: number;\r\n EnteredBy: string;\r\n EnteredById: number;\r\n ExaminedBy: string;\r\n ExaminedById: number;\r\n SportsScreening: string;\r\n SportsScreeningId: number;\r\n Comments: string;\r\n Referred: boolean;\r\n ReferredDate = new Date(System.junkDateString);\r\n ReferredStatus: string;\r\n ReferredStatusId: number;\r\n ReferralReturnDate = new Date(System.junkDateString);\r\n ReferralReturned: boolean;\r\n ReferralDiagnosis: string;\r\n ReferralDiagnosisId: number;\r\n ReferralTreatment: string;\r\n ReferralTreatmentId: number;\r\n DiagnosisTreatmentDate = new Date(System.junkDateString);\r\n HeightinFeet: number;\r\n HeightinInches: number;\r\n HeightPercentile: number;\r\n Weight: number;\r\n WeightPercentile: number;\r\n BloodPresure: string;\r\n LeadBloodTest: string;\r\n BodyMaxIndex: number;\r\n BodyMaxIndexPercentile: number;\r\n DiabAtRisk: boolean;\r\n DiabEthnicMin: boolean;\r\n DiabFamilyHist: boolean;\r\n DiabInsulinRes: boolean;\r\n ExamComplete: boolean;\r\n DoctorDidExam: boolean;\r\n ClinicDidExam: boolean;\r\n LastUpdatedByUserName: string;\r\n LastUpdatedOn = new Date(System.junkDateString);\r\n StudentFirstName: string;\r\n StudentLastName: string;\r\n StudentMiddleName: string;\r\n StudentNumber: string;\r\n Gender: string;\r\n Grade: string;\r\n SchoolName: string;\r\n SchoolCode: string;\r\n StudentName: string;\r\n StudentId: number;\r\n EnteredOn = new Date(System.junkDateString);\r\n\r\n get kendoSelectBy() {\r\n return this.Id;\r\n }\r\n}\r\n\r\nexport class StateRequiredHearingFields {\r\n Str250Hz: boolean;\r\n Str500Hz: boolean;\r\n Str1000Hz: boolean;\r\n Str2000Hz: boolean;\r\n Str4000Hz: boolean;\r\n Str8000Hz: boolean;\r\n StrDB: boolean;\r\n StrHz: boolean;\r\n}\r\n\r\nexport class DentalScreening {\r\n Id: number;\r\n YearId: number;\r\n ScreeningName: string;\r\n ScreeningSeries: string;\r\n ScreenedOn = new Date(System.junkDateString);\r\n Results: string;\r\n ScreeningResultsId: number;\r\n ScreenedBy: string;\r\n ScreenedById: number;\r\n EnteredBy: string;\r\n EnteredById: number;\r\n EnteredOn = new Date(System.junkDateString);\r\n UnderDoctorsCare: boolean;\r\n Comments: string;\r\n Referred: boolean;\r\n ReferredDate = new Date(System.junkDateString);\r\n ReferredStatus: string;\r\n ReferredStatusId: number;\r\n ReferralReturnDate = new Date(System.junkDateString);\r\n ReferralReturned: boolean;\r\n ScreeningNameId: number;\r\n ScreeningSeriesId: number;\r\n ReferralDiagnosis: string;\r\n ReferralDiagnosisId: number;\r\n ReferralTreatment: string;\r\n ReferralTreatmentId: number;\r\n DiagnosisTreatmentDate = new Date(System.junkDateString);\r\n LastUpdatedByUserName: string;\r\n LastUpdatedOn = new Date(System.junkDateString);\r\n StudentFirstName: string;\r\n StudentLastName: string;\r\n StudentMiddleName: string;\r\n StudentNumber: string;\r\n Gender: string;\r\n Grade: string;\r\n SchoolName: string;\r\n SchoolCode: string;\r\n StudentName: string;\r\n StudentId: number;\r\n ExaminedById: number;\r\n ExaminedBy: string;\r\n WaiverCode: string;\r\n Waiver: string;\r\n ExemptCode: string;\r\n Exempt: string;\r\n FluorideProgramId: number;\r\n FluorideProgram: string;\r\n CariesExperience: boolean;\r\n CariesUntreated: boolean;\r\n Malocclusion: boolean;\r\n SoftTissuePathology: boolean;\r\n Sealant: boolean;\r\n NoConcerns: boolean;\r\n Cavity: boolean;\r\n Gums: boolean;\r\n MissingTooth: boolean;\r\n OtherConcern: boolean;\r\n Cleaning: boolean;\r\n Fluoride: boolean;\r\n PreventiveCare: boolean;\r\n RestorativeCare: boolean;\r\n UrgentTreatment: boolean;\r\n // Non DTO\r\n get kendoSelectBy() {\r\n return this.Id;\r\n }\r\n}\r\n\r\nexport class VisionScreening {\r\n Id: number;\r\n YearId: number;\r\n ScreeningName: string;\r\n ScreeningSeries: string;\r\n ScreenedOn = new Date(System.junkDateString);\r\n Results: string;\r\n ScreeningResultsId: number;\r\n ScreenedBy: string;\r\n ScreenedById: number;\r\n EnteredBy: string;\r\n EnteredById: number;\r\n EnteredOn = new Date(System.junkDateString);\r\n UnderDoctorsCare: boolean;\r\n Comments: string;\r\n WearsContacts: boolean;\r\n WearsGlasses: boolean;\r\n GlassesDuringScreening: string;\r\n GlassesDuringScreeningId: number;\r\n ComprehensiveEyeExam: string;\r\n VisionTest: string;\r\n VisionTestId: number;\r\n AutoScreeningDeviceUsed: boolean;\r\n LPhoria: string;\r\n LPhoriaId: number;\r\n VPhoria: string;\r\n VPhoriaId: number;\r\n Hyperopia: string;\r\n HyperopiaId: number;\r\n Myopia: string;\r\n MyopiaId: number;\r\n Strabismus: string;\r\n StrabismusId: number;\r\n InternalEyeHealth: string;\r\n InternalEyeHealthId: number;\r\n ExternalEyeHealth: string;\r\n ExternalEyeHealthId: number;\r\n MuscularBalanceFar: string;\r\n MuscularBalanceFarId: number;\r\n MuscularBalanceNear: string;\r\n MuscularBalanceNearId: number;\r\n BinocularFar: string;\r\n BinocularFarId: number;\r\n BinocularNear: string;\r\n BinocularNearId: number;\r\n AcuityFarBinocular: string;\r\n AcuityFarRight: string;\r\n AcuityFarLeft: string;\r\n AcuityFarBestCorrectedRight: string;\r\n AcuityFarBestCorrectedLeft: string;\r\n AcuityNearBinocular: string;\r\n AcuityNearRight: string;\r\n AcuityNearLeft: string;\r\n AcuityNearBestCorrectedRight: string;\r\n AcuityNearBestCorrectedLeft: string;\r\n AcuityBinocularCorrected: string;\r\n VisualAcuity: string;\r\n VisualAcuityId: number;\r\n RefractionLeft: string;\r\n ConvexLens: string;\r\n ConvexLensId: number;\r\n DepthPerception: string;\r\n DepthPerceptionId: number;\r\n MedicalDiagnosis: string;\r\n MedicalDiagnosisId: number;\r\n CorrectiveLensesPrescribed: string;\r\n CorrectiveLensesPrescribedId: number;\r\n Examiner: string;\r\n OutsideProvider: string;\r\n Equipment: string;\r\n Payer: string;\r\n PayerId: number;\r\n ParentContactMethod: string;\r\n FollowupDate: Date;\r\n Referred: boolean;\r\n ReferredDate = new Date(System.junkDateString);\r\n ReferredStatus: string;\r\n ReferredStatusId: number;\r\n ReferralReturnDate = new Date(System.junkDateString);\r\n ReferralReturned: boolean;\r\n ScreeningNameId: number;\r\n ScreeningSeriesId: number;\r\n ReferralDiagnosis: string;\r\n ReferralDiagnosisId: number;\r\n ReferralTreatment: string;\r\n ReferralTreatmentId: number;\r\n DiagnosisTreatmentDate = new Date(System.junkDateString);\r\n ReferralIndicated: string;\r\n GlassesReferral: string;\r\n ReferralNotReturned: boolean;\r\n LastUpdatedByUserName: string;\r\n LastUpdatedOn = new Date(System.junkDateString);\r\n StudentFirstName: string;\r\n StudentLastName: string;\r\n StudentMiddleName: string;\r\n StudentNumber: string;\r\n Gender: string;\r\n Grade: string;\r\n SchoolName: string;\r\n SchoolCode: string;\r\n StudentName: string;\r\n StudentId: number;\r\n ColorVision: string;\r\n ColorVisionId: number;\r\n WNL: string;\r\n ONL: string;\r\n Amblyopia: string;\r\n AmblyopiaId: number;\r\n RefractionRight: string;\r\n\r\n // IL Specific\r\n PreschoolRightEye: string;\r\n PreschoolRightEyeId: number;\r\n PreschoolLeftEye: string;\r\n PreschoolLeftEyeId: number;\r\n PreschoolUnabletoTest: string;\r\n ElementaryVisualAcuityRight: string;\r\n ElementaryVisualAcuityRightId: number;\r\n ElementaryVisualAcuityLeft: string;\r\n ElementaryVisualAcuityLeftId: number;\r\n ElementaryColorVision: string;\r\n ElementaryPlusLensRight: string;\r\n ElementaryPlusLensRightId: number;\r\n ElementaryPlusLensLeft: string;\r\n ElementaryPlusLensLeftId: number;\r\n ElementaryUnabletoTest: string;\r\n ElementaryGlassesRepairNeeded: string;\r\n SecondaryAcuityFarRight: string;\r\n SecondaryAcuityFarRightId: number;\r\n SecondaryAcuityFarLeft: string;\r\n SecondaryAcuityFarLeftId: number;\r\n SecondaryAcuityFarBoth: string;\r\n SecondaryAcuityFarBothId: number;\r\n SecondaryAcuityNearRight: string;\r\n SecondaryAcuityNearRightId: number;\r\n SecondaryAcuityNearLeft: string;\r\n SecondaryAcuityNearLeftId: number;\r\n SecondaryAcuityNearBoth: string;\r\n SecondaryAcuityNearBothId: number;\r\n SecondaryUnabletoTest: string;\r\n RescreeningDate: Date;\r\n RescreenedPreschoolRightEye: string;\r\n RescreenedPreschoolRightEyeId: number;\r\n RescreenedPreschoolLeftEye: string;\r\n RescreenedPreschoolLeftEyeId: number;\r\n RescreenedElementaryMuscleBalanceNear: string;\r\n RescreenedElementaryMuscleBalanceNearId: number;\r\n RescreenedElementaryMuscleBalanceFar: string;\r\n RescreenedElementaryMuscleBalanceFarId: number;\r\n RescreenedElementaryVisualAcuityRight: string;\r\n RescreenedElementaryVisualAcuityRightId: number;\r\n RescreenedElementaryVisualAcuityLeft: string;\r\n RescreenedElementaryVisualAcuityLeftId: number;\r\n RescreenedElementaryColorVision: string;\r\n RescreenedElementaryPlusLensLeft: string;\r\n RescreenedElementaryPlusLensLeftId: number;\r\n RescreenedElementaryPlusLensRight: string;\r\n RescreenedElementaryPlusLensRightId: number;\r\n RescreenedElementaryUnabletoTest: string;\r\n RescreenedElementaryGlassesRepairNeeded: string;\r\n RescreenedSecondaryAcuityFarRight: string;\r\n RescreenedSecondaryAcuityFarRightId: number;\r\n RescreenedSecondaryAcuityFarLeft: string;\r\n RescreenedSecondaryAcuityFarLeftId: number;\r\n RescreenedSecondaryAcuityFarBoth: string;\r\n RescreenedSecondaryAcuityFarBothId: number;\r\n RescreenedSecondaryAcuityNearRight: string;\r\n RescreenedSecondaryAcuityNearRightId: number;\r\n RescreenedSecondaryAcuityNearLeft: string;\r\n RescreenedSecondaryAcuityNearLeftId: number;\r\n RescreenedSecondaryAcuityNearBoth: string;\r\n RescreenedSecondaryAcuityNearBothId: number;\r\n RescreeningResults: string;\r\n RescreeningResultsId: number;\r\n LastEyeExamDate: Date;\r\n VisionExamDate: Date;\r\n StudentStatus: string;\r\n Pathology: string;\r\n MuscleBalanceIssue: string;\r\n AmblyopiaIL: string;\r\n ContactsPrescribed: string;\r\n GlassesPrescribed: string;\r\n UnderDoctorsCareIL: string;\r\n PreferentialSeating: string;\r\n ReExamDate: Date;\r\n ExternalEyeHealthIL: string;\r\n InternalEyeHealthIL: string;\r\n PupillaryReflex: string;\r\n BinocularFunction: string;\r\n AccommodationVergence: string;\r\n GlaucomaEvaluation: string;\r\n OculomotorAssessment: string;\r\n // Non DTO\r\n get kendoSelectBy() {\r\n return this.Id;\r\n }\r\n\r\n}\r\n\r\nexport class ImmunizationExemptions {\r\n Vaccine: string;\r\n Exemption: string;\r\n ExemptionDate: string;\r\n}\r\n\r\nexport class Vaccine {\r\n Id: number;\r\n Exempt: string;\r\n ExemptId: number;\r\n VaccineId: number;\r\n Vaccine: string;\r\n Date1: Date;\r\n Date2: Date;\r\n Date3: Date;\r\n Date4: Date;\r\n Date5: Date;\r\n Date6: Date;\r\n Date7: Date;\r\n Date8: Date;\r\n Date9: Date;\r\n Date10: Date;\r\n ExemptDate: Date;\r\n\r\n constructor(initDates?: boolean) {\r\n if (initDates == true) {\r\n this.Date1 = new Date(System.junkDateString);\r\n this.Date2 = new Date(System.junkDateString);\r\n this.Date3 = new Date(System.junkDateString);\r\n this.Date4 = new Date(System.junkDateString);\r\n this.Date5 = new Date(System.junkDateString);\r\n this.Date6 = new Date(System.junkDateString);\r\n this.Date7 = new Date(System.junkDateString);\r\n this.Date8 = new Date(System.junkDateString);\r\n this.Date9 = new Date(System.junkDateString);\r\n this.Date10 = new Date(System.junkDateString);\r\n }\r\n\r\n }\r\n}\r\n\r\nexport class HealthVisitSearchParam {\r\n FromDate: Date;\r\n ToDate: Date;\r\n IsStaff: boolean;\r\n IsStudent: boolean;\r\n ShowDeleted: boolean;\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DentalScreening, HealthCondition, HealthConditionAttachment, HealthConditionCode, HealthRestriction, HealthVisit, HealthVisitMedications, HealthVisitSearchParam, HearingScreening, ImmunizationExemptions, PhysicalScreening, PhysiciansAttachment, PractitionersAndInsurances, Pregnancy, PregnancyAttachment, RestrictionAttachment, SpinalScreening, StudentHealthNotes, Vaccine, VisionScreening } from './student-health-shared.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { Observable } from 'rxjs';\r\nimport { CustomizationFrameworkService } from '../customization-framework/customization-framework.service';\r\nimport { DataDefinition } from '../../admin360/data-definition/data-definition.model';\r\nimport { MedicationToday } from '../../health360/medications-today/medications-today.model';\r\nimport { map, take } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StudentHealthSharedService {\r\n\r\n healthVisitSearchParam: HealthVisitSearchParam;\r\n constructor(\r\n private http: HttpClient,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n ) { }\r\n\r\n getHealthConditionReadByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthConditionReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n deleteHealthConditionById(healthConditionId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteHealthConditionById?healthConditionId=${healthConditionId}`);\r\n }\r\n getPregnancyReadByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetPregnancyReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n deletePregnancyById(pregnancyId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeletePregnancyById?pregnancyId=${pregnancyId}`);\r\n }\r\n\r\n getLookUpValuesByEnum(enum_value: string, yearId: number, siteYearId: number, masterId: number): Observable {\r\n return this.customizationFrameworkService.getDataDefinition(enum_value, yearId, siteYearId, masterId);\r\n }\r\n\r\n getHealthConditionCode(siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `HealthConditionCodes?siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n saveHealthConditions(studentId: number, siteYearId: number, healthCondition: HealthCondition): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Health + 'SaveHealthConditions' + queryString, healthCondition);\r\n }\r\n\r\n savePregnancy(studentId: number, siterYearId: number, data: Pregnancy): Observable {\r\n return this.http.post(System.apiURL.Health + `SavePregnancy?studentId=${studentId}&siterYearId=${siterYearId}`, data);\r\n }\r\n\r\n getHealthRestrictionReadByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthRestrictionByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n saveHealthRestriction(studentId: number, siteYearId: number, healthRestriction: HealthRestriction): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Health + 'SaveHealthRestriction' + queryString, healthRestriction);\r\n }\r\n\r\n getHealthRestrictionAttachementsById(healthRestrictionId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthRestrictionAttachementsById?healthRestrictionId=${healthRestrictionId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n deleteHealthRestrictionById(healthRestrictionId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteHealthRestrictionById?restrictionId=${healthRestrictionId}`);\r\n }\r\n\r\n getHealthConditionAttachementsById(healthConditionId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthConditionAttachementsById?healthConditionId=${healthConditionId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n getPregnancyAttachementsById(pregnancyId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetPregnancyAttachementsById?pregnancyId=${pregnancyId}`);\r\n }\r\n\r\n getPractitionersAndInsuranceReadByStudentId(studentId: number, siteId: number, yearId: number, type: string): Observable {\r\n return this.http.get(System.apiURL.Health + `GetPractitionersAndInsuranceReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}&type=${type}`);\r\n }\r\n\r\n deletePractitionerAndInsuranceById(practitionerId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeletePractitionerAndInsuranceById?practitionerId=${practitionerId}`);\r\n }\r\n\r\n getHealthConditionReadByStudentIdForAlert(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthConditionReadByStudentIdForAlert?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n getHealthRestrictionReadByStudentIdForAlert(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthRestrictionByStudentIdForAlert?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n getHealthVisitsReadByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthVisitsReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n deleteHealthVisitById(healthVisitId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteHealthVisitById?healthVisitId=${healthVisitId}`);\r\n }\r\n\r\n // Save Insurance\r\n savePractitionersAndInsurances(studentId: number, healthInsuranceData: PractitionersAndInsurances): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.post(System.apiURL.Health + 'SavePractitionersAndInsurances' + queryString, healthInsuranceData);\r\n }\r\n\r\n getPhysiciansAttachementsById(physiciansId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetPhysiciansAttachementsById?physiciansId=${physiciansId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n getStudentHealthNotes(studentId: number, type: string): Observable {\r\n return this.http.get(System.apiURL.Health + `GetStudentHealthNotes?studentId=${studentId}&type=${type}`);\r\n }\r\n\r\n saveHealthNotes(noteType: string, data: StudentHealthNotes): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveStudentHealthNotes?noteType=${noteType}`, data);\r\n }\r\n\r\n saveHealthVisit(studentId: number, siterYearId: number, data: HealthVisit): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveHealthVisit?studentId=${studentId}&siterYearId=${siterYearId}`, data);\r\n }\r\n\r\n getHealthVisitMedicationsReadByStudentId(studentId: number, siteYearId: number, clinicLogId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHealthVisitMedicationsReadByStudentId?studentId=${studentId}&siteYearId=${siteYearId}&clinicLogId=${clinicLogId}`);\r\n }\r\n\r\n getMedicalMedicationReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetMedicalMedicationReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`);\r\n }\r\n\r\n deleteMedicationById(medicationId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteMedicationById?medicationId=${medicationId}`);\r\n }\r\n\r\n getMedicationDoseReadByStudentId(studentId: number, siteYearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetMedicationDoseReadByStudentId?studentId=${studentId}&siteYearId=${siteYearId}`);\r\n }\r\n\r\n getMedicationDoseHistory(siteYearId: number, studentId: number, medicationId: number, fromDate: string, toDate: string): Observable {\r\n const queryString = '?siteYearId=' + siteYearId + '&studentId=' + studentId + '&medicationId=' + medicationId\r\n + '&fromDate=' + fromDate + '&toDate=' + toDate\r\n ;\r\n return this.http.get(System.apiURL.Health + 'GetMedicationDoseHistoryReadByFromDateToDate' + queryString);\r\n }\r\n\r\n deleteDoseHistory(healthVisitId: number, medicationId: number, isDeleteVisit: boolean): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteDoseHistoryById?healthVisitId=${healthVisitId}&medicationId=${medicationId}&isDeleteVisit=${isDeleteVisit}`);\r\n }\r\n\r\n saveMassAssignMedication(siteYearId: number, data: MedicationToday[]): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveMassAssignMedication?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deleteMedicationInventoryById(inventoryId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteMedicationInventoryById?inventoryId=${inventoryId}`);\r\n }\r\n\r\n // Screening Methods..\r\n getHearingScreeningReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetHearingScreeningReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`);\r\n }\r\n\r\n saveHearingScreening(siteYearId: number, data: HearingScreening): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveHearingScreening?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deleteHearingScreeningById(hearingScreeningId: number, siteYearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteHearingScreeningById?hearingScreeningId=${hearingScreeningId}&siteYearId=${siteYearId}`);\r\n }\r\n\r\n getSpinalScreeningReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetSpinalScreeningReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`);\r\n }\r\n\r\n saveSpinalScreening(siteYearId: number, data: SpinalScreening): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveSpinalScreening?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deleteSpinalScreeningById(spinalScreeningId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteSpinalScreeningById?spinalScreeningId=${spinalScreeningId}`);\r\n }\r\n\r\n getPhysicalScreeningReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetPhysicalScreeningReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`);\r\n }\r\n\r\n savePhysicalScreening(siteYearId: number, data: PhysicalScreening): Observable {\r\n return this.http.post(System.apiURL.Health + `SavePhysicalScreening?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deletePhysicalScreeningById(physicalScreeningId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeletePhysicalScreeningById?physicalScreeningId=${physicalScreeningId}`);\r\n }\r\n\r\n getDentalScreeningReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetDentalScreeningReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`);\r\n }\r\n\r\n saveDentalScreening(siteYearId: number, data: DentalScreening): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveDentalScreening?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deleteDentalScreeningById(dentalScreeningId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteDentalScreeningById?dentalScreeningId=${dentalScreeningId}`);\r\n }\r\n\r\n getVisionScreeningReadByStudentId(studentId: number, siteId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetVisionScreeningReadByStudentId?studentId=${studentId}&siteId=${siteId}&yearId=${yearId}`);\r\n }\r\n\r\n saveVisionScreening(siteYearId: number, data: VisionScreening): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveVisionScreening?siteYearId=${siteYearId}`, data);\r\n }\r\n\r\n deleteVisionScreeningById(visionScreeningId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteVisionScreeningById?visionScreeningId=${visionScreeningId}`);\r\n }\r\n\r\n getImmunizationExemptions(peopleId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `GetImmunizationExemptions?peopleId=${peopleId}`);\r\n }\r\n\r\n getImmunizationsReadByStudentId(studentId: number, siteId: number, YearId: number): Observable {\r\n return this.http.get\r\n (System.apiURL.Health + `GetImmunizationsReadByStudentId?studentId=${studentId}&siteId=${siteId}&YearId=${YearId}`)\r\n .pipe(\r\n take(1),\r\n map(rows => {\r\n for (let i = 0; i < rows.length; i++) {\r\n rows[i] = System.convert(rows[i], new Vaccine(true));\r\n }\r\n return rows;\r\n })\r\n );\r\n }\r\n\r\n saveImmunizations(siteYearId: number, studentId: number, data: Vaccine[]): Observable {\r\n return this.http.post(System.apiURL.Health + `SaveImmunizations?siteYearId=${siteYearId}&studentId=${studentId}`, data);\r\n }\r\n\r\n deleteImmunizationById(immunizationId: number): Observable {\r\n return this.http.get(System.apiURL.Health + `DeleteImmunizationById?immunizationId=${immunizationId}`);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { FormListSequence, GoalData, IdentificationSubCodes, IepFormsWithinDocuments, ImportedDocuments, OptionalForms, PickCourseOfStudy, PickIdentification, PlaMaintenance, SpedTeamMemberUpdate, StudentCollectionTemplate, TeamMemberPermission } from './formwithin-document-modal';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormWithinDocumentsService {\r\n\r\n goalData = new GoalData();\r\n pickIdentificationData = new PickIdentification();\r\n plaMiantenanceData = new PlaMaintenance();\r\n courceOfStudyData = new PickCourseOfStudy();\r\n spedStudentCollectionTemplate = new StudentCollectionTemplate();\r\n allOptionalFormChecked = false;\r\n callFromAlertDialog = false;\r\n editHtmlFormDialogOpen = false;\r\n\r\n private _selectedValueFromDD: any;\r\n public get selectedValueFromDD(): any {\r\n return this._selectedValueFromDD;\r\n }\r\n\r\n public set selectedValueFromDD(value: any) {\r\n this._selectedValueFromDD = value;\r\n this.observableSelectedValueFromDD.next(value);\r\n }\r\n\r\n public observableSelectedValueFromDD = new Subject();\r\n observableSelectedValueFromDDStream$ = this.observableSelectedValueFromDD.asObservable();\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n spedStudentCollectionStatusTemplatesItemsRead(studentCollectionId: number, showLatestVersion: boolean, spEdcollectionId: number): Observable {\r\n const queryString = '?studentCollectionId=' + studentCollectionId + '&showLatestVersion=' + showLatestVersion + '&spEdcollectionId=' + spEdcollectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedStudentCollectionStatusTemplatesItemsRead' + queryString);\r\n }\r\n\r\n spedStudentDocumentCreate(attachment: ImportedDocuments, attachmentType: string): Observable {\r\n // return this.http.post(System.apiURL.SpecialEd + 'SpedStudentDocumentCreate?attachmentType=${attachmentType}' , attachment);\r\n return this.http.post(System.apiURL.SpecialEd + `SpedStudentDocumentCreate?attachmentType=${attachmentType}`, attachment);\r\n }\r\n\r\n spedStudentDocumentRead(studentId: number, spedCollectionToStudentId: number): Observable {\r\n const queryString = '?studentId=' + studentId + '&spedCollectionToStudentId=' + spedCollectionToStudentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedStudentDocumentRead' + queryString);\r\n }\r\n\r\n spedStudentDocumentDelete(SpedDocumentId: number): Observable {\r\n const queryString = '?SpedDocumentId=' + SpedDocumentId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedStudentDocumentDelete' + queryString, null);\r\n }\r\n\r\n spedHTMLStudentCollectionStatusTemplatesItemsRead(studentCollectionId: number, showLatestVersion: boolean, spEdcollectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentCollectionId=' + studentCollectionId +\r\n '&showLatestVersion=' + showLatestVersion +\r\n '&spEdcollectionId=' + spEdcollectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedHTMLStudentCollectionStatusTemplatesItemsRead' + queryString);\r\n }\r\n\r\n saveGoalBankData(yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveGoalData' + queryString, this.goalData);\r\n }\r\n\r\n spedCopyAllowMultiple(studentCollectionId: number, spedTemplateVersionId: number): Observable {\r\n const queryString = '?studentCollectionId=' + studentCollectionId + '&spedTemplateVersionId=' + spedTemplateVersionId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedCopyAllowMultiple' + queryString, null);\r\n }\r\n\r\n spedDeleteAssignedTemplate(spedStudentCollectionToTemplateVersionId: number): Observable {\r\n const queryString = '?spedStudentCollectionToTemplateVersionId=' + spedStudentCollectionToTemplateVersionId;\r\n return this.http.post(System.apiURL.SpecialEd + 'spedDeleteAssignedTemplate' + queryString, null);\r\n }\r\n\r\n spedEditAssignedCollectionTemplatesRead(studentCollectionId: number, collectionId: number): Observable {\r\n const queryString = '?studentCollectionId=' + studentCollectionId + '&collectionId=' + collectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedEditAssignedCollectionTemplatesRead' + queryString);\r\n }\r\n\r\n spedEditAssignedCollectionRead(collectionToStudentId: number, templateVersionId: number[]): Observable {\r\n const queryString = '?collectionToStudentId=' + collectionToStudentId;\r\n return this.http.post(System.apiURL.SpecialEd + 'spedAssignTemplateToStudentCollection' + queryString, templateVersionId);\r\n }\r\n\r\n checkOutForm(studentXmlDataId: number, checkedOutByUserId: number, DoneByUser: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?studentXmlDataId=' + studentXmlDataId +\r\n '&checkedOutByUserId=' + checkedOutByUserId +\r\n '&DoneByUser=' + DoneByUser;\r\n return this.http.post(System.apiURL.SpecialEd + 'CheckoutForm' + queryString, null);\r\n }\r\n\r\n teamMemberPermissionRead(spEdCollectionToStudentId: number, studentId: number): Observable {\r\n const queryString = '?spEdCollectionToStudentId=' + spEdCollectionToStudentId + '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'TeamMemberPermissionRead' + queryString);\r\n }\r\n\r\n spedTemplateFieldsRead(identificationId: number, dualIdentificationId: number, tertiaryIdentificationId: number, quaternaryIdentificationId: number, fifthIdentificationId: number): Observable {\r\n const queryString = '?identificationId=' + identificationId\r\n + '&dualIdentificationId=' + dualIdentificationId +\r\n '&tertiaryIdentificationId=' + tertiaryIdentificationId +\r\n '&quaternaryIdentificationId=' + quaternaryIdentificationId +\r\n '&fifthIdentificationId=' + fifthIdentificationId;\r\n return this.http.get(System.apiURL.SpecialEd + 'IdentificationSubCodes' + queryString);\r\n }\r\n\r\n saveIdentificationData(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveIdentificationData' + queryString, this.pickIdentificationData);\r\n }\r\n\r\n getXMLCodesvalues(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&studentId=' + this.pickIdentificationData.StudentId +\r\n '&studentCollectionTemplateVersionId=' + this.pickIdentificationData.StudentCollectionTemplateVersionId +\r\n '&templateName=' + this.pickIdentificationData.TemplateName +\r\n '&templateVersionId=' + this.pickIdentificationData.TemplateVersionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetXMLCodes' + queryString);\r\n }\r\n\r\n getSpedStudentCollectionTeamMemberPermission(collectionToStudentId: number): Observable {\r\n const queryString = '?collectionToStudentId=' + collectionToStudentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'StudentCollectionTeamMemberPermissionRead' + queryString);\r\n }\r\n\r\n saveTeamMember(collectionToStudentId: number, selectedStaffUserId: number, userIdIsFacultyStaffId: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?collectionToStudentId=' + collectionToStudentId +\r\n '&selectedStaffUserId=' + selectedStaffUserId +\r\n '&userIdIsFacultyStaffId=' + userIdIsFacultyStaffId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SyncTeamMember' + queryString, null);\r\n }\r\n\r\n spedUpdateTeamMember(data: SpedTeamMemberUpdate[]): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedUpdateTeamMember', data);\r\n }\r\n\r\n deleteSpedTeamMember(collectionToStudentId: number, teacherUserId: number): Observable {\r\n const queryString = '?collectionToStudentId=' + collectionToStudentId +\r\n '&teacherUserId=' + teacherUserId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedDeleteTeamMember' + queryString);\r\n }\r\n\r\n savePlaData(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SavePLAAData' + queryString, this.plaMiantenanceData);\r\n }\r\n\r\n getPlaXMLvalues(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId +\r\n '&studentId=' + this.plaMiantenanceData.StudentId +\r\n '&studentCollectionTemplateVersionId=' + this.plaMiantenanceData.StudentCollectionTemplateVersionId +\r\n '&templateName=' + this.plaMiantenanceData.TemplateName +\r\n '&templateVersionId=' + this.plaMiantenanceData.TemplateVersionId +\r\n '&categoryName=' + this.plaMiantenanceData.CategoryName +\r\n '&rowIndex=' + this.plaMiantenanceData.RowIndex;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetPLAAXmlData' + queryString);\r\n }\r\n\r\n saveCourseOfStudyData(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveCourseOfStudyData' + queryString, this.courceOfStudyData);\r\n }\r\n\r\n checkSequence(data: FormListSequence[]): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'ChangeFormSequence', data);\r\n }\r\n\r\n getStudentCollectionTemplate(studentCollectionTemplateVersionId: number, templateName: string): Observable {\r\n const queryString = '?studentCollectionTemplateVersionId=' + studentCollectionTemplateVersionId + '&templateName=' + templateName;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetStudentCollectionTemplate' + queryString);\r\n }\r\n\r\n spedMarkDocumentCompleted(teamMemberPermissionid: number, status: boolean): Observable {\r\n const queryString = '?teamMemberPermissionid=' + teamMemberPermissionid + '&status=' + status;\r\n return this.http.post(System.apiURL.SpecialEd + 'spedMarkDocumentCompleted' + queryString, null);\r\n }\r\n\r\n}\r\n","

{{dialogTitle}}

\r\n\r\n
\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Form Name\r\n \r\n \r\n {{element.TemplateName}} \r\n \r\n\r\n \r\n \r\n Version\r\n \r\n \r\n {{detail.Version}}\r\n \r\n \r\n\r\n \r\n \r\n Optional\r\n \r\n \r\n {{element.IsOptional == true ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n Allow Multiple\r\n \r\n \r\n {{element.IsAllowMultiple == true ? 'Y' : ''}} \r\n \r\n\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, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { SpedFixedUserPermission, SpedUserPermission } from '../../../sped-user-permissions.model';\r\nimport { Sped360Service } from '../../../sped360.service';\r\nimport { SpedStudentCollectionCard } from '../../../student-document-home/sped-student-document-cards/sped-student-document-cards.model';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { OptionalForms, TeamMemberPermission } from '../../formwithin-document-modal';\r\n\r\n@Component({\r\n selector: 'app-add-optional-forms',\r\n templateUrl: './add-optional-forms.component.html',\r\n styleUrls: ['./add-optional-forms.component.css']\r\n})\r\nexport class AddOptionalFormsComponent implements OnInit {\r\n dialogTitle = '';\r\n tempStudentCollectionId: number;\r\n collectionId: number;\r\n collectionCode: string;\r\n hasPermission: boolean;\r\n tylerMatData = new TylerMatTableDataSource();\r\n getOptionalForms: OptionalForms[] = [];\r\n collectionCard = new SpedStudentCollectionCard();\r\n columnToDisplay = ['CheckAllStatus', 'TemplateName', 'Version', 'IsOptional', 'IsAllowMultiple'];\r\n allCheck = false;\r\n isTeamMemberPer: boolean;\r\n TemplateVersionId: number;\r\n assignedTemplateVersionIds: number[] = [];\r\n spedFixedPermission = new SpedFixedUserPermission();\r\n spedUserPermission: SpedUserPermission[] = [];\r\n selectedOptionalForm: TeamMemberPermission[] = [];\r\n spEdcollectionId: number;\r\n tempStudentId: number;\r\n tempOptionalForms: OptionalForms[] = [];\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n constructor(private formWithinDocumentsService: FormWithinDocumentsService,\r\n private dialogRef: MatDialogRef,\r\n private sped360Service: Sped360Service) { }\r\n\r\n ngOnInit(): void {\r\n this.spedFixedPermission = this.sped360Service.spedFixedPermission;\r\n this.spedUserPermission = this.sped360Service.spedUserPermission;\r\n this.getAllOptionalForm();\r\n // this.getSelectedOptionalFormMethod();\r\n }\r\n getAllOptionalForm() {\r\n this.formWithinDocumentsService.spedEditAssignedCollectionTemplatesRead(this.tempStudentCollectionId, this.collectionId).subscribe(formList => {\r\n this.getOptionalForms = formList;\r\n this.getSelectedOptionalForm();\r\n });\r\n }\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n this.dialogRef.close('save');\r\n }\r\n\r\n setSelectedForm() {\r\n this.getOptionalForms.forEach(setForm => {\r\n this.selectedOptionalForm.forEach(selectedSetForm => {\r\n if (setForm.TemplateVersionId == selectedSetForm.SpedTemplateVersionId && selectedSetForm.IsEdit == true) {\r\n this.tempOptionalForms.push(setForm);\r\n }\r\n });\r\n });\r\n this.tylerMatData = new TylerMatTableDataSource(this.tempOptionalForms);\r\n this.tylerMatData.data = this.tempOptionalForms;\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n\r\n checkPermission() {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocuments) || (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504Documents)) {\r\n return true;\r\n } else if (this.spedUserPermission.filter(x => x.CollectionId == this.collectionId && x.Maintain == true).length > 0) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n getSelectedOptionalForm() {\r\n if (this.checkPermission() == true) {\r\n this.getOptionalFormsList();\r\n } else if (this.isTeamMemberPer == true) {\r\n this.formWithinDocumentsService.teamMemberPermissionRead(this.tempStudentCollectionId, this.tempStudentId).subscribe(data => {\r\n this.selectedOptionalForm = data;\r\n this.tylerMatData.data = this.selectedOptionalForm;\r\n this.tylerMatData.sort = this.sort;\r\n this.setSelectedForm();\r\n });\r\n }\r\n\r\n }\r\n\r\n getOptionalFormsList() {\r\n this.tempOptionalForms = this.getOptionalForms;\r\n this.tylerMatData = new TylerMatTableDataSource(this.getOptionalForms);\r\n this.tylerMatData.data = this.getOptionalForms;\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n\r\n checkBoxClick(obj: OptionalForms) {\r\n if (this.tempOptionalForms.length == this.tempOptionalForms.filter(x => x.StatusChecked == true).length) {\r\n this.allCheck = true;\r\n } else if (this.tempOptionalForms.length != this.tempOptionalForms.filter(x => x.StatusChecked == true).length) {\r\n this.allCheck = false;\r\n }\r\n this.assignSelectedForms(obj);\r\n }\r\n\r\n assignSelectedForms(obj: OptionalForms) {\r\n const assignTemplateVersionId = obj.TemplateVersionId;\r\n if (obj.StatusChecked == true) {\r\n this.assignedTemplateVersionIds.push(assignTemplateVersionId);\r\n } else if (obj.StatusChecked == false) {\r\n const index: number = this.assignedTemplateVersionIds.indexOf(obj.TemplateVersionId);\r\n this.assignedTemplateVersionIds.splice(index, 1);\r\n }\r\n }\r\n\r\n checkAllForm() {\r\n if (this.allCheck == true) {\r\n if (this.selectedOptionalForm.length == 0) {\r\n this.getOptionalForms.forEach(obj => {\r\n obj.StatusChecked = true;\r\n const assignTemplateVersionId = obj.TemplateVersionId;\r\n this.assignedTemplateVersionIds.push(assignTemplateVersionId);\r\n });\r\n }\r\n else {\r\n this.tempOptionalForms.forEach(obj => {\r\n obj.StatusChecked = true;\r\n const assignTemplateVersionId = obj.TemplateVersionId;\r\n this.assignedTemplateVersionIds.push(assignTemplateVersionId);\r\n\r\n });\r\n }\r\n } else if (this.allCheck == false) {\r\n this.getOptionalForms.forEach(obj => {\r\n obj.StatusChecked = false;\r\n const index: number = this.assignedTemplateVersionIds.indexOf(obj.TemplateVersionId);\r\n this.assignedTemplateVersionIds.splice(index, 1);\r\n });\r\n }\r\n\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'headerModelValue'\r\n})\r\nexport class HeaderModelValuePipe implements PipeTransform {\r\n\r\n transform(selectedType: string, columnName: string, studentCollectionTeamMemberPermission: any[]): string {\r\n const editableForm = [];\r\n const viewForm = [];\r\n studentCollectionTeamMemberPermission.forEach(x => {\r\n Object.keys(x).forEach(l => {\r\n if (l == columnName) {\r\n if (x[columnName] == 'True') {\r\n editableForm.push(x[columnName]);\r\n }\r\n if (x[columnName] == 'False') {\r\n viewForm.push(x[columnName]);\r\n }\r\n }\r\n });\r\n });\r\n if (editableForm.length == studentCollectionTeamMemberPermission.length) {\r\n return 'True';\r\n } else if (viewForm.length == studentCollectionTeamMemberPermission.length) {\r\n return 'False';\r\n } else {\r\n return 'viewEdit';\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SpedCollectionStudentToTeamMember } from '../../../../student-document-home/sped-student-document-cards/sped-student-document-cards.model';\r\n\r\n@Pipe({\r\n name: 'maintainTeamMemberHeaderName'\r\n})\r\nexport class MaintainTeamMemberHeaderNamePipe implements PipeTransform {\r\n\r\n transform(headerName: string, teamMembers: SpedCollectionStudentToTeamMember[]): string {\r\n if (headerName == 'FormName') {\r\n return 'Form Name';\r\n } else {\r\n const memberName: string = teamMembers.find(x => x.TeamMemberId == parseInt(headerName, 10)).TeamMemberName;\r\n return memberName;\r\n }\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { SpedCollectionStudentToTeamMember } from '../../../../student-document-home/sped-student-document-cards/sped-student-document-cards.model';\r\n\r\n@Pipe({\r\n name: 'isFormCreator'\r\n})\r\nexport class IsFormCreatorPipe implements PipeTransform {\r\n\r\n transform(text: string, teamMembers: SpedCollectionStudentToTeamMember[]): boolean {\r\n if (text != 'FormName' && teamMembers.find(x => x.TeamMemberId == parseInt(text, 10)) != undefined) {\r\n const creator = teamMembers.find(x => x.TeamMemberId == parseInt(text, 10)).IsCreator;\r\n return creator;\r\n }\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'maintainTeamMemberCellValue'\r\n})\r\nexport class MaintainTeamMemberCellValuePipe implements PipeTransform {\r\n\r\n transform(column: string, index: number, studentCollectionTeamMemberPermission = []): any {\r\n const value = studentCollectionTeamMemberPermission[index][column];\r\n return value;\r\n }\r\n}","Maintain Team\r\n
\r\n \r\n \r\n
\r\n {{collectionName}}\r\n Status\r\n {{status}}\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n Name\r\n \r\n \r\n {{element.TeamMemberName}} \r\n \r\n\r\n \r\n \r\n Owner\r\n \r\n \r\n {{element.IsCreator == true ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n Delete\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Form Access\r\n \r\n \r\n \r\n \r\n
{{column | maintainTeamMemberHeaderName : teamMembers}}\r\n \r\n
\r\n
\r\n \r\n View\r\n Edit\r\n Select\r\n \r\n
\r\n \r\n \r\n
\r\n {{column | maintainTeamMemberCellValue : j : studentCollectionTeamMemberPermission}}\r\n \r\n
\r\n
\r\n \r\n View\r\n \r\n Edit\r\n \r\n \r\n
\r\n
\r\n
\r\n \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, Inject, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { CheckForErrorsMessageComponent } from '../../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\nimport { StaffSearchComponent } from '../../../../shared-components/staff-search/staff-search.component';\r\nimport { Staff } from '../../../../shared-components/staff-search/staff.model';\r\nimport { Enrollment } from '../../../../shared-components/student/enrollment.model';\r\nimport { StudentService } from '../../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { SpedCollectionStudentToTeamMember } from '../../../student-document-home/sped-student-document-cards/sped-student-document-cards.model';\r\nimport { SpedStudentDocumentCardsService } from '../../../student-document-home/sped-student-document-cards/sped-student-document-cards.service';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { SpedTeamMemberUpdate } from '../../formwithin-document-modal';\r\nimport { HeaderModelValuePipe } from './pipes/header-model-value.pipe';\r\n\r\n@Component({\r\n selector: 'app-manage-team',\r\n templateUrl: './manage-team.component.html',\r\n styles: [],\r\n providers: [HeaderModelValuePipe]\r\n})\r\nexport class ManageTeamComponent implements OnInit {\r\n columnToDisplay = ['TeamMemberName', 'IsCreator', 'Action'];\r\n columnToDisplayForm: string[] = [];\r\n spedCollectionToStudentId: number;\r\n teamMembers: SpedCollectionStudentToTeamMember[] = [];\r\n tylerMatData = new TylerMatTableDataSource();\r\n studentCollectionTeamMemberPermission = [];\r\n collectionName = '';\r\n status = '';\r\n typeSelected = '';\r\n studentEnrolledSchools: Enrollment[] = [];\r\n schoolIds: number[] = [];\r\n warningDialog: MatDialogRef;\r\n\r\n constructor(private matDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialog: MatDialog,\r\n private spedStudentDocumentCradsService: SpedStudentDocumentCardsService,\r\n private formWithinDocumentsService: FormWithinDocumentsService,\r\n private headerModelValue: HeaderModelValuePipe,\r\n private studentService: StudentService,\r\n private yearService: YearService) { }\r\n\r\n ngOnInit() {\r\n this.loadTeamMemberData();\r\n this.getStudentEnrolledSchools();\r\n }\r\n\r\n loadTeamMemberData() {\r\n this.getTeamMemberName();\r\n this.getSpedStudentCollectionTeamMember();\r\n }\r\n\r\n getStudentEnrolledSchools() {\r\n this.studentService.getStudentEnrollments(this.studentService.selectedStudent.Id, this.yearService.defaultYear.Id).subscribe(enrolledSchool => {\r\n this.studentEnrolledSchools = enrolledSchool;\r\n this.studentEnrolledSchools.forEach(school => {\r\n this.schoolIds.push(school.SchoolId);\r\n });\r\n });\r\n }\r\n\r\n getSpedStudentCollectionTeamMember() {\r\n this.formWithinDocumentsService.getSpedStudentCollectionTeamMemberPermission(this.spedCollectionToStudentId).subscribe(data => {\r\n this.studentCollectionTeamMemberPermission = data != '' ? JSON.parse(data) : [];\r\n const colToDisplay = this.studentCollectionTeamMemberPermission != null && this.studentCollectionTeamMemberPermission != undefined ? Object.keys(this.studentCollectionTeamMemberPermission[0]) : [];\r\n this.columnToDisplayForm = ['FormName'];\r\n colToDisplay.forEach(columnName => {\r\n if (columnName != 'FormName' && columnName != 'TemplateVersionId' && columnName != 'FormVersion') {\r\n this.columnToDisplayForm.push(columnName);\r\n }\r\n });\r\n });\r\n }\r\n\r\n getTeamMemberName() {\r\n this.spedStudentDocumentCradsService.spedCollectionStudentToTeamMember(this.spedCollectionToStudentId, false).subscribe(result => {\r\n this.teamMembers = result;\r\n this.tylerMatData = new TylerMatTableDataSource(this.teamMembers);\r\n this.tylerMatData.data = this.teamMembers;\r\n });\r\n }\r\n\r\n addStaffClick() {\r\n const staffSearchDialog = this.dialog.open(StaffSearchComponent, {\r\n data: {\r\n searchAndSelect: false,\r\n pageName: 'manageTeam',\r\n schoolIds: this.schoolIds\r\n },\r\n height: '100vh',\r\n width: '100vw',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n disableClose: true,\r\n });\r\n staffSearchDialog.componentInstance.selectedSchoolId = this.studentEnrolledSchools.find(x => x.PrimaryEnrollment == true).SchoolId;\r\n staffSearchDialog.afterClosed().subscribe((selectedStaff: Staff) => {\r\n if (selectedStaff) {\r\n if (this.teamMembers.filter(x => x.TeamMemberId == selectedStaff.UserId).length == 0) {\r\n this.formWithinDocumentsService.saveTeamMember(this.spedCollectionToStudentId, selectedStaff.StaffId, true).subscribe(() => {\r\n this.getTeamMemberName();\r\n this.getSpedStudentCollectionTeamMember();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n deleteClick(teamMember: SpedCollectionStudentToTeamMember) {\r\n const generalConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true\r\n });\r\n generalConfirmDialog.componentInstance.headerLabel = 'Delete Maintain Team';\r\n generalConfirmDialog.componentInstance.confirmMessage = 'Are you sure you want to delete' + ' ' + teamMember.TeamMemberName + '?';\r\n generalConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n generalConfirmDialog.afterClosed().subscribe(result => {\r\n if (result == true) {\r\n this.deleteTeamMember(teamMember.TeamMemberId);\r\n }\r\n });\r\n }\r\n\r\n deleteTeamMember(teacherUserId: number) {\r\n this.formWithinDocumentsService.deleteSpedTeamMember(this.spedCollectionToStudentId, teacherUserId).subscribe(() => {\r\n this.loadTeamMemberData();\r\n });\r\n }\r\n\r\n selectedTypeChange(header: string, value: string) {\r\n this.studentCollectionTeamMemberPermission.forEach(obj => {\r\n if (value == 'True') {\r\n obj[header] = 'True';\r\n }\r\n if (value == 'False') {\r\n obj[header] = 'False';\r\n }\r\n });\r\n }\r\n\r\n saveClick() {\r\n const data: SpedTeamMemberUpdate[] = [];\r\n this.teamMembers.forEach(ele => {\r\n let template = '';\r\n template = '';\r\n this.studentCollectionTeamMemberPermission.forEach(obj => {\r\n template += '' + obj['TemplateVersionId'] + '' + (obj[ele.TeamMemberId] == 'True' ? '1' : '0') + '';\r\n });\r\n template += '';\r\n const templatevalue = template;\r\n data.push({ CollectionToStudentId: this.spedCollectionToStudentId, TeacherUserId: ele.TeamMemberId, Template: templatevalue });\r\n });\r\n this.saveData(data);\r\n this.matDialogRef.close('save');\r\n }\r\n\r\n saveData(data: SpedTeamMemberUpdate[]) {\r\n this.formWithinDocumentsService.spedUpdateTeamMember(data).subscribe(() => { });\r\n }\r\n\r\n selectMode(columnName: string) {\r\n this.typeSelected = '';\r\n this.typeSelected = this.headerModelValue.transform('', columnName, this.studentCollectionTeamMemberPermission);\r\n }\r\n\r\n CancelClick() {\r\n this.matDialogRef.close();\r\n }\r\n\r\n closeClick() {\r\n this.warningDialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n this.warningDialog.afterClosed().subscribe(result => {\r\n switch (result) {\r\n case 1: {\r\n this.saveClick();\r\n break;\r\n }\r\n case 0: {\r\n this.matDialogRef.close();\r\n break;\r\n }\r\n case -1: {\r\n this.warningDialog.close();\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n}","
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{collectionName}}   \r\n Status {{status}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \"Re-Order\"\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n 0 || element.DoumentName.indexOf('IL_5_IEPGoalObjectives') > 0 || element.DoumentName.indexOf('NM_10_IEPGoalMaint') > 0 || element.DoumentName.indexOf('OR_6_IEPAAFGO') > 0\">\r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n Form Name\r\n \r\n \r\n \r\n \r\n {{element.TemplateNameHTML}} \r\n \r\n\r\n \r\n \r\n Checked-Out By\r\n \r\n \r\n \r\n \r\n {{element.CheckedOutByuserName}} \r\n \r\n \r\n \r\n Optional\r\n \r\n \r\n \r\n \r\n {{element.IsOptional == true ? 'Y' : ''}} \r\n \r\n \r\n \r\n Allow Multiple\r\n \r\n \r\n \r\n \r\n {{element.IsAllowMultiple == true ? 'Y' : ''}} \r\n \r\n \r\n \r\n Last Modified\r\n \r\n \r\n \r\n \r\n {{element.LastModifiedDate | date: 'MM/dd/yy' }} \r\n \r\n\r\n \r\n \r\n Modified By\r\n \r\n \r\n \r\n \r\n {{element.ModifiedByUserName}} \r\n \r\n\r\n \r\n \r\n Completed\r\n \r\n \r\n \r\n \r\n {{element.IsMarkedComplete == true ? 'Y' : ''}} \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n Edit\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{element.ToolTip}}
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
0\">\r\n
\r\n
\r\n \r\n \r\n \r\n Attachments\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n 0\">\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n \r\n {{element.Description}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n \r\n {{element.DocumentName}}\r\n \r\n \r\n\r\n \r\n \r\n Uploaded\r\n \r\n \r\n \r\n \r\n {{element.CreatedDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Uploaded By\r\n \r\n \r\n \r\n \r\n {{element.UserName}}\r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n Delete\r\n \r\n \r\n\r\n \r\n \r\n \r\n \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 { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { StaffCardSettingsComponent } from '../../classroom360/staff-home/staff-cards/staff-card-settings/staff-card-settings.component';\r\nimport { AddAttachmentDialogComponent } from '../../shared-components/add-attachment-dialog/add-attachment-dialog.component';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { StudentAttachment } from '../../shared-modules/student-attachment/student-attachment.model';\r\nimport { IepService } from '../../student360/iep/iep.service';\r\nimport { SpedFixedUserPermission, SpedUserPermission } from '../sped-user-permissions.model';\r\nimport { Sped360Service } from '../sped360.service';\r\nimport { ViewDocumentComponent } from '../student-document-home/sped-student-document-cards/sped-student-collection-common-card/view-document/view-document.component';\r\nimport { SpedCollectionStudentToTeamMember, SpedStudentCollectionCard } from '../student-document-home/sped-student-document-cards/sped-student-document-cards.model';\r\nimport { SpedStudentDocumentCardsService } from '../student-document-home/sped-student-document-cards/sped-student-document-cards.service';\r\nimport { FormWithinDocumentsService } from './form-within-documents.service';\r\nimport { FormListSequence, IepFormsWithinDocuments, ImportedDocuments, OptionalForms, TeamMemberPermission } from './formwithin-document-modal';\r\nimport { AddOptionalFormsComponent } from './modals/add-optional-forms/add-optional-forms.component';\r\nimport { CheckInCheckOutComponent } from './modals/check-in-check-out/check-in-check-out.component';\r\nimport { EditHtmlFormComponent } from './modals/edit-html-form/edit-html-form.component';\r\nimport { IndeterminateProgressBarComponent } from './modals/indeterminate-progress-bar/indeterminate-progress-bar.component';\r\nimport { ManageTeamComponent } from './modals/manage-team/manage-team.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-forms-within-documents',\r\n templateUrl: './forms-within-documents.component.html',\r\n styleUrls: ['./forms-within-documents.component.css'],\r\n animations: [detailExpand],\r\n})\r\nexport class FormsWithinDocumentsComponent implements OnInit, OnDestroy {\r\n\r\n cardSettingsDialog: MatDialogRef;\r\n getIepCollection: IepFormsWithinDocuments[] = [];\r\n dataField: IepFormsWithinDocuments[] = [];\r\n importedDocuments: ImportedDocuments[] = [];\r\n tylerMatData = new TylerMatTableDataSource();\r\n matDataSource = new TylerMatTableDataSource();\r\n collectionCard = new SpedStudentCollectionCard();\r\n columnToDisplay = ['dragHandle', 'CheckAllStatus', 'More', 'TemplateNameHTML', 'CheckedOutByuserName', 'IsOptional', 'IsAllowMultiple', 'LastModifiedDate', 'ModifiedByUserName', 'IsMarkedComplete', 'Actions'];\r\n columnToDisplayImported = ['Description', 'DocumentName', 'CreatedDate', 'UserName', 'Actions'];\r\n studentCollectionId: number;\r\n SpEdCollectionToIEPStatusId: number;\r\n showLatestVersion = false;\r\n spEdcollectionId: number;\r\n studentId: number;\r\n subscriptions: Subscription[] = [];\r\n allCheck = false;\r\n disabledActionMenuItems = true;\r\n status: string;\r\n yearId: number;\r\n selectedView: string;\r\n isFiltered = false;\r\n editFormDropDown: IepFormsWithinDocuments[] = [];\r\n teamMemberRead: SpedCollectionStudentToTeamMember[] = [];\r\n collectionName: string;\r\n collectionCode: string;\r\n spedFixedPermission = new SpedFixedUserPermission();\r\n spedUserPermission: SpedUserPermission[] = [];\r\n studentTemplateVersionIds: string;\r\n printWithoutWorkingDraft = false;\r\n importDocumentAndAttachToAllSpEdDocuments = false;\r\n importDocumentAndAttachToAllSpEdDocuments504 = false;\r\n deleteDocumentPer = false;\r\n deleteDocumentPer504 = false;\r\n userId: number;\r\n isTeamMember: boolean;\r\n hasPermission: boolean;\r\n checkOutDocument: boolean;\r\n checkOutDocument504: boolean;\r\n maintainTeamMemberPermission: boolean;\r\n maintainTeamMemberPermission504: boolean;\r\n viewOnly: boolean;\r\n getOptionalForms: OptionalForms[] = [];\r\n formSaveOrDeleted = false;\r\n formSequence: FormListSequence[] = [];\r\n selectedForm: OptionalForms[] = [];\r\n studentChangeSubscription: Subscription;\r\n addOptionalCheckAll = false;\r\n selectedOptionalForm: TeamMemberPermission[] = [];\r\n tempOptionalForms: OptionalForms[] = [];\r\n expandAllRow = false;\r\n fileAsBlob: Blob;\r\n showAsOverlayDialog = false;\r\n isDocCreator: boolean;\r\n inactiveSpEdModule = false;\r\n\r\n @ViewChild('sort', { static: true }) sort: MatSort;\r\n @ViewChild('sort2') sort2: MatSort;\r\n\r\n constructor(private formWithinDocuments: FormWithinDocumentsService,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private iepService: IepService,\r\n private sped360Service: Sped360Service,\r\n private sanitizer: DomSanitizer,\r\n private loginService: LoginService,\r\n private spedStudentDocumentCardsService: SpedStudentDocumentCardsService,\r\n private studentService: StudentService\r\n ) {\r\n this.route.queryParams.subscribe(params => {\r\n this.selectedView = params['selectedView'];\r\n this.studentCollectionId = params['collectionToStudentId'];\r\n this.spEdcollectionId = params['SpedCollectionId'];\r\n this.studentId = params['Id'];\r\n this.SpEdCollectionToIEPStatusId = params['lngSpEdCollectionToIEPStatusId'];\r\n this.collectionName = params['collectionName'];\r\n this.collectionCode = params['collectionCode'];\r\n this.status = params['Status'];\r\n });\r\n if (this.selectedView != 'CurrentWork' && this.selectedView != 'DocumentWaitingApproval' && this.selectedView != 'MyTeams') {\r\n this.studentChangeSubscription = this.studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n if (this.sped360Service.previousSelectedStudentId != studentId && studentId != null) {\r\n this.sped360Service.previousSelectedStudentId = studentId;\r\n this.studentDocument();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.userId = this.userService.currentUser.Id;\r\n this.spedFixedPermission = this.sped360Service.spedFixedPermission;\r\n this.spedUserPermission = this.sped360Service.spedUserPermission;\r\n this.yearId = this.yearService.defaultYear.Id;\r\n this.printWithoutWorkingDraft = this.loginService.LoginSettings.AllowPrintWithoutWorkingDraft;\r\n this.checkOutDocument = this.sped360Service.spedFixedPermission.CheckOutDocument;\r\n this.checkOutDocument504 = this.sped360Service.spedFixedPermission.CheckOut504Document;\r\n this.deleteDocumentPer = this.sped360Service.spedFixedPermission.DeleteAllSpEdDocuments || this.sped360Service.spedUserPermission.filter(x => x.CollectionId == this.collectionCard.CollectionId && x.Delete == true).length > 0;\r\n this.deleteDocumentPer504 = this.sped360Service.spedFixedPermission.DeleteAll504Documents || this.sped360Service.spedUserPermission.filter(x => x.CollectionId == this.collectionCard.CollectionId && x.Delete == true).length > 0;\r\n this.importDocumentAndAttachToAllSpEdDocuments = this.sped360Service.spedFixedPermission.ImportDocumentAndAttachToAllSpEdDocuments || this.sped360Service.spedUserPermission.filter(x => x.CollectionId == this.collectionCard.CollectionId && x.ImportDocumentAndAttachToDocument == true).length > 0;\r\n this.importDocumentAndAttachToAllSpEdDocuments504 = this.sped360Service.spedFixedPermission.ImportDocumentAndAttachToAll504Documents || this.sped360Service.spedUserPermission.filter(x => x.CollectionId == this.collectionCard.CollectionId && x.ImportDocumentAndAttachToDocument == true).length > 0;\r\n this.maintainTeamMemberPermission = this.spedFixedPermission.MaintainTeamMemberPermissionsonDocumentsAndForms;\r\n this.maintainTeamMemberPermission504 = this.spedFixedPermission.Maintain504TeamMemberPermissionsonDocumentsAndForms;\r\n this.inactiveSpEdModule = this.loginService.LoginSettings.InactiveSpEdModule;\r\n if ((!this.collectionCode.includes('504') && this.deleteDocumentPer == false) || (this.collectionCode.includes('504') && this.deleteDocumentPer504 == false)) {\r\n this.columnToDisplayImported.splice(4, 1);\r\n }\r\n this.sped360Service.collectionId = this.spEdcollectionId;\r\n this.sped360Service.collectionStatus = this.status;\r\n this.sped360Service.collectionName = this.collectionName;\r\n this.sped360Service.collectionCode = this.collectionCode;\r\n this.checkIsTeamMemberPermission();\r\n this.getIepFormsWithinDocumentData();\r\n this.checkOptionalFormLength();\r\n this.getImportedDocuments();\r\n this.getEditFormDropDown();\r\n }\r\n\r\n checkOptionalFormLength() {\r\n this.formWithinDocuments.spedEditAssignedCollectionTemplatesRead(this.studentCollectionId, this.spEdcollectionId).subscribe(formList => {\r\n this.getOptionalForms = formList;\r\n this.tempOptionalForms = formList;\r\n this.setSelectedForm();\r\n });\r\n }\r\n\r\n setSelectedForm() {\r\n this.formWithinDocuments.teamMemberPermissionRead(this.studentCollectionId, this.studentId).subscribe(data => {\r\n this.selectedOptionalForm = data;\r\n if (this.status == 'Working Draft' || this.status == 'Completed by Case Manager') {\r\n if (((!this.collectionCode.includes('504') && !this.spedFixedPermission.MaintainAllSpEdDocuments) || (this.collectionCode.includes('504') && !this.spedFixedPermission.MaintainAll504Documents))\r\n && (this.spedUserPermission.filter(x => x.CollectionId == this.spEdcollectionId && x.Maintain == false).length > 0)\r\n && this.isTeamMember == true) {\r\n if (this.isDocCreator == false) {\r\n this.tempOptionalForms = [];\r\n this.getOptionalForms.forEach(setForm => {\r\n this.selectedOptionalForm.forEach(selectedSetForm => {\r\n if (setForm.TemplateVersionId == selectedSetForm.SpedTemplateVersionId && selectedSetForm.IsEdit == true) {\r\n this.tempOptionalForms.push(setForm);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n }\r\n this.saveForm();\r\n });\r\n }\r\n saveForm() {\r\n if (this.status == 'Working Draft' || this.status == 'Completed by Case Manager') {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocuments) || (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504Documents)) {\r\n this.hasPermission = true;\r\n } else if (this.spedUserPermission.filter(x => x.CollectionId == this.spEdcollectionId && x.Maintain == true).length > 0) {\r\n this.hasPermission = true;\r\n }\r\n else if (this.isTeamMember == true) {\r\n this.hasPermission = true;\r\n }\r\n else {\r\n this.hasPermission = false;\r\n }\r\n }\r\n if (this.hasPermission == true && this.tempOptionalForms.length > 0) {\r\n this.viewOnly = false;\r\n }\r\n else {\r\n this.viewOnly = true;\r\n }\r\n }\r\n\r\n rowDrop(event: CdkDragDrop) {\r\n const field = event.item.data;\r\n const tempIdOfPrevIndex = this.getIepCollection[event.previousIndex].TemplateVersionId;\r\n\r\n const tempIdOfCurrentIndex = this.getIepCollection[event.currentIndex].TemplateVersionId;\r\n if (tempIdOfPrevIndex == tempIdOfCurrentIndex) {\r\n moveItemInArray(this.getIepCollection, event.previousIndex, event.currentIndex);\r\n }\r\n let index = 0;\r\n this.formSequence = [];\r\n this.getIepCollection.forEach((form) => {\r\n if (tempIdOfPrevIndex == form.TemplateVersionId) {\r\n const setSequence = new FormListSequence();\r\n form.Sequence = index;\r\n index = index + 1;\r\n setSequence.Sequence = form.Sequence;\r\n setSequence.TemplateVersionId = form.TemplateVersionId;\r\n setSequence.StudentCollectionTemplateVersionId = form.StudentCollectionTemplateVersionId;\r\n this.formSequence.push(setSequence);\r\n }\r\n });\r\n this.formWithinDocuments.checkSequence(this.formSequence).subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n this.getEditFormDropDown();\r\n });\r\n this.tylerMatData.data = this.getIepCollection;\r\n }\r\n\r\n checkIsTeamMemberPermission() {\r\n this.spedStudentDocumentCardsService.spedCollectionStudentToTeamMember(this.studentCollectionId, false).subscribe(data => {\r\n this.teamMemberRead = data;\r\n const tempTeamMemberData = this.teamMemberRead;\r\n tempTeamMemberData.forEach(teamData => {\r\n if (teamData.TeamMemberId == this.userId) {\r\n this.isTeamMember = true;\r\n } else {\r\n this.isTeamMember = false;\r\n }\r\n if (teamData.TeamMemberId == this.userId && teamData.IsCreator == true) {\r\n this.isDocCreator = true;\r\n } else {\r\n this.isDocCreator = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n getIepFormsWithinDocumentData() {\r\n this.formWithinDocuments.spedStudentCollectionStatusTemplatesItemsRead(this.studentCollectionId, this.showLatestVersion, this.spEdcollectionId).subscribe(result => {\r\n this.getIepCollection = result;\r\n this.loadPageData();\r\n });\r\n }\r\n\r\n loadPageData() {\r\n this.tylerMatData = new TylerMatTableDataSource(this.getIepCollection);\r\n if (this.expandAllRow == true) {\r\n this.expandAllRow = false;\r\n }\r\n this.tylerMatData.data = this.getIepCollection;\r\n this.tylerMatData.sort = this.sort;\r\n if (this.formSaveOrDeleted == true) {\r\n this.getEditFormDropDown();\r\n }\r\n }\r\n\r\n getEditFormDropDown() {\r\n this.formWithinDocuments.spedHTMLStudentCollectionStatusTemplatesItemsRead(this.studentCollectionId, false, this.spEdcollectionId).subscribe(ddlData => {\r\n this.editFormDropDown = ddlData.filter(x => x.DoumentName.includes('MO_37_IEP') == false);\r\n });\r\n }\r\n\r\n addAttachment() {\r\n // Initializing attachment\r\n const attachment = new ImportedDocuments();\r\n attachment.StudentId = this.studentId;\r\n attachment.spedCollectionToStudentId = this.studentCollectionId;\r\n attachment.DocumentName = '';\r\n attachment.Description = '';\r\n attachment.CreatedDate = new Date();\r\n attachment.UserName = '';\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: true,\r\n requireDocumentType: true,\r\n type: 'ImportedDocuments'\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n attachment.FileBase64 = attachment.MyFileBase64String;\r\n attachment.DocumentName = attachment.FileName;\r\n attachment.Description = attachment.Description;\r\n attachment.CreatedDate = new Date();\r\n attachment.FileType = attachment.FileExtension;\r\n if (attachment.FileType.toLowerCase() == 'txt' || attachment.FileType.toLowerCase() == 'rtf') {\r\n attachment.FileType = 'text/plain';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'doc') {\r\n attachment.FileType = 'application/msword';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'pdf') {\r\n attachment.FileType = 'application/pdf';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'docx') {\r\n attachment.FileType = 'application/vnd.openxmlformats-officedocument.word';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'applicatio') {\r\n attachment.FileType = 'application/' + attachment.FileType.substr(1);\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'jpg') {\r\n attachment.FileType = 'image/jpg';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'jpeg') {\r\n attachment.FileType = 'image/jpeg';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'xlsx') {\r\n attachment.FileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'xls') {\r\n attachment.FileType = 'application/vnd.ms-excel';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'png') {\r\n attachment.FileType = 'image/png';\r\n }\r\n else if (attachment.FileType.toLowerCase() == 'gif') {\r\n attachment.FileType = 'image/gif';\r\n }\r\n attachment.UserName = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n this.formWithinDocuments.spedStudentDocumentCreate(attachment, attachment.FileType).subscribe(() => {\r\n this.getImportedDocuments();\r\n });\r\n }\r\n })\r\n );\r\n }\r\n allowToAddOptionalForm() {\r\n if (this.status == 'Working Draft' || this.status == 'Completed by Case Manager') {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocuments) || (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504Documents)) {\r\n return true;\r\n } else if (this.spedUserPermission.filter(x => x.CollectionId == this.spEdcollectionId && x.Maintain == true).length > 0) {\r\n return true;\r\n }\r\n else {\r\n if (this.isTeamMember == true) {\r\n this.teamMemberRead.forEach(obj => {\r\n if (obj.IsCreator == true) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n getImportedDocuments() {\r\n this.formWithinDocuments.spedStudentDocumentRead(this.studentId, this.studentCollectionId).subscribe(data => {\r\n this.importedDocuments = data;\r\n this.loadAttachmentData();\r\n });\r\n }\r\n\r\n loadAttachmentData() {\r\n setTimeout(() => {\r\n this.matDataSource = new TylerMatTableDataSource(this.importedDocuments);\r\n this.matDataSource.data = this.importedDocuments;\r\n this.matDataSource.sort = this.sort2;\r\n }, 0);\r\n }\r\n\r\n viewDocumentClick(document) {\r\n if (document.SpedDocumentId != null && document.SpedDocumentId != undefined) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: document.SpedDocumentId,\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentName: '',\r\n DocumentModuleName: 'Documents',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n }\r\n else {\r\n let win: any;\r\n if (!window.navigator) {\r\n win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n this.iepService.viewCollectionDocument(document.SpedCollectionId,\r\n this.studentId,\r\n document.SpedCollectionToStudentId,\r\n document.CollectionStatusId,\r\n document.TemplateVersionId,\r\n this.userService.userId,\r\n this.userService.currentUser.LoginSchoolId,\r\n this.yearService.student360Year.Id).subscribe(docBase64String => {\r\n\r\n const byteCharacters = atob(docBase64String);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const FileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n win.location.href = URL.createObjectURL(FileAsBlob);\r\n });\r\n }\r\n }\r\n }\r\n\r\n deleteImportedDocuments(dataField: ImportedDocuments) {\r\n const deleteDialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteDialogBox.componentInstance.okButtonLabel = 'Delete';\r\n deleteDialogBox.componentInstance.headerLabel = 'Delete Document';\r\n deleteDialogBox.componentInstance.confirmMessage = 'Are you sure you want to delete this Document?';\r\n deleteDialogBox.afterClosed().subscribe(confirm => {\r\n if (confirm == true) {\r\n const SpedDocumentId = dataField.SpedDocumentId;\r\n this.deleteDocument(SpedDocumentId);\r\n }\r\n });\r\n\r\n }\r\n\r\n deleteDocument(SpedDocumentId: number) {\r\n this.formWithinDocuments.spedStudentDocumentDelete(SpedDocumentId).subscribe(() => {\r\n this.getImportedDocuments();\r\n });\r\n }\r\n\r\n checkAllClick() {\r\n if (this.allCheck == true) {\r\n this.getIepCollection.forEach(obj => {\r\n obj.StatusChecked = true;\r\n });\r\n } else if (this.allCheck == false) {\r\n this.getIepCollection.forEach(obj => {\r\n obj.StatusChecked = false;\r\n });\r\n }\r\n this.selectedIds();\r\n }\r\n\r\n chkSingleForm() {\r\n this.selectedIds();\r\n }\r\n\r\n selectedIds() {\r\n this.studentTemplateVersionIds = '';\r\n this.getIepCollection.forEach(obj => {\r\n if (obj.StatusChecked == true) {\r\n if (this.studentTemplateVersionIds == '') {\r\n this.studentTemplateVersionIds = obj.StudnetXMLId.toString();\r\n } else {\r\n this.studentTemplateVersionIds = this.studentTemplateVersionIds + ',' + obj.StudnetXMLId.toString();\r\n }\r\n }\r\n });\r\n }\r\n\r\n massAction() {\r\n const studentData = this.tylerMatData.filteredData.filter(o => o.StatusChecked);\r\n if (!studentData || studentData.length == 0) {\r\n this.disabledActionMenuItems = true;\r\n }\r\n else {\r\n this.disabledActionMenuItems = false;\r\n }\r\n }\r\n\r\n viewEditForm(fs: IepFormsWithinDocuments, formMode: string) {\r\n this.getUpdatedCheckedByUserId(formMode, fs);\r\n }\r\n\r\n openForm(fs: IepFormsWithinDocuments, formMode: string) {\r\n if (formMode == 'View') {\r\n this.sped360Service.canEditForm = false;\r\n }\r\n if (formMode == 'Edit') {\r\n this.formWithinDocuments.editHtmlFormDialogOpen = true;\r\n this.sped360Service.canEditForm = true;\r\n this.sped360Service.continueClicked = true;\r\n }\r\n if (formMode == 'Edit' && this.loginService.LoginSettings.AllowCheckInOutSpEdForms == true && this.formWithinDocuments.spedStudentCollectionTemplate.CheckOutByUserId > 0 && this.formWithinDocuments.spedStudentCollectionTemplate.CheckOutByUserId != this.userId) {\r\n this.checkOutFormDialog(fs);\r\n } else {\r\n this.editViewHtmlForm(fs);\r\n }\r\n }\r\n\r\n editViewHtmlForm(fs: IepFormsWithinDocuments) {\r\n const viewOverlayDialog = this.dialog.open(EditHtmlFormComponent, {\r\n disableClose: true,\r\n height: '100%',\r\n width: '100%',\r\n maxWidth: 'inherit'\r\n });\r\n viewOverlayDialog.componentInstance.formStatus = this.status;\r\n viewOverlayDialog.componentInstance.dataField = fs;\r\n viewOverlayDialog.componentInstance.ddData = this.editFormDropDown;\r\n viewOverlayDialog.componentInstance.checkOutDocument = this.checkOutDocument;\r\n viewOverlayDialog.componentInstance.checkOutDocument504 = this.checkOutDocument504;\r\n viewOverlayDialog.componentInstance.collectionCode = this.collectionCode;\r\n viewOverlayDialog.componentInstance.studentFormData = { SpEdcollectionId: this.spEdcollectionId, StudentId: this.studentId, StudentCollectionId: this.studentCollectionId, SpEdCollectionToIEPStatusId: this.SpEdCollectionToIEPStatusId, StudentCollectionTemplateVersionId: fs.StudentCollectionTemplateVersionId, TemplateVersionId: fs.TemplateVersionId, TemplateName: fs.TemplateName, IsEdit: this.sped360Service.canEditForm, StudentXMLDataId: fs.StudnetXMLId, CheckedOutByUserId: fs.CheckedOutByUserId };\r\n viewOverlayDialog.afterClosed().subscribe(result => {\r\n this.getIepFormsWithinDocumentData();\r\n this.getImportedDocuments();\r\n this.getEditFormDropDown();\r\n });\r\n }\r\n\r\n checkOutFormDialog(fs: IepFormsWithinDocuments) {\r\n const viewCheckOutDialog = this.dialog.open(CheckInCheckOutComponent, {\r\n disableClose: true,\r\n height: '35vh',\r\n width: '40vw',\r\n maxWidth: 'inherit'\r\n });\r\n viewCheckOutDialog.componentInstance.checkedOutBy = this.formWithinDocuments.spedStudentCollectionTemplate.CheckedOutByUserName;\r\n viewCheckOutDialog.componentInstance.templateName = fs.TemplateName;\r\n viewCheckOutDialog.componentInstance.collectionCode = this.collectionCode;\r\n viewCheckOutDialog.afterClosed().subscribe(result => {\r\n if (result == 'save') {\r\n this.editViewHtmlForm(fs);\r\n }\r\n });\r\n }\r\n\r\n specialServiceHome() {\r\n this.router.navigateByUrl('/sped360/spedHome');\r\n }\r\n\r\n studentDocument() {\r\n this.router.navigateByUrl('/sped360/studentDocumentHome');\r\n }\r\n\r\n allowToEditDelete(formWithinDoc: IepFormsWithinDocuments) {\r\n return this.sped360Service.allowToEditDelete(formWithinDoc.IsEdit);\r\n }\r\n\r\n copyOfForm(collection: IepFormsWithinDocuments) {\r\n this.formWithinDocuments.spedCopyAllowMultiple(this.studentCollectionId, collection.TemplateVersionId).subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n setTimeout(() => {\r\n this.getEditFormDropDown();\r\n }, 200);\r\n });\r\n }\r\n\r\n deleteFormOfDocument(dataField: IepFormsWithinDocuments) {\r\n const deleteDialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteDialogBox.componentInstance.okButtonLabel = 'Delete';\r\n deleteDialogBox.componentInstance.headerLabel = 'Delete Form';\r\n deleteDialogBox.componentInstance.confirmMessage = 'Are you sure you want to delete the Form?';\r\n deleteDialogBox.afterClosed().subscribe(confirm => {\r\n if (confirm == true) {\r\n const studentCollectionTemplateVersionId = dataField.StudentCollectionTemplateVersionId;\r\n this.deleteForm(studentCollectionTemplateVersionId);\r\n }\r\n });\r\n }\r\n\r\n markComplete(dataField: IepFormsWithinDocuments, status: boolean) {\r\n this.formWithinDocuments.spedMarkDocumentCompleted(dataField.StudnetXMLId, status).subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n this.getImportedDocuments();\r\n });\r\n }\r\n\r\n deleteForm(studentCollectionTemplateVersionId: number) {\r\n if (this.addOptionalCheckAll) {\r\n this.addOptionalCheckAll = false;\r\n }\r\n this.formWithinDocuments.spedDeleteAssignedTemplate(studentCollectionTemplateVersionId).subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n this.checkOptionalFormLength();\r\n this.formSaveOrDeleted = true;\r\n });\r\n }\r\n\r\n addOptionalForms() {\r\n const OptionalForm = this.dialog.open(AddOptionalFormsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '80vh',\r\n minWidth: '60vw',\r\n });\r\n OptionalForm.componentInstance.dialogTitle = this.collectionName + ' ' + '- Optional Forms';\r\n OptionalForm.componentInstance.tempStudentCollectionId = this.studentCollectionId;\r\n OptionalForm.componentInstance.collectionId = this.spEdcollectionId;\r\n OptionalForm.componentInstance.collectionCode = this.collectionCode;\r\n OptionalForm.componentInstance.isTeamMemberPer = this.isTeamMember;\r\n OptionalForm.componentInstance.tempStudentId = this.studentId;\r\n OptionalForm.afterClosed().subscribe(result => {\r\n if (result == 'save') {\r\n const assignedTemplateVersionId: number[] = [] = OptionalForm.componentInstance.assignedTemplateVersionIds;\r\n this.selectedForm = OptionalForm.componentInstance.tempOptionalForms;\r\n const collectionToStudentId: number = OptionalForm.componentInstance.tempStudentCollectionId;\r\n this.addOptionalCheckAll = OptionalForm.componentInstance.allCheck;\r\n this.saveForms(collectionToStudentId, assignedTemplateVersionId);\r\n }\r\n });\r\n }\r\n\r\n saveForms(studentCollectionId: number, templateVersionId: number[]) {\r\n this.formWithinDocuments.spedEditAssignedCollectionRead(studentCollectionId, templateVersionId).subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n this.checkOptionalFormLength();\r\n this.formSaveOrDeleted = true;\r\n });\r\n }\r\n\r\n viewContent(fs: IepFormsWithinDocuments, studentHeader: boolean) {\r\n const viewOverlayDialogPB = this.dialog.open(IndeterminateProgressBarComponent, {\r\n disableClose: true,\r\n });\r\n viewOverlayDialogPB.componentInstance.spEdcollectionId = this.spEdcollectionId;\r\n viewOverlayDialogPB.componentInstance.studentId = this.studentId;\r\n viewOverlayDialogPB.componentInstance.studentCollectionId = this.studentCollectionId;\r\n viewOverlayDialogPB.componentInstance.spEdCollectionToIEPStatusId = this.SpEdCollectionToIEPStatusId;\r\n viewOverlayDialogPB.componentInstance.templateVersionId = fs.TemplateVersionId;\r\n viewOverlayDialogPB.componentInstance.siteId = 0;\r\n viewOverlayDialogPB.componentInstance.yearId = this.yearId;\r\n viewOverlayDialogPB.componentInstance.callFromHomePage = false;\r\n viewOverlayDialogPB.componentInstance.studentTemplateVersionIds = fs.StudnetXMLId.toString();\r\n viewOverlayDialogPB.componentInstance.studentHeader = studentHeader;\r\n viewOverlayDialogPB.componentInstance.printType = 0;\r\n\r\n viewOverlayDialogPB.afterClosed().subscribe(result => {\r\n if (result == 'print') {\r\n this.fileAsBlob = null;\r\n this.fileAsBlob = viewOverlayDialogPB.componentInstance.fileAsBlobString;\r\n this.openPrintView();\r\n } else {\r\n this.getIepFormsWithinDocumentData();\r\n this.getImportedDocuments();\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n openPrintView() {\r\n const viewOverlayDialog = this.dialog.open(ViewDocumentComponent, {\r\n disableClose: true,\r\n height: '100%',\r\n width: '100%',\r\n maxWidth: 'inherit'\r\n });\r\n viewOverlayDialog.componentInstance.formSrc = this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(this.fileAsBlob));\r\n viewOverlayDialog.afterClosed().subscribe(() => {\r\n this.getIepFormsWithinDocumentData();\r\n this.getImportedDocuments();\r\n });\r\n }\r\n viewMassContent(studentHeader: boolean) {\r\n const viewOverlayDialogPB = this.dialog.open(IndeterminateProgressBarComponent, {\r\n disableClose: true,\r\n });\r\n viewOverlayDialogPB.componentInstance.spEdcollectionId = this.spEdcollectionId;\r\n viewOverlayDialogPB.componentInstance.studentId = this.studentId;\r\n viewOverlayDialogPB.componentInstance.studentCollectionId = this.studentCollectionId;\r\n viewOverlayDialogPB.componentInstance.spEdCollectionToIEPStatusId = this.SpEdCollectionToIEPStatusId;\r\n viewOverlayDialogPB.componentInstance.templateVersionId = 0;\r\n viewOverlayDialogPB.componentInstance.siteId = 0;\r\n viewOverlayDialogPB.componentInstance.yearId = this.yearId;\r\n viewOverlayDialogPB.componentInstance.callFromHomePage = false;\r\n viewOverlayDialogPB.componentInstance.studentTemplateVersionIds = this.studentTemplateVersionIds;\r\n viewOverlayDialogPB.componentInstance.studentHeader = studentHeader;\r\n viewOverlayDialogPB.componentInstance.printType = 0;\r\n\r\n viewOverlayDialogPB.afterClosed().subscribe(result => {\r\n if (result == 'print') {\r\n this.allCheck = false;\r\n this.fileAsBlob = null;\r\n this.fileAsBlob = viewOverlayDialogPB.componentInstance.fileAsBlobString;\r\n this.openPrintView();\r\n } else {\r\n this.allCheck = false;\r\n this.getIepFormsWithinDocumentData();\r\n this.getImportedDocuments();\r\n }\r\n });\r\n }\r\n\r\n clearFilterFromFooter() {\r\n this.tylerMatData.removeAllFilters();\r\n this.matDataSource.removeAllFilters();\r\n this.isFiltered = false;\r\n }\r\n\r\n maitainTeamClick() {\r\n const manageTeamDialogRef = this.dialog.open(ManageTeamComponent, {\r\n disableClose: true,\r\n minWidth: '100vw',\r\n maxWidth: '100vw',\r\n minHeight: '100vh',\r\n maxHeight: '100vh'\r\n });\r\n manageTeamDialogRef.componentInstance.spedCollectionToStudentId = this.studentCollectionId;\r\n manageTeamDialogRef.componentInstance.collectionName = this.collectionName;\r\n manageTeamDialogRef.componentInstance.status = this.status;\r\n }\r\n allowDeleteFinalStatus() {\r\n if (this.status == 'Reviewed by Supervisor' || this.status == 'Completed') {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n getUpdatedCheckedByUserId(formMode: string, selectedForm: IepFormsWithinDocuments) {\r\n this.formWithinDocuments.getStudentCollectionTemplate(selectedForm.StudentCollectionTemplateVersionId, selectedForm.TemplateName).subscribe(result => {\r\n this.formWithinDocuments.spedStudentCollectionTemplate = result;\r\n this.openForm(selectedForm, formMode);\r\n });\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.tylerMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n if (row.DoumentName.indexOf('MO_5_IEPGoalMaint') > 0 || row.DoumentName.indexOf('IL_5_IEPGoalObjectives') > 0 || row.DoumentName.indexOf('NM_10_IEPGoalMaint') > 0 || row.DoumentName.indexOf('OR_6_IEPAAFGO') > 0) {\r\n this.tylerMatData.toggleExpanded(row);\r\n }\r\n }\r\n\r\n expandAllRowClick() {\r\n this.expandAllRow = !this.expandAllRow;\r\n for (const row of this.tylerMatData.data.filter(x => x.DoumentName.indexOf('MO_5_IEPGoalMaint') > 0 || x.DoumentName.indexOf('IL_5_IEPGoalObjectives') > 0 || x.DoumentName.indexOf('NM_10_IEPGoalMaint') > 0 || x.DoumentName.indexOf('OR_6_IEPAAFGO') > 0)) {\r\n row.detailRow = this.expandAllRow;\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n}","export class IepFormsWithinDocuments {\r\n // Version\r\n IsOptional: boolean;\r\n IsAllowMultiple: boolean;\r\n TemplateVersionId: number;\r\n TemplateName: string;\r\n TemplateNameHTML: string;\r\n DoumentName: string;\r\n Sequence: number;\r\n TemplateCollectionId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n StudnetXMLId: number;\r\n LastModifiedBy: string;\r\n LastModifiedDate: Date;\r\n TemplateId: number;\r\n IsLocked: boolean;\r\n NewVersion: boolean;\r\n ToolTip: string;\r\n CreatorId: number;\r\n HTMLDATAStream: string;\r\n UserName: string;\r\n IsEdit: boolean;\r\n IsCreator: boolean;\r\n Version: number;\r\n CheckedOutByUserId: number;\r\n CheckedOutByuserName: string;\r\n ModifiedByUserName: string;\r\n IsMarkedComplete: boolean;\r\n TeamMemberPermissionId: number;\r\n // non Dto\r\n StatusChecked = false;\r\n}\r\n\r\nexport class ImportedDocuments {\r\n SpedDocumentId: number;\r\n Description: string;\r\n DocumentName: string;\r\n CreatedDate: Date;\r\n UserName: string;\r\n SpEdDocumentToStudentInstanceId: number;\r\n FileBase64: string;\r\n // non dto Fields\r\n MyFileBase64String: string;\r\n FileType: string;\r\n FileName: string;\r\n StudentId: number;\r\n spedCollectionToStudentId: number;\r\n FileExtension: string;\r\n}\r\n\r\nexport class GoalData {\r\n GoalDescription = '';\r\n ObjectiveDescription = '';\r\n FieldName = '';\r\n ObjFieldName = '';\r\n FirstName = '';\r\n LastName = '';\r\n StudentCollectionId: number;\r\n StudentId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n MasterTypeId: number;\r\n TemplateVersionId: number;\r\n TemplateName = '';\r\n}\r\n\r\nexport class OptionalForms {\r\n CollectionId: number;\r\n Version: number;\r\n IsOptional: boolean;\r\n IsAllowMultiple: boolean;\r\n TemplateVersionId: number;\r\n TemplateName: string;\r\n Sequence: number;\r\n TemplateCollectionId: number;\r\n\r\n // Non Dto\r\n StatusChecked = false;\r\n}\r\n\r\nexport class TeamMemberPermission {\r\n SpedTemplateVersionId: number;\r\n SpedCollectionId: number;\r\n IsEdit: boolean;\r\n}\r\n\r\nexport class SpedTeamMemberUpdate {\r\n CollectionToStudentId: number;\r\n TeacherUserId: number;\r\n Template: string;\r\n}\r\nexport class PickIdentification {\r\n StudentCollectionId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n StudentId: number;\r\n IdentificationDesc: string;\r\n IdentificationCode: string;\r\n DualIdentificationDesc: string;\r\n DualIdentificationCode: string;\r\n TertiaryIdentificationDesc: string;\r\n TertiaryIdentificationCode: string;\r\n QuaternaryIdentificationDesc: string;\r\n QuaternaryIdentificationCode: string;\r\n FifthIdentificationDesc: string;\r\n FifthIdentificationCode: string;\r\n TemplateName: string;\r\n TemplateVersionId: number;\r\n IdentificationId: number;\r\n DualIdentificationId: number;\r\n TertiaryIdentificationId: number;\r\n QuaternaryIdentificationId: number;\r\n FifthIdentificationId: number;\r\n}\r\n\r\nexport class IdentificationSubCodes {\r\n Code: string;\r\n Description: string;\r\n LongDescription: string;\r\n Sequence: number;\r\n Active: boolean;\r\n DataId: number;\r\n}\r\nexport class PlaMaintenance {\r\n StudentCollectionId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n StudentId: number;\r\n CategoryName: string;\r\n RowIndex: number;\r\n CategoryDescription: string;\r\n CategoryNote: string;\r\n UserName: string;\r\n TemplateName: string;\r\n TemplateVersionId: string;\r\n}\r\nexport class PickCourseOfStudy {\r\n StudentCollectionId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n CategoryDescription: string;\r\n StudentId: number;\r\n TemplateName: string;\r\n TemplateVersionId: string;\r\n}\r\n\r\nexport class FormListSequence {\r\n StudentCollectionId: number;\r\n TemplateVersionId: number;\r\n StudentCollectionTemplateVersionId: number;\r\n Sequence: number;\r\n}\r\n\r\nexport class StudentCollectionTemplate {\r\n CheckOutByUserId: number;\r\n UserName: string;\r\n CheckedOutByUserName: string;\r\n}","
FORM CHECKED OUT
\r\n\r\n
\r\n

\r\n {{templateName}} is checked out by {{checkedOutBy}}\r\n and not editable at this time.\r\n

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

\r\n {{templateName}} is checked out by {{checkedOutBy}}\r\n and not editable at this time.

\r\n

Would you like to override this?

\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Sped360Service } from '../../../sped360.service';\r\n\r\n@Component({\r\n selector: 'app-check-in-check-out',\r\n templateUrl: './check-in-check-out.component.html'\r\n})\r\nexport class CheckInCheckOutComponent implements OnInit {\r\n dialogTitle = '';\r\n checkedOutBy: string;\r\n templateName: string;\r\n collectionCode: string;\r\n checkOutDocument = false;\r\n checkOutDocument504 = false;\r\n constructor(private dialogRef: MatDialogRef,\r\n private sped360Service: Sped360Service) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.checkOutDocument = this.sped360Service.spedFixedPermission.CheckOutDocument;\r\n this.checkOutDocument504 = this.sped360Service.spedFixedPermission.CheckOut504Document;\r\n }\r\n closeClick() {\r\n this.sped360Service.continueClicked = false;\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n this.sped360Service.continueClicked = true;\r\n this.dialogRef.close('save');\r\n }\r\n\r\n}","
{{dialogTitle}}
\r\n\r\n
\r\n
\r\n \r\n There are no data records to display.\r\n \r\n
\r\n
\r\n
0\">\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n {{element.Description}} \r\n \r\n \r\n \r\n \r\n \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, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { AccomodationBank } from '../../../sped-management/sped-management.model';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { PickCourseOfStudy } from '../../formwithin-document-modal';\r\n\r\n@Component({\r\n selector: 'app-pick-course-of-study',\r\n templateUrl: './pick-course-of-study.component.html',\r\n styleUrls: ['./pick-course-of-study.component.css']\r\n})\r\nexport class PickCourseOfStudyComponent implements OnInit {\r\n dialogTitle = '';\r\n getCourceOfStudyData: PickCourseOfStudy[] = [];\r\n tempCourseOfStudyGrid: AccomodationBank[] = [];\r\n columnToDisplay = ['Checkbtn', 'Description'];\r\n tylerMatData = new TylerMatTableDataSource();\r\n allFormCheck = false;\r\n categoryDescription: string;\r\n yearId: number;\r\n studentXMLDataId: number;\r\n\r\n constructor(private formWithinDocumentService: FormWithinDocumentsService,\r\n private matDialogRef: MatDialogRef,\r\n private yearService: YearService) { }\r\n\r\n ngOnInit(): void {\r\n this.yearId = this.yearService.defaultYear.Id;\r\n this.showgrid();\r\n }\r\n\r\n closeClick() {\r\n this.checkOutForm();\r\n this.matDialogRef.close();\r\n }\r\n\r\n showgrid() {\r\n this.tylerMatData = new TylerMatTableDataSource(this.tempCourseOfStudyGrid);\r\n this.tylerMatData.data = this.tempCourseOfStudyGrid;\r\n\r\n }\r\n saveClick() {\r\n this.formWithinDocumentService.courceOfStudyData.CategoryDescription = this.categoryDescription;\r\n this.formWithinDocumentService.saveCourseOfStudyData(this.yearId).subscribe(() => {\r\n this.closeClick();\r\n });\r\n }\r\n\r\n checkAllForms() {\r\n if (this.allFormCheck == true) {\r\n this.tempCourseOfStudyGrid.forEach(obj => {\r\n obj.Checked = true;\r\n if (this.categoryDescription == null || this.categoryDescription == undefined) {\r\n this.categoryDescription = obj.Description + '\\n';\r\n }\r\n else {\r\n this.categoryDescription = this.categoryDescription + obj.Description + '\\n';\r\n }\r\n });\r\n } else if (this.allFormCheck == false) {\r\n this.tempCourseOfStudyGrid.forEach(obj => {\r\n obj.Checked = false;\r\n });\r\n }\r\n }\r\n\r\n checkBoxClick(selected: AccomodationBank) {\r\n if (selected.Checked == true) {\r\n if (this.categoryDescription == null || this.categoryDescription == undefined) {\r\n this.categoryDescription = selected.Description + '\\n';\r\n }\r\n else {\r\n this.categoryDescription = this.categoryDescription + selected.Description + '\\n';\r\n }\r\n }\r\n }\r\n\r\n checkOutForm() {\r\n this.formWithinDocumentService.checkOutForm(this.studentXMLDataId, this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId, false).subscribe(() => {\r\n });\r\n }\r\n\r\n}","
{{dialogTitle}}
\r\n\r\n\r\n
0\" style=\"height: 100%;\">\r\n
\r\n \r\n \r\n \r\n Category\r\n \r\n \r\n \r\n \r\n {{element.CategoryDescription}} \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n {{element.DataBankDescription}} \r\n \r\n \r\n \r\n Action\r\n \r\n \r\n Select\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
0\" class=\"flex-content\" style=\"height: 100%;\">\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Category\r\n \r\n \r\n \r\n \r\n {{CL.CategoryDescription}} \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n \r\n {{CL.DataBankDescription}} \r\n \r\n\r\n \r\n \r\n Action\r\n \r\n \r\n Select\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Objective Description\r\n\r\n \r\n \r\n {{detail.DataBankDescription}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \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, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../shared-components/angular-material/mat-animations';\r\nimport { StudentService } from '../../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { CategoryGrid } from '../../../sped-management/sped-management.model';\r\nimport { SpedManagementService } from '../../../sped-management/sped-management.service';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { GoalData } from '../../formwithin-document-modal';\r\n\r\n@Component({\r\n selector: 'app-pick-goal-maintenance',\r\n templateUrl: './pick-goal-maintenance.component.html',\r\n styleUrls: ['./pick-goal-maintenance.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class PickGoalMaintenanceComponent implements OnInit {\r\n dialogTitle = '';\r\n showSimpleGridData: CategoryGrid[] = [];\r\n showGoalGridData: CategoryGrid[] = [];\r\n childData: CategoryGrid[] = [];\r\n expandRowDataBankId: number;\r\n tylerMatData = new TylerMatTableDataSource();\r\n masterTypeId: number;\r\n goalData = new GoalData();\r\n yearId: number;\r\n combineGoalAndObjective: boolean;\r\n allCheck = false;\r\n stateCode: string;\r\n objectiveDescription: string;\r\n studentXMLDataId: number;\r\n expandAllRow = false;\r\n\r\n columToInnerGrid = ['CheckBtn', 'DataBankDescription'];\r\n columnToDisplay = ['More', 'CategoryDescription', 'DataBankDescription', 'Action'];\r\n\r\n @ViewChild(MatSort) sort: MatSort;\r\n @ViewChild(MatPaginator) paginator: MatPaginator;\r\n\r\n constructor(private spedManagementService: SpedManagementService,\r\n private matDialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private studentDService: StudentService,\r\n private formWithinDocumentService: FormWithinDocumentsService,\r\n private yearService: YearService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.stateCode = this.loginService.LoginSettings.State;\r\n this.combineGoalAndObjective = this.loginService.LoginSettings.CombineGoalsAndObjectives;\r\n this.formWithinDocumentService.goalData.FirstName = this.studentDService.selectedStudent.FirstName;\r\n this.formWithinDocumentService.goalData.LastName = this.studentDService.selectedStudent.LastName;\r\n this.formWithinDocumentService.goalData.MasterTypeId = this.masterTypeId;\r\n this.yearId = this.yearService.defaultYear.Id;\r\n if (this.combineGoalAndObjective == true) {\r\n this.getGoalGridData();\r\n } else {\r\n this.columnToDisplay.splice(0, 1);\r\n this.getSimpleGridData();\r\n }\r\n }\r\n\r\n getGoalGridData() {\r\n let masterType: boolean;\r\n if (this.masterTypeId == 0) {\r\n masterType = false;\r\n } else if (this.masterTypeId == 1) {\r\n masterType = true;\r\n }\r\n this.spedManagementService.getObjectiveBankData(0, 0, masterType).subscribe(data => {\r\n let gridData = [];\r\n gridData = data.filter(x => x.DataParentId == 0);\r\n gridData.forEach(detail => {\r\n detail.child = data.filter(x => x.DataParentId == detail.DataBankId);\r\n this.childData = data.filter(x => x.DataParentId == detail.DataBankId);\r\n });\r\n this.showGoalGridData = gridData;\r\n this.tylerMatData = new TylerMatTableDataSource(this.showGoalGridData);\r\n this.tylerMatData.data = this.showGoalGridData;\r\n if (this.expandRowDataBankId > 0) {\r\n this.toggleExpanded(this.tylerMatData.data.filter(x => x.DataBankId == this.expandRowDataBankId)[0]);\r\n }\r\n setTimeout(() => {\r\n this.tylerMatData.sort = this.sort;\r\n this.tylerMatData.paginator = this.paginator;\r\n }, 0);\r\n\r\n });\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.tylerMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.tylerMatData.checkExpanded(row);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.tylerMatData.rowKeyPress(event, row);\r\n }\r\n\r\n getSimpleGridData() {\r\n let masterType: boolean;\r\n if (this.masterTypeId == 0) {\r\n masterType = false;\r\n } else if (this.masterTypeId == 1) {\r\n masterType = true;\r\n }\r\n this.spedManagementService.getObjectiveBankData(0, 0, masterType).subscribe(data => {\r\n this.showSimpleGridData = data;\r\n this.tylerMatData = new TylerMatTableDataSource(this.showSimpleGridData);\r\n this.tylerMatData.data = this.showSimpleGridData;\r\n setTimeout(() => {\r\n this.tylerMatData.sort = this.sort;\r\n this.tylerMatData.paginator = this.paginator;\r\n }, 0);\r\n });\r\n }\r\n\r\n onRowSelect(selectedRow: CategoryGrid) {\r\n const dataBankDescription: string = selectedRow.DataBankDescription;\r\n this.formWithinDocumentService.goalData.GoalDescription = dataBankDescription.replace('\\\\Name-F\\\\', this.formWithinDocumentService.goalData.FirstName).replace('\\\\Name-L\\\\', this.formWithinDocumentService.goalData.LastName);\r\n if (this.objectiveDescription != undefined) {\r\n this.formWithinDocumentService.goalData.ObjectiveDescription = this.objectiveDescription;\r\n }\r\n this.formWithinDocumentService.saveGoalBankData(this.yearId).subscribe(() => {\r\n this.closeClick(true);\r\n });\r\n }\r\n\r\n closeClick(callFromOnRowSelect: boolean = false) {\r\n if (!callFromOnRowSelect) {\r\n this.checkOutForm();\r\n }\r\n this.matDialogRef.close();\r\n }\r\n\r\n checkAllClick(child: any) {\r\n if (this.allCheck == true) {\r\n child.forEach(objectives => {\r\n objectives.StatusChecked = true;\r\n if (this.objectiveDescription == null || this.objectiveDescription == undefined) {\r\n this.objectiveDescription = ' • ' + objectives.DataBankDescription + '\\n';\r\n }\r\n else {\r\n this.objectiveDescription = this.objectiveDescription + ' • ' + objectives.DataBankDescription + '\\n';\r\n }\r\n });\r\n } else if (this.allCheck == false) {\r\n child.forEach(selectObjects => {\r\n selectObjects.StatusChecked = false;\r\n });\r\n }\r\n }\r\n\r\n checkBoxClick(checked: CategoryGrid) {\r\n if (checked.StatusChecked == true) {\r\n if (this.objectiveDescription == null || this.objectiveDescription == undefined) {\r\n this.objectiveDescription = ' • ' + checked.DataBankDescription + '\\n';\r\n }\r\n else {\r\n this.objectiveDescription = this.objectiveDescription + ' • ' + checked.DataBankDescription + '\\n';\r\n }\r\n }\r\n }\r\n\r\n checkOutForm() {\r\n this.formWithinDocumentService.checkOutForm(this.studentXMLDataId, this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId, false).subscribe(() => {\r\n });\r\n }\r\n\r\n expandAllRowClick() {\r\n this.expandAllRow = !this.expandAllRow;\r\n for (const row of this.tylerMatData.data) {\r\n row.detailRow = this.expandAllRow;\r\n }\r\n }\r\n\r\n}","
{{dialogTitle}}
\r\n\r\n \r\n \r\n \r\n {{item.Description}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item.Description}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item.Description}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item.Description}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{item.Description}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n There are no data records to display.\r\n \r\n
\r\n
\r\n
0\">\r\n
\r\n \r\n \r\n \r\n Code\r\n \r\n \r\n {{detail.Code}} \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n {{detail.Description}}\r\n \r\n \r\n \r\n \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, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { AccomodationBank } from '../../../sped-management/sped-management.model';\r\nimport { SpedManagementService } from '../../../sped-management/sped-management.service';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { IdentificationSubCodes, PickIdentification } from '../../formwithin-document-modal';\r\n\r\n@Component({\r\n selector: 'app-pick-identification-maintenance',\r\n templateUrl: './pick-identification-maintenance.component.html',\r\n styleUrls: ['./pick-identification-maintenance.component.css']\r\n})\r\nexport class PickIdentificationMaintenanceComponent implements OnInit {\r\n dialogTitle = '';\r\n getIdentificationData: AccomodationBank[] = [];\r\n tylerMatData = new TylerMatTableDataSource();\r\n selectedMasterDescription: string;\r\n stateCode: string;\r\n selectedDataId: number;\r\n dualSelectedDataId: number;\r\n selectedIdenticationCodes: string;\r\n tertiarySelectedDataId = 0;\r\n quaternarySelectedDataId = 0;\r\n fifthSelectedDataId = 0;\r\n getIdentificationSubCodeGrid: IdentificationSubCodes[] = [];\r\n xmlValue: PickIdentification[] = [];\r\n xmlIdentificationCode: PickIdentification[] = [];\r\n xmlDualIdentificationCode: PickIdentification[] = [];\r\n xmlTertiaryIdentificationCode: PickIdentification[] = [];\r\n xmlQuaternaryIdentificationCode: PickIdentification[] = [];\r\n xmlFifthIdentificationCode: PickIdentification[] = [];\r\n xmlValuesingle = new PickIdentification();\r\n yearId: number;\r\n columnToDisplay = ['Code', 'Description'];\r\n selectedCode: string;\r\n studentXMLDataId: number;\r\n\r\n\r\n constructor(private formWithinDocumentsService: FormWithinDocumentsService,\r\n private spedManagementService: SpedManagementService,\r\n private matDialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private yearService: YearService) { }\r\n\r\n ngOnInit(): void {\r\n this.yearId = this.yearService.defaultYear.Id;\r\n this.stateCode = this.loginService.LoginSettings.State;\r\n if (this.stateCode == 'MO') {\r\n this.selectedMasterDescription = 'Identification/Dual Identification Codes';\r\n }\r\n else if (this.stateCode == 'IL') {\r\n this.selectedMasterDescription = 'Identification Codes';\r\n }\r\n else if (this.stateCode == 'NM' || this.stateCode == 'OR') {\r\n this.selectedMasterDescription = 'Identification/Dual Identification Codes';\r\n }\r\n this.getXmlCode();\r\n }\r\n\r\n closeClick() {\r\n this.checkOutForm();\r\n this.matDialogRef.close();\r\n }\r\n\r\n getIdentificationDropDown() {\r\n this.spedManagementService.getIdentificationCode(this.selectedMasterDescription).subscribe(subCodes => {\r\n this.getIdentificationData = subCodes;\r\n if (this.xmlIdentificationCode.length == 0) {\r\n this.selectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n this.checkSelectedValues();\r\n }\r\n if (this.xmlDualIdentificationCode.length == 0) {\r\n this.dualSelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n this.checkSelectedValues();\r\n }\r\n if (this.xmlTertiaryIdentificationCode.length == 0) {\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n this.checkSelectedValues();\r\n }\r\n if (this.xmlQuaternaryIdentificationCode.length == 0) {\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n this.checkSelectedValues();\r\n }\r\n if (this.xmlFifthIdentificationCode.length == 0) {\r\n this.fifthSelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n } else {\r\n this.checkSelectedValues();\r\n }\r\n });\r\n }\r\n\r\n checkSelectedValues() {\r\n if (this.xmlIdentificationCode.length != 0) {\r\n let getdataId: AccomodationBank[] = [];\r\n getdataId = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].IdentificationCode);\r\n this.selectedDataId = JSON.parse(JSON.stringify(getdataId[0].DataId));\r\n\r\n }\r\n if (this.xmlDualIdentificationCode.length != 0) {\r\n let dualCode: AccomodationBank[] = [];\r\n dualCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].DualIdentificationCode);\r\n this.dualSelectedDataId = JSON.parse(JSON.stringify(dualCode[0].DataId));\r\n }\r\n\r\n if (this.stateCode == 'NM') {\r\n this.xmlValue.forEach(obj => {\r\n if (obj.TertiaryIdentificationCode == '') {\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n this.fifthSelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n let tertiaryCode: AccomodationBank[] = [];\r\n tertiaryCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].TertiaryIdentificationCode);\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(tertiaryCode[0].DataId));\r\n }\r\n if (obj.QuaternaryIdentificationCode == '') {\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n let quaternaryCode: AccomodationBank[] = [];\r\n quaternaryCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].QuaternaryIdentificationCode);\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(quaternaryCode[0].DataId));\r\n this.getDroDownGrid();\r\n }\r\n });\r\n }\r\n else if (this.stateCode == 'OR') {\r\n this.xmlValue.forEach(obj => {\r\n if (obj.TertiaryIdentificationCode == '') {\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n }\r\n else {\r\n let tertiaryCode: AccomodationBank[] = [];\r\n tertiaryCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].TertiaryIdentificationCode);\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(tertiaryCode[0].DataId));\r\n this.getDroDownGrid();\r\n }\r\n if (obj.QuaternaryIdentificationCode == '') {\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n } else {\r\n let quaternaryCode: AccomodationBank[] = [];\r\n quaternaryCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].QuaternaryIdentificationCode);\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(quaternaryCode[0].DataId));\r\n this.getDroDownGrid();\r\n }\r\n if (obj.FifthIdentificationCode == '') {\r\n this.fifthSelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n } else {\r\n let fifthCode: AccomodationBank[] = [];\r\n fifthCode = this.getIdentificationData.filter(x => x.Code == this.xmlValue[0].FifthIdentificationCode);\r\n this.fifthSelectedDataId = JSON.parse(JSON.stringify(fifthCode[0].DataId));\r\n this.getDroDownGrid();\r\n }\r\n // }\r\n });\r\n }\r\n else {\r\n this.tertiarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n this.quaternarySelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n this.fifthSelectedDataId = JSON.parse(JSON.stringify(this.getIdentificationData[0].DataId));\r\n this.getDroDownGrid();\r\n }\r\n }\r\n\r\n dropDownChange() {\r\n this.formWithinDocumentsService.pickIdentificationData.IdentificationId = this.selectedDataId;\r\n this.formWithinDocumentsService.pickIdentificationData.IdentificationCode = this.getIdentificationData.find(x => x.DataId == this.selectedDataId).Code;\r\n this.formWithinDocumentsService.pickIdentificationData.IdentificationDesc = this.getIdentificationData.find(x => x.DataId == this.selectedDataId).Description;\r\n this.formWithinDocumentsService.pickIdentificationData.DualIdentificationId = this.dualSelectedDataId;\r\n this.formWithinDocumentsService.pickIdentificationData.DualIdentificationCode = this.getIdentificationData.find(x => x.DataId == this.dualSelectedDataId).Code;\r\n this.formWithinDocumentsService.pickIdentificationData.DualIdentificationDesc = this.getIdentificationData.find(x => x.DataId == this.dualSelectedDataId).Description;\r\n this.formWithinDocumentsService.pickIdentificationData.TertiaryIdentificationId = this.tertiarySelectedDataId;\r\n this.formWithinDocumentsService.pickIdentificationData.TertiaryIdentificationCode = this.getIdentificationData.find(x => x.DataId == this.tertiarySelectedDataId).Code;\r\n this.formWithinDocumentsService.pickIdentificationData.TertiaryIdentificationDesc = this.getIdentificationData.find(x => x.DataId == this.tertiarySelectedDataId).Description;\r\n this.formWithinDocumentsService.pickIdentificationData.QuaternaryIdentificationId = this.quaternarySelectedDataId;\r\n this.formWithinDocumentsService.pickIdentificationData.QuaternaryIdentificationCode = this.getIdentificationData.find(x => x.DataId == this.quaternarySelectedDataId).Code;\r\n this.formWithinDocumentsService.pickIdentificationData.QuaternaryIdentificationDesc = this.getIdentificationData.find(x => x.DataId == this.quaternarySelectedDataId).Description;\r\n this.formWithinDocumentsService.pickIdentificationData.FifthIdentificationId = this.fifthSelectedDataId;\r\n this.formWithinDocumentsService.pickIdentificationData.FifthIdentificationCode = this.getIdentificationData.find(x => x.DataId == this.fifthSelectedDataId).Code;\r\n this.formWithinDocumentsService.pickIdentificationData.FifthIdentificationDesc = this.getIdentificationData.find(x => x.DataId == this.fifthSelectedDataId).Description;\r\n this.getDroDownGrid();\r\n }\r\n getDroDownGrid() {\r\n this.formWithinDocumentsService.spedTemplateFieldsRead(this.selectedDataId, this.dualSelectedDataId, this.tertiarySelectedDataId, this.quaternarySelectedDataId, this.fifthSelectedDataId).subscribe(data => {\r\n this.getIdentificationSubCodeGrid = data;\r\n this.tylerMatData = new TylerMatTableDataSource(this.getIdentificationSubCodeGrid);\r\n this.tylerMatData.data = this.getIdentificationSubCodeGrid;\r\n });\r\n }\r\n\r\n saveClick() {\r\n this.formWithinDocumentsService.saveIdentificationData(this.yearId).subscribe(() => {\r\n this.closeClick();\r\n });\r\n }\r\n\r\n getXmlCode() {\r\n this.formWithinDocumentsService.getXMLCodesvalues(this.yearId).subscribe(xmlData => {\r\n this.xmlValue = xmlData;\r\n const xmltempidentification = this.xmlValue;\r\n const xmldualValue = this.xmlValue;\r\n const xmlTertiary = this.xmlValue;\r\n const xmlQuaternary = this.xmlValue;\r\n const xmlFifthValue = this.xmlValue;\r\n this.xmlIdentificationCode = xmltempidentification.filter(x => x.IdentificationCode != '');\r\n this.xmlDualIdentificationCode = xmldualValue.filter(x => x.DualIdentificationCode != '');\r\n this.xmlTertiaryIdentificationCode = xmlTertiary.filter(x => x.TertiaryIdentificationCode != '');\r\n this.xmlQuaternaryIdentificationCode = xmlQuaternary.filter(x => x.QuaternaryIdentificationCode != '');\r\n this.xmlFifthIdentificationCode = xmlFifthValue.filter(x => x.FifthIdentificationCode != '');\r\n this.getIdentificationDropDown();\r\n });\r\n }\r\n\r\n checkOutForm() {\r\n this.formWithinDocumentsService.checkOutForm(this.studentXMLDataId, this.formWithinDocumentsService.spedStudentCollectionTemplate.CheckOutByUserId, false).subscribe(() => {\r\n });\r\n }\r\n\r\n}","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { PlaMaintenance } from '../../formwithin-document-modal';\r\n\r\n@Component({\r\n selector: 'app-present-level-maintenance',\r\n templateUrl: './present-level-maintenance.component.html',\r\n styleUrls: ['./present-level-maintenance.component.css']\r\n})\r\nexport class PresentLevelMaintenanceComponent implements OnInit {\r\n dialogTitle = '';\r\n userName: string;\r\n userNamePLAA: string;\r\n getPlaFormData: PlaMaintenance[] = [];\r\n getSelectedPlaValues: PlaMaintenance[] = [];\r\n dataField = new PlaMaintenance();\r\n yearId: number;\r\n categoryDescription: string;\r\n errorList: ErrorList[] = [];\r\n studentXMLDataId: number;\r\n constructor(private matDialogRef: MatDialogRef,\r\n private formWithinDocumentService: FormWithinDocumentsService,\r\n private userService: UserService,\r\n private yearService: YearService) { }\r\n\r\n ngOnInit(): void {\r\n this.userName = this.userService.currentUser.UserName;\r\n this.userNamePLAA = this.userService.currentUser.FirstName.substring(0,1) + '. ' + this.userService.currentUser.LastName;\r\n this.yearId = this.yearService.defaultYear.Id;\r\n }\r\n\r\n GetChildData(data) {\r\n this.dataField.CategoryNote = data;\r\n }\r\n closeClick() {\r\n this.checkOutForm();\r\n this.matDialogRef.close();\r\n }\r\n\r\n checkOutForm() {\r\n this.formWithinDocumentService.checkOutForm(this.studentXMLDataId, this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId, false).subscribe(() => {\r\n });\r\n }\r\n\r\n saveClick() {\r\n if (this.validationCheck().length == 0) {\r\n this.formWithinDocumentService.plaMiantenanceData.CategoryDescription = this.dataField.CategoryDescription;\r\n this.formWithinDocumentService.plaMiantenanceData.CategoryNote = this.dataField.CategoryNote;\r\n this.formWithinDocumentService.plaMiantenanceData.UserName = this.userNamePLAA;\r\n this.formWithinDocumentService.savePlaData(this.yearId).subscribe(() => {\r\n this.closeClick();\r\n });\r\n }\r\n }\r\n\r\n validationCheck(): ErrorList[] {\r\n this.errorList = [];\r\n if (this.dataField.CategoryNote == '' || this.dataField.CategoryNote == null) {\r\n this.errorList.push({\r\n fieldName: 'Note',\r\n fieldRef: null,\r\n errorMsg: ' Note is required'\r\n });\r\n }\r\n return this.errorList;\r\n }\r\n}\r\n","
\r\n
SIS K-12
\r\n
{{dialogTitle}}
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
","\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{objective.TemplateName}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n View-only\r\n Edit Mode\r\n
\r\n\r\n \r\n\r\n\r\n
\r\n \r\n \r\n
\r\n
","import { AfterViewInit, Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { CheckForErrorsMessageComponent } from '../../../../shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\nimport { SharedService } from '../../../../shared-components/shared.service';\r\nimport { UserService } from '../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../shared-modules/login/login.service';\r\nimport { SpedCardsService } from '../../../sped-home/sped-cards/sped-cards.service';\r\nimport { AccomodationBank } from '../../../sped-management/sped-management.model';\r\nimport { SpedManagementService } from '../../../sped-management/sped-management.service';\r\nimport { Sped360Service } from '../../../sped360.service';\r\nimport { ViewDocumentComponent } from '../../../student-document-home/sped-student-document-cards/sped-student-collection-common-card/view-document/view-document.component';\r\nimport { FormWithinDocumentsService } from '../../form-within-documents.service';\r\nimport { IepFormsWithinDocuments, PlaMaintenance } from '../../formwithin-document-modal';\r\nimport { PickCourseOfStudyComponent } from '../../maintenance-modals/pick-course-of-study/pick-course-of-study.component';\r\nimport { PickGoalMaintenanceComponent } from '../../maintenance-modals/pick-goal-maintenance/pick-goal-maintenance.component';\r\nimport { PickIdentificationMaintenanceComponent } from '../../maintenance-modals/pick-identification-maintenance/pick-identification-maintenance.component';\r\nimport { PresentLevelMaintenanceComponent } from '../../maintenance-modals/present-level-maintenance/present-level-maintenance.component';\r\nimport { CheckInCheckOutComponent } from '../check-in-check-out/check-in-check-out.component';\r\nimport { IndeterminateProgressBarComponent } from '../indeterminate-progress-bar/indeterminate-progress-bar.component';\r\n\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-edit-html-form',\r\n templateUrl: './edit-html-form.component.html',\r\n styleUrls: ['./edit-html-form.component.css']\r\n})\r\nexport class EditHtmlFormComponent implements OnInit, AfterViewInit, OnDestroy {\r\n warningDialog: MatDialogRef;\r\n @ViewChild('iframe') iframe: ElementRef;\r\n\r\n dialogTitle = '';\r\n formSrc: any;\r\n htmlElements = [];\r\n studentFormData: any;\r\n dataField = new IepFormsWithinDocuments();\r\n yearId: number;\r\n schoolId: number;\r\n ddData: IepFormsWithinDocuments[] = [];\r\n getSelectedPlaValues: PlaMaintenance[] = [];\r\n objectIndex: number;\r\n selectedForm: any;\r\n studentCollectionTemplateVersionId: number;\r\n isEdit: boolean;\r\n callForSaveSubscription: Subscription;\r\n selectedFormDataSubscription: Subscription;\r\n stateCode = '';\r\n userId: number;\r\n getsingleValue = new PlaMaintenance();\r\n getCosData: AccomodationBank[] = [];\r\n canEditForm = true;\r\n checkOutDocument: boolean;\r\n checkOutDocument504: boolean;\r\n onlySaveClick: boolean;\r\n previousSelectedForm: any;\r\n formStatus: string;\r\n iconAllowed: boolean;\r\n collectionCode: string;\r\n fileAsBlob: Blob;\r\n navigateToForm = false;\r\n callFromNgOnInit: boolean;\r\n changeStatus: string;\r\n disableNavigationButton = false;\r\n\r\n constructor(\r\n private matDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private spedCardService: SpedCardsService,\r\n private sanitizer: DomSanitizer,\r\n private yearService: YearService,\r\n private formWithinDocumentService: FormWithinDocumentsService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private spedManagementService: SpedManagementService,\r\n private sped360Service: Sped360Service,\r\n private sharedService: SharedService,\r\n private router: Router\r\n ) {\r\n\r\n (window).navigateToMaint = this.navigateToMaint.bind(this);\r\n (window).navigateToEvalMaint = this.navigateToEvalMaint.bind(this);\r\n (window).navigateToGoalORMaint = this.navigateToGoalORMaint.bind(this);\r\n (window).navigateToPLAMaint = this.navigateToPLAMaint.bind(this);\r\n (window).navigateToCOSMaint = this.navigateToCOSMaint.bind(this);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.callFromNgOnInit = true;\r\n this.userId = this.userService.currentUser.Id;\r\n this.yearId = this.yearService.defaultYear.Id;\r\n this.schoolId = this.yearService.defaultYear.SchoolID;\r\n this.stateCode = this.loginService.LoginSettings.State;\r\n this.canEditForm = this.sped360Service.canEditForm;\r\n this.formsInDDL();\r\n this.objectIndex = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentFormData.StudentCollectionTemplateVersionId);\r\n this.selectedForm = this.ddData.find(x => x.StudentCollectionTemplateVersionId == this.studentFormData.StudentCollectionTemplateVersionId);\r\n if (this.canEditForm == true && this.sped360Service.continueClicked == true && (this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId == 0 || this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId != this.userId)) {\r\n this.checkOutForm();\r\n }\r\n this.iconAllowed = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n\r\n this.studentCollectionTemplateVersionId = this.studentFormData.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.goalData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.goalData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.goalData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.pickIdentificationData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.plaMiantenanceData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.courceOfStudyData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.loadHtml();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.callFromNgOnInit = false;\r\n }\r\n\r\n loadHtml() {\r\n if (this.navigateToForm == true) {\r\n this.navigateToForm = false;\r\n if (this.canEditForm == true && this.checkInCheckOut() == true && this.selectedForm.CheckedOutByUserId != this.userId) {\r\n this.checkInCheckOutDialoge();\r\n } else {\r\n if ((this.callFromNgOnInit == false && this.canEditForm == true) || (this.onlySaveClick == true && (this.selectedForm.IsEdit == true || this.canEditForm == true) && (this.selectedForm.CheckedOutByUserId == 0 || this.selectedForm.CheckedOutByUserId == this.userId))) {\r\n this.checkOutForm();\r\n }\r\n }\r\n }\r\n else {\r\n if ((this.callFromNgOnInit == false && this.canEditForm == true) || (this.onlySaveClick == true && (this.selectedForm.IsEdit == true || this.canEditForm == true) && (this.selectedForm.CheckedOutByUserId == 0 || this.selectedForm.CheckedOutByUserId == this.userId))) {\r\n this.checkOutForm();\r\n }\r\n }\r\n\r\n let queryString = '';\r\n queryString += '?spedCollectionId=' + this.studentFormData.SpEdcollectionId +\r\n '&studentId=' + this.studentFormData.StudentId +\r\n '&spedCollectionToStudentId=' + this.studentFormData.StudentCollectionId +\r\n '&StudentCollectionTemplateVersionId=' + this.selectedForm.StudentCollectionTemplateVersionId +\r\n '&collectionStatusId=' + this.studentFormData.SpEdCollectionToIEPStatusId +\r\n '&templateVersionId=' + this.selectedForm.TemplateVersionId +\r\n '&templateName=' + this.selectedForm.TemplateName +\r\n '&userId=' + this.userId +\r\n '&siteId=' + this.schoolId +\r\n '&yearId=' + this.yearId +\r\n '&isEdit=' + this.canEditForm; // this.selectedForm.IsEdit;\r\n this.formSrc = this.sanitizer.bypassSecurityTrustResourceUrl('./SpecialEd.aspx' + queryString);\r\n setTimeout(() => {\r\n this.disableNavigationButton = false;\r\n }, 200);\r\n\r\n }\r\n\r\n closeClick(type: string) {\r\n if (type == 'close' && this.canEditForm == true) {\r\n this.warningDialog = this.dialog.open(CheckForErrorsMessageComponent, {\r\n disableClose: true,\r\n data: {\r\n errors: []\r\n }\r\n });\r\n this.warningDialog.componentInstance.dialogBox = this.warningDialog;\r\n this.warningDialog.afterClosed().subscribe(result => {\r\n switch (result) {\r\n case 1: {\r\n this.saveClick(undefined, false, false, true, true);\r\n if (this.formWithinDocumentService.callFromAlertDialog == true) {\r\n setTimeout(() => {\r\n this.router.navigateByUrl('/sped360/studentDocumentHome');\r\n this.dialog.closeAll();\r\n }, 300);\r\n }\r\n break;\r\n }\r\n case 0: {\r\n this.callFromCloseButton();\r\n if (this.formWithinDocumentService.callFromAlertDialog == true) {\r\n this.router.navigateByUrl('/sped360/studentDocumentHome');\r\n this.dialog.closeAll();\r\n }\r\n break;\r\n }\r\n case -1: {\r\n this.warningDialog.close();\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n });\r\n } else {\r\n this.callFromCloseButton();\r\n }\r\n }\r\n\r\n callFromCloseButton() {\r\n this.getStudentCollectionTemplate();\r\n setTimeout(() => {\r\n if (this.canEditForm == true && this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit) == true && this.sped360Service.continueClicked == true && (this.selectedForm.StudentXMLDataId != undefined || this.selectedForm.StudnetXMLId != undefined)) {\r\n this.checkOutForm();\r\n }\r\n this.matDialogRef.close();\r\n }, 300);\r\n }\r\n\r\n saveClick(callForSaveXmlData: boolean, onlySaveClick: boolean = false, printPreview: boolean = false, errorAuthGuard: boolean = false, buttonClick: boolean = false) {\r\n let validate: boolean;\r\n if (onlySaveClick == true && this.navigateToForm == false) {\r\n this.changeStatus = 'Apply';\r\n } else if (this.navigateToForm == true) {\r\n this.changeStatus = 'Navigate';\r\n } else {\r\n this.changeStatus = 'Done';\r\n }\r\n setTimeout(() => {\r\n if (printPreview == true || buttonClick == true) {\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n }\r\n if (!errorAuthGuard && !printPreview && this.iframe.nativeElement.contentWindow.fnRequiredFieldValidation != undefined && callForSaveXmlData != false) {\r\n validate = this.iframe.nativeElement.contentWindow.fnRequiredFieldValidation();\r\n }\r\n if (validate == false || validate == undefined) {\r\n this.disableNavigationButton = false;\r\n }\r\n if (validate == false && this.navigateToForm == true) {\r\n this.objectIndex = this.previousSelectedForm.PreviousObjectIndex;\r\n this.studentCollectionTemplateVersionId = this.previousSelectedForm.StudentCollectionTemplateVersionId;\r\n this.selectedForm = this.previousSelectedForm;\r\n this.formWithinDocumentService.goalData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.goalData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.goalData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.pickIdentificationData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.plaMiantenanceData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.courceOfStudyData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n }\r\n if (errorAuthGuard || printPreview || validate == true || this.formStatus == 'Reviewed by Supervisor' || this.formStatus == 'Completed' || callForSaveXmlData == false) {\r\n const divHtml = this.iframe.nativeElement.contentWindow.document.getElementById('divHtmlContent');\r\n const htmlElements = [];\r\n this.fillArray(divHtml, htmlElements);\r\n const arrhtmlInputElements = [];\r\n for (let i = 0; i < htmlElements.length; i++) {\r\n if (htmlElements[i].id != null && htmlElements[i].value != null) {\r\n switch (htmlElements[i].type) {\r\n case 'checkbox':\r\n let chkvalue = '';\r\n if (htmlElements[i].getAttribute('formatvalue') != undefined) {\r\n if (htmlElements[i].getAttribute('formatvalue') == '10') {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue = '1';\r\n }\r\n else {\r\n chkvalue = '0';\r\n }\r\n }\r\n if (htmlElements[i].getAttribute('formatvalue') == 'yesno') {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue = 'yes';\r\n }\r\n else {\r\n chkvalue = 'no';\r\n }\r\n }\r\n }\r\n else {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue = 'Yes';\r\n }\r\n else {\r\n chkvalue = 'No';\r\n }\r\n }\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: htmlElements[i].value, name: htmlElements[i].id, xmlValue: chkvalue, type: 'checkbox', tablename: '', isdynamic: '' });\r\n break;\r\n case 'radio':\r\n if (htmlElements[i].name != null && htmlElements[i].name.startsWith('rdg')) {\r\n let chkvalue1 = '';\r\n if (htmlElements[i].checked == true) {\r\n chkvalue1 = 'True';\r\n }\r\n else {\r\n chkvalue1 = 'False';\r\n }\r\n\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: encodeURIComponent(htmlElements[i].value), name: htmlElements[i].name, xmlValue: chkvalue1, type: 'radio', tablename: '', isdynamic: '' });\r\n }\r\n else if (htmlElements[i].id.startsWith('chk')) {\r\n let chkvalue2 = '';\r\n if (htmlElements[i].getAttribute('formatvalue') != undefined) {\r\n if (htmlElements[i].getAttribute('formatvalue') == '10') {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue2 = '1';\r\n }\r\n else {\r\n chkvalue2 = '0';\r\n }\r\n }\r\n if (htmlElements[i].getAttribute('formatvalue') == 'yesno') {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue2 = 'yes';\r\n }\r\n else {\r\n chkvalue2 = 'no';\r\n }\r\n }\r\n }\r\n else {\r\n if (htmlElements[i].checked == true) {\r\n chkvalue2 = 'Yes';\r\n }\r\n else {\r\n chkvalue2 = 'No';\r\n }\r\n }\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: encodeURIComponent(htmlElements[i].value), name: htmlElements[i].id, xmlValue: chkvalue2, type: 'checkbox', tablename: '', isdynamic: '' });\r\n\r\n }\r\n break;\r\n case 'text':\r\n let value = '';\r\n if (htmlElements[i].id.toLowerCase().indexOf('phone') > 0 || htmlElements[i].id.toLowerCase().indexOf('fax') > 0 || htmlElements[i].id.toLowerCase().indexOf('tel') > 0 || htmlElements[i].id.toLowerCase().indexOf('telephone') > 0 || htmlElements[i].id.toLowerCase().indexOf('edmpno') > 0) {\r\n value = htmlElements[i].value.replace('(', '').replace(')', '').replace('-', '').replace('.', '').replace(/ /g, '');\r\n }\r\n else {\r\n value = htmlElements[i].value;\r\n }\r\n\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: encodeURIComponent(htmlElements[i].value), name: htmlElements[i].id, xmlValue: encodeURIComponent(value), type: 'text', tablename: '', isdynamic: '' });\r\n break;\r\n case 'textarea':\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: encodeURIComponent(htmlElements[i].value), name: htmlElements[i].id, xmlValue: encodeURIComponent(htmlElements[i].value), type: 'textarea', tablename: '', isdynamic: '' });\r\n break;\r\n case 'select-one':\r\n let strxmlvalue = '';\r\n if (htmlElements[i].options[htmlElements[i].selectedIndex] != undefined) {\r\n strxmlvalue = (htmlElements[i].options[htmlElements[i].selectedIndex]).getAttribute('value');\r\n }\r\n else {\r\n strxmlvalue = '';\r\n }\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: encodeURIComponent(htmlElements[i].value), name: htmlElements[i].id, xmlValue: encodeURIComponent(strxmlvalue), type: htmlElements[i].getAttribute('type'), tablename: '', isdynamic: '' });\r\n\r\n break;\r\n\r\n // default:\r\n // if(this.htmlElements[i].name != null)\r\n // {\r\n // arrhtmlInputElements.push({ id: this.htmlElements[i].id, value: this.htmlElements[i].value, name: this.htmlElements[i].name, xmlValue: this.htmlElements[i].value, type: ' ', tablename: this.htmlElements[i].tableid, isdynamic: this.htmlElements[i].type });\r\n // }\r\n }\r\n }\r\n if (htmlElements[i].id != null && htmlElements[i].id != '') {\r\n switch (htmlElements[i].tagName) {\r\n case 'TABLE':\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: '', name: htmlElements[i].id, xmlValue: '', type: '', tablename: htmlElements[i].id, isdynamic: htmlElements[i].getAttribute('type') });\r\n break;\r\n case 'TR':\r\n arrhtmlInputElements.push({ id: htmlElements[i].id, value: '', name: htmlElements[i].id, xmlValue: '', type: '', tablename: htmlElements[i].getAttribute('tableid'), isdynamic: htmlElements[i].getAttribute('type') });\r\n break;\r\n }\r\n }\r\n }\r\n const xml = JSON.stringify(arrhtmlInputElements);\r\n this.spedCardService.saveHTMLDocument(xml, this.studentFormData.StudentId, this.studentFormData.StudentCollectionId, this.studentFormData.TemplateVersionId, this.studentFormData.TemplateName, this.studentFormData.StudentCollectionTemplateVersionId, this.stateCode, this.changeStatus, this.yearId).subscribe(() => {\r\n this.sharedService.showGoodSnackbar();\r\n if (callForSaveXmlData == undefined && !onlySaveClick) {\r\n this.matDialogRef.close('save');\r\n }\r\n if (onlySaveClick) {\r\n this.onlySaveClick = onlySaveClick;\r\n this.getStudentCollectionTemplate();\r\n setTimeout(() => {\r\n this.loadHtml();\r\n }, 100);\r\n }\r\n if (printPreview) {\r\n this.viewPrintPreview();\r\n }\r\n });\r\n\r\n }\r\n }, 200);\r\n\r\n }\r\n\r\n fillArray(vector1, vector2) {\r\n if (vector1.children.length > 0) {\r\n for (let i = 0; i < vector1.children.length; i++) {\r\n // this.htmlElements.push(vector1.children[i]);\r\n this.fillArray(vector1.children[i], vector2);\r\n }\r\n }\r\n vector2.push(vector1);\r\n }\r\n\r\n compareObjects(o1: number, o2: number): boolean {\r\n if (o2 == null) {\r\n o2 = -1;\r\n }\r\n return (o1 == o2);\r\n }\r\n\r\n lastObject() {\r\n this.disableNavigationButton = true;\r\n this.previousSelectedForm = this.selectedForm;\r\n this.previousSelectedForm.PreviousObjectIndex = this.objectIndex;\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.objectIndex = this.ddData.length - 1;\r\n this.selectedForm = this.ddData[this.ddData.length - 1];\r\n // this.selectedForm.IsEdit = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.studentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.dropDownChange();\r\n }\r\n\r\n nextObject() {\r\n this.disableNavigationButton = true;\r\n this.previousSelectedForm = this.selectedForm;\r\n this.previousSelectedForm.PreviousObjectIndex = this.objectIndex;\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.objectIndex = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId) + 1;\r\n if (this.objectIndex < this.ddData.length) {\r\n const index = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId);\r\n this.selectedForm = this.ddData[index + 1];\r\n // this.selectedForm.IsEdit = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.studentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.dropDownChange();\r\n }\r\n }\r\n\r\n previousObject() {\r\n this.disableNavigationButton = true;\r\n this.previousSelectedForm = this.selectedForm;\r\n this.previousSelectedForm.PreviousObjectIndex = this.objectIndex;\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.objectIndex = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId) - 1;\r\n if (this.objectIndex >= 0) {\r\n const index = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId);\r\n this.selectedForm = this.ddData[index - 1];\r\n // this.selectedForm.IsEdit = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.studentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.dropDownChange();\r\n }\r\n }\r\n\r\n firstObject() {\r\n this.disableNavigationButton = true;\r\n this.previousSelectedForm = this.selectedForm;\r\n this.previousSelectedForm.PreviousObjectIndex = this.objectIndex;\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.objectIndex = 0;\r\n this.selectedForm = this.ddData[0];\r\n // this.selectedForm.IsEdit = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.studentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.dropDownChange();\r\n }\r\n\r\n dropDownChange(selectedFromDD: boolean = false) {\r\n this.navigateToForm = true;\r\n if (selectedFromDD == true) {\r\n this.previousSelectedForm = this.selectedForm;\r\n this.previousSelectedForm.PreviousObjectIndex = this.objectIndex;\r\n this.studentFormData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.studentFormData.TemplateName = this.selectedForm.TemplateName;\r\n this.studentFormData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.objectIndex = this.ddData.findIndex(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId);\r\n this.selectedForm = this.ddData.find(x => x.StudentCollectionTemplateVersionId == this.studentCollectionTemplateVersionId);\r\n }\r\n if (this.canEditForm == true) {\r\n this.saveClick(true, true);\r\n } else {\r\n this.loadHtml();\r\n }\r\n this.getStudentCollectionTemplate();\r\n // this.selectedForm.IsEdit = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.iconAllowed = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n if (this.canEditForm == true) {\r\n this.canEditForm = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n }\r\n this.formWithinDocumentService.goalData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.goalData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.goalData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.goalData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.pickIdentificationData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.pickIdentificationData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.pickIdentificationData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.plaMiantenanceData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.plaMiantenanceData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.plaMiantenanceData.TemplateName = this.selectedForm.TemplateName;\r\n\r\n this.formWithinDocumentService.courceOfStudyData.StudentId = this.studentFormData.StudentId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionId = this.studentFormData.StudentCollectionId;\r\n this.formWithinDocumentService.courceOfStudyData.StudentCollectionTemplateVersionId = this.selectedForm.StudentCollectionTemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateVersionId = this.selectedForm.TemplateVersionId;\r\n this.formWithinDocumentService.courceOfStudyData.TemplateName = this.selectedForm.TemplateName;\r\n }\r\n\r\n navigateToMaint(fieldName: string, masterType: number) {\r\n this.navigateToForm = false;\r\n this.saveClick(false, false, false, false, true);\r\n const pickGoalBankDialog = this.dialog.open(PickGoalMaintenanceComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '75vh',\r\n width: '70vw',\r\n });\r\n pickGoalBankDialog.componentInstance.dialogTitle = 'IEP Goal Maintenance';\r\n pickGoalBankDialog.componentInstance.studentXMLDataId = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n pickGoalBankDialog.componentInstance.masterTypeId = masterType;\r\n this.formWithinDocumentService.goalData.FieldName = fieldName;\r\n pickGoalBankDialog.afterClosed().subscribe(result => {\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n navigateToGoalORMaint(fieldName: string, objFieldName: string, masterType: number) {\r\n this.navigateToForm = false;\r\n this.saveClick(false, false, false, false, true);\r\n const pickGoalBankDialog = this.dialog.open(PickGoalMaintenanceComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '75vh',\r\n width: '70vw',\r\n });\r\n pickGoalBankDialog.componentInstance.dialogTitle = 'IEP Goal Maintenance';\r\n pickGoalBankDialog.componentInstance.masterTypeId = masterType;\r\n pickGoalBankDialog.componentInstance.studentXMLDataId = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n this.formWithinDocumentService.goalData.FieldName = fieldName;\r\n this.formWithinDocumentService.goalData.ObjFieldName = objFieldName;\r\n pickGoalBankDialog.afterClosed().subscribe(result => {\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n navigateToPLAMaint(category: string, value: number) {\r\n this.navigateToForm = false;\r\n this.saveClick(false, false, false, false, true);\r\n const presentLevelFormDialog = this.dialog.open(PresentLevelMaintenanceComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '100vw',\r\n maxWidth: '100vw',\r\n });\r\n presentLevelFormDialog.componentInstance.dialogTitle = 'Present Level Maintenance';\r\n presentLevelFormDialog.componentInstance.studentXMLDataId = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n this.formWithinDocumentService.plaMiantenanceData.CategoryName = category;\r\n this.formWithinDocumentService.plaMiantenanceData.RowIndex = value;\r\n this.formWithinDocumentService.getPlaXMLvalues(this.yearId).subscribe(values => {\r\n this.getSelectedPlaValues = values;\r\n this.getsingleValue = this.getSelectedPlaValues[0];\r\n this.getsingleValue.CategoryNote = this.getsingleValue.CategoryNote.replace(/\\r\\n/g, '
');;\r\n presentLevelFormDialog.componentInstance.dataField = this.getsingleValue;\r\n });\r\n presentLevelFormDialog.afterClosed().subscribe(result => {\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n navigateToCOSMaint() {\r\n this.navigateToForm = false;\r\n this.saveClick(false, false, false, false, true);\r\n const pickCourseOfStudyDialog = this.dialog.open(PickCourseOfStudyComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '75vh',\r\n width: '70vw',\r\n });\r\n pickCourseOfStudyDialog.componentInstance.dialogTitle = 'Course Of Study';\r\n pickCourseOfStudyDialog.componentInstance.studentXMLDataId = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n this.spedManagementService.getIdentificationCode('Course of Study').subscribe(Data => {\r\n this.getCosData = Data.filter(x => x.Code.trim() != '');\r\n pickCourseOfStudyDialog.componentInstance.tempCourseOfStudyGrid = this.getCosData;\r\n });\r\n pickCourseOfStudyDialog.afterClosed().subscribe(result => {\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n navigateToEvalMaint() {\r\n this.navigateToForm = false;\r\n this.saveClick(false, false, false, false, true);\r\n const pickIdentificationDialog = this.dialog.open(PickIdentificationMaintenanceComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n height: '75vh',\r\n width: '60vw',\r\n });\r\n pickIdentificationDialog.componentInstance.dialogTitle = 'Evaluation Maintenance';\r\n pickIdentificationDialog.componentInstance.studentXMLDataId = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n pickIdentificationDialog.afterClosed().subscribe(result => {\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n viewPrintPreview() {\r\n const viewOverlayDialogPB = this.dialog.open(IndeterminateProgressBarComponent, {\r\n disableClose: true,\r\n });\r\n viewOverlayDialogPB.componentInstance.spEdcollectionId = this.studentFormData.SpEdcollectionId;\r\n viewOverlayDialogPB.componentInstance.studentId = this.studentFormData.StudentId;\r\n viewOverlayDialogPB.componentInstance.studentCollectionId = this.studentFormData.StudentCollectionId;\r\n viewOverlayDialogPB.componentInstance.spEdCollectionToIEPStatusId = this.studentFormData.SpEdCollectionToIEPStatusId;\r\n viewOverlayDialogPB.componentInstance.templateVersionId = this.selectedForm.TemplateVersionId;\r\n viewOverlayDialogPB.componentInstance.siteId = 0;\r\n viewOverlayDialogPB.componentInstance.yearId = this.yearId;\r\n viewOverlayDialogPB.componentInstance.callFromHomePage = false;\r\n viewOverlayDialogPB.componentInstance.studentTemplateVersionIds = this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId;\r\n viewOverlayDialogPB.componentInstance.studentHeader = false;\r\n viewOverlayDialogPB.componentInstance.printType = 0;\r\n\r\n viewOverlayDialogPB.afterClosed().subscribe(result => {\r\n if (result == 'print') {\r\n this.fileAsBlob = null;\r\n this.fileAsBlob = viewOverlayDialogPB.componentInstance.fileAsBlobString;\r\n this.openPrintView();\r\n } else {\r\n this.onlySaveClick = true;\r\n this.loadHtml();\r\n }\r\n });\r\n }\r\n\r\n openPrintView() {\r\n const viewOverlayDialog = this.dialog.open(ViewDocumentComponent, {\r\n disableClose: true,\r\n height: '100%',\r\n width: '100%',\r\n maxWidth: 'inherit'\r\n });\r\n viewOverlayDialog.componentInstance.formSrc = this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(this.fileAsBlob));\r\n viewOverlayDialog.afterClosed().subscribe(() => {\r\n this.onlySaveClick = true;\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n clickedOnLock() {\r\n if (!this.canEditForm) {\r\n if (this.checkInCheckOut() == true && this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit) == true) {\r\n this.checkInCheckOutDialoge();\r\n } else {\r\n this.canEditForm = this.sped360Service.allowToEditDelete(this.selectedForm.IsEdit);\r\n this.formsInDDL();\r\n this.loadHtml();\r\n }\r\n }\r\n }\r\n\r\n formsInDDL() {\r\n if (this.canEditForm == true) {\r\n this.ddData = this.sped360Service.editHtmlFormdropDownValue(this.ddData); // this.ddData.filter(x => x.IsEdit == true);\r\n }\r\n }\r\n\r\n checkInCheckOut(): boolean {\r\n if (this.loginService.LoginSettings.AllowCheckInOutSpEdForms == true && this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId > 0 && this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId != this.userId) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n checkInCheckOutDialoge() {\r\n const checkInCheckOutDialog = this.dialog.open(CheckInCheckOutComponent, {\r\n disableClose: true,\r\n height: '35vh',\r\n width: '40vw',\r\n maxWidth: 'inherit'\r\n });\r\n checkInCheckOutDialog.componentInstance.dialogTitle = 'FORM CHECKED OUT';\r\n checkInCheckOutDialog.componentInstance.checkedOutBy = this.formWithinDocumentService.spedStudentCollectionTemplate.CheckedOutByUserName;\r\n checkInCheckOutDialog.componentInstance.templateName = this.selectedForm.TemplateName;\r\n checkInCheckOutDialog.componentInstance.collectionCode = this.collectionCode;\r\n checkInCheckOutDialog.afterClosed().subscribe(result => {\r\n if (result == 'save') {\r\n this.canEditForm = true;\r\n } else {\r\n this.canEditForm = false;\r\n this.navigateToForm = false;\r\n // this.selectedForm.IsEdit = false;\r\n }\r\n this.formsInDDL();\r\n this.loadHtml();\r\n });\r\n }\r\n\r\n checkOutForm() {\r\n this.formWithinDocumentService.checkOutForm(this.selectedForm.StudentXMLDataId != undefined ? this.selectedForm.StudentXMLDataId : this.selectedForm.StudnetXMLId, this.formWithinDocumentService.spedStudentCollectionTemplate.CheckOutByUserId, false).subscribe(() => {\r\n });\r\n }\r\n\r\n getStudentCollectionTemplate() {\r\n this.formWithinDocumentService.getStudentCollectionTemplate(this.selectedForm.StudentCollectionTemplateVersionId, this.selectedForm.TemplateName).subscribe(result => {\r\n this.formWithinDocumentService.spedStudentCollectionTemplate = result;\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.formWithinDocumentService.editHtmlFormDialogOpen = false;\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IepService } from '../../../../student360/iep/iep.service';\r\nimport { SpedCardsService } from '../../../sped-home/sped-cards/sped-cards.service';\r\nimport { SpedStudentDocumentCardsService } from '../../../student-document-home/sped-student-document-cards/sped-student-document-cards.service';\r\n\r\n@Component({\r\n selector: 'app-indeterminate-progress-bar',\r\n templateUrl: './indeterminate-progress-bar.component.html',\r\n styleUrls: ['./indeterminate-progress-bar.component.css']\r\n})\r\nexport class IndeterminateProgressBarComponent implements OnInit {\r\n spEdcollectionId: number;\r\n studentId: number;\r\n studentCollectionId: number;\r\n spEdCollectionToIEPStatusId: number;\r\n templateVersionId: number; // 0 when Mass content\r\n siteId: number;\r\n yearId: number;\r\n callFromHomePage: boolean;\r\n studentTemplateVersionIds: string;\r\n studentHeader: boolean;\r\n fileAsBlobString: Blob;\r\n printType: number; // 0 when print student document, 1 when print Blank, 2 when print View only student document.\r\n\r\n\r\n constructor(private dialog: MatDialog,\r\n private dialogPB: MatDialogRef,\r\n private spedCardService: SpedCardsService,\r\n private spedStudentDocumentCradsService: SpedStudentDocumentCardsService,\r\n private iepService: IepService) { }\r\n\r\n ngOnInit(): void {\r\n if (this.printType == 0) {\r\n this.spedCardService.viewContentDocument(this.spEdcollectionId, this.studentId, this.studentCollectionId, this.spEdCollectionToIEPStatusId, this.templateVersionId, 0, this.yearId, this.callFromHomePage, this.studentTemplateVersionIds, this.studentHeader).subscribe(docBase64String => {\r\n const byteCharacters = atob(docBase64String);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const fileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n this.fileAsBlobString = fileAsBlob;\r\n this.dialogPB.close('print');\r\n });\r\n }\r\n else if (this.printType == 1) {\r\n this.spedStudentDocumentCradsService.viewBlankDocument(this.spEdcollectionId).subscribe(docBase64String => {\r\n const byteCharacters = atob(docBase64String);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const fileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n this.fileAsBlobString = fileAsBlob;\r\n this.dialogPB.close('print');\r\n });\r\n }\r\n else if (this.printType == 2) {\r\n this.iepService.viewCollectionDocument(this.spEdcollectionId,\r\n this.studentId,\r\n this.studentCollectionId,\r\n this.spEdCollectionToIEPStatusId,\r\n this.templateVersionId,\r\n 0,\r\n this.siteId,\r\n this.yearId).subscribe(docBase64String => {\r\n\r\n const byteCharacters = atob(docBase64String);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const fileAsBlob = new Blob([byteArray], { type: 'application/pdf' });\r\n this.fileAsBlobString = fileAsBlob;\r\n this.dialogPB.close('print');\r\n });\r\n }\r\n\r\n }\r\n\r\n cancelClick() {\r\n this.dialogPB.close();\r\n }\r\n}\r\n","
\r\n Generating Forms...\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 { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { System } from '../../../shared-components/System';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { CurrentWork, OverdueAlert, SpecialServiceTeam, SpedCalendar, SpEdGradeLevel, SpedHomeMyEvent, SpedHomePanel, SpEdSite, DocumentWaitingApproval, SpedCollectionIep, BehaviorAlerts, StudentList, ComplianceResult, SpEdPanel } from './sped-cards.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpedCardsService {\r\n\r\n spedHomePanels: SpedHomePanel[] = [];\r\n userId: number;\r\n private _callForSaveXmlData = false;\r\n public get callForSaveXmlData(): boolean {\r\n return this._callForSaveXmlData;\r\n }\r\n\r\n public set callForSaveXmlData(value: boolean) {\r\n this._callForSaveXmlData = value;\r\n this.observableCallForSaveXmlData.next(value);\r\n }\r\n\r\n public observableCallForSaveXmlData = new Subject();\r\n observableCallForSaveXmlDataStream$ = this.observableCallForSaveXmlData.asObservable();\r\n\r\n private _selectedSiteId: number;\r\n public get selectedSiteId(): number {\r\n return this._selectedSiteId;\r\n }\r\n\r\n public set selectedSiteId(value: number) {\r\n this._selectedSiteId = value;\r\n this.observableSelectedSiteId.next(value);\r\n }\r\n\r\n public observableSelectedSiteId = new Subject();\r\n observableSelectedSiteIdStream$ = this.observableSelectedSiteId.asObservable();\r\n\r\n private _selectedGradeLevelId: number;\r\n public get selectedGradeLevelId(): number {\r\n return this._selectedGradeLevelId;\r\n }\r\n\r\n public set selectedGradeLevelId(value: number) {\r\n this._selectedGradeLevelId = value;\r\n this.observableSelectedGradeLevelId.next(value);\r\n }\r\n\r\n public observableSelectedGradeLevelId = new Subject();\r\n observableSelectedGradeLevelIdStream$ = this.observableSelectedGradeLevelId.asObservable();\r\n\r\n private _selectedSpecialServiceId: number;\r\n public get selectedSpecialServiceId(): number {\r\n return this._selectedSpecialServiceId;\r\n }\r\n\r\n public set selectedSpecialServiceId(value: number) {\r\n this._selectedSpecialServiceId = value;\r\n this.observableselectedSpecialServiceId.next(value);\r\n }\r\n\r\n public observableselectedSpecialServiceId = new Subject();\r\n observableselectedSpecialServiceIdStream$ = this.observableselectedSpecialServiceId.asObservable();\r\n\r\n private _selectedDays: number;\r\n public get selectedDays(): number {\r\n return this._selectedDays;\r\n }\r\n\r\n public set selectedDays(value: number) {\r\n this._selectedDays = value;\r\n this.observableSelectedDays.next(value);\r\n }\r\n\r\n public observableSelectedDays = new Subject();\r\n observableSelectedDaysStream$ = this.observableSelectedDays.asObservable();\r\n\r\n private _selectedPanel: string;\r\n public get selectedPanel(): string {\r\n return this._selectedPanel;\r\n }\r\n\r\n public set selectedPanel(value: string) {\r\n this._selectedPanel = value;\r\n this.observableSelectedPanel.next(value);\r\n }\r\n\r\n public observableSelectedPanel = new Subject();\r\n observableSelectedPanelStream$ = this.observableSelectedPanel.asObservable();\r\n\r\n private _selectedValueFromDD: any;\r\n public get selectedValueFromDD(): any {\r\n return this._selectedValueFromDD;\r\n }\r\n\r\n public set selectedValueFromDD(value: any) {\r\n this._selectedValueFromDD = value;\r\n this.observableSelectedValueFromDD.next(value);\r\n }\r\n\r\n public observableSelectedValueFromDD = new Subject();\r\n observableSelectedValueFromDDStream$ = this.observableSelectedValueFromDD.asObservable();\r\n\r\n\r\n constructor(private http: HttpClient, private yearService: YearService, private loginService: LoginService, private userService: UserService) { }\r\n\r\n siteReadByUserId(): Observable {\r\n const queryString = '?yearId=' + this.yearService.defaultYear.Id;\r\n return this.http.get(System.apiURL.SpecialEd + 'SiteReadByUserId' + queryString);\r\n }\r\n\r\n getGradeLevel(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'GetGradeLevel');\r\n }\r\n\r\n getCurrentWorkList(siteId: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + this.loginService.LoginSettings.State + '&siteYearId=' + this.yearService.defaultYear.SiteYearId + '&siteId=' + siteId + '&yearId=' + this.yearService.defaultYear.Id + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetCurrentWorkList' + queryString);\r\n }\r\n\r\n getSpedHomePanelList(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedHomePanelsRead');\r\n }\r\n getOverDueAlertData(stateCode: string, siteYearId: number, siteId: number, yearId: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'OverdueAlertsListRead' + queryString);\r\n }\r\n\r\n getMySpecialServiceTeam(stateCode: string, siteYearId: number, siteId: number, yearId: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'MyTeamsListRead' + queryString);\r\n }\r\n\r\n getSpedHomeMyEvent(stateCode: string, siteYearId: number, siteId: number, yearId: number, days: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&days=' + days + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'MyEventsListRead' + queryString);\r\n }\r\n\r\n studentListRead(stateCode: string, siteYearId: number, siteId: number, yearId: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'StudentsListRead' + queryString);\r\n }\r\n\r\n getSpedCalenderDetails(siteId: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + this.loginService.LoginSettings.State + '&siteYearId=' + this.yearService.defaultYear.SiteYearId + '&siteId=' + siteId + '&yearId=' + this.yearService.defaultYear.Id + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'CalendarDataRead' + queryString);\r\n }\r\n\r\n spedCollectionRead(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedCollectionRead');\r\n }\r\n\r\n documentsWaitingApprovalReadByDocType(stateCode: string, siteYearId: number, siteId: number, yearId: number, gradeLevelId: number, spedCollectionId: number, manageDocumentStatus: boolean, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&gradeLevelId=' + gradeLevelId + '&spedCollectionId=' + spedCollectionId + '&manageDocumentStatus=' + manageDocumentStatus + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'DocumentsWaitingApprovalReadByDocType' + queryString);\r\n }\r\n\r\n\r\n viewContentDocument(spedCollectionId: number, studentId: number, spedCollectionToStudentId: number, collectionStatusId: number, templateVersionId: number, siteId: number, yearId: number, callFromHomePage: boolean, studentTemplateVersionIds: string, studentHeader: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?spedCollectionId=' + spedCollectionId +\r\n '&studentId=' + studentId +\r\n '&spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&collectionStatusId=' + collectionStatusId +\r\n '&templateVersionId=' + templateVersionId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&callFromHomePage=' + callFromHomePage +\r\n '&studentTemplateVersionIds=' + studentTemplateVersionIds +\r\n '&studentHeader=' + studentHeader;\r\n return this.http.get(System.apiURL.SpecialEd + 'ViewSpEdCollectionDocument' + queryString);\r\n }\r\n\r\n studentDocumentStatusUpdate(spedCollectionToStudentId: number, viewDocumentBeforeApproval: boolean, sendBack: boolean, callFromComplianceResult: boolean, hasOverrideErrorPermission: boolean): Observable {\r\n const queryString = '?spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&viewDocumentBeforeApproval=' + viewDocumentBeforeApproval +\r\n '&sendBack=' + sendBack +\r\n '&callFromComplianceResult=' + callFromComplianceResult +\r\n '&hasOverrideErrorPermission=' + hasOverrideErrorPermission;\r\n return this.http.get(System.apiURL.SpecialEd + 'StudentDocumentStatusUpdate' + queryString);\r\n }\r\n studentDocumentStatusMassUpdate(spedCollectionToStudentIds: string[], viewDocumentBeforeApproval: boolean, sendBack: boolean, callFromComplianceResult: boolean, hasOverrideErrorPermission: boolean): Observable {\r\n const queryString = '?spedCollectionToStudentIds=' + spedCollectionToStudentIds +\r\n '&viewDocumentBeforeApproval=' + viewDocumentBeforeApproval +\r\n '&sendBack=' + sendBack +\r\n '&callFromComplianceResult=' + callFromComplianceResult +\r\n '&hasOverrideErrorPermission=' + hasOverrideErrorPermission;\r\n return this.http.get(System.apiURL.SpecialEd + 'StudentDocumentStatusMassUpdate' + queryString);\r\n }\r\n\r\n getBehaviorAlerts(stateCode: string, siteYearId: number, siteId: number, yearId: number, days: number, gradeLevelId: number, type: number): Observable {\r\n const queryString = '?stateCode=' + stateCode + '&siteYearId=' + siteYearId + '&siteId=' + siteId + '&yearId=' + yearId + '&days=' + days + '&gradeLevelId=' + gradeLevelId + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'DisciplineAlertsListRead' + queryString);\r\n }\r\n\r\n getComplianceDocument(spedCollectionToStudentId: number): Observable {\r\n const queryString = '?spedCollectionToStudentId=' + spedCollectionToStudentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpEdDocumentComplianceRead' + queryString);\r\n }\r\n\r\n spedPanelUpdate(spedPanel: SpEdPanel): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedHomePanelUpdate', spedPanel);\r\n\r\n }\r\n editHTMLDocument(spedCollectionId: number, studentId: number, spedCollectionToStudentId: number, StudentCollectionTemplateVersionId: number, collectionStatusId: number, templateVersionId: number, templateName: string, siteId: number, yearId: number): Observable {\r\n this.userId = this.userService.currentUser.Id;\r\n let queryString = '';\r\n queryString += '?spedCollectionId=' + spedCollectionId +\r\n '&studentId=' + studentId +\r\n '&spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&StudentCollectionTemplateVersionId=' + StudentCollectionTemplateVersionId +\r\n '&collectionStatusId=' + collectionStatusId +\r\n '&templateVersionId=' + templateVersionId +\r\n '&templateName=' + templateName +\r\n '&userId=' + this.userId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.SpecialEd + 'ViewEditSpEdForm' + queryString);\r\n }\r\n\r\n saveHTMLDocument(strHtmlFormData: string, studentId: number, spedCollectionToStudentId: number, templateVersionId: number, templateName: string, studentCollectionTemplateVersionId: number, stateCode: string, changeStatus: string, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&studentCollectionId=' + spedCollectionToStudentId +\r\n '&templateVersionId=' + templateVersionId +\r\n '&templateName=' + templateName +\r\n '&studentCollectionTemplateVersionId=' + studentCollectionTemplateVersionId +\r\n '&stateCode=' + stateCode +\r\n '&changeStatus=' + changeStatus +\r\n '&yearId=' + yearId;\r\n\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveHTMLFormData' + queryString, [strHtmlFormData]);\r\n }\r\n\r\n spedHTMLStudentCollectionStatusTemplatesItemsRead(studentCollectionId: number, showLatestVersion: boolean, spEdcollectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentCollectionId=' + studentCollectionId +\r\n '&showLatestVersion=' + showLatestVersion +\r\n '&spEdcollectionId=' + spEdcollectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedHTMLStudentCollectionStatusTemplatesItemsRead' + queryString);\r\n }\r\n}\r\n","export class FieldsWithinForms {\r\n DataFieldId: number;\r\n FieldName: string;\r\n IsInactive: boolean;\r\n IsUseForSearch: number;\r\n Description: string;\r\n FieldTypeDescription: string;\r\n ShowOnSummaryGrid: number;\r\n IsSystemFieldOverride: boolean;\r\n EditableInApprovedDoc: boolean;\r\n HideFromPrintDoc: boolean;\r\n IsSystemField: boolean;\r\n ISChildExists: boolean;\r\n IsComplianceCheck: boolean;\r\n TemplateName: string;\r\n CreatedDate: Date;\r\n FieldSize: number;\r\n FieldType: number;\r\n FieldFormat: string;\r\n SpedLookUpMasterID: number;\r\n IdentityNumber: number;\r\n\r\n}\r\n\r\nexport class FieldsWithinFormsFilterParam {\r\n TemplateName = '';\r\n}\r\n\r\nexport class FieldUsedInForm {\r\n TemplateName: string;\r\n IsMaster: string;\r\n Version: number;\r\n TemplateVersionId: number;\r\n\r\n // Non DTO Field //\r\n TempVersion: string;\r\n}\r\n\r\nexport class AccomodationBank {\r\n MasterId: number;\r\n MasterDescription: string;\r\n Code: string;\r\n Description: string;\r\n LongDescription: string;\r\n Active: boolean;\r\n StateCodeXRef: string;\r\n IdenticationCodes: number;\r\n UserId: number;\r\n DataId: number;\r\n ParentId: number;\r\n Category: string;\r\n\r\n // Non DTO\r\n TemporaryCode: string;\r\n Checked: boolean;\r\n DataBankDescription: string;\r\n}\r\n\r\nexport class FormSetup {\r\n TemplateVersionId: number;\r\n TemplateId: number;\r\n DoumentName: string;\r\n Comment: string;\r\n IsPublished: boolean;\r\n IsActiveVersion: boolean;\r\n IsStandAlone: boolean;\r\n PrintPageNumber: boolean;\r\n IsNewVersionOnLayoutChange: boolean;\r\n LastModifiedBy: string;\r\n LastModifiedByUserId: number;\r\n LastModifiedDate: Date;\r\n Sequence: number;\r\n TemplateName: string;\r\n DocumentDefinition: string;\r\n IsHTML: string;\r\n Version: number;\r\n FieldName: string;\r\n\r\n // Non DTO\r\n TempVersion: string;\r\n}\r\n\r\nexport class FormsSetupFilterParam {\r\n FieldName = '';\r\n}\r\n\r\nexport class ComplianceRule {\r\n CollectionId: number;\r\n CollectionName: string;\r\n UseForCompliance: boolean;\r\n TemplateName: string;\r\n TemplateVersionId: number;\r\n RuleNumber: string;\r\n Description: string;\r\n ErrorMessage: string;\r\n RuleActive: boolean;\r\n HardSoftError: string;\r\n ComplianceId: number;\r\n VersionStatus: boolean;\r\n\r\n}\r\nexport class CategoryGrid {\r\n CategoryId: number;\r\n CategoryDescription: string;\r\n Type: boolean;\r\n DataBankId: number;\r\n DataBankDescription: string;\r\n DataParentId: number;\r\n CombineGoalsAndObjectives: boolean;\r\n\r\n // Non DTO Field //\r\n TemporaryDescription: string;\r\n child: CategoryGrid [] = [];\r\n StatusChecked = false;\r\n}\r\n\r\nexport class SpedCollection {\r\n CollectionId: number;\r\n CollectionName: string;\r\n CollectionCode: string;\r\n CollectionSequence: string;\r\n UseForCompliance: boolean;\r\n TemplatesCount: number;\r\n IsAssignedToStudent: boolean;\r\n SpedCollectionTemplates: SpedCollectionTemplatesItem[] = [];\r\n SpedCollectionIEPStatus: SpedCollectionToIEPStatus[] = [];\r\n}\r\n\r\nexport class SpedCollectionTemplatesItem {\r\n CollectionId: number;\r\n Version: number;\r\n IsOptional: boolean;\r\n IsAllowMultiple: boolean;\r\n ShowDistrictHeader: boolean;\r\n TemplateVersionId: number;\r\n TemplateName: string;\r\n Sequence: number;\r\n TemplateCollectionId: number;\r\n DisplayToParents: boolean;\r\n DisplayToStudents: boolean;\r\n IsFormSelected: boolean;\r\n VersionStatus: boolean;\r\n IsAssignedToStudent: boolean;\r\n LastUpdated: Date;\r\n\r\n // Non DTO Field\r\n TemporaryVersion: string;\r\n IsEdit: boolean;\r\n FormAddeded: boolean;\r\n NewSequence: number;\r\n}\r\n\r\nexport class SpedCollectionToIEPStatus {\r\n IEPStatusId: number;\r\n SpedLookupDataId: number;\r\n SpedCollectionId: number;\r\n Description: string;\r\n CollectionVisible: boolean;\r\n Sequence: number;\r\n IsHtml: boolean;\r\n ScoreReport: boolean;\r\n UseForCompliance: boolean;\r\n IsDefault: boolean;\r\n Completed: boolean;\r\n ComplianceCheckReq: boolean;\r\n FreezeEdit: boolean;\r\n FreezeSystemFields: boolean;\r\n CollectionName: string;\r\n CanDeleteIEPStatus: boolean;\r\n\r\n // Non DTO Field //\r\n StatusChecked = false;\r\n IsEdited: boolean;\r\n}\r\n\r\nexport class SpedAvailableForms {\r\n TemplateVersionId: number;\r\n SpedTemplateId: number;\r\n SpedCollectionId: number;\r\n Version: number;\r\n SpedTemplateVersionName: string;\r\n LastModifiedBy: string;\r\n LastModifiedDate: Date;\r\n Sequence: number;\r\n IsHTMLStream: boolean;\r\n}\r\n\r\nexport class Sequence {\r\n Id: number;\r\n SpedCollectionId: number;\r\n Sequence: number;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { FieldsWithinForms, FieldUsedInForm, AccomodationBank, FormSetup, ComplianceRule, CategoryGrid, SpedCollection, SpedCollectionToIEPStatus, SpedCollectionTemplatesItem, SpedAvailableForms, Sequence } from './sped-management.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpedManagementService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getFieldWithinForms(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'GetFieldWithinForms');\r\n }\r\n\r\n getFieldUsedInTemplates(dataField: number): Observable {\r\n const queryString = '?dataField=' + dataField;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetFieldUsedInTemplates' + queryString);\r\n }\r\n\r\n getIsComplianceFieldById(fieldName: string): Observable {\r\n const queryString = '?fieldName=' + fieldName;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpEdComplianceFieldReadByFieldName' + queryString);\r\n }\r\n\r\n saveFieldWithinForms(data: FieldsWithinForms): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedDataFieldUpdate', data);\r\n }\r\n\r\n getAccomodation(spedlookupmasterid: number, displaymasteronly: boolean, spedlookupdataid: number, type: boolean): Observable {\r\n const queryString = '?spedlookupmasterid=' + spedlookupmasterid + '&displaymasteronly=' + displaymasteronly + '&spedlookupdataid=' + spedlookupdataid + '&type=' + type;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetAccomodationGrid' + queryString);\r\n }\r\n\r\n getIdentificationCode(MasterDescription: string): Observable {\r\n const queryString = '?MasterDescription=' + MasterDescription;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetIdentificationCode' + queryString);\r\n }\r\n\r\n updateAccommodation(data: AccomodationBank): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'UpdateAccommodation', data);\r\n }\r\n\r\n getSpedTemplateVersionRead(isPublished: boolean, status: number): Observable {\r\n const queryString = '?isPublished=' + isPublished + '&status=' + status;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedTemplateVersionRead' + queryString);\r\n }\r\n\r\n getTemplateFieldsReadByTemplateVersionId(templateVersionId: number): Observable {\r\n const queryString = '?templateVersionId=' + templateVersionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetTemplateFieldsReadByTemplateVersionId' + queryString);\r\n }\r\n\r\n spedTemplateVersionUpdate(data: FormSetup): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedTemplateVersionUpdate', data);\r\n }\r\n\r\n getCompliance(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedCollectionRead');\r\n }\r\n\r\n getComplianceSelectItem(collectionId: number): Observable {\r\n const quertString = '?collectionId=' + collectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetTemplatesItemRead' + quertString);\r\n }\r\n getComplianceGrid(stateCode: string, spedCollectionId: number, spedTemplateVersionId: number): Observable {\r\n const quertString = '?stateCode=' + stateCode + '&spedCollectionId=' + spedCollectionId + '&spedTemplateVersionId=' + spedTemplateVersionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetComplianceGridData' + quertString);\r\n }\r\n updateCompliance(data: ComplianceRule): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'UpdateComplianceData', data);\r\n\r\n }\r\n getCategoryGrid(Type: boolean): Observable {\r\n const quertString = '?Type=' + Type;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetDataBankCategories' + quertString);\r\n }\r\n\r\n getObjectiveBankData(CategoryId: number, DataBankId: number, Type: boolean): Observable {\r\n const queryString = '?CategoryId=' + CategoryId + '&DataBankId=' + DataBankId + '&Type=' + Type;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetDataBanks' + queryString);\r\n }\r\n\r\n addNewCategory(data: CategoryGrid): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'DataBankCategoryCreate', data);\r\n }\r\n\r\n dataBankCategoryUpdate(data: CategoryGrid): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'DataBankCategoryUpdate', data);\r\n }\r\n\r\n dataBankCategoryDelete(DataBankCategoryID: number): Observable {\r\n const queryString = '?DataBankCategoryID=' + DataBankCategoryID;\r\n return this.http.post(System.apiURL.SpecialEd + 'DataBankCategoryDelete' + queryString, null);\r\n }\r\n\r\n updateDataBank(data: CategoryGrid): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'DataBankUpdate', data);\r\n }\r\n\r\n deleteDataBank(DataBankId: number): Observable {\r\n const queryString = '?DataBankId=' + DataBankId;\r\n return this.http.post(System.apiURL.SpecialEd + 'DataBankDelete' + queryString, null);\r\n }\r\n\r\n getSpedCollectionsReadByUserId(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedCollectionsReadByUserId');\r\n }\r\n\r\n deleteSpedCollectionById(collectionId: number): Observable {\r\n const queryString = '?collectionId=' + collectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'DeleteSpedCollectionById' + queryString);\r\n }\r\n\r\n getSpedCollectionIEPStatusRead(spedCollectionId: number = 0): Observable {\r\n const queryString = '?spedCollectionId=' + spedCollectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedCollectionIEPStatusRead' + queryString);\r\n }\r\n\r\n getSpedAvailableTemplates(): Observable {\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedAvailableTemplates');\r\n }\r\n\r\n deleteSpedCollectionTemplateById(collectionTemplateId: number []): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'DeleteSpedCollectionTemplateById' , collectionTemplateId);\r\n }\r\n\r\n assignTemplateToCollection(collectionId: number, templateVersionIds: number []): Observable {\r\n const queryString = '?collectionId=' + collectionId;\r\n return this.http.post(System.apiURL.SpecialEd + 'AssignTemplateToCollection' + queryString, templateVersionIds);\r\n }\r\n\r\n templateInCollectionUpdate(data: SpedCollectionTemplatesItem []): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'TemplateInCollectionUpdate', data);\r\n }\r\n\r\n spedCollectionToIEPStatusUpdate(data: SpedCollectionToIEPStatus []): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedCollectionToIEPStatusUpdate', data);\r\n }\r\n\r\n viewFormSetupDocument(templateVersionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?templateVersionId=' + templateVersionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'ViewFormSetupDocument' + queryString);\r\n }\r\n\r\n saveSequence(data: Sequence[]): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveSequence', data);\r\n }\r\n}","export class SpedFixedUserPermission {\r\n ViewSpEdHome: boolean;\r\n ManageAssessmentConfiguration: boolean;\r\n ManageNarratives: boolean;\r\n MaintainComplianceRuleTable: boolean;\r\n ManageFormsFieldsCollectionConfiguration: boolean;\r\n MaintainDistrictTablesCodeGoalsAccomm: boolean;\r\n MaintainTeamMemberPermissionsonDocumentsAndForms: boolean;\r\n ViewAllSpEdDocuments: boolean;\r\n AddAllSpEdDocuments: boolean;\r\n MaintainAllSpEdDocuments: boolean;\r\n MaintainAllSpEdDocumentsInFinalStatus: boolean;\r\n DeleteAllSpEdDocuments: boolean;\r\n ImportDocumentAndAttachToAllSpEdDocuments: boolean;\r\n ComplianceCheckSpEdDocument: boolean;\r\n OverrideComplianceErrors: boolean;\r\n ManageDocumentStatus: boolean;\r\n AssignMySelfAsCaseManager: boolean;\r\n AssignAnyoneAsCaseManager: boolean;\r\n SpEdReports: boolean;\r\n AssessmentDistrictAdminRead: boolean;\r\n AssessmentDistrictAdminEdit: boolean;\r\n AssessmentSiteAdminEdit: boolean;\r\n AssessmentSiteAdminRead: boolean;\r\n AssessmentUsersRead: boolean;\r\n AssessmentUsersEdit: boolean;\r\n MaintainAllSpEdDocumentInCompletedByCaseManagerStatus: boolean;\r\n DeleteCaseManagerHistory: boolean;\r\n CheckOutDocument: boolean;\r\n ViewStudentIEPAlertIcon: boolean;\r\n ViewSpecialServicesHome: boolean;\r\n Manage504FormsFieldsCollectionConfiguration: boolean;\r\n Maintain504DistrictTablesCodeGoalsAccomm: boolean;\r\n Maintain504TeamMemberPermissionsonDocumentsAndForms: boolean;\r\n ViewAll504Documents: boolean;\r\n AddAll504Documents: boolean;\r\n MaintainAll504Documents: boolean;\r\n MaintainAll504DocumentsInFinalStatus: boolean;\r\n DeleteAll504Documents: boolean;\r\n ImportDocumentAndAttachToAll504Documents: boolean;\r\n Manage504DocumentStatus: boolean;\r\n AssignMySelfAs504CaseManager: boolean;\r\n AssignAnyoneAs504CaseManager: boolean;\r\n Sec504Reports: boolean;\r\n Delete504CaseManagerHistory: boolean;\r\n CheckOut504Document: boolean;\r\n}\r\nexport class SpedUserPermission {\r\n CollectionId: number;\r\n CollectionName: string;\r\n View: boolean;\r\n AddAndCopyNew: boolean;\r\n Maintain: boolean;\r\n MaintainInFinalStatus: boolean;\r\n Delete: boolean;\r\n ImportDocumentAndAttachToDocument: boolean;\r\n}\r\nexport class ExportResult {\r\n\r\n\t// Server Properties\r\n\tCourseSearch: boolean;\r\n\tCreatedBy: number;\r\n\tCreatedOn: string;\r\n\tDelimiter = 'Comma';\r\n\tExportType = 'XLSX';\r\n\tIncludeColumnHeadings = true;\r\n\tOtherDelimiter: string;\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../shared-components/System';\r\nimport { IepFormsWithinDocuments } from './forms-within-documents/formwithin-document-modal';\r\nimport { AccomodationBank, ComplianceRule } from './sped-management/sped-management.model';\r\nimport { SpedFixedUserPermission, SpedUserPermission } from './sped-user-permissions.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class Sped360Service {\r\n spedFixedPermission = new SpedFixedUserPermission();\r\n spedUserPermission: SpedUserPermission[] = [];\r\n previousSelectedStudentId: number;\r\n collectionName: string;\r\n collectionCode: string;\r\n collectionStatus: string;\r\n collectionId: number;\r\n canEditForm = false;\r\n continueClicked = true;\r\n accommodationData = new AccomodationBank();\r\n complianceData = new ComplianceRule();\r\n formWithinDocumentData: any;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getSpEdFixedPermissionRead(yearId: number, siteId: number): Observable {\r\n const queryString = '?yearId=' + yearId + '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpEdFixedPermissionRead' + queryString);\r\n }\r\n\r\n getSpEdUserPermissionByUserId(yearId: number, siteId: number): Observable {\r\n const queryString = '?yearId=' + yearId + '&siteId=' + siteId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpEdUserPermissionReadByUserId' + queryString);\r\n }\r\n\r\n allowToEditDelete(isEdit: boolean): boolean {\r\n if (this.collectionStatus == 'Working Draft') {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocuments) || (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504Documents)) {\r\n return true;\r\n } else if (this.spedUserPermission.filter(x => x.CollectionId == this.collectionId && x.Maintain == true).length > 0) {\r\n return true;\r\n } else {\r\n if (isEdit == true) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n } else if (this.collectionStatus == 'Reviewed by Supervisor' || this.collectionStatus == 'Completed') {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocumentsInFinalStatus) || (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504DocumentsInFinalStatus)) {\r\n return true;\r\n } else if (this.spedUserPermission.filter(x => x.CollectionId == this.collectionId && x.MaintainInFinalStatus).length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else if (this.collectionName == 'IEP' && this.collectionStatus == 'Completed by Case Manager' && this.spedFixedPermission.MaintainAllSpEdDocumentInCompletedByCaseManagerStatus) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n editHtmlFormdropDownValue(ddList: IepFormsWithinDocuments[]): IepFormsWithinDocuments[] {\r\n if ((!this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAllSpEdDocuments == false && (this.collectionStatus != 'Completed by Case Manager' || this.spedFixedPermission.MaintainAllSpEdDocumentInCompletedByCaseManagerStatus == false)\r\n && this.spedFixedPermission.MaintainAllSpEdDocumentsInFinalStatus == false) ||\r\n (this.collectionCode.includes('504') && this.spedFixedPermission.MaintainAll504Documents == false\r\n && this.spedFixedPermission.MaintainAll504DocumentsInFinalStatus == false)) {\r\n if (this.spedUserPermission.filter(x => x.CollectionId == this.collectionId).length > 0 && (this.spedUserPermission.find(x => x.CollectionId == this.collectionId).Maintain == false && this.spedUserPermission.find(x => x.CollectionId == this.collectionId).MaintainInFinalStatus == false)) {\r\n return ddList.filter(d => d.IsEdit == true);\r\n }\r\n }\r\n return ddList;\r\n }\r\n\r\n getaccommodationData(exportType, delimiter, otherDelimiter, includeColumnHeadings, filename, active, type): Observable {\r\n const assigneddelimeter = otherDelimiter == undefined ? '' : otherDelimiter;\r\n return this.http.get(System.apiURL.SpecialEd + `GetAccomodationExportData?spedlookupmasterid=${this.accommodationData.MasterId}\r\n &displaymasteronly=${false}\r\n &spedlookupdataid=${0}\r\n &type=${type}\r\n &exportType=${exportType}\r\n &colDelimiter=${delimiter}\r\n &otherDelimiter=${encodeURIComponent(assigneddelimeter)}\r\n &fileName=${filename}\r\n &displayHeader=${includeColumnHeadings}\r\n &columnToShow=${active}`);\r\n }\r\n\r\n getComplianceExportData(stateCode, exportType, delimiter, otherDelimiter, includeColumnHeadings, filename, active): Observable {\r\n const assigneddelimeter = otherDelimiter == undefined ? '' : otherDelimiter;\r\n return this.http.get(System.apiURL.SpecialEd + `GetComplianceExportData?stateCode=${stateCode}\r\n &spedCollectionId=${this.complianceData.CollectionId}\r\n &spedTemplateVersionId=${this.complianceData.TemplateVersionId}\r\n &exportType=${exportType}\r\n &colDelimiter=${delimiter}\r\n &otherDelimiter=${encodeURIComponent(assigneddelimeter)}\r\n &fileName=${filename}\r\n &displayHeader=${includeColumnHeadings}\r\n &columnToShow=${active}`);\r\n }\r\n\r\n getGoalBankExportData(exportType, delimiter, otherDelimiter, includeColumnHeadings, filename, goalSetting, type): Observable {\r\n const assigneddelimeter = otherDelimiter == undefined ? '' : otherDelimiter;\r\n return this.http.get(System.apiURL.SpecialEd + `GetGoalBankExportData?categoryId=${0}\r\n &dataBankId=${0}\r\n &type=${type}\r\n &exportType=${exportType}\r\n &colDelimiter=${delimiter}\r\n &otherDelimiter=${encodeURIComponent(assigneddelimeter)}\r\n &fileName=${filename}\r\n &displayHeader=${includeColumnHeadings}\r\n &goalSetting=${goalSetting}`);\r\n }\r\n\r\n\r\n exportBase64ToFile(base64Document: string, fileName: string, fileType: string) {\r\n const byteArrays: any[] = [];\r\n const byteCharacters = atob(base64Document);\r\n const byteNumbers = new Array(byteCharacters.length);\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n const blob = new Blob(byteArrays, { type: fileType });\r\n\r\n const link = document.createElement('a');\r\n link.href = URL.createObjectURL(blob);\r\n link.style.visibility = 'hidden';\r\n link.download = fileName;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n}","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-view-document',\r\n templateUrl: './view-document.component.html'\r\n})\r\nexport class ViewDocumentComponent implements OnInit {\r\n\r\n dialogTitle = '';\r\n formSrc: any;\r\n\r\n constructor(private matDialogRef: MatDialogRef) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n closeClick() {\r\n this.matDialogRef.close();\r\n }\r\n}\r\n","{{dialogTitle}}\r\n\r\n
\r\n \r\n
\r\n
\r\n","export class SpedStudentCollectionCard {\r\n CollectionId: number;\r\n CollectionName: string;\r\n CollectionCode: string;\r\n CollectionVisible: boolean;\r\n}\r\n\r\n\r\nexport class CaseManagementHistory {\r\n Id: number;\r\n CaseManagerId: number;\r\n SiteId: number;\r\n SiteDescription: string;\r\n CaseManagerDisplayName: string;\r\n SchoolIdentifierCIS: string;\r\n AssignedDate: Date;\r\n EndDate: Date;\r\n Note: string;\r\n StudentId: number;\r\n\r\n // non Dto\r\n Reason: string;\r\n\r\n}\r\nexport class SpEdSite {\r\n SiteId: number;\r\n SiteCode: string;\r\n SiteName: string;\r\n\r\n}\r\nexport class CaseManager {\r\n SiteId: number;\r\n CaseManagerId: number;\r\n SiteDescription: string;\r\n CaseManagerDisplayName: string;\r\n SiteDescription1: string;\r\n}\r\nexport class ImportedDocuments {\r\n SpedDocumentId: number;\r\n Description: string;\r\n DocumentName: string;\r\n CreatedDate: Date;\r\n UserName: string;\r\n SpEdDocumentToStudentInstanceId: number;\r\n FileBase64: string;\r\n // non dto Fields\r\n MyFileBase64String: string;\r\n FileType: string;\r\n FileName: string;\r\n StudentId: number;\r\n FileExtension: string;\r\n spedCollectionToStudentId: number;\r\n}\r\n\r\nexport class SpedCollectionStudentToTeamMember {\r\n TeamMemberId: number;\r\n TeamMemberName: string;\r\n IsCreator: boolean;\r\n\r\n // Non DTO Field\r\n SelectTeamMember: boolean;\r\n}\r\n\r\nexport class SpecialServicesSummary {\r\n SpecialEducation: string;\r\n CaseManager: String;\r\n}\r\n\r\nexport class SpEdSummaryCodes {\r\n Code: string;\r\n Description: String;\r\n}\r\n\r\nexport class AssessmentsReport {\r\n ReportId: number;\r\n StudentId: number;\r\n BatteryId: number;\r\n SpedLookUpDataId: number;\r\n Type: string;\r\n Attachment: boolean;\r\n CreatedBy: string;\r\n ReportStartDate: Date;\r\n ReportEndDate: Date;\r\n TemplateName: string;\r\n Status: string;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { System } from '../../../shared-components/System';\r\nimport { AssessmentsReport, CaseManagementHistory, CaseManager, ImportedDocuments, SpecialServicesSummary, SpedCollectionStudentToTeamMember, SpEdSite, SpedStudentCollectionCard, SpEdSummaryCodes } from './sped-student-document-cards.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SpedStudentDocumentCardsService {\r\n // caseManagerDataLength = 0;\r\n\r\n private _caseManagerDataLength: number;\r\n public get caseManagerDataLength(): number {\r\n return this._caseManagerDataLength;\r\n }\r\n\r\n public set caseManagerDataLength(value: number) {\r\n this._caseManagerDataLength = value;\r\n this.observableCaseManagerDataLength.next(value);\r\n }\r\n\r\n public observableCaseManagerDataLength = new Subject();\r\n observableCaseManagerDataLengthStream$ = this.observableCaseManagerDataLength.asObservable();\r\n\r\n private _evaluationCollectionDataLength: number;\r\n public get evaluationCollectionDataLength(): number {\r\n return this._evaluationCollectionDataLength;\r\n }\r\n\r\n public set evaluationCollectionDataLength(value: number) {\r\n this._evaluationCollectionDataLength = value;\r\n this.observableEvaluationCollectionDataLength.next(value);\r\n }\r\n\r\n public observableEvaluationCollectionDataLength = new Subject();\r\n observableEvaluationCollectionDataLengthStream$ = this.observableEvaluationCollectionDataLength.asObservable();\r\n\r\n private _dataUpdated: boolean;\r\n public get dataUpdated(): boolean {\r\n return this._dataUpdated;\r\n }\r\n\r\n public set dataUpdated(value: boolean) {\r\n this._dataUpdated = value;\r\n this.observableDataUpdated.next(value);\r\n }\r\n\r\n public observableDataUpdated = new Subject();\r\n observableDataUpdatedStream$ = this.observableDataUpdated.asObservable();\r\n\r\n constructor(private http: HttpClient,\r\n private studentService: StudentService) { }\r\n\r\n getStudentAssignedCollectionRead(studentId: number): Observable {\r\n const queryString = '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'StudentAssignedCollectionRead' + queryString);\r\n }\r\n\r\n getSpedStudentCollectionStatus(collectionId: number, showForTeamMemberOnly: boolean, stateCode: string): Observable {\r\n const studentId = this.studentService.selectedStudent.Id;\r\n const queryString = '?studentId=' + studentId + '&collectionId=' + collectionId + '&showForTeamMemberOnly=' + showForTeamMemberOnly + '&stateCode=' + stateCode;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedStudentCollectionStatus' + queryString);\r\n }\r\n\r\n assignCollectionToStudent(collectionId: number, addNewInstance: boolean, stateCode: string): Observable {\r\n const studentId = this.studentService.selectedStudent.Id;\r\n const queryString = '?studentId=' + studentId + '&collectionId=' + collectionId + '&addNewInstance=' + addNewInstance + '&stateCode=' + stateCode;\r\n return this.http.post(System.apiURL.SpecialEd + 'AssignCollectionToStudent' + queryString, null);\r\n }\r\n\r\n deleteAssignedCollection(spedcollectiontoStudentId: number, deleteReason: string): Observable {\r\n const queryString = '?spedcollectiontoStudentId=' + spedcollectiontoStudentId + '&deleteReason=' + deleteReason;\r\n return this.http.post(System.apiURL.SpecialEd + 'DeleteAssignedCollection' + queryString, null);\r\n }\r\n caseManagerTeamReadByStudent(StudentId: number): Observable {\r\n const queryString = '?StudentId=' + StudentId;\r\n return this.http.get(System.apiURL.SpecialEd + 'CaseManagerTeamReadByStudent' + queryString);\r\n }\r\n\r\n caseManagerTeamUpdate(data: CaseManagementHistory): Observable {\r\n return this.http.post(System.apiURL.SpecialEd + 'CaseManagerTeamUpdate', data);\r\n }\r\n siteReadByUserId(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.SpecialEd + 'SiteReadByUserId' + queryString);\r\n }\r\n caseManagerReadBySiteId(siteId: number, yearId: number): Observable {\r\n const queryString = '?siteId=' + siteId + '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.SpecialEd + 'CaseManagerReadBySiteId' + queryString);\r\n }\r\n caseManagerTeamDelete(id: number, reasonForDelete: string): Observable {\r\n const queryString = '?id=' + id + '&reasonForDelete=' + reasonForDelete;\r\n return this.http.post(System.apiURL.SpecialEd + 'CaseManagerTeamDelete' + queryString, null);\r\n }\r\n spedStudentDocumentRead(studentId: number, spedCollectionToStudentId: number, callFromAssessmentReport: boolean = false): Observable {\r\n const queryString = '?studentId=' + studentId + '&spedCollectionToStudentId=' + spedCollectionToStudentId + '&callFromAssessmentReport=' + callFromAssessmentReport;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpedStudentDocumentRead' + queryString);\r\n }\r\n\r\n spedStudentDocumentDelete(SpedDocumentId: number): Observable {\r\n const queryString = '?SpedDocumentId=' + SpedDocumentId;\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedStudentDocumentDelete' + queryString, null);\r\n }\r\n spedStudentDocumentCreate(attachment: ImportedDocuments, attachmentType: string, callFromAssessmentReport: boolean = false): Observable {\r\n // return this.http.post(System.apiURL.SpecialEd + 'SpedStudentDocumentCreate?attachmentType=${attachmentType}' , attachment);\r\n return this.http.post(System.apiURL.SpecialEd + `SpedStudentDocumentCreate?attachmentType=${attachmentType}&callFromAssessmentReport=${callFromAssessmentReport}`, attachment);\r\n }\r\n\r\n saveSpedCopyCollectionWithStudentData(studentId: number, spedCollectionId: number, spedCollectionToStudentId: number, collectionToStudentTemplatesIds: string, stateCode: string, templateVersionIds: string, amendmentAnnualValue: string, teacherUserIds: string): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&spedCollectionId=' + spedCollectionId +\r\n '&spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&collectionToStudentTemplatesIds=' + collectionToStudentTemplatesIds +\r\n '&stateCode=' + stateCode + '&templateVersionIds=' + templateVersionIds + '&amendmentAnnualValue=' + amendmentAnnualValue +\r\n '&teacherUserIds=' + teacherUserIds;\r\n return this.http.post(System.apiURL.SpecialEd + 'SpedCopyCollectionWithStudentData' + queryString, null);\r\n }\r\n\r\n spedCollectionStudentToTeamMember(spEdCollectionToStudentId: number, copyTeamMember: boolean): Observable {\r\n const queryString = '?spEdCollectionToStudentId=' + spEdCollectionToStudentId + '©TeamMember=' + copyTeamMember;\r\n return this.http.get(System.apiURL.SpecialEd + 'SpEdCollectionStudentToTeamMembersRead' + queryString);\r\n }\r\n\r\n viewBlankDocument(spedCollectionId: number): Observable {\r\n let queryString = '';\r\n queryString += '?spedCollectionId=' + spedCollectionId;\r\n return this.http.get(System.apiURL.SpecialEd + 'PrintBlankCollection' + queryString);\r\n }\r\n\r\n spedStudentCollectionStatusToCompleted(spedCollectionToStudentId: number, completedByCaseManager: boolean, workingDraft: boolean): Observable {\r\n const queryString = '?spedCollectionToStudentId=' + spedCollectionToStudentId + '&completedByCaseManager=' + completedByCaseManager + '&workingDraft=' + workingDraft;\r\n return this.http.post(System.apiURL.SpecialEd + 'UpdateStudentCollectionStatusToCompleted' + queryString, null);\r\n }\r\n\r\n getStudentSpEdSummary(stateCode: string, siteYearId: number): Observable {\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id + '&stateCode=' + stateCode + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetStudentSpEdSummary' + queryString);\r\n }\r\n\r\n getSpEdSummaryLegendCodes(stateCode: string): Observable {\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id + '&stateCode=' + stateCode;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpEdSummaryCodes' + queryString);\r\n }\r\n\r\n getSpedAssessmentsReports() {\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id;\r\n return this.http.get(System.apiURL.SpecialEd + 'GetSpedAssessmentsReports' + queryString);\r\n }\r\n\r\n deleteAssessmentReport(reportId: number): Observable {\r\n const queryString = '?reportId=' + reportId;\r\n return this.http.get(System.apiURL.SpecialEd + 'DeleteAssessmentReport' + queryString);\r\n }\r\n\r\n updateAssessmentReportStatus(reportId: number, spedLookUpDataId: number): Observable {\r\n const queryString = '?reportId=' + reportId + '&spedLookUpDataId=' + spedLookUpDataId;\r\n return this.http.get(System.apiURL.SpecialEd + 'UpdateAssessmentReportStatus' + queryString);\r\n }\r\n\r\n saveReport(data: AssessmentsReport) {\r\n return this.http.post(System.apiURL.SpecialEd + 'SaveReport', data);\r\n }\r\n\r\n}","\r\n
\r\n \r\n
\r\n \r\n 0\">\r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n 0 && academicHistorySummary.V9Flag == false && (userType == 1 || academicHistorySummary.S360ClassRank)\">\r\n \r\n \r\n \r\n 0 && academicHistorySummary.V9Flag == false && (userType == 1 || academicHistorySummary.S360ClassRank)\">\r\n \r\n \r\n \r\n
\r\n Unweighted GPA:\r\n \r\n {{getFormattedGPA('unweighted')}}\r\n
\r\n Weighted GPA:\r\n \r\n {{getFormattedGPA('weighted')}}\r\n
Class Rank: {{academicHistorySummary.ClassRankIn}} out of {{academicHistorySummary.ClassRankOut}}
Rank Calculated: {{getFormattedDate(academicHistorySummary.RankCalculatedOn)}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n No Academic History data exists for student.\r\n
\r\n
No HS Transcript data exists for this student.
\r\n
0\">\r\n\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Academic Year\r\n \r\n \r\n \r\n \r\n {{AH.AcademicYear}}\r\n \r\n \r\n \r\n School\r\n \r\n \r\n {{AH.School}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n \r\n \r\n \r\n {{AH.Gradelevel}}\r\n \r\n \r\n \r\n Course Name\r\n \r\n \r\n \r\n {{AH.Course}}\r\n \r\n \r\n \r\n Attempted Credits\r\n \r\n \r\n \r\n {{AH.AttemptedCredit}}\r\n \r\n \r\n \r\n Earned Credits\r\n \r\n \r\n \r\n \r\n {{AH.EarnedCredit}}\r\n \r\n \r\n S{{i+1}}\r\n \r\n \r\n \r\n {{ahSem.Grade}}\r\n \r\n \r\n \r\n \r\n \r\n Final\r\n \r\n \r\n \r\n \r\n {{AH.Final}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Course-Section\r\n {{AH.Subject}}-{{AH.Section}}
Teacher{{AH.Teacher}}Transferred From{{AH.TransferredFrom}}
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, AfterViewInit, ViewChild, EventEmitter, OnDestroy, ChangeDetectorRef, HostBinding, Host, ViewChildren, QueryList } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { AcademicHistory } from '../../shared-components/student/academic-history.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { FilterComponent } from '../../shared-components/controls/filter/filter.component';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\n\r\n// -------Angular Material------------------------------------\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { AcademicHistorySummary } from '../../shared-components/student/academic-history-summary.model';\r\nimport { formatDate, DecimalPipe } from '@angular/common';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'academic-history',\r\n templateUrl: './academic-history.component.html',\r\n styleUrls: ['./academic-history.component.css'],\r\n // Animation for when the detail row is expanded or collapsed\r\n animations: [detailExpand],\r\n})\r\nexport class AcademicHistoryComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @HostBinding('class.sis-app-root') sisAppRoot: Host = true;\r\n\r\n // ------------Academic History Data---------------------------\r\n student360YearSubscription: Subscription;\r\n s360Year: Year;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n academicHistory: AcademicHistory[] = [];\r\n academicHistorySummary: AcademicHistorySummary = new AcademicHistorySummary();\r\n semesters: string[] = [];\r\n decimalMask = '1.3-3';\r\n showAttemptedCreditTotal = false;\r\n showEarnedCreditTotal = false;\r\n attemptedCreditTotal = 0;\r\n earnedCreditTotal = 0;\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n isShowHSTranscript = false;\r\n isBusy = false;\r\n subscriptions = [];\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay: string[] = ['More', 'AcademicYear', 'School', 'Gradelevel', 'Course', 'AttemptedCredit', 'EarnedCredit', 'Final'];\r\n columnsToDisplayDetailRow: string[] = ['CourseSection', 'IncludeInGPA', 'Teacher', 'TransferredFrom', 'CourseComplete'];\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n filterReset = '';\r\n @ViewChildren(FilterComponent) filterRef: QueryList;\r\n clearFilterEvent = new EventEmitter();\r\n userType: number;\r\n\r\n // --------------LifeCycle---------------------------------------\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n public cdRef: ChangeDetectorRef,\r\n private decimalPipe: DecimalPipe\r\n ) {\r\n // Subscribe to services so that the component will be notified any time the value is changed by another component\r\n // When the value has changed the inner code will be executed\r\n this.subscriptions.push(\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n // Reload student data when the selected student is changed (Student button in the header)\r\n this.loadStudentInfo(studentId);\r\n }),\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n s60Year => {\r\n // Reload AcademicHistory when the selected year is changed\r\n this.getAcademicHistory();\r\n }\r\n ));\r\n\r\n // Load data into a DataSource object\r\n // MatTableDataSource extends DataSource to allow sorting, pagination and basic filtering\r\n // TylerMatTableDataSource extends MatTableDataSource and allows complex filtering and detail rows\r\n this.angularMatData.data = this.academicHistory;\r\n\r\n // Copy flag from service to local variable\r\n // This prevents having to directly call a service from the html, keeping the view loosely coupled\r\n this.userType = this.userService.userType;\r\n }\r\n\r\n ngOnInit() {\r\n // Initial data load\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Call any methods that require data to already be available\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n // ------------Academic History Data---------------------------\r\n\r\n loadStudentInfo(studentId: number) {\r\n if (this.studentService.studentEnrollment) {\r\n this.clearStudentData();\r\n this.checkStudentGradeLevel(this.studentService.studentEnrollment.GradeLevel);\r\n this.selectedStudent = this.studentService.students.filter(function (student) {\r\n return student.Id == studentId;\r\n })[0];\r\n this.getAcademicHistory();\r\n this.getAcademicHistorySummary();\r\n }\r\n }\r\n\r\n getAcademicHistory() {\r\n this.isBusy = true;\r\n this.angularMatData.data = [];\r\n setTimeout(() => {\r\n this.subscriptions.push(\r\n this.studentService.getAcademicHistory(this.selectedStudent.Id, this.yearService.student360Year.Id, this.isShowHSTranscript).subscribe(data => {\r\n this.academicHistory = data;\r\n this.loadAcademicHistory();\r\n this.generateSemesterColumns();\r\n this.getTotalCounts();\r\n }));\r\n }, 0);\r\n }\r\n\r\n getAcademicHistorySummary() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.subscriptions.push(\r\n this.studentService.getAcademicHistorySummary(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.academicHistorySummary = data;\r\n this.getSchoolYearSettings();\r\n }));\r\n }, 0);\r\n }\r\n\r\n getTotalCounts() {\r\n this.attemptedCreditTotal = 0;\r\n this.earnedCreditTotal = 0;\r\n for (const record of this.academicHistory) {\r\n this.attemptedCreditTotal += record.AttemptedCredit;\r\n this.earnedCreditTotal += record.EarnedCredit;\r\n }\r\n this.showAttemptedCreditTotal = this.attemptedCreditTotal > 0;\r\n this.showEarnedCreditTotal = this.earnedCreditTotal > 0;\r\n }\r\n\r\n generateSemesterColumns() {\r\n // Dynamically generates the semester columns based on data returned from the server\r\n\r\n // Remove 'Final' column from array\r\n // Makes the array simpler to work with as the semester columns are now at the end of the array\r\n let index = this.columnsToDisplay.indexOf('Final');\r\n if (index != -1) {\r\n this.columnsToDisplay.splice(index, 1);\r\n }\r\n\r\n\r\n for (let i = 0; i < this.semesters.length; i++) {\r\n index = this.columnsToDisplay.indexOf(this.semesters[i]);\r\n if (index != -1) {\r\n this.columnsToDisplay.splice(index, 1);\r\n }\r\n }\r\n\r\n this.semesters = [];\r\n\r\n for (const academicHistory of this.academicHistory) {\r\n for (const semester of academicHistory.AHSemester.filter(s => s.Description != 'Final')) {\r\n if (this.semesters.indexOf(semester.Description) == -1) {\r\n this.semesters.push(semester.Description);\r\n this.columnsToDisplay.push(semester.Description);\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n private loadAcademicHistory(): void {\r\n // load data into Angular Material table\r\n this.angularMatData.data = this.academicHistory;\r\n this.angularMatData.useFilterDataAccessor = true;\r\n\r\n setTimeout(() => {\r\n // Custom sorting for case here Academic Year starts with letters\r\n // Extracts last two characters and returns the resulting substring if it is a number\r\n this.angularMatData.sortingDataAccessor = (item: any, property: string) => {\r\n if (property == 'AcademicYear') {\r\n if (isNaN(parseInt(item.AcademicYear, 10))) {\r\n const subStrAcademicYear: string = item.AcademicYear.substr(item.AcademicYear.length - 2);\r\n if (!isNaN(parseInt(subStrAcademicYear, 10))) {\r\n return subStrAcademicYear;\r\n }\r\n }\r\n return item[property];\r\n }\r\n // Custom sorting for dynamic columns S1, S2, etc\r\n else if (property.startsWith('Sem')) {\r\n const index: number = parseInt(property.substr(property.length - 1), 10);\r\n if (item.AHSemester[index]) {\r\n const semValue = parseInt(item.AHSemester[index].Grade, 10);\r\n if (!isNaN(semValue)) {\r\n return semValue;\r\n }\r\n else {\r\n return item.AHSemester[index].Grade;\r\n }\r\n }\r\n }\r\n else if (property == 'Final') {\r\n const finalValue = parseInt(item.Final, 10);\r\n if (!isNaN(finalValue)) {\r\n return finalValue;\r\n }\r\n else {\r\n return item.Final;\r\n }\r\n }\r\n // Default sorting\r\n else {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n\r\n this.isBusy = false;\r\n }\r\n\r\n checkStudentGradeLevel(gradeLevel: string) {\r\n if (gradeLevel == '09' || gradeLevel == '10' || gradeLevel == '11' || gradeLevel == '12') {\r\n this.isShowHSTranscript = true;\r\n } else {\r\n this.isShowHSTranscript = false;\r\n }\r\n }\r\n\r\n getSchoolYearSettings() {\r\n this.subscriptions.push(\r\n this.yearService.getSchoolYearSettings(this.yearService.student360Year.Id, this.studentService.studentEnrollment.SchoolId).subscribe(data => {\r\n if (data && data.GPADecimalPlaces) {\r\n this.decimalMask = '1.' + data.GPADecimalPlaces.toString() + '-' + data.GPADecimalPlaces.toString();\r\n }\r\n }));\r\n }\r\n\r\n getFormattedGPA(type: string) {\r\n let formattedGPA = '';\r\n if (this.academicHistorySummary && type == 'unweighted') {\r\n formattedGPA = this.decimalPipe.transform(this.academicHistorySummary.UnWeightedGPA, this.decimalMask);\r\n }\r\n else if (this.academicHistorySummary && type == 'weighted') {\r\n formattedGPA = this.decimalPipe.transform(this.academicHistorySummary.WeightedGPA, this.decimalMask);\r\n }\r\n return formattedGPA;\r\n }\r\n\r\n clearStudentData() {\r\n\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: AcademicHistory): string {\r\n // Returns string for a given row's data\r\n // reads each column header name and then the cell data for that column\r\n const colList: string[] = ['Academic Year',\r\n 'School',\r\n 'Grade Level',\r\n 'Course Name',\r\n 'Attempted Credits',\r\n 'Earned Credits'];\r\n\r\n this.semesters.forEach(element => {\r\n colList.push(element);\r\n });\r\n\r\n colList.push('Final');\r\n\r\n const dataList: string[] = [row.AcademicYear,\r\n row.School,\r\n row.Gradelevel,\r\n row.Course,\r\n row.AttemptedCredit.toString(),\r\n row.EarnedCredit.toString()];\r\n row.AHSemester.forEach(element => {\r\n dataList.push(element.Grade);\r\n });\r\n\r\n dataList.push(row.Final);\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + ' Expand for more details';\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n // These methods are used to allow calls to the TylerMatTableDataSource methods from the html\r\n toggleExpanded(row: any) {\r\n // Toggles row between expanded and collapsed\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n // Return true if expanded and false if collapsed\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // Expand or collapse all rows\r\n // true => expand all false => collapse all\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n getFormattedDate(date) {\r\n return formatDate(date, 'MM/dd/yy', 'en-US');\r\n }\r\n\r\n}","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-add-assessment-scores',\r\n templateUrl: './add-assessment-scores.component.html',\r\n styleUrls: ['./add-assessment-scores.component.css']\r\n})\r\nexport class AddAssessmentScoresComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}","

\r\n add-assessment-scores works!\r\n

\r\n","\r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Test\r\n \r\n \r\n \r\n {{dataCategory.fullTitle}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n Add Scores\r\n \r\n \r\n \r\n\r\n \r\n \r\n \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 { AssessmentDataCategory } from './../assessment-data-category';\r\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSort } from '@angular/material/sort';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { Subscription } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { AddAssessmentScoresComponent } from './add-assessment-scores/add-assessment-scores.component';\r\n\r\n@Component({\r\n selector: 'assessment-data-category-table',\r\n templateUrl: './assessment-data-category-table.component.html',\r\n styleUrls: ['./assessment-data-category-table.component.css'],\r\n animations: [detailExpand],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AssessmentDataCategoryTableComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n @Input() data: TylerMatTableDataSource;\r\n @Input() tabIndex: number;\r\n @Output() detailOpened = new EventEmitter();\r\n @Input() showChildFilters = true;\r\n @Input() triggerChanges: EventEmitter;\r\n triggerChangeSubscription: Subscription;\r\n selectedRow: AssessmentDataCategory;\r\n headerColumns: string[] = ['More', 'fullTitle', 'action'];\r\n\r\n // Class Functions\r\n constructor(\r\n private dialog: MatDialog,\r\n private changeDetector: ChangeDetectorRef,\r\n private router: Router\r\n ) {\r\n if (this.router.url.toLowerCase().indexOf('registrationenrollment') == -1)\r\n this.headerColumns = this.headerColumns.filter(c => c != 'action');\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.data) {\r\n this.data.sort = this._sort;\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: subscribes to manual changes\r\n if (this.triggerChanges) {\r\n this.triggerChangeSubscription = this.triggerChanges.subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the sort of the data\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: sets the sort of the data\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes from manual changes\r\n if (this.triggerChangeSubscription) {\r\n this.triggerChangeSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n rowClick(row: AssessmentDataCategory) {\r\n // PRE: a row is clicked\r\n // POST: toggles that row and detects changes\r\n this.data.toggleExpanded(row);\r\n this.detailOpened.emit(row);\r\n this.selectedRow = row;\r\n setTimeout(() => {\r\n this.triggerChanges.emit();\r\n }, 0);\r\n }\r\n\r\n addScores(event) {\r\n event.stopPropagation();\r\n this.dialog.open(AddAssessmentScoresComponent, { panelClass: 'tyl-mat-dialog', disableClose: true });\r\n }\r\n\r\n}","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n {{field}}\r\n \r\n \r\n \r\n \r\n \r\n {{field}}\r\n \r\n \r\n \r\n {{assessmentData[field]}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \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 { TylerMatTableDataSource } from './../../../shared-components/angular-material/extended.class';\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy, ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges, OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'assessment-data-table',\r\n templateUrl: './assessment-data-table.component.html',\r\n styleUrls: [\r\n './assessment-data-table.component.css'\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AssessmentDataTableComponent implements OnInit, AfterViewInit, OnChanges {\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n @Input() data: TylerMatTableDataSource;\r\n @Input() fields: string[];\r\n @Input() minTableWidth: number;\r\n @Input() showFilters = true;\r\n @Input() triggerChanges: EventEmitter;\r\n triggerChangeSubscription: Subscription;\r\n fieldsColumns: string[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private changeDetector: ChangeDetectorRef,\r\n private router: Router\r\n ) { }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.data) {\r\n this.data.sort = this._sort;\r\n this.setSorting();\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: subscribes to manual changes\r\n if (this.triggerChanges) {\r\n this.triggerChangeSubscription = this.triggerChanges.subscribe(() => {\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n if (this.router.url.toLowerCase().indexOf('registrationenrollment') > -1 && this.fields.indexOf('action') == -1) {\r\n this.fields.push('actions');\r\n }\r\n this.fields.forEach(f => {\r\n this.fieldsColumns.push(f);\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the table data's sort\r\n this.setSorting();\r\n }\r\n\r\n ngOnChanges() {\r\n // POST: unsubscribes to manual changes and sets the table data's sort\r\n if (this.triggerChangeSubscription) {\r\n this.triggerChangeSubscription.unsubscribe();\r\n }\r\n this.setSorting();\r\n }\r\n\r\n // Methods\r\n setSorting() {\r\n // PRE: table data\r\n // POST: sets the table data's sort\r\n if (this.data && this.sort) {\r\n this.data.sort = this.sort;\r\n this.data.sortingDataAccessor = (data: any, sortHeaderId: string): string | number => {\r\n let value = data[sortHeaderId];\r\n const dateRegex = /\\d{2}\\/\\d{2}\\/\\d{2}/y;\r\n if (value) {\r\n if (dateRegex.test(value)) {\r\n value = new Date(value);\r\n return value.getTime();\r\n } else {\r\n return this.data.defaultSortingAccessor(data, sortHeaderId);\r\n }\r\n } else {\r\n return '';\r\n }\r\n };\r\n this.sort.sort({\r\n id: this.fields[0],\r\n start: 'asc',\r\n disableClear: true\r\n });\r\n }\r\n }\r\n\r\n fieldTrackBy(index: number, item: string) {\r\n return item + index;\r\n }\r\n}\r\n","import { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\n\r\n// This class exists purely for making the data work with the mattable\r\nexport class AssessmentDataCategory {\r\n\r\n\t// Properties\r\n\tcategory: string;\r\n\ttestName: string;\r\n\tfullTitle: string;\r\n\tfields: string[] = [];\r\n data: object[] = [];\r\n subTableData: TylerMatTableDataSource;\r\n instanceId: number;\r\n\r\n // Methods\r\n createSubTableData() {\r\n // POST: constructs the sub-table data source from the data\r\n this.subTableData = new TylerMatTableDataSource(this.data);\r\n }\r\n\r\n\tminTableWidth() {\r\n\t\t// POST: gives you the minimum width for the corresponding table\r\n\t\treturn (this.fields.length * 150) + 50;\r\n\t}\r\n\r\n\tcontains (checkedDatum: {[key: string]: string}): boolean {\r\n\t\t// PRE: a dictionary to check\r\n\t\t// POST: returns true if the checked dictionary is in the data\r\n\t\tfor (let i = 0; i < this.data.length; i++) {\r\n\t\t\tconst datum = this.data[i];\r\n\t\t\tlet equivalent = true;\r\n\t\t\tfor (let j = 0; j < this.fields.length; j++) {\r\n\t\t\t\tconst field = this.fields[j];\r\n\t\t\t\tif (datum[field] != checkedDatum[field]) {\r\n\t\t\t\t\tequivalent = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (equivalent) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tsort(field: string, object = null, direction = 'desc') {\r\n\t\t// POST: sorts the data in order of a specified field\r\n\t\tif (this.fields.includes(field)) {\r\n\t\t\tthis.data.sort((a, b) => {\r\n\t\t\t\tif (object) {\r\n\t\t\t\t\tconst objectA = object.__proto__.constructor(a);\r\n\t\t\t\t\tconst objectB = object.__proto__.constructor(b);\r\n\t\t\t\t\tif ((objectA < objectB && direction == 'desc') ||\r\n\t\t\t\t\t\t(objectA > objectB && direction == 'asc')) {\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t} else if ((objectB < objectA && direction == 'desc') ||\r\n\t\t\t\t\t\t\t (objectB > objectA && direction == 'asc')) {\r\n\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif ((a[field] < b[field] && direction == 'desc') ||\r\n\t\t\t\t\t\t(a[field] > b[field] && direction == 'asc')) {\r\n\t\t\t\t\t\treturn -1;\r\n\t\t\t\t\t} else if ((b[field] < a[field] && direction == 'desc') ||\r\n\t\t\t\t\t\t\t (b[field] > a[field] && direction == 'asc')) {\r\n\t\t\t\t\t\treturn 1;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n 0 && !processingTabs\" [tabNames]=\"tabNames\"\r\n [transformLabelsToTitleCase]=\"false\" (selectionsChangeIndex)=\"selectionChange($event)\">\r\n\r\n \r\n
\r\n No assessment scores exist for this student.\r\n
\r\n\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n\r\n \r\n
\r\n {{tab.DESCRIPTION}}\r\n - {{tab.FULLTITLE}}\r\n
\r\n\r\n \r\n
i\">\r\n = 1\"\r\n [showChildFilters]=\"tab.DESCRIPTION != 'Best Of'\" [data]=\"tableDataV9[i]\" [tabIndex]=\"i\"\r\n [triggerChanges]=\"triggerChanges\">\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\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 { ChangeDetectorRef, Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { SpinnerService } from '../../shared-components/spinner/spinner.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\nimport { AssessmentDataCategory } from './assessment-data-category';\r\nimport { Assessment } from './assessment.model';\r\nimport { AssessmentService } from './assessment.service';\r\n\r\n@Component({\r\n\tselector: 'assessment',\r\n\ttemplateUrl: './assessment.component.html',\r\n\tstyleUrls: ['./assessment.component.css']\r\n})\r\nexport class AssessmentComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\ttabs: Assessment[];\r\n\tassessments: Assessment[];\r\n\tsubscriptions: Subscription[] = [];\r\n\ttabNames: string[];\r\n\ttableDataV9: TylerMatTableDataSource[] = [];\r\n\topenDetailRows: Array = new Array();\r\n\tselectionIndex = 0;\r\n\ttoggleAllRows: EventEmitter = new EventEmitter();\r\n\tselectedRow: AssessmentDataCategory;\r\n\tassessmentAndTabSubscriptions: Subscription[] = [];\r\n\tselectedStudent: Student;\r\n\tselectedTabName = '';\r\n\tpreviousTabSelection = '';\r\n\tprocessingTabs = false;\r\n\ttriggerChanges = new EventEmitter();\r\n\tuserType: number;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate assessmentService: AssessmentService,\r\n\t\tprivate studentService: StudentService,\r\n\t\tprivate userService: UserService,\r\n\t\tprivate yearService: YearService,\r\n\t\tprivate changeDetector: ChangeDetectorRef,\r\n\t\tprivate spinnerService: SpinnerService,\r\n\t\tprivate router: Router\r\n\t) { }\r\n\r\n\tget filtered(): boolean {\r\n\t\tif (this.tableDataV9[this.selectionIndex]) {\r\n\t\t\tlet filtered = this.tableDataV9[this.selectionIndex].isFiltered();\r\n\t\t\tfor (let i = 0; i < this.tableDataV9[this.selectionIndex].data.length; i++) {\r\n\t\t\t\tconst subTable = this.tableDataV9[this.selectionIndex].data[i];\r\n\t\t\t\tif (subTable instanceof AssessmentDataCategory && subTable.subTableData.isFiltered()) {\r\n\t\t\t\t\tfiltered = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn filtered;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// POST: subscribing to the necessary services\r\n\t\tthis.userType = this.userService.currentUser.UserType;\r\n\t\tif (this.userType != 1) {\r\n\t\t\tthis.subscriptions.push(\r\n\t\t\t\tthis.studentService.selectedStudentStream$.subscribe(() => {\r\n\t\t\t\t\tif (this.selectedStudent != this.studentService.selectedStudent) {\r\n\t\t\t\t\t\tthis.previousTabSelection = this.selectedTabName;\r\n\t\t\t\t\t\tthis.selectedStudent = this.studentService.selectedStudent;\r\n\t\t\t\t\t\tthis.getAssessmentsAndTabs();\r\n\t\t\t\t\t}\r\n\t\t\t\t}),\r\n\t\t\t\tthis.yearService.observableStudent360YearStream$.subscribe(() => {\r\n\t\t\t\t\tthis.previousTabSelection = this.selectedTabName;\r\n\t\t\t\t\tthis.getAssessmentsAndTabs();\r\n\t\t\t\t}),\r\n\t\t\t\tthis.toggleAllRows.subscribe(toggle => {\r\n\t\t\t\t\tif (this.tableDataV9[this.selectionIndex]) {\r\n\t\t\t\t\t\tthis.tableDataV9[this.selectionIndex].expandAll(toggle);\r\n\t\t\t\t\t\tthis.triggerChanges.emit();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t// POST: ends all subscriptions\r\n\t\tthis.subscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t\tthis.assessmentAndTabSubscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t}\r\n\r\n\tselectionChange(selectionIndex: number) {\r\n\t\t// PRE: the tab selection changes and this is passed the index of the tab\r\n\t\t// POST: sets the current tab\r\n\t\tthis.spinnerService.showSpinner = true;\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.selectionIndex = selectionIndex;\r\n\t\t\tthis.selectedTabName = this.tabNames[selectionIndex];\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.spinnerService.showSpinner = false;\r\n\t\t\t}, 100);\r\n\t\t}, 500);\r\n\t}\r\n\r\n\tclearFilter() {\r\n\t\t// POST: clears the filters from the current tab's table\r\n\t\tif (this.tableDataV9[this.selectionIndex]) {\r\n\t\t\tthis.tableDataV9[this.selectionIndex].removeAllFilters();\r\n\t\t\tfor (let i = 0; i < this.tableDataV9[this.selectionIndex].data.length; i++) {\r\n\t\t\t\tconst subTable = this.tableDataV9[this.selectionIndex].data[i];\r\n\t\t\t\tif (subTable instanceof AssessmentDataCategory) {\r\n\t\t\t\t\tsubTable.subTableData.removeAllFilters();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Methods\r\n\tgetAssessmentsAndTabs() {\r\n\t\t// POST: obtains the assessments and tabs, setting tab names and assessments\r\n\r\n\t\t// Preparing for processing\r\n\t\tthis.processingTabs = true;\r\n\t\tthis.assessmentAndTabSubscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t\tthis.assessmentAndTabSubscriptions = [];\r\n\t\tconst yearId = (!this.regEnrollMode) ? this.studentService.studentEnrollment.SiteYearId : this.yearService.defaultYear.Id;\r\n\r\n\t\t// Obtaining data\r\n\t\tthis.assessmentAndTabSubscriptions.push(\r\n\r\n\t\t\t// Obtaining tabs\r\n\t\t\tthis.assessmentService.getStudentAssessmentTabs(yearId).subscribe(tabs => {\r\n\t\t\t\tthis.tabNames = [];\r\n\t\t\t\ttabs.forEach(tab => {\r\n\t\t\t\t\tthis.tabNames.push(tab.DESCRIPTION);\r\n\t\t\t\t});\r\n\t\t\t\tthis.tabs = tabs;\r\n\r\n\t\t\t\t// Changing to the first tab\r\n\t\t\t\tthis.selectionIndex = 0;\r\n\t\t\t\tthis.selectedTabName = this.tabNames[0];\r\n\r\n\t\t\t\t// Obtaining assessments\r\n\t\t\t\tthis.assessmentAndTabSubscriptions.push(\r\n\t\t\t\t\tthis.assessmentService.getStudentAssessments(tabs).subscribe(assessments => {\r\n\t\t\t\t\t\tthis.assessments = assessments;\r\n\t\t\t\t\t\tthis.arrangeTabs();\r\n\t\t\t\t\t\tthis.processingTabs = false;\r\n\t\t\t\t\t})\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tarrangeTabs() {\r\n\t\t// PRE: the tabs and data are obtained\r\n\t\t// POST: arranges the data for display and sets the initial grid size\r\n\t\tthis.arrangeTabsV9();\r\n\r\n\t\t// If this is V9 and the first tab, we expand all\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.selectionIndex == 0) {\r\n\t\t\t\tthis.toggleAllRows.emit(true);\r\n\t\t\t}\r\n\t\t}, 10);\r\n\r\n\t\t// Running change detection manually because we made a ton of changes\r\n\t\tthis.changeDetector.detectChanges();\r\n\t}\r\n\r\n\tarrangeTabsV9() {\r\n\t\t// PRE: Your user MUST be in V9, or this doesn't make sense\r\n\t\t// POST: finds the tabs and arranges the data for each tab\r\n\t\tthis.tableDataV9 = [];\r\n\t\tconst dataArrays: Array> = new Array>();\r\n\r\n\t\t// Creating a data category for each tab\r\n\t\tfor (let i = 0; i < this.tabNames.length; i++) {\r\n\t\t\tdataArrays.push(new Array());\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < this.assessments.length; i++) {\r\n\r\n\t\t\t// Only operating on the assessment if we should display this\r\n\t\t\tif (this.assessments[i].Display) {\r\n\r\n\t\t\t\t// Determining where to place this data\r\n\t\t\t\tconst tableIndex = this.tabNames.indexOf(this.assessments[i].FULLTITLE);\r\n\t\t\t\tconst dataCategories = dataArrays[tableIndex];\r\n\t\t\t\tlet categoryExists = false;\r\n\t\t\t\tlet categoryIndex = -1;\r\n\t\t\t\tfor (let j = 0; j < dataCategories.length; j++) {\r\n\t\t\t\t\tif (categoryIndex < 0 &&\r\n\t\t\t\t\t\tdataCategories[j].category == this.assessments[i].DESCRIPTION &&\r\n\t\t\t\t\t\tdataCategories[j].testName == this.assessments[i].FULLTITLE) {\r\n\t\t\t\t\t\tcategoryExists = true;\r\n\t\t\t\t\t\tcategoryIndex = j;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconst bestOfTableIndex = this.tabNames.indexOf('Best Of');\r\n\t\t\t\tconst bestOfCategories = bestOfTableIndex >= 0 ? dataArrays[bestOfTableIndex] : null;\r\n\t\t\t\tlet bestOfCategoryExists = false;\r\n\t\t\t\tlet bestOfIndex = -1;\r\n\t\t\t\tif (bestOfCategories && this.assessments[i].BESTOF) {\r\n\t\t\t\t\tfor (let j = 0; j < bestOfCategories.length; j++) {\r\n\t\t\t\t\t\tif (bestOfIndex < 0 &&\r\n\t\t\t\t\t\t\tbestOfCategories[j].category == this.assessments[i].DESCRIPTION &&\r\n\t\t\t\t\t\t\tbestOfCategories[j].testName == this.assessments[i].FULLTITLE) {\r\n\t\t\t\t\t\t\tbestOfCategoryExists = true;\r\n\t\t\t\t\t\t\tbestOfIndex = j;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// If not place was found, creating a new category for it\r\n\t\t\t\tif (!categoryExists) {\r\n\t\t\t\t\tdataCategories.push(new AssessmentDataCategory());\r\n\t\t\t\t\tcategoryIndex = dataCategories.length - 1;\r\n\t\t\t\t\tconst assessment = this.assessments[i];\r\n\t\t\t\t\tdataCategories[categoryIndex].category = assessment.DESCRIPTION;\r\n\t\t\t\t\tdataCategories[categoryIndex].testName = assessment.FULLTITLE;\r\n\t\t\t\t\tdataCategories[categoryIndex].fullTitle = assessment.DESCRIPTION;\r\n\t\t\t\t\tconst dataFields = assessment.AssessmentDataField;\r\n\t\t\t\t\tif (dataFields != null && dataFields.length > 0) {\r\n\t\t\t\t\t\tdataCategories[categoryIndex].instanceId = dataFields[0].TestInstanceId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.assessments[i].BESTOF && !bestOfCategoryExists) {\r\n\t\t\t\t\tbestOfCategories.push(new AssessmentDataCategory());\r\n\t\t\t\t\tbestOfIndex = bestOfCategories.length - 1;\r\n\t\t\t\t\tconst assessment = this.assessments[i];\r\n\t\t\t\t\tbestOfCategories[bestOfIndex].category = this.assessments[i].DESCRIPTION;\r\n\t\t\t\t\tbestOfCategories[bestOfIndex].testName = this.assessments[i].FULLTITLE;\r\n\t\t\t\t\tbestOfCategories[bestOfIndex].fullTitle = this.assessments[i].FULLTITLE + ' - ' + this.assessments[i].DESCRIPTION;\r\n\t\t\t\t\tconst dataFields = assessment.AssessmentDataField;\r\n\t\t\t\t\tif (dataFields != null && dataFields.length > 0) {\r\n\t\t\t\t\t\tbestOfCategories[categoryIndex].instanceId = dataFields[0].TestInstanceId;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Ensuring the correct category names\r\n\t\t\t\tthis.assessments[i].AssessmentDataField.forEach(field => {\r\n\t\t\t\t\tif (!dataCategories[categoryIndex].fields.includes(field.strFieldName)) {\r\n\t\t\t\t\t\tdataCategories[categoryIndex].fields.push(field.strFieldName);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.assessments[i].BESTOF) {\r\n\t\t\t\t\t\tif (!bestOfCategories[bestOfIndex].fields.includes(field.strFieldName)) {\r\n\t\t\t\t\t\t\tbestOfCategories[bestOfIndex].fields.push(field.strFieldName);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Iterating through the data rows\r\n\t\t\t\tthis.assessments[i].AssessmentsDataRows.forEach(dataRow => {\r\n\r\n\t\t\t\t\t// Creating dictionary for each data row\r\n\t\t\t\t\tconst dictionaryData: { [key: string]: string } = {};\r\n\t\t\t\t\tdataRow.AssessmentData.forEach(data => {\r\n\t\t\t\t\t\tdictionaryData[data.strFieldName] = data.strFieldData;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Adding it to our categories if it's not there (preventing duplicates)\r\n\t\t\t\t\tif (!dataCategories[categoryIndex].contains(dictionaryData)) {\r\n\t\t\t\t\t\tdataCategories[categoryIndex].data.push(dictionaryData);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.assessments[i].BESTOF) {\r\n\t\t\t\t\t\tif (!bestOfCategories[bestOfIndex].contains(dictionaryData)) {\r\n\t\t\t\t\t\t\tbestOfCategories[bestOfIndex].data.push(dictionaryData);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Making data arrays MatTableDataSources\r\n\t\tdataArrays.forEach(dataArray => {\r\n\r\n\t\t\t// Sorting them alphabetically initially\r\n\t\t\tdataArray.sort((a, b) => {\r\n\t\t\t\tif (a.fullTitle < b.fullTitle) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t} else if (b.fullTitle < a.fullTitle) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Sorting each one by date\r\n\t\t\tdataArray.forEach(dataCategory => {\r\n\t\t\t\tdataCategory.sort('Test Date', new Date());\r\n\t\t\t});\r\n\r\n\t\t\t// Constructing the subtable data\r\n\t\t\tdataArray.forEach(data => {\r\n\t\t\t\tdata.createSubTableData();\r\n\t\t\t});\r\n\r\n\t\t\t// Inserting into table data\r\n\t\t\tthis.tableDataV9.push(new TylerMatTableDataSource(dataArray));\r\n\t\t});\r\n\t}\r\n\r\n\ttabTrackBy(index: number, item: Assessment) {\r\n\t\treturn item.Id;\r\n\t}\r\n\r\n\tregEnrollMode() {\r\n\t\treturn this.router.url.toLowerCase().indexOf('registrationenrollment') > -1;\r\n\t}\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport {Injectable} from '@angular/core';\r\nimport {StudentService} from '../../shared-components/student/student.service';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport { Assessment, TestMasterLayoutVersion, AssessmentField } from './assessment.model';\r\nimport {UserService} from '../../shared-components/user/user.service';\r\nimport { Router } from '@angular/router';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\n\r\n@Injectable()\r\nexport class AssessmentService {\r\n\r\n\t// Properties\r\n\r\n\t// Class Functions\r\n\tconstructor (\r\n\t\tprivate studentService: StudentService,\r\n\t\tprivate userService: UserService,\r\n private yearService: YearService,\r\n private router: Router,\r\n\t\tprivate http: HttpClient\r\n\t) {}\r\n\r\n\t// Event Functions\r\n\r\n\t// Methods\r\n\tgetStudentAssessmentTabs(yearId: number): Observable {\r\n\t\tconst queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n\t\t\t'&loginId=' + this.userService.currentUser.Id +\r\n\t\t\t'&SiteYearId=' + yearId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentAssessmentsTab' + queryString);\r\n\t}\r\n\r\n\tgetStudentAssessments(tabs: Assessment[]): Observable {\r\n\t\t// PRE: there is a selected student in the student service,\r\n\t\t// \t\ta siteYearId in the year service,\r\n\t\t// \t\tand a loginId in the login service\r\n\t\t// POST: gets the students assessments for this particular year and login\r\n let siteYearId = this.router.url.indexOf('registrationEnroll') == -1 ? this.studentService.studentEnrollment.SiteYearId : this.yearService.defaultYear.SiteYearId;\r\n\t\tconst queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n\t\t\t'&SiteYearId=' + siteYearId +\r\n\t\t\t'&loginId=' + this.userService.currentUser.Id;\r\n\t\treturn this.http.post(System.apiURL.Student + 'GetStudentAssessments' + queryString, tabs);\r\n\t}\r\n\r\n\tgetTestMasterLayoutVersion(): Observable {\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetTestMasterLayoutVersion');\r\n\t}\r\n\r\n\tgetAssessmentFieldsReadByInstIdOrVersionId(instanceId: number, testMasterVersionId: number): Observable {\r\n\t\tconst queryString = '?instanceId=' + instanceId +\r\n\t\t\t'&testMasterVersionId=' + testMasterVersionId;\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetAssessmentFieldsReadByInstIdOrVersionId' + queryString);\r\n\t}\r\n\r\n\tsaveAssessment(studentId: number, instanceId: number, versionId: number, assessmentDate: string, printOnTranscript: boolean, isImportedData: boolean, assessmentFields: AssessmentField[]): Observable {\r\n\t\tconst queryString = '?studentId=' + studentId +\r\n\t\t\t'&instanceId=' + instanceId +\r\n\t\t\t'&versionId=' + versionId +\r\n\t\t\t'&assessmentDate=' + assessmentDate +\r\n\t\t\t'&printOnTranscript=' + printOnTranscript +\r\n\t\t\t'&isImportedData=' + isImportedData;\r\n\t\treturn this.http.post(System.apiURL.Student + 'SaveAssessment' + queryString, assessmentFields);\r\n\t}\r\n\r\n\tdeleteAssessmentById(instanceId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `DeleteAssessmentById?instanceId=${instanceId}`);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { AssignmentsDTO } from './assignment.model';\r\nimport { AssignmentFilterParam } from './assignment-filter-param';\r\n\r\n@Pipe({\r\n name: 'assignmentFilter'\r\n})\r\nexport class AssignmentFilterPipe implements PipeTransform {\r\n\r\n transform(data: AssignmentsDTO[], filter: AssignmentFilterParam): AssignmentsDTO[] {\r\n return data.filter(\r\n x =>\r\n (!filter.FromDueDate || new Date(x.DueDate) >= filter.FromDueDate)\r\n && (!filter.ToDueDate || new Date(x.DueDate) <= filter.ToDueDate)\r\n && (!filter.FromAssignedDate || new Date(x.AssignedDate) >= filter.FromAssignedDate)\r\n && (!filter.ToAssignedDate || new Date(x.AssignedDate) <= filter.ToAssignedDate)\r\n && (!filter.FromPercentage || (x.Percentage) >= filter.FromPercentage)\r\n && (!filter.ToPercentage || (x.Percentage) <= filter.ToPercentage)\r\n && (!filter.Category || x.Category.toLowerCase().startsWith(filter.Category.toLowerCase()) || (filter.Category.startsWith('%') && x.Category.toLowerCase().indexOf(filter.Category.toLowerCase().substring(1)) > -1))\r\n && (!filter.Grade || x.Grade.toLowerCase().startsWith(filter.Grade.toLowerCase()) || (filter.Grade.startsWith('%') && x.Grade.toLowerCase().indexOf(filter.Grade.toLowerCase().substring(1)) > -1))\r\n && (!filter.Course || x.Course === filter.Course)\r\n && (!filter.Term || x.Term === filter.Term)\r\n );\r\n }\r\n\r\n}\r\n","import {System} from '../../shared-components/System';\r\n\r\nexport class AssignmentFilterParam {\r\n\r\n\t// Properties\r\n private _FromDueDate?: Date;\r\n private _ToDueDate?: Date;\r\n private _FromAssignedDate?: Date;\r\n private _ToAssignedDate?: Date;\r\n FromPercentage?: number;\r\n ToPercentage?: number;\r\n Course?: string;\r\n Term?: string;\r\n Category?: string;\r\n Grade?: string;\r\n\r\n // Class Functions\r\n constructor() {\r\n }\r\n\r\n isFilterApplied(): boolean {\r\n return (!!this.FromDueDate || !!this.ToDueDate || !!this.FromAssignedDate || !!this.ToAssignedDate || !!this.FromPercentage || !!this.ToPercentage || !!this.Category || !!this.Grade);\r\n }\r\n\r\n get FromDueDate(): Date {\r\n \treturn this._FromDueDate;\r\n\t}\r\n\r\n\tset FromDueDate(value: Date) {\r\n \tSystem.roundDateDown(value);\r\n \tthis._FromDueDate = value;\r\n\t}\r\n\r\n\tget ToDueDate(): Date {\r\n \treturn this._ToDueDate;\r\n\t}\r\n\r\n\tset ToDueDate(value: Date) {\r\n \tSystem.roundDateUp(value);\r\n \tthis._ToDueDate = value;\r\n\t}\r\n\r\n\tget FromAssignedDate(): Date {\r\n \treturn this._FromAssignedDate;\r\n\t}\r\n\r\n\tset FromAssignedDate(value: Date) {\r\n \tSystem.roundDateDown(value);\r\n \tthis._FromAssignedDate = value;\r\n\t}\r\n\r\n\tget ToAssignedDate(): Date {\r\n \treturn this._ToAssignedDate;\r\n\t}\r\n\r\n\tset ToAssignedDate(value: Date) {\r\n \tSystem.roundDateUp(value);\r\n \tthis._ToAssignedDate = value;\r\n\t}\r\n}","
\r\n Filter\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{ course }}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{ gp }}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \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, OnInit, Input, Output, EventEmitter, TemplateRef, ViewChild, OnDestroy, OnChanges } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { AssignmentFilterParam } from '../assignment-filter-param';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { AssignmentService } from '../assignment.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { SchoolYearSettings } from '../../../shared-components/year/school-year-settings.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'assignment-filter',\r\n templateUrl: './assignment-filter.component.html',\r\n styleUrls: ['./assignment-filter.component.css']\r\n})\r\nexport class AssignmentFilterComponent implements OnInit, OnDestroy, OnChanges {\r\n\r\n filterParam: AssignmentFilterParam;\r\n @Output() filterChange = new EventEmitter();\r\n @Output() filterClose = new EventEmitter();\r\n @Input() clearFilterEvent: EventEmitter;\r\n @Input() ShowByClass: boolean;\r\n @Input() schoolYearSettings: SchoolYearSettings;\r\n\r\n @ViewChild('AssignmentFilterTemplate') assignmentFilterTemplate: TemplateRef;\r\n previousFilterParam = new AssignmentFilterParam();\r\n showFilterSubscription: Subscription;\r\n courses: any = [];\r\n courseTerms: any = [];\r\n showPercentage = true;\r\n\r\n constructor(\r\n private assignmentService: AssignmentService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.filterParam = this.assignmentService.filterParam;\r\n\r\n Object.assign(this.previousFilterParam, this.filterParam);\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.schoolYearSettings != null && this.schoolYearSettings.HideS360AssignmentPercentageColumn) {\r\n this.showPercentage = false;\r\n }\r\n else {\r\n this.showPercentage = true;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n filterChangeByModel() {\r\n this.assignmentService.filterParam = this.filterParam;\r\n this.filterChange.emit();\r\n }\r\n\r\n clearFilter() {\r\n this.filterParam = new AssignmentFilterParam();\r\n this.previousFilterParam = new AssignmentFilterParam();\r\n this.filterChangeByModel();\r\n }\r\n\r\n closeFilter() {\r\n this.filterChangeByModel();\r\n this.filterClose.emit();\r\n }\r\n\r\n loadCourseAndTerms() {\r\n this.courses = this.assignmentService.getCoursesFromUPComingAssignments();\r\n this.courseTerms = this.assignmentService.getTermsFromUPComingAssignments();\r\n }\r\n\r\n}\r\n","
\r\n
Standards
\r\n
{{course.Course}} - {{teacherName}}
\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n \r\n Assignment Type (A-Z)\r\n Assignment Type (Z-A)\r\n Date (Newest First)\r\n Date (Oldest First)\r\n \r\n \r\n  \r\n \r\n \r\n All\r\n \r\n {{course.LongDescription}}\r\n \r\n \r\n \r\n
\r\n\r\n
0\" style=\"padding-top: 10px; overflow-x: auto; width: 100%;\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Standards\r\n {{SH.Standard}}
\r\n {{SH.StandardDate|date:'MM/dd/yy'}}\r\n
{{GO.Standard}}\r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { GradeBookStandards, AssignmentsDTO, GradeBookObjectives } from '../assignment.model';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AssignmentService } from '../assignment.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-standards-based-scores',\r\n templateUrl: './standards-based-scores.component.html',\r\n styles: []\r\n})\r\nexport class StandardsBasedScoresComponent implements OnInit {\r\n\r\n siteSectionId: number;\r\n course: CourseSchedule;\r\n teacherName: string;\r\n startDate: Date;\r\n endDate: Date;\r\n termId: number;\r\n gradebookStandard: GradeBookStandards[];\r\n standardsBasedHeader: any = {};\r\n studentAssignments: AssignmentsDTO[] = [];\r\n gradebookObjectives: GradeBookObjectives[] = [];\r\n selectedOrderByOption = 3;\r\n assignmentSortBy = '-StandardDate';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private assignmentService: AssignmentService,\r\n private studentService: StudentService,\r\n private yearService: YearService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.siteSectionId = this.data.siteSectionId;\r\n this.teacherName = this.data.teacherName;\r\n this.course = this.data.course;\r\n this.termId = this.data.termId;\r\n this.startDate = this.data.startDate;\r\n this.endDate = this.data.endDate;\r\n this.studentAssignments = this.data.studentAssignments;\r\n this.getStandardsBasedHeader();\r\n }\r\n\r\n getStandardsBasedHeader() {\r\n this.assignmentService.getStandardsBasedHeader(this.siteSectionId, this.startDate, this.endDate, this.termId).subscribe(data => {\r\n this.gradebookStandard = data;\r\n this.gradebookStandard.sort();\r\n this.getGradebookObjective(this.studentAssignments);\r\n });\r\n }\r\n\r\n getGradebookObjective(studentAssignments: AssignmentsDTO[]) {\r\n this.gradebookObjectives = [];\r\n if (studentAssignments.length > 0) {\r\n studentAssignments.filter(o => o.ShowStandardBasedScore == true).forEach(obj => {\r\n if (obj.GradeBookObjectives != null) {\r\n const gradebookObj = obj.GradeBookObjectives;\r\n gradebookObj.forEach(grd => {\r\n if (this.gradebookObjectives.length == 0) {\r\n this.gradebookObjectives.push(grd);\r\n }\r\n else if (this.gradebookObjectives.filter(o => o.Id == grd.Id).length == 0) {\r\n this.gradebookObjectives.push(grd);\r\n }\r\n if (this.gradebookStandard.filter(o => o.GradeBookAssignmentId == grd.AssignmentId).length == 0) {\r\n this.gradebookStandard = [];\r\n this.standardsBasedHeader = {};\r\n this.standardsBasedHeader.CurriculumCourseObjectiveId = grd.Id;\r\n this.standardsBasedHeader.GradeBookAssignmentId = obj.AssignmentId;\r\n this.standardsBasedHeader.Id = obj.Assignment;\r\n this.standardsBasedHeader.ParentId = -1;\r\n this.standardsBasedHeader.Score = 0;\r\n this.standardsBasedHeader.Standard = obj.AssignmentShortName;\r\n this.standardsBasedHeader.StandardDate = obj.DueDate;\r\n this.gradebookStandard.push(this.standardsBasedHeader);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n this.dialogBox.close();\r\n }\r\n\r\n getCellValues(gradebookObj: GradeBookObjectives, standard: GradeBookStandards) {\r\n let scores = '';\r\n if (this.studentAssignments.filter(o => o.AssignmentId == standard.GradeBookAssignmentId).length > 0) {\r\n const gradebookObjectiveRow = this.studentAssignments.filter(o => o.AssignmentId == standard.GradeBookAssignmentId)[0].GradeBookObjectives;\r\n if (gradebookObjectiveRow != null && gradebookObjectiveRow.filter(x => x.Id == gradebookObj.Id).length > 0) {\r\n const standardsBasedScore = gradebookObjectiveRow.filter(x => x.Id == gradebookObj.Id)[0].StandardsBasedScores;\r\n if (standardsBasedScore != null && standardsBasedScore.filter(a => a.CurriculumCourseObjectiveId == gradebookObj.Id && a.Id == standard.Id).length > 0) {\r\n if (standardsBasedScore.filter(a => a.CurriculumCourseObjectiveId == gradebookObj.Id && a.Id == standard.Id)[0].Score != '-1') {\r\n scores = standardsBasedScore.filter(a => a.CurriculumCourseObjectiveId == gradebookObj.Id && a.Id == standard.Id)[0].Score.toString();\r\n }\r\n }\r\n }\r\n }\r\n\r\n return scores;\r\n }\r\n\r\n selectedTermChange() {\r\n this.studentAssignments = [];\r\n this.gradebookObjectives = [];\r\n if (this.termId == 0) {\r\n this.startDate = this.course.CourseTerms[0].StartDate;\r\n this.endDate = this.course.CourseTerms[this.course.CourseTerms.length - 1].EndDate;\r\n }\r\n else {\r\n this.startDate = this.course.CourseTerms.filter(o => o.Id == this.termId)[0].StartDate;\r\n this.endDate = this.course.CourseTerms.filter(o => o.Id == this.termId)[0].EndDate;\r\n }\r\n this.assignmentService.getStudentAssignments(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, this.siteSectionId, this.startDate, this.endDate, this.termId, this.studentService.studentEnrollment.SiteYearId).subscribe(data => {\r\n this.studentAssignments = data;\r\n data.forEach(obj => {\r\n this.studentAssignments.push(obj);\r\n });\r\n this.getStandardsBasedHeader();\r\n this.getGradebookObjective(this.studentAssignments);\r\n });\r\n }\r\n\r\n selectedOrderByOptionChanged() {\r\n switch (this.selectedOrderByOption) {\r\n case 1:\r\n this.assignmentSortBy = 'Standard';\r\n break;\r\n case 2:\r\n this.assignmentSortBy = '-Standard';\r\n break;\r\n case 3:\r\n this.assignmentSortBy = '-StandardDate';\r\n break;\r\n case 4:\r\n this.assignmentSortBy = 'StandardDate';\r\n break;\r\n default:\r\n this.assignmentSortBy = 'StandardDate';\r\n break;\r\n }\r\n }\r\n}\r\n","import * as moment from 'moment';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { StudentAttachment } from '../../shared-modules/student-attachment/student-attachment.model';\r\nexport class Utility {\r\n\r\n static IsValid(text: any): boolean {\r\n if (text != null) {\r\n if (text.length != null) {\r\n if (text.length > 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n static addDays(daysToAdd: number): Date {\r\n const today = new Date();\r\n today.setDate(today.getDate() + daysToAdd);\r\n return today;\r\n }\r\n\r\n static getAssignmentStatusClass(assignmentStatus: number) {\r\n switch (assignmentStatus) {\r\n case 1: {\r\n return 'assignmentStatusDue';\r\n }\r\n case 3: {\r\n return 'assignmentStatusMissing';\r\n }\r\n default: {\r\n return '';\r\n }\r\n }\r\n }\r\n\r\n static objectiveLevelClass = function (BytLevel) {\r\n switch (BytLevel) {\r\n case 2:\r\n return ('objPaddingLevel2');\r\n case 3:\r\n return ('objPaddingLevel3');\r\n case 4:\r\n return ('objPaddingLevel4');\r\n case 5:\r\n return ('objPaddingLevel5');\r\n case 6:\r\n return ('objPaddingLevel6');\r\n case 7:\r\n return ('objPaddingLevel7');\r\n case 8:\r\n return ('objPaddingLevel8');\r\n case 9:\r\n return ('objPaddingLevel9');\r\n case 10:\r\n return ('objPaddingLevel10');\r\n default:\r\n break;\r\n }\r\n };\r\n static getDateString(value: Date): any {\r\n return moment(value).format('L');\r\n }\r\n\r\n static saveFile(attachment:Attachment) {\r\n if (attachment.DocumentBase64 != null && attachment.DocumentBase64.length > 0) {\r\n System.saveFile(attachment.DocumentBase64, attachment.DocumentMimeType, attachment.DocumentName);\r\n }\r\n else if ((attachment.Id != null && attachment.Id > 0) || (attachment.AttachmentId != null && attachment.AttachmentId > 0)) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: (attachment.Id != null && attachment.Id > 0) ? attachment.Id : attachment.AttachmentId,\r\n DocumentName: attachment.FileName,\r\n DocumentBase64: attachment.DocumentBase64,\r\n DocumentMimeType: attachment.DocumentMimeType,\r\n DocumentModuleName: 'Assignment',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n \r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n }\r\n }\r\n}","
\r\n No assignments exist for this student\r\n
\r\n
0\"\r\n style=\"margin-top:15px;min-width: 1375px;\">\r\n
\r\n \r\n \r\n \r\n {{ course.Course }}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{ (gp.OverrideGradingTerm != null && gp.OverrideGradingTerm != '') ? gp.OverrideGradingTerm :\r\n gp.LongDescription }}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
IDTeacherGrade\r\n SchoolCourse-Section     
{{courseInfo?.AssignmentId}}{{courseInfo?.TeacherName}}\r\n {{courseInfo?.GradeParentGrid}}\r\n {{courseInfo?.SiteName}}{{courseInfo?.Course}}\r\n Email Teacher\r\n \r\n Standards\r\n Based Scores\r\n \r\n Class Information\r\n \r\n Teacher Profile\r\n \r\n Course Description\r\n
\r\n
\r\n
\r\n No assignments exist for the selected class and term.\r\n
\r\n
\r\n 0\" [dataSource]=\"angularMatData\" multiTemplateDataRows\r\n matSortDisableClear #sort=\"matSort\" matSort id=\"StudentAssignmentDataTable\" matSortActive=\"DueDate\"\r\n matSortDirection=\"desc\" aria-label=\"Student Assignment Table\" tabindex=\"0\">\r\n\r\n ]\r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n ]\r\n \r\n \r\n
\r\n {{getAssignmentStatus(SA.AssignmentStatus, SA.DueDate)}}\r\n
\r\n
\r\n
\r\n ]\r\n \r\n Due\r\n \r\n \r\n \r\n {{SA.DueDate | date:'MM/dd/yy'}}\r\n \r\n \r\n ]\r\n \r\n \r\n {{SA.AssignedDate | date:'E'}}\r\n \r\n \r\n ]\r\n \r\n Assigned\r\n \r\n \r\n \r\n \r\n {{SA.AssignedDate | date:'MM/dd/yy'}}\r\n \r\n \r\n ]\r\n Assignment\r\n \r\n \r\n \r\n \r\n
{{SA.Assignment}}\r\n
\r\n
\r\n
\r\n\r\n \r\n ]\r\n Unit\r\n \r\n \r\n \r\n \r\n
{{SA.GradeBookUnit}}\r\n
\r\n
\r\n
\r\n\r\n ]\r\n \r\n \r\n Category-ID\r\n \r\n \r\n Category\r\n \r\n \r\n \r\n \r\n {{SA.Category}}\r\n \r\n \r\n ]\r\n \r\n Points
Possible
\r\n \r\n \r\n
\r\n \r\n \r\n {{SA.Possible}}\r\n \r\n \r\n
\r\n ]\r\n \r\n Points
Earned
\r\n \r\n \r\n
\r\n \r\n \r\n {{SA.Earned}}\r\n \r\n \r\n
\r\n ]\r\n \r\n Percentage\r\n \r\n \r\n \r\n \r\n \r\n {{SA.Percentage}}\r\n \r\n \r\n \r\n ]\r\n \r\n Special Mark\r\n \r\n \r\n \r\n \r\n {{SA.SpecialMark}}\r\n \r\n \r\n ]\r\n \r\n Effective
Score
\r\n \r\n \r\n
\r\n \r\n {{SA.Effective}}\r\n \r\n
\r\n ]\r\n \r\n Grade\r\n \r\n \r\n {{SA.Grade}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n 0\">\r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Average Score{{SA.AverageScore}}\r\n Highest Score{{SA.HighestScore}}\r\n
Comments
\r\n \r\n
Summary
{{SA.Summary}}
Details
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
IDStandardsScore
{{GO.Standard}}\r\n
\r\n {{ getSBSScore(SBS)}}\r\n
\r\n
\r\n
\r\n
Attachments
\r\n {{attachment.DocumentName}}\r\n {{attachment.DocumentType}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
","import { formatDate } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { forkJoin, Subscription } from 'rxjs';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { CourseDescriptionDialogComponent } from '../../../shared-components/course-description-dialog/course-description-dialog.component';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { ProfileViewerDialogComponent } from '../../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { SchoolYearSettings } from '../../../shared-components/year/school-year-settings.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/loginSetting.model';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { Student360Service } from '../../student360.service';\r\nimport { AssignmentFilterParam } from '../assignment-filter-param';\r\nimport { AssignmentFilterPipe } from '../assignment-filter.pipe';\r\nimport { AssignmentsDTO } from '../assignment.model';\r\nimport { AssignmentService } from '../assignment.service';\r\nimport { StandardsBasedScoresComponent } from '../standards-based-scores/standards-based-scores.component';\r\nimport { Utility } from '../Utility';\r\n\r\n@Component({\r\n selector: 'by-course',\r\n templateUrl: './by-course.component.html',\r\n styleUrls: ['./by-course.component.css'],\r\n animations: [detailExpand],\r\n})\r\nexport class ByCourseComponent implements OnInit, OnDestroy {\r\n\r\n student360YearSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n studentSchedules: CourseSchedule[];\r\n studentAssignments: AssignmentsDTO[] = [];\r\n studentAttachments: Attachment[] = [];\r\n courseInfo: AssignmentsDTO;\r\n subscriptions: Subscription[] = [];\r\n loginSettings: LoginSettings;\r\n selectedViewOption = 3; // This Term\r\n selectedCourse: CourseSchedule;\r\n selectedGP: any = { Id: -1 };\r\n showStandardBasedScore = false;\r\n schoolYearSettings: SchoolYearSettings;\r\n local_filterParam = new AssignmentFilterParam();\r\n gradeDisplayType = '';\r\n constructing = true;\r\n canSendEmail = true;\r\n showCategoryWeights: boolean;\r\n\r\n public utilityClass = Utility;\r\n\r\n @Input() shown: boolean;\r\n @Output() schoolYearSettingsChange = new EventEmitter();\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay: string[] = [];\r\n v9Columns: string[] = [];\r\n @Input() clearFilterEvent: EventEmitter;\r\n\r\n // ------------Element references--------------------------------\r\n @ViewChild('divControls') divControls: ElementRef;\r\n @ViewChild('divCourseInfo') divCourseInfo: ElementRef;\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private assignmentService: AssignmentService,\r\n private userService: UserService,\r\n private dialog: MatDialog,\r\n private assignmentFilterPipe: AssignmentFilterPipe,\r\n private router: Router,\r\n private sendEmailService: SendEmailService\r\n\r\n ) {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.columnsToDisplay = ['More', 'DueDateDay', 'DueDate', 'AssignedDateDay', 'AssignedDate', 'Assignment', 'GradeBookUnit', 'Category', 'Possible', 'EarnedPoints', 'Percentage', 'SpecialMark', 'Effective', 'Grade'];\r\n\r\n this.canSendEmail = (this.userService.userType == 2 || this.userService.userType === 3) ? this.loginSettings.AllowParentStudentEmail : true;\r\n\r\n this.subscriptions.push(studentService.selectedStudentStream$.subscribe(studentId => {\r\n this.init();\r\n }));\r\n\r\n this.subscriptions.push(yearService.observableStudent360YearStream$.subscribe(student360Year => {\r\n this.init();\r\n }));\r\n\r\n this.subscriptions.push(this.assignmentService.filterChange.subscribe(() => {\r\n if (this.assignmentService.ShowByClass) {\r\n this.applyFilter();\r\n }\r\n }));\r\n\r\n if (this.userService.userType == 1) {\r\n this.subscriptions.push(this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(this.student360Service.observableParentAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.assignmentService.studentAssignmentsUPMG = [];\r\n this.getSchoolYearSettings(false);\r\n if (this.clearFilterEvent) {\r\n this.subscriptions.push(\r\n this.clearFilterEvent.subscribe(() => {\r\n if (this.shown) {\r\n this.angularMatData.removeAllFilters();\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n\r\n this.assignmentService.filterbyCard = false;\r\n }\r\n\r\n loadFilterParam() {\r\n this.assignmentService.filterParam = this.local_filterParam;\r\n }\r\n\r\n course_change() {\r\n // if (this.assignmentService.selectedGP == null) {\r\n // this.assignmentService.selectedCourse = this.selectedCourse;\r\n // }\r\n // this.assignmentService.selectedSectionId = this.selectedCourse.SiteSectionId;\r\n // this.assignmentService.studentAssignmentsUPMG = [];\r\n if (this.selectedCourse.CourseTerms.length > 0) {\r\n const schoolYearSettings: SchoolYearSettings = this.schoolYearSettings;\r\n const term = this.selectedCourse;\r\n let CourseTerms = [];\r\n CourseTerms = term.CourseTerms.filter(function (element) {\r\n return ((schoolYearSettings.UsingFinalGrade && element.ShortDescription.indexOf('Y') > -1)\r\n || (schoolYearSettings.UsingSemesterGrades && element.ShortDescription.indexOf('S') > -1)\r\n || (schoolYearSettings.UsingTermGrades && element.ShortDescription.indexOf('T') > -1)\r\n || (schoolYearSettings.UsingProgressGrades && element.ShortDescription.indexOf('P') > -1));\r\n });\r\n this.selectedCourse.CourseTerms = Object.assign(CourseTerms);\r\n }\r\n this.selectTermByDates();\r\n this.gradingPeriod_Change();\r\n }\r\n\r\n gradingPeriod_Change() {\r\n // console.log(JSON.stringify(this.selectedGP_ID));\r\n if (this.selectedGP == -1) {\r\n this.courseInfo = null;\r\n this.angularMatData.data = [];\r\n this.studentAssignments = [];\r\n this.studentAttachments = [];\r\n }\r\n else if (this.selectedCourse != null) {\r\n this.angularMatData.data = [];\r\n setTimeout(() => {\r\n return forkJoin([this.assignmentService.getStudentAssignments(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedCourse.SiteSectionId,\r\n this.selectedGP.StartDate,\r\n this.selectedGP.EndDate,\r\n this.selectedGP.Id,\r\n this.studentService.studentEnrollment.SiteYearId\r\n ),\r\n this.assignmentService.getStudentAttachment(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedCourse.SiteSectionId,\r\n this.selectedGP.StartDate,\r\n this.selectedGP.EndDate,\r\n this.selectedGP.Id,\r\n this.studentService.studentEnrollment.SiteYearId\r\n )]).subscribe(results => {\r\n if (results[0].length > 0) {\r\n this.showStandardBasedScore = results[0].findIndex(x => x.ShowStandardBasedScore === true) >= 0;\r\n this.courseInfo = results[0].filter(x => x.SystemGrade == true)[0];\r\n this.showCategoryWeights = this.courseInfo.ShowCategoryWeights;\r\n this.studentAssignments = results[0].filter(x => x.ShowOnPortal === true && x.SystemGrade === false);\r\n this.studentAssignments.forEach(obj => {\r\n obj.EarnedV9 = obj.Earned;\r\n obj.EffectiveScoreV9 = obj.Effective;\r\n obj.PercentageV9 = obj.Percentage;\r\n if (this.utilityClass.IsValid(obj.Grade)) {\r\n if (obj.Earned == 0) {\r\n obj.EarnedV9 = -1;\r\n }\r\n if (obj.Percentage == 0) {\r\n obj.PercentageV9 = -1;\r\n }\r\n if (obj.Effective == 0) {\r\n obj.EffectiveScoreV9 = -1;\r\n }\r\n } else {\r\n if (obj.Earned == 0 && !this.utilityClass.IsValid(obj.Grade)) {\r\n obj.EarnedV9 = -2;\r\n }\r\n if (obj.Effective == 0 && !this.utilityClass.IsValid(obj.Grade)) {\r\n obj.EffectiveScoreV9 = -2;\r\n }\r\n if (obj.Percentage == 0 && !this.utilityClass.IsValid(obj.Grade)) {\r\n obj.PercentageV9 = -2;\r\n }\r\n }\r\n });\r\n this.applyFilter();\r\n this.angularMatData.sortingDataAccessor = (item: AssignmentsDTO, property: string) => {\r\n if (property == 'Assignment') {\r\n return item.Assignment ? item.Assignment.toLowerCase() : '';\r\n }\r\n if (property == 'EarnedPoints') {\r\n return item.EarnedV9;\r\n } else if (property == 'Percentage') {\r\n return item.PercentageV9;\r\n } else if (property == 'Effective') {\r\n return item.EffectiveScoreV9;\r\n }\r\n else {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n setTimeout(() => this.angularMatData.sort = this.sort, 0);\r\n }\r\n this.studentAttachments = results[1];\r\n });\r\n }, 700);\r\n }\r\n }\r\n\r\n init() {\r\n this.angularMatData.data = [];\r\n this.courseInfo = null;\r\n this.studentAssignments = [];\r\n this.studentAttachments = [];\r\n if (!this.constructing) {\t\t// We only need to reset the variables after initial construction\r\n this.selectedCourse = null;\r\n this.selectedGP = { Id: -1 };\r\n this.assignmentService.selectedCourse = null;\r\n this.local_filterParam = new AssignmentFilterParam();\r\n } else {\r\n this.constructing = false;\r\n }\r\n if (this.assignmentService.selectedView != undefined) {\r\n this.selectedViewOption = this.assignmentService.selectedView;\r\n }\r\n\r\n this.loadStudentSchedules();\r\n this.getSchoolYearSettings(true);\r\n }\r\n\r\n loadStudentSchedules() {\r\n this.studentService.getStudentSchedule(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedViewOption, undefined, undefined, undefined, undefined, undefined, undefined\r\n ).subscribe(data => {\r\n this.studentSchedules = data.filter(x => x.UsedForGrading === true);\r\n this.selectedCourse = this.studentSchedules.find(studentSchedule => (studentSchedule.SubjectCode + '-' + studentSchedule.Section) == this.assignmentService.selectedCourseSection);\r\n\r\n // **************** ONE-12288 *******************\r\n if (this.assignmentService.selectedGP != null) {\r\n if (this.assignmentService.filterbyCard == true && this.selectedCourse.CourseTerms != null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms.filter(o => o.LongDescription == this.assignmentService.selectedGP)[0];\r\n }\r\n else {\r\n if (this.selectedCourse.CourseTerms != null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms.filter(o => o.ShortDescription == this.assignmentService.selectedGP)[0];\r\n }\r\n }\r\n if (this.selectedGP == null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n else if (this.assignmentService.selectedGP == undefined && this.assignmentService.selectedSectionId != undefined && this.assignmentService.filterbyCard == false) {\r\n this.selectTermByDates();\r\n }\r\n setTimeout(() => {\r\n this.gradingPeriod_Change();\r\n }, 500);\r\n\r\n // **************** ONE-12288 ************************\r\n\r\n if (this.selectedCourse) {\t// We do this to ensure the references for the HTML selector are the sames\r\n\r\n if (this.assignmentService.filterbyCard == true) {\r\n this.selectedCourse = this.studentSchedules.find(studentSchedule => (studentSchedule.SubjectCode + '-' + studentSchedule.Section) == this.assignmentService.selectedCourseSection);\r\n }\r\n else {\r\n if (this.selectedCourse.SiteSectionId > 0) {\r\n this.selectedCourse = this.studentSchedules.find(studentSchedule => studentSchedule.SiteSectionId == this.selectedCourse.SiteSectionId);\r\n if (this.selectedCourse != null) {\r\n if (this.selectedCourse.CourseTerms.length > 0) {\r\n const schoolYearSettings: SchoolYearSettings = this.schoolYearSettings;\r\n const term = this.selectedCourse;\r\n let CourseTerms = [];\r\n CourseTerms = term.CourseTerms.filter(function (element) {\r\n return ((schoolYearSettings.UsingFinalGrade && element.ShortDescription.indexOf('Y') > -1)\r\n || (schoolYearSettings.UsingSemesterGrades && element.ShortDescription.indexOf('S') > -1)\r\n || (schoolYearSettings.UsingTermGrades && element.ShortDescription.indexOf('T') > -1)\r\n || (schoolYearSettings.UsingProgressGrades && element.ShortDescription.indexOf('P') > -1));\r\n });\r\n this.selectedCourse.CourseTerms = Object.assign(CourseTerms);\r\n }\r\n }\r\n }\r\n else {\r\n this.selectedCourse = this.studentSchedules.find(studentSchedule => studentSchedule.Course == this.selectedCourse.Course);\r\n }\r\n }\r\n\r\n if (this.assignmentService.selectedGP != null) {\r\n if (this.assignmentService.filterbyCard == true && this.selectedCourse.CourseTerms != null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms.filter(o => o.LongDescription == this.assignmentService.selectedGP)[0];\r\n }\r\n else {\r\n if (this.selectedCourse.CourseTerms != null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms.filter(o => o.ShortDescription == this.assignmentService.selectedGP)[0];\r\n }\r\n }\r\n if (this.selectedGP == null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n else if (this.assignmentService.selectedGP == undefined && this.assignmentService.selectedSectionId != undefined && this.assignmentService.filterbyCard == false) {\r\n this.selectTermByDates();\r\n }\r\n this.assignmentService.selectedGP = null;\r\n if (this.assignmentService.filterbyCard == true) { this.course_change(); }\r\n }\r\n if (this.loginSettings.ParentPortalAssignmentsDisplayProfiles) {\r\n this.studentSchedules.forEach(s => s.Course = s.Course + '-' + s.Section);\r\n }\r\n else {\r\n this.studentSchedules.forEach(s => s.Course = s.Course + ' - ' + (s.Term === 'Year' ? 'Yr' : s.Term));\r\n }\r\n });\r\n this.assignmentService.selectedView = undefined;\r\n }\r\n\r\n getStudentAssignments(): void {\r\n this.angularMatData.data = [];\r\n\r\n setTimeout(() => {\r\n this.assignmentService.getStudentAssignments(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedCourse.SiteSectionId,\r\n this.selectedGP.StartDate,\r\n this.selectedGP.EndDate,\r\n this.selectedGP.Id,\r\n this.studentService.studentEnrollment.SiteYearId\r\n ).subscribe(data => {\r\n if (data.length > 0) {\r\n this.showStandardBasedScore = data.findIndex(x => x.ShowStandardBasedScore === true) >= 0;\r\n this.courseInfo = data.filter(x => x.SystemGrade == true)[0];\r\n this.studentAssignments = data.filter(x => x.ShowOnPortal === true && x.SystemGrade === false);\r\n this.studentAssignments.forEach(x => {\r\n if (this.utilityClass.IsValid(x.Comment)) {\r\n x.Comment = x.Comment.replace('\\n', '
');\r\n }\r\n });\r\n this.applyFilter();\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n }\r\n });\r\n }, 0);\r\n }\r\n\r\n getStudentAttachments(): void {\r\n setTimeout(() => {\r\n this.assignmentService.getStudentAttachment(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedCourse.SiteSectionId,\r\n this.selectedGP.StartDate,\r\n this.selectedGP.EndDate,\r\n this.selectedGP.Id,\r\n this.studentService.studentEnrollment.SiteYearId\r\n ).subscribe(data => this.studentAttachments = data);\r\n }, 0);\r\n }\r\n\r\n applyFilter() {\r\n if (this.assignmentService.filterParam) {\r\n this.local_filterParam = Object.assign(new AssignmentFilterParam(), this.assignmentService.filterParam);\r\n this.angularMatData.data = this.assignmentFilterPipe.transform(this.studentAssignments, this.assignmentService.filterParam);\r\n }\r\n else {\r\n this.angularMatData.data = this.studentAssignments;\r\n }\r\n\r\n setTimeout(() => this.angularMatData.sort = this.sort, 100);\r\n }\r\n\r\n // ------------Assignment Grid Methods ---------------------------\r\n selectTermByDates() {\r\n const currDate = new Date();\r\n if (this.selectedCourse != null && (!this.selectedGP || this.selectedGP.Id == -1)) {\r\n const filteredTerms = this.selectedCourse.CourseTerms.filter(x => currDate <= new Date(x.EndDate) && currDate >= new Date(x.StartDate));\r\n if (filteredTerms.length > 0) {\r\n const sortedTerms = _.orderBy(filteredTerms, ['EndDate', 'TermTypeId'], ['asc', 'desc']);\r\n this.selectedGP = sortedTerms[0];\r\n\r\n if (!this.selectedGP && this.selectedCourse.CourseTerms.length > 0) {\r\n const lastIndex = this.selectedCourse.CourseTerms.length - 1;\r\n\r\n if (currDate > new Date(this.selectedCourse.CourseTerms[lastIndex].EndDate)) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[lastIndex];\r\n }\r\n else {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n }\r\n else { // term is preselected\r\n if (this.selectedCourse.CourseTerms) {\r\n let index = this.selectedCourse.CourseTerms.findIndex(x => x.MediumDescription === this.selectedGP.MediumDescription);\r\n if (index >= 0) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[index];\r\n }\r\n else {\r\n index = this.selectedCourse.CourseTerms.length - 1;\r\n if (currDate > new Date(this.selectedCourse.CourseTerms[index].EndDate)) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[index];\r\n }\r\n else {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (this.selectedCourse != null) { // term is preselected\r\n if (this.selectedCourse.CourseTerms) {\r\n let index = this.selectedCourse.CourseTerms.findIndex(x => x.MediumDescription === this.selectedGP.MediumDescription);\r\n if (index >= 0) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[index];\r\n }\r\n else {\r\n index = this.selectedCourse.CourseTerms.length - 1;\r\n if (currDate > new Date(this.selectedCourse.CourseTerms[index].EndDate)) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[index];\r\n }\r\n else {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n showToggleIcon(row: AssignmentsDTO): boolean {\r\n let toggle = true;\r\n\r\n toggle = this.canSendEmail || (!!row.Comment) || (!!row.Summary) || (!!row.AttachmentDetail) || this.isAttachmentExists(row.AssignmentId) || (row.GradeBookObjectives ? row.GradeBookObjectives.length : 0) > 0;\r\n\r\n return toggle;\r\n }\r\n\r\n isAttachmentExists(assignmentId: number): boolean {\r\n return this.studentAttachments.findIndex(x => x.AssignmentId === assignmentId) >= 0;\r\n }\r\n\r\n getStudentAttachmentByAssignmentId(assignmentId: number): Attachment[] {\r\n return this.studentAttachments.filter(x => x.AssignmentId === assignmentId);\r\n }\r\n\r\n getSBSScore(sbs: any) {\r\n return (sbs.Score == -1 ? '' : sbs.Score);\r\n }\r\n\r\n getAssignmentStatus(status: number, dueDate: Date) {\r\n switch (status) {\r\n case 1:\r\n return 'Today ';\r\n case 3:\r\n return 'Missing ';\r\n case 5:\r\n return 'Tomorrow ';\r\n default:\r\n return formatDate(dueDate, 'E', 'en-us');\r\n }\r\n }\r\n\r\n // --------- Toggle Row ----------------------------\r\n\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n // ------------ Popups --------------------------------\r\n\r\n courseDescription_click() {\r\n // PRE: the user clicks on a course description link under a course\r\n // POST: shows a modal for the course's description\r\n this.dialog.open(CourseDescriptionDialogComponent, {\r\n data: {\r\n course: this.selectedCourse.Course,\r\n courseSection: this.selectedCourse.SubjectCode + '-' + this.selectedCourse.Section,\r\n teacherName: this.selectedCourse.TeacherName,\r\n schoolName: this.selectedCourse.SchoolName,\r\n curriculum: this.selectedCourse.Curriculum,\r\n dDescription: this.selectedCourse.Description\r\n }\r\n });\r\n }\r\n\r\n classInformation_click() {\r\n // PRE: the user clicks on a class information link under a course\r\n // POST: shows a modal for that class' profile\r\n const dialogBox = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n courseSSEC_ID: this.selectedCourse.SiteSectionId,\r\n courseName: this.selectedCourse.Course,\r\n courseSection: this.selectedCourse.SubjectCode + '-' + this.selectedCourse.Section,\r\n teacherId: this.selectedCourse.TeacherMemId,\r\n teacherName: this.selectedCourse.TeacherName,\r\n school: this.selectedCourse.SchoolName,\r\n profiles: this.selectedCourse.CourseProfile,\r\n showTeacherProfileLink: this.selectedCourse.HasTeacherProfile\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.componentInstance.teacherProfileClick.subscribe(() => {\r\n this.teacherProfile_click();\r\n })\r\n );\r\n }\r\n\r\n teacherProfile_click() {\r\n // PRE: the user clicks on a teacher profile link under a couse\r\n // POST: shows a modal for that teacher's profile\r\n this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: this.selectedCourse.TeacherMemId,\r\n profiles: this.selectedCourse.TeacherProfile,\r\n teacherName: this.selectedCourse.TeacherName,\r\n school: this.selectedCourse.SchoolName\r\n }\r\n });\r\n }\r\n\r\n ShowStandardBasedScore(teacherName) {\r\n const dialogBox = this.dialog.open(StandardsBasedScoresComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '80vw',\r\n height: '85vh',\r\n disableClose: true,\r\n data: {\r\n teacherName: teacherName,\r\n course: this.selectedCourse,\r\n siteSectionId: this.selectedCourse.SiteSectionId,\r\n startDate: this.selectedGP.StartDate,\r\n endDate: this.selectedGP.EndDate,\r\n termId: this.selectedGP.Id,\r\n studentAssignments: this.studentAssignments\r\n },\r\n });\r\n }\r\n\r\n sendEmail() {\r\n this.sendEmailService.teacherName = this.courseInfo.TeacherName;\r\n this.sendEmailService.teacherEmailAddress = this.courseInfo.TeacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getAriaRow(row: AssignmentsDTO): string {\r\n const colList: string[] = ['Due Date', 'Assigned Date', 'Assignment', 'Category', 'Possible Points', 'Earned Points', 'Percentage', 'Grade'];\r\n\r\n const dataList: string[] = [\r\n moment(row.DueDate).format('MM/dd/yy'),\r\n moment(row.AssignedDate).format('MM/dd/yy'),\r\n row.AssignmentShortName,\r\n row.Category,\r\n row.Possible.toString(),\r\n row.EarnedValue != null ? row.EarnedValue : '',\r\n row.PercentageValue != null ? row.PercentageValue : '',\r\n row.Grade\r\n ];\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n getSchoolYearSettings(fromInitMethod: boolean) {\r\n this.yearService.getSchoolYearSettings(this.yearService.defaultYear.Id, this.studentService.studentEnrollment.SchoolId).subscribe(data => {\r\n this.schoolYearSettings = data;\r\n this.schoolYearSettingsChange.emit(this.schoolYearSettings);\r\n\r\n if (!fromInitMethod) {\r\n if (this.assignmentService.selectedCourse != null && this.assignmentService.selectedCourse != undefined) {\r\n this.selectedCourse = _.cloneDeep(this.assignmentService.selectedCourse);\r\n if (this.assignmentService.filterbyCard == true) {\r\n this.loadStudentSchedules();\r\n }\r\n this.assignmentService.selectedCourse = null;\r\n if (this.assignmentService.filterbyCard == false) {\r\n if (this.studentSchedules && this.studentSchedules.length > 0) {\t// We do this to ensure the references for the HTML selector are the same\r\n this.selectedCourse = this.studentSchedules.find(studentSchedule => studentSchedule.Id == this.selectedCourse.Id);\r\n }\r\n if (this.assignmentService.selectedGP != null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms.filter(o => o.ShortDescription == this.assignmentService.selectedGP)[0];\r\n if (this.selectedGP == null) {\r\n this.selectedGP = this.selectedCourse.CourseTerms[0];\r\n }\r\n }\r\n this.course_change();\r\n }\r\n }\r\n }\r\n\r\n this.columnsToDisplay = ['More', 'DueDateDay', 'DueDate', 'AssignedDateDay', 'AssignedDate', 'Assignment', 'GradeBookUnit', 'Category', 'Possible', 'EarnedPoints', 'Percentage', 'SpecialMark', 'Effective', 'Grade'];\r\n if (this.schoolYearSettings.HideS360AssignmentPercentageColumn) {\r\n this.columnsToDisplay = this.columnsToDisplay.filter(o => o != 'Percentage');\r\n }\r\n if (this.schoolYearSettings.HideS360AssignmentEffectiveScoreColumn) {\r\n this.columnsToDisplay = this.columnsToDisplay.filter(o => o != 'Effective');\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n No upcoming/missing assignments exist for this student\r\n
\r\n
0\"\r\n style=\"overflow:auto;flex-grow:1;min-width: 1220px;\">\r\n \r\n ]\r\n More\r\n \r\n \r\n \r\n \r\n \r\n ]\r\n \r\n Course Name\r\n \r\n \r\n {{SA.Course}}\r\n \r\n ]\r\n \r\n Term\r\n \r\n \r\n \r\n {{SA.OverrideGradingTerm != null?\r\n SA.OverrideGradingTerm:SA.Term}}\r\n \r\n \r\n ]\r\n \r\n \r\n \r\n
\r\n {{getAssignmentStatus(SA.AssignmentStatus, SA.DueDate)}}\r\n
\r\n
\r\n
\r\n ]\r\n \r\n Due\r\n \r\n \r\n \r\n {{SA.DueDate | date:'MM/dd/yy'}}\r\n \r\n \r\n ]\r\n \r\n \r\n {{SA.AssignedDate | date:'E'}}\r\n \r\n \r\n ]\r\n \r\n Assigned\r\n \r\n \r\n \r\n {{SA.AssignedDate | date:'MM/dd/yy'}}\r\n \r\n \r\n ]\r\n Assignment\r\n \r\n \r\n \r\n
{{SA.Assignment}}\r\n
\r\n
\r\n
\r\n ]\r\n Unit\r\n \r\n \r\n \r\n \r\n
{{SA.GradeBookUnit}}\r\n
\r\n
\r\n
\r\n ]\r\n \r\n Category-ID\r\n Category\r\n \r\n \r\n \r\n {{SA.Category}}\r\n \r\n \r\n ]\r\n Points Possible\r\n \r\n \r\n \r\n \r\n {{SA.Possible}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n 0\">\r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Email\r\n Teacher\r\n \r\n Class Information\r\n \r\n Teacher Profile\r\n
Comments
\r\n \r\n \r\n
Summary
{{SA.Summary}}
Details
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
IDStandardsScore
{{GO.Standard}}\r\n
\r\n {{ getSBSScore(SBS)}}\r\n
\r\n
\r\n
\r\n
Attachments
\r\n {{attachment.DocumentName}}\r\n {{attachment.DocumentType}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
","import { formatDate } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { ProfileViewerDialogComponent } from '../../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/loginSetting.model';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { Student360Service } from '../../student360.service';\r\nimport { AssignmentFilterParam } from '../assignment-filter-param';\r\nimport { AssignmentFilterPipe } from '../assignment-filter.pipe';\r\nimport { AssignmentsDTO } from '../assignment.model';\r\nimport { AssignmentService } from '../assignment.service';\r\nimport { Utility } from '../Utility';\r\n\r\n@Component({\r\n selector: 'upcoming-missing',\r\n templateUrl: './upcoming-missing.component.html',\r\n styleUrls: ['./upcoming-missing.component.css'],\r\n animations: [detailExpand],\r\n})\r\nexport class UpcomingMissingComponent implements OnInit, OnDestroy {\r\n\r\n local_filterParam = new AssignmentFilterParam();\r\n\r\n @Input() shown: boolean;\r\n @Output() missingRetrieved = new EventEmitter();\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData: TylerMatTableDataSource;\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n if (this.angularMatData) {\r\n this.angularMatData.sort = value; {\r\n this.angularMatData.sortingDataAccessor = (item: AssignmentsDTO, property: string) => {\r\n if (property == 'Assignment') {\r\n return item.Assignment.toLowerCase();\r\n }\r\n else {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n }\r\n }\r\n }\r\n columnsToDisplay: string[] = ['More', 'Course', 'Term', 'DueDateDay', 'DueDate', 'AssignedDateDay', 'AssignedDate', 'Assignment', 'GradeBookUnit', 'Category', 'Possible'];\r\n canSendEmail = true;\r\n public utilityClass = Utility;\r\n @Input() clearFilterEvent: EventEmitter;\r\n\r\n subscriptions: Subscription[] = [];\r\n loginSettings: LoginSettings;\r\n studentAttachments: Attachment[] = [];\r\n studentLoaded = false;\r\n selectedViewOption = 3; // This Term\r\n studentSchedules: CourseSchedule[];\r\n selectedCourse: CourseSchedule;\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private assignmentService: AssignmentService,\r\n private assignmentFilterPipe: AssignmentFilterPipe,\r\n private router: Router,\r\n private sendEmailService: SendEmailService,\r\n private dialog: MatDialog\r\n ) {\r\n\r\n this.loginSettings = this.loginService.LoginSettings;\r\n\r\n if (!this.loginSettings.ParentPortalAssignmentsShowEffectiveScore) {\r\n this.columnsToDisplay = this.columnsToDisplay.filter(x => x !== 'EffectiveScores');\r\n }\r\n this.canSendEmail = (this.userService.userType == 2 || this.userService.userType === 3) ? this.loginSettings.AllowParentStudentEmail : true;\r\n\r\n this.subscriptions.push(studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.assignmentService.studentAssignmentsUPMG = [];\r\n this.loadStudentSchedules();\r\n }));\r\n\r\n this.subscriptions.push(yearService.observableStudent360YearStream$.subscribe(\r\n student360Year => {\r\n this.loadStudentSchedules();\r\n }));\r\n\r\n this.subscriptions.push(this.assignmentService.filterChange.subscribe(() => {\r\n if (!this.assignmentService.ShowByClass) {\r\n this.applyFilter();\r\n }\r\n }));\r\n\r\n if (this.userService.userType == 1) {\r\n this.subscriptions.push(this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(this.student360Service.observableParentAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (this.clearFilterEvent) {\r\n this.subscriptions.push(\r\n this.clearFilterEvent.subscribe(() => {\r\n if (this.shown) {\r\n this.angularMatData.removeAllFilters();\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n\r\n refresh() {\r\n this.local_filterParam.FromDueDate = this.utilityClass.addDays(-30);\r\n this.local_filterParam.ToDueDate = this.utilityClass.addDays(30);\r\n\r\n if (!this.assignmentService.studentAssignmentsUPMG || this.assignmentService.studentAssignmentsUPMG.length === 0) {\r\n this.getStudentAssignmentUPMG();\r\n this.getStudentAttachments();\r\n }\r\n\r\n }\r\n\r\n loadFilterParam() {\r\n this.assignmentService.filterParam = this.local_filterParam;\r\n this.applyFilter();\r\n }\r\n\r\n getStudentAssignmentUPMG(): void {\r\n setTimeout(() => {\r\n this.assignmentService.getStudentAssignments(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.assignmentService.selectedSectionId,\r\n Utility.getDateString(this.local_filterParam.FromDueDate),\r\n Utility.getDateString(this.local_filterParam.ToDueDate),\r\n -1,\r\n this.studentService.studentEnrollment.SiteYearId\r\n ).subscribe(data => {\r\n this.angularMatData = new TylerMatTableDataSource();\r\n this.angularMatData.data = [];\r\n if (data.length > 0) {\r\n this.assignmentService.studentAssignmentsUPMG = data.filter(x => x.ShowOnPortal === true && x.SystemGrade === false);\r\n this.angularMatData.data = this.assignmentFilterPipe.transform(this.assignmentService.studentAssignmentsUPMG, this.local_filterParam);\r\n if (this.angularMatData.data.length > 0 && !this.studentLoaded && !this.assignmentService.preventTabSwitch) {\r\n this.missingRetrieved.emit();\r\n this.studentLoaded = true;\r\n }\r\n else {\r\n this.assignmentService.preventTabSwitch = undefined;\r\n }\r\n }\r\n });\r\n }, 0);\r\n }\r\n\r\n getStudentAttachments(): void {\r\n setTimeout(() => {\r\n this.assignmentService.getStudentAttachment(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.assignmentService.selectedSectionId,\r\n Utility.getDateString(this.local_filterParam.FromDueDate),\r\n Utility.getDateString(this.local_filterParam.ToDueDate),\r\n -1,\r\n this.studentService.studentEnrollment.SiteYearId\r\n ).subscribe(data => setTimeout(() => this.studentAttachments = data, 0));\r\n }, 0);\r\n }\r\n\r\n applyFilter() {\r\n if (this.assignmentService.filterParam) {\r\n Object.assign(this.local_filterParam, this.assignmentService.filterParam);\r\n this.angularMatData.data = this.assignmentFilterPipe.transform(this.assignmentService.studentAssignmentsUPMG, this.assignmentService.filterParam);\r\n }\r\n else {\r\n this.angularMatData.data = this.assignmentService.studentAssignmentsUPMG;\r\n }\r\n }\r\n\r\n showToggleIcon(row: AssignmentsDTO): boolean {\r\n let toggle = true;\r\n toggle = this.canSendEmail || (!!row.Comment) || (!!row.Summary) || (!!row.AttachmentDetail) || this.isAttachmentExists(row.AssignmentId) || (row.GradeBookObjectives ? row.GradeBookObjectives.length : 0) >= 0;\r\n\r\n return toggle;\r\n }\r\n\r\n isAttachmentExists(assignmentId: number): boolean {\r\n return this.studentAttachments.findIndex(x => x.AssignmentId === assignmentId) >= 0;\r\n }\r\n\r\n getStudentAttachmentByAssignmentId(assignmentId: number): Attachment[] {\r\n return this.studentAttachments.filter(x => x.AssignmentId === assignmentId);\r\n }\r\n\r\n getSBSScore(sbs: any) {\r\n return (sbs.Score == -1 ? '' : sbs.Score);\r\n }\r\n\r\n sendEmail(teacherName: string, teacherEmail: string) {\r\n this.sendEmailService.teacherName = teacherName;\r\n this.sendEmailService.teacherEmailAddress = teacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n\r\n getAssignmentStatus(status: number, dueDate: string) {\r\n switch (status) {\r\n case 1:\r\n return 'Today ';\r\n case 3:\r\n return 'Missing ';\r\n case 5:\r\n return 'Tomorrow ';\r\n default:\r\n return formatDate(dueDate, 'E', 'en-US');\r\n }\r\n }\r\n\r\n // --------- Toggle Row ----------------------------\r\n\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getAriaRow(row: AssignmentsDTO): string {\r\n const colList: string[] = ['Course', 'Grading Period', 'Due Date', 'Assigned Date', 'Assignment', 'Category'];\r\n\r\n const dataList: string[] = [\r\n row.Course,\r\n row.Term,\r\n moment(row.DueDate).format('MM/dd/yy'),\r\n moment(row.AssignedDate).format('MM/dd/yy'),\r\n row.AssignmentShortName,\r\n row.Category\r\n ];\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n loadStudentSchedules() {\r\n this.studentService.getStudentSchedule(\r\n this.studentService.selectedStudent.Id,\r\n this.yearService.student360Year.Id,\r\n this.selectedViewOption, undefined, undefined, undefined, undefined, undefined, undefined\r\n ).subscribe(data => {\r\n this.studentSchedules = data.filter(x => x.UsedForGrading === true);\r\n this.refresh();\r\n });\r\n }\r\n\r\n classInformationClick(assignment: AssignmentsDTO) {\r\n // PRE: the user clicks on a class information link under a course\r\n // POST: shows a modal for that class' profile\r\n // Get course from assignment\r\n if (this.studentSchedules) {\r\n const selectedCourse = this.studentSchedules.find(x => x.SiteSectionIds.includes(assignment.SiteSectionId));\r\n if (selectedCourse) {\r\n const dialogBox = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n courseSSEC_ID: selectedCourse.SiteSectionId,\r\n courseName: selectedCourse.Course,\r\n courseSection: selectedCourse.SubjectCode + '-' + selectedCourse.Section,\r\n teacherId: selectedCourse.TeacherMemId,\r\n teacherName: selectedCourse.TeacherName,\r\n school: selectedCourse.SchoolName,\r\n profiles: selectedCourse.CourseProfile,\r\n showTeacherProfileLink: selectedCourse.HasTeacherProfile\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.componentInstance.teacherProfileClick.subscribe(() => {\r\n this.teacherProfileClick(assignment);\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n teacherProfileClick(assignment: AssignmentsDTO) {\r\n // PRE: the user clicks on a teacher profile link under a couse\r\n // POST: shows a modal for that teacher's profile\r\n if (this.studentSchedules) {\r\n const selectedCourse = this.studentSchedules.find(x => x.SiteSectionIds.includes(assignment.SiteSectionId));\r\n if (selectedCourse) {\r\n this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: selectedCourse.TeacherMemId,\r\n profiles: selectedCourse.TeacherProfile,\r\n teacherName: selectedCourse.TeacherName,\r\n school: selectedCourse.SchoolName\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n showClassProfile(assignment: AssignmentsDTO) {\r\n // POST: If Course has profile then show Class Information link\r\n if (this.loginSettings.EnableClassInformationandTeacherProfiles && this.studentSchedules) {\r\n const selectedCourse = this.studentSchedules.find(x => x.SiteSectionIds.includes(assignment.SiteSectionId));\r\n if (selectedCourse) {\r\n return selectedCourse.HasClassProfile;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n showTeacherProfile(assignment: AssignmentsDTO) {\r\n // POST: If Teacher has profile then show Teacher Profile link\r\n if (this.loginSettings.EnableClassInformationandTeacherProfiles && this.studentSchedules) {\r\n const selectedCourse = this.studentSchedules.find(x => x.SiteSectionIds.includes(assignment.SiteSectionId));\r\n if (selectedCourse) {\r\n return selectedCourse.HasTeacherProfile;\r\n }\r\n }\r\n return 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 \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, Host, HostBinding, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { GradeOverrideLegendComponent } from '../../shared-components/controls/grade-override-legend/grade-override-legend.component';\r\nimport { TabsComponent } from '../../shared-components/controls/tabs/tabs.component';\r\nimport { GradeOverrideCode } from '../../shared-components/models/grade-override-code.model';\r\nimport { SchoolYearSettings } from '../../shared-components/year/school-year-settings.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { AssignmentFilterParam } from './assignment-filter-param';\r\nimport { AssignmentFilterComponent } from './assignment-filter/assignment-filter.component';\r\nimport { AssignmentService } from './assignment.service';\r\nimport { ByCourseComponent } from './by-course/by-course.component';\r\nimport { UpcomingMissingComponent } from './upcoming-missing/upcoming-missing.component';\r\n\r\n@Component({\r\n selector: 'app-assignment',\r\n templateUrl: './assignment.component.html',\r\n styleUrls: ['./assignment.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class AssignmentComponent implements OnInit, OnDestroy {\r\n @HostBinding('class.sis-app-root') sisAppRoot: Host = true;\r\n\r\n tabNames: string[] = ['By Course', 'Upcoming/Missing'];\r\n selectedTab: string;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n ShowByClass: boolean;\r\n subscriptions: Subscription[] = [];\r\n showFilter = false;\r\n overrideLegendDialog: MatDialogRef;\r\n schoolYearSettings: SchoolYearSettings;\r\n\r\n // ------------Element references--------------------------------\r\n @ViewChild('byCourse', { static: true }) byCourse: ByCourseComponent;\r\n @ViewChild('upcomingMissing', { static: true }) upcomingMissing: UpcomingMissingComponent;\r\n @ViewChild('assignmentFilter', { static: true }) assignmentFilter: AssignmentFilterComponent;\r\n @ViewChild(TabsComponent, { static: true }) tabComponent: TabsComponent;\r\n\r\n // ------------------ filter -------------------------\r\n isFiltered: boolean;\r\n filterParam = new AssignmentFilterParam();\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private assignmentService: AssignmentService,\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.assignmentService.filterParam = this.filterParam;\r\n this.tabChange('By Course');\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n if (this.ShowByClass) {\r\n this.byCourse.expandAll(toggle);\r\n } else {\r\n this.upcomingMissing.expandAll(toggle);\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n getSelectedTabIndex() {\r\n return this.tabNames.indexOf(this.selectedTab);\r\n }\r\n\r\n schoolYearSettingsChange(schoolYearSettings: SchoolYearSettings) {\r\n this.schoolYearSettings = schoolYearSettings;\r\n }\r\n\r\n tabChange(tab) {\r\n this.selectedTab = tab;\r\n this.ShowByClass = tab === 'By Course';\r\n this.assignmentService.ShowByClass = this.ShowByClass;\r\n if (this.ShowByClass) {\r\n this.byCourse.loadFilterParam();\r\n }\r\n else {\r\n this.upcomingMissing.loadFilterParam();\r\n }\r\n this.assignmentFilter.loadCourseAndTerms();\r\n this.assignmentFilter.filterParam = this.assignmentService.filterParam;\r\n this.isFiltered = this.assignmentService.filterParam.isFilterApplied();\r\n }\r\n\r\n missingRetrieved() {\r\n if (this.assignmentService.filterbyCard == false) {\r\n this.tabChange('Upcoming/Missing');\r\n this.tabComponent.clickTabWithoutEvents('Upcoming/Missing');\r\n }\r\n }\r\n\r\n filterChange() {\r\n this.isFiltered = this.assignmentService.filterParam.isFilterApplied();\r\n this.assignmentService.filterChange.emit();\r\n }\r\n\r\n showFilterClick() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n clearFilterClick() {\r\n this.assignmentFilter.clearFilter();\r\n }\r\n\r\n showLegends() {\r\n return this.ShowByClass && this.byCourse && this.byCourse.selectedCourse && this.byCourse.studentAssignments.filter(x => x.SpecialMark !== '').length > 0;\r\n }\r\n\r\n legendClick() {\r\n const overrideCodes: GradeOverrideCode[] = [];\r\n this.byCourse.studentAssignments.forEach(function (element) {\r\n if ((element.SpecialMark !== '') && ((overrideCodes.map(function (e) { return e.Code; }).indexOf(element.SpecialMark) == -1))) {\r\n overrideCodes.push({\r\n 'Id': 0,\r\n 'Code': element.SpecialMark,\r\n 'Description': element.SpecialMarkDescription,\r\n 'AssignmentCalcOptions': '',\r\n 'GradePos': 0,\r\n 'ForGradeReporting': false,\r\n 'ForAssignments': false,\r\n 'SetSubsequentGPGrades': false,\r\n 'ExcludeFromCalculation': false,\r\n 'SetToZero': false,\r\n 'GradePoints': 0,\r\n 'Inc_GPACalc': false\r\n });\r\n }\r\n });\r\n\r\n this.overrideLegendDialog = this.dialog.open(GradeOverrideLegendComponent, { panelClass: 'tyl-mat-dialog', disableClose: true });\r\n this.overrideLegendDialog.componentInstance.overrideCodes = overrideCodes;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { EventEmitter, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { GradeOverrideCode } from '../../shared-components/models/grade-override-code.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { CourseSchedule } from '../../shared-components/student/course-schedule.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { AssignmentFilterParam } from './assignment-filter-param';\r\nimport { AssignmentsDTO, GradeBookStandards } from './assignment.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssignmentService {\r\n\r\n selectedCourse: CourseSchedule;\r\n selectedSectionId = -1;\r\n selectedGP: string;\r\n studentAssignmentsUPMG: AssignmentsDTO[] = [];\r\n preventTabSwitch: boolean;\r\n ShowByClass = true;\r\n filterParam: AssignmentFilterParam;\r\n filterChange = new EventEmitter();\r\n filterbyCard = false;\r\n selectedCoursebyCard: string;\r\n viewOptions = [\r\n { name: 'Today\\'s Only', value: '1' },\r\n { name: 'This Term', value: '2' },\r\n { name: 'All', value: '3' }\r\n ];\r\n selectedCourseSection: string;\r\n selectedView: number;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private studentService: StudentService,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n getStudentAssignments(studentId: number, yearId: number, siteSectionID: number, startDate: Date, endDate: Date, termId: number, SiteYearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&siteSectionID=' + siteSectionID +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate +\r\n '&TermId=' + termId +\r\n '&SiteYearId=' + SiteYearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentAssignments' + queryString);\r\n }\r\n\r\n\r\n getStudentAttachment(studentId: number, yearId: number, siteSectionID: number, startDate: Date, endDate: Date, termId: number, SiteYearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&siteSectionID=' + siteSectionID +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate +\r\n '&TermId=' + termId +\r\n '&SiteYearId=' + SiteYearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentAttachment' + queryString);\r\n }\r\n\r\n getTermsFromUPComingAssignments() {\r\n let matches: any = [];\r\n const reducer = (array, item) => array.concat(item['Term']);\r\n matches = this.studentAssignmentsUPMG.reduce(reducer, []);\r\n // to get unique values\r\n return Array.from(new Set(matches));\r\n }\r\n\r\n getCoursesFromUPComingAssignments() {\r\n let matches: any = [];\r\n const reducer = (array, item) => array.concat(item['Course']);\r\n matches = this.studentAssignmentsUPMG.reduce(reducer, []);\r\n // to get unique values\r\n return Array.from(new Set(matches));\r\n }\r\n\r\n getStandardsBasedHeader(siteSectionId: number, startDate: Date, endDate: Date, termId: number): Observable {\r\n const queryString = '?siteSectionId=' + siteSectionId +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate +\r\n '&TermId=' + termId;\r\n return this.http.get(System.apiURL.Student + 'GetStandardsBasedHeader' + queryString);\r\n }\r\n\r\n getCategories(isTeacherUser: boolean, courseId: number, courseIds: string): Observable {\r\n return this.sharedService.getCategories(isTeacherUser, courseId, courseIds);\r\n }\r\n\r\n getOverrideCodes() {\r\n return this.http.get(System.apiURL.Student + 'GetGradeOverrideCodes?yearId=' + this.studentService.studentEnrollment.SiteYearId + '&schoolId=' + this.studentService.studentEnrollment.SchoolId);\r\n }\r\n}\r\n","\r\n \r\n Meets\r\n {{detail.Meets}}\r\n \r\n \r\n Period\r\n {{detail.PeriodCode}}\r\n \r\n \r\n Dropped\r\n {{detail.Dropped}}\r\n \r\n \r\n Term\r\n {{detail.Term}}\r\n \r\n \r\n Course-Section\r\n {{detail.SubjectCode}}-{{detail.Section}}\r\n \r\n \r\n Course Name\r\n {{detail.Course}}\r\n \r\n \r\n Code\r\n {{detail.AttendanceCode}}\r\n *\r\n \r\n \r\n \r\n Type\r\n {{detail.AttendanceType}}\r\n \r\n \r\n Description\r\n {{detail.AttendanceCodeDescription}}\r\n \r\n \r\n Comment\r\n {{detail.Comment}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { AttendanceDetails } from '../../../shared-components/student/attendance-details.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'by-date-details',\r\n templateUrl: './by-date-details.component.html'\r\n})\r\nexport class ByDateDetailsComponent implements OnInit, OnDestroy {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay = [];\r\n @Input() attendanceDetails: AttendanceDetails[];\r\n @Input() calendarUseAttendanceTypes: boolean;\r\n @Input() attendanceType: string;\r\n constructor(\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.attendanceDetails;\r\n\r\n // Custom sorting for case here Academic Year starts with letters\r\n // Extracts last two characters and returns the resulting substring if it is a number\r\n this.angularMatData.sortingDataAccessor = (item: any, property: string) => {\r\n if (property == 'Course-Section') {\r\n return item['SubjectCode'] + item['Section'];\r\n }\r\n // Default sorting\r\n else {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n\r\n this.angularMatData.sort = this.sort;\r\n\r\n if (this.loginService.LoginSettings.S360HideAttendanceComments == false) {\r\n if (this.calendarUseAttendanceTypes) {\r\n this.columnsToDisplay = ['Meets', 'PeriodCode', 'Term', 'Course-Section', 'Course', 'AttendanceCode', 'AttendanceType', 'AttendanceCodeDescription', 'Comment'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['Meets', 'PeriodCode', 'Term', 'Course-Section', 'Course', 'AttendanceCode', 'AttendanceCodeDescription', 'Comment'];\r\n }\r\n }\r\n else {\r\n if (this.calendarUseAttendanceTypes) {\r\n this.columnsToDisplay = ['Meets', 'PeriodCode', 'Term', 'Course-Section', 'Course', 'AttendanceCode', 'AttendanceType', 'AttendanceCodeDescription'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['Meets', 'PeriodCode', 'Term', 'Course-Section', 'Course', 'AttendanceCode', 'AttendanceCodeDescription'];\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n }\r\n\r\n getAriaDetailRowByDate(row: AttendanceDetails): string {\r\n const colList: string[] = ['Meets',\r\n 'Dropped',\r\n 'Term',\r\n 'Course-Section',\r\n 'Course Name',\r\n 'Code',\r\n 'Comment'];\r\n\r\n const dataList: string[] = [row.Meets,\r\n row.Dropped,\r\n row.Term,\r\n row.SubjectCode.concat('-', row.Section),\r\n row.AttendanceCode,\r\n row.Comment];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n}\r\n","\r\n \r\n More\r\n \r\n \r\n 0\" aria-label=\"Expand row for more details\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{attend.AttendanceDate | date:'EEE'}}\r\n \r\n \r\n \r\n \r\n Date\r\n \r\n \r\n \r\n {{attend.AttendanceDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n Type\r\n \r\n \r\n \r\n {{attend.Type}}\r\n \r\n \r\n \r\n \r\n Duration\r\n \r\n \r\n {{attend.Duration}}\r\n \r\n \r\n \r\n Codes\r\n \r\n \r\n {{attend.Codes}}\r\n \r\n\r\n \r\n \r\n Days\r\n \r\n \r\n {{attend.Days}}\r\n \r\n\r\n \r\n \r\n Hours\r\n \r\n \r\n {{attend.Hours}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n (@detailExpand.start)=\"$event.toState == 'expanded' ? angularMatData.setVisible(row, true) : null\"\r\n (@detailExpand.done)=\"$event.toState == 'collapsed' ? angularMatData.setVisible(row, false) : null\"\r\n style=\"overflow: hidden\"\r\n class=\"mat-detail-row\">\r\n \r\n\r\n\r\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { Attendance } from '../../../shared-components/student/attendance.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'by-date-table',\r\n templateUrl: './by-date-table.component.html',\r\n animations: [detailExpand],\r\n})\r\nexport class ByDateTableComponent implements OnInit, OnDestroy {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayAttend = ['More', 'AttendanceDay', 'AttendanceDate', 'Type', 'Duration', 'Codes', 'Days', 'Hours'];\r\n @Input() attendance: Attendance[];\r\n @Input() calendarUseAttendanceTypes: boolean;\r\n clearFilterEvent = new EventEmitter();\r\n\r\n constructor(\r\n private sharedService: SharedService,\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.attendance;\r\n\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.sharedService.updateShowSpinner(true);\r\n setTimeout(() => {\r\n this.angularMatData.expandAll(expand);\r\n this.sharedService.updateShowSpinner(false);\r\n }, 100);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n\r\n }\r\n\r\n getAriaRowByDate(row: Attendance): string {\r\n const colList: string[] = ['Date',\r\n 'Type',\r\n 'Duration',\r\n 'Codes'];\r\n\r\n const dataList: string[] = [new Date(row.AttendanceDate).toDateString(),\r\n row.Type,\r\n row.Duration,\r\n row.Codes];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (row.AttendanceDetails.length > 0 ? ' Expand for more details' : ' No additional details');\r\n }\r\n}\r\n","\r\n \r\n \r\n {{detail.AttendanceDate | date: 'EEE'}}\r\n \r\n \r\n Date\r\n {{detail.AttendanceDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n Period\r\n {{detail.Meets}}\r\n \r\n \r\n Period\r\n {{detail.PeriodCode}}\r\n \r\n \r\n Code\r\n {{detail.AttendanceCode}}\r\n *\r\n \r\n \r\n \r\n Type\r\n {{detail.AttendanceType}}\r\n \r\n \r\n Description\r\n {{detail.AttendanceCodeDescription}}\r\n \r\n \r\n \r\n Type\r\n {{detail.Type}}\r\n \r\n \r\n Comment\r\n {{detail.Comment}}\r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { AttendanceDetails } from '../../../shared-components/student/attendance-details.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'by-schedule-details',\r\n templateUrl: './by-schedule-details.component.html'\r\n})\r\nexport class ByScheduleDetailsComponent implements OnInit, OnDestroy {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay = [];\r\n @Input() attendanceDetails: AttendanceDetails[];\r\n @Input() calendarUseAttendanceTypes: boolean;\r\n V10: boolean;\r\n constructor(private loginService: LoginService) {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.loginService.LoginSettings.S360HideAttendanceComments == false) {\r\n if (!this.V10) {\r\n if (this.calendarUseAttendanceTypes) {\r\n this.columnsToDisplay = ['Day', 'AttendanceDate', 'Meets', 'AttendanceCode', 'AttendanceType', 'AttendanceCodeDescription', 'Comment'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['Day', 'AttendanceDate', 'Meets', 'AttendanceCode', 'AttendanceCodeDescription', 'Comment'];\r\n }\r\n }\r\n else {\r\n this.columnsToDisplay = ['Day', 'PeriodCode', 'AttendanceDate', 'AttendanceCode', 'AttendanceCodeDescription', 'Type', 'Comment'];\r\n }\r\n } else {\r\n if (!this.V10) {\r\n if (this.calendarUseAttendanceTypes) {\r\n this.columnsToDisplay = ['Day', 'AttendanceDate', 'Meets', 'AttendanceCode', 'AttendanceType', 'AttendanceCodeDescription'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['Day', 'AttendanceDate', 'Meets', 'AttendanceCode', 'AttendanceCodeDescription'];\r\n }\r\n }\r\n else {\r\n this.columnsToDisplay = ['Day', 'PeriodCode', 'AttendanceDate', 'AttendanceCode', 'AttendanceCodeDescription', 'Type'];\r\n }\r\n }\r\n this.angularMatData.data = this.attendanceDetails;\r\n\r\n // Custom sorting for case here Academic Year starts with letters\r\n // Extracts last two characters and returns the resulting substring if it is a number\r\n this.angularMatData.sortingDataAccessor = (item: any, property: string) => {\r\n if (property == 'Course-Section') {\r\n return item['SubjectCode'] + item['Section'];\r\n }\r\n // Default sorting\r\n else {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n\r\n }\r\n\r\n getAriaDetailRowByCourse(row: AttendanceDetails): string {\r\n let colList: string[] = [];\r\n let dataList: string[] = [];\r\n if (this.V10) {\r\n colList = ['Date',\r\n 'Code',\r\n 'Description',\r\n 'Type',\r\n 'Comment'];\r\n\r\n dataList = [new Date(row.AttendanceDate).toDateString(),\r\n row.AttendanceCode,\r\n row.AttendanceCodeDescription,\r\n row.Type,\r\n row.Comment];\r\n }\r\n else {\r\n colList = ['Date',\r\n 'Meets',\r\n 'Code',\r\n 'Description',\r\n 'Type',\r\n 'Comment'];\r\n\r\n dataList = [new Date(row.AttendanceDate).toDateString(),\r\n row.Meets,\r\n row.AttendanceCode,\r\n row.AttendanceCodeDescription,\r\n row.Type,\r\n row.Comment];\r\n }\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n}\r\n","\r\n \r\n More\r\n \r\n 0\" aria-label=\"Expand row for more details\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n Meets\r\n \r\n \r\n {{attend.Meets}}\r\n \r\n \r\n Dropped\r\n {{attend.Dropped}}\r\n \r\n \r\n \r\n Term\r\n \r\n \r\n {{attend.Term}}\r\n \r\n \r\n \r\n Course-Section\r\n \r\n \r\n {{attend.CourseSection}}\r\n \r\n \r\n \r\n Course Name\r\n \r\n \r\n {{attend.Course}}\r\n \r\n \r\n \r\n Teacher\r\n \r\n \r\n {{attend.TeacherName}}\r\n \r\n \r\n A\r\n \r\n \r\n \r\n {{attend.Absences}}\r\n \r\n \r\n \r\n T\r\n \r\n \r\n \r\n {{attend.Tardies}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Email Teacher\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n (@detailExpand.start)=\"$event.toState == 'expanded' ? angularMatData.setVisible(row, true) : null\"\r\n (@detailExpand.done)=\"$event.toState == 'collapsed' ? angularMatData.setVisible(row, false) : null\" style=\"overflow: hidden\"\r\n class=\"mat-detail-row\">\r\n \r\n
\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { Student360Service } from '../../student360.service';\r\n\r\n@Component({\r\n selector: 'by-schedule-table',\r\n templateUrl: './by-schedule-table.component.html',\r\n animations: [detailExpand],\r\n})\r\nexport class ByScheduleTableComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayCourse: string[] = ['More', 'Meets', 'Dropped', 'Term', 'CourseSection', 'Course', 'TeacherName', 'Absences', 'Tardies'];\r\n @Input() courseSchedules: CourseSchedule[];\r\n @Input() calendarUseAttendanceTypes: boolean;\r\n clearFilterEvent = new EventEmitter();\r\n @Input() V10: boolean;\r\n subscriptions: Subscription[] = [];\r\n canSendEmail = true;\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private sharedService: SharedService,\r\n private sendEmailService: SendEmailService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.courseSchedules;\r\n if (!this.V10) {\r\n this.columnsToDisplayCourse = ['More', 'Meets', 'Term', 'CourseSection', 'Course', 'TeacherName', 'Absences', 'Tardies'];\r\n }\r\n\r\n this.angularMatData.sort = this.sort;\r\n\r\n if (this.userService.userType == 1) {\r\n this.subscriptions.push(this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(this.student360Service.observableParentAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.studentService.selectedCourse && this.studentService.selectedCourse.SubjectCode != undefined) {\r\n const course = this.courseSchedules.filter(o => o.SubjectCode == this.studentService.selectedCourse.SubjectCode)[0];\r\n this.angularMatData.toggleExpanded(course);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n sendEmail(teacherName: string, teacherEmail: string) {\r\n this.sendEmailService.teacherName = teacherName;\r\n this.sendEmailService.teacherEmailAddress = teacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.sharedService.updateShowSpinner(true);\r\n setTimeout(() => {\r\n this.angularMatData.expandAll(expand);\r\n this.sharedService.updateShowSpinner(false);\r\n }, 100);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n\r\n }\r\n\r\n getAriaRowByCourse(row: CourseSchedule): string {\r\n const colList: string[] = ['Meets',\r\n 'Dropped',\r\n 'Term',\r\n 'Course-Section',\r\n 'Course Name',\r\n 'Teacher',\r\n 'Absences',\r\n 'Tardies'];\r\n\r\n const dataList: string[] = [row.Meets,\r\n row.Dropped,\r\n row.Term,\r\n row.CourseSection,\r\n row.Course,\r\n row.TeacherName,\r\n row.Absences.toString(),\r\n row.Tardies.toString()];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (row.AttendanceDetails.length > 0 ? ' Expand for more details' : ' No additional details');\r\n }\r\n}","
No Special Additional Attendance data exists for student
\r\n
0 \">\r\n
\r\n
\r\n
{{school.SiteName}}
\r\n
1\">{{school.SiteName}}
\r\n \r\n \r\n Date\r\n \r\n \r\n {{att.Date|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Minutes
Attended
\r\n \r\n
\r\n {{att.MinutesAttended}}\r\n
\r\n \r\n \r\n Minutes
Possible
\r\n \r\n
\r\n {{att.MinutesPossible}}\r\n
\r\n \r\n Reason Code\r\n \r\n \r\n {{att.ReasonCode}}\r\n \r\n \r\n Comment\r\n \r\n \r\n {{att.Comment}}\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
","import { Component, OnInit, ViewChild, EventEmitter } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { SpecialAdditionalAttendance, AttendanceSchools } from '../../../shared-components/student/attendance.model';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Enrollment } from '../../../shared-components/student/enrollment.model';\r\n\r\n@Component({\r\n selector: 'by-special-additional',\r\n templateUrl: './by-special-additional.component.html'\r\n})\r\nexport class BySpecialAdditionalComponent implements OnInit {\r\n\r\n studentSpecialAttendance: SpecialAdditionalAttendance[] = [];\r\n specialAdditionalAttendanceSchools: AttendanceSchools[] = [];\r\n columnsToDisplaySpecialAdditional = ['Date', 'MinutesAttended', 'MinutesPossible', 'ReasonCode', 'Comment'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n isBusy = true;\r\n specialAdditionalAttendanceAngularMatData = new TylerMatTableDataSource();\r\n studentEnrollment: Enrollment;\r\n clearFilterEvent = new EventEmitter();\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n ) {\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n\r\n ngOnInit() {\r\n this.getSpecialAttendance();\r\n }\r\n\r\n getSpecialAttendance() {\r\n this.isBusy = true;\r\n this.studentService.getSpecialAttendance(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.studentSpecialAttendance = data;\r\n this.getSpecialAttendanceSchools();\r\n if (this.studentSpecialAttendance.length == 0) {\r\n this.isBusy = false;\r\n }\r\n });\r\n }\r\n\r\n getSpecialAttendanceSchools() {\r\n for (const att of this.studentSpecialAttendance) {\r\n if (this.specialAdditionalAttendanceSchools.filter(o => o.SiteId == att.SiteId).length == 0) {\r\n const school: AttendanceSchools = {\r\n SiteId: att.SiteId,\r\n SiteName: att.SiteName,\r\n PrimarySchool: att.PrimarySchool\r\n };\r\n this.specialAdditionalAttendanceSchools.push(school);\r\n }\r\n }\r\n }\r\n\r\n\r\n getSpecialAttendanceDataSource(siteId: number): TylerMatTableDataSource {\r\n this.specialAdditionalAttendanceAngularMatData = new TylerMatTableDataSource();\r\n this.specialAdditionalAttendanceAngularMatData.data = this.studentSpecialAttendance.filter(o => o.SiteId == siteId);\r\n this.specialAdditionalAttendanceAngularMatData.sort = this.sort;\r\n if (this.specialAdditionalAttendanceAngularMatData.data.length > 0) {\r\n this.isBusy = true;\r\n }\r\n else { this.isBusy = false; }\r\n return this.specialAdditionalAttendanceAngularMatData;\r\n }\r\n\r\n getSpecialAdditionalAriaRow(row: SpecialAdditionalAttendance): string {\r\n const colList: string[] = ['Date', 'MinutesAttended', 'MinutesPossible', 'ReasonCode', 'Comment'];\r\n\r\n const dataList: string[] = [row.Date.toString(),\r\n row.MinutesAttended.toString(),\r\n row.MinutesPossible.toString(),\r\n row.ReasonCode,\r\n row.Comment];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n {{detail.date | date: 'EEE'}}\r\n \r\n \r\n Date\r\n {{detail.date | date: 'MM/dd/yy'}}\r\n \r\n \r\n Code\r\n {{detail.attCode}}\r\n \r\n \r\n Description\r\n {{detail.attDescription}}\r\n \r\n \r\n \r\n Type\r\n {{detail.type}}\r\n \r\n \r\n AM/PM\r\n {{detail.ampm}}\r\n \r\n \r\n \r\n \r\n \r\n\r\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { StudentTeamAttendanceDetails } from '../../../shared-components/student/attendance.model';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\n\r\n@Component({\r\n selector: 'app-by-team-details',\r\n templateUrl: './by-team-details.component.html'\r\n})\r\nexport class ByTeamDetailsComponent implements OnInit {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay = ['Day', 'date', 'attCode', 'attDescription', 'type', 'ampm'];\r\n @Input() attendanceDetails: StudentTeamAttendanceDetails[];\r\n V10: boolean;\r\n constructor(private loginService: LoginService,) {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.attendanceDetails;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n getAriaDetailRowByTeamAttendanceDetails(row: StudentTeamAttendanceDetails): string {\r\n let colList: string[] = [];\r\n let dataList: string[] = [];\r\n if (this.V10) {\r\n colList = ['date',\r\n 'attCode',\r\n 'attDescription',\r\n 'type',\r\n 'ampm'];\r\n\r\n dataList = [new Date(row.date).toDateString(),\r\n row.attCode,\r\n row.attDescription,\r\n row.type,\r\n row.ampm];\r\n }\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}","\r\n \r\n More\r\n \r\n 0\" aria-label=\"Expand row for more details\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n Team Name\r\n \r\n \r\n {{teamAttend.stName}}\r\n\r\n\r\n \r\n Staff\r\n \r\n \r\n {{teamAttend.staffName}}\r\n\r\n\r\n \r\n A\r\n \r\n \r\n {{teamAttend.aCount}}\r\n\r\n\r\n \r\n T\r\n \r\n \r\n {{teamAttend.tCount}}\r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n (@detailExpand.start)=\"$event.toState == 'expanded' ? angularMatData.setVisible(row, true) : null\"\r\n (@detailExpand.done)=\"$event.toState == 'collapsed' ? angularMatData.setVisible(row, false) : null\" style=\"overflow: hidden\"\r\n class=\"mat-detail-row\">\r\n \r\n
","import { Component, OnInit, Input, ViewChild } from '@angular/core';\r\nimport { StudentTeamAttendance } from '../../../shared-components/student/attendance.model';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { Router } from '@angular/router';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\n\r\n\r\n@Component({\r\n selector: 'by-team-table',\r\n templateUrl: './by-team-table.component.html',\r\n animations: [detailExpand]\r\n})\r\nexport class ByTeamTableComponent implements OnInit {\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplayTeamAttendance: string[] = ['More', 'stName', 'staffName', 'aCount', 'tCount'];\r\n @Input() teamAttendance: StudentTeamAttendance[];\r\n\r\n constructor(\r\n private sharedService: SharedService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private router: Router) {\r\n}\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.teamAttendance;\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.sharedService.updateShowSpinner(true);\r\n setTimeout(() => {\r\n this.angularMatData.expandAll(expand);\r\n this.sharedService.updateShowSpinner(false);\r\n }, 100);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n\r\n }\r\n\r\n getAriaRowByTeamAttendance(row: StudentTeamAttendance): string {\r\n const colList: string[] = ['stName', \r\n 'staffName', \r\n 'aCount', \r\n 'tCount'];\r\n\r\n const dataList: string[] = [row.stName,\r\n row.staffName,\r\n row.aCount,\r\n row.tCount\r\n ];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (row.StudentTeamAttendanceDetails.length > 0 ? ' Expand for more details' : ' No additional details');\r\n }\r\n}","
No Excessive Absences data exists for student
\r\n\r\n
0 \">\r\n
\r\n 0\">\r\n \r\n \r\n {{eaOption.Description}}\r\n \r\n \r\n\r\n 0\">\r\n \r\n {{tgOption.Description}}\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n {{school.SiteName}}
\r\n
1\">{{school.SiteName}}
\r\n\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Meets\r\n \r\n \r\n {{att.Meets}}\r\n \r\n \r\n \r\n Step\r\n \r\n \r\n \r\n {{att.Steps}}\r\n \r\n \r\n \r\n Points\r\n \r\n \r\n \r\n {{att.Points}}\r\n \r\n \r\n \r\n Appeal Status\r\n \r\n \r\n {{att.AppealedStatus}}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Term\r\n Course-Section\r\n Course Name\r\n Teacher\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{att.Term}}\r\n {{att.Subject}}-{{att.Section}}{{att.Course}}{{att.Teacher}}
\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, OnInit, ViewChild, Input, Output, EventEmitter } from '@angular/core';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { ExcessiveAttendance, AttendanceSchools, Attendance } from '../../../shared-components/student/attendance.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { Enrollment } from '../../../shared-components/student/enrollment.model';\r\n\r\n@Component({\r\n selector: 'app-by-view-excessive',\r\n templateUrl: './by-view-excessive.component.html',\r\n animations: [detailExpand],\r\n})\r\nexport class ByViewExcessiveComponent implements OnInit {\r\n\r\n selectedExcessiveAttendanceOption = 0;\r\n columnsToDisplayExcessiveAttendance = ['Steps', 'Points', 'AppealedStatus'];\r\n excessiveAttendanceAngularMatData = new TylerMatTableDataSource();\r\n @Input() selectionIndex: number;\r\n viewTrackingGroupsOptions: any[] = [];\r\n studentExcessiveAttendance: ExcessiveAttendance[] = [];\r\n selectedTrackingGroupOption = 0;\r\n excessiveAttendanceSchools: AttendanceSchools[] = [];\r\n selectedStudent: Student;\r\n viewExcessiveAttendanceOptions: any[] = [];\r\n @ViewChild(MatSort) sort: MatSort;\r\n attendance: Attendance[] = [];\r\n courseSchedules: CourseSchedule[] = [];\r\n studentEnrollment: Enrollment;\r\n selected = 'By Date';\r\n @Input() showAllCodes: boolean;\r\n isBusy = true;\r\n @Output() selectedExcessiveAttendanceOptionValueChange = new EventEmitter();\r\n clearFilterEvent = new EventEmitter();\r\n constructor(\r\n private sharedService: SharedService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n ) {\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n\r\n ngOnInit() {\r\n this.getExcessiveAttendance();\r\n if (this.selectedExcessiveAttendanceOption == 1) {\r\n this.columnsToDisplayExcessiveAttendance = ['More', 'Meets', 'Steps', 'Points', 'AppealedStatus'];\r\n }\r\n else {\r\n this.columnsToDisplayExcessiveAttendance = ['Steps', 'Points', 'AppealedStatus'];\r\n }\r\n }\r\n\r\n getExcessiveAttendanceAriaRow(row: ExcessiveAttendance): string {\r\n const colList: string[] = ['Meets', 'Steps', 'Points', 'AppealedStatus'];\r\n const dataList: string[] = [row.Meets,\r\n row.Steps.toString(),\r\n row.Points.toString(),\r\n row.AppealedStatus\r\n ];\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (this.selectedExcessiveAttendanceOption == 1 ? ' Expand for more details' : ' No additional details');\r\n }\r\n\r\n selectedViewOptionChange() {\r\n this.expandAll(false);\r\n\r\n if (this.selectedExcessiveAttendanceOption == 1) {\r\n this.columnsToDisplayExcessiveAttendance = ['More', 'Meets', 'Steps', 'Points', 'AppealedStatus'];\r\n }\r\n else {\r\n this.columnsToDisplayExcessiveAttendance = ['Steps', 'Points', 'AppealedStatus'];\r\n }\r\n\r\n this.viewTrackingGroupsOptions = [];\r\n for (const att of this.studentExcessiveAttendance.filter(o => o.TrackingType == this.selectedExcessiveAttendanceOption)) {\r\n if (this.viewTrackingGroupsOptions.filter(o => o.Value == att.AttendanceStepsDefinitionId).length == 0) {\r\n const option: any = {\r\n Value: att.AttendanceStepsDefinitionId,\r\n Description: att.Description,\r\n TrackingId: att.TrackingType\r\n };\r\n\r\n this.viewTrackingGroupsOptions.push(option);\r\n }\r\n }\r\n this.selectedExcessiveAttendanceOptionValueChange.emit(this.selectedExcessiveAttendanceOption);\r\n if (this.viewTrackingGroupsOptions.length > 0) {\r\n this.selectedTrackingGroupOption = this.viewTrackingGroupsOptions[0].Value;\r\n }\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n if (this.selectedExcessiveAttendanceOption == 1) {\r\n this.sharedService.updateShowSpinner(true);\r\n setTimeout(() => {\r\n this.excessiveAttendanceAngularMatData.expandAll(expand);\r\n this.sharedService.updateShowSpinner(false);\r\n }, 100);\r\n }\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n if (this.selectedExcessiveAttendanceOption == 1) {\r\n this.excessiveAttendanceAngularMatData.toggleExpanded(row);\r\n }\r\n }\r\n\r\n checkExpandedExcessiveAttendance(row: any): boolean {\r\n return this.excessiveAttendanceAngularMatData.checkExpanded(row);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n if (this.selectedExcessiveAttendanceOption == 1) {\r\n this.excessiveAttendanceAngularMatData.rowKeyPress(event, row);\r\n }\r\n }\r\n\r\n getExcessiveAttendance() {\r\n this.isBusy = true;\r\n this.studentService.getExcessiveAttendance(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.studentExcessiveAttendance = data;\r\n if (this.studentExcessiveAttendance.length > 0) {\r\n this.getExcessiveAttendanceSchools();\r\n this.getExcessiveAttendanceSchoolsViewOptions();\r\n this.excessiveAttendanceAngularMatData = new TylerMatTableDataSource(this.studentExcessiveAttendance);\r\n }\r\n else {\r\n this.isBusy = false;\r\n }\r\n });\r\n }\r\n\r\n getExcessiveAttendanceSchools() {\r\n for (const att of this.studentExcessiveAttendance) {\r\n if (this.excessiveAttendanceSchools.filter(o => o.SiteId == att.SiteId).length == 0) {\r\n const school: AttendanceSchools = {\r\n SiteId: att.SiteId,\r\n SiteName: att.SiteName,\r\n PrimarySchool: att.PrimarySchool\r\n };\r\n this.excessiveAttendanceSchools.push(school);\r\n }\r\n }\r\n }\r\n\r\n getExcessiveAttendanceSchoolsViewOptions() {\r\n if (this.studentExcessiveAttendance.filter(o => o.TrackingType == 0).length > 0) {\r\n const option: any = {\r\n Value: 0,\r\n Description: 'Days'\r\n };\r\n this.viewExcessiveAttendanceOptions.push(option);\r\n }\r\n if (this.studentExcessiveAttendance.filter(o => o.TrackingType == 1).length > 0) {\r\n const option: any = {\r\n Value: 1,\r\n Description: 'Individual Period'\r\n };\r\n this.viewExcessiveAttendanceOptions.push(option);\r\n }\r\n if (this.studentExcessiveAttendance.filter(o => o.TrackingType == 2).length > 0) {\r\n const option: any = {\r\n Value: 2,\r\n Description: 'Total Period'\r\n };\r\n this.viewExcessiveAttendanceOptions.push(option);\r\n }\r\n\r\n if (this.viewExcessiveAttendanceOptions.length > 0) {\r\n this.selectedExcessiveAttendanceOption = this.viewExcessiveAttendanceOptions[0].Value;\r\n this.selectedViewOptionChange();\r\n }\r\n }\r\n\r\n getExcessiveAttendanceDataSource(siteId: number): TylerMatTableDataSource {\r\n const excessiveAttendance = this.studentExcessiveAttendance.filter(o => o.SiteId == siteId && o.TrackingType == this.selectedExcessiveAttendanceOption && o.AttendanceStepsDefinitionId == this.selectedTrackingGroupOption);\r\n this.excessiveAttendanceAngularMatData.data = excessiveAttendance;\r\n this.excessiveAttendanceAngularMatData.sort = this.sort;\r\n if (this.excessiveAttendanceAngularMatData.data.length > 0) {\r\n this.isBusy = true;\r\n }\r\n else { this.isBusy = false; }\r\n return this.excessiveAttendanceAngularMatData;\r\n }\r\n\r\n getStudentAttendanceInfo() {\r\n if (this.selected == 'By Date') {\r\n this.studentService.getStudentAttendance(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, this.showAllCodes).subscribe(data => {\r\n this.attendance = data;\r\n });\r\n }\r\n else {\r\n this.studentService.getStudentSchedule(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, parseInt(this.selected, 10), true, -1, true, false, false, this.showAllCodes).subscribe(data => {\r\n this.courseSchedules = data;\r\n });\r\n }\r\n }\r\n\r\n}\r\n","

\r\n Attendance Code Legend\r\n

\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Code{{element.Code}}Description{{element.Description}}
\r\n
\r\n A red asterisk (*) identifies codes that will not count as an absences or\r\n tardy on the report card, but indicate the student was not physically in class.\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'code-legend',\r\n templateUrl: './code-legend.component.html'\r\n})\r\nexport class CodeLegendComponent implements OnInit {\r\n\r\n @Input() title: any;\r\n @Input() attendanceCodes: any;\r\n @Input() data: any;\r\n @Input() callbyAttendanceComponet = false;\r\n displayedColumns: string[] = ['code', 'description'];\r\n\r\n constructor(private dialogRef: MatDialogRef, private dialog: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {}\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n
\r\n 0\" [tabNames]=\"tabNames\" [setIndex]=\"setIndex\"\r\n (selectionsChangeIndex)=\"selectionChange($event)\">\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Days\r\n {{(attendanceDaysAndHoursInfo.PossibleDays -\r\n attendanceDaysAndHoursInfo.AbsenceDays)|number:'2.2-2'}}of\r\n \r\n {{attendanceDaysAndHoursInfo.PossibleDays|number:'2.2-2'}}(\r\n {{(((attendanceDaysAndHoursInfo.PossibleDays -\r\n attendanceDaysAndHoursInfo.AbsenceDays)/(attendanceDaysAndHoursInfo.PossibleDays > 0 ?\r\n attendanceDaysAndHoursInfo.PossibleDays : 1))*100)|number:'2.2-2'}}%)
Hours\r\n {{((attendanceDaysAndHoursInfo.PossibleMinutes -\r\n attendanceDaysAndHoursInfo.AbsenceMinutes)/60)|number:'2.2-2'}}of\r\n \r\n {{attendanceDaysAndHoursInfo.PossibleMinutes/60|number:'2.2-2'}}(\r\n {{(((attendanceDaysAndHoursInfo.PossibleMinutes -\r\n attendanceDaysAndHoursInfo.AbsenceMinutes)/(attendanceDaysAndHoursInfo.PossibleMinutes > 0\r\n ? attendanceDaysAndHoursInfo.PossibleMinutes : 1))*100)|number:'2.2-2'}}%)
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n By Teams\r\n \r\n By Date (Entire Year)\r\n By Student Schedule (Today Only)\r\n By Student Schedule (This Term)\r\n By Student Schedule (All)\r\n \r\n \r\n
\r\n
\r\n
\r\n No absences or tardies exist for the student.\r\n
\r\n
0\">\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n No absences or tardies exist for the student.\r\n
\r\n
0\">\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n No absences or tardies exist for the student.\r\n
\r\n
0\">\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\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 { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\n// -------Angular Material------------------------------------\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { TabsComponent } from '../../shared-components/controls/tabs/tabs.component';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { Attendance, AttendanceSchools, ExcessiveAttendance, SpecialAdditionalAttendance, StudentTeamAttendance } from '../../shared-components/student/attendance.model';\r\nimport { CourseSchedule } from '../../shared-components/student/course-schedule.model';\r\nimport { Enrollment } from '../../shared-components/student/enrollment.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\n// ---------Shared--------------------------------------------\r\nimport { CheckInOutViewHistoryDialogComponent } from '../../shared-components/check-in-out-view-history-dialog/check-in-out-view-history-dialog.component';\r\nimport { SelfCheckInOutHistoryDialogComponent } from '../../shared-components/self-check-in-out-history-dialog/self-check-in-out-history-dialog.component';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { ViewAbsentNoticeHistoryDialogComponent } from '../../shared-components/view-absent-notice-history-dialog/view-absent-notice-history-dialog.component';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { StudentSummaryService } from '../student-summary/student-summary.service';\r\nimport { ByDateTableComponent } from './by-date-table/by-date-table.component';\r\nimport { ByScheduleTableComponent } from './by-schedule-table/by-schedule-table.component';\r\nimport { BySpecialAdditionalComponent } from './by-special-additional/by-special-additional.component';\r\nimport { ByTeamTableComponent } from './by-team-table/by-team-table.component';\r\nimport { ByViewExcessiveComponent } from './by-view-excessive/by-view-excessive.component';\r\nimport { CodeLegendComponent } from './code-legend/code-legend.component';\r\n\r\n@Component({\r\n selector: 'attendance',\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './attendance.component.html',\r\n animations: [detailExpand],\r\n})\r\nexport class AttendanceComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // ------------Element references--------------------------------\r\n @ViewChild('appHeader') appHeaderRef: ElementRef;\r\n @ViewChild('studentHeader', { static: true }) studentHeaderRef: ElementRef;\r\n @ViewChild('tabs', { static: true }) tabsRef: ElementRef;\r\n @ViewChild('dropdown') dropdownRef: ElementRef;\r\n @ViewChild('footer', { static: true }) footerRef: ElementRef;\r\n appHeaderHeight = 0;\r\n studentHeaderHeight = 0;\r\n tabsHeight = 0;\r\n dropDownHeight = 0;\r\n footerHeight = 0;\r\n footerWidth = 0;\r\n // ------------Student Attendance Data---------------------------\r\n selectedStudentSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n selectedStudent: Student;\r\n studentEnrollment: Enrollment;\r\n attendance: Attendance[];\r\n courseSchedules: CourseSchedule[];\r\n teamAttendance: StudentTeamAttendance[];\r\n // ------------Selection/Flags-----------------------------------\r\n AttendanceByDate = true;\r\n showAllCodes = false;\r\n selected = 'By Date';\r\n\r\n // -----------Grid functionality---------------------------------\r\n gridHeight = 0;\r\n // ------------Modal window--------------------------------------\r\n legendDialogRef: MatDialogRef;\r\n // ----------Angular Material------------------------------------\r\n excessiveAttendanceAngularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n initialSelection = [];\r\n allowMultiSelect = true;\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n @ViewChild(ByDateTableComponent) byDateTableRef: ByDateTableComponent;\r\n @ViewChild(ByScheduleTableComponent) byScheduleTableRef: ByScheduleTableComponent;\r\n @ViewChild(ByViewExcessiveComponent) byViewExcessiveTableRef: ByViewExcessiveComponent;\r\n @ViewChild(BySpecialAdditionalComponent) BySpecialAdditionalRef: BySpecialAdditionalComponent;\r\n @ViewChild(ByTeamTableComponent) byTeamTableRef: ByTeamTableComponent;\r\n // @ViewChildren(FilterComponent) filterRef: QueryList;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n clearFilterEvent = new EventEmitter();\r\n // -----------V9--------------------------------------------------\r\n tabNames: string[] = [];\r\n selectionIndex = 0;\r\n studentExcessiveAttendance: ExcessiveAttendance[] = [];\r\n excessiveAttendanceSchools: AttendanceSchools[] = [];\r\n studentSpecialAttendance: SpecialAdditionalAttendance[] = [];\r\n specialAdditionalAttendanceSchools: AttendanceSchools[] = [];\r\n studentTeamAttendance: StudentTeamAttendance[] = [];\r\n columnsToDisplayExcessiveAttendance = ['Steps', 'Points', 'AppealedStatus'];\r\n viewExcessiveAttendanceOptions: any[] = [];\r\n viewTrackingGroupsOptions: any[] = [];\r\n selectedExcessiveAttendanceOption = 0;\r\n selectedTrackingGroupOption = 0;\r\n attendanceDaysAndHoursInfo: any = [];\r\n setIndex = new EventEmitter();\r\n isStudentTeamExists = false;\r\n calendarUseAttendanceTypes = false;\r\n\r\n showSelfCheckButton = false;\r\n showAbsentNoticeButton = false;\r\n loadStudentInfoCall = false\r\n\r\n @ViewChild(TabsComponent) tabs: TabsComponent;\r\n // --------------Lifecycle-------------------------------------\r\n constructor(\r\n private studentService: StudentService,\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n public changeDetector: ChangeDetectorRef,\r\n public route: ActivatedRoute,\r\n private studentSummaryService: StudentSummaryService\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n if (studentId > 0 && this.loadStudentInfoCall == false) {\r\n if (this.studentService.selected != undefined && this.studentService.selected != null) {\r\n this.selected = this.studentService.selected;\r\n this.studentService.selected = null;\r\n this.loadStudentInfo(studentId, true);\r\n }\r\n else {\r\n this.loadStudentInfo(studentId);\r\n }\r\n }\r\n });\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id, true);\r\n });\r\n this.student360YearSubscription = this.studentService.observableStudentEnrollmentStream$.subscribe((enrollment) => {\r\n if (enrollment && this.loadStudentInfoCall == false) {\r\n this.loadStudentInfo(enrollment.StudentId, false);\r\n }\r\n });\r\n\r\n this.tabNames.push('REGULAR ABSENCES');\r\n this.tabNames.push('EXCESSIVE ABSENCES');\r\n this.tabNames.push('SPECIAL ADDITIONAL');\r\n }\r\n\r\n ngOnInit() {\r\n if (this.loadStudentInfoCall == false) {\r\n if (this.studentService.selected != undefined && this.studentService.selected != null) {\r\n this.selected = this.studentService.selected;\r\n this.studentService.selected = null;\r\n }\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id, true);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.studentHeaderRef != undefined) {\r\n this.studentHeaderHeight = this.studentHeaderRef.nativeElement.offsetHeight;\r\n }\r\n if (this.tabsRef != undefined) {\r\n this.tabsHeight = this.tabsRef.nativeElement.offsetHeight;\r\n }\r\n if (this.dropdownRef != undefined) {\r\n this.dropDownHeight = this.dropdownRef.nativeElement.offsetHeight;\r\n }\r\n if (this.footerRef != undefined) {\r\n this.footerHeight = this.footerRef.nativeElement.offsetHeight;\r\n this.footerWidth = this.footerRef.nativeElement.width;\r\n }\r\n this.studentService.selectionIndex = 0;\r\n this.onResize();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectedStudentSubscription.unsubscribe();\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n // ------------Student Attendance Data---------------------------\r\n loadStudentInfo(studentId: number, maintainSelected = false) {\r\n this.loadStudentInfoCall = true;\r\n this.clearStudentData();\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n if (this.studentEnrollment != undefined && this.studentEnrollment != null) {\r\n this.getCheckInOutButtnSettings(this.studentEnrollment.StudentId, this.studentEnrollment.AcademicYearID);\r\n }\r\n if (!maintainSelected) {\r\n this.selected = 'By Date';\r\n setTimeout(() => {\r\n if (this.studentService.selectionIndex == 0) {\r\n this.selectionIndex = 0;\r\n }\r\n else {\r\n this.selectionIndex = this.studentService.selectionIndex;\r\n }\r\n this.setIndex.emit(this.selectionIndex);\r\n this.selectionChange(this.selectionIndex);\r\n this.tabs.selectedIndexChange(this.selectionIndex);\r\n }, 50);\r\n }\r\n\r\n this.getAttendanceDaysAndHoursInfo();\r\n this.getStudentAttendanceInfo();\r\n this.getSpecialAttendance();\r\n this.getCalendarUseAttendanceTypes();\r\n }\r\n\r\n getStudentAttendanceInfo() {\r\n if (this.selected == 'By Date') {\r\n this.attendance = undefined;\r\n this.studentService.getStudentAttendance(this.selectedStudent.Id, this.yearService.student360Year.Id, this.showAllCodes).subscribe(data => {\r\n this.attendance = [];\r\n data.forEach(element => {\r\n this.attendance.push(element);\r\n });\r\n });\r\n }\r\n else if (this.selected == 'By Team') {\r\n this.studentTeamAttendance = undefined;\r\n this.studentService.getStudentTeamAttendanceAbsentTardiesCount(this.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.student360Year.Id).subscribe(data => {\r\n this.studentTeamAttendance = [];\r\n data.forEach(element => {\r\n this.studentTeamAttendance.push(element);\r\n });\r\n });\r\n }\r\n else {\r\n this.courseSchedules = undefined;\r\n this.studentService.getStudentSchedule(this.selectedStudent.Id, this.yearService.student360Year.Id, parseInt(this.selected, 10), true, -1, true, false, false, this.showAllCodes).subscribe(data => {\r\n this.courseSchedules = [];\r\n data.forEach(element => {\r\n element.CourseSection = element.SubjectCode + '-' + element.Section;\r\n this.courseSchedules.push(element);\r\n });\r\n });\r\n }\r\n }\r\n\r\n getSpecialAttendance() {\r\n this.studentService.getSpecialAttendance(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.studentSpecialAttendance = data;\r\n this.loadStudentInfoCall = false;\r\n });\r\n }\r\n\r\n getCalendarUseAttendanceTypes() {\r\n this.sharedService.getCalendarUseAttendanceTypes(0, this.yearService.student360Year.Id, this.selectedStudent.Id).subscribe(result => {\r\n this.calendarUseAttendanceTypes = result;\r\n });\r\n }\r\n\r\n clearStudentData() {\r\n this.attendance = undefined;\r\n this.studentExcessiveAttendance = [];\r\n this.studentSpecialAttendance = [];\r\n this.selectionIndex = 0;\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n setTimeout(() => {\r\n this.gridHeight = window.innerHeight - 67 - 30 - this.studentHeaderHeight - this.tabsHeight - this.dropDownHeight - this.footerHeight;\r\n }, 0);\r\n }\r\n\r\n // ------------Modal window-----------------------\r\n CodeLegendClick() {\r\n const codes: any[] = [];\r\n\r\n if (this.selectionIndex == 0) {\r\n if (this.selected == 'By Date') {\r\n this.attendance.forEach(function (attend) {\r\n attend.AttendanceDetails.forEach(function (details) {\r\n if (codes.map(function (e) { return e.Code; }).indexOf(details.AttendanceCode) == -1) {\r\n codes.push({ 'Code': details.AttendanceCode, 'Description': details.AttendanceCodeDescription });\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n this.courseSchedules.forEach(function (schedule) {\r\n schedule.AttendanceDetails.forEach(function (details) {\r\n if (codes.map(function (e) { return e.Code; }).indexOf(details.AttendanceCode) == -1) {\r\n codes.push({ 'Code': details.AttendanceCode, 'Description': details.AttendanceCodeDescription });\r\n }\r\n });\r\n });\r\n }\r\n }\r\n else if (this.selectionIndex == 2) {\r\n this.studentSpecialAttendance.forEach(function (attend) {\r\n if (codes.map(function (e) { return e.Code; }).indexOf(attend.ReasonCode) == -1) {\r\n codes.push({ 'Code': attend.ReasonCode, 'Description': attend.ReasonDescription });\r\n }\r\n });\r\n }\r\n\r\n this.legendDialogRef = this.dialog.open(CodeLegendComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '510px',\r\n disableClose: true\r\n });\r\n\r\n this.legendDialogRef.componentInstance.attendanceCodes = codes.sort(this.codeSort);\r\n this.legendDialogRef.componentInstance.callbyAttendanceComponet = true;\r\n this.legendDialogRef.afterClosed().subscribe(result => { });\r\n }\r\n\r\n codeSort(a, b) {\r\n if (a.Code < b.Code) {\r\n return -1;\r\n }\r\n if (a.Code > b.Code) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n clearFilter() {\r\n if (this.selected == 'By Date' && this.byDateTableRef != undefined) {\r\n this.byDateTableRef.angularMatData.removeAllFilters();\r\n }\r\n\r\n if (this.selected != 'By Date' && this.byDateTableRef != undefined) {\r\n this.byScheduleTableRef.angularMatData.removeAllFilters();\r\n }\r\n\r\n if (this.selected == 'By Team' && this.byTeamTableRef != undefined) {\r\n this.byTeamTableRef.angularMatData.removeAllFilters();\r\n }\r\n\r\n if (this.byViewExcessiveTableRef != undefined) {\r\n this.byViewExcessiveTableRef.excessiveAttendanceAngularMatData.removeAllFilters();\r\n }\r\n if (this.BySpecialAdditionalRef != undefined) {\r\n this.BySpecialAdditionalRef.specialAdditionalAttendanceAngularMatData.removeAllFilters();\r\n }\r\n }\r\n\r\n isFiltered(): boolean {\r\n let filtered: boolean;\r\n\r\n if (this.byDateTableRef != undefined) {\r\n if (this.byDateTableRef.angularMatData.isFiltered() && this.selected == 'By Date') {\r\n filtered = true;\r\n }\r\n }\r\n\r\n if (this.byScheduleTableRef != undefined) {\r\n if (this.byScheduleTableRef.angularMatData.isFiltered() && this.selected != 'By Date') {\r\n filtered = true;\r\n }\r\n }\r\n\r\n if (this.byTeamTableRef != undefined) {\r\n if (this.byTeamTableRef.angularMatData.isFiltered() && this.selected == 'By Team') {\r\n filtered = true;\r\n }\r\n }\r\n\r\n if (this.byViewExcessiveTableRef != undefined) {\r\n if (this.byViewExcessiveTableRef.excessiveAttendanceAngularMatData.isFiltered()) {\r\n filtered = true;\r\n }\r\n }\r\n if (this.BySpecialAdditionalRef != undefined) {\r\n if (this.BySpecialAdditionalRef.specialAdditionalAttendanceAngularMatData.isFiltered()) {\r\n filtered = true;\r\n }\r\n }\r\n return filtered;\r\n }\r\n\r\n // -------------V9-------------------------------------------------------\r\n selectionChange(selectionIndex: number) {\r\n this.selectionIndex = selectionIndex;\r\n this.studentService.selectionIndex = selectionIndex;\r\n this.onResize();\r\n }\r\n\r\n selectedExcessiveAttendanceChange(event) {\r\n this.selectedExcessiveAttendanceOption = event;\r\n }\r\n\r\n getAttendanceDaysAndHoursInfo() {\r\n this.studentService.getAttendanceDaysAndHoursInfo(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.attendanceDaysAndHoursInfo = data;\r\n this.loadStudentInfoCall = false;\r\n });\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n if (this.selectionIndex == 0) {\r\n if (this.selected != 'By Date' && this.selected != 'By Team') {\r\n this.byScheduleTableRef.expandAll(expand);\r\n }\r\n else if (this.selected == 'By Date') {\r\n this.byDateTableRef.expandAll(expand);\r\n } else {\r\n this.byTeamTableRef.expandAll(expand);\r\n }\r\n }\r\n else if (this.selectionIndex == 1) {\r\n this.byViewExcessiveTableRef.expandAll(expand);\r\n }\r\n\r\n }\r\n\r\n getCheckInOutButtnSettings(studentId: number, yearId: number) {\r\n this.studentSummaryService.getCheckInOutButtonSettings(studentId, yearId).subscribe(settings => {\r\n if (settings.AllowParentEnterCheckInOut || settings.AllowParentEnterCheckInOutMobile || settings.AllowStudentEnterCheckInOut || settings.AllowStudentEnterCheckInOutMobile) {\r\n this.showSelfCheckButton = true;\r\n }\r\n\r\n if (settings.AllowParentEnterAbsentNotice || settings.AllowStudentEnterAbsentNotice) {\r\n this.showAbsentNoticeButton = true;\r\n }\r\n });\r\n }\r\n\r\n viewSelfCheckHistoryClick() {\r\n const dialogBox = this.dialog.open(SelfCheckInOutHistoryDialogComponent, {\r\n disableClose: true,\r\n minWidth: '60vw',\r\n maxWidth: '120vw',\r\n minHeight: '80vh',\r\n data: {\r\n studentId: this.selectedStudent.Id,\r\n selectedStudent: this.selectedStudent\r\n }\r\n });\r\n }\r\n\r\n viewAbsentNoticeClick() {\r\n const dialogBox = this.dialog.open(ViewAbsentNoticeHistoryDialogComponent, {\r\n disableClose: true,\r\n minWidth: '60vw',\r\n maxWidth: '60vw',\r\n minHeight: '80vh',\r\n data: {\r\n studentId: this.selectedStudent.Id,\r\n selectedStudent: this.selectedStudent\r\n }\r\n });\r\n }\r\n\r\n viewHistoryClick() {\r\n const dialogBox = this.dialog.open(CheckInOutViewHistoryDialogComponent, {\r\n disableClose: true,\r\n minWidth: '80vw',\r\n maxWidth: '80vw',\r\n minHeight: '80vh',\r\n data: {\r\n selectedStudent: this.selectedStudent,\r\n schoolId: this.studentEnrollment.SchoolId\r\n }\r\n });\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { Awards } from './awards.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AwardsService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n // getStudentAwards\r\n getStudentAwards(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentAwards' + queryString);\r\n }\r\n}\r\n","\r\n\t
\r\n\t\t\r\n\t
\r\n\t
\r\n\t\t
No Awards data exists for student.
\r\n\t\t
0\">\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tAward\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{{award.AwardName}}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tDetails\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{{award.AwardDetails}}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tDate\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{{award.AwardDate | date:'MM/dd/yy'}}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tStaff Name\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{{award.StaffName}}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tComment\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t{{award.Comment}}\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t
\r\n
\r\n
\r\n\r\n\t\r\n\t\r\n
\r\n","import { Component, OnInit, OnDestroy, ViewChild, ChangeDetectorRef, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { AwardsService } from './awards.service';\r\nimport { Awards } from './awards.model';\r\n\r\n// -------Angular Material------------------------------------\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { MatSort } from '@angular/material/sort';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-awards',\r\n templateUrl: './awards.component.html',\r\n styles: []\r\n})\r\nexport class AwardsComponent implements OnInit, OnDestroy {\r\n\r\n selectedStudentSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n selectedStudent: Student;\r\n awards: Awards[] = [];\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n isBusy = false;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay = ['AwardName', 'AwardDetails', 'AwardDate', 'StaffName', 'Comment'];\r\n clearFilterEvent = new EventEmitter();\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private awardsService: AwardsService,\r\n public changeDetector: ChangeDetectorRef\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.awards);\r\n\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n studentYear => {\r\n this.getStudentAwards();\r\n }\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n // ------------ Awards Data ---------------------------\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.find(x => x.Id == studentId);\r\n this.getStudentAwards();\r\n }\r\n\r\n getStudentAwards() {\r\n this.isBusy = true;\r\n this.angularMatData.data = [];\r\n\r\n this.awardsService.getStudentAwards(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.awards = data;\r\n this.loadStudentAwards();\r\n });\r\n }\r\n\r\n loadStudentAwards() {\r\n this.angularMatData.data = this.awards;\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getAriaRow(row: Awards): string {\r\n const colList: string[] = ['Award', 'Details', 'Date', 'StaffName', 'Comment'];\r\n const dataList: string[] = [\r\n row.AwardName,\r\n row.AwardDetails,\r\n row.AwardDate.toString(),\r\n row.StaffName,\r\n row.Comment\r\n ];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}","
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

{{month | translate}} {{year}}

\r\n

{{ viewDate | calendarDate:(view + 'ViewTitle'):locale }}

\r\n

{{weekday | translate}}, {{month | translate}} {{day}}, {{year}}

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n","import {Component, Input, Output, EventEmitter, OnInit, OnChanges} from '@angular/core';\r\nimport { CalendarView } from 'angular-calendar';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n selector: 'app-calendar-header',\r\n templateUrl: './calendar-header.component.html',\r\n})\r\n\r\nexport class CalendarHeaderComponent implements OnInit, OnChanges {\r\n @Input() view: CalendarView;\r\n @Input() viewDate: Date;\r\n @Input() locale: string = 'en';\r\n @Output() viewChange: EventEmitter = new EventEmitter();\r\n @Output() viewDateChange: EventEmitter = new EventEmitter();\r\n weekday: string;\r\n month: string;\r\n day: string;\r\n year: string;\r\n\r\n ngOnInit(): void {\r\n this.weekday = moment(this.viewDate).format('dddd');\r\n this.month = moment(this.viewDate).format('MMMM');\r\n this.day = moment(this.viewDate).format('D');\r\n this.year = moment(this.viewDate).format('YYYY');\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.weekday = moment(this.viewDate).format('dddd');\r\n this.month = moment(this.viewDate).format('MMMM');\r\n this.day = moment(this.viewDate).format('D');\r\n this.year = moment(this.viewDate).format('YYYY');\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n {{event.title}}\r\n
\r\n
\r\n {{event.start | date:'shortTime' }} - {{event.end | date:'shortTime'}}   Room\r\n {{event.meta.event.Room}}\r\n   {{event.meta.event.TeacherName}}\r\n
\r\n
\r\n Attendance {{attendanceStatus()}}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\" style=\"height: 30px; color: #757575;\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n
Assignments Due {{eventDetails.Date | date:'MM/dd/yy'}}CategoryPossible PointsAssigned
{{assignment.Assignment}}{{assignment.Category}}{{assignment.Possible}}{{assignedDate(assignment.AssignedDate)}}
Details

Attachments

{{attachment.FileName}}\r\n ({{attachment.OriginalFileName}}\r\n ) {{attachmentDescription(attachment)}}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n Details\r\n
\r\n
\r\n Location {{eventDetails.Location}}\r\n
\r\n
\r\n

{{eventDetails.EventDetails}}

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

No description for this event

\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n","import { Component, Inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { GradebookV9Service } from '../../../classroom360/gradebook/v9/gradebook-v9.service';\r\nimport { CourseDescriptionDialogComponent } from '../../../shared-components/course-description-dialog/course-description-dialog.component';\r\nimport { ProfileViewerDialogComponent } from '../../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { System } from '../../../shared-components/System';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { AssignmentService } from '../../assignment/assignment.service';\r\nimport { Student360Service } from '../../student360.service';\r\nimport { CalendarService } from '../calendar.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-calendar-event-modal',\r\n templateUrl: './calendar-event-modal.component.html',\r\n styleUrls: ['./calendar-event-modal.component.css']\r\n})\r\nexport class CalendarEventModalComponent implements OnInit, OnDestroy {\r\n isV10: boolean;\r\n event: any;\r\n assignments: any[];\r\n attendanceDetails: any;\r\n eventType: any;\r\n eventDetails: any;\r\n courseInfo: any;\r\n dataBucketId: number;\r\n subscriptions: Subscription[] = [];\r\n canSendEmail = true;\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private gradebookV9Service: GradebookV9Service,\r\n private assignmentService: AssignmentService,\r\n private sendEmailService: SendEmailService,\r\n private calendarService: CalendarService,\r\n private router: Router,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) private data: any\r\n ) {\r\n this.event = data;\r\n this.isV10 = this.loginService.LoginSettings.V10;\r\n this.eventType = this.event.meta.eventType;\r\n this.eventDetails = this.event.meta.event;\r\n this.assignments = this.event.meta.event.Assignments;\r\n this.courseInfo = this.event.meta.courseInfo;\r\n this.dataBucketId = this.event.meta.event.DataBucket_ID;\r\n this.getTerms();\r\n if (this.isV10) {\r\n this.courseInfo.SiteSectionId = this.courseInfo.Id;\r\n } else {\r\n this.getV9Attachments();\r\n }\r\n\r\n if (this.userService.userType == 1) {\r\n this.subscriptions.push(this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n else {\r\n this.subscriptions.push(this.student360Service.observableParentAssignedPortalsStream$.subscribe(portals => {\r\n if (portals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.canSendEmail = false;\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (this.eventType == 'dailyScheduleEvent') {\r\n this.studentService.getStudentAttendance(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, true).subscribe(data => {\r\n // pull out the date of interest\r\n const attendanceEvent = data.find(a => a.AttendanceDate == this.eventDetails.Date);\r\n if (!!attendanceEvent) {\r\n this.attendanceDetails = attendanceEvent.AttendanceDetails.find(a => a.SiteSectionId == this.event.id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n getTerms() {\r\n if (this.dataBucketId != undefined) {\r\n this.calendarService.getTermsForCourses(this.dataBucketId, this.isV10 ? this.yearService.student360Year.Id : this.studentService.studentEnrollment.SiteYearId).subscribe(response => {\r\n if (response) {\r\n this.courseInfo.CourseTerms = response;\r\n }\r\n });\r\n }\r\n }\r\n\r\n getV9Attachments() {\r\n this.assignments.forEach(assignment => {\r\n this.gradebookV9Service.getGradebookV9Attachments(assignment.AssignmentId).subscribe(results => {\r\n assignment.Attachments = results;\r\n assignment.Attachment = results.length;\r\n });\r\n });\r\n }\r\n\r\n attendanceStatus() {\r\n if (this.attendanceDetails == undefined || this.attendanceDetails == null) {\r\n return 'Present';\r\n } else {\r\n if (this.attendanceDetails.AttendanceCode == '') {\r\n return 'Present';\r\n } else {\r\n return (this.attendanceDetails.AttendanceCode + ' - ' + this.attendanceDetails.AttendanceCodeDescription);\r\n }\r\n }\r\n }\r\n\r\n attachmentDescription(attachment) {\r\n if (!!attachment.Description) {\r\n return ('- ' + attachment.Description);\r\n }\r\n }\r\n\r\n attachmentClick(attachment) {\r\n System.saveFile(attachment.DocumentBase64, attachment.DocumentType, attachment.FileName);\r\n }\r\n\r\n route(route: string) {\r\n // Route to the appropriate location then close the modal\r\n switch (route) {\r\n case 'Assignments':\r\n this.assignmentService.selectedCourse = this.courseInfo;\r\n this.assignmentService.selectedSectionId = this.courseInfo.SiteSectionId;\r\n this.assignmentService.selectedGP = undefined;\r\n this.assignmentService.preventTabSwitch = true;\r\n if (!this.userService.studentInformationView)\r\n this.router.navigateByUrl('/student360/assignments');\r\n else\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n this.dialogRef.close();\r\n break;\r\n case 'Attendance':\r\n if (!this.userService.studentInformationView)\r\n this.router.navigateByUrl('/student360/attendance');\r\n else\r\n this.userService.updateStudentViewRoute('/student360/attendance');\r\n this.dialogRef.close();\r\n break;\r\n case 'Grades':\r\n if (!this.userService.studentInformationView)\r\n this.router.navigateByUrl('/student360/reportCardGrades');\r\n else\r\n this.userService.updateStudentViewRoute('/student360/reportCardGrades');\r\n this.dialogRef.close();\r\n break;\r\n case 'Email Teacher':\r\n this.sendEmailService.teacherName = this.courseInfo.TeacherName;\r\n this.sendEmailService.teacherEmailAddress = this.courseInfo.TeacherEmail;\r\n if (!this.userService.studentInformationView)\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n else\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n this.dialogRef.close();\r\n break;\r\n case 'Course Description':\r\n this.dialog.open(CourseDescriptionDialogComponent, {\r\n data: {\r\n course: this.courseInfo.Course,\r\n courseSection: this.courseInfo.SubjectCode + '-' + this.courseInfo.Section,\r\n teacherName: this.courseInfo.TeacherName,\r\n schoolName: this.courseInfo.SchoolName,\r\n curriculum: this.courseInfo.Curriculum,\r\n description: this.courseInfo.Description\r\n },\r\n disableClose: true\r\n });\r\n break;\r\n case 'Class Information':\r\n this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n courseSSEC_ID: this.courseInfo.Id,\r\n courseName: this.courseInfo.Course,\r\n courseSection: this.courseInfo.SubjectCode + '-' + this.courseInfo.Section,\r\n teacherName: this.courseInfo.TeacherName,\r\n school: this.courseInfo.SchoolName,\r\n profiles: this.courseInfo.CourseProfile,\r\n showTeacherProfileLink: false\r\n },\r\n disableClose: true\r\n });\r\n break;\r\n case 'Teacher Profile':\r\n this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: this.courseInfo.TeacherMemId,\r\n teacherName: this.courseInfo.TeacherName,\r\n school: this.courseInfo.SchoolName,\r\n profiles: this.courseInfo.TeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n break;\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n assignedDate(date: any) {\r\n if (date == '0001-01-01T00:00:00') {\r\n return '';\r\n } else {\r\n // Format the date and return it\r\n return moment(date, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY');\r\n }\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'districtEvent'\r\n})\r\nexport class DistrictEventPipe implements PipeTransform {\r\n\r\n transform(events: any[], args?: any): any {\r\n return events.filter(event => event.meta.eventType == 'districtEvent');\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n {{ day.date | calendarDate:'monthViewDayNumber':locale }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{event.title}}
\r\n
{{getTimeString(event)}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
{{dayEvent.event.start| date: 'shortTime'}} -\r\n {{dayEvent.event.end| date: 'shortTime'}}
\r\n
{{dayEvent.event.title}}
\r\n
\r\n
\r\n 0\" style=\"height: 15px; margin-top: 5px; margin-right: 5px;\"\r\n src=\"./assets/images/menumyclasses.png\" alt=\"\" />\r\n \"\"\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{getTimeString(dayEvent.event)}}\r\n
\r\n
\r\n {{dayEvent.event.title}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{dayEvent.event.title}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
{{weekEvent.event.start| date: 'shortTime'}} -\r\n {{weekEvent.event.end| date: 'shortTime'}}
\r\n
{{weekEvent.event.title}}
\r\n
\r\n
\r\n 0\" style=\"height: 15px; margin-top: 5px; margin-right: 5px;\"\r\n src=\"./assets/images/menumyclasses.png\" alt=\"\" />\r\n \"\"\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{getTimeString(weekEvent.event)}}\r\n
\r\n
\r\n {{weekEvent.event.title}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{weekEvent.event.title}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n {{ segment.date | calendarDate: 'dayViewHour':locale }}\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n {{ segment.date | calendarDate: 'weekViewHour':locale }}\r\n
\r\n
\r\n
\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 { Classroom360Service } from './../../classroom360/classroom360.service';\r\nimport { Portal } from './../../shared-components/portal.model';\r\nimport { Component, OnInit, ChangeDetectionStrategy, ViewChild, OnDestroy } from '@angular/core';\r\nimport { CalendarService } from './calendar.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport * as moment from 'moment';\r\nimport * as _ from 'lodash';\r\nimport { CalendarDayViewComponent, CalendarEvent } from 'angular-calendar';\r\nimport { Subject } from 'rxjs';\r\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CalendarEventModalComponent } from './calendar-event-modal/calendar-event-modal.component';\r\nimport { Student360Service } from '../student360.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { SharedGradebookService } from '../../classroom360/gradebook/shared/shared-gradebook.service';\r\n\r\n@Component({\r\n selector: 'app-calendar',\r\n templateUrl: './calendar.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./calendar.component.css']\r\n})\r\nexport class CalendarComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild(CalendarDayViewComponent) dayView;\r\n @ViewChild(CalendarHeaderComponent, { static: true }) calendarHeader;\r\n calendarEventDialogRef: MatDialogRef;\r\n view: any = 'day';\r\n viewDate: Date = new Date(); // Controls the view of the calendar\r\n events: CalendarEvent[] = [];\r\n refresh: Subject = new Subject();\r\n selectedDate: Date;\r\n currentDate: Date;\r\n attendanceCodes: any[];\r\n selectedMonth: string;\r\n selectedDay: number;\r\n selectedYear: number;\r\n dateIndex: number;\r\n selectedView: string;\r\n courses: any;\r\n studentId: number;\r\n studentCalendar: any[];\r\n scalePDF = 0.40;\r\n\r\n constructor(\r\n private activatedRoute: ActivatedRoute,\r\n private student360Service: Student360Service,\r\n private calendarService: CalendarService,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private router: Router, private userService: UserService,\r\n private loginService: LoginService,\r\n private sharedGradebookService: SharedGradebookService,\r\n private classroom360Service: Classroom360Service\r\n ) {\r\n if (!!this.student360Service.lastSelectedCalendarView) {\r\n this.selectedDate = this.student360Service.lastSelectedCalendarDate;\r\n } else {\r\n this.selectedDate = new Date();\r\n this.activatedRoute.queryParams.subscribe(params => {\r\n const selectedView = params['selectedView'];\r\n const selectedDate = params['selectedDate'];\r\n if (selectedView) {\r\n this.view = selectedView;\r\n }\r\n if (selectedDate) {\r\n this.selectedDate = new Date(selectedDate);\r\n this.viewDate = this.selectedDate;\r\n }\r\n });\r\n }\r\n this.currentDate = new Date();\r\n this.selectedDay = this.currentDate.getDate();\r\n this.selectedYear = this.selectedDate.getFullYear();\r\n this.studentId = this.studentService.selectedStudent.Id;\r\n this.getCalendarEvents();\r\n }\r\n\r\n ngOnInit() {\r\n if (!!this.student360Service.lastSelectedCalendarView) {\r\n this.view = this.student360Service.lastSelectedCalendarView;\r\n }\r\n if (!!this.student360Service.lastSelectedCalendarDate) {\r\n if (this.selectedDate == this.student360Service.lastSelectedCalendarDate) {\r\n this.viewDate = this.student360Service.lastSelectedCalendarDate;\r\n }\r\n }\r\n this.studentService.selectedStudentStream$.subscribe(student => {\r\n if (this.studentId != this.studentService.selectedStudent.Id) {\r\n this.studentId = this.studentService.selectedStudent.Id;\r\n this.getCalendarEvents();\r\n }\r\n });\r\n this.calendarHeader.viewChange.subscribe(res => {\r\n // Do view Change stuff\r\n const previousView = _.cloneDeep(this.student360Service.lastSelectedCalendarView);\r\n if (res == 'week' && previousView == 'month') { // If navigating from month view to week view\r\n // Select the first day in the current month\r\n this.viewDate = moment(this.viewDate).startOf('month').toDate();\r\n }\r\n if (res == 'day' && previousView == 'week') { // If navigating from week view to day view\r\n // Select the first day in the current week\r\n this.viewDate = moment(this.viewDate).startOf('week').add(1, 'day').toDate();\r\n }\r\n this.calendarHeader.viewDateChange.next(this.viewDate);\r\n this.student360Service.lastSelectedCalendarDate = this.viewDate;\r\n this.student360Service.lastSelectedCalendarView = this.view;\r\n switch (res) {\r\n case 'day':\r\n this.scalePDF = 0.60;\r\n break;\r\n case 'week':\r\n this.scalePDF = 0.25;\r\n break;\r\n case 'month':\r\n this.scalePDF = 0.40;\r\n break;\r\n }\r\n });\r\n this.calendarHeader.viewDateChange.subscribe(viewDate => {\r\n // Get the date of the first event in the studentCalendar\r\n const startDate = moment(this.studentCalendar[0].Id, 'YYYY/M/D');\r\n const endDate = moment(this.studentCalendar[this.studentCalendar.length - 1].Id, 'YYYY/M/D');\r\n // check if the new view date falls in this range\r\n const inRange = moment(viewDate).isBetween(startDate, endDate);\r\n this.student360Service.lastSelectedCalendarDate = this.viewDate;\r\n this.student360Service.lastSelectedCalendarView = this.view;\r\n this.selectedDate = viewDate;\r\n if (!inRange) {\r\n this.getCalendarEvents();\r\n } else if (this.view == 'month') {\r\n this.getCalendarEvents();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up\r\n }\r\n\r\n checkAttendance(dayEvent) {\r\n const event = dayEvent.event.meta.event;\r\n if (event.AttendanceId > 0) {\r\n if (event.AttendanceStatus == null || event.AttendanceStatus == 'Present') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n checkAttendanceEvents(day) {\r\n let hasAttendanceEntries = false;\r\n for (let i = 0; i < day.events.length; i++) {\r\n const eventOfInterest = day.events[i].meta;\r\n if (eventOfInterest.eventType == 'dailyScheduleEvent') {\r\n // Check if it has any attendance entries\r\n if (eventOfInterest.event.AttendanceId > 0 && (eventOfInterest.event.AttendanceStatus != null || eventOfInterest.event.AttendanceStatus != 'Present')) {\r\n hasAttendanceEntries = true;\r\n }\r\n }\r\n }\r\n return hasAttendanceEntries;\r\n }\r\n\r\n checkDisciplineEvents(day) {\r\n let hasDisciplineEvents = false;\r\n for (let i = 0; i < day.events.length; i++) {\r\n const eventOfInterest = day.events[i].meta;\r\n if (eventOfInterest.eventType == 'disciplineEvent') {\r\n hasDisciplineEvents = true;\r\n }\r\n }\r\n return hasDisciplineEvents;\r\n }\r\n\r\n checkAssignmentEvents(day) {\r\n let hasAssignmentEntries = false;\r\n for (let i = 0; i < day.events.length; i++) {\r\n const eventOfInterest = day.events[i].meta;\r\n if (eventOfInterest.eventType == 'dailyScheduleEvent') {\r\n // Check if it has any Assignment entries\r\n if (eventOfInterest.event.Assignments.length > 0) {\r\n hasAssignmentEntries = true;\r\n }\r\n }\r\n }\r\n return hasAssignmentEntries;\r\n }\r\n\r\n eventClicked({ event }: { event: CalendarEvent }): void {\r\n switch (event.meta.eventType) {\r\n case 'districtEvent':\r\n this.dialog.open(CalendarEventModalComponent, {\r\n minHeight: 300,\r\n minWidth: 500,\r\n data: event,\r\n autoFocus: false\r\n });\r\n break;\r\n case 'dailyScheduleEvent':\r\n if (this.loginService.LoginSettings.V10 == false) {\r\n // We need to always open the modal even if there are no assignments\r\n this.dialog.open(CalendarEventModalComponent, {\r\n minHeight: 400,\r\n minWidth: 750,\r\n maxWidth: 750,\r\n maxHeight: 400,\r\n autoFocus: false,\r\n data: event\r\n });\r\n } else {\r\n this.dialog.open(CalendarEventModalComponent, {\r\n minHeight: 400,\r\n minWidth: 750,\r\n maxWidth: 750,\r\n maxHeight: 400,\r\n autoFocus: false,\r\n data: event\r\n });\r\n }\r\n break;\r\n case 'disciplineEvent':\r\n this.router.navigateByUrl('/student360/behavior');\r\n break;\r\n }\r\n }\r\n\r\n setFlexDirection(dayEvent) {\r\n if (dayEvent.height < 55) {\r\n return 'eventFlexRow';\r\n } else {\r\n return 'eventFlexCol';\r\n }\r\n }\r\n\r\n setEventColor(dayEvent) {\r\n switch (dayEvent.event.meta.eventType) {\r\n case 'districtEvent':\r\n if (this.view == 'day') {\r\n return 'districtEvent';\r\n } else if (this.view == 'week') {\r\n return 'districtEventWeek';\r\n }\r\n break;\r\n case 'dailyScheduleEvent':\r\n return 'dailyScheduleEvent';\r\n case 'disciplineEvent':\r\n return 'disciplineEvent';\r\n }\r\n }\r\n\r\n checkForClasses(day) {\r\n const events = day.events;\r\n let dayHasClasses = false;\r\n events.forEach((event) => {\r\n if (event.meta.eventType == 'dailyScheduleEvent') {\r\n dayHasClasses = true;\r\n }\r\n });\r\n if (!dayHasClasses) {\r\n return 'noClasses';\r\n }\r\n }\r\n\r\n eventHasTimes(event) {\r\n const e = event.event.meta.event;\r\n if (e.StartTime || e.EndTime) {\r\n return true;\r\n }\r\n }\r\n\r\n getCalendarEvents() {\r\n this.events = [];\r\n this.studentCalendar = [];\r\n const month = this.selectedDate.getUTCMonth() + 1;\r\n const year = this.selectedDate.getUTCFullYear();\r\n this.calendarService.getCalendarEvents(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, this.userService.userId, year + '/' + month).subscribe(results => {\r\n this.studentCalendar = results;\r\n this.dateIndex = this.studentCalendar.findIndex(d => d.Id == moment(this.selectedDate, 'YYYY/M/D').format('YYYY/M/D'));\r\n // Add items from daily schedule if our school policy allows\r\n let portals: Portal[] = [];\r\n if (this.userService.userType == 1) {\r\n portals = this.classroom360Service.staffAssignedPortals;\r\n } else {\r\n portals = this.student360Service.parentAssignedPortals;\r\n }\r\n if (this.userService.userType == 1) { // If staff member\r\n // Filter out the portals based on group.\r\n const myStudentsGroup = portals.filter(p => p.GroupName == 'My Students');\r\n if (myStudentsGroup.length > 0) { // User is a teacher\r\n portals = myStudentsGroup;\r\n } else { // user is an admin\r\n portals = portals.filter(p => p.GroupName == 'Students');\r\n }\r\n }\r\n const studentSchedulePortal = portals.find((p) => p.PortalName == 'Student Schedule');\r\n if (studentSchedulePortal) {\r\n for (let i = 0; i < this.studentCalendar.length; i++) {\r\n for (let x = 0; x < this.studentCalendar[i].DailySchedule.length; x++) {\r\n const date = moment(this.studentCalendar[i].DailySchedule[x].Date);\r\n const startTime = moment(this.studentCalendar[i].DailySchedule[x].StartTime, ['h:mm A']);\r\n const endTime = moment(this.studentCalendar[i].DailySchedule[x].EndTime, ['h:mm A']);\r\n const day = this.studentCalendar.find(d => d.Id == this.studentCalendar[i].Id);\r\n const courseInfo = day.Courses.find(course => course.Id === this.studentCalendar[i].DailySchedule[x].Id);\r\n const assignmentsCourse = this.studentCalendar[i].Courses.filter(c => c.Id == this.studentCalendar[i].DailySchedule[x].Id)[0];\r\n if (assignmentsCourse != undefined && assignmentsCourse.CalendarAssignments != null && assignmentsCourse.CalendarAssignments.length > 0) {\r\n this.studentCalendar[i].DailySchedule[x].Assignments = assignmentsCourse.CalendarAssignments;\r\n }\r\n this.events.push({\r\n title: this.studentCalendar[i].DailySchedule[x].CourseName,\r\n start: moment(date).add(startTime.hour(), 'hour').add(startTime.minute(), 'minute').toDate(),\r\n end: moment(date).add(endTime.hour(), 'hour').add(endTime.minute(), 'minute').toDate(),\r\n id: this.studentCalendar[i].DailySchedule[x].Id,\r\n meta: {\r\n eventType: 'dailyScheduleEvent',\r\n event: this.studentCalendar[i].DailySchedule[x],\r\n courseInfo: courseInfo\r\n }\r\n });\r\n }\r\n }\r\n }\r\n // Add items from events\r\n for (let i = 0; i < this.studentCalendar.length; i++) {\r\n for (let x = 0; x < this.studentCalendar[i].Events.length; x++) {\r\n // Check for the event in the list of events to prevent duplication of multi day events\r\n const mEvent = this.events.find(ev => ev.id === this.studentCalendar[i].Events[x].Id && ev.title === this.studentCalendar[i].Events[x].Title);\r\n if (mEvent == undefined) {\r\n if (this.checkAllDayEvent(this.studentCalendar[i].Events[x])) {\r\n this.events.push({\r\n title: this.studentCalendar[i].Events[x].Title,\r\n start: moment(this.studentCalendar[i].Events[x].StartDate).toDate(),\r\n end: moment(this.studentCalendar[i].Events[x].EndDate).toDate(),\r\n id: this.studentCalendar[i].Events[x].Id,\r\n meta: { eventType: 'districtEvent', event: this.studentCalendar[i].Events[x] },\r\n allDay: true\r\n });\r\n } else {\r\n const startTime = moment(this.studentCalendar[i].Events[x].StartTime, ['hh:mm A']);\r\n const endTime = moment(this.studentCalendar[i].Events[x].EndTime, ['hh:mm A']);\r\n const startDate = moment(this.studentCalendar[i].Events[x].StartDate, 'YYYY-MM-DDTHH:mm:ss');\r\n const endDate = moment(this.studentCalendar[i].Events[x].EndDate, 'YYYY-MM-DDTHH:mm:ss');\r\n const start = moment(startDate).add(startTime.hour(), 'hour').add(startTime.minute(), 'minute').toDate();\r\n const end = moment(endDate).add(endTime.hour(), 'hour').add(endTime.minute(), 'minute').toDate();\r\n this.events.push({\r\n title: this.studentCalendar[i].Events[x].Title,\r\n start: start,\r\n end: end,\r\n id: this.studentCalendar[i].Events[x].Id,\r\n meta: { eventType: 'districtEvent', event: this.studentCalendar[i].Events[x] },\r\n allDay: false\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // Add items from Discipline\r\n for (let i = 0; i < this.studentCalendar.length; i++) {\r\n for (let x = 0; x < this.studentCalendar[i].Discipline.length; x++) {\r\n this.events.push({\r\n title: this.studentCalendar[i].Discipline[x].Incident,\r\n start: moment(this.studentCalendar[i].Discipline[x].DateTime).toDate(),\r\n meta: { eventType: 'disciplineEvent', event: this.studentCalendar[i].Discipline[x] }\r\n });\r\n }\r\n }\r\n this.refresh.next();\r\n });\r\n }\r\n\r\n getTimeString(event) {\r\n let startTime = '';\r\n let endTime = '';\r\n if (event.meta.event.StartTime) { // If there is a start time\r\n startTime = moment(event.meta.event.StartTime, 'hh:mm A').format('h:mm A').toString();\r\n }\r\n if (event.meta.event.EndTime) { // If there is an end time\r\n endTime = moment(event.meta.event.EndTime, 'hh:mm A').format('h:mm A').toString();\r\n }\r\n if (!startTime && !endTime) { // No Start or End Time\r\n return '';\r\n }\r\n if (!startTime && endTime) { // No Start Time\r\n return 'Until ' + endTime;\r\n }\r\n if (startTime && !endTime) { // No End Time\r\n return startTime;\r\n }\r\n if (startTime && endTime) { // Start Time and End Time\r\n return startTime + ' - ' + endTime;\r\n }\r\n }\r\n\r\n checkAllDayEvent(event): boolean {\r\n // An All day event will display at the top of the calendar\r\n // If an event has a start time and an end time it is not an all day event\r\n // If an event spans multiple days then it is an all day event\r\n if (event.StartTime && event.EndTime && moment(event.StartDate).isSame(event.EndDate, 'day')) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n allDayEvent(event) {\r\n if (event.event.allDay) {\r\n return 'all-day-district-event';\r\n } else {\r\n return 'day-district-event';\r\n }\r\n }\r\n\r\n setFontSize(event, tag) {\r\n const startTime = event.start;\r\n const endTime = event.end;\r\n const d = moment.utc(moment(endTime, 'DD/MM/YYYY HH:mm:ss').diff(moment(startTime, 'DD/MM/YYYY HH:mm:ss'))).format('HH:mm:ss');\r\n if (moment.duration(d).asMinutes() <= 15) {\r\n if (tag == 'time') {\r\n return 'small-event-time-text';\r\n } else if (tag == 'title') {\r\n return 'small-event-title-text';\r\n }\r\n }\r\n }\r\n\r\n checkDayForClasses(date: any, timeSegment: boolean) {\r\n // Look through the student calendar for the date\r\n const doi = moment(date.date).format('YYYY/M/D');\r\n const day = this.studentCalendar.find(d => d.Id == doi);\r\n // If we find a the date check for classes\r\n if (day) {\r\n if (day.DailySchedule.length == 0 && !timeSegment) {\r\n return 'noClasses';\r\n }\r\n }\r\n }\r\n\r\n log(obj: any) {\r\n console.log(obj);\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {System} from '../../shared-components/System';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {CourseTerm} from '../student-schedule/course-term.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CalendarService {\r\n\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getCalendarEvents(studentId, yearId, userId, startDate): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCalendarEvents?studentId=${studentId}&yearId=${yearId}&userId=${userId}&startDate=${startDate}`);\r\n }\r\n\r\n getTermsForCourses(termDefinitionId: number, siteYearId: number): Observable {\r\n return this.http.get(System.apiURL.Counselor + 'GetTermsForCourses?termDefinitionId=' + termDefinitionId + '&siteYearId=' + siteYearId);\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n
No Behavior\r\n data exists for student.
\r\n \r\n
0\">\r\n \r\n ]\r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n ]\r\n Incident Date/Time\r\n \r\n \r\n \r\n \r\n {{discipline.DateTime | date: 'MM/dd/yy h:mm a'}}\r\n \r\n ]\r\n Incident\r\n \r\n \r\n \r\n \r\n {{discipline.Incident}}\r\n \r\n ]\r\n Involvement\r\n \r\n \r\n \r\n \r\n {{discipline.Involvement | incidentType}}\r\n \r\n \r\n Action\r\n \r\n \r\n \r\n {{discipline.Action}}\r\n \r\n \r\n Action Date\r\n \r\n \r\n \r\n \r\n {{discipline.ActionDate | date:\r\n 'MM/dd/yy'}}\r\n \r\n \r\n \r\n Days\r\n \r\n \r\n \r\n {{discipline.Days}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Event ID{{discipline.Event}}\r\n Reported To Police{{discipline.ReportedToPolice}}
Location\r\n {{discipline.Location}}Entered by{{discipline.ReportedBy}}
Involving Others{{discipline.InvolvingOthers}}
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Event\r\n Comments\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Incident\r\n Comments\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n Action\r\n Comments\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\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, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { Discipline } from '../../shared-components/student/discipline.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\n\r\n// -------Angular Material------------------------------------\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { ReportV9 } from '../../shared-modules/reporting/models/report-v9.model';\r\nimport { ReportQueueComponent } from '../../shared-modules/reporting/report-queue/report-queue.component';\r\nimport { ReportingService } from '../../shared-modules/reporting/reporting.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'discipline',\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './discipline.component.html',\r\n styleUrls: ['./discipline.component.css'],\r\n animations: [detailExpand],\r\n})\r\nexport class DisciplineComponent implements OnInit, OnDestroy {\r\n\r\n // ------------Academic History Data---------------------------\r\n student360YearSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n disciplines: Discipline[] = [];\r\n // ------------Selection/Flags-----------------------------------\r\n selected = '0';\r\n isBusy = false;\r\n useDisciplineEventModel: boolean;\r\n parentPortalDisciplineShowComments: boolean;\r\n isStaffMember = false;\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay: string[] = ['More', 'DateTime', 'Incident', 'Involvement', 'Action', 'ActionDate', 'Days'];\r\n initialSelection = [];\r\n allowMultiSelect = true;\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n\r\n // --------------LifeCycle---------------------------------------\r\n\r\n constructor(private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private reportService: ReportingService,\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n studentYear => {\r\n this.getStudentDiscipline();\r\n }\r\n );\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.disciplines);\r\n this.isStaffMember = this.userService.userType == 1;\r\n this.useDisciplineEventModel = this.loginService.LoginSettings.UseDisciplineEventModel;\r\n this.parentPortalDisciplineShowComments = this.loginService.LoginSettings.ParentPortalDisciplineShowComments;\r\n // ONE-5840\r\n // ONE-6659 12/19/19 Comments are NOT to be displayed on Parent & Student Portal.\r\n if (this.isStaffMember) {\r\n this.parentPortalDisciplineShowComments = true;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n // ------------Student Discipline Data---------------------------\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.getStudentDiscipline();\r\n }\r\n\r\n getStudentDiscipline() {\r\n this.isBusy = true;\r\n\r\n this.angularMatData.data = [];\r\n setTimeout(() => {\r\n this.studentService.getStudentDiscipline(this.selectedStudent.Id, this.yearService.student360Year.Id, this.userService.userId).subscribe(data => {\r\n this.disciplines = data;\r\n this.disciplines.forEach(element => {\r\n element.BehaviorLetter = element.BehaviorLetterId && element.BehaviorLetterId > 0 ? true : false;\r\n });\r\n this.loadStudentDiscipline();\r\n });\r\n }, 0);\r\n }\r\n\r\n private loadStudentDiscipline(): void {\r\n\r\n this.angularMatData.data = this.disciplines;\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: Discipline): string {\r\n const colList: string[] = ['Date/Time',\r\n 'Incident',\r\n 'Involvement',\r\n 'Action',\r\n 'Action Date',\r\n 'Days'];\r\n\r\n const dataList: string[] = [row.DateTime.toString(),\r\n row.Incident,\r\n row.Involvement,\r\n row.Action,\r\n ((row.ActionDate.toString() != '0001-01-01T00:00:00') ? new Date(row.ActionDate).toDateString() : ''),\r\n (row.Days != 0 ? row.Days.toString() : '')];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + ' Expand for more details';\r\n }\r\n\r\n getAriaDetailRow(row: Discipline): string {\r\n const colList: string[] = ['Event',\r\n 'Location',\r\n 'Involving Others',\r\n 'Reported To Police',\r\n 'Reported by'];\r\n\r\n const dataList: string[] = [row.Event,\r\n row.Location,\r\n row.InvolvingOthers,\r\n row.ReportedToPolice,\r\n row.ReportedBy];\r\n\r\n if (this.parentPortalDisciplineShowComments) {\r\n if (row.EventComments != null && row.EventComments != '') {\r\n colList.push('Event Comment');\r\n dataList.push(row.EventComments);\r\n }\r\n if (row.ActionComments != null && row.ActionComments != '') {\r\n colList.push('Action Comment');\r\n dataList.push(row.ActionComments);\r\n }\r\n if (row.IncidentComments != null && row.IncidentComments != '') {\r\n colList.push('Incident Comment');\r\n dataList.push(row.IncidentComments);\r\n }\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n printReport() {\r\n this.reportService.getV9Reports('Behavior').subscribe(reports => {\r\n const behavioReports: ReportV9[] = reports;\r\n const createProfileReport = behavioReports.find(x => x.ReportName === 'CreateProfileReport');\r\n // Set Default Values to Parameters\r\n if (createProfileReport) {\r\n createProfileReport.StudentIds = this.selectedStudent.Id.toString();\r\n this.reportService.getV9ReportParameters(createProfileReport.Id, 0, 0).subscribe(parameters => {\r\n createProfileReport.ReportParameters = parameters;\r\n if (this.yearService.student360Year.StartDate && this.yearService.student360Year.EndDate) {\r\n createProfileReport.ReportParameters.find(x => x.ParameterName === 'datIncidentDateFrom').Value = this.yearService.student360Year.StartDate;\r\n createProfileReport.ReportParameters.find(x => x.ParameterName === 'datIncidentDateTo').Value = this.yearService.student360Year.EndDate;\r\n }\r\n else {\r\n createProfileReport.ReportParameters.find(x => x.ParameterName === 'blnIncidentDate').Value = false;\r\n createProfileReport.ReportParameters.find(x => x.ParameterName === 'strIncidentsIDs').Value = '-1';\r\n }\r\n\r\n this.reportService.runV9ReportByParameter(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id, 0, 0, createProfileReport).subscribe(result => {\r\n const reportQueueDialogRef = this.dialog.open(ReportQueueComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n });\r\n });\r\n }\r\n });\r\n }\r\n}\r\n","

Select Student

\r\n\r\n
{{selectedForm.InstanceName | translate}}
\r\n
For which student are you submitting this e-Form?
\r\n\r\n \r\n {{student.FirstName}} {{student.LastName}}\r\n \r\n\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { EForm } from '../../../shared-components/e-forms/e-form.model';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport * as _ from 'lodash';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'app-e-form-select-student-dialog',\r\n templateUrl: './e-form-select-student-dialog.component.html',\r\n styleUrls: ['./e-form-select-student-dialog.component.css']\r\n})\r\nexport class EFormSelectStudentDialogComponent implements OnInit, OnDestroy {\r\n\r\n selectedForm: EForm;\r\n formStudents: Student[] = [];\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n @ViewChild('refStudent', { read: ElementRef, static: true }) refStudent: ElementRef;\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private eFormService: EFormService,\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService\r\n ) {\r\n this.selectedForm = _.cloneDeep(data.Form);\r\n this.formStudents = data.Students;\r\n }\r\n\r\n ngOnInit() {\r\n this.formStudents = this.formStudents.filter( student => \r\n this.studentService.students.findIndex( s => s.Id == student.Id) != -1\r\n );\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n nextClick() {\r\n this.validate();\r\n if (this.errors.length == 0) { \r\n if(!this.loginService.LoginSettings.V10){\r\n this.selectedForm.Family_ID = this.formStudents.filter(o=>o.Id == this.selectedForm.Student_ID)[0].FamilyId;\r\n }\r\n this.dialogRef.close(this.selectedForm);\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n if (!this.selectedForm.Student_ID || this.selectedForm.Student_ID <= 0) {\r\n this.errors.push({\r\n fieldName: 'Student',\r\n fieldRef: this.refStudent,\r\n errorMsg: 'is required.'\r\n });\r\n }\r\n }\r\n\r\n}\r\n","

\r\n Re-Opened Form\r\n Unfinished Version Exists\r\n

\r\n\r\n
\r\n
{{selectedForm.InstanceName | tylTranslate}}
\r\n
\r\n An unfinished version of this e-Form exists. It was last updated on \r\n {{lastUpdatedOn | date:'MM/dd/yy'}}\r\n by \r\n {{lastUpdatedBy}}\r\n
\r\n
\r\n This form was submitted on\r\n {{lastUpdatedOn | date:'MM/dd/yy'}}\r\n by \r\n {{lastUpdatedBy}}\r\n , but has now been re-opened.\r\n
\r\n
\r\n Do you want to continue with the unfinished version or abandon it and start over?\r\n Do you want to continue with the original form or abandon it and start over?\r\n
\r\n
\r\n \r\n
\r\n Start Over\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { EForm } from '../../../shared-components/e-forms/e-form.model';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport * as _ from 'lodash';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-unfinished-dialog',\r\n templateUrl: './e-form-unfinished-dialog.component.html'//,\r\n //styleUrls: ['./e-form-unfinished-dialog.component.css']\r\n})\r\nexport class EFormUnfinishedDialogComponent implements OnInit, OnDestroy {\r\n\r\n selectedForm: EForm;\r\n lastUpdatedOn: Date;\r\n lastUpdatedBy: string;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private eFormService: EFormService,\r\n private loginService : LoginService,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n this.selectedForm = _.cloneDeep(data.Form);\r\n }\r\n\r\n ngOnInit() {\r\n if(this.selectedForm.LastUpdatedOn) {\r\n this.lastUpdatedOn = this.selectedForm.LastUpdatedOn; \r\n this.lastUpdatedBy = this.selectedForm.LastUpdatedByName;\r\n }\r\n else {\r\n this.lastUpdatedOn = this.selectedForm.CreatedOn;\r\n this.lastUpdatedBy = this.selectedForm.CreatedByName;\r\n }\r\n // if(!this.lastUpdatedBy && !this.loginService.LoginSettings.V10){\r\n // this.lastUpdatedBy = this.selectedForm.SubmittedName;\r\n // }\r\n }\r\n\r\n continue() {\r\n this.dialogRef.close('Continue');\r\n }\r\n\r\n startOver() {\r\n this.dialogRef.close('StartOver');\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { EFormService } from '../../../shared-components/e-forms/e-form.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-critical-message-dialog',\r\n templateUrl: './e-form-critical-message-dialog.component.html',\r\n styleUrls: ['./e-form-critical-message-dialog.component.css']\r\n})\r\nexport class EFormCriticalMessageDialogComponent implements OnInit, OnDestroy {\r\n\r\n message: string = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private eFormService: EFormService,\r\n private loginService : LoginService,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n this.message = data.message;\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","

ATTENTION

\r\n\r\n \r\n \r\n\r\n\r\n \r\n \r\n","

Select Year

\r\n\r\n
{{selectedForm.InstanceName | translate}}
\r\n
For which year are you submitting this e-Form?
\r\n\r\n \r\n {{year.Description}}\r\n \r\n\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, OnDestroy, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { EForm } from '../../../shared-components/e-forms/e-form.model';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport * as _ from 'lodash';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport * as moment from 'moment';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-e-form-select-year-dialog',\r\n templateUrl: './e-form-select-year-dialog.component.html',\r\n styleUrls: ['./e-form-select-year-dialog.component.css']\r\n})\r\nexport class EFormSelectYearDialogComponent implements OnInit, OnDestroy {\r\n\r\n selectedForm: EForm;\r\n formStudents: Student[] = [];\r\n errors: ErrorList[] = [];\r\n subscriptions: Subscription[] = [];\r\n @ViewChild('refStudent', { read: ElementRef, static: true }) refStudent: ElementRef;\r\n\r\n selectedYear: Year;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n @Inject(MAT_DIALOG_DATA) public years: Year[],\r\n private yearService: YearService,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n ) {\r\n this.selectedForm = _.cloneDeep(data.Form);\r\n this.years = data.years;\r\n }\r\n\r\n ngOnInit() {\r\n this.selectedYear = _.cloneDeep(this.yearService.defaultYear);\r\n\r\n }\r\n\r\n ngOnDestroy() { }\r\n\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n nextClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.selectedForm.AYIdentifier = this.selectedYear.AYIdentifier;\r\n }\r\n else {\r\n this.selectedForm.Year_ID = this.selectedYear.Id;\r\n }\r\n this.dialogRef.close(this.selectedForm);\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n // if (!this.selectedForm.Student_ID || this.selectedForm.Student_ID <= 0) {\r\n // this.errors.push({\r\n // fieldName: 'Student',\r\n // fieldRef: this.refStudent,\r\n // errorMsg: 'is required.'\r\n // });\r\n // }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Year } from '../year/year.model';\r\nimport { YearService } from '../year/year.service';\r\n\r\n@Pipe({\r\n name: 'yearDescription'\r\n})\r\nexport class YearDescriptionPipe implements PipeTransform {\r\n\r\n constructor(private yearService: YearService) { }\r\n\r\n transform(yearId: number, args?: string[]): any {\r\n\r\n let year: Year = this.yearService.allYears.find(year => year.Id == yearId);\r\n\r\n return year ? year.Description : '';\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n There are no required e-Forms to be submitted.\r\n There are no optional e-Forms available.\r\n
\r\n 0\" [dataSource]=\"dataSource\" matSortDisableClear matSort id=\"tblEFormInstances\" matSortActive=\"InstanceName\"\r\n matSortDirection=\"asc\" style=\"min-width: 900px;\">\r\n \r\n \r\n Year\r\n \r\n \r\n \r\n Multiple\r\n 0)) && V10\">{{element.AYIdentifier}}\r\n 0)) && !V10\">{{element.Year_ID | yearDescription}} \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n \r\n \r\n \r\n {{element.InstanceName | tylTranslate}} \r\n  - {{currentDateString}}\r\n 0 && element.CompletionDue && element.CompletionDueOption == 'OncePer' && V10\" translate> - {{element.SubmittedDate | date: 'MM/dd/yy'}}\r\n 0 && element.CompletionDue && element.CompletionDueOption == 'OncePer' && !V10\" translate> - {{element.SubmittedOn | date: 'MM/dd/yy'}}\r\n \r\n  [Create new] \r\n \r\n \r\n \r\n \r\n Type\r\n \r\n \r\n \r\n Family\r\n Student\r\n \r\n \r\n \r\n \r\n Student\r\n \r\n \r\n \r\n {{element.Student}}\r\n
\r\n
{{student}}
\r\n
\r\n
\r\n
\r\n \r\n \r\n Deadline\r\n \r\n \r\n \r\n \r\n {{element.DueDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n Due Now\r\n \r\n \r\n \r\n \r\n \r\n Submitted\r\n \r\n \r\n \r\n {{element.SubmittedDate | date: 'MM/dd/yy'}} \r\n \r\n \r\n \r\n \r\n \r\n Submitted\r\n \r\n \r\n \r\n {{element.SubmittedOn | date: 'MM/dd/yy'}} \r\n \r\n \r\n \r\n \r\n Submitted By\r\n \r\n \r\n \r\n \r\n {{element.SubmittedName}} \r\n \r\n \r\n \r\n \r\n Status\r\n \r\n \r\n \r\n {{element.Status}}\r\n \r\n \r\n\r\n \r\n \r\n id=\"tblEFormCategoriesDataRow{{i}}\" tabindex=\"0\">\r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n","import { Component, OnInit, ViewChild, EventEmitter, AfterViewInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { Subscription } from 'rxjs';\r\nimport { EFormService } from '../../shared-components/e-forms/e-form.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { TabsComponent } from '../../shared-components/controls/tabs/tabs.component';\r\nimport { EFormDataObject } from '../../shared-components/e-forms/e-formDataObject.model';\r\nimport { EForm } from '../../shared-components/e-forms/e-form.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport * as moment from 'moment';\r\nimport { EFormSelectStudentDialogComponent } from './e-form-select-student-dialog/e-form-select-student-dialog.component';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport * as _ from 'lodash';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { EFormUnfinishedDialogComponent } from './e-form-unfinished-dialog/e-form-unfinished-dialog.component';\r\nimport { EFormConfiguration, enmEFormViewModes } from '../../shared-components/e-forms/e-form-config.model';\r\nimport { EFormViewerModalComponent } from '../../shared-components/e-forms/e-form-viewer/e-form-viewer-modal/e-form-viewer-modal.component';\r\nimport { System } from '../../shared-components/System';\r\nimport { EFormCriticalMessageDialogComponent } from './e-form-critical-message-dialog/e-form-critical-message-dialog.component';\r\nimport { UserPermission } from '../../shared-components/user/user-permission.model';\r\nimport { PermissionEnum } from '../../shared-components/security/permissions.enums';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { EFormSelectYearDialogComponent } from './e-form-select-year-dialog/e-form-select-year-dialog.component';\r\nimport { Year } from '../../shared-components/year/year.model';\r\n\r\n@Component({\r\n selector: 'e-forms',\r\n templateUrl: './e-forms.component.html',\r\n styleUrls: ['./e-forms.component.scss'],\r\n animations: [detailExpand],\r\n})\r\nexport class EFormsComponent implements OnInit, AfterViewInit {\r\n\r\n // @ViewChild(MatSort) sort: MatSort;\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) set matSort(sort: MatSort) { this.dataSource.sort = sort; }\r\n columnsToDisplay = ['Year', 'InstanceName', 'TemplateType', 'Student', 'DueDate', 'SubmittedDate', 'SubmittedName', 'Status'];\r\n subscriptions: Subscription[] = [];\r\n showCompleted: boolean;\r\n pastYear: boolean;\r\n V10: boolean;\r\n currentDateString: string;\r\n staffPage = false;\r\n eFormPermissions: UserPermission[] = [];\r\n showYearSelector = true;\r\n years: Year[] = [];\r\n\r\n eForms: EForm[];\r\n filteredEForms: EForm[];\r\n\r\n tabNames: string[] = ['REQUIRED', 'OPTIONAL'];\r\n selectionIndex = 0;\r\n reSelectStudent: boolean;\r\n userType: number;\r\n holdReqTabFilters: any[];\r\n holdOptTabFilters: any[];\r\n setIndex = new EventEmitter();\r\n @ViewChild(TabsComponent, { static: true }) tabs: TabsComponent;\r\n\r\n constructor(\r\n private eFormService: EFormService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private router: Router,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private route: ActivatedRoute,\r\n private studentService: StudentService\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n if (!this.V10) {\r\n this.columnsToDisplay = ['Year', 'InstanceName', 'TemplateType', 'Student', 'DueDate', 'SubmittedOn', 'SubmittedName', 'Status'];\r\n }\r\n this.currentDateString = moment().format('MM/DD/YY');\r\n this.staffPage = this.route.snapshot.paramMap.get('staffPage') == ':staffPage';\r\n\r\n if (this.userService.userType == 1) {\r\n this.getEFormPermissions();\r\n this.showYearSelector = false;\r\n }\r\n else {\r\n this.getEForms();\r\n }\r\n\r\n this.subscriptions.push(\r\n this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getEForms();\r\n }),\r\n );\r\n // ************ When selected student will change ************\r\n this.subscriptions.push(this.studentService.observableStudentEnrollmentStream$.subscribe(enrollment => {\r\n if (enrollment) {\r\n // this.studentService.selectedStudent.Id = enrollment.StudentId;\r\n if (this.reSelectStudent) {\r\n this.getEForms();\r\n }\r\n }\r\n }));\r\n // ************ ********************************** ************\r\n\r\n if (this.staffPage) {\r\n this.removeElement(this.columnsToDisplay, 'TemplateType');\r\n this.removeElement(this.columnsToDisplay, 'Student');\r\n this.showYearSelector = false;\r\n }\r\n\r\n this.dataSource.sortingDataAccessor = (eForm: EForm, property: string) => {\r\n switch (property) {\r\n case 'InstanceName':\r\n if (eForm.AllowMultiple && eForm.ID != 0) {\r\n return (eForm.InstanceName + ' ').toLocaleLowerCase();\r\n }\r\n else {\r\n return eForm.InstanceName.toLocaleLowerCase();\r\n }\r\n case 'Status':\r\n return (eForm.Status).toLocaleLowerCase();\r\n case 'Year':\r\n if (this.V10) {\r\n return eForm.AYIdentifier ? (eForm.AYIdentifier).toLocaleLowerCase() : '';\r\n }\r\n else {\r\n let year: Year = this.yearService.allYears.find(year => year.Id == eForm.Year_ID);\r\n return (eForm.ShowInAllYears == true && !eForm.ID) ? 'Multiple' : (year ? year.Description : '');\r\n }\r\n default:\r\n // return eForm[property];\r\n if (eForm[property] || eForm[property] == '') {\r\n return this.dataSource.defaultSortingAccessor(eForm, property);\r\n }\r\n }\r\n };\r\n this.userType = this.userService.userType;\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.eFormService.initialS360eFormTab != '') {\r\n if (this.eFormService.initialS360eFormTab == 'optional') {\r\n const tabIndex = this.tabNames.indexOf('OPTIONAL');\r\n this.setIndex.emit(tabIndex);\r\n }\r\n\r\n this.eFormService.initialS360eFormTab = '';\r\n // this.dataSource.sort = this.sort;\r\n }\r\n }\r\n\r\n getEForms() {\r\n this.reSelectStudent = true;\r\n\r\n if (this.staffPage) {\r\n this.eFormService.getStaffUserEformsByLoginId().subscribe(result => {\r\n this.eForms = result;\r\n if (!this.V10) {\r\n for (let i = 0; i < this.eForms.length; i++) {\r\n if (!this.eForms[i].ID || this.eForms[i].ID == 0) {\r\n this.eForms[i].Status = '';\r\n }\r\n }\r\n }\r\n this.loadTable();\r\n });\r\n }\r\n else {\r\n this.eFormService.getStudentParentEforms().subscribe(result => {\r\n this.eForms = result;\r\n if (!this.V10) {\r\n for (let i = 0; i < this.eForms.length; i++) {\r\n if (!this.eForms[i].ID || this.eForms[i].ID == 0) {\r\n this.eForms[i].Status = '';\r\n }\r\n }\r\n }\r\n this.loadTable();\r\n });\r\n }\r\n }\r\n\r\n tabChange(e: any) {\r\n\r\n }\r\n\r\n getEFormPermissions() {\r\n this.eFormPermissions = this.eFormService.eFormPermissions;\r\n if (!this.eFormPermissions || this.eFormPermissions.length == 0) {\r\n this.subscriptions.push(this.eFormService.getEformPermissions(this.yearService.defaultYear.Id).subscribe(result => {\r\n this.eFormPermissions = result;\r\n this.eFormService.eFormPermissions = result;\r\n this.getEForms();\r\n }));\r\n }\r\n else {\r\n this.getEForms();\r\n }\r\n }\r\n\r\n loadTable() {\r\n this.filteredEForms = this.eForms;\r\n if (this.filteredEForms) {\r\n if (this.userService.userType != 1 || (!this.staffPage && this.eFormPermissions.find(o => o.PrivilegeId == PermissionEnum.eFormCompleteAllStudentForms) == null)) {\r\n\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n // Students\r\n ((eForm.StudentsCanComplete) && this.userService.userType == 3) ||\r\n // Parents\r\n ((eForm.ParentsCanComplete) && this.userService.userType == 2) ||\r\n // Staff\r\n ((eForm.StaffCanComplete || (eForm.TemplateType != null && eForm.TemplateType.toLowerCase() == 'staff')) && this.userService.userType == 1)\r\n );\r\n }\r\n\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n ((eForm.Required && this.selectionIndex == 0) || // required tab selected\r\n (!eForm.Required && this.selectionIndex == 1)) // optional tab selected\r\n );\r\n\r\n\r\n if (!this.showCompleted) {\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n (eForm.Status != null && eForm.Status.toLowerCase() != 'complete') // hide completed when checkbox not checked\r\n );\r\n\r\n if (!this.V10) {\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n ((eForm.IsInstanceActive != null && eForm.IsInstanceActive.toLowerCase() == 'active') || (eForm.Status != null && eForm.Status.toLowerCase() == 'accepted')) // Push only active Instances when checkbox not checked\r\n );\r\n }\r\n }\r\n else if (!this.V10) {\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n ((eForm.IsInstanceActive != null && eForm.IsInstanceActive.toLowerCase() == 'active') || (eForm.Status != null && eForm.Status.toLowerCase() == 'complete') || (eForm.Status != null && eForm.Status.toLowerCase() == 'accepted')) // Push only active Instances when checkbox not checked\r\n );\r\n }\r\n\r\n if (this.pastYear && this.yearService.student360Year.Status != 2) {\r\n // if (this.yearService.student360Year.Status == 2 && !this.V10) {\r\n // this.dataSource.data = this.filteredEForms;\r\n // }\r\n // else {\r\n this.filteredEForms = this.filteredEForms.filter(eForm =>\r\n ((eForm.Status != null && eForm.Status.toLowerCase() != 'not submitted') // hide not submitted when past year selected in year drop down\r\n && eForm.Status != ''\r\n && eForm.Status.toLocaleLowerCase() != 'rejected'\r\n ) && (!eForm.AllowMultiple || eForm.ID != 0) // hide Multi Use forms when past year selected in year drop down\r\n );\r\n // }\r\n\r\n this.dataSource.data = this.filteredEForms;\r\n }\r\n else {\r\n let tempFilteredEForms = this.filteredEForms;\r\n tempFilteredEForms = [];\r\n\r\n for (let n = 0; n < this.filteredEForms.length; n++) {\r\n const CurrentDate: Date = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());\r\n const StartDate: Date = new Date(new Date(this.filteredEForms[n].StartDate).getFullYear(), new Date(this.filteredEForms[n].StartDate).getMonth(), new Date(this.filteredEForms[n].StartDate).getDate());\r\n const EndDate: Date = new Date(new Date(this.filteredEForms[n].EndDate).getFullYear(), new Date(this.filteredEForms[n].EndDate).getMonth(), new Date(this.filteredEForms[n].EndDate).getDate());\r\n let flag = 0;\r\n if ((this.filteredEForms[n].StartDate == undefined || this.filteredEForms[n].StartDate == null\r\n || CurrentDate >= StartDate)\r\n && (this.filteredEForms[n].EndDate == undefined\r\n || this.filteredEForms[n].EndDate == null\r\n || CurrentDate <= EndDate)) {\r\n flag++;\r\n }\r\n if (this.statusDateOverrideCheck(this.filteredEForms[n].Status) || flag > 0) {\r\n tempFilteredEForms.push(this.filteredEForms[n]);\r\n }\r\n }\r\n if (tempFilteredEForms.length) {\r\n this.filteredEForms = tempFilteredEForms;\r\n this.dataSource.data = this.filteredEForms;\r\n }\r\n else {\r\n this.dataSource.data = [];\r\n }\r\n if (!this.V10) {\r\n if (this.selectionIndex == 0 && this.holdReqTabFilters && this.holdReqTabFilters.length > 0) {\r\n this.dataSource.filters = this.holdReqTabFilters;\r\n }\r\n if (this.selectionIndex == 1 && this.holdOptTabFilters && this.holdOptTabFilters.length > 0) {\r\n this.dataSource.filters = this.holdOptTabFilters;\r\n }\r\n }\r\n }\r\n // this.dataSource.data = this.filteredEForms;\r\n }\r\n }\r\n\r\n statusDateOverrideCheck(status: string): boolean {\r\n switch (status != null && status.toLowerCase()) {\r\n case 'approved':\r\n case 'rejected':\r\n case 'complete':\r\n case 'completed':\r\n case 'deleted': {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n selectionChange(selectionIndex: number) {\r\n if (this.selectionIndex == 0) {\r\n this.holdReqTabFilters = _.cloneDeep(this.dataSource.filters);\r\n }\r\n if (this.selectionIndex == 1) {\r\n this.holdOptTabFilters = _.cloneDeep(this.dataSource.filters);\r\n }\r\n this.dataSource.filters = [];\r\n this.selectionIndex = selectionIndex;\r\n this.loadTable();\r\n }\r\n\r\n showCompletedChange() {\r\n setTimeout(() => {\r\n this.loadTable();\r\n }, 0);\r\n }\r\n\r\n dueDateCheck(row: EForm): string {\r\n let highlight = '';\r\n\r\n if (row.CompletionDue && ((row.Status == '' && row.ID == 0) || (row.Status != null && row.Status.toLowerCase() == 'not submitted') || (row.Status != null && row.Status.toLowerCase() == 'rejected'))) {\r\n\r\n switch (row.CompletionDueOption != null && row.CompletionDueOption.toLowerCase()) {\r\n case 'dueby':\r\n if (row.DueDate) {\r\n const dueDate: moment.Moment = moment(row.DueDate);\r\n\r\n if (dueDate.isBefore(moment.now())) {\r\n highlight = 'red-bold-due';\r\n }\r\n else if (dueDate.subtract(3, 'days').isBefore(moment.now())) {\r\n highlight = 'red-due';\r\n }\r\n else if (dueDate.subtract(7, 'days').isBefore(moment.now())) {\r\n highlight = 'orange-due';\r\n }\r\n }\r\n break;\r\n case 'onceper':\r\n if (row.Frequency != null && row.Frequency.toLowerCase() == 'day' && row.Required) {\r\n highlight = 'red-bold-due';\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return highlight;\r\n }\r\n\r\n pastDueCheck(row: EForm): boolean {\r\n let result = false;\r\n\r\n if (row.CompletionDue && row.CompletionDueOption && ((row.Status == '' && row.ID == 0) || (row.Status != null && row.Status.toLowerCase() == 'not submitted') || (row.Status != null && row.Status.toLowerCase() == 'rejected'))) {\r\n\r\n switch (row.CompletionDueOption != null && row.CompletionDueOption.toLowerCase()) {\r\n case 'dueby':\r\n if (row.DueDate) {\r\n const dueDate: moment.Moment = moment(row.DueDate);\r\n\r\n result = dueDate.isBefore(moment.now());\r\n }\r\n break;\r\n case 'onceper':\r\n if (row.Frequency != null && row.Frequency.toLowerCase() == 'day' && row.Required) {\r\n result = true;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n formClick(eForm: EForm) {\r\n if (!this.V10 && eForm.Non_English && eForm.Status != null && eForm.Status.toLowerCase() != 'not submitted') {\r\n this.getFormDataByInstanceId('View - Translated', eForm);\r\n } else {\r\n this.eFormService.populateFormData(eForm).subscribe((populatedEForm: EForm) => {\r\n if (populatedEForm) {\r\n eForm = populatedEForm;\r\n }\r\n eForm.FormData = eForm.FormData.replace('< {\r\n let distinctStudents: Student[] = [];\r\n\r\n if (students) {\r\n students.forEach(student => {\r\n if (distinctStudents.findIndex(o => o.Id == student.Id) == -1) {\r\n distinctStudents.push(student);\r\n }\r\n });\r\n }\r\n\r\n if (distinctStudents.length == 1) {\r\n const newForm = _.cloneDeep(eForm);\r\n newForm.Student_ID = distinctStudents[0].Id;\r\n newForm.Family_ID = distinctStudents[0].FamilyId;\r\n if (newForm.ShowInAllYears && newForm.AllowMultiple) {\r\n this.shouldShowSelectYearDialog(newForm);\r\n }\r\n else {\r\n this.openFormViewer(newForm);\r\n }\r\n }\r\n else {\r\n distinctStudents = distinctStudents.sort((a, b) => {\r\n if (a.FirstName.toLowerCase() + a.LastName.toLowerCase() < b.FirstName.toLowerCase() + a.LastName.toLowerCase()) { return -1; }\r\n if (a.FirstName.toLowerCase() + a.LastName.toLowerCase() > b.FirstName.toLowerCase() + a.LastName.toLowerCase()) { return 1; }\r\n });\r\n\r\n this.openStudentSelector(eForm, distinctStudents);\r\n }\r\n }));\r\n }\r\n else {\r\n const newForm: EForm = _.cloneDeep(eForm);\r\n if (!this.staffPage) {\r\n newForm.Student_ID = this.studentService.selectedStudent.Id;\r\n newForm.Family_ID = this.studentService.selectedStudent.FamilyId;\r\n }\r\n this.openFormViewer(newForm);\r\n }\r\n }\r\n else {\r\n // this.openFormViewer(eForm);\r\n this.checkForUnfinished(eForm);\r\n }\r\n });\r\n }\r\n }\r\n\r\n getFormDataByInstanceId(actionName: string, eForm: EForm) {\r\n this.eFormService.getFormDataByInstanceId(this.yearService.defaultYear.Id, eForm.ID, [eForm.Instance_ID]).subscribe(result => {\r\n eForm.FormData = result[0].FormData;\r\n if (actionName == 'View - Translated') {\r\n this.action_View_Translated(result[0].TranslatedPDF, eForm.InstanceName);\r\n }\r\n });\r\n }\r\n action_View_Translated(TranslatedPDF64, InstanceName) {\r\n System.viewFileFromBase(TranslatedPDF64, 'application/pdf', InstanceName);\r\n }\r\n\r\n checkForUnfinished(eForm: EForm) {\r\n if (eForm.ID > 0 && eForm.Status != null && eForm.Status.toLowerCase() == 'not submitted' && !eForm.IsLastStatusDelete) {\r\n const eFormUnfinishedDialog = this.dialog.open(EFormUnfinishedDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n Form: eForm\r\n }\r\n });\r\n\r\n eFormUnfinishedDialog.afterClosed().subscribe(result => {\r\n if (result == 'StartOver') {\r\n this.eFormService.getEFormInstance(eForm.Instance_ID).subscribe(instance => {\r\n const newEForm: EForm = _.cloneDeep(eForm);\r\n newEForm.FormData = instance.FormData;\r\n this.openFormViewer(newEForm);\r\n });\r\n }\r\n else if (result == 'Continue') {\r\n this.openFormViewer(eForm);\r\n }\r\n });\r\n }\r\n else {\r\n if (eForm.IsLastStatusDelete) {\r\n this.eFormService.getEFormInstance(eForm.Instance_ID).subscribe(instance => {\r\n const newEForm: EForm = _.cloneDeep(eForm);\r\n newEForm.FormData = instance.FormData;\r\n this.openFormViewer(newEForm);\r\n });\r\n }\r\n else {\r\n if (eForm.ShowInAllYears && eForm.AllowMultiple && eForm.ID <= 0) {\r\n this.shouldShowSelectYearDialog(eForm);\r\n }\r\n else {\r\n this.openFormViewer(eForm);\r\n }\r\n }\r\n }\r\n }\r\n\r\n openFormViewer(eForm: EForm) {\r\n this.subscriptions.push(this.eFormService.markInstanceAsViewed(eForm.Instance_ID).subscribe(() => { }));\r\n this.eFormService.selectedForm = eForm;\r\n try {\r\n this.eFormService.selectedFormData = JSON.parse(eForm.FormData);\r\n } catch (err) {\r\n this.eFormService.selectedFormData = new EFormDataObject();\r\n }\r\n this.subscriptions.push(this.eFormService.getEFormInstance(eForm.Instance_ID).subscribe(instance => {\r\n const config = new EFormConfiguration();\r\n config.ViewMode = enmEFormViewModes.Form;\r\n config.Title = instance ? instance.Name : '';\r\n config.ReadOnly = (eForm.Status != null && (eForm.Status.toLowerCase() == 'submitted' || eForm.Status.toLowerCase() == 'accepted' || eForm.Status.toLowerCase() == 'complete'));\r\n config.AllowInstanceSpecificText = true;\r\n config.NewForm = !eForm.ID || eForm.ID <= 0;\r\n if (config.ReadOnly && eForm.TranslatedPDF) {\r\n let formName: string = instance.Name;\r\n if (instance.TemplateType != null && instance.TemplateType.toLowerCase() == 'student') {\r\n formName += eForm.Student;\r\n }\r\n System.saveFile(eForm.TranslatedPDF, 'pdf', formName + '.pdf');\r\n }\r\n else {\r\n const viewFormDialog = this.dialog.open(EFormViewerModalComponent, {\r\n disableClose: true,\r\n height: '100vh',\r\n data: {\r\n config: config\r\n }\r\n });\r\n this.subscriptions.push(viewFormDialog.afterClosed().subscribe(action => {\r\n if (this.eFormService.showCriticalMessage) {\r\n const eFormCMDialog = this.dialog.open(EFormCriticalMessageDialogComponent, {\r\n disableClose: true,\r\n width: '700px',\r\n data: {\r\n message: eForm.CriticalMessage\r\n }\r\n });\r\n\r\n this.subscriptions.push(eFormCMDialog.afterClosed().subscribe(() => {\r\n this.getEForms();\r\n }));\r\n }\r\n else if (action == 'rerouteToFeesAfterSubmit') {\r\n this.router.navigateByUrl('/student360/feesAndBilling');\r\n }\r\n else {\r\n this.getEForms();\r\n }\r\n }));\r\n }\r\n }));\r\n }\r\n\r\n openStudentSelector(eForm: EForm, students: Student[]) {\r\n const selectStudentDialog = this.dialog.open(EFormSelectStudentDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n Form: eForm,\r\n Students: students\r\n }\r\n });\r\n this.subscriptions.push(selectStudentDialog.afterClosed().subscribe((newForm: EForm) => {\r\n if (newForm) {\r\n if (newForm.ShowInAllYears && newForm.AllowMultiple) {\r\n this.shouldShowSelectYearDialog(newForm);\r\n }\r\n else {\r\n this.openFormViewer(newForm);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n private shouldShowSelectYearDialog(form: EForm) {\r\n this.yearService.getUserYears(this.userService.userId, this.userService.userType, form.Student_ID).subscribe(y => {\r\n this.years = _.cloneDeep(y.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID && o.Disabled == false));\r\n this.years = this.years.filter(year => moment(year.StartDate).isSameOrAfter(this.yearService.defaultYear.StartDate));\r\n if (this.userService.currentUser.UserType == 1) {\r\n // current user is staff\r\n this.years = _.cloneDeep(this.yearService.yearsForC360);\r\n }\r\n else if (this.loginService.LoginSettings.V10) {\r\n this.years = _.cloneDeep(this.studentService.enrollmentYears);\r\n }\r\n if (this.years.length != 1) {\r\n // Only show year selector dialog if there's more than one year to choose\r\n this.openYearSelector(form, this.years);\r\n }\r\n else {\r\n // Only one year, skip year selector dialog\r\n if (!this.V10) {\r\n form.Year_ID = this.years[0].Id;\r\n }\r\n this.openFormViewer(form);\r\n }\r\n });\r\n }\r\n\r\n openYearSelector(eForm: EForm, years: Year[]) {\r\n const selectYearDialog = this.dialog.open(EFormSelectYearDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n Form: eForm,\r\n years: years\r\n }\r\n });\r\n this.subscriptions.push(selectYearDialog.afterClosed().subscribe((newForm: EForm) => {\r\n if (newForm) {\r\n this.openFormViewer(newForm);\r\n }\r\n }));\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.dataSource.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.dataSource.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.dataSource.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.dataSource.rowKeyPress(event, row);\r\n }\r\n\r\n removeElement(array: any[], element: any) {\r\n const index: number = array.indexOf(element);\r\n if (index != -1) {\r\n array.splice(index, 1);\r\n }\r\n }\r\n}\r\n","
Additional Details
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Course\r\n \r\n {{SelectedFP.Course}}\r\n
\r\n Check Number\r\n \r\n {{SelectedFP.CheckNumber}}\r\n
\r\n Name On Check\r\n \r\n {{SelectedFP.NameOnCheck}}\r\n
\r\n
\r\n Comment:\r\n
\r\n
\r\n {{SelectedFP.Comments}}\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { FeePayment } from '../fee-payment.model';\r\n\r\n\r\n@Component({\r\n selector: 'additional-details',\r\n templateUrl: './additional-details.component.html'\r\n})\r\nexport class AdditionalDetailsComponent {\r\n\r\n SelectedFP:FeePayment;\r\n dateCheck = '0001-01-01T00:00:00';\r\n\r\n constructor( private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) private data: any) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.SelectedFP = this.data.SelectedFP;\r\n }\r\n\r\n closeClick(){\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n}\r\n","\r\n \r\n Date\r\n {{detail.Date|date:'MM/dd/yy'}}\r\n \r\n \r\n Description\r\n {{detail.Description}}\r\n \r\n \r\n Type\r\n {{detail.Type}}\r\n \r\n \r\n Fee\r\n \r\n {{detail.Fee != '' && detail.Fee != null && detail.Fee > 0 ? (detail.Fee|number:'1.2-2') : (detail.Fee != '' && detail.Fee != null ? (detail.Fee*-1|number:'1.2-2') : '')}}\r\n \r\n \r\n \r\n Payment\r\n \r\n {{detail.Payment != '' && detail.Payment != null && detail.Payment > 0 ? (detail.Payment|number:'1.2-2') : (detail.Payment != '' && detail.Payment != null ? (detail.Payment*-1|number:'1.2-2') : '')}}\r\n \r\n \r\n \r\n Balance\r\n \r\n {{detail.RunningBalance != '' && detail.RunningBalance != null && detail.RunningBalance > 0 ? (detail.RunningBalance|number:'1.2-2') : (detail.RunningBalance != '' && detail.RunningBalance != null ? (detail.RunningBalance*-1|number:'1.2-2') : '')}}\r\n \r\n \r\n \r\n \r\n \r\n {{detail.RunningBalance > 0 ? ' Credit' : (detail.RunningBalance < 0 ? ' Due' : '')}}\r\n \r\n \r\n \r\n Additional Details\r\n \r\n   Details\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, OnInit, ViewChild, Input, OnDestroy } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { FeePayment } from '../fee-payment.model';\r\nimport { AdditionalDetailsComponent } from '../additional-details/additional-details.component';\r\n\r\n@Component({\r\n selector: 'fee-payment-details',\r\n styleUrls: ['./fee-payment-details.component.scss'],\r\n templateUrl: './fee-payment-details.component.html'\r\n})\r\nexport class FeePaymentDetailsComponent implements OnInit, OnDestroy {\r\n\r\n\r\n dateCheck = '0001-01-01T00:00:00';\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay = ['Date', 'Description', 'Type', 'Fee', 'Payment', 'RunningBalance', 'BalanceType', 'Details'];\r\n @Input() feePayments: FeePayment[];\r\n additionalDetailsDialogRef: MatDialogRef;\r\n\r\n constructor(private dialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.feePayments;\r\n\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n\r\n }\r\n\r\n hideDetails(feePayment: FeePayment) {\r\n if ((feePayment.Course == '' || feePayment.Course == null) && (feePayment.CheckNumber == '' || feePayment.CheckNumber == null) && (feePayment.CheckDate == null || feePayment.CheckDate.toString() == this.dateCheck) &&\r\n (feePayment.NameOnCheck == '' || feePayment.NameOnCheck == null) && (feePayment.DueDate == null || feePayment.DueDate.toString() == this.dateCheck) && (feePayment.Comments == '' || feePayment.Comments == null)) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n showDialog(feePayment: FeePayment) {\r\n this.additionalDetailsDialogRef = this.dialog.open(AdditionalDetailsComponent, {\r\n data: {\r\n SelectedFP: feePayment\r\n },\r\n });\r\n\r\n this.additionalDetailsDialogRef.afterClosed().subscribe(result => { });\r\n }\r\n\r\n getAriaDetailRowByDate(row: FeePayment): string {\r\n const colList: string[] = ['Date', 'Description', 'Type', 'Fee', 'Payment', 'RunningBalance'];\r\n const date: string = new Date(row.Date).toDateString();\r\n const dataList: string[] = [date,\r\n row.Description,\r\n row.Type,\r\n row.Fee,\r\n row.Payment,\r\n row.RunningBalance];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
Fees & Billing - {{ studentname }} [#{{studentNumber}}]
\r\n
\r\n
\r\n\r\n
\r\n No Fees & Billing data exists for this student.\r\n
\r\n\r\n 0\" matSort id=\"FABdataTable\"\r\n matSortActive=\"FeeCode\" matSortDirection=\"asc\" aria-label=\"Fees And Billing Table\" tabindex=\"0\">\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Fee Code\r\n \r\n \r\n \r\n \r\n {{FAB.FeeCode}}\r\n \r\n \r\n \r\n Description\r\n \r\n \r\n \r\n {{FAB.Description}}\r\n \r\n \r\n \r\n \r\n Balance\r\n \r\n \r\n \r\n \r\n \r\n {{(FAB.Balance != '' && FAB.Balance != null && FAB.Balance > 0 ?\r\n FAB.Balance : (FAB.Balance != '' && FAB.Balance != null ?\r\n FAB.Balance*-1 : ''))|number:'1.2-2'}}  \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{FAB.Balance > 0 ? 'Credit' : (FAB.Balance < 0 ? 'Due' : ''\r\n )}} \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Balance from Prior Year(s) ${{priorBalance != undefined && priorBalance != null &&\r\n priorBalance > 0 ? (priorBalance|number:'1.2-2') : (priorBalance != undefined &&\r\n priorBalance != null ? (priorBalance*-1|number:'1.2-2') : '')}} {{priorBalance > 0 ? 'Credit' : (priorBalance < 0\r\n ? 'Due' : '' )}}
{{student360Year.AYIdentifier}} Balance\r\n  ${{aYBalance != undefined && aYBalance != null\r\n &&\r\n aYBalance > 0 ? (aYBalance|number:'1.2-2') : (aYBalance != undefined && aYBalance !=\r\n null ?\r\n (aYBalance*-1|number:'1.2-2') : '')}} {{aYBalance > 0 ? 'Credit' : (aYBalance < 0 ? 'Due' : '' )}}
{{student360Year.Description}} Balance\r\n  ${{aYBalance != undefined && aYBalance != null &&\r\n aYBalance > 0 ? (aYBalance|number:'1.2-2') : (aYBalance != undefined && aYBalance !=\r\n null ?\r\n (aYBalance*-1|number:'1.2-2') : '')}} {{aYBalance > 0 ? 'Credit' : (aYBalance < 0 ? 'Due' : '' )}}
Unapplied Payments ${{unappliedPayments != undefined &&\r\n unappliedPayments\r\n !=\r\n null && unappliedPayments > 0 ? (unappliedPayments|number:'1.2-2') : (unappliedPayments\r\n !=\r\n undefined && unappliedPayments != null ? (unappliedPayments*-1|number:'1.2-2') : '')}}\r\n  {{unappliedPayments > 0 ? 'Credit' : (unappliedPayments < 0\r\n ? 'Due' : '' )}}
\r\n
\r\n
Total Balance\r\n \r\n  ${{(totalBalance\r\n > 0 ? totalBalance : totalBalance*-1)|number:'1.2-2'}} {{totalBalance > 0 ? 'Credit' : (totalBalance < 0 ? 'Due' : ''\r\n )}}
\r\n
\r\n
\r\n
","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Inject, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { OnlinePaymentConfiguration } from '../online-payment/models/online-payment-config.model';\r\nimport { FeesAndBilling } from './fees-and-billing.model';\r\nimport { FeesAndBillingService } from './fees-and-billing.service';\r\n\r\n// -------Angular Material------------------------------------\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { StudentHeaderComponent } from '../../shared-components/student-header/student-header.component';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'fees-and-billing',\r\n templateUrl: './fees-and-billing.component.html',\r\n styleUrls: ['./fees-and-billing.component.scss'],\r\n animations: [detailExpand]\r\n})\r\nexport class FeesAndBillingComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // ------------Fees And Billing Data---------------------------\r\n student360YearSubscription: Subscription;\r\n student360Year: Year;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n feesAndBilling: FeesAndBilling[];\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n unappliedPayments: number;\r\n totalBalance: number;\r\n aYBalance: number;\r\n priorBalance: number;\r\n totalUnapplied: number;\r\n allowFutureYears = false;\r\n futureBalance = 0;\r\n // ------------Selection/Flags-----------------------------------\r\n selected = '0';\r\n isBusy: boolean;\r\n parentPortalShowOnlinePayment: boolean;\r\n userType: number;\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay: string[] = ['More', 'FeeCode', 'Description', 'Balance', 'BalanceType'];\r\n initialSelection = [];\r\n allowMultiSelect = true;\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n clearFilterEvent = new EventEmitter();\r\n studentId: number;\r\n FeeCode: string;\r\n FeeDialog = false;\r\n studentname: string;\r\n studentNumber: string;\r\n\r\n @ViewChild(StudentHeaderComponent) studentHeader: StudentHeaderComponent;\r\n subscriptions: Subscription[] = [];\r\n // --------------LifeCycle---------------------------------------\r\n\r\n constructor(private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private router: Router,\r\n private feesAndBillingService: FeesAndBillingService,\r\n public changeDetector: ChangeDetectorRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef) {\r\n\r\n this.parentPortalShowOnlinePayment = this.loginService.LoginSettings.ParentPortalShowOnlinePayment;\r\n this.userType = this.userService.userType;\r\n if (data != undefined && data.length != 0 && data.onlinePayment) {\r\n this.studentId = data.onlinePayment.StudentId;\r\n this.FeeDialog = data.FeeDialog;\r\n this.FeeCode = data.onlinePayment.AccountCode;\r\n this.studentname = data.onlinePayment.StudentName;\r\n this.studentNumber = data.onlinePayment.StudentIdentifier;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.allowFutureYears = this.loginService.LoginSettings.AllowFutureFeeBillingPayments;\r\n if (this.studentId > 0 && this.FeeDialog) {\r\n this.loadStudentInfo(this.studentId);\r\n }\r\n else if (this.studentService.selectedStudent) {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n if (this.data != undefined && this.data.length == 0) {\r\n this.subscriptions.push(this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.feesAndBilling = undefined;\r\n this.loadStudentInfo(studentId);\r\n }));\r\n }\r\n this.getOnlinePaymentConfiguration();\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n // ------------Fees And Billing Data---------------------------\r\n loadStudentInfo(studentId: number) {\r\n if (studentId && studentId > 0) {\r\n this.clearStudentData();\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.student360Year = this.yearService.student360Year;\r\n this.getFeesAndBilling();\r\n }\r\n }\r\n\r\n getFeesAndBilling() {\r\n this.subscriptions.push(this.feesAndBillingService.getFeesAndBilling(this.selectedStudent.Id, this.student360Year.Id, this.userService.userId).subscribe(result => {\r\n this.feesAndBilling = result;\r\n this.angularMatData = new TylerMatTableDataSource(this.feesAndBilling);\r\n this.calculateBalance();\r\n this.loadFeesAndBillingData();\r\n }));\r\n }\r\n\r\n getOnlinePaymentConfiguration() {\r\n if (this.loginService.LoginSettings.ParentPortalShowOnlinePayment && this.userService.userType == 2) {\r\n this.subscriptions.push(this.studentService.getOnlinePaymentConfiguration().subscribe(result => {\r\n this.onlinePaymentConfiguration = result;\r\n }));\r\n }\r\n }\r\n\r\n private loadFeesAndBillingData(): void {\r\n if (this.FeeDialog) {\r\n this.angularMatData.data = this.feesAndBilling.filter(fee => fee.FeeCode === this.FeeCode);\r\n this.angularMatData.expandAll(true);\r\n }\r\n else {\r\n this.angularMatData.data = this.feesAndBilling;\r\n }\r\n this.angularMatData.sort = this.sort;\r\n }\r\n\r\n clearStudentData() {\r\n\r\n }\r\n\r\n calculateBalance() {\r\n this.aYBalance = 0;\r\n this.unappliedPayments = 0;\r\n this.totalBalance = 0;\r\n this.priorBalance = 0;\r\n this.totalUnapplied = 0;\r\n\r\n for (let i = 0; i < this.feesAndBilling.length; i++) {\r\n if (this.feesAndBilling[i].V10Flag) {\r\n this.totalUnapplied = this.feesAndBilling[i].Unapplied;\r\n }\r\n this.aYBalance = this.aYBalance + this.feesAndBilling[i].AYBalance;\r\n this.totalBalance = this.totalBalance + this.feesAndBilling[i].BalanceSort;\r\n for (let j = 0; j < this.feesAndBilling[i].FeePayments.length; j++) {\r\n this.unappliedPayments = this.unappliedPayments + this.feesAndBilling[i].FeePayments[j].UnappliedPayments;\r\n if (this.feesAndBilling[i].FeePayments[j].Id == -99) {\r\n this.priorBalance = this.priorBalance + parseFloat(this.feesAndBilling[i].FeePayments[j].RunningBalance);\r\n }\r\n }\r\n }\r\n this.aYBalance = Math.round(this.aYBalance * 100) / 100;\r\n this.unappliedPayments = Math.round(this.unappliedPayments * 100) / 100;\r\n this.priorBalance = this.priorBalance;\r\n this.unappliedPayments = this.unappliedPayments + this.totalUnapplied;\r\n this.totalBalance = this.totalBalance + this.unappliedPayments;\r\n }\r\n\r\n getFutureBalance() {\r\n this.futureBalance = 0;\r\n this.feesAndBilling.forEach(feeBill => {\r\n feeBill.FeePayments.forEach(p => {\r\n if (p.Id == -98) {\r\n this.futureBalance += parseFloat(p.RunningBalance);\r\n }\r\n });\r\n });\r\n // this.totalBalance = this.totalBalance - this.futureBalance;\r\n }\r\n\r\n onlinePaymentClick() {\r\n this.router.navigateByUrl('/student360/onlinePayment');\r\n }\r\n\r\n regEnrollMode() {\r\n return this.router.url.toLowerCase().indexOf('registrationenrollment') > -1;\r\n }\r\n\r\n // ------------Helper methods----------------------------------\r\n\r\n removeElement(array: any[], element: any) {\r\n const index: number = array.indexOf(element);\r\n array.splice(index, 1);\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: FeesAndBilling): string {\r\n // Returns string for a given row's data\r\n // reads each column header name and then the cell data for that column\r\n const colList: string[] = ['FeeCode', 'Description', 'Balance', 'Balance Type'];\r\n\r\n const dataList: string[] = [row.FeeCode,\r\n row.Description,\r\n row.Balance,\r\n parseInt(row.Balance, 10) > 0 ? 'Credit' : (parseInt(row.Balance, 10) < 0 ? 'Due' : '')];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n yearChange(year: Year) {\r\n this.student360Year = year;\r\n this.getFeesAndBilling();\r\n if (!this.allowFutureYears) {\r\n this.yearService.updateStudent360Year(year);\r\n }\r\n }\r\n}\r\n","import { System } from './../../shared-components/System';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { FeesAndBilling } from './fees-and-billing.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FeesAndBillingService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getFeesAndBilling(studentId: number, yearId: number, userId: number, forWithdrawalOptions = false): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId +\r\n '&forWithdrawalOptions=' + forWithdrawalOptions;\r\n return this.http.get(System.apiURL.Student + 'GetFeesAndBilling' + queryString);\r\n }\r\n\r\n getAllPastCurrentFutureFees(enrollmentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?enrollmentId=' + enrollmentId;\r\n return this.http.get(System.apiURL.Student + 'GetAllPastCurrentFutureFees' + queryString);\r\n }\r\n}\r\n","\r\n\r\n \r\n \r\n Student \r\n \r\n \r\n \r\n {{getStudentName(element)}}\r\n \r\n \r\n \r\n \r\n Current Status \r\n \r\n {{element.LunchCode}} \r\n \r\n \r\n \r\n Expires \r\n \r\n {{element.Expires | date: 'MM/dd/yy'}} \r\n \r\n\r\n \r\n \r\n \r\n\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { take } from 'rxjs/operators';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { FreeReducedMealAppService } from '../../../shared-modules/free-reduced-meal-app/free-reduced-meal-app.service';\r\nimport { FreeReducedMealAppStudentLunchStatus } from '../../../shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-student-lunch-status.model';\r\n\r\n@Component({\r\n selector: 'free-reduced-meal-app-student-status',\r\n templateUrl: './free-reduced-meal-app-student-status.component.html',\r\n styleUrls: ['./free-reduced-meal-app-student-status.component.css']\r\n})\r\nexport class FreeReducedMealAppStudentStatusComponent implements OnInit {\r\n\r\n private _yearId: number;\r\n public get yearId(): number {\r\n return this._yearId;\r\n }\r\n @Input() public set yearId(value: number) {\r\n this._yearId = value;\r\n if (this.initialized) {\r\n this.getStatus();\r\n }\r\n }\r\n\r\n private familyId: number;\r\n students: FreeReducedMealAppStudentLunchStatus[];\r\n dataSource = new TylerMatTableDataSource();\r\n initialized = false;\r\n columnsToDisplay = ['Student', 'Status'];\r\n\r\n constructor(\r\n private freeReducedMealAppService: FreeReducedMealAppService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if (this.freeReducedMealAppService.selectedFamily) {\r\n this.familyId = this.freeReducedMealAppService.selectedFamily.FamilyID;\r\n this.getStatus();\r\n }\r\n }\r\n\r\n getStatus() {\r\n this.initialized = true;\r\n if (this.familyId && this.yearId) {\r\n this.freeReducedMealAppService.getFRMAStudentStatus(this.familyId, this.yearId).pipe(take(1)).subscribe(students => {\r\n const visibleStudentIds = this.freeReducedMealAppService.selectedFamily.Students.filter(o => o.CanSee).map(o => o.Id);\r\n this.students = students;\r\n this.dataSource.data = this.students.filter(o => visibleStudentIds.includes(o.Id));\r\n if (this.students.find(o => o.Expires) != null) {\r\n this.columnsToDisplay = ['Student', 'Status', 'Expires'];\r\n }\r\n else {\r\n this.columnsToDisplay = ['Student', 'Status'];\r\n }\r\n });\r\n }\r\n }\r\n\r\n getStudentName(student: FreeReducedMealAppStudentLunchStatus): string {\r\n let studentName = student.FirstName + ' ' + student.LastName;\r\n if (student.Suffix && student.Suffix.trim()) {\r\n const firstTwoChars = student.Suffix.trim().substring(0,2);\r\n if (firstTwoChars.toLowerCase() == 'jr' || firstTwoChars.toLowerCase() == 'sr') {\r\n studentName += ', ' + student.Suffix;\r\n }\r\n else {\r\n studentName += ' ' + student.Suffix;\r\n }\r\n }\r\n return studentName;\r\n }\r\n\r\n}\r\n","import { Student } from '../../../shared-components/student/student.model';\r\n\r\nexport class FreeReducedMealAppFamily {\r\n FamilyID: number;\r\n ParentType: string;\r\n Students: Student[];\r\n UserCanSeeAllStudents: boolean;\r\n\r\n Selected: boolean;\r\n}","import { formatDate } from '@angular/common';\r\nimport { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { take } from 'rxjs/operators';\r\nimport { FreeReducedMealApp } from '../../../shared-modules/free-reduced-meal-app/models/free-reduced-meal-app.model';\r\n\r\n@Component({\r\n selector: 'app-frma-unsubmitted-app-dialog',\r\n templateUrl: './frma-unsubmitted-app-dialog.component.html',\r\n styleUrls: ['./frma-unsubmitted-app-dialog.component.css']\r\n})\r\nexport class FrmaUnsubmittedAppDialogComponent implements OnInit {\r\n\r\n application: FreeReducedMealApp;\r\n textBlock1: string;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: FreeReducedMealApp,\r\n private translateService: TranslateService\r\n ) {\r\n this.application = data;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.application) {\r\n this.translateService.get('The most recent application was not submitted. It was started on {{1}} by {{2}}.').pipe(take(1)).subscribe((res: string) => {\r\n if (res) {\r\n this.textBlock1 = res.replace('{{1}}', formatDate(this.application.CreatedDate, 'MM/dd/yy', 'en-US')).replace('{{2}}', this.application.CreatedByName);\r\n }\r\n });\r\n }\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n continueClick() {\r\n this.dialogRef.close('continue');\r\n }\r\n\r\n newClick() {\r\n this.dialogRef.close('new');\r\n }\r\n}\r\n","

Unsubmitted Application

\r\n\r\n
{{textBlock1}}
\r\n
Do you want to continue with that application or start a new one?
\r\n \r\n
\r\n\r\n \r\n \r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\n\r\n@Component({\r\n selector: 'app-free-reduced-meal-app-year-selector',\r\n templateUrl: './free-reduced-meal-app-year-selector.component.html',\r\n styleUrls: ['./free-reduced-meal-app-year-selector.component.css']\r\n})\r\nexport class FreeReducedMealAppYearSelectorComponent implements OnInit {\r\n\r\n years: Year[] = [];\r\n labels: string[] = [];\r\n ids: string[] = [];\r\n selectedYear: Year;\r\n errors: ErrorList[] = [];\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n if (data && data.years) {\r\n this.years = data.years.filter((o: Year) => o.Status != 0);\r\n this.years.forEach(year => {\r\n this.labels.push(year.Description);\r\n this.ids.push('frmaYear' + year.Id);\r\n });\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n nextClick() {\r\n this.errors = [];\r\n if (this.selectedYear) {\r\n this.dialogRef.close(this.selectedYear);\r\n }\r\n else {\r\n this.errors.push({\r\n fieldName: 'Year',\r\n fieldRef: null,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n }\r\n\r\n}\r\n","

Start New Application

\r\n\r\n \r\n \r\n\r\n\r\n \r\n","
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
Academic Year -
\r\n \r\n \r\n {{year.Description}}\r\n \r\n \r\n
\r\n
\r\n \r\n
No applications have been submitted for this year.
\r\n
Current Status will not update until submission has been accepted.
\r\n
\r\n
Because you are not associated with all the students in this household
in the selected Academic Year, this page is not available.
\r\n \r\n \r\n \r\n \r\n Created \r\n \r\n \r\n {{element.CreatedDate | date: 'MM/dd/yy'}} \r\n \r\n \r\n \r\n Created By \r\n \r\n \r\n {{element.CreatedByName}} \r\n \r\n \r\n \r\n Submitted \r\n \r\n \r\n {{element.SubmittedDate | date: 'MM/dd/yy'}} \r\n \r\n \r\n \r\n Submitted By \r\n \r\n \r\n {{element.SubmittedByName}} \r\n \r\n \r\n \r\n Status \r\n \r\n \r\n {{element.Status | titlecase | translate}} \r\n \r\n \r\n \r\n Actions \r\n \r\n \r\n \r\n \r\n \r\n \r\n View\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n","import { formatDate } from '@angular/common';\r\nimport { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { take } from 'rxjs/operators';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { FreeReducedMealAppService } from '../../../shared-modules/free-reduced-meal-app/free-reduced-meal-app.service';\r\nimport { FreeReducedMealAppComponent } from '../../../shared-modules/free-reduced-meal-app/free-reduced-meal-app/free-reduced-meal-app.component';\r\nimport { FreeReducedMealAppFamily } from '../../../shared-modules/free-reduced-meal-app/models/free-reduced-meal-app-family.model';\r\nimport { FreeReducedMealApp } from '../../../shared-modules/free-reduced-meal-app/models/free-reduced-meal-app.model';\r\nimport * as moment from 'moment';\r\nimport { System } from '../../../shared-components/System';\r\nimport { FreeReducedMealAppStudentStatusComponent } from '../free-reduced-meal-app-student-status/free-reduced-meal-app-student-status.component';\r\nimport { orderBy } from 'lodash';\r\nimport { FrmaUnsubmittedAppDialogComponent } from '../frma-unsubmitted-app-dialog/frma-unsubmitted-app-dialog.component';\r\nimport { ParentStudentPortalSettingsService } from '../../../management360/district/parent-student-portal-settings/parent-student-portal-settings.service';\r\nimport { FreeReducedMealAppYearSelectorComponent } from '../free-reduced-meal-app-year-selector/free-reduced-meal-app-year-selector.component';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\n\r\n@Component({\r\n selector: 'app-free-reduced-meal-app-summary',\r\n templateUrl: './free-reduced-meal-app-summary.component.html',\r\n styleUrls: ['./free-reduced-meal-app-summary.component.css']\r\n})\r\nexport class FreeReducedMealAppSummaryComponent implements OnInit {\r\n\r\n dataSource = new TylerMatTableDataSource();\r\n years: Year[];\r\n yearId: number;\r\n showGrid = false;\r\n showNoAppsMessage = false;\r\n showCurrentStatusMessage = false;\r\n selectedFamily: FreeReducedMealAppFamily;\r\n applications: FreeReducedMealApp[] = [];\r\n disableAdd = false;\r\n yearChanged = false;\r\n\r\n @ViewChild(FreeReducedMealAppStudentStatusComponent) studentLunchStatus: FreeReducedMealAppStudentStatusComponent;\r\n familyWarningShown: any;\r\n dialogRef: any;\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this.dataSource.sort = value;\r\n }\r\n\r\n constructor(\r\n private dialog: MatDialog,\r\n private freeReducedMealAppService: FreeReducedMealAppService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private sharedService: SharedService,\r\n private translateService: TranslateService,\r\n private parentStudentPortalSettingsService: ParentStudentPortalSettingsService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.selectedFamily = this.freeReducedMealAppService.selectedFamily;\r\n if (this.selectedFamily == undefined) {\r\n this.selectedFamily = new FreeReducedMealAppFamily();\r\n }\r\n this.yearId = this.yearService.student360Year.Id;\r\n this.getYears();\r\n this.getApplications(null);\r\n }\r\n\r\n getApplications(_callback: Function) {\r\n if (this.selectedFamily.UserCanSeeAllStudents) {\r\n this.freeReducedMealAppService.getFrmaAppsByFamilyID(this.selectedFamily.FamilyID, this.yearId).pipe(take(1)).subscribe(apps => {\r\n this.applications = apps;\r\n this.dataSource.data = apps;\r\n this.showCurrentStatusMessage = false;\r\n if (apps && apps.length > 0) {\r\n this.showGrid = true;\r\n this.showNoAppsMessage = false;\r\n if (apps.find(o => o.Status == 'submitted')) {\r\n this.showCurrentStatusMessage = true;\r\n }\r\n }\r\n else {\r\n this.showGrid = false;\r\n this.showNoAppsMessage = true;\r\n }\r\n if (_callback) {\r\n _callback();\r\n }\r\n });\r\n }\r\n }\r\n\r\n getFamilies(_callback: Function) {\r\n this.freeReducedMealAppService.getFrmaFamilies(this.yearId).pipe(take(1)).subscribe(fams => {\r\n this.selectedFamily = fams.find(o => o.FamilyID == this.selectedFamily.FamilyID);\r\n this.getApplications(_callback);\r\n });\r\n }\r\n\r\n getYears() {\r\n this.freeReducedMealAppService.getFRMAYearsForParent(this.selectedFamily.FamilyID).pipe(take(1)).subscribe(years => {\r\n this.years = years;\r\n const selectedYear = this.years.find(o => o.Id == this.yearId);\r\n if (selectedYear) {\r\n if (selectedYear.Status == 0) {\r\n // past year - disable add button\r\n this.disableAdd = true;\r\n }\r\n }\r\n });\r\n // this.years = this.yearService.allYears.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID);\r\n // this.parentStudentPortalSettingsService.getPortalDataAreas().pipe(take(1)).subscribe(dataAreas => {\r\n // const frmaSettings = dataAreas.find(o => o.Area == 'Free/Reduced Meal Application');\r\n // if (frmaSettings) {\r\n // this.years = this.yearService.allYears.filter(o => o.SchoolID == this.yearService.student360Year.SchoolID\r\n // && (\r\n // (o.Status == 0 && frmaSettings.Past)\r\n // || (o.Status == 1 && frmaSettings.Current)\r\n // || (o.Status == 2 && frmaSettings.Future)\r\n // )\r\n // );\r\n // }\r\n // });\r\n }\r\n\r\n editClick(app: FreeReducedMealApp) {\r\n this.freeReducedMealAppService.getFrmaApplication(app.ID).pipe(take(1)).subscribe(a => {\r\n const selectedYear = this.years.find(o => o.Id == this.yearId);\r\n const dialogRef = this.dialog.open(FreeReducedMealAppComponent, {\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '1000px',\r\n disableClose: true,\r\n data: {\r\n isDesignMode: false,\r\n singlePageMode: false,\r\n appData: a,\r\n selectedYear: selectedYear\r\n }\r\n });\r\n\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(appSaved => {\r\n if (appSaved) {\r\n this.getApplications(null);\r\n }\r\n if (this.yearChanged) {\r\n this.showYearChangeDialog(selectedYear);\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n viewClick(app: FreeReducedMealApp) {\r\n this.freeReducedMealAppService.getFrmaAppWithPdf(app.ID).pipe(take(1)).subscribe(o => {\r\n const pdfName: string = moment.utc(o.SubmittedDate).format('MM-DD-YYYY') + '_Application';\r\n if (o.ApplicationAsPDF) {\r\n System.viewFileFromBase(o.ApplicationAsPDF, 'pdf', pdfName + '.pdf');\r\n }\r\n });\r\n }\r\n\r\n newAppClick() {\r\n this.showYearSelector(() => {\r\n if (this.studentLunchStatus && this.studentLunchStatus.students.find(o => !o.IsDirectCertification) != null) {\r\n const unsubmittedApp = this.getUnsubmittedApp();\r\n if (!unsubmittedApp) {\r\n // No unsubmitted application exists, open new application\r\n this.openNewApplication();\r\n }\r\n else {\r\n // need to check if household has changed\r\n this.freeReducedMealAppService.getFrmaApplication(unsubmittedApp.ID).pipe(take(1)).subscribe(a => {\r\n let selectedYear = this.years.find(o => o.Id == this.yearId);\r\n this.freeReducedMealAppService.getFRMAStudentsByFamilyId(selectedYear.Id, a.FamilyID).pipe(take(1)).subscribe(students => {\r\n this.studentService.getHouseholdParentsByFamilyID(a.FamilyID).pipe(take(1)).subscribe(parents => {\r\n const studentsChanged = this.freeReducedMealAppService.checkForStudentChange(a, students); // true if students were added or dropped since application started\r\n const parentsChanged = this.freeReducedMealAppService.checkForParentChange(a, parents); // true if parents were added or removed since application started\r\n if (studentsChanged === false && parentsChanged === false) {\r\n const unsubmittedDialog = this.dialog.open(FrmaUnsubmittedAppDialogComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n data: unsubmittedApp,\r\n width: '325px'\r\n });\r\n unsubmittedDialog.afterClosed().pipe(take(1)).subscribe((action: string) => {\r\n if (action == 'continue') {\r\n this.editClick(unsubmittedApp);\r\n }\r\n else if (action == 'new') {\r\n this.openNewApplication();\r\n }\r\n else {\r\n if (this.yearChanged) {\r\n selectedYear = this.years.find(o => o.Id == this.yearId);\r\n this.showYearChangeDialog(selectedYear);\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n this.openNewApplication();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n }\r\n else {\r\n this.showDirectCertDialog();\r\n }\r\n });\r\n }\r\n\r\n showYearSelector(_callback: Function) {\r\n if (this.years && this.years.length > 0) {\r\n const latestYearId = orderBy(this.years, ['StartDate'], ['desc'])[0].Id;\r\n if (this.yearId != latestYearId && this.years.filter(o => o.Status != 0).length > 1) {\r\n // we are not currently on the latest year and\r\n // there is more than 1 current or future year. Need to show year selector.\r\n const yearDialog = this.dialog.open(FreeReducedMealAppYearSelectorComponent, {\r\n disableClose: true,\r\n data: {\r\n years: this.years\r\n }\r\n });\r\n\r\n yearDialog.afterClosed().pipe(take(1)).subscribe((selectedYear: Year) => {\r\n if (selectedYear) {\r\n if (selectedYear.Id != this.yearId) {\r\n this.yearChanged = true;\r\n this.yearId = selectedYear.Id;\r\n this.yearChange(_callback);\r\n }\r\n else if (_callback) {\r\n _callback();\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n if (_callback) {\r\n _callback();\r\n }\r\n }\r\n }\r\n }\r\n\r\n deleteClick(app: FreeReducedMealApp) {\r\n const warningDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n this.translateService.get('Are you sure you want to delete the application started on {{1}}?').pipe(take(1)).subscribe((res: string) => {\r\n if (res) {\r\n warningDialog.componentInstance.confirmMessage = res.replace('{{1}}', formatDate(app.CreatedDate, 'MM/dd/yy', 'en-US'));\r\n }\r\n });\r\n this.translateService.get('Delete Application').pipe(take(1)).subscribe((res: string) => {\r\n if (res) {\r\n warningDialog.componentInstance.headerLabel = res;\r\n }\r\n });\r\n warningDialog.afterClosed().pipe(take(1)).subscribe((confirm) => {\r\n if (confirm) {\r\n this.freeReducedMealAppService.deleteFrmaApplication(app.ID).pipe(take(1)).subscribe(result => {\r\n if (result) {\r\n this.getApplications(null);\r\n }\r\n else {\r\n this.sharedService.showBadSnackbar();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n yearChange(_callback: Function) {\r\n this.getFamilies(_callback);\r\n const selectedYear = this.years.find(o => o.Id == this.yearId);\r\n if (selectedYear && (selectedYear.Status == 1 || selectedYear.Status == 2)) {\r\n this.disableAdd = false; // current/future year\r\n }\r\n else {\r\n this.disableAdd = true; // past year\r\n }\r\n }\r\n\r\n openNewApplication() {\r\n const newApp = new FreeReducedMealApp(this.yearId, this.selectedFamily.FamilyID);\r\n const selectedYear = this.years.find(o => o.Id == this.yearId);\r\n const dialogRef = this.dialog.open(FreeReducedMealAppComponent, {\r\n height: '100vh',\r\n maxHeight: '100vh',\r\n width: '1000px',\r\n disableClose: true,\r\n data: {\r\n isDesignMode: false,\r\n singlePageMode: false,\r\n appData: newApp,\r\n selectedYear: selectedYear\r\n }\r\n });\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(appSaved => {\r\n if (appSaved) {\r\n this.getApplications(null);\r\n }\r\n if (this.yearChanged) {\r\n this.showYearChangeDialog(selectedYear);\r\n }\r\n });\r\n }\r\n\r\n showDirectCertDialog() {\r\n const generalDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n width: '360px',\r\n });\r\n generalDialog.componentInstance.informational = true;\r\n this.translateService.get('The students in your household are pre-qualified for free/reduced meals through state direct certification.

You do not need to fill out this application.').pipe(take(1)).subscribe((res: string) => {\r\n if (res) {\r\n generalDialog.componentInstance.confirmMessage = res;\r\n }\r\n });\r\n this.translateService.get('No Need to Continue').pipe(take(1)).subscribe((res: string) => {\r\n if (res) {\r\n generalDialog.componentInstance.headerLabel = res;\r\n }\r\n });\r\n }\r\n\r\n getUnsubmittedApp(): FreeReducedMealApp {\r\n if (this.applications && this.applications.length > 0) {\r\n const lastApp = orderBy(this.applications, ['CreatedDate'], ['desc'])[0];\r\n if (lastApp.Status == 'not submitted') {\r\n return lastApp;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n showYearChangeDialog(year: Year) {\r\n this.yearChanged = false;\r\n const yearDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '350px',\r\n disableClose: true,\r\n });\r\n let first = this.translateService.instant('You are now viewing data for {{1}}.');\r\n first = first.replace('{{1}}', year.Description);\r\n const second = this.translateService.instant('To change this, use the Academic Year dropdown located in the upper right corner of this page.');\r\n const header = this.translateService.instant('Academic Year Changed');\r\n\r\n yearDialog.componentInstance.headerLabel = header;\r\n yearDialog.componentInstance.confirmMessage = first;\r\n yearDialog.componentInstance.secondMessage = second;\r\n yearDialog.componentInstance.warning = true;\r\n yearDialog.componentInstance.informational = true;\r\n }\r\n\r\n}\r\n","

Legend

\r\n\r\n
\r\n \r\n \r\n Mark\r\n {{ele.Code}}\r\n \r\n \r\n Description\r\n {{ele.Description}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n","import { Component, AfterViewInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { GradesService } from '../grades.service';\r\nimport { CurriculumMarkTypes } from '../grades.model';\r\n\r\n@Component({\r\n selector: 'app-code-legend',\r\n templateUrl: './code-legend.component.html',\r\n styles: []\r\n})\r\nexport class CodeLegendComponent implements AfterViewInit {\r\n curriculumMarkTypes: CurriculumMarkTypes[] = [];\r\n ColumnsToDisplay = ['Mark', 'Description'];\r\n courseId: number;\r\n\r\n constructor(\r\n private gradesService: GradesService,\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngAfterViewInit() {\r\n this.getCurriculumMarkTypes();\r\n }\r\n\r\n getCurriculumMarkTypes() {\r\n this.gradesService.getCurriculumMarkTypesReadForSubject(0).subscribe(data => {\r\n this.curriculumMarkTypes = data.filter(function (ele) { return !ele.InActive; });\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-course-description',\r\n templateUrl: './course-description.component.html',\r\n styleUrls: ['../grades.component.css']\r\n})\r\nexport class CourseDescriptionComponent implements OnInit {\r\n course = '';\r\n subjectSection = '';\r\n teacher = '';\r\n school = '';\r\n curriculum = '';\r\n description = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.course = this.data.studentSchedule.Course;\r\n this.subjectSection = this.data.studentSchedule.SubjectCode + '-' + this.data.studentSchedule.Section;\r\n this.teacher = this.data.studentSchedule.Teacher;\r\n this.school = this.data.studentSchedule.SchoolName;\r\n this.curriculum = this.data.studentSchedule.Curriculum;\r\n this.description = this.data.studentSchedule.Description;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","

Course Description

\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Course Name{{course}}
Course-Section{{subjectSection}}
Teacher{{teacher}}
School{{school}}
Curriculum{{curriculum}}
Description{{description}}
\r\n
\r\n
\r\n\r\n \r\n\r\n","

Color Legend

\r\n

{{dialogTitle}}

\r\n
\r\n Term Details -{{longDescription}}\r\n
\r\n
\r\n {{selectedCourse.Course}} - {{selectedCourse.TeacherName}}\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 && isStandardView==true && isTermSelected==false\">\r\n \r\n \r\n \r\n
Course Name{{course}}
Course-Section{{subjectSection}}
School{{school}}
Grading Period{{gradingTerm}}
Standard{{standard}}
Grade\r\n {{grade}}  \r\n 0))\"\r\n translate>Assignments\r\n
Grading Scale\r\n
\r\n \r\n \r\n \r\n \r\n
{{GS}}
\r\n
\r\n
\r\n
\r\n
\r\n
Comment
\r\n
{{comment}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{citizenshipLabel}}\r\n
\r\n
\r\n
{{citizenship}}\r\n
\r\n
\r\n
\r\n
\r\n {{behaviorLabel}}\r\n
\r\n
0\" style=\"width:100%;\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{habits}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/loginSetting.model';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { CourseTerm } from '../../../shared-components/student/course-term.model';\r\nimport { AssignmentService } from '../../assignment/assignment.service';\r\nimport { ReportCardGradesTerm } from '../grades.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\n\r\n@Component({\r\n selector: 'app-comments-and-behavior-marks',\r\n templateUrl: './comments-and-behavior-marks.component.html',\r\n styleUrls: ['../grades.component.css']\r\n})\r\nexport class CommentsAndBehaviorMarksComponent implements OnInit {\r\n\r\n gradeId: number;\r\n gradingTerm: string;\r\n gradingTermDescription: string;\r\n course = '';\r\n subjectSection = '';\r\n school = '';\r\n grade = '';\r\n comment = '';\r\n citizenship = '';\r\n citizenshipLabel = '';\r\n workhabits = '';\r\n standard: string;\r\n isGradeBookGrade: boolean;\r\n isStandardView: boolean;\r\n subjectCode: string;\r\n section: string;\r\n isTermSelected: boolean;\r\n courseName = '';\r\n teacherName = '';\r\n courseTerm: CourseTerm | string = '';\r\n gradeScale: string[] = [];\r\n studentSchedules: CourseSchedule[] = [];\r\n LoginSettings: LoginSettings;\r\n selectionIndex = -1;\r\n longDescription: string;\r\n termGrade: ReportCardGradesTerm;\r\n behaviorSkills: any[] = [];\r\n selectedCourse: CourseSchedule;\r\n behaviorLabel = 'Behavior';\r\n dialogTitle = 'Comments and Behavior Marks';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef,\r\n private router: Router,\r\n private loginService: LoginService,\r\n private assignmentService: AssignmentService,\r\n private userService: UserService\r\n ) { }\r\n\r\n // eslint-disable-next-line complexity\r\n ngOnInit() {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.gradeId = this.data.selectedGradeId;\r\n this.gradingTerm = this.data.selectedGradingTerm;\r\n this.gradingTermDescription = this.data.gradingTermDesc;\r\n this.standard = this.data.selectedStandard;\r\n this.isGradeBookGrade = this.data.isGradeBookGrade;\r\n this.isStandardView = this.data.selectedIsStandardView;\r\n this.subjectCode = this.data.selectedSubjectCode;\r\n this.section = this.data.selectedSection;\r\n this.isTermSelected = this.data.isTermSelected;\r\n this.selectedCourse = this.data.course;\r\n this.termGrade = this.data.termGrade;\r\n if (this.data.behaviorSocialSkillDescription != null) {\r\n this.behaviorLabel = this.data.behaviorSocialSkillDescription;\r\n this.dialogTitle = 'Comments and ' + this.data.behaviorSocialSkillDescription;\r\n }\r\n\r\n if (this.isStandardView) {\r\n if (this.selectedCourse.CourseTerms.filter(o => o.Id == this.termGrade.TermDefinitionId).length > 0) {\r\n this.longDescription = this.selectedCourse.CourseTerms.filter(o => o.Id == this.termGrade.TermDefinitionId)[0].LongDescription;\r\n }\r\n }\r\n\r\n this.gradeScale = [];\r\n if (this.data.gradingScale != null && this.data.gradingScale != '') {\r\n if (this.data.gradingScale.indexOf(',') > -1) {\r\n this.gradeScale = this.data.gradingScale.split(',');\r\n }\r\n else if (this.data.gradingScale.length > 0) {\r\n this.gradeScale.push(this.data.gradingScale);\r\n }\r\n }\r\n\r\n if (this.data.gradingTermDesc != null && this.data.gradingTermDesc != undefined && this.data.gradingTermDesc != '') {\r\n this.isGradeBookGrade = true;\r\n }\r\n\r\n this.studentSchedules = this.data.studentSchedules;\r\n for (let i = 0; i < this.studentSchedules.length; i++) {\r\n if (this.studentSchedules[i].Id == this.gradeId) {\r\n const ReportCardGrades = this.studentSchedules[i];\r\n this.course = ReportCardGrades.Course;\r\n this.subjectSection = ReportCardGrades.SubjectCode + '-' + ReportCardGrades.Section;\r\n this.school = ReportCardGrades.SchoolName;\r\n\r\n if (this.LoginSettings.ParentPortalAssignmentsDisplayProfiles) {\r\n this.courseName = ReportCardGrades.Course + ' - ' + ReportCardGrades.Section;\r\n }\r\n else {\r\n if (ReportCardGrades.Term == 'Year') {\r\n this.courseName = ReportCardGrades.Course + ' - Yr';\r\n }\r\n else {\r\n this.courseName = ReportCardGrades.Course + ' - ' + ReportCardGrades.Term;\r\n }\r\n }\r\n this.teacherName = ReportCardGrades.TeacherName;\r\n if (ReportCardGrades.CourseTerms.length > 0) {\r\n const _gradingTerm = this.data.selectedGradingTerm;\r\n this.courseTerm = ReportCardGrades.CourseTerms.filter(function (el) { return el.ShortDescription = _gradingTerm; })[0];\r\n }\r\n\r\n if (this.data.selectedIsStandardView == false || this.isTermSelected == true) {\r\n const ReportCardGradesDetails = this.studentSchedules[i].ReportCardGradesTerms;\r\n for (let j = 0; j < ReportCardGradesDetails.length; j++) {\r\n if (((ReportCardGradesDetails[j].Grade != '' || ReportCardGradesDetails[j].DisplayGrade != '') && ReportCardGradesDetails[j].GradingTerm != null) || (this.isTermSelected == true && ReportCardGradesDetails[j].GradingTerm != null)) {\r\n if (ReportCardGradesDetails[j].GradingTerm == this.gradingTerm) {\r\n this.grade = ReportCardGradesDetails[j].DisplayGrade;\r\n if (ReportCardGradesDetails[j].Comment != null) {\r\n this.comment = ReportCardGradesDetails[j].Comment;\r\n }\r\n if (ReportCardGradesDetails[j].Citizenship != null) {\r\n this.citizenship = ReportCardGradesDetails[j].Citizenship;\r\n }\r\n if (ReportCardGradesDetails[j].CitizenshipLabel != null) {\r\n this.citizenshipLabel = ReportCardGradesDetails[j].CitizenshipLabel;\r\n }\r\n else {\r\n this.citizenshipLabel = 'Citizenship';\r\n }\r\n if (ReportCardGradesDetails[j].Workhabits != null) {\r\n this.workhabits = ReportCardGradesDetails[j].Workhabits;\r\n if (this.workhabits.length > 0) {\r\n this.behaviorSkills = this.workhabits.split(';');\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (let j = 0; j < this.studentSchedules[i].ReportCardGradesStandards.length; j++) {\r\n const ReportCardGradesStandard = this.studentSchedules[i].ReportCardGradesStandards[j];\r\n if (ReportCardGradesStandard != null) {\r\n if (ReportCardGradesStandard.Id == this.data.id) {\r\n const ReportCardGradesDetails = ReportCardGradesStandard.ReportCardGradesTerms;\r\n if (ReportCardGradesDetails != null) {\r\n for (let k = 0; k < ReportCardGradesDetails.length; k++) {\r\n if (ReportCardGradesDetails[k].Grade != '' && ReportCardGradesDetails[k].GradingTerm != null) {\r\n if (ReportCardGradesDetails[k].GradingTerm == this.gradingTerm) {\r\n if (ReportCardGradesDetails[k].Grade != null && ReportCardGradesDetails[k].PercentGrade != null) {\r\n this.grade = ReportCardGradesDetails[k].PercentGrade + '[' + ReportCardGradesDetails[k].Grade + ']';\r\n } else if (ReportCardGradesDetails[k].Grade != null) {\r\n this.grade = ReportCardGradesDetails[k].Grade;\r\n } else if (ReportCardGradesDetails[k].PercentGrade != null) {\r\n this.grade = ReportCardGradesDetails[k].PercentGrade;\r\n }\r\n const _gradingTerm = this.gradingTerm;\r\n const traditionalGrade = this.studentSchedules[i].ReportCardGradesTerms.filter(function (el) { return el.GradingTerm = _gradingTerm; })[0];\r\n if (traditionalGrade != null && traditionalGrade.Comment != null) {\r\n this.comment = traditionalGrade.Comment;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n selectedView() {\r\n if (this.isStandardView == true && this.isTermSelected == false) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n showStandard() {\r\n if (this.isStandardView == true && this.isTermSelected == false) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n viewAssignment() {\r\n this.assignmentService.selectedCourse = this.selectedCourse;\r\n this.assignmentService.selectedSectionId = this.selectedCourse.SiteSectionId;\r\n this.assignmentService.selectedGP = this.gradingTerm;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n }\r\n\r\n this.dialogRef.close('Ok was clicked');\r\n }\r\n\r\n OkClick() {\r\n this.dialogRef.close('Ok was clicked');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n}\r\n","
\r\n No Standard-Based Grades exist for this student.
\r\n
\r\n
\r\n
1 && grades.SchoolName != studentEnrollment.SchoolName\"\r\n style=\"padding-top:20px;\">\r\n {{grades.SchoolName}}\r\n
\r\n\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Meets\r\n {{ss.Meets}}\r\n \r\n \r\n Term\r\n {{ss.Term}}\r\n \r\n \r\n Course-Section\r\n \r\n {{ss.SubjectCode}}-{{ss.Section}}\r\n \r\n \r\n Course Name\r\n \r\n {{ss.Course}}\r\n \r\n \r\n Teacher Name\r\n \r\n {{ss.Teacher}}\r\n \r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n Attendance\r\n Email Teacher\r\n Class Information\r\n Teacher Profile\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Standard\r\n \r\n \r\n \r\n {{term.GradingTerm}}\r\n \r\n \r\n {{term.OverrideGradingTerm}}\r\n \r\n \r\n
{{termGrades.Standard}}\r\n \r\n {{grade.Grade}}\r\n \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, OnInit, Input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\n\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { ReportCardGradesTerm, GradesData, GradesBehaviorSocialSkills } from '../grades.model';\r\nimport { CourseDescriptionComponent } from '../course-description/course-description.component';\r\nimport { CommentsAndBehaviorMarksComponent } from '../comments-and-behavior-marks/comments-and-behavior-marks.component';\r\nimport { ProfileViewerDialogComponent } from '../../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { AssignmentService } from '../../assignment/assignment.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport * as _ from 'lodash';\r\nimport { SchoolYearSettings } from '../../../shared-components/year/school-year-settings.model';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-standards-based-grades',\r\n templateUrl: './standards-based-grades.component.html',\r\n styleUrls: ['../grades.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class StandardsBasedGradesComponent implements OnInit {\r\n\r\n @Input() studentSchedules: CourseSchedule[];\r\n @Input() studentTermsStandardTab: ReportCardGradesTerm[];\r\n @Input() showAssignmentLink: boolean;\r\n @Input() showAttendanceLink: boolean;\r\n @Input() showSendEmailLink: boolean;\r\n @Input() isProgressGrades: boolean;\r\n @Input() isBusy: boolean;\r\n @Input() gradesBehaviorSocialSkills: GradesBehaviorSocialSkills[];\r\n @Input() schoolYearSettings: SchoolYearSettings[];\r\n\r\n studentEnrollment = this.studentService.studentEnrollment;\r\n columnsToDisplay = ['More', 'Meets', 'Term', 'SubjectCode', 'Course', 'Teacher'];\r\n standardBasedGrades: GradesData[] = [];\r\n courseDescriptionDialogRef: MatDialogRef;\r\n commentsAndBehaviorMarksDialogRef: MatDialogRef;\r\n profileViewerDialogRef: MatDialogRef;\r\n selectedStudentSubscription: Subscription;\r\n enableClassInfoTeacherProfiles = false;\r\n\r\n constructor(\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private sendEmailService: SendEmailService,\r\n private assignmentService: AssignmentService,\r\n private userService: UserService,\r\n ) {\r\n this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (studentId > 0) {\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.enableClassInfoTeacherProfiles = this.loginService.LoginSettings.EnableClassInformationandTeacherProfiles;\r\n this.getStandardBasedGrades();\r\n }\r\n\r\n getStandardBasedGrades() {\r\n this.standardBasedGrades = [];\r\n this.studentSchedules.forEach((schedule) => {\r\n if (schedule.ShowStandardTab == true) {\r\n if (this.standardBasedGrades.filter(o => o.SchoolName == schedule.SchoolName).length == 0) {\r\n const siteYearId: number = schedule.SiteYearId;\r\n const schoolName: string = schedule.SchoolName;\r\n const studentSchedulesData = this.studentSchedules.filter(o => o.SchoolName == schoolName && o.ShowOnGradesPage == true && o.ShowStandardTab == true);\r\n const terms = this.studentTermsStandardTab.filter(o => o.SchoolName == schoolName);\r\n const schoolYearSettings = this.schoolYearSettings.filter(o => o.Id == schedule.SiteYearId)[0];\r\n if (!schoolYearSettings != undefined) {\r\n studentSchedulesData.forEach(element => {\r\n if (element.ReportCardGradesTerms != undefined) {\r\n element.TempReportCardGradesTerms = _.cloneDeep(element.ReportCardGradesTerms);\r\n let newTerms = element.ReportCardGradesTerms;\r\n newTerms = newTerms.filter(function (elementTerms) {\r\n return (elementTerms.GradingTerm.indexOf('P') >= 0\r\n || (schoolYearSettings && schoolYearSettings.UsingTermGrades && elementTerms.GradingTerm.indexOf('T') >= 0)\r\n || (schoolYearSettings && !schoolYearSettings.UsingTermGrades && schoolYearSettings.UsingSemesterGrades && elementTerms.GradingTerm.indexOf('S') >= 0));\r\n });\r\n element.TempReportCardGradesTerms = newTerms;\r\n }\r\n\r\n if (element.ReportCardGradesStandards != undefined) {\r\n element.ReportCardGradesStandards.forEach(elementTG => {\r\n if (elementTG.ReportCardGradesTerms != undefined) {\r\n let newGrades = elementTG.ReportCardGradesTerms;\r\n newGrades = newGrades.filter(function (elementGradingTerm) {\r\n return (elementGradingTerm.GradingTerm.indexOf('P') >= 0\r\n || (schoolYearSettings && schoolYearSettings.UsingTermGrades && elementGradingTerm.GradingTerm.indexOf('T') >= 0)\r\n || (schoolYearSettings && !schoolYearSettings.UsingTermGrades && schoolYearSettings.UsingSemesterGrades && elementGradingTerm.GradingTerm.indexOf('S') >= 0));\r\n });\r\n elementTG.ReportCardGradesTerms = newGrades;\r\n }\r\n });\r\n }\r\n });\r\n } else {\r\n studentSchedulesData.forEach(ele => {\r\n ele.TempReportCardGradesTerms = ele.ReportCardGradesTerms;\r\n });\r\n }\r\n\r\n this.standardBasedGrades.push({\r\n SiteYearId: siteYearId,\r\n SchoolName: schoolName,\r\n Terms: terms,\r\n AngularMatData: new TylerMatTableDataSource(studentSchedulesData)\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n viewAssignments(course: CourseSchedule, gradingTerm: string) {\r\n this.assignmentService.selectedCourse = course;\r\n this.assignmentService.selectedSectionId = course.SiteSectionId;\r\n this.assignmentService.selectedGP = gradingTerm;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n }\r\n }\r\n\r\n viewAssignment(course: CourseSchedule) {\r\n this.assignmentService.selectedCourse = course;\r\n this.assignmentService.selectedSectionId = course.SiteSectionId;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n }\r\n }\r\n\r\n viewAttendance(course: CourseSchedule) {\r\n this.studentService.selectedCourse = course;\r\n this.studentService.selectedSectionId = course.SiteSectionId;\r\n this.studentService.selected = '3';\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/attendance');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/attendance');\r\n }\r\n }\r\n\r\n sendEmail(course: CourseSchedule) {\r\n if (course.TeacherEmail != null && course.TeacherEmail != '') {\r\n this.sendEmailService.teacherName = course.TeacherName;\r\n this.sendEmailService.teacherEmailAddress = course.TeacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n }\r\n\r\n viewCourseDescription(subjectId: number) {\r\n const studentSchedule = this.studentSchedules.filter(function (o) { return o.Id == subjectId; })[0];\r\n this.courseDescriptionDialogRef = this.dialog.open(CourseDescriptionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '450px',\r\n data: { studentSchedule: studentSchedule }\r\n });\r\n }\r\n\r\n viewCourseProfile(course: CourseSchedule) {\r\n this.profileViewerDialogRef = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n // eslint-disable-next-line camelcase\r\n courseSSEC_ID: course.SiteSectionId,\r\n courseName: course.Course,\r\n courseSection: course.SubjectCode + '-' + course.Section,\r\n teacherId: course.TeacherMemId,\r\n teacherName: course.TeacherName,\r\n school: course.SchoolName,\r\n profiles: course.CourseProfile,\r\n showTeacherProfileLink: course.HasTeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n\r\n this.profileViewerDialogRef.componentInstance.teacherProfileClick.pipe(take(1)).subscribe(() => {\r\n this.viewTeacherProfile(course);\r\n });\r\n }\r\n\r\n viewTeacherProfile(course: CourseSchedule) {\r\n this.profileViewerDialogRef = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: course.TeacherMemId,\r\n teacherName: course.TeacherName,\r\n school: course.SchoolName,\r\n profiles: course.TeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n commentsAndBehaviorMarksClick(course: CourseSchedule, termGrade: ReportCardGradesTerm) {\r\n if (this.showGradesLink(termGrade)) {\r\n let grade: string = termGrade.Grade;\r\n let isGradeBookGrade: boolean = termGrade.IsGradeBookGrade;\r\n let gpDesc = termGrade.GradingTermDescription;\r\n\r\n if (grade == null) {\r\n grade = '';\r\n }\r\n\r\n if (this.showAssignmentLink == false) {\r\n isGradeBookGrade = false;\r\n gpDesc = '';\r\n }\r\n else if (isGradeBookGrade == false && termGrade.IsGradeBookExists) {\r\n isGradeBookGrade = true;\r\n }\r\n\r\n if (isGradeBookGrade == true && ((termGrade.Comment != null && termGrade.Comment.length > 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0))) {\r\n this.showCommentsAndBehaviorMarksPopUp(course, termGrade, isGradeBookGrade, gpDesc);\r\n }\r\n else if ((termGrade.Comment != null && termGrade.Comment.length > 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0)) {\r\n this.showCommentsAndBehaviorMarksPopUp(course, termGrade, isGradeBookGrade, gpDesc);\r\n }\r\n else if (isGradeBookGrade == true || (isGradeBookGrade == false && gpDesc != undefined && gpDesc != '')) {\r\n let gradingTerm: string = termGrade.GradingTerm;\r\n if (gradingTerm.indexOf('X') == 0) {\r\n gradingTerm = gradingTerm.replace('X', 'S');\r\n }\r\n // Get parent Term for progress grades\r\n if (this.isProgressGrades == true && gradingTerm.indexOf('P') > -1) {\r\n for (let i = 0; i < this.studentTermsStandardTab.length; i++) {\r\n if (this.studentTermsStandardTab[i].GradingTerm == gradingTerm) {\r\n for (let j = i + 1; j < this.studentTermsStandardTab.length; j++) {\r\n if (this.studentTermsStandardTab[j].GradingTerm.indexOf('T') > -1 || this.studentTermsStandardTab[j].GradingTerm.indexOf('S') > -1) {\r\n gradingTerm = this.studentTermsStandardTab[j].GradingTerm;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.viewAssignments(course, gradingTerm);\r\n }\r\n }\r\n }\r\n\r\n showCommentsAndBehaviorMarksPopUp(course: CourseSchedule, gradingTerm: ReportCardGradesTerm, isGradeBookGrade: boolean, gpDesc: string) {\r\n let behaviorSocialSkillDescription = 'Behavior/SocialSkills';\r\n const behaviorSocialSkill = this.gradesBehaviorSocialSkills.filter(o => o.SiteYearId == course.SiteYearId)[0];\r\n if (behaviorSocialSkill != null) {\r\n behaviorSocialSkillDescription = behaviorSocialSkill.behaviorSocialSkillDescription;\r\n }\r\n\r\n this.commentsAndBehaviorMarksDialogRef = this.dialog.open(CommentsAndBehaviorMarksComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '500px',\r\n data: {\r\n selectedGradeId: course.Id,\r\n selectedIsStandardView: true,\r\n selectedGradingTerm: gradingTerm.GradingTerm,\r\n gradingTermDesc: gpDesc,\r\n selectedStandard: 'none',\r\n isGradeBookGrade: isGradeBookGrade,\r\n selectedSubjectCode: course.SubjectCode,\r\n selectedSection: course.Section,\r\n selectedId: null,\r\n gradingScale: course.GradingCycle,\r\n schoolName: course.SchoolName,\r\n isTermSelected: true,\r\n studentSchedules: this.studentSchedules,\r\n course: course,\r\n termGrade: gradingTerm,\r\n behaviorSocialSkillDescription: behaviorSocialSkillDescription\r\n }\r\n });\r\n }\r\n\r\n showGradesLink(term) {\r\n if (this.showAssignmentLink && (term.IsGradeBookGrade || term.IsGradeBookExists)) {\r\n return true;\r\n }\r\n else if (term.Comment != null && term.Comment.length > 0) {\r\n return true;\r\n }\r\n else if (term.Workhabits != null && term.Workhabits.length > 0) {\r\n return true;\r\n }\r\n else if (term.Citizenship != null && term.Citizenship.length > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.standardBasedGrades[0].AngularMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n return this.standardBasedGrades[0].AngularMatData.toggleExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n return this.standardBasedGrades.forEach((st, index) => {\r\n this.standardBasedGrades[index].AngularMatData.expandAll(expand);\r\n });\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: CourseSchedule): string {\r\n const colList: string[] = ['Meets', 'Term', 'SubjectCode', 'Course', 'Teacher'];\r\n\r\n const dataList: string[] = [row.Meets,\r\n row.Term,\r\n row.SubjectCode.concat('-', row.Section),\r\n row.Course,\r\n row.Teacher];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (row.ReportCardGradesStandards.length > 0 ? ' Expand for more details' : ' No additional details');\r\n }\r\n\r\n getAriaDetailRow(row: any): string {\r\n if (row.length > 0) {\r\n const colList: string[] = ['Standard'];\r\n for (let i = 0; i < row.length; i++) {\r\n colList.push(row[i].GradingTerm);\r\n }\r\n const reportCardGradesTerms = row[0].ReportCardGradesTerms;\r\n const dataList: string[] = [];\r\n dataList.push(row[0].Standard);\r\n for (let j = 0; j < reportCardGradesTerms.length; j++) {\r\n dataList.push(reportCardGradesTerms[j].Grade);\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","
\r\n No Grades exist for this student.\r\n
\r\n\r\n
\r\n
\r\n
\r\n
1 && grades.SchoolName != studentEnrollment.SchoolName\"\r\n style=\"padding-top:20px;\">\r\n \r\n {{grades.SchoolName}}\r\n \r\n
\r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Meets\r\n \r\n {{ss.Meets}}\r\n \r\n \r\n Term\r\n \r\n {{ss.Term}}\r\n \r\n \r\n Course Name\r\n \r\n {{ss.Course}}\r\n \r\n \r\n Teacher\r\n \r\n {{ss.Teacher}}\r\n \r\n \r\n \r\n {{term.GradingTerm}}\r\n {{term.OverrideGradingTerm}}\r\n \r\n
\r\n 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0) || (termGrade.GradingTermDescription != null && termGrade.GradingTermDescription.length > 0 && showAssignmentLink == true)) }\">\r\n 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0)) || (termGrade.GradingTermDescription != null && termGrade.GradingTermDescription.length > 0 && showAssignmentLink == true)) ? 'blue' : 'black'}\">\r\n {{termGrade.DisplayGrade}}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Course-Section{{ss.SubjectCode}}-{{ss.Section}}
Credits Attempted/Earned\r\n {{ss.CreditAttempted}}/{{ss.CreditEarned}}
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Assignments\r\n \r\n Attendance\r\n \r\n Email Teacher\r\n \r\n Course\r\n / Teacher Info\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
 
\r\n
Category\r\n
\r\n
\r\n \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\r\n \r\n Weight\r\n \r\n {{term.Name}}\r\n
\r\n {{category.Name}}\r\n \r\n {{category.Weight}}%\r\n \r\n {{getCategoryAverage(ss, category, term)}}\r\n
\r\n
\r\n
\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, OnInit, Input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\n\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/loginSetting.model';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\nimport { SendEmailService } from '../../../shared-modules/send-email/send-email.service';\r\nimport { ReportCardGradesTerm, GradesData, GradesBehaviorSocialSkills } from '../grades.model';\r\nimport { CourseDescriptionComponent } from '../course-description/course-description.component';\r\nimport { CommentsAndBehaviorMarksComponent } from '../comments-and-behavior-marks/comments-and-behavior-marks.component';\r\nimport { ProfileViewerDialogComponent } from '../../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { AssignmentService } from '../../assignment/assignment.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { SchoolYearSettings } from '../../../shared-components/year/school-year-settings.model';\r\nimport { take } from 'rxjs/operators';\r\n@Component({\r\n selector: 'app-traditional-grades',\r\n templateUrl: './traditional-grades.component.html',\r\n styleUrls: ['../grades.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class TraditionalGradesComponent implements OnInit {\r\n\r\n @Input() studentSchedules: CourseSchedule[];\r\n @Input() studentTerms: ReportCardGradesTerm[];\r\n @Input() showAssignmentLink: boolean;\r\n @Input() showAttendanceLink: boolean;\r\n @Input() showSendEmailLink: boolean;\r\n @Input() isProgressGrades: boolean;\r\n @Input() isBusy: boolean;\r\n @Input() gradesBehaviorSocialSkills: GradesBehaviorSocialSkills[];\r\n @Input() schoolYearSettings: SchoolYearSettings[];\r\n studentEnrollment = this.studentService.studentEnrollment;\r\n traditionalGrades: GradesData[] = [];\r\n courseDescriptionDialogRef: MatDialogRef;\r\n commentsAndBehaviorMarksDialogRef: MatDialogRef;\r\n profileViewerDialogRef: MatDialogRef;\r\n selectedStudentSubscription: Subscription;\r\n enableClassInfoTeacherProfiles = false;\r\n\r\n constructor(\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private sendEmailService: SendEmailService,\r\n private assignmentService: AssignmentService,\r\n private userService: UserService,\r\n ) {\r\n this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (studentId > 0) {\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.enableClassInfoTeacherProfiles = this.loginService.LoginSettings.EnableClassInformationandTeacherProfiles;\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n if (this.studentEnrollment != undefined) {\r\n this.getTraditionalGrades();\r\n } else {\r\n this.selectedStudentSubscription = this.studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n if (studentId > 0) {\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n }\r\n });\r\n }\r\n }\r\n\r\n getTraditionalGrades() {\r\n this.traditionalGrades = [];\r\n this.studentSchedules.forEach(function (schedule) {\r\n if (schedule.ShowTraditionalTab == true) {\r\n if (this.traditionalGrades.filter(o => o.SchoolName == schedule.SchoolName).length == 0) {\r\n const siteYearId: number = schedule.SiteYearId;\r\n const schoolName: string = schedule.SchoolName;\r\n const studentSchedulesData = this.studentSchedules.filter(o => o.SchoolName == schoolName && o.ShowOnGradesPage == true && o.ShowTraditionalTab == true);\r\n let terms = [];\r\n if (this.isProgressGrades == true) {\r\n terms = this.studentTerms.filter(o => o.SchoolName == schoolName);\r\n } else {\r\n this.studentTerms.forEach(term => {\r\n if (term.GradingTerm.indexOf('P') < 0 && term.SchoolName == schoolName) {\r\n terms.push(term);\r\n }\r\n });\r\n }\r\n this.traditionalGrades.push({\r\n SiteYearId: siteYearId,\r\n SchoolName: schoolName,\r\n Terms: terms,\r\n AngularMatData: new TylerMatTableDataSource(studentSchedulesData)\r\n });\r\n }\r\n }\r\n }.bind(this));\r\n }\r\n\r\n getColumnsToDisplay(terms: ReportCardGradesTerm[], siteYearId: number) {\r\n const columnsToDisplay: string[] = ['More', 'Meets', 'Term', 'Course', 'Teacher'];\r\n const schoolYearSettings: SchoolYearSettings = this.schoolYearSettings.filter(o => o.Id == siteYearId)[0];\r\n const isProgressGrades: boolean = this.isProgressGrades;\r\n for (const term of terms) {\r\n if (schoolYearSettings != null && ((schoolYearSettings.UsingFinalGrade && term.GradingTerm.indexOf('Y') > -1)\r\n || (schoolYearSettings.UsingSemesterGrades && (term.GradingTerm.indexOf('S') > -1) || term.GradingTerm.indexOf('X') > -1)\r\n || (schoolYearSettings.UsingTermGrades && term.GradingTerm.indexOf('T') > -1)\r\n || ((schoolYearSettings.UsingProgressGrades || isProgressGrades == true) && term.GradingTerm.indexOf('P') > -1))) {\r\n columnsToDisplay.push(term.GradingTerm);\r\n }\r\n }\r\n return columnsToDisplay;\r\n }\r\n\r\n viewAssignments(course: CourseSchedule, gradingTerm: string) {\r\n this.assignmentService.selectedCourse = course;\r\n this.assignmentService.selectedSectionId = course.SiteSectionId;\r\n this.assignmentService.selectedCourseSection = course.SubjectCode + '-' + course.Section;\r\n this.assignmentService.selectedGP = gradingTerm;\r\n this.assignmentService.preventTabSwitch = true;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n }\r\n }\r\n\r\n viewAttendance(course: CourseSchedule) {\r\n this.studentService.selectedCourse = course;\r\n this.studentService.selectedSectionId = course.SiteSectionId;\r\n this.studentService.selected = '3';\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/attendance');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/attendance');\r\n }\r\n }\r\n\r\n sendEmail(course: CourseSchedule) {\r\n if (course.TeacherEmail != null && course.TeacherEmail != '') {\r\n this.sendEmailService.teacherName = course.TeacherName;\r\n this.sendEmailService.teacherEmailAddress = course.TeacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n }\r\n\r\n viewCourseDescription(subjectId: number) {\r\n const studentSchedule = this.studentSchedules.filter(function (o) { return o.Id == subjectId; })[0];\r\n this.courseDescriptionDialogRef = this.dialog.open(CourseDescriptionComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '450px',\r\n data: { studentSchedule: studentSchedule }\r\n });\r\n }\r\n\r\n viewCourseProfile(course: CourseSchedule) {\r\n this.profileViewerDialogRef = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n // eslint-disable-next-line camelcase\r\n courseSSEC_ID: course.SiteSectionId,\r\n courseName: course.Course,\r\n courseSection: course.SubjectCode + '-' + course.Section,\r\n teacherId: course.TeacherMemId,\r\n teacherName: course.TeacherName,\r\n school: course.SchoolName,\r\n profiles: course.CourseProfile,\r\n showTeacherProfileLink: course.HasTeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n\r\n this.profileViewerDialogRef.componentInstance.teacherProfileClick.pipe(take(1)).subscribe(() => {\r\n this.viewTeacherProfile(course);\r\n });\r\n }\r\n\r\n viewTeacherProfile(course: CourseSchedule) {\r\n this.profileViewerDialogRef = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: course.TeacherMemId,\r\n teacherName: course.TeacherName,\r\n school: course.SchoolName,\r\n profiles: course.TeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n // eslint-disable-next-line complexity\r\n commentsAndBehaviorMarksClick(course: CourseSchedule, termGrade: ReportCardGradesTerm) {\r\n let grade: string = termGrade.Grade;\r\n let isGradeBookGrade: boolean = termGrade.IsGradeBookGrade;\r\n let gpDesc = termGrade.GradingTermDescription;\r\n\r\n if (grade == null) {\r\n grade = '';\r\n }\r\n\r\n if (grade.length == 0) {\r\n return false;\r\n }\r\n\r\n if (this.showAssignmentLink == false) {\r\n isGradeBookGrade = false;\r\n gpDesc = '';\r\n }\r\n else if (isGradeBookGrade == false && termGrade.IsGradeBookExists) {\r\n isGradeBookGrade = true;\r\n }\r\n\r\n if (isGradeBookGrade == true && ((termGrade.Comment != null && termGrade.Comment.length > 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0))) {\r\n this.showCommentsAndBehaviorMarksPopUp(course, termGrade, isGradeBookGrade, gpDesc);\r\n }\r\n else if ((termGrade.Comment != null && termGrade.Comment.length > 0) || (termGrade.Workhabits != null && termGrade.Workhabits.length > 0) || (termGrade.Citizenship != null && termGrade.Citizenship.length > 0)) {\r\n this.showCommentsAndBehaviorMarksPopUp(course, termGrade, isGradeBookGrade, gpDesc);\r\n }\r\n else if (isGradeBookGrade == true || (isGradeBookGrade == false && gpDesc != undefined && gpDesc != '')) {\r\n let gradingTerm: string = termGrade.GradingTerm;\r\n if (gradingTerm.indexOf('X') == 0) {\r\n gradingTerm = gradingTerm.replace('X', 'S');\r\n }\r\n // Get parent Term for progress grades\r\n if (this.isProgressGrades == true && gradingTerm.indexOf('P') > -1) {\r\n for (let i = 0; i < this.studentTerms.length; i++) {\r\n if (this.studentTerms[i].GradingTerm == gradingTerm) {\r\n for (let j = i + 1; j < this.studentTerms.length; j++) {\r\n if (this.studentTerms[j].GradingTerm.indexOf('T') > -1) {\r\n gradingTerm = this.studentTerms[j].GradingTerm;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.viewAssignments(course, gradingTerm);\r\n }\r\n }\r\n\r\n showCommentsAndBehaviorMarksPopUp(course: CourseSchedule, termGrade: ReportCardGradesTerm, isGradeBookGrade: boolean, gpDesc: string) {\r\n let behaviorSocialSkillDescription = 'Behavior/SocialSkills';\r\n const behaviorSocialSkill = this.gradesBehaviorSocialSkills.filter(o => o.SiteYearId == course.SiteYearId)[0];\r\n if (behaviorSocialSkill != null) {\r\n behaviorSocialSkillDescription = behaviorSocialSkill.behaviorSocialSkillDescription;\r\n }\r\n\r\n this.commentsAndBehaviorMarksDialogRef = this.dialog.open(CommentsAndBehaviorMarksComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '500px',\r\n data: {\r\n selectedGradeId: course.Id,\r\n selectedIsStandardView: false,\r\n selectedGradingTerm: termGrade.GradingTerm,\r\n gradingTermDesc: gpDesc,\r\n selectedStandard: 'none',\r\n isGradeBookGrade: isGradeBookGrade,\r\n selectedSubjectCode: course.SubjectCode,\r\n selectedSection: course.Section,\r\n selectedId: null,\r\n gradingScale: course.GradingCycle,\r\n schoolName: course.SchoolName,\r\n isTermSelected: false,\r\n studentSchedules: this.studentSchedules,\r\n course: course,\r\n termGrade: termGrade,\r\n behaviorSocialSkillDescription: behaviorSocialSkillDescription\r\n }\r\n });\r\n }\r\n\r\n showCategoryScores(course: CourseSchedule) {\r\n return course.CategoryAverages != undefined && course.CategoryAverages.length > 0;\r\n }\r\n\r\n getCategoryAverage(course: CourseSchedule, category, term) {\r\n const average = course.CategoryAverages.filter(c => c.TermId == term.Id && c.CategoryName == category.Name)[0];\r\n return (average != undefined) ? average.CategoryAverage : '';\r\n }\r\n\r\n actionMenuClick(menuName: string, course: CourseSchedule) {\r\n switch (menuName) {\r\n case 'Course Description':\r\n this.viewCourseDescription(course.Id);\r\n break;\r\n case 'Class Information':\r\n this.viewCourseProfile(course);\r\n break;\r\n case 'Teacher Profile':\r\n this.viewTeacherProfile(course);\r\n break;\r\n }\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.traditionalGrades[0].AngularMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n return this.traditionalGrades[0].AngularMatData.toggleExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n return this.traditionalGrades.forEach((tr, index) => {\r\n this.traditionalGrades[index].AngularMatData.expandAll(expand);\r\n });\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: CourseSchedule, terms: ReportCardGradesTerm[]): string {\r\n let colList: string[] = [];\r\n colList = this.getColumnsToDisplay(terms, row.SiteYearId);\r\n\r\n const dataList: string[] = [row.Meets,\r\n row.Term,\r\n row.Course,\r\n row.Teacher];\r\n for (let i = 0; i < terms.length; i++) {\r\n const detailObject = row.ReportCardGradesTerms.filter(o => o.GradingTerm == terms[i].GradingTerm);\r\n for (let j = 0; j < detailObject.length; j++) {\r\n dataList.push(detailObject[j].DisplayGrade);\r\n }\r\n }\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n getAriaDetailRow(row: CourseSchedule): string {\r\n const colList: string[] = ['Course-Section', 'Credits Attempted/Earned'];\r\n const dataList: string[] = [\r\n row.SubjectCode.concat('-', row.Section),\r\n row.CreditAttempted.toString().concat('/', row.CreditEarned.toString()),\r\n ];\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n\r\n
\r\n {{gradesMessage}}\r\n
\r\n\r\n 1\" [tabNames]=\"tabNames\" (selectionsChange)=\"selections = $event\"\r\n (selectionsChangeIndex)=\"selectionChange($event)\" [startingIndex]=\"selectionIndex\">\r\n\r\n
0) ? '155px' : '135px'}\" class=\"removePrintAbsolute\" style=\"position:absolute; right:10px; z-index:999; top:135px;\">\r\n
\r\n
\r\n = Current Grade (In-Progress, not yet finalized for Report Card)\r\n
\r\n\r\n
\r\n
\r\n \r\n \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 { SelectionModel } from '@angular/cdk/collections';\r\nimport { Component, EventEmitter, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { GradeOverrideLegendComponent } from '../../shared-components/controls/grade-override-legend/grade-override-legend.component';\r\nimport { CourseSchedule } from '../../shared-components/student/course-schedule.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserSchoolYearPolicies } from '../../shared-components/user/user-school-year-policies.model';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { SchoolYearSettings } from '../../shared-components/year/school-year-settings.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Student360Service } from '../student360.service';\r\nimport { CodeLegendComponent } from './code-legend/code-legend.component';\r\nimport { CategoryAverage, GradesBehaviorSocialSkills, GradesPreferences, ReportCardGradesTerm } from './grades.model';\r\nimport { GradesService } from './grades.service';\r\nimport { StandardsBasedGradesComponent } from './standards-based-grades/standards-based-grades.component';\r\nimport { TraditionalGradesComponent } from './traditional-grades/traditional-grades.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-grades',\r\n templateUrl: './grades.component.html',\r\n styles: []\r\n})\r\nexport class GradesComponent implements OnInit, OnDestroy {\r\n\r\n // -----------Grid functionality---------------------------------\r\n selectionIndex = 0;\r\n // ------------Element references--------------------------------\r\n @ViewChild(TraditionalGradesComponent) traditionalGradesComponent: TraditionalGradesComponent;\r\n @ViewChild(StandardsBasedGradesComponent) standardsBasedGradesComponent: StandardsBasedGradesComponent;\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n expandEmitter: boolean;\r\n allowMultiSelect = true;\r\n selections: boolean[] = [];\r\n showGradesMessage = false;\r\n\r\n // ------------------------------------------------------------\r\n userSchoolYearPolicies: UserSchoolYearPolicies;\r\n currentUser: User;\r\n selectedStudent: Student;\r\n student360YearSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n studentEnrollment = this.studentService.studentEnrollment;\r\n gradesPreferences: GradesPreferences;\r\n studentSchedules: CourseSchedule[] = [];\r\n reportCardGradesTerm: ReportCardGradesTerm[] = [];\r\n reportCardStandardGradesTerm: ReportCardGradesTerm[] = [];\r\n studentTerms: ReportCardGradesTerm[] = [];\r\n studentTermsStandardTab: ReportCardGradesTerm[] = [];\r\n categoryAverages: CategoryAverage[] = [];\r\n gradesBehaviorSocialSkills: GradesBehaviorSocialSkills[] = [];\r\n initialSelection = [];\r\n legendDialogRef: MatDialogRef;\r\n overrideLegendDialogRef: MatDialogRef;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n tabNames: string[] = [];\r\n parentPortalSubscription: Subscription;\r\n staffAssignedPortalsSubscription: Subscription;\r\n schoolYearSettings: SchoolYearSettings[] = [];\r\n // ------------Selection/Flags-----------------------------------\r\n gradesMessage = '';\r\n showProgressGrades = false;\r\n isProgressGrades = false;\r\n showAssignmentLink = false;\r\n showAttendanceLink = false;\r\n showSendEmailLink = true;\r\n isBusy = true;\r\n isDualEnrollment = false;\r\n instanceName = '';\r\n\r\n constructor(\r\n private userService: UserService,\r\n private userPreferencesService: UserPreferencesService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private gradesService: GradesService,\r\n private dialog: MatDialog,\r\n private parentPortalService: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private loginService: LoginService\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n if (studentId > 0) {\r\n if (this.studentService.StandradTabByCurrentGrade == true) {\r\n this.selectionIndex = this.studentService.selectionIndex;\r\n }\r\n this.loadStudentInfo(studentId);\r\n }\r\n });\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n });\r\n\r\n if (this.userService.userType == 1) {\r\n this.staffAssignedPortalsSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(_ => {\r\n this.getPortalInfo();\r\n });\r\n }\r\n else {\r\n this.parentPortalSubscription = this.parentPortalService.observableParentAssignedPortalsStream$.subscribe(_ => {\r\n this.getPortalInfo();\r\n });\r\n }\r\n this.getPortalInfo();\r\n this.instanceName = this.loginService.LoginSettings.InstanceName;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.studentService.StandradTabByCurrentGrade == true) {\r\n this.selectionIndex = this.studentService.selectionIndex;\r\n }\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n this.getPortalInfo();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.studentService.StandradTabByCurrentGrade = false;\r\n this.studentService.selectionIndex = 0;\r\n this.studentService.selectedCardCourse = null;\r\n this.student360YearSubscription.unsubscribe();\r\n this.selectedStudentSubscription.unsubscribe();\r\n }\r\n\r\n getPortalInfo() {\r\n if (this.userService.userType == 1) {\r\n if (this.classroom360Service.staffAssignedPortals.filter(x => x.PortalName == 'Attendance' && x.Disabled == false && x.ParentModule != '/classroom360') != null\r\n && this.classroom360Service.staffAssignedPortals.filter(x => x.PortalName == 'Attendance' && x.Disabled == false && x.ParentModule != '/classroom360').length > 0) {\r\n this.showAttendanceLink = true;\r\n }\r\n if (this.classroom360Service.staffAssignedPortals.filter(x => x.PortalName == 'Assignments' && x.Disabled == false && x.ParentModule != '/classroom360') != null\r\n && this.classroom360Service.staffAssignedPortals.filter(x => x.PortalName == 'Assignments' && x.Disabled == false && x.ParentModule != '/classroom360').length > 0) {\r\n this.showAssignmentLink = true;\r\n }\r\n if (this.classroom360Service.staffAssignedPortals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.showSendEmailLink = false;\r\n }\r\n }\r\n else {\r\n if (this.parentPortalService.parentAssignedPortals.filter(x => x.PortalName == 'Attendance' && x.Disabled == false) != null\r\n && this.parentPortalService.parentAssignedPortals.filter(x => x.PortalName == 'Attendance' && x.Disabled == false).length > 0) {\r\n this.showAttendanceLink = true;\r\n }\r\n if (this.parentPortalService.parentAssignedPortals.filter(x => x.PortalName == 'Assignments' && x.Disabled == false) != null\r\n && this.parentPortalService.parentAssignedPortals.filter(x => x.PortalName == 'Assignments' && x.Disabled == false).length > 0) {\r\n this.showAssignmentLink = true;\r\n }\r\n if (this.parentPortalService.parentAssignedPortals.filter(o => o.PortalName == 'Send Email' && o.Disabled == false && o.Deleted == false).length == 0) {\r\n this.showSendEmailLink = false;\r\n }\r\n }\r\n }\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.clearStudentData();\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n if (this.studentEnrollment != undefined) {\r\n this.getReportCardTerms();\r\n }\r\n }\r\n\r\n clearStudentData() {\r\n this.studentSchedules = [];\r\n this.reportCardGradesTerm = [];\r\n this.reportCardStandardGradesTerm = [];\r\n this.studentTerms = [];\r\n this.studentTermsStandardTab = [];\r\n this.categoryAverages = [];\r\n this.studentService.StandradTabByCurrentGrade = false;\r\n this.studentService.selectionIndex = 0;\r\n }\r\n\r\n getReportCardTerms() {\r\n if (this.reportCardGradesTerm.length == 0 && this.studentEnrollment.SiteYearId != undefined) {\r\n this.gradesService.getReportCardTerms(this.studentEnrollment.SiteYearId, true, false).subscribe(data => {\r\n this.reportCardGradesTerm = data;\r\n this.getReportCardTermsStandardTab();\r\n });\r\n }\r\n else {\r\n this.getUserPreferences();\r\n }\r\n }\r\n\r\n getReportCardTermsStandardTab() {\r\n if (this.reportCardStandardGradesTerm.length == 0 && this.studentEnrollment.SiteYearId != undefined) {\r\n this.gradesService.getReportCardTerms(this.studentEnrollment.SiteYearId, true, true).subscribe(data => {\r\n this.reportCardStandardGradesTerm = data;\r\n this.getUserPreferences();\r\n });\r\n }\r\n }\r\n\r\n getReportCardTermsBySiteYear(siteYearId: number, schoolName: string) {\r\n if (siteYearId != undefined && siteYearId > 0) {\r\n this.gradesService.getReportCardTerms(siteYearId, true, true).subscribe(data => {\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].GradingTerm.indexOf('P') >= 0) {\r\n this.showProgressGrades = true;\r\n }\r\n }\r\n data.forEach(function (term: ReportCardGradesTerm) {\r\n term.SchoolName = schoolName;\r\n if (this.studentTerms.filter(function (ele) { return ele.TermDefinitionId == term.TermDefinitionId && ele.GradingTerm == term.GradingTerm; })[0] == null) {\r\n this.studentTerms.push(term);\r\n this.isDualEnrollment = true;\r\n }\r\n if (this.studentTermsStandardTab.filter(function (ele) { return ele.TermDefinitionId == term.TermDefinitionId && ele.GradingTerm == term.GradingTerm; })[0] == null) {\r\n this.studentTermsStandardTab.push(term);\r\n }\r\n }.bind(this));\r\n\r\n this.setTabDetails();\r\n });\r\n }\r\n }\r\n\r\n getUserPreferences() {\r\n if (this.gradesPreferences == null || this.gradesPreferences.ShowProgressGrades == undefined) {\r\n this.userPreferencesService.getUserPreferences(this.selectedStudent.Id, '/OneSISGradesPreferences', 0, '', false).subscribe(data => {\r\n this.gradesPreferences = JSON.parse(data[0]);\r\n for (let i = 0; i < this.reportCardGradesTerm.length; i++) {\r\n if (this.reportCardGradesTerm[i].GradingTerm.indexOf('P') >= 0) {\r\n this.showProgressGrades = true;\r\n }\r\n }\r\n if (this.showProgressGrades == true && this.gradesPreferences.ShowProgressGrades == true) {\r\n this.isProgressGrades = true;\r\n }\r\n\r\n this.getTerms();\r\n });\r\n }\r\n else {\r\n for (let i = 0; i < this.reportCardGradesTerm.length; i++) {\r\n if (this.reportCardGradesTerm[i].GradingTerm.indexOf('P') >= 0) {\r\n this.showProgressGrades = true;\r\n }\r\n }\r\n if (this.showProgressGrades == true && this.gradesPreferences.ShowProgressGrades == true) {\r\n this.isProgressGrades = true;\r\n }\r\n\r\n this.getTerms();\r\n }\r\n }\r\n\r\n saveUserPreferences() {\r\n const xmlStream: string[] = [];\r\n this.gradesPreferences.ShowProgressGrades = this.isProgressGrades;\r\n xmlStream.push(JSON.stringify(this.gradesPreferences));\r\n\r\n this.userPreferencesService.saveUserPreferences(this.selectedStudent.Id, '/OneSISGradesPreferences', xmlStream, 0, '', false).subscribe();\r\n }\r\n\r\n getTerms() {\r\n this.studentTerms = [];\r\n this.studentTermsStandardTab = [];\r\n if (this.isProgressGrades == false) {\r\n this.reportCardGradesTerm.forEach(function (term: ReportCardGradesTerm) {\r\n if (term.GradingTerm.indexOf('P') < 0) {\r\n this.studentTerms.push(term);\r\n }\r\n else {\r\n this.showProgressGrades = true;\r\n }\r\n }.bind(this));\r\n\r\n this.reportCardStandardGradesTerm.forEach(function (term: ReportCardGradesTerm) {\r\n if (term.GradingTerm.indexOf('P') < 0) {\r\n this.studentTermsStandardTab.push(term);\r\n }\r\n else {\r\n this.showProgressGrades = true;\r\n }\r\n }.bind(this));\r\n }\r\n\r\n this.getStudentGrades();\r\n }\r\n\r\n getStudentGrades() {\r\n const siteYearId: number = this.studentEnrollment.SiteYearId;\r\n this.studentService.getStudentGrades(this.selectedStudent.Id, this.yearService.student360Year.Id, this.isProgressGrades).subscribe(data => {\r\n this.studentSchedules = data;\r\n if (this.studentSchedules.length == 0) {\r\n this.isBusy = false;\r\n if (this.selectionIndex == 0) {\r\n this.traditionalGradesComponent.traditionalGrades = [];\r\n }\r\n else if (this.selectionIndex == 1) {\r\n this.standardsBasedGradesComponent.standardBasedGrades = [];\r\n }\r\n this.tabNames = [];\r\n this.clearStudentData();\r\n }\r\n else {\r\n if (this.studentSchedules.filter(function (ele) { return ele.SiteYearId == siteYearId; }).length > 0) {\r\n const schoolName: string = this.studentSchedules.filter(function (ele) { return ele.SiteYearId == siteYearId; })[0].SchoolName;\r\n for (let j = 0; j < this.studentTerms.length; j++) {\r\n if (this.studentTerms[j].SchoolName == null) {\r\n this.studentTerms[j].SchoolName = schoolName;\r\n }\r\n }\r\n\r\n for (let k = 0; k < this.studentTermsStandardTab.length; k++) {\r\n if (this.studentTermsStandardTab[k].SchoolName == null) {\r\n this.studentTermsStandardTab[k].SchoolName = schoolName;\r\n }\r\n }\r\n }\r\n const siteYears: any[] = [];\r\n for (let i = 0; i < this.studentSchedules.length; i++) {\r\n if (siteYears.filter(o => o.SiteYearId == this.studentSchedules[i].SiteYearId).length == 0) {\r\n const siteYear = {\r\n SchoolId: this.studentSchedules[i].SchoolId,\r\n SiteYearId: this.studentSchedules[i].SiteYearId,\r\n SchoolName: this.studentSchedules[i].SchoolName\r\n };\r\n siteYears.push(siteYear);\r\n }\r\n }\r\n\r\n if (siteYears.length > 0) {\r\n const yearId = this.yearService.student360Year.Id != undefined && this.yearService.student360Year.Id != null ? this.yearService.student360Year.Id : this.yearService.defaultYear.Id;\r\n siteYears.forEach(function (siteYear: any) {\r\n this.getSchoolYearSettings(yearId, siteYear.SchoolId);\r\n this.getReportCardBehaviorSocialSkills(siteYear.SiteYearId, siteYear.SchoolName);\r\n this.getReportCardTermsBySiteYear(siteYear.SiteYearId, siteYear.SchoolName);\r\n }.bind(this));\r\n }\r\n else {\r\n this.setTabDetails();\r\n }\r\n\r\n setTimeout(() => {\r\n if (this.selectionIndex == 0) {\r\n this.traditionalGradesComponent.getTraditionalGrades();\r\n }\r\n else if (this.selectionIndex == 1) {\r\n this.standardsBasedGradesComponent.getStandardBasedGrades();\r\n if (this.studentService.selectedCardCourse) {\r\n if (this.standardsBasedGradesComponent.standardBasedGrades.length > 0) {\r\n const row = this.studentSchedules.find(x => (x.SubjectCode + '-' + x.Section).toString().trim().toLowerCase() == this.studentService.selectedCardCourse.CourseNumber.toString().trim().toLowerCase());\r\n this.standardsBasedGradesComponent.toggleExpanded(row);\r\n this.studentService.selectedCardCourse = null;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getSchoolYearSettings(yearId: number, schoolId: number) {\r\n this.yearService.getSchoolYearSettings(yearId, schoolId).subscribe(data => {\r\n this.schoolYearSettings.push(data);\r\n });\r\n }\r\n\r\n setTabDetails() {\r\n this.tabNames = [];\r\n if (this.studentSchedules.filter(o => o.ShowTraditionalTab == true).length > 0) {\r\n this.tabNames.push('TRADITIONAL');\r\n }\r\n if (this.studentSchedules.filter(o => o.ShowStandardTab == true).length > 0) {\r\n this.tabNames.push('STANDARDS-BASED');\r\n if (this.tabNames.length == 1) {\r\n this.selectionIndex = 1;\r\n }\r\n }\r\n else {\r\n this.selectionIndex = 0;\r\n }\r\n\r\n setTimeout(() => {\r\n if (this.isDualEnrollment == true) {\r\n if (this.selectionIndex == 0) {\r\n this.traditionalGradesComponent.getTraditionalGrades();\r\n }\r\n else if (this.selectionIndex == 1) {\r\n this.standardsBasedGradesComponent.getStandardBasedGrades();\r\n }\r\n }\r\n }, 100);\r\n }\r\n\r\n viewProgressGrades() {\r\n this.saveUserPreferences();\r\n this.getReportCardTerms();\r\n }\r\n\r\n getReportCardBehaviorSocialSkills(siteYearId: number, schoolName: string) {\r\n this.gradesService.getReportCardBehaviorSocialSkillDescription(siteYearId).subscribe(result => {\r\n this.gradesBehaviorSocialSkills.push({\r\n SiteYearId: siteYearId,\r\n SchoolName: schoolName,\r\n behaviorSocialSkillDescription: result\r\n });\r\n });\r\n }\r\n\r\n selectionChange(selectionIndex: number) {\r\n this.selectionIndex = selectionIndex;\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n if (this.selectionIndex == 0) {\r\n this.traditionalGradesComponent.expandAll(expand);\r\n }\r\n else if (this.selectionIndex == 1) {\r\n this.standardsBasedGradesComponent.expandAll(expand);\r\n }\r\n }\r\n\r\n legendClick() {\r\n this.legendDialogRef = this.dialog.open(CodeLegendComponent, { panelClass: 'tyl-mat-dialog', maxWidth: '550px' });\r\n const standardCourse = this.studentSchedules.filter(s => s.ShowStandardTab)[0];\r\n this.legendDialogRef.componentInstance.courseId = (standardCourse != undefined) ? standardCourse.Id : 0;\r\n }\r\n\r\n overrideLegendClick() {\r\n this.overrideLegendDialogRef = this.dialog.open(GradeOverrideLegendComponent, { panelClass: 'tyl-mat-dialog', disableClose: true });\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { ReportCardGradesTerm, CurriculumMarkTypes, CategoryAverage } from './grades.model';\r\nimport {SharedService} from '../../shared-components/shared.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GradesService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n // getReportCardTerms\r\n getReportCardTerms(siteYearId: number, IsprogressGrades: boolean, blnIncludeTerms: boolean): Observable {\r\n let queryString = '';\r\n queryString += '?SiteYearId=' + siteYearId +\r\n '&IsprogressGrades=' + IsprogressGrades +\r\n '&blnIncludeTerms=' + blnIncludeTerms;\r\n return this.http.get(System.apiURL.Student + 'GetReportCardTerms' + queryString);\r\n }\r\n\r\n // getCurriculumMarkTypesReadForSubject\r\n getCurriculumMarkTypesReadForSubject(siteSectionId: number): Observable {\r\n return this.sharedService.getCurriculumMarkTypesReadForSubject(siteSectionId);\r\n }\r\n\r\n // getStudentCategoryAverage\r\n getStudentCategoryAverage(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentCategoryAverage' + queryString);\r\n }\r\n\r\n getReportCardBehaviorSocialSkillDescription(siteYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Student + 'GetReportCardBehaviorSocialSkillDescription' + queryString);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ReportCardGradesTerm } from '../grades.model';\r\n\r\n@Pipe({\r\n name: 'standardsBasedGradesFilter'\r\n})\r\nexport class StandardsBasedGradesFilterPipe implements PipeTransform {\r\n\r\n transform(reportCardGradesTerms: ReportCardGradesTerm[], header: ReportCardGradesTerm): any {\r\n return reportCardGradesTerms.filter(o => o.GradingTerm == header.GradingTerm);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { CourseSchedule } from '../../../shared-components/student/course-schedule.model';\r\n\r\n@Pipe({\r\n name: 'traditionalGradesFilter'\r\n})\r\nexport class TraditionalGradesFilterPipe implements PipeTransform {\r\n\r\n transform(course: CourseSchedule, gradingTerm: string): any {\r\n return course.ReportCardGradesTerms.filter(o => o.GradingTerm == gradingTerm);\r\n }\r\n}\r\n","import {System} from '../../shared-components/System';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\n\r\nexport class GPFilterParam {\r\n\r\n\tstatic planTypes: Lookup[];\r\n\tstatic planStatuses = ['Complete', 'Incomplete'];\r\n\tstatic areaStatuses = ['Complete', 'Incomplete'];\r\n\tstatic creditCodeStatuses = ['Complete', 'Incomplete'];\r\n\tstatic courseStatuses = ['Complete', 'Incomplete'];\r\n\r\n\tstatic get planTypeMap() {\r\n\t\treturn GPFilterParam.planTypes ? GPFilterParam.planTypes.map(x => x.Code) : [];\r\n\t}\r\n\r\n\tstatic get planStatusMap() {\r\n\t\treturn GPFilterParam.planStatuses.map(x => x);\r\n\t}\r\n\r\n\tstatic get areaStatusMap() {\r\n\t\treturn GPFilterParam.areaStatuses.map(x => x);\r\n\t}\r\n\r\n\tstatic get creditCodeStatusMap() {\r\n\t\treturn GPFilterParam.creditCodeStatuses.map(x => x);\r\n\t}\r\n\r\n\tstatic get courseStatusMap() {\r\n\t\treturn GPFilterParam.courseStatuses.map(x => x);\r\n\t}\r\n\r\n DefaultDisplay: string;\r\n CreditDecimalPrecision: number;\r\n PlanType: string[] = [];\r\n PlanGroup: string[] = [];\r\n GradPlanStatus: string[] = [];\r\n SubjectAreaStatus: string[] = [];\r\n CreditCodeStatus: string[] = [];\r\n CourseStatus: string[] = [];\r\n GPNeeded: number;\r\n showAllGP = false;\r\n notInGP = false;\r\n\r\n _init_defaultDisplay = 'GP|SA';\r\n _init_CreditDecimalPrecision = 4;\r\n _init_PlanType = 'all';\r\n _init_PlanGroup = 'all';\r\n _init_GradPlanStatus = 'all';\r\n _init_SubjectAreaStatus = 'all';\r\n _init_CreditCodeStatus = 'all';\r\n _init_GPNeeded = 0;\r\n _init_showAllGP = false;\r\n _init_notInGP = false;\r\n _init_CourseStatus = 'all';\r\n\r\n constructor() {\r\n this.init();\r\n }\r\n\r\n isFilterApplied(): boolean {\r\n return (\r\n this.DefaultDisplay != this._init_defaultDisplay ||\r\n !(this.PlanType.includes(this._init_PlanType) || System.arrayEqual(GPFilterParam.planTypeMap, this.PlanType)) ||\r\n !(this.PlanGroup.includes(this._init_PlanGroup)) ||\r\n\r\n !(this.GradPlanStatus.includes(this._init_GradPlanStatus) || System.arrayEqual(GPFilterParam.planStatusMap, this.GradPlanStatus)) ||\r\n !(this.SubjectAreaStatus.includes(this._init_SubjectAreaStatus) || System.arrayEqual(GPFilterParam.areaStatusMap, this.SubjectAreaStatus)) ||\r\n !(this.CreditCodeStatus.includes(this._init_CreditCodeStatus) || System.arrayEqual(GPFilterParam.creditCodeStatusMap, this.CreditCodeStatus)) ||\r\n\t\t\t!(this.CourseStatus.includes(this._init_CourseStatus) || System.arrayEqual(GPFilterParam.courseStatusMap, this.CourseStatus)) ||\r\n this.CreditDecimalPrecision != this._init_CreditDecimalPrecision ||\r\n this.GPNeeded != this._init_GPNeeded\r\n );\r\n }\r\n\r\n init() {\r\n this.DefaultDisplay = this._init_defaultDisplay;\r\n this.PlanType = [this._init_PlanType];\r\n this.PlanGroup = [this._init_PlanGroup];\r\n\r\n this.GradPlanStatus = [this._init_GradPlanStatus];\r\n this.SubjectAreaStatus = [this._init_SubjectAreaStatus];\r\n this.CreditCodeStatus = [this._init_CreditCodeStatus];\r\n\t\tthis.CourseStatus = [this._init_CourseStatus];\r\n\r\n this.CreditDecimalPrecision = this._init_CreditDecimalPrecision;\r\n this.GPNeeded = this._init_GPNeeded;\r\n // this.showAllGP = this._init_showAllGP;\r\n // this.notInGP = this._init_notInGP;\r\n }\r\n}","import { Component, OnInit, Input, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { GPFilterParam } from '../gp-filter-param';\r\n\r\n@Component({\r\n selector: 'app-gp-filter',\r\n templateUrl: './gp-filter.component.html',\r\n styleUrls: ['./gp-filter.component.css']\r\n})\r\nexport class GpFilterComponent implements OnInit, OnDestroy {\r\n\r\n @Input() gpFilterParam: GPFilterParam;\r\n @Output() filterChanged = new EventEmitter();\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n @Input('clearFilter') clearFilterEvent: EventEmitter;\r\n @Output() closeFilterEvent = new EventEmitter();\r\n\r\n previousFilterData: GPFilterParam;\r\n\r\n dataDefTypeOfgradutionPlanType = 1587;\r\n subscriptions: Subscription[] = [];\r\n graduationPlanTypes: Lookup[] = [];\r\n\r\n\r\n constructor(\r\n private sharedService: SharedService,\r\n private lookupService: LookupService) { }\r\n\r\n ngOnInit() {\r\n this.previousFilterData = JSON.parse(JSON.stringify(this.gpFilterParam));\r\n\r\n this.subscriptions.push(\r\n this.lookupService.getDataDefCode(this.dataDefTypeOfgradutionPlanType).subscribe(planTypes => {\r\n this.graduationPlanTypes = planTypes;\r\n GPFilterParam.planTypes = this.graduationPlanTypes;\r\n })\r\n );\r\n\r\n // Subscribes to the clear filter to clear and save when it fires\r\n if (this.clearFilterEvent) {\r\n this.subscriptions.push(\r\n this.clearFilterEvent.subscribe(() => {\r\n this.clearFilter();\r\n Object.assign(this.previousFilterData, this.gpFilterParam);\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n filterChangeByModel() {\r\n this.filterChanged.emit('changed');\r\n }\r\n\r\n filterChange(type: string) {\r\n this.filterChanged.emit(type);\r\n }\r\n\r\n clearFilter() {\r\n this.gpFilterParam.init();\r\n this.filterChange('clear');\r\n }\r\n\r\n closeFilter() {\r\n this.closeFilterEvent.emit();\r\n }\r\n\r\n}","
\r\n Filter\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Graduation Plan\r\n Graduation Plan > Subject Area\r\n Graduation Plan > Subject Area > Credit Codes\r\n Graduation Plan > Subject Area > Credit Codes > Courses\r\n \r\n \r\n \r\n\r\n \r\n \r\n 0\r\n 1\r\n 2\r\n 3\r\n 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 \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
","
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Primary Graduation Plan \r\n

{{primayGradPlan.GradPlanName}}

\r\n
\r\n Declaration Date \r\n

{{primayGradPlan.DeclarationDate}}\r\n

\r\n
\r\n Parent Signature Received \r\n

{{primayGradPlan.ParentSigReceived}}\r\n

\r\n
\r\n Graduation Year \r\n

{{primayGradPlan.GraduationYear}}

\r\n
\r\n Graduation Basis \r\n

{{primayGradPlan.GraduationBasis}}\r\n

\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n\r\n \r\n \r\n \r\n Graduation Plan/Subject Area/Credit Code/Course\r\n \r\n \r\n\r\n \r\n \r\n \r\n Required\r\n \r\n \r\n\r\n \r\n \r\n \r\n Attempted\r\n \r\n \r\n\r\n \r\n \r\n \r\n Earned\r\n \r\n \r\n\r\n \r\n \r\n \r\n Current\r\n \r\n \r\n\r\n \r\n \r\n \r\n Requested\r\n \r\n \r\n\r\n \r\n \r\n \r\n Over\r\n \r\n \r\n\r\n \r\n \r\n \r\n Need\r\n \r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n 0\" class=\"material-icons\" [ngClass]=\"{\r\n 'detail-row-expanded-icon': tableData.checkExpanded(gradPlan),\r\n 'detail-row-collapsed-icon': !tableData.checkExpanded(gradPlan)\r\n }\">\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.GradPlanName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Required | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Attempted | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Earned | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Current | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Requested | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Over | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Need | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{gradPlan.Status}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n 0\" class=\"material-icons\" [ngClass]=\"{\r\n 'detail-row-expanded-icon': tableData.checkExpanded(subjectArea),\r\n 'detail-row-collapsed-icon': !tableData.checkExpanded(subjectArea)\r\n }\">\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.SubjectArea}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Required | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Attempted | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Earned | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Current | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Requested | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Over | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Need | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{subjectArea.Status}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n 0\"\r\n class=\"material-icons\" [ngClass]=\"{\r\n 'detail-row-expanded-icon': tableData.checkExpanded(creditCode),\r\n 'detail-row-collapsed-icon': !tableData.checkExpanded(creditCode)\r\n }\">\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.CreditCode}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Required | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Attempted | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Earned | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Current | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Requested | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Over | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Need | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{creditCode.Status}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n {{course.Course}}\r\n \r\n \r\n {{course.Course}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Required | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Attempted | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Earned | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Current | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Requested | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Over | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Need | gpCreditFormat: gpFilterParam.CreditDecimalPrecision}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{course.Status}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n 0 ? subjectArea.getTableData(gpFilterParam).toggleExpanded(creditCode) : null\">\r\n \r\n 0 && subjectArea.getTableData(gpFilterParam).checkExpanded(creditCode) ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden;\" class=\"mat-detail-row\">\r\n \r\n \r\n \r\n\r\n \r\n 0 ? gradPlan.getTableData(gpFilterParam).toggleExpanded(subjectArea) : null\">\r\n \r\n 0 && gradPlan.getTableData(gpFilterParam).checkExpanded(subjectArea) ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden;\" class=\"mat-detail-row\">\r\n \r\n \r\n \r\n\r\n \r\n 0 ? tableData.toggleExpanded(gradPlan) : null\">\r\n \r\n 0 && tableData.checkExpanded(gradPlan) ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden;\" class=\"mat-detail-row\">\r\n \r\n\r\n
\r\n
\r\n\r\n \r\n
\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, ViewEncapsulation, Output, OnDestroy, OnInit, Host, HostBinding } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { GraduationPlanService } from './graduation-plan.service';\r\nimport { GradPlanTypeModel, GraduationPlanModel } from './graduation-plan.model';\r\nimport { GPFilterParam } from './gp-filter-param';\r\nimport { OverrideCreditcodeComponent } from './override-creditcode/override-creditcode.component';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-graduation-plan',\r\n templateUrl: './graduation-plan.component.html',\r\n styleUrls: ['./graduation-plan.component.css'],\r\n animations: [detailExpand],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GraduationPlanComponent implements OnInit, OnDestroy {\r\n @HostBinding('class.sis-app-root') sisAppRoot: Host = true;\r\n @Output() clearFilterEvent = new EventEmitter();\r\n @Output() showFilterEvent = new EventEmitter();\r\n\r\n // -----------Grid functionality---------------------------------\r\n graduationplanTypes: GradPlanTypeModel[] = [];\r\n primayGradPlan = new GraduationPlanModel();\r\n subscriptions: Subscription[] = [];\r\n showFilter = false;\r\n isFiltered = false;\r\n gpFilterParam = new GPFilterParam();\r\n currentUser: User;\r\n\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n CreditCodeOverrideDialogRef: MatDialogRef;\r\n\r\n // Table Properties\r\n tableData = new TylerMatTableDataSource();\r\n universalColumns = [\r\n 'required',\r\n 'attempted',\r\n 'earned',\r\n 'current',\r\n 'requested',\r\n 'over',\r\n 'need',\r\n 'status'\r\n ];\r\n headerTableColumns = [\r\n 'more',\r\n 'name'\r\n ].concat(this.universalColumns);\r\n gradPlanTableColumns = ['more', 'graduationPlan'].concat(this.universalColumns);\r\n subjectAreaColumns = ['more', 'subjectArea'].concat(this.universalColumns);\r\n creditCodeColumns = ['creditCodeTableMore', 'creditCode'].concat(this.universalColumns);\r\n courseColumns = ['course'].concat(this.universalColumns);\r\n previousDisplay = '';\r\n gradPlans: GraduationPlanModel[] = [];\r\n\r\n constructor(\r\n private graduationplanService: GraduationPlanService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private dialog: MatDialog\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.graduationplanService.gpFilterParam = this.gpFilterParam;\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.graduationplanService.getgraduationplanData();\r\n }\r\n )\r\n );\r\n this.currentUser = this.userService.currentUser;\r\n this.graduationplanService.graduationPlanFetch_Complete.subscribe(arg => {\r\n this.graduationplanTypes = this.graduationplanService.graduationplanTypes;\r\n this.gradPlans = [];\r\n this.graduationplanTypes.forEach(planType => {\r\n planType.GraduationPlans.forEach(gradPlan => {\r\n this.gradPlans.push(gradPlan);\r\n });\r\n });\r\n this.primayGradPlan = this.graduationplanService.getPrimaryGraduationPlan();\r\n this.filterChanged('init');\r\n });\r\n\r\n // footer expand/collapse button events.\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n\r\n // Helper function\r\n const expandOrCollapse = (expand: boolean, object: any = this) => {\r\n let tableData = object.tableData;\r\n if (tableData == null && object.getTableData) {\r\n tableData = object.getTableData(this.gpFilterParam);\r\n }\r\n if (tableData) {\r\n tableData.expandAll(expand);\r\n for (let i = 0; i < tableData.data.length; i++) {\r\n expandOrCollapse(expand, tableData.data[i]);\r\n }\r\n }\r\n };\r\n\r\n // Expanding or collapsing\r\n expandOrCollapse(toggle);\r\n\r\n // Toggling status ???\r\n this.onToggleStatusAll(toggle);\r\n })\r\n );\r\n }\r\n\r\n filterChanged(type: string) {\r\n Object.assign(this.graduationplanService.gpFilterParam, this.gpFilterParam);\r\n // this.graduationplanService.gpFilterParam = this.gpFilterParam; // We can't do this to prevent infinite loops\r\n this.onToggleStatusAll(true);\r\n\r\n // Graduation Plan Filtering\r\n // NOTE: other filtering handled in the model's \"getTableData\" function\r\n this.tableData.data = this.gradPlans.filter(gradPlan => {\r\n if (!gradPlan.IsPrimary) {\r\n return false;\r\n } else if (!this.gpFilterParam.GradPlanStatus || this.gpFilterParam.GradPlanStatus.includes('all')) {\r\n return true;\r\n } else {\r\n return this.gpFilterParam.GradPlanStatus.includes(gradPlan.Status);\r\n }\r\n });\r\n\r\n // Expanding based on default display\r\n if (this.previousDisplay != this.gpFilterParam.DefaultDisplay || type == 'init') {\r\n this.tableData.expandAll(this.gpFilterParam.DefaultDisplay.includes('SA'));\r\n this.tableData.data.forEach(subjectArea => {\r\n subjectArea.getTableData(this.gpFilterParam).expandAll(this.gpFilterParam.DefaultDisplay.includes('CC'));\r\n subjectArea.getTableData(this.gpFilterParam).data.forEach(creditCode => {\r\n creditCode.getTableData(this.gpFilterParam).expandAll(this.gpFilterParam.DefaultDisplay.includes('CR'));\r\n });\r\n });\r\n this.previousDisplay = this.gpFilterParam.DefaultDisplay;\r\n }\r\n\r\n // Setting filtered variable\r\n this.isFiltered = this.gpFilterParam.isFilterApplied();\r\n }\r\n\r\n refetchData() {\r\n this.graduationplanService.getgraduationplanData();\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n this.graduationplanService.graduationplanTypes = [];\r\n }\r\n\r\n onToggleStatusAll(toggle: boolean) {\r\n this.graduationplanService.toggleStatusAll(toggle);\r\n }\r\n\r\n showFilterClick() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n creditCodeOverrideClick(gpCourseModel) {\r\n this.CreditCodeOverrideDialogRef = this.dialog.open(OverrideCreditcodeComponent, { panelClass: 'tyl-mat-dialog', disableClose: true });\r\n this.CreditCodeOverrideDialogRef.componentInstance.gpCourseModel_selected = gpCourseModel;\r\n this.CreditCodeOverrideDialogRef.componentInstance.creditcode_Overriden.subscribe((event) => {\r\n });\r\n\r\n this.CreditCodeOverrideDialogRef.afterClosed().subscribe(result => {\r\n });\r\n }\r\n}","import {Lookup} from '../../shared-components/lookup/lookup.model';\r\nimport {TylerMatTableDataSource} from '../../shared-components/angular-material/extended.class';\r\nimport {GPFilterParam} from './gp-filter-param';\r\nimport * as _ from 'lodash';\r\n\r\nexport class GradPlanTypeModel extends Lookup {\r\n\r\n\t// Server Properties\r\n\tGraduationPlans: GraduationPlanModel[];\r\n\tRowNumber: number;\r\n\tDefinition: string;\r\n\tIsExpanded: boolean;\r\n\r\n\t// Local Properties\r\n\tprivate _tableData = new TylerMatTableDataSource();\r\n\tprivate previousGradPlanStatus = [];\r\n\r\n\t// Methods\r\n\tgetTableData(gpFilterParam: GPFilterParam) {\r\n\t\t// PRE: the filter parameters\r\n\t\t// POST: returns a filtered data source\r\n\t\tif (!_.isEqual(this.previousGradPlanStatus, gpFilterParam.GradPlanStatus)) {\r\n\t\t\tthis._tableData.data = this.GraduationPlans.filter(gradPlan => {\r\n\t\t\t\tif (!gpFilterParam.GradPlanStatus || gpFilterParam.GradPlanStatus.includes('all')) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gpFilterParam.GradPlanStatus.includes(gradPlan.Status);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.previousGradPlanStatus = _.clone(gpFilterParam.GradPlanStatus);\r\n\t\t}\r\n\t\treturn this._tableData;\r\n\t}\r\n}\r\n\r\nexport class GraduationPlanModel {\r\n\r\n\t// Server Properties\r\n\tSubjectAreas: GradPlanSubjectAreaModel[];\r\n\tRowNumber: number;\r\n\tGradPlan_ID: number;\r\n\tIsAssigned: boolean;\r\n IsPrimary: boolean;\r\n PlanType: string;\r\n PlanCategory: string;\r\n\tGradPlanName: string;\r\n\tDeclarationDate: string;\r\n\tParentSigReceived: string;\r\n\tGraduationYear: string;\r\n\tGraduationBasis: string;\r\n\tOverridden: boolean;\r\n\tRequired: number;\r\n\tAttempted: number;\r\n\tEarned: number;\r\n\tCurrent: number;\r\n\tRequested: number;\r\n\tOver: number;\r\n\tNeed: number;\r\n\tStatus: string;\r\n\tIsExpanded: boolean;\r\n\tAddedBy: string;\r\n\tAddedOn: Date;\r\n\r\n\t// Local Properties\r\n\tprivate _tableData = new TylerMatTableDataSource();\r\n\tprivate previousSubjectAreaStatus = [];\r\n\r\n\t// Methods\r\n\tgetTableData(gpFilterParam: GPFilterParam) {\r\n\t\t// PRE: the filter parameters\r\n\t\t// POST: returns a filtered data source\r\n\t\tif (!_.isEqual(this.previousSubjectAreaStatus, gpFilterParam.SubjectAreaStatus)) {\r\n\t\t\tthis._tableData.data = this.SubjectAreas.filter(gradPlan => {\r\n\t\t\t\tif (!gpFilterParam.SubjectAreaStatus || gpFilterParam.SubjectAreaStatus.includes('all')) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gpFilterParam.SubjectAreaStatus.includes(gradPlan.Status);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.previousSubjectAreaStatus = _.clone(gpFilterParam.SubjectAreaStatus);\r\n\t\t}\r\n\t\treturn this._tableData;\r\n\t}\r\n}\r\n\r\nexport class GradPlanSubjectAreaModel {\r\n\r\n\t// Server Properties\r\n\tCreditCodes: GradPlanCreditCodeModel[];\r\n\tRowNumber: number;\r\n\tSubjectArea: string;\r\n\tRequired: number;\r\n\tAttempted: number;\r\n\tEarned: number;\r\n\tCurrent: number;\r\n\tRequested: number;\r\n\tOver: number;\r\n\tNeed: number;\r\n\tStatus: string;\r\n\tIsExpanded: boolean;\r\n\r\n\t// Local Properties\r\n\tprivate _tableData = new TylerMatTableDataSource();\r\n\tprivate previousCreditCodeStatus = [];\r\n\r\n\t// Methods\r\n\tgetTableData(gpFilterParam: GPFilterParam) {\r\n\t\t// PRE: the filter parameters\r\n\t\t// POST: returns a filtered data source\r\n\t\tif (!_.isEqual(this.previousCreditCodeStatus, gpFilterParam.CreditCodeStatus)) {\r\n\t\t\tthis._tableData.data = this.CreditCodes.filter(gradPlan => {\r\n\t\t\t\tif (!gpFilterParam.CreditCodeStatus || gpFilterParam.CreditCodeStatus.includes('all')) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gpFilterParam.CreditCodeStatus.includes(gradPlan.Status);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.previousCreditCodeStatus = _.clone(gpFilterParam.CreditCodeStatus);\r\n\t\t}\r\n\t\treturn this._tableData;\r\n\t}\r\n}\r\n\r\nexport class GradPlanCreditCodeModel {\r\n\r\n\t// Server Properties\r\n\tCourses: GradPlanCoursesModel[];\r\n\tRowNumber: number;\r\n\tCreditCode: string;\r\n\tOverridden: boolean;\r\n\tRequired: number;\r\n\tAttempted: number;\r\n\tEarned: number;\r\n\tCurrent: number;\r\n\tRequested: number;\r\n\tOver: number;\r\n\tNeed: number;\r\n\tStatus: string;\r\n\tIsExpanded: boolean;\r\n\r\n\t// Local Properties\r\n\tprivate _tableData = new TylerMatTableDataSource();\r\n\tprivate previousCourseStatus = [];\r\n\r\n\t// Methods\r\n\tgetTableData(gpFilterParam: GPFilterParam) {\r\n\t\t// PRE: the filter parameters\r\n\t\t// POST: returns a filtered data source\r\n\t\tif (!_.isEqual(this.previousCourseStatus, gpFilterParam.CourseStatus)) {\r\n\t\t\tthis._tableData.data = this.Courses.filter(course => {\r\n\t\t\t\tif (!gpFilterParam.CourseStatus || gpFilterParam.CourseStatus.includes('all')) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn gpFilterParam.CourseStatus.includes(course.Status);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.previousCourseStatus = _.clone(gpFilterParam.CourseStatus);\r\n\t\t}\r\n\t\treturn this._tableData;\r\n\t}\r\n}\r\n\r\nexport class GradPlanCoursesModel {\r\n\tRowNumber: number;\r\n\tGradPlan_ID: number;\r\n\tSSEC_ID: number;\r\n\tDataBucketScore_ID: number;\r\n\tCourse_ID: number;\r\n\tCourse: string;\r\n\tOverridden: boolean;\r\n\tAttempted: number;\r\n\tEarned: number;\r\n\tCurrent: number;\r\n\tRequested: number;\r\n\tStatus: string;\r\n\tIsExpanded: boolean;\r\n}\r\n\r\nexport class GPStudentNCourseInfoModel {\r\n\tRowNumber: number;\r\n\tStudentName: string;\r\n\tStudentNumberIdentifier: string;\r\n\tSubjectIdentifier: string;\r\n\tSubjectName: string;\r\n\tSectionName: string;\r\n\tCreditCode: string;\r\n\tOverrideCreditCode: string;\r\n}","import { System } from './../../shared-components/System';\r\nimport { Injectable, EventEmitter } from '@angular/core';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n\tGradPlanTypeModel,\r\n\tGraduationPlanModel,\r\n\tGradPlanCoursesModel,\r\n\tGradPlanCreditCodeModel,\r\n\tGPStudentNCourseInfoModel,\r\n\tGradPlanSubjectAreaModel\r\n} from './graduation-plan.model';\r\nimport { GPFilterParam } from './gp-filter-param';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\n\r\n@Injectable()\r\nexport class GraduationPlanService {\r\n\r\n\tgpFilterParam: GPFilterParam;\r\n\tgraduationplanTypes: GradPlanTypeModel[] = [];\r\n\tgraduationPlanFetch_Complete = new EventEmitter();\r\n\r\n\tconstructor(\r\n\t\tprivate studentService: StudentService,\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate yearService: YearService,\r\n\t\tprivate userService: UserService,\r\n\t) { }\r\n\r\n\tgetgraduationplanData() {\r\n\t\tconst queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n\t\t\t'&yearId=' + this.yearService.student360Year.Id +\r\n\t\t\t'¬InGP=' + this.gpFilterParam.notInGP +\r\n\t\t\t'&showAllGP=' + true;\r\n\r\n\t\tthis.http.get(System.apiURL.Counselor + 'GetStudentGraduationPlanProgress' + queryString).subscribe(result => {\r\n\r\n\t\t\t// Storing grad plans\r\n\t\t\tthis.graduationplanTypes = result;\r\n\t\t\tGPFilterParam.planTypes = result;\r\n\r\n\t\t\t// Performing Conversions\r\n\t\t\tfor (let i = 0; i < this.graduationplanTypes.length; i++) {\r\n\t\t\t\tthis.graduationplanTypes[i] = System.convert(this.graduationplanTypes[i], new GradPlanTypeModel());\r\n\t\t\t\tconst planType = this.graduationplanTypes[i];\r\n\t\t\t\tfor (let j = 0; j < planType.GraduationPlans.length; j++) {\r\n\t\t\t\t\tplanType.GraduationPlans[j] = System.convert(planType.GraduationPlans[j], new GraduationPlanModel());\r\n\t\t\t\t\tconst gradPlan = planType.GraduationPlans[j];\r\n\t\t\t\t\tfor (let k = 0; k < gradPlan.SubjectAreas.length; k++) {\r\n\t\t\t\t\t\tgradPlan.SubjectAreas[k] = System.convert(gradPlan.SubjectAreas[k], new GradPlanSubjectAreaModel());\r\n\t\t\t\t\t\tconst subjectArea = gradPlan.SubjectAreas[k];\r\n\t\t\t\t\t\tfor (let p = 0; p < subjectArea.CreditCodes.length; p++) {\r\n\t\t\t\t\t\t\tsubjectArea.CreditCodes[p]= System.convert(subjectArea.CreditCodes[p], new GradPlanCreditCodeModel());\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Sending off data\r\n\t\t\tthis.graduationPlanFetch_Complete.emit('fetched');\r\n\t\t});\r\n\t}\r\n\r\n\ttoggleStatusAll(toggle: boolean) {\r\n\t\tconst gpLevel: string = this.gpFilterParam.DefaultDisplay;\r\n\t\tthis.graduationplanTypes.forEach(function(gpType) {\r\n\t\t\tgpType.IsExpanded = gpType.GraduationPlans.length > 0 && toggle && gpLevel.indexOf('GP') >= 0;\r\n\r\n\t\t\tgpType.GraduationPlans.forEach(function(gp) {\r\n\t\t\t\tgp.IsExpanded = toggle && gpLevel.indexOf('SA') >= 0;\r\n\r\n\t\t\t\tgp.SubjectAreas.forEach(function(sa) {\r\n\t\t\t\t\tsa.IsExpanded = toggle && gpLevel.indexOf('CC') >= 0;\r\n\r\n\t\t\t\t\tsa.CreditCodes.forEach(function(cc) {\r\n\t\t\t\t\t\tcc.IsExpanded = toggle && gpLevel.indexOf('CR') >= 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tgetPrimaryGraduationPlan(): GraduationPlanModel {\r\n\t\tlet matches = [];\r\n\t\tthis.graduationplanTypes.forEach(d => {\r\n\t\t\tmatches = matches.concat(d.GraduationPlans.filter(f => f.IsPrimary));\r\n\t\t});\r\n\t\treturn matches[0] ? matches[0] : new GraduationPlanModel();\r\n\t}\r\n\r\n\tgetAllCoursesByGradPlanID(gradPlan: number): GradPlanCoursesModel[] {\r\n\t\tlet matches: GradPlanCoursesModel[] = [];\r\n\r\n\t\tconst gradPlanModel: GraduationPlanModel = this.getGraduationPlanById(gradPlan);\r\n\r\n\t\tconst reducer = (array, item) => array.concat(item['CreditCodes'].map(s => s.Courses));\r\n\t\tmatches = gradPlanModel.SubjectAreas\r\n\t\t.reduce(reducer, [])\r\n\t\t.reduce((array, item) => array.concat(item))\r\n\t\t.map(g => {\r\n\t\t\tg.Course_ID = g.DataBucketScore_ID > 0 ? (-1 * g.DataBucketScore_ID) : g.SSEC_ID;\r\n\t\t\treturn g;\r\n\t\t});\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetGraduationPlanById(gradPlan: number): GraduationPlanModel {\r\n\t\tlet matches = [];\r\n\t\tthis.graduationplanTypes.forEach(d => {\r\n\t\t\tmatches = matches.concat(d.GraduationPlans.filter(f => f.GradPlan_ID === gradPlan));\r\n\t\t});\r\n\t\treturn matches[0];\r\n\t}\r\n\r\n\tgetAllDistinctGraduationPlans(): GraduationPlanModel[] {\r\n\t\tlet matches: GraduationPlanModel[] = [];\r\n\r\n\t\tconst reducer = (array, item) => array.concat(item['GraduationPlans'].map(gp => ({ GradPlan_ID: gp.GradPlan_ID, GradPlanName: gp.GradPlanName })));\r\n\t\tmatches = this.graduationplanTypes.reduce(reducer, []);\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetGraduationPlanOverrideCreditCodes(gradplanId: number, databucketscoreId: number, ssec_id: number): Observable {\r\n\t\tconst queryString = '?gradplanId=' + gradplanId +\r\n\t\t\t'&databucketscoreId=' + databucketscoreId +\r\n\t\t\t'&ssec_id=' + ssec_id +\r\n\t\t\t'&ayIdentifier=' + this.yearService.student360Year.AYIdentifier +\r\n\t\t\t'&siteId=' + this.yearService.student360Year.SchoolID;\r\n\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetGraduationPlanOverrideCreditCodes' + queryString);\r\n\t}\r\n\r\n\tgetStudentAndCourseInfo(databucketscoreId: number, ssec_id: number): Observable {\r\n\t\tconst queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n\t\t\t'&databucketscoreId=' + databucketscoreId +\r\n\t\t\t'&ssec_id=' + ssec_id;\r\n\r\n\t\treturn this.http.get(System.apiURL.Student + 'GetStudentAndCourseInfo' + queryString);\r\n\t}\r\n\r\n\toverrideCreditCode(databucketscoreId: number, ssecId: number, gradPlanId: number, creditCode: string): Observable {\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id + '&databucketscoreId=' + databucketscoreId + '&ssecId=' + ssecId + '&gradPlanId= ' + gradPlanId + '&creditCode=' + creditCode;\r\n\t\treturn this.http.get(System.apiURL.Student + 'OverrideCreditCode' + queryString);\r\n\t}\r\n\r\n}\r\n","
\r\n
\r\n Override Credit Code\r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n (Not Available)\r\n \r\n \r\n {{ c.Course }}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n (Not Available)\r\n \r\n \r\n {{ gp.GradPlanName }}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Student Name:{{gpGPStudentNCourseInfoModel?.StudentName}}Student Number:{{gpGPStudentNCourseInfoModel?.StudentNumberIdentifier}}\r\n
Course Identifier:{{gpGPStudentNCourseInfoModel?.SubjectIdentifier}}Course Name:{{gpGPStudentNCourseInfoModel?.SubjectName}}
Section Name:{{gpGPStudentNCourseInfoModel?.SectionName}}Academic Year:{{yearService.student360Year.AYIdentifier}}
Credit Code(s):{{gpGPStudentNCourseInfoModel?.CreditCode}}
\r\n
\r\n \r\n \r\n 0\" translate>\r\n \r\n (Not\r\n Available)\r\n \r\n {{ cc.CreditCode }}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n","import { AfterViewInit, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { GPStudentNCourseInfoModel, GradPlanCoursesModel, GradPlanCreditCodeModel, GraduationPlanModel } from '../graduation-plan.model';\r\nimport { GraduationPlanService } from '../graduation-plan.service';\r\n\r\n@Component({\r\n selector: 'app-override-creditcode',\r\n templateUrl: './override-creditcode.component.html',\r\n styleUrls: ['./override-creditcode.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class OverrideCreditcodeComponent implements AfterViewInit {\r\n\r\n @Input() gpCourseModel_selected: GradPlanCoursesModel;\r\n @Output() creditcode_Overriden = new EventEmitter();\r\n\r\n saveEvent: EventEmitter = new EventEmitter();\r\n\r\n gpCourses: GradPlanCoursesModel[];\r\n gpOverrideCreditCodes: GradPlanCreditCodeModel[] = [];\r\n graduationPlans: GraduationPlanModel[];\r\n gpGPStudentNCourseInfoModel: GPStudentNCourseInfoModel;\r\n fromAcademicProgress: boolean;\r\n\r\n course_Id = -1;\r\n gradPlan_Id = -1;\r\n override_creditcode = '-1';\r\n\r\n instance: OverrideCreditcodeComponent;\r\n public errorList: ErrorList[] = [];\r\n\r\n constructor(\r\n private graduationplanService: GraduationPlanService,\r\n private dialogRef: MatDialogRef,\r\n public yearService: YearService\r\n ) {\r\n this.instance = this;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.course_Id = this.gpCourseModel_selected.SSEC_ID;\r\n this.gradPlan_Id = this.gpCourseModel_selected.GradPlan_ID;\r\n if (!this.fromAcademicProgress) {\r\n this.graduationPlans = (!this.graduationPlans) ? this.graduationplanService.getAllDistinctGraduationPlans() : this.graduationPlans;\r\n this.gpCourses = this.graduationplanService.getAllCoursesByGradPlanID(this.gradPlan_Id);\r\n }\r\n setTimeout(() => this.load_gpGPStudentNCourseInfoModel());\r\n }\r\n\r\n saveOrCancel(save: boolean) {\r\n if (save) {\r\n const found = (!this.fromAcademicProgress) ? this.getSelectedCourseObject(this.course_Id) : this.gpCourseModel_selected;\r\n if (found) {\r\n if (this.override_creditcode == '-1') {\r\n this.errorList.push({\r\n fieldName: 'Override Credit Code',\r\n fieldRef: undefined,\r\n errorMsg: 'is required'\r\n });\r\n }\r\n else {\r\n const creditCodeModel: GradPlanCreditCodeModel = new GradPlanCreditCodeModel();\r\n creditCodeModel.CreditCode = this.override_creditcode;\r\n\r\n this.graduationplanService.overrideCreditCode(found.DataBucketScore_ID, found.SSEC_ID, this.gradPlan_Id, creditCodeModel.CreditCode).subscribe(x => {\r\n this.saveEvent.emit(true);\r\n this.graduationplanService.getgraduationplanData();\r\n this.dialogRef.close();\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n this.dialogRef.close();\r\n }\r\n }\r\n\r\n load_gpGPStudentNCourseInfoModel() {\r\n this.graduationplanService.getStudentAndCourseInfo(\r\n this.gpCourseModel_selected.DataBucketScore_ID,\r\n this.gpCourseModel_selected.SSEC_ID\r\n ).subscribe(resultset => {\r\n this.gpGPStudentNCourseInfoModel = resultset;\r\n this.override_creditcode = this.gpGPStudentNCourseInfoModel.OverrideCreditCode;\r\n this.load_OverrideCreditCodes(this.gpCourseModel_selected.Course_ID);\r\n });\r\n }\r\n\r\n load_OverrideCreditCodes(course_ID: number) {\r\n const found = this.getSelectedCourseObject(course_ID);\r\n this.course_Id = found ? found.Course_ID : -1;\r\n\r\n this.graduationplanService.getGraduationPlanOverrideCreditCodes(\r\n this.gradPlan_Id,\r\n found ? found.DataBucketScore_ID : -1,\r\n found ? found.SSEC_ID : -1,\r\n ).subscribe(resultset => {\r\n this.gpOverrideCreditCodes = resultset;\r\n const creditfound = this.gpOverrideCreditCodes.filter(x => x.CreditCode == this.gpGPStudentNCourseInfoModel.OverrideCreditCode)[0];\r\n this.override_creditcode = creditfound ? creditfound.CreditCode : '-1';\r\n });\r\n }\r\n\r\n gradPlan_change() {\r\n this.gpCourses = this.graduationplanService.getAllCoursesByGradPlanID(this.gradPlan_Id);\r\n this.load_OverrideCreditCodes(this.gpCourseModel_selected.Course_ID);\r\n }\r\n\r\n course_change() {\r\n this.load_OverrideCreditCodes(this.course_Id);\r\n }\r\n\r\n getSelectedCourseObject(course_ID: number): GradPlanCoursesModel {\r\n return this.gpCourses.filter(x => x.Course_ID == course_ID)[0];\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'gpCreditFormat'\r\n})\r\nexport class GpCreditFormatPipe implements PipeTransform {\r\n\r\n constructor() {}\r\n\r\n transform(value: number, creditpre = 4): string { return value != null ? value.toFixed(creditpre) : ''; }\r\n\r\n}\r\n","
\r\n No Dental data exists for student\r\n
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{row.Date|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Fluoride\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Sealant\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Under Doctor's Care\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral Returned to School\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Return Date\r\n \r\n \r\n \r\n \r\n {{row.ReturnDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
","import { Component, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { DentalScreening } from '../health.model';\r\nimport { HealthService } from '../health.service';\r\n\r\n@Component({\r\n selector: 'app-dental',\r\n templateUrl: './dental.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class DentalComponent implements OnInit {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n dentalScreenings: DentalScreening[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['Date', 'Fluoride', 'Sealant', 'UnderDoctorsCare', 'Referral', 'ReferralReturnedToSchool', 'ReturnDate'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private healthService: HealthService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.dentalScreenings);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getDentalScreenings();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getDentalScreenings();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getDentalScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getDentalScreenings() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getDentalScreenings(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.dentalScreenings = data;\r\n this.angularMatData = new TylerMatTableDataSource(this.dentalScreenings);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n });\r\n }, 0);\r\n }\r\n}","
No Practitioners data exists for student
\r\n
0 \">\r\n \r\n \r\n Name\r\n \r\n \r\n {{doc.DoctorName}}\r\n \r\n \r\n Address\r\n \r\n \r\n {{doc.Address}}\r\n \r\n \r\n Telephone\r\n \r\n \r\n {{doc.Telephone}}\r\n \r\n \r\n Email\r\n \r\n \r\n {{doc.Email}}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n","import { Component, OnInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { HealthService } from '../health.service';\r\nimport { Doctors } from '../health.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-doctors',\r\n templateUrl: './doctors.component.html',\r\n styles: []\r\n})\r\nexport class DoctorsComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n doctors: Doctors[] = [];\r\n LoginSettings: LoginSettings;\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayDoctorsColumns = ['DoctorName', 'Telephone'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private healthService: HealthService,\r\n private loginService: LoginService,\r\n private yearService: YearService\r\n ) {\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.doctors);\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n if (this.LoginSettings.V10 == true) {\r\n this.displayDoctorsColumns = ['DoctorName', 'Address', 'Telephone', 'Email'];\r\n }\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getDoctors();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getDoctors();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getDoctors();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n getDoctors() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getDoctors(this.selectedStudent.Id, this.yearService.student360Year.Id).pipe(take(1)).subscribe(data => {\r\n this.doctors = data;\r\n this.loadDoctorHistory();\r\n });\r\n }, 0);\r\n }\r\n\r\n loadDoctorHistory(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.doctors);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getDoctorsAriaRow(row: Doctors): string {\r\n let colList: string[] = [''];\r\n let dataList: string[] = [''];\r\n\r\n if (this.LoginSettings.V10 == false) {\r\n colList = ['DoctorName', 'Telephone'];\r\n dataList = [row.DoctorName, row.Telephone];\r\n }\r\n else {\r\n colList = ['DoctorName', 'Address', 'Telephone', 'Email'];\r\n dataList = [row.DoctorName, row.Address, row.Telephone, row.Email];\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","
No Health Visit Log data exists for student
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n {{hvl.Date|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Time In\r\n \r\n \r\n {{hvl.TimeIn}}\r\n \r\n \r\n Time Out\r\n \r\n \r\n {{hvl.TimeOut}}\r\n \r\n \r\n Visit Reason\r\n \r\n \r\n {{hvl.VisitReason}}\r\n \r\n \r\n Action\r\n \r\n \r\n {{hvl.Action}}\r\n \r\n \r\n Sent To\r\n \r\n \r\n {{hvl.SentTo}}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n","import { Component, OnInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { HealthService } from '../health.service';\r\nimport { HealthVisitLog } from '../health.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-health-visit-log',\r\n templateUrl: './health-visit-log.component.html',\r\n styles: []\r\n})\r\nexport class HealthVisitLogComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n @Input() studentEnrollment;\r\n isBusy = false;\r\n healthVisitLog: HealthVisitLog[] = [];\r\n LoginSettings: LoginSettings;\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedHealthColumns = ['Date', 'TimeIn', 'TimeOut', 'VisitReason', 'Action', 'SentTo'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private healthService: HealthService,\r\n private loginService: LoginService,\r\n private yearService: YearService\r\n ) {\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.healthVisitLog);\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n if (this.LoginSettings.V10) {\r\n this.displayedHealthColumns = ['Date', 'TimeIn', 'TimeOut', 'VisitReason', 'SentTo'];\r\n }\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getHealthVisitLog();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getHealthVisitLog();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getHealthVisitLog();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n getHealthVisitLog() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getHealthVisitLog(this.selectedStudent.Id, this.yearService.student360Year.Id, this.studentEnrollment.SiteYearId).subscribe(data => {\r\n this.healthVisitLog = data;\r\n this.loadHealthVisitLogHistory();\r\n });\r\n }, 0);\r\n }\r\n\r\n loadHealthVisitLogHistory(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.healthVisitLog);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getHealthVisitLogAriaRow(row: HealthVisitLog): string {\r\n let colList: string[] = [''];\r\n let dataList: string[] = [''];\r\n\r\n if (this.LoginSettings.V10 == true) {\r\n colList = ['Date', 'TimeIn', 'TimeOut', 'VisitReason', 'SentTo'];\r\n dataList = [row.Date.toString(), row.TimeIn, row.TimeOut, row.VisitReason, row.SentTo];\r\n }\r\n else {\r\n colList = ['Date', 'TimeIn', 'TimeOut', 'VisitReason', 'Action', 'SentTo'];\r\n dataList = [row.Date.toString(), row.TimeIn, row.TimeOut, row.VisitReason, row.Action, row.SentTo];\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","
\r\n No Hearing data exists for student\r\n
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{row.Date|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Right\r\n \r\n \r\n \r\n {{row.RightEar}}\r\n \r\n \r\n dB Right\r\n \r\n \r\n \r\n {{row.RightEarDB}}\r\n \r\n \r\n Hz used Right\r\n \r\n \r\n \r\n {{row.RightEarHz}}\r\n \r\n \r\n Left\r\n \r\n \r\n \r\n {{row.LeftEar}}\r\n \r\n \r\n dB Left\r\n \r\n \r\n \r\n {{row.LeftEarDB}}\r\n \r\n \r\n Hz used Left\r\n \r\n \r\n \r\n {{row.LeftEarHz}}\r\n \r\n \r\n Assisted Device\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Used at Screening\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Under Doctor's Care\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Follow Up Date\r\n \r\n \r\n \r\n \r\n {{row.FollowUpDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Referral\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral Returned to School\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Return Date\r\n \r\n \r\n \r\n \r\n {{row.ReturnDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { HearingScreening } from '../health.model';\r\nimport { HealthService } from '../health.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-hearing',\r\n templateUrl: './hearing.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class HearingComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n hearingScreenings: HearingScreening[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['Date', 'RightEar', 'RightEarDB', 'RightEarHz', 'LeftEar', 'LeftEarDB', 'LeftEarHz', 'AssistedDevice', 'UsedAtScreening', 'UnderDoctorsCare', 'FollowUpDate', 'Referral', 'ReferralReturnedToSchool', 'ReturnDate'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private healthService: HealthService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.hearingScreenings);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getHearingScreenings();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getHearingScreenings();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getHearingScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getHearingScreenings() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getHearingScreenings(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.hearingScreenings = data;\r\n this.angularMatData = new TylerMatTableDataSource(this.hearingScreenings);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n });\r\n }, 0);\r\n }\r\n}","
No Immunizations data exists for student
\r\n
0 \">\r\n \r\n \r\n Name\r\n \r\n \r\n {{element.Name}}\r\n \r\n \r\n Doses Received\r\n \r\n \r\n \r\n \r\n \r\n Exemption Code\r\n \r\n \r\n {{element.ExemptCode}}\r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{element.Date1|date:'MM/dd/yy'}}{{element.Date2|date:'MM/dd/yy'}}{{element.Date3|date:'MM/dd/yy'}}{{element.Date4|date:'MM/dd/yy'}}{{element.Date5|date:'MM/dd/yy'}}{{element.Date6|date:'MM/dd/yy'}}
{{element.Date7|date:'MM/dd/yy'}}{{element.Date8|date:'MM/dd/yy'}}{{element.Date9|date:'MM/dd/yy'}}{{element.Date10|date:'MM/dd/yy'}}{{element.Date11|date:'MM/dd/yy'}}{{element.Date12|date:'MM/dd/yy'}}
{{element.Date13|date:'MM/dd/yy'}}{{element.Date14|date:'MM/dd/yy'}}{{element.Date15|date:'MM/dd/yy'}}{{element.Date16|date:'MM/dd/yy'}}{{element.Date17|date:'MM/dd/yy'}}{{element.Date18|date:'MM/dd/yy'}}
{{element.Date19|date:'MM/dd/yy'}}{{element.Date20|date:'MM/dd/yy'}}
\r\n
\r\n
\r\n","import { Component, OnInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { HealthService } from '../health.service';\r\nimport { Immunizations } from '../health.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-immunizations',\r\n templateUrl: './immunizations.component.html',\r\n styles: []\r\n})\r\nexport class ImmunizationsComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n immunizations: Immunizations[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n //----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedImmunizationColumns = ['Name', 'DosesReceived', 'ExemptionCode'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private healthService: HealthService,\r\n private yearService: YearService,\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.immunizations);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getImmunizations();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getImmunizations();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getImmunizations();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n getImmunizations() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getImmunizations(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.immunizations = data;\r\n this.loadImmunizationHistory();\r\n });\r\n }, 0);\r\n }\r\n\r\n private loadImmunizationHistory(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.immunizations);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 250);\r\n this.isBusy = false;\r\n }\r\n\r\n //------------Aria/Accessibility---------------------------\r\n getImmunizationsAriaRow(row: Immunizations): string {\r\n const colList: string[] = ['Name', 'DosesReceived', 'ExemptionCode'];\r\n const dataList: string[] = [row.Name, row.Date1.toString(), row.ExemptCode];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","
No Insurance data exists for student
\r\n
0 \">\r\n \r\n \r\n Company\r\n \r\n \r\n {{ins.InsuranceCompany}}\r\n \r\n \r\n Policy\r\n \r\n \r\n {{ins.Policy}}\r\n \r\n \r\n Start Date\r\n \r\n \r\n \r\n {{ins.InsuranceStartDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n End Date\r\n \r\n \r\n \r\n {{ins.InsuranceEndDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n","import { Component, OnInit, ViewChild, Input, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { HealthService } from '../health.service';\r\nimport { Insurance } from '../health.model';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-insurance',\r\n templateUrl: './insurance.component.html',\r\n styles: []\r\n})\r\nexport class InsuranceComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n insurance: Insurance[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedInsuranceColumn = ['InsuranceCompany', 'Policy', 'InsuranceStartDate', 'InsuranceEndDate'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private healthService: HealthService,\r\n private yearService: YearService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.insurance);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getInsurance();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getInsurance();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getInsurance();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n getInsurance() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getInsurance(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.insurance = data;\r\n this.loadInsuranceHistory();\r\n });\r\n }, 0);\r\n }\r\n\r\n loadInsuranceHistory(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.insurance);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getInsuranceAriaRow(row: Insurance): string {\r\n const colList: string[] = ['InsuranceCompany', 'Policy', 'InsuranceStartDate', 'InsuranceEndDate'];\r\n const dataList: string[] = [row.InsuranceCompany, row.Policy, row.InsuranceStartDate.toString(), row.InsuranceEndDate.toString()];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","\r\n
No\r\n Medications data exists for student
\r\n
0\">\r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Medication\r\n \r\n \r\n {{med.Medication}}\r\n \r\n \r\n Frequency\r\n \r\n \r\n {{med.Frequency}}\r\n \r\n \r\n Start Date\r\n \r\n \r\n \r\n {{med.StartDate|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n End Date\r\n \r\n \r\n \r\n {{med.EndDate|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Dose\r\n \r\n \r\n {{med.Dose}}\r\n \r\n \r\n \r\n School Authorized
to Administer
\r\n \r\n
\r\n {{med.SchoolAuthorisedToAdminister}}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0\">\r\n \r\n \r\n \r\n
PharmacyPhoneRx NumberDoctor
{{med.Pharmacy}}{{med.Phone}}{{med.RxNumber}}{{med.Doctor}}
\r\n Comments
\r\n

{{med.Comments}}

\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, OnChanges, OnInit, SimpleChanges, ViewChild, OnDestroy } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { HealthService } from '../health.service';\r\nimport { Medications } from '../health.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-medications',\r\n templateUrl: './medications.component.html',\r\n styles: [],\r\n animations: [detailExpand]\r\n})\r\nexport class MedicationsComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n medications: Medications[] = [];\r\n medicationSelected: boolean[] = [];\r\n LoginSettings: LoginSettings;\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedMedicationColumns = ['More', 'Medication', 'Frequency', 'StartDate', 'EndDate', 'Dose', 'SchoolAuthorisedToAdminister'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private healthService: HealthService,\r\n private loginService: LoginService,\r\n private yearService: YearService\r\n ) {\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.medications);\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n if (this.LoginSettings.V10 == true) {\r\n this.displayedMedicationColumns = ['More', 'Medication', 'StartDate', 'EndDate', 'Dose', 'SchoolAuthorisedToAdminister'];\r\n }\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getMedication();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getMedication();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getMedication();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n toggleMore(index: number) {\r\n this.medicationSelected[index] = !this.medicationSelected[index];\r\n }\r\n\r\n toggleExpanded(row: Medications) {\r\n if (row.Pharmacy || row.Phone || row.RxNumber || row.Doctor || row.Comments) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n }\r\n\r\n checkExpanded(row: Medications): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: Medications) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n getMedication() {\r\n this.angularMatData = new TylerMatTableDataSource();\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getMedication(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.medications = data;\r\n this.loadMedicationHistory();\r\n });\r\n }, 0);\r\n }\r\n\r\n loadMedicationHistory(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.medications);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n }\r\n\r\n ShowRow(Pharmacy, Phone, RxNumber, Doctor, Comment, Parent, Id): boolean {\r\n if (Pharmacy == null) {\r\n Pharmacy = '';\r\n }\r\n if (Phone == null) {\r\n Phone = '';\r\n }\r\n if (RxNumber == null) {\r\n RxNumber = '';\r\n }\r\n if (Doctor == null) {\r\n Doctor = '';\r\n }\r\n if (Comment == null) {\r\n Comment = '';\r\n }\r\n if (Parent == 'Parent') {\r\n if (Pharmacy.length > 0 || Phone.length > 0 || RxNumber.length > 0 || Doctor.length > 0 || Comment.length > 0) {\r\n return true;\r\n }\r\n }\r\n else {\r\n if (Pharmacy.length > 0 || Phone.length > 0 || RxNumber.length > 0 || Doctor.length > 0) {\r\n return true;\r\n }\r\n }\r\n\r\n if (Parent == 'Parent') {\r\n if (document.getElementById('span' + Id) != null) {\r\n document.getElementById('span' + Id).style.display = 'none';\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getMedicationAriaRow(row: Medications): string {\r\n let colList: string[] = [''];\r\n let dataList: string[] = [''];\r\n\r\n if (this.LoginSettings.V10 == false) {\r\n colList = ['Medication', 'Frequency', 'StartDate', 'EndDate', 'Dose', 'SchoolAuthorisedToAdminister'];\r\n dataList = [row.Medication, row.Frequency, row.StartDate.toString(), row.EndDate.toString(), row.Dose, row.SchoolAuthorisedToAdminister];\r\n }\r\n else {\r\n colList = ['Medication', 'StartDate', 'EndDate', 'Dose', 'SchoolAuthorisedToAdminister'];\r\n dataList = [row.Medication, row.StartDate.toString(), row.EndDate.toString(), row.Dose, row.SchoolAuthorisedToAdminister];\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","
\r\n No Physical Exam data exists for student\r\n
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{row.Date|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Height\r\n \r\n \r\n \r\n {{row.Height}}\r\n \r\n \r\n Height Percentile\r\n \r\n \r\n \r\n {{row.HeightPercentile}}\r\n \r\n \r\n Weight\r\n \r\n \r\n \r\n {{row.Weight}}\r\n \r\n \r\n Weight Percentile\r\n \r\n \r\n \r\n {{row.WeightPercentile}}\r\n \r\n \r\n BMI\r\n \r\n \r\n \r\n {{row.BMI}}\r\n \r\n \r\n BMI Percentile\r\n \r\n \r\n \r\n {{row.BMIPercentile}}\r\n \r\n \r\n Blood Pressure\r\n \r\n \r\n \r\n {{row.BloodPressure}}\r\n \r\n \r\n Exam Complete\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral Returned to School\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Return Date\r\n \r\n \r\n \r\n \r\n {{row.ReturnDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Doctor did Exam\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Clinic did Exam\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n\r\n \r\n \r\n \r\n
","import { Component, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { PhysicalExamScreening } from '../health.model';\r\nimport { HealthService } from '../health.service';\r\n\r\n@Component({\r\n selector: 'app-physical-exam',\r\n templateUrl: './physical-exam.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class PhysicalExamComponent implements OnInit {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n physicalExamScreenings: PhysicalExamScreening[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['Date', 'Height', 'HeightPercentile', 'Weight', 'WeightPercentile', 'BMI', 'BMIPercentile', 'BloodPressure', 'ExamComplete', 'Referral', 'ReferralReturnedToSchool', 'ReturnDate', 'DoctorDidExam', 'ClinicDidExam'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private healthService: HealthService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.physicalExamScreenings);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getPhysicalExamScreenings();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getPhysicalExamScreenings();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getPhysicalExamScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getPhysicalExamScreenings() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getPhysicalExamScreenings(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.physicalExamScreenings = data;\r\n this.angularMatData = new TylerMatTableDataSource(this.physicalExamScreenings);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n });\r\n }, 0);\r\n }\r\n}","\r\n

\r\n Results Legend\r\n

\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
CodeDescriptionScreening
{{code.Code}}{{code.Definition}}{{code.ScreeningType}}
\r\n
\r\n\r\n\r\n\r\n \r\n\r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { CodeLegend } from '../../health.model';\r\n\r\n@Component({\r\n selector: 'app-code-legend',\r\n templateUrl: './code-legend.component.html',\r\n styles: []\r\n})\r\nexport class CodeLegendComponent implements OnInit {\r\n\r\n legendCodes: CodeLegend[];\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n dialogRef.disableClose = true;\r\n }\r\n\r\n ngOnInit() {\r\n this.legendCodes = this.data.legendCodes;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","
\r\n No Spinal data exists for student\r\n
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{row.Date|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Pass/Fail\r\n \r\n \r\n \r\n {{row.PassFail}}\r\n \r\n \r\n Continued Observation\r\n \r\n \r\n \r\n {{row.ContinuedObservation}}\r\n \r\n \r\n Follow Up Date\r\n \r\n \r\n \r\n \r\n {{row.FollowUpDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Under Doctor's Care\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral Returned to School\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Return Date\r\n \r\n \r\n \r\n \r\n {{row.ReturnDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
","import { Component, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { SpinalScreening } from '../health.model';\r\nimport { HealthService } from '../health.service';\r\n\r\n@Component({\r\n selector: 'app-spinal',\r\n templateUrl: './spinal.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class SpinalComponent implements OnInit {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n spinalScreenings: SpinalScreening[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['Date', 'PassFail', 'ContinuedObservation', 'FollowUpDate', 'UnderDoctorsCare', 'Referral', 'ReferralReturnedToSchool', 'ReturnDate'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private healthService: HealthService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.spinalScreenings);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getSpinalScreenings();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getSpinalScreenings();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getSpinalScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getSpinalScreenings() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getSpinalScreenings(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.spinalScreenings = data;\r\n this.angularMatData = new TylerMatTableDataSource(this.spinalScreenings);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n });\r\n }, 0);\r\n }\r\n}","
\r\n No Vision data exists for student\r\n
\r\n
0 \">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n \r\n {{row.Date|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n \r\n Vision Test\r\n \r\n \r\n \r\n {{row.VisionTest}}\r\n \r\n \r\n Binocular Near\r\n \r\n \r\n \r\n {{row.BinocularNear}}\r\n \r\n \r\n Binocular Far\r\n \r\n \r\n \r\n {{row.BinocularFar}}\r\n \r\n \r\n Acuity Far Right\r\n \r\n \r\n \r\n {{row.AcuityFarRight}}\r\n \r\n \r\n Acuity Far Left\r\n \r\n \r\n \r\n {{row.AcuityFarLeft}}\r\n \r\n \r\n Acuity Near Right\r\n \r\n \r\n \r\n {{row.AcuityNearRight}}\r\n \r\n \r\n Acuity Near Left\r\n \r\n \r\n \r\n {{row.AcuityNearLeft}}\r\n \r\n \r\n Muscular Near\r\n \r\n \r\n \r\n {{row.MuscularNear}}\r\n \r\n \r\n Muscular Far\r\n \r\n \r\n \r\n {{row.MuscularFar}}\r\n \r\n \r\n Color Vision\r\n \r\n \r\n \r\n {{row.ColorVision}}\r\n \r\n \r\n L-Phor\r\n \r\n \r\n \r\n {{row.LPhor}}\r\n \r\n \r\n V-Phor\r\n \r\n \r\n \r\n {{row.VPhor}}\r\n \r\n \r\n Hyperopia\r\n \r\n \r\n \r\n {{row.Hyperopia}}\r\n \r\n \r\n Glasses\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Under Doctor's Care\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Referral Returned to School\r\n \r\n \r\n \r\n Y\r\n \r\n \r\n \r\n Return Date\r\n \r\n \r\n \r\n \r\n {{row.ReturnDate|date:'MM/dd/yyyy'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
","import { Component, Input, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { VisionScreening } from '../health.model';\r\nimport { HealthService } from '../health.service';\r\n\r\n@Component({\r\n selector: 'app-vision',\r\n templateUrl: './vision.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class VisionComponent implements OnInit {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n visionScreenings: VisionScreening[] = [];\r\n student360YearSubscription: Subscription;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['Date', 'VisionTest', 'BinocularNear', 'BinocularFar', 'AcuityFarRight', 'AcuityFarLeft', 'AcuityNearRight', 'AcuityNearLeft', 'MuscularNear', 'MuscularFar', 'ColorVision', 'LPhor', 'VPhor', 'Hyperopia', 'Glasses', 'UnderDoctorsCare', 'Referral', 'ReferralReturnedToSchool', 'ReturnDate'];\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n constructor(\r\n private yearService: YearService,\r\n private healthService: HealthService\r\n ) {\r\n this.angularMatData = new TylerMatTableDataSource(this.visionScreenings);\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getVisionScreenings();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getVisionScreenings();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getVisionScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getVisionScreenings() {\r\n this.isBusy = true;\r\n setTimeout(() => {\r\n this.healthService.getVisionScreenings(this.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(data => {\r\n this.visionScreenings = data;\r\n this.angularMatData = new TylerMatTableDataSource(this.visionScreenings);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n this.isBusy = false;\r\n });\r\n }, 0);\r\n }\r\n}","
\r\n No Health Condition data exists for student\r\n
\r\n
0 \">\r\n
\r\n \r\n \r\n \r\n \r\n \r\n Start\r\n \r\n \r\n \r\n \r\n {{hc.DateConditionStart | date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n End\r\n \r\n \r\n \r\n \r\n {{hc.DateConditionEnd | date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Condition\r\n \r\n \r\n \r\n \r\n {{hc.HealthConditionCodeDesc}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Under practitioner's Care\r\n \r\n \r\n Y\r\n \r\n \r\n\r\n \r\n \r\n \r\n Home Instruction Start\r\n \r\n \r\n \r\n \r\n {{hc.DateHomeTeachingStart | date:'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Home Instruction End\r\n \r\n \r\n \r\n \r\n {{hc.DateHomeTeachingEnd | date:'MM/dd/yy'}}\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, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { HealthCondition } from '../../../shared-modules/student-health-shared/student-health-shared.model';\r\nimport { StudentHealthSharedService } from '../../../shared-modules/student-health-shared/student-health-shared.service';\r\nimport * as moment from 'moment';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-health-condition',\r\n templateUrl: './health-condition.component.html',\r\n styleUrls: ['./health-condition.component.css']\r\n})\r\nexport class HealthConditionComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n healthConditions: HealthCondition[] = [];\r\n tylerMatData = new TylerMatTableDataSource();\r\n columnDisplay = ['DateConditionStart', 'DateConditionEnd', 'HealthConditionCodeDesc', 'UnderDoctorsCare', 'DateHomeTeachingStart', 'DateHomeTeachingEnd'];\r\n student360YearSubscription: Subscription;\r\n\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n if (this.tylerMatData) {\r\n this.tylerMatData.sort = val;\r\n }\r\n }\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private studentHealthSharedService: StudentHealthSharedService\r\n ) {\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getHealthCondition();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getHealthCondition();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getHealthCondition();\r\n }\r\n\r\n getHealthCondition() {\r\n this.healthConditions = [];\r\n this.tylerMatData = new TylerMatTableDataSource(this.healthConditions);\r\n this.studentHealthSharedService.getHealthConditionReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id).subscribe(conditionData => {\r\n if (conditionData) {\r\n this.healthConditions = conditionData;\r\n this.healthConditions.forEach(hc => {\r\n hc.HealthConditionCodeDesc = hc.HealthConditionCode + ' : ' + hc.HealthConditionDescription;\r\n\r\n if (moment(hc.DateConditionStart, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hc.DateConditionStart = null;\r\n }\r\n if (moment(hc.DateConditionEnd, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hc.DateConditionEnd = null;\r\n }\r\n if (moment(hc.DateHomeTeachingEnd, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hc.DateHomeTeachingEnd = null;\r\n }\r\n if (moment(hc.DateHomeTeachingStart, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hc.DateHomeTeachingStart = null;\r\n }\r\n if (moment(hc.DateReferralReturn, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hc.DateReferralReturn = null;\r\n }\r\n if (hc.GenerateAlert == true && hc.NonNurseViewable == false) {\r\n hc.GenerateAlertValue = 'Y';\r\n }\r\n if (hc.NonNurseViewable == true && hc.GenerateAlert == true) {\r\n hc.NonNurseViewableValue = 'Y';\r\n }\r\n });\r\n\r\n this.tylerMatData = new TylerMatTableDataSource(this.healthConditions);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","
\r\n No Pregnancy data exists for student\r\n
\r\n 0\" style=\"width: 100%;display: table;\" #table [dataSource]=\"dataSource\"\r\n matSort multiTemplateDataRows matSortDisableClear id=\"prgTable\" matSortActive=\"DateOfTest\"\r\n [matSortDirection]=\"defaultSorDirection\" aria-label=\"Pregnancy Table\">\r\n\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n {{element.DateOfTest|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Expected\r\n \r\n \r\n \r\n {{element.DateExpecting|date:'MM/dd/yy'}}\r\n \r\n\r\n \r\n \r\n Hospital\r\n \r\n \r\n \r\n \r\n {{ element.HospitalName}}\r\n \r\n \r\n\r\n \r\n \r\n Home Instruction Start\r\n \r\n \r\n \r\n {{element.DateHomeTeachingStart|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Home Instruction End\r\n \r\n \r\n \r\n {{element.DateHomeTeachingEnd|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort, SortDirection } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { Pregnancy } from '../../../shared-modules/student-health-shared/student-health-shared.model';\r\nimport * as moment from 'moment';\r\nimport { StudentHealthSharedService } from '../../../shared-modules/student-health-shared/student-health-shared.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-pregnancy',\r\n templateUrl: './pregnancy.component.html',\r\n styleUrls: ['./pregnancy.component.css']\r\n})\r\nexport class PregnancyComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n dataSource = new TylerMatTableDataSource();\r\n defaultSorDirection: SortDirection = 'asc';\r\n pregnancyData: Pregnancy[] = [];\r\n columnsToDisplay = ['DateOfTest', 'DateExpecting', 'HospitalName', 'DateHomeTeachingStart', 'DateHomeTeachingEnd'];\r\n student360YearSubscription: Subscription;\r\n\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n if (this.dataSource) {\r\n this.dataSource.sort = val;\r\n }\r\n }\r\n constructor(\r\n private studentHealthSharedService: StudentHealthSharedService,\r\n private studentService: StudentService,\r\n private yearService: YearService\r\n ) {\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getPregnancy();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getPregnancy();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getPregnancy();\r\n }\r\n\r\n getPregnancy() {\r\n this.pregnancyData = [];\r\n this.dataSource = new TylerMatTableDataSource(this.pregnancyData);\r\n this.studentHealthSharedService.getPregnancyReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id).subscribe(prData => {\r\n if (prData) {\r\n this.pregnancyData = prData;\r\n this.pregnancyData.forEach(pr => {\r\n if (moment(pr.DateOfTest, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n pr.DateOfTest = null;\r\n }\r\n if (moment(pr.DateExpecting, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n pr.DateExpecting = null;\r\n }\r\n if (moment(pr.DateHomeTeachingEnd, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n pr.DateHomeTeachingEnd = null;\r\n }\r\n if (moment(pr.DateHomeTeachingStart, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n pr.DateHomeTeachingStart = null;\r\n }\r\n if (moment(pr.DateOfDeliveryOrTermination, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n pr.DateOfDeliveryOrTermination = null;\r\n }\r\n });\r\n\r\n this.dataSource = new TylerMatTableDataSource(this.pregnancyData);\r\n this.dataSource.sort = this.sort;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","
\r\n No Health Restriction data exists for student\r\n
\r\n
0 \">\r\n
\r\n \r\n\r\n \r\n \r\n \r\n Start\r\n \r\n \r\n \r\n \r\n {{hr.DateRestrictionStart | date:'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n End\r\n \r\n \r\n \r\n \r\n {{hr.DateRestrictionEnd | date:'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Period\r\n \r\n \r\n \r\n \r\n {{hr.Period}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Under practitioner's care\r\n \r\n \r\n Y \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, OnChanges, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { HealthRestriction } from '../../../shared-modules/student-health-shared/student-health-shared.model';\r\nimport { StudentHealthSharedService } from '../../../shared-modules/student-health-shared/student-health-shared.service';\r\nimport * as moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-restrictions',\r\n templateUrl: './restrictions.component.html',\r\n styleUrls: ['./restrictions.component.css']\r\n})\r\nexport class RestrictionsComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() selectedStudent;\r\n healthRestrictions: HealthRestriction[] = [];\r\n tylerMatData = new TylerMatTableDataSource();\r\n columnDisplay = ['DateRestrictionStart', 'DateRestrictionEnd', 'Period', 'UnderCare'];\r\n student360YearSubscription: Subscription;\r\n\r\n @ViewChild(MatSort) set sort(val: MatSort) {\r\n if (this.tylerMatData) {\r\n this.tylerMatData.sort = val;\r\n }\r\n }\r\n\r\n constructor(\r\n private studentHealthSharedService: StudentHealthSharedService,\r\n private studentService: StudentService,\r\n private yearService: YearService\r\n ) {\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getHealthRestrictions();\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getHealthRestrictions();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getHealthRestrictions();\r\n }\r\n\r\n getHealthRestrictions() {\r\n this.healthRestrictions = [];\r\n this.tylerMatData = new TylerMatTableDataSource(this.healthRestrictions);\r\n this.studentHealthSharedService.getHealthRestrictionReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id).subscribe(restData => {\r\n if (restData) {\r\n this.healthRestrictions = restData;\r\n this.healthRestrictions.forEach(hr => {\r\n if (moment(hr.DateRestrictionStart, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hr.DateRestrictionStart = null;\r\n }\r\n if (moment(hr.DateRestrictionEnd, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hr.DateRestrictionEnd = null;\r\n }\r\n if (moment(hr.DateReferralReturn, 'YYYY-MM-DDThh:mm:ss').format('MM/DD/YY') == '01/01/01') {\r\n hr.DateReferralReturn = null;\r\n }\r\n if (hr.GenerateAlert == true && hr.NonNurseViewableAlert == false) {\r\n hr.GenerateAlertValue = 'Y';\r\n }\r\n if (hr.NonNurseViewableAlert == true && hr.GenerateAlert == true) {\r\n hr.NonNurseViewableValue = 'Y';\r\n }\r\n });\r\n\r\n this.tylerMatData = new TylerMatTableDataSource(this.healthRestrictions);\r\n this.tylerMatData.sort = this.sort;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n}\r\n","\r\n
\r\n No screening data exists for student\r\n
\r\n\r\n\r\n
\r\n
0\" class=\"screening-type-header\">\r\n Dental\r\n
\r\n
0\" class=\"screening-type-grid\">\r\n \r\n\r\n \r\n \r\n \r\n Screening Name\r\n \r\n \r\n \r\n \r\n {{element.ScreeningName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screening Series\r\n \r\n \r\n \r\n \r\n {{element.ScreeningSeries}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened On\r\n \r\n \r\n \r\n \r\n {{element.ScreenedOn | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Results\r\n \r\n \r\n \r\n \r\n {{element.Results}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened By\r\n \r\n \r\n \r\n \r\n {{element.ScreenedBy}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
0\" class=\"screening-type-header\">\r\n Hearing\r\n
\r\n
0\" class=\"screening-type-grid\">\r\n \r\n\r\n \r\n \r\n \r\n Screening Name\r\n \r\n \r\n \r\n \r\n {{element.ScreeningName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screening Series\r\n \r\n \r\n \r\n \r\n {{element.ScreeningSeries}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened On\r\n \r\n \r\n \r\n \r\n {{element.ScreenedOn | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Results\r\n \r\n \r\n \r\n \r\n {{element.Results}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened By\r\n \r\n \r\n \r\n \r\n {{element.ScreenedBy}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
0\" class=\"screening-type-header\">\r\n Physical Exam\r\n
\r\n
0\" class=\"screening-type-grid\">\r\n \r\n\r\n \r\n \r\n \r\n Screening Name\r\n \r\n \r\n \r\n \r\n {{element.ScreeningName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screening Series\r\n \r\n \r\n \r\n \r\n {{element.ScreeningSeries}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened On\r\n \r\n \r\n \r\n \r\n {{element.ScreenedOn | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Results\r\n \r\n \r\n \r\n \r\n {{element.Results}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened By\r\n \r\n \r\n \r\n \r\n {{element.ScreenedBy}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
0\" class=\"screening-type-header\">\r\n Spinal\r\n
\r\n
0\" class=\"screening-type-grid\">\r\n \r\n\r\n \r\n \r\n \r\n Screening Name\r\n \r\n \r\n \r\n \r\n {{element.ScreeningName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screening Series\r\n \r\n \r\n \r\n \r\n {{element.ScreeningSeries}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened On\r\n \r\n \r\n \r\n \r\n {{element.ScreenedOn | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Results\r\n \r\n \r\n \r\n \r\n {{element.Results}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened By\r\n \r\n \r\n \r\n \r\n {{element.ScreenedBy}}\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n
\r\n
0\" class=\"screening-type-header\">\r\n Vision\r\n
\r\n
0\" class=\"screening-type-grid\">\r\n \r\n\r\n \r\n \r\n \r\n Screening Name\r\n \r\n \r\n \r\n \r\n {{element.ScreeningName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screening Series\r\n \r\n \r\n \r\n \r\n {{element.ScreeningSeries}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened On\r\n \r\n \r\n \r\n \r\n {{element.ScreenedOn | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Results\r\n \r\n \r\n \r\n \r\n {{element.Results}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Screened By\r\n \r\n \r\n \r\n \r\n {{element.ScreenedBy}}\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, OnChanges, OnInit, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n// import { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\n// import { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { HealthService } from '../health.service';\r\n// import { Screening } from '../health.model';\r\nimport { DentalScreening, HearingScreening, PhysicalScreening, SpinalScreening, VisionScreening } from '../../../shared-modules/student-health-shared/student-health-shared.model';\r\nimport { StudentHealthSharedService } from '../../../shared-modules/student-health-shared/student-health-shared.service';\r\nimport { Observable, forkJoin } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-screening',\r\n templateUrl: './screening.component.html',\r\n styleUrls: ['./screening.component.css']\r\n})\r\nexport class ScreeningComponent implements OnInit, OnChanges {\r\n\r\n @Input() selectedStudent;\r\n isBusy = false;\r\n // screening: Screening[] = [];\r\n // screeningSelected: boolean[] = [];\r\n\r\n\r\n hearingScreenings: HearingScreening[] = [];\r\n dentalScreenings: DentalScreening[] = [];\r\n physicalScreenings: PhysicalScreening[] = [];\r\n spinalScreenings: SpinalScreening[] = [];\r\n visionScreenings: VisionScreening[] = [];\r\n\r\n hearingDataSource = new TylerMatTableDataSource();\r\n spinalDataSource = new TylerMatTableDataSource();\r\n physicalDataSource = new TylerMatTableDataSource();\r\n dentalDataSource = new TylerMatTableDataSource();\r\n visionDataSource = new TylerMatTableDataSource();\r\n hearingColumnsToDisplay = ['ScreeningName', 'ScreeningSeries', 'ScreenedOn', 'Results', 'ScreenedBy'];\r\n spinalColumnsToDisplay = ['ScreeningName', 'ScreeningSeries', 'ScreenedOn', 'Results', 'ScreenedBy'];\r\n physicalColumnsToDisplay = ['ScreeningName', 'ScreeningSeries', 'ScreenedOn', 'Results', 'ScreenedBy'];\r\n dentalColumnsToDisplay = ['ScreeningName', 'ScreeningSeries', 'ScreenedOn', 'Results', 'ScreenedBy'];\r\n visionColumnsToDisplay = ['ScreeningName', 'ScreeningSeries', 'ScreenedOn', 'Results', 'ScreenedBy'];\r\n\r\n // ----------Angular Material------------------------------------\r\n // angularMatData = new TylerMatTableDataSource();\r\n // displayedScreeningColumn = ['More', 'ScreeningType'];\r\n @ViewChild('hearingSort') set hearingSort(val: MatSort) {\r\n if (this.hearingDataSource) {\r\n this.hearingDataSource.sort = val;\r\n }\r\n }\r\n @ViewChild('spinalSort') set spinalSort(val: MatSort) {\r\n if (this.spinalDataSource) {\r\n this.spinalDataSource.sort = val;\r\n }\r\n }\r\n @ViewChild('physicalSort') set physicalSort(val: MatSort) {\r\n if (this.physicalDataSource) {\r\n this.physicalDataSource.sort = val;\r\n }\r\n }\r\n @ViewChild('dentalSort') set dentalSort(val: MatSort) {\r\n if (this.dentalDataSource) {\r\n this.dentalDataSource.sort = val;\r\n }\r\n }\r\n @ViewChild('visionSort') set visionSort(val: MatSort) {\r\n if (this.visionDataSource) {\r\n this.visionDataSource.sort = val;\r\n }\r\n }\r\n\r\n constructor(\r\n // private healthService: HealthService,\r\n private studentHealthSharedService: StudentHealthSharedService,\r\n private studentService: StudentService,\r\n private yearService: YearService) {\r\n\r\n // this.angularMatData = new TylerMatTableDataSource(this.screening);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.selectedStudent.previousValue != undefined) {\r\n if (changes.selectedStudent.currentValue.Id != changes.selectedStudent.previousValue.Id) {\r\n this.getScreenings();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getScreenings();\r\n }\r\n\r\n getScreenings() {\r\n this.hearingScreenings = [];\r\n this.spinalScreenings = [];\r\n this.physicalScreenings = [];\r\n this.dentalScreenings = [];\r\n let serverCalls: Observable;\r\n\r\n serverCalls = forkJoin(\r\n this.studentHealthSharedService.getHearingScreeningReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id),\r\n this.studentHealthSharedService.getSpinalScreeningReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id),\r\n this.studentHealthSharedService.getPhysicalScreeningReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id),\r\n this.studentHealthSharedService.getDentalScreeningReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id),\r\n this.studentHealthSharedService.getVisionScreeningReadByStudentId(this.studentService.selectedStudent.Id, this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id)\r\n );\r\n\r\n serverCalls.pipe(take(1)).subscribe(results => {\r\n this.hearingScreenings = results[0];\r\n this.spinalScreenings = results[1];\r\n this.physicalScreenings = results[2];\r\n this.dentalScreenings = results[3];\r\n this.visionScreenings = results[4];\r\n this.hearingDataSource = new TylerMatTableDataSource(this.hearingScreenings);\r\n this.spinalDataSource = new TylerMatTableDataSource(this.spinalScreenings);\r\n this.physicalDataSource = new TylerMatTableDataSource(this.physicalScreenings);\r\n this.dentalDataSource = new TylerMatTableDataSource(this.dentalScreenings);\r\n this.visionDataSource = new TylerMatTableDataSource(this.visionScreenings);\r\n this.hearingDataSource.sort = this.hearingSort;\r\n this.spinalDataSource.sort = this.spinalSort;\r\n this.physicalDataSource.sort = this.physicalSort;\r\n this.dentalDataSource.sort = this.dentalSort;\r\n this.visionDataSource.sort = this.visionSort;\r\n });\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n \r\n
\r\n
0\">\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
No health information has been enabled by the\r\n administration.
\r\n
\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 { SelectionModel } from '@angular/cdk/collections';\r\nimport { Component, ElementRef, EventEmitter, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { DentalComponent } from './dental/dental.component';\r\nimport { DoctorsComponent } from './doctors/doctors.component';\r\nimport { HealthVisitLogComponent } from './health-visit-log/health-visit-log.component';\r\nimport { CodeLegend } from './health.model';\r\nimport { HealthService } from './health.service';\r\nimport { HearingComponent } from './hearing/hearing.component';\r\nimport { ImmunizationsComponent } from './immunizations/immunizations.component';\r\nimport { InsuranceComponent } from './insurance/insurance.component';\r\nimport { MedicationsComponent } from './medications/medications.component';\r\nimport { PhysicalExamComponent } from './physical-exam/physical-exam.component';\r\nimport { CodeLegendComponent } from './screening/code-legend/code-legend.component';\r\nimport { SpinalComponent } from './spinal/spinal.component';\r\nimport { VisionComponent } from './vision/vision.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-health',\r\n templateUrl: './health.component.html',\r\n styleUrls: []\r\n})\r\nexport class HealthComponent implements OnInit, OnDestroy {\r\n\r\n // ------------Element references--------------------------------\r\n @ViewChild('tabContent', { read: ElementRef }) tabContentRef: ElementRef;\r\n @ViewChild(DoctorsComponent) doctorsComponent: DoctorsComponent;\r\n @ViewChild(HealthVisitLogComponent) healthVisitLogComponent: HealthVisitLogComponent;\r\n @ViewChild(ImmunizationsComponent) immunizationsComponent: ImmunizationsComponent;\r\n @ViewChild(InsuranceComponent) insuranceComponent: InsuranceComponent;\r\n @ViewChild(MedicationsComponent) medicationsComponent: MedicationsComponent;\r\n @ViewChild(HearingComponent) hearingComponent: HearingComponent;\r\n @ViewChild(VisionComponent) visionComponent: VisionComponent;\r\n @ViewChild(DentalComponent) dentalComponent: DentalComponent;\r\n @ViewChild(SpinalComponent) spinalComponent: SpinalComponent;\r\n @ViewChild(PhysicalExamComponent) physicalExamComponent: PhysicalExamComponent;\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n expandEmitter: boolean;\r\n allowMultiSelect = true;\r\n setIndex = new EventEmitter();\r\n selectedTabName: string;\r\n\r\n // ------------------------------------------------------------\r\n currentUser: User;\r\n selectedStudent: Student;\r\n routeSelectedTabIndex: number;\r\n selectedStudentSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n studentEnrollment = this.studentService.studentEnrollment;\r\n legendCodes: any = [];\r\n initialSelection = [];\r\n legendDialogRef: MatDialogRef;\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n tabNames: string[] = [];\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private healthService: HealthService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private activatedRoute: ActivatedRoute\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n\r\n this.student360YearSubscription = this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getStudentHealthPortals();\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.loginService.LoginSettings.S360DisplayImmunizations) {\r\n this.tabNames.push('Immunizations');\r\n }\r\n if (this.loginService.LoginSettings.S360DisplayMedications) {\r\n this.tabNames.push('Medications');\r\n }\r\n if (this.loginService.LoginSettings.S360DisplayHealthVisitLog) {\r\n this.tabNames.push('Health Visit Log');\r\n }\r\n if (this.loginService.LoginSettings.S360DisplayDoctors) {\r\n this.tabNames.push('Practitioners');\r\n }\r\n if (this.loginService.LoginSettings.S360DisplayInsurane) {\r\n this.tabNames.push('Insurance');\r\n }\r\n if (this.loginService.LoginSettings.S360DisplayScreenings) {\r\n this.tabNames.push('Screenings');\r\n }\r\n if (this.tabNames.length > 0) {\r\n this.selectedTabName = this.tabNames[0];\r\n }\r\n this.activatedRoute.queryParams.subscribe(params => {\r\n const selectedTab = params['selectedTab'];\r\n if (selectedTab) {\r\n for (let i = 0; i < this.tabNames.length; i++) {\r\n if (this.tabNames[i] == selectedTab) {\r\n this.routeSelectedTabIndex = i;\r\n setTimeout(() => {\r\n this.setIndex.emit(this.routeSelectedTabIndex);\r\n }, 500);\r\n }\r\n }\r\n\r\n if (!this.loginService.LoginSettings.V10) {\r\n this.selectedTabName = selectedTab;\r\n }\r\n }\r\n });\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectedStudentSubscription.unsubscribe();\r\n }\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) {\r\n return student.Id == studentId;\r\n })[0];\r\n this.getStudentHealthPortals();\r\n }\r\n\r\n getStudentHealthPortals() {\r\n if (!this.loginService.LoginSettings.V10 && this.selectedStudent) {\r\n this.healthService.getStudentHealthPortals(this.selectedStudent.Id, this.yearService.defaultYear.Id).subscribe(result => {\r\n this.tabNames = result;\r\n\r\n if (this.tabNames.length > 0) {\r\n if (this.selectedTabName && this.selectedTabName != '') {\r\n let tabIndex = this.tabNames.indexOf(this.selectedTabName);\r\n if (tabIndex < 0) {\r\n tabIndex = 0;\r\n }\r\n this.setIndex.emit(tabIndex);\r\n }\r\n else {\r\n this.selectedTabName = this.tabNames[0];\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n selectionChange(selectionIndex: number) {\r\n this.selectedTabName = this.tabNames[selectionIndex];\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n if (this.selectedTabName == 'Medications') {\r\n this.medicationsComponent.expandAll(expand);\r\n }\r\n }\r\n\r\n isCurrentTabFiltered(): boolean {\r\n switch (this.selectedTabName) {\r\n case 'Immunizations':\r\n if (this.immunizationsComponent) {\r\n return this.immunizationsComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Medications':\r\n if (this.medicationsComponent) {\r\n return this.medicationsComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Health Visit Log':\r\n if (this.healthVisitLogComponent) {\r\n return this.healthVisitLogComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Practitioners':\r\n if (this.doctorsComponent) {\r\n return this.doctorsComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Insurance':\r\n if (this.insuranceComponent) {\r\n return this.insuranceComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Hearing':\r\n if (this.hearingComponent) {\r\n return this.hearingComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Vision':\r\n if (this.visionComponent) {\r\n return this.visionComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Dental':\r\n if (this.dentalComponent) {\r\n return this.dentalComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Spinal':\r\n if (this.spinalComponent) {\r\n return this.spinalComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n case 'Physical Exam':\r\n if (this.physicalExamComponent) {\r\n return this.physicalExamComponent.angularMatData.isFiltered();\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n return false;\r\n }\r\n\r\n clearCurrentTabFilters() {\r\n switch (this.selectedTabName) {\r\n case 'Immunizations':\r\n if (this.immunizationsComponent) {\r\n this.immunizationsComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Medications':\r\n if (this.medicationsComponent) {\r\n this.medicationsComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Health Visit Log':\r\n if (this.healthVisitLogComponent) {\r\n this.healthVisitLogComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Practitioners':\r\n if (this.doctorsComponent) {\r\n this.doctorsComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Insurance':\r\n if (this.insuranceComponent) {\r\n this.insuranceComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Hearing':\r\n if (this.hearingComponent) {\r\n return this.hearingComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Vision':\r\n if (this.visionComponent) {\r\n return this.visionComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Dental':\r\n if (this.dentalComponent) {\r\n return this.dentalComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Spinal':\r\n if (this.spinalComponent) {\r\n return this.spinalComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n case 'Physical Exam':\r\n if (this.physicalExamComponent) {\r\n return this.physicalExamComponent.angularMatData.removeAllFilters();\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n // ------------Modal window-----------------------\r\n codeLegendClick() {\r\n let legendCodes: CodeLegend[] = [];\r\n this.healthService.getScreeningCodeLegend(this.selectedStudent.Id).subscribe(data => {\r\n legendCodes = data;\r\n\r\n this.legendDialogRef = this.dialog.open(CodeLegendComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '25%',\r\n maxWidth: '25%',\r\n minHeight: '25%',\r\n maxHeight: '50%',\r\n data: {\r\n legendCodes: legendCodes\r\n }\r\n });\r\n\r\n this.legendDialogRef.componentInstance.legendCodes = legendCodes;\r\n this.legendDialogRef.afterClosed().subscribe(result => {\r\n });\r\n });\r\n }\r\n}\r\n","export class Immunizations {\r\n Id: number;\r\n Name: string;\r\n ExemptCode: string;\r\n ExemptCodeId: string;\r\n VaccineTypeId: string;\r\n ExemptDate: Date;\r\n Date1: Date;\r\n Date2: Date;\r\n Date3: Date;\r\n Date4: Date;\r\n Date5: Date;\r\n Date6: Date;\r\n Date7: Date;\r\n Date8: Date;\r\n Date9: Date;\r\n Date10: Date;\r\n Date11: Date;\r\n Date12: Date;\r\n Date13: Date;\r\n Date14: Date;\r\n Date15: Date;\r\n Date16: Date;\r\n Date17: Date;\r\n Date18: Date;\r\n Date19: Date;\r\n Date20: Date;\r\n ImmunizationsNote: string;\r\n}\r\n\r\nexport class Medications {\r\n Id: number;\r\n Medication: string;\r\n Frequency: string;\r\n StartDate: Date;\r\n EndDate: Date;\r\n Dose: string;\r\n SchoolAuthorisedToAdminister: string;\r\n Pharmacy: string;\r\n Phone: string;\r\n RxNumber: string;\r\n Doctor: string;\r\n Comments: string;\r\n}\r\n\r\nexport class Doctors {\r\n Id: number;\r\n DoctorName: string;\r\n Address: string;\r\n Telephone: string;\r\n Email: string;\r\n Type: string;\r\n TypeCode: string;\r\n PhysiciansId: number;\r\n PhysicianTypeId: number;\r\n Comment: string;\r\n PhysicianName: string;\r\n PracticeName: string;\r\n DateStart: Date;\r\n DateEnd: Date;\r\n\r\n // Non DTO Field //\r\n PhysicianDescription: string;\r\n DoctorType: string;\r\n}\r\n\r\nexport class HealthVisitLog {\r\n Id: number;\r\n Date: Date;\r\n TimeIn: string;\r\n TimeOut: string;\r\n VisitReason: string;\r\n Action: string;\r\n SentTo: string;\r\n}\r\n\r\nexport class Insurance {\r\n Id: number;\r\n PhysiciansId: number;\r\n PhysicianTypeId: string;\r\n InsuranceCompany: string;\r\n InsuranceStartDate: Date;\r\n InsuranceEndDate: Date;\r\n Policy: string;\r\n Primary: string;\r\n Phone: string;\r\n Comment: string;\r\n\r\n constructor() {\r\n this.Id = 0;\r\n this.PhysiciansId = 0;\r\n this.PhysicianTypeId = '2'; // Insurance\r\n this.InsuranceCompany = '';\r\n this.InsuranceStartDate = null;\r\n this.InsuranceEndDate = null;\r\n this.Policy = '';\r\n this.Primary = '';\r\n this.Phone = '';\r\n this.Comment = '';\r\n }\r\n}\r\n\r\nexport class Screening {\r\n Id: number;\r\n ScreeningType: string;\r\n Screenings: IndividualScreenings[];\r\n}\r\n\r\nexport class IndividualScreenings {\r\n HealthScreeningId: number;\r\n ScreeningName: string;\r\n SeriesName: string;\r\n ScheduledDate: Date;\r\n ScreenedDate: Date;\r\n Result: string;\r\n ResultCode: string;\r\n Referral: string;\r\n Comments: string;\r\n Height: number;\r\n Weight: number;\r\n BMI: number;\r\n BMIPercentile: number;\r\n ReferralStatus: string;\r\n SportsScreening: boolean;\r\n}\r\n\r\nexport class CodeLegend {\r\n CodeID: number;\r\n Code: string;\r\n Definition: string;\r\n CodeType: string;\r\n ScreeningType: string;\r\n}\r\n\r\nexport class HealthNotes {\r\n StudentId: number;\r\n MedicalImmunizationNote: string;\r\n MedicalConditionNote: string;\r\n MedicalPhysicianInformationNote: string;\r\n MedicalInsuranceNote: string;\r\n RecordStatus: string;\r\n}\r\n\r\nexport class HearingScreening {\r\n Id: number;\r\n Date: Date;\r\n RightEar: string;\r\n RightEarDB: number;\r\n RightEarHz: number;\r\n LeftEar: string;\r\n LeftEarDB: number;\r\n LeftEarHz: number;\r\n AssistedDevice: boolean;\r\n UsedAtScreening: boolean;\r\n UnderDoctorsCare: boolean;\r\n FollowUpDate: Date;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n ReturnDate: Date;\r\n}\r\n\r\nexport class VisionScreening {\r\n Id: number;\r\n Date: Date;\r\n VisionTest: string;\r\n BinocularNear: string;\r\n BinocularFar: string;\r\n AcuityFarRight: string;\r\n AcuityFarLeft: string;\r\n AcuityNearRight: string;\r\n AcuityNearLeft: string;\r\n MuscularNear: string;\r\n MuscularFar: string;\r\n ColorVision: string;\r\n LPhor: string;\r\n VPhor: string;\r\n Hyperopia: string;\r\n Glasses: boolean;\r\n UnderDoctorsCare: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n ReturnDate: Date;\r\n}\r\n\r\nexport class DentalScreening {\r\n Id: number;\r\n Date: Date;\r\n Fluoride: boolean;\r\n Sealant: boolean;\r\n UnderDoctorsCare: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n ReturnDate: Date;\r\n}\r\n\r\nexport class SpinalScreening {\r\n Id: number;\r\n Date: Date;\r\n PassFail: string;\r\n ContinuedObservation: string;\r\n FollowUpDate: Date;\r\n UnderDoctorsCare: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n ReturnDate: Date;\r\n}\r\n\r\nexport class PhysicalExamScreening {\r\n Id: number;\r\n Date: Date;\r\n Height: string;\r\n HeightPercentile: number;\r\n Weight: number;\r\n WeightPercentile: number;\r\n BMI: number;\r\n BMIPercentile: number;\r\n BloodPressure: string;\r\n ExamComplete: boolean;\r\n Referral: boolean;\r\n ReferralReturnedToSchool: boolean;\r\n ReturnDate: Date;\r\n DoctorDidExam: boolean;\r\n ClinicDidExam: boolean;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { CodeLegend, DentalScreening, Doctors, HealthVisitLog, HearingScreening, Immunizations, Insurance, Medications, PhysicalExamScreening, Screening, SpinalScreening, VisionScreening } from './health.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HealthService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n // Get Immunizations\r\n getImmunizations(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetImmunizations' + queryString);\r\n }\r\n\r\n // Get Medication\r\n getMedication(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetMedication' + queryString);\r\n }\r\n\r\n // Get HealthVisitLog\r\n getHealthVisitLog(studentId: number, yearId: number, siteYearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId + '&siteYearId=' + siteYearId;\r\n return this.http.get(System.apiURL.Student + 'GetHealthVisitLog' + queryString);\r\n }\r\n\r\n // Get Doctors\r\n getDoctors(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'getDoctors' + queryString);\r\n }\r\n\r\n // Get Insurance\r\n getInsurance(studentId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetInsurance' + queryString);\r\n }\r\n\r\n // Get Screenings\r\n getScreenings(studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetScreenings' + queryString);\r\n }\r\n\r\n // Get ScreeningCodeLegend\r\n getScreeningCodeLegend(studentId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId;\r\n return this.http.get(System.apiURL.Student + 'GetScreeningCodeLegend' + queryString);\r\n }\r\n\r\n getStudentHealthPortals(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetStudentHealthPortals' + queryString);\r\n }\r\n\r\n getHearingScreenings(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetHearingScreenings' + queryString);\r\n }\r\n\r\n getVisionScreenings(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetVisionScreenings' + queryString);\r\n }\r\n\r\n getDentalScreenings(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetDentalScreenings' + queryString);\r\n }\r\n\r\n getSpinalScreenings(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetSpinalScreenings' + queryString);\r\n }\r\n\r\n getPhysicalExamScreenings(studentId: number, yearId: number): Observable {\r\n const queryString = '?studentId=' + studentId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetPhysicalExamScreenings' + queryString);\r\n }\r\n}","

Attachments

\r\n\r\n
\r\n \r\n \r\n Description\r\n \r\n \r\n {{attachment.DocumentDescription}}\r\n \r\n \r\n \r\n \r\n File Name\r\n {{attachment.DocumentName}}\r\n \r\n \r\n Attached\r\n {{attachment.CreatedDate| date: 'MM/dd/yy'}}\r\n \r\n \r\n Attached By\r\n {{attachment.AttachedBy}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { System } from '../../../shared-components/System';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { StudentAttachment } from '../../../shared-modules/student-attachment/student-attachment.model';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { IepService } from '../iep.service';\r\nimport { SpedDocumentAttachment } from '../iep.model';\r\n\r\n@Component({\r\n selector: 'app-iep-documents',\r\n templateUrl: './iep-documents.component.html',\r\n styles: []\r\n})\r\nexport class IepDocumentsComponent implements OnInit {\r\n\r\n docAttachments: SpedDocumentAttachment[] = [];\r\n columnsToDisplay: string[] = ['DocumentDescription', 'DocumentName', 'CreatedDate', 'AttachedBy'];\r\n\r\n constructor(\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private iepService: IepService,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public document: any\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.getDocumentAttachments();\r\n }\r\n\r\n getDocumentAttachments() {\r\n this.iepService.getSpedDocumentAttachments(this.studentService.selectedStudent.Id, this.document.SpedCollectionToStudentId, this.userService.userId).subscribe(attachments => {\r\n this.docAttachments = attachments;\r\n });\r\n }\r\n\r\n viewAttachmentClick(attachmentId) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: attachmentId,\r\n DocumentName: 'IEPAttachedDocument.pdf',\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: 'Documents',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n\r\n getAriaRow(row: SpedDocumentAttachment): string {\r\n const colList: string[] = ['DocumentDescription', 'DocumentName', 'CreatedDate', 'AttachedBy'];\r\n const dataList: string[] = [row.DocumentDescription, row.DocumentName, new Date(row.CreatedDate).toDateString(), row.AttachedBy];\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n}\r\n","\r\n \r\n
\r\n
\r\n No IEP data exists for student.\r\n
\r\n
0\">\r\n \r\n \r\n \r\n \r\n {{collection.CollectionName | translate}}\r\n \r\n \r\n \r\n \r\n \r\n\t\t\t\t\t\t 0\" aria-label=\"Expand row for more details\">\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n View\r\n \r\n \r\n \r\n {{field | translate}}\r\n \r\n \r\n {{detail.FieldValue[field]}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{detail.Attachment}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n style=\"overflow: hidden\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription, Observable, forkJoin } from 'rxjs';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentAttachment } from '../../shared-modules/student-attachment/student-attachment.model';\r\nimport { IepService } from './iep.service';\r\nimport { SpedCollection, DocumentFieldData, SpedDocument, SpedDocumentAttachment } from './iep.model';\r\nimport { IepDocumentsComponent } from './iep-documents/iep-documents.component';\r\n\r\n// -------Angular Material------------------------------------\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { ViewDocumentComponent } from '../../sped360/student-document-home/sped-student-document-cards/sped-student-collection-common-card/view-document/view-document.component';\r\nimport { IndeterminateProgressBarComponent } from '../../sped360/forms-within-documents/modals/indeterminate-progress-bar/indeterminate-progress-bar.component';\r\n\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-iep',\r\n templateUrl: './iep.component.html',\r\n animations: [detailExpand],\r\n styles: []\r\n})\r\nexport class IepComponent implements OnInit, OnDestroy {\r\n\r\n // ------------------------------------------------------------\r\n selectedStudent: Student;\r\n selectedStudentSubscription: Subscription;\r\n spedCollection: SpedCollection[];\r\n spedDocuments: DocumentFieldData[];\r\n docAttachments: SpedDocumentAttachment[] = [];\r\n iepData: SpedCollection[] = [];\r\n rowExpanded: boolean[];\r\n iepDocumentsDialogRef: MatDialogRef;\r\n isBusy: boolean;\r\n SDMIntegration: boolean;\r\n V10: boolean;\r\n fileAsBlob: Blob;\r\n\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay: string[] = ['CollectionName', 'Expand'];\r\n columnsToDisplayDetailRow: string[] = [];\r\n\r\n constructor(\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private iepService: IepService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService,\r\n private sanitizer: DomSanitizer\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.SDMIntegration = this.loginService.LoginSettings.SDMIntegration;\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.getSpedCollection();\r\n }\r\n\r\n getSpedCollection() {\r\n this.isBusy = true;\r\n this.spedCollection = [];\r\n const serverCalls: Observable = forkJoin(\r\n this.iepService.getSpedCollection(this.selectedStudent.Id, this.yearService.student360Year.Id, this.userService.userId),\r\n this.iepService.getSpedDocuments(this.selectedStudent.Id, 0, this.userService.userId),\r\n this.iepService.getSpedDocumentAttachments(this.selectedStudent.Id, 0, this.userService.userId)\r\n );\r\n\r\n serverCalls.subscribe(results => {\r\n let docFields: DocumentFieldData[] = [];\r\n let docAttachments: SpedDocumentAttachment[] = [];\r\n\r\n if (results[0] != null) {\r\n this.spedCollection = results[0];\r\n }\r\n if (results[1] != null) {\r\n docFields = results[1];\r\n }\r\n if (results[2] != null) {\r\n docAttachments = results[2];\r\n }\r\n\r\n const documents: SpedDocument[] = [];\r\n docFields.forEach(element => {\r\n if (documents.filter(function (doc) { return doc.SpedCollectionToStudentId == element.SpedCollectionToStudentId; }).length == 0) {\r\n const objDoc: SpedDocument = {\r\n StudentID: element.StudentID,\r\n SpedCollectionId: element.SpedCollectionId,\r\n SpedCollectionToStudentId: element.SpedCollectionToStudentId,\r\n CollectionStatusId: element.CollectionStatusId,\r\n TemplateVersionId: element.TemplateVersionId,\r\n Attachment: element.Attachment,\r\n ShowAttachmentColumn: element.ShowAttachmentColumn,\r\n FieldData: [],\r\n FieldValue: {}\r\n };\r\n\r\n objDoc.FieldData = Object.assign(docFields.filter(function (field) { return field.SpedCollectionToStudentId == element.SpedCollectionToStudentId; }));\r\n const dictionaryData: { [key: string]: string } = {};\r\n if (objDoc.FieldData != undefined) {\r\n objDoc.FieldData.forEach(data => {\r\n dictionaryData[data.FieldDescription] = data.FieldValue;\r\n });\r\n objDoc.FieldValue = dictionaryData;\r\n }\r\n documents.push(objDoc);\r\n }\r\n\r\n for (let i = 0; i < this.spedCollection.length; i++) {\r\n this.spedCollection[i].Documents = [];\r\n this.spedCollection[i].Fields = [];\r\n if (this.spedCollection[i].CollectionName == 'Imported Documents') {\r\n this.spedCollection[i].Documents = docAttachments;\r\n this.spedCollection[i].Documents.forEach(elem => {\r\n elem.FieldValue = {\r\n Description: elem.DocumentDescription,\r\n Filename: elem.DocumentName,\r\n Created: elem.CreatedDate,\r\n User: elem.AttachedBy\r\n };\r\n });\r\n this.spedCollection[i].Fields = ['Description', 'Filename', 'Created', 'User'];\r\n }\r\n else {\r\n for (let j = 0; j < documents.length; j++) {\r\n if (this.spedCollection[i].Id == documents[j].SpedCollectionId) {\r\n this.spedCollection[i].Documents.push(documents[j]);\r\n }\r\n }\r\n\r\n if (this.spedCollection[i].Documents.length > 0) {\r\n this.spedCollection[i].Documents[0].FieldData.sort((a, b) => {\r\n if (a.ShowOnSummaryGrid < b.ShowOnSummaryGrid) {\r\n return -1;\r\n }\r\n else if (b.ShowOnSummaryGrid < a.ShowOnSummaryGrid) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n\r\n for (let k = 0; k < this.spedCollection[i].Documents[0].FieldData.length; k++) {\r\n if (this.spedCollection[i].Documents[0].FieldData[k].FieldDescription && this.spedCollection[i].Fields.indexOf(this.spedCollection[i].Documents[0].FieldData[k].FieldDescription) == -1) {\r\n this.spedCollection[i].Fields.push(this.spedCollection[i].Documents[0].FieldData[k].FieldDescription);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.iepData = [];\r\n this.spedCollection.forEach(element => {\r\n if (element.Documents != undefined && element.Documents.length > 0) {\r\n this.iepData.push(element);\r\n }\r\n });\r\n this.angularMatData = new TylerMatTableDataSource(this.iepData);\r\n this.expandAll(true);\r\n this.isBusy = false;\r\n });\r\n }\r\n\r\n getColumnsToDisplay(collectionRow: SpedCollection) {\r\n this.columnsToDisplayDetailRow = ['View'];\r\n if (collectionRow != null || collectionRow != undefined) {\r\n if (collectionRow.Fields != undefined) {\r\n if (collectionRow.Fields.length > 0) {\r\n collectionRow.Fields.forEach(field => {\r\n if (field != undefined && field != '' && this.columnsToDisplayDetailRow.indexOf(field) == -1) {\r\n this.columnsToDisplayDetailRow.push(field);\r\n }\r\n });\r\n }\r\n if (collectionRow.CollectionName != 'Imported Documents') {\r\n this.columnsToDisplayDetailRow.push('Attachment');\r\n }\r\n }\r\n }\r\n return this.columnsToDisplayDetailRow;\r\n }\r\n\r\n columnsToDisplayCount(objFields: string[]) {\r\n this.columnsToDisplayDetailRow = ['View'];\r\n if (objFields.length > 0) {\r\n objFields.forEach(field => {\r\n if (field != undefined && field != '' && this.columnsToDisplayDetailRow.indexOf(field) == -1) {\r\n this.columnsToDisplayDetailRow.push(field);\r\n }\r\n });\r\n }\r\n this.columnsToDisplayDetailRow.push('Attachment');\r\n return this.columnsToDisplayDetailRow.length;\r\n }\r\n\r\n viewDocumentAttachmentDialog(document) {\r\n this.iepDocumentsDialogRef = this.dialog.open(IepDocumentsComponent, {\r\n data: document,\r\n disableClose: true,\r\n minWidth: '750px'\r\n });\r\n }\r\n\r\n viewDocumentClick(document, collectionName) {\r\n if (document.SpedDocumentId != null && document.SpedDocumentId != undefined) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: document.SpedDocumentId,\r\n DocumentName: 'IEPAttachedDocument.pdf',\r\n DocumentBase64: '',\r\n DocumentMimeType: '',\r\n DocumentModuleName: 'Documents',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n }\r\n else {\r\n const viewOverlayDialogPB = this.dialog.open(IndeterminateProgressBarComponent, {\r\n disableClose: true,\r\n });\r\n viewOverlayDialogPB.componentInstance.spEdcollectionId = document.SpedCollectionId;\r\n viewOverlayDialogPB.componentInstance.studentId = this.selectedStudent.Id;\r\n viewOverlayDialogPB.componentInstance.studentCollectionId = document.SpedCollectionToStudentId;\r\n viewOverlayDialogPB.componentInstance.spEdCollectionToIEPStatusId = document.CollectionStatusId;\r\n viewOverlayDialogPB.componentInstance.templateVersionId = document.TemplateVersionId;\r\n viewOverlayDialogPB.componentInstance.siteId = this.userService.currentUser.LoginSchoolId;\r\n viewOverlayDialogPB.componentInstance.yearId = this.yearService.student360Year.Id;\r\n viewOverlayDialogPB.componentInstance.callFromHomePage = false;\r\n viewOverlayDialogPB.componentInstance.studentTemplateVersionIds = '';\r\n viewOverlayDialogPB.componentInstance.studentHeader = false;\r\n viewOverlayDialogPB.componentInstance.printType = 2;\r\n\r\n viewOverlayDialogPB.afterClosed().subscribe(result => {\r\n if (result == 'print') {\r\n this.fileAsBlob = null;\r\n this.fileAsBlob = viewOverlayDialogPB.componentInstance.fileAsBlobString;\r\n this.openPrintView();\r\n } else {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n openPrintView() {\r\n const viewOverlayDialog = this.dialog.open(ViewDocumentComponent, {\r\n disableClose: true,\r\n height: '100%',\r\n width: '100%',\r\n maxWidth: 'inherit'\r\n });\r\n viewOverlayDialog.componentInstance.formSrc = this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(this.fileAsBlob));\r\n viewOverlayDialog.afterClosed().subscribe(() => {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n });\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getAriaRow(row: SpedCollection): string {\r\n const colList: string[] = ['CollectionName'];\r\n const dataList: string[] = [row.CollectionName];\r\n return AriaDirective.concatAriaStrings(colList, dataList) + (row.Documents.length > 0 ? ' Expand for more details' : ' No additional details');\r\n }\r\n\r\n getAriaDetailRow(fields: any, row: any): string {\r\n const colList: string[] = this.getColumnsToDisplay(fields);\r\n const dataList: string[] = [];\r\n for (let index = 0; index < colList.length; index++) {\r\n if (row.FieldValue[colList[index]] != undefined) {\r\n dataList.push(row.FieldValue[colList[index]]);\r\n }\r\n else {\r\n dataList.push('');\r\n }\r\n }\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n to_trustedHtml(html_code) {\r\n if (html_code != null) {\r\n html_code = JSON.parse(JSON.stringify(html_code)).replace(new RegExp('\\n', 'g'), '
');\r\n html_code = html_code.replace(new RegExp('
', 'g'), ' ');\r\n }\r\n return html_code;\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { SpedCollection, DocumentFieldData, SpedDocumentAttachment } from './iep.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IepService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n getSpedCollection(studentId: number, yearId: number, userId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetSpedCollection' + queryString);\r\n }\r\n\r\n getSpedDocuments(studentId: number, collectionId: number, userId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&collectionId=' + collectionId +\r\n '&userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetSpedDocuments' + queryString);\r\n }\r\n\r\n getSpedDocumentAttachments(studentId: number, spedCollectionToStudentId: number, userId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&userId=' + userId;\r\n return this.http.get(System.apiURL.Student + 'GetSpedDocumentAttachments' + queryString);\r\n }\r\n\r\n viewCollectionDocument(spedCollectionId: number, studentId: number, spedCollectionToStudentId: number, collectionStatusId: number, templateVersionId: number, userId: number, siteId: number, yearId: number): Observable {\r\n let queryString = '';\r\n queryString += '?spedCollectionId=' + spedCollectionId +\r\n '&studentId=' + studentId +\r\n '&spedCollectionToStudentId=' + spedCollectionToStudentId +\r\n '&collectionStatusId=' + collectionStatusId +\r\n '&templateVersionId=' + templateVersionId +\r\n '&userId=' + userId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'ViewCollectionDocument' + queryString);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'lunchPinFilter'\r\n})\r\nexport class LunchPinFilterPipe implements PipeTransform {\r\n\r\n transform(value: any, args?: any): any {\r\n return value.split('');\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MealService } from './meal-service.model';\r\n\r\n@Pipe({\r\n name: 'mealServiceFilter'\r\n})\r\nexport class MealServiceFilterPipe implements PipeTransform {\r\n\r\n transform(meal: MealService[], fromDate?: Date, toDate?: Date): any {\r\n return meal.filter(\r\n o => ((fromDate == null || new Date(o.Date) >= fromDate)\r\n && (toDate == null || new Date(o.Date) <= toDate))\r\n );\r\n }\r\n}\r\n","export class MealService {\r\n Id: number;\r\n Balance: string;\r\n BreakFastALaCarte: string;\r\n BreakFastMeal: string;\r\n Date: Date;\r\n Deposits: string;\r\n LunchALaCarte: string;\r\n LunchMeal: string;\r\n Net: string;\r\n OtherALaCarte: string;\r\n OtherMeal: string;\r\n SnackALaCarte: string;\r\n SnackMeal: string;\r\n TotalPurchases: string;\r\n MealServiceDetailItems: MealServiceDetailItems[] = [];\r\n FromDate: Date;\r\n ToDate: Date;\r\n}\r\n\r\nexport class MealServiceDetailItems {\r\n $id: number;\r\n Charge: string;\r\n Deposit: string;\r\n Item: string;\r\n ItemType: string;\r\n MealGroup: string;\r\n Processed: Date;\r\n TransactionType: string;\r\n fltAmount: number;\r\n}\r\n\r\nexport class MealServiceFilter {\r\n FromDate: Date;\r\n ToDate: Date;\r\n}\r\n\r\nexport class LunchMealChoice {\r\n Id: number;\r\n Date: Date;\r\n Choice: string;\r\n MonthlyLunchMenuChoices: MonthlyLunchMenuChoices[] = [];\r\n}\r\n\r\nexport class MonthlyLunchMenuChoices {\r\n Id: number;\r\n Choice: string;\r\n ChoiceDescription: string\r\n}","

\r\n Lunch Menu - {{transactionDate|date:'MM/dd/yy'}}\r\n

\r\n\r\n \r\n \r\n \r\n \r\n \r\n
{{choice.Choice}}{{choice.ChoiceDescription}}
\r\n
\r\n\r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MonthlyLunchMenuChoices } from '../meal-service.model';\r\n\r\n@Component({\r\n selector: 'app-lunch-menu-choices',\r\n templateUrl: './lunch-menu-choices.component.html',\r\n styles: []\r\n})\r\nexport class LunchMenuChoicesComponent implements OnInit {\r\n\r\n isBusy = false;\r\n selectedChoice: MonthlyLunchMenuChoices[] = [];\r\n transactionDate: Date;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.transactionDate = this.data.Date;\r\n this.selectedChoice = this.data.MonthlyLunchMenuChoices;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n}\r\n","
\r\n No Meal Service data exists for student.\r\n
\r\n
0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n 0 ? 'expanded' : 'collapsed'\"\r\n (@detailExpand.start)=\"$event.toState == 'expanded' ? angularMatData.setVisible(row, true) : null\"\r\n (@detailExpand.done)=\"$event.toState == 'collapsed' ? angularMatData.setVisible(row, false) : null\"\r\n style=\"overflow: hidden ;\" [ngStyle]=\"{'display': checkExpanded(row) ? '':'none'}\" class=\"mat-detail-row\">\r\n \r\n
\r\n More\r\n \r\n \r\n \r\n \r\n \r\n Date\r\n \r\n {{MS.Date|date:'EEE'}} {{MS.Date|date:'MM/dd/yy'}}\r\n \r\n Meal\r\n \r\n \r\n \r\n {{MS.BreakFastMeal}}\r\n \r\n A La Carte\r\n \r\n \r\n \r\n {{MS.BreakFastALaCarte}}\r\n \r\n Meal\r\n \r\n \r\n {{MS.LunchMeal}}\r\n \r\n A La Carte\r\n \r\n \r\n \r\n {{MS.LunchALaCarte}}\r\n \r\n Meal\r\n \r\n \r\n {{MS.SnackMeal}}\r\n \r\n A La Carte\r\n \r\n \r\n \r\n {{MS.SnackALaCarte}}\r\n \r\n Meal\r\n \r\n \r\n {{MS.SnackMeal}}\r\n \r\n A La Carte\r\n \r\n \r\n \r\n {{MS.SnackALaCarte}}\r\n \r\n Total Charges\r\n \r\n \r\n {{MS.TotalPurchases}}\r\n Deposits\r\n \r\n {{MS.Deposits}}Net\r\n \r\n {{MS.Net}}{{MS.Net > 0 ? 'Deposit' :\r\n (MS.Net < 0 ? 'Charge' : '' ) | translate}}\r\n Balance\r\n \r\n \r\n \r\n {{ (MS.Balance > 0 ? MS.Balance : MS.Balance*-1) | number:'1.2-2'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Overdrawn\r\n \r\n
\r\n \r\n \r\n Meal\r\n Group\r\n \r\n {{detail.MealGroup}}\r\n \r\n \r\n Item Type\r\n \r\n {{detail.ItemType}}\r\n \r\n \r\n Item\r\n \r\n \r\n {{detail.Item}}\r\n\r\n {{detail.Item}}\r\n \r\n \r\n \r\n Transaction\r\n Type\r\n {{detail.TransactionType}}\r\n \r\n \r\n \r\n Charge\r\n \r\n \r\n -\r\n \r\n {{detail.Charge}}\r\n \r\n \r\n \r\n \r\n Deposit\r\n \r\n \r\n -\r\n \r\n {{detail.Deposit}}  \r\n \r\n \r\n \r\n \r\n Processed\r\n \r\n \r\n {{detail.Processed|date:'MM/dd/yy h:mm a'}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n More\r\n Date\r\n \r\n Breakfast Lunch Snack Other
\r\n
","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MealService, LunchMealChoice } from '../meal-service.model';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { detailExpand } from '../../../shared-components/angular-material/mat-animations';\r\nimport { LunchMenuChoicesComponent } from '../lunch-menu-choices/lunch-menu-choices.component';\r\nimport * as moment from 'moment';\r\n\r\n@Component({\r\n selector: 'charges-and-deposits',\r\n templateUrl: './charges-and-deposits.component.html',\r\n animations: [detailExpand],\r\n providers: [DatePipe]\r\n})\r\nexport class ChargesAndDepositsComponent implements OnInit {\r\n\r\n @Input() mealService: MealService[];\r\n @Input() lunchMealChoice: LunchMealChoice[];\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay: string[] = [];\r\n columnSpanToDisplay: string[] = [];\r\n @ViewChild(MatSort) sort: MatSort;\r\n LoginSettings: LoginSettings;\r\n lunchMealChoicesDialogRef: MatDialogRef;\r\n columnsToDisplayDetailRow: string[] = ['MealGroup', 'ItemType', 'Item', 'TransactionType', 'Charge', 'Deposit', 'Processed'];\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private datePipe: DatePipe,\r\n private dialog: MatDialog,\r\n ) {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.angularMatData = new TylerMatTableDataSource(this.mealService);\r\n this.columnsToDisplay = ['More', 'Date', 'BreakFastMeal', 'BreakFastALaCarte', 'LunchMeal', 'LunchALaCarte', 'SnackMeal', 'SnackALaCarte', 'TotalPurchases', 'Deposits', 'Net', 'NetCharge', 'Balance', 'Overdrawn'];\r\n this.columnSpanToDisplay = ['More1', 'Date1', 'header-row-breakfast', 'header-row-lunch', 'header-row-snack'];\r\n }\r\n\r\n ngOnInit() {\r\n this.angularMatData.data = this.mealService;\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n\r\n this.angularMatData.sortingDataAccessor = (item: MealService, property: string) => {\r\n if (property == 'Date1') {\r\n return moment(item.Date).unix();\r\n }\r\n else if (item[property]) {\r\n return this.angularMatData.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n }\r\n\r\n refreshGrid(mealService: MealService[], lunchMealChoice: LunchMealChoice[]) {\r\n this.angularMatData.data = mealService;\r\n this.lunchMealChoice = lunchMealChoice;\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n getMealServiceAriaRow(row: MealService): string {\r\n let colList: string[] = [];\r\n let dataList: string[] = [];\r\n\r\n colList = ['Date', 'BreakFastMeal', 'BreakFastALaCarte', 'LunchMeal', 'LunchALaCarte',\r\n 'SnackMeal', 'SnackALaCarte', 'TotalPurchases', 'Deposits', 'Net', 'Balance'];\r\n\r\n dataList = [this.datePipe.transform(row.Date, 'MM/dd/yy'), row.BreakFastMeal, row.BreakFastALaCarte, row.LunchMeal, row.LunchALaCarte,\r\n row.SnackMeal, row.SnackALaCarte, row.TotalPurchases, row.Deposits, row.Net, row.Balance];\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n getLunchMealChoices(dateChoice: Date) {\r\n const selectedLunchMealChoice: LunchMealChoice = this.lunchMealChoice.filter(function (el) { return el.Date == dateChoice; })[0];\r\n this.lunchMealChoicesDialogRef = this.dialog.open(LunchMenuChoicesComponent, {\r\n disableClose: true,\r\n panelClass: 'tyl-mat-dialog',\r\n height: '300px',\r\n width: '400px',\r\n data: selectedLunchMealChoice\r\n });\r\n }\r\n\r\n}\r\n","
\r\n No Monthly Lunch Menu data exists for this month\r\n
\r\n
\r\n 0\"\r\n aria-label=\"Monthly Lunch Menu Data Table\" matSort matSortDisableClear matSortActive=\"Date\" matSortDirection=\"desc\"\r\n id=\"LMDataTable\" style=\"min-width: 1300px;\">\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n {{LM.Date|date:'EEE'}} {{LM.Date|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n {{'Choice' | translate}}\r\n {{getChoiceNumber(column.Choice)}}\r\n \r\n \r\n \r\n {{data.ChoiceDescription}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
","import { Component, OnInit, ViewChild, Input } from '@angular/core';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { LunchMealChoice, MonthlyLunchMenuChoices } from '../meal-service.model';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { DatePipe } from '@angular/common';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\n@Component({\r\n selector: 'monthly-lunch-menu',\r\n templateUrl: './monthly-lunch-menu.component.html'\r\n})\r\nexport class MonthlyLunchMenuComponent implements OnInit {\r\n\r\n @Input() lunchMealChoice: LunchMealChoice[];\r\n @Input() currentDate: Date;\r\n angularMatDataMonthlyLunchMenu = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n\r\n selectedChoice: MonthlyLunchMenuChoices[] = [];\r\n studentMonthlyLunchMenuChoice: LunchMealChoice[] = [];\r\n columnsToDisplayLunchMenu = [];\r\n showMontlyLunchMenuGrid: boolean;\r\n LoginSettings: LoginSettings;\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private datePipe: DatePipe,\r\n private loginService: LoginService\r\n ) {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n if (this.lunchMealChoice) {\r\n this.angularMatDataMonthlyLunchMenu = new TylerMatTableDataSource(this.lunchMealChoice);\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (this.lunchMealChoice != null && this.lunchMealChoice.length > 0) {\r\n this.angularMatDataMonthlyLunchMenu.data = this.lunchMealChoice;\r\n this.getMonthlyLunchMenuHeader();\r\n this.getMonthlyLunchMenuData();\r\n }\r\n setTimeout(() => {\r\n this.angularMatDataMonthlyLunchMenu.sort = this.sort;\r\n }, 0);\r\n }\r\n\r\n refreshGrid(lunchMealChoice: LunchMealChoice[], currentDate: Date) {\r\n if (lunchMealChoice.length > 0) {\r\n this.currentDate = currentDate;\r\n this.lunchMealChoice = lunchMealChoice;\r\n this.getMonthlyLunchMenuHeader();\r\n this.getMonthlyLunchMenuData();\r\n setTimeout(() => {\r\n this.angularMatDataMonthlyLunchMenu.sort = this.sort;\r\n }, 0);\r\n }\r\n }\r\n\r\n getMonthlyLunchMenuHeader() {\r\n const selectedLunchMealChoice: LunchMealChoice = this.lunchMealChoice.filter(function (o) { return o.Id == 1; })[0];\r\n this.selectedChoice = selectedLunchMealChoice.MonthlyLunchMenuChoices;\r\n this.columnsToDisplayLunchMenu = ['Date'];\r\n if (this.selectedChoice.length > 0) {\r\n this.selectedChoice.forEach(selectedChoice => {\r\n this.columnsToDisplayLunchMenu.push(selectedChoice.Choice);\r\n });\r\n }\r\n }\r\n\r\n getMonthlyLunchMenuData() {\r\n const startDate: Date = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), 1);\r\n const endDate: Date = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() + 1, 0);\r\n this.studentMonthlyLunchMenuChoice = [];\r\n\r\n this.lunchMealChoice.forEach(obj => {\r\n if (new Date(obj.Date) >= new Date(startDate) && new Date(obj.Date) <= new Date(endDate)) {\r\n this.studentMonthlyLunchMenuChoice.push(obj);\r\n }\r\n });\r\n\r\n this.showMontlyLunchMenuGrid = false;\r\n this.studentMonthlyLunchMenuChoice.forEach(obj => {\r\n if (obj != null && obj.MonthlyLunchMenuChoices != null) {\r\n for (let j = 0; j < obj.MonthlyLunchMenuChoices.length; j++) {\r\n if (obj.MonthlyLunchMenuChoices[j] != null && obj.MonthlyLunchMenuChoices[j].ChoiceDescription != null) {\r\n this.showMontlyLunchMenuGrid = true;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.angularMatDataMonthlyLunchMenu.data = this.studentMonthlyLunchMenuChoice;\r\n }\r\n\r\n getMonthlyLunchMenuAriaRow(row: LunchMealChoice): string {\r\n const colList: string[] = ['Day', 'Date'];\r\n if (this.selectedChoice.length > 0) {\r\n this.selectedChoice.forEach(selectedChoice => {\r\n colList.push(selectedChoice.Choice);\r\n });\r\n }\r\n\r\n const dataList: string[] = [this.datePipe.transform(row.Date, 'EEE'), this.datePipe.transform(row.Date, 'MM/dd/yy')];\r\n if (row.MonthlyLunchMenuChoices.length > 0) {\r\n row.MonthlyLunchMenuChoices.forEach(lunchMenuChoices => {\r\n colList.push(lunchMenuChoices.ChoiceDescription);\r\n });\r\n }\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n getMonthlyLunchMenuRecords() {\r\n // dynamic header binding\r\n this.getMonthlyLunchMenuHeader();\r\n // dynamic Data binding\r\n this.getMonthlyLunchMenuData();\r\n }\r\n\r\n getChoiceNumber(choice: any) {\r\n if (choice) {\r\n return choice.replace('Choice ', '');\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, EventEmitter, Input, ViewChild, Output, TemplateRef, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { MealService, MealServiceFilter } from '../meal-service.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-meal-service-filter',\r\n templateUrl: './meal-service-filter.component.html',\r\n styles: []\r\n})\r\nexport class MealServiceFilterComponent implements OnInit, OnDestroy {\r\n\r\n @Input() filterData: MealService;\r\n @Input() showFilter: EventEmitter;\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n @Input('clearFilter') clearFilterEvent: EventEmitter;\r\n @Output() filterChange = new EventEmitter();\r\n @Output() closeFilterEvent = new EventEmitter();\r\n @ViewChild('menuTemplate') menuTemplate: TemplateRef;\r\n previousFilterData = new MealServiceFilter();\r\n clearFilterSubscription: Subscription;\r\n\r\n constructor(\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.clearFilterSubscription = this.clearFilterEvent.subscribe(() => {\r\n const keys = Object.keys(this.filterData);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i];\r\n this.filterData[key] = undefined;\r\n }\r\n this.previousFilterData = JSON.parse(JSON.stringify(this.filterData));\r\n this.previousFilterData.FromDate = null;\r\n this.previousFilterData.ToDate = null;\r\n this.filterChange.emit();\r\n });\r\n Object.assign(this.previousFilterData, this.filterData);\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n // Methods\r\n clearFilter() {\r\n this.filterData['FromDate'] = null;\r\n this.filterData['ToDate'] = null;\r\n this.filterChange.emit();\r\n }\r\n\r\n closeFilter() {\r\n this.closeFilterEvent.emit();\r\n }\r\n}\r\n","
\r\n Filter\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
","
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Rollover Balance {{totalRollOver | currency}}
Deposits {{totalDeposit | currency}}
Charges {{totalPurchases | currency}}\r\n
Balance\r\n  {{(totalBalance < 0 ? totalBalance*-1 : totalBalance) | currency }}\r\n  Overdrawn
\r\n
\r\n
\r\n
\r\n Meal PIN  \r\n \r\n \r\n *\r\n \r\n \r\n {{lunchPin}} \r\n \r\n \r\n
\r\n 1\" [startingIndex]=\"selectionIndex\" [tabNames]=\"tabNames\"\r\n style=\"margin-bottom: 10px\" (selectionsChangeIndex)=\"selectionChange($event)\">\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

{{selectedMonth | translate}}  {{selectedYear}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
0\">\r\n \r\n
\r\n
0\">\r\n \r\n \r\n
\r\n
\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, ElementRef, EventEmitter, OnDestroy, OnInit, ViewChild, ChangeDetectorRef } from '@angular/core';\r\nimport { DatePipe, Location } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n// ---------Shared--------------------------------------------\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Student360Service } from '../student360.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginSettings } from '../../shared-modules/login/loginSetting.model';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { MealServiceService } from './meal-service.service';\r\nimport { MealService, MealServiceFilter, LunchMealChoice, MonthlyLunchMenuChoices } from './meal-service.model';\r\nimport { MealServiceFilterPipe } from './meal-service-filter.pipe';\r\nimport { LunchMenuChoicesComponent } from './lunch-menu-choices/lunch-menu-choices.component';\r\n// -------Angular Material------------------------------------\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { ChargesAndDepositsComponent } from './charges-and-deposits/charges-and-deposits.component';\r\nimport { MonthlyLunchMenuComponent } from './monthly-lunch-menu/monthly-lunch-menu.component';\r\nimport { OnlinePaymentConfiguration } from '../online-payment/models/online-payment-config.model';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { Router, NavigationExtras } from '@angular/router';\r\nimport { Portal } from '../../shared-components/portal.model';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-meal-service',\r\n templateUrl: './meal-service.component.html',\r\n animations: [detailExpand],\r\n providers: [DatePipe]\r\n})\r\nexport class MealServiceComponent implements OnInit, OnDestroy {\r\n\r\n // -----------Grid functionality---------------------------------\r\n selectionIndex = 0;\r\n\r\n // ------------Element references--------------------------------\r\n @ViewChild('tabContent', { read: ElementRef }) tabContentRef: ElementRef;\r\n // ------------Selection/Flags-----------------------------------\r\n userType: number;\r\n isBusy = false;\r\n currentUrl: string;\r\n showPassword = false;\r\n // ------------------------------------------------------------\r\n LoginSettings: LoginSettings;\r\n selectedStudent: Student;\r\n selectedStudentSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n studentEnrollment = this.studentService.studentEnrollment;\r\n currentDate: Date = new Date();\r\n selectedStudentId: number;\r\n parentPortalSubscription: Subscription;\r\n staffAssignedPortalsSubscription: Subscription;\r\n // ----------Angular Material------------------------------------\r\n clearFilterEvent = new EventEmitter();\r\n classFilter = new LunchMealChoice();\r\n pusherFilter: LunchMealChoice;\r\n @ViewChild(ChargesAndDepositsComponent) byViewChargesRef: ChargesAndDepositsComponent;\r\n @ViewChild(MonthlyLunchMenuComponent) byViewMonthlyRef: MonthlyLunchMenuComponent;\r\n\r\n // ------------Meal Service Data---------------------------\r\n tabNames: string[] = [];\r\n mealService: MealService[];\r\n lunchMealChoice: LunchMealChoice[];\r\n selectedChoice: MonthlyLunchMenuChoices[] = [];\r\n studentMonthlyLunchMenuChoice: LunchMealChoice[] = [];\r\n myClasses: LunchMealChoice[];\r\n totalRollOver = 0.00;\r\n totalDeposit = 0.00;\r\n totalPurchases = 0.00;\r\n totalBalance = 0.00;\r\n parentPortal: Portal[];\r\n lunchPin = '';\r\n // ------------Selection/Flags-----------------------------------\r\n selected = '0';\r\n showMontlyLunchMenuGrid: boolean;\r\n lunchMealChoicesDialogRef: MatDialogRef;\r\n\r\n // ------------Filter-----------------------------------\r\n showFilterEvent = new EventEmitter();\r\n showFilter = false;\r\n mealServiceFilter = new MealService();\r\n filterFromDate: Date;\r\n filterToDate: Date;\r\n filtered = false;\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n parentPortalShowOnlinePayment: boolean;\r\n student360Year: Year;\r\n // ----------------- Monthly Lunch Menu -------------------\r\n selectedMonth: string;\r\n selectedYear: number;\r\n monthLabels: string[] = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\n DisabledNxtBtn: boolean;\r\n DisabledPrvBtn: boolean;\r\n loadStudentInfoCall = false\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private mealServiceService: MealServiceService,\r\n private parentPortalService: Student360Service,\r\n private mealServiceFilterPipe: MealServiceFilterPipe,\r\n private location: Location,\r\n private router: Router,\r\n private classroom360Service: Classroom360Service,\r\n public changeDetector: ChangeDetectorRef,\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n if (studentId > 0) {\r\n this.loadStudentInfoCall = true;\r\n this.loadStudentInfo(studentId);\r\n }\r\n });\r\n if (this.userService.userType == 1) {\r\n this.staffAssignedPortalsSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(data => {\r\n this.parentPortal = data;\r\n });\r\n }\r\n else {\r\n this.parentPortalSubscription = this.parentPortalService.observableParentAssignedPortalsStream$.subscribe(portal => {\r\n this.parentPortal = portal;\r\n });\r\n }\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n student360Year => {\r\n this.student360Year = student360Year;\r\n this.loadStudentInfo(this.selectedStudent.Id);\r\n }\r\n );\r\n\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.userType = this.userService.userType;\r\n this.parentPortalShowOnlinePayment = this.LoginSettings.ParentPortalShowOnlinePayment;\r\n this.student360Year = this.yearService.student360Year;\r\n this.currentUrl = this.location.path();\r\n this.selectedStudentId = this.studentService.selectedStudent.Id;\r\n\r\n if (this.userType == 1) {\r\n if (this.parentPortal.filter(o => o.PortalName == 'Meal Service' && o.Disabled == false && o.ParentModule == '/student360').length > 0) {\r\n this.tabNames.push(marker('charges and deposits').toString()); // mark tab name for translation\r\n }\r\n }\r\n else {\r\n if (this.parentPortal.filter(o => o.PortalName == 'Meal Service' && o.Disabled == false).length > 0) {\r\n this.tabNames.push(marker('charges and deposits').toString()); // mark tab name for translation\r\n }\r\n }\r\n\r\n if (this.parentPortal.filter(o => o.PortalName == 'Monthly Lunch Menu' && o.Disabled == false).length > 0) {\r\n this.tabNames.push(marker('monthly lunch menu').toString()); // mark tab name for translation\r\n }\r\n\r\n this.selectedMonth = this.monthLabels[this.currentDate.getMonth()];\r\n this.selectedYear = this.currentDate.getFullYear();\r\n }\r\n\r\n ngOnInit() {\r\n if (this.currentUrl.indexOf('?') > 0) {\r\n const url = this.router.url.substring(0, this.router.url.indexOf('?'));\r\n this.currentUrl = url;\r\n }\r\n if (this.currentUrl == '/student360/lunchMealPlanner') {\r\n this.mealServiceService.selectionIndex = 1;\r\n this.selectionIndex = 1;\r\n }\r\n else if (this.currentUrl == '/student360/mealService') {\r\n this.mealServiceService.selectionIndex = 0;\r\n this.selectionIndex = 0;\r\n }\r\n else if (this.mealServiceService.selectionIndex) {\r\n this.selectionIndex = this.mealServiceService.selectionIndex;\r\n }\r\n\r\n if (this.userService.userType == 2) {\r\n this.studentService.getOnlinePaymentConfiguration().subscribe(result => {\r\n this.onlinePaymentConfiguration = result;\r\n });\r\n }\r\n if (this.loadStudentInfoCall == false) {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n this.loadStudentInfoCall = false;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.student360YearSubscription.unsubscribe();\r\n this.selectedStudentSubscription.unsubscribe();\r\n }\r\n\r\n // ------------ Meal Service Data ---------------------------\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n this.getMealService();\r\n this.getMothlyLunchMenu();\r\n }\r\n\r\n getMealService() {\r\n this.isBusy = true;\r\n this.mealServiceService.getMealService(this.selectedStudent.Id, this.yearService.student360Year.Id, this.studentEnrollment.SiteYearId).subscribe(data => {\r\n this.mealService = data;\r\n this.loadMealService();\r\n });\r\n }\r\n\r\n getLunchPin() {\r\n this.mealServiceService.getLunchPinForStudentAndStaff(this.selectedStudent.Id, this.studentEnrollment.SchoolId).subscribe(data => {\r\n this.lunchPin = data;\r\n });\r\n }\r\n\r\n loadMealService() {\r\n this.filterChange();\r\n this.getCalculationSummary();\r\n this.getLunchPin();\r\n this.isBusy = false;\r\n if (this.byViewChargesRef != null) {\r\n this.byViewChargesRef.refreshGrid(this.mealService, this.lunchMealChoice);\r\n }\r\n }\r\n\r\n getMothlyLunchMenu() {\r\n this.isBusy = true;\r\n this.mealServiceService.getMonthlyLunchMenu(this.selectedStudent.Id, this.studentEnrollment.SiteYearId, this.yearService.student360Year.StartDate, this.yearService.student360Year.EndDate).subscribe(data => {\r\n this.lunchMealChoice = data;\r\n if (this.byViewMonthlyRef != null) {\r\n this.byViewMonthlyRef.refreshGrid(this.lunchMealChoice, this.currentDate);\r\n }\r\n });\r\n }\r\n\r\n loadMealMonthlyLunchMenu(): void {\r\n this.byViewMonthlyRef.angularMatDataMonthlyLunchMenu.data = this.lunchMealChoice;\r\n this.isBusy = false;\r\n }\r\n\r\n selectionChange(selectionIndex: number) {\r\n this.selectionIndex = selectionIndex;\r\n\r\n if (this.selectionIndex == 1) {\r\n setTimeout(() => {\r\n this.byViewMonthlyRef.refreshGrid(this.lunchMealChoice, this.currentDate);\r\n }, 0);\r\n }\r\n else {\r\n setTimeout(() => {\r\n this.byViewChargesRef.refreshGrid(this.mealService, this.lunchMealChoice);\r\n }, 0);\r\n }\r\n }\r\n\r\n getCalculationSummary() {\r\n this.totalBalance = 0.00;\r\n this.totalDeposit = 0.00;\r\n this.totalRollOver = 0.00;\r\n this.totalPurchases = 0.00;\r\n\r\n if (this.mealService != null && this.mealService.length > 0) {\r\n this.mealService.forEach(function (obj) {\r\n if (obj.MealServiceDetailItems != null && obj.MealServiceDetailItems.length > 0) {\r\n const mealDetail = obj.MealServiceDetailItems;\r\n for (let j = 0; j < mealDetail.length; j++) {\r\n if (mealDetail[j] != null) {\r\n if (mealDetail[j].TransactionType == 'Deposit') {\r\n this.totalDeposit = this.totalDeposit + mealDetail[j].fltAmount;\r\n }\r\n else if (mealDetail[j].TransactionType == 'Refund') {\r\n this.totalDeposit = this.totalDeposit - mealDetail[j].fltAmount;\r\n }\r\n else if (mealDetail[j].TransactionType == 'Rollover') {\r\n this.totalRollOver = this.totalRollOver + mealDetail[j].fltAmount;\r\n }\r\n else if (mealDetail[j].TransactionType == 'Charge') {\r\n this.totalPurchases = this.totalPurchases + mealDetail[j].fltAmount;\r\n }\r\n else if (mealDetail[j].TransactionType == 'Void') {\r\n this.totalPurchases = this.totalPurchases - mealDetail[j].fltAmount;\r\n }\r\n else if (mealDetail[j].TransactionType == 'Online') {\r\n this.totalDeposit = this.totalDeposit + mealDetail[j].fltAmount;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (parseFloat(obj.Deposits) != 0) {\r\n this.totalDeposit = this.totalDeposit + parseFloat(obj.Deposits);\r\n }\r\n else if (parseFloat(obj.TotalPurchases) != 0) {\r\n this.totalPurchases = this.totalPurchases + parseFloat(obj.TotalPurchases);\r\n }\r\n }\r\n this.totalBalance = this.totalRollOver + this.totalDeposit - this.totalPurchases;\r\n }.bind(this));\r\n }\r\n }\r\n\r\n changeDate = function (direction: string) {\r\n const monthNum = (direction == 'next') ? this.currentDate.getMonth() + 1 : this.currentDate.getMonth() - 1;\r\n if (direction == 'today') {\r\n this.currentDate = new Date();\r\n }\r\n else {\r\n this.currentDate = new Date(this.currentDate.getFullYear(), monthNum);\r\n }\r\n this.yearStartDate = new Date(new Date(this.yearService.student360Year.StartDate).getFullYear(), new Date(this.yearService.student360Year.StartDate).getMonth());\r\n this.yearEndDate = new Date(new Date(this.yearService.student360Year.EndDate).getFullYear(), new Date(this.yearService.student360Year.EndDate).getMonth());\r\n\r\n switch (this.nearestDateCheck(this.yearStartDate, this.yearEndDate, this.currentDate)) {\r\n case 1:\r\n this.DisabledNxtBtn = true;\r\n this.DisabledPrvBtn = false;\r\n break;\r\n case 2:\r\n this.DisabledNxtBtn = false;\r\n this.DisabledPrvBtn = true;\r\n break;\r\n default:\r\n this.DisabledNxtBtn = false;\r\n this.DisabledPrvBtn = false;\r\n break;\r\n }\r\n this.selectedMonth = this.monthLabels[this.currentDate.getMonth()];\r\n this.selectedYear = this.currentDate.getFullYear();\r\n\r\n this.byViewMonthlyRef.refreshGrid(this.lunchMealChoice, this.currentDate);\r\n };\r\n\r\n nearestDateCheck(fromDate: Date, toDate: Date, currentDate: Date): number {\r\n if (new Date(currentDate) >= new Date(toDate)) {\r\n return 1;\r\n }\r\n else if (new Date(currentDate) <= new Date(fromDate)) {\r\n return 2;\r\n }\r\n return 0;\r\n }\r\n\r\n // -----------Toggle Rows Logic--------------\r\n expandAll(expand: boolean) {\r\n this.byViewChargesRef.expandAll(expand);\r\n }\r\n\r\n // -----------Filter Logic--------------\r\n showFilterClick() {\r\n this.showFilter = !this.showFilter;\r\n }\r\n\r\n filterChange() {\r\n this.filterFromDate = this.mealServiceFilter.FromDate;\r\n this.filterToDate = this.mealServiceFilter.ToDate;\r\n if (this.byViewChargesRef != null) {\r\n this.byViewChargesRef.angularMatData.data = this.mealServiceFilterPipe.transform(this.mealService, this.filterFromDate, this.filterToDate);\r\n }\r\n this.filtered = this.classesFiltered();\r\n }\r\n\r\n classesFiltered() {\r\n this.filterFromDate = this.mealServiceFilter.FromDate;\r\n this.filterToDate = this.mealServiceFilter.ToDate;\r\n if ((this.filterFromDate != undefined && this.filterFromDate != null) || (this.filterToDate != undefined && this.filterToDate != null)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n clearFilter() {\r\n if (this.byViewMonthlyRef != undefined) {\r\n this.byViewMonthlyRef.angularMatDataMonthlyLunchMenu.removeAllFilters();\r\n }\r\n else if (this.byViewChargesRef != undefined) {\r\n this.clearFilterEvent.emit();\r\n this.byViewChargesRef.angularMatData.removeAllFilters();\r\n }\r\n }\r\n\r\n isFiltered(): boolean {\r\n let filtered: boolean;\r\n\r\n if (this.byViewMonthlyRef != undefined) {\r\n if (this.byViewMonthlyRef.angularMatDataMonthlyLunchMenu.isFiltered()) {\r\n filtered = true;\r\n }\r\n }\r\n else if (this.byViewChargesRef != undefined) {\r\n if (this.byViewChargesRef.angularMatData.isFiltered()) {\r\n filtered = true;\r\n }\r\n }\r\n return filtered;\r\n }\r\n\r\n onlinePaymentClick() {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'selectedView': 2\r\n }\r\n };\r\n this.router.navigate(['/student360/onlinePayment'], navigationExtras);\r\n }\r\n\r\n viewPassword(showPassword) {\r\n this.showPassword = showPassword;\r\n }\r\n}\r\n","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {System} from './../../shared-components/System';\r\nimport {StudentService} from '../../shared-components/student/student.service';\r\nimport {YearService} from '../../shared-components/year/year.service';\r\nimport { LunchMealChoice} from './meal-service.model';\r\nimport {UserService} from '../../shared-components/user/user.service';\r\nimport {SharedService} from '../../shared-components/shared.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MealServiceService {\r\n selectionIndex: number;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n public userService: UserService,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n getMealService(studentId: number, yearId: number, siteYearId: number) {\r\n return this.sharedService.getMealService(studentId, yearId, siteYearId);\r\n }\r\n\r\n getMonthlyLunchMenu(studentId: number, siteYearId: number, startDate: Date, endDate: Date) {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteYearId=' + siteYearId +\r\n '&startDate=' + startDate +\r\n '&endDate=' + endDate;\r\n return this.http.get(System.apiURL.Student + 'GetMothlyLunchMenu' + queryString);\r\n }\r\n\r\n getLunchPinForStudentAndStaff(studentId: number, siteId: number) {\r\n let queryString = '';\r\n queryString += '?yearId=' + this.yearService.student360Year.Id +\r\n '&siteId=' + siteId +\r\n '&studentId=' + studentId +\r\n '&userType=' + this.userService.userType;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetLunchPinForStudentAndStaff' + queryString);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MonthlyLunchMenuChoices } from './meal-service.model';\r\n\r\n@Pipe({\r\n name: 'monthlyLunchMenuFilter'\r\n})\r\nexport class MonthlyLunchMenuFilterPipe implements PipeTransform {\r\n\r\n transform(monthlyLunchMenuChoices: MonthlyLunchMenuChoices[], column: MonthlyLunchMenuChoices): MonthlyLunchMenuChoices[] {\r\n return monthlyLunchMenuChoices.filter(\r\n obj => (obj.Choice === column.Choice)\r\n );\r\n }\r\n}\r\n","import { OnlinePaymentServiceCharges } from \"./online-payment-service-charges.model\";\r\n\r\nexport class OnlinePaymentConfiguration {\r\n // Properties\r\n ReceiverEmail: string;\r\n MaximumDepositAmount: number;\r\n OnlinePaymentServiceFeesPaidByParent: boolean;\r\n StudentFinesAndFeesOnlinePayment: boolean;\r\n StudentMealOnlinePayment: boolean;\r\n StaffMealOnlinePayment: boolean;\r\n EnableMealServiceFee : boolean;\r\n EnableFineAndFeesServiceFee : boolean;\r\n OnlinePaymentServiceCharges: OnlinePaymentServiceCharges[];\r\n Hexea_PCCTID: string;\r\n PaymentMethod: any;\r\n\r\n // Class Functions\r\n constructor() {\r\n this.OnlinePaymentServiceCharges = [];\r\n }\r\n }","import {ActiveStudent} from './active-student.model';\r\nimport {Attachment} from '../../shared-components/models/attachment.model';\r\nimport {Form} from './form.model';\r\n\r\nexport class FormPacket {\r\n\r\n\t// Shared Properties\r\n\tid: number;\r\n\tAdditionalStudentsAdded: boolean;\r\n\tCurrentUserMemberId: number;\r\n\tId: number;\r\n\tFamilyId: number;\r\n\tLastUpdated = new Date('0001-01-01T00:00:00');\r\n\tStatus: boolean;\r\n\tUserName: string;\r\n\tYearId: number;\r\n\tYearDescription: string;\r\n\tPrimaryParent: boolean;\r\n\r\n // Online Registration Only\r\n\tFormUpdated: boolean;\r\n\tOnlineRegistrationActiveStudents: ActiveStudent[];\r\n\tOnlineRegistrationAttachments: Attachment[];\r\n\tOnlineRegistrationForms: Form[];\r\n\tPacketRejected: boolean;\r\n\tQRFamily: boolean;\r\n\tSubmitMessageEnglish: string;\r\n\tSubmitMessageFrench: string;\r\n\tSubmitMessageSpanish: string;\r\n\tNewFamily: boolean;\r\n\tAssociatedToAllStudents: boolean;\r\n\tPacketIsReadyToSubmit: boolean;\r\n\tNoteForNonRes: boolean;\r\n\r\n // Parent Portal Only\r\n\tParentPortalDataUpdateForms: Form[];\r\n\r\n\t// Class Functions\r\n\tconstructor () {}\r\n\r\n\t// Methods\r\n\tgetForms(onlineRegistration: boolean) {\r\n\t\t// PRE: online registration is true if this is for Online Registration\r\n\t\t// POST: returns the formPacket for the given use case\r\n\t\tif (onlineRegistration) {\r\n\t\t\treturn this.OnlineRegistrationForms;\r\n\t\t} else {\r\n\t\t\treturn this.ParentPortalDataUpdateForms;\r\n\t\t}\r\n\t}\r\n}\r\n","import { HouseholdData, OnlineRegFamilies } from './household-data.model';\r\nimport { System } from './../../shared-components/System';\r\nimport { HouseholdHealth } from './health-update/household-health.model';\r\nimport { HouseholdCustomForm } from './custom-form/household-custom-forms.model';\r\nimport { Injectable, EventEmitter } from '@angular/core';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Observable, forkJoin } from 'rxjs';\r\nimport { FormPacket } from './form-packet.model';\r\nimport { HouseholdParents } from './parent-update/household-parents.model';\r\nimport { Form } from './form.model';\r\nimport { FamilyDataField } from './family-data-field.model';\r\nimport { HouseholdAddresses } from './address-update/householdAddresses';\r\nimport { Router, NavigationCancel, RouterStateSnapshot } from '@angular/router';\r\nimport { HouseholdStudents } from './student-update/household-students';\r\nimport { StudentDetails, StudentLinkedToContact } from './student-update/student-details';\r\nimport { map } from '../../../../node_modules/rxjs/operators';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { EmergencyContact } from './contact-update/emergency-contacts.model';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { Address } from '../../shared-components/models/address';\r\n\r\n@Injectable()\r\nexport class OnlineRegistrationService {\r\n\r\n // Private Properties\r\n public familyId: number;\r\n public parentType: string;\r\n public isMultipleFamiliesPopupOpened: boolean;\r\n private originalForm: Form;\r\n private originalFormPacket: FormPacket;\r\n private _currentForm: Form;\r\n private _currentFormPacket: FormPacket;\r\n private _formStatus: boolean;\r\n private _calledFromReviewSubmission: boolean;\r\n\r\n // Public Properties\r\n public returnFromLastForm = false;\r\n public formChange = new EventEmitter
();\r\n public formPacketChange = new EventEmitter();\r\n public ORYear: Year;\r\n public forcefullyRedirectOnlineRegistration: boolean;\r\n\r\n public clickEvent = 0;\r\n\r\n public studentToContactLinked: StudentLinkedToContact[] = [];\r\n\r\n // Class Functions\r\n constructor(\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private loginService: LoginService,\r\n private http: HttpClient,\r\n private router: Router\r\n ) {\r\n\r\n }\r\n\r\n get currentForm() {\r\n return this._currentForm;\r\n }\r\n\r\n set currentForm(value: Form) {\r\n this._currentForm = value;\r\n this.formChange.emit(this._currentForm);\r\n }\r\n\r\n get currentFormPacket() {\r\n return this._currentFormPacket;\r\n }\r\n\r\n set currentFormPacket(value: FormPacket) {\r\n this._currentFormPacket = value;\r\n this.formPacketChange.emit(this._currentFormPacket);\r\n }\r\n get calledFromReviewSubmission()\r\n {\r\n return this._calledFromReviewSubmission;\r\n }\r\n set calledFromReviewSubmission(value: boolean)\r\n {\r\n this._calledFromReviewSubmission = value;\r\n }\r\n get formStatus(): boolean {\r\n return this._formStatus;\r\n }\r\n\r\n get V10Data(): boolean {\r\n if (this.isOnlineRegistration()) {\r\n return this.loginService.LoginSettings.ParentPortalORv10Data;\r\n } else {\r\n return this.loginService.LoginSettings.ParentPortalUHDv10Data;\r\n }\r\n }\r\n\r\n get isLastForm(): boolean {\r\n // POST: returns true if this is the last form\r\n return this.getCurrentFormIndex() == this.getForms(this.currentFormPacket).length - 1;\r\n }\r\n\r\n // Methods\r\n isOnlineRegistration() {\r\n return this.router.url.toLowerCase().includes('onlineregistration') || this.calledFromReviewSubmission || this.userService.currentUser.NewFamilyRegistration || !!this.forcefullyRedirectOnlineRegistration;\r\n }\r\n\r\n isFieldRequired(householdData: HouseholdData, requiredProperty: string | boolean) {\r\n if (typeof requiredProperty == 'string') {\r\n return householdData[requiredProperty] && (!this.isOnlineRegistration() || householdData.Status);\r\n } else {\r\n return requiredProperty && (!this.isOnlineRegistration() || householdData.Status);\r\n }\r\n }\r\n\r\n getFieldPhoneRegexp(householdData: HouseholdData) {\r\n if (this.isOnlineRegistration() && householdData && !householdData.Status) {\r\n return /.*/;\r\n } else {\r\n return System.phoneRegexp;\r\n }\r\n }\r\n\r\n getFieldEmailRegexp(householdData: HouseholdData) {\r\n if (this.isOnlineRegistration() && householdData && !householdData.Status) {\r\n return /.*/;\r\n } else {\r\n return System.mailRegexp;\r\n }\r\n }\r\n\r\n getFieldZipRegexp(householdData: HouseholdData) {\r\n if (this.isOnlineRegistration() && householdData && !householdData.Status) {\r\n return /.*/;\r\n } else {\r\n return System.zipRegexp;\r\n }\r\n }\r\n\r\n getCurrentFormIndex(): number {\r\n // PRE: the current form and the current form packet must be set. Otherwise, returns -1.\r\n // POST: returns the index of the current form\r\n if (!this.currentForm || !this.currentFormPacket) {\r\n return -1;\r\n } else {\r\n return this.getForms(this.currentFormPacket).indexOf(this.currentForm);\r\n }\r\n }\r\n\r\n getFormCount(): number {\r\n // PRE: the form packet must be set\r\n // POST: reutnrs the number of forms in the packet\r\n return this.getForms(this.currentFormPacket).length;\r\n }\r\n\r\n getFormAtIndex(index: number): Form {\r\n // PRE: the current form and the current form packet must be set. Otherwise, returns null.\r\n // POST: returns the form at the given index\r\n if (!this.currentForm || !this.currentFormPacket || this.getForms(this.currentFormPacket).length <= index) {\r\n return null;\r\n } else {\r\n return this.getForms(this.currentFormPacket)[index];\r\n }\r\n }\r\n\r\n routeToForm(form: Form, formPacket: FormPacket) {\r\n // PRE: a form to route to amongst a list of form packet\r\n // POST: routes to that form and sets the appropriate variable\r\n\r\n // If the form or the formpacket are not there, don't route\r\n if (!form || !formPacket) {\r\n return;\r\n }\r\n\r\n // Setting up data for route\r\n this.originalForm = this.currentForm;\r\n this.originalFormPacket = new FormPacket();\r\n this.originalFormPacket = this.currentFormPacket;\r\n this.currentForm = form;\r\n this.currentFormPacket = new FormPacket();\r\n this.currentFormPacket = formPacket;\r\n this._formStatus = this.currentFormPacket.Status || this.currentForm.FormStatus == 'Approved';\r\n\r\n // Performing route\r\n if (this.isOnlineRegistration()) {\r\n if ((form.ScreenName.includes('Household Parents') || form.ScreenName.includes('Parent/Contact Information')) && (this.V10Data == true || form.StudentId == 0)) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/householdParents');\r\n } else if (form.ScreenName.includes('Household Addresses') && form.ScreenName.length == 19 && (this.V10Data == true || form.StudentId == 0)) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/householdAddresses');\r\n } else if (form.ScreenName.includes('Addresses') && this.V10Data == true && form.ScreenName.length == 9) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/householdAddresses');\r\n } else if (form.ScreenName.includes('Student Information') && form.ScreenName.length == 19 && (this.V10Data == true || form.StudentId == 0)) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/student');\r\n } else if (form.ScreenName.includes('Emergency Contacts') && form.ScreenName.length == 18 && (this.V10Data == true || form.StudentId == 0)) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/emergencyContacts');\r\n } else if (form.ScreenName.includes('Non-resident Parents') && form.ScreenName.length == 20 && (this.V10Data == true || form.StudentId == 0)) {\r\n this.router.navigateByUrl('/student360/onlineRegistration/nonresidentParents');\r\n } else {\r\n this.router.navigateByUrl('/student360/onlineRegistration/customForm?formName=' + this.currentForm.ScreenName);\r\n }\r\n } else {\r\n if (form.ScreenName.includes('Household Parents') || form.ScreenName.includes('Parent/Contact Information')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/householdParents');\r\n } else if (form.ScreenName.includes('Household Addresses')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/householdAddresses');\r\n } else if (form.ScreenName.includes('Addresses') && this.V10Data == true) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/householdAddresses');\r\n } else if (form.ScreenName.includes('Student Information')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/student');\r\n } else if (form.ScreenName.includes('Health/Medical')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/healthMedical');\r\n } else if (form.ScreenName.includes('Emergency Contacts')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/emergencyContacts');\r\n } else if (form.ScreenName.includes('Non-resident Parents')) {\r\n this.router.navigateByUrl('/student360/parentPortalDataUpdate/nonresidentParents');\r\n }\r\n }\r\n\r\n // If the route is canceled, reset data\r\n this.router.events.subscribe(e => {\r\n if (e instanceof NavigationCancel && this.originalForm && this.originalFormPacket) {\r\n this.currentForm = this.originalForm;\r\n this.currentFormPacket = this.originalFormPacket;\r\n this._formStatus = this.currentFormPacket.Status || this.currentForm.FormStatus == 'Approved';\r\n }\r\n });\r\n }\r\n\r\n guardCheck(\r\n data: HouseholdData,\r\n dirty = false,\r\n nextState?: RouterStateSnapshot,\r\n errors: ErrorList[] = []\r\n ): number {\r\n // PRE: the data, whether the form is dirty, the next state, and a list of errors\r\n // POST: this is the call that checks what the guard should do\r\n\r\n // If this is online registration and the next URL is OR or PPU, perform a special check\r\n if (nextState && this.isOnlineRegistration() &&\r\n data &&\r\n (nextState.url.includes('onlineRegistration') || nextState.url.includes('parentPortalDataUpdate'))) {\r\n\r\n // If dirty ...\r\n if (dirty) {\r\n\r\n // And there are no errors ...\r\n if (errors.length == 0) {\r\n\r\n // Autosave with waiting\r\n return 5;\r\n }\r\n\r\n // And there are errors ...\r\n else {\r\n\r\n // Prevent route entirely\r\n return -1;\r\n }\r\n }\r\n\r\n // If not dirty, just continue\r\n else {\r\n return 2;\r\n }\r\n }\r\n\r\n // If dirty, show warning. Otherwise, just continue.\r\n if (dirty) {\r\n return 4;\r\n } else {\r\n return 2;\r\n }\r\n }\r\n\r\n getOnlineRegFamilies(isUHD: boolean): Observable {\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&isUHD=' + isUHD;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationFamilies' + queryString);\r\n }\r\n\r\n // Shared Server Calls\r\n getFormPacket(allowUserToAddStudent: boolean = false, familyId: number = 0, parentType: string = '', userId: number = this.userService.currentUser.Id, student360YearId: number = 0, review: boolean = false): Observable {\r\n // PRE: online registration is true if this is for Online Registration\r\n // POST: gets the user's form packet for the specified update page\r\n\r\n if (this.isOnlineRegistration()) {\r\n // let student360YearId: number;\r\n if (student360YearId == 0 && this.forcefullyRedirectOnlineRegistration == true) {\r\n student360YearId = this.ORYear.Id;\r\n }\r\n else if (student360YearId == 0 ) {\r\n student360YearId = this.yearService.student360Year == undefined ? this.ORYear.Id : this.yearService.student360Year.Id;\r\n }\r\n\r\n const queryString = '?userId=' + userId +\r\n '&yearId=' + student360YearId +\r\n '&languageId=' + this.userService.languageId +\r\n '&allowUserToAddStudent=' + allowUserToAddStudent +\r\n '&familyId=' + familyId +\r\n '&parentType=' + parentType + \r\n '&review=' + review;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationUserPacket' + queryString).pipe(map(formPacket => {\r\n this.currentFormPacket = System.convert(formPacket, new FormPacket());\r\n return formPacket;\r\n }));\r\n } else {\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\t// We don't use OR Year here because UHD doesn't allow year selection\r\n '&familyId=' + familyId +\r\n '&parentType=' + parentType;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateUserPacket' + queryString).pipe(map(formPacket => {\r\n this.currentFormPacket = System.convert(formPacket, new FormPacket());\r\n return formPacket;\r\n }));\r\n }\r\n }\r\n\r\n getFamilyDataFields(): Observable {\r\n // POST: obtains the family data fields for parent update\r\n return this.http.get(System.apiURL.Student + 'GetFamilyDataFields');\r\n }\r\n\r\n getHouseholdParents(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are obtaining data for\r\n // POST: gets the household parents for online registration\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&languageId=' + this.userService.languageId +\r\n '&ayIdentifier=' + this.currentFormPacket.YearDescription;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationHouseholdParents' + queryString);\r\n } else {\r\n const queryString = '?familyId=' + this.userService.currentUser.FamilyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateHouseholdParents' + queryString);\r\n }\r\n }\r\n\r\n saveHouseholdParents(householdParents: HouseholdParents, newContact: boolean): Observable {\r\n // POST: saves the household parents to the server\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&newContact=' + (newContact ? 1 : 0);\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationHouseholdParentData' + queryString, householdParents);\r\n } else {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateHouseholdParentData' + queryString, householdParents);\r\n }\r\n }\r\n\r\n deleteHouseholdParents(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are deleting parent data\r\n // POST: deletes the new values from the parent data\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationHouseholdParentData' + queryString);\r\n } else {\r\n const queryString = '?familyId=' + this.userService.currentUser.FamilyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteParentPortalDataUpdateHouseholdParentData' + queryString);\r\n }\r\n }\r\n\r\n getHouseholdAddresses(): Observable {\r\n // POST: obtains the household addresses\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?familyId=' + this.currentFormPacket.FamilyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLInkScreenId=' + this.currentForm.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&languageId=' + this.userService.languageId +\r\n '&ayIdentifier=' + this.currentFormPacket.YearDescription;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationHouseholdAddresses' + queryString).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.OnlineRegistrationHouseholdAddressesDetail.length; i++) {\r\n const address = results.OnlineRegistrationHouseholdAddressesDetail[i];\r\n results.OnlineRegistrationHouseholdAddressesDetail[i] = System.convert
(address, new Address());\r\n }\r\n return results;\r\n })\r\n );\r\n } else {\r\n const queryString = '?familyId=' + this.userService.currentUser.FamilyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateHouseholdAddresses' + queryString).pipe(\r\n map(results => {\r\n for (let i = 0; i < results.ParentPortalDataUpdateHouseholdAddressesDetail.length; i++) {\r\n const address = results.ParentPortalDataUpdateHouseholdAddressesDetail[i];\r\n results.ParentPortalDataUpdateHouseholdAddressesDetail[i] = System.convert
(address, new Address());\r\n }\r\n return results;\r\n })\r\n );\r\n }\r\n }\r\n\r\n saveHouseholdAddresses(householdAddresses: HouseholdAddresses): Observable {\r\n // POST: saves the household addresses to the server\r\n if (this.isOnlineRegistration()) {\r\n if (householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].SameAsPrimaryResidence) {\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressLine1New = '';\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressLine2New = '';\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressLine3New = '';\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressCityNew = '';\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressStateNew = '';\r\n householdAddresses.OnlineRegistrationHouseholdAddressesDetail[0].POBoxAddressZipNew = '';\r\n }\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationHouseholdAddressData' + queryString, householdAddresses);\r\n } else {\r\n if (householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].SameAsPrimaryResidence) {\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressLine1New = '';\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressLine2New = '';\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressLine3New = '';\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressCityNew = '';\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressStateNew = '';\r\n householdAddresses.ParentPortalDataUpdateHouseholdAddressesDetail[0].POBoxAddressZipNew = '';\r\n }\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateHouseholdAddressData' + queryString, householdAddresses);\r\n }\r\n }\r\n\r\n deleteHouseholdAddresses(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are deleting address data\r\n // POST: deletes the new values from the address data\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationHouseholdAddressData' + queryString);\r\n } else {\r\n const queryString = '?familyId=' + this.userService.currentUser.FamilyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteParentPortalDataUpdateHouseholdAddressData' + queryString);\r\n }\r\n }\r\n\r\n getHouseholdStudents(): Observable {\r\n // POST: obtains the household students\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n let parentType = '';\r\n if (familyId > 0) {\r\n parentType = this.parentType;\r\n }\r\n const memId = this.V10Data ? this.userService.currentUser.MemberId : this.userService.currentUser.Id;\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '¤tUserMemberId=' + memId + // Pass User Id For V9\r\n '&languageId=' + this.userService.languageId +\r\n '&ayIdentifier=' + this.currentFormPacket.YearDescription +\r\n '&parentType=' + parentType;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationStudent' + queryString);\r\n } else {\r\n const queryString = '?familyId=' + familyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '&parentType=' + parentType;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateStudent' + queryString);\r\n }\r\n }\r\n\r\n saveHouseholdStudents(householdStudents: HouseholdStudents): Observable {\r\n // POST: saves the household students to the server\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationStudentData' + queryString, householdStudents);\r\n } else {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateStudentData' + queryString, householdStudents);\r\n }\r\n }\r\n\r\n deleteHouseholdStudents(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are deleting address data\r\n // POST: deletes the new values from the address data\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationStudentData' + queryString);\r\n } else {\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n const queryString = '?familyId=' + familyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteParentPortalDataUpdateStudentData' + queryString);\r\n }\r\n }\r\n\r\n getMatchingStudentAddresses(students: HouseholdStudents): Observable {\r\n // PRE: an edited household students\r\n // POST: returns the matching student addresses\r\n if (this.isOnlineRegistration()) {\r\n return this.http.post(System.apiURL.Student + 'ORGetMatchingStudentAddresses', students);\r\n } else {\r\n return this.http.post(System.apiURL.Student + 'PPUGetMatchingStudentAddresses', students);\r\n }\r\n }\r\n\r\n getMatchingParentAddresses(students: HouseholdStudents): Observable {\r\n // PRE: an edited household students\r\n // POST: returns the matching parent addresses\r\n if (this.isOnlineRegistration()) {\r\n return this.http.post(System.apiURL.Student + 'ORGetMatchingParentAddresses', students);\r\n } else {\r\n return this.http.post(System.apiURL.Student + 'PPUGetMatchingParentAddresses', students);\r\n }\r\n }\r\n\r\n getMatchingAddresses(students: HouseholdStudents): Observable {\r\n // PRE: an edited household students\r\n // POST: returns the matching student address and the matching parent addresses as an array\r\n // results[0] is students, results[1] is parents\r\n return forkJoin(this.getMatchingStudentAddresses(students), this.getMatchingParentAddresses(students));\r\n }\r\n\r\n syncStudentAddresses(students: StudentDetails[]): Observable {\r\n // PRE: addresses that belong to students\r\n // POST: syncs them on the database\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?memberId=' + this.userService.currentUser.MemberId;\r\n return this.http.post(System.apiURL.Student + 'ORStudentSyncStudentAddresses' + queryString, students);\r\n } else {\r\n const queryString = '?memberId=' + this.userService.currentUser.MemberId;\r\n return this.http.post(System.apiURL.Student + 'PPUStudentSyncStudentAddresses' + queryString, students);\r\n }\r\n }\r\n\r\n syncParentAddresses(parentAddresses: HouseholdAddresses[]): Observable {\r\n // PRE: addresses that belong to parents\r\n // POST: syncs them on the database\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?memberId=' + this.userService.currentUser.MemberId;\r\n return this.http.post(System.apiURL.Student + 'ORStudentSyncParentAddresses' + queryString, parentAddresses);\r\n } else {\r\n const queryString = '?memberId=' + this.userService.currentUser.MemberId;\r\n return this.http.post(System.apiURL.Student + 'PPUStudentSyncParentAddresses' + queryString, parentAddresses);\r\n }\r\n }\r\n\r\n syncAddresses(students: StudentDetails[], parentAddresses: HouseholdAddresses[]): Observable {\r\n // POST: syncs the addresses on the database, respectively\r\n return forkJoin(this.syncStudentAddresses(students), this.syncParentAddresses(parentAddresses));\r\n }\r\n\r\n getEmergencyContact(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are obtaining data for\r\n // POST: gets the emergency contactsts for online registration\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationEmergencyContacts' + queryString);\r\n }\r\n else {\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateEmergencyContacts' + queryString);\r\n }\r\n }\r\n\r\n saveEmergencyContact(data: EmergencyContact, newContact: boolean): Observable {\r\n // POST: saves the emergency contact to the server\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&newContact=' + (newContact ? 1 : 0);\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationEmergencyContactData' + queryString, data);\r\n } else {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateEmergencyContactData' + queryString, data);\r\n }\r\n }\r\n\r\n deleteEmergencyContact(): Observable {\r\n // PRE: the online registration currentForm must be the form for which we are deleting contact data\r\n // POST: deletes the new values from the emergency contact data\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationEmergencyContactData' + queryString);\r\n } else {\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n const queryString = '?familyId=' + familyId +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'deleteParentPortalDataUpdateEmergencyContactData' + queryString);\r\n }\r\n }\r\n\r\n getNonResidentParents(): Observable {\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&parentType=' + this.parentType +\r\n '&userId=' + this.userService.currentUser.Id\r\n ;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationNonResidentParents' + queryString);\r\n } else { \r\n \r\n const queryString = '?familyId=' + familyId +\r\n '&userId=' + this.userService.currentUser.Id;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateNonResidentParents' + queryString);\r\n }\r\n }\r\n\r\n saveOnlineRegistrationNonResidentParentData(householdParents: HouseholdParents, newContact: boolean): Observable {\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationNonResidentParentData' + queryString, householdParents);\r\n } else {\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateNonResidentParentData' + queryString, householdParents);\r\n }\r\n }\r\n\r\n deleteNonResidentParentData(): Observable {\r\n if (this.isOnlineRegistration()) {\r\n const queryString = '?onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationNonResidentParentData' + queryString);\r\n } else {\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n const queryString = '?familyId=' + familyId;\r\n return this.http.get(System.apiURL.Student + 'DeleteParentPortalDataUpdateNonResidentParentData' + queryString);\r\n }\r\n }\r\n\r\n // Online Registration Only Server Calls\r\n getCustomForm(): Observable {\r\n // POST: obtains the custom forms for a household\r\n const familyId = (!this.V10Data && this.familyId != null && this.familyId > 0) ? this.familyId : this.userService.currentUser.FamilyId;\r\n const queryString = '?familyId=' + familyId +\r\n '&yearId=' + this.currentFormPacket.YearId +\r\n '&onlineRegistrationLinkScreenId=' + this.currentForm.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&languageId=' + this.userService.languageId +\r\n '&ayIdentifier=' + this.currentFormPacket.YearDescription;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationCustomForm' + queryString);\r\n }\r\n\r\n saveCustomForm(customForm: HouseholdCustomForm): Observable {\r\n // PRE: a custom form to save\r\n // POST: saves the custom form to the server\r\n const queryString = '?userId=' + this.userService.currentUser.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationCustomFormData' + queryString, customForm);\r\n }\r\n\r\n deleteCustomForm(): Observable {\r\n // PRE: the current form is the one we're resetting\r\n // POST: resets the current form in the server\r\n const queryString = '?onlineregistrationLinkScreenId=' + this.currentForm.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationCustomFormData' + queryString);\r\n }\r\n\r\n submitOnlineRegistrationPacket(): Observable {\r\n // PRE: the data for all packets should be set\r\n // POST: sends the submit event to the server\r\n // NOTE: this has no data because all the data should be saved on the server\r\n const queryString = '?Id=' + this.currentFormPacket.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '¤tUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&languageId=' + this.userService.languageId;\r\n return this.http.get(System.apiURL.Student + 'SubmitOnlineRegistrationPacket' + queryString);\r\n }\r\n\r\n // Parent Portal Only Server Calls\r\n getHouseholdHealth(): Observable {\r\n // POST: obtains the current medical information for students\r\n const queryString = '?currentUserMemberId=' + this.userService.currentUser.MemberId +\r\n '&yearId=' + this.yearService.student360Year.Id;\r\n return this.http.get(System.apiURL.Student + 'GetParentPortalDataUpdateHealthMedical' + queryString);\r\n }\r\n\r\n saveHouseholdHealth(householdHealth: HouseholdHealth): Observable {\r\n // PRE: an edited household health object\r\n // POST: saves the data to the server\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&yearId=' + this.yearService.student360Year.Id;\r\n return this.http.post(System.apiURL.Student + 'SaveParentPortalDataUpdateHealthMedicalData' + queryString, householdHealth);\r\n }\r\n\r\n deleteHouseholdHealth(): Observable {\r\n // POST: resets the household health\r\n const queryString = '?currentUserMemberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteParentPortalDataUpdateHealthMedicalData' + queryString);\r\n }\r\n\r\n saveAttachment(attachment: Attachment): Observable {\r\n // PRE: an attachment with an attached user file\r\n // POST: saves the attachment to the server\r\n return this.http.post(System.apiURL.Student + 'SaveOnlineRegistrationAttachment', attachment);\r\n }\r\n\r\n deleteAttachment(attachment: Attachment): Observable {\r\n // PRE: an attachment to delete\r\n // POST: deletes the attachment from the server\r\n const queryString = '?DocumentId=' + attachment.DocumentFileId +\r\n '&memberId=' + this.userService.currentUser.MemberId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationAttachment' + queryString);\r\n }\r\n\r\n checkStudentImmunizationCompliance(): Observable {\r\n // POST: returns the students who aren't complying and the corresponding messages\r\n const queryString = '?userId=' + this.userService.currentUser.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '¤tUserMemberid=' + this.userService.currentUser.MemberId +\r\n '&languageId=' + this.userService.languageId +\r\n '&ayIdentifier=' + this.yearService.student360Year.AYIdentifier;\r\n return this.http.get(System.apiURL.Student + 'CheckORStudentsImmunizationCompliance' + queryString);\r\n }\r\n\r\n getForms(packet: FormPacket) {\r\n // PRE: online registration is true if this is for Online Registration\r\n // POST: returns the formPacket for the given use case\r\n let activeStudents: number[] = [];\r\n if (packet && packet.OnlineRegistrationActiveStudents) {\r\n activeStudents = packet.OnlineRegistrationActiveStudents.filter(activeStudent => this.V10Data || ((this.parentType == 'Nonresident Parent' && activeStudent.UserIsPrimaryContact == false) || this.parentType != 'Nonresident Parent')).map(s => s.Id);\r\n }\r\n if (this.isOnlineRegistration()) {\r\n if (packet.OnlineRegistrationForms && packet.OnlineRegistrationForms.length > 0) {\r\n return packet.OnlineRegistrationForms;\r\n } else {\r\n const blankFrom: Form[] = [];\r\n return blankFrom;\r\n }\r\n\r\n } else {\r\n if (packet.ParentPortalDataUpdateForms && packet.ParentPortalDataUpdateForms.length > 0) {\r\n return packet.ParentPortalDataUpdateForms;\r\n } else {\r\n const blankFrom: Form[] = [];\r\n return blankFrom;\r\n }\r\n return packet.ParentPortalDataUpdateForms;\r\n }\r\n }\r\n\r\n getOnlineRegistrationYears(allowUserToAddStudent: boolean): Observable {\r\n const queryString = '?allowUserToAddStudent=' + allowUserToAddStudent;\r\n return this.http.get(System.apiURL.Student + 'GetOnlineRegistrationYears' + queryString);\r\n }\r\n\r\n getORYearGradeLevels(yearId: number): Observable {\r\n const queryString = '?yearId=' + yearId;\r\n return this.http.get(System.apiURL.Student + 'GetORYearGradeLevels' + queryString);\r\n }\r\n\r\n deleteOnlineRegistrationUserPacket(userPacketId: number) {\r\n const queryString = '?id=' + userPacketId;\r\n return this.http.get(System.apiURL.Student + 'DeleteOnlineRegistrationUserPacket' + queryString);\r\n }\r\n\r\n getNewStudentLinkedContacts(familyId: number, formId: number): Observable {\r\n const queryString = '?familyId=' + familyId +\r\n '&formId=' + formId;\r\n return this.http.get(System.apiURL.Student + 'GetNewStudentLinkedContacts' + queryString);\r\n }\r\n\r\n saveNewStudentLinkedContacts(familyId: number, packetId: number, data: StudentLinkedToContact[]): Observable {\r\n const queryString = '?familyId=' + familyId +\r\n '&packetId=' + packetId;\r\n return this.http.post(System.apiURL.Student + 'SaveNewStudentLinkedContacts' + queryString, data);\r\n }\r\n}\r\n","\r\n
\r\n Multiple Families\r\n
\r\n\r\n\r\n
\r\n {{gradeLevelMessage | translate}} {{gradeLevelData}}\r\n
\r\n
\r\n {{note | translate}}\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n Your Role\r\n \r\n Students\r\n \r\n Status\r\n
\r\n \r\n \r\n \r\n {{family.ParentType | translate}}\r\n \r\n
\r\n {{student.FirstName }} {{ student.LastName}}\r\n
\r\n
\r\n {{family.Status}}\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { OnlineRegFamilies } from '../../household-data.model';\r\nimport { TylerMatTableDataSource } from '../../../../shared-components/angular-material/extended.class';\r\nimport { StudentService } from '../../../../shared-components/student/student.service';\r\nimport { ErrorList } from '../../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { OnlineRegistrationService } from '../../online-registration.service';\r\nimport { YearService } from '../../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-multiple-families',\r\n templateUrl: './multiple-families.component.html',\r\n styleUrls: ['./multiple-families.component.css']\r\n})\r\nexport class MultipleFamiliesComponent implements OnInit {\r\n errors: ErrorList[] = [];\r\n isUHD: boolean;\r\n families: OnlineRegFamilies[] = [];\r\n tableData = new TylerMatTableDataSource();\r\n selectedFamilyId: number;\r\n gradeLevelMessage: string;\r\n gradeLevelData: string;\r\n note: string;\r\n columnsToDisplay = ['Select', 'Role', 'Students'];\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private onlineRegistrationService: OnlineRegistrationService,\r\n private dialog: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.isUHD = this.data.isUHD;\r\n if (!this.isUHD) {\r\n this.columnsToDisplay.push('Status');\r\n }\r\n this.onlineRegistrationService.getORYearGradeLevels(-1).subscribe(data => {\r\n if (data && data.indexOf('to') > 0) {\r\n this.gradeLevelMessage = 'Online Registration is currently open for grades ';\r\n this.gradeLevelData = data + '.';\r\n if (!this.isUHD) {\r\n this.note = 'You are associated with students in those grades in multiple families. For which family do you wish to access Online registration:';\r\n }\r\n\r\n } else if (data && data.length > 0) {\r\n this.gradeLevelMessage = 'Online Registration is currently open for grade ';\r\n this.gradeLevelData = data + '.';\r\n if (!this.isUHD) {\r\n this.note = 'You are associated with students in that grade in multiple families. For which family do you wish to access Online registration:';\r\n }\r\n }\r\n else {\r\n this.gradeLevelMessage = 'Online Registration is currently open for all grades.';\r\n if (!this.isUHD) {\r\n this.note = 'You are associated with students in multiple families. For which family do you wish to access Online registration:';\r\n }\r\n }\r\n\r\n if (this.isUHD) {\r\n this.note = 'You are associated with students in multiple families. For which family do you wish to access Update Household Data forms:';\r\n }\r\n\r\n });\r\n this.families = this.data.families;\r\n this.families.forEach(element => {\r\n element.Students = [];\r\n let studentIds: string[] = [];\r\n studentIds = element.StudentIds.split(',');\r\n studentIds.forEach(std => {\r\n const student = this.studentService.students.find(x => x.Id == parseInt(std, 10));\r\n if (student) {\r\n element.Students.push(student);\r\n }\r\n });\r\n });\r\n if (this.families && this.families.length > 0) {\r\n this.tableData.data = this.families;\r\n }\r\n }\r\n cancelClick() {\r\n this.dialog.close();\r\n }\r\n okClick() {\r\n if (this.selectedFamilyId > 0) {\r\n this.onlineRegistrationService.familyId = this.selectedFamilyId;\r\n const selectedFamily = this.families.find(x => x.FamilyId == this.selectedFamilyId);\r\n if (selectedFamily) {\r\n this.onlineRegistrationService.parentType = selectedFamily.ParentType;\r\n }\r\n this.dialog.close(this.selectedFamilyId);\r\n } else {\r\n const err: ErrorList = new ErrorList();\r\n err.errorMsg = 'Please select your role';\r\n err.fieldName = 'Role';\r\n err.fieldRef = undefined;\r\n this.errors.push(err);\r\n }\r\n }\r\n\r\n radioChange(ctrl) {\r\n if (ctrl && ctrl.value) {\r\n this.selectedFamilyId = ctrl.value;\r\n this.onlineRegistrationService.familyId = this.selectedFamilyId;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {PortfolioFilter} from './portfolio-filter';\r\n\r\n@Pipe({\r\n name: 'filterPortfolio',\r\n pure: false\r\n})\r\n\r\nexport class FilterPortfolio implements PipeTransform {\r\n\r\n transform(portfolios, filter?: PortfolioFilter): any {\r\n return portfolios.filter(\r\n portfolio =>\r\n (filter.Name == undefined || portfolio.Name.toLowerCase().startsWith(filter.Name.toLowerCase()) || (filter.Name.startsWith('%') && portfolio.Name.toLowerCase().indexOf(filter.Name.substring(1).toLowerCase()) > -1)) &&\r\n (filter.Desc == undefined || portfolio.Description.toLowerCase().startsWith(filter.Desc.toLowerCase()) || (filter.Desc.startsWith('%') && portfolio.Description.toLowerCase().indexOf(filter.Desc.substring(1).toLowerCase()) > -1)) &&\r\n (filter.Category == undefined || portfolio.Category.toLowerCase().startsWith(filter.Category.toLowerCase()) || (filter.Category.startsWith('%') && portfolio.Category.toLowerCase().indexOf(filter.Category.substring(1).toLowerCase()) > -1)) &&\r\n (filter.Year == undefined || portfolio.AYIdentifier.toLowerCase().startsWith(filter.Year.toLowerCase()) || (filter.Year.startsWith('%') && portfolio.AYIdentifier.toLowerCase().indexOf(filter.Year.substring(1).toLowerCase()) > -1)) &&\r\n (filter.AddBy == undefined || portfolio.AddedBy.toLowerCase().startsWith(filter.AddBy.toLowerCase()) || (filter.AddBy.startsWith('%') && portfolio.AddedBy.toLowerCase().indexOf(filter.AddBy.substring(1).toLowerCase()) > -1)) &&\r\n (filter.FromDate == undefined || filter.FromDate == '' || new Date(portfolio.Added) >= new Date(filter.FromDate)) &&\r\n (filter.ToDate == undefined || filter.ToDate == '' || new Date(portfolio.Added) <= new Date(filter.ToDate))\r\n );\r\n }\r\n}\r\n","
\r\n Add Document\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n {{category.StuPortCategoryName}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n Please select a file\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","import {Component, OnInit, ViewChild} from '@angular/core';\r\nimport {PortfolioService} from '../portfolio.service';\r\nimport {AddFileComponent} from '../../../shared-components/controls/add-file/add-file.component';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport {Portfolio} from '../portfolio.model';\r\nimport {UserService} from '../../../shared-components/user/user.service';\r\nimport {StudentService} from '../../../shared-components/student/student.service';\r\nimport {YearService} from '../../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'app-add-portfolio-modal',\r\n templateUrl: './add-portfolio-modal.component.html',\r\n styleUrls: ['./add-portfolio-modal.component.css']\r\n})\r\nexport class AddPortfolioModalComponent implements OnInit {\r\n @ViewChild(AddFileComponent, { static: true }) addFile;\r\n addDocumentForm: FormGroup;\r\n category: number;\r\n fileError = false;\r\n description: string;\r\n portfolioCategories: any[];\r\n fileCategoryErrorMessage = 'Required Field';\r\n fileDescriptionErrorMessage = 'Required Field';\r\n\r\n constructor(private yearService: YearService, private portfolioService: PortfolioService, private userService: UserService, private studentService: StudentService, private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.addDocumentForm = new FormGroup({\r\n 'fileCategory': new FormControl(null, [\r\n Validators.required,\r\n ]),\r\n 'fileDescription': new FormControl(null, [\r\n Validators.required,\r\n ])\r\n });\r\n this.onChanges();\r\n this.portfolioService.getPortfolioCategories(this.userService.currentUser.Id).subscribe(res => {\r\n this.portfolioCategories = res;\r\n });\r\n }\r\n\r\n saveClick() {\r\n if (this.checkInputs()) {\r\n let fileSize = window.atob(this.addFile.fileString).length;\r\n let sizeUnit = 'bytes';\r\n if (fileSize > 1024) {\r\n fileSize = this.roundToTwo(fileSize / 1024);\r\n sizeUnit = 'KB';\r\n }\r\n if (fileSize > 1000) {\r\n fileSize = this.roundToTwo(fileSize / 1024);\r\n sizeUnit = 'MB';\r\n }\r\n // build of the portfolio object\r\n const portfolio: Portfolio = new Portfolio();\r\n portfolio.CategoryID = this.category;\r\n portfolio.StudentID = this.studentService.selectedStudent.Id;\r\n portfolio.Name = this.addFile.fileName;\r\n portfolio.Description = this.description;\r\n portfolio.FileBase64 = this.addFile.fileString;\r\n portfolio.FilePath = this.addFile.fileName;\r\n portfolio.AYIdentifier = this.yearService.student360Year.AYIdentifier;\r\n portfolio.AddedBy = this.userService.currentUser.MemberId.toString();\r\n portfolio.Size = fileSize;\r\n portfolio.SizeUnit = sizeUnit;\r\n // save to the database\r\n this.portfolioService.saveStudentPortfolio(portfolio).subscribe(res => {\r\n if (res.ok) {\r\n // Close the dialog\r\n this.dialogRef.close('Success');\r\n }\r\n });\r\n }\r\n }\r\n\r\n onChanges(): void {\r\n this.addDocumentForm.valueChanges.subscribe(val => {\r\n this.category = val['fileCategory'];\r\n this.description = val['fileDescription'];\r\n // check new Category\r\n if (this.addDocumentForm.controls.fileCategory.invalid) {\r\n if (this.addDocumentForm.controls.fileCategory.errors.hasOwnProperty('required')) {\r\n this.fileCategoryErrorMessage = 'Category is required';\r\n }\r\n }\r\n // Check Description\r\n if (this.addDocumentForm.controls.fileDescription.invalid) {\r\n if (this.addDocumentForm.controls.fileDescription.errors.hasOwnProperty('required')) {\r\n this.fileDescriptionErrorMessage = 'Description is required';\r\n }\r\n }\r\n });\r\n }\r\n\r\n checkInputs(): boolean {\r\n let isValid = true;\r\n if (this.fileCategory.invalid) {\r\n this.fileCategory.markAsTouched();\r\n this.fileCategory.markAsDirty();\r\n isValid = false;\r\n }\r\n if (this.fileDescription.invalid) {\r\n this.fileDescription.markAsTouched();\r\n this.fileDescription.markAsDirty();\r\n isValid = false;\r\n }\r\n if (!this.addFile.hasOwnProperty('fileName')) {\r\n this.fileError = true;\r\n isValid = false;\r\n } else {\r\n if (this.addFile.fileName == null) {\r\n this.fileError = true;\r\n isValid = false;\r\n } else {\r\n this.fileError = false;\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n get fileCategory() {\r\n return this.addDocumentForm.get('fileCategory');\r\n }\r\n\r\n get fileDescription() {\r\n return this.addDocumentForm.get('fileDescription');\r\n }\r\n\r\n addFileChanges(event) {\r\n // check if a file has been selected\r\n if (this.addFile.hasOwnProperty('fileName')) {\r\n this.fileError = false;\r\n }\r\n }\r\n\r\n roundToTwo(num) {\r\n return +(Math.round(Number(num + 'e+2')) + 'e-2');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-delete-modal',\r\n templateUrl: './delete-portfolio-modal.component.html',\r\n styleUrls: ['./delete-portfolio-modal.component.css']\r\n})\r\nexport class DeletePortfolioModalComponent implements OnInit {\r\n\r\n constructor(private dialogRef: MatDialogRef) {}\r\n\r\n ngOnInit() {\r\n }\r\n\r\n continueClick() {\r\n this.dialogRef.close('Yes');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","
\r\n Confirm Deletion\r\n
\r\n
\r\n
\r\n Are you sure you want to delete this portfolio document?\r\n
\r\n
\r\n
\r\n \r\n
\r\n","
\r\n Edit Document\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{category.StuPortCategoryName}}\r\n \r\n \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, Inject, OnInit, ViewChild} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\r\nimport {PortfolioService} from '../portfolio.service';\r\nimport {UserService} from '../../../shared-components/user/user.service';\r\nimport {TylFormFieldComponent} from '../../../shared-components/controls/tyl-form-field/tyl-form-field.component';\r\n\r\n@Component({\r\n selector: 'app-edit-portfolio-modal',\r\n templateUrl: './edit-portfolio-modal.component.html',\r\n styleUrls: ['./edit-portfolio-modal.component.css']\r\n})\r\nexport class EditPortfolioModalComponent implements OnInit {\r\n @ViewChild('fileCategoryInput', { static: true }) categoryInput: TylFormFieldComponent;\r\n document: any;\r\n editDocumentForm: FormGroup;\r\n category: number;\r\n description: string;\r\n portfolioCategories: any[];\r\n fileCategoryErrorMessage = 'Required Field';\r\n fileDescriptionErrorMessage = 'Required Field';\r\n constructor(private dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, private portfolioService: PortfolioService, private userService: UserService) { }\r\n\r\n ngOnInit() {\r\n this.document = this.data;\r\n this.editDocumentForm = new FormGroup({\r\n 'fileCategory': new FormControl(null, [\r\n Validators.required,\r\n ]),\r\n 'fileDescription': new FormControl(null, [\r\n Validators.required,\r\n ])\r\n });\r\n this.onChanges();\r\n this.portfolioService.getPortfolioCategories(this.userService.currentUser.Id).subscribe(res => {\r\n this.portfolioCategories = res;\r\n const category = this.portfolioCategories.findIndex(cat => cat.StuPortCategoryName == this.document.Category)\r\n this.fileCategory.setValue(this.portfolioCategories[category].StuPortCategory_ID);\r\n this.fileDescription.setValue(this.document.Description);\r\n });\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n if (this.checkInputs()) {\r\n this.document.AddedBy = this.userService.currentUser.MemberId;\r\n this.document.Category = this.portfolioCategories.find(cate => cate.StuPortCategory_ID == this.fileCategory.value).StuPortCategoryName;\r\n this.document.Description = this.description;\r\n this.document.CategoryID = this.fileCategory.value;\r\n // save to the database\r\n this.portfolioService.editStudentPortfolio(this.document).subscribe(res => {\r\n if (res.ok) {\r\n // Close the dialog\r\n this.dialogRef.close('Success');\r\n }\r\n });\r\n }\r\n }\r\n\r\n checkInputs(): boolean {\r\n let isValid = true;\r\n if (this.fileCategory.invalid) {\r\n this.fileCategory.markAsTouched();\r\n this.fileCategory.markAsDirty();\r\n isValid = false;\r\n }\r\n if (this.fileDescription.invalid) {\r\n this.fileDescription.markAsTouched();\r\n this.fileDescription.markAsDirty();\r\n isValid = false;\r\n }\r\n return isValid;\r\n }\r\n\r\n get fileCategory() {\r\n return this.editDocumentForm.get('fileCategory');\r\n }\r\n\r\n get fileDescription() {\r\n return this.editDocumentForm.get('fileDescription');\r\n }\r\n\r\n onChanges(): void {\r\n this.editDocumentForm.valueChanges.subscribe(val => {\r\n this.category = val['fileCategory'];\r\n this.description = val['fileDescription'];\r\n // check new Category\r\n if (this.editDocumentForm.controls.fileCategory.invalid) {\r\n if (this.editDocumentForm.controls.fileCategory.errors.hasOwnProperty('required')) {\r\n this.fileCategoryErrorMessage = 'Category is required';\r\n }\r\n }\r\n // Check Description\r\n if (this.editDocumentForm.controls.fileDescription.invalid) {\r\n if (this.editDocumentForm.controls.fileDescription.errors.hasOwnProperty('required')) {\r\n this.fileDescriptionErrorMessage = 'Description is required';\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","\r\n\r\nexport class PortfolioFilter {\r\n\r\n\t// Properties\r\n\tName = '';\r\n\tDesc = '';\r\n\tCategory = '';\r\n\tYear = '';\r\n\tAdded: Date = undefined;\r\n\tFromDate: any = undefined;\r\n\tToDate: any = undefined;\r\n\tAddBy = '';\r\n}","
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n No Student Portfolio data exists for this student.\r\n
\r\n\r\n
0\">\r\n \r\n\r\n \r\n \r\n Added\r\n \r\n \r\n \r\n {{getDateFormatted(portfolio.Added)}}\r\n \r\n \r\n\r\n \r\n \r\n Category\r\n \r\n \r\n \r\n {{portfolio.Category}}\r\n \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n \r\n {{portfolio.Description}}\r\n \r\n \r\n\r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n \r\n {{portfolio.Name}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Size\r\n \r\n \r\n \r\n {{round(portfolio.Size)}} {{portfolio.SizeUnit}}\r\n \r\n \r\n\r\n \r\n \r\n Year\r\n \r\n \r\n \r\n {{portfolio.AYIdentifier}}\r\n \r\n \r\n\r\n \r\n \r\n Added By\r\n \r\n \r\n \r\n {{portfolio.AddedBy}}\r\n \r\n \r\n\r\n \r\n \r\n Access History\r\n \r\n \r\n \r\n 0\" class=\"link\" (click)=\"studentAccessHistoryClick(SD)\">\r\n {{SD.RecentAccessHistory[0].LastName}}, {{SD.RecentAccessHistory[0].FirstName}} {{SD.RecentAccessHistory[0].TimeStamp | date:'MM/dd/yy h:mm a'}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n Filter\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\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, ViewChild, OnDestroy} from '@angular/core';\r\nimport {PortfolioService} from './portfolio.service';\r\nimport {SharedService} from '../../shared-components/shared.service';\r\nimport {StudentService} from '../../shared-components/student/student.service';\r\nimport {Portfolio} from './portfolio.model';\r\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSort } from '@angular/material/sort';\r\nimport {System} from '../../shared-components/System';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {FilterPortfolio} from './portfolio-filter.pipe';\r\nimport {UserService} from '../../shared-components/user/user.service';\r\nimport {AddPortfolioModalComponent} from './add-portfolio-modal/add-portfolio-modal.component';\r\nimport {formatDate} from '@angular/common';\r\nimport {TylerMatTableDataSource} from '../../shared-components/angular-material/extended.class';\r\nimport {DeletePortfolioModalComponent} from './delete-portfolio-modal/delete-portfolio-modal.component';\r\nimport {EditPortfolioModalComponent} from './edit-portfolio-modal/edit-portfolio-modal.component';\r\nimport {PortfolioFilter} from './portfolio-filter';\r\nimport {StudentDocumentAccessHistoryComponent} from '../student-documents/student-document-access-history/student-document-access-history.component';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'portfolio',\r\n providers: [PortfolioService],\r\n templateUrl: './portfolio.component.html',\r\n styleUrls: [\r\n './portfolio.component.css'\r\n ]\r\n})\r\nexport class PortfolioComponent implements OnDestroy {\r\n\r\n studentPortfolios;\r\n isStaffMember = false;\r\n portfolioFilter = new PortfolioFilter();\r\n previousPortfolioFilter = new PortfolioFilter();\r\n columnsToDisplay = ['Added', 'Category', 'Description', 'FileName', 'Size', 'Year', 'AddBy', 'RecentAccessHistory'];\r\n portfolioSource = new TylerMatTableDataSource();\r\n filterPortfolio = new FilterPortfolio();\r\n showFilter: boolean = false;\r\n clearFilterEvent = new EventEmitter();\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this.portfolioSource.sort = value;\r\n this.portfolioSource.sortingDataAccessor = (item: any, property: string) => {\r\n\r\n if (property == 'Added') {\r\n return new Date(item.Added).getTime();\r\n } else {\r\n return this.portfolioSource.defaultSortingAccessor(item, property);\r\n }\r\n };\r\n }\r\n\r\n constructor(\r\n private portfolioService: PortfolioService,\r\n private sharedService: SharedService,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private userService: UserService\r\n ) {\r\n if (this.userService.userType == 1 && this.userService.selectedStudentInfoPortal == undefined) {\r\n this.isStaffMember = true;\r\n if (this.isStaffMember) {\r\n // If Staff add new column Actions\r\n this.columnsToDisplay.push('Actions');\r\n }\r\n }\r\n this.studentService.selectedStudentStream$.subscribe(student => {\r\n this.studentPortfolios = undefined;\r\n this.getPortfolios();\r\n });\r\n }\r\n\r\n getPortfolios() {\r\n this.portfolioService.getPortfolios(this.studentService.selectedStudent.Id).subscribe(data => {\r\n this.studentPortfolios = data;\r\n this.portfolioSource.data = this.studentPortfolios;\r\n this.filterChanged();\r\n });\r\n }\r\n\r\n filterChanged() {\r\n this.portfolioSource.data = this.filterPortfolio.transform(this.studentPortfolios, this.portfolioFilter);\r\n }\r\n\r\n classFiltered() {\r\n if ((this.portfolioFilter.Name != undefined && this.portfolioFilter.Name.length > 0) ||\r\n (this.portfolioFilter.Desc != undefined && this.portfolioFilter.Desc.length > 0) ||\r\n (this.portfolioFilter.Category != undefined && this.portfolioFilter.Category.length > 0) ||\r\n (this.portfolioFilter.Year != undefined && this.portfolioFilter.Year.length > 0) ||\r\n this.portfolioFilter.FromDate != undefined || this.portfolioFilter.ToDate != undefined || this.portfolioFilter.Added ||\r\n (this.portfolioFilter.AddBy != undefined && this.portfolioFilter.AddBy.length > 0)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n showFilterClick() {\r\n this.showFilter = !this.showFilter;\r\n this.previousPortfolioFilter = JSON.parse(JSON.stringify(this.portfolioFilter));\r\n }\r\n\r\n addClick() {\r\n this.dialog.open(AddPortfolioModalComponent, {\r\n minWidth: 300,\r\n minHeight: 200,\r\n disableClose: true,\r\n autoFocus: false\r\n }).afterClosed().subscribe(result => {\r\n if (result == 'Success') {\r\n this.getPortfolios();\r\n }\r\n });\r\n }\r\n\r\n isEven(rowId: number) {\r\n return (rowId % 2) == 0;\r\n }\r\n\r\n clearFilter(fromFooter) {\r\n this.portfolioFilter = new PortfolioFilter();\r\n this.portfolioSource.filters = [];\r\n if (!fromFooter) {\r\n } else {\r\n this.portfolioSource.removeAllFilters();\r\n this.clearFilterEvent.emit();\r\n }\r\n this.filterChanged();\r\n }\r\n\r\n closeFilter() {\r\n this.showFilter = false;\r\n }\r\n\r\n viewPortfolio(portfolio: Portfolio) {\r\n // Audit document view if parent/contact\r\n if (this.userService.userType == 2) {\r\n this.portfolioService.auditStudentPortfolioDocument(portfolio.Id).subscribe(res => {\r\n System.viewFileFromBase(portfolio.FileBase64, portfolio.FileMimeType, portfolio.FilePath);\r\n // Get the portfolios again because the audit history changed\r\n this.getPortfolios();\r\n });\r\n } else {\r\n System.viewFileFromBase(portfolio.FileBase64, portfolio.FileMimeType, portfolio.FilePath);\r\n }\r\n }\r\n\r\n getDateFormatted(date) {\r\n return formatDate(date, 'MM/dd/yy', 'en-US');\r\n }\r\n\r\n editPortfolioDocumentClick(document) {\r\n this.dialog.open(EditPortfolioModalComponent, {\r\n minWidth: 520,\r\n minHeight: 200,\r\n data: document,\r\n disableClose: true,\r\n autoFocus: false\r\n }).afterClosed().subscribe(result => {\r\n if (result == 'Success') {\r\n this.getPortfolios();\r\n }\r\n });\r\n }\r\n\r\n deletePortfolioDocumentClick(document) {\r\n document.AddedBy = this.userService.currentUser.MemberId;\r\n this.dialog.open(DeletePortfolioModalComponent, {\r\n minWidth: 520,\r\n minHeight: 200,\r\n disableClose: true,\r\n autoFocus: false\r\n }).afterClosed().subscribe(result => {\r\n if (result == 'Yes') {\r\n this.portfolioService.deleteStudentPortfolio(document).subscribe(res => {\r\n if (res.ok) {\r\n this.getPortfolios();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n studentAccessHistoryClick(row) {\r\n const dialogRef = this.dialog.open(StudentDocumentAccessHistoryComponent, {\r\n disableClose: true,\r\n autoFocus: false,\r\n data: {AccessHistory: row.RecentAccessHistory}\r\n });\r\n }\r\n\r\n round(num: number) {\r\n return Math.round(num);\r\n }\r\n}\r\n","export class Portfolio {\r\n Id: number;\r\n Category: string;\r\n CategoryID: number;\r\n StudentID: number;\r\n Name: string;\r\n Description: string;\r\n Size: any;\r\n SizeUnit: string;\r\n SortSize: number;\r\n AYIdentifier: string;\r\n Added: string;\r\n AddedBy: string;\r\n FileBase64: string;\r\n FileMimeType: string;\r\n FilePath: string;\r\n RecentAccessHistory: string;\r\n}\r\n","import {System} from './../../shared-components/System';\r\nimport {Injectable} from '@angular/core';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {Observable} from 'rxjs';\r\nimport {YearService} from '../../shared-components/year/year.service';\r\nimport {Portfolio} from './portfolio.model';\r\nimport {StudentService} from '../../shared-components/student/student.service';\r\n\r\n@Injectable()\r\nexport class PortfolioService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private yearService: YearService,\r\n private studentService: StudentService\r\n ) {\r\n }\r\n\r\n getPortfolios(studentId): Observable {\r\n return this.http.get(System.apiURL.Student + 'GetStudentPortfolios?studentId=' + studentId + '&yearId=' + this.yearService.student360Year.Id);\r\n }\r\n\r\n saveStudentPortfolio(document: Portfolio): Observable {\r\n return this.studentService.saveStudentPortfolio(document);\r\n }\r\n\r\n auditStudentPortfolioDocument(id: number): Observable {\r\n return this.http.post(System.apiURL.Student + `AuditStudentPortfolioDocument?StuPortDocs_ID=${id}`, {observe: 'response'});\r\n }\r\n\r\n getPortfolioCategories(Login_Id): Observable {\r\n return this.http.get(System.apiURL.Student + `GetStudentPortfolioCategories?Login_ID=${Login_Id}`);\r\n }\r\n\r\n editStudentPortfolio(document: Portfolio): Observable {\r\n return this.http.post(System.apiURL.Student + `EditStudentPortfolio`, document, {observe: 'response'});\r\n }\r\n\r\n deleteStudentPortfolio(document: Portfolio): Observable {\r\n return this.http.post(System.apiURL.Student + `DeleteStudentPortfolio`, document, {observe: 'response'});\r\n }\r\n}\r\n","export class ProgramsAndServicesFilter {\r\n\tentryDateStart: Date = undefined;\r\n\tentryDateEnd: Date = undefined;\r\n\texitDateStart: Date = undefined;\r\n\texitDateEnd: Date = undefined;\r\n\tprogramName = '';\r\n\tserviceName = '';\r\n\tshown = 1;\r\n\tonThisDate: Date = undefined;\r\n}\r\n","
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n
\r\n No Programs and Services data for student.\r\n
\r\n\r\n \r\n 0\"\r\n matSort matSortDisableClear matSortActive=\"ProgramName\" matSortDirection=\"asc\"\r\n multiTemplateDataRows>\r\n\r\n \r\n \r\n \r\n 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 Program Name\r\n \r\n \r\n \r\n \r\n {{programAndService.ProgramName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Service Name\r\n \r\n \r\n \r\n \r\n {{programAndService.ServiceName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Entry Date\r\n \r\n \r\n \r\n \r\n {{programAndService.EntryDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Exit Date\r\n \r\n \r\n \r\n \r\n {{programAndService.ExitDate.toDateString() != junkDate.toDateString() ?\r\n (programAndService.ExitDate | date: 'MM/dd/yy') : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{programAndService.hasCommentsString}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{programAndService.hasAttachmentsString}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n

Service Details

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

Comments

\r\n
\r\n {{programAndService.Comments}}
\r\n
\r\n\r\n \r\n \r\n

Attachments

\r\n\r\n \r\n \r\n\r\n \r\n \r\n Name\r\n \r\n \r\n \r\n {{programAndServiceAttachment.AttachmentFileName}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n Description\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentDescription}}\r\n \r\n \r\n\r\n \r\n \r\n Added\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentAddedOn | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Added By\r\n \r\n \r\n {{programAndServiceAttachment.AttachmentAddedBy}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{firstDetail.FieldValue}}\r\n \r\n \r\n \r\n \r\n \r\n {{secondDetail.FieldValue}}\r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n
\r\n Filter\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\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 { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from './../../shared-components/angular-material/mat-animations';\r\nimport { System } from './../../shared-components/System';\r\nimport { Component, OnInit, OnDestroy, EventEmitter, ViewChild, TemplateRef, ChangeDetectorRef } from '@angular/core';\r\nimport { ProgramsAndServicesService } from './programs-and-services.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { ProgramAndService } from './programs-and-services.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { ProgramsAndServicesFilter } from './programs-and-services-filter';\r\n\r\n@Component({\r\n\tselector: 'app-programs-and-services',\r\n\ttemplateUrl: './programs-and-services.component.html',\r\n\tstyleUrls: [\r\n\t\t'./programs-and-services.component.css'\r\n\t],\r\n\tanimations: [\r\n\t\tdetailExpand\r\n\t]\r\n})\r\nexport class ProgramsAndServicesComponent implements OnInit, OnDestroy {\r\n\r\n\t// Properties\r\n\tprivate _sort: MatSort;\r\n\t@ViewChild('filterMenu', { read: TemplateRef }) filterMenu: TemplateRef;\r\n\tsubscriptions: Subscription[] = [];\r\n\tprogramsAndServices: ProgramAndService[];\r\n\ttableData = new TylerMatTableDataSource();\r\n\tselectedRow: ProgramAndService;\r\n\tcolumns = ['More', 'ProgramName', 'ServiceName', 'EntryDate', 'ExitDate', 'Comments', 'Attachments'];\r\n\tjunkDate = new Date('0001-01-01T00:00:00');\r\n\ttoggleAllRows: EventEmitter = new EventEmitter();\r\n\tgridHeight = 0;\r\n\texpanded: { [key: number]: boolean } = {};\r\n\tshowFilter = false;\r\n\tfilter: ProgramsAndServicesFilter;\r\n\tpreviousFilter: ProgramsAndServicesFilter;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate programsAndServicesService: ProgramsAndServicesService,\r\n\t\tprivate studentService: StudentService,\r\n\t\tprivate yearService: YearService,\r\n\t\tprivate sharedService: SharedService,\r\n\t\tprivate changeDetector: ChangeDetectorRef\r\n\t) {\r\n\r\n\t}\r\n\r\n\tget sort(): MatSort {\r\n\t\treturn this._sort;\r\n\t}\r\n\r\n\t@ViewChild(MatSort) set sort(value: MatSort) {\r\n\t\tthis._sort = value;\r\n\t\tif (this.tableData) {\r\n\t\t\tthis.tableData.sort = this._sort;\r\n\t\t}\r\n\t}\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\t// POST: initializes and obtains the necessary data\r\n\r\n\t\t// Initializing data\r\n\t\tthis.filter = new ProgramsAndServicesFilter();\r\n\t\tthis.previousFilter = new ProgramsAndServicesFilter();\r\n\t\tthis.filter.shown = 0;\r\n\t\tthis.previousFilter.shown = 0;\r\n\t\tif (this.studentService.selectedProgramName && this.studentService.selectedServiceName) {\r\n\t\t\tthis.filter.programName = this.studentService.selectedProgramName;\r\n\t\t\tthis.filter.serviceName = this.studentService.selectedServiceName;\r\n\r\n\t\t\tthis.studentService.selectedProgramName = '';\r\n\t\t\tthis.studentService.selectedServiceName = '';\r\n\t\t}\r\n\r\n\t\t// Getting data\r\n\t\tthis.getProgramsAndServices();\r\n\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.studentService.selectedStudentStream$.subscribe(() => {\r\n\t\t\t\tthis.getProgramsAndServices();\r\n\t\t\t}),\r\n\t\t\tthis.toggleAllRows.subscribe(toggle => {\r\n\t\t\t\tthis.tableData.expandAll(toggle);\r\n\t\t\t}),\r\n\t\t\tthis.yearService.observableStudent360YearStream$.subscribe(() => {\r\n\t\t\t\tthis.getProgramsAndServices();\r\n\t\t\t}),\r\n\t\t\tthis.studentService.observableSelectedProgramAndServiceStream.subscribe(() => {\r\n\t\t\t\tif (this.studentService.selectedProgramName && this.studentService.selectedServiceName) {\r\n\t\t\t\t\tthis.filter.programName = this.studentService.selectedProgramName;\r\n\t\t\t\t\tthis.filter.serviceName = this.studentService.selectedServiceName;\r\n\r\n\t\t\t\t\tthis.studentService.selectedProgramName = '';\r\n\t\t\t\t\tthis.studentService.selectedServiceName = '';\r\n\r\n\t\t\t\t\tthis.tableData.removeAllFilters();\r\n\t\t\t\t\tthis.applyFilter();\r\n\t\t\t\t\tthis.changeDetector.detectChanges();\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t);\r\n\r\n\t\tthis.tableData.sort = this.sort;\r\n\t}\r\n\r\n\tngOnDestroy() {\r\n\t\t// POST: ends all subscriptions\r\n\t\tthis.subscriptions.forEach(subscription => {\r\n\t\t\tsubscription.unsubscribe();\r\n\t\t});\r\n\t}\r\n\r\n\topenFilter() {\r\n\t\tthis.showFilter = !this.showFilter;\r\n\t}\r\n\r\n\tclearFilter() {\r\n\t\t// PRE: the user clicks on the clear button in the filter\r\n\t\t// POST: clears the filter data and DOES NOT CLOSE THE FILTER\r\n\t\tlet getNewData = false;\r\n\t\tif (this.filter.shown != new ProgramsAndServicesFilter().shown) {\r\n\t\t\tgetNewData = true;\r\n\t\t}\r\n\t\tObject.assign(this.filter, new ProgramsAndServicesFilter());\r\n\t\tif (getNewData) {\r\n\t\t\tthis.getProgramsAndServices();\r\n\t\t} else {\r\n\t\t\tthis.applyFilter();\r\n\t\t}\r\n\t\tthis.changeDetector.detectChanges();\r\n\t}\r\n\r\n\tclearFilterFromNotice() {\r\n\t\t// PRE: the user clicks the clear filter link from the notice on the footer\r\n\t\t// POTS: clears the footer and resets ALL of the values (because the filter isn't open)\r\n\t\tlet getNewData = false;\r\n\t\tif (this.filter.shown != new ProgramsAndServicesFilter().shown) {\r\n\t\t\tgetNewData = true;\r\n\t\t}\r\n\t\tObject.assign(this.filter, new ProgramsAndServicesFilter());\r\n\t\tthis.tableData.removeAllFilters();\r\n\t\tif (getNewData) {\r\n\t\t\tthis.getProgramsAndServices();\r\n\t\t} else {\r\n\t\t\tthis.applyFilter();\r\n\t\t}\r\n\t\tthis.changeDetector.detectChanges();\r\n\t}\r\n\r\n\tcloseFilter() {\r\n\t\tthis.openFilter();\r\n\t}\r\n\r\n\t// Methods\r\n\tisFiltered() {\r\n\t\t// POST: returns true if the data is being panelFiltered\r\n\t\tif (this.filter.entryDateStart && this.filter.entryDateStart.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.entryDateStart = undefined;\r\n\t\t}\r\n\t\tif (this.filter.entryDateEnd && this.filter.entryDateEnd.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.entryDateEnd = undefined;\r\n\t\t}\r\n\t\tif (this.filter.exitDateStart && this.filter.exitDateStart.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.exitDateStart = undefined;\r\n\t\t}\r\n\t\tif (this.filter.exitDateEnd && this.filter.exitDateEnd.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.exitDateEnd = undefined;\r\n\t\t}\r\n\t\treturn !System.isEqual(this.filter, new ProgramsAndServicesFilter()) || this.tableData.isFiltered();\r\n\t}\r\n\r\n\ttoggleExpanded(rowId: number) {\r\n\t\t// POST: toggles the expansion of that row\r\n\t\tthis.expanded[rowId] = !this.expanded[rowId];\r\n\t}\r\n\r\n\tgetProgramsAndServices() {\r\n\t\t// POST: uses the services to get programs and services, returning the observable\r\n\t\tthis.subscriptions.push(\r\n\t\t\tthis.programsAndServicesService.getProgramsAndServices(this.filter.shown).subscribe(programsAndServices => {\r\n\t\t\t\tthis.programsAndServices = [];\r\n\t\t\t\tprogramsAndServices.forEach(programAndService => {\r\n\t\t\t\t\tfor (let i = 0; i < programAndService.Attachments.length; i++) {\r\n\t\t\t\t\t\tprogramAndService.Attachments[i] = System.convert(programAndService.Attachments[i], new Attachment());\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.programsAndServices.push(System.convert(programAndService, new ProgramAndService()));\r\n\t\t\t\t});\r\n\t\t\t\tsetTimeout(\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tthis.tableData.data = this.programsAndServices;\r\n\t\t\t\t\t\tthis.applyFilter();\r\n\t\t\t\t\t\tthis.expanded = {};\r\n\t\t\t\t\t\tif (this.sort) {\r\n\t\t\t\t\t\t\tthis.tableData.sort = this.sort;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\t0\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tviewAttachment(attachment: Attachment) {\r\n\t\t// PRE: an attachment to view\r\n\t\t// POST: goes to view that attachment\r\n\t\tif (attachment.DocumentMimeType == 'application/vnd.openxmlformats-officedocument.word') {\r\n\t\t\tSystem.saveFile(attachment.DocumentBase64, attachment.DocumentMimeType, attachment.DocumentName);\r\n\t\t} else {\r\n\t\t\tSystem.viewFileFromId(attachment.AttachmentId, attachment.AttachmentFileName);\r\n\t\t}\r\n\t}\r\n\r\n\thasDetails(programAndService: ProgramAndService): boolean {\r\n\t\t// POST: returns true if the program and service has details\r\n\t\treturn programAndService.Comments != '' ||\r\n\t\t\t(programAndService.Attachments && programAndService.Attachments.length > 0) ||\r\n\t\t\t(programAndService.ProgramAndServicesDetail && programAndService.ProgramAndServicesDetail.length > 0);\r\n\t}\r\n\r\n\tapplyFilter() {\r\n\t\t// POST: applies the filter to the data\r\n\t\tlet data = this.programsAndServices;\r\n\r\n\t\t// Entry Date\r\n\t\tif (this.filter.entryDateStart && this.filter.entryDateStart.toString() != 'Invalid Date') {\r\n\t\t\tSystem.roundDateDown(this.filter.entryDateStart);\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.EntryDate >= this.filter.entryDateStart\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (this.filter.entryDateEnd && this.filter.entryDateEnd.toString() != 'Invalid Date') {\r\n\t\t\tSystem.roundDateUp(this.filter.entryDateEnd);\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.EntryDate <= this.filter.entryDateEnd\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Exit Date\r\n\t\tif (this.filter.exitDateStart && this.filter.exitDateStart.toString() != 'Invalid Date') {\r\n\t\t\tSystem.roundDateDown(this.filter.exitDateStart);\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.ExitDate >= this.filter.exitDateStart\r\n\t\t\t);\r\n\t\t}\r\n\t\tif (this.filter.exitDateEnd && this.filter.exitDateEnd.toString() != 'Invalid Date') {\r\n\t\t\tSystem.roundDateUp(this.filter.exitDateEnd);\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.ExitDate <= this.filter.exitDateEnd\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Program Name\r\n\t\tif (this.filter.programName) {\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.ProgramName.toLowerCase().includes(this.filter.programName.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Service Name\r\n\t\tif (this.filter.serviceName) {\r\n\t\t\tdata = data.filter(datum =>\r\n\t\t\t\tdatum.ServiceName.toLowerCase().includes(this.filter.serviceName.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// NOTE: Show is handled by getProgramsAndServices\r\n\r\n\t\t// Setting the table data\r\n\t\tthis.tableData.data = data;\r\n\t}\r\n\r\n\t// These were created from a misunderstanding of ARIA but have been kept in in case they could become useful\r\n\tprogramAndServiceAriaLabel(programAndService: ProgramAndService): string {\r\n\t\t// PRE: a program and service to generate an aria label for\r\n\t\t// POST: creates the aria label for a program and service's table row\r\n\t\treturn 'Program ' + programAndService.ProgramName + ' and service ' + programAndService.ServiceName + '. ' +\r\n\t\t\t'Entry date ' + programAndService.EntryDate.toDateString() +\r\n\t\t\t(programAndService.ExitDate.toDateString() != this.junkDate.toDateString() ? ' and exit date ' + programAndService.ExitDate.toDateString() + '. ' : '. ') +\r\n\t\t\t(programAndService.Comments.length > 0 ? 'Service has comments. ' : 'Service does not have comments. ') +\r\n\t\t\t(programAndService.Attachments.length > 0 ? 'Service has attachments. ' : 'Service does not have attachments. ') +\r\n\t\t\t(this.hasDetails(programAndService) ? 'Press enter to see details.' : '');\r\n\t}\r\n\r\n\tprogramAndServiceDetailAttachmentsAriaLabel(attachment: Attachment): string {\r\n\t\t// PRE: a program and service detail to generate an aria label for\r\n\t\t// POST: creates the aria label for the program and service detail's attachment's table row\r\n\t\treturn 'Attachment ' + attachment.AttachmentFileName + '. ' +\r\n\t\t\t'Attachment Description: ' + attachment.AttachmentDescription + '. ' +\r\n\t\t\t'Attachment Added on: ' + attachment.AttachmentAddedOn.toDateString() + '. ' +\r\n\t\t\t'Attachment Added by: ' + attachment.AttachmentAddedBy + '. ' +\r\n\t\t\t'Press enter to view attachment.';\r\n\t}\r\n}\r\n","import { Attachment } from '../../shared-components/models/attachment.model';\r\nimport { ProgramAndServiceDetail } from './programs-and-services-detail.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport * as moment from 'moment';\r\n\r\nexport class ProgramAndService {\r\n\r\n // Properties\r\n id: number;\r\n Attachments: Attachment[];\r\n Comments: string;\r\n EntryDate = new Date(System.junkDateString);\r\n ExitDate = new Date(System.junkDateString);\r\n Id: number;\r\n ProgramAndServicesDetail: ProgramAndServiceDetail[];\r\n ProgramName: string;\r\n Sequence: number;\r\n ServiceName: string;\r\n private _sortedDetails: ProgramAndServiceDetail[];\r\n ProgramCodeId: number;\r\n ServiceCodeId: number;\r\n StudentId: number;\r\n FirstName = '';\r\n LastName = '';\r\n MiddleName = '';\r\n NickName = '';\r\n StudentNumber = '';\r\n EnrollmentStatus = '';\r\n UserHasEditPermission = false;\r\n UserHasDeletePermission = false;\r\n // Selected Student for massupdate\r\n Students: Student[] = [];\r\n\r\n checked: false;\r\n\r\n // Class Functions\r\n get hasComments(): boolean {\r\n return this.Comments != null && this.Comments != undefined && this.Comments.length > 0;\r\n }\r\n\r\n get hasCommentsString(): string {\r\n return this.hasComments ? 'Y' : '';\r\n }\r\n\r\n get hasAttachments(): boolean {\r\n return this.Attachments != null && this.Attachments != undefined && this.Attachments.length > 0;\r\n }\r\n\r\n get hasAttachmentsString(): string {\r\n return this.hasAttachments ? 'Y' : '';\r\n }\r\n\r\n get detailsBySequence(): ProgramAndServiceDetail[] {\r\n if (!this._sortedDetails) {\r\n this._sortedDetails = this.ProgramAndServicesDetail.sort((a, b) => {\r\n return a.Sequence - b.Sequence;\r\n });\r\n }\r\n return this._sortedDetails;\r\n }\r\n\r\n get entryDateChanged() {\r\n return !( // There are a lot of different values that count as null...for some reason\r\n (\r\n !this.OldEntryDate\r\n || this.OldEntryDate.toString() == ''\r\n || moment(this.OldEntryDate).format('MM/DD/YYYY') == '01/01/0001'\r\n ) && (\r\n !this.EntryDate\r\n || this.EntryDate.toString() == ''\r\n || moment(this.EntryDate).format('MM/DD/YYYY') == '01/01/0001'\r\n )\r\n )\r\n && !(\r\n this.OldEntryDate\r\n && this.EntryDate\r\n && moment(this.OldEntryDate).format('MM/DD/YYYY') == moment(this.EntryDate).format('MM/DD/YYYY')\r\n );\r\n }\r\n\r\n get exitDateChanged() {\r\n return !( // There are a lot of different values that count as null...for some reason\r\n (\r\n !this.OldExitDate\r\n || this.OldExitDate.toString() == ''\r\n || moment(this.OldExitDate).format('MM/DD/YYYY') == '01/01/0001'\r\n ) && (\r\n !this.ExitDate\r\n || this.ExitDate.toString() == ''\r\n || moment(this.ExitDate).format('MM/DD/YYYY') == '01/01/0001'\r\n )\r\n )\r\n && !(\r\n this.OldExitDate\r\n && this.ExitDate\r\n && moment(this.OldExitDate).format('MM/DD/YYYY') == moment(this.ExitDate).format('MM/DD/YYYY')\r\n );\r\n }\r\n\r\n\r\n // Non DTO\r\n OldEntryDate = new Date(System.junkDateString);\r\n OldExitDate = new Date(System.junkDateString);\r\n EntryDateBackGroungColor = '';\r\n ExitDateBackGroungColor = '';\r\n IsAttachment: string;\r\n IsAttachmentAsBoolean: boolean;\r\n StudentName: string;\r\n IsEdited: boolean;\r\n}\r\n","import {System} from './../../shared-components/System';\r\nimport {Injectable} from '@angular/core';\r\nimport {YearService} from '../../shared-components/year/year.service';\r\nimport {StudentService} from '../../shared-components/student/student.service';\r\nimport {ProgramAndService} from './programs-and-services.model';\r\nimport {HttpClient} from '@angular/common/http';\r\nimport {SharedService} from '../../shared-components/shared.service';\r\n\r\n@Injectable()\r\nexport class ProgramsAndServicesService {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor(\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private http: HttpClient,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n // Event Functions\r\n\r\n // Methods\r\n getProgramsAndServices(viewOption = 0) {\r\n // POST: obtains the programs and services for the student in the selected year\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&siteYearId=' + this.studentService.studentEnrollment.SiteYearId +\r\n '&viewOption=' + viewOption;\r\n return this.http.get(System.apiURL.Student + 'GetProgramAndServices' + queryString);\r\n }\r\n}\r\n","\r\nexport class ScheduleHistoryModel {\r\n STUDENTNAME: string;\r\n STUDENTID: string;\r\n COURSECODE: string;\r\n COURSE: string;\r\n SECTION: string;\r\n TERM: string;\r\n TEACHER: string;\r\n SCHOOLENTRY: string;\r\n SCHOOLEXIT: string;\r\n CLASSENTRY: string;\r\n CLASSEXIT: string;\r\n USERNAME: string;\r\n LASTUPDATEDDATE: string;\r\n PERIOD: string;\r\n}\r\n\r\nexport class ScheduleHistorySearchModel {\r\n classEntryDateFrom: string;\r\n classEntryDateTo: string;\r\n classExitDateFrom: string;\r\n classExitDateTo: string;\r\n lastName: string;\r\n firstName: string;\r\n studentNumber: string;\r\n studentListId: number;\r\n studentTeamId: number;\r\n counselorId: number;\r\n\r\n constructor(studentNumber: string) {\r\n this.classEntryDateFrom = '';\r\n this.classEntryDateTo = '';\r\n this.classExitDateFrom = '';\r\n this.classExitDateTo = '';\r\n this.lastName = '';\r\n this.firstName = '';\r\n this.studentNumber = studentNumber;\r\n this.studentListId = -1;\r\n this.studentTeamId = -1;\r\n this.counselorId = -1;\r\n }\r\n}\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { System } from '../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { ScheduleHistoryModel, ScheduleHistorySearchModel } from './schedule-history.model';\r\nimport { formatDate } from '@angular/common';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScheduleHistoryService {\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n getCourseChangeHistory(siteId: number, yearId: number, scheduleHistorySearchModel: ScheduleHistorySearchModel): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&addFromDate=' + scheduleHistorySearchModel.classEntryDateFrom +\r\n '&addToDate=' + scheduleHistorySearchModel.classEntryDateTo +\r\n '&dropFromDate=' + scheduleHistorySearchModel.classExitDateFrom +\r\n '&dropToDate=' + scheduleHistorySearchModel.classExitDateTo +\r\n '&lastName=' + scheduleHistorySearchModel.lastName +\r\n '&firstName=' + scheduleHistorySearchModel.firstName +\r\n '&studentNumber=' + scheduleHistorySearchModel.studentNumber +\r\n '&studentListId=' + scheduleHistorySearchModel.studentListId +\r\n '&studentTeamId=' + scheduleHistorySearchModel.studentTeamId +\r\n '&counselorId=' + scheduleHistorySearchModel.counselorId ;\r\n return this.http.get(System.apiURL.Student + 'GetCourseChangeHistory' + queryString);\r\n }\r\n}\r\n","\r\n\r\n \r\n \r\n\r\n\r\n\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Class Entry Date\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Class Exit Date\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n {{studentList.Name}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{team.StudentTeamName}}\r\n \r\n \r\n \r\n \r\n \r\n {{c.NAME}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Student\r\n \r\n \r\n \r\n \r\n {{data.STUDENTNAME}}\r\n \r\n \r\n \r\n \r\n Student #\r\n \r\n \r\n \r\n \r\n {{data.STUDENTID}}\r\n \r\n \r\n \r\n \r\n Course Name\r\n \r\n \r\n \r\n \r\n {{data.COURSE}}\r\n \r\n \r\n \r\n \r\n Course #\r\n \r\n \r\n \r\n \r\n {{data.COURSECODE}}\r\n \r\n \r\n \r\n \r\n Section\r\n \r\n \r\n \r\n \r\n {{data.SECTION}}\r\n \r\n \r\n \r\n \r\n Period\r\n \r\n \r\n \r\n \r\n {{data.PERIOD}}\r\n \r\n \r\n \r\n \r\n Term\r\n \r\n \r\n \r\n \r\n {{data.TERM}}\r\n \r\n \r\n \r\n \r\n Teacher\r\n \r\n \r\n \r\n \r\n {{data.TEACHER}}\r\n \r\n \r\n \r\n \r\n School Entry\r\n \r\n \r\n \r\n \r\n {{data.SCHOOLENTRY}}\r\n \r\n \r\n \r\n \r\n School Exit\r\n \r\n \r\n \r\n \r\n {{data.SCHOOLEXIT}}\r\n \r\n \r\n \r\n \r\n Class Entry\r\n \r\n \r\n \r\n \r\n {{data.CLASSENTRY}}\r\n \r\n \r\n \r\n \r\n Class Exit\r\n \r\n \r\n \r\n \r\n {{data.CLASSEXIT}}\r\n \r\n \r\n \r\n \r\n User\r\n \r\n \r\n \r\n \r\n {{data.USERNAME}}\r\n \r\n \r\n \r\n \r\n Last Updated\r\n \r\n \r\n \r\n \r\n {{data.LASTUPDATEDDATE}}\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 { formatDate } from '@angular/common';\r\nimport { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TeamsService } from '../../admin360/student-info/teams/teams.service';\r\nimport { StudentList } from '../../classroom360/student-lists/student-list.model';\r\nimport { StudentListsService } from '../../classroom360/student-lists/student-lists.service';\r\nimport { StudentTeams } from '../../classroom360/student-teams/student-teams.model';\r\nimport { StaffRolesLookup } from '../../management360/staff/staff.model';\r\nimport { StaffService } from '../../management360/staff/staff.service';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { EnterCsvDialogComponent } from '../../shared-components/enter-csv-dialog/enter-csv-dialog.component';\r\nimport { StudentSearchCriteria } from '../../shared-components/student-search/student-search-criteria.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { ScheduleHistoryModel, ScheduleHistorySearchModel } from './schedule-history.model';\r\nimport { ScheduleHistoryService } from './schedule-history.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-schedule-history',\r\n templateUrl: './schedule-history.component.html',\r\n styleUrls: ['./schedule-history.component.css']\r\n})\r\nexport class ScheduleHistoryComponent implements OnInit, OnDestroy {\r\n defaultYearSubscription: Subscription;\r\n selectedStudentSubscription: Subscription;\r\n scheduleHistorySearchModel: ScheduleHistorySearchModel;\r\n scheduleHistoryModel: ScheduleHistoryModel[] = [];\r\n studentNumberRegExp = /^[^\\s,]+(,[^\\s,]+)*$/;\r\n studentNumberKeyRestriction = /[^\\s,]|,/;\r\n subscriptions: Subscription[] = [];\r\n studentLists: StudentList[] = [];\r\n teams: StudentTeams[] = [];\r\n counselor: StaffRolesLookup[] = [];\r\n multipleStudent: boolean;\r\n private _studentList: StudentList = null;\r\n errors: ErrorList[] = [];\r\n defaultYear: Year;\r\n schoolId: number;\r\n searchCriteria: StudentSearchCriteria;\r\n public schedule: ScheduleHistoryModel;\r\n angularMatData = new TylerMatTableDataSource();\r\n columnsToDisplay = ['COURSE', 'COURSECODE', 'SECTION', 'PERIOD', 'TERM', 'TEACHER', 'SCHOOLENTRY', 'SCHOOLEXIT', 'CLASSENTRY', 'CLASSEXIT', 'USERNAME', 'LASTUPDATEDDATE'];\r\n\r\n classEntryDateFrom: ElementRef;\r\n classEntryDateTo: ElementRef;\r\n classExitDateFrom: ElementRef;\r\n classExitDateTo: ElementRef;\r\n\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n\r\n constructor(\r\n private router: Router,\r\n private scheduleHistoryService: ScheduleHistoryService,\r\n private dialog: MatDialog,\r\n private studentListsService: StudentListsService,\r\n private yearService: YearService,\r\n private teamsService: TeamsService,\r\n private counselorService: StaffService,\r\n private studentService: StudentService\r\n ) {\r\n this.multipleStudent = true;\r\n this.scheduleHistorySearchModel = new ScheduleHistorySearchModel('');\r\n\r\n this.defaultYear = this.yearService.defaultYear;\r\n this.schoolId = this.defaultYear.SchoolID;\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (!this.multipleStudent) {\r\n this.scheduleHistorySearchModel = new ScheduleHistorySearchModel(this.studentService.selectedStudent.StudentNumber);\r\n this.schoolId = this.studentService.studentEnrollment.SchoolId;\r\n this.getCourseChangeHistoryData();\r\n }\r\n });\r\n }\r\n\r\n get studentList(): StudentList {\r\n return this._studentList;\r\n }\r\n\r\n set studentList(value: StudentList) {\r\n this._studentList = value;\r\n if (this._studentList) {\r\n this.searchCriteria.listId = this._studentList.ID;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.multipleStudent = this.router.url.toLowerCase().indexOf('/schedulehistory/multiplestudent') > 0 ? true : false;\r\n if (this.multipleStudent) {\r\n this.columnsToDisplay.unshift('STUDENTID');\r\n this.columnsToDisplay.unshift('STUDENTNAME');\r\n\r\n this.getStudentsListsDrop();\r\n this.getStudentTeams();\r\n this.getStudentCounselor();\r\n\r\n this.defaultYearSubscription = this.yearService.observableDefaultYearStream$.subscribe(defaultYear => {\r\n this.defaultYear = defaultYear;\r\n this.schoolId = this.defaultYear.SchoolID;\r\n this.getCourseChangeHistoryData();\r\n });\r\n } else {\r\n // single student mode\r\n this.schoolId = this.studentService.studentEnrollment.SchoolId;\r\n this.subscriptions.push(this.yearService.observableStudent360YearStream$.subscribe(student360Year => {\r\n this.defaultYear.Id = student360Year.Id;\r\n this.getCourseChangeHistoryData();\r\n }));\r\n this.scheduleHistorySearchModel.studentNumber = this.studentService.selectedStudent.StudentNumber;\r\n this.getCourseChangeHistoryData();\r\n }\r\n }\r\n\r\n getCourseChangeHistoryData() {\r\n this.scheduleHistoryService.getCourseChangeHistory(this.schoolId, this.defaultYear.Id, this.scheduleHistorySearchModel).subscribe(result => {\r\n this.scheduleHistoryModel = result;\r\n this.angularMatData = new TylerMatTableDataSource(this.scheduleHistoryModel);\r\n this.angularMatData.sort = this.sort;\r\n });\r\n }\r\n\r\n getStudentTeams() {\r\n this.teamsService.getTeamList(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id).subscribe(result => {\r\n this.teams = result;\r\n });\r\n }\r\n\r\n getStudentCounselor() {\r\n this.counselorService.getStaffByRoles(0, 'Counselor').subscribe(result => {\r\n this.counselor = result;\r\n });\r\n }\r\n\r\n getStudentsListsDrop() {\r\n this.studentListsService.getStudentLists().subscribe(x => this.studentLists = x.sort((a, b) =>\r\n a.Name.localeCompare(b.Name)));\r\n }\r\n\r\n clearFilters() {\r\n this.scheduleHistorySearchModel = new ScheduleHistorySearchModel('');\r\n this.angularMatData.data = [];\r\n }\r\n\r\n enterStudentNumbers() {\r\n const dialogBox = this.dialog.open(EnterCsvDialogComponent, {\r\n disableClose: true,\r\n data: {\r\n header: 'Enter Student Numbers',\r\n helpString: 'Separate numbers with a comma (Ex. 12345,13423,12312,19712)',\r\n pattern: this.studentNumberRegExp,\r\n keyRestriction: this.studentNumberKeyRestriction,\r\n validator: (csv: string): ErrorList[] => {\r\n if (!csv) {\r\n return [\r\n {\r\n errorMsg: 'Required field.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n }\r\n if (csv[csv.length - 1] == ',') {\r\n return [\r\n {\r\n errorMsg: 'The CSV must not end with a comma.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n } else if (!csv.match(this.studentNumberRegExp)) {\r\n return [\r\n {\r\n errorMsg: 'Separate numbers by commas. No spaces or special characters.',\r\n fieldName: 'Student Numbers',\r\n fieldRef: new ElementRef(null)\r\n }\r\n ];\r\n }\r\n return [];\r\n }\r\n }\r\n });\r\n this.subscriptions.push(\r\n dialogBox.afterClosed().subscribe(csv => {\r\n if (csv || csv == '') {\r\n this.scheduleHistorySearchModel.studentNumber = csv;\r\n }\r\n })\r\n );\r\n }\r\n\r\n searchClick() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n if (this.scheduleHistorySearchModel.classEntryDateFrom != '') {\r\n this.scheduleHistorySearchModel.classEntryDateFrom = formatDate(this.scheduleHistorySearchModel.classEntryDateFrom, 'MM/dd/yyyy', 'en-US');\r\n }\r\n if (this.scheduleHistorySearchModel.classEntryDateTo != '') {\r\n this.scheduleHistorySearchModel.classEntryDateTo = formatDate(this.scheduleHistorySearchModel.classEntryDateTo, 'MM/dd/yyyy', 'en-US');\r\n }\r\n if (this.scheduleHistorySearchModel.classExitDateFrom != '') {\r\n this.scheduleHistorySearchModel.classExitDateFrom = formatDate(this.scheduleHistorySearchModel.classExitDateFrom, 'MM/dd/yyyy', 'en-US');\r\n }\r\n if (this.scheduleHistorySearchModel.classExitDateTo != '') {\r\n this.scheduleHistorySearchModel.classExitDateTo = formatDate(this.scheduleHistorySearchModel.classExitDateTo, 'MM/dd/yyyy', 'en-US');\r\n }\r\n\r\n this.getCourseChangeHistoryData();\r\n }\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n }\r\n\r\n keyDownFunction(event) {\r\n if (event.keyCode == 13) {\r\n this.searchClick();\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n}\r\n","\r\n

\r\n WARNING\r\n Error\r\n

\r\n
\r\n {{errorTitle}}\r\n
\r\n\r\n
\r\n
    \r\n
  • \r\n •  \r\n {{error.fieldName}} : {{error.errorMsg}}\r\n \r\n \r\n {{error.errorMsg}}\r\n \r\n
  • \r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-crwarning',\r\n templateUrl: './crwarning.component.html',\r\n})\r\nexport class CRWarningComponent implements OnInit {\r\n errorList: ErrorList[] = [];\r\n enforceRule: string;\r\n retVal: string;\r\n errorTitle: string;\r\n constructor(\r\n public crWarningDialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.errorTitle = this.data.errorTitle;\r\n if (!this.errorTitle) {\r\n this.errorTitle = 'Changes have been entered but not saved.';\r\n }\r\n\r\n this.errorList = this.data.errorList;\r\n this.enforceRule = this.data.enforceRule;\r\n }\r\n cancelClick() {\r\n this.retVal = 'Cancel was clicked';\r\n this.crWarningDialogRef.close(this.retVal);\r\n }\r\n saveAnywayClick() {\r\n this.retVal = 'Save Anyway was clicked';\r\n this.crWarningDialogRef.close(this.retVal);\r\n }\r\n}\r\n","export class StudentCourseRequest {\r\n}\r\n\r\nexport class StudentCourseRequestDetailDTO {\r\n RowNumber: number;\r\n DistrictRequirement_ID: number;\r\n SchoolRequirement_ID: number;\r\n GradeLevel_ID: number;\r\n RequirementName: string;\r\n RequirementInstructions: string;\r\n RequirementType: number;\r\n ReqMinCredits: number;\r\n ReqMaxCredits: number;\r\n ReqMinCourses?: number;\r\n ReqMaxCourses?: number;\r\n DefaultNumberOfCourseRequests: number;\r\n AllowGlobalAlternates: boolean;\r\n AltMinCredits: number;\r\n AltMaxCredits: number;\r\n AltMinCourses?: number;\r\n AltMaxCourses?: number;\r\n AllowIndividualAlternates: boolean;\r\n NumberOfIndividualAlternates: number;\r\n RequestedCredits: number;\r\n StudentCourseRequest_ID: number;\r\n DistrictCourse_ID: number;\r\n CRType: string;\r\n ParentCR_ID: number;\r\n PreferredTeacher?: number;\r\n PreferredTerm: string;\r\n PreferredPeriod: string;\r\n Conflicts: number;\r\n\r\n // Non-DTO Fields\r\n isHiddenRow: boolean;\r\n isHover: boolean;\r\n HighlightMinCredit: boolean;\r\n HighlightMaxCredit: boolean;\r\n HighlightMinCourses: boolean;\r\n HighlightMaxCourses: boolean;\r\n RequestedCourses: number;\r\n imageUrl: string;\r\n PreferredTeacherNameSetByCounselor: string;\r\n Status: string;\r\n}\r\nexport class GradeLevelRequirements {\r\n DistrictRequirement_ID: number;\r\n SchoolRequirement_ID: number;\r\n GradeLevel_ID: number;\r\n RequirementName: string;\r\n RequirementInstructions: string;\r\n RequirementType: number;\r\n ReqMinCredits: number;\r\n ReqMaxCredits: number;\r\n ReqMinCourses?: number;\r\n ReqMaxCourses?: number;\r\n DefaultNumberOfCourseRequests: number;\r\n AllowGlobalAlternates: boolean;\r\n AltMinCredits: number;\r\n AltMaxCredits: number;\r\n AltMinCourses: number;\r\n AltMaxCourses: number;\r\n AllowIndividualAlternates: boolean;\r\n NumberOfIndividualAlternates: number;\r\n RequestedCredits: number;\r\n StudentCourseRequest: StudentCourseRequestDTO[];\r\n\r\n HighlightMinCredit: boolean;\r\n HighlightMaxCredit: boolean;\r\n HighlightMinCourses: boolean;\r\n HighlightMaxCourses: boolean;\r\n RequestedCourses?: number;\r\n}\r\n\r\nexport class StudentCourseRequestDTO {\r\n DistrictRequirement_ID: number;\r\n StudentCourseRequest_ID: number;\r\n DistrictCourse_ID: number;\r\n Status: string;\r\n CRType: string;\r\n ParentCR_ID: number;\r\n PreferredTeacher: number;\r\n PreferredTerm: string;\r\n PreferredPeriod: string;\r\n Conflicts: number;\r\n isHiddenRow: boolean;\r\n PreferredTeacherNameSetByCounselor: string;\r\n}\r\n\r\nexport class CreditIndicators {\r\n DistrictRequirement_ID: number;\r\n ReqMinCredits: number;\r\n ReqMaxCredits: number;\r\n ReqMinCourses?: number;\r\n ReqMaxCourses?: number;\r\n RequestedCredits: number;\r\n RequestedCourses?: number;\r\n HighlightMinCredit: boolean;\r\n HighlightMaxCredit: boolean;\r\n HighlightMinCourses: boolean;\r\n HighlightMaxCourses: boolean;\r\n}\r\nexport class OverallRequirement {\r\n ReqMinCredits: number;\r\n ReqMaxCredits: number;\r\n ReqMinCourses?: number;\r\n ReqMaxCourses?: number;\r\n RequestedCredits: number;\r\n RequestedCourses?: number;\r\n HighlightOverallMinCredit: boolean;\r\n HighlightOverallMaxCredit: boolean;\r\n HighlightOverallMinCourses: boolean;\r\n HighlightOverallMaxCourses: boolean;\r\n}\r\n\r\nexport class CourseRequestSchoolPolicyDTO {\r\n ID: number;\r\n SiteYear_ID: number;\r\n CR360PreventParentStudentSubmittingCourseRequests: boolean;\r\n CR360AllowParentStudentRequestWhenPrerequisiteNotMeet: boolean;\r\n CR360AllowParentStudentRequestOutsideOfStudentGradeLevel: boolean;\r\n CR360EnforceRule: string;\r\n}\r\n\r\nexport class SchoolPoliciesCR360ParentStudentViewDTO {\r\n ID: number;\r\n SiteYear_ID: number;\r\n ColumnToCheck: string;\r\n CanDisplay: boolean;\r\n CanEdit: boolean;\r\n}\r\n\r\nexport class CRRequirementCourses {\r\n\r\n // Server Properties\r\n CourseId: number;\r\n DistrictRequirement_ID: number;\r\n ValueField: number;\r\n TextField: string;\r\n Credits: number;\r\n GradeLevels: string;\r\n IsPrerequisiteMissing: boolean;\r\n IsAlreadyRequestedCR: boolean;\r\n IsCourseAlreadyTaken: boolean;\r\n CourseName: string;\r\n CourseCurriculum: string;\r\n CourseDescription: string;\r\n SubjectIdentifier: string;\r\n SubjectTermType: string;\r\n CreditDeliveryTermType: string;\r\n SemestersPerYear: number;\r\n TermsPerSemesters: number;\r\n\r\n // Local Properties\r\n courseCredits: string;\r\n courseName: string;\r\n courseNumber: string;\r\n}\r\n\r\nexport class CRLookupDTO {\r\n CourseId: number;\r\n DistrictRequirement_ID: number;\r\n ValueField: number;\r\n TextField: string;\r\n}\r\n\r\nexport class Courses {\r\n RequirementId: number;\r\n CourseId: number;\r\n CourseName: string;\r\n}\r\n\r\nexport class CourseDescription {\r\n CourseName: string;\r\n CourseCurriculum: string;\r\n CourseDescription: string;\r\n SubjectIdentifier: string;\r\n // not in DTO\r\n CourseNumber: string;\r\n}\r\n\r\nexport class StudentCourseRequestPreferredTeachers {\r\n StudentCourseRequest_ID: number;\r\n PreferredTeacherStaff_ID?: number;\r\n PreferredTeacherName: string;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { System } from '../../shared-components/System';\r\n\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { StudentCourseRequestDTO, OverallRequirement, CourseRequestSchoolPolicyDTO, SchoolPoliciesCR360ParentStudentViewDTO, CRRequirementCourses, CRLookupDTO, GradeLevelRequirements, StudentCourseRequestPreferredTeachers } from './student-course-request.model';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StudentCourseRequestService {\r\n GetConflictsForStudentPortal(studentId: number, SiteYearId: number, toAddCourses: number[], toDeleteCourses: number[], toKeepCourses: number[], toUpdateCourses: number[]) {\r\n const data = [toAddCourses, toDeleteCourses, toKeepCourses, toUpdateCourses];\r\n let queryString = '';\r\n queryString = '?studentId=' + studentId +\r\n '&siteYearId=' + SiteYearId;\r\n return this.http.post(System.apiURL.Counselor + 'GetConflictsForStudentPortal' + queryString, data) ;\r\n }\r\n\r\n constructor(private http: HttpClient, private yearService: YearService) { }\r\n\r\n getStudentCourseRequest(studentId, siteId, yearId, gradeLevelId): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId;\r\n return this.http.get(System.apiURL.Counselor + 'GetStudentCourseRequest' + queryString);\r\n }\r\n\r\n getCourseRequestOverAllRequirements(studentId, siteId, yearId, gradeLevelId): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestOverAllRequirements' + queryString);\r\n }\r\n\r\n saveCourseRequestData(studentId, siteId, yearId, gradeLevelId, data: StudentCourseRequestDTO[]): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId;\r\n return this.http.post(System.apiURL.Counselor + 'AddEditStudentCourseRequests' + queryString, data);\r\n }\r\n\r\n deleteStudentCourseRequest(studentCourseRequestId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentCourseRequestId=' + studentCourseRequestId;\r\n return this.http.get(System.apiURL.Counselor + 'DeleteStudentCourseRequests' + queryString);\r\n }\r\n\r\n getCourseRequestSchoolPolicy(siteId, yearId): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestSchoolPolicy' + queryString);\r\n }\r\n\r\n getCourseRequestStudent360SchoolPolicy(siteId, yearId): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCourseRequestStudent360SchoolPolicy' + queryString);\r\n }\r\n\r\n getCRCourses(studentId, siteId, yearId, gradeLevelId): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCRRequirementCourses' + queryString);\r\n }\r\n getCRPeriods(siteId, yearId, gradeLevelId, studentId): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCRRequirementPeriods' + queryString);\r\n }\r\n getCRTerms(siteId, yearId, gradeLevelId, studentId): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCRRequirementTerms' + queryString);\r\n }\r\n getCRTeachers(siteId, yearId, gradeLevelId, studentId): Observable {\r\n let queryString = '';\r\n queryString += '?siteId=' + siteId +\r\n '&yearId=' + yearId +\r\n '&gradeLevelId=' + gradeLevelId +\r\n '&studentId=' + studentId;\r\n return this.http.get(System.apiURL.Counselor + 'GetCRRequirementTeachers' + queryString);\r\n }\r\n\r\n getStudentCourseRequestPreferredTeachers(student_ID: number, siteYear_ID: number): Observable {\r\n const queryString = `?student_ID=${student_ID}&siteYear_ID=${siteYear_ID}`;\r\n return this.http.get(System.apiURL.Counselor + 'GetStudentCourseRequestPreferredTeachers' + queryString);\r\n\r\n }\r\n\r\n massAddRequiredCourseRequests(siteYearId: number, studentIds: number[]) {\r\n const queryString = '?siteYearId=' + siteYearId;\r\n return this.http.post(System.apiURL.Counselor + 'MassAddRequiredCourseRequests' + queryString, studentIds);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n\r\n@Pipe({\r\n name: 'scrCourseFilter'\r\n})\r\nexport class SCRCoursePipe implements PipeTransform {\r\n\r\n transform(arrayObj: any[], requirementId: number): any {\r\n return arrayObj.filter(x => x.DistrictRequirement_ID == requirementId);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n\r\n@Pipe({\r\n name: 'scrTermFilter'\r\n})\r\nexport class SCRTermPipe implements PipeTransform {\r\n\r\n transform(arrayObj: any[], requirementId: number, courseId: number): any {\r\n const returnObject = arrayObj.filter(x => x.DistrictRequirement_ID == requirementId && x.CourseId == courseId);\r\n\r\n // add a blank object\r\n const blankObj = {\r\n CourseId: courseId,\r\n DistrictRequirement_ID: requirementId,\r\n TextField: ' ',\r\n ValueField: ' '\r\n };\r\n const cObj = returnObject.find(x => x.TextField == ' ' && x.ValueField == ' ');\r\n if (!cObj) {\r\n returnObject.splice(0,0,blankObj);\r\n }\r\n return returnObject;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n\r\n@Pipe({\r\n name: 'scrPeriodFilter'\r\n})\r\nexport class SCRPeriodPipe implements PipeTransform {\r\n\r\n transform(arrayObj: any[], requirementId: number, courseId: number, preferredPeriod: string): any {\r\n const returnObject = arrayObj.filter(x => x.DistrictRequirement_ID == requirementId && x.CourseId == courseId);\r\n // if the counselor selected a preferred period not in the current options list, add it\r\n if (preferredPeriod) {\r\n const tmpObj = {\r\n CourseId: courseId,\r\n DistrictRequirement_ID: requirementId,\r\n TextField: preferredPeriod,\r\n ValueField: preferredPeriod\r\n };\r\n const pObj = returnObject.find(x => x.TextField == preferredPeriod && x.ValueField == preferredPeriod);\r\n if (!pObj) {\r\n returnObject.push(tmpObj);\r\n }\r\n }\r\n // add a blank object\r\n const blankObj = {\r\n CourseId: courseId,\r\n DistrictRequirement_ID: requirementId,\r\n TextField: ' ',\r\n ValueField: ' '\r\n };\r\n const cObj = returnObject.find(x => x.TextField == ' ' && x.ValueField == ' ');\r\n if (!cObj) {\r\n returnObject.splice(0,0,blankObj);\r\n }\r\n return returnObject ;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n\r\n@Pipe({\r\n name: 'scrTeacherFilter'\r\n})\r\nexport class SCRTeacherPipe implements PipeTransform {\r\n\r\n transform(arrayObj: any[], requirementId: number, courseId: number, preferredTeacher: number, preferredTeacherNameSetByCounselor: string): any {\r\n const returnObject = arrayObj.filter(x => x.DistrictRequirement_ID == requirementId && x.CourseId == courseId);\r\n\r\n // if the counselor selected a preferred Teacher not in the current options list, add it\r\n if (preferredTeacher) {\r\n const tmpObj = {\r\n CourseId: courseId,\r\n DistrictRequirement_ID: requirementId,\r\n TextField: preferredTeacherNameSetByCounselor,\r\n ValueField: preferredTeacher\r\n };\r\n const tObj = returnObject.find(x => x.TextField == preferredTeacherNameSetByCounselor && x.ValueField == preferredTeacher);\r\n if (!tObj) {\r\n returnObject.push(tmpObj);\r\n }\r\n }\r\n const blankObj = {\r\n CourseId: courseId,\r\n DistrictRequirement_ID: requirementId,\r\n TextField: '',\r\n ValueField: ''\r\n };\r\n const cObj = returnObject.find(x => x.TextField.trim() == '' && x.ValueField.trim() == '');\r\n if (!cObj) {\r\n returnObject.splice(0,0, blankObj);\r\n }\r\n return returnObject;\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n
\r\n No Course requirement data exists.\r\n
\r\n
0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Overall Requirements\r\n Min\r\n Credits\r\n \r\n\t\t\t\t\t\t\t{{overAllRequirement.ReqMinCredits}}\r\n Max\r\n Credits\r\n \r\n\t\t\t\t\t\t\t{{overAllRequirement.ReqMaxCredits == 0 ? \"N/A\" : overAllRequirement.ReqMaxCredits }}\r\n \r\n Requested Credits\r\n {{overAllRequirement.RequestedCredits}}\r\n\t\t\t\t\t\t\r\n Min\r\n Courses\r\n \r\n\t\t\t\t\t\t\t{{overAllRequirement.ReqMinCourses ? overAllRequirement.ReqMinCourses : \"N/A\" }}\r\n Max\r\n Courses\r\n \r\n\t\t\t\t\t\t\t{{overAllRequirement.ReqMaxCourses ? overAllRequirement.ReqMaxCourses : \"N/A\" }}\r\n \r\n Requested Courses\r\n {{overAllRequirement.RequestedCourses}}\r\n\t\t\t\t\t\t\r\n  
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
Course Requirement\r\n 1 ? '7' : '1'\"\r\n [style.display]=\"element.RowNumber < 3 ? '' : 'none'\"\r\n [ngStyle]=\"{'vertical-align': element.RowNumber > 1 ? 'top' : 'middle','min-width': element.RowNumber == 2 ? '490px' : '250px','max-width': element.RowNumber == 2 ? '490px' : '250px' }\">\r\n {{element.RequirementName}} \r\n {{element.RequirementInstructions}} \r\n Min Credits\r\n 1 ? 'none' : ''\">\r\n
\r\n {{element.ReqMinCredits}}\r\n
\r\n
Max Credits\r\n 1 ? 'none' : ''\">\r\n \r\n {{element.ReqMaxCredits == 0 ? \"N/A\" : element.ReqMaxCredits }}\r\n \r\n Requested Credits\r\n 1 ? 'none' : ''\">\r\n \r\n {{element.RequestedCredits}}\r\n \r\n\r\n Min Courses\r\n 1 ? 'none' : ''\">\r\n \r\n {{element.ReqMinCourses ? element.ReqMinCourses : \"N/A\"}}\r\n \r\n Max Courses\r\n 1 ? 'none' : ''\">\r\n \r\n {{element.ReqMaxCourses ? element.ReqMaxCourses : \"N/A\"}}\r\n \r\n Requested Courses\r\n 1 ? 'none' : ''\">\r\n \r\n {{element.RequestedCourses}}\r\n \r\n\r\n Type\r\n \r\n \r\n \r\n \r\n Primary\r\n Alternate\r\n \r\n \r\n \r\n [Credits]\r\n Course\r\n \r\n \r\n \r\n \r\n {{course.TextField}}\r\n \r\n \r\n \r\n\r\n Term\r\n \r\n \r\n \r\n {{term.TextField}}\r\n \r\n \r\n \r\n
\r\n {{data.PreferredTerm}}\r\n
\r\n
Period\r\n \r\n \r\n \r\n {{period.TextField}}\r\n \r\n \r\n \r\n
\r\n {{data.PreferredPeriod}}\r\n
\r\n
Teacher\r\n \r\n \r\n \r\n {{teacher.TextField}}\r\n \r\n \r\n \r\n
\r\n \r\n {{data.PreferredTeacherNameSetByCounselor}}\r\n \r\n
\r\n
Conflicts\r\n \r\n {{ data.Conflicts }}\r\n Actions\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \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 { AfterViewInit, Component, ElementRef, HostListener, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { Router, RouterStateSnapshot } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { forkJoin, Observable, Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { CourseRequestMgmtService } from '../../counselor360/scheduling/course-request-mgmt/course-request-mgmt.service';\r\nimport { IdentifiedConflictsDTO } from '../../counselor360/scheduling/course-request-mgmt/models/identifiedConflicts.model';\r\nimport { SchoolCourseRequestModel } from '../../counselor360/scheduling/course-request-mgmt/models/school-course-request-model';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { MenuItem } from '../../shared-components/controls/menus/menu-item.model';\r\nimport { CourseDescriptionDialogComponent } from '../../shared-components/course-description-dialog/course-description-dialog.component';\r\nimport { HasErrors } from '../../shared-components/guards/check-for-errors/HasErrors';\r\nimport { PermissionEnum } from '../../shared-components/security/permissions.enums';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { Enrollment } from '../../shared-components/student/enrollment.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Student360Service } from '../student360.service';\r\nimport { CRWarningComponent } from './crwarning/crwarning.component';\r\nimport { CourseDescription, CourseRequestSchoolPolicyDTO, CRLookupDTO, CRRequirementCourses, GradeLevelRequirements, OverallRequirement, SchoolPoliciesCR360ParentStudentViewDTO, StudentCourseRequestDetailDTO, StudentCourseRequestDTO, StudentCourseRequestPreferredTeachers } from './student-course-request.model';\r\nimport { StudentCourseRequestService } from './student-course-request.service';\r\n\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-student-course-request',\r\n templateUrl: './student-course-request.component.html',\r\n styleUrls: ['./student-course-request.component.css']\r\n})\r\nexport class StudentCourseRequestComponent implements OnInit, AfterViewInit, HasErrors, OnDestroy {\r\n @ViewChildren('ddlCRCourse', { read: ElementRef }) ddlCRCourse: QueryList;\r\n @ViewChild('studentHeader') studentHeaderRef: ElementRef;\r\n @ViewChild('footer', { static: true }) footerRef: ElementRef;\r\n studentHeaderHeight = 0;\r\n footerHeight = 0;\r\n public studentName: string;\r\n public userType = 0;\r\n public studentEnrollment: Enrollment;\r\n public selectedStudentSubscription: Subscription;\r\n public studentCourseRequests: StudentCourseRequestDetailDTO[];\r\n public initialStudentCourseRequests: StudentCourseRequestDetailDTO[];\r\n public gradeLevelRequirements: GradeLevelRequirements[] = [];\r\n public overAllRequirement: OverallRequirement;\r\n public termOptions: CRLookupDTO[] = [];\r\n public courseOptions: CRRequirementCourses[] = [];\r\n public periodsOptions: CRLookupDTO[] = [];\r\n public teacherOptions: CRLookupDTO[] = [];\r\n public preferredTeachers: StudentCourseRequestPreferredTeachers[] = [];\r\n public schoolPoliciesCR360ParentStudentView: SchoolPoliciesCR360ParentStudentViewDTO[] = [];\r\n public courseRequestSchoolPolicy: CourseRequestSchoolPolicyDTO;\r\n public periodPolicy: SchoolPoliciesCR360ParentStudentViewDTO;\r\n public termPolicy: SchoolPoliciesCR360ParentStudentViewDTO;\r\n public teacherPolicy: SchoolPoliciesCR360ParentStudentViewDTO;\r\n public gridHeight: number;\r\n public errorList: ErrorList[] = [];\r\n public errors: ErrorList[] = [];\r\n public tmpStudentCourseRequestId: number;\r\n crWarningDialogRef: MatDialogRef;\r\n public studentId: number;\r\n courseRequesrRequirementSource = new MatTableDataSource();\r\n ColumnsToDisplay: string[] = [];\r\n identifiedEnforcedConflicts: IdentifiedConflictsDTO[];\r\n identifiedPreferredConflicts: any[];\r\n courseDescriptions: { [courseID: number]: CourseDescription } = {};\r\n formIsDirty = false;\r\n subscriptions: Subscription[] = [];\r\n conflictMessages: string[] = [];\r\n IsFiltered: boolean;\r\n\r\n // Save data\r\n toAdd: StudentCourseRequestDTO[] = [];\r\n toDelete: StudentCourseRequestDTO[] = [];\r\n toUpdate: StudentCourseRequestDTO[] = [];\r\n toKeep: StudentCourseRequestDTO[] = [];\r\n\r\n // Counselor Properties\r\n counselor = false;\r\n toolsMenuItems = [\r\n 'Schedule Student List',\r\n 'Student Summary'\r\n ];\r\n disabledToolsMenuItems = [\r\n 'Schedule Student List'\r\n ];\r\n counselorCanOverrideConflicts = false;\r\n\r\n constructor(\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private studentCourseRequestService: StudentCourseRequestService,\r\n private parentPortalService: Student360Service,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private courseRequestMgmtService: CourseRequestMgmtService,\r\n private securityService: SecurityService,\r\n private loginService: LoginService,\r\n private classroom360Service: Classroom360Service,\r\n private sharedService: SharedService\r\n ) {\r\n }\r\n\r\n get courseRequestYear(): Year {\r\n return this.yearService.defaultCourseRequestYear;\r\n }\r\n\r\n ngOnInit() {\r\n this.userType = this.userService.userType;\r\n this.studentId = this.studentService.selectedStudent.Id;\r\n this.studentName = this.studentService.selectedStudent.LastName + ', ' + this.studentService.selectedStudent.FirstName + '(' + this.studentService.selectedStudent.StudentNumber + ')';\r\n\r\n // This page behaves differently for counselors (ONE-10172)\r\n if (this.userType == 1) {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.counselor = this.securityService.IsAnyPermissionAssigned(PermissionEnum.AddCourseRequestRead);\r\n this.counselorCanOverrideConflicts = this.securityService.IsAnyPermissionAssigned(PermissionEnum.AllowConflictOverrides);\r\n } else {\r\n this.counselor = this.securityService.IsAnyPermissionCodeAssigned('SCH_CRE');\r\n this.counselorCanOverrideConflicts = this.securityService.IsAnyPermissionCodeAssigned('SCH_ACO');\r\n }\r\n }\r\n if (\r\n this.counselor\r\n && this.classroom360Service.staffAssignedPortals\r\n && (\r\n this.classroom360Service.staffAssignedPortals.find(portal =>\r\n portal.PortalName == 'Schedule Student List'\r\n && portal.ParentModule == 'Scheduling'\r\n ) != null\r\n )\r\n ) {\r\n System.removeFromList(this.disabledToolsMenuItems, 'Schedule Student List');\r\n }\r\n\r\n // Subscribing to application changes\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.studentCourseRequests = undefined;\r\n this.loadStudentInfo();\r\n });\r\n\r\n if (this.counselor) {\r\n this.yearService.observableDefaultYearStream$.subscribe(() => {\r\n this.loadStudentInfo();\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.studentHeaderRef != undefined) {\r\n this.studentHeaderHeight = this.studentHeaderRef.nativeElement.offsetHeight;\r\n }\r\n if (this.footerRef != undefined) {\r\n this.footerHeight = this.footerRef.nativeElement.offsetHeight;\r\n }\r\n this.onResize();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n loadStudentInfo() {\r\n const yearId = this.counselor ? this.yearService.defaultYear.Id : this.courseRequestYear.Id;\r\n this.studentService.getStudentEnrollment(this.studentService.selectedStudent.Id, yearId).subscribe(enrollment => {\r\n this.studentEnrollment = enrollment;\r\n this.studentService.studentEnrollment = enrollment;\r\n this.studentId = this.studentService.selectedStudent.Id;\r\n this.studentName = this.studentService.selectedStudent.LastName + ', ' + this.studentService.selectedStudent.FirstName + '(' + this.studentService.selectedStudent.StudentNumber + ')';\r\n if (this.studentEnrollment) {\r\n this.initialize();\r\n } else {\r\n this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'Student Not Enrolled',\r\n confirmMessage: this.studentService.selectedStudent.FirstName + ' ' + this.studentService.selectedStudent.LastName + ' is not enrolled in during ' + this.yearService.defaultCourseRequestYear.AYIdentifier + '.',\r\n informational: true\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n hoverRow(row: StudentCourseRequestDTO) {\r\n this.studentCourseRequests.forEach(scr => {\r\n if (scr.DistrictRequirement_ID == row.DistrictRequirement_ID) {\r\n scr.isHover = true;\r\n }\r\n });\r\n }\r\n\r\n removehoverRow() {\r\n this.studentCourseRequests.forEach(scr => {\r\n scr.isHover = false;\r\n });\r\n }\r\n\r\n getRowSpan(scr: StudentCourseRequestDetailDTO) {\r\n if (scr.RowNumber == 1) {\r\n return 1;\r\n } else if (scr.RowNumber >= 2) {\r\n const count = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == scr.DistrictRequirement_ID);\r\n if (count.length > 2) {\r\n return count.length - 1;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n initialize() {\r\n const serverCalls: Observable = forkJoin([\r\n this.studentCourseRequestService.getCourseRequestStudent360SchoolPolicy(this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID),\r\n this.studentCourseRequestService.getCRCourses(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId),\r\n this.studentCourseRequestService.getCRTerms(this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, this.studentEnrollment.StudentId),\r\n this.studentCourseRequestService.getCRPeriods(this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, this.studentEnrollment.StudentId),\r\n this.studentCourseRequestService.getCRTeachers(this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, this.studentEnrollment.StudentId),\r\n this.studentCourseRequestService.getCourseRequestSchoolPolicy(this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID),\r\n this.studentCourseRequestService.getStudentCourseRequestPreferredTeachers(this.studentEnrollment.StudentId, this.studentEnrollment.SiteYearId),\r\n this.studentCourseRequestService.massAddRequiredCourseRequests(this.studentEnrollment.SiteYearId, [this.studentEnrollment.StudentId])\r\n ]);\r\n serverCalls.subscribe(results => {\r\n this.schoolPoliciesCR360ParentStudentView = results[0];\r\n this.courseOptions = results[1];\r\n try {\r\n this.courseOptions.forEach(courseOption => {\r\n let currentProperty = '';\r\n for (let i = 0; i < courseOption.TextField.length; i++) {\r\n if (courseOption.TextField[i] == '[') {\r\n currentProperty = 'courseCredits';\r\n } else if (courseOption.TextField[i] == ']') {\r\n currentProperty = 'courseName';\r\n } else if (courseOption.TextField[i] == '(') {\r\n currentProperty = 'courseNumber';\r\n } else if (courseOption.TextField[i] == ')') {\r\n currentProperty = '';\r\n } else if (currentProperty) {\r\n if (!courseOption[currentProperty]) {\r\n courseOption[currentProperty] = '';\r\n }\r\n courseOption[currentProperty] += courseOption.TextField[i];\r\n }\r\n }\r\n courseOption.courseCredits = courseOption.courseCredits.trim();\r\n courseOption.courseName = courseOption.courseName.trim();\r\n courseOption.courseNumber = courseOption.courseNumber.trim();\r\n\r\n const courseId = courseOption.CourseId;\r\n if (!this.courseDescriptions[courseId]) {\r\n this.courseDescriptions[courseId] = new CourseDescription();\r\n this.courseDescriptions[courseId].CourseCurriculum = courseOption.CourseCurriculum;\r\n this.courseDescriptions[courseId].CourseDescription = courseOption.CourseDescription;\r\n this.courseDescriptions[courseId].CourseName = courseOption.CourseName;\r\n this.courseDescriptions[courseId].CourseNumber = courseOption.TextField;\r\n this.courseDescriptions[courseId].SubjectIdentifier = courseOption.SubjectIdentifier;\r\n }\r\n\r\n });\r\n this.courseOptions.sort((a, b) => {\r\n const nameComparison = a.courseName.toLowerCase().localeCompare(b.courseName.toLowerCase());\r\n if (nameComparison != 0) {\r\n return nameComparison;\r\n } else {\r\n return a.courseNumber.toLowerCase().localeCompare(b.courseNumber.toLowerCase());\r\n }\r\n });\r\n } catch (e) {\r\n console.error('Cannot order course options: ' + e.toString());\r\n }\r\n this.termOptions = results[2];\r\n this.periodsOptions = results[3];\r\n this.teacherOptions = results[4];\r\n this.courseRequestSchoolPolicy = results[5];\r\n this.preferredTeachers = results[6];\r\n\r\n\r\n this.periodPolicy = this.schoolPoliciesCR360ParentStudentView.find(x => x.ColumnToCheck.toLowerCase() == 'period');\r\n this.teacherPolicy = this.schoolPoliciesCR360ParentStudentView.find(x => x.ColumnToCheck.toLowerCase() == 'teacher');\r\n this.termPolicy = this.schoolPoliciesCR360ParentStudentView.find(x => x.ColumnToCheck.toLowerCase() == 'term');\r\n\r\n this.ColumnsToDisplay = ['RequirementName', 'ReqMinCredits', 'ReqMaxCredits', 'RequestedCredits', 'ReqMinCourses', 'ReqMaxCourses', 'RequestedCourses', 'CRType', 'Credits_Course'];\r\n if (this.periodPolicy != undefined && this.periodPolicy.CanDisplay == true) {\r\n this.ColumnsToDisplay.push('PreferredPeriod');\r\n }\r\n if (this.termPolicy != undefined && this.termPolicy.CanDisplay == true) {\r\n this.ColumnsToDisplay.push('PreferredTerm');\r\n }\r\n if (this.teacherPolicy != undefined && this.teacherPolicy.CanDisplay == true) {\r\n this.ColumnsToDisplay.push('PreferredTeacher');\r\n }\r\n this.ColumnsToDisplay.push('Conflicts');\r\n this.ColumnsToDisplay.push('actions');\r\n this.getStudentCourseRequestInformation();\r\n });\r\n }\r\n\r\n getStudentCourseRequestInformation() {\r\n const crserverCalls: Observable = forkJoin([\r\n this.studentCourseRequestService.getCourseRequestOverAllRequirements(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId),\r\n this.studentCourseRequestService.getStudentCourseRequest(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId)\r\n ]);\r\n crserverCalls.subscribe(results => {\r\n this.tmpStudentCourseRequestId = -1;\r\n this.overAllRequirement = results[0];\r\n this.gradeLevelRequirements = results[1];\r\n\r\n this.gradeLevelRequirements.forEach(req => {\r\n req.StudentCourseRequest.forEach(scr => {\r\n scr.isHiddenRow = false;\r\n });\r\n const tmpScr = new StudentCourseRequestDTO();\r\n tmpScr.DistrictRequirement_ID = req.DistrictRequirement_ID;\r\n tmpScr.StudentCourseRequest_ID = 0;\r\n tmpScr.DistrictCourse_ID = 0;\r\n tmpScr.CRType = '';\r\n tmpScr.ParentCR_ID = 0;\r\n tmpScr.PreferredTeacher = 0;\r\n tmpScr.PreferredTeacherNameSetByCounselor = '';\r\n tmpScr.PreferredTerm = '';\r\n tmpScr.PreferredPeriod = '';\r\n tmpScr.Conflicts = 0;\r\n tmpScr.isHiddenRow = true;\r\n if (req.StudentCourseRequest.length == 0) {\r\n req.StudentCourseRequest.push(tmpScr);\r\n req.StudentCourseRequest.push(tmpScr);\r\n }\r\n if (req.StudentCourseRequest.length == 1) {\r\n req.StudentCourseRequest.push(tmpScr);\r\n }\r\n });\r\n this.studentCourseRequests = this.gradeLevelRequirements.reduce((current, next) => {\r\n let rowNumber: number;\r\n rowNumber = 1;\r\n next.StudentCourseRequest.forEach(b => {\r\n if (b.PreferredTeacher != 0) {\r\n if (this.preferredTeachers.find(x => x.PreferredTeacherStaff_ID == b.PreferredTeacher)) {\r\n b.PreferredTeacherNameSetByCounselor = this.preferredTeachers.find(x => x.PreferredTeacherStaff_ID == b.PreferredTeacher).PreferredTeacherName;\r\n } else {\r\n b.PreferredTeacherNameSetByCounselor = '';\r\n }\r\n } else {\r\n b.PreferredTeacherNameSetByCounselor = '';\r\n }\r\n current.push({\r\n RowNumber: rowNumber,\r\n DistrictRequirement_ID: next.DistrictRequirement_ID,\r\n SchoolRequirement_ID: next.SchoolRequirement_ID,\r\n GradeLevel_ID: next.GradeLevel_ID,\r\n RequirementName: next.RequirementName,\r\n RequirementInstructions: next.RequirementInstructions,\r\n RequirementType: next.RequirementType,\r\n ReqMinCredits: next.ReqMinCredits,\r\n ReqMaxCredits: next.ReqMaxCredits,\r\n ReqMaxCourses: next.ReqMaxCourses,\r\n ReqMinCourses: next.ReqMinCourses,\r\n DefaultNumberOfCourseRequests: next.DefaultNumberOfCourseRequests,\r\n AllowGlobalAlternates: next.AllowGlobalAlternates,\r\n AltMinCredits: next.AltMinCredits,\r\n AltMaxCredits: next.AltMaxCredits,\r\n AltMinCourses: next.AltMinCourses,\r\n AltMaxCourses: next.AltMaxCourses,\r\n AllowIndividualAlternates: next.AllowIndividualAlternates,\r\n NumberOfIndividualAlternates: next.NumberOfIndividualAlternates,\r\n RequestedCredits: next.RequestedCredits,\r\n StudentCourseRequest_ID: b.StudentCourseRequest_ID,\r\n DistrictCourse_ID: b.DistrictCourse_ID,\r\n CRType: b.CRType,\r\n Status: b.Status,\r\n ParentCR_ID: b.ParentCR_ID,\r\n PreferredTeacher: b.PreferredTeacher,\r\n PreferredTeacherNameSetByCounselor: b.PreferredTeacherNameSetByCounselor,\r\n PreferredTerm: b.PreferredTerm,\r\n PreferredPeriod: b.PreferredPeriod,\r\n Conflicts: b.Conflicts,\r\n isHiddenRow: b.isHiddenRow,\r\n isHover: false,\r\n HighlightMinCredit: false,\r\n HighlightMaxCredit: false,\r\n HighlightMinCourses: false,\r\n HighlightMaxCourses: false\r\n });\r\n rowNumber = rowNumber + 1;\r\n });\r\n return current;\r\n }, []);\r\n this.studentCourseRequests = _.sortBy(this.studentCourseRequests, ['DistrictRequirement_ID', 'RowNumber']);\r\n this.studentCourseRequests.forEach(req => {\r\n if (req.StudentCourseRequest_ID == null || req.StudentCourseRequest_ID == undefined || req.StudentCourseRequest_ID < 1) {\r\n req.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n }\r\n if (req.ParentCR_ID == null || req.ParentCR_ID == undefined || req.ParentCR_ID < 1) {\r\n req.ParentCR_ID = 0;\r\n }\r\n if (req.DistrictCourse_ID == undefined) {\r\n req.DistrictCourse_ID = 0;\r\n }\r\n });\r\n this.reinitializeRowNumber();\r\n this.setCreditIndicators();\r\n this.initialStudentCourseRequests = _.cloneDeep(this.studentCourseRequests);\r\n });\r\n }\r\n\r\n courseChange(crRow: StudentCourseRequestDetailDTO) {\r\n crRow.PreferredPeriod = '';\r\n crRow.PreferredTeacher = 0;\r\n crRow.PreferredTerm = '';\r\n this.setCreditIndicators();\r\n }\r\n\r\n setCreditIndicators() {\r\n let overallRecuirementCredits: number;\r\n overallRecuirementCredits = 0.00;\r\n\r\n let overallRequirementCourses: number;\r\n overallRequirementCourses = 0;\r\n\r\n this.gradeLevelRequirements.forEach(ci => {\r\n let totalRecuirementCredits: number;\r\n totalRecuirementCredits = 0.00;\r\n let totalRequirementCourses: number;\r\n totalRequirementCourses = 0;\r\n const studentCRs = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == ci.DistrictRequirement_ID);\r\n studentCRs.forEach(scr => {\r\n if (scr.DistrictCourse_ID > 0 && scr.CRType == 'Primary') {\r\n overallRequirementCourses += 1;\r\n totalRequirementCourses += 1;\r\n const tempCourse = this.courseOptions.find(x => x.CourseId == scr.DistrictCourse_ID);\r\n if (tempCourse != null && tempCourse != undefined) {\r\n if (this.loginService.LoginSettings.V10 == true) {\r\n totalRecuirementCredits += tempCourse.Credits;\r\n } else {\r\n let courseCredit: number;\r\n courseCredit = 0.0;\r\n if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'Y' && scr.PreferredTerm.startsWith('S')) {\r\n courseCredit = tempCourse.Credits / tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'S' && scr.PreferredTerm.trim() == '') {\r\n courseCredit = tempCourse.Credits * tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'T' && scr.PreferredTerm.trim() == '') {\r\n courseCredit = tempCourse.Credits * tempCourse.SemestersPerYear * tempCourse.TermsPerSemesters;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'T' && scr.PreferredTerm.startsWith('S')) {\r\n courseCredit = tempCourse.Credits * tempCourse.TermsPerSemesters;\r\n }\r\n else if (tempCourse.SubjectTermType == 'S' && tempCourse.CreditDeliveryTermType == 'Y') {\r\n courseCredit = tempCourse.Credits / tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'S' && tempCourse.CreditDeliveryTermType == 'T') {\r\n courseCredit = tempCourse.Credits * tempCourse.TermsPerSemesters;\r\n }\r\n else {\r\n courseCredit = tempCourse.Credits;\r\n }\r\n totalRecuirementCredits += courseCredit;\r\n }\r\n }\r\n }\r\n });\r\n ci.RequestedCredits = totalRecuirementCredits;\r\n ci.RequestedCourses = totalRequirementCourses;\r\n if (totalRecuirementCredits < ci.ReqMinCredits) {\r\n ci.HighlightMinCredit = true;\r\n } else {\r\n ci.HighlightMinCredit = false;\r\n }\r\n if (totalRecuirementCredits > ci.ReqMaxCredits && ci.ReqMaxCredits > 0) {\r\n ci.HighlightMaxCredit = true;\r\n } else {\r\n ci.HighlightMaxCredit = false;\r\n }\r\n if (ci.ReqMinCourses != null && totalRequirementCourses < ci.ReqMinCourses) {\r\n ci.HighlightMinCourses = true;\r\n } else {\r\n ci.HighlightMinCourses = false;\r\n }\r\n if (ci.ReqMaxCourses != null && totalRequirementCourses > ci.ReqMaxCourses) {\r\n ci.HighlightMaxCourses = true;\r\n } else {\r\n ci.HighlightMaxCourses = false;\r\n }\r\n overallRecuirementCredits += totalRecuirementCredits;\r\n ci.RequestedCourses = totalRequirementCourses;\r\n\r\n });\r\n this.studentCourseRequests.forEach(scr => {\r\n const crRow = this.gradeLevelRequirements.find(x => x.DistrictRequirement_ID == scr.DistrictRequirement_ID);\r\n if (crRow != undefined) {\r\n scr.RequestedCredits = crRow.RequestedCredits;\r\n scr.HighlightMinCredit = crRow.HighlightMinCredit;\r\n scr.HighlightMaxCredit = crRow.HighlightMaxCredit;\r\n scr.HighlightMinCourses = crRow.HighlightMinCourses;\r\n scr.HighlightMaxCourses = crRow.HighlightMaxCourses;\r\n scr.RequestedCourses = crRow.RequestedCourses;\r\n }\r\n });\r\n this.overAllRequirement.RequestedCredits = overallRecuirementCredits;\r\n if (overallRecuirementCredits < this.overAllRequirement.ReqMinCredits) {\r\n this.overAllRequirement.HighlightOverallMinCredit = true;\r\n } else {\r\n this.overAllRequirement.HighlightOverallMinCredit = false;\r\n }\r\n if (overallRecuirementCredits > 0 && overallRecuirementCredits > this.overAllRequirement.ReqMaxCredits) {\r\n this.overAllRequirement.HighlightOverallMaxCredit = true;\r\n } else {\r\n this.overAllRequirement.HighlightOverallMaxCredit = false;\r\n }\r\n\r\n this.overAllRequirement.RequestedCourses = overallRequirementCourses;\r\n if (this.overAllRequirement.ReqMinCourses != null && overallRequirementCourses < this.overAllRequirement.ReqMinCourses) {\r\n this.overAllRequirement.HighlightOverallMinCourses = true;\r\n } else {\r\n this.overAllRequirement.HighlightOverallMinCourses = false;\r\n }\r\n if (this.overAllRequirement.ReqMaxCourses != null && overallRequirementCourses > this.overAllRequirement.ReqMaxCourses) {\r\n this.overAllRequirement.HighlightOverallMaxCourses = true;\r\n } else {\r\n this.overAllRequirement.HighlightOverallMaxCourses = false;\r\n }\r\n\r\n }\r\n\r\n addRow(crReq: StudentCourseRequestDetailDTO, index: number) {\r\n if (crReq.isHiddenRow == true) {\r\n // First Hidden Row\r\n crReq.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n crReq.DistrictCourse_ID = -1;\r\n crReq.CRType = 'Primary';\r\n crReq.ParentCR_ID = 0;\r\n crReq.PreferredTeacher = -1;\r\n crReq.PreferredTerm = '';\r\n crReq.PreferredPeriod = '';\r\n crReq.isHiddenRow = false;\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n }\r\n else {\r\n const newRow: StudentCourseRequestDetailDTO = Object.assign({}, crReq);\r\n newRow.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n newRow.DistrictCourse_ID = -1;\r\n newRow.CRType = 'Primary';\r\n newRow.ParentCR_ID = 0;\r\n newRow.PreferredTeacher = -1;\r\n newRow.PreferredTerm = '';\r\n newRow.PreferredPeriod = '';\r\n newRow.Status = 'P';\r\n\r\n crReq.isHiddenRow = false;\r\n const hiddenRow = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == crReq.DistrictRequirement_ID && x.isHiddenRow == true);\r\n if (hiddenRow.length == 1) {\r\n // If one hidden Row exists on 2nd index then remove it and recreate a new Valid Row\r\n this.studentCourseRequests.splice(index + 1, 1);\r\n this.studentCourseRequests.push(newRow);\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n } else {\r\n this.studentCourseRequests.push(newRow);\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n }\r\n }\r\n this.reinitializeRowNumber();\r\n }\r\n\r\n addCourseSpecificAlternateRequest(crReq: StudentCourseRequestDetailDTO, index: number) {\r\n const newRow: StudentCourseRequestDetailDTO = Object.assign({}, crReq);\r\n const courseSpecificAlternateRequestCount = this.studentCourseRequests.filter(y => y.ParentCR_ID == crReq.StudentCourseRequest_ID && y.DistrictRequirement_ID == crReq.DistrictRequirement_ID).length;\r\n newRow.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n newRow.DistrictCourse_ID = -1;\r\n newRow.CRType = 'Alternate';\r\n newRow.ParentCR_ID = crReq.StudentCourseRequest_ID;\r\n newRow.PreferredTeacher = -1;\r\n newRow.PreferredTerm = '';\r\n newRow.PreferredPeriod = '';\r\n crReq.isHiddenRow = false;\r\n const hiddenRow = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == crReq.DistrictRequirement_ID && x.isHiddenRow == true);\r\n if (hiddenRow.length == 1) {\r\n // If one hidden Row exists on 2nd index then remove it and recreate a new Valid Row\r\n this.studentCourseRequests.splice(index + 1, 1);\r\n this.studentCourseRequests.push(newRow);\r\n } else {\r\n this.studentCourseRequests.splice(index + courseSpecificAlternateRequestCount + 1, 0, newRow);\r\n }\r\n\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n this.reinitializeRowNumber();\r\n }\r\n setImagePath() {\r\n this.gradeLevelRequirements.forEach(element => {\r\n const parentCRs = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == element.DistrictRequirement_ID && x.ParentCR_ID == 0);\r\n parentCRs.forEach(pcr => {\r\n const courseSpecificAlternateRequest = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == element.DistrictRequirement_ID && x.ParentCR_ID == pcr.StudentCourseRequest_ID);\r\n let counter: number;\r\n counter = 1;\r\n courseSpecificAlternateRequest.forEach(obj => {\r\n obj.imageUrl = '';\r\n if (counter == 1) {\r\n if (courseSpecificAlternateRequest.length == 1) {\r\n obj.imageUrl = './assets/images/acr-indicator-1.png';\r\n } else {\r\n obj.imageUrl = './assets/images/acr-indicator-1_1.png';\r\n }\r\n }\r\n if (counter > 1 && counter == courseSpecificAlternateRequest.length) {\r\n obj.imageUrl = './assets/images/acr-indicator-3.png';\r\n }\r\n if (counter > 1 && counter != courseSpecificAlternateRequest.length) {\r\n obj.imageUrl = './assets/images/acr-indicator-2.png';\r\n }\r\n counter = counter + 1;\r\n });\r\n });\r\n\r\n });\r\n }\r\n reinitializeRowNumber() {\r\n this.gradeLevelRequirements.forEach(req => {\r\n let counter: number;\r\n counter = 1;\r\n this.studentCourseRequests.forEach(scr => {\r\n if (req.DistrictRequirement_ID == scr.DistrictRequirement_ID) {\r\n scr.RowNumber = counter;\r\n counter = counter + 1;\r\n }\r\n\r\n });\r\n });\r\n this.studentCourseRequests = _.sortBy(this.studentCourseRequests, ['DistrictRequirement_ID', 'RowNumber']);\r\n this.setImagePath();\r\n this.courseRequesrRequirementSource.data = this.studentCourseRequests;\r\n }\r\n\r\n getChanges(initalCourseRequests: StudentCourseRequestDetailDTO[], courseRequestsToUpdate: StudentCourseRequestDetailDTO[]) {\r\n\r\n const initCr: StudentCourseRequestDTO[] = [];\r\n this.toAdd = [];\r\n this.toDelete = [];\r\n this.toKeep = [];\r\n this.toUpdate = [];\r\n\r\n initalCourseRequests.forEach(scr => {\r\n if (scr.DistrictCourse_ID > 0) {\r\n const tmpSCR = new StudentCourseRequestDTO();\r\n tmpSCR.DistrictRequirement_ID = scr.DistrictRequirement_ID;\r\n tmpSCR.StudentCourseRequest_ID = scr.StudentCourseRequest_ID;\r\n tmpSCR.DistrictCourse_ID = scr.DistrictCourse_ID;\r\n tmpSCR.CRType = scr.CRType;\r\n tmpSCR.ParentCR_ID = scr.ParentCR_ID;\r\n tmpSCR.PreferredTeacher = scr.PreferredTeacher;\r\n tmpSCR.PreferredTerm = scr.PreferredTerm;\r\n tmpSCR.PreferredPeriod = scr.PreferredPeriod;\r\n initCr.push(tmpSCR);\r\n }\r\n });\r\n\r\n const updateCr: StudentCourseRequestDTO[] = [];\r\n courseRequestsToUpdate.forEach(scr => {\r\n if (scr.DistrictCourse_ID > 0) {\r\n const tmpSCR = new StudentCourseRequestDTO();\r\n tmpSCR.DistrictRequirement_ID = scr.DistrictRequirement_ID;\r\n tmpSCR.StudentCourseRequest_ID = scr.StudentCourseRequest_ID;\r\n tmpSCR.DistrictCourse_ID = scr.DistrictCourse_ID;\r\n tmpSCR.CRType = scr.CRType;\r\n tmpSCR.ParentCR_ID = scr.ParentCR_ID;\r\n tmpSCR.PreferredTeacher = scr.PreferredTeacher;\r\n tmpSCR.PreferredTerm = scr.PreferredTerm;\r\n tmpSCR.PreferredPeriod = scr.PreferredPeriod;\r\n updateCr.push(tmpSCR);\r\n }\r\n });\r\n\r\n initCr.forEach(element => {\r\n const tmpRecord: StudentCourseRequestDTO = updateCr.find(x => x.StudentCourseRequest_ID == element.StudentCourseRequest_ID);\r\n if (tmpRecord) {\r\n if (_.isEqual(tmpRecord, element)) {\r\n this.toKeep.push(element);\r\n } else {\r\n if (element.DistrictCourse_ID != tmpRecord.DistrictCourse_ID) {\r\n // if the course was changed, delete the original, add the new\r\n if (tmpRecord.DistrictRequirement_ID != -1) {\r\n this.toAdd.push(tmpRecord);\r\n this.toDelete.push(element);\r\n }\r\n } else {\r\n // if the course wasn't changed, then update the parameters\r\n this.toUpdate.push(tmpRecord);\r\n }\r\n }\r\n } else {\r\n // record removed, so delete it.\r\n this.toDelete.push(element);\r\n }\r\n });\r\n\r\n // check for new records\r\n updateCr.forEach(element => {\r\n const tmpRecord: StudentCourseRequestDTO = initCr.find(x => x.StudentCourseRequest_ID == element.StudentCourseRequest_ID);\r\n if (!tmpRecord) {\r\n this.toAdd.push(element);\r\n }\r\n });\r\n /*\r\n console.log('Keep', this.toKeep);\r\n console.log('To Delete', this.toDelete);\r\n console.log('To Update', this.toUpdate);\r\n console.log('To Add', this.toAdd);\r\n */\r\n }\r\n\r\n save() {\r\n this.formIsDirty = false;\r\n this.validateAndSave();\r\n }\r\n\r\n validateAndSave() {\r\n\r\n this.getChanges(this.initialStudentCourseRequests, this.studentCourseRequests);\r\n\r\n\r\n this.errorList = [];\r\n this.errors = [];\r\n let overallRecuirementCredits: number;\r\n overallRecuirementCredits = 0.00;\r\n\r\n if (this.studentCourseRequests.filter(x => x.DistrictCourse_ID > 0).length < 1) {\r\n const error: ErrorList = {\r\n fieldName: '',\r\n errorMsg: 'at least one course must be selected.',\r\n fieldRef: null\r\n };\r\n this.errors.push(error);\r\n return false;\r\n }\r\n\r\n this.gradeLevelRequirements.forEach(requirement => {\r\n let totalRecuirementCredits: number;\r\n totalRecuirementCredits = 0.00;\r\n const courseRequestInfo = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == requirement.DistrictRequirement_ID);\r\n const requirementCourses: CRRequirementCourses[] = [];\r\n courseRequestInfo.forEach(cri => {\r\n if (cri.DistrictCourse_ID > 0) {\r\n const tempCourse = this.courseOptions.find(x => x.CourseId == cri.DistrictCourse_ID);\r\n if (tempCourse != undefined) {\r\n let courseName: string;\r\n if (tempCourse.TextField.split(']').length == 2) {\r\n courseName = tempCourse.TextField.split(']')[1].trim();\r\n } else {\r\n courseName = tempCourse.TextField;\r\n }\r\n\r\n if (tempCourse != undefined) {\r\n if (cri.CRType == 'Primary') {\r\n requirementCourses.push(tempCourse);\r\n }\r\n if (this.loginService.LoginSettings.V10 == true) {\r\n totalRecuirementCredits += tempCourse.Credits;\r\n } else {\r\n let courseCredit: number;\r\n courseCredit = 0.0;\r\n if (cri.CRType == 'Primary') {\r\n if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'Y' && cri.PreferredTerm.startsWith('S')) {\r\n courseCredit = tempCourse.Credits / tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'S' && cri.PreferredTerm.trim() == '') {\r\n courseCredit = tempCourse.Credits * tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'T' && cri.PreferredTerm.trim() == '') {\r\n courseCredit = tempCourse.Credits * tempCourse.SemestersPerYear * tempCourse.TermsPerSemesters;\r\n }\r\n else if (tempCourse.SubjectTermType == 'Y' && tempCourse.CreditDeliveryTermType == 'T' && cri.PreferredTerm.startsWith('S')) {\r\n courseCredit = tempCourse.Credits * tempCourse.TermsPerSemesters;\r\n }\r\n else if (tempCourse.SubjectTermType == 'S' && tempCourse.CreditDeliveryTermType == 'Y') {\r\n courseCredit = tempCourse.Credits / tempCourse.SemestersPerYear;\r\n }\r\n else if (tempCourse.SubjectTermType == 'S' && tempCourse.CreditDeliveryTermType == 'T') {\r\n courseCredit = tempCourse.Credits * tempCourse.TermsPerSemesters;\r\n }\r\n else {\r\n courseCredit = tempCourse.Credits;\r\n }\r\n }\r\n totalRecuirementCredits += courseCredit;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n // uncomment to test\r\n // this.courseRequestSchoolPolicy.CR360PreventParentStudentSubmittingCourseRequests = true;\r\n // this.courseRequestSchoolPolicy.CR360EnforceRule = 'warning';\r\n if (this.courseRequestSchoolPolicy.CR360PreventParentStudentSubmittingCourseRequests == true\r\n && totalRecuirementCredits < requirement.ReqMinCredits) {\r\n const error: ErrorList = {\r\n fieldName: requirement.RequirementName,\r\n errorMsg: this.studentName + ' has fewer than the minimum credits requested for requirement ' + requirement.RequirementName + '.',\r\n fieldRef: null\r\n };\r\n this.errorList.push(error);\r\n }\r\n if (this.courseRequestSchoolPolicy.CR360PreventParentStudentSubmittingCourseRequests == true\r\n && totalRecuirementCredits > requirement.ReqMaxCredits && requirement.ReqMaxCredits > 0) {\r\n const error: ErrorList = {\r\n fieldName: requirement.RequirementName,\r\n errorMsg: this.studentName + ' has more than the maximum credits requested for requirement ' + requirement.RequirementName + '.',\r\n fieldRef: null\r\n };\r\n this.errorList.push(error);\r\n }\r\n overallRecuirementCredits += totalRecuirementCredits;\r\n\r\n });\r\n\r\n if (this.courseRequestSchoolPolicy.CR360PreventParentStudentSubmittingCourseRequests == true\r\n && overallRecuirementCredits < this.overAllRequirement.ReqMinCredits) {\r\n const error: ErrorList = {\r\n fieldName: '',\r\n errorMsg: this.studentName + ' has fewer than the minimum overall credits requested.',\r\n fieldRef: null\r\n };\r\n this.errorList.push(error);\r\n }\r\n if (this.courseRequestSchoolPolicy.CR360PreventParentStudentSubmittingCourseRequests == true\r\n && this.overAllRequirement.ReqMaxCredits > 0 && overallRecuirementCredits > this.overAllRequirement.ReqMaxCredits) {\r\n const error: ErrorList = {\r\n fieldName: '',\r\n errorMsg: this.studentName + ' has more than the maximum overall credits requested.',\r\n fieldRef: null\r\n };\r\n this.errorList.push(error);\r\n }\r\n\r\n let enforceRule = 'error';\r\n if (this.counselor && this.counselorCanOverrideConflicts) {\r\n enforceRule = 'warning';\r\n } else {\r\n enforceRule = this.courseRequestSchoolPolicy.CR360EnforceRule;\r\n }\r\n\r\n if (this.errorList.length > 0) {\r\n this.crWarningDialogRef = this.dialog.open(CRWarningComponent, {\r\n disableClose: true,\r\n minWidth: '450px',\r\n maxWidth: '500px',\r\n data: { errorList: this.errorList, enforceRule: enforceRule }\r\n });\r\n this.crWarningDialogRef.afterClosed().subscribe((result: any) => {\r\n if (result == 'Save Anyway was clicked') {\r\n this.saveData();\r\n }\r\n });\r\n } else {\r\n this.saveData();\r\n }\r\n }\r\n\r\n saveData() {\r\n const studentCourseRequest: StudentCourseRequestDTO[] = [];\r\n this.studentCourseRequests.forEach(scr => {\r\n if (scr.DistrictCourse_ID > 0 && scr.DistrictRequirement_ID != -1) {\r\n const tmpSCR = new StudentCourseRequestDTO();\r\n tmpSCR.DistrictRequirement_ID = scr.DistrictRequirement_ID;\r\n tmpSCR.StudentCourseRequest_ID = scr.StudentCourseRequest_ID;\r\n tmpSCR.DistrictCourse_ID = scr.DistrictCourse_ID;\r\n tmpSCR.CRType = scr.CRType;\r\n tmpSCR.ParentCR_ID = scr.ParentCR_ID;\r\n tmpSCR.PreferredTeacher = scr.PreferredTeacher;\r\n tmpSCR.PreferredTerm = scr.PreferredTerm;\r\n tmpSCR.PreferredPeriod = scr.PreferredPeriod;\r\n studentCourseRequest.push(tmpSCR);\r\n }\r\n });\r\n\r\n const courseRequestData = {\r\n students: [this.studentService.selectedStudent.Id].map(x => ({ student_id: x })),\r\n coursesToAdd: {\r\n course:\r\n this.toAdd.filter(y => y.DistrictCourse_ID > 0 && y.DistrictRequirement_ID != -1).map(x => ({\r\n DistrictCourse_ID: x.DistrictCourse_ID,\r\n RequirementIds: x.DistrictRequirement_ID,\r\n CRType: x.CRType,\r\n PreferredTeacher: x.PreferredTeacher == 0 ? null : x.PreferredTeacher,\r\n PreferredTerm: x.PreferredTerm,\r\n PreferredPeriod: x.PreferredPeriod,\r\n RequirementType: 1,\r\n ParentCR_ID: x.ParentCR_ID\r\n })\r\n )\r\n },\r\n };\r\n\r\n\r\n // deletes / updates / adds\r\n const courseRequestsToDelete: SchoolCourseRequestModel[] = [];\r\n this.toDelete.forEach(element => {\r\n if (element.DistrictCourse_ID > 0 && element.DistrictRequirement_ID != -1) {\r\n const tempCr: SchoolCourseRequestModel = new SchoolCourseRequestModel();\r\n tempCr.StudentCourseRequest_ID = element.StudentCourseRequest_ID;\r\n courseRequestsToDelete.push(tempCr);\r\n }\r\n });\r\n\r\n if (courseRequestsToDelete.length > 0) {\r\n this.courseRequestMgmtService.deleteSchoolCourseRequests(courseRequestsToDelete).subscribe(result => {\r\n if (this.toUpdate.length > 0) {\r\n this.studentCourseRequestService.saveCourseRequestData(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, this.toUpdate).subscribe(updateResult => {\r\n this.addNewRecords(courseRequestData);\r\n });\r\n } else {\r\n this.addNewRecords(courseRequestData);\r\n }\r\n });\r\n } else {\r\n if (this.toUpdate.length > 0) {\r\n this.studentCourseRequestService.saveCourseRequestData(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, this.toUpdate).subscribe(updateResult => {\r\n this.addNewRecords(courseRequestData);\r\n });\r\n } else {\r\n this.addNewRecords(courseRequestData);\r\n }\r\n }\r\n\r\n // this.studentCourseRequestService.saveCourseRequestData(this.studentEnrollment.StudentId, this.studentEnrollment.SchoolId, this.studentEnrollment.AcademicYearID, this.studentEnrollment.GradeLevelId, studentCourseRequest).subscribe(result => {\r\n // if (result == true) {\r\n // this.getStudentCourseRequestInformation();\r\n // }\r\n // });\r\n }\r\n\r\n addNewRecords(courseRequestData) {\r\n this.courseRequestMgmtService.AddRemoveCourseRequestInMass(courseRequestData, this.counselor ? false : true, this.studentEnrollment.SiteYearId).subscribe(addResults => {\r\n this.identifiedEnforcedConflicts = [];\r\n this.identifiedPreferredConflicts = [];\r\n let enforceRule = '';\r\n let idConflicts: IdentifiedConflictsDTO[];\r\n idConflicts = addResults.identifiedConflicts;\r\n idConflicts.forEach(element => {\r\n if (element.RelationshipEnforcement == 3) {\r\n this.identifiedEnforcedConflicts.push(element);\r\n }\r\n if (element.RelationshipEnforcement == 2) {\r\n this.identifiedPreferredConflicts.push(element);\r\n }\r\n });\r\n let errorTitle = '';\r\n let hasEnforcedConflicts = false;\r\n let hasPreferredConflicts = false;\r\n if (this.identifiedEnforcedConflicts.length > 0) {\r\n hasEnforcedConflicts = true;\r\n }\r\n if (this.identifiedPreferredConflicts.length > 0) {\r\n hasPreferredConflicts = true;\r\n }\r\n if (hasEnforcedConflicts && hasPreferredConflicts) {\r\n errorTitle = 'Some requests could not be met due to the following errors:';\r\n }\r\n if (!hasEnforcedConflicts && hasPreferredConflicts) {\r\n enforceRule = 'conflict_warning';\r\n errorTitle = 'Requests have been saved, but potential errors need to be approved by a Counselor:';\r\n }\r\n if (this.counselor && this.counselorCanOverrideConflicts) {\r\n enforceRule = 'warning';\r\n }\r\n if (hasEnforcedConflicts && !hasPreferredConflicts) {\r\n errorTitle = 'Some requests could not be met due to the following errors:';\r\n }\r\n if (hasEnforcedConflicts || hasPreferredConflicts) {\r\n const errorList: ErrorList[] = [];\r\n this.identifiedEnforcedConflicts.forEach(element => {\r\n const error: ErrorList = new ErrorList();\r\n error.errorMsg = element.ConflictMessage;\r\n errorList.push(error);\r\n });\r\n this.identifiedPreferredConflicts.forEach(element => {\r\n const error2: ErrorList = new ErrorList();\r\n error2.errorMsg = element.ConflictMessage;\r\n errorList.push(error2);\r\n });\r\n this.crWarningDialogRef = this.dialog.open(CRWarningComponent, {\r\n disableClose: true,\r\n minWidth: '450px',\r\n maxWidth: '500px',\r\n data: { errorList: errorList, enforceRule: enforceRule, errorTitle: errorTitle },\r\n });\r\n this.crWarningDialogRef.afterClosed().subscribe((result2: any) => {\r\n if (result2 == 'Save Anyway was clicked') {\r\n if (hasEnforcedConflicts) {\r\n this.courseRequestMgmtService.OverrideConflicts(this.identifiedEnforcedConflicts).subscribe(x => {\r\n console.log('overrideconflicts', x);\r\n this.sharedService.showGoodSnackbar();\r\n this.getStudentCourseRequestInformation();\r\n });\r\n }\r\n } else {\r\n this.getStudentCourseRequestInformation();\r\n }\r\n });\r\n } else {\r\n this.sharedService.showGoodSnackbar();\r\n this.getStudentCourseRequestInformation();\r\n }\r\n });\r\n }\r\n\r\n deleteCourseRequest(scr: StudentCourseRequestDetailDTO, index: number) {\r\n const course = this.courseOptions.find(o => o.ValueField == scr.DistrictCourse_ID);\r\n const dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n data: {\r\n headerLabel: 'Delete Course Request',\r\n confirmMessage: 'Are you sure you want to delete ' + (course ? course.TextField : 'this course request') + '?'\r\n }\r\n });\r\n dialogBox.afterClosed().pipe(take(1)).subscribe(confirm => {\r\n if (confirm) {\r\n const scrReq = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == scr.DistrictRequirement_ID && x.CRType == 'Primary');\r\n if (scr.CRType == 'Primary' && scrReq.length <= scr.DefaultNumberOfCourseRequests) {\r\n scr.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n scr.DistrictCourse_ID = -1;\r\n scr.CRType = 'Primary';\r\n scr.ParentCR_ID = 0;\r\n scr.PreferredTeacher = -1;\r\n scr.PreferredTerm = '';\r\n scr.PreferredPeriod = '';\r\n scr.isHiddenRow = false;\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n course.IsAlreadyRequestedCR = false;\r\n this.studentCourseRequests.splice(index, 1);\r\n } else {\r\n this.studentCourseRequests.splice(index, 1);\r\n }\r\n }\r\n // if (scr.StudentCourseRequest_ID > 0) {\r\n // this.studentCourseRequestService.deleteStudentCourseRequest(scr.StudentCourseRequest_ID).subscribe(result => {\r\n // if (result == true) {\r\n // if (scr.CRType == 'Primary' && scrReq.length <= scr.DefaultNumberOfCourseRequests) {\r\n // scr.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n // scr.DistrictCourse_ID = -1;\r\n // scr.CRType = 'Primary';\r\n // scr.ParentCR_ID = 0;\r\n // scr.PreferredTeacher = -1;\r\n // scr.PreferredTerm = '';\r\n // scr.PreferredPeriod = '';\r\n // scr.isHiddenRow = false;\r\n // this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n // course.IsAlreadyRequestedCR = false;\r\n // this.studentCourseRequests.splice(index, 1);\r\n // } else {\r\n // this.studentCourseRequests.splice(index, 1);\r\n // }\r\n // }\r\n // });\r\n // } else if (scr.DistrictCourse_ID > 0) {\r\n // if (scr.CRType == 'Primary' && scrReq.length <= scr.DefaultNumberOfCourseRequests) {\r\n // scr.DistrictCourse_ID = 0;\r\n // scr.PreferredTerm = '';\r\n // scr.PreferredPeriod = '';\r\n // scr.PreferredTeacher = 0;\r\n // } else {\r\n // this.studentCourseRequests.splice(index, 1);\r\n // }\r\n // } else {\r\n // this.studentCourseRequests.splice(index, 1);\r\n // }\r\n this.checkHiddenRow();\r\n this.setCreditIndicators();\r\n });\r\n }\r\n checkHiddenRow() {\r\n this.gradeLevelRequirements.forEach(req => {\r\n const scr = this.studentCourseRequests.filter(x => x.DistrictRequirement_ID == req.DistrictRequirement_ID);\r\n const tmpSCR: StudentCourseRequestDetailDTO = new StudentCourseRequestDetailDTO();\r\n tmpSCR.RowNumber = 0;\r\n tmpSCR.DistrictRequirement_ID = req.DistrictRequirement_ID;\r\n tmpSCR.SchoolRequirement_ID = req.SchoolRequirement_ID;\r\n tmpSCR.GradeLevel_ID = req.GradeLevel_ID;\r\n tmpSCR.RequirementName = req.RequirementName;\r\n tmpSCR.RequirementInstructions = req.RequirementInstructions;\r\n tmpSCR.RequirementType = req.RequirementType;\r\n tmpSCR.ReqMinCredits = req.ReqMinCredits;\r\n tmpSCR.ReqMaxCredits = req.ReqMaxCredits;\r\n tmpSCR.ReqMinCourses = req.ReqMinCourses;\r\n tmpSCR.ReqMaxCourses = req.ReqMaxCourses;\r\n tmpSCR.DefaultNumberOfCourseRequests = req.DefaultNumberOfCourseRequests;\r\n tmpSCR.AllowGlobalAlternates = req.AllowGlobalAlternates;\r\n tmpSCR.AltMinCredits = req.AltMinCredits;\r\n tmpSCR.AltMaxCredits = req.AltMaxCredits;\r\n tmpSCR.AltMinCourses = req.AltMinCourses;\r\n tmpSCR.AltMaxCourses = req.AltMaxCourses;\r\n tmpSCR.AllowIndividualAlternates = req.AllowIndividualAlternates;\r\n tmpSCR.NumberOfIndividualAlternates = req.NumberOfIndividualAlternates;\r\n tmpSCR.RequestedCredits = req.RequestedCredits;\r\n tmpSCR.StudentCourseRequest_ID = this.tmpStudentCourseRequestId;\r\n tmpSCR.DistrictCourse_ID = -1;\r\n tmpSCR.CRType = '';\r\n tmpSCR.ParentCR_ID = 0;\r\n tmpSCR.PreferredTeacher = 0;\r\n tmpSCR.PreferredTerm = '';\r\n tmpSCR.PreferredPeriod = '';\r\n tmpSCR.Conflicts = 0;\r\n tmpSCR.isHiddenRow = true;\r\n tmpSCR.isHover = false;\r\n tmpSCR.HighlightMinCredit = false;\r\n tmpSCR.HighlightMaxCredit = false;\r\n tmpSCR.imageUrl = '';\r\n this.tmpStudentCourseRequestId = this.tmpStudentCourseRequestId - 1;\r\n if (scr.length == 0) {\r\n this.studentCourseRequests.push(tmpSCR);\r\n this.studentCourseRequests.push(tmpSCR);\r\n }\r\n if (scr.length == 1) {\r\n this.studentCourseRequests.push(tmpSCR);\r\n }\r\n });\r\n this.reinitializeRowNumber();\r\n }\r\n openConflictsInformation(crRow: StudentCourseRequestDTO) {\r\n alert('Not yet implemented');\r\n }\r\n\r\n openCourseDescription(crReq: StudentCourseRequestDetailDTO, index: number) {\r\n // PRE: the user clicks on a course description link under a course\r\n // POST: shows a modal for the course's description\r\n\r\n const cd: CourseDescription = this.courseDescriptions[crReq.DistrictCourse_ID];\r\n this.dialog.open(CourseDescriptionDialogComponent, {\r\n data: {\r\n course: cd.CourseName,\r\n courseSection: cd.SubjectIdentifier,\r\n teacherName: '',\r\n schoolName: this.studentEnrollment.SchoolName,\r\n curriculum: cd.CourseCurriculum,\r\n description: cd.CourseDescription\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n toolsMenuItemClick(menuItem: MenuItem) {\r\n // PRE: a menu item on the tools menu is clicked (only available to counselors)\r\n // POST: navigates to the proper screen\r\n switch (menuItem.itemName) {\r\n case 'Schedule Student List':\r\n this.router.navigateByUrl('counselor360/scheduling/scheduleStudentList');\r\n break;\r\n case 'Student Summary':\r\n this.courseRequestMgmtService.schoolCRM_selectedTab = 'Student Summary';\r\n this.router.navigateByUrl('counselor360/scheduling/schoolCourseRequestSetup?filterToStudents=Y');\r\n break;\r\n }\r\n }\r\n\r\n redirect(url: string) {\r\n this.router.navigateByUrl('/counselor360/scheduling/schoolCourseRequestSetup');\r\n }\r\n\r\n compareObjects(o1: number, o2: number): boolean {\r\n if (o2 == null) {\r\n o2 = -1;\r\n }\r\n return (o1 == o2);\r\n }\r\n\r\n openFilter() { }\r\n resizeGrid() {\r\n setTimeout(() => {\r\n this.gridHeight = window.innerHeight - 67 - 30 - this.studentHeaderHeight - this.footerHeight;\r\n }, 0);\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n setTimeout(() => {\r\n this.resizeGrid();\r\n }, 0);\r\n }\r\n\r\n setDirtyFlag() {\r\n this.formIsDirty = false;\r\n if (!System.isEqual(this.studentCourseRequests, this.initialStudentCourseRequests)) {\r\n this.formIsDirty = true;\r\n }\r\n }\r\n\r\n checkErrors(nextState?: RouterStateSnapshot): number {\r\n // PRE: the user tries to navigate away\r\n // POST: checks the errors.\r\n // If 4, shows the warning dialog. If the result is true, it will wait for the save before it continues.\r\n // If 3, shows the warning, but doesn't perform route on the save (lets the component do it)\r\n // If 2, continues without save.\r\n // If 1, continues with save.\r\n // If 0, shows warning.\r\n // If -1, stops.\r\n this.errors = [];\r\n this.setDirtyFlag();\r\n if (this.formIsDirty) {\r\n return 3;\r\n } else {\r\n return 2;\r\n }\r\n }\r\n\r\n continuedWithoutSave(): any {\r\n }\r\n}\r\n","import { StudentDetailSibling } from './student-detail-sibling.model';\r\nimport { StudentDetailEnrollment } from './student-detail-enrollment.model';\r\nimport { StudentDetailParentContact } from './student-detail-parent-contact.model';\r\n\r\nexport class StudentDetail {\r\n StudentId: string;\r\n CellPhone: string;\r\n Gender: string;\r\n EnrollmentStatus: string;\r\n EnrollmentType: string;\r\n EnrollmentEntryDate: string;\r\n EnrollmentEntryCode: string;\r\n EmailAddress: string;\r\n Age: number;\r\n BirthDate: Date;\r\n PrimaryCounselor: string;\r\n PrimaryLanguage: string;\r\n Locker: string;\r\n LockerCombination: string;\r\n Ethnicity: string;\r\n GraduationPlan: string;\r\n Bus: string;\r\n Race: string;\r\n LivesWith: string;\r\n StudentStateIdentifier: string;\r\n HomeRoomCourse: string;\r\n HomeRoomSection: string;\r\n HomeRoomRoom: string;\r\n HomeRoomTeacher: string;\r\n CurrentLocationCourse: string;\r\n CurrentLocationSection: string;\r\n CurrentLocationRoom: string;\r\n CurrentLocationTeacher: string;\r\n IEPCaseManager: string;\r\n ReportCardTranscriptOnHold: string;\r\n CustodyIssue: string;\r\n StudentParentContacts: StudentDetailParentContact[];\r\n StudentEnrollments: StudentDetailEnrollment[];\r\n StudentSiblings: StudentDetailSibling[];\r\n ShowStudentLogin: boolean;\r\n ShowStudentPassword: boolean;\r\n StudentLogin: string;\r\n StudentPassword: string;\r\n EnrollmentDate: string;\r\n Residency: string;\r\n Reason: string;\r\n FTE: number;\r\n WithdrawReason: string;\r\n WithdrawDate: string;\r\n LockerRange: boolean;\r\n HomeDistrict: string;\r\n CourtOrderId: number;\r\n CourtOrderAgainst: string;\r\n DualEnrolled: string;\r\n PreviousLastName: string;\r\n TransportationComment: string;\r\n PreferedPronouns: string;\r\n}\r\n","\r\n\r\n Student Details\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n Student Details\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.EnrollmentStatus}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.PrimaryCounselor}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.GraduationPlan}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.LivesWith}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.Bus}}\r\n {{studentDetails.ReportCardTranscriptOnHold}}\r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.TransportationComment}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Student #\r\n \r\n {{studentDetails.StudentId}}
\r\n Enrollment Status\r\n
\r\n Primary Counselor\r\n
\r\n Graduation Plan\r\n
\r\n Lives With\r\n
\r\n \r\n Bus\r\n \r\n \r\n \r\n Report Card/Transcript On Hold\r\n \r\n \r\n
\r\n \r\n Transportation Comment\r\n \r\n
\r\n Custody Issue\r\n \r\n {{studentDetails.CustodyIssue}}
\r\n Student Login\r\n \r\n \r\n {{maskedLogin}}\r\n \r\n \r\n {{studentDetails.StudentLogin}}\r\n \r\n \r\n \r\n \r\n
\r\n Student Password\r\n \r\n \r\n {{maskedPassword}}\r\n \r\n \r\n {{studentDetails.StudentPassword}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n 0 || studentDetails.CourtOrderAgainst != ''))\">\r\n \r\n \r\n {{studentDetails.CourtOrderAgainst}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.StudentStateIdentifier}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.CellPhone}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.Locker}}\r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.LockerCombination}}\r\n \r\n \r\n {{maskedLocker}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {{school}}\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {{studentDetails.IEPCaseManager}}\r\n \r\n
\r\n Court Order\r\n
\r\n {{\r\n loginSettings.CountryCode == 'CAN' ? 'MET #' : ('State ID' | translate)\r\n }}\r\n
\r\n Cell Phone\r\n
\r\n Email Address\r\n \r\n {{studentDetails.EmailAddress}}\r\n \r\n {{studentDetails.EmailAddress}}\r\n
\r\n Locker #\r\n
\r\n Locker Combination\r\n
\r\n Dual Enrolled\r\n
\r\n IEP Case Manager\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{studentDetails.Gender}}\r\n \r\n {{studentDetails.PreferedPronouns}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.Age}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.Ethnicity}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.Race}}\r\n \r\n \r\n \r\n \r\n {{studentDetails.BirthDate|date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.PrimaryLanguage}}\r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.PreviousLastName}}\r\n \r\n \r\n \r\n \r\n \r\n {{studentDetails.HomeDistrict}}\r\n \r\n \r\n
\r\n Gender\r\n
\r\n Age\r\n
\r\n Ethnicity\r\n
\r\n Race\r\n
\r\n Birth Date\r\n
\r\n Language Spoken at Home\r\n
\r\n Previous Last Name\r\n
\r\n Home District\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
'' || studentDetails.CurrentLocationSection > '' || studentDetails.CurrentLocationRoom > '' || studentDetails.CurrentLocationTeacher > ''\">\r\n \r\n \r\n \r\n \r\n ''\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n '' || studentDetails.CurrentLocationCourse=='Student is between classes'\">\r\n \r\n \r\n \r\n '' || studentDetails.CurrentLocationCourse=='Student is between classes'\">\r\n \r\n \r\n \r\n
\r\n Current Location\r\n
\r\n Course\r\n \r\n {{studentDetails.CurrentLocationCourse}}
\r\n Section\r\n \r\n {{studentDetails.CurrentLocationSection}}
\r\n Room\r\n \r\n {{studentDetails.CurrentLocationRoom}}
\r\n Teacher\r\n \r\n {{studentDetails.CurrentLocationTeacher}}
\r\n
\r\n \r\n \r\n '' || studentDetails.HomeRoomSection > '' || studentDetails.HomeRoomRoom > '' || studentDetails.HomeRoomTeacher > ''\">\r\n \r\n \r\n \r\n \r\n ''\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ''\">\r\n \r\n \r\n \r\n ''\">\r\n \r\n \r\n \r\n
\r\n Home Room\r\n
\r\n Course\r\n \r\n {{studentDetails.HomeRoomCourse}}
\r\n Section\r\n \r\n {{studentDetails.HomeRoomSection}}
\r\n Room\r\n \r\n {{studentDetails.HomeRoomRoom}}
\r\n Teacher\r\n \r\n {{studentDetails.HomeRoomTeacher}}
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Parent/Contact\r\n Details\r\n \r\n
\r\n \r\n Household Parents/Guardians\r\n \r\n \r\n Non-Resident\r\n Parents\r\n \r\n \r\n Emergency\r\n Contacts\r\n \r\n\r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n R\r\n \r\n \r\n \r\n \r\n \r\n {{contact.EmergencyCallSequence}}\r\n \r\n \r\n \r\n Relationship\r\n \r\n {{contact.Relationship}}\r\n \r\n \r\n \r\n Name\r\n \r\n {{contact.Name}}\r\n \r\n \r\n \r\n Emergency Phone\r\n \r\n {{contact.EmergencyPhone}}\r\n \r\n \r\n \r\n Home Phone\r\n \r\n {{contact.Homephone}}\r\n \r\n \r\n \r\n Cell Phone\r\n \r\n {{contact.Cellphone}}\r\n \r\n \r\n \r\n \r\n
\r\n Portal Access\r\n
\r\n
\r\n \r\n
\r\n {{contact.PortalAccess ? 'Y' : 'N'}}\r\n
\r\n
\r\n
\r\n \r\n Last Portal\r\n Login\r\n \r\n \r\n {{contact.LastPortalAccess}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n Is Guardian\r\n {{contact.IsGuardian}}\r\n
\r\n
\r\n Can Pick Up\r\n {{contact.CanPickUp}}\r\n
\r\n
\r\n \r\n Student may leave with this\r\n person?\r\n {{contact.ECLeaveWithThisPerson}}\r\n \r\n Student may NOT leave with this\r\n person\r\n
\r\n
 
\r\n
\r\n Email Address\r\n {{contact.EmailAddress}}\r\n
\r\n {{contact.EmailAddress}}\r\n
\r\n
\r\n
\r\n
\r\n Employer\r\n {{contact.PlaceOfWork}}\r\n
\r\n
\r\n Work Phone\r\n {{contact.WorkPhone}}\r\n
\r\n
\r\n Home Phone 2\r\n {{contact.Homephone2}}\r\n
\r\n
\r\n
\r\n Primary Address\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Mailing Address\r\n \r\n Same as primary address\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Student may leave with this person?\r\n {{contact.ECLeaveWithThisPerson}}\r\n
\r\n Work\r\n Phone\r\n {{contact.EmergencyPhone}}
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n Comment\r\n \r\n {{contact.ECComments}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
0\">\r\n 0\"\r\n translate>Siblings\r\n \r\n \r\n Name\r\n \r\n \r\n {{sibling.Name}}\r\n \r\n {{sibling.Name}}\r\n \r\n \r\n \r\n School\r\n \r\n {{sibling.SchoolName}}\r\n \r\n \r\n \r\n Grade\r\n \r\n {{sibling.Grade}}\r\n \r\n \r\n \r\n Age\r\n \r\n {{sibling.Age > 0 ? sibling.Age : ''}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Enrollment History\r\n \r\n \r\n \r\n Year\r\n \r\n {{enrollment.Year}}\r\n \r\n \r\n \r\n Entry\r\n \r\n {{enrollment.EntryDate | date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n School\r\n \r\n {{enrollment.School}}\r\n \r\n \r\n \r\n Grade Level\r\n \r\n {{enrollment.GradeLevel}}\r\n \r\n \r\n \r\n Exit\r\n \r\n {{enrollment.WithdrawalDate|date:'MM/dd/yy'}}\r\n \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, Inject, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { AriaDirective } from '../../shared-components/directives/aria.directive';\r\nimport { CdkDetailRowDirective } from '../../shared-components/directives/cdk-detail-row.directive';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { User } from '../../shared-components/user/user.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../shared-modules/login/loginSetting.model';\r\nimport { SendEmailService } from '../../shared-modules/send-email/send-email.service';\r\nimport { StudentDetailParentContact } from './student-detail-parent-contact.model';\r\nimport { StudentDetailSibling } from './student-detail-sibling.model';\r\nimport { StudentDetail } from './student-detail.model';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-student-details',\r\n templateUrl: './student-details.component.html',\r\n animations: [\r\n detailExpand\r\n ],\r\n styleUrls: [\r\n './student-details.component.css'\r\n ]\r\n})\r\n\r\nexport class StudentDetailsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() showSiblingLinks = false;\r\n @Output() studentInformationClickEvent = new EventEmitter();\r\n loginSettings: LoginSettings;\r\n student360YearSubscription: Subscription;\r\n student360Year: Year;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n studentDetails: StudentDetail = new StudentDetail();\r\n studentDetailIn: StudentDetail[] = [];\r\n displayParentContacts: StudentDetailParentContact[] = [];\r\n subscriptions: Subscription[] = [];\r\n rowExpanded: Array = new Array();\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n columnsToDisplay: string[] = ['More', 'Relationship', 'Name', 'EmergencyPhone', 'Homephone', 'Cellphone'];\r\n columnsToDisplayStudentDetail = ['Primary Parent', 'Email Address', 'Is Guardian', 'Lives With', 'Has Custody', 'Restricted', 'Place Of Work', 'Primary Address', 'Mailing Address', 'Work Phone', 'Student may leave with this person', 'Comment'];\r\n columnsToDisplayDetailRow: string[] = ['View'];\r\n parentType = ['Parent', 'Household', 'Nonresident', 'Emergency'];\r\n studentLoginHidden = true;\r\n studentPasswordHidden = true;\r\n lockerComboHidden = true;\r\n maskedLogin = '';\r\n maskedPassword = '';\r\n maskedLocker = '';\r\n isBusy: boolean;\r\n selectedRow: StudentDetailParentContact;\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n row: any;\r\n currentUser: User;\r\n schools = [];\r\n isOverlay: boolean;\r\n enableGenderPronouns = false;\r\n\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private router: Router,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private sendEmailService: SendEmailService,\r\n private dialog: MatDialog,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public injectdata: any\r\n ) {\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(studentId => {\r\n if (studentId && studentId > 0) {\r\n this.loadStudentInfo(studentId);\r\n }\r\n });\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(() => {\r\n this.getStudentDetails();\r\n });\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.angularMatData = new TylerMatTableDataSource(this.displayParentContacts);\r\n if (this.injectdata) {\r\n this.isOverlay = this.injectdata.isOverlay;\r\n }\r\n }\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.getStudentDetails();\r\n }\r\n\r\n ngOnInit() {\r\n this.currentUser = this.userService.currentUser;\r\n this.enableGenderPronouns = this.loginService.LoginSettings.EnableGenderPronouns;\r\n\r\n if (this.currentUser.UserType == 1) {\r\n this.columnsToDisplay = ['More', 'Relationship', 'Name', 'EmergencyPhone', 'Homephone', 'Cellphone', 'PortalAccess', 'LastAccess'];\r\n }\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n for (let i = 0; i < this.parentType.length; i++) {\r\n for (let j = 0; j < this.rowExpanded[i].length; j++) {\r\n this.rowExpanded[i][j] = toggle;\r\n }\r\n }\r\n\r\n })\r\n );\r\n\r\n if (!this.loginSettings.DisplayEmergencyPhoneNumberInGrid) {\r\n if (this.currentUser.UserType == 1) {\r\n this.columnsToDisplay = ['More', 'Relationship', 'Name', 'Homephone', 'Cellphone', 'PortalAccess', 'LastAccess'];\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectedStudentSubscription.unsubscribe();\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n getStudentDetails() {\r\n const yearId = (this.userService.currentUser.UserType != 1) ? this.yearService.allYears.filter(y => y.Default)[0].Id : this.yearService.student360Year.Id;\r\n this.subscriptions.push(\r\n this.studentService.getStudentDetails(this.selectedStudent.Id, yearId, this.userService.userId).subscribe(detail => {\r\n if (detail != null) {\r\n this.studentDetails = detail;\r\n this.displayParentContacts = this.studentDetails.StudentParentContacts;\r\n this.loadStudenDetails();\r\n for (let i = 0; i < this.parentType.length; i++) {\r\n const arr: Array = [];\r\n for (let j = 0; j < this.displayParentContacts.filter(contact => contact.ParentType == this.parentType[i]).length; j++) {\r\n arr.push(false);\r\n }\r\n this.rowExpanded.push(arr);\r\n }\r\n if (this.studentDetails.ShowStudentLogin) {\r\n this.maskedLogin = '';\r\n for (let i = 0; i < this.studentDetails.StudentLogin.length; i++) {\r\n this.maskedLogin = this.maskedLogin + '*';\r\n }\r\n }\r\n if (this.studentDetails.ShowStudentPassword) {\r\n this.maskedPassword = '';\r\n for (let i = 0; i < this.studentDetails.StudentPassword.length; i++) {\r\n this.maskedPassword = this.maskedPassword + '*';\r\n }\r\n }\r\n if (this.studentDetails.LockerCombination != null) {\r\n this.maskedLocker = '';\r\n for (let i = 0; i < this.studentDetails.LockerCombination.length; i++) {\r\n this.maskedLocker = this.maskedLocker + '*';\r\n }\r\n }\r\n\r\n this.schools = this.studentDetails.DualEnrolled.split(',');\r\n }\r\n })\r\n );\r\n }\r\n\r\n private loadStudenDetails(): void {\r\n this.angularMatData = new TylerMatTableDataSource(this.displayParentContacts);\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n\r\n this.isBusy = false;\r\n }\r\n\r\n onToggleChange(cdkDetailRow: CdkDetailRowDirective): void {\r\n if (cdkDetailRow.row.AttendanceDetails != undefined && cdkDetailRow.row.AttendanceDetails.length == 0 && cdkDetailRow.expended) {\r\n cdkDetailRow.toggle();\r\n }\r\n }\r\n\r\n getAriaDetailRow(row: StudentDetailParentContact): string {\r\n const colList: string[] = ['Relationship',\r\n 'Name',\r\n 'Homephone',\r\n 'EmergencyPhone',\r\n 'Cellphone'];\r\n\r\n const dataList: string[] = [row.Relationship,\r\n row.Name,\r\n row.EmergencyPhone,\r\n row.Homephone,\r\n row.Cellphone];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n getAriaStudentDetail(row: StudentDetailParentContact): string {\r\n const colList: string[] = ['Primary Parent',\r\n 'Email Address',\r\n 'Is Guardian',\r\n 'Lives With',\r\n 'Has Custody',\r\n 'Restricted',\r\n 'Place Of Work',\r\n 'Primary Address',\r\n 'Mailing Address',\r\n 'Work Phone',\r\n 'Student may leave with this person',\r\n 'Comment'];\r\n\r\n const dataList: string[] = [row.PrimaryParent,\r\n row.EmailAddress,\r\n row.IsGuardian,\r\n row.LivesWith,\r\n row.HasCustody,\r\n row.Restricted,\r\n row.PlaceOfWork,\r\n row.PrimaryAddress,\r\n row.MailingAddress,\r\n row.EmergencyPhone,\r\n row.ECLeaveWithThisPerson,\r\n row.ECComments];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n\r\n hasParentContacts(parentType: string): boolean {\r\n return this.displayParentContacts.filter(contact => contact.ParentType == parentType).length > 0;\r\n }\r\n\r\n getParentContactTableData(parentType: string): StudentDetailParentContact[] {\r\n return this.displayParentContacts.filter(contact => contact.ParentType == parentType);\r\n }\r\n\r\n toggleMore(row: any) {\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n sendEmail(name: string, emailAddress: string) {\r\n this.sendEmailService.teacherEmailAddress = emailAddress;\r\n this.sendEmailService.teacherName = name;\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n studentInformationClick(studentId: number) {\r\n this.studentDetails.StudentSiblings.forEach(obj => {\r\n obj.Selected = obj.Id == studentId ? true : false;\r\n });\r\n this.studentInformationClickEvent.emit(this.studentDetails.StudentSiblings);\r\n }\r\n}","export class StudentDigitalContent {\r\n Id: number;\r\n DocumentId: number;\r\n DocumentOwnerId: number;\r\n DocumentTypeId: number;\r\n DocumentType: string;\r\n FileName: string;\r\n OriginalFileName: string;\r\n Description: string;\r\n UploadedDate: Date;\r\n MyFileBase64String: string;\r\n FileExtension: string;\r\n FileType: string;\r\n FormAddedBy: string;\r\n DocumentMimeType: string;\r\n ParentId: number;\r\n Family_ID?:number;\r\n }\r\n","
\r\n Add Document\r\n Edit Document\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{type.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n Please select a file\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n","import { Component, OnInit, ViewChild, Inject, ElementRef } from '@angular/core';\r\nimport { AddFileComponent } from '../../../shared-components/controls/add-file/add-file.component';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { StudentDigitalContentService } from '../student-digital-content.service';\r\nimport { StudentDigitalContent } from '../models/student-digital-content.model';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\n\r\n@Component({\r\n selector: 'add-content-modal',\r\n templateUrl: './add-content-modal.component.html'\r\n})\r\nexport class AddContentModalComponent implements OnInit {\r\n\r\n sdc: StudentDigitalContent;\r\n\r\n documentTypeIdString: string;\r\n descriptionString: string;\r\n fileNameString: string;\r\n\r\n newFile: boolean;\r\n fileError: boolean;\r\n documentTypes: Lookup[] = [];\r\n errors: ErrorList[] = [];\r\n @ViewChild('fileNameInput', { read: ElementRef, static: true }) fileNameInput: ElementRef;\r\n @ViewChild('documentTypeInput', { read: ElementRef, static: true }) documentTypeInput: ElementRef;\r\n @ViewChild(AddFileComponent) addFile;\r\n\r\n\r\n constructor(private yearService: YearService,\r\n private lookupService: LookupService,\r\n private studentDigitalContentService: StudentDigitalContentService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private studentService: StudentService,\r\n private dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit() {\r\n this.sdc = this.data.sdc;\r\n\r\n if (this.sdc == undefined) {\r\n this.sdc = new StudentDigitalContent;\r\n this.newFile = true;\r\n }\r\n else {\r\n this.documentTypeIdString = this.sdc.DocumentTypeId.toString();\r\n this.descriptionString = this.sdc.Description;\r\n this.fileNameString = this.sdc.FileName;\r\n }\r\n\r\n if (this.studentDigitalContentService.documentTypes.length == 0) {\r\n this.lookupService.getORFormDocumentType(this.yearService.student360Year.SchoolID).subscribe(result => {\r\n this.studentDigitalContentService.documentTypes = result;\r\n this.documentTypes = this.studentDigitalContentService.documentTypes;\r\n });\r\n }\r\n else {\r\n this.documentTypes = this.studentDigitalContentService.documentTypes;\r\n }\r\n }\r\n\r\n saveClick() {\r\n this.checkInputs();\r\n\r\n if (this.errors.length == 0) {\r\n\r\n this.sdc.DocumentOwnerId = this.studentService.selectedStudent.Id;\r\n this.sdc.DocumentType = this.documentTypes.find(x => x.Id == this.documentTypeIdString).CodeDescription;\r\n this.sdc.DocumentTypeId = parseInt(this.documentTypeIdString);\r\n this.sdc.Description = this.descriptionString;\r\n this.sdc.FileName = this.fileNameString;\r\n\r\n if (this.newFile) {\r\n this.sdc.FileExtension = '.' + this.addFile.fileExtension;\r\n this.sdc.OriginalFileName = this.addFile.fileName;\r\n this.sdc.MyFileBase64String = this.addFile.fileString;\r\n this.sdc.FileType = this.addFile.fileType; \r\n }\r\n\r\n // save to the database\r\n this.studentDigitalContentService.saveStudentDigitalContent(this.sdc, this.yearService.student360Year.SchoolID).subscribe(result => {\r\n if (result > 0) {\r\n // Close the dialog\r\n this.dialogRef.close(true);\r\n }\r\n });\r\n }\r\n }\r\n\r\n checkInputs() {\r\n let isValidFile = true;\r\n\r\n this.errors = [];\r\n\r\n if (this.fileNameString == undefined || this.fileNameString == null || this.fileNameString == '') {\r\n this.errors.push({\r\n fieldName: 'File Name',\r\n fieldRef: this.fileNameInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n if (this.documentTypeIdString == undefined || this.documentTypeIdString == null || this.documentTypeIdString == '') {\r\n this.errors.push({\r\n fieldName: 'Document Type',\r\n fieldRef: this.documentTypeInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n\r\n if (this.newFile) {\r\n\r\n if (!this.addFile.hasOwnProperty('fileName')) {\r\n this.fileError = true;\r\n isValidFile = false;\r\n } else {\r\n if (this.addFile.fileName == null) {\r\n this.fileError = true;\r\n isValidFile = false;\r\n } else {\r\n this.fileError = false;\r\n }\r\n }\r\n }\r\n\r\n if (!isValidFile) {\r\n this.errors.push({\r\n fieldName: 'File',\r\n fieldRef: null, // this.subjectInput,\r\n errorMsg: 'Field is required.'\r\n });\r\n }\r\n }\r\n\r\n addFileChanges(event) {\r\n // check if a file has been selected\r\n if (this.addFile.hasOwnProperty('fileName')) {\r\n this.fileError = false;\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n \r\n \r\n {{element.FileName}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n {{element.Description}}\r\n \r\n \r\n \r\n Document Type\r\n \r\n \r\n {{element.DocumentType}}\r\n \r\n \r\n \r\n Created By\r\n \r\n \r\n {{element.FormAddedBy}} \r\n \r\n \r\n \r\n Created Date\r\n \r\n \r\n {{element.UploadedDate|date:'MM/dd/yy'}} \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n \r\n \r\n \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, OnInit, ViewChild, ViewChildren, QueryList, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSort } from '@angular/material/sort';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { FilterComponent } from '../../shared-components/controls/filter/filter.component';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { StudentDigitalContentService } from './student-digital-content.service';\r\nimport { StudentDigitalContent } from './models/student-digital-content.model';\r\nimport { MenuItem } from '../../shared-components/controls/menus/menu-item.model';\r\nimport { System } from '../../shared-components/System';\r\nimport { AddContentModalComponent } from './add-content-modal/add-content-modal.component';\r\nimport { GeneralConfirmationComponent } from '../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'student-digital-content',\r\n templateUrl: './student-digital-content.component.html',\r\n styleUrls: ['./student-digital-content.component.scss']\r\n\r\n})\r\nexport class StudentDigitalContentComponent implements OnInit, OnDestroy {\r\n\r\n // ------------Student Digital Content Data---------------------------\r\n studentDigitalContentData: StudentDigitalContent[] = [];\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n student360Year: Year;\r\n V10: boolean;\r\n canAddEdit: boolean;\r\n canDelete: boolean;\r\n // ----------Angular Material------------------------------------\r\n dataSource = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n columnsToDisplay: string[] = ['FileName', 'Description', 'DocumentType', 'FormAddedBy', 'UploadedDate', 'Actions'];\r\n @ViewChildren(FilterComponent) filterRef: QueryList;\r\n topActionMenuItems: string[] = [];\r\n clearFilterEvent = new EventEmitter();\r\n\r\n // ------------Modal Windows--------------------------------------\r\n deleteConfirmDialogRef: MatDialogRef;\r\n addContentDialogRef: MatDialogRef;\r\n\r\n // --------------LifeCycle---------------------------------------\r\n\r\n constructor(private dialog: MatDialog,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private studentDigitalContentService: StudentDigitalContentService) { }\r\n\r\n ngOnInit() {\r\n // Initial data load\r\n this.getUserPermissions();\r\n\r\n this.studentService.selectedStudentStream$.subscribe(student => {\r\n this.getStudentDigitalContent();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n\r\n // ------------Helper Methods---------------------------\r\n getStudentDigitalContent(): void {\r\n this.studentDigitalContentService.getStudentDigitalContent(this.studentService.selectedStudent.Id, this.yearService.student360Year.SchoolID).subscribe(result => {\r\n this.studentDigitalContentData = result;\r\n this.loadTableData();\r\n });\r\n }\r\n\r\n loadTableData() {\r\n this.dataSource.data = this.studentDigitalContentData;\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n actionMenuClick(menuItem: MenuItem) {\r\n const data: StudentDigitalContent = menuItem.data;\r\n switch (menuItem.itemName) {\r\n case 'Edit':\r\n this.addClick(data);\r\n break;\r\n case 'Delete':\r\n this.deleteClick(data);\r\n break;\r\n }\r\n }\r\n\r\n viewFile(sdc: StudentDigitalContent) {\r\n System.viewFileFromBase(sdc.MyFileBase64String, sdc.DocumentMimeType, sdc.FileName);\r\n }\r\n\r\n addClick(sdc?: StudentDigitalContent) {\r\n this.addContentDialogRef = this.dialog.open(AddContentModalComponent, {\r\n disableClose: true,\r\n data: {\r\n sdc: sdc\r\n },\r\n });\r\n\r\n this.addContentDialogRef.afterClosed().subscribe(saveClicked => {\r\n if (saveClicked) {\r\n this.getStudentDigitalContent();\r\n }\r\n });\r\n }\r\n\r\n deleteClick(data: StudentDigitalContent) {\r\n this.deleteConfirmDialogRef = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog', disableClose: true\r\n });\r\n\r\n this.deleteConfirmDialogRef.componentInstance.headerLabel = 'Delete Document';\r\n\r\n if (data.FileName.length > 50) {\r\n this.deleteConfirmDialogRef.componentInstance.confirmMessage = 'Are you sure you want to delete the document \"' + data.FileName.substring(0, 49) + '\"...?';\r\n }\r\n else {\r\n this.deleteConfirmDialogRef.componentInstance.confirmMessage = 'Are you sure you want to delete the document \"' + data.FileName + '\"?';\r\n }\r\n\r\n this.deleteConfirmDialogRef.componentInstance.okButtonLabel = \"Delete\";\r\n\r\n this.deleteConfirmDialogRef.componentInstance.confirmEvent.subscribe((deleteObject: boolean) => {\r\n if (deleteObject) {\r\n this.studentDigitalContentService.deleteStudentDigitalContent(data.DocumentId).subscribe(result => {\r\n this.getStudentDigitalContent();\r\n });\r\n }\r\n });\r\n }\r\n\r\n getUserPermissions() {\r\n // POST: obtains the permissions from the server\r\n this.userService.getUserPermissions(\r\n this.yearService.student360Year.Id,\r\n this.yearService.student360Year.SchoolID\r\n ).subscribe(permissions => {\r\n\r\n if (permissions.findIndex(x => x.PrivilegeId == 1052) != -1) {\r\n this.canAddEdit = true;\r\n this.topActionMenuItems.push('Edit');\r\n }\r\n\r\n if (permissions.findIndex(x => x.PrivilegeId == 1800) != -1) {\r\n this.canDelete = true;\r\n this.topActionMenuItems.push('Delete');\r\n }\r\n\r\n if (!this.canAddEdit && !this.canDelete) {\r\n const index: number = this.columnsToDisplay.indexOf('Actions');\r\n this.columnsToDisplay.splice(index, 1);\r\n }\r\n });\r\n }\r\n\r\n clearFilter() {\r\n this.dataSource.removeAllFilters();\r\n this.clearFilterEvent.emit();\r\n }\r\n}\r\n\r\n","import { System } from './../../shared-components/System';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { StudentDigitalContent } from './models/student-digital-content.model';\r\nimport { Lookup } from '../../shared-components/lookup/lookup.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\n\r\n@Injectable()\r\nexport class StudentDigitalContentService {\r\n\r\n constructor(private http: HttpClient,\r\n private studentService: StudentService) { }\r\n\r\n documentTypes: Lookup[] = [];\r\n\r\n getStudentDigitalContent(studentId: number, schoolId: number): Observable {\r\n let paramString: string = '';\r\n paramString += '?studentId=' + studentId;\r\n paramString += '&schoolId=' + schoolId;\r\n\r\n return this.http.get(System.apiURL.Student + 'GetStudentDigitalContent' + paramString);\r\n }\r\n\r\n saveStudentDigitalContent(sdc: StudentDigitalContent, schoolId: number): Observable {\r\n // let paramString: string = '';\r\n // paramString += '?schoolId=' + schoolId;\r\n\r\n // return this.http.post(System.apiURL.Student + 'SaveStudentDigitalContent' + paramString, sdc);\r\n return this.studentService.saveStudentDigitalContent(sdc, schoolId)\r\n }\r\n\r\n deleteStudentDigitalContent(documentId: number): Observable {\r\n let paramString: string = '';\r\n paramString += '?documentId=' + documentId;\r\n\r\n return this.http.post(System.apiURL.Student + 'DeleteStudentDigitalContent' + paramString, null);\r\n }\r\n\r\n\r\n}\r\n","
\r\n
\r\n Access History\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n \r\n First Name\r\n \r\n \r\n \r\n {{element.FirstName}}\r\n \r\n\r\n \r\n \r\n Last Name\r\n \r\n \r\n \r\n {{element.LastName}}\r\n \r\n\r\n \r\n \r\n Middle Name\r\n \r\n \r\n \r\n {{element.MiddleName}}\r\n \r\n\r\n \r\n \r\n Time Stamp\r\n \r\n \r\n \r\n {{element.TimeStamp | date: 'MM/dd/yy hh:mm a'}}\r\n \r\n\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, OnInit, ViewChild, Inject} from '@angular/core';\r\nimport {TylerMatTableDataSource} from '../../../shared-components/angular-material/extended.class';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport {Subscription} from 'rxjs';\r\nimport {StudentDocumentAccessHistory} from '../../../shared-components/student/student-documents-accesshistory.model';\r\n\r\n@Component({\r\n selector: 'app-student-document-access-history',\r\n templateUrl: './student-document-access-history.component.html',\r\n styleUrls: ['./student-document-access-history.component.css']\r\n})\r\nexport class StudentDocumentAccessHistoryComponent implements OnInit {\r\n dataSource = new TylerMatTableDataSource();\r\n @ViewChild(MatSort, { static: true }) sort: MatSort;\r\n public columnsToDisplay: string[] = ['FirstName', 'LastName', 'MiddleName', 'TimeStamp'];\r\n\r\n subscriptions: Subscription[] = [];\r\n studentDocumentAccessHistory: StudentDocumentAccessHistory[];\r\n private _paginator: MatPaginator;\r\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\r\n this._paginator = value;\r\n this.dataSource.paginator = value;\r\n }\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) public data: any) {\r\n this.studentDocumentAccessHistory = data.AccessHistory;\r\n this.dataSource = new TylerMatTableDataSource(this.studentDocumentAccessHistory);\r\n }\r\n\r\n ngOnInit() {\r\n this.getStudentDocumentAccessHistory();\r\n }\r\n\r\n getStudentDocumentAccessHistory() {\r\n this.dataSource.data = this.studentDocumentAccessHistory;\r\n this.dataSource.sort = this.sort;\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","export class StudentDocumentsFilter {\r\n\tfileName = '';\r\n\tdescription = '';\r\n\tdocumentType = '';\r\n\tfor = '';\r\n\tfileType = '';\r\n\tcreatedFrom: Date = undefined;\r\n\tcreatedTo: Date = undefined;\r\n\taddedBy = '';\r\n}","import { StudentDocumentsFilter } from './student-documents-filter';\r\nimport { ChangeDetectorRef, TemplateRef, ViewChild, Directive } from '@angular/core';\r\nimport { StudentDocuments } from '../../shared-components/student/student-documents.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { System } from '../../shared-components/System';\r\nimport { Student360Service } from '../student360.service';\r\n\r\n@Directive()\nexport class StudentDocumentsFilteredComponent {\r\n\r\n\t// Properties\r\n angularMatData = new TylerMatTableDataSource();\r\n showFilter: boolean = false;\r\n\tfilter = new StudentDocumentsFilter();\r\n\tpreviousFilter = new StudentDocumentsFilter();\r\n studentDocuments: StudentDocuments[];\r\n\t@ViewChild('filterMenu', { read: TemplateRef }) filterMenu: TemplateRef;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprotected studentService: StudentService,\r\n\t\tprotected yearService: YearService,\r\n\t\tprotected sharedService: SharedService,\r\n\t\tprotected changeDetector: ChangeDetectorRef,\r\n\t\tprotected student360Service: Student360Service\r\n\t) { }\r\n\r\n\tget filtered() {\r\n\t\tif (this.student360Service.studentDocumentsFilterData != undefined) {\r\n\t\t\tthis.filter = this.student360Service.studentDocumentsFilterData;\r\n\t\t}\r\n\t\tif (this.filter.createdFrom && this.filter.createdFrom.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.createdFrom = undefined;\r\n\t\t}\r\n\t\tif (this.filter.createdTo && this.filter.createdTo.toString() == 'Invalid Date') {\r\n\t\t\tthis.filter.createdTo = undefined;\r\n\t\t}\r\n\t\treturn !System.isEqual(this.filter, new StudentDocumentsFilter());\r\n\t}\r\n\r\n\t// Methods\r\n\tshowFilterClick() {\r\n\t\t// PRE: the filter button is pressed\r\n // POST: toggles the filter panel\r\n this.showFilter = !this.showFilter;\r\n\t\tObject.assign(this.previousFilter, this.filter);\r\n\t}\r\n\r\n\tclearFilter() {\r\n\t\t// PRE: the clear filter button is clicked\r\n\t\t// POST: clears out the filter and DOES NOT CLOSE THE MENU\r\n\t\tsetTimeout(\r\n\t\t\t() => {\r\n\t\t\t\tObject.assign(this.filter, new StudentDocumentsFilter());\r\n\t\t\t\tthis.applyFilter();\r\n\t\t\t\tthis.changeDetector.detectChanges();\r\n\t\t\t},\r\n\t\t\t0\r\n\t\t);\r\n\t}\r\n\r\n\tcloseFilter() {\r\n this.showFilterClick();\r\n\t}\r\n\r\n\tsetFilter(filter: StudentDocumentsFilter) {\r\n\t\tthis.filter = filter;\r\n\t\tthis.applyFilter();\r\n\t}\r\n\r\n\tclearFilterFromFooter() {\r\n\t\t// PRE: the clear all filters button is clicked on the footer notification\r\n\t\t// POSt: clears out the filters on both the panel and the grid. Saves all changes.\r\n\t\tthis.filter = new StudentDocumentsFilter();\r\n\t\tthis.previousFilter = new StudentDocumentsFilter();\r\n\t\tthis.applyFilter();\r\n\t\tthis.angularMatData.removeAllFilters();\r\n\t\tthis.student360Service.studentDocumentsFilterData = this.filter;\r\n\t\tthis.changeDetector.detectChanges();\r\n\t}\r\n\r\n\tapplyFilter() {\r\n\t\t// POST: applies the filter to the grid data\r\n\t\tlet tableData = this.studentDocuments;\r\n\r\n\t\t// File Name\r\n\t\tif (this.filter.fileName) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.Name.toLowerCase().includes(this.filter.fileName.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Document Type\r\n\t\tif (this.filter.documentType) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.DocumentType.toLowerCase().includes(this.filter.documentType.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// For\r\n\t\tif (this.filter.for) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.DocumentFor.toLowerCase().includes(this.filter.for.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// File Type\r\n\t\tif (this.filter.fileType) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.FileType.toLowerCase().includes(this.filter.fileType.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Description\r\n\t\tif (this.filter.description) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.Notes.toLowerCase().includes(this.filter.description.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Created From\r\n\t\tif (this.filter.createdFrom && this.filter.createdFrom.toString() != 'Invalid Date') {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.CreatedOn > this.filter.createdFrom\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Created To\r\n\t\tif (this.filter.createdTo && this.filter.createdTo.toString() != 'Invalid Date') {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.CreatedOn < this.filter.createdTo\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Added By\r\n\t\tif (this.filter.addedBy) {\r\n\t\t\ttableData = tableData.filter(datum =>\r\n\t\t\t\tdatum.CreatedBy.toLowerCase().includes(this.filter.addedBy.toLowerCase())\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t// Setting the table data\r\n\t\tthis.angularMatData.data = tableData;\r\n\t}\r\n}\r\n","
{{edit? 'Edit Document' : 'Add Document'}}
\r\n\r\n
\r\n
\r\n Add for\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.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \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, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Lookup } from '../../../shared-components/lookup/lookup.model';\r\nimport { LookupService } from '../../../shared-components/lookup/lookup.service';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { UserPermission } from '../../../shared-components/user/user-permission.model';\r\n\r\n@Component({\r\n selector: 'add-edit-document',\r\n templateUrl: './add-edit-document.component.html',\r\n styleUrls: ['./add-edit-document.component.css']\r\n})\r\nexport class AddEditDocumentComponent implements OnInit {\r\n\r\n attachment: Attachment = new Attachment();\r\n forOptions: string[] = ['Household'];\r\n errors: ErrorList[] = [];\r\n V9UserPermissions: UserPermission[] = [];\r\n maxFileSize = 0;\r\n quickAdd: boolean;\r\n edit: boolean;\r\n actionSectionHidden: boolean;\r\n documentTypes: Lookup[];\r\n documentTypeIdAsString: string;\r\n @ViewChild('attachmentNameRef', { read: ElementRef }) attachmentNameRef: ElementRef;\r\n @ViewChild('forRef', { read: ElementRef }) forRef: ElementRef;\r\n @ViewChild('documentTypeRef', { read: ElementRef, static: true }) documentTypeRef: ElementRef;\r\n\r\n constructor(\r\n private lookupService: LookupService,\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef,\r\n private securityService: SecurityService\r\n ) {\r\n if (data.attachments.StudentName != null) {\r\n this.forOptions.push(data.attachments.StudentName);\r\n }\r\n // for Household or Student\r\n\r\n if (data.attachments != null) {\r\n if (data.attachments.DocumentId > 0) {\r\n this.edit = true;\r\n this.attachment.DocumentId = data.attachments.DocumentId;\r\n this.attachment.Description = data.attachments.Notes;\r\n this.attachment.DocumentType = data.attachments.DocumentFor != 'Family' ? data.attachments.StudentName : 'Household';\r\n this.attachment.DocumentTypeId = data.attachments.DocumentTypeId;\r\n this.attachment.FileType = data.attachments.FileType;\r\n this.documentTypeIdAsString = this.attachment.DocumentTypeId.toString();\r\n }\r\n else {\r\n this.attachment.Description = '';\r\n this.attachment.OriginalFileName = '';\r\n this.attachment.MyFileBase64String = '';\r\n this.attachment.DocumentTypeId = 0;\r\n this.attachment.DocumentType = data.attachments.StudentName;\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n const permissions = this.securityService.userPermissions;\r\n this.V9UserPermissions = permissions;\r\n\r\n\r\n\r\n this.getDocumentTypeLookup();\r\n }\r\n getDocumentTypeLookup() {\r\n this.lookupService.getDocumentTypeLookup().subscribe(document => {\r\n this.documentTypes = document;\r\n const blankRow = new Lookup();\r\n blankRow.Id = '0';\r\n blankRow.Code = '';\r\n blankRow.CodeDescription = '';\r\n this.documentTypes.splice(0, 0, blankRow);\r\n const checkPermission = this.V9UserPermissions.filter(permission => permission.PermissionCode != 'DSF_MADFSF' &&\r\n permission.PermissionCode == 'DSF_MDSF');\r\n if (checkPermission != undefined && checkPermission != null && checkPermission.length) {\r\n const documentTypes = [];\r\n for (let i = 0; i < checkPermission.length; i++) {\r\n this.documentTypes.forEach(obj => {\r\n const sameIdExist = documentTypes.filter(data => data.Id == obj.Id)[0];\r\n if (!documentTypes || !documentTypes.length || !sameIdExist) {\r\n if (obj.PermissionCategory == checkPermission[i].PermissionCategory) {\r\n documentTypes.push(obj);\r\n }\r\n }\r\n });\r\n }\r\n this.documentTypes = [];\r\n this.documentTypes = documentTypes;\r\n }\r\n });\r\n }\r\n\r\n validate() {\r\n this.errors = [];\r\n if (this.attachment.Description == '') {\r\n this.errors.push({\r\n fieldRef: this.attachmentNameRef,\r\n fieldName: 'Description',\r\n errorMsg: 'Required field.'\r\n });\r\n }\r\n if (this.attachment.OriginalFileName == '') {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'Please select a file.'\r\n });\r\n }\r\n if (this.attachment.DocumentTypeId == null || this.attachment.DocumentTypeId == undefined || this.attachment.DocumentTypeId == 0) {\r\n this.errors.push({\r\n fieldRef: this.documentTypeRef,\r\n fieldName: 'Document Type',\r\n errorMsg: 'Please select a Document Type.'\r\n });\r\n }\r\n if (this.maxFileSize > 0 && this.maxFileSize < (this.attachment.MyFileBase64String.length * 6 / 8) / 1000) {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'This file size not allowed. File size should not be greater than ' + this.maxFileSize + 'KB.'\r\n });\r\n }\r\n // Validating file if no other errors are present\r\n if (this.errors.length == 0 && this.attachment.DocumentTypeId <= 0) {\r\n const fileExtensionRegExp = /\\.[a-z]{3}/;\r\n if (this.attachment.FileExtension.toLowerCase() != 'pdf' &&\r\n this.attachment.FileExtension.toLowerCase() != 'jpg' &&\r\n this.attachment.FileExtension.toLowerCase() != 'png' &&\r\n this.attachment.FileExtension.toLowerCase() != 'txt' &&\r\n this.attachment.FileExtension.toLowerCase() != 'doc' &&\r\n this.attachment.FileExtension.toLowerCase() != 'docx' &&\r\n this.attachment.FileExtension.toLowerCase() != 'xls' &&\r\n this.attachment.FileExtension.toLowerCase() != 'xlsx') {\r\n this.errors.push({\r\n fieldRef: null,\r\n fieldName: 'File',\r\n errorMsg: 'Only .txt, .doc(x), .xls(x), .pdf, .jpg, and .png files can be uploaded.'\r\n });\r\n }\r\n }\r\n }\r\n save() {\r\n this.validate();\r\n if (this.errors.length == 0) {\r\n this.dialogBox.close('Save');\r\n }\r\n }\r\n documentTypeChanged() {\r\n const rp = parseInt(this.documentTypeIdAsString, 10);\r\n if (!isNaN(rp)) {\r\n this.attachment.DocumentTypeId = rp;\r\n }\r\n }\r\n close() {\r\n this.dialogBox.close('Cancel');\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
No\r\n Documents\r\n data\r\n exists for student.\r\n
\r\n
0\">\r\n \r\n \r\n \r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n {{SD.Name}}\r\n \r\n \r\n \r\n \r\n Description\r\n \r\n \r\n {{SD.Notes}}\r\n \r\n \r\n \r\n \r\n Document Type\r\n \r\n \r\n \r\n {{SD.DocumentType}}\r\n \r\n \r\n \r\n \r\n For\r\n \r\n \r\n {{SD.DocumentFor}}\r\n \r\n \r\n \r\n \r\n File Type\r\n \r\n \r\n {{SD.FileType}}\r\n \r\n \r\n \r\n \r\n Added\r\n \r\n \r\n \r\n {{SD.CreatedOn | date:'MM/dd/yy'}}\r\n \r\n \r\n \r\n Added by\r\n \r\n \r\n {{SD.CreatedBy}}\r\n \r\n \r\n \r\n \r\n Access History\r\n \r\n \r\n \r\n \r\n \r\n {{SD.RecentAccessHistory | date: 'MM/dd/yy hh:mm a'}}\r\n \r\n \r\n \r\n \r\n \r\n Actions\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n\r\n\r\n \r\n
\r\n\r\n
\r\n Filter\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\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 { ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Year } from '../../../shared-components/year/year.model';\r\nimport { Student } from '../../../shared-components/student/student.model';\r\nimport { StudentDocuments } from '../../../shared-components/student/student-documents.model';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { StudentAttachment } from '../../../shared-modules/student-attachment/student-attachment.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { AriaDirective } from '../../../shared-components/directives/aria.directive';\r\nimport { StudentDocumentsFilteredComponent } from '../student-documents-filtered.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { StudentDocumentsFilter } from '../student-documents-filter';\r\nimport * as moment from 'moment';\r\nimport { Student360Service } from '../../student360.service';\r\nimport { StudentDocumentAccessHistoryComponent } from '../student-document-access-history/student-document-access-history.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SecurityService } from '../../../shared-components/security/security.service';\r\nimport { UserPermission } from '../../../shared-components/user/user-permission.model';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { AddEditDocumentComponent } from '../add-edit-document/add-edit-document.component';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'student-documents-v9',\r\n templateUrl: './student-documents-v9.component.html',\r\n styleUrls: ['./student-documents-v9.component.css']\r\n})\r\nexport class StudentDocumentsV9Component extends StudentDocumentsFilteredComponent implements OnInit, OnDestroy {\r\n\r\n student360YearSubscription: Subscription;\r\n student360Year: Year;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n V9UserPermissions: UserPermission[] = [];\r\n\r\n // ------------Selection/Flags-----------------------------------\r\n isBusy = false;\r\n showOnlyBehaviorLettersDocument = false;\r\n showOnlyAttendanceLettersDocument = false;\r\n studentDocumentsLength = 0;\r\n showFormsForEntireFamily = false;\r\n canAddAll = false;\r\n canAddViewAll = false;\r\n canAdd = false;\r\n userType: number;\r\n\r\n // ----------Angular Material------------------------------------\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay = ['Name', 'Notes', 'DocumentType', 'DocumentFor', 'CreatedOn', 'CreatedBy', 'RecentAccessHistory'];\r\n\r\n constructor(\r\n studentService: StudentService,\r\n yearService: YearService,\r\n private userService: UserService,\r\n changeDetector: ChangeDetectorRef,\r\n sharedService: SharedService,\r\n student360Service: Student360Service,\r\n private dialog: MatDialog,\r\n private activatedRoute: ActivatedRoute,\r\n private securityService: SecurityService,\r\n ) {\r\n super(\r\n studentService,\r\n yearService,\r\n sharedService,\r\n changeDetector,\r\n student360Service\r\n );\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n // Reload student data when the selected student is changed (Student button in the header)\r\n this.loadStudentInfo(studentId);\r\n });\r\n\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n student360Year => {\r\n // Reload AcademicHistory when the selected year is changed\r\n this.getStudentDocuments();\r\n });\r\n\r\n // Load data into a DataSource object\r\n // MatTableDataSource extends DataSource to allow sorting, pagination and basic filtering\r\n // TylerMatTableDataSource extends MatTableDataSource and allows complex filtering and detail rows\r\n this.angularMatData = new TylerMatTableDataSource(this.studentDocuments);\r\n\r\n // Copy flag from service to local variable\r\n // This prevents having to directly call a service from the html, keeping the view loosely coupled\r\n\r\n this.userType = this.userService.userType;\r\n if (this.userType == 1) {\r\n this.columnsToDisplay = ['Name', 'Notes', 'DocumentType', 'DocumentFor', 'CreatedOn', 'CreatedBy', 'RecentAccessHistory', 'Actions'];\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.activatedRoute.queryParams.subscribe(params => {\r\n const onlyBehaviorLettersDocument = params['onlyBehaviorLettersDocument'];\r\n const onlyAttendanceLettersDocument = params['onlyAttendanceLettersDocument'];\r\n if (onlyBehaviorLettersDocument && onlyBehaviorLettersDocument == 'true') {\r\n this.showOnlyBehaviorLettersDocument = true;\r\n }\r\n if (onlyAttendanceLettersDocument && onlyAttendanceLettersDocument == 'true') {\r\n this.showOnlyAttendanceLettersDocument = true;\r\n }\r\n });\r\n const permissions = this.securityService.userPermissions;\r\n this.V9UserPermissions = permissions;\r\n\r\n const checkPermissionAll = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'DSF_MADFSF')[0];\r\n if (checkPermissionAll != undefined && checkPermissionAll != null) {\r\n this.canAddAll = true;\r\n }\r\n const checkPermissionViewAll = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'DSF_VADFSF')[0];\r\n if (checkPermissionViewAll != undefined && checkPermissionViewAll != null) {\r\n this.canAddViewAll = true;\r\n }\r\n const checkPermission = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'DSF_MDSF')[0];\r\n if (checkPermission != undefined && checkPermission != null) {\r\n this.canAdd = true;\r\n }\r\n // Initial data load\r\n const initialFilter: StudentDocumentsFilter = {\r\n fileName: '',\r\n createdFrom: moment().subtract(1, 'year').toDate(),\r\n createdTo: undefined,\r\n addedBy: '',\r\n description: '',\r\n documentType: '',\r\n fileType: '',\r\n for: ''\r\n };\r\n super.setFilter(initialFilter);\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n // ------------ Student Documents Data ---------------------------\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(function (student) {\r\n return student.Id == studentId;\r\n })[0];\r\n this.getStudentDocuments();\r\n }\r\n\r\n getStudentDocuments(showEntireFamilyDocuments: boolean = false) {\r\n this.isBusy = true;\r\n this.angularMatData.data = [];\r\n this.studentDocumentsLength = 0;\r\n\r\n setTimeout(() => {\r\n this.studentService.getStudentDocuments(this.selectedStudent.Id, this.yearService.student360Year.Id, showEntireFamilyDocuments).pipe(take(1)).subscribe(data => {\r\n this.studentDocuments = data;\r\n\r\n if (this.showOnlyBehaviorLettersDocument == true) {\r\n this.studentDocuments = this.studentDocuments.filter(x => x.Notes == 'Behavior Letter');\r\n }\r\n if (this.showOnlyAttendanceLettersDocument == true) {\r\n this.studentDocuments = this.studentDocuments.filter(x => x.Notes == 'Attendance Letter');\r\n }\r\n this.studentDocumentsLength = this.studentDocuments.length;\r\n this.loadStudentDocuments();\r\n });\r\n }, 0);\r\n }\r\n\r\n loadStudentDocuments() {\r\n // load data into Angular Material table\r\n this.angularMatData.data = this.studentDocuments;\r\n this.applyFilter();\r\n setTimeout(() => {\r\n this.angularMatData.sort = this.sort;\r\n }, 0);\r\n\r\n this.isBusy = false;\r\n }\r\n\r\n viewAttachment(row: StudentDocuments) {\r\n const studentAttachment: StudentAttachment = {\r\n DocumentId: row.DocumentId,\r\n DocumentName: row.Name,\r\n DocumentBase64: row.FileBase64,\r\n DocumentMimeType: row.FileMimeType,\r\n DocumentModuleName: 'Documents',\r\n ReportParameters: [],\r\n ReportType: 0\r\n };\r\n window.localStorage.setItem('studentAttachment', JSON.stringify(studentAttachment));\r\n const win = window.open(System.baseUrl + 'studentattachment', '_blank');\r\n win.focus();\r\n const timer = setInterval(() => {\r\n if (!timer) {\r\n clearInterval(timer);\r\n }\r\n if (win.closed) {\r\n this.ngOnInit();\r\n clearInterval(timer);\r\n win.focus();\r\n }\r\n }, 1000);\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n getAriaRow(row: StudentDocuments): string {\r\n // Returns string for a given row's data\r\n // reads each column header name and then the cell data for that column\r\n let colList: string[] = [''];\r\n let dataList: string[] = [''];\r\n\r\n colList = ['File Name', 'Description', 'Category', 'For', 'Added', 'Added by'];\r\n dataList = [row.Name, row.Notes, row.DocumentType, row.DocumentFor, row.CreatedOn.toString(), row.CreatedBy];\r\n\r\n return AriaDirective.concatAriaStrings(colList, dataList);\r\n }\r\n studentAccessHistoryClick(row: StudentDocuments) {\r\n const dialogRef = this.dialog.open(StudentDocumentAccessHistoryComponent, {\r\n disableClose: true,\r\n data: { AccessHistory: row.AccessHistory }\r\n });\r\n }\r\n\r\n editClick(doc: StudentDocuments) {\r\n if (doc.StudentId > 0) {\r\n this.studentService.getStudent(doc.StudentId).subscribe((studentData) => {\r\n doc.StudentName = studentData.LastName + ', ' + studentData.FirstName + ' ' + studentData.MiddleName;\r\n doc.StudentId = studentData.Id;\r\n doc.FamilyId = studentData.FamilyId;\r\n const dialogBox = this.dialog.open(AddEditDocumentComponent, {\r\n disableClose: true,\r\n minWidth: '500px',\r\n data: {\r\n attachments: doc\r\n }\r\n });\r\n dialogBox.afterClosed().subscribe((action: string) => {\r\n if (action == 'Save') {\r\n const newAttachment = dialogBox.componentInstance.attachment;\r\n doc.DocumentTypeId = newAttachment.DocumentTypeId;\r\n doc.FileName = newAttachment.OriginalFileName;\r\n doc.FileType = newAttachment.FileType;\r\n doc.Notes = newAttachment.Description;\r\n doc.FileBase64 = newAttachment.MyFileBase64String;\r\n if (doc.StudentId == null) {\r\n doc.StudentId = this.selectedStudent.Id;\r\n }\r\n doc.DocumentFor = newAttachment.DocumentType != 'Household' ? doc.StudentName : 'Family';\r\n if (this.selectedStudent.Id > 0) {\r\n this.studentService.saveAttachment(doc, doc.DocumentFor).subscribe(result => {\r\n this.getStudentDocuments();\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n doc.StudentName = this.selectedStudent.LastName + ', ' + this.selectedStudent.FirstName + ' ' + this.selectedStudent.MiddleName;\r\n doc.StudentId = this.selectedStudent.Id;\r\n doc.FamilyId = this.selectedStudent.FamilyId;\r\n const dialogBox = this.dialog.open(AddEditDocumentComponent, {\r\n disableClose: true,\r\n minWidth: '500px',\r\n data: {\r\n attachments: doc\r\n }\r\n });\r\n dialogBox.afterClosed().subscribe((action: string) => {\r\n if (action == 'Save') {\r\n const newAttachment = dialogBox.componentInstance.attachment;\r\n doc.DocumentTypeId = newAttachment.DocumentTypeId;\r\n doc.FileName = newAttachment.OriginalFileName;\r\n doc.FileType = newAttachment.FileType;\r\n doc.FileBase64 = newAttachment.MyFileBase64String;\r\n doc.Notes = newAttachment.Description;\r\n if (doc.StudentId == null) {\r\n doc.StudentId = this.selectedStudent.Id;\r\n }\r\n doc.DocumentFor = newAttachment.DocumentType != 'Household' ? doc.StudentName : 'Family';\r\n if (this.selectedStudent.Id > 0) {\r\n this.studentService.saveAttachment(doc, doc.DocumentFor).subscribe(result => {\r\n this.getStudentDocuments();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n addAttachmentClick() {\r\n const newDocument: StudentDocuments = new StudentDocuments();\r\n newDocument.DocumentId = -1;\r\n newDocument.StudentName = this.selectedStudent.LastName + ', ' + this.selectedStudent.FirstName + ' ' + this.selectedStudent.MiddleName;\r\n newDocument.StudentId = this.selectedStudent.Id;\r\n newDocument.FamilyId = this.selectedStudent.FamilyId;\r\n newDocument.DocumentType = newDocument.StudentName;\r\n const dialogBox = this.dialog.open(AddEditDocumentComponent, {\r\n disableClose: true,\r\n minWidth: '500px',\r\n data: {\r\n attachments: newDocument\r\n }\r\n });\r\n dialogBox.afterClosed().subscribe((action: string) => {\r\n if (action == 'Save') {\r\n const newAttachment = dialogBox.componentInstance.attachment;\r\n newDocument.DocumentTypeId = newAttachment.DocumentTypeId;\r\n newDocument.FileName = newAttachment.OriginalFileName;\r\n newDocument.FileType = newAttachment.FileType;\r\n newDocument.FileBase64 = newAttachment.MyFileBase64String;\r\n newDocument.Notes = newAttachment.Description;\r\n newDocument.DocumentFor = newAttachment.DocumentType != 'Household' ? newDocument.StudentName : 'Family';\r\n if (this.selectedStudent.Id > 0) {\r\n this.studentService.saveAttachment(newDocument, newDocument.DocumentFor).subscribe(result => {\r\n this.getStudentDocuments(this.showFormsForEntireFamily);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n deleteDocumentClick(doc: StudentDocuments) {\r\n // PRE: a selected Document delete\r\n // POST: opens the dialog for deleting a document. If the dialog returns true, performs the deletion\r\n const deleteConfirmDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n });\r\n deleteConfirmDialog.componentInstance.headerLabel = ' Delete Document';\r\n deleteConfirmDialog.componentInstance.confirmMessage = ' Are you sure you want to delete? ';\r\n deleteConfirmDialog.componentInstance.okButtonLabel = 'Delete';\r\n deleteConfirmDialog.componentInstance.confirmEvent.subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n this.studentService.deleteStudentDocuments(0, doc.DocumentId, 0).subscribe(\r\n result => {\r\n this.ngOnInit();\r\n }\r\n );\r\n }\r\n });\r\n }\r\n showFormsForEntireFamilyChange(showFormsForEntireFamily: boolean) {\r\n this.showFormsForEntireFamily = showFormsForEntireFamily;\r\n this.getStudentDocuments(showFormsForEntireFamily);\r\n }\r\n\r\n editStudentMode() {\r\n return this.sharedService.editRegistrationStudentMode;\r\n }\r\n getPermisionCategory(permisionCategory: string) {\r\n const checkPermission = this.V9UserPermissions.filter(permission => permission.PermissionCode == 'DSF_MDSF' && permission.PermissionCategory == permisionCategory)[0];\r\n if (checkPermission != undefined && checkPermission != null) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n","import {Component, OnDestroy, OnInit} from '@angular/core';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'student-documents',\r\n templateUrl: './student-documents.component.html',\r\n styles: []\r\n})\r\nexport class StudentDocumentsComponent implements OnInit, OnDestroy {\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n // initialize stuff\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // destroy stuff\r\n }\r\n\r\n}\r\n","","import { Injectable } from '@angular/core';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { StudentField, StudentFieldsLookup } from './student-field.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { System } from '../../shared-components/System';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class StudentFieldService {\r\n student360Year: Year;\r\n selectedStudent: Student;\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private http: HttpClient\r\n\r\n ) { }\r\n\r\n getStudentFieldsByStudentId(): Observable {\r\n // POST: returns the student Fileds for a student\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&schoolId=' + this.yearService.student360Year.SchoolID;\r\n return this.http.get(System.apiURL.Student + 'GetStudentFieldsByStudentId' + queryString);\r\n }\r\n\r\n getStudentFieldOptions(studentFields: Array): Observable {\r\n return this.http.post(System.apiURL.Student + 'GetStudentFieldsLookup', studentFields);\r\n }\r\n\r\n validateStudentFieldsData(yearId: number, studentId: number, fields = []) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&studentId=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'ValidateStudentFieldsData' + queryString, fields);\r\n }\r\n\r\n saveStudentFieldsData(yearId: number, studentId: number, fields = []) {\r\n let queryString = '';\r\n queryString += '?yearId=' + yearId +\r\n '&studentId=' + studentId;\r\n return this.http.post(System.apiURL.Student + 'SaveStudentFieldsData' + queryString, fields);\r\n }\r\n}\r\n","export class StudentField {\r\n TabId: number;\r\n TabTitle: string;\r\n TabSequence: Number;\r\n DataFieldId: Number;\r\n ObjectType: Number;\r\n FieldName: string;\r\n SystemField: boolean;\r\n DisplaySize: Number;\r\n FieldSize: Number;\r\n ColumnData: string;\r\n ExternalDataId: number;\r\n DataFieldFormatType: number;\r\n DataTypeFormat: number;\r\n IsExternal: boolean;\r\n ColumnPosition: number;\r\n Row: number;\r\n NumberColumnUsed: number;\r\n Alignment: number;\r\n Visible: boolean;\r\n Editable: boolean;\r\n Error: string;\r\n MinimumFieldValue: number;\r\n TabMenus = [];\r\n OldColumnData: string;\r\n OldExternalDataId: number;\r\n SelectedTabId: number;\r\n isEdited: boolean;\r\n FieldOptions = [];\r\n OptionSelected: number;\r\n StudentId: number;\r\n ErrorCollection = [];\r\n ValidateIdLengthOnly: boolean;\r\n ErrorCount: any;\r\n FieldWidth: number;\r\n}\r\n\r\nexport class TabMenu {\r\n TabId: number;\r\n TabTitle: string;\r\n TabSequence: number;\r\n MaxRow: number;\r\n}\r\nexport class StudentFieldLookup {\r\n Id: number;\r\n Code: string;\r\n CodeDescription: string;\r\n Sequence: number;\r\n DataFieldId: number;\r\n}\r\nexport class StudentFieldsLookup {\r\n Id: string;\r\n Code: string;\r\n CodeDescription: string;\r\n Default: boolean;\r\n Sequence: number;\r\n DataFieldId: number;\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { StudentFieldLookup } from './student-field.model';\r\n\r\n@Pipe({\r\n name: 'StudentFieldLookupPipe',\r\n pure: false\r\n})\r\nexport class StudentFieldLookupPipe implements PipeTransform {\r\n transform(fieldOptions: StudentFieldLookup[], filter?) {\r\n let retObj = [];\r\n if (fieldOptions != null && fieldOptions != undefined) {\r\n retObj = fieldOptions.filter(x => x.DataFieldId === filter.DataFieldId);\r\n retObj.sort((a, b) => {\r\n if (a.Sequence < b.Sequence) {\r\n return -1;\r\n } else if (b.Sequence < a.Sequence) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n }\r\n return retObj;\r\n }\r\n}\r\n","\r\n\t\r\n\t
\r\n\t\t\r\n\t
\r\n\t\r\n\t
\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{{tab.TabTitle}}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{{getTabTitle()}}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{{field.FieldName}}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tInvalid date!\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{fldOption.CodeDescription}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!!!!\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t{{field.FieldName}}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tInvalid date!\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{fldOption.CodeDescription}}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t!!!!!\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t
\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t
\r\n
\r\n
\r\n\t\r\n
","import { Component, ElementRef, HostListener, OnDestroy, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { StudentService } from './../../shared-components/student/student.service';\r\nimport { StudentFieldService } from './student-field.service';\r\nimport { StudentField, TabMenu, StudentFieldLookup } from './student-field.model';\r\nimport { ErrorList } from '../../shared-components/controls/error-prompt/error-list.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { Subscription, Observable, Subject, forkJoin } from 'rxjs';\r\nimport { RouterStateSnapshot } from '@angular/router';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { CustomizationFrameworkService } from '../../shared-modules/customization-framework/customization-framework.service';\r\nimport { take } from 'rxjs/operators';\r\nimport { CSTCustomPage } from '../../shared-modules/customization-framework/models/cst-custom-page.model';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { CustomPageTabGroupComponent } from '../../shared-modules/customization-framework/custom-page-tab-group/custom-page-tab-group.component';\r\nimport { enmCSTModuleNames } from '../../shared-modules/customization-framework/models/custom-data-module.model';\r\nimport { enmCustomDataObjects } from '../../shared-modules/customization-framework/models/custom-data-object.model';\r\n\r\n@AutoUnsubscribe({includeArrays: true})\r\n@Component({\r\n selector: 'app-student-fields',\r\n templateUrl: './student-fields.component.html',\r\n styleUrls: ['./student-fields.componant.css']\r\n})\r\nexport class StudentFieldsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n selectedStudent: Student;\r\n subscriptions: Subscription[] = [];\r\n StudentFields: StudentField[] = [];\r\n StudentField: StudentField = new StudentField();\r\n selectedStudentSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n obj: StudentFieldLookup = new StudentFieldLookup();\r\n idFields: StudentField[];\r\n distinctTabId = [];\r\n errors: ErrorList[] = [];\r\n error: ErrorList = new ErrorList();\r\n unsavedChanges: boolean;\r\n studentDateFields = [];\r\n isStudentIdError = [];\r\n isStateIdError = [];\r\n studentHeaderHeight = 0;\r\n // public tableHeight: number;\r\n footerHeight = 0;\r\n ElemAptitudeField: StudentField;\r\n @ViewChild('studentHeader', { static: true }) studentHeaderRef: ElementRef;\r\n @ViewChild('footer', { static: true }) footerRef: ElementRef;\r\n enableSave: boolean;\r\n showCustomPages: boolean;\r\n customPages: CSTCustomPage[] = [];\r\n customPagesRetrieved: boolean;\r\n @ViewChild('tabGroup') tabGroup: CustomPageTabGroupComponent;\r\n\r\n @ViewChild('divUserDefinedField', { static: true }) divUserDefinedField: ElementRef;\r\n public observableStudentFieldSaved = new Subject();\r\n observableStudentFieldSavedStream$ = this.observableStudentFieldSaved.asObservable();\r\n constructor(\r\n private StudentFieldservice: StudentFieldService,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private customizationFrameworkService: CustomizationFrameworkService\r\n\r\n ) {\r\n this.showCustomPages = this.loginService.LoginSettings.EnableCustomizationFramework && this.loginService.LoginSettings.C360CustomFieldsImported;\r\n this.StudentField.FieldOptions = [];\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n student360Year => {\r\n this.getStudentFieldsByStudentId();\r\n }\r\n );\r\n }\r\n\r\n ngOnInit() {\r\n // this.tableHeight = 450;\r\n this.unsavedChanges = false;\r\n this.StudentField.TabMenus = [];\r\n this.errors = [];\r\n this.getUserPermission();\r\n if (this.showCustomPages) {\r\n this.enableSave = true;\r\n this.getCustomPages();\r\n }\r\n }\r\n // Angular Material\r\n windowResize() {\r\n // if (this.divUserDefinedField != undefined) {\r\n // this.tableHeight = window.innerHeight - this.studentHeaderHeight - this.footerHeight - 55;\r\n // }\r\n }\r\n\r\n getUserPermission() {\r\n this.StudentField.ValidateIdLengthOnly = false;\r\n\r\n this.userService.getUserPermissions(this.yearService.student360Year.Id, this.yearService.student360Year.SchoolID).subscribe(userPermissions => {\r\n const ESILDMPermisssion = userPermissions.filter(x => x.PermissionCode == 'SD_ESILDM');\r\n if (ESILDMPermisssion != null && ESILDMPermisssion.length > 0) {\r\n this.StudentField.ValidateIdLengthOnly = true;\r\n }\r\n });\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n setTimeout(() => {\r\n this.windowResize();\r\n }, 1000);\r\n\r\n }\r\n\r\n getTabTitle() {\r\n const tab: TabMenu[] = this.StudentField.TabMenus.filter(x => x.TabId == this.StudentField.SelectedTabId);\r\n if (tab.length > 0) {\r\n return tab[0].TabTitle;\r\n }\r\n return '';\r\n }\r\n\r\n filterStudentField(columnPosition, row) {\r\n return this.StudentFields.filter(x => x.ColumnPosition == columnPosition && x.TabId == this.StudentField.SelectedTabId && x.Row == row);\r\n }\r\n visibleMiddleColumn(row) {\r\n return (this.StudentFields.filter(x => x.ColumnPosition == 1 && x.TabId == this.StudentField.SelectedTabId && x.Row == row).length == 0) && (this.StudentFields.filter(y => y.ColumnPosition == 2 && y.TabId == this.StudentField.SelectedTabId && y.Row == row).length > 0);\r\n }\r\n loadStudentInfo(studentId: number) {\r\n if (this.showCustomPages && this.customPagesRetrieved) {\r\n // reload custom pages when student changes\r\n const customPagesRetrieved = this.customPagesRetrieved;\r\n this.customPagesRetrieved = false;\r\n setTimeout(() => {\r\n this.customPagesRetrieved = customPagesRetrieved;\r\n }, 1);\r\n }\r\n this.selectedStudent = this.studentService.students.filter(function (student) { return student.Id == studentId; })[0];\r\n this.getStudentFieldsByStudentId();\r\n\r\n }\r\n\r\n // Methods\r\n getStudentFieldsByStudentId() {\r\n // POST: obtains the data from the server and organizes the table data\r\n if (!this.showCustomPages) {\r\n this.unsavedChanges = false;\r\n this.StudentFields = [];\r\n this.subscriptions.push(\r\n this.StudentFieldservice.getStudentFieldsByStudentId().subscribe(result => {\r\n this.StudentFields = result;\r\n this.StudentField.TabMenus = [];\r\n this.StudentFields.forEach(element => {\r\n let numericFieldLength = 0;\r\n element.FieldWidth = 60;\r\n if (element.DataFieldFormatType == 3 && element.ObjectType != 2 && element.Visible && !element.DataTypeFormat && element.ColumnData != null && element.ColumnData != undefined) {\r\n // if numeric field then check length of data\r\n numericFieldLength = element.ColumnData.length;\r\n if (element.DisplaySize < numericFieldLength) {\r\n element.FieldWidth = (parseInt(numericFieldLength.toString(), 10) * 9) + 15;\r\n } else {\r\n element.FieldWidth = (parseInt(element.DisplaySize.toString(), 10) * 9) + 15;\r\n }\r\n } else {\r\n element.FieldWidth = (parseInt(element.DisplaySize.toString(), 10) * 9) + 15;\r\n }\r\n\r\n if (element.FieldWidth < 60) {\r\n element.FieldWidth = 60;\r\n }\r\n });\r\n\r\n this.distinctTabId = Array.from(new Set(result.map((data: any) => data.TabId)));\r\n this.distinctTabId.forEach(TabId => {\r\n const field = result.filter(x => x.TabId === parseInt(TabId, 10));\r\n if (field != null) {\r\n const maxRow = Math.max.apply(Math, field.map(function (data) { return data.Row; }));\r\n this.StudentField.TabMenus.push({ 'TabId': field[0].TabId, 'TabTitle': field[0].TabTitle, 'TabSequence': field[0].TabSequence, 'MaxRow': maxRow });\r\n }\r\n });\r\n this.StudentField.TabMenus = this.StudentField.TabMenus.sort((a, b) => a.TabSequence - b.TabSequence);\r\n if (this.StudentField.TabMenus.length > 0 && (this.StudentField.SelectedTabId == undefined || this.StudentField.SelectedTabId == null)) {\r\n this.StudentField.SelectedTabId = this.StudentField.TabMenus[0].TabId;\r\n }\r\n this.studentDateFields = [];\r\n this.studentDateFields = this.StudentFields.filter(field => field.ObjectType == 1 && field.DataFieldFormatType == 4 && field.ColumnData != null);\r\n\r\n this.studentDateFields.forEach(dt => {\r\n dt.ColumnData = new Date(dt.ColumnData);\r\n });\r\n this.StudentFields.forEach(x => {\r\n x.OldColumnData = x.ColumnData;\r\n x.OldExternalDataId = x.ExternalDataId;\r\n if (x.Visible != true && x.ObjectType == 2) {\r\n x.OptionSelected = 0;\r\n }\r\n });\r\n const editableFields: StudentField[] = this.StudentFields.filter(x => x.Editable == true);\r\n if (editableFields != null && editableFields.length > 0) {\r\n this.enableSave = true;\r\n } else {\r\n this.enableSave = false;\r\n }\r\n this.getStudentFieldOptions();\r\n })\r\n );\r\n }\r\n }\r\n\r\n getStudentFieldOptions() {\r\n const dataFieldIds = this.StudentFields.filter(field => field.ObjectType == 2).map(field => field.DataFieldId);\r\n const StudentFields = [];\r\n StudentFields.push(dataFieldIds.join());\r\n this.StudentFieldservice.getStudentFieldOptions(StudentFields).subscribe(results => {\r\n this.StudentField.FieldOptions = [];\r\n for (let i = 0; i < dataFieldIds.length; i++) {\r\n const fieldOptions = results.filter(data => data.DataFieldId == dataFieldIds[i]);\r\n const fields = this.StudentFields.filter(st => st.DataFieldId == dataFieldIds[i]);\r\n }\r\n dataFieldIds.forEach(dataFieldId => {\r\n const fieldOptions = Object.assign([], results.filter(field => field.DataFieldId === parseInt(dataFieldId.toString(), 10)));\r\n const fields = this.StudentFields.filter(st => st.DataFieldId == parseInt(dataFieldId.toString(), 10));\r\n if (fields != null) {\r\n const checkBlankRecord = fieldOptions.filter(x => x.Code.trim() == '' && x.CodeDescription.trim() == '');\r\n if (checkBlankRecord.length == 0 && fields[0].FieldName != 'Gender' && fields[0].FieldName != 'Grade') {\r\n this.obj.Id = -1;\r\n this.obj.Code = '';\r\n this.obj.CodeDescription = '';\r\n this.obj.Sequence = -1;\r\n this.obj.DataFieldId = parseInt(dataFieldId.toString(), 10);\r\n fieldOptions.push(this.obj);\r\n }\r\n for (let i = 0; i < fieldOptions.length; i++) {\r\n fieldOptions[i].Id = fieldOptions[i].Id;\r\n if (fieldOptions[i].Code.trim() == '' && fieldOptions[i].CodeDescription.trim() == '') {\r\n fieldOptions[i].Sequence = -1;\r\n const existOption = fieldOptions.filter(x => Number(x.Id) == Number(fields[0].ExternalDataId));\r\n if (existOption.length == 0) {\r\n fields[0].ExternalDataId = fieldOptions[i].Id;\r\n }\r\n }\r\n this.StudentField.FieldOptions.push(Object.assign(fieldOptions[i]));\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n menuSelected(tabId: number) {\r\n this.StudentField.SelectedTabId = tabId;\r\n }\r\n\r\n tabRows() {\r\n const tabMenu = this.StudentField.TabMenus.find(tabmenu => tabmenu.TabId == this.StudentField.SelectedTabId);\r\n const rows = [];\r\n if (tabMenu != null) {\r\n for (let i = 1; i <= tabMenu.MaxRow; i++) {\r\n rows.push(i);\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n changeFieldData(field: StudentField) {\r\n if ((field.OldColumnData != field.ColumnData && (!(field.OldColumnData == null && field.ColumnData == '') && !(field.OldColumnData == '' && field.ColumnData == null))) || field.OldExternalDataId != field.ExternalDataId) {\r\n field.isEdited = true;\r\n this.unsavedChanges = true;\r\n }\r\n else {\r\n field.isEdited = false;\r\n }\r\n }\r\n\r\n compareObjects(o1: number, o2: number): boolean {\r\n if (o2 == null) {\r\n o2 = -1;\r\n }\r\n return (o1 == o2);\r\n }\r\n\r\n saveClick = function (isSaveData: boolean) {\r\n this.StudentField.ErrorCollection = [];\r\n this.errors = [];\r\n if (!this.showCustomPages) {\r\n const objStudentFields: StudentField[] = Object.assign(this.StudentFields.filter(x => x.isEdited == true));\r\n if (objStudentFields.length > 0) {\r\n if (isSaveData == true) {\r\n this.validateData(objStudentFields, true);\r\n } else {\r\n this.validateData(objStudentFields, false);\r\n }\r\n }\r\n }\r\n else {\r\n this.errors = this.tabGroup.validateAllPages();\r\n if (this.errors.length == 0) {\r\n this.tabGroup.saveAllCustomPages();\r\n }\r\n }\r\n };\r\n\r\n // eslint-disable-next-line complexity\r\n validateDate(div: string, IsValidate: boolean, field: StudentField) {\r\n let isInvalidDate: boolean;\r\n isInvalidDate = false;\r\n const columnData = (document.getElementById(div + field.DataFieldId)).value;\r\n if ((columnData !== undefined && columnData !== '' && columnData != null)) {\r\n let month = null;\r\n let day = null;\r\n let year = null;\r\n if (columnData.indexOf('/') > -1) {\r\n const res = columnData.split('/');\r\n if (res.length > 1) {\r\n month = res[0];\r\n day = res[1];\r\n year = res[2];\r\n }\r\n }\r\n else {\r\n if (columnData.length == 8) {\r\n month = columnData.substring(0, 2);\r\n day = columnData.substring(2, 4);\r\n year = columnData.substring(4, 8);\r\n }\r\n }\r\n if (isNaN(month) || isNaN(day) || isNaN(year)) {\r\n isInvalidDate = true;\r\n }\r\n month = Number(month);\r\n day = Number(day);\r\n year = Number(year);\r\n if (month < 1 || month > 12) { // check month range\r\n isInvalidDate = true;\r\n }\r\n if (day < 1 || day > 31) {\r\n isInvalidDate = true;\r\n }\r\n if ((month === 4 || month === 6 || month === 9 || month === 11) && day === 31) {\r\n isInvalidDate = true;\r\n }\r\n if (month == 2) {\r\n const isleap = (year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0));\r\n if (day > 29 || (day === 29 && !isleap)) {\r\n isInvalidDate = true;\r\n }\r\n }\r\n }\r\n if (isInvalidDate) {\r\n document.getElementById('span' + div + field.DataFieldId).style.display = 'inline-block';\r\n document.getElementById(div + field.DataFieldId).nodeValue = '';\r\n\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = field.FieldName;\r\n this.error.errorMsg = ' Invalid Date';\r\n this.error.fieldRef = null;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n } else {\r\n this.StudentField.ErrorCollection = [];\r\n document.getElementById('span' + div + field.DataFieldId).style.display = 'none';\r\n this.changeFieldData(field);\r\n }\r\n }\r\n\r\n callbackFunction(objStudentFields: StudentField[]) {\r\n this.StudentFieldservice.saveStudentFieldsData(this.yearService.student360Year.Id, this.selectedStudent.Id, objStudentFields).subscribe(results => {\r\n if (results == null) {\r\n this.getStudentFieldsByStudentId();\r\n this.unsavedChanges = false;\r\n }\r\n else {\r\n objStudentFields.forEach((StudentFields, e: number) => {\r\n if (objStudentFields[e].DataFieldId == results.DataFieldId) {\r\n return;\r\n }\r\n const editedField: StudentField[] = this.StudentFields.filter(x => x.DataFieldId == objStudentFields[e].DataFieldId);\r\n if (editedField != null && editedField.length > 0) {\r\n editedField[0].isEdited = false;\r\n editedField[0].OldColumnData = editedField[0].ColumnData;\r\n editedField[0].OldExternalDataId = editedField[0].ExternalDataId;\r\n }\r\n });\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = results.FieldName;\r\n this.error.errorMsg = results.Error;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n });\r\n }\r\n\r\n validateData(objStudentFields: StudentField[], callbackFunction: boolean) {\r\n objStudentFields.forEach((objStudentField, i: number) => {\r\n if (objStudentFields[i].DataFieldFormatType == 4 && objStudentFields[i].ObjectType != 2) {\r\n if (objStudentFields[i].ColumnData != undefined && objStudentFields[i].ColumnData != null && objStudentFields[i].ColumnData != '') {\r\n objStudentFields[i].ColumnData = new Date(objStudentFields[i].ColumnData).toLocaleDateString();\r\n }\r\n else {\r\n objStudentFields[i].ColumnData = '';\r\n }\r\n }\r\n });\r\n\r\n if (objStudentFields.length > 0) {\r\n objStudentFields.forEach((objStudentField, index: number) => {\r\n objStudentFields[index].FieldOptions = [];\r\n const fieldsLookup: StudentFieldLookup[] = this.StudentField.FieldOptions.filter(function (o) { return (o.Id == objStudentFields[index].ExternalDataId && o.DataFieldId == objStudentFields[index].DataFieldId); });\r\n if (fieldsLookup != null || fieldsLookup != undefined) {\r\n objStudentFields[index].FieldOptions = fieldsLookup;\r\n }\r\n });\r\n this.StudentField.ErrorCollection = [];\r\n this.StudentField.ErrorCount = 0;\r\n const fields: StudentField[] = Object.assign(objStudentFields.filter(function (element) {\r\n return (element.DataFieldFormatType == 200 || element.DataFieldFormatType == 201 || element.DataFieldFormatType == 202 || (element.DataFieldFormatType == 204 && element.FieldOptions.length > 0 && element.FieldOptions[0].CodeDescription.trim() != ''));\r\n }));\r\n if (fields.length > 0) {\r\n this.StudentFieldservice.validateStudentFieldsData(this.yearService.student360Year.Id, this.selectedStudent.Id, fields).subscribe(results => {\r\n results.forEach((res, i: number) => {\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = res.FieldName;\r\n if (res.Error != '') {\r\n this.error.errorMsg = res.Error;\r\n }\r\n else {\r\n this.error.errorMsg = ' has the value ' + res.ColumnData + ' which is not valid Email';\r\n }\r\n this.StudentField.ErrorCollection.push(this.error);\r\n });\r\n if (this.validateOtherFields(objStudentFields)) {\r\n if (this.StudentField.ErrorCount == 0 && callbackFunction == true) {\r\n this.callbackFunction(objStudentFields);\r\n }\r\n } else {\r\n this.showErors();\r\n }\r\n });\r\n } else {\r\n if (this.validateOtherFields(objStudentFields)) {\r\n if (this.StudentField.ErrorCount == 0 && callbackFunction == true) {\r\n this.callbackFunction(objStudentFields);\r\n }\r\n }\r\n else {\r\n this.showErors();\r\n }\r\n }\r\n }\r\n }\r\n\r\n validateOtherFields(objStudentFields: StudentField[]) {\r\n const emailFields: StudentField[] = Object.assign(objStudentFields.filter(function (element) { return (element.DataFieldFormatType == 205); }));\r\n emailFields.forEach((email, i: number) => {\r\n if (emailFields[i].ColumnData != undefined && emailFields[i].ColumnData != null && emailFields[i].ColumnData != '') {\r\n const regex = /^(([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+([;.](([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5}){1,25})+)*$/;\r\n if (!regex.test(String(emailFields[i].ColumnData).toLowerCase())) {\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = emailFields[i].FieldName;\r\n this.error.errorMsg = ' has the value ' + emailFields[i].ColumnData + ' which is not valid Email';\r\n this.error.fieldRef = null;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n }\r\n });\r\n\r\n if (objStudentFields.filter(x => x.FieldName == 'ElemAptitude').length > 0) {\r\n this.ElemAptitudeField = Object.assign(objStudentFields.filter(x => x.FieldName == 'ElemAptitude')[0]);\r\n }\r\n\r\n if (this.ElemAptitudeField != null && this.ElemAptitudeField.ColumnData != undefined && this.ElemAptitudeField.ColumnData != null && this.ElemAptitudeField.ColumnData != '' && (Number(this.ElemAptitudeField.ColumnData) > 255 || Number(this.ElemAptitudeField.ColumnData) < 0)) {\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = this.ElemAptitudeField.FieldName;\r\n this.error.errorMsg = ' value must be between 0 to 255!';\r\n this.error.fieldRef = null;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n\r\n this.isStudentIdError = this.StudentFields.filter(element => element.DataFieldFormatType == 201);\r\n this.isStateIdError = this.StudentFields.filter(element => element.DataFieldFormatType == 202);\r\n this.idFields = Object.assign(objStudentFields.filter((element) => {\r\n return ((element.DataFieldFormatType == 201 && this.isStudentIdError.length == 1) || (element.DataFieldFormatType == 202 && this.isStateIdError.length == 1) || element.DataFieldFormatType == 203);\r\n }));\r\n\r\n this.idFields.forEach((idF, i: number) => {\r\n if (idF.ColumnData != undefined && idF.ColumnData != null && idF.ColumnData != '') {\r\n const intMaxValue = (new Array(idF.FieldSize)).fill(9).join('');\r\n if ((idF.DataFieldFormatType == 201 && ((this.StudentField.ValidateIdLengthOnly\r\n && (idF.ColumnData.length != idF.FieldSize))\r\n || (!this.StudentField.ValidateIdLengthOnly && ((Number(idF.ColumnData) < Number(idF.MinimumFieldValue)) || (Number(idF.ColumnData) > Number(intMaxValue))))))\r\n || (idF.DataFieldFormatType == 202 && (idF.ColumnData.length != idF.FieldSize))\r\n || (idF.DataFieldFormatType == 203 && (idF.ColumnData.length != 9))) {\r\n\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = idF.FieldName;\r\n this.error.errorMsg = ' has the value ' + idF.ColumnData + ' which is not formatted correctly or an incorrect length. Proper format is ' + idF.DataTypeFormat;\r\n this.error.fieldRef = null;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n }\r\n });\r\n\r\n const lunchPin: StudentField[] = Object.assign(objStudentFields.filter(function (element) { return element.DataFieldFormatType == 200; }));\r\n lunchPin.forEach((lun, i: number) => {\r\n if (lunchPin[i].ColumnData != undefined && lunchPin[i].ColumnData != null && lunchPin[i].ColumnData != '') {\r\n if (lunchPin[i].ColumnData.length != lunchPin[i].FieldSize) {\r\n\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = lunchPin[i].FieldName;\r\n this.error.errorMsg = ' has the value ' + lunchPin[i].ColumnData + ' which is not formatted correctly or an incorrect length. Proper format is ' + lunchPin[i].DataTypeFormat;\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n\r\n if (isNaN(Number(lunchPin[i].ColumnData))) {\r\n this.StudentField.ErrorCount = this.StudentField.ErrorCount + 1;\r\n this.error.fieldName = lunchPin[i].FieldName;\r\n this.error.errorMsg = ' should be numeric!';\r\n this.StudentField.ErrorCollection.push(this.error);\r\n }\r\n }\r\n });\r\n if (this.StudentField.ErrorCount == 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n showErors() {\r\n this.errors = [];\r\n if (this.StudentField.ErrorCollection.length > 0) {\r\n this.StudentField.ErrorCollection.forEach((errField, index: number) => {\r\n const element = new ElementRef(document.getElementById('FieldData' + errField.fieldName));\r\n const objError: ErrorList = {\r\n fieldName: errField.fieldName,\r\n errorMsg: errField.errorMsg,\r\n fieldRef: element\r\n };\r\n if (this.errors.filter(x => x.fieldName == objError.fieldName).length < 1) {\r\n this.errors.push(objError);\r\n }\r\n });\r\n }\r\n }\r\n\r\n checkErrors(nextState?: RouterStateSnapshot): number {\r\n this.errors = [];\r\n this.saveClick(false);\r\n if (this.unsavedChanges) {\r\n return 0;\r\n }\r\n return 1;\r\n }\r\n\r\n save(): Observable {\r\n this.saveClick(true);\r\n return this.observableStudentFieldSavedStream$;\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.studentHeaderRef != undefined) {\r\n this.studentHeaderHeight = this.studentHeaderRef.nativeElement.offsetHeight;\r\n }\r\n if (this.footerRef != undefined) {\r\n this.footerHeight = this.footerRef.nativeElement.offsetHeight;\r\n }\r\n this.onResize();\r\n }\r\n\r\n ngOnDestroy() {\r\n\r\n }\r\n\r\n getCustomPages() {\r\n const serverCalls = [\r\n this.customizationFrameworkService.getCustomPagesByModuleObject(enmCSTModuleNames.HouseholdRegistration, enmCustomDataObjects.Student, this.yearService.defaultYear.SiteYearId),\r\n this.customizationFrameworkService.getCustomPagesByModuleObject(enmCSTModuleNames.HouseholdRegistration, enmCustomDataObjects.StudentByYear, this.yearService.defaultYear.SiteYearId),\r\n this.customizationFrameworkService.getCustomPagesByModuleObject(enmCSTModuleNames.HouseholdRegistration, enmCustomDataObjects.StateReportingByYear, this.yearService.defaultYear.SiteYearId)\r\n ];\r\n\r\n this.subscriptions.push(\r\n forkJoin(serverCalls).pipe(take(1)).subscribe(result => {\r\n const allPages = result[0].concat(result[1]).concat(result[2]);\r\n this.customPages = allPages;\r\n this.customPagesRetrieved = true;\r\n }));\r\n }\r\n}\r\n","export class CourseTerm {\r\n $id: string;\r\n EndDate: string;\r\n Id: number;\r\n LongDescription: string;\r\n MediumDescription: string;\r\n ParentId: number;\r\n Sequence: number;\r\n ShortDescription: string;\r\n StartDate: string;\r\n TermTypeId: number;\r\n Code: 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 Today's Schedule\r\n \r\n \r\n This Term\r\n \r\n \r\n All\r\n \r\n \r\n \r\n\r\n \r\n
\r\n No Student Schedule data exists for student\r\n
\r\n\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Meets\r\n \r\n \r\n \r\n {{scheduleCourse.Meets}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Attendance
Type
\r\n \r\n \r\n
\r\n \r\n {{scheduleCourse.AttendanceType}}\r\n \r\n
\r\n\r\n \r\n \r\n \r\n Term\r\n \r\n \r\n \r\n {{scheduleCourse.Term}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Course Name\r\n \r\n \r\n \r\n {{scheduleCourse.Course}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Teacher\r\n \r\n \r\n \r\n {{scheduleCourse.Teacher}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Room\r\n \r\n \r\n \r\n {{scheduleCourse.Room}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Entry Date\r\n \r\n \r\n \r\n {{scheduleCourse.getEntryDate() | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Dropped Date\r\n \r\n \r\n \r\n {{scheduleCourse.getDroppedDate() | date: 'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Team\r\n \r\n \r\n \r\n {{scheduleCourse.TeamCode}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n  \r\n {{scheduleCourse.SubjectCode}}-{{scheduleCourse.Section}}\r\n
\r\n \r\n Assignments\r\n \r\n \r\n Attendance\r\n \r\n \r\n Email Teacher\r\n \r\n \r\n Grades\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n  \r\n {{scheduleCourse.SchoolName}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\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 { Portal } from './../../shared-components/portal.model';\r\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { MenuItem } from '../../shared-components/controls/menus/menu-item.model';\r\nimport { CourseDescriptionDialogComponent } from '../../shared-components/course-description-dialog/course-description-dialog.component';\r\nimport { ExportService } from '../../shared-components/export.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { SendEmailService } from '../../shared-modules/send-email/send-email.service';\r\nimport { Student360Service } from '../student360.service';\r\nimport { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\nimport { ProfileViewerDialogComponent } from './../../shared-components/profile-viewer-dialog/profile-viewer-dialog.component';\r\nimport { CourseSchedule } from './../../shared-components/student/course-schedule.model';\r\nimport { Enrollment } from './../../shared-components/student/enrollment.model';\r\nimport { AssignmentService } from './../assignment/assignment.service';\r\nimport { StudentScheduleService } from './student-schedule.service';\r\nimport { UserType } from '../../shared-components/user/user-type';\r\n\r\n@Component({\r\n selector: 'student-schedule',\r\n templateUrl: './student-schedule.component.html',\r\n styleUrls: [\r\n './student-schedule.component.css'\r\n ],\r\n animations: [\r\n detailExpand\r\n ]\r\n})\r\nexport class StudentScheduleComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // Properties\r\n private _viewOption = 1;\r\n private _includeDropped = false;\r\n schedule: CourseSchedule[];\r\n subscriptions: Subscription[] = [];\r\n tableData = new TylerMatTableDataSource();\r\n junkDate = System.junkDate;\r\n columns = ['More', 'Meets', 'Term', 'Course', 'Teacher', 'Room', 'EntryDate', 'DroppedDate', 'Team'];\r\n selectedRow: CourseSchedule;\r\n expandEmitter = new EventEmitter();\r\n tableHeight: number;\r\n minTableWidth: number;\r\n @ViewChild('tableContainer', { read: ElementRef }) tableContainer: ElementRef;\r\n showProfiles: boolean;\r\n studentEnrollment: Enrollment;\r\n _sort: MatSort;\r\n clearFilterEvent = new EventEmitter();\r\n parentPortalSubscription: Subscription;\r\n staffAssignedPortalsSubscription: Subscription;\r\n student360YearSubscription: Subscription;\r\n // ------------Selection/Flags-----------------------------------\r\n showAttendanceLink = false;\r\n showAssignmentLink = false;\r\n showGradesLink = false;\r\n showEmailLink = false;\r\n calendarUseAttendanceTypes = false;\r\n enableClassInformationandTeacherProfiles = false;\r\n // Class Functions\r\n constructor(\r\n private studentScheduleService: StudentScheduleService,\r\n private loginService: LoginService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private studentService: StudentService,\r\n private sendEmailService: SendEmailService,\r\n private assignmentService: AssignmentService,\r\n private sharedService: SharedService,\r\n private exportService: ExportService,\r\n public changeDetector: ChangeDetectorRef,\r\n private activatedRoute: ActivatedRoute,\r\n private userService: UserService,\r\n private parentPortalService: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n get viewOption(): number {\r\n return this._viewOption;\r\n }\r\n\r\n set viewOption(value: number) {\r\n this._viewOption = value;\r\n this.getSchedule();\r\n }\r\n\r\n get includeDropped(): boolean {\r\n return this._includeDropped;\r\n }\r\n\r\n set includeDropped(value: boolean) {\r\n this.tableData.data = [];\r\n this.schedule = undefined;\r\n this._includeDropped = value;\r\n this.getSchedule();\r\n setTimeout(() => {\r\n this.sharedService.updateShowSpinner(true);\r\n setTimeout(() => {\r\n this.checkColumns();\r\n this.sharedService.updateShowSpinner(false);\r\n }, 25);\r\n }, 25);\r\n }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.tableData) {\r\n this.tableData.sort = this._sort;\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n this.activatedRoute.queryParams.subscribe(params => {\r\n const selectedView = params['selectedView'];\r\n // 1 = Today's schedule\r\n // 2 = This term\r\n // 3 = All\r\n if (selectedView) {\r\n this._viewOption = parseInt(selectedView, 10);\r\n }\r\n });\r\n // POST: initializes the data\r\n this.showProfiles = this.loginService.LoginSettings.ParentPortalCourseScheduleProfiles;\r\n this.enableClassInformationandTeacherProfiles = this.loginService.LoginSettings.EnableClassInformationandTeacherProfiles;\r\n this.checkColumns();\r\n this.getCalendarUseAttendanceTypes();\r\n\r\n this.subscriptions.push(\r\n this.expandEmitter.subscribe(expand => {\r\n this.tableData.expandAll(expand);\r\n }),\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.schedule = undefined;\r\n this.studentEnrollment = this.studentService.studentEnrollment;\r\n this.getCalendarUseAttendanceTypes();\r\n this.getSchedule();\r\n }),\r\n this.yearService.observableStudent360YearStream$.subscribe(student360Year => {\r\n this.getCalendarUseAttendanceTypes();\r\n this.getSchedule();\r\n })\r\n );\r\n\r\n if (this.userService.userType == UserType.Staff) {\r\n this.staffAssignedPortalsSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(_ => {\r\n this.getPortalInfo();\r\n });\r\n }\r\n else {\r\n this.parentPortalSubscription = this.parentPortalService.observableParentAssignedPortalsStream$.subscribe(_ => {\r\n this.getPortalInfo();\r\n });\r\n }\r\n this.getPortalInfo();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // POST: sets the sort to the table data\r\n if (this.tableData && this.sort) {\r\n this.tableData.sort = this.sort;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: unsubscribes to all observables\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n getPortalInfo() {\r\n const hasPortal = (portalName: string, excludeClassroomPortals: boolean) => {\r\n let portals: Portal[] = [];\r\n if (this.userService.userType == UserType.Staff) {\r\n portals = this.classroom360Service.staffAssignedPortals;\r\n } else {\r\n portals = this.parentPortalService.parentAssignedPortals;\r\n }\r\n return portals.filter(x => x.PortalName == portalName && x.Disabled == false && (!excludeClassroomPortals || x.ParentModule != '/classroom360')) != null\r\n && portals.filter(x => x.PortalName == portalName && x.Disabled == false && (!excludeClassroomPortals || x.ParentModule != '/classroom360')).length > 0;\r\n };\r\n this.showAttendanceLink = hasPortal('Attendance', true);\r\n this.showAssignmentLink = hasPortal('Assignments', true);\r\n this.showGradesLink = hasPortal('Grades', true);\r\n this.showEmailLink = hasPortal('Send Email', false);\r\n }\r\n\r\n assignmentClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on an assignment link under a course\r\n // POST: routes the user to that assignment page with this as the selected course\r\n this.assignmentService.selectedCourse = scheduleCourse;\r\n this.assignmentService.preventTabSwitch = true;\r\n const allowableTerms = scheduleCourse.CourseTerms.filter(term => {\r\n const today = Date.now();\r\n if (term.EndDate && term.StartDate) {\r\n const startDate = Date.parse(term.StartDate);\r\n const endDate = Date.parse(term.EndDate);\r\n if (today >= startDate && today <= endDate) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n if (allowableTerms.length > 0) {\r\n this.assignmentService.selectedGP = allowableTerms[allowableTerms.length - 1].ShortDescription;\r\n }\r\n this.assignmentService.selectedSectionId = scheduleCourse.SiteSectionId;\r\n this.assignmentService.selectedCourseSection = scheduleCourse.SubjectCode + '-' + scheduleCourse.Section;\r\n if (!this.userService.studentInformationView) {\r\n this.assignmentService.selectedView = this.viewOption;\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/assignments');\r\n }\r\n }\r\n\r\n attendanceClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on an attendance link under a course\r\n // POST: routes the user to that attendance page with by student schedule (all) as selected\r\n this.studentService.selectedCourse = scheduleCourse;\r\n this.studentService.selectedSectionId = scheduleCourse.SiteSectionId;\r\n this.studentService.selected = '3';\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/attendance');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/attendance');\r\n }\r\n }\r\n\r\n emailTeacherClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on an attendance link under a course\r\n // POST: routes the user to the email page\r\n this.sendEmailService.teacherName = scheduleCourse.TeacherName;\r\n this.sendEmailService.teacherEmailAddress = scheduleCourse.TeacherEmail;\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/sendEmail');\r\n }\r\n }\r\n\r\n gradesClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on a grade link under a course\r\n // POST: routes the user to the grade page\r\n if (!this.userService.studentInformationView) {\r\n this.router.navigateByUrl('/student360/reportCardGrades');\r\n }\r\n else {\r\n this.userService.updateStudentViewRoute('/student360/reportCardGrades');\r\n }\r\n }\r\n\r\n menuClick(item: MenuItem) {\r\n // PRE: a menu item is clicked\r\n // POST: routes to the right handler\r\n switch (item.itemName) {\r\n case 'Course Description':\r\n this.courseDescriptionClick(item.data);\r\n break;\r\n case 'Class Information':\r\n this.classInformationClick(item.data);\r\n break;\r\n case 'Teacher Profile':\r\n this.teacherProfileClick(item.data);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n courseDescriptionClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on a course description link under a course\r\n // POST: shows a modal for the course's description\r\n this.dialog.open(CourseDescriptionDialogComponent, {\r\n data: {\r\n course: scheduleCourse.Course,\r\n courseSection: scheduleCourse.SubjectCode + '-' + scheduleCourse.Section,\r\n teacherName: scheduleCourse.TeacherName,\r\n schoolName: scheduleCourse.SchoolName,\r\n curriculum: scheduleCourse.Curriculum,\r\n description: scheduleCourse.Description\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n classInformationClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on a class information link under a course\r\n // POST: shows a modal for that class' profile\r\n const dialogBox = this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n courseSSEC_ID: scheduleCourse.SiteSectionId,\r\n courseName: scheduleCourse.Course,\r\n courseSection: scheduleCourse.SubjectCode + '-' + scheduleCourse.Section,\r\n teacherId: scheduleCourse.TeacherMemId,\r\n teacherName: scheduleCourse.TeacherName,\r\n school: scheduleCourse.SchoolName,\r\n profiles: scheduleCourse.CourseProfile,\r\n showTeacherProfileLink: scheduleCourse.HasTeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n this.subscriptions.push(\r\n dialogBox.componentInstance.teacherProfileClick.subscribe(() => {\r\n this.teacherProfileClick(scheduleCourse);\r\n })\r\n );\r\n }\r\n\r\n teacherProfileClick(scheduleCourse: CourseSchedule) {\r\n // PRE: the user clicks on a teacher profile link under a couse\r\n // POST: shows a modal for that teacher's profile\r\n this.dialog.open(ProfileViewerDialogComponent, {\r\n data: {\r\n teacherId: scheduleCourse.TeacherMemId,\r\n teacherName: scheduleCourse.TeacherName,\r\n school: scheduleCourse.SchoolName,\r\n profiles: scheduleCourse.TeacherProfile\r\n },\r\n disableClose: true\r\n });\r\n }\r\n\r\n getSchedule() {\r\n // POST: obtains the schedule from the server\r\n this.subscriptions.push(\r\n this.studentScheduleService.getStudentSchedule(this.viewOption, false, false, false, this.includeDropped, true, false, false).subscribe(schedule => {\r\n this.schedule = schedule;\r\n this.setGridHeader();\r\n for (let i = 0; i < this.schedule.length; i++) {\r\n this.schedule[i] = System.convert(this.schedule[i], new CourseSchedule());\r\n }\r\n this.tableData.data = this.schedule;\r\n if (this.sort) {\r\n this.tableData.sort = this.sort;\r\n }\r\n })\r\n );\r\n }\r\n\r\n getMenuItems(scheduleCourse): string[] {\r\n // POST: returns the menu items for a given schedule course\r\n // Rearranged to be in alphabetical order\r\n const menuItems = [];\r\n if (this.enableClassInformationandTeacherProfiles) {\r\n if (scheduleCourse.HasClassProfile) {\r\n menuItems.push('Class Information');\r\n }\r\n if (scheduleCourse.HasTeacherProfile) {\r\n menuItems.push('Teacher Profile');\r\n }\r\n }\r\n\r\n return menuItems;\r\n }\r\n\r\n checkColumns() {\r\n // POST: checks the columns for ones that shouldn't be there\r\n\r\n // Team is a V9 only column\r\n if (!this.columns.includes('Team')) {\r\n this.columns.push('Team'); // Team is always on the end\r\n }\r\n\r\n // Entry date and DroppedDate are only there if include dropped\r\n if (this.includeDropped) {\r\n if (!this.columns.includes('EntryDate')) {\r\n this.columns.splice(6, 0, 'EntryDate');\r\n }\r\n if (!this.columns.includes('DroppedDate')) {\r\n this.columns.splice(7, 0, 'DroppedDate');\r\n }\r\n this.minTableWidth = 1000;\r\n } else {\r\n if (this.columns.includes('DroppedDate')) {\r\n this.columns.splice(this.columns.indexOf('DroppedDate'), 1);\r\n }\r\n if (this.columns.includes('EntryDate')) {\r\n this.columns.splice(this.columns.indexOf('EntryDate'), 1);\r\n }\r\n this.minTableWidth = 750;\r\n }\r\n }\r\n\r\n export() {\r\n this.schedule.forEach(schedule => {\r\n schedule['CourseSection'] = schedule.SubjectCode + '-' + schedule.Section;\r\n });\r\n\r\n this.exportService.exportMatGridToExcel(this.schedule, this.columns, 'studentSchedule', ['CourseSection'], ['More']);\r\n }\r\n\r\n getCalendarUseAttendanceTypes() {\r\n this.sharedService.getCalendarUseAttendanceTypes(0, this.yearService.student360Year.Id, this.studentService.selectedStudent.Id).subscribe(result => {\r\n this.calendarUseAttendanceTypes = result;\r\n this.setGridHeader();\r\n });\r\n }\r\n\r\n setGridHeader() {\r\n if (this.calendarUseAttendanceTypes && this.viewOption == 1) {\r\n this.columns = ['More', 'Meets', 'AttendanceType', 'Term', 'Course', 'Teacher', 'Room', 'EntryDate', 'DroppedDate', 'Team'];\r\n }\r\n else {\r\n this.columns = ['More', 'Meets', 'Term', 'Course', 'Teacher', 'Room', 'EntryDate', 'DroppedDate', 'Team'];\r\n }\r\n }\r\n}\r\n","import { CourseSchedule } from './../../shared-components/student/course-schedule.model';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from './../../shared-components/System';\r\nimport { StudentService } from './../../shared-components/student/student.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\n\r\n@Injectable()\r\nexport class StudentScheduleService {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor (\r\n private http: HttpClient,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService\r\n ) {}\r\n\r\n // Methods\r\n getStudentSchedule(\r\n viewOption: number,\r\n includeAttendance = false,\r\n includeReportCardGards = false,\r\n isProgressGrades = false,\r\n includeDropped = false,\r\n includeWithdrawnStudent = false,\r\n blnIncludeTerms = false,\r\n showAllAttendanceCodes = false\r\n ): Observable {\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.student360Year.Id +\r\n '&userId=' + this.userService.currentUser.Id +\r\n '&viewOption=' + viewOption +\r\n '&includeAttendance=' + includeAttendance +\r\n '&includeReportCardGrades=' + includeReportCardGards +\r\n '&isProgressGrades=' + isProgressGrades +\r\n '&includeDropped=' + includeDropped +\r\n '&includeWithdrawnStudent=' + includeWithdrawnStudent +\r\n '&blnIncludeTerms=' + blnIncludeTerms +\r\n '&showAllAttendanceCodes=' + showAllAttendanceCodes;\r\n return this.http.get(System.apiURL.Student + 'GetStudentSchedule' + queryString);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\n@Pipe({\r\n name: 'newAnnouncementsModalFilter'\r\n})\r\nexport class NewAnnouncementsModalFilterPipe implements PipeTransform {\r\n\r\n transform(siteAnnouncement: TylerMatTableDataSource[], school: string): any {\r\n const sitedata = new TylerMatTableDataSource();\r\n const site = siteAnnouncement[0].data.filter(x => x.SchoolName == school);\r\n sitedata[0] = new TylerMatTableDataSource(site);\r\n return sitedata[0];\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-help-menu-modal',\r\n templateUrl: './help-menu-modal.component.html',\r\n styleUrls: ['./help-menu-modal.component.css']\r\n})\r\nexport class HelpMenuModalComponent implements OnInit {\r\n\r\n constructor(private dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","
\r\n Help\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n Hiding/Showing Cards\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n

\r\n The different ares that display information on the Student Summary page are called \"cards\". Cards can be shown in summary view, detailed view, or turned off. (Some cards do not have a summary option based on the type of information they show.)\r\n

\r\n

\r\n The top image on the right shows what the Attendance card looks like in summary view and the bottom example shows it in detailed view.\r\n

\r\n
    \r\n
  • Summary vies show only a limited amount of information, usually just counts or totals, so they take up less space, allowing more cards to be seen at once.
  • \r\n
  • Detailed views show more information, so they take up more space. The height of these cards will adjust based on the content to be displayed.
  • \r\n
\r\n

\r\n When a summary card is being shown, selecting it will display the information that would have been shown on the detailed card, so regardless of which way the card is being shown, the detailed information is easily accessible.\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n Rearranging the Cards\r\n \r\n \r\n \r\n \r\n \r\n

\r\n The order in which the cards are displayed can be changed by dragging rows up and down in the list.\r\n

\r\n

\r\n The cards display in two columns. The Column Break indicator can be moved up or down to define where the second column begins - rows above the Column Break indicator will show in the first column, rows below it will show in the second column.\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n","
\r\n \r\n
\r\n
\r\n
Settings
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Off\r\n
\r\n
\r\n Summary\r\n
\r\n
\r\n Detailed\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"Re-Order\"\r\n
\r\n
\r\n {{card.title | translate}}\r\n
\r\n
\r\n
{{card.title | translate}}
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\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, OnInit } from '@angular/core';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { HelpMenuModalComponent } from '../help-menu-modal/help-menu-modal.component';\r\nimport * as _ from 'lodash';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-settings-menu-modal',\r\n templateUrl: './settings-menu-modal.component.html',\r\n styleUrls: ['./settings-menu-modal.component.css']\r\n})\r\nexport class SettingsMenuModalComponent implements OnInit {\r\n cards: any[] = [];\r\n districtCards: any[] = []; // Cards that the user can not reorder or control the display of\r\n loginSettings: LoginSettings;\r\n constructor(\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private matDialogRef: MatDialogRef\r\n ) {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n }\r\n\r\n ngOnInit() {\r\n // We need a deep copy of the object so there are no live updates\r\n this.cards = _.cloneDeep(this.userService.cards);\r\n this.initialSort();\r\n }\r\n\r\n drop(event: CdkDragDrop) {\r\n moveItemInArray(this.cards, event.previousIndex, event.currentIndex);\r\n // re-index the card positions\r\n for (let i = 0; i < this.cards.length; i++) {\r\n this.cards[i].position = i;\r\n }\r\n // check all the card positions relative to the column break\r\n const colBreakIndex = this.cards.findIndex(c => c.title == 'Column Break');\r\n for (let i = 0; i < this.cards.length; i++) {\r\n if (i < colBreakIndex) {\r\n this.cards[i].columnPosition = 'L';\r\n }\r\n if (i > colBreakIndex) {\r\n this.cards[i].columnPosition = 'R';\r\n }\r\n }\r\n }\r\n\r\n helpClick() {\r\n this.dialog.open(HelpMenuModalComponent, { disableClose: true, autoFocus: false, minWidth: '90vw', minHeight: '90vh' });\r\n }\r\n\r\n initialSort() {\r\n // Remove staff only cards\r\n if (this.userService.userType != 1) {\r\n this.cards = this.cards.filter(card => !card.staffOnly);\r\n }\r\n // separate the cards based on column\r\n this.districtCards = this.cards.filter(card => card.showInSettings == false);\r\n this.cards = this.cards.filter(card => card.showInSettings == true);\r\n let cardsLeft = this.cards.filter(card => card.columnPosition == 'L');\r\n let cardsRight = this.cards.filter(card => card.columnPosition == 'R');\r\n // Sort each set\r\n cardsLeft = cardsLeft.sort(function (a, b) {\r\n if (a.position < b.position) {\r\n return -1;\r\n }\r\n if (a.position > b.position) {\r\n return 1;\r\n }\r\n });\r\n cardsRight = cardsRight.sort(function (a, b) {\r\n if (a.position < b.position) {\r\n return -1;\r\n }\r\n if (a.position > b.position) {\r\n return 1;\r\n }\r\n });\r\n // clear the initial array, pass in all the cards\r\n this.cards = [];\r\n for (let i = 0; i < cardsLeft.length; i++) {\r\n this.cards.push(cardsLeft[i]);\r\n }\r\n // Add the column break\r\n this.cards.push({ title: 'Column Break' });\r\n for (let i = 0; i < cardsRight.length; i++) {\r\n this.cards.push(cardsRight[i]);\r\n }\r\n }\r\n\r\n checkColumnName(card) {\r\n if (card.title == 'Column Break' || card.title == '') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n showDetailedOption(card) {\r\n if (card.hasDetailCard) {\r\n if (card.title == 'Attendance') {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n selectionChanged(card, event) {\r\n card.display = event.value;\r\n }\r\n\r\n cancelClick() {\r\n this.matDialogRef.close('Canceled');\r\n }\r\n\r\n saveClick() {\r\n this.districtCards.forEach((card) => {\r\n this.cards.push(card);\r\n });\r\n this.userService.cards = this.cards;\r\n this.matDialogRef.close('Saved');\r\n }\r\n\r\n}\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {CardAnnouncement} from '../card-announcement';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'app-card-announcement-modal',\r\n templateUrl: './card-announcement-modal.component.html',\r\n styleUrls: ['./card-announcement-modal.component.css']\r\n})\r\nexport class CardAnnouncementModalComponent implements OnInit {\r\n announcement: CardAnnouncement\r\n constructor(private matDialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, private sanitizer: DomSanitizer) { }\r\n\r\n ngOnInit() {\r\n this.announcement = this.data;\r\n }\r\n\r\n closeClick() {\r\n this.matDialogRef.close();\r\n }\r\n\r\n transform(content) {\r\n return this.sanitizer.bypassSecurityTrustHtml(content);\r\n}\r\n\r\n}\r\n","
\r\n {{announcement.StartDate | date: 'shortDate'}} - {{announcement.Title}}\r\n
\r\n\r\n
\r\n \r\n
\r\n","\r\n
\r\n
\r\n
\r\n Announcements\r\n
\r\n \r\n {{currentDate}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No announcements for current date.\r\n
\r\n
0\"\r\n style=\"display: flex; flex-direction: column; flex: 1; overflow: hidden\">\r\n 0\" style=\"margin: 0px;\">\r\n \r\n \r\n \r\n District\r\n ({{districtAnnouncements.length}})\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n NEW - {{da.StartDate | date: 'MM/dd/yy'}} - {{da.Title}}\r\n
\r\n
\r\n \r\n More\r\n
\r\n
\r\n
\r\n
\r\n 0\" style=\"margin: 0px;\">\r\n \r\n \r\n \r\n School ({{schoolAnnouncements.length}}\r\n )\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n NEW - {{sa.StartDate | date: 'MM/dd/yy'}} - {{sa.Title}}\r\n
\r\n
\r\n
\r\n More\r\n
\r\n
\r\n
\r\n
\r\n 0\" style=\"margin: 0px;\">\r\n \r\n \r\n \r\n Class ({{classAnnouncements.length}})\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n NEW - {{ca.StartDate | date: 'MM/dd/yy'}} - {{ca.Title}}\r\n
\r\n
\r\n
\r\n More\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n \r\n
\r\n","import { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { Router } from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { interval } from 'rxjs';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { CardAnnouncement } from './card-announcement';\r\nimport { CardAnnouncementModalComponent } from './card-announcement-modal/card-announcement-modal.component';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-announcement-card',\r\n templateUrl: './announcement-card.component.html',\r\n styleUrls: ['./announcement-card.component.css']\r\n})\r\n\r\nexport class AnnouncementCardComponent implements OnInit, OnDestroy {\r\n @ViewChildren('textArea') textAreas: QueryList;\r\n @Input() data: any;\r\n card: Card;\r\n currentDate: any;\r\n announcements: CardAnnouncement[] = [];\r\n districtAnnouncements: CardAnnouncement[] = [];\r\n schoolAnnouncements: CardAnnouncement[] = [];\r\n classAnnouncements: CardAnnouncement[] = [];\r\n\r\n constructor(private matDialog: MatDialog, private router: Router, private userService: UserService, private yearService: YearService, private studentSummaryService: StudentSummaryService, private studentService: StudentService, private sanitizer: DomSanitizer) {\r\n this.currentDate = moment().format('MM/DD/YY');\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getAnnouncements();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n viewDetailsClick() {\r\n this.router.navigateByUrl('/student360/announcements');\r\n }\r\n\r\n checkOverflow(element) {\r\n if (element && (element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n moreClick(announcement: CardAnnouncement) {\r\n this.matDialog.open(CardAnnouncementModalComponent, {\r\n data: announcement,\r\n disableClose: true,\r\n autoFocus: false,\r\n minWidth: '500px',\r\n maxWidth: '700px',\r\n maxHeight: '400px',\r\n minHeight: '300px'\r\n });\r\n }\r\n\r\n hasNewAnnouncements(announcements: CardAnnouncement[]) {\r\n const newAnnouncements = announcements.filter(a => a.IsNewSinceLastLogin == 1);\r\n if (newAnnouncements.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n getAnnouncements() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardAnnouncements(this.studentService.selectedStudent.Id, this.userService.currentUser.Id, schoolId, this.userService.userType, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n let idx = 0;\r\n this.announcements = response.body;\r\n this.districtAnnouncements = this.announcements.filter(a => a.AnnouncementType == 'District');\r\n this.schoolAnnouncements = this.announcements.filter(a => a.AnnouncementType == 'School');\r\n this.classAnnouncements = this.announcements.filter(a => a.AnnouncementType == 'Class');\r\n this.classAnnouncements.forEach(element => {\r\n if (element.Announcement.indexOf('') == -1 || element.Announcement.startsWith('') == false) {\r\n element.Announcement = '' + element.Announcement + '';\r\n }\r\n });\r\n setTimeout(() => {\r\n this.districtAnnouncements.forEach((announcement) => {\r\n const ta = this.textAreas.toArray()[idx];\r\n if (ta != undefined) {\r\n announcement.Overflow = this.checkOverflow(ta.nativeElement);\r\n idx++;\r\n }\r\n });\r\n this.schoolAnnouncements.forEach((announcement) => {\r\n const ta = this.textAreas.toArray()[idx];\r\n if (ta != undefined) {\r\n announcement.Overflow = this.checkOverflow(ta.nativeElement);\r\n idx++;\r\n }\r\n });\r\n this.classAnnouncements.forEach((announcement) => {\r\n const ta = this.textAreas.toArray()[idx];\r\n if (ta != undefined) {\r\n announcement.Overflow = this.checkOverflow(ta.nativeElement);\r\n idx++;\r\n }\r\n });\r\n }, 0);\r\n }\r\n });\r\n }\r\n\r\n transform(content) {\r\n return this.sanitizer.bypassSecurityTrustHtml(content);\r\n }\r\n\r\n}\r\n","export class CardAttendance {\r\n Class: string;\r\n DaysPresent: number;\r\n HoursPresent: number;\r\n IsTotalRow: boolean;\r\n Marked: string;\r\n Meets: string;\r\n TodaysAbsences: number;\r\n TodaysTardies: number;\r\n TotalAbsences: number;\r\n TotalDays: number;\r\n TotalHours: number;\r\n TotalTardies: number;\r\n DailyAttendanceStatus: string;\r\n}","
\r\n
\r\n
\r\n Attendance\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
Today
\r\n\r\n
No tardies or absences today
\r\n\r\n
\r\n 0\" mat-table [dataSource]=\"studentAttendance\" style=\"width: 100%\">\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Class {{attendanceRecord.Class}} Meets Marked {{attendanceRecord.Marked}}
\r\n
\r\n Year-To-Date\r\n
\r\n
\r\n
\r\n
\r\n {{DaysPresent |number:'2.2-2'}} of {{TotalDays |number:'2.2-2'}} Days\r\n ({{((DaysPresent/TotalDays)*100)|number:'2.2-2'}} %)\r\n
\r\n
\r\n {{HoursPresent |number:'2.2-2'}} of {{TotalHours |number:'2.2-2'}} Hours\r\n ({{((HoursPresent/TotalHours)*100)|number:'2.2-2'}} %)\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { CardAttendance } from '../card-attendance';\r\nimport { Router } from '@angular/router';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../../../../shared-modules/login/login.service';\r\n@Component({\r\n selector: 'app-attendance-card-modal',\r\n templateUrl: './attendance-card-modal.component.html',\r\n styleUrls: ['./attendance-card-modal.component.css']\r\n})\r\nexport class AttendanceCardModalComponent implements OnInit {\r\n studentAttendance: CardAttendance[] = [];\r\n displayedColumns: string[] = ['Class', 'Meets', 'Marked'];\r\n yearToDateTardyCount = 0;\r\n yearToDateAbsentCount = 0;\r\n DaysPresent = 0;\r\n TotalDays = 0;\r\n HoursPresent = 0;\r\n TotalHours = 0;\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, private router: Router, private dialogRef: MatDialogRef, private loginService: LoginService) { }\r\n\r\n ngOnInit() {\r\n this.studentAttendance = this.data.studentAttendance;\r\n this.yearToDateAbsentCount = this.data.totalAbsences;\r\n this.yearToDateTardyCount = this.data.totalTardies;\r\n\r\n this.DaysPresent = this.data.DaysPresent;\r\n this.TotalDays = this.data.TotalDays;\r\n this.HoursPresent = this.data.HoursPresent;\r\n this.TotalHours = this.data.TotalHours;\r\n }\r\n\r\n viewAllClick() {\r\n this.router.navigateByUrl('/student360/attendance');\r\n this.dialogRef.close();\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n Today's Attendance\r\n\r\n
\r\n
\r\n
\r\n {{todaysTardyCount}}\r\n
\r\n
\r\n Tardy\r\n
\r\n
\r\n
\r\n
\r\n {{todaysAbsentCount}}\r\n
\r\n
\r\n Absent\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n Attendance\r\n
\r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n Attendance\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Today\r\n
\r\n
\r\n No tardies or absences today\r\n
\r\n
\r\n 0\" mat-table [dataSource]=\"studentAttendance\" style=\"width: 100%\">\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Class {{attendanceRecord.Class}}MeetsMarked\r\n {{attendanceRecord.Marked}}
\r\n
\r\n Year-To-Date\r\n
\r\n
\r\n
\r\n
\r\n {{DaysPresent |number:'2.2-2'}} of {{TotalDays |number:'2.2-2'}} Days\r\n ({{((DaysPresent/TotalDays)*100)|number:'2.2-2'}} %)\r\n
\r\n
\r\n {{HoursPresent |number:'2.2-2'}} of {{TotalHours |number:'2.2-2'}} Hours\r\n ({{((HoursPresent/TotalHours)*100)|number:'2.2-2'}} %)\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { CardAttendance } from './card-attendance';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AttendanceCardModalComponent } from './attendance-card-modal/attendance-card-modal.component';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { interval } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-attendance-card',\r\n templateUrl: './attendance-card.component.html',\r\n styleUrls: ['./attendance-card.component.css']\r\n})\r\n\r\nexport class AttendanceCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n studentAttendance: CardAttendance[] = [];\r\n attendanceTotals: CardAttendance;\r\n displayedColumns: string[] = ['Class', 'Meets', 'Marked'];\r\n todaysTardyCount = 0;\r\n todaysAbsentCount = 0;\r\n yearToDateTardyCount = 0;\r\n yearToDateAbsentCount = 0;\r\n DaysPresent = 0;\r\n TotalDays = 0;\r\n HoursPresent = 0;\r\n TotalHours = 0;\r\n dailyAttendanceStatus: string;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private router: Router,\r\n private studentService: StudentService,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getAttendance();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getAttendance() {\r\n // Clear all the fields\r\n this.yearToDateTardyCount = 0;\r\n this.yearToDateAbsentCount = 0;\r\n this.todaysAbsentCount = 0;\r\n this.todaysTardyCount = 0;\r\n // Reset the student attendance objects\r\n this.studentAttendance = [];\r\n this.attendanceTotals = new CardAttendance();\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardAttendance(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n this.studentAttendance = response.body;\r\n // Extract total row\r\n this.attendanceTotals = this.studentAttendance.find(a => a.Class == 'Total Row');\r\n this.todaysTardyCount = this.attendanceTotals.TodaysTardies;\r\n this.todaysAbsentCount = this.attendanceTotals.TodaysAbsences;\r\n this.yearToDateAbsentCount = this.attendanceTotals.TotalAbsences;\r\n this.yearToDateTardyCount = this.attendanceTotals.TotalTardies;\r\n this.DaysPresent = this.attendanceTotals.DaysPresent;\r\n this.TotalDays = this.attendanceTotals.TotalDays;\r\n this.HoursPresent = this.attendanceTotals.HoursPresent;\r\n this.TotalHours = this.attendanceTotals.TotalHours;\r\n // Remove the total row from student attendance\r\n this.studentAttendance = this.studentAttendance.filter(a => a.Class !== 'Total Row');\r\n this.dailyAttendanceStatus = this.attendanceTotals.DailyAttendanceStatus;\r\n }\r\n });\r\n }\r\n\r\n cardClick() {\r\n // open the detailed version of the attendance card in a modal window\r\n if (!this.card.disabled) {\r\n this.dialog.open(AttendanceCardModalComponent, {\r\n minWidth: '40vw',\r\n data: {\r\n studentAttendance: this.studentAttendance,\r\n totalTardies: this.yearToDateTardyCount,\r\n totalAbsences: this.yearToDateAbsentCount,\r\n DaysPresent: this.DaysPresent,\r\n TotalDays: this.TotalDays,\r\n HoursPresent: this.HoursPresent,\r\n TotalHours: this.TotalHours\r\n },\r\n disableClose: true,\r\n autoFocus: false\r\n });\r\n }\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n mockData() {\r\n // used to add mock data to the attendance card\r\n const c1 = new CardAttendance();\r\n c1.Class = 'English Lit 1';\r\n c1.Meets = 'P01';\r\n c1.Marked = 'Tardy';\r\n this.studentAttendance.push(c1);\r\n const c2 = new CardAttendance();\r\n c2.Class = 'Biology 1';\r\n c2.Meets = 'P05';\r\n c2.Marked = 'Tardy';\r\n this.studentAttendance.push(c2);\r\n const c3 = new CardAttendance();\r\n c3.Class = 'Intro to Computer Science';\r\n c3.Meets = 'P06';\r\n c3.Marked = 'Absent';\r\n this.studentAttendance.push(c3);\r\n }\r\n\r\n viewAllClick() {\r\n this.router.navigateByUrl('/student360/attendance');\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n Assignments\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n 0\" mat-table [dataSource]=\"assignments\" style=\"width: 100%; padding-bottom: 5px;\">\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Due {{assignment.Due}} Class {{assignment.Class}} Assignment {{assignment.AssignmentName}}
\r\n
\r\n
\r\n
\r\n No missing assignments in the last 30 days.\r\n
\r\n
\r\n No assignments due today or tomorrow.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport {CardAssignment} from '../card-assignment';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-assignments-card-modal',\r\n templateUrl: './assignments-card-modal.component.html',\r\n styleUrls: ['./assignments-card-modal.component.css']\r\n})\r\nexport class AssignmentsCardModalComponent implements OnInit {\r\n\r\n assignments: CardAssignment[] = [];\r\n displayedColumns: string[] = ['Due', 'Class', 'Assignment'];\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, private router: Router, private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.assignments = this.data.assignments;\r\n }\r\n\r\n viewAllClick() {\r\n this.router.navigateByUrl('/student360/assignments');\r\n this.dialogRef.close();\r\n }\r\n\r\n checkIfMissing(assignment: CardAssignment) {\r\n // If missing return the isMissing class\r\n if (assignment.IsMissing) {\r\n return 'isMissing';\r\n }\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n Assignments\r\n
\r\n
\r\n
\r\n
\r\n {{missingCount}}\r\n
\r\n
\r\n
Missing in
Last 30 Days
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{dueTodayCount}}\r\n
\r\n
\r\n Due Today\r\n
\r\n
\r\n
\r\n
\r\n {{dueTomorrowCount}}\r\n
\r\n
\r\n Due Tomorrow\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n Assignments\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n 0\" mat-table [dataSource]=\"assignments\" style=\"width: 100%\">\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Due {{assignment.Due}} Class {{assignment.Class}} Assignment {{assignment.AssignmentName}}
\r\n
\r\n
\r\n No missing assignments in the last 30 days.\r\n
\r\n
\r\n No assignments due today or tomorrow.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { CardAssignment } from './card-assignment';\r\nimport * as moment from 'moment';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AssignmentsCardModalComponent } from './assignments-card-modal/assignments-card-modal.component';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { interval } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-assignments-card',\r\n templateUrl: './assignments-card.component.html',\r\n styleUrls: ['./assignments-card.component.css']\r\n})\r\n\r\nexport class AssignmentsCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n missingCount = 0;\r\n dueTodayCount = 0;\r\n dueTomorrowCount = 0;\r\n assignments: CardAssignment[] = [];\r\n displayedColumns: string[] = ['Due', 'Class', 'Assignment'];\r\n\r\n constructor(private dialog: MatDialog, private router: Router, private studentService: StudentService, private studentSummaryService: StudentSummaryService, private userService: UserService, private yearService: YearService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getAssignments();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n checkIfMissing(assignment: CardAssignment) {\r\n // If missing return the isMissing class\r\n if (assignment.IsMissing) {\r\n return 'isMissing';\r\n }\r\n }\r\n\r\n viewAllClick() {\r\n this.router.navigate(['/student360/assignments']);\r\n }\r\n\r\n getAssignments() {\r\n this.assignments = [];\r\n this.missingCount = 0;\r\n this.dueTomorrowCount = 0;\r\n this.dueTodayCount = 0;\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardAssignments(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe(response => {\r\n response.body.forEach((a) => {\r\n this.assignments.push(a);\r\n });\r\n // Check if the assignment is missing\r\n this.assignments.forEach((a) => {\r\n if (a.IsMissing) {\r\n // Swap the Due with DueDate and format\r\n a.Due = moment(a.DueDate).format('MM/DD/YY').toString();\r\n }\r\n });\r\n // Get the assignment Counts\r\n if (this.assignments.length > 0) {\r\n this.missingCount = this.assignments[0].MissingCount;\r\n this.dueTodayCount = this.assignments[0].DueTodayCount;\r\n this.dueTomorrowCount = this.assignments[0].DueTomorrowCount;\r\n }\r\n });\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n cardClick() {\r\n if (!this.card.disabled) {\r\n this.dialog.open(AssignmentsCardModalComponent, {\r\n minWidth: '45vw',\r\n data: { assignments: this.assignments },\r\n disableClose: true,\r\n autoFocus: false\r\n });\r\n }\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Current Grades\r\n
\r\n \r\n {{currentTerm | translate}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n No current grades available\r\n
\r\n
0\">\r\n \r\n\r\n \r\n \r\n Grade\r\n \r\n \r\n
\r\n Standards\r\n
\r\n
\r\n {{gradeDisplayString(gradeRecord)}}
\r\n
\r\n
\r\n\r\n \r\n \r\n Course Name\r\n \r\n {{gradeRecord.CourseName}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n 0\" style=\"height: 20px\"\r\n src=\"./assets/images/warning_icon.png\" />\r\n \r\n \r\n\r\n \r\n \r\n YTD
Trdy\r\n
\r\n \r\n
0\">{{gradeRecord.TardyYTD}}
\r\n
\r\n
\r\n\r\n \r\n \r\n YTD
Abs\r\n
\r\n \r\n
0\">{{gradeRecord.AbsentYTD}}
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n Grade Status\r\n
\r\n
\r\n {{gradeRecord.GradeStatus | translate}}\r\n
\r\n
\r\n
\r\n Assignments\r\n
\r\n \r\n
0\"\r\n style=\"text-align: center;;\">\r\n {{gradeRecord.MissingAssignmentsCount}} Missing\r\n
in Last 30 Days
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n \r\n \r\n
","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { CardStudentGrades } from './card-student-grades';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { AssignmentService } from '../../../../assignment/assignment.service';\r\nimport { CourseSchedule } from '../../../../../shared-components/student/course-schedule.model';\r\nimport { Student360Service } from '../../../../student360.service';\r\nimport { Classroom360Service } from '../../../../../classroom360/classroom360.service';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { TylerMatTableDataSource } from '../../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../../shared-components/angular-material/mat-animations';\r\nimport { LoginSettings } from '../../../../../shared-modules/login/LoginSetting.model';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-current-grades-card',\r\n templateUrl: './current-grades-card.component.html',\r\n styleUrls: ['./current-grades-card.component.css'],\r\n // Animation for when the detail row is expanded or collapsed\r\n animations: [detailExpand]\r\n})\r\n\r\nexport class CurrentGradesCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n studentGrades: CardStudentGrades[] = [];\r\n currentTerm: string;\r\n gradingPeriodId = 0;\r\n loginSettings: LoginSettings;\r\n selectedCourse = new CourseSchedule();\r\n parentPortalSubscription: Subscription;\r\n staffAssignedPortalsSubscription: Subscription;\r\n showAssignmentLink = false;\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n displayedColumns: string[] = ['grade', 'courseName', 'warning', 'tardy', 'absent', 'more'];\r\n colsLength = 4;\r\n\r\n constructor(private yearService: YearService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private studentSummaryService: StudentSummaryService,\r\n private loginService: LoginService,\r\n private assignmentService: AssignmentService,\r\n private parentPortalService: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private router: Router\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getCurrentGrades();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n this.getPortalInfo();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n viewAllGradesClick() {\r\n this.router.navigateByUrl('/student360/reportCardGrades');\r\n }\r\n\r\n assignmentClick(studentGrades: CardStudentGrades) {\r\n this.assignmentService.selectedGP = studentGrades.TermName;\r\n this.assignmentService.selectedSectionId = studentGrades.Section_ID;\r\n this.assignmentService.selectedCoursebyCard = studentGrades.CourseName;\r\n this.assignmentService.filterbyCard = true;\r\n this.selectedCourse.Course = studentGrades.CourseName;\r\n this.selectedCourse.Id = studentGrades.Course_ID;\r\n this.assignmentService.selectedCourse = this.selectedCourse;\r\n this.assignmentService.selectedCourseSection = studentGrades.CourseNumber;\r\n this.router.navigateByUrl('/student360/assignments');\r\n }\r\n\r\n standardsClick(gradeRecord: CardStudentGrades) {\r\n this.studentService.selectionIndex = 1;\r\n this.studentService.StandradTabByCurrentGrade = true;\r\n // V9 ONE-6156\r\n this.studentService.selectedCardCourse = gradeRecord;\r\n this.router.navigateByUrl('/student360/reportCardGrades');\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n getCurrentGrades() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentGrades(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.gradingPeriodId, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n if (response.body.length > 0) {\r\n this.currentTerm = response.body[0].TermName;\r\n } else {\r\n this.currentTerm = 'No Grading Period';\r\n }\r\n this.studentGrades = response.body;\r\n this.angularMatData.data = this.studentGrades;\r\n }\r\n });\r\n }\r\n\r\n getPortalInfo() {\r\n if (this.userService.userType == 1) {\r\n this.staffAssignedPortalsSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(portal => {\r\n if (portal.filter(x => x.PortalName == 'Assignments' && x.Disabled == false) != null\r\n && portal.filter(x => x.PortalName == 'Assignments' && x.Disabled == false).length > 0) {\r\n this.showAssignmentLink = true;\r\n }\r\n });\r\n } else {\r\n this.parentPortalSubscription = this.parentPortalService.observableParentAssignedPortalsStream$.subscribe(portal => {\r\n if (portal.filter(x => x.PortalName == 'Assignments' && x.Disabled == false) != null\r\n && portal.filter(x => x.PortalName == 'Assignments' && x.Disabled == false).length > 0) {\r\n this.showAssignmentLink = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n gradeDisplayString(gradeRecord: any) {\r\n // A Score of -1 means there is no Score available\r\n // A Grade of '' means there is no Grade available\r\n // If there is only a grade\r\n if (gradeRecord.Score == -1 && gradeRecord.Grade != '') {\r\n return gradeRecord.Grade;\r\n }\r\n // If there is only a Score\r\n if (gradeRecord.Score != -1 && gradeRecord.Grade == '') {\r\n return gradeRecord.Score + '%';\r\n }\r\n // If there is a score and a grade\r\n if (gradeRecord.Score != -1 && gradeRecord.Grade != '') {\r\n return gradeRecord.Score + '% ' + '(' + gradeRecord.Grade + ')';\r\n }\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n // These methods are used to allow calls to the TylerMatTableDataSource methods from the html\r\n toggleExpanded(row: any) {\r\n // Toggles row between expanded and collapsed\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n // Return true if expanded and false if collapsed\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // Expand or collapse all rows\r\n // true => expand all false => collapse all\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Links\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n No district links available.\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {Student360Service} from '../../../../student360.service';\r\nimport {Portal} from '../../../../../shared-components/portal.model';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport * as _ from 'lodash';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {Subscription} from 'rxjs';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-district-defined-links-card',\r\n templateUrl: './district-defined-links-card.component.html',\r\n styleUrls: ['./district-defined-links-card.component.css']\r\n})\r\n\r\nexport class DistrictDefinedLinksCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n linkTiles: Portal[] = [];\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n userIsStaff = false;\r\n\r\n constructor(private student360Service: Student360Service, private userService: UserService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n this.student360Service.observableParentAssignedPortalsStream$.subscribe(response => {\r\n this.linkTiles = response.filter(p => p.IsMyLinksTile == true);\r\n });\r\n // A staff person should not see this card\r\n this.userIsStaff = this.userService.userType == 1;\r\n // Sometimes the view will be re-rendered without the portals changing\r\n if (this.linkTiles.length <= 0) {\r\n if (this.student360Service.parentAssignedPortals) {\r\n this.linkTiles = _.cloneDeep(this.student360Service.parentAssignedPortals.filter(p => p.IsMyLinksTile == true));\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n hasImage(link: Portal) {\r\n if (link.TileImageFile) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n linkTileClick(link: Portal) {\r\n if (link.OpenInNewWindow) {\r\n window.open(link.PortalDescription, '_blank');\r\n } else {\r\n window.open(link.PortalDescription);\r\n }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n Fees & Billing\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n Code\r\n {{entry.Code}} \r\n Description\r\n {{entry.Description}} \r\n Balance\r\n \r\n {{numberWithCommas(entry.Balance.toFixed(2))}}\r\n
\r\n
Total 
\r\n
{{totalString | translate}}
\r\n
\r\n
{{entry.DueorCredit | translate}} {{creditOrDue | translate}}
\r\n
{{totalString}}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import {Component, Inject, OnInit} from '@angular/core';\r\nimport {CardAssignment} from '../../assignments-card/card-assignment';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Router, NavigationExtras} from '@angular/router';\r\nimport {Card} from '../../../../card-container/card/card';\r\nimport {CardFeesAndBilling} from '../card-fees-and-billing';\r\nimport {LoginService} from '../../../../../../shared-modules/login/login.service';\r\nimport {UserService} from '../../../../../../shared-components/user/user.service';\r\nimport {OnlinePaymentConfiguration} from '../../../../../online-payment/models/online-payment-config.model';\r\n\r\n@Component({\r\n selector: 'app-fees-and-billing-card-modal',\r\n templateUrl: './fees-and-billing-card-modal.component.html',\r\n styleUrls: ['./fees-and-billing-card-modal.component.css']\r\n})\r\nexport class FeesAndBillingCardModalComponent implements OnInit {\r\n card: Card;\r\n totalString = '';\r\n feesLedger: CardFeesAndBilling[] = [];\r\n displayedColumns: string[] = ['Code', 'Description', 'Balance', 'CreditOrDue'];\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n userType: number;\r\n showPay = false;\r\n creditOrDue: string;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n private router: Router,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.userType = this.userService.userType;\r\n this.showPay = this.data.showPay;\r\n this.feesLedger = this.data.feesLedger;\r\n this.totalString = this.data.totalString;\r\n this.creditOrDue = this.feesLedger[0].TotalBalanceCreditOrDue;\r\n }\r\n\r\n viewDetailsClick() {\r\n this.router.navigateByUrl('/student360/feesAndBilling');\r\n this.dialogRef.close();\r\n }\r\n\r\n checkIfMissing(assignment: CardAssignment) {\r\n // If missing return the isMissing class\r\n if (assignment.IsMissing) {\r\n return 'isMissing';\r\n }\r\n }\r\n\r\n numberWithCommas(x) {\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n checkTotalString(totalString: string) {\r\n if (this.creditOrDue.includes('Due')) {\r\n return 'redText';\r\n }\r\n if (totalString == 'No fees owed for this student.') {\r\n return 'smallSummaryText';\r\n }\r\n if (this.creditOrDue.includes('Credit')) {\r\n return 'blackText';\r\n }\r\n }\r\n\r\n checkIfBalance() {\r\n if (this.totalString == 'No fees owed for this student.') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n payClick() {\r\n const navigationExtras: NavigationExtras = {\r\n // The view to Fee & Billing Accounts\r\n queryParams: {\r\n 'selectedView': 1\r\n }\r\n };\r\n this.router.navigate(['/student360/onlinePayment'], navigationExtras);\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n Fees & Billing\r\n
\r\n
\r\n
\r\n {{totalString | translate}}{{creditOrDue | translate}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage | translate}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n Fees & Billing\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
Code {{entry.Code}} Description {{entry.Description}} Balance {{numberWithCommas(entry.Balance.toFixed(2))}}\r\n
\r\n
Total
\r\n
{{totalString | translate}}
\r\n
\r\n
{{entry.DueorCredit | translate}} {{creditOrDue | translate}}
\r\n
{{totalString | translate}}
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage | translate}}\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {Router, NavigationExtras} from '@angular/router';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {LoginService} from '../../../../../shared-modules/login/login.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport * as _ from 'lodash';\r\nimport {CardFeesAndBilling} from './card-fees-and-billing';\r\nimport {FeesAndBillingCardModalComponent} from './fees-and-billing-card-modal/fees-and-billing-card-modal.component';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {OnlinePaymentConfiguration} from '../../../../online-payment/models/online-payment-config.model';\r\nimport {Year} from '../../../../../shared-components/year/year.model';\r\nimport { Student360Service } from '../../../../student360.service';\r\nimport { Portal } from '../../../../../shared-components/portal.model';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-fees-billing-card',\r\n templateUrl: './fees-billing-card.component.html',\r\n styleUrls: ['./fees-billing-card.component.css']\r\n})\r\n\r\nexport class FeesBillingCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n totalString = '';\r\n creditOrDue = '';\r\n feesLedger: CardFeesAndBilling[] = [];\r\n displayedColumns: string[] = ['Code', 'Description', 'Balance', 'CreditOrDue'];\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n userType: number;\r\n parentPortalShowOnlinePayment: boolean;\r\n student360Year: Year;\r\n StudentFinesAndFeesOnlinePayment: boolean;\r\n onlinePaymentConfigurationSubscription: Subscription;\r\n showPay = false;\r\n parentAssignedPortalsSubscription: Subscription;\r\n portals: Portal[] = [];\r\n\r\n constructor(private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private studentService: StudentService,\r\n private studentSummaryService: StudentSummaryService,\r\n private parentPortalService: Student360Service,\r\n private router: Router) {\r\n this.studentService.observableOnlinePaymentConfigurationStream$.subscribe(onlinePaymentConfiguration => {\r\n if (onlinePaymentConfiguration) {\r\n this.onlinePaymentConfiguration = onlinePaymentConfiguration;\r\n }\r\n });\r\n\r\n this.parentAssignedPortalsSubscription = this.parentPortalService.observableParentAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (portals.length > 0) {\r\n this.portals = portals.filter(portal => !portal.Deleted);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n this.onlinePaymentConfiguration = this.studentService.onlinePaymentConfiguration;\r\n this.parentPortalShowOnlinePayment = this.loginService.LoginSettings.ParentPortalShowOnlinePayment;\r\n this.userType = this.userService.userType;\r\n this.student360Year = this.yearService.student360Year;\r\n if (this.userType == 2 && this.portals.filter(o => o.PortalName == 'Online Payment' && o.Disabled == false && o.ShowAsMenu == true && o.Deleted == false).length > 0) {\r\n this.showPay = true;\r\n }\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.gettFeesBalance();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n gettFeesBalance() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardFeesAndBilling(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n this.feesLedger = _.cloneDeep(response.body);\r\n // this.mockData();\r\n // Get the total string\r\n if (this.feesLedger.length > 0) {\r\n if (this.feesLedger[0].Code == 'No Balance') {\r\n this.totalString = marker('No fees owed for this student.').toString();\r\n } else {\r\n this.creditOrDue = this.feesLedger[0].TotalBalanceCreditOrDue;\r\n this.totalString = '$' + this.numberWithCommas(this.feesLedger[0].TotalBalance.toFixed(2));\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n numberWithCommas(x) {\r\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n }\r\n\r\n checkTotalString(totalString: string) {\r\n if (this.creditOrDue.includes('Due')) {\r\n return 'redText';\r\n }\r\n if (totalString == 'No fees owed for this student.') {\r\n return 'smallSummaryText';\r\n }\r\n if (this.creditOrDue.includes('Credit')) {\r\n return 'blackText';\r\n }\r\n }\r\n\r\n checkIfBalance() {\r\n if (this.totalString == 'No fees owed for this student.') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n mockData() {\r\n // Clear the array to make room for some awesome mock data!\r\n this.feesLedger.length = 0;\r\n const fb1 = {} as CardFeesAndBilling;\r\n fb1.Code = 'ARTS';\r\n fb1.Description = 'Art Supplies';\r\n fb1.Balance = 3000;\r\n // DueorCredit can be Due, Credit or NB (no balance)\r\n fb1.DueorCredit = 'Due';\r\n fb1.TotalBalance = 70.70;\r\n fb1.TotalBalanceCreditOrDue = 'Due';\r\n this.feesLedger.push(fb1);\r\n const fb2 = {} as CardFeesAndBilling;\r\n fb2.Code = 'LIBR';\r\n fb2.Description = 'Library';\r\n fb2.Balance = 4.30;\r\n // DueorCredit can be Due, Credit or NB (no balance)\r\n fb2.DueorCredit = 'Credit';\r\n fb2.TotalBalance = 70.70;\r\n fb2.TotalBalanceCreditOrDue = 'Due';\r\n this.feesLedger.push(fb2);\r\n const fb3 = {} as CardFeesAndBilling;\r\n fb3.Code = 'TEXT';\r\n fb3.Description = 'Textbook';\r\n fb3.Balance = 50.00;\r\n // DueorCredit can be Due, Credit or NB (no balance)\r\n fb3.DueorCredit = 'Due';\r\n fb3.TotalBalance = 70.70;\r\n fb3.TotalBalanceCreditOrDue = 'Due';\r\n this.feesLedger.push(fb3);\r\n }\r\n\r\n viewDetailsClick() {\r\n if (!this.card.disabled) {\r\n this.router.navigateByUrl('/student360/feesAndBilling');\r\n }\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n cardClick() {\r\n if (!this.card.disabled) {\r\n this.dialog.open(FeesAndBillingCardModalComponent, {\r\n minWidth: '40vw',\r\n maxHeight: '80vh',\r\n data: {\r\n feesLedger: this.feesLedger, totalString: this.totalString,\r\n showPay: this.showPay,\r\n },\r\n disableClose: true,\r\n autoFocus: false\r\n });\r\n }\r\n }\r\n\r\n payClick() {\r\n const navigationExtras: NavigationExtras = {\r\n // The view to Fee & Billing Accounts\r\n queryParams: {\r\n 'selectedView': 1\r\n }\r\n };\r\n this.router.navigate(['/student360/onlinePayment'], navigationExtras);\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Meal Service Balance\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n 0\">\r\n
\r\n
Rollover Balance
\r\n
{{rolloverBalance | number: '1.2'}}
\r\n
\r\n \r\n
\r\n \r\n
\r\n
Deposits
\r\n
{{deposits | number: '1.2'}}
\r\n
\r\n \r\n
\r\n \r\n
\r\n
Charges
\r\n
{{charges | number: '1.2'}}
\r\n \r\n
\r\n
\r\n \r\n
\r\n
Balance
\r\n
\r\n
\r\n {{absBalance | currency}}\r\n
\r\n
\r\n Overdrawn\r\n
\r\n
\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, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Router, NavigationExtras} from '@angular/router';\r\nimport {CardMealService} from '../card-mealService';\r\nimport {LoginService} from '../../../../../../shared-modules/login/login.service';\r\nimport {UserService} from '../../../../../../shared-components/user/user.service';\r\n@Component({\r\n selector: 'app-meal-service-card-modal',\r\n templateUrl: './meal-service-card-modal.component.html',\r\n styleUrls: ['./meal-service-card-modal.component.css']\r\n})\r\nexport class MealServiceCardModalComponent implements OnInit {\r\n mealLedger: CardMealService;\r\n rolloverBalance = 0;\r\n deposits = 0;\r\n balance = 0;\r\n absBalance = 0; // Absolute value\r\n charges = 0;\r\n userType: number;\r\n showPay = false;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n private router: Router,\r\n private dialogRef: MatDialogRef,\r\n private userService: UserService,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.mealLedger = this.data.mealLedger;\r\n this.balance = this.mealLedger.Balance;\r\n this.absBalance = Math.abs(this.mealLedger.Balance);\r\n this.rolloverBalance = this.mealLedger.Rollover_Balance;\r\n this.deposits = this.mealLedger.Deposits;\r\n this.charges = this.mealLedger.Charges;\r\n this.userType = this.userService.userType;\r\n this.showPay = this.data.showPay;\r\n }\r\n\r\n viewDetailsClick() {\r\n this.closeClick();\r\n this.router.navigateByUrl('/student360/mealService');\r\n }\r\n\r\n payClick() {\r\n this.closeClick();\r\n const navigationExtras: NavigationExtras = {\r\n // The view to Meal Accounts\r\n queryParams: {\r\n 'selectedView': 2\r\n }\r\n };\r\n this.router.navigate(['/student360/onlinePayment'], navigationExtras);\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n checkIfNegative(balance: number) {\r\n // If negative or zero return class\r\n if (balance <= 0) {\r\n return 'isNegative';\r\n }\r\n }\r\n}\r\n","\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n Meal Service Balance\r\n
\r\n
\r\n
\r\n {{absBalance | currency}}\r\n
\r\n
\r\n Overdrawn\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n Meal Service Balance\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n 0\">\r\n
\r\n
Rollover Balance
\r\n
{{rolloverBalance | number: '1.2'}}
\r\n
\r\n \r\n
\r\n \r\n
\r\n
Deposits
\r\n
{{deposits | number: '1.2'}}
\r\n
\r\n \r\n
\r\n \r\n
\r\n
Charges
\r\n
{{charges | number: '1.2'}}
\r\n \r\n
\r\n
\r\n \r\n
\r\n
Balance
\r\n
\r\n
\r\n {{absBalance | currency}}\r\n
\r\n
\r\n Overdrawn\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {Router, NavigationExtras} from '@angular/router';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {CardMealService} from './card-mealService';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {MealServiceCardModalComponent} from './meal-service-card-modal/meal-service-card-modal.component';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {LoginService} from '../../../../../shared-modules/login/login.service';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {OnlinePaymentConfiguration} from '../../../../online-payment/models/online-payment-config.model';\r\nimport {Year} from '../../../../../shared-components/year/year.model';\r\nimport { Portal } from '../../../../../shared-components/portal.model';\r\nimport { Student360Service } from '../../../../student360.service';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-meal-service-card',\r\n templateUrl: './meal-service-card.component.html',\r\n styleUrls: ['./meal-service-card.component.css']\r\n})\r\n\r\nexport class MealServiceCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n balance = 0;\r\n absBalance = 0; // Absolute value\r\n rolloverBalance = 0;\r\n deposits = 0;\r\n charges = 0;\r\n mealLedger: CardMealService;\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n userType: number;\r\n parentPortalShowOnlinePayment: boolean;\r\n student360Year: Year;\r\n showPay = false;\r\n parentAssignedPortalsSubscription: Subscription;\r\n portals: Portal[] = [];\r\n\r\n constructor(private userService: UserService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private studentSummaryService: StudentSummaryService,\r\n private parentPortalService: Student360Service,\r\n private router: Router) {\r\n this.studentService.observableOnlinePaymentConfigurationStream$.subscribe(onlinePaymentConfiguration => {\r\n if (onlinePaymentConfiguration) {\r\n this.onlinePaymentConfiguration = onlinePaymentConfiguration;\r\n }\r\n });\r\n\r\n this.parentAssignedPortalsSubscription = this.parentPortalService.observableParentAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (portals.length > 0) {\r\n this.portals = portals.filter(portal => !portal.Deleted);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n this.onlinePaymentConfiguration = this.studentService.onlinePaymentConfiguration;\r\n this.parentPortalShowOnlinePayment = this.loginService.LoginSettings.ParentPortalShowOnlinePayment;\r\n this.userType = this.userService.userType;\r\n this.student360Year = this.yearService.student360Year;\r\n if (this.userType == 2 && this.portals.filter(o => o.PortalName == 'Online Payment' && o.Disabled == false && o.ShowAsMenu == true && o.Deleted == false).length > 0) {\r\n this.showPay = true;\r\n }\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getMealBalance();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getMealBalance() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardMealService(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n this.mealLedger = response.body[0];\r\n this.balance = this.mealLedger.Balance;\r\n this.absBalance = Math.abs(this.mealLedger.Balance);\r\n this.rolloverBalance = this.mealLedger.Rollover_Balance;\r\n this.deposits = this.mealLedger.Deposits;\r\n this.charges = this.mealLedger.Charges;\r\n }\r\n });\r\n }\r\n\r\n viewDetailsClick() {\r\n this.router.navigateByUrl('/student360/mealService');\r\n }\r\n\r\n payClick() {\r\n const navigationExtras: NavigationExtras = {\r\n // The view to Meal Accounts\r\n queryParams: {\r\n 'selectedView': 2\r\n }\r\n };\r\n this.router.navigate(['/student360/onlinePayment'], navigationExtras);\r\n }\r\n\r\n checkIfNegative(balance: number) {\r\n // If negative or zero return class\r\n if (balance <= 0) {\r\n return 'isNegative';\r\n }\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n cardClick() {\r\n if (!this.card.disabled) {\r\n this.dialog.open(MealServiceCardModalComponent, {\r\n minWidth: '40vw',\r\n data: {mealLedger: this.mealLedger, showPay: this.showPay},\r\n disableClose: true,\r\n autoFocus: false\r\n });\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Student Schedule\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {{tab1Title() | translate}}\r\n
\r\n \r\n {{tab1Date()}}\r\n
\r\n
\r\n \r\n \r\n
\r\n {{noSchoolMessage | translate}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
{{c.Meets}}
\r\n
{{c.LunchSchedule}}
\r\n
\r\n
\r\n
{{c.AttendanceType}}
\r\n
\r\n
\r\n
{{c.StartTime}} - {{c.EndTime}}
\r\n \r\n
{{c.LunchStartTime != '00:00:00' ? c.LunchStartTime : ''}} {{c.LunchEndTime != '00:00:00' ? '- ' + c.LunchEndTime : ''}}
\r\n
\r\n
\r\n
{{c.CourseName}}
\r\n {{c.Room.length > 0 ? c.TeacherLastName.length > 0 ? c.Room + ' -' : c.Room : ''}} {{c.TeacherLastName}} {{c.TeacherFirstName | slice: 0:1}}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {{tab2Title() | translate}}\r\n
\r\n
\r\n {{tab2Date()}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
{{c.Meets}}
\r\n {{c.LunchSchedule}}
\r\n
\r\n
\r\n
{{c.StartTime}} - {{c.EndTime}}
\r\n
\r\n
{{c.LunchStartTime != '00:00:00' ? c.LunchStartTime : ''}} {{c.LunchEndTime != '00:00:00' ? '- ' + c.LunchEndTime : ''}}
\r\n
\r\n
\r\n
{{c.CourseName}}
\r\n {{ c.Room.length > 0 ? c.TeacherLastName.length > 0 ? c.Room + ' -' : c.Room : ''}} {{ c.TeacherLastName}} {{c.TeacherFirstName | slice: 0:1}}
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n No Schedule\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {{scheduleInfoMessage | translate}}\r\n
\r\n \r\n
\r\n
\r\n {{card.disabledMessage}}\r\n
\r\n
\r\n \r\n
\r\n","import { Component, Input, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { marker } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport * as moment from 'moment';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { interval } from 'rxjs';\r\nimport { SharedService } from '../../../../../shared-components/shared.service';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { CardStudentSchedule } from './card-student-schedule';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-student-schedule-card',\r\n templateUrl: './student-schedule-card.component.html',\r\n styleUrls: ['./student-schedule-card.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class StudentScheduleCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n schoolToday = true;\r\n noSchoolMessage = '';\r\n currentDate = moment();\r\n nextSchoolDayDate = moment();\r\n studentSchedule: CardStudentSchedule[] = [];\r\n tab1Schedule: CardStudentSchedule[] = [];\r\n tab2Schedule: CardStudentSchedule[] = [];\r\n scheduleInfoMessage = '';\r\n DisplayClassMeetsOnStudentScheduleCard: boolean;\r\n validSchoolNextDay = true;\r\n calendarUseAttendanceTypes = false;\r\n\r\n constructor(\r\n private router: Router,\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private sharedService: SharedService,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService) {\r\n }\r\n\r\n ngOnInit() {\r\n this.DisplayClassMeetsOnStudentScheduleCard = this.loginService.LoginSettings.DisplayClassMeetsOnStudentScheduleCard;\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getCalendarUseAttendanceTypes();\r\n this.getStudentSchedule();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n viewTermScheduleClick() {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n selectedView: 1 // 1 = Today's Schedule\r\n }\r\n };\r\n this.router.navigate(['/student360/schedule'], navigationExtras);\r\n }\r\n\r\n isDisabled() {\r\n if (this.card.disabled) {\r\n return 'disabledColor';\r\n } else {\r\n return 'enabledColor';\r\n }\r\n }\r\n\r\n getCalendarUseAttendanceTypes() {\r\n this.sharedService.getCalendarUseAttendanceTypes(0, this.yearService.student360Year.Id, this.studentService.selectedStudent.Id).subscribe(result => {\r\n this.calendarUseAttendanceTypes = result;\r\n });\r\n }\r\n\r\n getStudentSchedule() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentSchedule(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe(response => {\r\n // console.log(_.cloneDeep(response.body));\r\n if (response.ok) {\r\n this.studentSchedule = response.body;\r\n // Format Dates\r\n for (let i = 0; i < this.studentSchedule.length; i++) {\r\n this.studentSchedule[i].StartTime = moment(this.studentSchedule[i].StartTime, 'HH:mm:ss').format('h:mm');\r\n this.studentSchedule[i].EndTime = moment(this.studentSchedule[i].EndTime, 'HH:mm:ss').format('h:mm A');\r\n if (this.studentSchedule[i].LunchStartTime != '00:00:00') {\r\n this.studentSchedule[i].LunchStartTime = moment(this.studentSchedule[i].LunchStartTime, 'HH:mm:ss').format('h:mm');\r\n }\r\n if (this.studentSchedule[i].LunchEndTime != '00:00:00') {\r\n this.studentSchedule[i].LunchEndTime = moment(this.studentSchedule[i].LunchEndTime, 'HH:mm:ss').format('h:mm A');\r\n }\r\n }\r\n // Filter out today's classes\r\n setTimeout(() => {\r\n this.tab1Schedule = this.studentSchedule.filter(c => c.MeetsToday == true);\r\n }, 500);\r\n // Filter out tomorrows classes\r\n this.tab2Schedule = this.studentSchedule.filter(c => c.MeetsNextSchoolDay == true);\r\n if (this.nextSchoolDayDate.isValid() == false) {\r\n this.validSchoolNextDay = false;\r\n }\r\n }\r\n });\r\n }\r\n\r\n showTabs() {\r\n // If no records are returned - false\r\n // If studentSchedule length = 1 and studentSchedule[0].CourseName = No school today || No School Next Day - false\r\n if (this.studentSchedule.length == 0) {\r\n this.scheduleInfoMessage = marker('No Schedule Information').toString();\r\n return false;\r\n } else if (this.studentSchedule.length == 1 && (this.studentSchedule[0].CourseName == 'No School Today' || this.studentSchedule[0].CourseName == 'No Next School Day')) {\r\n this.scheduleInfoMessage = 'No Schedule Information';\r\n return false;\r\n } else if (this.studentSchedule.length == 2 && (this.studentSchedule[0].CourseName == 'No School Today' && this.studentSchedule[1].CourseName == 'No Next School Day')) {\r\n this.scheduleInfoMessage = 'No Schedule Information';\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n tab1Title() {\r\n if (this.tab1Schedule[0] && (this.tab1Schedule[0].TodayAfterLastDayOfSchool || this.tab2Schedule[0].NoSchoolNextSchoolDate) && this.tab1Schedule[0].MeetsToday) {\r\n return marker('Last School Day').toString();\r\n }\r\n else if (this.tab1Schedule[0] && this.tab1Schedule[0].TodayBeforeFirstDayOfSchool && this.tab1Schedule[0].MeetsToday) {\r\n return marker('First Day Of School').toString();\r\n }\r\n else if (this.tab1Schedule[0] && this.tab2Schedule[0] && this.tab1Schedule[0].MeetsToday && this.tab2Schedule[0].NoSchoolNextSchoolDate) {\r\n return marker('Last School Day').toString();\r\n }\r\n else {\r\n return marker('Today').toString();\r\n }\r\n }\r\n\r\n tab1Date() {\r\n if (this.tab1Schedule[0]) {\r\n if ((this.tab1Schedule[0].TodayAfterLastDayOfSchool || this.tab1Schedule[0].TodayBeforeFirstDayOfSchool) && this.tab1Schedule[0].MeetsToday) {\r\n return moment(this.tab1Schedule[0].TodaysDate, 'MM/DD/YYYY hh:mm:ss A').format('dddd MM/DD');\r\n }\r\n else {\r\n if (!this.tab1Schedule[0].TodayAfterLastDayOfSchool && !this.tab1Schedule[0].TodayBeforeFirstDayOfSchool) {\r\n return moment(this.tab1Schedule[0].TodaysDate, 'MM/DD/YYYY hh:mm:ss A').format('dddd MM/DD');\r\n }\r\n else {\r\n return this.currentDate.format('dddd MM/DD');\r\n }\r\n }\r\n }\r\n else {\r\n return this.currentDate.format('dddd MM/DD');\r\n }\r\n }\r\n\r\n showTab2Schedule() {\r\n if (this.tab2Schedule[0] && this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].MeetsNextSchoolDay) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n tab2Date() {\r\n if (this.tab2Schedule[0]) {\r\n if (this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].NoSchoolNextSchoolDate == false) {\r\n return moment(this.currentDate).add(1, 'day').format('dddd MM/DD');\r\n }\r\n else if (this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].TodayAfterLastDayOfSchool) {\r\n return '';\r\n }\r\n else if (this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].NoSchoolNextSchoolDate) {\r\n return moment(this.tab2Schedule[0].TodaysDate, 'MM/DD/YYYY hh:mm:ss A').format('dddd MM/DD');\r\n }\r\n else {\r\n return moment(this.tab2Schedule[0].NextSchoolDate, 'MM/DD/YYYY hh:mm:ss A').format('dddd MM/DD');\r\n }\r\n }\r\n }\r\n\r\n tab2Title() {\r\n if (this.tab2Schedule[0] && this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].Withdrawn) {\r\n return marker('Withdrawn').toString();\r\n }\r\n else if (this.tab2Schedule[0] && this.tab2Schedule[0].CourseName == 'No Next School Day' && this.tab2Schedule[0].MeetsNextSchoolDay) {\r\n return marker('End Of School Year').toString();\r\n }\r\n else {\r\n return marker('Next School Day').toString();\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Upcoming Events\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
0)\" style=\"display: flex;flex-direction: column;justify-content: center;align-items: center;padding: 15px;\">\r\n No upcoming events.\r\n
\r\n
0\">\r\n
\r\n
\r\n {{eMonth.month | translate}} {{eMonth.year}}\r\n
\r\n
\r\n
\r\n {{getDayString(event)}}\r\n
\r\n
\r\n {{getWeekDayString(event) | translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{event.EventTitle}}\r\n
\r\n
\r\n {{getDateRangeString(event)}}\r\n
\r\n
\r\n {{getTimeLocationString(event)}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {LoginService} from '../../../../../shared-modules/login/login.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {NavigationExtras, Router} from '@angular/router';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {CardUpcomingEvents} from './card-upcoming-events';\r\nimport * as moment from 'moment';\r\nimport * as _ from 'lodash';\r\nimport {AutoUnsubscribe} from 'ngx-auto-unsubscribe';\r\nimport {interval} from 'rxjs';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n\r\n@Component({\r\n selector: 'app-upcoming-events-card',\r\n templateUrl: './upcoming-events-card.component.html',\r\n styleUrls: ['./upcoming-events-card.component.css']\r\n})\r\n\r\nexport class UpcomingEventsCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n card: Card;\r\n eventsByMonth: EventMonth[] = [];\r\n upcomingEvents: CardUpcomingEvents[] = [];\r\n\r\n constructor(private userService: UserService, private loginService: LoginService, private dialog: MatDialog, private yearService: YearService, private studentService: StudentService, private studentSummaryService: StudentSummaryService, private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getUpcomingEvents();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getUpcomingEvents() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardUpcomingEvents(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.userService.userType).subscribe(response => {\r\n if (response.ok) {\r\n this.upcomingEvents = _.cloneDeep(response.body);\r\n // Format Dates and times\r\n for (let i = 0; i < this.upcomingEvents.length; i++) {\r\n if (this.upcomingEvents[i].StartTime !== '00:00:00') {\r\n this.upcomingEvents[i].StartTime = moment(this.upcomingEvents[i].StartTime, 'HH:mm:ss').format('h:mm A');\r\n } else {\r\n this.upcomingEvents[i].StartTime = '';\r\n }\r\n if (this.upcomingEvents[i].EndTime !== '00:00:00') {\r\n this.upcomingEvents[i].EndTime = moment(this.upcomingEvents[i].EndTime, 'HH:mm:ss').format('h:mm A');\r\n } else {\r\n this.upcomingEvents[i].EndTime = '';\r\n }\r\n this.upcomingEvents[i].EventStartDate = moment(this.upcomingEvents[i].EventStartDate, 'MM/DD/YYYY HH:mm:ss A').format('MM/DD/YYYY');\r\n this.upcomingEvents[i].EventEndDate = moment(this.upcomingEvents[i].EventEndDate, 'MM/DD/YYYY HH:mm:ss A').format('MM/DD/YYYY');\r\n }\r\n // Get a list of months\r\n for (let i = 0; i < this.upcomingEvents.length; i++) {\r\n const eMonth = moment(this.upcomingEvents[i].EventStartDate, 'MM/DD/YYYY').format('MMMM');\r\n const eYear = moment(this.upcomingEvents[i].EventStartDate, 'MM/DD/YYYY').format('YYYY');\r\n const event = [];\r\n event.push((this.upcomingEvents[i]));\r\n const monthEvent: EventMonth = {\r\n month: eMonth,\r\n year: eYear,\r\n events: event\r\n };\r\n const mth = this.eventsByMonth.find(e => e.year == monthEvent.year && e.month == monthEvent.month);\r\n if (mth) {\r\n // Add the event to that month\r\n mth.events.push(monthEvent.events[0]);\r\n } else {\r\n this.eventsByMonth.push(monthEvent);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n viewCalendarClick() {\r\n const navigationExtras: NavigationExtras = {\r\n // needs to be lower case view, day, week, month\r\n queryParams: {\r\n 'selectedView': 'month'\r\n }\r\n };\r\n this.router.navigate(['/student360/calendar'], navigationExtras);\r\n }\r\n\r\n getDayString(event: CardUpcomingEvents) {\r\n const multiDayEvent = !moment(event.EventStartDate, 'MM/DD/YYYY').isSame(moment(event.EventEndDate, 'MM/DD/YYYY'), 'day');\r\n if (multiDayEvent) {\r\n // Check to see if the multi day event contains today's date\r\n if (moment().isBetween(event.EventStartDate, event.EventEndDate, 'day', '[]')) {\r\n return moment(new Date().toDateString(), 'ddd MMM DD YYYY hh:mm:ss').format('DD');\r\n } else {\r\n return moment(event.EventStartDate, 'MM/DD/YYYY').format('DD');\r\n }\r\n } else {\r\n return moment(event.EventStartDate, 'MM/DD/YYYY').format('DD');\r\n }\r\n }\r\n\r\n getWeekDayString(event: CardUpcomingEvents) {\r\n const multiDayEvent = !moment(event.EventStartDate, 'MM/DD/YYYY').isSame(moment(event.EventEndDate, 'MM/DD/YYYY'), 'day');\r\n if (multiDayEvent) {\r\n return moment(new Date().toDateString(), 'ddd MMM DD YYYY hh:mm:ss').format('dddd');\r\n } else {\r\n return moment(event.EventStartDate, 'MM/DD/YYYY').format('dddd');\r\n }\r\n }\r\n\r\n multiDayEvent(event: CardUpcomingEvents) {\r\n // check if the event is a multi day event\r\n if (event.EventStartDate == event.EventEndDate) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n getDateRangeString(event: CardUpcomingEvents) {\r\n const startDate = moment(event.EventStartDate, 'MM/DD/YYYY').format('MMM DD');\r\n const endDate = moment(event.EventEndDate, 'MM/DD/YYYY').format('MMM DD');\r\n return startDate + ' - ' + endDate;\r\n }\r\n\r\n getTimeLocationString(event: CardUpcomingEvents) {\r\n let eventStartTime = '';\r\n let eventEndTime = '';\r\n const location = event.EventLocation;\r\n if (event.StartTime) {\r\n eventStartTime = moment(event.StartTime, 'h:mm A').format('h:mm A');\r\n }\r\n if (event.EndTime) {\r\n eventEndTime = moment(event.EndTime, 'h:mm A').format('h:mm A');\r\n }\r\n if (eventStartTime && eventEndTime && location) { // Has StartTime, EndTime and Location\r\n return moment(eventStartTime, 'h:mm A').format('h:mm A') + ' - ' + eventEndTime + ', ' + location;\r\n }\r\n if (!eventStartTime && !eventEndTime && !location) { // Has no start time, end time or location\r\n return '';\r\n }\r\n if (eventStartTime && !eventEndTime && !location) { // Only a StartTime\r\n return eventStartTime;\r\n }\r\n if (!eventStartTime && eventEndTime && !location) { // Only a EndTime\r\n return 'Until ' + eventEndTime;\r\n }\r\n if (!eventStartTime && !eventEndTime && location) { // Only a Location\r\n return location;\r\n }\r\n if (eventStartTime && !eventEndTime && location) { // Has StartTime and Location\r\n return eventStartTime + ', ' + location;\r\n }\r\n if (!eventStartTime && eventEndTime && location) { // Has EndTime and Location\r\n return 'Until ' + eventEndTime + ', ' + location;\r\n }\r\n if (eventStartTime && eventEndTime && !location) { // Has StartTime and EndTime\r\n return moment(eventStartTime, 'h:mm A').format('h:mm A') + ' - ' + eventEndTime;\r\n }\r\n }\r\n\r\n hasTimeLocation(event: CardUpcomingEvents) {\r\n if (event.EndTime || event.StartTime || event.EventLocation) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport class EventMonth {\r\n month: string;\r\n year: string;\r\n events: CardUpcomingEvents[];\r\n}\r\n","
\r\n
\r\n
\r\n Calendar\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
{{selectedDate}}
\r\n \r\n
\r\n \r\n \r\n
\r\n
{{event.EventTitle}}
\r\n
\r\n
\r\n {{getDateRangeString(event)}}\r\n
\r\n
\r\n {{getTimeLocationString(event)}}\r\n
\r\n
\r\n
\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, Inject, OnInit} from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {NavigationExtras, Router} from '@angular/router';\r\nimport * as moment from 'moment';\r\nimport {CardUpcomingEvents} from '../../upcoming-events-card/card-upcoming-events';\r\n\r\n@Component({\r\n selector: 'app-event-details-modal',\r\n templateUrl: './event-details-modal.component.html',\r\n styleUrls: ['./event-details-modal.component.css']\r\n})\r\nexport class EventDetailsModalComponent implements OnInit {\r\n events = [];\r\n selectedDate;\r\n constructor(private matDialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n this.events = this.data.events;\r\n this.selectedDate = moment(this.data.date, 'MM/DD/YYYY').format('dddd, MMMM D, YYYY');\r\n }\r\n\r\n closeClick() {\r\n this.matDialogRef.close();\r\n }\r\n\r\n goToCalendarClick() {\r\n this.closeClick();\r\n const navigationExtras: NavigationExtras = {\r\n // needs to be lower case view, day, week, month\r\n queryParams: {\r\n 'selectedView': 'month'\r\n }\r\n };\r\n this.router.navigate(['/student360/calendar'], navigationExtras);\r\n }\r\n\r\n multiDayEvent(event) {\r\n // check if the event is a multi day event\r\n if (event.EventStartDate == event.EventEndDate) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n getDateRangeString(event) {\r\n const startDate = moment(event.EventStartDate, 'MM/DD/YYYY hh:mm:ss A').format('MMM DD');\r\n const endDate = moment(event.EventEndDate, 'MM/DD/YYYY hh:mm:ss A').format('MMM DD');\r\n return startDate + ' - ' + endDate;\r\n }\r\n\r\n hasTimeLocation(event) {\r\n if (event.EndTime || event.StartTime || event.EventLocation) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getTimeLocationString(event: CardUpcomingEvents) {\r\n let eventStartTime = '';\r\n let eventEndTime = '';\r\n const location = event.EventLocation;\r\n\r\n if (event.StartTime) {\r\n eventStartTime = moment(event.StartTime, 'HH:mm:ss').format('h:mm A');\r\n }\r\n if (event.EndTime) {\r\n eventEndTime = moment(event.EndTime, 'HH:mm:ss').format('h:mm A');\r\n }\r\n if (eventStartTime && eventEndTime && location) { // Has StartTime, EndTime and Location\r\n return eventStartTime + ' - ' + eventEndTime + ', ' + location;\r\n }\r\n if (!eventStartTime && !eventEndTime && !location) { // Has no start time, end time or location\r\n return '';\r\n }\r\n if (eventStartTime && !eventEndTime && !location) { // Only a StartTime\r\n return eventStartTime;\r\n }\r\n if (!eventStartTime && eventEndTime && !location) { // Only a EndTime\r\n return 'Until ' + eventEndTime;\r\n }\r\n if (!eventStartTime && !eventEndTime && location) { // Only a Location\r\n return location;\r\n }\r\n if (eventStartTime && !eventEndTime && location) { // Has StartTime and Location\r\n return eventStartTime + ', ' + location;\r\n }\r\n if (!eventStartTime && eventEndTime && location) { // Has EndTime and Location\r\n return 'Until ' + eventEndTime + ', ' + location;\r\n }\r\n if (eventStartTime && eventEndTime && !location) { // Has StartTime and EndTime\r\n return moment(eventStartTime, 'HH:mm:ss').format('h:mm A') + ' - ' + eventEndTime;\r\n }\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Calendar\r\n
\r\n
\r\n
\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, OnInit } from '@angular/core';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { interval } from 'rxjs';\r\nimport * as moment from 'moment';\r\nimport * as _ from 'lodash';\r\nimport { EventDetailsModalComponent } from './event-details-modal/event-details-modal.component';\r\n\r\n@Component({\r\n selector: 'app-calendar-card',\r\n templateUrl: './calendar-card.component.html',\r\n styleUrls: ['./calendar-card.component.css']\r\n})\r\nexport class CalendarCardComponent implements OnInit {\r\n @Input() data: any;\r\n card: Card;\r\n nonAttendanceDates: string[];\r\n eventDates: string[];\r\n startDate: string;\r\n endDate: string;\r\n\r\n constructor(private userService: UserService, private loginService: LoginService, private dialog: MatDialog, private yearService: YearService, private studentService: StudentService, private studentSummaryService: StudentSummaryService, private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getStudentCalendar();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n getStudentCalendar() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n // If undefined, set dates to the start and end of the current month\r\n if (!this.startDate && !this.endDate) {\r\n this.startDate = moment().startOf('month').format('MM/DD/YYYY');\r\n this.endDate = moment().endOf('month').format('MM/DD/YYYY');\r\n }\r\n this.studentSummaryService.getCardStudentCalendar(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.startDate, this.endDate, this.userService.userType, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n const possibleDates = [];\r\n const start = moment(this.startDate);\r\n const end = moment(this.endDate);\r\n const totalRequestedDays = end.diff(start, 'days') + 1;\r\n const cDate = _.cloneDeep(start);\r\n for (let i = 0; i < totalRequestedDays; i++) {\r\n possibleDates.push(moment(cDate).format('MM/DD/YYYY'));\r\n cDate.add(1, 'days');\r\n }\r\n if (response.body.length > 0) {\r\n // clean up the dates\r\n response.body.forEach(d => {\r\n d.Date = moment(d.Date, 'M/D/YYYY H:mm:SS A').format('MM/DD/YYYY');\r\n });\r\n // Verify each date exists in the return set, if not add it as a non school day\r\n const rDates = response.body.map(d => d.Date);\r\n possibleDates.forEach(d => {\r\n if (!rDates.includes(d)) {\r\n response.body.push({\r\n Date: d,\r\n HasEvent: false,\r\n HasSchool: false\r\n });\r\n }\r\n });\r\n } else {\r\n // Because the response was empty we can assume there is no school for the selected range\r\n possibleDates.forEach(d => {\r\n response.body.push({\r\n Date: d,\r\n HasEvent: false,\r\n HasSchool: false\r\n });\r\n });\r\n }\r\n // Reset the data sources (because they are input parameters)\r\n this.eventDates = response.body.filter(d => d.HasEvent == true).map(d => d.Date);\r\n this.nonAttendanceDates = response.body.filter(d => d.HasSchool == false).map(d => d.Date);\r\n }\r\n });\r\n }\r\n\r\n monthChange(event: any) {\r\n this.startDate = moment(event, 'MM/DD/YYYY').startOf('month').format('MM/DD/YYYY');\r\n this.endDate = moment(event, 'MM/DD/YYYY').endOf('month').format('MM/DD/YYYY');\r\n this.getStudentCalendar();\r\n }\r\n\r\n calendarClick() {\r\n const navigationExtras: NavigationExtras = {\r\n // needs to be lower case view, day, week, month\r\n queryParams: {\r\n 'selectedView': 'month',\r\n 'selectedDate': this.endDate\r\n }\r\n };\r\n this.router.navigate(['/student360/calendar'], navigationExtras);\r\n }\r\n\r\n dayClick(calendarDay) {\r\n if (calendarDay.hasEvents) {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getEventForDateRange(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, calendarDay.date, calendarDay.date, this.userService.userType).subscribe((response) => {\r\n if (response.ok) {\r\n // Open a modal displaying the event info\r\n this.dialog.open(EventDetailsModalComponent, { disableClose: true, autoFocus: false, data: { events: response.body, date: calendarDay.date } });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","

\r\n Attendance for \r\n

\r\n\r\n
\r\n \r\n \r\n \r\n Date\r\n {{e.AttDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n Code\r\n {{e.AttCode}}\r\n \r\n \r\n \r\n Description\r\n {{e.AttCodeDescription}}\r\n \r\n \r\n \r\n Comment\r\n {{e.AttComment}}\r\n \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 {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {AttendanceDetail} from './attendance-detail';\r\nimport {Student} from '../../../../../../shared-components/student/student.model';\r\nimport {StudentService} from '../../../../../../shared-components/student/student.service';\r\n\r\n@Component({\r\n selector: 'app-attendance-details-modal',\r\n templateUrl: './attendance-details-modal.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./attendance-details-modal.component.css']\r\n})\r\nexport class AttendanceDetailsModalComponent implements OnInit {\r\n\r\n attendanceDetails: AttendanceDetail[] = [];\r\n student: Student;\r\n // Angular Material Table\r\n displayedColumns: string[] = ['date', 'code', 'description', 'comment'];\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private studentService: StudentService,\r\n private cdr: ChangeDetectorRef,\r\n private dialogRef: MatDialogRef\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.attendanceDetails = this.data.attendanceDetails;\r\n this.student = this.studentService.selectedStudent;\r\n this.updateView();\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Attendance History\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
0\" style=\"flex: 1;display: flex;justify-content: flex-end;padding: 10px;\">\r\n Include dropped classes\r\n
\r\n
\r\n No attendance history available.\r\n
\r\n
0\" style=\"display: flex; flex: 1; justify-content: flex-end;padding-right: 7.2%; color: rgba(0, 0, 0, 0.54);font-weight: 500;\">\r\n Year-to-Date\r\n
\r\n 0\" style=\"width: 100%;\" [dataSource]=\"recordsToDisplay\">\r\n \r\n \r\n Meets\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Term\r\n {{ar.Term}}\r\n \r\n\r\n \r\n \r\n Course-Section\r\n {{ar.CourseNumber}}-{{ar.SectionName}}\r\n \r\n\r\n \r\n \r\n Name\r\n {{ar.CourseName}}\r\n \r\n\r\n \r\n \r\n \r\n Dropped\r\n \r\n \r\n {{ar.DroppedDate | date:'MM/dd/yy'}}\r\n \r\n \r\n\r\n \r\n \r\n Pr\r\n 0}\" (click)=\"ar.Present_YTD > 0 ? attendanceRecordClick(ar.Section_ID, 'Present') : ''\">{{ar.Present_YTD}}\r\n \r\n\r\n \r\n \r\n Td\r\n 0}\" (click)=\"ar.Tardy_YTD > 0 ? attendanceRecordClick(ar.Section_ID, 'Tardy') : ''\">{{ar.Tardy_YTD}}\r\n \r\n\r\n \r\n \r\n Ab\r\n 0}\" (click)=\"ar.Absent_YTD > 0 ? attendanceRecordClick(ar.Section_ID, 'Absent'): ''\">{{ar.Absent_YTD}}\r\n \r\n\r\n \r\n \r\n Ex\r\n 0}\"(click)=\"ar.ExcusedAbsent_YTD > 0 ? attendanceRecordClick(ar.Section_ID, 'Excused') : ''\">{{ar.ExcusedAbsent_YTD}}\r\n \r\n\r\n \r\n \r\n Un\r\n 0}\" (click)=\"ar.UnexcusedAbsent_YTD > 0 ? attendanceRecordClick(ar.Section_ID, 'Unexcused') : ''\">{{ar.UnexcusedAbsent_YTD}}\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { Student360Service } from '../../../../student360.service';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { CardAttendanceHistory } from './card-attendance-history';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AttendanceDetailsModalComponent } from './attendance-details-modal/attendance-details-modal.component';\r\n@Component({\r\n selector: 'app-attendance-history-card',\r\n templateUrl: './attendance-history-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./attendance-history-card.component.css']\r\n})\r\nexport class AttendanceHistoryCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n // Angular Material Table\r\n displayedColumns: string[] = ['meets', 'courseSection', 'name', 'dropped', 'pr', 'td', 'ab', 'ex', 'un'];\r\n attendanceRecords: CardAttendanceHistory[] = [];\r\n recordsToDisplay: CardAttendanceHistory[] = [];\r\n showDropped = true;\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private userService: UserService,\r\n private cdr: ChangeDetectorRef,\r\n private router: Router,\r\n private studentService: StudentService,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n this.displayedColumns = ['meets', 'Term', 'courseSection', 'name', 'dropped', 'td', 'ab'];\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getStudentAttendanceHistory();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getStudentAttendanceHistory() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentAttendance(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n this.attendanceRecords = response.body;\r\n this.hideShowDropped();\r\n }\r\n });\r\n }\r\n\r\n goToAttendance() {\r\n this.router.navigateByUrl('/student360/attendance?studentPortal=true');\r\n }\r\n\r\n hideShowDropped() {\r\n if (!this.showDropped) {\r\n this.recordsToDisplay = this.attendanceRecords.filter(ar => ar.IsDropped == false);\r\n } else {\r\n this.recordsToDisplay = _.cloneDeep(this.attendanceRecords);\r\n }\r\n this.recordsToDisplay.sort((a, b) => (a.ClassMeets > b.ClassMeets) ? 1 : -1);\r\n this.updateView();\r\n }\r\n\r\n attendanceRecordClick(sectionId: number, type: string) {\r\n this.studentSummaryService.getAttendanceHistoryDetail(this.studentService.selectedStudent.Id, sectionId, type).subscribe((response) => {\r\n if (response.ok) {\r\n this.dialog.open(AttendanceDetailsModalComponent, { autoFocus: false, minWidth: '30vw', maxHeight: '45vh', disableClose: true, data: { attendanceDetails: response.body } });\r\n }\r\n });\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Student Teams\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Student is not a member of any teams.\r\n
\r\n 0\" [dataSource]=\"studentTeams\">\r\n \r\n \r\n Team\r\n {{element.TeamName}} \r\n \r\n\r\n \r\n \r\n Staff Name\r\n {{element.StaffLastName}}, {{element.StaffFirstName}} \r\n \r\n\r\n \r\n \r\n Entry\r\n {{element.EntryDate | date:'MM/dd/yy'}} \r\n \r\n\r\n \r\n \r\n Exit\r\n {{element.ExitDate | date:'MM/dd/yy'}} \r\n \r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {CardStudentTeams} from './card-student-teams';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-student-teams-card',\r\n templateUrl: './student-teams-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./student-teams-card.component.css']\r\n})\r\nexport class StudentTeamsCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n studentTeams: CardStudentTeams[] = [];\r\n // Angular Material Table\r\n displayedColumns: string[] = ['team', 'staffName', 'entry', 'exit'];\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getTeams();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getTeams() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentTeams(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier).subscribe((response) => {\r\n if (response.ok) {\r\n this.studentTeams = response.body;\r\n // Because we are using onPush change detection we need to update the view\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n viewStudentTeams() {\r\n this.router.navigateByUrl('/student360/teams?studentPortal=true');\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Student Notes\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No notes exist for student.\r\n
\r\n
0\" style=\"width: 100%; padding-left: 24px;padding-top: 15px;padding-bottom: 15px;\">\r\n
\r\n
{{cat}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{note.Note}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {CardStudentNotes} from './card-student-notes';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-student-notes-card',\r\n templateUrl: './student-notes-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./student-notes-card.component.css']\r\n})\r\nexport class StudentNotesCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n studentNotes: CardStudentNotes[] = [];\r\n categories: string[] = [];\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getNotes();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getNotes() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentNotes(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier).subscribe((response) => {\r\n if (response.ok) {\r\n this.studentNotes = response.body;\r\n // Group by Definition (category)\r\n this.categories = this.studentNotes.map(note => note.Definition).filter((cat, pos) => {\r\n return this.studentNotes.map(note => note.Definition).indexOf(cat) == pos;\r\n });\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n viewStudentNotesClick() {\r\n this.router.navigateByUrl('/classroom360/studentNotes?studentPortal=true');\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Behavior\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No Behavior data exists for student.\r\n
\r\n
0\" style=\"display: flex; flex: 1\">\r\n \r\n \r\n \r\n Date\r\n {{element.EventDate | date:'MM/dd/yy h:mm a'}} \r\n \r\n\r\n \r\n \r\n Incident\r\n {{element.Incident}}\r\n \r\n\r\n \r\n \r\n Action\r\n {{element.Action}} \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {CardStudentBehavior} from './card-student-behavior';\r\nimport {Router} from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-behavior-card',\r\n templateUrl: './behavior-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./behavior-card.component.css']\r\n})\r\nexport class BehaviorCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n behaviorEvents: CardStudentBehavior[] = [];\r\n // Angular Material Table\r\n displayedColumns: string[] = ['date', 'incident', 'action'];\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private userService: UserService,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getBehavior();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getBehavior() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentBehavior(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n this.behaviorEvents = response.body;\r\n // Because we are using onPush Change detection we need to update the view\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n viewBehaviorClick() {\r\n this.router.navigateByUrl('/student360/behavior');\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Programs and Services\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No Programs and Services data exists for student.\r\n
\r\n
0\" style=\"display: flex; flex: 1;\">\r\n \r\n \r\n \r\n Program/Service\r\n \r\n
\r\n {{element.name}}\r\n
\r\n
\r\n {{element.name}}\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n Entry\r\n {{element.date | date: 'MM/dd/yy'}} \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {CardStudentProgramsServices} from './card-student-programs-services';\r\nimport {Router} from '@angular/router';\r\n\r\nexport class DisplayItem {\r\n name: string;\r\n date: string;\r\n service: boolean;\r\n program: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'app-programs-and-services-card',\r\n templateUrl: './programs-and-services-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./programs-and-services-card.component.css']\r\n})\r\nexport class ProgramsAndServicesCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n displayItems: DisplayItem[] = [];\r\n programsAndServices: CardStudentProgramsServices[] = [];\r\n // Angular Material Table\r\n displayedColumns: string[] = ['programService', 'entry'];\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private router: Router,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getProgramsAndServices();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getProgramsAndServices() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardProgramsAndServices(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n // The following code flattens the data and removes duplicate programs\r\n // so it will display nicely in the table with only 2 columns\r\n // keep in mind that it is alphabetized by Program then Service at the Stored procedure\r\n this.programsAndServices = response.body;\r\n for (let i = 0; i < this.programsAndServices.length; i++) {\r\n // Add the Program\r\n this.displayItems.push({\r\n name: this.programsAndServices[i].ProgramName,\r\n date: '',\r\n program: true,\r\n service: false\r\n });\r\n // Add the Service\r\n this.displayItems.push({\r\n name: this.programsAndServices[i].ServiceName,\r\n date: this.programsAndServices[i].ServiceEntryDate,\r\n program: false,\r\n service: true\r\n });\r\n }\r\n const unqItems = [];\r\n this.displayItems.forEach(e => {\r\n if (e.program == true) {\r\n if (unqItems.includes(e.name)) {\r\n this.displayItems.splice(this.displayItems.indexOf(e), 1);\r\n } else {\r\n unqItems.push(e.name);\r\n }\r\n }\r\n });\r\n // Because we are using onPush change detection\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n viewProgramsAndServices() {\r\n this.router.navigateByUrl('/student360/programsAndServices');\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Student Details\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
Email Address
\r\n
{{studentDetails.EmailAddress}}
\r\n
\r\n
0 || studentDetails.CourtOrderAgainst != '')\"\r\n style=\"display: flex; flex-direction: row; border-left: 1px;border-left-style: solid;border-left-color: lightgray;border-bottom: 1px;border-bottom-style: solid;border-bottom-color: lightgray;flex: 1;background-color: #ffff8d;color: red;\">\r\n
Court Order
\r\n
{{studentDetails.CourtOrderAgainst}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
'' || studentDetails.CurrentLocationSection > '' || studentDetails.CurrentLocationRoom > '' || studentDetails.CurrentLocationTeacher > ''\">\r\n \r\n
\r\n
Current Location
\r\n
\r\n
''\">\r\n
Course
\r\n
{{studentDetails.CurrentLocationCourse}}\r\n
\r\n
\r\n
'' || studentDetails.CurrentLocationCourse=='Student is between classes'\">\r\n
Room
\r\n
{{studentDetails.CurrentLocationRoom}}\r\n
\r\n
\r\n
'' || studentDetails.CurrentLocationCourse=='Student is between classes'\">\r\n
Teacher
\r\n
\r\n {{studentDetails.CurrentLocationTeacher}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Demographics
\r\n
\r\n
\r\n
Age
\r\n
{{studentDetails.Age}}
\r\n
\r\n
\r\n
Birthdate
\r\n
{{studentDetails.BirthDate |\r\n date:'MM/dd/yy'}}
\r\n
\r\n
\r\n
Cell Phone
\r\n
{{studentDetails.CellPhone}}
\r\n
\r\n
\r\n
Ethnicity
\r\n
{{studentDetails.Ethnicity}}
\r\n
\r\n
\r\n
Gender
\r\n
{{studentDetails.Gender}}\r\n \r\n {{studentDetails.PreferedPronouns}}\r\n \r\n
\r\n
\r\n
\r\n
Race
\r\n
{{studentDetails.Race}}
\r\n
\r\n
\r\n
State ID
\r\n
\r\n {{studentDetails.StudentStateIdentifier}}
\r\n
\r\n
\r\n
Student #
\r\n
{{student.StudentNumber}}
\r\n
\r\n
\r\n
Language Spoken at\r\n Home
\r\n
{{studentDetails.PrimaryLanguage}}
\r\n
\r\n
\r\n
Previous Last name\r\n
\r\n
{{studentDetails.PreviousLastName}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Locker
\r\n
\r\n
\r\n
Number
\r\n
{{studentDetails.Locker}}
\r\n
\r\n
\r\n
Combination
\r\n
\r\n \r\n {{studentDetails.LockerCombination}}\r\n \r\n \r\n {{maskedLocker}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
'' || studentDetails.HomeRoomSection > '' || studentDetails.HomeRoomRoom > '' || studentDetails.HomeRoomTeacher > ''\">\r\n \r\n
\r\n
Home Room
\r\n
\r\n
''\">\r\n
Course
\r\n
{{studentDetails.HomeRoomCourse}}
\r\n
\r\n
''\">\r\n
Room
\r\n
{{studentDetails.HomeRoomRoom}}
\r\n
\r\n
''\">\r\n
Teacher
\r\n
{{studentDetails.HomeRoomTeacher}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Student Portal Access
\r\n
\r\n
\r\n
Login
\r\n
\r\n \r\n {{maskedLogin}}\r\n \r\n \r\n {{studentDetails.StudentLogin}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
Password
\r\n
\r\n \r\n {{maskedPassword}}\r\n \r\n \r\n {{studentDetails.StudentPassword}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Enrollment
\r\n
\r\n
\r\n
Status
\r\n
{{studentDetails.EnrollmentStatus}}\r\n
\r\n
\r\n
\r\n
Enroll Date
\r\n
{{studentDetails.EnrollmentDate | date:\r\n 'MM/dd/yy'}}
\r\n
\r\n
\r\n
Withdrawn Date
\r\n
{{studentDetails.WithdrawDate | date:\r\n 'MM/dd/yy'}}
\r\n
\r\n
\r\n
Residency
\r\n
{{studentDetails.Residency}}
\r\n
\r\n
\r\n
Reason
\r\n
{{studentDetails.Reason}}
\r\n
\r\n
\r\n
Reason
\r\n
{{studentDetails.WithdrawReason}}
\r\n
\r\n
\r\n
FTE
\r\n
{{studentDetails.FTE}}
\r\n
\r\n \r\n
\r\n
Dual Enrolled
\r\n
\r\n
\r\n {{school}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Home District
\r\n
{{studentDetails.HomeDistrict}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Other
\r\n
\r\n
\r\n
Bus
\r\n
{{studentDetails.Bus}}
\r\n
\r\n
\r\n
Transportation Comment\r\n
\r\n
{{studentDetails.TransportationComment}}\r\n
\r\n
\r\n
\r\n
Graduation Plan
\r\n
{{studentDetails.GraduationPlan}}
\r\n
\r\n
\r\n
IEP Case Manager
\r\n
{{studentDetails.IEPCaseManager}}
\r\n
\r\n
\r\n
Primary Counselor\r\n
\r\n
{{studentDetails.PrimaryCounselor}}\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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { Router } from '@angular/router';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { Student } from '../../../../../shared-components/student/student.model';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { LoginService } from '../../../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../../../shared-modules/login/LoginSetting.model';\r\nimport { StudentDetail } from '../../../../student-details/student-detail.model';\r\n\r\n@Component({\r\n selector: 'app-student-details-card',\r\n templateUrl: './student-details-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./student-details-card.component.css']\r\n})\r\nexport class StudentDetailsCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n student: Student;\r\n studentDetails: StudentDetail;\r\n studentLoginHidden = true;\r\n studentPasswordHidden = true;\r\n lockerComboHidden = true;\r\n maskedLogin = '';\r\n maskedPassword = '';\r\n maskedLocker = '';\r\n enrolledSchools: string[] = [];\r\n enableGenderPronouns = false;\r\n loginSettings: LoginSettings;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private cdr: ChangeDetectorRef) {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n }\r\n\r\n ngOnInit() {\r\n this.enableGenderPronouns = this.loginService.LoginSettings.EnableGenderPronouns;\r\n this.card = this.data;\r\n this.student = this.studentService.selectedStudent;\r\n this.getStudentDetails();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getStudentDetails() {\r\n this.studentService.getStudentDetails(this.student.Id, this.yearService.defaultYear.Id, this.userService.userId, true).subscribe((response) => {\r\n this.studentDetails = response;\r\n if (this.studentDetails != null) {\r\n if (this.studentDetails.ShowStudentLogin) {\r\n this.maskedLogin = '';\r\n for (let i = 0; i < this.studentDetails.StudentLogin.length; i++) {\r\n this.maskedLogin = this.maskedLogin + '*';\r\n }\r\n }\r\n if (this.studentDetails.ShowStudentPassword) {\r\n this.maskedPassword = '';\r\n for (let i = 0; i < this.studentDetails.StudentPassword.length; i++) {\r\n this.maskedPassword = this.maskedPassword + '*';\r\n }\r\n }\r\n if (this.studentDetails.LockerCombination != null) {\r\n this.maskedLocker = '';\r\n for (let i = 0; i < this.studentDetails.LockerCombination.length; i++) {\r\n this.maskedLocker = this.maskedLocker + '*';\r\n }\r\n }\r\n if (this.studentDetails.DualEnrolled) {\r\n this.enrolledSchools = this.studentDetails.DualEnrolled.split(',');\r\n }\r\n }\r\n this.updateView();\r\n });\r\n }\r\n\r\n viewStudentDetails() {\r\n this.router.navigateByUrl('/student360/studentDetails?studentPortal=true');\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","

\r\n Membership Codes\r\n

\r\n\r\n
\r\n \r\n \r\n \r\n Start Date\r\n {{e.StartDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n End Date\r\n {{e.EndDate | date: 'MM/dd/yy'}}\r\n \r\n \r\n \r\n Code\r\n {{e.Code}}\r\n \r\n \r\n \r\n Updated By\r\n {{e.UpdatedBy}}\r\n \r\n\r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n The default value of {{membershipCode}} applies in all dates outside the above-listed ranges.\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {StudentSummaryService} from '../../../../student-summary.service';\r\nimport {CardMembershipCodes} from '../card-membership-codes';\r\n\r\n@Component({\r\n selector: 'app-membership-code-details-modal',\r\n templateUrl: './membership-code-details-modal.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./membership-code-details-modal.component.css']\r\n})\r\nexport class MembershipCodeDetailsModalComponent implements OnInit {\r\n RSNY_ID: number;\r\n membershipDetails: CardMembershipCodes[] = [];\r\n membershipCode: string;\r\n // Angular Material Table\r\n displayedColumns: string[] = ['startDate', 'endDate', 'code', 'updatedBy'];\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any, private studentSummaryService: StudentSummaryService, private cdr: ChangeDetectorRef, private dialogRef: MatDialogRef) {\r\n }\r\n\r\n ngOnInit() {\r\n this.RSNY_ID = this.data.RSNY_ID;\r\n this.membershipCode = this.data.membershipCode;\r\n this.getMembershipCodes();\r\n }\r\n\r\n getMembershipCodes() {\r\n this.studentSummaryService.getMembershipCodes(this.RSNY_ID).subscribe((response) => {\r\n if (response.ok) {\r\n this.membershipDetails = response.body;\r\n // Manually trigger change detection\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Enrollment\r\n
\r\n
\r\n
\r\n
\r\n \r\n 0\" [expanded]=\"true\" class=\"mat-elevation-z0\"\r\n style=\"border-bottom-style: solid;border-bottom-width: 1px;border-bottom-color: lightgray;\">\r\n \r\n \r\n Details\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
Prior District
\r\n
{{enrollmentDetails[0].PriorDistrict}}
\r\n
\r\n
\r\n
Include in class Rank
\r\n
{{enrollmentDetails[0].IncludeInClassRank ? 'Y'\r\n : 'N'}}
\r\n
\r\n
\r\n
\r\n
\r\n 0\" [expanded]=\"true\"\r\n class=\"mat-elevation-z0\">\r\n \r\n \r\n History\r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n Year\r\n \r\n {{e.AcademicYearDesc}}\r\n \r\n\r\n \r\n \r\n School\r\n \r\n {{e.SchoolName}}\r\n \r\n\r\n \r\n \r\n Grade\r\n \r\n {{e.GradeLevel}}\r\n \r\n\r\n \r\n \r\n Enrolled\r\n \r\n {{e.EnrolledDate | date:'MM/dd/yy'}}\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
Enrollment Code\r\n
\r\n
{{enrollmentRecord.EnrollmentCode}}\r\n
\r\n
\r\n
\r\n
FTE
\r\n
{{enrollmentRecord.MembershipCode}}\r\n
\r\n
\r\n
\r\n
Withdrawal
\r\n
{{enrollmentRecord.WithdrawalDate |\r\n date: 'MM/dd/yy'}}
\r\n
\r\n
\r\n
Code
\r\n
{{enrollmentRecord.WithdrawalCode}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \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 {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {Student360Service} from '../../../../student360.service';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {CardStudentEnrollment} from './card-student-enrollment';\r\nimport {TylerMatTableDataSource} from '../../../../../shared-components/angular-material/extended.class';\r\nimport {detailExpand} from '../../../../../shared-components/angular-material/mat-animations';\r\nimport {MatDialog} from '@angular/material/dialog';\r\nimport {MembershipCodeDetailsModalComponent} from './membership-code-details-modal/membership-code-details-modal.component';\r\nimport {LoginService} from '../../../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-enrollment-card',\r\n templateUrl: './enrollment-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./enrollment-card.component.css'],\r\n // Animation for when the detail row is expanded or collapsed\r\n animations: [detailExpand]\r\n})\r\nexport class EnrollmentCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n // Angular Material Table\r\n displayedColumns: string[] = ['priorDistrict', 'priorState', 'priorCountry'];\r\n historyColumns: string[] = ['year', 'school', 'grade', 'enrolled', 'more'];\r\n angularMatData = new TylerMatTableDataSource();\r\n enrollmentHistory: CardStudentEnrollment[] = [];\r\n enrollmentDetails: CardStudentEnrollment[] = [];\r\n constructor(\r\n private student360Service: Student360Service,\r\n private userService: UserService,\r\n private cdr: ChangeDetectorRef,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private studentSummaryService: StudentSummaryService,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getEnrollmentHistory();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getEnrollmentHistory() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentEnrollment(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier).subscribe((response) => {\r\n if (response.ok) {\r\n this.enrollmentHistory = response.body;\r\n this.enrollmentDetails = this.enrollmentHistory.filter(e => e.IsCurrent == true);\r\n this.angularMatData.data = this.enrollmentHistory;\r\n // Because we are using on push change detection trigger cd\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n openMembershipCodeDetails(RSNY_ID: number, membershipCode: string) {\r\n this.dialog.open(MembershipCodeDetailsModalComponent, {disableClose: true, minWidth: '60vw', autoFocus: false, data: {RSNY_ID: RSNY_ID, membershipCode: membershipCode}});\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n // These methods are used to allow calls to the TylerMatTableDataSource methods from the html\r\n toggleExpanded(row: any) {\r\n // Toggles row between expanded and collapsed\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n // Return true if expanded and false if collapsed\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // Expand or collapse all rows\r\n // true => expand all false => collapse all\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n}\r\n","export class CardStudentContact {\r\n CanPickUp: boolean;\r\n CellNumber: string;\r\n Contact_Name: string;\r\n Email: string;\r\n EmergencyNumber: string;\r\n EmergencySequenceNumber: number;\r\n Employer: string;\r\n HasCustody: boolean;\r\n HomeNumber: string;\r\n IsEmergency: boolean;\r\n IsGuardian: boolean;\r\n IsPrimary: boolean;\r\n IsRestricted: boolean;\r\n LastLogin: string;\r\n LivesWith: boolean;\r\n MailingAddressLine1: string;\r\n MailingAddressLine2: string;\r\n Mem_ID: number;\r\n PID_ID: number;\r\n ParentPortalAccess: boolean;\r\n PrimaryAddressLine1: string;\r\n PrimaryAddressLine2: string;\r\n Relationship: string;\r\n WorkNumber: string;\r\n HomeNumber2: string;\r\n IsEnableLeaveWithHousehold: boolean;\r\n // DTO Field for V9 //\r\n ParentType: string;\r\n Comment: string;\r\n IsHeader: boolean;\r\n}\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\r\n \r\n \r\n {{contact.Contact_Name}}\r\n \r\n {{contact.Contact_Name}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Relationship\r\n \r\n \r\n {{contact.Relationship}}\r\n \r\n\r\n \r\n \r\n \r\n Home\r\n \r\n \r\n {{contact.HomeNumber | phoneNumber}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Cell\r\n \r\n \r\n {{contact.CellNumber | phoneNumber}}\r\n {{contact.CellNumber | phoneNumber}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Student may leave with this person\r\n \r\n \r\n Student may NOT leave with this person\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Email Address
\r\n
{{contactDetails.Email}}\r\n
\r\n
\r\n\r\n
\r\n
Employer
\r\n
{{contactDetails.Employer}}
\r\n
\r\n\r\n
\r\n
Work Phone
\r\n
\r\n {{contactDetails.WorkNumber | phoneNumber}}
\r\n
\r\n
\r\n\r\n
\r\n
Home Phone 2
\r\n
{{contactDetails.HomeNumber2 |\r\n phoneNumber}}
\r\n
\r\n\r\n
\r\n
Portal Access
\r\n
\r\n {{contactDetails.ParentPortalAccess ? 'Y' : 'N'}}\r\n
\r\n
\r\n\r\n
\r\n
Last Login
\r\n
{{contactDetails.LastLogin |\r\n date:'MM/dd/yy hh:mm a'}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
Primary Address
\r\n
\r\n
\r\n
\r\n
\r\n
Mailing Address
\r\n
\r\n
\r\n
Same as Primary Address\r\n
\r\n
\r\n
\r\n
Comment
\r\n
{{contactDetails.Comment}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n
\r\n
Student may leave with\r\n this person
\r\n\r\n
Student may NOT leave\r\n with this person
\r\n\r\n
\r\n
\r\n
\r\n
Work Phone
\r\n
\r\n {{contactDetails.WorkNumber | phoneNumber}}
\r\n
\r\n
\r\n
\r\n
Comment
\r\n
{{contactDetails.Comment}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\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, OnInit, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CardStudentContact } from '../card-student-contact';\r\nimport { TylerMatTableDataSource } from '../../../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../../../shared-components/angular-material/mat-animations';\r\nimport { SendEmailService } from '../../../../../../shared-modules/send-email/send-email.service';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'tyl-contacts-v9',\r\n templateUrl: './contacts-v9.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./contacts-v9.component.css'],\r\n animations: [detailExpand]\r\n})\r\nexport class ContactsV9Component implements OnInit {\r\n @Input() contacts: CardStudentContact[];\r\n\r\n displayedColumns: string[] = ['contactKey', 'name', 'relationship', 'home', 'cell', 'more'];\r\n angularMatData = new TylerMatTableDataSource();\r\n parentType = ['Household', 'Emergency', 'Nonresident'];\r\n studentContacts = new Array();\r\n\r\n constructor(private cdr: ChangeDetectorRef, private sendEmailService: SendEmailService, private router: Router) {\r\n }\r\n\r\n ngOnInit() {\r\n if (this.contacts) {\r\n this.contacts.forEach(contact => {\r\n contact.IsHeader = false;\r\n });\r\n\r\n const houseHoldParent = new CardStudentContact();\r\n houseHoldParent.Contact_Name = 'Household Parents/Guardians';\r\n houseHoldParent.IsHeader = true;\r\n houseHoldParent.HomeNumber = '';\r\n houseHoldParent.CellNumber = '';\r\n this.studentContacts.push(houseHoldParent);\r\n this.contacts.filter(o => o.ParentType == 'Household').forEach(element => {\r\n this.studentContacts.push(element);\r\n });\r\n\r\n if (this.contacts.filter(o => o.ParentType == 'Emergency').length > 0) {\r\n const emergencyContact = new CardStudentContact();\r\n emergencyContact.Contact_Name = 'Emergency Contacts';\r\n emergencyContact.IsHeader = true;\r\n emergencyContact.HomeNumber = '';\r\n emergencyContact.CellNumber = '';\r\n this.studentContacts.push(emergencyContact);\r\n this.contacts.filter(o => o.ParentType == 'Emergency').forEach(element => {\r\n this.studentContacts.push(element);\r\n });\r\n }\r\n\r\n if (this.contacts.filter(o => o.ParentType == 'Nonresident').length > 0) {\r\n const nonResidentParent = new CardStudentContact();\r\n nonResidentParent.Contact_Name = 'Nonresident Parents';\r\n nonResidentParent.IsHeader = true;\r\n nonResidentParent.HomeNumber = '';\r\n nonResidentParent.CellNumber = '';\r\n this.studentContacts.push(nonResidentParent);\r\n this.contacts.filter(o => o.ParentType == 'Nonresident').forEach(element => {\r\n this.studentContacts.push(element);\r\n });\r\n }\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.studentContacts);\r\n this.angularMatData.data = this.studentContacts;\r\n }\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n sendEmail(name: string, emailAddress: string) {\r\n this.sendEmailService.teacherEmailAddress = emailAddress;\r\n this.sendEmailService.teacherName = name;\r\n this.router.navigateByUrl('/student360/sendEmail');\r\n }\r\n\r\n\r\n toggleExpanded(row: any) {\r\n // Toggles row between expanded and collapsed\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n // Return true if expanded and false if collapsed\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n // Expand or collapse all rows\r\n // true => expand all false => collapse all\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n\r\n getParentContactTableData(parentType: string): CardStudentContact[] {\r\n return this.contacts.filter(contact => contact.ParentType == parentType);\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Contacts\r\n
\r\n
\r\n
\r\n
\r\n \r\n 0\" [contacts]=\"contacts\">\r\n
\r\n
\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {interval, Subscription} from 'rxjs';\r\nimport {Card} from '../../../card-container/card/card';\r\nimport {Student360Service} from '../../../../student360.service';\r\nimport {UserService} from '../../../../../shared-components/user/user.service';\r\nimport {StudentService} from '../../../../../shared-components/student/student.service';\r\nimport {YearService} from '../../../../../shared-components/year/year.service';\r\nimport {StudentSummaryService} from '../../../student-summary.service';\r\nimport {LoginService} from '../../../../../shared-modules/login/login.service';\r\nimport {CardStudentContact} from './card-student-contact';\r\n\r\n@Component({\r\n selector: 'app-contacts-card',\r\n templateUrl: './contacts-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./contacts-card.component.css']\r\n})\r\nexport class ContactsCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n contacts: CardStudentContact[] = [];\r\n\r\n constructor(\r\n private student360Service: Student360Service,\r\n private userService: UserService,\r\n private cdr: ChangeDetectorRef,\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private studentSummaryService: StudentSummaryService,\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.card = this.data;\r\n if (this.card.display != 'Off') {\r\n const schoolIdStream = interval(100).subscribe(x => {\r\n if (this.studentService.studentEnrollment !== undefined) {\r\n this.getStudentContacts();\r\n schoolIdStream.unsubscribe();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n getStudentContacts() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardStudentContacts(this.studentService.selectedStudent.Id, schoolId, this.yearService.student360Year.AYIdentifier, this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n this.contacts = response.body;\r\n this.updateView();\r\n }\r\n });\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Student Schedule - Staff View\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {{term.CodeDescription}}\r\n \r\n \r\n \r\n
\r\n
\r\n Include dropped classes\r\n
\r\n
\r\n \r\n \r\n \r\n Meets\r\n {{sr.Meets}}\r\n \r\n\r\n \r\n \r\n Term\r\n {{sr.Term}}\r\n \r\n\r\n \r\n \r\n Name\r\n {{sr.Course}}\r\n \r\n\r\n \r\n \r\n Course-Section\r\n {{sr.SubjectCode}}-{{sr.Section}}\r\n \r\n\r\n \r\n \r\n \r\n Entry\r\n \r\n \r\n {{sr.EntryDate | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Dropped\r\n \r\n \r\n {{sr.DroppedDate | date:'MM/dd/yyyy'}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\nimport { ClassroomTerm } from '../../../../../classroom360/classroom-summary/models/classroom-term.model';\r\nimport { ClassroomSummaryService } from '../../../../../classroom360/classroom-summary/classroom-summary.service';\r\nimport { CourseSchedule } from '../../../../../shared-components/student/course-schedule.model';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { Student } from '../../../../../shared-components/student/student.model';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-staff-student-schedule-card',\r\n templateUrl: './staff-student-schedule-card.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./staff-student-schedule-card.component.css']\r\n})\r\nexport class StaffStudentScheduleCardComponent implements OnInit, OnDestroy {\r\n\r\n @Input() data: any;\r\n termOptions: ClassroomTerm[];\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n showDropped = false;\r\n // Angular Material Table\r\n displayedColumns: string[] = ['Meets', 'Term', 'CourseName', 'CourseSection', 'EntryDate', 'DroppedDate'];\r\n selectedTermId: number;\r\n studentSchedules: CourseSchedule[] = [];\r\n studentSchedule: CourseSchedule[] = [];\r\n constructor(\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private cdr: ChangeDetectorRef,\r\n private router: Router,\r\n private classroomSummaryService: ClassroomSummaryService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.selectedTermId = 0;\r\n this.termOptions = this.classroomSummaryService.terms;\r\n this.card = this.data;\r\n this.getStudentSchedule();\r\n }\r\n\r\n getStudentSchedule() {\r\n this.studentSchedules = [];\r\n let viewOption = 3;\r\n let termId = 0;\r\n let nextSchoolDay = false;\r\n if (this.selectedTermId == -1) { // Today\r\n viewOption = 1;\r\n } else if (this.selectedTermId == -2) { // Next School day\r\n viewOption = 2;\r\n nextSchoolDay = true;\r\n } else if (this.selectedTermId == -3) { // This Week\r\n viewOption = 2;\r\n } else if (this.selectedTermId == 0) { // All Term\r\n viewOption = 3;\r\n } else if (this.selectedTermId > 0) { // Selected term\r\n viewOption = 3;\r\n termId = this.selectedTermId;\r\n }\r\n\r\n this.studentService.getStudentSchedule(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id, viewOption, undefined, undefined, true, true, true, undefined, termId, nextSchoolDay).subscribe(data => {\r\n this.studentSchedules = data;\r\n if (!this.showDropped) {\r\n this.studentSchedule = this.studentSchedules.filter(ar => ar.DroppedDate.toString() == '0001-01-01T00:00:00');\r\n } else {\r\n this.studentSchedule = _.cloneDeep(this.studentSchedules);\r\n }\r\n this.updateView();\r\n });\r\n }\r\n\r\n termChange() {\r\n this.getStudentSchedule();\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n goToStudentSchedule() {\r\n this.router.navigateByUrl('/student360/schedule?studentPortal=true');\r\n }\r\n\r\n hideShowDropped() {\r\n if (!this.showDropped) {\r\n this.studentSchedule = this.studentSchedules.filter(ar => ar.DroppedDate.toString() == '0001-01-01T00:00:00');\r\n } else {\r\n this.studentSchedule = _.cloneDeep(this.studentSchedules);\r\n }\r\n this.updateView();\r\n }\r\n\r\n updateView() {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n Communication Log\r\n
\r\n 10 most recent entries\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Show entries created by\r\n all staff\r\n
\r\n
\r\n No Communication Log available.\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n Date/Time\r\n {{element.Date|date:'MM/dd/yy h:mm a'}}\r\n \r\n\r\n \r\n Contact Person\r\n \r\n \r\n {{getContectPerson(element.ContactPersonId)}}\r\n \r\n \r\n\r\n \r\n Contacted By\r\n {{element.StaffName}}\r\n \r\n\r\n \r\n Subject\r\n \r\n \r\n {{element.Subject}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n Comments
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n 0 && checkExpanded(row) ? 'expanded' : 'collapsed'\"\r\n (@detailExpand.start)=\"$event.toState == 'expanded' ? dataSource.setVisible(row, true) : null\"\r\n (@detailExpand.done)=\"$event.toState == 'collapsed' ? dataSource.setVisible(row, false) : null\"\r\n style=\"overflow: hidden;\" class=\"mat-detail-row\">\r\n \r\n
\r\n
\r\n
\r\n \r\n
","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../../../../shared-components/angular-material/mat-animations';\r\nimport { Lookup } from '../../../../../shared-components/lookup/lookup.model';\r\nimport { LookupService } from '../../../../../shared-components/lookup/lookup.service';\r\nimport { SecurityService } from '../../../../../shared-components/security/security.service';\r\nimport { StudentService } from '../../../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../../../shared-components/user/user.service';\r\nimport { YearService } from '../../../../../shared-components/year/year.service';\r\nimport { CommunicationLogService } from '../../../../../shared-modules/communication-log/communication-log.service';\r\nimport { CommunicationLog } from '../../../../../shared-modules/communication-log/models/communication-log.model';\r\nimport { Card } from '../../../card-container/card/card';\r\nimport { StudentSummaryService } from '../../../student-summary.service';\r\n\r\n@Component({\r\n selector: 'app-communication-log-card',\r\n templateUrl: './communication-log-card.component.html',\r\n animations: [detailExpand],\r\n styleUrls: ['./communication-log-card.component.css']\r\n})\r\nexport class CommunicationLogCardComponent implements OnInit, OnDestroy {\r\n @Input() data: any;\r\n subscriptions: Subscription[] = [];\r\n card: Card;\r\n showAllStaffEntries: boolean;\r\n communicationLogs: CommunicationLog[] = [];\r\n communicationLogPersonCodes: Lookup[];\r\n isShow: boolean;\r\n isShowStaffOption: boolean;\r\n isLookupExists: boolean;\r\n dataSource: TylerMatTableDataSource = new TylerMatTableDataSource();\r\n displayedColumns: string[] = ['More', 'DateTime', 'ContactPerson', 'ContactBy', 'Subject'];\r\n showDropped = true;\r\n isExpandAll = false;\r\n constructor(\r\n private router: Router,\r\n private studentService: StudentService,\r\n private communicationLogService: CommunicationLogService,\r\n private yearService: YearService,\r\n private lookupService: LookupService,\r\n private securityService: SecurityService,\r\n private userService: UserService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.card = this.data;\r\n this.communicationLogs = [];\r\n this.getCommunicationLog();\r\n this.getCommunicationLogPersonCodesLookup();\r\n setTimeout(() => {\r\n const tmpSelectedSchool = this.yearService.allDistrictSchools.find(b11 => b11.SchoolCode.toLowerCase() == this.studentService.studentEnrollment.SchoolCode.toLowerCase());\r\n this.userService.getUserPermissions(\r\n this.yearService.student360Year.Id, (tmpSelectedSchool && tmpSelectedSchool.Id) ? tmpSelectedSchool.Id : -1\r\n ).subscribe(permissions => {\r\n const isShowAllStaff = permissions.filter(a1 => a1.PermissionCode == 'GO_VAUPL');\r\n if (isShowAllStaff && isShowAllStaff != undefined && isShowAllStaff != null && isShowAllStaff.length) {\r\n this.isShowStaffOption = true;\r\n this.showAllStaffEntries = true;\r\n }\r\n else {\r\n this.showAllStaffEntries = false;\r\n this.displayedColumns = ['More', 'DateTime', 'ContactPerson', 'Subject'];\r\n }\r\n });\r\n }, 500);\r\n }\r\n\r\n getCommunicationLog() {\r\n this.communicationLogService.getCommunicationLog(this.yearService.student360Year.Id, this.yearService.defaultYear.SchoolID, this.studentService.selectedStudent ? this.studentService.selectedStudent.Id : 0,\r\n this.showAllStaffEntries ? 0 : 1, 0, true, '', false, true).subscribe(result => {\r\n this.communicationLogs = result;\r\n if (this.isLookupExists) {\r\n this.dataSource.data = this.communicationLogs;\r\n }\r\n });\r\n }\r\n\r\n getCommunicationLogPersonCodesLookup() {\r\n this.subscriptions.push(\r\n this.lookupService.getCommunicationLogPersonCodesLookup().subscribe(result => {\r\n this.communicationLogPersonCodes = result;\r\n this.dataSource.data = this.communicationLogs;\r\n this.isLookupExists = true;\r\n if (this.communicationLogs.length > 0) {\r\n this.isShow = true;\r\n }\r\n else {\r\n this.isShow = false;\r\n }\r\n })\r\n );\r\n }\r\n\r\n goToCommunication() {\r\n this.router.navigateByUrl('/classroom360/communicationLog?studentPortal=true');\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n hideShowStaffCol() {\r\n if (this.showAllStaffEntries) {\r\n this.displayedColumns = ['More', 'DateTime', 'ContactPerson', 'ContactBy', 'Subject'];\r\n }\r\n else {\r\n this.displayedColumns = ['More', 'DateTime', 'ContactPerson', 'Subject'];\r\n }\r\n this.getCommunicationLog();\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.dataSource.checkExpanded(row);\r\n }\r\n\r\n toggleExpanded(row) {\r\n if (row.ID != 0) {\r\n this.dataSource.toggleExpanded(row);\r\n }\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.dataSource.rowKeyPress(event, row);\r\n }\r\n\r\n getContectPerson(value) {\r\n if (this.communicationLogPersonCodes && this.communicationLogPersonCodes.length) {\r\n return this.communicationLogPersonCodes.find(a => a.Id == value) ? this.communicationLogPersonCodes.find(a => a.Id == value).Code : '';\r\n }\r\n }\r\n\r\n toTrustedHtml(htmlCode, replaceEnterWithBR, splitEnterAndBR) {\r\n if (htmlCode != null && replaceEnterWithBR == true) {\r\n htmlCode = JSON.parse(JSON.stringify(htmlCode)).replace(new RegExp('\\n', 'g'), '
');\r\n if (splitEnterAndBR == true) {\r\n htmlCode = htmlCode.replace(new RegExp('
', 'g'), ' ');\r\n htmlCode = htmlCode.replace(new RegExp('

', 'g'), ' ');\r\n htmlCode = htmlCode.replace(new RegExp('

', 'g'), ' ');\r\n htmlCode = htmlCode.replace(new RegExp('\\n', 'g'), ' ');\r\n }\r\n }\r\n return htmlCode;\r\n }\r\n\r\n expandAll() {\r\n this.isExpandAll = !this.isExpandAll;\r\n for (const row of this.dataSource.data) {\r\n row.detailRow = this.isExpandAll;\r\n }\r\n }\r\n}\r\n","import {Component, ComponentFactoryResolver, Input, OnInit, ViewChild, ViewContainerRef} from '@angular/core';\r\nimport {CardTemplateComponent} from '../card-template/card-template.component';\r\nimport {AnnouncementCardComponent} from '../../cards/student/announcement-card/announcement-card.component';\r\nimport {AttendanceCardComponent} from '../../cards/student/attendance-card/attendance-card.component';\r\nimport {AssignmentsCardComponent} from '../../cards/student/assignments-card/assignments-card.component';\r\nimport {CurrentGradesCardComponent} from '../../cards/student/current-grades-card/current-grades-card.component';\r\nimport {DistrictDefinedLinksCardComponent} from '../../cards/student/district-defined-links-card/district-defined-links-card.component';\r\nimport {FeesBillingCardComponent} from '../../cards/student/fees-billing-card/fees-billing-card.component';\r\nimport {MealServiceCardComponent} from '../../cards/student/meal-service-card/meal-service-card.component';\r\nimport {StudentScheduleCardComponent} from '../../cards/student/student-schedule-card/student-schedule-card.component';\r\nimport {UpcomingEventsCardComponent} from '../../cards/student/upcoming-events-card/upcoming-events-card.component';\r\nimport {Card} from './card';\r\nimport {CalendarCardComponent} from '../../cards/student/calendar-card/calendar-card.component';\r\nimport {AttendanceHistoryCardComponent} from '../../cards/staff/attendance-history-card/attendance-history-card.component';\r\nimport {StudentTeamsCardComponent} from '../../cards/staff/student-teams-card/student-teams-card.component';\r\nimport {StudentNotesCardComponent} from '../../cards/staff/student-notes-card/student-notes-card.component';\r\nimport {BehaviorCardComponent} from '../../cards/staff/behavior-card/behavior-card.component';\r\nimport {ProgramsAndServicesCardComponent} from '../../cards/staff/programs-and-services-card/programs-and-services-card.component';\r\nimport {StudentDetailsCardComponent} from '../../cards/staff/student-details-card/student-details-card.component';\r\nimport {EnrollmentCardComponent} from '../../cards/staff/enrollment-card/enrollment-card.component';\r\nimport {ContactsCardComponent} from '../../cards/staff/contacts-card/contacts-card.component';\r\nimport {StaffStudentScheduleCardComponent} from '../../cards/staff/staff-student-schedule-card/staff-student-schedule-card.component';\r\nimport { CommunicationLogCardComponent } from '../../cards/staff/communication-log-card/communication-log-card.component';\r\n\r\n@Component({\r\n selector: 'app-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.css']\r\n})\r\nexport class CardComponent implements OnInit {\r\n\r\n @Input() card: Card;\r\n @ViewChild('container', { read: ViewContainerRef, static: true }) private container: ViewContainerRef;\r\n readonly templateMapper = {\r\n announcementCard: AnnouncementCardComponent,\r\n attendanceCard: AttendanceCardComponent,\r\n assignmentsCard: AssignmentsCardComponent,\r\n currentGradesCard: CurrentGradesCardComponent,\r\n districtDefinedLinksCard: DistrictDefinedLinksCardComponent,\r\n feesAndBillingCard: FeesBillingCardComponent,\r\n mealServiceCard: MealServiceCardComponent,\r\n studentScheduleCard: StudentScheduleCardComponent,\r\n upcomingEventsCard: UpcomingEventsCardComponent,\r\n calendarCard: CalendarCardComponent,\r\n attendanceHistoryCard: AttendanceHistoryCardComponent,\r\n studentTeamsCard: StudentTeamsCardComponent,\r\n studentNotesCard: StudentNotesCardComponent,\r\n behaviorCard: BehaviorCardComponent,\r\n programsAndServicesCard: ProgramsAndServicesCardComponent,\r\n studentDetailsCard: StudentDetailsCardComponent,\r\n enrollmentCard: EnrollmentCardComponent,\r\n contactsCard: ContactsCardComponent,\r\n staffStudentScheduleCard: StaffStudentScheduleCardComponent,\r\n communicationLogCard: CommunicationLogCardComponent\r\n };\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {\r\n }\r\n\r\n ngOnInit() {\r\n this.loadCards();\r\n }\r\n\r\n private getComponentForCardType(component) {\r\n return this.templateMapper[component];\r\n }\r\n\r\n loadCards() {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.getComponentForCardType(this.card.component));\r\n const viewContainerRef = this.container;\r\n viewContainerRef.clear();\r\n const componentRef = viewContainerRef.createComponent(componentFactory);\r\n (componentRef.instance).data = this.card;\r\n }\r\n}\r\n","
\r\n \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, OnInit} from '@angular/core';\r\nimport {UserService} from '../../../shared-components/user/user.service';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-card-container',\r\n templateUrl: './card-container.component.html',\r\n styleUrls: ['./card-container.component.css']\r\n})\r\nexport class CardContainerComponent implements OnInit {\r\n cardsLeft: any[];\r\n cardsRight: any[];\r\n cardsSorted = false;\r\n\r\n constructor(private userService: UserService) {\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n refreshCards() {\r\n const cards = _.cloneDeep(this.userService.cards);\r\n this.userService.cards = [];\r\n this.userService.cards = cards;\r\n this.filterCards(cards);\r\n }\r\n\r\n filterCards(cards) {\r\n this.cardsSorted = false;\r\n if (this.userService.userType != 1) {\r\n // If the user is not staff remove the staff only cards\r\n cards = cards.filter(card => !card.staffOnly);\r\n }\r\n // Sort cards into left and right columns\r\n this.cardsLeft = cards.filter(card => card.columnPosition == 'L' && card.display != 'Off');\r\n this.cardsRight = cards.filter(card => card.columnPosition == 'R' && card.display != 'Off');\r\n // Sort cards in each column based on position\r\n this.cardsLeft = this.cardsLeft.sort(function (a, b) {\r\n if (a.position < b.position) {\r\n return -1;\r\n }\r\n if (a.position > b.position) {\r\n return 1;\r\n }\r\n });\r\n this.cardsRight = this.cardsRight.sort(function (a, b) {\r\n if (a.position < b.position) {\r\n return -1;\r\n }\r\n if (a.position > b.position) {\r\n return 1;\r\n }\r\n });\r\n this.cardsSorted = true;\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\n\r\n@Component({\r\n selector: 'app-welcome-modal',\r\n templateUrl: './welcome-modal.component.html',\r\n styleUrls: ['./welcome-modal.component.css']\r\n})\r\nexport class WelcomeModalComponent implements OnInit {\r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n private userService: UserService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n this.userService.markWelcomeAsSeen(this.userService.currentUser.StudentId).subscribe(response => {\r\n if (response.ok) {\r\n this.dialog.close();\r\n }\r\n });\r\n }\r\n}\r\n","
\r\n Welcome!\r\n
\r\n
\r\n
\r\n Here are a couple of things to help get you started.\r\n
\r\n
    \r\n
  1. \r\n

    \r\n On the homepage, the menu is always visible on the left side of the screen. On other pages, the menu can be accessed by selecting the menu icon in the upper left corner of the screen:\r\n

    \r\n
    \r\n \r\n
    \r\n
  2. \r\n
  3. \r\n

    \r\n You may choose what information is shown on the Home page by using the Settings panel, accessed by selecting the Settings button in the upper right corner of the screen:\r\n

    \r\n \r\n
  4. \r\n
\r\n
\r\n
\r\n \r\n
\r\n","
\r\n
\r\n 0\">New Announcements \r\n Daily Announcements \r\n
\r\n \r\n \r\n
0\">\r\n
0\">\r\n \r\n \r\n

{{sectionNames[i]}}

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

{{school}}

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
0 && announcements.length === 0\">\r\n \r\n \r\n

{{sectionNames[i]}}

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

{{school}}

\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n
","import { Component, ElementRef, Inject, OnInit, QueryList, ViewChildren, EventEmitter } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CardAnnouncement } from '../cards/student/announcement-card/card-announcement';\r\nimport { CardAnnouncementModalComponent } from '../cards/student/announcement-card/card-announcement-modal/card-announcement-modal.component';\r\nimport { StudentSummaryService } from '../student-summary.service';\r\nimport { Router } from '@angular/router';\r\nimport { Announcement } from '../../../shared-modules/announcement/announcement.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\n\r\n@Component({\r\n selector: 'app-new-announcements-modal',\r\n templateUrl: './new-announcements-modal.component.html',\r\n styleUrls: ['./new-announcements-modal.component.css']\r\n})\r\nexport class NewAnnouncementsModalComponent implements OnInit {\r\n districtAnnouncements: CardAnnouncement[] = [];\r\n schoolAnnouncements: CardAnnouncement[] = [];\r\n classroomAnnouncements: CardAnnouncement[] = [];\r\n siteDailyAnnouncement: Announcement[] = [];\r\n @ViewChildren('textArea') textAreas: QueryList;\r\n\r\n showTableFlags = [false, false, false];\r\n showTableDailyFlags = [false, false, false];\r\n sectionNames = ['District Announcements', 'School Announcements', 'Class Announcements'];\r\n districtMessages: Announcement[] = [];\r\n subscriptions: Subscription[] = [];\r\n toggleAllRows: EventEmitter = new EventEmitter();\r\n tableData: TylerMatTableDataSource[] = [];\r\n tableDailyData: TylerMatTableDataSource[] = [];\r\n siteAnnouncement: TylerMatTableDataSource[] = [];\r\n siteDailyAnnouncementTable: TylerMatTableDataSource[] = [];\r\n schoolName: string[] = [];\r\n schoolNameDaily: string[] = [];\r\n constructor(private router: Router,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public announcements: any,\r\n private dialog: MatDialog,\r\n private studentSummaryService: StudentSummaryService) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.sortAnnouncementsV9();\r\n this.studentSummaryService.hasSeenNewAnnouncementModal = true;\r\n }\r\n\r\n checkOverflow(element) {\r\n return element.offsetHeight < element.scrollHeight ||\r\n element.offsetWidth < element.scrollWidth;\r\n }\r\n\r\n sortAnnouncementsV9() {\r\n this.siteDailyAnnouncement = this.announcements.filter(x => x.ShowDaily == true);\r\n this.siteDailyAnnouncementTable[0] = new TylerMatTableDataSource(this.siteDailyAnnouncement);\r\n\r\n this.announcements = this.announcements.filter(x => x.IsNewAnnouncement == true);\r\n this.siteAnnouncement[0] = new TylerMatTableDataSource(this.announcements.filter(x => x.AnnouncementType == 'S' && x.IsNewAnnouncement == true));\r\n this.siteAnnouncement[0].data.forEach(obj => {\r\n if (this.schoolName.length > 0) {\r\n if (!this.schoolName.includes(obj.SchoolName)) {\r\n this.schoolName.push(obj.SchoolName);\r\n }\r\n }\r\n else {\r\n this.schoolName.push(obj.SchoolName);\r\n }\r\n });\r\n this.siteDailyAnnouncementTable[0].data.filter(x => x.AnnouncementType == 'S').forEach(obj => {\r\n if (this.schoolNameDaily.length > 0) {\r\n if (!this.schoolNameDaily.includes(obj.SchoolName)) {\r\n this.schoolNameDaily.push(obj.SchoolName);\r\n }\r\n }\r\n else {\r\n this.schoolNameDaily.push(obj.SchoolName);\r\n }\r\n });\r\n this.tableData[1] = this.siteAnnouncement[0];\r\n this.tableDailyData[1] = this.siteDailyAnnouncementTable[0];\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n this.tableDailyData[0].expandAll(toggle);\r\n this.tableDailyData[1].expandAll(toggle);\r\n this.tableDailyData[2].expandAll(toggle);\r\n })\r\n );\r\n this.subscriptions.push(\r\n this.toggleAllRows.subscribe(toggle => {\r\n this.tableData[0].expandAll(toggle);\r\n this.tableData[1].expandAll(toggle);\r\n this.tableData[2].expandAll(toggle);\r\n })\r\n );\r\n this.virtualizeDaily();\r\n this.virtualize();\r\n }\r\n\r\n virtualize() {\r\n // POST: transforms announcements into grid data\r\n\r\n // District student announcements\r\n const districtData = this.filterAnnouncements(this.announcements, 'D');\r\n this.tableData[0] = new TylerMatTableDataSource(districtData);\r\n this.showTableFlags[0] = districtData.length > 0;\r\n\r\n // School staff announcements\r\n // const schoolData = this.filterAnnouncements(this.announcements, 'S');\r\n // this.tableData[1] = new TylerMatTableDataSource(schoolData);\r\n // this.showTableFlags[1] = schoolData.length > 0;\r\n\r\n // Class staff announcements\r\n const classData = this.filterAnnouncements(this.announcements, 'C');\r\n this.tableData[2] = new TylerMatTableDataSource(classData);\r\n this.showTableFlags[2] = classData.length > 0;\r\n\r\n // District Message\r\n this.districtMessages = this.filterAnnouncements(this.announcements, 'M');\r\n }\r\n\r\n virtualizeDaily() {\r\n const districtData = this.filterAnnouncements(this.siteDailyAnnouncement, 'D');\r\n this.tableDailyData[0] = new TylerMatTableDataSource(districtData);\r\n this.showTableDailyFlags[0] = districtData.length > 0;\r\n\r\n // Class staff announcements\r\n const classData = this.filterAnnouncements(this.siteDailyAnnouncement, 'C');\r\n this.tableDailyData[2] = new TylerMatTableDataSource(classData);\r\n this.showTableDailyFlags[2] = classData.length > 0;\r\n }\r\n\r\n private filterAnnouncements(announcements: Announcement[], type: string) {\r\n // PRE: a list of announcements and a single character type indicator\r\n // POST: filters the announcements for a given type. Returns those announcements whose type matches.\r\n return announcements.filter(function (announcement: Announcement) {\r\n return announcement.AnnouncementType == type;\r\n });\r\n }\r\n\r\n closeClick() {\r\n if (this.siteDailyAnnouncement.length > 0 && this.announcements.length == 0) {\r\n this.dialogRef.close();\r\n }\r\n else {\r\n this.announcements = [];\r\n if (this.siteDailyAnnouncement.length == 0) {\r\n this.dialogRef.close();\r\n }\r\n }\r\n }\r\n\r\n moreClick(announcement: CardAnnouncement) {\r\n this.dialog.open(CardAnnouncementModalComponent, {\r\n data: announcement,\r\n disableClose: true,\r\n autoFocus: false,\r\n minWidth: '500px',\r\n maxWidth: '700px',\r\n maxHeight: '400px',\r\n minHeight: '300px'\r\n });\r\n }\r\n\r\n allAnnouncementsClick() {\r\n this.dialogRef.close();\r\n this.router.navigateByUrl('/student360/announcements');\r\n }\r\n}\r\n","
\r\n Check In / Check Out\r\n
\r\n\r\n
{{todaysDate | date:'MM/dd/yy'}}\r\n
Use this page to notify the school if this student will be arriving late or leaving early today.
\r\n
0\">You are editing an existing request that was submitted at {{checkInOutSubmissionRequest.ProcessedTime}}
\r\n
\r\n\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
0\">\r\n
Attachment
\r\n
\r\n \r\n \r\n File Name\r\n \r\n \r\n \r\n {{AR.FileName}}\r\n \r\n \r\n \r\n \r\n Description\r\n \r\n {{AR.AttachmentDescription}}\r\n \r\n \r\n \r\n File Type\r\n \r\n {{AR.DocumentType}}\r\n \r\n \r\n \r\n Uploaded Date\r\n \r\n \r\n {{AR.AttachmentAddedOn|date:'MM/dd/yy h:mm a'}}\r\n \r\n \r\n Actions\r\n \r\n \r\n Delete\r\n \r\n \r\n\r\n \r\n \r\n \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, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport * as moment from 'moment';\r\nimport { AddAttachmentDialogComponent } from '../../../shared-components/add-attachment-dialog/add-attachment-dialog.component';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { StudentSummaryService } from '../student-summary.service';\r\nimport { CheckInOutSubmissionRequest } from './check-in-out-submission-request-modal.model';\r\n\r\n@Component({\r\n selector: 'app-check-in-out-submission-request-modal',\r\n templateUrl: './check-in-out-submission-request-modal.component.html',\r\n styleUrls: ['./check-in-out-submission-request-modal.component.css']\r\n})\r\nexport class CheckInOutSubmissionRequestModalComponent implements OnInit {\r\n todaysDate = new Date();\r\n checkInOutSubmissionRequest: CheckInOutSubmissionRequest;\r\n columnsToDisplay = ['FileName', 'Description', 'DocumentType', 'UploadedDate', 'Actions'];\r\n angularMatData = new TylerMatTableDataSource();\r\n\r\n errors: ErrorList[] = [];\r\n @ViewChild('timeInput', { read: ElementRef, static: true }) timeRef: ElementRef;\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private studentSummaryService: StudentSummaryService,\r\n private yearService: YearService) { }\r\n\r\n ngOnInit() {\r\n this.checkInOutSubmissionRequest = this.data.checkInOutRequest;\r\n this.loadAttachmentTable();\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n deleteAttachmentClick(attachmentId: number) {\r\n this.checkInOutSubmissionRequest.SubmissionAttachment.find(o => o.Id == attachmentId).Deleted = true;\r\n this.loadAttachmentTable();\r\n }\r\n\r\n saveAttachment(attachment: Attachment) {\r\n // PRE: an attachment to open\r\n // POST: takes you to the student attachment page\r\n if (attachment.FileName && !attachment.AttachmentFileName) {\r\n attachment.AttachmentFileName = attachment.FileName;\r\n }\r\n\r\n if (attachment.MyFileBase64String && attachment.AttachmentFileName && attachment.FileType) {\r\n System.viewFileFromBase(attachment.MyFileBase64String, attachment.FileType, attachment.AttachmentFileName);\r\n } else if (attachment.Id && attachment.AttachmentFileName) {\r\n System.viewFileFromId(attachment.Id, attachment.AttachmentFileName);\r\n }\r\n }\r\n\r\n addAttachmentClick() {\r\n // POST: opens a modal to add an attachment\r\n\r\n // Initializing attachment\r\n const attachment = new Attachment();\r\n attachment.Id = this.checkInOutSubmissionRequest != undefined ? -(this.checkInOutSubmissionRequest.SubmissionAttachment.length + 1) : -1;\r\n attachment.DocumentId = 0;\r\n attachment.FileName = '';\r\n attachment.Description = '';\r\n attachment.UploadedDate = new Date();\r\n attachment.MyFileBase64String = '';\r\n attachment.FileType = '';\r\n attachment.Comment = '';\r\n attachment.ViewFileOnWebsite = true;\r\n attachment.AttachmentDescription = '';\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: true,\r\n requireDocumentType: true\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n attachment.AttachmentDescription = attachment.Description;\r\n attachment.DocumentBase64 = attachment.MyFileBase64String;\r\n attachment.DocumentType = attachment.FileType;\r\n attachment.MyFileBase64String = '';\r\n this.checkInOutSubmissionRequest.SubmissionAttachment.push(attachment);\r\n this.loadAttachmentTable();\r\n }\r\n });\r\n }\r\n\r\n loadAttachmentTable() {\r\n this.angularMatData.data = this.checkInOutSubmissionRequest.SubmissionAttachment.filter(x => x.Deleted == false);\r\n }\r\n\r\n saveClick() {\r\n this.validateCheck();\r\n if (this.errors.length == 0) {\r\n this.checkInOutSubmissionRequest.Time = this.convertTime(this.checkInOutSubmissionRequest.Time);\r\n this.studentSummaryService.saveCheckInOutSubmissionRequest(this.checkInOutSubmissionRequest, this.yearService.student360Year.Id).subscribe(result => {\r\n if (result == true) {\r\n this.dialogRef.close();\r\n }\r\n });\r\n }\r\n }\r\n\r\n validateCheck() {\r\n this.errors = [];\r\n\r\n if (this.checkInOutSubmissionRequest.Time == undefined || this.checkInOutSubmissionRequest.Time == null || this.checkInOutSubmissionRequest.Time == '') {\r\n this.errors.push({\r\n fieldName: 'Time',\r\n fieldRef: this.timeRef,\r\n errorMsg: ' is required.'\r\n });\r\n }\r\n\r\n if (this.checkInOutSubmissionRequest.Time != undefined && this.checkInOutSubmissionRequest.Time != '') {\r\n if (this.validateTime(this.checkInOutSubmissionRequest.Time) != true) {\r\n this.errors.push({\r\n fieldName: 'Time',\r\n fieldRef: this.timeRef,\r\n errorMsg: ' Invalid Time.'\r\n });\r\n }\r\n }\r\n\r\n const currentDate = new Date().toLocaleDateString();\r\n if ((new Date(this.yearService.student360Year.StartDate) >= new Date(currentDate)) || (new Date(this.yearService.student360Year.EndDate) <= new Date(currentDate))) {\r\n this.errors.push({\r\n fieldName: 'Today Date',\r\n fieldRef: null,\r\n errorMsg: 'Today Date must be within the academic year.'\r\n });\r\n }\r\n }\r\n\r\n validateTime(time) {\r\n const hourIndex = time.toString().indexOf(':');\r\n if (hourIndex == -1) {\r\n return false;\r\n }\r\n else {\r\n const hourValue = time.substring(0, hourIndex);\r\n if (!$.isNumeric(hourValue)) {\r\n return false;\r\n }\r\n else {\r\n if (hourValue[0] == '0' || hourValue >= 13 && hourValue <= 24) {\r\n if ((time.toLowerCase().indexOf('am') != -1 || time.toLowerCase().indexOf('pm') != -1) && hourValue > 12) {\r\n return false;\r\n }\r\n else {\r\n return System.validate24HourTime(time.toLowerCase().replace(' ', '').replace('am', '').replace('pm', ''));\r\n }\r\n }\r\n else {\r\n if (hourValue < 10) {\r\n if (time.toLowerCase().indexOf('pm') == -1 && time.toLowerCase().indexOf('am') == -1) {\r\n return System.validate12HourTime('0' + time + ' AM');\r\n }\r\n else {\r\n return System.validate12HourTime('0' + time);\r\n }\r\n }\r\n else {\r\n if (time.toLowerCase().indexOf('pm') == -1 && time.toLowerCase().indexOf('am') == -1) {\r\n return System.validate12HourTime(time + ' AM');\r\n }\r\n else {\r\n return System.validate12HourTime(time);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n convertTime(time) {\r\n if (time.indexOf(':') == 1) {\r\n time = '0' + time;\r\n }\r\n let ampm = '';\r\n if (time.toLowerCase().indexOf('pm') > -1) { ampm = ' PM'; }\r\n else if (time.toLowerCase().indexOf('am') > -1) { ampm = ' AM'; }\r\n\r\n time = time.toLowerCase().replace('am', '').replace('pm', '');\r\n time = time.toString().trim().match(/^([01]\\d|2[0-3])(:)([0-5]\\d)(:[0-5]\\d)?$/) || [time];\r\n if (time.length > 1) { // If time format correct\r\n time = time.slice(1); // Remove full string match value\r\n time[5] = ampm != '' ? ampm : (+time[0] < 12 ? ' AM' : ' PM'); // Set AM/PM\r\n time[0] = +time[0] % 12 || 12; // Adjust hours\r\n }\r\n if (time[0] < 10) {\r\n time[0] = '0' + time[0];\r\n }\r\n\r\n\r\n return time.join('');\r\n }\r\n\r\n}\r\n","import { Attachment } from '../../../shared-components/models/attachment.model';\r\n\r\nexport class CheckInOutButtonSettings {\r\n AllowParentEnterCheckInOut: boolean;\r\n AllowParentEnterCheckInOutMobile: boolean;\r\n AllowParentEnterAbsentNotice: boolean;\r\n AllowStudentEnterCheckInOut: boolean;\r\n AllowStudentEnterCheckInOutMobile: boolean;\r\n AllowStudentEnterAbsentNotice: boolean;\r\n }\r\n\r\n export class CheckInOutSubmissionRequest {\r\n Id = 0;\r\n StudentId: number;\r\n Type = 'I';\r\n Time = '';\r\n Reason = '';\r\n SubmissionAttachment: Attachment[] = [];\r\n ProcessedTime = '';\r\n Date: Date;\r\n Status = '';\r\n Attachment: boolean;\r\n SubmittedBy = '';\r\n }\r\n","

\r\n
\r\n WARNING\r\n
\r\n

\r\n\r\n
\r\n
\r\n The following dates are not school days for this student:\r\n
\r\n
\r\n
    \r\n
  • \r\n {{date | date: 'fullDate'}}\r\n
  • \r\n
\r\n
\r\n
\r\n If this is correct, select Continue. Otherwise, select Cancel and change the dates.\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n \r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-non-school-day-warning',\r\n templateUrl: './non-school-day-warning.component.html'\r\n})\r\nexport class NonSchoolDayWarningComponent implements OnInit {\r\n\r\n dates: Date[];\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialogRef,\r\n ) {\r\n if (data) {\r\n this.dates = data.dates;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n continueClick() {\r\n this.dialog.close(true);\r\n }\r\n\r\n cancelClick() {\r\n this.dialog.close(false);\r\n }\r\n\r\n}\r\n","
\r\n Absence Notice\r\n
\r\n\r\n
\r\n
Use this page to notify the school of an upcoming full day or multi-day absence for this student.
\r\n
0\">You are editing an existing notice that was submitted on {{absentNotice.LastUpdated | date:'MM/dd/yy'}} at {{absentNotice.LastUpdated | date:'h:mm a'}}
\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
0\">\r\n
Attachment
\r\n
\r\n \r\n \r\n Description\r\n {{AR.AttachmentDescription}}\r\n \r\n \r\n File Name\r\n \r\n \r\n {{AR.FileName}}\r\n \r\n \r\n \r\n \r\n Uploaded\r\n \r\n {{AR.AttachmentAddedOn|date:'MM/dd/yy'}}\r\n \r\n \r\n Uploaded By\r\n \r\n {{AR.AttachmentAddedBy}}\r\n \r\n \r\n \r\n Actions\r\n \r\n Delete\r\n \r\n \r\n\r\n \r\n \r\n \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, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { take } from 'rxjs/operators';\r\nimport * as moment from 'moment';\r\nimport { AttendanceAdministrationService } from '../../../admin360/attendance-administration/attendance-administration.service';\r\nimport { AbsentNotice } from '../../../admin360/attendance-administration/review-absent-notices/absent-notice.model';\r\nimport { ReviewAbsentNoticesService } from '../../../admin360/attendance-administration/review-absent-notices/review-absent-notices.service';\r\nimport { AddAttachmentDialogComponent } from '../../../shared-components/add-attachment-dialog/add-attachment-dialog.component';\r\nimport { TylerMatTableDataSource } from '../../../shared-components/angular-material/extended.class';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { Attachment } from '../../../shared-components/models/attachment.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { YearService } from '../../../shared-components/year/year.service';\r\nimport { StudentSummaryService } from '../student-summary.service';\r\nimport { StudentService } from '../../../shared-components/student/student.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { NonSchoolDayWarningComponent } from './non-school-day-warning/non-school-day-warning.component';\r\n\r\n@Component({\r\n selector: 'app-absent-notice-submission-modal',\r\n templateUrl: './absent-notice-submission-modal.component.html',\r\n styleUrls: ['./absent-notice-submission-modal.component.css']\r\n})\r\nexport class AbsentNoticeSubmissionModalComponent implements OnInit {\r\n absentNotice: AbsentNotice;\r\n columnsToDisplay = ['Description', 'FileName', 'UploadedDate', 'UploadedBy', 'Actions'];\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild('startDateInput', { read: ElementRef, static: true }) startDateRef: ElementRef;\r\n @ViewChild('endDateInput', { read: ElementRef, static: true }) endDateRef: ElementRef;\r\n\r\n errors: ErrorList[] = [];\r\n\r\n constructor(private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialog: MatDialog,\r\n private absentNoticesService: ReviewAbsentNoticesService,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private attendanceAdminService: AttendanceAdministrationService) { }\r\n\r\n ngOnInit() {\r\n this.absentNotice = this.data.absentNotice;\r\n // Guarantees the dates will actually be a Date type (Javascript...)\r\n this.absentNotice.StartDate = new Date(this.absentNotice.StartDate);\r\n this.absentNotice.EndDate = new Date(this.absentNotice.EndDate);\r\n this.loadAttachmentTable();\r\n }\r\n\r\n cancelClick() {\r\n this.dialogRef.close();\r\n }\r\n\r\n deleteAttachmentClick(attachmentId: number) {\r\n this.absentNotice.Attachments.find(o => o.Id == attachmentId).Deleted = true;\r\n this.loadAttachmentTable();\r\n }\r\n\r\n saveAttachment(attachment: Attachment) {\r\n // PRE: an attachment to open\r\n // POST: takes you to the student attachment page\r\n if (attachment.FileName && !attachment.AttachmentFileName) {\r\n attachment.AttachmentFileName = attachment.FileName;\r\n }\r\n\r\n if (attachment.MyFileBase64String && attachment.AttachmentFileName && attachment.FileType) {\r\n System.viewFileFromBase(attachment.MyFileBase64String, attachment.FileType, attachment.AttachmentFileName);\r\n } else if (attachment.Id && attachment.AttachmentFileName) {\r\n System.viewFileFromId(attachment.Id, attachment.AttachmentFileName);\r\n }\r\n }\r\n\r\n addAttachmentClick() {\r\n // POST: opens a modal to add an attachment\r\n\r\n // Initializing attachment\r\n const attachment = new Attachment();\r\n attachment.Id = this.absentNotice != undefined ? -(this.absentNotice.Attachments.length + 1) : -1;\r\n attachment.DocumentId = 0;\r\n attachment.FileName = '';\r\n attachment.Description = '';\r\n attachment.UploadedDate = new Date();\r\n attachment.MyFileBase64String = '';\r\n attachment.FileType = '';\r\n attachment.Comment = '';\r\n attachment.ViewFileOnWebsite = true;\r\n attachment.AttachmentDescription = '';\r\n\r\n // Opening modal\r\n const dialogBox = this.dialog.open(AddAttachmentDialogComponent, {\r\n data: {\r\n attachment: attachment,\r\n newAttachment: true,\r\n requireDocumentType: true,\r\n allowedFileTypes: ['pdf', 'jpg', 'jpeg', 'png', 'txt', 'doc', 'docx', 'xls', 'xlsx'],\r\n fileTypeErrorMessageText: 'Only .txt, .doc(x), .xls(x), .pdf, .jpg, and .png files can be uploaded.'\r\n },\r\n disableClose: true\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n if (dialogBox.componentInstance.saved) {\r\n attachment.AttachmentDescription = attachment.Description;\r\n attachment.DocumentBase64 = attachment.MyFileBase64String;\r\n attachment.AttachmentAddedBy = this.userService.currentUser.LastName + ', ' + this.userService.currentUser.FirstName;\r\n attachment.DocumentType = attachment.FileType;\r\n attachment.MyFileBase64String = '';\r\n this.absentNotice.Attachments.push(attachment);\r\n this.loadAttachmentTable();\r\n }\r\n });\r\n }\r\n\r\n loadAttachmentTable() {\r\n this.angularMatData.data = this.absentNotice.Attachments.filter(x => x.Deleted == false);\r\n }\r\n\r\n saveClick() {\r\n this.validateCheck(() => {\r\n if (this.errors.length == 0) {\r\n this.absentNoticesService.saveAbsentNotice(this.absentNotice).subscribe(result => {\r\n if (result) {\r\n this.dialogRef.close();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n validateCheck(_callBack) {\r\n this.errors = [];\r\n\r\n if (this.absentNotice.StartDate == null || !moment(this.absentNotice.StartDate).isValid()) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.startDateRef,\r\n errorMsg: 'You must specify a Start Date'\r\n });\r\n }\r\n\r\n if (this.absentNotice.StartDate && (moment(this.absentNotice.StartDate).isBefore(this.yearService.student360Year.StartDate) || moment(this.absentNotice.StartDate).isAfter(this.yearService.student360Year.EndDate))) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.startDateRef,\r\n errorMsg: 'Start Date must be within the current academic year'\r\n });\r\n }\r\n\r\n if (this.absentNotice.StartDate && (moment(this.absentNotice.StartDate).isBefore(this.studentService.studentEnrollment.EnrollmentDate))) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.startDateRef,\r\n errorMsg: 'Start Date cannot be prior to student\\'s enrollment date'\r\n });\r\n }\r\n\r\n if (this.absentNotice.EndDate == null || !moment(this.absentNotice.EndDate).isValid()) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.endDateRef,\r\n errorMsg: 'You must specify a End Date'\r\n });\r\n }\r\n\r\n if (this.absentNotice.EndDate && (moment(this.absentNotice.EndDate).isBefore(this.yearService.student360Year.StartDate) || moment(this.absentNotice.EndDate).isAfter(this.yearService.student360Year.EndDate))) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.endDateRef,\r\n errorMsg: 'End Date must be within the current academic year'\r\n });\r\n }\r\n\r\n if (this.absentNotice.EndDate && this.absentNotice.StartDate && moment(this.absentNotice.StartDate).isAfter(this.absentNotice.EndDate)) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.endDateRef,\r\n errorMsg: 'End Date must be after the Start Date'\r\n });\r\n }\r\n\r\n if (this.errors.length == 0) {\r\n this.attendanceAdminService.getSchoolDaysBetweenDates(this.studentService.studentEnrollment.SiteYearId, this.absentNotice.StartDate.toLocaleDateString(), this.absentNotice.EndDate.toLocaleDateString(), this.absentNotice.StudentId).pipe(take(1)).subscribe(dates => {\r\n if (dates.length > 5) {\r\n this.errors.push(\r\n {\r\n fieldName: '',\r\n fieldRef: this.endDateRef,\r\n errorMsg: 'An Absent Request cannot be more than 5 school days. Please contact your school for absences longer than this period.'\r\n });\r\n }\r\n else {\r\n const nonSchoolCalenderDates: Date[] = [];\r\n const date = new Date(this.absentNotice.StartDate);\r\n let limit = 0;\r\n\r\n while (date <= this.absentNotice.EndDate && limit < 20) {\r\n limit++;\r\n if (dates.findIndex(d => moment(d, 'YYYY-MM-DD').isSame(moment(date), 'day')) == -1) {\r\n nonSchoolCalenderDates.push(new Date(date));\r\n }\r\n date.setDate(date.getDate() + 1);\r\n }\r\n\r\n if (nonSchoolCalenderDates.length > 0) {\r\n const dialogRef = this.dialog.open(NonSchoolDayWarningComponent,\r\n {\r\n data: {\r\n dates: nonSchoolCalenderDates\r\n },\r\n disableClose: true\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(confirmContinue => {\r\n if (confirmContinue) {\r\n _callBack();\r\n }\r\n });\r\n }\r\n else {\r\n _callBack();\r\n }\r\n }\r\n });\r\n }\r\n\r\n else {\r\n _callBack();\r\n }\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
0 && !defaultAcademicYear\" class=\"eventExclamationContainer\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n Required e-Forms have not been\r\n submitted ({{requiredEFormAvailable}})View\r\n
\r\n
\r\n
\r\n \r\n
0 && !defaultAcademicYear && recentOptionalEFormEvents && recentOptionalEFormEvents.Count\"\r\n class=\"eventAlertContainer\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n New optional e-Forms are availableView\r\n
\r\n \r\n
X
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {{'Course Requests may now be entered' | translate}} View\r\n
\r\n
\r\n
\r\n
\r\n \r\n
0\" class=\"eventAlertContainer\">\r\n
\r\n
\r\n \r\n
\r\n \r\n New documents published in the last seven\r\n days({{studentDocuments.length}})\r\n Attendance Letters\r\n Behavior\r\n Letters\r\n View\r\n All\r\n
\r\n \r\n
X
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n -1\">\r\n {{'Online Registration must be completed for' | translate}} \r\n -1\">{{onlineRegistrationStatus\r\n | slice:onlineRegistrationStatus.indexOf('for') + 3\r\n :onlineRegistrationStatus.length}}\r\n {{onlineRegistrationStatus\r\n | translate}}\r\n\r\n View\r\n
\r\n
\r\n
\r\n \r\n
\r\n
0\"\r\n class=\"eventAlertContainer\">\r\n
\r\n
\r\n \r\n
\r\n \r\n Behavior events in the last seven\r\n days({{recentDisciplineEvents.Count}}\r\n )View\r\n
\r\n \r\n
X
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
0\" class=\"eventAlertContainer\">\r\n
\r\n
\r\n \r\n
\r\n \r\n Health visits in the last seven\r\n days({{recentHealthEvents.Count}}\r\n )View\r\n
\r\n \r\n
X
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n","import { AfterViewInit, ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { Student360Service } from '../student360.service';\r\nimport { Portal } from '../../shared-components/portal.model';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { NavigationExtras, Router } from '@angular/router';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { StudentSummaryService } from './student-summary.service';\r\nimport { SettingsMenuModalComponent } from './settings-menu-modal/settings-menu-modal.component';\r\nimport { CardContainerComponent } from './card-container/card-container.component';\r\nimport { Enrollment } from '../../shared-components/student/enrollment.model';\r\nimport { WelcomeModalComponent } from './welcome-modal/welcome-modal.component';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport * as _ from 'lodash';\r\nimport * as moment from 'moment';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { OnlinePaymentConfiguration } from '../online-payment/models/online-payment-config.model';\r\nimport { NewAnnouncementsModalComponent } from './new-announcements-modal/new-announcements-modal.component';\r\nimport { AnnouncementService } from '../../shared-modules/announcement/announcement.service';\r\nimport { EFormService } from '../../shared-components/e-forms/e-form.service';\r\nimport { OnlineRegistrationService } from '../online-registration/online-registration.service';\r\nimport { MultipleFamiliesComponent } from '../online-registration/student-update/multiple-families/multiple-families.component';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { PermissionEnum } from '../../shared-components/security/permissions.enums';\r\nimport { StudentDocuments } from '../../shared-components/student/student-documents.model';\r\nimport { NotificationsService } from '../../admin360/notifications/notifications.service';\r\nimport { CheckInOutSubmissionRequestModalComponent } from './check-in-out-submission-request-modal/check-in-out-submission-request-modal.component';\r\nimport { CheckInOutSubmissionRequest } from './check-in-out-submission-request-modal/check-in-out-submission-request-modal.model';\r\nimport { AbsentNotice } from '../../admin360/attendance-administration/review-absent-notices/absent-notice.model';\r\nimport { AbsentNoticeSubmissionModalComponent } from './absent-notice-submission-modal/absent-notice-submission-modal.component';\r\n\r\n@AutoUnsubscribe({\r\n includeArrays: true\r\n})\r\n@Component({\r\n selector: 'studentSummary',\r\n templateUrl: './student-summary.component.html',\r\n styleUrls: ['./student-summary.component.css']\r\n})\r\nexport class StudentSummaryComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n selectedStudent: Student;\r\n studentEnrollment: Enrollment;\r\n onlineRegistrationStatus = '';\r\n subscriptions: Subscription[] = [];\r\n recentDisciplineEvents: any;\r\n recentHealthEvents: any;\r\n unmarkedOptionalEFormsEvents: boolean;\r\n userType: number;\r\n @ViewChild(CardContainerComponent, { static: true }) cardContainer: CardContainerComponent;\r\n parentAssignedPortalsSubscription: Subscription;\r\n staffAssignedPortalsSubscription: Subscription;\r\n displayORHeadline: boolean;\r\n displayCourseRequestHeadline = false;\r\n onlinePaymentConfiguration: OnlinePaymentConfiguration = new OnlinePaymentConfiguration();\r\n requiredEFormAvailable: number;\r\n optionalEFormAvailable: number;\r\n eFormsActivated: boolean;\r\n defaultAcademicYear: boolean;\r\n optionalInstanceIds = '';\r\n studentDocumentIds = '';\r\n recentOptionalEFormEvents: any;\r\n eFormHeadLinePermission = false;\r\n requiredORYear = '';\r\n portals: Portal[] = [];\r\n\r\n studentDocuments: StudentDocuments[];\r\n behaviorlatterStudentDocuments = false;\r\n attendancelatterStudentDocuments = false;\r\n\r\n displayBehaviorLetterHeadline = false;\r\n recentBehaviorLetters: any;\r\n\r\n enableCheckInOut = false;\r\n enableAbsentNotice = false;\r\n checkInOutSubmissionRequest: CheckInOutSubmissionRequest;\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private router: Router,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private yearService: YearService,\r\n private dialog: MatDialog,\r\n private ref: ChangeDetectorRef,\r\n private classroom360Service: Classroom360Service,\r\n private student360Service: Student360Service,\r\n private studentSummaryService: StudentSummaryService,\r\n private userPreferencesService: UserPreferencesService,\r\n private announcementService: AnnouncementService,\r\n private eFormService: EFormService,\r\n private onlineRegService: OnlineRegistrationService,\r\n private securityService: SecurityService,\r\n private notificationsService: NotificationsService\r\n ) {\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.userType = this.userService.userType;\r\n this.subscriptions.push(this.yearService.observableStudent360YearStream$.subscribe(student360Year => {\r\n this.getOnlineRegistrationStatus();\r\n this.cardContainer.refreshCards();\r\n }));\r\n this.subscriptions.push(this.studentService.observableStudentEnrollmentStream$.subscribe(enrollment => {\r\n if (enrollment) {\r\n this.loadStudentInfo(enrollment.StudentId);\r\n // Check for New Announcements\r\n if (this.userService.currentUser.UserType != 1) {\r\n this.getAnnouncements();\r\n this.getCheckInOutButtnSettings(enrollment.StudentId, enrollment.AcademicYearID);\r\n }\r\n this.getCourseRequestStatus();\r\n this.getBehaviorLetterEvents();\r\n } else {\r\n this.enableCheckInOut = false;\r\n this.enableAbsentNotice = false;\r\n }\r\n }));\r\n this.getOnlinePaymentConfiguration();\r\n if (this.userService.userType == 1) { // If Staff\r\n this.subscriptions.push(this.staffAssignedPortalsSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (portals.length > 0) {\r\n this.portals = portals.filter(portal => !portal.Deleted);\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.checkPortals(this.portals);\r\n }\r\n }));\r\n } else { // If Parent or Student\r\n this.subscriptions.push(this.parentAssignedPortalsSubscription = this.student360Service.observableParentAssignedPortalsStream$\r\n .subscribe(portals => {\r\n if (portals.length > 0) {\r\n this.portals = portals.filter(portal => !portal.Deleted);\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n this.checkPortals(this.portals);\r\n this.checkEFormAvailable();\r\n this.getStudentDocuments();\r\n }\r\n this.defaultAcademicYear = ((this.yearService.student360Year.Status == 1) || (this.yearService.student360Year.Status == 2)) ? false : true;\r\n }));\r\n }\r\n this.getAnnouncementsPopup();\r\n this.getOnlineRegistrationStatus();\r\n // Checking student broadcasts\r\n this.announcementService.checkBroadcast();\r\n this.notificationsService.setNotificationChecking();\r\n this.subscriptions.push(this.eFormService.observableeFormHeadLinePermissionStream$.subscribe(fieldsExist => {\r\n this.eFormHeadLinePermission = this.eFormService.eFormHeadLinePermission;\r\n }));\r\n\r\n }\r\n\r\n private getBehaviorLetterEvents() {\r\n const that = this;\r\n this.displayBehaviorLetterHeadline = false;\r\n this.studentSummaryService.getStudentRecentEvents(this.selectedStudent.Id, this.userService.currentUser.MemberId, this.yearService.student360Year.Id, this.optionalInstanceIds).subscribe(response => {\r\n if (response.ok) {\r\n that.recentBehaviorLetters = response.body.filter(rde => rde.Type == 'BehaviorLetter')[0];\r\n if (that.recentBehaviorLetters && that.recentBehaviorLetters.Count > 0) {\r\n that.displayBehaviorLetterHeadline = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.sharedService.updateIsPageLoaded(true);\r\n this.eFormHeadLinePermission = this.eFormService.eFormHeadLinePermission;\r\n }\r\n\r\n getOnlineRegistrationStatus() {\r\n if (this.userService.userType !== 1) {\r\n this.studentSummaryService.getOnlineRegistrationStatus(this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n if (response.body == '' || response.body == 'Approved' || response.body == 'Submitted') {\r\n this.displayORHeadline = false;\r\n } else {\r\n this.displayORHeadline = true;\r\n this.onlineRegistrationStatus = response.body;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n getCourseRequestStatus() {\r\n if (this.userService.userType !== 1) {\r\n this.studentSummaryService.getCourseRequestStatus(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id).subscribe((response) => {\r\n if (response.ok) {\r\n if (response.body == '' || response.body == 'Accepted') {\r\n this.displayCourseRequestHeadline = false;\r\n } else {\r\n this.displayCourseRequestHeadline = true;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n getAnnouncements() {\r\n const schoolId = this.studentService.studentEnrollment != null ? this.studentService.studentEnrollment.SchoolId : 0;\r\n this.studentSummaryService.getCardAnnouncements(this.studentService.selectedStudent.Id, this.userService.currentUser.Id, schoolId, this.userService.userType, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response.ok) {\r\n // Check for new announcements\r\n if (response.body.find(a => a.IsNewSinceLastLogin)) {\r\n // If the user has not already seen the new announcement modal\r\n if (!this.studentSummaryService.hasSeenNewAnnouncementModal) {\r\n // Show Announcements Modal\r\n // Filter out old announcements\r\n response.body = response.body.filter(announcement => announcement.IsNewSinceLastLogin == true);\r\n // Display Welcome Modal For First Time Users\r\n this.displayWelcome();\r\n }\r\n } else {\r\n this.displayWelcome();\r\n }\r\n }\r\n });\r\n }\r\n\r\n getAnnouncementsPopup() {\r\n const lastLoginDate = moment(this.userService.currentUser.LastLoggedInDate, 'YYYY-MM-DDTHH:mm:ss.SSS');\r\n if (!moment().isSame(lastLoginDate, 'day')) {\r\n this.studentSummaryService.getStudentsNewAnnouncements(this.studentService.selectedStudent.Id, this.yearService.student360Year.Id).subscribe(response => {\r\n if (response) {\r\n const newAnnouncementsBody = response.filter(a => a.IsNewAnnouncement == true || a.ShowDaily == true);\r\n if (!this.studentSummaryService.hasSeenNewAnnouncementModal && newAnnouncementsBody.length > 0) {\r\n // Show Announcements Modal\r\n this.dialog.open(NewAnnouncementsModalComponent, {\r\n disableClose: true,\r\n minHeight: '70%',\r\n minWidth: '70%',\r\n autoFocus: false,\r\n data: newAnnouncementsBody\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n eventViewClick(eventType: string) {\r\n if (eventType == 'discipline') {\r\n this.router.navigateByUrl('/student360/behavior');\r\n }\r\n if (eventType == 'onlineRegistration') {\r\n this.onlineRegService.getOnlineRegFamilies(false).subscribe(data => {\r\n if (data.length > 1) {\r\n const dialogBox = this.dialog.open(MultipleFamiliesComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: { families: data },\r\n disableClose: true\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(result => {\r\n subscription.unsubscribe();\r\n if (parseInt(result, 0) > 0) {\r\n this.onlineRegService.isMultipleFamiliesPopupOpened = true;\r\n this.router.navigateByUrl('/student360/onlineRegistration');\r\n }\r\n });\r\n } else if (data.length == 1) {\r\n this.onlineRegService.isMultipleFamiliesPopupOpened = false;\r\n this.onlineRegService.familyId = data[0].FamilyId;\r\n this.onlineRegService.parentType = data[0].ParentType;\r\n this.router.navigateByUrl('/student360/onlineRegistration');\r\n } else {\r\n this.router.navigateByUrl('/student360/onlineRegistration');\r\n }\r\n });\r\n }\r\n if (eventType == 'courseRequests') {\r\n let routed = false;\r\n if (this.student360Service.allParentPortals) {\r\n const portal = this.student360Service.allParentPortals.filter(p => p.PortalName == 'Course Requests' && p.Student_ID == this.selectedStudent.Id)[0];\r\n if (portal != undefined) {\r\n this.router.navigateByUrl('/student360' + portal.PortalDescription);\r\n routed = true;\r\n }\r\n }\r\n if (!routed) {\r\n this.router.navigateByUrl('/student360/courseRequest');\r\n }\r\n }\r\n if (eventType == 'health') {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'selectedTab': 'Health Visit Log'\r\n }\r\n };\r\n this.router.navigate(['/student360/health'], navigationExtras);\r\n }\r\n if (eventType == 'requiredEForms') {\r\n this.eFormService.initialS360eFormTab = 'required';\r\n this.router.navigateByUrl('/student360/eForms');\r\n }\r\n if (eventType == 'optionalEForms') {\r\n this.eFormService.initialS360eFormTab = 'optional';\r\n this.router.navigateByUrl('/student360/eForms');\r\n }\r\n if (eventType == 'studentDocument') {\r\n // this.eFormService.initialS360eFormTab = 'optional';\r\n this.router.navigateByUrl('/student360/studentDocuments');\r\n }\r\n\r\n if (eventType == 'studentDocumentBehaviorLetters') {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'onlyBehaviorLettersDocument': true\r\n }\r\n };\r\n this.router.navigate(['/student360/studentDocuments'], navigationExtras);\r\n }\r\n\r\n if (eventType == 'studentDocumentAttLetters') {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'onlyAttendanceLettersDocument': true\r\n }\r\n };\r\n this.router.navigate(['/student360/studentDocuments'], navigationExtras);\r\n }\r\n\r\n if (eventType == 'behaviorLetter') {\r\n this.router.navigateByUrl('student360/behavior?studentPortal=true');\r\n }\r\n }\r\n\r\n markEventsAsSeen(eventType: string) {\r\n this.studentSummaryService.markEventsAsSeen(this.selectedStudent.Id, this.userService.currentUser.MemberId, eventType, this.yearService.student360Year.Id, this.optionalInstanceIds, this.studentDocumentIds).subscribe(response => {\r\n if (response.ok) {\r\n this.getRecentEvents();\r\n if (eventType != 'BehaviorLetter') {\r\n this.getStudentDocuments();\r\n }\r\n }\r\n });\r\n }\r\n\r\n checkEFormAvailable() {\r\n this.eFormsActivated = this.loginService.LoginSettings.ActivateEForms;\r\n\r\n if (this.eFormsActivated && this.yearService.student360Year.Id > 0) {\r\n this.eFormService.checkForAvailableEForms(true).subscribe(result => {\r\n this.requiredEFormAvailable = result.eFormsAvailable;\r\n this.optionalEFormAvailable = result.optionaleFormAvailable;\r\n this.optionalInstanceIds = result.instanceId;\r\n this.getRecentEvents();\r\n });\r\n } else {\r\n this.requiredEFormAvailable = 0;\r\n this.optionalEFormAvailable = 0;\r\n this.getRecentEvents();\r\n }\r\n }\r\n\r\n getRecentEvents() {\r\n if (this.selectedStudent) {\r\n this.studentSummaryService.getStudentRecentEvents(this.selectedStudent.Id, this.userService.currentUser.MemberId, this.yearService.student360Year.Id, this.optionalInstanceIds).subscribe(response => {\r\n if (response.ok) {\r\n this.recentDisciplineEvents = response.body.filter(rde => rde.Type == 'Discipline')[0];\r\n this.recentHealthEvents = response.body.filter(rde => rde.Type == 'Health')[0];\r\n this.recentOptionalEFormEvents = response.body.filter(rde => rde.Type == 'OptionalEForms')[0];\r\n this.recentBehaviorLetters = response.body.filter(rde => rde.Type == 'BehaviorLetter')[0];\r\n }\r\n });\r\n if (this.eFormsActivated && this.yearService.student360Year.Id > 0) {\r\n this.unmarkedOptionalEFormsEvents = this.optionalEFormAvailable > 0;\r\n }\r\n }\r\n }\r\n\r\n getStudentDocuments() {\r\n this.studentService.getStudentDocuments(this.selectedStudent.Id, this.yearService.student360Year.Id, false, true).subscribe(data => {\r\n this.studentDocuments = data;\r\n const currentDate = new Date();\r\n this.studentDocuments.forEach(obj => {\r\n this.studentDocumentIds += obj.DocumentId + ',';\r\n });\r\n currentDate.setDate(currentDate.getDate() - 8);\r\n this.studentDocuments = this.studentDocuments.filter(x => x.CreatedOn > currentDate);\r\n this.behaviorlatterStudentDocuments = this.studentDocuments.filter(x => x.Notes == 'Behavior Letter').length > 0;\r\n this.attendancelatterStudentDocuments = this.studentDocuments.filter(x => x.Notes == 'Attendance Letter').length > 0;;\r\n });\r\n }\r\n\r\n checkPortals(portals: Portal[]) {\r\n // Compare portals\r\n this.userService.cards = [];\r\n const studentId = (this.userService.currentUser.UserType != 1) ? this.selectedStudent.Id : 0;\r\n this.userPreferencesService.getUserPreferences(studentId, '/OneSISStudentSummaryAngular').subscribe(response => {\r\n if (response && response.length > 0 && response[0] != '') { // If saved preference for card state\r\n try {\r\n const savedCards = JSON.parse(response[0]);\r\n const commonCards = [];\r\n // Compare the saved cards with the default cards, this is in the event that we remove cards\r\n savedCards.forEach(sCard => {\r\n // find the saved card in the default list\r\n this.studentSummaryService.defaultCards.forEach(card => {\r\n if (sCard.title == card.title) {\r\n commonCards.push(sCard);\r\n }\r\n });\r\n });\r\n // Check the default card list for new cards\r\n this.studentSummaryService.defaultCards.forEach(card => {\r\n // Find the card in the saved cards\r\n const c = savedCards.filter(sCard => sCard.title == card.title)[0];\r\n if (!c) { // if not found, push the default card\r\n commonCards.push(_.cloneDeep(card));\r\n }\r\n });\r\n this.userService.cards = commonCards;\r\n } catch {\r\n // Set the default card data upon a failure (usually to load JSON)\r\n this.userService.cards = _.cloneDeep(this.studentSummaryService.defaultCards);\r\n }\r\n } else {\r\n // Set the default card data\r\n this.userService.cards = _.cloneDeep(this.studentSummaryService.defaultCards);\r\n }\r\n if (this.userService.userType == 1) { // If staff member\r\n // Filter out the portals based on group.\r\n const myStudentsGroup = this.portals.filter(p => p.GroupName == 'My Students');\r\n if (myStudentsGroup.length > 0) { // User is a teacher\r\n portals = myStudentsGroup;\r\n } else { // user is an admin\r\n portals = this.portals.filter(p => p.GroupName == 'Students');\r\n }\r\n }\r\n this.userService.cards.forEach((card) => {\r\n let portal;\r\n switch (card.title) {\r\n case 'Announcements':\r\n portal = portals.find((p) => p.PortalName == 'Announcements');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Attendance':\r\n portal = portals.find((p) => p.PortalName == 'Attendance');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Assignments':\r\n portal = portals.find((p) => p.PortalName == 'Assignments');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Current Grades':\r\n portal = portals.find((p) => p.PortalName == 'Grades');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'District Defined Links':\r\n portal = portals.find((p) => p.IsMyLinksTile == true);\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Fees & Billing':\r\n portal = portals.find((p) => p.PortalName == 'Fees & Billing');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Meal Service Balance':\r\n portal = portals.find((p) => p.PortalName == 'Meal Service');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Student Schedule':\r\n portal = portals.find((p) => p.PortalName == 'Student Schedule');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Upcoming Events':\r\n portal = portals.find((p) => p.PortalName == 'Calendar');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Calendar':\r\n portal = portals.find((p) => p.PortalName == 'Calendar');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n // case 'Student Teams': // Staff card V10 Only\r\n // portal = portals.find((p) => p.PortalName == 'Activities and Teams');\r\n // if (portal) {\r\n // this.showCard(card, portal);\r\n // } else {\r\n // this.hideCard(card);\r\n // }\r\n // break;\r\n // case 'Student Notes': // Staff card V10 Only\r\n // portal = portals.find((p) => p.PortalName == 'Student Notes');\r\n // if (portal) {\r\n // this.showCard(card, portal);\r\n // } else {\r\n // this.hideCard(card);\r\n // }\r\n // break;\r\n case 'Behavior': // Staff card\r\n portal = portals.find((p) => p.PortalName == 'Behavior');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Programs and Services': // Staff card\r\n portal = false;\r\n portal = portals.find((p) => p.PortalName == 'Programs and Services');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Student Details': // Staff card\r\n portal = portals.find((p) => p.PortalName == 'Student Details');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Enrollment': // Staff card\r\n // Disable in v9 for Jan release - Lance\r\n portal = portals.find((p) => p.PortalName == 'Student Details');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Contacts': // Staff card\r\n // Disable in v9 for Jan release - Lance\r\n portal = portals.find((p) => p.PortalName == 'Student Details');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Attendance History': // Staff card\r\n portal = portals.find((p) => p.PortalName == 'Attendance');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n case 'Student Schedule - Staff View': // Staff card\r\n portal = portals.find((p) => p.PortalName == 'Student Schedule');\r\n if (portal) {\r\n this.showCard(card, portal);\r\n } else {\r\n this.hideCard(card);\r\n }\r\n break;\r\n }\r\n });\r\n if (this.userService.cards.find(a => a.title == 'Communications Log') && this.userService.cards.find(a => a.title == 'Communications Log').component == '') {\r\n this.userService.cards.find(a => a.title == 'Communications Log').component = 'communicationLogCard';\r\n }\r\n this.cardContainer.filterCards(this.userService.cards);\r\n });\r\n }\r\n\r\n hideCard(card) {\r\n card.display = 'Off';\r\n card.showInSettings = false;\r\n }\r\n\r\n showCard(card, portal) {\r\n card.disabled = portal.Disabled;\r\n card.disabledMessage = portal.DisabledMessage;\r\n card.showInSettings = true;\r\n }\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.find(function (student) {\r\n return student.Id == studentId;\r\n });\r\n }\r\n\r\n displayWelcome() {\r\n if (!this.userService.currentUser.PreviousAngularLogin) {\r\n if (this.userService.currentUser.UserType != 1) {\r\n // Wrapped in a timeout to avoid change detection errors\r\n setTimeout(() => {\r\n this.dialog.open(WelcomeModalComponent, {\r\n disableClose: true,\r\n minHeight: '50%',\r\n minWidth: '50%',\r\n autoFocus: false\r\n });\r\n }, 1);\r\n }\r\n this.userService.currentUser.PreviousAngularLogin = true;\r\n }\r\n }\r\n\r\n settingsClick() {\r\n // Open the Side menu\r\n this.dialog.open(SettingsMenuModalComponent, {\r\n minWidth: '430px',\r\n width: '25%',\r\n minHeight: '100%',\r\n autoFocus: false,\r\n position: { right: '0' }\r\n }).afterClosed().subscribe(result => {\r\n if (result == 'Saved') {\r\n this.cardContainer.filterCards(this.userService.cards);\r\n // Save the preferences\r\n const json: string[] = [];\r\n json.push(JSON.stringify(this.userService.cards));\r\n const studentId = (this.userService.currentUser.UserType != 1) ? this.studentService.selectedStudent.Id : 0;\r\n this.userPreferencesService.saveUserPreferences(studentId, '/OneSISStudentSummaryAngular', json, 0, '').subscribe(response => {\r\n }, err => {\r\n // On Error\r\n console.log(err);\r\n });\r\n }\r\n });\r\n }\r\n\r\n hasPrivilege(type: string) {\r\n // Check the parent assigned portals to see if the user has the privilege to see the event\r\n if (this.student360Service.parentAssignedPortals) {\r\n if (type == 'Discipline') {\r\n if (this.student360Service.parentAssignedPortals.find(p => p.PortalName == 'Behavior')) {\r\n return true;\r\n }\r\n }\r\n if (type == 'Health') {\r\n if (this.student360Service.parentAssignedPortals.find(p => p.PortalName == 'Health')) {\r\n return true;\r\n }\r\n }\r\n if (type == 'Online Registration') {\r\n if (this.student360Service.parentAssignedPortals.find(p => p.PortalName == 'Online Registration')) {\r\n return true;\r\n }\r\n }\r\n if (type == 'Course Requests') {\r\n if (this.displayCourseRequestHeadline) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getOnlinePaymentConfiguration() {\r\n this.studentService.getOnlinePaymentConfiguration().subscribe(result => {\r\n this.onlinePaymentConfiguration = result;\r\n // Load onlinePaymentConfiguration data into Online Payment Service for child components to access\r\n this.studentService.onlinePaymentConfiguration = this.onlinePaymentConfiguration;\r\n });\r\n }\r\n\r\n getCheckInOutButtnSettings(studentId: number, yearId: number) {\r\n this.studentSummaryService.getCheckInOutButtonSettings(studentId, yearId).subscribe(settings => {\r\n if (this.userService.currentUser.UserType == 2) {\r\n this.enableCheckInOut = settings.AllowParentEnterCheckInOut;\r\n this.enableAbsentNotice = settings.AllowParentEnterAbsentNotice;\r\n }\r\n else if (this.userService.currentUser.UserType == 3) {\r\n this.enableCheckInOut = settings.AllowStudentEnterCheckInOut;\r\n this.enableAbsentNotice = settings.AllowStudentEnterAbsentNotice;\r\n }\r\n });\r\n }\r\n\r\n checkInOutButtonClick(studentId: number) {\r\n this.studentSummaryService.getCheckInOutSubmissionRequest(studentId).subscribe(request => {\r\n if (request != undefined && request != null && request.Id > 0) {\r\n this.checkInOutSubmissionRequest = request;\r\n }\r\n else {\r\n this.checkInOutSubmissionRequest = new CheckInOutSubmissionRequest;\r\n this.checkInOutSubmissionRequest.StudentId = studentId;\r\n }\r\n\r\n const dialogBox = this.dialog.open(CheckInOutSubmissionRequestModalComponent, {\r\n disableClose: true,\r\n minWidth: '60vw',\r\n maxWidth: '60vw',\r\n minHeight: '65vh',\r\n maxHeight: '80vh',\r\n data: {\r\n checkInOutRequest: this.checkInOutSubmissionRequest\r\n }\r\n });\r\n });\r\n }\r\n\r\n absentNoticeButtonClick(studentId: number) {\r\n this.studentSummaryService.getAbsentNoticeByStudentId(studentId).subscribe(request => {\r\n let absentNotice: AbsentNotice;\r\n\r\n if (request != undefined && request != null && request.Id > 0) {\r\n absentNotice = request;\r\n }\r\n else {\r\n absentNotice = new AbsentNotice;\r\n absentNotice.Id = 0;\r\n absentNotice.StudentId = studentId;\r\n absentNotice.SubmittedPeopleId = 0;\r\n absentNotice.Reason = '';\r\n absentNotice.Status = 'Submitted';\r\n }\r\n\r\n this.dialog.open(AbsentNoticeSubmissionModalComponent, {\r\n disableClose: true,\r\n minWidth: '60vw',\r\n maxWidth: '60vw',\r\n minHeight: '65vh',\r\n maxHeight: '80vh',\r\n data: {\r\n absentNotice: absentNotice\r\n }\r\n });\r\n });\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { System } from '../../shared-components/System';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Card } from './card-container/card/card';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { StudentNote } from '../../classroom360/student-notes/student-note.model';\r\nimport { StudentNoteCategory } from '../../classroom360/student-notes/student-note-category.model';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { CheckInOutButtonSettings, CheckInOutSubmissionRequest } from './check-in-out-submission-request-modal/check-in-out-submission-request-modal.model';\r\nimport { AbsentNotice } from '../../admin360/attendance-administration/review-absent-notices/absent-notice.model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StudentSummaryService {\r\n private _defaultCards: Card[] = [\r\n {\r\n title: 'Announcements',\r\n component: 'announcementCard',\r\n position: 0,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Attendance',\r\n component: 'attendanceCard',\r\n position: 1,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: true,\r\n display: 'Summary',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Assignments',\r\n component: 'assignmentsCard',\r\n position: 2,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: true,\r\n display: 'Summary',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Current Grades',\r\n component: 'currentGradesCard',\r\n position: 3,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'District Defined Links',\r\n component: 'districtDefinedLinksCard',\r\n position: 4,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Fees & Billing',\r\n component: 'feesAndBillingCard',\r\n position: 5,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: true,\r\n display: 'Summary',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Meal Service Balance',\r\n component: 'mealServiceCard',\r\n position: 6,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: true,\r\n display: 'Summary',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Student Schedule',\r\n component: 'studentScheduleCard',\r\n position: 7,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n // {\r\n // title: 'Upcoming Events',\r\n // component: 'upcomingEventsCard',\r\n // position: 8,\r\n // columnPosition: 'R',\r\n // hasDetailCard: true,\r\n // hasSummaryCard: false,\r\n // display: 'Detail',\r\n // showInSettings: true,\r\n // disabled: false,\r\n // disabledMessage: '',\r\n // staffOnly: false\r\n // },\r\n {\r\n title: 'Calendar',\r\n component: 'calendarCard',\r\n position: 9,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: false\r\n },\r\n {\r\n title: 'Attendance History',\r\n component: 'attendanceHistoryCard',\r\n position: 10,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n // {\r\n // title: 'Student Teams',\r\n // component: 'studentTeamsCard',\r\n // position: 11,\r\n // columnPosition: 'L',\r\n // hasDetailCard: true,\r\n // hasSummaryCard: false,\r\n // display: 'Detail',\r\n // showInSettings: true,\r\n // disabled: false,\r\n // disabledMessage: '',\r\n // staffOnly: true\r\n // },\r\n {\r\n title: 'Student Notes',\r\n component: 'studentNotesCard',\r\n position: 12,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Behavior',\r\n component: 'behaviorCard',\r\n position: 13,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Programs and Services',\r\n component: 'programsAndServicesCard',\r\n position: 14,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Student Details',\r\n component: 'studentDetailsCard',\r\n position: 15,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Enrollment',\r\n component: 'enrollmentCard',\r\n position: 16,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Contacts',\r\n component: 'contactsCard',\r\n position: 17,\r\n columnPosition: 'L',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Student Schedule - Staff View',\r\n component: 'staffStudentScheduleCard',\r\n position: 18,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Detail',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n },\r\n {\r\n title: 'Communications Log',\r\n component: 'communicationLogCard',\r\n position: 19,\r\n columnPosition: 'R',\r\n hasDetailCard: true,\r\n hasSummaryCard: false,\r\n display: 'Off',\r\n showInSettings: true,\r\n disabled: false,\r\n disabledMessage: '',\r\n staffOnly: true\r\n }\r\n ];\r\n hasSeenNewAnnouncementModal = false;\r\n acknowledgedStudentNotes: StudentNote[] = [];\r\n\r\n constructor(private http: HttpClient, private loginService: LoginService, private sharedService: SharedService) {\r\n }\r\n\r\n get defaultCards() {\r\n return this._defaultCards;\r\n }\r\n\r\n getStudentRecentEvents(studentId: number, memId: number, yearId: number, optionalInstanceIds: string = ''): Observable {\r\n return this.http.get(System.apiURL.Student + `GetStudentRecentEvents?studentId=${studentId}&memId=${memId}&yearId=${yearId}&optionalInstanceIds=${optionalInstanceIds}`, { observe: 'response' });\r\n }\r\n\r\n markEventsAsSeen(studentId: number, memId: number, eventType: string, yearId: number, optionalInstanceIds: string, studentDocumentIds: string = ''): Observable {\r\n return this.http.get(System.apiURL.Student + `MarkEventsAsSeen?studentId=${studentId}&memId=${memId}&eventType=${eventType}&yearId=${yearId}&optionalInstanceIds=${optionalInstanceIds}&studentDocumentIds=${studentDocumentIds}`, { observe: 'response' });\r\n }\r\n\r\n getCardAnnouncements(studentId: number, loginId: number, schoolDomain: number, userType: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardAnnouncements?studentId=${studentId}&loginId=${loginId}&schoolDomain=${schoolDomain}&userType=${userType}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardAssignments(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardAssignments?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardMealService(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardMealService?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardFeesAndBilling(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardFeesAndBilling?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardAttendance(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardAttendance?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentSchedule(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentSchedule?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentGrades(studentId: number, schoolDomain: number, AYIdentifier: string, gradingPeriodId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentGrades?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&gradingPeriodId=${gradingPeriodId}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardUpcomingEvents(studentId: number, schoolDomain: number, AYIdentifier: string, userType: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardUpcomingEvents?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&userType=${userType}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentCalendar(studentId: number, schoolDomain: number, AYIdentifier: string, startDate: string, endDate: string, userType: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentCalendar?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&userType=${userType}&startDate=${startDate}&endDate=${endDate}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentNotes(studentId: number, schoolDomain: number, AYIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentNotes?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentTeams(studentId: number, schoolDomain: number, AYIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentTeams?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentBehavior(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentBehavior?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardProgramsAndServices(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentProgramsAndServices?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardCourseRequestStatus(studentId: number, schoolDomain: number, AYIdentifier: string, parentMemId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardCourseRequestStatus?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&parentMemId=${parentMemId}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardOnlineRegistrationStatus(studentId: number, schoolDomain: number, AYIdentifier: string, parentMemId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardOnlineRegistrationStatus?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&parentMemId=${parentMemId}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getOnlineRegistrationStatus(yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetOnlineRegistrationStatus?yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCourseRequestStatus(studentId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCourseRequestStatus?studentId=${studentId}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getGradingPeriodDetails(schoolDomain: number, AYIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetGradingPeriodDetails?schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}`, { observe: 'response' });\r\n }\r\n\r\n getStudentsNewAnnouncements(studentId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetStudentsNewAnnouncements?studentId=${studentId}&yearId=${yearId}`);\r\n }\r\n\r\n getEventForDateRange(studentId: number, schoolDomain: number, AYIdentifier: string, fromDate: string, toDate: string, userType: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetEventForDateRange?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&userType=${userType}&fromDate=${fromDate}&toDate=${toDate}`, { observe: 'response' });\r\n }\r\n\r\n getStudentNotesForPopup(studentId: number, schoolId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetStudentNotesForPopup?studentId=${studentId}&schoolId=${schoolId}&yearId=${yearId}`);\r\n }\r\n\r\n getStudentNoteCategories(schoolId: number, yearId: number): Observable {\r\n return this.sharedService.getStudentNoteCategories(schoolId, yearId);\r\n }\r\n\r\n getCardStudentEnrollment(studentId: number, schoolDomain: number, AYIdentifier: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentEnrollment?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentContacts(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentContacts?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getCardStudentAttendance(studentId: number, schoolDomain: number, AYIdentifier: string, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCardStudentAttendance?studentId=${studentId}&schoolDomain=${schoolDomain}&AYIdentifier=${AYIdentifier}&yearId=${yearId}`, { observe: 'response' });\r\n }\r\n\r\n getAttendanceHistoryDetail(studentId: number, sectionId: number, type: string): Observable {\r\n return this.http.get(System.apiURL.Student + `GetAttendanceHistoryDetail?studentId=${studentId}§ionId=${sectionId}&type=${type}`, { observe: 'response' });\r\n }\r\n\r\n getMembershipCodes(RSNY_ID: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetMembershipCodes?RSNY_ID=${RSNY_ID}`, { observe: 'response' });\r\n }\r\n\r\n getCheckInOutButtonSettings(studentId: number, yearId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCheckInOutButtonSettings?studentId=${studentId}&yearId=${yearId}`);\r\n }\r\n\r\n getCheckInOutSubmissionRequest(studentId: number): Observable {\r\n return this.http.get(System.apiURL.Student + `GetCheckInOutSubmissionRequest?studentId=${studentId}`);\r\n }\r\n\r\n saveCheckInOutSubmissionRequest(requestData: CheckInOutSubmissionRequest, yearId: number): Observable {\r\n return this.http.post(System.apiURL.Student + `SaveCheckInOutSubmissionRequest?yearId=${yearId}`, requestData);\r\n }\r\n\r\n getAbsentNoticeByStudentId(studentId: number): Observable {\r\n return this.http.get(System.apiURL.Admin + `GetAbsentNoticeByStudentId?studentId=${studentId}`);\r\n }\r\n\r\n}\r\n","import { System } from './../shared-components/System';\r\nimport { forkJoin as observableForkJoin, Observable, of, Subject, BehaviorSubject } from 'rxjs';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { StudentService } from '../shared-components/student/student.service';\r\nimport { UserService } from '../shared-components/user/user.service';\r\nimport { YearService } from '../shared-components/year/year.service';\r\nimport { Portal } from '../shared-components/portal.model';\r\nimport { StudentDocumentsFilter } from './student-documents/student-documents-filter';\r\nimport { map } from 'rxjs/operators';\r\nimport { LoginService } from '../shared-modules/login/login.service';\r\nimport { GeneralConfirmationComponent } from '../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable()\r\nexport class Student360Service {\r\n\r\n private _lastSelectedCalendarDate;\r\n private _lastSelectedCalenderView;\r\n public parentAssignedPortals: Portal[];\r\n public allParentPortals: Portal[];\r\n public academicYearAttention: Portal;\r\n public studentDocumentsFilterData: StudentDocumentsFilter;\r\n private observableParentAssignedPortals = new BehaviorSubject([]);\r\n observableParentAssignedPortalsStream$ = this.observableParentAssignedPortals.asObservable();\r\n private observableAcademicYearAttention = new Subject();\r\n observableAcademicYearAttentionStream$ = this.observableAcademicYearAttention.asObservable();\r\n\r\n showDetailsButtonOnStudentHeader = true;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private studentService: StudentService,\r\n private userService: UserService,\r\n private yearService: YearService,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private router: Router\r\n ) {\r\n this.studentDocumentsFilterData = new StudentDocumentsFilter();\r\n\r\n // Getting new parent portals when a new year or student is selected\r\n const getNewParentPortals = () => {\r\n if (this.userService.userId != null && this.yearService.student360Year) {\r\n if (this.userService.userType != 2 || this.allParentPortals == undefined || !this.loginService.LoginSettings.V10) {\r\n if (this.yearService.student360Year.Id > 0) {\r\n this.parentAssignedPortals = [];\r\n const subscription = this.getParentAssignedPortals().subscribe(portals => {\r\n if (!portals) {\r\n portals = [];\r\n }\r\n this.updateParentAssignedPortals(portals);\r\n subscription.unsubscribe();\r\n });\r\n }\r\n }\r\n else {\r\n this.updateParentAssignedPortals(this.allParentPortals);\r\n }\r\n }\r\n };\r\n this.yearService.observableStudent360YearStream$.subscribe(() => {\r\n if (this.userService.userType != null && this.userService.userType != 1 && this.studentService.selectedStudent) {\r\n getNewParentPortals();\r\n }\r\n });\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n if (this.userService.userType != null && this.userService.userType != 1) {\r\n getNewParentPortals();\r\n }\r\n });\r\n }\r\n\r\n get lastSelectedCalendarDate(): any {\r\n return this._lastSelectedCalendarDate;\r\n }\r\n\r\n set lastSelectedCalendarDate(date: any) {\r\n this._lastSelectedCalendarDate = date;\r\n }\r\n\r\n get lastSelectedCalendarView(): string {\r\n return this._lastSelectedCalenderView;\r\n }\r\n\r\n set lastSelectedCalendarView(view: string) {\r\n this._lastSelectedCalenderView = view;\r\n }\r\n\r\n getParentAssignedPortals(): Observable {\r\n if (this.parentAssignedPortals && this.parentAssignedPortals.length > 0) {\r\n return of(this.parentAssignedPortals);\r\n }\r\n if (!this.loginService.LoginSettings.V10) {\r\n const studentId = this.studentService.selectedStudent != null ? this.studentService.selectedStudent.Id : 0;\r\n return this.http.get(System.apiURL.Student + 'GetParentAssignedPortals?parentid=' + this.userService.userId + '&studentid=' + studentId + '&yearid=' + this.yearService.student360Year.Id).pipe(\r\n map((portals) => {\r\n // We need to separate the portals in multiple groups into separate portals because GroupName is a CSV\r\n for (let i = 0; i < portals.length; i++) {\r\n // All parent portals are marked as a parent page\r\n portals[i].applyFilterStudents = true;\r\n\r\n // If multiple groups are found, split the portals\r\n if (portals[i].GroupName.includes(',')) {\r\n const groups = portals[i].GroupName.split(',');\r\n for (let j = 0; j < groups.length; j++) {\r\n groups[j] = groups[j].trim();\r\n\r\n // If this is the first element, alter our current portal\r\n if (j == 0) {\r\n portals[i].GroupName = groups[0];\r\n\r\n // After the first element, create new portals\r\n } else {\r\n const portalInGroup = new Portal();\r\n Object.assign(portalInGroup, portals[i]);\r\n portalInGroup.ShowAsTile = false;\r\n portalInGroup.GroupName = groups[j];\r\n portals.push(portalInGroup);\r\n }\r\n }\r\n }\r\n return Array.prototype.sort.call(portals, (a, b) => a.PortalName.localeCompare(b.PortalName));\r\n }\r\n })\r\n );\r\n }\r\n else {\r\n return this.http.get(System.apiURL.Student + 'GetParentStudentPortals?parentid=' + this.userService.userId + '&yearid=' + this.yearService.student360Year.Id).pipe(\r\n map((portals) => {\r\n if (portals.length == 1 && portals[0].NoSchoolPolicy == true) {\r\n // Open a modal letting the user know that there is no associated school policy\r\n const dialogBox = this.dialog.open(GeneralConfirmationComponent, {\r\n disableClose: true,\r\n autoFocus: false,\r\n data: {\r\n headerLabel: 'No School Policy',\r\n informational: true,\r\n confirmMessage: 'We are unable to display your students information. Please contact the district and ask them to apply a school policy to your student\\'s school.'\r\n }\r\n });\r\n dialogBox.afterClosed().subscribe(() => {\r\n this.router.navigateByUrl('/logout');\r\n });\r\n } else {\r\n // We need to separate the portals in multiple groups into separate portals because GroupName is a CSV\r\n for (let i = 0; i < portals.length; i++) {\r\n\r\n // All parent portals are marked as a parent page\r\n portals[i].applyFilterStudents = true;\r\n\r\n // If multiple groups are found, split the portals\r\n if (portals[i].GroupName.includes(',')) {\r\n const groups = portals[i].GroupName.split(',');\r\n for (let j = 0; j < groups.length; j++) {\r\n groups[j] = groups[j].trim();\r\n\r\n // If this is the first element, alter our current portal\r\n if (j == 0) {\r\n portals[i].GroupName = groups[0];\r\n\r\n // After the first element, create new portals\r\n } else {\r\n const portalInGroup = new Portal();\r\n Object.assign(portalInGroup, portals[i]);\r\n portalInGroup.ShowAsTile = false;\r\n portalInGroup.GroupName = groups[j];\r\n portals.push(portalInGroup);\r\n }\r\n }\r\n }\r\n }\r\n return Array.prototype.sort.call(portals, (a, b) => a.PortalName.localeCompare(b.PortalName));\r\n }\r\n })\r\n );\r\n }\r\n }\r\n\r\n getStudentSummary(): Observable {\r\n return observableForkJoin(\r\n this.http.get(System.apiURL.Student + 'GetStudentSummaryChunk1?studentId=' + this.studentService.selectedStudent.Id + '&yearId=' + this.yearService.student360Year.Id + '&userId=' + this.userService.userId + '&userType=' + this.userService.userType),\r\n this.http.get(System.apiURL.Student + 'GetStudentSummaryChunk2?studentId=' + this.studentService.selectedStudent.Id + '&yearId=' + this.yearService.student360Year.Id + '&userId=' + this.userService.userId + '&userType=' + this.userService.userType),\r\n (chunk1, chunk2) => ({ chunk1, chunk2 })\r\n );\r\n }\r\n\r\n updateParentAssignedPortals(portals: Portal[]) {\r\n if (this.loginService.LoginSettings.V10) {\r\n const parentPortals = portals.filter(p => p.Student_ID == this.studentService.selectedStudent.Id);\r\n this.allParentPortals = portals;\r\n this.parentAssignedPortals = parentPortals;\r\n this.observableParentAssignedPortals.next(parentPortals);\r\n }\r\n else {\r\n this.parentAssignedPortals = portals;\r\n this.allParentPortals = portals;\r\n this.observableParentAssignedPortals.next(portals);\r\n }\r\n }\r\n updateAcademicYearAttention(portal: Portal) {\r\n this.academicYearAttention = portal;\r\n this.observableAcademicYearAttention.next(this.academicYearAttention);\r\n }\r\n}\r\n","import { System } from '../../shared-components/System';\r\n\r\nexport class Team {\r\n Id: number;\r\n Name: string;\r\n Details: string;\r\n Staff: string[];\r\n Entry = new Date(System.junkDateString);\r\n Exit = new Date(System.junkDateString);\r\n Comment: string;\r\n Active: boolean;\r\n StudentIds: string;\r\n}","\r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n
\r\n

\r\n No Activities data exists for student\r\n

\r\n
\r\n\r\n \r\n 0\" matSort matSortDisableClear\r\n matSortActive=\"Name\" matSortDirection=\"asc\">\r\n \r\n \r\n \r\n Team Name\r\n Activity\r\n \r\n \r\n \r\n {{team.Name}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Details\r\n \r\n \r\n \r\n {{team.Details}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Date\r\n Entry Date\r\n \r\n \r\n \r\n {{team.Entry.toString() != junkDate.toString() ? (team.Entry | date: 'MM/dd/yy') : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Exit Date\r\n \r\n \r\n \r\n {{team.Exit.toString() != junkDate.toString() ? (team.Exit | date: 'MM/dd/yy') : ''}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Staff Name\r\n \r\n \r\n \r\n {{team.Staff}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n Comment\r\n \r\n \r\n \r\n {{team.Comment}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \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 { LoginService } from './../../shared-modules/login/login.service';\r\nimport { TylerMatTableDataSource } from './../../shared-components/angular-material/extended.class';\r\nimport { System } from './../../shared-components/System';\r\nimport { StudentService } from './../../shared-components/student/student.service';\r\nimport { Component, OnInit, ViewChild, OnDestroy, ChangeDetectorRef, EventEmitter } from '@angular/core';\r\nimport { TeamsService } from './teams.service';\r\nimport { Team } from './team.model';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\n\r\n@Component({\r\n selector: 'teams',\r\n templateUrl: './teams.component.html',\r\n styleUrls: [\r\n './teams.component.css'\r\n ]\r\n})\r\nexport class TeamsComponent implements OnInit, OnDestroy {\r\n\r\n // Properties\r\n private _sort: MatSort;\r\n private _includeInactiveTeams = false;\r\n teams: Team[];\r\n subscriptions: Subscription[] = [];\r\n tableData = new TylerMatTableDataSource();\r\n showStudentTeams = false;\r\n hiddenTeamColumns = ['Name', 'Details', 'Entry', 'Staff', 'Comment'];\r\n shownTeamColumns = ['Name', 'Staff', 'Entry', 'Exit'];\r\n selectedRow: Team;\r\n junkDate = System.junkDate;\r\n clearFilterEvent = new EventEmitter();\r\n pageTitle: string;\r\n\r\n // Class Functions\r\n constructor(\r\n private teamService: TeamsService,\r\n private studentService: StudentService,\r\n private loginService: LoginService,\r\n private yearService: YearService,\r\n public changeDetector: ChangeDetectorRef\r\n ) { }\r\n\r\n get sort(): MatSort {\r\n return this._sort;\r\n }\r\n\r\n @ViewChild(MatSort) set sort(value: MatSort) {\r\n this._sort = value;\r\n if (this.tableData) {\r\n this.tableData.sort = this._sort;\r\n }\r\n }\r\n\r\n get includeInactiveTeams(): boolean {\r\n return this._includeInactiveTeams;\r\n }\r\n\r\n set includeInactiveTeams(value: boolean) {\r\n this._includeInactiveTeams = value;\r\n if (this.tableData) {\r\n if (value) {\r\n this.tableData.data = this.teams;\r\n } else {\r\n const filteredTeams = this.teams.filter(team => team.Active);\r\n this.tableData.data = filteredTeams;\r\n }\r\n }\r\n }\r\n\r\n // Event Functions\r\n ngOnInit() {\r\n // POST: initializes the data and performs the initial subscriptions\r\n this.pageTitle = 'Activities';\r\n this.showStudentTeams = this.loginService.LoginSettings.ParentPortalShowStudentTeams;\r\n this.subscriptions.push(\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.teams = undefined;\r\n this.getTeams();\r\n }),\r\n this.yearService.observableStudent360YearStream$.subscribe(student360Year => {\r\n this.getTeams();\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n // POST: ends all subscriptions\r\n this.subscriptions.forEach(subscription => {\r\n subscription.unsubscribe();\r\n });\r\n }\r\n\r\n // Methods\r\n getTeams() {\r\n // POST: obtains the teams from the server and organizes the table data\r\n this.subscriptions.push(\r\n this.teamService.getStudentTeams().subscribe(teams => {\r\n this.teams = teams;\r\n\r\n // Performing conversions for type safety\r\n for (let i = 0; i < this.teams.length; i++) {\r\n this.teams[i] = System.convert(this.teams[i], new Team());\r\n }\r\n\r\n // Setting the table data\r\n if (this.includeInactiveTeams) {\r\n this.tableData.data = this.teams;\r\n } else {\r\n const filteredTeams = this.teams.filter(team => team.Active);\r\n this.tableData.data = filteredTeams;\r\n }\r\n if (this.sort) {\r\n this.tableData.sort = this.sort;\r\n }\r\n })\r\n );\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { StudentService } from './../../shared-components/student/student.service';\r\nimport { Injectable } from '@angular/core';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { System } from '../../shared-components/System';\r\nimport { Observable } from 'rxjs';\r\nimport { Team } from './team.model';\r\n\r\n@Injectable()\r\nexport class TeamsService {\r\n\r\n // Properties\r\n\r\n // Class Functions\r\n constructor (\r\n private studentService: StudentService,\r\n private yearService: YearService,\r\n private http: HttpClient\r\n ) {}\r\n\r\n // Methods\r\n getStudentTeams(): Observable {\r\n // POST: returns the teams for a student\r\n const queryString = '?studentId=' + this.studentService.selectedStudent.Id +\r\n '&yearId=' + this.yearService.student360Year.Id;\r\n return this.http.get(System.apiURL.Student + 'GetStudentTeams' + queryString);\r\n }\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n 0 && (versatransEnabled || !v10)\">\r\n \r\n \r\n \r\n \r\n
Program{{transportation[0].ProgramName}}
\r\n
\r\n No transportation data exists for student.\r\n
\r\n
\r\n No transportation data is currently available.\r\n {{errorMessage}}\r\n
\r\n
0\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Pick Up\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Drop Off\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n More\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Days\r\n \r\n {{Trans.Days}} \r\n \r\n \r\n \r\n Destination\r\n \r\n {{Trans.Destination}} \r\n \r\n \r\n \r\n Time\r\n \r\n \r\n \r\n {{Trans.PickUp}}\r\n \r\n \r\n \r\n \r\n Location\r\n \r\n {{Trans.PickUpLocation}} \r\n \r\n \r\n \r\n Bus\r\n \r\n \r\n {{Trans.PickUpBus}}\r\n \r\n \r\n \r\n \r\n Time\r\n \r\n \r\n \r\n {{Trans.DropOff}}\r\n \r\n \r\n \r\n \r\n Location\r\n \r\n {{Trans.DropOffLocation}} \r\n \r\n \r\n \r\n Bus\r\n \r\n {{Trans.DropOffBus}} \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Pick Up Route{{Trans.PickUpRoute}}Drop Off Route{{Trans.DropOffRoute}}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Address\r\n \r\n {{Trans.Destination}} \r\n \r\n \r\n \r\n Address Type\r\n \r\n {{Trans.AddressType}} \r\n \r\n \r\n \r\n In Bound Bus\r\n \r\n {{Trans.InBoundBus}} \r\n \r\n \r\n \r\n In Bound Route\r\n \r\n {{Trans.InBoundRoute}} \r\n \r\n \r\n \r\n In Bound Stop\r\n \r\n {{Trans.InBoundStopID}} \r\n \r\n \r\n \r\n In Bound Stop Time\r\n \r\n {{Trans.InBoundStopTime}} \r\n \r\n \r\n \r\n Out Bound Bus\r\n \r\n {{Trans.OutBoundBus}} \r\n \r\n \r\n \r\n Out Bound Route\r\n \r\n {{Trans.OutBoundRoute}} \r\n \r\n \r\n \r\n Out Bound Stop\r\n \r\n {{Trans.OutBoundStopID}} \r\n \r\n \r\n \r\n Out Bound Stop Time\r\n \r\n {{Trans.OutBoundStopTime}} \r\n \r\n \r\n \r\n \r\n \r\n \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 { SelectionModel } from '@angular/cdk/collections';\r\nimport { AfterViewInit, Component, ElementRef, HostListener, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\n// -------Angular Material------------------------------------\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { Subscription } from 'rxjs';\r\nimport { TylerMatTableDataSource } from '../../shared-components/angular-material/extended.class';\r\nimport { detailExpand } from '../../shared-components/angular-material/mat-animations';\r\nimport { Student } from '../../shared-components/student/student.model';\r\n// ---------Shared--------------------------------------------\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { Transportation } from './transportation.model';\r\nimport { TransportationService } from './transportation.service';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'transportation',\r\n templateUrl: './transportation.component.html',\r\n styleUrls: ['./transportation.component.scss'],\r\n animations: [detailExpand]\r\n})\r\nexport class TransportationComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n // ------------Transportation Data---------------------------\r\n student360YearSubscription: Subscription;\r\n student360Year: Year;\r\n selectedStudentSubscription: Subscription;\r\n selectedStudent: Student;\r\n transportation: Transportation[] = [];\r\n // ------------Selection/Flags-----------------------------------\r\n selected = '0';\r\n v10: boolean;\r\n isBusy: boolean;\r\n showTraversaBusRoute: boolean;\r\n traversaEnabled: boolean;\r\n versatransEnabled: boolean;\r\n showErrorMessage = false;\r\n errorMessage = '';\r\n // ----------Angular Material------------------------------------\r\n angularMatData = new TylerMatTableDataSource();\r\n @ViewChild(MatSort) sort: MatSort;\r\n columnsToDisplay: string[] = ['More', 'Days', 'Destination', 'PickUp', 'PickUpLocation', 'PickUpBus', 'DropOff', 'DropOffLocation', 'DropOffBus'];\r\n columnsToDisplayTyler: string[] = ['Destination', 'AddressType', 'InBoundBus', 'InBoundRoute', 'InBoundStop', 'InBoundStopTime', 'OutBoundBus', 'OutBoundRoute', 'OutBoundStop', 'OutBoundStopTime'];\r\n initialSelection = [];\r\n allowMultiSelect = true;\r\n detailPadding = 0;\r\n pickUpPadding = 0;\r\n selection = new SelectionModel(this.allowMultiSelect, this.initialSelection);\r\n @ViewChildren('headerTest') matHeaderCellRef: QueryList;\r\n\r\n @ViewChild('more', { read: ElementRef }) moreRef: ElementRef;\r\n @ViewChild('days', { read: ElementRef }) daysRef: ElementRef;\r\n @ViewChild('destination', { read: ElementRef }) destinationRef: ElementRef;\r\n\r\n @ViewChild('pickUpTime', { read: ElementRef }) pickUpTimeRef: ElementRef;\r\n @ViewChild('pickUpLocation', { read: ElementRef }) pickUpLocationRef: ElementRef;\r\n @ViewChild('pickUpBus', { read: ElementRef }) pickUpBusRef: ElementRef;\r\n // --------------LifeCycle---------------------------------------\r\n\r\n constructor(private studentService: StudentService,\r\n private yearService: YearService,\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private transportationService: TransportationService) {\r\n\r\n this.selectedStudentSubscription = studentService.selectedStudentStream$.subscribe(\r\n studentId => {\r\n this.loadStudentInfo(studentId);\r\n });\r\n this.student360YearSubscription = yearService.observableStudent360YearStream$.subscribe(\r\n student360Year => {\r\n this.getStudentTransportation();\r\n }\r\n );\r\n\r\n this.angularMatData = new TylerMatTableDataSource(this.transportation);\r\n\r\n this.v10 = userService.currentUser.V10;\r\n this.showTraversaBusRoute = loginService.LoginSettings.ShowTraversaBusRoute;\r\n this.traversaEnabled = loginService.LoginSettings.TraversaEnabled;\r\n this.versatransEnabled = loginService.LoginSettings.VersatransEnabled;\r\n\r\n if (!this.loginService.LoginSettings.ShowTraversaBusRoute) {\r\n this.removeElement(this.columnsToDisplay, 'More');\r\n }\r\n if (!this.loginService.LoginSettings.ShowTraversaBusNumber) {\r\n this.removeElement(this.columnsToDisplay, 'PickUpBus');\r\n this.removeElement(this.columnsToDisplay, 'DropOffBus');\r\n }\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.loadStudentInfo(this.studentService.selectedStudent.Id);\r\n }\r\n\r\n ngAfterViewInit() {\r\n\r\n }\r\n\r\n ngOnDestroy() {\r\n this.selectedStudentSubscription.unsubscribe();\r\n this.student360YearSubscription.unsubscribe();\r\n }\r\n\r\n // ------------Student Discipline Data---------------------------\r\n\r\n loadStudentInfo(studentId: number) {\r\n this.selectedStudent = this.studentService.students.filter(s => s.Id == studentId)[0];\r\n this.getStudentTransportation();\r\n }\r\n\r\n getStudentTransportation() {\r\n this.showErrorMessage = false;\r\n this.errorMessage = '';\r\n this.isBusy = true;\r\n\r\n if (this.selectedStudent && this.studentService.studentEnrollment) {\r\n this.transportationService.getTransportation(this.selectedStudent.Id, this.yearService.student360Year.Id, this.studentService.studentEnrollment.SchoolId).subscribe(result => {\r\n if (result.length == 1 && result[0].Id == -99) {\r\n this.showErrorMessage = true;\r\n this.errorMessage = result[0].ErrorMessage != null ? result[0].ErrorMessage : '';\r\n }\r\n else {\r\n this.transportation = result;\r\n }\r\n\r\n if (this.versatransEnabled || this.traversaEnabled) {\r\n this.student360Year = this.yearService.student360Year;\r\n }\r\n\r\n this.loadStudentTransportation();\r\n });\r\n }\r\n }\r\n\r\n private loadStudentTransportation(): void {\r\n this.angularMatData.data = this.transportation;\r\n this.angularMatData.sort = this.sort;\r\n this.isBusy = false;\r\n }\r\n\r\n // ------------Helper methods----------------------------------\r\n getPadding() {\r\n setTimeout(() => {\r\n this.detailPadding = this.destinationRef.nativeElement.offsetWidth + this.moreRef.nativeElement.offsetWidth + this.daysRef.nativeElement.offsetWidth - 100;\r\n this.pickUpPadding = this.pickUpTimeRef.nativeElement.offsetWidth + this.pickUpLocationRef.nativeElement.offsetWidth + this.pickUpBusRef.nativeElement.offsetWidth - 125;\r\n }, 0);\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n this.getPadding();\r\n }\r\n\r\n removeElement(array: any[], element: any) {\r\n const index: number = array.indexOf(element);\r\n array.splice(index, 1);\r\n }\r\n\r\n // ------------Aria/Accessibility---------------------------\r\n\r\n getAriaRow(row: any): string {\r\n // Returns string for a given row's data\r\n // reads each column header name and then the cell data for that column\r\n\r\n\r\n return '';\r\n }\r\n\r\n // ----------Angular Material------------------------------------\r\n toggleExpanded(row: any) {\r\n if (this.pickUpPadding == 0 || this.detailPadding == 0) {\r\n this.getPadding();\r\n }\r\n this.angularMatData.toggleExpanded(row);\r\n }\r\n\r\n checkExpanded(row: any): boolean {\r\n return this.angularMatData.checkExpanded(row);\r\n }\r\n\r\n expandAll(expand: boolean) {\r\n this.angularMatData.expandAll(expand);\r\n }\r\n\r\n rowKeyPress(event: KeyboardEvent, row: any) {\r\n this.angularMatData.rowKeyPress(event, row);\r\n }\r\n}\r\n","import { System } from './../../shared-components/System';\r\nimport { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Transportation } from './transportation.model';\r\n\r\n@Injectable()\r\nexport class TransportationService {\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getTransportation(studentId: number, yearId: number, schoolId: number): Observable {\r\n let queryString = '';\r\n queryString += '?studentId=' + studentId +\r\n '&yearId=' + yearId +\r\n '&schoolId=' + schoolId;\r\n return this.http.get(System.apiURL.Student + 'GetTransportation' + queryString);\r\n }\r\n\r\n}\r\n","import { HasDynamicData } from './has-dynamic-data.model';\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { System } from '../System';\r\n\r\n@Injectable()\r\nexport class DynamicDataInterceptor implements HttpInterceptor {\r\n\r\n constructor() { }\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request).pipe(\r\n map(event => {\r\n if (event instanceof HttpResponse && event.body) {\r\n return new HttpResponse({\r\n body: this.processDynamicProperties(event.body),\r\n headers: event.headers,\r\n status: event.status,\r\n statusText: event.statusText,\r\n url: event.url\r\n });\r\n } else {\r\n return event;\r\n }\r\n })\r\n );\r\n }\r\n\r\n processDynamicProperties(data: Object) {\r\n try {\r\n const keys = Object.keys(data);\r\n keys.forEach(key => {\r\n if (data[key] && typeof data[key] == 'object') {\r\n data[key] = this.processDynamicProperties(data[key]);\r\n }\r\n });\r\n if (keys.includes('DynamicProperties')) {\r\n const dynamicObject: HasDynamicData = System.convert(data, new HasDynamicData());\r\n dynamicObject.createAccessorsAndMutators();\r\n return dynamicObject;\r\n } else {\r\n return data;\r\n }\r\n }\r\n catch {\r\n return data;\r\n }\r\n }\r\n}","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-reload',\r\n template: '
'\r\n})\r\nexport class LogoutComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n // leave this component alone :D\r\n // we understand that this is not the correct way to solve this issue.\r\n // In order to solve some of the logout issues we created this component as a temporary landing page for the logout process.\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from '../auth.service';\r\n\r\n@Component({\r\n selector: 'app-callback',\r\n templateUrl: './callback.component.html'\r\n})\r\nexport class CallbackComponent implements OnInit {\r\n\r\n constructor(private authService: AuthService) { }\r\n\r\n async ngOnInit() {\r\n this.authService.signinCallback();\r\n }\r\n\r\n}\r\n","
Change Password
\r\n
\r\n
\r\n Current Password has expired\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \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, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { StudentSearchComponent } from '../../../shared-components/student-search/student-search.component';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { LoginService } from '../login.service';\r\nimport { LoginSettings } from '../loginSetting.model';\r\n\r\n@Component({\r\n selector: 'app-change-password',\r\n templateUrl: './change-password.component.html',\r\n styleUrls: ['./change-password.component.css']\r\n})\r\n\r\nexport class ChangePasswordComponent implements OnInit {\r\n isDebug = false; // Used for debugging\r\n currentPassword = '';\r\n newPassword = '';\r\n repeatNewPassword = '';\r\n errorList: ErrorList[] = [];\r\n LoginSettings: LoginSettings;\r\n User: User;\r\n IsChangePasswordUrl = false;\r\n requiredCurrentPassword = true;\r\n\r\n @ViewChild('currentPasswordRef', { read: ElementRef, static: true }) currentPasswodRef: ElementRef;\r\n @ViewChild('newPasswordRef', { read: ElementRef, static: true }) newPasswordRef: ElementRef;\r\n @ViewChild('repeatNewPasswordRef', { read: ElementRef, static: true }) repeatNewPasswordRef: ElementRef;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private router: Router,\r\n private dialog: MatDialog) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.User = this.userService.currentUser;\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n if (this.isDebug) {\r\n console.log('User', this.User);\r\n console.log('LoginSettings', this.LoginSettings);\r\n }\r\n if (this.router.url == '/changePassword') {\r\n this.IsChangePasswordUrl = true;\r\n }\r\n if (this.LoginSettings.V10 == false && this.User.UserType == 1) {\r\n this.requiredCurrentPassword = false;\r\n }\r\n }\r\n\r\n passwordValidation(): boolean {\r\n const mixedLettersNumbersRegEx = /^(?=.*\\d)(?=.*[A-Za-z])[0-9a-zA-Z_@./#!$%^&*+-]*$/;\r\n const containsNumericRegEx = new RegExp('(?=.*[0-9])');\r\n const containsSpecialRegEx = new RegExp('(?=.*[^a-zA-Z0-9+])');\r\n const containsUpperRegEx = new RegExp('(?=.*[A-Z])');\r\n let passesValidation = true;\r\n // Validate that the newPassword and repeatNewPassword are the same\r\n if (this.newPassword !== this.repeatNewPassword) {\r\n if (this.LoginSettings.V10) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: 'New passwords do not match',\r\n });\r\n passesValidation = false;\r\n }\r\n else if (this.newPassword.toLowerCase() !== this.repeatNewPassword.toLowerCase() || (this.userService.currentUser.UserType == 1 && this.LoginSettings.Student360StaffPasswordCaseSensitive == true)) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: 'New passwords do not match',\r\n });\r\n passesValidation = false;\r\n }\r\n }\r\n // Validate that all fields have been provided\r\n if (this.requiredCurrentPassword && (this.currentPassword == undefined || this.currentPassword == '')) {\r\n this.errorList.push({\r\n fieldName: 'Current Password',\r\n fieldRef: this.currentPasswodRef,\r\n errorMsg: 'Field required',\r\n });\r\n passesValidation = false;\r\n }\r\n if (this.newPassword == undefined || this.newPassword == '') {\r\n this.errorList.push({\r\n fieldName: 'New Password',\r\n fieldRef: this.newPasswordRef,\r\n errorMsg: 'Field required',\r\n });\r\n passesValidation = false;\r\n }\r\n if (this.repeatNewPassword == undefined || this.repeatNewPassword == '') {\r\n this.errorList.push({\r\n fieldName: 'Repeat New Password',\r\n fieldRef: this.repeatNewPasswordRef,\r\n errorMsg: 'Field required',\r\n });\r\n passesValidation = false;\r\n }\r\n if (this.LoginSettings.V10 || this.userService.currentUser.UserType == 1) {\r\n // Minimum password length\r\n if (this.newPassword.length < this.loginService.LoginSettings.MinimumPasswordLength) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `Password must be greater than ${this.loginService.LoginSettings.MinimumPasswordLength} characters.`,\r\n });\r\n passesValidation = false;\r\n }\r\n // required mixed letters and numbers\r\n if (this.LoginSettings.PasswordRequiresMixedLettersAndNumbers && !this.newPassword.match(mixedLettersNumbersRegEx)) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password must contain mixed letters and numbers`,\r\n });\r\n passesValidation = false;\r\n }\r\n // requires numeric\r\n if (this.LoginSettings.PasswordRequiresNumeric && !this.newPassword.match(containsNumericRegEx)) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password must have at least one Numeric character`,\r\n });\r\n passesValidation = false;\r\n }\r\n // requires special\r\n if (this.LoginSettings.PasswordRequiresSpecial && !this.newPassword.match(containsSpecialRegEx)) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password must have at least one Special (! @ # $ ...) character`,\r\n });\r\n passesValidation = false;\r\n }\r\n // requires upper\r\n if (this.LoginSettings.PasswordRequiresUpper && !this.newPassword.match(containsUpperRegEx)) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password must have at least one uppercase character`,\r\n });\r\n passesValidation = false;\r\n }\r\n }\r\n // prevent password reuse\r\n if (this.LoginSettings.PreventPasswordReuse && this.newPassword == this.currentPassword) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password cannot be the same as the current password`,\r\n });\r\n passesValidation = false;\r\n }\r\n // Cannot be same as username\r\n if (this.LoginSettings.PreventEqualPassUserName && this.newPassword.toLowerCase() == this.User.UserName.toLowerCase()) {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: undefined,\r\n errorMsg: `New password cannot be the same as the user name`,\r\n });\r\n passesValidation = false;\r\n }\r\n return passesValidation;\r\n }\r\n\r\n saveClick() {\r\n // add some validation to make sure that the newPassword and repeatnewPassword match\r\n const data: string[] = [this.currentPassword, this.newPassword];\r\n this.errorList = [];\r\n if (this.passwordValidation()) {\r\n this.userService.changeUserPassword(this.User.UserType, this.User.ForceChangeExpiredPass, 'Change Password', data).subscribe(response => {\r\n if (response.body == 'Success') {\r\n console.log(response);\r\n // This will show at login then re-route appropriately\r\n if (this.User.ForceChangePassword || this.User.ForceChangeExpiredPass) {\r\n this.User.ForceChangeExpiredPass = false;\r\n this.User.ForceChangePassword = false;\r\n\r\n if (this.User.NewFamilyRegistration) {\r\n this.router.navigateByUrl('/onlineRegistration');\r\n } else if (this.User.UserType == 1 && this.LoginSettings.ActivateClassroom360) {\r\n this.router.navigateByUrl('/classroom360');\r\n } else {\r\n if (this.User.UserType == 1) {\r\n this.dialog.open(StudentSearchComponent,\r\n {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n disableClose: true\r\n }\r\n );\r\n }\r\n else {\r\n this.router.navigateByUrl('/student360');\r\n }\r\n }\r\n }\r\n if (this.IsChangePasswordUrl == false) {\r\n this.closeClick();\r\n }\r\n } else if (response.body == 'Current password invalid') {\r\n this.errorList.push({\r\n fieldName: undefined,\r\n fieldRef: this.currentPasswodRef,\r\n errorMsg: 'Current password invalid',\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n closeClick() {\r\n // POST: the change password dialog is closed\r\n if (this.IsChangePasswordUrl == true) {\r\n this.router.navigateByUrl('/login');\r\n } else {\r\n this.dialogRef.close();\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'student-reset-password-warning',\r\n templateUrl: './student-reset-password-warning.component.html',\r\n styleUrls: ['./student-reset-password-warning.component.css']\r\n})\r\nexport class StudentResetPasswordWarningComponent implements OnInit {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n cancelClick(){\r\n this.dialogRef.close('Cancel was clicked.'); \r\n }\r\n}\r\n","
\r\n
\r\n
Reset Your Password
\r\n
\r\n
\r\n
\r\n Students are not allowed to change their passwords.\r\n
\r\n
\r\n Please contact your school for assistance.\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","
\r\n
\r\n Email Your Username\r\n
\r\n
\r\n
\r\n
\r\n Your username will be sent to the email address associated with the information you submitted.\r\n
\r\n
\r\n
\r\n NOTE: Remember to look in your Junk or Spam folder too.\r\n
\r\n
\r\n
\r\n For additional assistance, please contact the {{loginSettings.CountryCode == 'CAN' ? 'division' :\r\n 'district'}}{{loginSettings.ShowLoginAssistanceInfo\r\n ? ': ' : '.'}}\r\n \r\n {{loginSettings.UsernamePasswordRequestEmail}}\r\n or \r\n ({{loginSettings.UsernamePasswordRequestPhone.substring(0,3)}}) {{loginSettings.UsernamePasswordRequestPhone.substring(3,6)}}-{{loginSettings.UsernamePasswordRequestPhone.substring(6)}}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {LoginService} from '../../login.service';\r\nimport {LoginSettings} from '../../loginSetting.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-confirmation-modal',\r\n templateUrl: './confirmation-modal.component.html',\r\n styleUrls: ['./confirmation-modal.component.css']\r\n})\r\nexport class ConfirmationModalComponent implements OnInit {\r\n loginSettings: LoginSettings;\r\n constructor(private loginService: LoginService, private dialogRef: MatDialogRef) { }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","
\r\n
Email Your Username
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n If the information you provide below matches exactly with our records, an email will be sent with your user\r\n name.\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Multiple accounts were found matching this information. Please contact the {{LoginSettings.CountryCode ==\r\n 'CAN' ? 'division'\r\n : 'district'}} for assistance{{LoginSettings.ShowLoginAssistanceInfo ? ': ' : '.'}}\r\n \r\n {{LoginSettings.UsernamePasswordRequestEmail}}\r\n or \r\n ({{LoginSettings.UsernamePasswordRequestPhone.substring(0,3)}}) {{LoginSettings.UsernamePasswordRequestPhone.substring(3,6)}}-{{LoginSettings.UsernamePasswordRequestPhone.substring(6)}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { LoginService } from '../login.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginSettings } from '../LoginSetting.model';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { isValidEmail } from '../change-password/password-validator';\r\nimport { ConfirmationModalComponent } from './confirmation-modal/confirmation-modal.component';\r\n\r\n@Component({\r\n selector: 'app-forgot-username',\r\n templateUrl: './forgot-username.component.html',\r\n styleUrls: ['./forgot-username.component.css']\r\n})\r\nexport class ForgotUsernameComponent implements OnInit {\r\n LoginSettings: LoginSettings;\r\n forgotUserName: any = {};\r\n forgotUserNameForm: FormGroup;\r\n duplicateRecords = false;\r\n firstNameError = 'Required Field';\r\n lastNameError = 'Required Field';\r\n emailAddressError = 'Required Field';\r\n userType: number;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.forgotUserNameForm = new FormGroup({\r\n 'firstName': new FormControl(null, [\r\n Validators.required\r\n ]),\r\n 'lastName': new FormControl(null, [\r\n Validators.required\r\n ]),\r\n 'emailAddress': new FormControl(null, [\r\n Validators.required,\r\n isValidEmail()\r\n ])\r\n });\r\n this.OnChanges();\r\n }\r\n\r\n modalInstanceContinueClick() {\r\n this.firstName.markAsTouched();\r\n this.lastName.markAsTouched();\r\n this.emailAddress.markAsTouched();\r\n this.forgotUserName.firstName = this.firstName.value;\r\n this.forgotUserName.lastName = this.lastName.value;\r\n this.forgotUserName.emailAddress = this.emailAddress.value;\r\n if (this.forgotUserNameForm.valid) {\r\n this.loginService.sendForgetUserNameEmail(this.forgotUserName.firstName, this.forgotUserName.lastName, this.forgotUserName.emailAddress, this.userType).subscribe(response => {\r\n if (response.includes('Id=') || response.includes('User not found')) {\r\n this.dialogRef.close({ isEmailSent: true });\r\n this.dialog.open(ConfirmationModalComponent, {\r\n maxWidth: '400px',\r\n disableClose: true\r\n });\r\n }\r\n if (response.includes('Duplicate Accounts')) {\r\n this.duplicateRecords = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n modalInstanceCancelClick() {\r\n this.dialogRef.close({ isEmailSent: this.forgotUserName.isEmailSent });\r\n }\r\n\r\n OnChanges(): void {\r\n this.forgotUserNameForm.valueChanges.subscribe(val => {\r\n // Check First Name\r\n if (this.firstName.invalid) {\r\n if (this.firstName.errors.hasOwnProperty('required')) {\r\n this.firstNameError = 'Required Field';\r\n }\r\n }\r\n // Check Last Name\r\n if (this.lastName.invalid) {\r\n if (this.lastName.errors.hasOwnProperty('required')) {\r\n this.lastNameError = 'Required Field';\r\n }\r\n }\r\n // Check Email address\r\n if (this.emailAddress.invalid) {\r\n if (this.emailAddress.errors.hasOwnProperty('required')) {\r\n this.emailAddressError = 'Required Field';\r\n } else if (this.emailAddress.errors.hasOwnProperty('notValidEmail')) {\r\n this.emailAddressError = 'Email Address is invalid';\r\n }\r\n }\r\n });\r\n }\r\n\r\n saveUserLoginInfo(userId: number) {\r\n this.loginService.saveUserLoginInfo(userId, this.userType, window.innerHeight, window.innerWidth, 4, '');\r\n }\r\n\r\n get firstName() {\r\n return this.forgotUserNameForm.get('firstName');\r\n }\r\n\r\n get lastName() {\r\n return this.forgotUserNameForm.get('lastName');\r\n }\r\n\r\n get emailAddress() {\r\n return this.forgotUserNameForm.get('emailAddress');\r\n }\r\n}\r\n","
\r\n
\r\n Set Password\r\n Reset Your \r\n Staff\r\n Parent\r\n Student Password\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n A link to reset your password will be sent to this address.\r\n A link to set your password will be sent to this address.\r\n A link to reset your password will be sent to the email address associated with this username.\r\n
\r\n \r\n \r\n NOTE : Your Username is your email address.\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n The link you used to access this page has expired.\r\n
\r\n Please enter your email address and a new link will be sent.\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n Email Address is required.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n A link will be sent to the email address associated with this staffparentstudent username.\r\n \r\n \r\n A link to reset your password will be sent to this address.\r\n A link to set your password will be sent to this address.\r\n \r\n
\r\n
\r\n NOTE: Remember to look in your Junk or Spam folder too.\r\n
\r\n
\r\n For additional assistance, please contact the {{loginSettings.CountryCode == 'CAN' ? 'division' :\r\n 'district'}}{{loginSettings.ShowLoginAssistanceInfo ? ': ' : '.'}}\r\n \r\n {{loginSettings.UsernamePasswordRequestEmail}}\r\n or \r\n ({{loginSettings.UsernamePasswordRequestPhone.substring(0,3)}}) {{loginSettings.UsernamePasswordRequestPhone.substring(3,6)}}-{{loginSettings.UsernamePasswordRequestPhone.substring(6)}}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","\r\nimport { Component, OnInit, Inject } from '@angular/core';\r\nimport { LoginService } from '../login.service';\r\nimport { LoginSettings } from '../LoginSetting.model';\r\nimport { Router } from '@angular/router';\r\nimport { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { StudentResetPasswordWarningComponent } from './student-reset-password-warning/student-reset-password-warning.component';\r\nimport { ForgotUsernameComponent } from '../forgot-username/forgot-username.component';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'forgot-password',\r\n templateUrl: './forgot-password.component.html',\r\n styleUrls: ['./forgot-password.component.css']\r\n})\r\nexport class ForgotPasswordComponent implements OnInit {\r\n forgotUsernameDialogRef: MatDialogRef;\r\n studentResetPasswordWarningDialogRef: MatDialogRef;\r\n loginSettings: LoginSettings;\r\n forgotPassword: any = { userName: '', errorMessage: '' };\r\n forgotUserName: any = {};\r\n isProcessBusy: boolean;\r\n classicSetPassword: boolean;\r\n userType: number;\r\n forgotPasswordForm: FormGroup;\r\n formErrors: boolean;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private router: Router,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.forgotPasswordForm = new FormGroup({\r\n 'userName': new FormControl(null, [\r\n Validators.required\r\n ]),\r\n 'emailAddress': new FormControl(null, [\r\n Validators.required\r\n ])\r\n });\r\n if (this.data != null) {\r\n this.userType = this.data.userType;\r\n }\r\n }\r\n\r\n\r\n forgotUserNameClick() {\r\n this.forgotUserName = [];\r\n this.forgotUsernameDialogRef = this.dialog.open(ForgotUsernameComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '400px',\r\n disableClose: true\r\n });\r\n this.forgotUsernameDialogRef.componentInstance.userType = this.userType;\r\n\r\n this.forgotUsernameDialogRef.afterClosed().subscribe(result => {\r\n if (result.isEmailSent == true) {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n });\r\n }\r\n\r\n continueClick() {\r\n if (this.loginSettings.V10) {\r\n // V10\r\n this.forgotPassword.userName = this.userName.value;\r\n } else {\r\n // V9\r\n if (this.userType == 2) {\r\n // if parent\r\n this.forgotPassword.userName = this.emailAddress.value;\r\n } else {\r\n // else\r\n this.forgotPassword.userName = this.userName.value;\r\n }\r\n }\r\n if (this.forgotPassword.userName == undefined) {\r\n this.formErrors = true;\r\n }\r\n if (this.isProcessBusy == null || this.isProcessBusy == false) {\r\n this.isProcessBusy = true;\r\n if ((this.loginSettings.V10) && (this.userName.value == null || this.forgotPassword.userName.trim() == '')) {\r\n this.isProcessBusy = false;\r\n }\r\n else if ((!this.loginSettings.V10) && ((this.userName.value == null && this.emailAddress.value == null) || this.forgotPassword.userName.trim() == '')) {\r\n this.isProcessBusy = false;\r\n }\r\n else {\r\n const setPassword = this.classicSetPassword != null ? this.classicSetPassword : false;\r\n this.loginService.sendForgetPasswordEmail(this.forgotPassword.userName, this.userType, setPassword).subscribe(\r\n (results: string) => {\r\n this.forgotPassword.errorMessage = '';\r\n this.forgotPassword.isEmailSent = true;\r\n this.saveUserLoginInfo(-1);\r\n if (results == 'Student cannot change their passwords') {\r\n this.studentResetPasswordWarningDialogRef = this.dialog.open(StudentResetPasswordWarningComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '400px'\r\n });\r\n\r\n this.studentResetPasswordWarningDialogRef.afterClosed().subscribe(result => {\r\n if (result == 'Cancel was clicked.') {\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n });\r\n }\r\n else if (results != '' && results != 'Email Sent') {\r\n this.forgotPassword.errorMessage = results;\r\n }\r\n },\r\n (err) => {\r\n this.isProcessBusy = false;\r\n },\r\n () => {\r\n this.isProcessBusy = false;\r\n });\r\n\r\n }\r\n }\r\n }\r\n\r\n cancelClick() {\r\n if (this.router.url == '/loginassist') {\r\n this.router.navigateByUrl('/login');\r\n }\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n\r\n saveUserLoginInfo(userId: number) {\r\n this.loginService.saveUserLoginInfo(userId, this.userType, window.innerHeight, window.innerWidth, 3, '');\r\n }\r\n\r\n get userName() {\r\n return this.forgotPasswordForm.get('userName');\r\n }\r\n\r\n get emailAddress() {\r\n return this.forgotPasswordForm.get('emailAddress');\r\n }\r\n\r\n}\r\n","
\r\n \r\n \r\n \r\n
","import { Component, OnInit, Input } from '@angular/core';\r\nimport { LoginService } from './../../login/login.service';\r\nimport { LoginSettings } from './../../login/loginSetting.model';\r\n\r\n@Component({\r\n selector: 'login-footer',\r\n templateUrl: './login-footer.component.html',\r\n styleUrls: ['./login-footer.component.css']\r\n})\r\nexport class LoginFooterComponent implements OnInit {\r\n @Input() userType: number;\r\n LoginSettings: LoginSettings;\r\n copyrightYear: number;\r\n\r\n constructor(\r\n private loginService: LoginService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.copyrightYear = new Date().getFullYear();\r\n }\r\n\r\n currentApplicationClick() {\r\n window.localStorage.setItem('NewApplication', '0');\r\n const currentApplicationUrl = window.location.href.substring(0, window.location.href.indexOf('360') + 3);\r\n window.location.replace(currentApplicationUrl);\r\n }\r\n}","
\r\n
\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, OnInit, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { LoginService } from '../login.service';\r\nimport { LoginSettings } from '../LoginSetting.model';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ForgotPasswordComponent } from '../forgot-password/forgot-password.component';\r\nimport { ForgotUsernameComponent } from '../forgot-username/forgot-username.component';\r\nimport { TabsComponent } from '../../../shared-components/controls/tabs/tabs.component';\r\n\r\n@Component({\r\n selector: 'app-login-assist',\r\n templateUrl: './login-assist.component.html',\r\n styleUrls: ['./login-assist.component.css']\r\n})\r\nexport class LoginAssistComponent implements OnInit, AfterViewInit {\r\n @ViewChild(TabsComponent) tabs: TabsComponent;\r\n loginSettings: LoginSettings;\r\n tabNames: string[] = [];\r\n userType = 1;\r\n defaultTabIndex = 0;\r\n showUserType: number;\r\n constructor(\r\n private loginService: LoginService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.setUserType();\r\n this.setTabs();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.tabs.selectedIndexChange(this.defaultTabIndex);\r\n }\r\n\r\n setTabs() {\r\n this.tabNames = [];\r\n this.tabNames.push('Staff');\r\n if (this.loginSettings.ParentPortalShowParentTab) {\r\n this.tabNames.push('Parent');\r\n }\r\n if (this.loginSettings.ParentPortalShowStudentTab) {\r\n this.tabNames.push('Student');\r\n }\r\n switch (this.userType) {\r\n case 1: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Staff');\r\n break;\r\n }\r\n case 2: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Parent');\r\n break;\r\n }\r\n case 3: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Student');\r\n break;\r\n }\r\n }\r\n }\r\n\r\n setUserType = function () {\r\n if (localStorage && localStorage.getItem('UserType')) {\r\n this.userType = parseInt(localStorage.getItem('UserType'), 10);\r\n }\r\n };\r\n\r\n forgotPasswordClick() {\r\n this.loginService.LoginSettings.ShowForgotUserNameLink = false;\r\n const dialogRef = this.dialog.open(ForgotPasswordComponent, {disableClose: true, maxWidth: '400px', data: {userType: this.userType}});\r\n }\r\n\r\n forgotUserNameClick() {\r\n const dialogRef = this.dialog.open(ForgotUsernameComponent, {disableClose: true, maxWidth: '400px'});\r\n }\r\n\r\n tabChange(e: string) {\r\n switch (e) {\r\n case 'Staff': {\r\n this.userType = 1;\r\n break;\r\n }\r\n case 'Parent': {\r\n this.userType = 2;\r\n break;\r\n }\r\n case 'Student': {\r\n this.userType = 3;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import { Inject, Injectable, InjectionToken, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\n\n// This service is based on the `ng2-cookies` package which sadly is not a service and does\n// not use `DOCUMENT` injection and therefore doesn't work well with AoT production builds.\n// Package: https://github.com/BCJTI/ng2-cookies\nimport * as ɵngcc0 from '@angular/core';\nclass CookieService {\n /**\n * @param {?} document\n * @param {?} platformId\n */\n constructor(document, platformId) {\n this.document = document;\n this.platformId = platformId;\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n }\n /**\n * @param {?} name Cookie name\n * @return {?}\n */\n check(name) {\n if (!this.documentIsAccessible) {\n return false;\n }\n name = encodeURIComponent(name);\n const /** @type {?} */ regExp = this.getCookieRegExp(name);\n const /** @type {?} */ exists = regExp.test(this.document.cookie);\n return exists;\n }\n /**\n * @param {?} name Cookie name\n * @return {?}\n */\n get(name) {\n if (this.documentIsAccessible && this.check(name)) {\n name = encodeURIComponent(name);\n const /** @type {?} */ regExp = this.getCookieRegExp(name);\n const /** @type {?} */ result = regExp.exec(this.document.cookie);\n return decodeURIComponent(result[1]);\n }\n else {\n return '';\n }\n }\n /**\n * @return {?}\n */\n getAll() {\n if (!this.documentIsAccessible) {\n return {};\n }\n const /** @type {?} */ cookies = {};\n const /** @type {?} */ document = this.document;\n if (document.cookie && document.cookie !== '') {\n const /** @type {?} */ split = document.cookie.split(';');\n for (let /** @type {?} */ i = 0; i < split.length; i += 1) {\n const /** @type {?} */ currentCookie = split[i].split('=');\n currentCookie[0] = currentCookie[0].replace(/^ /, '');\n cookies[decodeURIComponent(currentCookie[0])] = decodeURIComponent(currentCookie[1]);\n }\n }\n return cookies;\n }\n /**\n * @param {?} name Cookie name\n * @param {?} value Cookie value\n * @param {?=} expires Number of days until the cookies expires or an actual `Date`\n * @param {?=} path Cookie path\n * @param {?=} domain Cookie domain\n * @param {?=} secure Secure flag\n * @param {?=} sameSite OWASP samesite token `Lax`, `None`, or `Strict`. Defaults to `None`\n * @return {?}\n */\n set(name, value, expires, path, domain, secure, sameSite = 'None') {\n if (!this.documentIsAccessible) {\n return;\n }\n let /** @type {?} */ cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n if (expires) {\n if (typeof expires === 'number') {\n const /** @type {?} */ dateExpires = new Date(new Date().getTime() + expires * 1000 * 60 * 60 * 24);\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n }\n else {\n cookieString += 'expires=' + expires.toUTCString() + ';';\n }\n }\n if (path) {\n cookieString += 'path=' + path + ';';\n }\n if (domain) {\n cookieString += 'domain=' + domain + ';';\n }\n if (secure) {\n cookieString += 'secure;';\n }\n cookieString += 'sameSite=' + sameSite + ';';\n this.document.cookie = cookieString;\n }\n /**\n * @param {?} name Cookie name\n * @param {?=} path Cookie path\n * @param {?=} domain Cookie domain\n * @return {?}\n */\n delete(name, path, domain) {\n if (!this.documentIsAccessible) {\n return;\n }\n this.set(name, '', new Date('Thu, 01 Jan 1970 00:00:01 GMT'), path, domain, undefined, 'Lax');\n }\n /**\n * @param {?=} path Cookie path\n * @param {?=} domain Cookie domain\n * @return {?}\n */\n deleteAll(path, domain) {\n if (!this.documentIsAccessible) {\n return;\n }\n const /** @type {?} */ cookies = this.getAll();\n for (const /** @type {?} */ cookieName in cookies) {\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain);\n }\n }\n }\n /**\n * @param {?} name Cookie name\n * @return {?}\n */\n getCookieRegExp(name) {\n const /** @type {?} */ escapedName = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/ig, '\\\\$1');\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n}\nCookieService.ɵfac = function CookieService_Factory(t) { return new (t || CookieService)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(PLATFORM_ID)); };\nCookieService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CookieService, factory: CookieService.ɵfac });\n/**\n * @nocollapse\n */\nCookieService.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] },] },\n { type: InjectionToken, decorators: [{ type: Inject, args: [PLATFORM_ID,] },] },\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CookieService, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc0.InjectionToken, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }]; }, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CookieService };\n\n","\r\n

\r\n Email Sent\r\n

\r\n\r\n
\r\n \r\n An email has been sent to\r\n {{emailAddress}}. \r\n Please use the link in the email to proceed to the next step.\r\n \r\n \r\n
\r\n
\r\n
Please enter the code provided in that email.
\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, OnInit, Inject, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TranslationService } from '../../../shared-components/translation/translation.service';\r\nimport { FamilyRegistrationYear } from '../../family-registration/family-registration-year.model';\r\nimport { NewFamilyRegistrationYearSelectionComponent } from '../../family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component';\r\nimport { Router } from '@angular/router';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { EmailNotSentComponent } from '../email-not-sent/email-not-sent.component';\r\n\r\n@Component({\r\n selector: 'app-email-sent',\r\n templateUrl: './email-sent.component.html',\r\n styleUrls: [\r\n './email-sent.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class EmailSentComponent implements OnInit {\r\n\r\n @ViewChild('code', { static: true }) inputCode: ElementRef;\r\n\r\n LoginSettings: LoginSettings;\r\n registerNewFamily: any;\r\n emailAddress: string;\r\n verifyCode: string;\r\n languageId: number;\r\n public errorList: ErrorList[] = [];\r\n @ViewChild('dialogWindow', { read: ElementRef }) dialogWindow: ElementRef;\r\n frYearsDialogRef: MatDialogRef;\r\n\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private translateService: TranslateService,\r\n private translationService: TranslationService,\r\n private router: Router,\r\n private sharedService: SharedService,\r\n private familyRegistrationService: FamilyRegistrationService\r\n ) { }\r\n\r\n\r\n enableSelfRegistrationCode = false;\r\n displayAsPopupOnly = false;\r\n ngOnInit() {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.enableSelfRegistrationCode = this.LoginSettings.EnableSelfRegistrationCode; \r\n this.registerNewFamily = this.data.registerNewFamily;\r\n if (this.data.emailAddress != undefined || this.data.emailAddress != '') {\r\n this.emailAddress = this.data.emailAddress;\r\n }\r\n else {\r\n this.emailAddress = '';\r\n }\r\n if (this.registerNewFamily != undefined && this.registerNewFamily.emailAddress != undefined && this.registerNewFamily.emailAddress != '')\r\n {\r\n this.emailAddress = this.registerNewFamily.emailAddress ;\r\n }\r\n if (this.registerNewFamily != undefined)\r\n {\r\n this.languageId = this.registerNewFamily.languageId;\r\n }\r\n else if (this.data.languageId != undefined)\r\n {\r\n this.languageId =this.data.languageId;\r\n }\r\n if (this.data.showPopupOnly != undefined && this.data.showPopupOnly == true)\r\n {\r\n this.enableSelfRegistrationCode = false; this.displayAsPopupOnly = true;\r\n }\r\n }\r\n\r\n modalInstanceNextClick() {\r\n if (this.validate()) {\r\n this.loginService.getRegisterParentInfo(this.emailAddress, this.verifyCode).subscribe(\r\n (result) => {\r\n if (result) {\r\n // this.location.url(this.location.path());\r\n this.familyRegistrationService.students = []; \r\n this.familyRegistrationService.householdParent = result;\r\n if (this.familyRegistrationService.householdParent.Id == -1) {\r\n this.invalidCombination();\r\n }\r\n else if (this.familyRegistrationService.householdParent.Id == -2) {\r\n // Expired\r\n this.codeExpire();\r\n this.dialogRef.close('Closed.');\r\n\r\n }\r\n else if (this.familyRegistrationService.householdParent.Id > 0) {\r\n this.dialogRef.close('Next was clicked.');\r\n this.redirectQR();\r\n }\r\n\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n invalidCombination() {\r\n const invalidCodeDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n invalidCodeDialog.componentInstance.headerLabel = 'Invalid Email/Code Combination';\r\n invalidCodeDialog.componentInstance.confirmMessage = 'The code provided is not associated with this email address.';\r\n invalidCodeDialog.componentInstance.disableConfirmation = true;\r\n invalidCodeDialog.componentInstance.confirmEvent.subscribe((invalidCodeReturnValue: boolean) => {\r\n });\r\n }\r\n\r\n\r\n codeExpire() {\r\n const codeExpiredDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n codeExpiredDialog.componentInstance.headerLabel = 'Expired Code';\r\n codeExpiredDialog.componentInstance.confirmMessage = 'The code you entered has expired.' + \"
\" +\r\n \"Would you like to have a new code sent to \" + this.emailAddress;\r\n codeExpiredDialog.componentInstance.okButtonLabel = 'Yes';\r\n codeExpiredDialog.componentInstance.cancelButtonLabel = 'No';\r\n codeExpiredDialog.componentInstance.confirmEvent.subscribe((resendEmail: boolean) => {\r\n \r\n if (resendEmail) {\r\n this.familyRegistrationService.sendRegisterParentEmail(this.emailAddress, this.languageId, \"\").subscribe(\r\n (result) => {\r\n if (!result) {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n },\r\n () => {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n );\r\n \r\n }\r\n });\r\n }\r\n\r\n\r\n redirectQR() {\r\n this.userService.currentLanguage = 'en';\r\n if (this.familyRegistrationService.householdParent.Language == 2) {\r\n this.userService.currentLanguage = 'fr';\r\n } else if (this.familyRegistrationService.householdParent.Language == 3) {\r\n this.userService.currentLanguage = 'es';\r\n } else if (this.familyRegistrationService.householdParent.Language == 4) {\r\n this.userService.currentLanguage = 'pt';\r\n }\r\n\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n\r\n this.familyRegistrationService.getORYears().subscribe((years: FamilyRegistrationYear[]) => {\r\n this.familyRegistrationService.years = years;\r\n if (this.familyRegistrationService.years.length != 0) {\r\n if ((this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.AyIdentifier != null && this.familyRegistrationService.householdParent.AyIdentifier != '') || (!this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.YearId > 0)) {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.AYIdentifier == this.familyRegistrationService.householdParent.AyIdentifier);\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.Id == this.familyRegistrationService.householdParent.YearId);\r\n }\r\n if (this.familyRegistrationService.defaultYear) {\r\n this.router.navigateByUrl('/familyregistration/householdparent');\r\n }\r\n } else {\r\n if (this.loginService.LoginSettings.V10) {\r\n const currentDate = new Date();\r\n for (let i = 0; i < this.familyRegistrationService.years.length; i++) {\r\n if (this.familyRegistrationService.years[i].Status == 1) {\r\n if (this.familyRegistrationService.years[i].StartDate < currentDate) {\r\n this.familyRegistrationService.years[i].Status = 3;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.familyRegistrationService.years.length > 1) {\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years[0];\r\n this.familyRegistrationService.householdParent.YearId = this.familyRegistrationService.defaultYear.Id;\r\n this.familyRegistrationService.householdParent.AyIdentifier = this.loginService.LoginSettings.V10 ? this.familyRegistrationService.defaultYear.AYIdentifier : this.familyRegistrationService.defaultYear.Description;\r\n\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n validate(): boolean {\r\n const mailformat = System.mailRegexp;\r\n this.errorList = [];\r\n\r\n if (this.verifyCode == null || this.verifyCode == '') {\r\n this.errorList.push({\r\n fieldName: 'Code',\r\n fieldRef: this.inputCode,\r\n errorMsg: 'Field is required'\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n modalInstanceCloseClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n }\r\n}\r\n","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { System } from '../../../shared-components/System';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { TranslationService } from '../../../shared-components/translation/translation.service';\r\nimport { FamilyRegistrationYear } from '../../family-registration/family-registration-year.model';\r\nimport { NewFamilyRegistrationYearSelectionComponent } from '../../family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component';\r\nimport { Router } from '@angular/router';\r\nimport { GeneralConfirmationComponent } from '../../../shared-components/controls/general-confirmation/general-confirmation.component';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\nimport { EmailNotSentComponent } from '../email-not-sent/email-not-sent.component';\r\nimport { EmailSentComponent } from '../email-sent/email-sent.component';\r\n\r\n@Component({\r\n selector: 'app-register-new-family-verify-code',\r\n templateUrl: './register-new-family-verify-code.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class RegisterNewFamilyVerifyCodeComponent implements OnInit {\r\n\r\n @ViewChild('email', { static: true }) inputEmail: ElementRef;\r\n @ViewChild('code', { static: true }) inputCode: ElementRef;\r\n registerNewFamily: any;\r\n public errorList: ErrorList[] = [];\r\n dialogWidth: number;\r\n @ViewChild('dialogWindow', { read: ElementRef }) dialogWindow: ElementRef;\r\n frYearsDialogRef: MatDialogRef;\r\n\r\n\r\n constructor(\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private dialog: MatDialog,\r\n private userService: UserService,\r\n private translateService: TranslateService,\r\n private translationService: TranslationService,\r\n private router: Router,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n verifyEmail: string;\r\n verifyCode: string;\r\n isValid: boolean;\r\n V10 = false;\r\n\r\n languageId = 1;\r\n\r\n ngOnInit(): void {\r\n // this.registerNewFamily = this.familyRegistrationService.registerNewFamily;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n modalInstanceNextClick() {\r\n if (this.validate()) {\r\n this.loginService.getRegisterParentInfo(this.verifyEmail, this.verifyCode).subscribe(\r\n (result) => {\r\n if (result) {\r\n // this.location.url(this.location.path());\r\n this.familyRegistrationService.students = [];\r\n this.familyRegistrationService.householdParent = result;\r\n if (this.familyRegistrationService.householdParent.Id == -1) {\r\n this.invalidCombination();\r\n }\r\n else if (this.familyRegistrationService.householdParent.Id == -2) {\r\n // Expired\r\n this.codeExpire();\r\n this.dialogRef.close('Closed.');\r\n\r\n }\r\n else if (this.familyRegistrationService.householdParent.Id > 0) {\r\n this.dialogRef.close('Next was clicked.');\r\n this.redirectQR();\r\n }\r\n\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n\r\n invalidCombination() {\r\n const invalidCodeDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n invalidCodeDialog.componentInstance.headerLabel = 'Invalid Email/Code Combination';\r\n invalidCodeDialog.componentInstance.confirmMessage = 'The code provided is not associated with this email address.';\r\n invalidCodeDialog.componentInstance.disableConfirmation = true;\r\n invalidCodeDialog.componentInstance.confirmEvent.subscribe((invalidCodeReturnValue: boolean) => {\r\n // if (invalidCodeReturnValue) {\r\n // // close button no need to do anything\r\n // }\r\n });\r\n }\r\n\r\n\r\n codeExpire() {\r\n\r\n const m1 = this.translateService.instant('The code you entered has expired.');\r\n const m2 = this.translateService.instant('Would you like to have a new code sent to');\r\n const codeExpiredDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n });\r\n codeExpiredDialog.componentInstance.headerLabel = 'Expired Code';\r\n codeExpiredDialog.componentInstance.confirmMessage = m1;\r\n codeExpiredDialog.componentInstance.secondMessage = m2 + ' ' + this.verifyEmail + '?';\r\n codeExpiredDialog.componentInstance.okButtonLabel = 'Yes';\r\n codeExpiredDialog.componentInstance.cancelButtonLabel = 'No';\r\n codeExpiredDialog.componentInstance.okButtonLabel = 'Yes';\r\n codeExpiredDialog.componentInstance.cancelButtonLabel = 'No';\r\n codeExpiredDialog.afterClosed().subscribe((resendEmail: boolean) => {\r\n if (resendEmail) {\r\n this.familyRegistrationService.sendRegisterParentEmail(this.verifyEmail, this.languageId, '').subscribe(\r\n (result) => {\r\n if (!result) {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else {\r\n const data: any = { languageId: this.languageId, emailAddress: this.verifyEmail};\r\n this.dialog.open(EmailSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: {\r\n registerNewFamily : data\r\n }\r\n });\r\n }\r\n },\r\n () => {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n );\r\n\r\n }\r\n else {\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n });\r\n }\r\n\r\n\r\n redirectQR() {\r\n this.userService.currentLanguage = 'en';\r\n if (this.familyRegistrationService.householdParent.Language == 2) {\r\n this.userService.currentLanguage = 'fr';\r\n } else if (this.familyRegistrationService.householdParent.Language == 3) {\r\n this.userService.currentLanguage = 'es';\r\n } else if (this.familyRegistrationService.householdParent.Language == 4) {\r\n this.userService.currentLanguage = 'pt';\r\n }\r\n\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n\r\n this.familyRegistrationService.getORYears().subscribe((years: FamilyRegistrationYear[]) => {\r\n this.familyRegistrationService.years = years;\r\n if (this.familyRegistrationService.years.length != 0) {\r\n if ((this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.AyIdentifier != null && this.familyRegistrationService.householdParent.AyIdentifier != '') || (!this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.YearId > 0)) {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.AYIdentifier == this.familyRegistrationService.householdParent.AyIdentifier);\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.Id == this.familyRegistrationService.householdParent.YearId);\r\n }\r\n if (this.familyRegistrationService.defaultYear) {\r\n this.router.navigateByUrl('/familyregistration/householdparent');\r\n }\r\n } else {\r\n if (this.loginService.LoginSettings.V10) {\r\n const currentDate = new Date();\r\n for (let i = 0; i < this.familyRegistrationService.years.length; i++) {\r\n if (this.familyRegistrationService.years[i].Status == 1) {\r\n if (this.familyRegistrationService.years[i].StartDate < currentDate) {\r\n this.familyRegistrationService.years[i].Status = 3;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.familyRegistrationService.years.length > 1) {\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years[0];\r\n this.familyRegistrationService.householdParent.YearId = this.familyRegistrationService.defaultYear.Id;\r\n this.familyRegistrationService.householdParent.AyIdentifier = this.loginService.LoginSettings.V10 ? this.familyRegistrationService.defaultYear.AYIdentifier : this.familyRegistrationService.defaultYear.Description;\r\n\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n validate(): boolean {\r\n const mailformat = System.mailRegexp;\r\n this.errorList = [];\r\n this.isValid = true;\r\n if (this.verifyEmail == null || this.verifyEmail == '') {\r\n this.errorList.push({\r\n fieldName: 'Email',\r\n fieldRef: this.inputEmail,\r\n errorMsg: 'Field is required'\r\n });\r\n this.isValid = false;\r\n }\r\n else if (this.verifyEmail.match(mailformat) == null) {\r\n this.errorList.push({\r\n fieldName: 'Email',\r\n fieldRef: this.inputEmail,\r\n errorMsg: 'Invalid Email Address'\r\n });\r\n this.isValid = false;\r\n }\r\n if (this.verifyCode == null || this.verifyCode == '') {\r\n this.errorList.push({\r\n fieldName: 'Code',\r\n fieldRef: this.inputCode,\r\n errorMsg: 'Field is required'\r\n });\r\n this.isValid = false;\r\n }\r\n return this.isValid;\r\n }\r\n modalInstanceCancelClick() {\r\n this.dialogRef.close('Cancel was clicked.');\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n\r\n}\r\n","\r\n
\r\n Register New Family\r\n
\r\n\r\n\r\n\r\n\t
\r\n\t\tThis option is intended for use by families who are new to the district.\r\n\t
\r\n\t
\r\n\t\tThis means none of the students in the family are currently attending any of the schools in the district and none of the students have attended any of the schools in the district in the past.\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n","
\r\n\r\n \r\n

\r\n Already have a code?\r\n

\r\n\r\n \r\n \r\n
Enter the email address to which the code was sent and the code.
\r\n\r\n \r\n \r\n \r\n \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, OnInit } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { RegisterNewFamilyVerifyCodeComponent } from '../register-new-family-verify-code/register-new-family-verify-code.component';\r\n@Component({\r\n selector: 'app-register-new-family-message',\r\n templateUrl: './register-new-family-message.component.html',\r\n styleUrls: [\r\n './register-new-family-message.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class RegisterNewFamilyMessageComponent implements OnInit {\r\n interpolatedString: string;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n enableSelfRegistrationCode = false;\r\n\r\n ngOnInit() {\r\n this.interpolatedString = 'This was interpolated';\r\n this.enableSelfRegistrationCode = this.loginService.LoginSettings.EnableSelfRegistrationCode;\r\n }\r\n\r\n modalInstancePreviousClick = function () {\r\n this.dialogRef.close('Select Language');\r\n };\r\n\r\n modalInstanceNextClick = function () {\r\n this.dialogRef.close('Register New Family');\r\n };\r\n\r\n modalInstanceCancelClick = function () {\r\n this.dialogRef.close('Cancel was clicked.');\r\n };\r\n\r\n alreadyHaveCodeClick = function () {\r\n this.dialog.open(RegisterNewFamilyVerifyCodeComponent, {\r\n disableClose: true,\r\n width: '500px',\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n this.dialogRef.close('Alreay have code');\r\n };\r\n\r\n}\r\n","\r\n
\r\n

{{'Link Already Sent' | translate}}

\r\n
A link for accessing the New Family Registration page was already emailed to this address.
\r\n
{{'Do you want to have the link sent again?' | translate}}
\r\n
\r\n
\r\n

{{'Code Already Sent' | translate}}

\r\n
A code for proceeding to the next step of New Family Registration page was already emailed to this address.
\r\n
{{'Would you like to have the code sent again?' | translate}}
\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { EmailNotSentComponent } from '../email-not-sent/email-not-sent.component';\r\nimport { LoginService } from '../../login/login.service';\r\nimport { EmailSentComponent } from '../email-sent/email-sent.component';\r\n\r\n@Component({\r\n selector: 'app-link-already-sent',\r\n templateUrl: './link-already-sent.component.html',\r\n styleUrls: [\r\n './link-already-sent.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class LinkAlreadySentComponent implements OnInit {\r\n registerNewFamily: any;\r\n\r\n constructor(\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private dialogRef: MatDialogRef,\r\n private dialog: MatDialog,\r\n private loginService: LoginService \r\n ) { }\r\n enableSelfRegistrationCode = false;\r\n ngOnInit() {\r\n this.registerNewFamily = this.familyRegistrationService.registerNewFamily;\r\n this.enableSelfRegistrationCode = this.loginService.LoginSettings.EnableSelfRegistrationCode;\r\n }\r\n\r\n modalInstanceYesClick() {\r\n this.dialogRef.close('Yes was clicked.');\r\n this.familyRegistrationService.sendRegisterParentEmail(this.registerNewFamily.emailAddress, this.registerNewFamily.languageId, window.location.href).subscribe(\r\n (result) => {\r\n if (!result) {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else\r\n\r\n {\r\n \r\n this.dialog.open(EmailSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: {\r\n registerNewFamily:this.registerNewFamily \r\n }\r\n });\r\n }\r\n },\r\n () => {\r\n const emailNotSentDialog = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n );\r\n }\r\n\r\n modalInstanceCloseClick() {\r\n this.dialogRef.close('Close was clicked.');\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n}\r\n","\r\n

Login Exists

\r\n
Login information has already been provided for this email address.
\r\n
Please use that information to access the site.
\r\n
If you have forgotten your password, use the Forgot Password link on the login page.
\r\n
\r\n\r\n
\r\n \r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-login-exists',\r\n templateUrl: './login-exists.component.html',\r\n styleUrls: [\r\n './login-exists.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class LoginExistsComponent implements OnInit {\r\n\r\n loginSettings: LoginSettings;\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService\r\n ) {\r\n this.loginSettings = loginService.LoginSettings;\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n modalInstanceCloseClick() {\r\n\r\n this.dialogRef.close('Close was clicked.');\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../login/login.service';\r\n\r\n@Component({\r\n selector: 'app-duplicate-email-address',\r\n templateUrl: './duplicate-email-address.component.html',\r\n styleUrls: [\r\n './duplicate-email-address.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class DuplicateEmailAddressComponent implements OnInit {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n modalInstanceCloseClick() {\r\n\r\n this.dialogRef.close('Close was clicked.');\r\n this.loginService.resetLanguage.emit(true);\r\n }\r\n}\r\n","\r\n

Duplicate Email Address

\r\n
A record already exists with this email address.
\r\n
If your students are already registered at the district or have attended the district in the past, this option cannot be used.
\r\n
\r\n\r\n
\r\n \r\n
\r\n
","import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { LinkAlreadySentComponent } from '../link-already-sent/link-already-sent.component';\r\nimport { LoginExistsComponent } from '../login-exists/login-exists.component';\r\nimport { DuplicateEmailAddressComponent } from '../duplicate-email-address/duplicate-email-address.component';\r\nimport { EmailSentComponent } from '../email-sent/email-sent.component';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { EmailNotSentComponent } from '../email-not-sent/email-not-sent.component';\r\nimport {System} from '../../../shared-components/System';\r\n\r\n@Component({\r\n selector: 'app-register-new-family',\r\n templateUrl: './register-new-family.component.html',\r\n styleUrls: [\r\n './register-new-family.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class RegisterNewFamilyComponent implements OnInit {\r\n @ViewChild('email', { static: true }) inputEmail: ElementRef;\r\n registerNewFamily: any;\r\n public errorList: ErrorList[] = [];\r\n linkAlreadySentDialogRef: MatDialogRef;\r\n loginExistsDialogRef: MatDialogRef;\r\n duplicateEmailDialogRef: MatDialogRef;\r\n emailSentDialogRef: MatDialogRef;\r\n emailNotSentDialogRef: MatDialogRef;\r\n dialogWidth: number;\r\n @ViewChild('dialogWindow', { read: ElementRef }) dialogWindow: ElementRef;\r\n V10: boolean;\r\n\r\n\r\n constructor(\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.registerNewFamily = this.familyRegistrationService.registerNewFamily;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n }\r\n\r\n modalInstancePreviousClick() {\r\n this.registerNewFamily.emailAddress = '';\r\n this.dialogRef.close('Register New Family Message');\r\n this.dialogWidth = this.dialogWindow.nativeElement.width;\r\n }\r\n\r\n modalInstanceNextClick() {\r\n if (this.validate()) {\r\n this.dialogRef.close('Next was clicked.');\r\n\r\n this.loginService.getClientInformation().subscribe(\r\n (clientInfo) => {\r\n if (clientInfo) {\r\n \tconst baseURL = window.location.href.slice(0, window.location.href.includes('?') ? window.location.href.indexOf('?') : window.location.href.length);\r\n this.familyRegistrationService.registerParent(this.registerNewFamily.emailAddress, this.registerNewFamily.languageId, baseURL, clientInfo[0], clientInfo[1], clientInfo[2]).subscribe(\r\n (results) => {\r\n if (results == 'Link Already Sent') {\r\n this.linkAlreadySentDialogRef = this.dialog.open(LinkAlreadySentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else if (results == 'Login Exists') {\r\n this.loginExistsDialogRef = this.dialog.open(LoginExistsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else if (results == 'Duplicate Email Address') {\r\n this.duplicateEmailDialogRef = this.dialog.open(DuplicateEmailAddressComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else if (results == 'Message not sent') {\r\n this.emailNotSentDialogRef = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n }\r\n else {\r\n this.emailSentDialogRef = this.dialog.open(EmailSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: {\r\n registerNewFamily: this.registerNewFamily\r\n }\r\n });\r\n }\r\n },\r\n () => {\r\n this.emailNotSentDialogRef = this.dialog.open(EmailNotSentComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n validate(): boolean {\r\n const mailformat = System.mailRegexp;\r\n this.errorList = [];\r\n if (this.registerNewFamily.emailAddress == null || this.registerNewFamily.emailAddress == '') {\r\n this.errorList.push({\r\n fieldName: 'Email',\r\n fieldRef: this.inputEmail,\r\n errorMsg: 'Field is required'\r\n });\r\n return false;\r\n }\r\n else if (this.registerNewFamily.emailAddress.match(mailformat) == null) {\r\n this.errorList.push({\r\n fieldName: 'Email',\r\n fieldRef: this.inputEmail,\r\n errorMsg: 'Invalid Email Address'\r\n });\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n modalInstanceCancelClick() {\r\n this.registerNewFamily.emailAddress = '';\r\n this.dialogRef.close('Cancel was clicked.');\r\n }\r\n\r\n}\r\n","\r\n
\r\n\t
\r\n\t\tRegister New Family\r\n\t
\r\n\t
\r\n\t\tStep 1 of 5\r\n\t
\r\n
\r\n\r\n\r\n\r\n\t
Please provide your email address, then select Next.
\r\n\r\n\t\r\n\t\r\n\t\t\r\n\t\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n\r\n\t\r\n\t\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\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 Language\r\n

\r\n\r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n English\r\n \r\n
\r\n\t\t\t\t\r\n Español\r\n\t\t\t\t\r\n
\r\n \r\n Français\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\t
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FamilyRegistrationService } from '../family-registration.service';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-select-language',\r\n templateUrl: './select-language.component.html',\r\n styleUrls: [\r\n './select-language.component.css',\r\n '../familiy-registration-shared-style.css'\r\n ]\r\n})\r\nexport class SelectLanguageComponent implements OnInit {\r\n\r\n LoginSettings: LoginSettings;\r\n registerNewFamily: any;\r\n isV10: boolean;\r\n\r\n constructor(\r\n private userService: UserService,\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private loginService: LoginService,\r\n private dialogRef: MatDialogRef,\r\n private translateService: TranslateService\r\n ) { }\r\n\r\n ngOnInit() {\r\n this.registerNewFamily = this.familyRegistrationService.registerNewFamily;\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.isV10 = this.LoginSettings.V10;\r\n }\r\n\r\n modalInstanceNextClick = function () {\r\n\r\n this.userService.currentLanguage = this.registerNewFamily.language;\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n\r\n this.registerNewFamily.languageId = 1;\r\n if (this.userService.currentLanguage == 'fr') {\r\n this.registerNewFamily.languageId = 2;\r\n }\r\n else if (this.userService.currentLanguage == 'es') {\r\n this.registerNewFamily.languageId = 3;\r\n }\r\n else if (this.userService.currentLanguage == 'pt') {\r\n this.registerNewFamily.languageId = 4;\r\n }\r\n\r\n this.dialogRef.close('Register New Family Message');\r\n};\r\n\r\nmodalInstanceCancelClick = function () {\r\n this.dialogRef.close('Cancel was clicked.');\r\n};\r\n}\r\n","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'app-access-message',\r\n templateUrl: './access-message.component.html',\r\n styles: []\r\n})\r\nexport class AccessMessageComponent implements OnInit, OnDestroy {\r\n\r\n constructor(\r\n private dialogRef: MatDialogRef\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n closeClick() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","
Classroom 360 Access
\r\n\r\n\r\n
Classroom 360 is not yet available in the early release of version 3.
\r\n
\r\n Currently you will only be able to access the student information pages, which are view-only.\r\n
\r\n
\r\n\r\n\r\n \r\n","export class AccessHistory {\r\n Id: number;\r\n CRMNumber: string;\r\n JiraNumber: string;\r\n Description: string;\r\n Type: string;\r\n AddedBy: string;\r\n AddedOn: Date;\r\n IsAdminLogin: boolean;\r\n}\r\n\r\n\r\nexport class LoginAudit{\r\n strKey: string;\r\n strValue: boolean;\r\n}","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { AccessHistory } from '../../../classroom360/system-settings/system-settings-v9/upgrade-access-history/access-history-sub-tab/access-history-sub-tab.model';\r\nimport { ErrorList } from '../../../shared-components/controls/error-prompt/error-list.model';\r\nimport { LoginService } from '../login.service';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-audit-logins',\r\n templateUrl: './audit-logins.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class AuditLoginsComponent implements OnInit {\r\n errors: ErrorList[] = [];\r\n @ViewChild('yournameRef', { read: ElementRef, static: true }) yournameRef: ElementRef;\r\n @ViewChild('typeRef', { read: ElementRef, static: true }) typeRef: ElementRef;\r\n @ViewChild('descriptionRef', { read: ElementRef, static: true }) descriptionRef: ElementRef;\r\n \r\n\r\n auditLogin = new AccessHistory();\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private loginservice: LoginService,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n nextClick() {\r\n this.validateField();\r\n if (this.errors.length == 0) {\r\n this.auditLogin.IsAdminLogin = true;\r\n this.loginservice.saveTylerAccessHistory(this.auditLogin).subscribe(result => {\r\n this.dialogRef.close();\r\n });\r\n }\r\n\r\n }\r\n validateField() {\r\n this.errors = [];\r\n \r\n if (this.auditLogin.AddedBy == null || this.auditLogin.AddedBy == '') {\r\n this.errors.push({\r\n fieldName: 'Your Name',\r\n fieldRef: this.yournameRef,\r\n errorMsg: 'Field is required'\r\n });\r\n\r\n this.yournameRef.nativeElement.focus();\r\n\r\n }\r\n if (this.auditLogin.Type == null || this.auditLogin.Type == '') {\r\n this.errors.push({\r\n fieldName: 'Type',\r\n fieldRef: this.typeRef,\r\n errorMsg: 'Field is required'\r\n });\r\n this.typeRef.nativeElement.focus();\r\n\r\n }\r\n\r\n if (this.auditLogin.Description == null || this.auditLogin.Description.toString() == '' ) {\r\n \r\n this.errors.push({\r\n fieldName: 'Description',\r\n fieldRef: this.descriptionRef,\r\n errorMsg: 'Field is required'\r\n });\r\n\r\n this.descriptionRef.nativeElement.focus();\r\n this.yournameRef.nativeElement.focus();\r\n\r\n } \r\n \r\n }\r\n\r\n\r\n}\r\n","

sdmadmin Auditing - Enter Required Info

\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n Normal Operation\r\n Issue Investigation\r\n Training\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \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, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n@Component({\r\n selector: 'app-login-only360',\r\n templateUrl: './login-only360.component.html',\r\n })\r\nexport class LoginOnly360Component implements OnInit {\r\n constructor(private dialogRef: MatDialogRef,\r\n private dialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n }\r\n ok() {\r\n this.dialogRef.close();\r\n }\r\n}\r\n","
Reset Password
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n Passwords do not match\r\n
\r\n
\r\n
\r\n {{resetPasswordMessage}}\r\n
\r\n \r\n\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n","\r\n

\r\n Classic Login Not Available\r\n

\r\n\r\n\r\n\r\n You only have permission to log into 360.\r\n\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n
","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginSettings } from '../loginSetting.model';\r\nimport { LoginService } from '../login.service';\r\nimport { User } from '../../../shared-components/user/user.model';\r\nimport { UserService } from '../../../shared-components/user/user.service';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n mustBeDifferent, notSameAsUsername,\r\n passwordsMatchForChangePassword, preventPasswordReuse, requiresMixedLettersNumbers,\r\n requiresNumeric,\r\n requiresSpecial,\r\n requiresUpperCase\r\n} from '../change-password/password-validator';\r\nimport { Router } from '@angular/router';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { SharedService } from '../../../shared-components/shared.service';\r\n\r\n@Component({\r\n selector: 'app-reset-password',\r\n templateUrl: './reset-password.component.html',\r\n styleUrls: ['./reset-password.component.css']\r\n})\r\nexport class ResetPasswordComponent implements OnInit {\r\n\r\n isDebug: false; // Used for debugging\r\n LoginSettings: LoginSettings;\r\n User: User;\r\n newPasswordError = '';\r\n repeatNewPasswordError = '';\r\n resetPasswordForm: FormGroup;\r\n forgotPasswordParams: any[];\r\n isLinkExpired = false;\r\n resetPasswordMessage = '';\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private dialogRef: MatDialogRef,\r\n private loginService: LoginService,\r\n private userService: UserService,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private translateService: TranslateService) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.User = this.data.user;\r\n this.isLinkExpired = this.data.isLinkExpired;\r\n this.resetPasswordMessage = this.data.resetPasswordMessage;\r\n this.forgotPasswordParams = this.data.forgotPasswordParams;\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.resetPasswordForm = new FormGroup({\r\n 'newPassword': new FormControl(null, [\r\n Validators.required,\r\n Validators.minLength((this.User.UserType == 1 || this.LoginSettings.V10) ? this.LoginSettings.MinimumPasswordLength : 0),\r\n requiresUpperCase(this.LoginSettings),\r\n requiresNumeric(this.LoginSettings),\r\n requiresSpecial(this.LoginSettings),\r\n mustBeDifferent(this.User, this.LoginSettings), // new password must not equal the current password\r\n preventPasswordReuse(this.LoginSettings, this.User), // Prevents re-use of expired passwords\r\n notSameAsUsername(this.User, this.LoginSettings), // new password must not be the same as the userName\r\n requiresMixedLettersNumbers(this.LoginSettings, this.User) // v9 Only\r\n ]),\r\n 'repeatNewPassword': new FormControl(null, [\r\n Validators.required\r\n ])\r\n }, { validators: passwordsMatchForChangePassword(this.LoginSettings, this.User) });\r\n if (this.isDebug) {\r\n console.log('User', this.User);\r\n console.log('LoginSettings', this.LoginSettings);\r\n }\r\n this.onChanges();\r\n }\r\n\r\n get newPassword() {\r\n return this.resetPasswordForm.get('newPassword');\r\n }\r\n\r\n get repeatNewPassword() {\r\n return this.resetPasswordForm.get('repeatNewPassword');\r\n }\r\n\r\n closeClick() {\r\n // POST: the change password dialog is closed\r\n this.dialogRef.close();\r\n }\r\n\r\n saveClick() {\r\n this.newPassword.markAsTouched();\r\n this.repeatNewPassword.markAsTouched();\r\n if (this.resetPasswordForm.invalid == false) {\r\n this.loginService.saveForgetPassword(this.newPassword.value, 'Forgot Password', this.forgotPasswordParams).subscribe(response => {\r\n if (response.ok) {\r\n // Display a toast ie: snackbar\r\n this.sharedService.showGoodSnackbar();\r\n }\r\n this.dialogRef.close();\r\n });\r\n }\r\n }\r\n\r\n onChanges(): void {\r\n this.resetPasswordForm.valueChanges.subscribe(val => {\r\n // check new password\r\n if (this.newPassword.invalid) {\r\n if (this.newPassword.errors.hasOwnProperty('required')) {\r\n this.newPasswordError = 'Required Field';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('minlength') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = `New password must be at least ${this.LoginSettings.MinimumPasswordLength} characters`;\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('mustContainUpperCase') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'Must have at least one Uppercase character';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('mustContainNumeric') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'Must have at least one Numeric character';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('mustContainSpecial') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'Must have at least one Special (! @ # $ ...) character';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('mustBeDifferent')) {\r\n this.newPasswordError = 'New password cannot be the same as the current password';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('notSameAsUsername') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'New password cannot be the same as Login Name';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('requiresMixedLettersNumbers') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'Must have at least 1 alphabetic character (A-Z or a-z) and 1 number (0-9)';\r\n }\r\n if (this.newPassword.errors.hasOwnProperty('preventPasswordReuse') && (this.User.UserType == 1 || this.LoginSettings.V10)) {\r\n this.newPasswordError = 'Password has already expired';\r\n }\r\n }\r\n // Check re-enter password\r\n if (this.repeatNewPassword.invalid) {\r\n if (this.repeatNewPassword.errors.hasOwnProperty('required')) {\r\n this.repeatNewPasswordError = 'Field is Required';\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport {LoginService} from '../login.service';\r\nimport {LoginSettings} from '../loginSetting.model';\r\n\r\n@Component({\r\n\tselector: 'app-unsupported-browser-warning-dialog',\r\n\ttemplateUrl: './unsupported-browser-warning-dialog.component.html',\r\n\tstyleUrls: ['./unsupported-browser-warning-dialog.component.css']\r\n})\r\nexport class UnsupportedBrowserWarningDialogComponent implements OnInit {\r\n\r\n\t// Properties\r\n\tloginSettings: LoginSettings;\r\n\r\n\t// Class Functions\r\n\tconstructor(\r\n\t\tprivate dialogBox: MatDialogRef,\r\n\t\tprivate loginService: LoginService\r\n\t) { }\r\n\r\n\t// Event Functions\r\n\tngOnInit() {\r\n\t\tthis.loginSettings = this.loginService.LoginSettings;\r\n\t}\r\n\r\n\tclose() {\r\n\t\t// PRE: the close button is clicked\r\n\t\t// POST: closes the dialog box\r\n\t\tthis.dialogBox.close();\r\n\t}\r\n\r\n\t// Methods\r\n}\r\n","\r\n
\r\n\tUnsupported Browser\r\n
\r\n\r\n\r\n\r\n\tYou are attempting to access SIS K-12 360 using an old version of Microsoft Internet Explorer that is not supported.\r\n\t
\r\n\t
\r\n\tA recent version of Google Chrome, Firefox, Microsoft Edge, or Apple Safari must be used.\r\n
\r\n\r\n\r\n\r\n\r\n\t\r\n\t\r\n","
\r\n
0) ? '30px' : '20px'}\">\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n {{ loginError }}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \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 Authentication\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n Use Google Authentication\r\n \r\n \r\n Use Tyler ID\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n Google Integrations Disabled\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Your district has not activated SIS K-12 Student 360.\r\n
Please wait until you hear from your district that SIS K-12 Student 360 is available before attempting\r\n to login.\r\n
\r\n
\r\n Active Directory Agent address is not set!\r\n
\r\n \r\n
\r\n {{googleError}}\r\n
\r\n
\r\n\r\n\r\n\r\n","/* eslint-disable camelcase */\r\nimport { Location } from '@angular/common';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, NgZone, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ActivatedRoute, NavigationExtras, Params, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { AppInsights } from 'applicationinsights-js';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { FormGroup } from '../../../../node_modules/@angular/forms';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { Link } from '../../classroom360/links/link.model';\r\nimport { StaffService } from '../../management360/staff/staff.service';\r\nimport { EFormService } from '../../shared-components/e-forms/e-form.service';\r\nimport { Portal } from '../../shared-components/portal.model';\r\nimport { SecurityService } from '../../shared-components/security/security.service';\r\nimport { SharedService } from '../../shared-components/shared.service';\r\nimport { StudentSearchComponent } from '../../shared-components/student-search/student-search.component';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { TranslationService } from '../../shared-components/translation/translation.service';\r\nimport { GeneralPreferences } from '../../shared-components/user-preferences/general-preferences.model';\r\nimport { PortalMenuPreferences } from '../../shared-components/user-preferences/portal-menu-preferences.model';\r\nimport { UserPreferencesService } from '../../shared-components/user-preferences/user-preferences.service';\r\nimport { UserPermission } from '../../shared-components/user/user-permission.model';\r\nimport { UserService } from '../../shared-components/user/user.service';\r\nimport { Year } from '../../shared-components/year/year.model';\r\nimport { YearService } from '../../shared-components/year/year.service';\r\nimport { FamilyRegistrationYear } from '../family-registration/family-registration-year.model';\r\nimport { FamilyRegistrationService } from '../family-registration/family-registration.service';\r\nimport { NewFamilyRegistrationYearSelectionComponent } from '../family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component';\r\nimport { RegisterNewFamilyMessageComponent } from '../family-registration/register-new-family-message/register-new-family-message.component';\r\nimport { RegisterNewFamilyComponent } from '../family-registration/register-new-family/register-new-family.component';\r\nimport { SelectLanguageComponent } from '../family-registration/select-language/select-language.component';\r\nimport { StudentService } from './../../shared-components/student/student.service';\r\nimport { AccessMessageComponent } from './access-message/access-message.component';\r\nimport { AuditLoginsComponent } from './audit-logins/audit-logins.component';\r\nimport { AuthService } from './auth.service';\r\nimport { ForgotPasswordComponent } from './forgot-password/forgot-password.component';\r\nimport { ForgotUsernameComponent } from './forgot-username/forgot-username.component';\r\nimport { LoginOnly360Component } from './login-only360/login-only360.component';\r\nimport { LoginService } from './login.service';\r\nimport { LoginSettings } from './loginSetting.model';\r\nimport { ResetPasswordComponent } from './reset-password/reset-password.component';\r\nimport { UnsupportedBrowserWarningDialogComponent } from './unsupported-browser-warning-dialog/unsupported-browser-warning-dialog.component';\r\n\r\n// Google API Variable\r\ndeclare const gapi: any;\r\ndeclare const google: any;\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.css'],\r\n})\r\nexport class LoginComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @ViewChild('userNameRef') userNameRef: ElementRef;\r\n badBrowser = false;\r\n badBrowserString: string;\r\n copyrightYear: number;\r\n loginSettings: LoginSettings;\r\n username = '';\r\n password = '';\r\n isLoggedIn = false;\r\n isLoggedInError = false;\r\n resetPasswordDetail: any = { isResetPasswordSaved: false };\r\n resetPasswordMessage = '';\r\n userType = 1;\r\n activeDirectoryAddressNotSet = false;\r\n loginFromLegacy = false;\r\n isLinkExpired = false;\r\n classicSetPassword = false;\r\n forgetPasswordParams: string[] = [];\r\n forgetPassword: any;\r\n generalPreferences: GeneralPreferences;\r\n showOverlay = false;\r\n forgotPasswordDialogRef: MatDialogRef;\r\n frYearsDialogRef: MatDialogRef;\r\n selectLanguageDialogRef: MatDialogRef;\r\n registerFamilyMessageDialogRef: MatDialogRef;\r\n registerNewFamilyDialogRef: MatDialogRef;\r\n ResetPasswordDialogRef: MatDialogRef;\r\n loginOnly360DialogRef: MatDialogRef;\r\n public loginForm: FormGroup;\r\n tabNames: string[];\r\n showUserType = 0;\r\n defaultTabIndex = 0;\r\n students: Student[] = [];\r\n staffAssignedPortals: Portal[];\r\n staffPortalMenuPreferences: PortalMenuPreferences;\r\n staffAssignedPortalSubscription: Subscription;\r\n V10: boolean;\r\n userPermissions: UserPermission[];\r\n cookieAccessToken: string;\r\n cookieMemId: string;\r\n cookieUserType: string;\r\n usingCookie = false;\r\n googleAuthentication = false;\r\n googleScope = '';\r\n activateGoogleAuthenticationForStaff = false;\r\n activateGoogleAuthenticationForStudent = false;\r\n staffGoogleAuthentication = false;\r\n staffTID = false;\r\n auth2: any;\r\n queryStringAction = '';\r\n setUserIndex = new EventEmitter();\r\n siteYearId = '';\r\n versionCheckInterval: any;\r\n subscriptions: Subscription[] = [];\r\n private _loginError = '';\r\n impersonateUser = false;\r\n googleError = '';\r\n auditLoginsComponentDialogRef: MatDialogRef;\r\n useTID = false;\r\n loginWithGoogle = false;\r\n\r\n constructor(\r\n private loginService: LoginService,\r\n private studentService: StudentService,\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n private userService: UserService,\r\n private authService: AuthService,\r\n private userPreferencesService: UserPreferencesService,\r\n private yearService: YearService,\r\n private familyRegistrationService: FamilyRegistrationService,\r\n private dialog: MatDialog,\r\n private translateService: TranslateService,\r\n private location: Location,\r\n private classroom360Service: Classroom360Service,\r\n private zone: NgZone,\r\n private eFormService: EFormService,\r\n private translationService: TranslationService,\r\n private sharedService: SharedService,\r\n private securityService: SecurityService,\r\n private cookieService: CookieService,\r\n private staffService: StaffService\r\n ) {\r\n }\r\n\r\n get loginError(): string {\r\n return this._loginError;\r\n }\r\n\r\n set loginError(value: string) {\r\n // POST: sets the login error AND begins checking the version because we've failed to login\r\n this._loginError = value;\r\n if (this._loginError) {\r\n this.checkVersions();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.cookieAccessToken = this.cookieService.get('tylersis_access_token');\r\n this.cookieMemId = this.cookieService.get('tylersis_mem_id');\r\n this.cookieUserType = this.cookieService.get('tylersis_user_type');\r\n this.loginSettings = this.loginService.LoginSettings;\r\n this.V10 = this.loginService.LoginSettings.V10;\r\n this.userService.logoutUser();\r\n\r\n this.useTID = this.loginSettings.UseTID;\r\n\r\n // Google Authentication\r\n this.googleAuthentication = this.loginSettings.GoogleAuthentication && !!this.loginSettings.GoogleClientId;\r\n this.activateGoogleAuthenticationForStaff = this.loginSettings.ActivateGoogleAuthenticationForStaff && !!this.loginSettings.GoogleClientId;\r\n this.activateGoogleAuthenticationForStudent = this.loginSettings.ActivateGoogleAuthenticationForStudent && !!this.loginSettings.GoogleClientId;\r\n if (this.activateGoogleAuthenticationForStaff || this.activateGoogleAuthenticationForStudent) {\r\n this.googleAuthentication = true;\r\n }\r\n\r\n // Detecting IE\r\n this.subscriptions.push(this.route.queryParams.subscribe((params: Params) => {\r\n const impersonateAccessToken = params['impersonateAccessToken'];\r\n if (impersonateAccessToken) {\r\n sessionStorage.setItem('accessToken', impersonateAccessToken);\r\n this.impersonateUser = true;\r\n }\r\n }));\r\n if (this.detectIE()) {\r\n this.badBrowser = true;\r\n this.setUserType();\r\n this.setTabs();\r\n\r\n // If they would login in because of route params, show warning immediately\r\n this.subscriptions.push(this.route.queryParams.subscribe((params: Params) => {\r\n const action: string = params['Action'];\r\n const id: string = params['id'];\r\n if (action || id || sessionStorage.getItem('loginInformation')) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n }));\r\n }\r\n\r\n // If this is not IE, continue\r\n else {\r\n this.initialize();\r\n this.checkVersions();\r\n }\r\n // Default language set to english\r\n this.subscriptions.push(this.loginService.resetLanguage.subscribe((result: boolean) => {\r\n this.userService.currentLanguage = 'en';\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n }));\r\n this.userService.currentLanguage = 'en';\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n if (\r\n this.staffTID && // Sri - can we trust localstorage?\r\n this.loginSettings.UseTID\r\n ) {\r\n this.authService.getUser().then((user) => {\r\n if (user) {\r\n if (!user.expired) {\r\n if (\r\n this.staffTID == true && // Sri - can we trust localstorage?\r\n this.userType == 1 &&\r\n this.loginSettings.UseTID == true\r\n ) {\r\n this.v9TIDAuthentication(false);\r\n }\r\n }\r\n else {\r\n this.authService.login();\r\n }\r\n }\r\n else {\r\n this.authService.login();\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n if (this.userNameRef != null && (sessionStorage.getItem('loginFromLegacy') == null || sessionStorage.getItem('loginFromLegacy') != '1')) {\r\n this.userNameRef.nativeElement.focus();\r\n }\r\n\r\n // Google Authentication\r\n if (this.googleAuthentication || this.loginSettings.DisplayGoogleClassroom) {\r\n // Determing scopes for returned data (this is the default for now)\r\n if (this.loginSettings.DisplayGoogleClassroom) {\r\n // It is very important that this is a space separated list\r\n this.googleScope = 'https://www.googleapis.com/auth/classroom.courses ' +\r\n 'https://www.googleapis.com/auth/classroom.rosters ' +\r\n 'https://www.googleapis.com/auth/classroom.coursework.students ' +\r\n 'https://www.googleapis.com/auth/classroom.coursework.me ' +\r\n 'https://www.googleapis.com/auth/classroom.profile.emails ' +\r\n 'https://www.googleapis.com/auth/classroom.profile.photos ' +\r\n 'https://www.googleapis.com/auth/userinfo.email';\r\n } else {\r\n this.googleScope = 'email profile openid';\r\n }\r\n\r\n if (!this.loginSettings.EnableGoogleIdentityServices) {\r\n gapi.load('auth2', () => {\r\n // Initializing authentication\r\n gapi.auth2.init({\r\n client_id: this.loginSettings.GoogleClientId.includes('.apps.googleusercontent.com') ? this.loginSettings.GoogleClientId : this.loginSettings.GoogleClientId + '.apps.googleusercontent.com',\r\n cookiepolicy: 'none',\r\n prompt: 'select_account',\r\n ux_mode: 'popup',\r\n scope: this.googleScope\r\n }).then((googleAuth) => {\r\n // console.log(googleAuth)\r\n }, (error) => {\r\n this.googleError = error.details;\r\n this.loginService.googleError = this.googleError;\r\n this.loginSettings.GoogleAuthentication = false;\r\n this.staffGoogleAuthentication = false;\r\n this.activateGoogleAuthenticationForStaff = false;\r\n this.activateGoogleAuthenticationForStudent = false;\r\n this.loginSettings.ActivateGoogleAuthenticationForStaff = false;\r\n this.loginSettings.ActivateGoogleAuthenticationForStudent = false;\r\n console.log(error);\r\n });\r\n });\r\n }\r\n }\r\n }, 0);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.endCheckVersions();\r\n }\r\n\r\n checkVersions() {\r\n // POST: Begins checking for version on an interval\r\n if (!this.versionCheckInterval) {\r\n this.versionCheckInterval = setInterval(() => {\r\n this.loginService.getApplicationVersion().pipe(take(1)).subscribe((result: string) => {\r\n if (result != this.loginService.LoginSettings.OneSISVersion) {\r\n location.reload();\r\n }\r\n });\r\n }, 300000);\r\n }\r\n }\r\n\r\n endCheckVersions() {\r\n // POST: Stops checking for the version and clears out the interval variable\r\n if (this.versionCheckInterval) {\r\n clearInterval(this.versionCheckInterval);\r\n this.versionCheckInterval = null;\r\n }\r\n }\r\n\r\n initialize() {\r\n this.subscriptions.push(this.route.queryParams.subscribe((params: Params) => {\r\n const action: string = params['Action'];\r\n const id: string = params['id'];\r\n const legacy: string = params['loginFromLegacy'];\r\n const code: string = params['code'];\r\n const eA: string = params['EA'];\r\n const uT: string = params['UT'];\r\n const iT: string = params['IT'];\r\n const sP: string = params['SP'];\r\n const GALDSAuth: string = params['GALDSAuth'];\r\n const redirectToEforms: string = params['NavigateToEForms'];\r\n\r\n if (redirectToEforms != undefined) {\r\n this.classroom360Service.redirectToEForms = true;\r\n this.eFormService.manageEformsFilter = redirectToEforms;\r\n }\r\n\r\n if (action != undefined) {\r\n this.loginFromLegacy = true;\r\n this.getClassicCurrentUser(action);\r\n } else if (id != undefined) {\r\n this.getRegisterParent(id);\r\n } else if (legacy) {\r\n\r\n } else if (code != undefined) {\r\n window.opener.sessionStorage.setItem('canvasCode', code);\r\n window.close();\r\n } else if (eA != undefined) {\r\n this.classicSetPassword = false;\r\n if (sP != undefined && sP == '1') {\r\n this.classicSetPassword = true;\r\n }\r\n this.forgetPasswordParams.push(eA);\r\n this.forgetPasswordParams.push(uT);\r\n this.forgetPasswordParams.push(iT);\r\n this.getForgotPasswordDetail();\r\n } else if (GALDSAuth != undefined) {\r\n // Initiate GALDS SSO\r\n } else if (sessionStorage.getItem('loginInformation') != null) {\r\n if (sessionStorage.getItem('loginInformation').split(',').length == 2) {\r\n this.userType = 2;\r\n this.username = sessionStorage.getItem('loginInformation').split(',')[0];\r\n this.password = sessionStorage.getItem('loginInformation').split(',')[1];\r\n this.LoginButtonClick(false);\r\n sessionStorage.removeItem('loginInformation');\r\n }\r\n }\r\n\r\n if (this.router.url.toLowerCase() != '/parent' && this.router.url.toLowerCase() != '/login/parent' && this.router.url.toLowerCase() != '/student' && this.router.url.toLowerCase() != '/login/student') {\r\n this.location.replaceState('login');\r\n }\r\n }));\r\n this.copyrightYear = new Date().getFullYear();\r\n this.setUserType();\r\n this.setTabs();\r\n this.setEFormsConfig();\r\n\r\n // If a token is provided, try to get the user\r\n if (this.cookieUserType) {\r\n localStorage.setItem('UserType', this.cookieUserType);\r\n this.cookieUserType = '';\r\n }\r\n if (this.cookieAccessToken) {\r\n sessionStorage.setItem('accessToken', this.cookieAccessToken);\r\n const expiredDate = new Date();\r\n expiredDate.setTime(expiredDate.getTime() - 86400 * 1000);\r\n document.cookie = 'tylersis_access_token=' + this.cookieAccessToken + ';max-age=0;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';\r\n this.cookieAccessToken = '';\r\n this.usingCookie = true;\r\n sessionStorage.removeItem('loginFromLegacy');\r\n this.getGeneralPreferences(false);\r\n }\r\n }\r\n\r\n LoginButtonClick(enterClick: boolean) {\r\n if (this.userType == 1) {\r\n this.loginService.redirectingToClassic = true;\r\n }\r\n if (this.badBrowser && (this.V10 || this.userType != 1 || (!enterClick && this.loginFromLegacy && this.userType == 1))) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n } else {\r\n this.logon(enterClick, this.username, this.password);\r\n }\r\n\r\n // Ending the interval for checking versions in case we get into the application\r\n this.endCheckVersions();\r\n }\r\n\r\n LoginButton360Click() {\r\n if (this.badBrowser) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n } else {\r\n if (this.loginSettings.UseTID && this.staffTID) {\r\n this.authService.login();\r\n } else {\r\n this.loginFromLegacy = true;\r\n this.LoginButtonClick(false);\r\n }\r\n }\r\n }\r\n\r\n forgotUserNameClick = function () {\r\n this.forgotUserName = [];\r\n this.forgotUsernameDialogRef = this.dialog.open(ForgotUsernameComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '400px',\r\n disableClose: true\r\n });\r\n\r\n this.subscriptions.push(this.forgotPasswordDialogRef.afterClosed().subscribe());\r\n };\r\n\r\n TabChange = function (userType: number) {\r\n this.userType = userType;\r\n $('#inputUserName').trigger('focus');\r\n };\r\n\r\n logon(enterclick: boolean, username: string, password: string): void {\r\n this.isLoggedInError = false;\r\n this.loginError = '';\r\n if (this.resetPasswordDetail.isResetPasswordSaved) {\r\n this.userType = this.userService.userType;\r\n }\r\n if (this.loginSettings.DisplaySeparateUserTypes == true && ((this.loginSettings.StaffUserUseADPassword == true && this.userType == 1) || (this.loginSettings.StudentUserUseADPassword == true && this.userType == 3)) && (this.password == undefined || this.password == null || this.password == '') && this.loginSettings.ActiveDirectoryAgentURL == '') {\r\n this.activeDirectoryAddressNotSet = true;\r\n } else {\r\n this.activeDirectoryAddressNotSet = false;\r\n }\r\n if (!this.activeDirectoryAddressNotSet) {\r\n if (this.password == undefined) {\r\n this.password = '';\r\n }\r\n }\r\n\r\n if ((this.userType == 1 && this.activateGoogleAuthenticationForStaff == true && this.staffGoogleAuthentication == true)\r\n || (this.userType == 3 && this.activateGoogleAuthenticationForStudent == true)) {\r\n this.googleUserAuthentication(enterclick);\r\n } else {\r\n this.loginService.logon(username, password, this.userType).subscribe(user => {\r\n if (user.userName != undefined && user.userName != null) {\r\n this.setLocalStorage(user, enterclick);\r\n } else {\r\n this.loginError = 'Invalid Username or Password.';\r\n this.loginFromLegacy = false;\r\n }\r\n },\r\n (err) => {\r\n this.isLoggedIn = false;\r\n this.userService.isLoggedIn.next(false);\r\n this.userService.username = '';\r\n this.userService.userId = 0;\r\n this.userService.firstname = '';\r\n this.userService.lastname = '';\r\n this.userService.userType = 0;\r\n this.userService.studentId = 0;\r\n this.loginFromLegacy = false;\r\n if (err instanceof HttpErrorResponse && err.status == 400) {\r\n this.loginError = 'Invalid Username or Password.';\r\n } else {\r\n this.loginError = 'There was an error during the login process.';\r\n this.loginService.observableLoginError.next(err);\r\n }\r\n });\r\n }\r\n }\r\n\r\n setLocalStorage(user, enterclick: boolean) {\r\n if (localStorage) {\r\n localStorage.setItem('UserType', user.userType);\r\n }\r\n sessionStorage.setItem('accessToken', user.access_token);\r\n AppInsights.setAuthenticatedUserContext(user.userName.replace(/[,;=| ]+/g, '_')); // Lets app insights know what user requests come from\r\n if (this.username.toLocaleLowerCase() == 'sdmadmin' && this.loginService.LoginSettings.ForceSDMADMINAudit == true &&\r\n !this.loginService.LoginSettings.V10) {\r\n const auditLoginDialog = this.dialog.open(AuditLoginsComponent, {\r\n minHeight: '63vh',\r\n minWidth: '40vw',\r\n disableClose: true\r\n });\r\n auditLoginDialog.afterClosed().subscribe(obj => {\r\n this.login(user, enterclick);\r\n });\r\n }\r\n else {\r\n this.login(user, enterclick);\r\n }\r\n }\r\n\r\n login(user, enterclick: boolean) {\r\n this.isLoggedIn = true;\r\n this.userService.isLoggedIn.next(true);\r\n this.userService.username = user.userName;\r\n this.userService.firstname = user.firstName;\r\n this.userService.lastname = user.lastName;\r\n this.userService.userId = user.userId;\r\n this.userService.userType = user.userType;\r\n this.userService.studentId = user.studentId;\r\n this.userService.forceUserToClassic = user.forceToClassic == 'true';\r\n\r\n\r\n if (user.userType == '1') {\r\n this.getGeneralPreferences(enterclick);\r\n if (!this.loginSettings.V10) {\r\n this.getDefaultYear(this.userService.userId);\r\n if (!this.impersonateUser) {\r\n if (sessionStorage.getItem('impersonateUseraccessToken') != null && sessionStorage.getItem('loginFromLegacy') != null) {\r\n sessionStorage.removeItem('loginFromLegacy');\r\n }\r\n sessionStorage.setItem('impersonateUseraccessToken', user.access_token);\r\n }\r\n }\r\n } else {\r\n this.getUser(enterclick);\r\n }\r\n }\r\n\r\n\r\n getUser(enterClick: boolean) {\r\n this.subscriptions.push(this.loginService.getUser().subscribe(user => {\r\n this.loginService.observableLogin.next();\r\n if (this.loginSettings.V10 == false) {\r\n if (user.UserIsLocked == false && user.UserIsDisabled == false) {\r\n if (user.UserType == 1 && user.UserIsTeacher == true && user.UserCanAccessClassroom == false) {\r\n this.loginSettings.ActivateClassroom360 = false;\r\n this.loginService.LoginSettings.ActivateClassroom360 = false;\r\n }\r\n\r\n if (this.userType == 1 && this.loginSettings.DisplaySeparateUserTypes == true && this.loginFromLegacy == false) {\r\n this.userService.currentUser = user;\r\n this.getUserDefaultSchoolYearIsBlocked(enterClick);\r\n } else {\r\n this.userService.currentUser = user;\r\n this.redirectUserTo360();\r\n }\r\n } else if (user.UserIsDisabled) {\r\n this.loginError = 'User ' + user.UserName + ' - Account has been disabled';\r\n this.loginFromLegacy = false;\r\n } else if (user.UserIsLocked) {\r\n this.loginError = 'User ' + user.UserName + ' - Account is not currently active';\r\n this.loginFromLegacy = false;\r\n }\r\n } else {\r\n if (user.UserIsLocked == false && user.UserIsDisabled == false) {\r\n const legacyUrl = this.loginService.LoginSettings.LegacyURL;\r\n if (!this.loginService.LoginSettings.ActivateStudent360 && !this.loginService.LoginSettings.ActivateClassroom360 && legacyUrl != '') {\r\n // window.removeEventListener('beforeunload', confirmExit);\r\n this.showOverlay = true;\r\n window.location.replace(legacyUrl + '?LoginFrom360=Y');\r\n }\r\n // else if (user.UserType == 1 && this.loginService.LoginSettings.UseUnifiedLoginPage && legacyUrl != '' && this.userService.forceUserToClassic) {\r\n // this.showOverlay = true;\r\n // window.location.replace(legacyUrl + '?LoginFrom360=Y');\r\n // }\r\n else if (user.UserType == 1 && !this.loginService.LoginSettings.RedirectTeachersTo360 && legacyUrl != '' && this.loginFromLegacy != true && legacyUrl != '' && this.loginService.LoginSettings.UseUnifiedLoginPage) {\r\n // window.removeEventListener('beforeunload', confirmExit);\r\n this.showOverlay = true;\r\n window.location.replace(legacyUrl + '?LoginFrom360=Y');\r\n\r\n } else if (user.UserType == 1 && (!user.UserIsTeacher || this.userService.forceUserToClassic) && this.loginFromLegacy != true && legacyUrl != '' && this.loginService.LoginSettings.UseUnifiedLoginPage) {\r\n // window.removeEventListener('beforeunload', confirmExit);\r\n this.showOverlay = true;\r\n window.location.replace(legacyUrl + '?LoginFrom360=Y');\r\n } else if ((user.UserType == 2 || user.UserType == 3) && !this.loginService.LoginSettings.ActivateStudent360 && legacyUrl != '') {\r\n // window.removeEventListener('beforeunload', confirmExit);\r\n this.showOverlay = true;\r\n window.location.replace(legacyUrl + '?LoginFrom360=Y');\r\n } else {\r\n if (this.studentService.legacySelectedStudentId > 0) {\r\n user.StudentId = this.studentService.legacySelectedStudentId;\r\n }\r\n this.userService.currentUser = user;\r\n this.isLoggedIn = true;\r\n this.userService.isLoggedIn.next(true);\r\n this.userService.username = user.UserName;\r\n this.userService.firstname = user.FirstName;\r\n this.userService.lastname = user.LastName;\r\n this.userService.userId = user.Id;\r\n this.userService.userType = user.UserType;\r\n this.userService.studentId = user.StudentId;\r\n\r\n let userId = this.userService.userId;\r\n if (this.userService.userType == 3 && userId == 0) {\r\n userId = this.userService.studentId;\r\n }\r\n this.saveUserLoginInfo(userId);\r\n if (this.userService.userType != 1) {\r\n this.setUserLanguage();\r\n }\r\n this.getUserYears();\r\n }\r\n } else if (user.UserIsDisabled) {\r\n this.loginError = (this.loginService.LoginSettings.V10) ? 'User account is not currently active.' : 'User ' + user.UserName + ' - Account has been disabled';\r\n this.loginFromLegacy = false;\r\n } else if (user.UserIsLocked) {\r\n this.loginError = (this.loginService.LoginSettings.V10) ? 'User account is currently locked.' : 'User ' + user.UserName + ' - Account is not currently active';\r\n this.loginFromLegacy = false;\r\n } else {\r\n this.loginError = 'User account not found.';\r\n this.loginFromLegacy = false;\r\n }\r\n }\r\n }));\r\n }\r\n\r\n getUserLinks(id: number, yearId: any) {\r\n if (!this.V10) {\r\n yearId = this.yearService.defaultYear.Id;\r\n }\r\n if (this.V10) {\r\n // v10\r\n if (this.userService.userType != 1) {\r\n // Parent/Student\r\n this.userService.getParentStudentLinks(id, yearId).pipe(take(1)).subscribe(response => {\r\n // create a new link object for each object in the response body\r\n if (response.body != null) {\r\n for (let i = 0; i < response.body.length; i++) {\r\n const bLink = response.body[i];\r\n const link = new Link();\r\n link.LinkName = bLink.Description;\r\n link.Link_ID = bLink.Id;\r\n link.OpenAsHTTPS = bLink.OpenAsHTTPS;\r\n link.OpenAsNewWindow = bLink.OpenAsNewWindow;\r\n link.LinkUrl = bLink.WebAddress;\r\n link.IsDistrictLevel = 'Yes';\r\n this.userService.links.push(link);\r\n }\r\n }\r\n });\r\n } else {\r\n // Staff\r\n this.userService.getLinks(id, 0, yearId).pipe(take(1)).subscribe(response => {\r\n this.userService.links = response.body;\r\n });\r\n }\r\n } else {\r\n // v9\r\n this.userService.getParentStudentLinks(id, yearId).pipe(take(1)).subscribe(response => {\r\n // create a new link object for each object in the response body\r\n if (response.body != null) {\r\n for (let i = 0; i < response.body.length; i++) {\r\n const bLink = response.body[i];\r\n const link = new Link();\r\n link.LinkName = bLink.Description;\r\n link.Link_ID = bLink.Id;\r\n link.OpenAsHTTPS = bLink.OpenAsHTTPS;\r\n link.OpenAsNewWindow = bLink.OpenAsNewWindow;\r\n link.LinkUrl = bLink.WebAddress;\r\n link.IsDistrictLevel = 'No';\r\n this.userService.links.push(link);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n getUserFavorites() {\r\n this.userPreferencesService.getUserPreferences(0, '/OneSISFavorites').pipe(take(1)).subscribe(data => {\r\n this.userPreferencesService.favoritesPreferences = JSON.parse(data[0]);\r\n }, err => {\r\n console.log(err);\r\n }, () => {\r\n });\r\n }\r\n\r\n getDefaultYear(userId: number) {\r\n // TODO: forkJoin other default years here\r\n this.subscriptions.push(this.userService.getDefaultYear(userId).subscribe((year: Year) => {\r\n this.yearService.defaultYear = year;\r\n this.yearService.student360Year = year;\r\n this.yearService.loginYear = year;\r\n }));\r\n }\r\n\r\n getDistrictSchools() {\r\n this.yearService.getAllSchools().pipe(take(1)).subscribe(schools => {\r\n this.yearService.allDistrictSchools = schools;\r\n });\r\n }\r\n\r\n getUserYears() {\r\n // eslint-disable-next-line complexity\r\n this.subscriptions.push(this.yearService.getUserYears(this.userService.currentUser.Id, this.userService.currentUser.UserType, !this.loginSettings.V10 && this.studentService.legacySelectedStudentId != null && this.studentService.legacySelectedStudentId > 0 ? this.studentService.legacySelectedStudentId : this.userService.studentId).subscribe(years => {\r\n if (years.length == 0) {\r\n this.loginError = 'User is not assigned any Academic Years.';\r\n this.loginFromLegacy = false;\r\n } else {\r\n this.yearService.setCurrentAttendanceDate(years);\r\n const defaultYear = years.filter(y => y.Default)[0];\r\n let impersonateYear: Year;\r\n if (this.V10 == false && this.siteYearId != undefined && this.siteYearId != null && this.siteYearId != '') {\r\n impersonateYear = years.filter(y => y.SiteYearId == Number(this.siteYearId))[0];\r\n }\r\n if (this.V10 == true || defaultYear != null || (impersonateYear != null && impersonateYear != undefined)) {\r\n this.yearService.defaultYear = (impersonateYear != null && impersonateYear != undefined) ? impersonateYear : defaultYear;\r\n this.yearService.student360Year = (impersonateYear != null && impersonateYear != undefined) ? impersonateYear : defaultYear;\r\n this.yearService.loginYear = (impersonateYear != null && impersonateYear != undefined) ? impersonateYear : defaultYear;\r\n this.yearService.loadYears(years);\r\n if (this.V10 == false) {\r\n this.yearService.loadYearsForC360(years);\r\n }\r\n this.securityService.loadUserPermissions();\r\n this.yearService.years = years;\r\n if (this.userService.userType == 1) {\r\n this.getDistrictSchools();\r\n }\r\n this.getUserFavorites();\r\n if (this.V10) {\r\n this.getUserLinks(this.userService.currentUser.Id, this.yearService.defaultYear.AYIdentifier);\r\n } else if (this.userService.currentUser.UserType == 1) {\r\n this.getUserLinks(0, this.yearService.defaultYear.Id);\r\n }\r\n } else {\r\n this.getUserDefaultSchoolYearIsBlocked(false);\r\n this.loginFromLegacy = false;\r\n return;\r\n }\r\n }\r\n if (this.userService.currentUser.NewFamilyRegistration) {\r\n this.getStudents(() => {\r\n this.router.navigateByUrl('/student360/onlineRegistration');\r\n });\r\n } else if (this.userService.currentUser.UserType != 1) {\r\n this.getStudents(() => {\r\n if (this.studentService.students.length > 0) {\r\n if (!this.usingCookie && (this.userService.currentUser.ForceChangePassword || this.userService.currentUser.ForceChangeExpiredPass) && (this.userService.currentUser.UserType != 3 || (this.loginSettings.StudentUserUseADPassword == false && this.loginSettings.ActivateGoogleAuthenticationForStudent == false))) {\r\n this.router.navigateByUrl('/changePassword');\r\n } else {\r\n this.router.navigateByUrl('/student360');\r\n }\r\n if (this.V10) {\r\n this.getUserLinks(this.studentService.selectedStudent.Id, this.yearService.defaultYear.Id);\r\n }\r\n else {\r\n const studentId = (this.userService.userType == 3) ? this.studentService.selectedStudent.Id : 0;\r\n this.getUserLinks(studentId, this.yearService.defaultYear.Id);\r\n }\r\n } else {\r\n this.isLoggedInError = true;\r\n if (this.userService.userType == 3) {\r\n this.loginError = 'Portal is not activated for the year(s) you are enrolled.';\r\n this.loginFromLegacy = false;\r\n } else if (this.yearService.defaultYear.V10Flag && this.userService.userType == 2) {\r\n this.loginError = 'Portal not activated for year(s) in which student(s) are enrolled.';\r\n this.loginFromLegacy = false;\r\n } else {\r\n if (this.yearService.defaultYear.V10Flag) {\r\n this.loginError = 'Portal not activated for year(s) in which student(s) are enrolled.';\r\n this.loginFromLegacy = false;\r\n } else {\r\n this.loginError = 'Student(s) Not Enrolled in Portal Default School Year';\r\n this.loginFromLegacy = false;\r\n }\r\n }\r\n }\r\n });\r\n } else {\r\n if (this.loginSettings.V10) {\r\n if (sessionStorage.getItem('loginFromLegacy') != null || sessionStorage.getItem('loginFromLegacy') == '1') {\r\n this.getGeneralPreferences(false);\r\n }\r\n\r\n if (!this.usingCookie && (this.userService.currentUser.ForceChangePassword || this.userService.currentUser.ForceChangeExpiredPass)) {\r\n this.router.navigateByUrl('/changePassword');\r\n } else {\r\n this.router.navigateByUrl('/classroom360');\r\n }\r\n } else {\r\n if (this.userService.userType == 1) {\r\n if (sessionStorage.getItem('loginFromLegacy') != null || sessionStorage.getItem('loginFromLegacy') == '1') {\r\n this.getGeneralPreferences(false);\r\n }\r\n }\r\n if (this.userService.userType == 1 && this.loginSettings.ActivateClassroom360 && this.loginSettings.ActivateBehavior360 == true && this.queryStringAction != null && this.queryStringAction != '') {\r\n if (this.queryStringAction.toUpperCase() == 'Behavior'.toUpperCase() || this.queryStringAction.toUpperCase() == 'Discipline'.toUpperCase()) {\r\n this.router.navigateByUrl('/counselor360/behavior/behaviorEvents');\r\n } else if (this.queryStringAction.toUpperCase() == 'Incident_NAA'.toUpperCase()) {\r\n this.router.navigateByUrl('/counselor360/behavior/behaviorEvents?calledFromCard=true');\r\n } else if (this.queryStringAction.toUpperCase() == 'Referral'.toUpperCase()) {\r\n this.router.navigateByUrl('/classroom360/behaviorReferral');\r\n } else if (this.queryStringAction.toUpperCase() == 'Referrallink'.toUpperCase()) {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'referrallink': true\r\n }\r\n };\r\n this.router.navigate(['/classroom360/behaviorReferral'], navigationExtras);\r\n } else if (this.queryStringAction.toUpperCase() == 'Referral_WA'.toUpperCase() || this.queryStringAction.toUpperCase() == 'Referral_AR'.toUpperCase()) {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'referrallink': true,\r\n 'referralStatus': this.queryStringAction\r\n }\r\n };\r\n this.router.navigate(['/classroom360/behaviorReferral'], navigationExtras);\r\n } else if (this.queryStringAction.toUpperCase() == 'EForms_C'.toUpperCase() || this.queryStringAction.toUpperCase() == 'EForms_R'.toUpperCase()) {\r\n const navigationExtras: NavigationExtras = {\r\n queryParams: {\r\n 'referrallink': true,\r\n 'referralStatus': this.queryStringAction\r\n }\r\n };\r\n if (this.queryStringAction.toUpperCase() == 'EForms_C'.toUpperCase()) {\r\n this.eFormService.manageEformsFilter = 'accepted';\r\n }\r\n if (this.queryStringAction.toUpperCase() == 'EForms_R'.toUpperCase()) {\r\n this.eFormService.manageEformsFilter = 'submitted';\r\n }\r\n this.eFormService.redirectFromClassic = true;\r\n this.router.navigate(['/admin360/eForms/processing/'], navigationExtras);\r\n } else if (this.queryStringAction.toUpperCase() == 'PermissionModifedIn360'.toUpperCase()) {\r\n this.router.navigateByUrl('/management360/staff/staffAdministration');\r\n }\r\n\r\n setTimeout(() => {\r\n this.sharedService.updateIsPageLoaded(true);\r\n }, 100);\r\n } else if (this.userService.userType == 1 && this.loginSettings.ActivateClassroom360 && (this.studentService.legacySelectedStudentId == 0)) {\r\n if (!this.usingCookie && (this.userService.currentUser.ForceChangePassword || this.userService.currentUser.ForceChangeExpiredPass) && this.loginSettings.StaffUserUseADPassword == false && this.loginSettings.ActivateGoogleAuthenticationForStaff == false) {\r\n this.router.navigateByUrl('/changePassword');\r\n } else {\r\n this.router.navigateByUrl('/classroom360');\r\n }\r\n } else {\r\n if (this.studentService.legacySelectedStudentId != null && this.studentService.legacySelectedStudentId > 0) {\r\n this.studentService.getStudent(+this.studentService.legacySelectedStudentId).subscribe(student => {\r\n this.studentService.selectedStudent = student;\r\n this.students.push(student);\r\n this.studentService.updateStudents(this.students);\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n });\r\n } else {\r\n if (!this.usingCookie && (this.userService.currentUser.ForceChangePassword || this.userService.currentUser.ForceChangeExpiredPass) && this.loginSettings.StaffUserUseADPassword == false && this.loginSettings.ActivateGoogleAuthenticationForStaff == false) {\r\n this.router.navigateByUrl('/changePassword');\r\n } else {\r\n this.dialog.open(StudentSearchComponent,\r\n {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw',\r\n disableClose: true\r\n }\r\n );\r\n }\r\n\r\n setTimeout(() => {\r\n if (this.userService.currentUser.UserType == 1 && this.loginService.LoginSettings.BlockClassroom360) {\r\n this.dialog.open(AccessMessageComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '500px',\r\n disableClose: true\r\n });\r\n }\r\n }, 0);\r\n }\r\n }\r\n }\r\n }\r\n }));\r\n }\r\n\r\n getStudents(callback: Function) {\r\n let userId: number = this.userService.userId;\r\n if (this.userService.currentUser.UserType == 3 && userId == 0) {\r\n userId = this.userService.studentId;\r\n }\r\n this.subscriptions.push(this.studentService.getParentAssignedStudents(userId, this.yearService.defaultYear.Id, this.userService.currentUser.UserType).subscribe((students: Student[]) => {\r\n this.studentService.updateStudents(students);\r\n callback(students);\r\n }));\r\n }\r\n\r\n getClassicCurrentUser(action: string) {\r\n this.queryStringAction = '';\r\n if (this.loginSettings.V10 != undefined) {\r\n try {\r\n const decryptAction = window.atob(action);\r\n const splitParameter = decryptAction.split('&');\r\n if (splitParameter.length > 1) {\r\n this.siteYearId = splitParameter[1].split('=')[1];\r\n }\r\n // if (decryptAction != null && (decryptAction.toUpperCase() == 'Behavior'.toUpperCase() || decryptAction.toUpperCase() == 'Referral'.toUpperCase() || decryptAction.toUpperCase() == 'Discipline'.toUpperCase() || decryptAction.toUpperCase() == 'Referrallink'.toUpperCase() || splitParameter[0].toUpperCase() == 'Referral_AR'.toUpperCase() || splitParameter[0].toUpperCase() == 'Referral_WA'.toUpperCase() || splitParameter[0].toUpperCase() == 'Referral'.toUpperCase() || splitParameter[0].toUpperCase() == 'Discipline'.toUpperCase() || splitParameter[0].toUpperCase() == 'Behavior'.toUpperCase())) {\r\n if (decryptAction != null && (decryptAction.toUpperCase() == 'Behavior'.toUpperCase()\r\n || decryptAction.toUpperCase() == 'Referral'.toUpperCase() || decryptAction.toUpperCase() == 'Discipline'.toUpperCase()\r\n || decryptAction.toUpperCase() == 'Referrallink'.toUpperCase()\r\n || decryptAction.toUpperCase() == 'Incident_NAA'.toUpperCase()\r\n || splitParameter[0].toUpperCase() == 'Referral_AR'.toUpperCase()\r\n || splitParameter[0].toUpperCase() == 'Referral_WA'.toUpperCase() || splitParameter[0].toUpperCase() == 'Referral'.toUpperCase()\r\n || splitParameter[0].toUpperCase() == 'Discipline'.toUpperCase() || splitParameter[0].toUpperCase() == 'Behavior'.toUpperCase()\r\n || splitParameter[0].toUpperCase() == 'EForms_C'.toUpperCase() || splitParameter[0].toUpperCase() == 'EForms_R'.toUpperCase()\r\n || splitParameter[0].toUpperCase() == 'Incident_NAA'.toUpperCase())\r\n ) {\r\n this.queryStringAction = (splitParameter != undefined && splitParameter.length > 0) ? splitParameter[0] : decryptAction;\r\n } else if (decryptAction != null && (splitParameter[0].toUpperCase() == 'PERMISSIONMODIFEDIN360')) {\r\n this.staffService.legacySelectedStaffId = Number(splitParameter[2].split('=')[1]);\r\n this.queryStringAction = (splitParameter != undefined && splitParameter.length > 0) ? splitParameter[0] : decryptAction;\r\n } else if (decryptAction != null && decryptAction.split(':').length > 1) {\r\n const legacySelectedStudentId = decryptAction.split(':')[1];\r\n this.studentService.legacySelectedStudentId = Number(legacySelectedStudentId);\r\n }\r\n } catch (e) {\r\n this.studentService.legacySelectedStudentId = 0;\r\n }\r\n sessionStorage.setItem('loginFromLegacy', '1');\r\n this.getUser(true);\r\n } else {\r\n setTimeout(() => {\r\n this.getClassicCurrentUser(action);\r\n }, 50);\r\n }\r\n }\r\n\r\n getRegisterParent(id) {\r\n this.subscriptions.push(this.loginService.getRegisterParent(id).subscribe((result) => {\r\n if (result) {\r\n // this.location.url(this.location.path());\r\n this.familyRegistrationService.householdParent = result;\r\n\r\n this.userService.currentLanguage = 'en';\r\n if (this.familyRegistrationService.householdParent.Language == 2) {\r\n this.userService.currentLanguage = 'fr';\r\n } else if (this.familyRegistrationService.householdParent.Language == 3) {\r\n this.userService.currentLanguage = 'es';\r\n } else if (this.familyRegistrationService.householdParent.Language == 4) {\r\n this.userService.currentLanguage = 'pt';\r\n }\r\n\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n\r\n\r\n this.familyRegistrationService.getORYears().subscribe((years: FamilyRegistrationYear[]) => {\r\n this.familyRegistrationService.years = years;\r\n if (this.familyRegistrationService.years.length != 0) {\r\n if ((this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.AyIdentifier != null && this.familyRegistrationService.householdParent.AyIdentifier != '') || (!this.loginService.LoginSettings.V10 && this.familyRegistrationService.householdParent.YearId > 0)) {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.AYIdentifier == this.familyRegistrationService.householdParent.AyIdentifier);\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years.find(o => o.Id == this.familyRegistrationService.householdParent.YearId);\r\n }\r\n if (this.familyRegistrationService.defaultYear) {\r\n this.router.navigateByUrl('/familyregistration/householdparent');\r\n }\r\n } else {\r\n if (this.loginService.LoginSettings.V10) {\r\n const currentDate = new Date();\r\n for (let i = 0; i < this.familyRegistrationService.years.length; i++) {\r\n if (this.familyRegistrationService.years[i].Status == 1) {\r\n if (this.familyRegistrationService.years[i].StartDate < currentDate) {\r\n this.familyRegistrationService.years[i].Status = 3;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.familyRegistrationService.years.length > 1) {\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n } else {\r\n this.familyRegistrationService.defaultYear = this.familyRegistrationService.years[0];\r\n this.familyRegistrationService.householdParent.YearId = this.familyRegistrationService.defaultYear.Id;\r\n this.familyRegistrationService.householdParent.AyIdentifier = this.loginService.LoginSettings.V10 ? this.familyRegistrationService.defaultYear.AYIdentifier : this.familyRegistrationService.defaultYear.Description;\r\n\r\n this.frYearsDialogRef = this.dialog.open(NewFamilyRegistrationYearSelectionComponent, {\r\n disableClose: true,\r\n maxWidth: '500px'\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }));\r\n }\r\n\r\n getGeneralPreferences(enterClick: boolean) {\r\n this.userPreferencesService.getUserPreferences(0, '/OneSISGeneralPreferences', 0, '0').pipe(take(1)).subscribe((data: string) => {\r\n const pref: GeneralPreferences = JSON.parse(data);\r\n this.userPreferencesService.generalPreferences = pref;\r\n if (enterClick) {\r\n if (pref.DefaultLoginScreen == 'Classic') {// && !this.userService.forceUserToClassic) {\r\n this.loginFromLegacy = false;\r\n } else {\r\n if (this.badBrowser) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n return;\r\n } else {\r\n this.loginFromLegacy = true;\r\n }\r\n }\r\n }\r\n if (sessionStorage.getItem('loginFromLegacy') == null || sessionStorage.getItem('loginFromLegacy') != '1') {\r\n this.getUser(enterClick);\r\n }\r\n });\r\n }\r\n\r\n getForgotPasswordDetail() {\r\n this.subscriptions.push(this.loginService.getForgetPasswordDetail(this.forgetPasswordParams).subscribe(\r\n (result: object) => { // success\r\n this.forgetPassword = result;\r\n this.userType = this.forgetPassword.UserType;\r\n if (this.forgetPassword.Id == -1 && this.forgetPassword.StudentId == -1) {\r\n this.isLinkExpired = true;\r\n this.resetPasswordMessage = this.forgetPassword.LastName;\r\n this.setUserIndex.emit(this.userType - 1);\r\n } else if (this.forgetPassword.LastName == 'success') {\r\n this.resetPasswordMessage = '';\r\n if (this.forgetPassword.UserType != 3) {\r\n this.userService.userId = this.forgetPassword.Id;\r\n } else {\r\n this.userService.studentId = this.forgetPassword.StudentId;\r\n }\r\n this.userType = this.forgetPassword.UserType;\r\n this.userService.userType = this.forgetPassword.UserType;\r\n this.userService.studentId = this.forgetPassword.studentId;\r\n this.userService.username = this.forgetPassword.UserName;\r\n this.userService.password = this.forgetPassword.Password;\r\n this.setUserIndex.emit(this.userType - 1);\r\n }\r\n },\r\n (err) => {\r\n }, // fail\r\n () => { // then\r\n if (this.classicSetPassword && this.resetPasswordMessage != null && this.resetPasswordMessage != '') {\r\n this.userService.userType = this.userType;\r\n }\r\n this.ResetPasswordDialogRef = this.dialog.open(ResetPasswordComponent, {\r\n disableClose: true,\r\n width: this.isLinkExpired ? '500px' : '400px',\r\n data: {\r\n user: this.forgetPassword,\r\n forgotPasswordParams: this.forgetPasswordParams,\r\n isLinkExpired: this.isLinkExpired,\r\n resetPasswordMessage: this.resetPasswordMessage\r\n }\r\n });\r\n }\r\n ));\r\n }\r\n\r\n getUserDefaultSchoolYearIsBlocked(enterClick: boolean) {\r\n this.subscriptions.push(this.loginService.getUserDefaultSchoolYearIsBlocked().subscribe(result => {\r\n if (result != null && result != '') {\r\n this.loginError = 'Login to Site-Year' + result + ' is blocked';\r\n } else {\r\n if (this.loginFromLegacy == false && this.loginSettings.DisplaySeparateUserTypes == true && this.userType == 1) {\r\n this.getUserPermissions(enterClick);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n saveUserLoginInfo(userId: number) {\r\n this.loginService.saveUserLoginInfo(userId, this.userService.userType, window.innerHeight, window.innerWidth, 1, '');\r\n }\r\n\r\n setUserLanguage() {\r\n this.userService.getUserLanguage();\r\n }\r\n\r\n setTabs() {\r\n this.tabNames = [];\r\n if (this.showUserType == 0) {\r\n this.tabNames.push('Staff');\r\n }\r\n if (this.loginSettings.ParentPortalShowParentTab && (this.showUserType == 0 || this.showUserType == 2)) {\r\n this.tabNames.push('Parent');\r\n }\r\n if (this.loginSettings.ParentPortalShowStudentTab && (this.showUserType == 0 || this.showUserType == 3)) {\r\n this.tabNames.push('Student');\r\n }\r\n switch (this.userType) {\r\n case 1: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Staff');\r\n break;\r\n }\r\n case 2: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Parent');\r\n break;\r\n }\r\n case 3: {\r\n this.defaultTabIndex = this.tabNames.indexOf('Student');\r\n break;\r\n }\r\n }\r\n\r\n if (this.defaultTabIndex == -1) {\r\n this.defaultTabIndex = 0;\r\n this.userType = 1;\r\n }\r\n }\r\n\r\n setUserType = function () {\r\n if (localStorage) {\r\n if (localStorage.getItem('UserType')) {\r\n this.userType = parseInt(localStorage.getItem('UserType'), 10);\r\n }\r\n if (this.activateGoogleAuthenticationForStaff == true && localStorage.getItem('StaffGoogleAuthentication')) {\r\n this.staffGoogleAuthentication = localStorage.getItem('StaffGoogleAuthentication').toLowerCase() == 'true';\r\n }\r\n if (this.loginSettings.UseTID == true && localStorage.getItem('staffTID')) {\r\n this.staffTID =\r\n localStorage.getItem('staffTID').toLowerCase() == 'true';\r\n }\r\n }\r\n if ((this.router.url.toLowerCase() == '/parent' || this.router.url.toLowerCase() == '/login/parent') && this.loginService.LoginSettings.ParentPortalShowParentTab == true) {\r\n this.userType = 2;\r\n this.showUserType = 2;\r\n } else if ((this.router.url.toLowerCase() == '/student' || this.router.url.toLowerCase() == '/login/student') && this.loginService.LoginSettings.ParentPortalShowStudentTab == true) {\r\n this.userType = 3;\r\n this.showUserType = 3;\r\n } else {\r\n this.showUserType = 0;\r\n }\r\n };\r\n\r\n tabChange(e: string) {\r\n switch (e) {\r\n // DO NOT ACCESS THE USER SERVICE FROM HERE\r\n case 'Staff': {\r\n this.userType = 1;\r\n break;\r\n }\r\n case 'Parent': {\r\n this.userType = 2;\r\n break;\r\n }\r\n case 'Student': {\r\n this.userType = 3;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n forgotPasswordClick() {\r\n this.classicSetPassword = false;\r\n if (this.router.url == '/loginassist') {\r\n this.loginService.LoginSettings.ShowForgotUserNameLink = false;\r\n }\r\n this.forgotPasswordDialogRef = this.dialog.open(ForgotPasswordComponent, {\r\n disableClose: true,\r\n maxWidth: '400px',\r\n data: { userType: this.userType }\r\n });\r\n }\r\n\r\n registerNewFamilyClick() {\r\n // PRE: the user tries to register a new family\r\n // POST: checks the browser. If okay, then opens dialog for registration process.\r\n\r\n // Show an error if this is IE\r\n if (this.badBrowser) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n }\r\n\r\n // Otherwise, start new family registration process\r\n else {\r\n this.familyRegistrationService.registerNewFamily = {};\r\n this.familyRegistrationService.registerNewFamily.language = 'en';\r\n this.familyRegistrationService.registerNewFamily.emailAddress = '';\r\n this.openNewFamilyRegistrationPopup('Select Language');\r\n }\r\n }\r\n\r\n openNewFamilyRegistrationPopup(window: string) {\r\n switch (window) {\r\n case 'Select Language': {\r\n this.selectLanguageDialogRef = this.dialog.open(SelectLanguageComponent, {\r\n disableClose: true,\r\n });\r\n this.subscriptions.push(this.selectLanguageDialogRef.afterClosed().subscribe(result => {\r\n this.openNewFamilyRegistrationPopup(result);\r\n }));\r\n break;\r\n }\r\n case 'Register New Family Message': {\r\n this.registerFamilyMessageDialogRef = this.dialog.open(RegisterNewFamilyMessageComponent, {\r\n maxHeight: '50vh',\r\n maxWidth: '40vw',\r\n disableClose: true,\r\n });\r\n this.subscriptions.push(this.registerFamilyMessageDialogRef.afterClosed().subscribe(result => {\r\n this.openNewFamilyRegistrationPopup(result);\r\n }));\r\n break;\r\n }\r\n case 'Register New Family': {\r\n this.registerNewFamilyDialogRef = this.dialog.open(RegisterNewFamilyComponent, {\r\n disableClose: true,\r\n });\r\n this.subscriptions.push(this.registerNewFamilyDialogRef.afterClosed().subscribe(result => {\r\n this.openNewFamilyRegistrationPopup(result);\r\n }));\r\n break;\r\n }\r\n case 'Cancel was clicked.': {\r\n this.userService.currentLanguage = 'en';\r\n this.translateService.use(this.userService.currentLanguage);\r\n this.translateService.setDefaultLang(this.userService.currentLanguage);\r\n this.translationService.getLanguageTranslations();\r\n break;\r\n }\r\n default: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getUserPermissions(enterClick: boolean) {\r\n // POST: obtains the permissions from the server\r\n this.subscriptions.push(\r\n this.userService.getUserPermissions(this.userService.currentUser.LoginYearId, this.userService.currentUser.LoginSchoolId).subscribe(permissions => {\r\n this.userPermissions = permissions;\r\n const forceTeachersDate = this.loginService.LoginSettings.ForceTeachersDate;\r\n\r\n if (this.userService.currentUser.UserIsTeacher && forceTeachersDate != null && new Date(forceTeachersDate) <= new Date()\r\n && this.userPermissions.filter(o => o.PermissionCode == 'NSE_VSH' || o.PermissionCode == 'GO_VFMMNJTM').length == 0\r\n ) {\r\n this.redirectUserTo360();\r\n }\r\n else if (this.userPermissions.find(permission => permission.PermissionName == 'Login only to 360')) {\r\n if (!enterClick) {\r\n this.loginOnly360DialogRef = this.dialog.open(LoginOnly360Component, {\r\n panelClass: 'tyl-mat-dialog',\r\n maxWidth: '500px',\r\n disableClose: true\r\n });\r\n this.loginOnly360DialogRef.afterClosed().subscribe(result => {\r\n this.redirectUserTo360();\r\n });\r\n } else {\r\n this.redirectUserTo360();\r\n }\r\n } else {\r\n window.localStorage.setItem('NewApplication', '1');\r\n const legacyUrl = window.location.href.substr(0, window.location.href.indexOf('360'));\r\n window.location.href = legacyUrl + '/SwitchToClassic.aspx';\r\n\r\n if (sessionStorage.getItem('ClassicLoginAttempt') != null && sessionStorage.getItem('ClassicMTUrl') != null && sessionStorage.getItem('ClassicMTUrl').toLowerCase() == legacyUrl.toLowerCase()) {\r\n sessionStorage.setItem('ClassicLoginAttempt', (Number(sessionStorage.getItem('ClassicLoginAttempt')) + 1).toString());\r\n } else {\r\n sessionStorage.setItem('ClassicLoginAttempt', '1');\r\n }\r\n }\r\n }));\r\n }\r\n\r\n detectIE() {\r\n // POST: returns true if this is IE\r\n const ua = window.navigator.userAgent;\r\n\r\n // Test values; Uncomment to check result …\r\n\r\n // IE 10\r\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\r\n\r\n // IE 11\r\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\r\n\r\n // Edge 12 (Spartan)\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\r\n\r\n // Edge 13\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKmozillamozillamozillamozillait/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\r\n\r\n const msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return true;\r\n }\r\n\r\n const trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n const rv = ua.indexOf('rv:');\r\n return true;\r\n }\r\n\r\n const edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return false;\r\n }\r\n\r\n // other browser\r\n return false;\r\n }\r\n\r\n setEFormsConfig() {\r\n if (this.loginService.LoginSettings.V10) {\r\n this.loginService.LoginSettings.EFormNonResident = false;\r\n this.loginService.LoginSettings.EFormUseRoles = true;\r\n } else {\r\n this.loginService.LoginSettings.EFormNonResident = true;\r\n this.loginService.LoginSettings.EFormUseRoles = false;\r\n }\r\n }\r\n\r\n staffGoogleAuthenticationChange() {\r\n if (this.staffGoogleAuthentication == true) {\r\n this.username = '';\r\n this.password = '';\r\n }\r\n localStorage.setItem('StaffGoogleAuthentication', this.staffGoogleAuthentication.toString());\r\n }\r\n\r\n staffTIDChange() {\r\n if (this.staffTID == true) {\r\n this.username = '';\r\n this.password = '';\r\n }\r\n localStorage.setItem('staffTID', this.staffTID.toString());\r\n }\r\n\r\n googleUserAuthentication(enterClick: boolean) {\r\n this.loginWithGoogle = true;\r\n if (!this.loginSettings.EnableGoogleIdentityServices) {\r\n gapi.auth2.getAuthInstance().signIn().then(\r\n (googleUser) => {\r\n // Loading the user's ID token\r\n const idToken = googleUser.getAuthResponse().id_token;\r\n this.validateGoogleToken(idToken, enterClick, 'google_oAuth');\r\n },\r\n // This is called when the user fails to log into google\r\n (googleError) => {\r\n this.loginFromLegacy = false;\r\n if (googleError.error != 'popup_closed_by_user') {\r\n this.zone.run(() => {\r\n this.loginError = 'Invalid Google login.';\r\n this.loginWithGoogle = false;\r\n });\r\n }\r\n }\r\n );\r\n }\r\n else {\r\n let clientId = this.loginSettings.GoogleClientId;\r\n if (!clientId.includes('.apps.googleusercontent.com')) {\r\n clientId = clientId + '.apps.googleusercontent.com';\r\n }\r\n\r\n const client = google.accounts.oauth2.initTokenClient({\r\n client_id: clientId,\r\n scope: this.googleScope,\r\n callback: (token) => {\r\n if (token && token.access_token) {\r\n token.expiresDateTime = new Date();\r\n token.expiresDateTime.setMinutes(token.expiresDateTime.getMinutes() + 59);\r\n this.userService.googleUser = token;\r\n this.validateGoogleToken(token.access_token, enterClick, 'googleIdentity_oAuth');\r\n }\r\n else {\r\n this.loginError = 'Invalid Google login.';\r\n this.loginWithGoogle = false;\r\n }\r\n },\r\n });\r\n\r\n client.requestAccessToken();\r\n }\r\n }\r\n\r\n validateGoogleToken(token: string, enterClick: boolean, grantType: string) {\r\n // If this is a bad browser, show the warning and exit\r\n if (this.badBrowser) {\r\n this.dialog.open(UnsupportedBrowserWarningDialogComponent, {\r\n disableClose: true\r\n });\r\n this.userService.googleUser = null;\r\n return;\r\n }\r\n\r\n // Validating ID token\r\n // NOTE: we have to run this in the zone or it won't trigger change detection\r\n this.zone.run(() => {\r\n const subscription = this.loginService.logonGoogle(token, this.userType, grantType).subscribe(\r\n user => {\r\n // If valid, log in\r\n if (localStorage) {\r\n localStorage.setItem('UserType', user.userType);\r\n }\r\n sessionStorage.setItem('accessToken', user.access_token);\r\n\r\n if (user.userType == '1') {\r\n this.getGeneralPreferences(enterClick);\r\n if (!this.loginSettings.V10) {\r\n this.getDefaultYear(this.userService.userId);\r\n }\r\n } else {\r\n this.getUser(enterClick);\r\n }\r\n this.loginService.hasSignedIntoGoogle = true;\r\n\r\n // Unsubscribing to prevent leaks\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n },\r\n () => {\r\n this.loginFromLegacy = false;\r\n this.loginError = 'Matching SIS user not found.';\r\n this.userService.googleUser = null;\r\n }\r\n );\r\n });\r\n }\r\n\r\n v9TIDAuthentication(enterClick: boolean) {\r\n this.authService.getUser().then((u) => {\r\n if (u) {\r\n const subscription = this.loginService\r\n .logonTID(u.id_token, this.userType)\r\n .subscribe(\r\n (user) => {\r\n // If valid, log in\r\n this.loginFromLegacy = true; // Sri - this is copied from loginbuttonclick method line 396 doesn't make sense.\r\n if (user.userName != undefined && user.userName != null) {\r\n this.loginService.hasSignedIntoTylerId = true;\r\n this.setLocalStorage(user, enterClick);\r\n } else {\r\n this.loginError = 'Invalid Username or Password.';\r\n this.loginFromLegacy = false;\r\n }\r\n },\r\n (err) => {\r\n this.isLoggedIn = false;\r\n this.userService.isLoggedIn.next(false);\r\n this.userService.username = '';\r\n this.userService.userId = 0;\r\n this.userService.firstname = '';\r\n this.userService.lastname = '';\r\n this.userService.userType = 0;\r\n this.userService.studentId = 0;\r\n this.loginFromLegacy = false;\r\n if (err instanceof HttpErrorResponse && err.status == 400) {\r\n this.loginError = 'Invalid Username or Password.';\r\n } else {\r\n this.loginError = 'There was an error during the login process.';\r\n this.loginService.observableLoginError.next(err);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n redirectUserTo360() {\r\n this.isLoggedIn = true;\r\n this.userService.isLoggedIn.next(true);\r\n this.userService.username = this.userService.currentUser.UserName;\r\n this.userService.firstname = this.userService.currentUser.FirstName;\r\n this.userService.lastname = this.userService.currentUser.LastName;\r\n this.userService.userId = this.userService.currentUser.Id;\r\n this.userService.userType = this.userService.currentUser.UserType;\r\n this.userService.studentId = this.userService.currentUser.StudentId;\r\n let userId = this.userService.userId;\r\n if (this.userService.userType == 3 && userId == 0) {\r\n userId = this.userService.studentId;\r\n }\r\n if (sessionStorage.getItem('loginFromLegacy') == null || sessionStorage.getItem('loginFromLegacy') != '1') {\r\n this.saveUserLoginInfo(userId);\r\n }\r\n if (this.userService.userType != 1) {\r\n this.setUserLanguage();\r\n }\r\n this.getUserYears();\r\n }\r\n\r\n @HostListener('document:keydown.enter', ['$event'])\r\n onEnterKeyDown(event: KeyboardEvent) {\r\n if (!this.isLoggedIn) {\r\n this.LoginButtonClick(true);\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from '../auth.service';\r\n\r\n@Component({\r\n selector: 'app-silentcallback',\r\n templateUrl: './silentcallback.component.html'\r\n})\r\nexport class SilentcallbackComponent implements OnInit {\r\n\r\n constructor(private authService: AuthService) { }\r\n\r\n ngOnInit() {\r\n this.authService.signinSilent(); \r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { AuthGuard } from './auth.guard';\r\nimport { LogoutComponent } from './shared-components/logout/logout.component';\r\nimport { CallbackComponent } from './shared-modules/login/callback/callback.component';\r\nimport { ChangePasswordComponent } from './shared-modules/login/change-password/change-password.component';\r\nimport { LoginAssistComponent } from './shared-modules/login/login-assist/login-assist.component';\r\nimport { LoginComponent } from './shared-modules/login/login.component';\r\nimport { SilentcallbackComponent } from './shared-modules/login/silentcallback/silentcallback.component';\r\n\r\nconst appRoutes: Routes = [\r\n { path: 'loginAssist', component: LoginAssistComponent },\r\n { path: 'loginassist', component: LoginAssistComponent },\r\n { path: 'login', component: LoginComponent },\r\n { path: 'callback', component: CallbackComponent },\r\n { path: 'silentcallback', component: SilentcallbackComponent },\r\n { path: 'parent', component: LoginComponent },\r\n { path: 'student', component: LoginComponent },\r\n { path: 'logout', component: LogoutComponent, canActivate: [AuthGuard] },\r\n {\r\n path: 'familyregistration',\r\n loadChildren: () => import('app/shared-modules/family-registration/family-registration.module').then(m => m.FamilyRegistrationModule)\r\n },\r\n {\r\n path: 'studentattachment',\r\n loadChildren: () => import('app/shared-modules/student-attachment/student-attachment.module').then(m => m.StudentAttachmentModule)\r\n },\r\n {\r\n path: 'classroom360',\r\n loadChildren: () => import('app/classroom360/classroom360.module').then(m => m.Classroom360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'student360',\r\n loadChildren: () => import('app/student360/student360.module').then(m => m.Student360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'counselor360',\r\n loadChildren: () => import('app/counselor360/counselor360.module').then(m => m.Counselor360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'admin360',\r\n loadChildren: () => import('app/admin360/admin360.module').then(m => m.Admin360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'statereporting',\r\n loadChildren: () => import('app/state-reporting/state-reporting.module').then(m => m.StateReportingModule),\r\n // canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'management360',\r\n loadChildren: () => import('app/management360/management360.module').then(m => m.Management360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'health360',\r\n loadChildren: () => import('app/health360/health360.module').then(m => m.Health360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'sped360',\r\n loadChildren: () => import('app/sped360/sped360.module').then(m => m.Sped360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'specialServiceEvaluations',\r\n loadChildren: () => import('app/special-service-evaluations/special-service-evaluations.module').then(m => m.SpecialServiceEvaluationsModule),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'utilities360',\r\n loadChildren: () => import('app/utilities360/utilities360.module').then(m => m.Utilities360Module),\r\n canActivate: [AuthGuard]\r\n },\r\n {\r\n path: 'changePassword',\r\n component: ChangePasswordComponent\r\n },\r\n {\r\n path: 'tylerU',\r\n loadChildren: () => import('app/shared-modules/tyler-u/tyler-u.module').then(m => m.TylerUModule)\r\n },\r\n {\r\n path: '',\r\n redirectTo: '/login',\r\n pathMatch: 'full'\r\n },\r\n {\r\n path: '**',\r\n redirectTo: '/login',\r\n pathMatch: 'full'\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forRoot(\r\n appRoutes,\r\n {\r\n onSameUrlNavigation: 'reload',\r\n relativeLinkResolution: 'legacy',\r\n anchorScrolling: 'enabled'\r\n }\r\n )\r\n ],\r\n exports: [\r\n RouterModule\r\n ]\r\n})\r\nexport class AppRoutingModule {\r\n\r\n}\r\n","import { LinkAlreadySentComponent } from './../family-registration/link-already-sent/link-already-sent.component';\r\nimport { NewFamilyRegistrationYearSelectionComponent } from './../family-registration/new-family-registration-year-selection/new-family-registration-year-selection.component';\r\nimport { EmailSentComponent } from './../family-registration/email-sent/email-sent.component';\r\nimport { DuplicateEmailAddressComponent } from './../family-registration/duplicate-email-address/duplicate-email-address.component';\r\nimport { LoginExistsComponent } from './../family-registration/login-exists/login-exists.component';\r\nimport { RegisterNewFamilyComponent } from './../family-registration/register-new-family/register-new-family.component';\r\n\r\n\r\nimport { RegisterNewFamilyMessageComponent } from './../family-registration/register-new-family-message/register-new-family-message.component';\r\nimport { SelectLanguageComponent } from './../family-registration/select-language/select-language.component';\r\nimport { ChangePasswordComponent } from './change-password/change-password.component';\r\nimport { LoginFooterComponent } from './footer/login-footer.component';\r\nimport { LoginComponent } from './login.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { AppRoutingModule } from '../../app-routing.module';\r\nimport { SharedComponentsModule } from '../../shared-components/shared-components.module';\r\nimport { ForgotPasswordComponent } from './forgot-password/forgot-password.component';\r\nimport { ForgotUsernameComponent } from './forgot-username/forgot-username.component';\r\nimport { StudentResetPasswordWarningComponent } from './forgot-password/student-reset-password-warning/student-reset-password-warning.component';\r\nimport { LoginAssistComponent } from './login-assist/login-assist.component';\r\nimport { ResetPasswordComponent } from './reset-password/reset-password.component';\r\nimport { ConfirmationModalComponent } from './forgot-username/confirmation-modal/confirmation-modal.component';\r\nimport { LoginOnly360Component } from './login-only360/login-only360.component';\r\nimport { InactivityTimeoutComponent } from './inactivity-timeout/inactivity-timeout.component';\r\nimport { UnsupportedBrowserWarningDialogComponent } from './unsupported-browser-warning-dialog/unsupported-browser-warning-dialog.component';\r\nimport { EmailNotSentComponent } from '../family-registration/email-not-sent/email-not-sent.component';\r\nimport { AccessMessageComponent } from './access-message/access-message.component';\r\nimport { CookieService } from 'ngx-cookie-service';\r\nimport { RegisterNewFamilyVerifyCodeComponent } from '../family-registration/register-new-family-verify-code/register-new-family-verify-code.component';\r\nimport { AuditLoginsComponent } from './audit-logins/audit-logins.component';\r\nimport { CallbackComponent } from './callback/callback.component';\r\nimport { SilentcallbackComponent } from './silentcallback/silentcallback.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ForgotPasswordComponent,\r\n ResetPasswordComponent,\r\n ForgotUsernameComponent,\r\n StudentResetPasswordWarningComponent,\r\n ConfirmationModalComponent,\r\n LoginComponent,\r\n LoginFooterComponent,\r\n ChangePasswordComponent,\r\n SelectLanguageComponent,\r\n RegisterNewFamilyMessageComponent,\r\n RegisterNewFamilyComponent,\r\n CallbackComponent,\r\n SilentcallbackComponent,\r\n LinkAlreadySentComponent,\r\n LoginExistsComponent,\r\n DuplicateEmailAddressComponent,\r\n EmailSentComponent,\r\n NewFamilyRegistrationYearSelectionComponent,\r\n LoginAssistComponent,\r\n LoginOnly360Component,\r\n InactivityTimeoutComponent,\r\n UnsupportedBrowserWarningDialogComponent,\r\n EmailNotSentComponent,\r\n AccessMessageComponent,\r\n RegisterNewFamilyVerifyCodeComponent,\r\n AuditLoginsComponent\r\n ],\r\n imports: [\r\n SharedComponentsModule,\r\n AppRoutingModule\r\n ],\r\n providers: [\r\n CookieService\r\n ]\r\n})\r\nexport class LoginModule {\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpInterceptor, HttpHandler, HttpRequest} from '@angular/common/http';\r\nimport {YearService} from './shared-components/year/year.service';\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n\r\n constructor(\r\n private yearService: YearService\r\n ) {}\r\n\r\n intercept(req: HttpRequest, next: HttpHandler) {\r\n // Get the auth token from the service.\r\n let changedReq = req;\r\n\r\n // Adding authorization headers\r\n const authToken = sessionStorage.getItem('accessToken');\r\n let siteId: number;\r\n let yearId: number;\r\n if (this.yearService.defaultYear) {\r\n siteId = this.yearService.defaultYear.SchoolID;\r\n yearId = this.yearService.defaultYear.Id;\r\n } else {\r\n siteId = -1;\r\n yearId = -1;\r\n }\r\n if (authToken) {\r\n const newheader = 'Bearer ' + authToken.toString();\r\n changedReq = req.clone(\r\n {\r\n setHeaders: {\r\n Authorization: newheader.toString(),\r\n 'SiteId': siteId.toString(),\r\n 'YearId': yearId.toString()\r\n }\r\n }\r\n );\r\n }\r\n\r\n // Handling the request with authorization\r\n return next.handle(changedReq);\r\n }\r\n}\r\n\r\n\r\n/*\r\nCopyright 2017-2018 Google Inc. All Rights Reserved.\r\nUse of this source code is governed by an MIT-style license that\r\ncan be found in the LICENSE file at http://angular.io/license\r\n*/\r\n","/* \"Barrel\" of Http Interceptors */\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { AuthInterceptor } from './authIntercepter';\r\n\r\n\r\n/** Http interceptor providers in outside-in order */\r\nexport const httpInterceptorProviders = [\r\n { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }\r\n\r\n];\r\n\r\n\r\n/*\r\nCopyright 2017-2018 Google Inc. All Rights Reserved.\r\nUse of this source code is governed by an MIT-style license that\r\ncan be found in the LICENSE file at http://angular.io/license\r\n*/\r\n","import { Component, Inject, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Component({\r\n selector: 'app-inactivity-timeout',\r\n templateUrl: './inactivity-timeout.component.html'\r\n})\r\nexport class InactivityTimeoutComponent implements OnDestroy {\r\n\r\n inactiveTime: number;\r\n logoutStartTime: Date;\r\n subscriptions: Subscription[] = [];\r\n\r\n public get secondCount(): number {\r\n const current = new Date();\r\n return 60 - Math.round((current.getTime() - this.logoutStartTime.getTime()) / 1000);\r\n }\r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n if (data) {\r\n this.inactiveTime = data.inactiveTime;\r\n this.logoutStartTime = data.logoutStartTime;\r\n }\r\n\r\n ['click', 'touchstart', 'mousemove', 'keydown'].forEach(evt =>\r\n document.addEventListener(evt, this.closeDialog.bind(this), false)\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n }\r\n\r\n closeDialog() {\r\n this.dialog.close();\r\n }\r\n}","
\r\n
\r\n

Account inactive for {{inactiveTime}} minutes...

\r\n
\r\n
\r\n You will be logged out in {{secondCount}} second(s).\r\n
\r\n
","
\r\n \r\n Access Denied\r\n \r\n
\r\n\r\n\r\n
\r\n The {{portalName}} page is not available for {{student.FirstName}} {{student.LastName}}.\r\n
\r\n You have been returned to the Student Summary page.\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n\r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { Student } from '../../shared-components/student/student.model';\r\nimport { StudentService } from '../../shared-components/student/student.service';\r\n\r\n@Component({\r\n selector: 'app-portal-access-denied',\r\n templateUrl: './portal-access-denied.component.html'\r\n})\r\nexport class PortalAccessDeniedComponent {\r\n\r\n portalName: string;\r\n student: Student;\r\n\r\n @Output() revertToStudentSummary = new EventEmitter();\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private dialog: MatDialogRef\r\n ) {\r\n this.student = this.studentService.selectedStudent;\r\n }\r\n\r\n closeClick() {\r\n this.revertToStudentSummary.emit();\r\n this.dialog.close();\r\n }\r\n}\r\n","
\r\n About SIS K-12\r\n
© {{currentDate.getFullYear()}} Copyright Tyler Technologies, Inc. All rights reserved.
\r\n
\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 360 Application Version\r\n \r\n {{aboutTyler.ApplicationVersion}}\r\n
\r\n Classic Application Version\r\n \r\n {{legacyVersion}}\r\n
\r\n Hot Fix Version\r\n \r\n {{aboutTyler.HotFixVersion}}\r\n
\r\n Database\r\n \r\n {{aboutTyler.Database}}\r\n
\r\n Reports Version\r\n \r\n {{aboutTyler.ReportsVersion}}\r\n
\r\n Report Server\r\n \r\n {{aboutTyler.ReportServer}}\r\n
\r\n TCM Integration\r\n \r\n {{aboutTyler.TCMIntegration}}\r\n
\r\n SPED Integration\r\n \r\n {{aboutTyler.SpEdIntegration}}\r\n
\r\n Server Name\r\n \r\n {{aboutTyler.ServerName}}\r\n
\r\n Operating System\r\n \r\n {{aboutTyler.OperatingSystem}}\r\n
\r\n .Net Version\r\n \r\n {{aboutTyler.DotNetVersion}}\r\n
\r\n Database Version\r\n \r\n {{aboutTyler.DatabaseVersion}}\r\n
\r\n Client Name (IP)\r\n \r\n {{aboutTyler.ClientName}}\r\n
\r\n Platform / Browser\r\n \r\n {{aboutTyler.PlatformBrowser}}\r\n
\r\n Browser Language\r\n \r\n {{aboutTyler.BrowserLanguage}}\r\n
\r\n Browser Compatible\r\n \r\n {{aboutTyler.BrowserCompatible}}\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { LoginService } from '../../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../../shared-modules/login/LoginSetting.model';\r\nimport { SharedService } from '../../shared.service';\r\nimport { AboutTyler } from './about-tyler.model';\r\n\r\n@Component({\r\n selector: 'app-about-panel',\r\n templateUrl: './about-panel.component.html'\r\n})\r\nexport class AboutPanelComponent implements OnInit {\r\n\r\n aboutTyler: AboutTyler;\r\n legacyVersion: string;\r\n currentDate: Date;\r\n loginSettings: LoginSettings;\r\n\r\n constructor(\r\n private dialog: MatDialogRef,\r\n private sharedService: SharedService,\r\n private loginService: LoginService\r\n ) {\r\n this.legacyVersion = this.loginService.LoginSettings.LegacyVersion;\r\n this.loginSettings = this.loginService.LoginSettings;\r\n }\r\n\r\n ngOnInit() {\r\n this.sharedService.getAboutTylerSIS().subscribe((results) => {\r\n this.aboutTyler = results;\r\n });\r\n this.currentDate = new Date();\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\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, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { FavoritesComponent } from '../favorites.component';\r\n\r\n@Component({\r\n selector: 'app-favorites-modal',\r\n templateUrl: './favorites-modal.component.html',\r\n styleUrls: ['./favorites-modal.component.css']\r\n})\r\nexport class FavoritesModalComponent implements OnInit {\r\n editFavorites: boolean;\r\n staffAssignedPortals: any[];\r\n @ViewChild('appFavorites', { static: true }) appFavorites: FavoritesComponent;\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) private data: any,\r\n private dialogBox: MatDialogRef\r\n ) {\r\n this.editFavorites = this.data.editFavorites;\r\n this.staffAssignedPortals = this.data.staffAssignedPortals;\r\n }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n expandAllClick(expandSection: boolean) {\r\n this.appFavorites.expandAll(expandSection);\r\n }\r\n\r\n closeClick() {\r\n this.dialogBox.close();\r\n }\r\n\r\n saveClick() {\r\n this.appFavorites.save();\r\n this.dialogBox.close();\r\n }\r\n\r\n}\r\n","export class SystemLog {\r\n ID: number;\r\n UserID: number;\r\n Timestamp: Date;\r\n MachineName: string;\r\n InstanceName: string;\r\n ProgramName: string;\r\n Type: string;\r\n Message: string;\r\n StackTrace: string;\r\n Context: string;\r\n }","import { Component } from '@angular/core';\r\nimport { Student } from '../student.model';\r\nimport { StudentService } from '../student.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedService } from '../../shared.service';\r\nimport { Router } from '@angular/router';\r\nimport { Sped360Service } from '../../../sped360/sped360.service';\r\nimport { StudentSearchComponent } from '../../student-search/student-search.component';\r\n\r\n@Component({\r\n selector: 'app-student-in-focus',\r\n templateUrl: './student-in-focus.component.html'\r\n})\r\nexport class StudentInFocusComponent {\r\n\r\n student: Student;\r\n constructor(\r\n private studentService: StudentService,\r\n private dialog: MatDialogRef,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private sped360Service: Sped360Service,\r\n private matDialog: MatDialog\r\n ) {\r\n this.student = this.studentService.selectedStudent;\r\n }\r\n\r\n clearFocus() {\r\n if (this.router.url.indexOf('/student360') > -1 || this.router.url.indexOf('/programAndServices/singleStudent') > -1 || this.router.url.indexOf('/health360/studentHealth') > -1) {\r\n this.router.navigateByUrl('/classroom360/cards');\r\n }\r\n if (this.router.url == '/sped360/studentDocumentHome' || this.router.url.indexOf('/sped360/spedFormsWithinDocuments') > -1 || this.router.url.indexOf('/specialServiceEvaluations/viewEditEvaluationReport') > -1) {\r\n if (this.sped360Service.spedFixedPermission.ViewSpEdHome == true || this.sped360Service.spedFixedPermission.ViewSpecialServicesHome == true) {\r\n this.router.navigateByUrl('/sped360/spedHome');\r\n } else {\r\n const dialogBox = this.matDialog.open(StudentSearchComponent, {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false,\r\n redirectUrl: '/sped360/studentDocumentHome'\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n dialogBox.afterClosed().subscribe(data => {\r\n if (data == undefined) {\r\n this.router.navigateByUrl('/classroom360/cards');\r\n }\r\n });\r\n }\r\n }\r\n this.studentService.selectedStudent = undefined;\r\n this.studentService.updateSelectedStudent(undefined);\r\n this.closeClick();\r\n }\r\n\r\n closeClick() {\r\n this.dialog.close();\r\n }\r\n}\r\n","
\r\n \r\n Student In Focus\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n \r\n \r\n","export class PortalMenuPreferences {\r\n PortalMenus: PortalMenuItem[];\r\n}\r\n\r\nexport class PortalMenuItem {\r\n ParentGroupName: string;\r\n GroupName: string;\r\n GroupIcon: string;\r\n Expanded: number;\r\n Id: number;\r\n}","
\r\n
\r\n
Student In Focus
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n \r\n
","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Router } from '@angular/router';\r\nimport { Classroom360Service } from '../../../classroom360/classroom360.service';\r\nimport { Sped360Service } from '../../../sped360/sped360.service';\r\nimport { Portal } from '../../portal.model';\r\nimport { StudentSearchComponent } from '../../student-search/student-search.component';\r\nimport { Student } from '../../student/student.model';\r\nimport { StudentService } from '../../student/student.service';\r\n\r\n@Component({\r\n selector: 'app-student-in-focus-menu',\r\n templateUrl: './student-in-focus-menu.component.html',\r\n styles: [\r\n ]\r\n})\r\nexport class StudentInFocusMenuComponent implements OnInit {\r\n\r\n @Output() portalNavigated = new EventEmitter();\r\n displayPortals: Portal[] = [];\r\n student: Student;\r\n\r\n constructor(\r\n private studentService: StudentService,\r\n private classroom360Service: Classroom360Service,\r\n private sped360Service: Sped360Service,\r\n private router: Router,\r\n private dialog: MatDialog\r\n ) {\r\n this.studentService.selectedStudentStream$.subscribe(() => {\r\n this.student = this.studentService.selectedStudent;\r\n });\r\n\r\n this.classroom360Service.observableStaffAssignedPortalsStream$.subscribe(() => {\r\n this.displayPortals = [];\r\n if (this.classroom360Service.staffAssignedPortals) {\r\n const portals: Portal[] = JSON.parse(JSON.stringify(this.classroom360Service.staffAssignedPortals));\r\n const studentPortal = portals.find(o => (o.PortalName == 'Students' || o.PortalName == 'My Students') && !o.PortalDescription);\r\n if (studentPortal) {\r\n this.displayPortals = portals.filter(o => o.ParentId == studentPortal.Id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.student = this.studentService.selectedStudent;\r\n }\r\n\r\n clearStudentInFocusClick() {\r\n if (this.router.url.indexOf('/student360') > -1 || this.router.url.indexOf('/programAndServices/singleStudent') > -1 || this.router.url.indexOf('/health360/studentHealth') > -1) {\r\n this.router.navigateByUrl('/classroom360/cards');\r\n }\r\n if (this.router.url == '/sped360/studentDocumentHome' || this.router.url.indexOf('/sped360/spedFormsWithinDocuments') > -1 || this.router.url.indexOf('/specialServiceEvaluations/viewEditEvaluationReport') > -1) {\r\n if (this.sped360Service.spedFixedPermission.ViewSpEdHome == true || this.sped360Service.spedFixedPermission.ViewSpecialServicesHome == true) {\r\n this.router.navigateByUrl('/sped360/spedHome');\r\n } else {\r\n const studentSearchDialogBox = this.dialog.open(StudentSearchComponent, {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false,\r\n redirectUrl: '/sped360/studentDocumentHome'\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n });\r\n studentSearchDialogBox.afterClosed().subscribe(data => {\r\n if (data == undefined) {\r\n this.router.navigateByUrl('/classroom360/cards');\r\n }\r\n });\r\n }\r\n }\r\n this.studentService.selectedStudent = undefined;\r\n this.studentService.updateSelectedStudent(undefined);\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
SIS K-12
\r\n
0 && currentURL() != '/admin360/globalSearch'\">\r\n
0}\">\r\n Impersonating
\r\n {{currentUser.FirstName}} {{currentUser.LastName}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \"AddAdd\r\n Current Page\r\n \r\n
\r\n
\r\n \r\n \"EditEdit\r\n Favorites\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
= 1024\">\r\n \r\n \r\n \r\n \r\n \r\n {{school.SchoolCode}} - \r\n {{school.SchoolName}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
= 1024 && showYearDropdown==true\">\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{year.Description}}\r\n \r\n {{(year.Status==0 && year.IsOverride == false) ? ' (past)' :\r\n (year.Status==0 && year.IsOverride == true) ? ' (past*)' : (year.Status\r\n == 2 && year.IsOverride == true) ? ' (future*)' : ' (future)'}}\r\n \r\n \r\n {{year.Status==1 ? ' (current*)' : ' '}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {{userInitials}}\r\n \r\n
\r\n
0\" class=\"sis-header-impersonatinguser\"\r\n [attr.title]=\"'User' | translate\" [matMenuTriggerFor]=\"userMenu\" style=\"cursor:pointer;\">\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
SIS K-12
\r\n
\r\n\r\n
0\"\r\n style=\"text-align:center;background-color:#e5b53a;\">\r\n {{LoginSettings.InstanceName}}\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
","import { FavoriteMenuComponent } from './../portal-menu/favorite-menu/favorite-menu.component';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { Component, EventEmitter, HostListener, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport * as _ from 'lodash';\r\n// @ts-ignore\r\nimport printJS from 'print-js';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { ClassroomSummaryService } from '../../classroom360/classroom-summary/classroom-summary.service';\r\nimport { ClassroomSummary } from '../../classroom360/classroom-summary/models/classroom-summary.model';\r\nimport { Classroom360Service } from '../../classroom360/classroom360.service';\r\nimport { DataQueryService } from '../../classroom360/data-query/data-query.service';\r\nimport { SelectCourseDialogComponent } from '../../classroom360/guards/select-course/select-course-dialog/select-course-dialog.component';\r\nimport { AddLinkComponent } from '../../classroom360/links/add-link/add-link.component';\r\nimport { Link } from '../../classroom360/links/link.model';\r\nimport { ChangePasswordComponent } from '../../shared-modules/login/change-password/change-password.component';\r\nimport { LoginService } from '../../shared-modules/login/login.service';\r\nimport { LoginSettings } from '../../shared-modules/login/LoginSetting.model';\r\nimport { ReportingComponent } from '../../shared-modules/reporting/reporting.component';\r\nimport { PortalAccessDeniedComponent } from '../../student360/portal-access-denied/portal-access-denied.component';\r\nimport { Student360Service } from '../../student360/student360.service';\r\nimport { ChangeEmailComponent } from '../change-email/change-email.component';\r\nimport { AboutPanelComponent } from '../controls/about-panel/about-panel.component';\r\nimport { GeneralConfirmationComponent } from '../controls/general-confirmation/general-confirmation.component';\r\nimport { FavoritesModalComponent } from '../favorites/favorites-modal/favorites-modal.component';\r\nimport { CheckForErrorsGuard } from '../guards/check-for-errors/check-for-errors.guard';\r\nimport { SystemLog } from '../models/system-log.model';\r\nimport { Portal } from '../portal.model';\r\nimport { RouteInfo } from '../routeInfo';\r\nimport { SecurityService } from '../security/security.service';\r\nimport { SharedService } from '../shared.service';\r\nimport { SpinnerService } from '../spinner/spinner.service';\r\nimport { StudentSearchComponent } from '../student-search/student-search.component';\r\nimport { StudentSearchService } from '../student-search/student-search.service';\r\nimport { StudentInFocusComponent } from '../student/student-in-focus/student-in-focus.component';\r\nimport { Student } from '../student/student.model';\r\nimport { StudentService } from '../student/student.service';\r\nimport { System } from '../System';\r\nimport { FavoritePortal } from '../user-preferences/favorite-portals.model';\r\nimport { FavoritePreferences } from '../user-preferences/favorite-prefences.model';\r\nimport { PortalMenuItem, PortalMenuPreferences } from '../user-preferences/portal-menu-preferences.model';\r\nimport { UserPreferencesWindowComponent } from '../user-preferences/user-preferences-window/user-preferences-window.component';\r\nimport { UserPreferencesService } from '../user-preferences/user-preferences.service';\r\nimport { User } from '../user/user.model';\r\nimport { UserService } from '../user/user.service';\r\nimport { School } from '../year/school.model';\r\nimport { Year } from '../year/year.model';\r\nimport { YearService } from '../year/year.service';\r\nimport { AuthService } from '../../shared-modules/login/auth.service';\r\nimport { ReportingFrameworkService } from '../../classroom360/reporting-framework/reporting-framework.service';\r\nimport { MyReportsComponent } from '../../classroom360/reporting-framework/my-reports/my-reports.component';\r\n\r\n// Google API Variable\r\ndeclare const google: any;\r\n@Component({\r\n selector: 'app-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: [\r\n './header.component.scss'\r\n ]\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n public parentAssignedPortals: Portal[] = [];\r\n public parentPortalsDeepCopy: Portal[] = []; // used to compare portals and links\r\n public staffAssignedPortals: Portal[] = [];\r\n public staffPortalMenuPreferences: PortalMenuPreferences = new PortalMenuPreferences;\r\n public parentAssignedFavoritePortals: Portal[] = [];\r\n public staffAssignedFavoritePortals: Portal[] = [];\r\n public staffFavoritePortalMenuPreferences: PortalMenuPreferences = new PortalMenuPreferences;\r\n public students: Student[];\r\n public selectedStudent: Student;\r\n public years: Year[];\r\n public schools: School[];\r\n public LoginSettings: LoginSettings;\r\n public currentUser: User;\r\n userInitials: string;\r\n myClasses: ClassroomSummary[];\r\n gradebookClasses: ClassroomSummary[];\r\n attendanceClasses: ClassroomSummary[];\r\n myLinks: Link[];\r\n districtLinks: Link[];\r\n myFavorites: FavoritePortal[];\r\n studentSubscription: Subscription;\r\n yearSubscription: Subscription;\r\n schoolsSubscription: Subscription;\r\n isLoggedIn: boolean;\r\n isLoggedInSubscription: Subscription;\r\n isPageLoaded: boolean;\r\n isPageLoadedSubscription: Subscription;\r\n parentAssignedPortalsSubscription: Subscription;\r\n staffAssignedPortalSubscription: Subscription;\r\n changeEmailDialogRef: MatDialogRef;\r\n ChangePasswordDialogRef: MatDialogRef;\r\n StudentSearchDialogRef: MatDialogRef;\r\n favoritesDialogRef: MatDialogRef;\r\n aboutTylerSISDialog: MatDialogRef;\r\n studentInFocusDialog: MatDialogRef;\r\n languageLinkVisible = false;\r\n myClassesSubscription: Subscription;\r\n currentUserSubscription: Subscription;\r\n defaultYearSubscription: Subscription;\r\n parentPortalsSubscription: Subscription;\r\n setSchoolDisabledSubscription: Subscription;\r\n setYearDisabledSubscription: Subscription;\r\n loginSettingSubscription: Subscription;\r\n // ------------Modal window--------------------------------------\r\n userPrefDialogRef: MatDialogRef;\r\n reportsDialogRef: MatDialogRef;\r\n myReportsDialogRef: MatDialogRef;\r\n addLinkDialogRef: MatDialogRef;\r\n portalAccessDeniedDialog: MatDialogRef;\r\n gradebookAccessDeniedDialog: MatDialogRef;\r\n TylerUSettingDialog: MatDialogRef;\r\n selectedSchoolId = 0;\r\n selectedYear: Year;\r\n showSchoolDropdown = false;\r\n showYearDropdown = false;\r\n enableClassDropdown = false;\r\n showTeacherProfile = false;\r\n disableYearDropdown = false;\r\n hidePrintButton = false;\r\n screenWidth = 0;\r\n windowWidth = 0;\r\n impersonateByUserId: number;\r\n userLoginFromLegacy = false;\r\n pulseWindow;\r\n pulsePageList = [];\r\n pulseFavoriteList = [];\r\n favoritesShown: boolean;\r\n showNotificationPreferencesLink = false;\r\n showChangePassword = true;\r\n helpContextId: string;\r\n @Output() toggleEvent = new EventEmitter();\r\n @ViewChild('favoritesMenuTrigger', { read: MatMenuTrigger }) favoritesMenuTriggerRef: MatMenuTrigger;\r\n schoolId = 0;\r\n stopImpersonating = false;\r\n IntegrateWithTylerU: boolean;\r\n @ViewChild(FavoriteMenuComponent) favoriteMenuComponent: FavoriteMenuComponent;\r\n\r\n // change public service to private and remove from html\r\n constructor(private loginService: LoginService,\r\n public studentService: StudentService,\r\n public userService: UserService,\r\n private yearService: YearService,\r\n private authService: AuthService,\r\n private classroomSummaryService: ClassroomSummaryService,\r\n private student360Service: Student360Service,\r\n private classroom360Service: Classroom360Service,\r\n private userPreferencesService: UserPreferencesService,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private guard: CheckForErrorsGuard,\r\n private dataQueryService: DataQueryService,\r\n private spinnerService: SpinnerService,\r\n private securityService: SecurityService,\r\n private studentSearchService: StudentSearchService,\r\n private reportingFrameworkService: ReportingFrameworkService\r\n ) {\r\n }\r\n\r\n toggleClick() {\r\n this.toggleEvent.emit();\r\n }\r\n\r\n ngOnInit() {\r\n this.LoginSettings = this.loginService.LoginSettings;\r\n this.loginService.IntegrateWithTylerU = this.loginService.LoginSettings.IntegrateWithTylerU;\r\n this.IntegrateWithTylerU = this.loginService.LoginSettings.IntegrateWithTylerU;\r\n this.currentUserSubscription = this.userService.observableCurrentUserStream$\r\n .subscribe(data => {\r\n this.currentUser = data;\r\n this.userInitials = this.currentUser.FirstName.substring(0, 1).toUpperCase() + this.currentUser.LastName.substring(0, 1).toUpperCase();\r\n this.getUserLoginFromLegacy();\r\n\r\n if (this.LoginSettings.EnablePulseSSO && this.currentUser.UserType == 1) {\r\n this.getPulseList();\r\n }\r\n\r\n if (this.currentUser.UserType == 2) {\r\n this.userService.setNotificationPreferencesMenu().subscribe(result => {\r\n this.showNotificationPreferencesLink = result;\r\n });\r\n }\r\n\r\n this.getUserPermission();\r\n });\r\n this.studentSubscription = this.studentService.observableStudentsStream$\r\n .subscribe(data => {\r\n this.students = data;\r\n });\r\n this.parentAssignedPortalsSubscription = this.student360Service.observableParentAssignedPortalsStream$\r\n .subscribe(data => {\r\n this.parentPortalsDeepCopy = _.cloneDeep(data);\r\n this.parentAssignedPortals = data.filter(a => a.ShowAsMenu);\r\n if (this.router.url.toLowerCase().indexOf('/student360') >= 0) {\r\n let portalURL = this.router.url.toLowerCase().replace('/student360', '');\r\n if (portalURL.includes('?')) {\r\n portalURL = portalURL.substring(0, portalURL.indexOf('?'));\r\n }\r\n const parentAssignedPortal = this.parentAssignedPortals.filter(a => a.PortalDescription.toLowerCase() == portalURL && a.Disabled == true)[0];\r\n if (parentAssignedPortal != null && portalURL != undefined && portalURL != '/onlineregistration') {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n }\r\n });\r\n this.yearSubscription = this.yearService.observableYearStream$\r\n .subscribe(yearList => {\r\n const years: Year[] = _.cloneDeep(yearList);\r\n if (this.userService.currentUser.UserType == 1 && this.studentService.selectedStudent) {\r\n const yearsValue = years.filter(year => year.SchoolID == 0);\r\n if (yearsValue.length == 0) {\r\n let school = this.yearService.defaultYear.SchoolID == 0 ? this.schoolId : this.yearService.defaultYear.SchoolID;\r\n school = school == 0 ? this.userService.currentUser.LoginSchoolId : school;\r\n this.years = years.filter(year => year.SchoolID == school);\r\n if (this.years.length == 0) {\r\n this.years = years.filter(year => year.SchoolID == 0);\r\n }\r\n this.schools = _.sortBy(this.yearService.schoolsForC360, ['SchoolCode', 'SchoolName']);\r\n\r\n if (this.yearService.defaultYear) {\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = school;\r\n }\r\n } else {\r\n let school = this.yearService.defaultYear.SchoolID == 0 ? this.schoolId : this.yearService.defaultYear.SchoolID;\r\n school = school == 0 ? this.userService.currentUser.LoginSchoolId : school;\r\n this.years = years.filter(year => year.SchoolID == school);\r\n if (this.years.length == 0) {\r\n this.years = years.filter(year => year.SchoolID == 0);\r\n }\r\n if (this.yearService.defaultYear) {\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = school;\r\n }\r\n }\r\n }\r\n this.years = [];\r\n years.forEach(obj => {\r\n if (this.years.filter(o => o.Id == obj.Id).length == 0) {\r\n this.years.push(obj);\r\n }\r\n });\r\n this.schools = _.sortBy(this.yearService.schools, ['SchoolCode', 'SchoolName']);\r\n if (this.schools.filter(x => x.Id == 0).length > 0) {\r\n this.schools = _.sortBy(this.yearService.schoolsForC360, ['SchoolCode', 'SchoolName']);\r\n this.yearService.schools = this.yearService.schoolsForC360;\r\n }\r\n\r\n if (this.yearService.defaultYear) {\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = this.yearService.defaultYear.SchoolID;\r\n }\r\n this.getSelectedSchoolYearStatus();\r\n });\r\n this.schoolsSubscription = this.yearService.observableSchoolsStream$.subscribe(schools => {\r\n if (schools) {\r\n this.schools = _.sortBy(schools, ['SchoolCode', 'SchoolName']);\r\n if (this.schools.filter(x => x.Id == 0).length > 0) {\r\n this.schools = _.sortBy(this.yearService.schoolsForC360, ['SchoolCode', 'SchoolName']);\r\n this.yearService.schools = this.yearService.schoolsForC360;\r\n }\r\n\r\n if (this.yearService.defaultYear && this.years) {\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = this.yearService.defaultYear.SchoolID;\r\n this.getSelectedSchoolYearStatus();\r\n }\r\n }\r\n });\r\n this.isLoggedInSubscription = this.userService.isLoggedInStream$\r\n .subscribe(data => {\r\n this.isLoggedIn = data;\r\n });\r\n this.staffAssignedPortalSubscription = this.classroom360Service.observableStaffAssignedPortalsStream$\r\n .subscribe(data => {\r\n this.staffAssignedPortals = data.filter(a => a.ShowAsMenu);\r\n this.showTeacherProfile = data.filter(o => o.PortalDescription == '/teacherProfile' && o.Disabled == false && o.Deleted == false).length > 0;\r\n });\r\n this.isPageLoadedSubscription = this.sharedService.observableIsPageLoadedStream$\r\n .subscribe(data => {\r\n this.isPageLoaded = data;\r\n });\r\n this.myClassesSubscription = this.classroomSummaryService.observableMyClassesStream$.subscribe(data => {\r\n if (data && this.currentUser != undefined) {\r\n data.forEach(course => course.CourseMenuText = this.classroomSummaryService.getCourseSummary(course));\r\n this.myClasses = data;\r\n }\r\n });\r\n this.router.events.subscribe((event) => {\r\n if (event instanceof NavigationEnd) {\r\n this.getPageInfo(this.router.url);\r\n if (this.router.url == '/classroom360/classroomAttendance') {\r\n this.getAttendanceClasses();\r\n } else if (this.router.url == '/classroom360/gradebook/V9') {\r\n this.getGradebookClasses();\r\n }\r\n // Clear Access Token After Logout\r\n else if (this.router.url == '/login' && sessionStorage.getItem('accessToken')) {\r\n this.studentService.selectedStudent = undefined;\r\n if (sessionStorage.getItem('loginFromLegacy') != null || sessionStorage.getItem('loginFromLegacy') == '1') {\r\n sessionStorage.removeItem('accessToken');\r\n window.close();\r\n }\r\n }\r\n if (this.sharedService.currentUrl != this.sharedService.previousUrl) {\r\n const studentId = this.selectedStudent != undefined ? this.selectedStudent.Id : 0;\r\n const schoolId = this.yearService.defaultYear != undefined ? this.yearService.defaultYear.SchoolID : 0;\r\n const yearId = this.yearService.defaultYear != undefined ? this.yearService.defaultYear.Id : 0;\r\n let pageUrl = this.router.url;\r\n if (pageUrl.indexOf('onlinePayment') > 0) {\r\n pageUrl = '/student360/onlinePayment';\r\n }\r\n this.sharedService.saveWebPageAudit(studentId, schoolId, yearId, pageUrl).subscribe();\r\n }\r\n if (this.router.url == '/logout') {\r\n // Logging out - clear the session storage here\r\n sessionStorage.removeItem('accessToken');\r\n sessionStorage.removeItem('impersonateUseraccessToken');\r\n\r\n setTimeout(() => {\r\n location.reload();\r\n }, 0);\r\n }\r\n // clear stored custom field data on route change\r\n this.sharedService.observableClearStoredCustomFieldData.next();\r\n }\r\n });\r\n\r\n this.defaultYearSubscription = this.yearService.observableDefaultYearStream$.subscribe((defaultYear) => {\r\n if (this.currentUser && this.currentUser.UserType == 1) {\r\n // Set Teacher Status based on school/year when not already on Classroom Summary\r\n if (this.router.url.indexOf('classroomSummary') == -1) {\r\n this.userService.getUserIsTeacher(this.yearService.defaultYear.SchoolID, this.yearService.defaultYear.Id).subscribe(result => {\r\n this.userService.currentUser.UserIsTeacher = result;\r\n });\r\n }\r\n\r\n if (this.yearService.allYears) {\r\n this.schools = this.yearService.getSchoolsForSelectedYear(this.yearService.allYears, this.yearService.defaultYear);\r\n this.schools = _.sortBy(this.schools, ['SchoolCode', 'SchoolName']);\r\n this.selectedYear = this.yearService.defaultYear;\r\n this.selectedSchoolId = this.selectedYear.SchoolID;\r\n this.getSelectedSchoolYearStatus();\r\n }\r\n }\r\n });\r\n\r\n this.parentPortalsSubscription = this.student360Service.observableParentAssignedPortalsStream$.subscribe(() => {\r\n if (this.studentService.selectedStudent && this.router.url != '/login') {\r\n const studentId = this.studentService.selectedStudent.Id;\r\n if (this.userService.userType == 2 && this.student360Service.allParentPortals != undefined) {\r\n let portalURL = this.router.url;\r\n portalURL = portalURL.replace('/student360', '');\r\n portalURL = (portalURL.indexOf('?') > -1) ? portalURL.substr(0, portalURL.indexOf('?')) : portalURL;\r\n const parentPortal = this.student360Service.allParentPortals.filter(a => a.PortalDescription == portalURL && a.Student_ID == studentId)[0];\r\n if ((portalURL != '/studentSummary' && portalURL != '/changePassword') && parentPortal == undefined) {\r\n const previousPortal = this.sharedService.previousPortal;\r\n this.logAccessDeniedInfo();\r\n this.portalAccessDeniedDialog = this.dialog.open(PortalAccessDeniedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n this.portalAccessDeniedDialog.componentInstance.portalName = previousPortal.PortalName;\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n } else if (this.userService.userType == 2) {\r\n const portalURL = this.router.url;\r\n if (portalURL == '/student360/notificationPreferences' && !this.studentService.selectedStudent.PrimaryContact) {\r\n this.logAccessDeniedInfo();\r\n this.portalAccessDeniedDialog = this.dialog.open(PortalAccessDeniedComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n this.portalAccessDeniedDialog.componentInstance.portalName = 'Notification Preferences';\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.setSchoolDisabledSubscription = this.yearService.observableSetSchoolDisabledStream$.subscribe(disabled => {\r\n this.showSchoolDropdown = !disabled;\r\n });\r\n\r\n this.setYearDisabledSubscription = this.yearService.observableSetYearDisabledStream$.subscribe(disabled => {\r\n this.disableYearDropdown = disabled;\r\n });\r\n\r\n this.loginSettingSubscription = this.loginService.observableIntegrateWithTylerUStream$.subscribe(EnableTylerU => {\r\n this.IntegrateWithTylerU = EnableTylerU;\r\n });\r\n }\r\n\r\n\r\n logAccessDeniedInfo() {\r\n const messageObject: any = {};\r\n messageObject.url = this.router.url;\r\n messageObject.previousPortal = this.sharedService.previousPortal;\r\n messageObject.userType = this.userService.userType;\r\n messageObject.isV10 = this.LoginSettings.V10;\r\n messageObject.selectedStudent = this.studentService.selectedStudent;\r\n messageObject.allParentPortals = this.student360Service.allParentPortals;\r\n const systemLog = new SystemLog();\r\n systemLog.UserID = this.userService.currentUser.Id;\r\n systemLog.Timestamp = new Date();\r\n systemLog.InstanceName = window.location.href;\r\n systemLog.ProgramName = 'AccessDeniedPopup';\r\n systemLog.Type = 'Info';\r\n systemLog.MachineName = '';\r\n systemLog.StackTrace = '';\r\n systemLog.Context = '';\r\n systemLog.Message = JSON.stringify(messageObject);\r\n\r\n this.sharedService.createSystemLog(systemLog).pipe(take(1)).subscribe();\r\n }\r\n\r\n showMenuButton() {\r\n return this.userService.userType.toString() == '1' || !this.router.url.includes('studentSummary');\r\n }\r\n\r\n yearSelected(year: Year) {\r\n if (this.currentUser.UserType == 1) {\r\n const selectedYear = this.yearService.allYears.filter(o => o.Id == year.Id && o.SchoolID == this.selectedSchoolId)[0];\r\n if (selectedYear != null) {\r\n year = selectedYear;\r\n }\r\n }\r\n this.yearService.updateSelectedYear(year);\r\n this.studentService.clearRecentStudents();\r\n this.studentSearchService.resetSearchCriteria();\r\n\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = this.yearService.defaultYear.SchoolID;\r\n this.getSelectedSchoolYearStatus();\r\n }\r\n\r\n schoolSelected(schoolId: number) {\r\n this.schoolId = schoolId;\r\n this.yearService.updateSelectedSchool(schoolId);\r\n this.studentService.clearRecentStudents();\r\n this.studentSearchService.resetSearchCriteria();\r\n\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = this.yearService.defaultYear.SchoolID;\r\n this.getSelectedSchoolYearStatus();\r\n }\r\n\r\n getUserName() {\r\n return (this.userService.currentUser != undefined) ? this.userService.currentUser.FirstName + ' ' + this.userService.currentUser.LastName : '';\r\n }\r\n\r\n logoutUser() {\r\n if (this.loginService.LoginSettings.UseTID && this.loginService.hasSignedIntoTylerId) {\r\n this.authService.logout();\r\n }\r\n if (this.userService.googleUser && this.userService.googleUser.access_token) {\r\n google.accounts.oauth2.revoke(this.userService.googleUser.access_token);\r\n }\r\n if (this.userLoginFromLegacy == true && this.stopImpersonating == false) {\r\n window.close();\r\n }\r\n else if (this.stopImpersonating == true) {\r\n this.stopImpersonateClick();\r\n }\r\n else {\r\n this.router.navigateByUrl('/logout');\r\n }\r\n }\r\n\r\n setNotificationPreferencesClick() {\r\n this.router.navigateByUrl('/student360/setNotificationPreferences');\r\n }\r\n\r\n changeEmailAddressClick() {\r\n // POST: opens change Email dialog\r\n this.changeEmailDialogRef = this.dialog.open(ChangeEmailComponent, {\r\n minHeight: 325,\r\n minWidth: 400,\r\n disableClose: true\r\n });\r\n }\r\n\r\n changePasswordClick() {\r\n // POST: opens change password dialog\r\n this.ChangePasswordDialogRef = this.dialog.open(ChangePasswordComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true,\r\n minWidth: 400,\r\n minHeight: 270\r\n });\r\n }\r\n\r\n expandGroup($event: any, portalMenu: PortalMenuItem) {\r\n $event.stopPropagation();\r\n portalMenu.Expanded = portalMenu.Expanded == 1 ? 0 : 1;\r\n }\r\n\r\n menuPortalClick(staffPortal: Portal) {\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n if ((!this.selectedStudent || !this.selectedStudent.Id || this.selectedStudent.Id <= 0)\r\n && staffPortal.PortalName == 'Academic History') {\r\n this.studentSearchClick(staffPortal);\r\n } else if (staffPortal.PortalName == 'Roster Query') {\r\n this.dataQueryService.rosterQuery = true;\r\n if (!this.classroomSummaryService.selectedCourse) {\r\n const dialogBox = this.dialog.open(SelectCourseDialogComponent, {\r\n disableClose: true,\r\n hasBackdrop: false,\r\n panelClass: 'tyl-mat-dialog'\r\n });\r\n const subscription = dialogBox.afterClosed().subscribe(course => {\r\n subscription.unsubscribe();\r\n if (course) {\r\n this.classroomSummaryService.selectedCourse = course;\r\n this.router.navigateByUrl(staffPortal.ParentModule + staffPortal.PortalDescription);\r\n }\r\n });\r\n } else {\r\n this.router.navigateByUrl(staffPortal.ParentModule + staffPortal.PortalDescription);\r\n }\r\n } else {\r\n this.dataQueryService.rosterQuery = false;\r\n let portalDescription = staffPortal.PortalDescription;\r\n if (staffPortal.PortalDescription == '/gradebook') {\r\n portalDescription = portalDescription + '/V9';\r\n this.classroom360Service.gradebookPortalSelected = true;\r\n } else if (staffPortal.PortalDescription == '/classroomAttendance') {\r\n this.classroom360Service.attendancePortalSelected = true;\r\n } else if (staffPortal.PortalDescription == '/classInformation' || staffPortal.PortalDescription == '/classAnnouncements') {\r\n this.classroom360Service.courseInfoPortalSelected = true;\r\n }\r\n this.router.navigateByUrl(staffPortal.ParentModule + portalDescription);\r\n }\r\n }\r\n\r\n studentMenuPortalClick(portal: Portal) {\r\n this.selectedStudent = this.studentService.selectedStudent;\r\n if (this.selectedStudent != null && this.selectedStudent.Id != null && this.selectedStudent.Id > 0) {\r\n this.router.navigateByUrl('/student360' + portal.PortalDescription);\r\n } else {\r\n portal.ParentModule = '/student360';\r\n this.studentSearchClick(portal);\r\n }\r\n }\r\n\r\n addFavoriteClick() {\r\n // POST: Add the current page to favorites and save\r\n\r\n // Obtaining all matching portals\r\n const url = this.router.url;\r\n let newFavPortal: Portal;\r\n let newFavPortals: Portal[] = this.staffAssignedPortals.filter(portal =>\r\n (portal.ParentModule + portal.PortalDescription).split('?')[0].trim().toLowerCase() == url.split('?')[0].toLowerCase()\r\n );\r\n\r\n // Edge case for Student Summary because the portal description is /home\r\n if (newFavPortals.length == 0 && url.toLowerCase().includes('/studentsummary')) {\r\n newFavPortals = this.staffAssignedPortals.filter(portal =>\r\n url.includes(portal.ParentModule) &&\r\n portal.PortalName == 'Student Summary'\r\n );\r\n }\r\n\r\n // Setting the new favorite portal\r\n if (newFavPortals && newFavPortals.length == 1) {\r\n newFavPortal = newFavPortals[0];\r\n } else {\r\n\r\n // We need to ensure we're getting the right group\r\n // NOTE: some staff pages have a \"duplicate\" student group page\r\n const route = this.router.parseUrl(this.router.url);\r\n if (route.queryParams['studentPortal'] && route.queryParams['studentPortal'].toString() == 'true') {\r\n newFavPortal = newFavPortals.find(portal => portal.GroupName.includes('Students'));\r\n } else {\r\n newFavPortal = newFavPortals.find(portal => !portal.GroupName.includes('Students'));\r\n }\r\n }\r\n\r\n // Saving the favorite\r\n if (newFavPortal) {\r\n\r\n // Updating the favorites\r\n const favExists: boolean = this.userPreferencesService.favoritesPreferences.FavoritePortals.filter(favPortal =>\r\n favPortal.Id == newFavPortal.Id\r\n || ((favPortal.Id == null || favPortal.Id == 0)\r\n && favPortal.GroupName == newFavPortal.GroupName\r\n && favPortal.PortalDescription == newFavPortal.PortalDescription.split('?')[0]\r\n && favPortal.PortalModule == newFavPortal.ParentModule)).length != 0;\r\n if (!favExists) {\r\n\r\n // Create the favorite object\r\n const newFav: FavoritePortal = {\r\n ParentPortalName: '',\r\n PortalDescription: newFavPortal.PortalDescription.split('?')[0],\r\n PortalName: newFavPortal.PortalName,\r\n PortalModule: newFavPortal.ParentModule,\r\n GroupName: newFavPortal.GroupName,\r\n Id: newFavPortal.Id,\r\n IsGroup: false,\r\n Expanded: false\r\n };\r\n\r\n // Saving that object\r\n if (this.userPreferencesService.favoritesPreferences.FavoritePortals.indexOf(newFav) == -1) {\r\n this.userPreferencesService.favoritesPreferences.FavoritePortals.push(newFav);\r\n const xmlStream: string[] = [];\r\n const prefs: FavoritePreferences = {\r\n FavoritePortals: this.userPreferencesService.favoritesPreferences.FavoritePortals\r\n };\r\n xmlStream.push(JSON.stringify(prefs));\r\n this.userPreferencesService.saveUserPreferences(\r\n 0,\r\n '/OneSISFavorites',\r\n xmlStream,\r\n 0,\r\n '',\r\n false\r\n ).subscribe(\r\n () => {\r\n newFavPortal.Selected = true;\r\n this.userPreferencesService.favoritesPreferences = prefs;\r\n },\r\n err => {\r\n console.log(err);\r\n }, () => {\r\n }\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n editFavoriteClick() {\r\n // POST: opens Edit Favorites dialog\r\n this.favoritesDialogRef = this.dialog.open(\r\n FavoritesModalComponent,\r\n {\r\n data: {\r\n editFavorites: true,\r\n staffAssignedPortals: this.staffAssignedPortals\r\n },\r\n width: '30%',\r\n height: '80%',\r\n maxHeight: '80vh',\r\n maxWidth: '30vw',\r\n disableClose: true\r\n }\r\n );\r\n }\r\n\r\n linksClick() {\r\n // POST: Get the links from the user service\r\n const links = _.cloneDeep(this.userService.userLinks());\r\n const tileLinks = _.cloneDeep(this.parentPortalsDeepCopy.filter(p => p.IsMyLinksTile == true));\r\n // if parent or student remove links that are also portals (tiles)\r\n // Links display in the link menu, tiles display in the Links Card\r\n /* if (this.userService.userType !== 1) {\r\n // Filter out duplicate links based on Id\r\n for (let i = links.length - 1; i >= 0; i--) {\r\n const refLink = tileLinks.filter(link => link.Id == links[i].Link_ID);\r\n if (refLink.length > 0) {\r\n links.splice(i, 1);\r\n }\r\n }\r\n } */\r\n if (links != undefined) {\r\n this.districtLinks = links.filter(link => link.IsDistrictLevel == 'Yes');\r\n this.districtLinks.sort(function (a, b) {\r\n const textA = a.LinkName.toUpperCase();\r\n const textB = b.LinkName.toUpperCase();\r\n return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;\r\n });\r\n this.myLinks = links.filter(link => link.IsDistrictLevel == 'No');\r\n }\r\n }\r\n\r\n linkSelected(link) {\r\n let webAddress = '';\r\n if (link.LinkUrl.toLowerCase().indexOf('http://') == 0) {\r\n webAddress = link.LinkUrl.substring(7);\r\n } else if (link.LinkUrl.toLowerCase().indexOf('https://') == 0) {\r\n webAddress = link.LinkUrl.substring(8);\r\n } else {\r\n webAddress = link.LinkUrl;\r\n }\r\n if (link.OpenAsHTTPS == true) {\r\n webAddress = 'https://' + webAddress;\r\n } else {\r\n webAddress = 'http://' + webAddress;\r\n }\r\n window.open(webAddress, '_blank');\r\n }\r\n\r\n editLinkClick() {\r\n // POST: navigates to links page\r\n this.router.navigateByUrl('/classroom360/links');\r\n }\r\n\r\n addLinkClick() {\r\n // POST: Opens add Link modal\r\n this.addLinkDialogRef = this.dialog.open(AddLinkComponent, {\r\n minWidth: 400,\r\n maxWidth: 400,\r\n minHeight: 300,\r\n disableClose: true\r\n });\r\n }\r\n\r\n studentSearchClick(portal: Portal) {\r\n // POST: opens change Student Search dialog\r\n const redirectUrl = portal ? portal.ParentModule + portal.PortalDescription : this.router.url && (this.router.url.indexOf('?studentPortal=true') > 0 || this.router.url.indexOf('manageBehaviorReferrals') > 0 || this.router.url.indexOf('behaviorReferral') > 0 || this.router.url.indexOf('communicationLog') > 0 || this.router.url.indexOf('attendanceByStudent') > 0 || this.router.url.indexOf('studentNotes') > 0 || this.router.url.indexOf('/schedule?selectedView=1') > 0 || this.router.url.indexOf('/student360') >= 0 || this.router.url.indexOf('academicHistory') > 0 || this.router.url.indexOf('studentEnrollment') > 0 || this.router.url.indexOf('studentHealth') > 0 || this.router.url.indexOf('programAndServices/singleStudent') > 0 || this.router.url.indexOf('householdInformation') > 0) ? this.router.url : '';\r\n let allowedSchools: School[];\r\n this.StudentSearchDialogRef = this.dialog.open(\r\n StudentSearchComponent,\r\n {\r\n data: {\r\n performRoute: true,\r\n searchAndSelect: false,\r\n redirectUrl: redirectUrl,\r\n schools: allowedSchools\r\n },\r\n width: '100%',\r\n height: '100%',\r\n maxHeight: '100vh',\r\n maxWidth: '100vw'\r\n }\r\n );\r\n }\r\n\r\n studentInFocusClick() {\r\n if (this.studentInFocus()) {\r\n this.studentInFocusDialog = this.dialog.open(StudentInFocusComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n }\r\n }\r\n\r\n studentInFocus() {\r\n return this.studentService.selectedStudent;\r\n }\r\n\r\n showLanguageLinks() {\r\n // POST: shows the languages available to the user\r\n this.languageLinkVisible = true;\r\n }\r\n\r\n showUserLinks() {\r\n // POST: shows the default user menu\r\n this.languageLinkVisible = false;\r\n }\r\n\r\n languageClick(language: string) {\r\n // POST: selects a language\r\n this.userService.setUserLanguage(language).subscribe();\r\n }\r\n\r\n openReportsWindow() {\r\n this.reportingFrameworkService.checkDefaultLandingPage().subscribe(isMyReportPage => {\r\n if (this.LoginSettings.EnableMyReports == false || isMyReportPage == false) {\r\n this.reportsDialogRef = this.dialog.open(ReportingComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n });\r\n } else {\r\n // POST: navigates to My Reports page\r\n this.myReportsDialogRef = this.dialog.open(MyReportsComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n minWidth: '100vw',\r\n maxWidth: '100vw',\r\n minHeight: '100vh',\r\n maxHeight: '100vh'\r\n });\r\n this.myReportsDialogRef.componentInstance.showAsDialog = true;\r\n }\r\n });\r\n }\r\n\r\n userPreferencesClick() {\r\n const canContinue = this.guard.checkForDeactivation();\r\n if (canContinue instanceof Observable) {\r\n canContinue.subscribe(clickedOk => {\r\n if (clickedOk) {\r\n this.preferencesClick();\r\n }\r\n });\r\n } else if (canContinue) {\r\n this.preferencesClick();\r\n }\r\n }\r\n\r\n preferencesClick() {\r\n let initialTab: string;\r\n\r\n switch (this.router.url) {\r\n case '/classroom360/cards':\r\n initialTab = 'Classroom Summary';\r\n break;\r\n case '/classroom360/classroomAttendance':\r\n initialTab = 'Attendance';\r\n break;\r\n case '/admin360/attendanceAdministration/attendanceByClass':\r\n initialTab = 'Attendance';\r\n break;\r\n case '/classroom360/communicationLog':\r\n initialTab = 'Communication Log';\r\n break;\r\n case '/classroom360/dataQuery':\r\n initialTab = 'Data Query';\r\n break;\r\n case '/classroom360/gradebook/V9':\r\n initialTab = 'Gradebook';\r\n break;\r\n }\r\n\r\n this.userPrefDialogRef = this.dialog.open(UserPreferencesWindowComponent, {\r\n width: '1400px',\r\n height: '810px',\r\n disableClose: true,\r\n data: {\r\n initialTab: initialTab\r\n },\r\n });\r\n this.userPrefDialogRef.componentInstance.staffAssignedPortals = this.staffAssignedPortals;\r\n }\r\n\r\n courseSelected(course: ClassroomSummary) {\r\n this.classroomSummaryService.selectedCourse = course;\r\n }\r\n\r\n courseCategory(category: string) {\r\n if (category == 'gradebook' && (this.router.url == '/classroom360/gradebook/V9')) {\r\n return true;\r\n } else if (category == 'attendance' && this.router.url == '/classroom360/classroomAttendance') {\r\n return true;\r\n } else if (category == 'general' && this.router.url != '/classroom360/gradebook/V10' && this.router.url != '/classroom360/classroomAttendance' && this.router.url != '/classroom360/gradebook/V9') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n getGradebookClasses() {\r\n this.gradebookClasses = this.myClasses.filter(o => o.UsedForGrading == true);\r\n }\r\n\r\n getAttendanceClasses() {\r\n this.attendanceClasses = this.myClasses.filter(o => o.AttendanceRequired == true && o.Enrolled > 0);\r\n }\r\n\r\n teacherProfileClick() {\r\n this.router.navigateByUrl('/classroom360/teacherProfile');\r\n }\r\n\r\n mealServiceClick() {\r\n this.router.navigateByUrl('/classroom360/staffMealService');\r\n }\r\n\r\n getPageInfo(url: string) {\r\n if (url.includes('?')) {\r\n url = url.substring(0, url.indexOf('?'));\r\n }\r\n const pageInfo = RouteInfo.pages.filter(function (page) {\r\n return page.Url == url;\r\n })[0];\r\n\r\n if (pageInfo) {\r\n this.showSchoolDropdown = pageInfo.ShowSchoolDropdown;\r\n if (pageInfo.ShowYearDropdown) {\r\n if (typeof (pageInfo.ShowYearDropdown) == 'boolean') {\r\n this.showYearDropdown = pageInfo.ShowYearDropdown;\r\n } else {\r\n this.showYearDropdown = pageInfo.ShowYearDropdown(this.loginService.LoginSettings.V10, this.sharedService.currentUrl.includes('classroom360'));\r\n }\r\n } else {\r\n this.showYearDropdown = false;\r\n }\r\n this.enableClassDropdown = pageInfo.RequiredCourse;\r\n if (pageInfo.DisableYearDropdown) {\r\n if (typeof (pageInfo.DisableYearDropdown) == 'boolean') {\r\n this.disableYearDropdown = pageInfo.DisableYearDropdown;\r\n } else {\r\n this.disableYearDropdown = pageInfo.DisableYearDropdown(this.loginService.LoginSettings.V10, this.sharedService.currentUrl.includes('classroom360'));\r\n }\r\n } else {\r\n this.disableYearDropdown = false;\r\n }\r\n if (pageInfo.HidePrintButton) {\r\n if (typeof (pageInfo.HidePrintButton) == 'boolean') {\r\n this.hidePrintButton = pageInfo.HidePrintButton;\r\n } else {\r\n this.hidePrintButton = false;\r\n }\r\n } else {\r\n this.hidePrintButton = false;\r\n }\r\n if (this.currentUser.UserType == 1 && this.router.url.indexOf('/student360') > -1 && this.router.url.indexOf('/scheduleHistory/multipleStudent') < 0) {\r\n this.disableYearDropdown = true;\r\n }\r\n this.screenWidth = screen != null ? screen.width : 0;\r\n this.windowWidth = window != null ? window.innerWidth : 0;\r\n }\r\n else if (url.toLowerCase().indexOf('/student360') < 0) {\r\n this.showSchoolDropdown = true;\r\n this.showYearDropdown = true;\r\n this.disableYearDropdown = false;\r\n }\r\n }\r\n\r\n getUserPermission() {\r\n if (this.currentUser.ActiveDirectoryUser == true) {\r\n this.showChangePassword = false;\r\n } else if (this.currentUser.UserType == 3) {\r\n this.showChangePassword = this.LoginSettings.AllowStudentsToChangeTheirPassword;\r\n } else if (this.currentUser.UserType == 1) {\r\n if (this.LoginSettings.StaffUserUseADPassword == true || this.LoginSettings.ActivateGoogleAuthenticationForStaff == true) {\r\n this.showChangePassword = false;\r\n } else {\r\n if (this.securityService.userPermissions.filter(o => o.PermissionCode == 'GO_DNATCOP').length > 0) {\r\n this.showChangePassword = false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n helpClick() {\r\n window.open('./assets/Help/Student%20360%20Help.pdf', '_blank');\r\n }\r\n\r\n getUserLoginFromLegacy() {\r\n this.stopImpersonating = false;\r\n this.impersonateByUserId = 0;\r\n if (sessionStorage.getItem('loginFromLegacy') != null && sessionStorage.getItem('loginFromLegacy') == '1') {\r\n this.userLoginFromLegacy = true;\r\n this.userService.getImpersonateByUser().subscribe((results) => {\r\n this.impersonateByUserId = results;\r\n if (this.impersonateByUserId > 0 && this.currentUser.UserType == 1 && sessionStorage.getItem('ClassicLoginAttempt') == null) {\r\n // this.stopImpersonating = true;\r\n }\r\n if (this.impersonateByUserId == 0 && this.currentUser.UserType == 1 && sessionStorage.getItem('impersonateUseraccessToken') != null && sessionStorage.getItem('ClassicLoginAttempt') == null) {\r\n this.userLoginFromLegacy = false;\r\n sessionStorage.removeItem('loginFromLegacy');\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n getPulseList() {\r\n if (this.LoginSettings.PulseURL != null && this.LoginSettings.PulseURL.length > 0) {\r\n const pulsePageList = [];\r\n const pulseFavoriteList = [];\r\n this.sharedService.createPulseKey('${getpagelist}', '', false).subscribe((results) => {\r\n const pulseKey = results;\r\n let pulseUrl = (this.LoginSettings.PulseURL.slice(-1) == '/') ? this.LoginSettings.PulseURL + 'pulserouter.aspx?pulseloginkey=' : this.LoginSettings.PulseURL + '/pulserouter.aspx?pulseloginkey=';\r\n pulseUrl = pulseUrl + pulseKey;\r\n $.getJSON(pulseUrl, (json) => {\r\n const staticPulsePages = json.PulsePages;\r\n const favoritePulsePages = json.FavoritePages;\r\n if (staticPulsePages != undefined) {\r\n const staticPages = Object.keys(staticPulsePages).map(e => staticPulsePages[e]);\r\n for (const page of staticPages) {\r\n pulsePageList.push(page);\r\n }\r\n this.pulsePageList = pulsePageList;\r\n }\r\n if (favoritePulsePages != undefined) {\r\n const favoritePages = Object.keys(favoritePulsePages).map(e => favoritePulsePages[e]);\r\n for (const page of favoritePages) {\r\n pulseFavoriteList.push(page);\r\n }\r\n this.pulseFavoriteList = pulseFavoriteList;\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n pulseLinkClick(page: string) {\r\n const createPKey = (pulseWindow) => {\r\n this.sharedService.createPulseKey(page, '', false).subscribe((results) => {\r\n const pulseKey = results;\r\n let pulseUrl = (this.LoginSettings.PulseURL.slice(-1) == '/') ? this.LoginSettings.PulseURL + 'pulserouter.aspx?pulseloginkey=' : this.LoginSettings.PulseURL + '/pulserouter.aspx?pulseloginkey=';\r\n pulseUrl = pulseUrl + pulseKey;\r\n pulseWindow.location = pulseUrl;\r\n });\r\n };\r\n\r\n if (this.pulseWindow != null) {\r\n if (!this.pulseWindow.closed) {\r\n this.pulseWindow.focus();\r\n createPKey(this.pulseWindow);\r\n return;\r\n }\r\n }\r\n this.pulseWindow = window.open('', '_blank');\r\n createPKey(this.pulseWindow);\r\n }\r\n\r\n showFavorites(event) {\r\n this.favoritesShown = true;\r\n }\r\n\r\n printClick() {\r\n // const pagePrintStyle: string = RouteInfo.getPagePrintStyle(this.router.url);\r\n if (this.router.url.indexOf('classroom360/seatingChart') > 0) {\r\n const pagePrintStyle: string = RouteInfo.getPagePrintStyle(this.router.url);\r\n const styleURLs: string[] = ['./assets/styles/print-styles.css'];\r\n if (pagePrintStyle) {\r\n styleURLs.push(pagePrintStyle);\r\n }\r\n this.spinnerService.showSpinner = true;\r\n // Timeout is needed to allow the spinner to show before the print preview load takes priority\r\n setTimeout(() => {\r\n printJS({\r\n printable: 'print-content',\r\n documentTitle: 'OneSIS',\r\n type: 'html',\r\n css: styleURLs,\r\n ignoreElements: ['print-ignore'],\r\n targetStyles: ['*'],\r\n maxWidth: 1500\r\n });\r\n this.spinnerService.showSpinner = false;\r\n }, 500);\r\n } else {\r\n // Timeout is needed to allow the spinner to show before the print preview load takes priority\r\n setTimeout(() => {\r\n this.sharedService.pageToPdfTrigger = !this.sharedService.pageToPdfTrigger;\r\n }, 0);\r\n }\r\n\r\n }\r\n\r\n aboutTylerSISClick() {\r\n this.aboutTylerSISDialog = this.dialog.open(AboutPanelComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n width: '600px',\r\n disableClose: true\r\n });\r\n }\r\n\r\n documentationClick() {\r\n let url = '';\r\n if (this.router.url.indexOf('gradebook') == -1) {\r\n url = this.router.url.substr(this.router.url.lastIndexOf('/'));\r\n } else {\r\n url = '/classroomgradebook';\r\n }\r\n this.helpContextId = url + '_' + this.LoginSettings.OneSISVersion + '_';\r\n this.helpContextId = this.helpContextId + 'V9';\r\n const helpButton = $('#buttonHelp')[0];\r\n setTimeout(() => {\r\n helpButton.click();\r\n }, 0);\r\n }\r\n\r\n homeClick() {\r\n if (this.currentUser.UserType == 1 && this.LoginSettings.ActivateClassroom360 && this.userLoginFromLegacy == false) {\r\n if (this.studentService.selectedStudent) {\r\n this.getUserYears();\r\n }\r\n this.router.navigateByUrl('/classroom360/cards');\r\n } else if (this.currentUser.UserType == 1 && this.userLoginFromLegacy == true) {\r\n if (this.studentService.selectedStudent) {\r\n this.getUserYears();\r\n }\r\n this.router.navigateByUrl('/classroom360/cards');\r\n } else {\r\n this.router.navigateByUrl('/student360/studentSummary');\r\n }\r\n }\r\n\r\n getUserYears() {\r\n this.yearService.getUserYears(this.userService.currentUser.Id, this.userService.currentUser.UserType, this.userService.studentId).subscribe(years => {\r\n this.yearService.loadYears(years);\r\n this.yearService.years = years;\r\n let school = this.yearService.defaultYear.SchoolID == 0 ? this.schoolId : this.yearService.defaultYear.SchoolID;\r\n school = school == 0 ? this.userService.currentUser.LoginSchoolId : school;\r\n this.years = _.cloneDeep(years.filter(year => year.SchoolID == school));\r\n this.schools = _.sortBy(this.yearService.schools, ['SchoolCode', 'SchoolName']);\r\n if (this.yearService.defaultYear) {\r\n this.selectedYear = this.years.filter(o => o.Id == this.yearService.defaultYear.Id)[0];\r\n this.selectedSchoolId = school;\r\n this.getSelectedSchoolYearStatus();\r\n }\r\n });\r\n }\r\n\r\n getSelectedSchoolYearStatus() {\r\n if (this.userService.currentUser.UserType == 1 && this.yearService.allYears && this.selectedSchoolId) {\r\n this.yearService.allYears.filter(o => o.SchoolID == this.selectedSchoolId).forEach(obj => {\r\n const year = this.years.filter(o => o.Id == obj.Id)[0];\r\n if (year) {\r\n year.Status = obj.Status;\r\n year.IsOverride = obj.IsOverride;\r\n }\r\n });\r\n }\r\n }\r\n\r\n addEditLinkPrivilege(): boolean {\r\n if (this.currentUser.UserType == 1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize() {\r\n this.windowWidth = window != null ? window.innerWidth : 0;\r\n }\r\n\r\n // switch back to impersonate\r\n stopImpersonateClick() {\r\n sessionStorage.removeItem('accessToken');\r\n sessionStorage.removeItem('loginFromLegacy');\r\n if (this.impersonateByUserId > 0 && this.currentUser.UserType == 1 && sessionStorage.getItem('impersonateUseraccessToken') != null) {\r\n this.redirectTo360(System.baseUrl + 'login', sessionStorage.getItem('impersonateUseraccessToken'), 'StudentId:0');\r\n }\r\n }\r\n\r\n redirectTo360(tylerSisUrl, accessToken, action) {\r\n if (accessToken != '') {\r\n try { action = window.btoa(action); } catch (e) { }\r\n const url: any = tylerSisUrl + '?Action=' + action;\r\n const win = window.open(url, '_self');\r\n win.sessionStorage.setItem('accessToken', accessToken);\r\n\r\n }\r\n else {\r\n console.log('fn_RedirectFail');\r\n }\r\n }\r\n\r\n TylerUClick() {\r\n this.sharedService.getTylerUToken(this.userService.currentUser.UserIsTeacher).subscribe(result => {\r\n const tylerUData = result;\r\n if (tylerUData.tylerUSetttingError == '') {\r\n window.localStorage.setItem('TylerUData', JSON.stringify(tylerUData));\r\n window.open(System.baseUrl + 'tylerU', '_blank');\r\n } else {\r\n this.TylerUSettingDialog = this.dialog.open(GeneralConfirmationComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n this.TylerUSettingDialog.componentInstance.disableConfirmation = true;\r\n this.TylerUSettingDialog.componentInstance.headerLabel = 'Tyler U';\r\n this.TylerUSettingDialog.componentInstance.informational = true;\r\n this.TylerUSettingDialog.componentInstance.confirmMessage = tylerUData.tylerUSetttingError;\r\n return;\r\n }\r\n });\r\n }\r\n\r\n currentURL() {\r\n return this.router.url;\r\n }\r\n}\r\n","
\r\n
\r\n \r\n \r\n
\r\n
","import { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { Component, HostListener, AfterViewInit, OnInit, OnDestroy } from '@angular/core';\r\nimport { SharedService } from '../shared.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { LoaderService } from './loader-service.component';\r\nimport { SpinnerService } from './spinner.service';\r\n\r\n@AutoUnsubscribe()\r\n@Component({\r\n selector: 'spinner',\r\n templateUrl: './spinner.component.html'\r\n})\r\nexport class SpinnerComponent implements OnInit, AfterViewInit, OnDestroy {\r\n color = 'primary';\r\n value = 50;\r\n pageWidthCenter = 0;\r\n pageHeightCenter = 0;\r\n hideSpinner: boolean;\r\n hideSpinnerSubscription: Subscription;\r\n showSpinner: boolean;\r\n showSpinnerSharedSubscription: Subscription;\r\n showSpinnerSubscription: Subscription;\r\n loading = false;\r\n loadingChain = [];\r\n\r\n constructor(\r\n private sharedService: SharedService,\r\n private loaderService: LoaderService,\r\n private spinnerService: SpinnerService) {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event?) {\r\n setTimeout(() => {\r\n this.pageWidthCenter = window.innerWidth / 2 - 50;\r\n this.pageHeightCenter = window.innerHeight / 2 - 50;\r\n }, 0);\r\n }\r\n\r\n ngOnInit() {\r\n this.showSpinnerSharedSubscription = this.sharedService.observableShowSpinnerStream$.subscribe(\r\n data => {\r\n setTimeout(() => {\r\n this.showSpinner = data;\r\n }, 0);\r\n }\r\n );\r\n this.hideSpinnerSubscription = this.spinnerService.observableHideSpinnerStream$.subscribe(result => {\r\n this.hideSpinner = result;\r\n });\r\n this.showSpinnerSubscription = this.spinnerService.observableShowSpinnerStream$.subscribe(result => {\r\n this.showSpinner = result;\r\n });\r\n\r\n this.loaderService.isLoading.subscribe(result => {\r\n this.loadingChain.push(result);\r\n setTimeout(() => {\r\n this.loadingChain.pop();\r\n if (this.loadingChain.length == 0) {\r\n this.loading = result;\r\n }\r\n }, 0);\r\n });\r\n }\r\n\r\n ngOnDestroy() {}\r\n\r\n ngAfterViewInit() {\r\n this.onResize();\r\n }\r\n}","\r\n

\r\n \"Loading\r\n

\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \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, HostListener, OnDestroy, OnInit, SecurityContext, TemplateRef, ViewChild } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { GuardsCheckEnd, GuardsCheckStart, NavigationCancel, NavigationEnd, NavigationStart, Router, RouterEvent } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { AppInsights } from 'applicationinsights-js';\r\nimport * as moment from 'moment';\r\nimport Quill from 'quill';\r\nimport { combineLatest } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { Subscription } from '../../node_modules/rxjs';\r\nimport { ApplicationMenuComponent } from './shared-components/portal-menu/application-menu/application-menu.component';\r\nimport { SharedService } from './shared-components/shared.service';\r\nimport { LoaderService } from './shared-components/spinner/loader-service.component';\r\nimport { UserService } from './shared-components/user/user.service';\r\nimport { InactivityTimeoutComponent } from './shared-modules/login/inactivity-timeout/inactivity-timeout.component';\r\nimport { LoginService } from './shared-modules/login/login.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css']\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n title = 'Tyler SIS';\r\n showAppHeader = true;\r\n showAppHeaderSubscription: Subscription;\r\n showLoadingImage = true;\r\n public usertype = 0;\r\n currentUserSubscription: Subscription;\r\n loginSubscription: Subscription;\r\n appTimeout: number;\r\n idleTimeout: any;\r\n logoutStartTime: Date;\r\n inactivityDialog: MatDialogRef;\r\n @ViewChild('snav') sidenav: MatSidenav;\r\n @ViewChild(ApplicationMenuComponent) applicationMenuComponent: ApplicationMenuComponent;\r\n\r\n // Application Insights Properties\r\n loadingPageUrl = '';\r\n loadedPageUrl = '';\r\n pageLoading = false;\r\n startPageLoadTime;\r\n tracking = false;\r\n startViewTime;\r\n clearLoadTimer;\r\n\r\n constructor(\r\n private userService: UserService,\r\n private loginService: LoginService,\r\n private translateService: TranslateService,\r\n private sharedService: SharedService,\r\n private router: Router,\r\n private dialog: MatDialog,\r\n private sanitizer: DomSanitizer,\r\n private loaderService: LoaderService\r\n ) {\r\n this.translateService.setDefaultLang('en');\r\n this.translateService.use('en');\r\n this.showAppHeader = sharedService.showAppHeader;\r\n this.showAppHeaderSubscription = sharedService.observableShowAppHeaderStream$.subscribe(\r\n showHeader => {\r\n this.showAppHeader = showHeader;\r\n }\r\n );\r\n\r\n this.loginSubscription = this.loginService.observableLoginStream$.subscribe(() => {\r\n this.setTimeoutSettings();\r\n this.resetIdleTimeout();\r\n });\r\n }\r\n\r\n get showFilter(): boolean {\r\n return this.sharedService.showFilter;\r\n }\r\n\r\n get filterTemplate(): TemplateRef {\r\n return this.sharedService.filterTemplate;\r\n }\r\n\r\n ngOnInit() {\r\n this.getDistrictSettings();\r\n this.getVisibleCMPComponents();\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationStart || event instanceof GuardsCheckEnd) {\r\n this.sharedService.updateShowSpinner(true);\r\n }\r\n if (event instanceof NavigationCancel || event instanceof GuardsCheckStart) {\r\n this.sharedService.updateShowSpinner(false);\r\n }\r\n if (event instanceof NavigationEnd) {\r\n this.sharedService.updateShowSpinner(false);\r\n }\r\n });\r\n\r\n this.addOverlayClickListener();\r\n this.currentUserSubscription = this.userService.observableCurrentUserStream$\r\n .subscribe(data => {\r\n this.usertype = data.UserType;\r\n });\r\n this.configureLinksForQuill();\r\n }\r\n\r\n addOverlayClickListener() {\r\n document.addEventListener('click', function (e) {\r\n if (e.target['className'] != undefined) {\r\n const tempString: any = e.target['className']; // sometimes e.target is an SVGAnimatedString which does not have a method \"includes\"\r\n if ((tempString.includes && tempString.includes('cdk-overlay-backdrop') && !tempString.includes('cdk-overlay-backdrop-showing'))) {\r\n const ev = document.createEvent('MouseEvent');\r\n const el = document.elementFromPoint(e.x, e.y);\r\n ev.initMouseEvent(\r\n 'click',\r\n true /* bubble */, true /* cancelable */,\r\n window, null,\r\n e.x, e.y, 0, 0, /* coordinates */\r\n false, false, false, false, /* modifier keys */\r\n 0 /* left*/, null\r\n );\r\n el.dispatchEvent(ev);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getDistrictSettings(): void {\r\n // Sri - moving this to app module during app initialization.\r\n // this.loginService.getDistrictSettings().subscribe(data => {\r\n // Sri - I am not sure why we create local class variables for the data that is shared through service.\r\n // Sri - I have seen this pattern everywhere in the application. this needs to be fixed.\r\n // this.LoginSettings = this.loginService.LoginSettings;\r\n // this.loginService.LoginSettings = data;\r\n this.showLoadingImage = false;\r\n this.appTimeout = this.loginService.LoginSettings.TimeoutTime - 1;\r\n this.tracking = this.loginService.LoginSettings.ActivateApplicationMonitoring;\r\n\r\n // Initializing App Insights\r\n if (this.tracking) {\r\n AppInsights.downloadAndSetup({\r\n instrumentationKey: 'b1cb9a66-3819-467f-960c-1d9be59bc330'\r\n });\r\n\r\n // Tracking page loads\r\n combineLatest(\r\n this.loaderService.isLoading,\r\n this.router.events\r\n ).subscribe(result => {\r\n if (this.tracking) {\r\n\r\n // The current page is always the loading page\r\n if (result[1] instanceof RouterEvent) {\r\n this.loadingPageUrl = result[1].url;\r\n }\r\n\r\n // Tracking page loads\r\n this.pageLoading = result[0];\r\n if (this.pageLoading) {\r\n if (!this.startPageLoadTime) {\r\n this.startPageLoadTime = moment();\r\n } else if (this.clearLoadTimer) {\r\n clearTimeout(this.clearLoadTimer);\r\n this.clearLoadTimer = null;\r\n }\r\n } else {\r\n\r\n // If we've stopped loading and this is a new route, then track it as a page load\r\n if (\r\n this.loadedPageUrl != this.loadingPageUrl\r\n && this.startPageLoadTime\r\n ) {\r\n this.loadedPageUrl = this.loadingPageUrl;\r\n AppInsights.trackMetric(\r\n 'PageLoadTime >>>> ' + window.location.origin + window.location.pathname,\r\n moment().diff(this.startPageLoadTime)\r\n );\r\n this.startPageLoadTime = null;\r\n }\r\n\r\n // If we stopped loading and this ISN'T a new route, then clear the load timer\r\n else if (this.startPageLoadTime && !this.clearLoadTimer) {\r\n this.clearLoadTimer = setTimeout(() => { // We do this because some loading calls are consecutive\r\n this.startPageLoadTime = null;\r\n }, 100);\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Tracking page views\r\n this.router.events.subscribe(event => {\r\n if (event instanceof NavigationEnd && this.tracking) {\r\n if (this.startViewTime) {\r\n const urlParts = window.location.href.split('/');\r\n const pageName = urlParts[urlParts.length - 1];\r\n AppInsights.trackPageView(\r\n pageName, /* (optional) page name */\r\n window.location.href.toLowerCase(), /* (optional) page url if available */\r\n {}, /* (optional) dimension dictionary */\r\n {}, /* (optional) metric dictionary */\r\n moment().diff(this.startViewTime) /* page view duration in milliseconds */\r\n );\r\n }\r\n this.startViewTime = moment();\r\n }\r\n });\r\n } else {\r\n AppInsights.disableTelemetry = true;\r\n }\r\n // });\r\n }\r\n\r\n getVisibleCMPComponents() {\r\n this.sharedService.getVisibleCMPComponents().pipe(take(1)).subscribe(components => {\r\n this.sharedService.visibleCMPComponents = components;\r\n });\r\n }\r\n\r\n setCurrentComponent(component) {\r\n this.sharedService.currentComponent = component;\r\n }\r\n\r\n closeSideNav() {\r\n this.sidenav.close();\r\n }\r\n\r\n sideNaveOpened() {\r\n this.applicationMenuComponent.sideNavOpened();\r\n }\r\n\r\n setTimeoutSettings() {\r\n ['click', 'touchstart', 'mousemove', 'keydown'].forEach(evt =>\r\n document.addEventListener(evt, this.resetIdleTimeout.bind(this), false)\r\n );\r\n }\r\n\r\n resetIdleTimeout() {\r\n if (this.idleTimeout) {\r\n clearTimeout(this.idleTimeout);\r\n }\r\n this.idleTimeout = setTimeout(() => this.showTimeoutModal(), this.appTimeout * 60000);\r\n }\r\n\r\n showTimeoutModal() {\r\n this.startLogoutCountdown();\r\n this.inactivityDialog = this.dialog.open(InactivityTimeoutComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n data: {\r\n inactiveTime: this.appTimeout,\r\n logoutStartTime: this.logoutStartTime\r\n }\r\n });\r\n this.inactivityDialog.afterClosed().pipe(take(1)).subscribe(() => {\r\n this.stopLogoutTimer();\r\n });\r\n }\r\n\r\n startLogoutCountdown() {\r\n this.logoutStartTime = new Date();\r\n clearInterval(this.idleTimeout);\r\n this.idleTimeout = setInterval(() => {\r\n const current = new Date();\r\n const seconds = ( current.getTime() - this.logoutStartTime.getTime() ) / 1000;\r\n if (seconds >= 60)\r\n {\r\n // clearing sessing data here also just in case something wrong with reload. ONE-16193\r\n sessionStorage.removeItem('accessToken');\r\n sessionStorage.removeItem('impersonateUseraccessToken');\r\n window.location.reload();\r\n }\r\n }, 1000);\r\n }\r\n\r\n stopLogoutTimer() {\r\n clearInterval(this.idleTimeout);\r\n }\r\n\r\n configureLinksForQuill() {\r\n const Link = Quill.import('formats/link');\r\n Link.sanitize = url => {\r\n if (!url.startsWith('http:') && !url.startsWith('https:') && !url.startsWith('mailto:') && !url.startsWith('tel:')) {\r\n url = 'http://' + url;\r\n }\r\n return this.sanitizer.sanitize(SecurityContext.URL, url);\r\n };\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onEnterKeyDown(event: KeyboardEvent) {\r\n // PRE: The user presses a key\r\n // POST: Performs actions based on that key\r\n\r\n // CTRL + SHIFT + G generates error for testing\r\n if (event && event.key && event.key.toLowerCase() == 'g' && event.ctrlKey && event.shiftKey) {\r\n this.sharedService.generateError().subscribe();\r\n }\r\n }\r\n\r\n @HostListener('window:beforeunload')\r\n async ngOnDestroy() {\r\n // Sri - destroying app or closing browser or tab- although sessin storage will be clear, this is an example,\r\n // in case we need to make api calls on browser close or tab close to the server and log data or clean up\r\n if (!this.loginService.redirectingToClassic) {\r\n sessionStorage.removeItem('accessToken');\r\n sessionStorage.removeItem('impersonateUseraccessToken');\r\n }\r\n }\r\n}\r\n","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc\n */\nclass TranslateHttpLoader {\n /**\n * @param {?} http\n * @param {?=} prefix\n * @param {?=} suffix\n */\n constructor(http, prefix = \"/assets/i18n/\", suffix = \".json\") {\n this.http = http;\n this.prefix = prefix;\n this.suffix = suffix;\n }\n /**\n * Gets the translations from the server\n * @param {?} lang\n * @return {?}\n */\n getTranslation(lang) {\n return this.http.get(`${this.prefix}${lang}${this.suffix}`);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc\n */\n\nexport { TranslateHttpLoader };\n\n","

PROCESS FAILED

\r\n\r\n
We were unable to contact the server to complete this process.
\r\n
This may be because your internet connection was interrupted or there may be a problem with the server.
\r\n
When the connection is reestablished this message will change.
\r\n \r\n
CONNECTION RESTORED
\r\n
The connection has been reestablished
\r\n
You may encounter strange behavior within the program as a result of the connection loss. If so,
\r\n logging out and back in should get things back to normal.\r\n
\r\n
Do you want to log out and back in now?
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { SharedService } from '../shared.service';\r\n\r\n@Component({\r\n selector: 'app-no-internet-connection-modal',\r\n templateUrl: './no-internet-connection-modal.component.html',\r\n styleUrls: ['./no-internet-connection-modal.component.css']\r\n})\r\nexport class NoInternetConnectionModalComponent implements OnInit {\r\n\r\n public connectionRestored = false;\r\n constructor(\r\n private dialogRef: MatDialogRef,\r\n private sharedService: SharedService\r\n ) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n closeClick() {\r\n this.hideSpinner();\r\n this.dialogRef.close();\r\n }\r\n\r\n logOutClick() {\r\n window.location.reload();\r\n }\r\n\r\n hideSpinner() {\r\n this.sharedService.updateShowSpinner(false);\r\n }\r\n\r\n}\r\n","import { ErrorHandler, Injectable, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MatDialog } from '@angular/material/dialog';\r\nimport { NoInternetConnectionModalComponent } from './shared-components/no-internet-connection-modal/no-internet-connection-modal.component';\r\nimport { AppInsights } from 'applicationinsights-js';\r\nimport { System } from './shared-components/System';\r\nimport { timer, Subscription } from 'rxjs';\r\nimport { AutoUnsubscribe } from 'ngx-auto-unsubscribe';\r\nimport { LoginService } from './shared-modules/login/login.service';\r\n\r\n@AutoUnsubscribe({ includeArrays: true })\r\n@Injectable()\r\nexport class ErrorsHandler implements ErrorHandler, OnDestroy {\r\n\r\n public noInternetDialogRef: MatDialogRef;\r\n private checkingNetworkConnection = false;\r\n private continuousChecking = false;\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(private dialog: MatDialog, private loginService: LoginService) {\r\n this.subscriptions.push(loginService.observableLoginErrorStream$.subscribe(err => {\r\n this.handleError(err);\r\n }));\r\n }\r\n\r\n handleError(error: Error) {\r\n console.error(error);\r\n\r\n if (!this.noInternetDialogRef && !this.checkingNetworkConnection) {\r\n // Server or connection error happened\r\n if (!navigator.onLine) {\r\n this.showNoInternetModal();\r\n } else {\r\n if (!this.noInternetDialogRef) {\r\n this.checkingNetworkConnection = true;\r\n if (this.canContactServer(4)) {\r\n }\r\n else {\r\n this.showNoInternetModal();\r\n }\r\n this.checkingNetworkConnection = false;\r\n }\r\n }\r\n }\r\n\r\n // Tracking exception\r\n if (!AppInsights.disableTelemetry) {\r\n AppInsights.trackException(error);\r\n }\r\n }\r\n\r\n canContactServer(numberOfTriesLeft: number): boolean {\r\n if (numberOfTriesLeft > 0) {\r\n const xhr = new XMLHttpRequest();\r\n let url = System.baseUrl;\r\n if (window.location.hostname == 'localhost') {\r\n url = window.location.hostname;\r\n }\r\n\r\n // Open new request as a HEAD to the root hostname with a random param to bust the cache\r\n xhr.open('HEAD', url + '?rand=' + Math.floor((1 + Math.random()) * 0x10000), false);\r\n\r\n // Issue request and handle response\r\n try {\r\n xhr.send();\r\n if (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) {\r\n this.continuousChecking = false;\r\n if (this.noInternetDialogRef) {\r\n this.noInternetDialogRef.componentInstance.hideSpinner();\r\n this.noInternetDialogRef.componentInstance.connectionRestored = true;\r\n }\r\n return true; // success\r\n }\r\n else {\r\n return this.canContactServer(numberOfTriesLeft - 1); // failed - try again - could be transient failure\r\n }\r\n } catch (error) {\r\n return this.canContactServer(numberOfTriesLeft - 1); // failed - try again - could be transient failure\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n showNoInternetModal() {\r\n if (!this.noInternetDialogRef && window.location.pathname.indexOf('login') < 0) {\r\n this.continuousChecking = true;\r\n const timerSubscription = timer(5000, 5000).subscribe(x => {\r\n if (this.continuousChecking) {\r\n if (this.canContactServer(3)) {\r\n timerSubscription.unsubscribe();\r\n }\r\n }\r\n else {\r\n timerSubscription.unsubscribe();\r\n }\r\n });\r\n this.subscriptions.push(timerSubscription);\r\n this.noInternetDialogRef = this.dialog.open(NoInternetConnectionModalComponent, {\r\n panelClass: 'tyl-mat-dialog',\r\n disableClose: true\r\n });\r\n this.noInternetDialogRef.componentInstance.hideSpinner();\r\n this.noInternetDialogRef.afterClosed().subscribe(data => {\r\n this.noInternetDialogRef = undefined;\r\n this.continuousChecking = false;\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy() { }\r\n}\r\n","import { DynamicDataInterceptor } from './shared-components/has-dynamic-data/dynamic-data.interceptor';\r\nimport { LoginModule } from './shared-modules/login/login.module';\r\nimport { NewFamilyRegistrationGuard } from './shared-components/guards/new-family-registration/new-family-registration.guard';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule, ErrorHandler, APP_INITIALIZER } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { HttpClientModule, HttpClient } from '@angular/common/http';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { httpInterceptorProviders } from '.';\r\nimport { SharedComponentsModule } from './shared-components/shared-components.module';\r\nimport { AuthGuard } from './auth.guard';\r\nimport { AppComponent } from './app.component';\r\nimport { LoginService } from './shared-modules/login/login.service';\r\nimport { HeaderComponent } from './shared-components/header/header.component';\r\nimport { UserService } from './shared-components/user/user.service';\r\nimport { YearService } from './shared-components/year/year.service';\r\nimport { MaterialModule } from './shared-components/angular-material/material.module';\r\nimport { StudentService } from './shared-components/student/student.service';\r\nimport { UserPreferencesService } from './shared-components/user-preferences/user-preferences.service';\r\nimport { UnsavedChangesMessageComponent } from './shared-components/guards/unsaved-changes/unsaved-changes-message/unsaved-changes-message.component';\r\nimport { UnsavedChangesGuard } from './shared-components/guards/unsaved-changes/unsaved-changes.guard';\r\nimport { TranslateModule, TranslateLoader, TranslateService, MissingTranslationHandler } from '@ngx-translate/core';\r\nimport { Student360Service } from './student360/student360.service';\r\nimport { SharedService } from './shared-components/shared.service';\r\nimport { Classroom360Service } from './classroom360/classroom360.service';\r\nimport { LoaderService } from './shared-components/spinner/loader-service.component';\r\nimport { LoaderInterceptor } from './shared-components/spinner/loader-intercept.component';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { CheckForErrorsGuard } from './shared-components/guards/check-for-errors/check-for-errors.guard';\r\nimport { CheckForErrorsMessageComponent } from './shared-components/guards/check-for-errors/check-for-errors-message/check-for-errors-message.component';\r\nimport { ReportingModule } from './shared-modules/reporting/reporting.module';\r\nimport { ReportingService } from './shared-modules/reporting/reporting.service';\r\nimport { UserPreferencesWindowComponent } from './shared-components/user-preferences/user-preferences-window/user-preferences-window.component';\r\nimport { ClassroomSummaryService } from './classroom360/classroom-summary/classroom-summary.service';\r\nimport { StartOverDialogComponent } from './shared-components/startover-dialog/start-over-dialog.component';\r\nimport { OrderModule } from 'ngx-order-pipe';\r\nimport { ExportService } from './shared-components/export.service';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { SecurityService } from './shared-components/security/security.service';\r\nimport { MyMissingTranslationHandler } from './shared-modules/translation/missing-translation-handler.component';\r\nimport { LogoutComponent } from './shared-components/logout/logout.component';\r\nimport { PDFExportModule } from '@progress/kendo-angular-pdf-export';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { ErrorsHandler } from './error-handler';\r\nimport { SchedulingTabComponent } from './shared-components/user-preferences/user-preferences-window/scheduling-tab/scheduling-tab.component';\r\nimport { AuthService } from './shared-modules/login/auth.service';\r\nimport { forkJoin } from 'rxjs';\r\n\r\nexport function createTranslateLoader(http: HttpClient) {\r\n return new TranslateHttpLoader(http, 'assets/i18n/', '.json');\r\n}\r\n\r\nexport function initializeAppFactory(\r\n loginService: LoginService\r\n ): () => Promise {\r\n return () => {\r\n return new Promise((resolve, reject) => {\r\n forkJoin([loginService.getOIDCSettings(), loginService.getDistrictSettings()]).subscribe((settings) => {\r\n loginService.OidcSettings = settings[0];\r\n loginService.LoginSettings = settings[1];\r\n // TODO add any work that needs to be done before angular app boostrraps\r\n resolve();\r\n });\r\n });\r\n };\r\n }\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n HeaderComponent,\r\n UnsavedChangesMessageComponent,\r\n CheckForErrorsMessageComponent,\r\n UserPreferencesWindowComponent,\r\n SchedulingTabComponent,\r\n StartOverDialogComponent,\r\n LogoutComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n MaterialModule,\r\n FormsModule,\r\n HttpClientModule,\r\n SharedComponentsModule.forRoot(),\r\n ReportingModule,\r\n LoginModule,\r\n OrderModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: createTranslateLoader,\r\n deps: [HttpClient]\r\n },\r\n missingTranslationHandler: {\r\n provide: MissingTranslationHandler,\r\n useClass: MyMissingTranslationHandler\r\n }\r\n }),\r\n PDFExportModule,\r\n DropDownsModule,\r\n // Routing Module needs to be last\r\n AppRoutingModule\r\n ],\r\n providers: [\r\n AuthService,\r\n LoginService,\r\n ClassroomSummaryService,\r\n httpInterceptorProviders,\r\n UserService,\r\n YearService,\r\n AuthGuard,\r\n UnsavedChangesGuard,\r\n StudentService,\r\n UserPreferencesService,\r\n TranslateService,\r\n Student360Service,\r\n SharedService,\r\n ExportService,\r\n ReportingService,\r\n Classroom360Service,\r\n LoaderService,\r\n NewFamilyRegistrationGuard,\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: LoaderInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: DynamicDataInterceptor,\r\n multi: true\r\n },\r\n {\r\n provide: ErrorHandler,\r\n useClass: ErrorsHandler,\r\n },\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: initializeAppFactory,\r\n deps: [LoginService],\r\n multi: true,\r\n },\r\n // { provide: APP_BASE_HREF, useFactory: getBaseLocation }\r\n CheckForErrorsGuard,\r\n { provide: MatDialogRef, useValue: {} },\r\n { provide: MAT_DIALOG_DATA, useValue: [] },\r\n SecurityService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {\r\n}\r\n","import { MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';\r\nimport { isDevMode } from '@angular/core';\r\n\r\nexport class MyMissingTranslationHandler implements MissingTranslationHandler {\r\n private missingTranslations: string[] = [];\r\n\r\n handle(params: MissingTranslationHandlerParams) {\r\n const currentLang = params.translateService.currentLang;\r\n if (currentLang && currentLang != 'en') {\r\n if (Object.values(params.translateService.translations[currentLang]).indexOf(params.key) == -1) {\r\n // check the shared service for missing translations list\r\n if (this.missingTranslations.indexOf(params.key) == -1) {\r\n this.missingTranslations.push(params.key);\r\n if (isDevMode()) {\r\n console.log('Missing Translations : ', this.missingTranslations);\r\n }\r\n }\r\n }\r\n }\r\n // look in the translation\r\n return params.key;\r\n }\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.log(err));\r\n","/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @template T\n * @param {?} key\n * @return {?}\n */\nfunction marker(key) {\n return key;\n}\n\nexport { marker };\n\n","import { Injectable, EventEmitter, InjectionToken, Inject, Directive, ElementRef, ChangeDetectorRef, Input, Pipe, NgModule } from '@angular/core';\nimport { of, isObservable, forkJoin, concat, defer } from 'rxjs';\nimport { take, shareReplay, map, concatMap, switchMap } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.loader.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nimport * as ɵngcc0 from '@angular/core';\nclass TranslateLoader {\n}\nif (false) {\n /**\n * @abstract\n * @param {?} lang\n * @return {?}\n */\n TranslateLoader.prototype.getTranslation = function (lang) { };\n}\n/**\n * This loader is just a placeholder that does nothing, in case you don't need a loader at all\n */\nclass TranslateFakeLoader extends TranslateLoader {\n /**\n * @param {?} lang\n * @return {?}\n */\n getTranslation(lang) {\n return of({});\n }\n}\nTranslateFakeLoader.ɵfac = /*@__PURE__*/ function () { let ɵTranslateFakeLoader_BaseFactory; return function TranslateFakeLoader_Factory(t) { return (ɵTranslateFakeLoader_BaseFactory || (ɵTranslateFakeLoader_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateFakeLoader)))(t || TranslateFakeLoader); }; }();\nTranslateFakeLoader.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateFakeLoader, factory: TranslateFakeLoader.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateFakeLoader, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/missing-translation-handler.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction MissingTranslationHandlerParams() { }\nif (false) {\n /**\n * the key that's missing in translation files\n * @type {?}\n */\n MissingTranslationHandlerParams.prototype.key;\n /**\n * an instance of the service that was unable to translate the key.\n * @type {?}\n */\n MissingTranslationHandlerParams.prototype.translateService;\n /**\n * interpolation params that were passed along for translating the given key.\n * @type {?|undefined}\n */\n MissingTranslationHandlerParams.prototype.interpolateParams;\n}\n/**\n * @abstract\n */\nclass MissingTranslationHandler {\n}\nif (false) {\n /**\n * A function that handles missing translations.\n *\n * @abstract\n * @param {?} params context for resolving a missing translation\n * @return {?} a value or an observable\n * If it returns a value, then this value is used.\n * If it return an observable, the value returned by this observable will be used (except if the method was \"instant\").\n * If it doesn't return then the key will be used as a value\n */\n MissingTranslationHandler.prototype.handle = function (params) { };\n}\n/**\n * This handler is just a placeholder that does nothing, in case you don't need a missing translation handler at all\n */\nclass FakeMissingTranslationHandler {\n /**\n * @param {?} params\n * @return {?}\n */\n handle(params) {\n return params.key;\n }\n}\nFakeMissingTranslationHandler.ɵfac = function FakeMissingTranslationHandler_Factory(t) { return new (t || FakeMissingTranslationHandler)(); };\nFakeMissingTranslationHandler.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: FakeMissingTranslationHandler, factory: FakeMissingTranslationHandler.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FakeMissingTranslationHandler, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/util.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/* tslint:disable */\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n * comparing them with `equals`.\n *\n * @param {?} o1 Object or value to compare.\n * @param {?} o2 Object or value to compare.\n * @return {?} true if arguments are equal.\n */\nfunction equals(o1, o2) {\n if (o1 === o2)\n return true;\n if (o1 === null || o2 === null)\n return false;\n if (o1 !== o1 && o2 !== o2)\n return true; // NaN === NaN\n // NaN === NaN\n /** @type {?} */\n let t1 = typeof o1;\n /** @type {?} */\n let t2 = typeof o2;\n /** @type {?} */\n let length;\n /** @type {?} */\n let key;\n /** @type {?} */\n let keySet;\n if (t1 == t2 && t1 == 'object') {\n if (Array.isArray(o1)) {\n if (!Array.isArray(o2))\n return false;\n if ((length = o1.length) == o2.length) {\n for (key = 0; key < length; key++) {\n if (!equals(o1[key], o2[key]))\n return false;\n }\n return true;\n }\n }\n else {\n if (Array.isArray(o2)) {\n return false;\n }\n keySet = Object.create(null);\n for (key in o1) {\n if (!equals(o1[key], o2[key])) {\n return false;\n }\n keySet[key] = true;\n }\n for (key in o2) {\n if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n return false;\n }\n }\n return true;\n }\n }\n return false;\n}\n/* tslint:enable */\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isDefined(value) {\n return typeof value !== 'undefined' && value !== null;\n}\n/**\n * @param {?} item\n * @return {?}\n */\nfunction isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item));\n}\n/**\n * @param {?} target\n * @param {?} source\n * @return {?}\n */\nfunction mergeDeep(target, source) {\n /** @type {?} */\n let output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((/**\n * @param {?} key\n * @return {?}\n */\n (key) => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n }\n else {\n output[key] = mergeDeep(target[key], source[key]);\n }\n }\n else {\n Object.assign(output, { [key]: source[key] });\n }\n }));\n }\n return output;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.parser.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nclass TranslateParser {\n}\nif (false) {\n /**\n * Interpolates a string to replace parameters\n * \"This is a {{ key }}\" ==> \"This is a value\", with params = { key: \"value\" }\n * @abstract\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n TranslateParser.prototype.interpolate = function (expr, params) { };\n /**\n * Gets a value from an object by composed key\n * parser.getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA') ==> 'valueI'\n * @abstract\n * @param {?} target\n * @param {?} key\n * @return {?}\n */\n TranslateParser.prototype.getValue = function (target, key) { };\n}\nclass TranslateDefaultParser extends TranslateParser {\n constructor() {\n super(...arguments);\n this.templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n }\n /**\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n interpolate(expr, params) {\n /** @type {?} */\n let result;\n if (typeof expr === 'string') {\n result = this.interpolateString(expr, params);\n }\n else if (typeof expr === 'function') {\n result = this.interpolateFunction(expr, params);\n }\n else {\n // this should not happen, but an unrelated TranslateService test depends on it\n result = (/** @type {?} */ (expr));\n }\n return result;\n }\n /**\n * @param {?} target\n * @param {?} key\n * @return {?}\n */\n getValue(target, key) {\n /** @type {?} */\n let keys = typeof key === 'string' ? key.split('.') : [key];\n key = '';\n do {\n key += keys.shift();\n if (isDefined(target) && isDefined(target[key]) && (typeof target[key] === 'object' || !keys.length)) {\n target = target[key];\n key = '';\n }\n else if (!keys.length) {\n target = undefined;\n }\n else {\n key += '.';\n }\n } while (keys.length);\n return target;\n }\n /**\n * @private\n * @param {?} fn\n * @param {?=} params\n * @return {?}\n */\n interpolateFunction(fn, params) {\n return fn(params);\n }\n /**\n * @private\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n interpolateString(expr, params) {\n if (!params) {\n return expr;\n }\n return expr.replace(this.templateMatcher, (/**\n * @param {?} substring\n * @param {?} b\n * @return {?}\n */\n (substring, b) => {\n /** @type {?} */\n let r = this.getValue(params, b);\n return isDefined(r) ? r : substring;\n }));\n }\n}\nTranslateDefaultParser.ɵfac = /*@__PURE__*/ function () { let ɵTranslateDefaultParser_BaseFactory; return function TranslateDefaultParser_Factory(t) { return (ɵTranslateDefaultParser_BaseFactory || (ɵTranslateDefaultParser_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateDefaultParser)))(t || TranslateDefaultParser); }; }();\nTranslateDefaultParser.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateDefaultParser, factory: TranslateDefaultParser.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateDefaultParser, [{\n type: Injectable\n }], null, null); })();\nif (false) {\n /** @type {?} */\n TranslateDefaultParser.prototype.templateMatcher;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.compiler.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nclass TranslateCompiler {\n}\nif (false) {\n /**\n * @abstract\n * @param {?} value\n * @param {?} lang\n * @return {?}\n */\n TranslateCompiler.prototype.compile = function (value, lang) { };\n /**\n * @abstract\n * @param {?} translations\n * @param {?} lang\n * @return {?}\n */\n TranslateCompiler.prototype.compileTranslations = function (translations, lang) { };\n}\n/**\n * This compiler is just a placeholder that does nothing, in case you don't need a compiler at all\n */\nclass TranslateFakeCompiler extends TranslateCompiler {\n /**\n * @param {?} value\n * @param {?} lang\n * @return {?}\n */\n compile(value, lang) {\n return value;\n }\n /**\n * @param {?} translations\n * @param {?} lang\n * @return {?}\n */\n compileTranslations(translations, lang) {\n return translations;\n }\n}\nTranslateFakeCompiler.ɵfac = /*@__PURE__*/ function () { let ɵTranslateFakeCompiler_BaseFactory; return function TranslateFakeCompiler_Factory(t) { return (ɵTranslateFakeCompiler_BaseFactory || (ɵTranslateFakeCompiler_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateFakeCompiler)))(t || TranslateFakeCompiler); }; }();\nTranslateFakeCompiler.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateFakeCompiler, factory: TranslateFakeCompiler.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateFakeCompiler, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.store.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslateStore {\n constructor() {\n /**\n * The lang currently used\n */\n this.currentLang = this.defaultLang;\n /**\n * a list of translations per lang\n */\n this.translations = {};\n /**\n * an array of langs\n */\n this.langs = [];\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n */\n this.onTranslationChange = new EventEmitter();\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n */\n this.onLangChange = new EventEmitter();\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n */\n this.onDefaultLangChange = new EventEmitter();\n }\n}\nif (false) {\n /**\n * The default lang to fallback when translations are missing on the current lang\n * @type {?}\n */\n TranslateStore.prototype.defaultLang;\n /**\n * The lang currently used\n * @type {?}\n */\n TranslateStore.prototype.currentLang;\n /**\n * a list of translations per lang\n * @type {?}\n */\n TranslateStore.prototype.translations;\n /**\n * an array of langs\n * @type {?}\n */\n TranslateStore.prototype.langs;\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onTranslationChange;\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onLangChange;\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onDefaultLangChange;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst USE_STORE = new InjectionToken('USE_STORE');\n/** @type {?} */\nconst USE_DEFAULT_LANG = new InjectionToken('USE_DEFAULT_LANG');\n/** @type {?} */\nconst DEFAULT_LANGUAGE = new InjectionToken('DEFAULT_LANGUAGE');\n/** @type {?} */\nconst USE_EXTEND = new InjectionToken('USE_EXTEND');\n/**\n * @record\n */\nfunction TranslationChangeEvent() { }\nif (false) {\n /** @type {?} */\n TranslationChangeEvent.prototype.translations;\n /** @type {?} */\n TranslationChangeEvent.prototype.lang;\n}\n/**\n * @record\n */\nfunction LangChangeEvent() { }\nif (false) {\n /** @type {?} */\n LangChangeEvent.prototype.lang;\n /** @type {?} */\n LangChangeEvent.prototype.translations;\n}\n/**\n * @record\n */\nfunction DefaultLangChangeEvent() { }\nif (false) {\n /** @type {?} */\n DefaultLangChangeEvent.prototype.lang;\n /** @type {?} */\n DefaultLangChangeEvent.prototype.translations;\n}\nclass TranslateService {\n /**\n *\n * @param {?} store an instance of the store (that is supposed to be unique)\n * @param {?} currentLoader An instance of the loader currently used\n * @param {?} compiler An instance of the compiler currently used\n * @param {?} parser An instance of the parser currently used\n * @param {?} missingTranslationHandler A handler for missing translations.\n * @param {?=} useDefaultLang whether we should use default language translation when current language translation is missing.\n * @param {?=} isolate whether this service should use the store or not\n * @param {?=} extend To make a child module extend (and use) translations from parent modules.\n * @param {?=} defaultLanguage Set the default language using configuration\n */\n constructor(store, currentLoader, compiler, parser, missingTranslationHandler, useDefaultLang = true, isolate = false, extend = false, defaultLanguage) {\n this.store = store;\n this.currentLoader = currentLoader;\n this.compiler = compiler;\n this.parser = parser;\n this.missingTranslationHandler = missingTranslationHandler;\n this.useDefaultLang = useDefaultLang;\n this.isolate = isolate;\n this.extend = extend;\n this.pending = false;\n this._onTranslationChange = new EventEmitter();\n this._onLangChange = new EventEmitter();\n this._onDefaultLangChange = new EventEmitter();\n this._langs = [];\n this._translations = {};\n this._translationRequests = {};\n /** set the default language from configuration */\n if (defaultLanguage) {\n this.setDefaultLang(defaultLanguage);\n }\n }\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onTranslationChange() {\n return this.isolate ? this._onTranslationChange : this.store.onTranslationChange;\n }\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onLangChange() {\n return this.isolate ? this._onLangChange : this.store.onLangChange;\n }\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onDefaultLangChange() {\n return this.isolate ? this._onDefaultLangChange : this.store.onDefaultLangChange;\n }\n /**\n * The default lang to fallback when translations are missing on the current lang\n * @return {?}\n */\n get defaultLang() {\n return this.isolate ? this._defaultLang : this.store.defaultLang;\n }\n /**\n * @param {?} defaultLang\n * @return {?}\n */\n set defaultLang(defaultLang) {\n if (this.isolate) {\n this._defaultLang = defaultLang;\n }\n else {\n this.store.defaultLang = defaultLang;\n }\n }\n /**\n * The lang currently used\n * @return {?}\n */\n get currentLang() {\n return this.isolate ? this._currentLang : this.store.currentLang;\n }\n /**\n * @param {?} currentLang\n * @return {?}\n */\n set currentLang(currentLang) {\n if (this.isolate) {\n this._currentLang = currentLang;\n }\n else {\n this.store.currentLang = currentLang;\n }\n }\n /**\n * an array of langs\n * @return {?}\n */\n get langs() {\n return this.isolate ? this._langs : this.store.langs;\n }\n /**\n * @param {?} langs\n * @return {?}\n */\n set langs(langs) {\n if (this.isolate) {\n this._langs = langs;\n }\n else {\n this.store.langs = langs;\n }\n }\n /**\n * a list of translations per lang\n * @return {?}\n */\n get translations() {\n return this.isolate ? this._translations : this.store.translations;\n }\n /**\n * @param {?} translations\n * @return {?}\n */\n set translations(translations) {\n if (this.isolate) {\n this._translations = translations;\n }\n else {\n this.store.translations = translations;\n }\n }\n /**\n * Sets the default language to use as a fallback\n * @param {?} lang\n * @return {?}\n */\n setDefaultLang(lang) {\n if (lang === this.defaultLang) {\n return;\n }\n /** @type {?} */\n let pending = this.retrieveTranslations(lang);\n if (typeof pending !== \"undefined\") {\n // on init set the defaultLang immediately\n if (this.defaultLang == null) {\n this.defaultLang = lang;\n }\n pending.pipe(take(1))\n .subscribe((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.changeDefaultLang(lang);\n }));\n }\n else { // we already have this language\n this.changeDefaultLang(lang);\n }\n }\n /**\n * Gets the default language used\n * @return {?}\n */\n getDefaultLang() {\n return this.defaultLang;\n }\n /**\n * Changes the lang currently used\n * @param {?} lang\n * @return {?}\n */\n use(lang) {\n // don't change the language if the language given is already selected\n if (lang === this.currentLang) {\n return of(this.translations[lang]);\n }\n /** @type {?} */\n let pending = this.retrieveTranslations(lang);\n if (typeof pending !== \"undefined\") {\n // on init set the currentLang immediately\n if (!this.currentLang) {\n this.currentLang = lang;\n }\n pending.pipe(take(1))\n .subscribe((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.changeLang(lang);\n }));\n return pending;\n }\n else { // we have this language, return an Observable\n this.changeLang(lang);\n return of(this.translations[lang]);\n }\n }\n /**\n * Retrieves the given translations\n * @private\n * @param {?} lang\n * @return {?}\n */\n retrieveTranslations(lang) {\n /** @type {?} */\n let pending;\n // if this language is unavailable or extend is true, ask for it\n if (typeof this.translations[lang] === \"undefined\" || this.extend) {\n this._translationRequests[lang] = this._translationRequests[lang] || this.getTranslation(lang);\n pending = this._translationRequests[lang];\n }\n return pending;\n }\n /**\n * Gets an object of translations for a given language with the current loader\n * and passes it through the compiler\n * @param {?} lang\n * @return {?}\n */\n getTranslation(lang) {\n this.pending = true;\n /** @type {?} */\n const loadingTranslations = this.currentLoader.getTranslation(lang).pipe(shareReplay(1), take(1));\n this.loadingTranslations = loadingTranslations.pipe(map((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.compiler.compileTranslations(res, lang))), shareReplay(1), take(1));\n this.loadingTranslations\n .subscribe({\n next: (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.translations[lang] = this.extend && this.translations[lang] ? Object.assign(Object.assign({}, res), this.translations[lang]) : res;\n this.updateLangs();\n this.pending = false;\n }),\n error: (/**\n * @param {?} err\n * @return {?}\n */\n (err) => {\n this.pending = false;\n })\n });\n return loadingTranslations;\n }\n /**\n * Manually sets an object of translations for a given language\n * after passing it through the compiler\n * @param {?} lang\n * @param {?} translations\n * @param {?=} shouldMerge\n * @return {?}\n */\n setTranslation(lang, translations, shouldMerge = false) {\n translations = this.compiler.compileTranslations(translations, lang);\n if ((shouldMerge || this.extend) && this.translations[lang]) {\n this.translations[lang] = mergeDeep(this.translations[lang], translations);\n }\n else {\n this.translations[lang] = translations;\n }\n this.updateLangs();\n this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Returns an array of currently available langs\n * @return {?}\n */\n getLangs() {\n return this.langs;\n }\n /**\n * Add available langs\n * @param {?} langs\n * @return {?}\n */\n addLangs(langs) {\n langs.forEach((/**\n * @param {?} lang\n * @return {?}\n */\n (lang) => {\n if (this.langs.indexOf(lang) === -1) {\n this.langs.push(lang);\n }\n }));\n }\n /**\n * Update the list of available langs\n * @private\n * @return {?}\n */\n updateLangs() {\n this.addLangs(Object.keys(this.translations));\n }\n /**\n * Returns the parsed result of the translations\n * @param {?} translations\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?}\n */\n getParsedResult(translations, key, interpolateParams) {\n /** @type {?} */\n let res;\n if (key instanceof Array) {\n /** @type {?} */\n let result = {};\n /** @type {?} */\n let observables = false;\n for (let k of key) {\n result[k] = this.getParsedResult(translations, k, interpolateParams);\n if (isObservable(result[k])) {\n observables = true;\n }\n }\n if (observables) {\n /** @type {?} */\n const sources = key.map((/**\n * @param {?} k\n * @return {?}\n */\n k => isObservable(result[k]) ? result[k] : of((/** @type {?} */ (result[k])))));\n return forkJoin(sources).pipe(map((/**\n * @param {?} arr\n * @return {?}\n */\n (arr) => {\n /** @type {?} */\n let obj = {};\n arr.forEach((/**\n * @param {?} value\n * @param {?} index\n * @return {?}\n */\n (value, index) => {\n obj[key[index]] = value;\n }));\n return obj;\n })));\n }\n return result;\n }\n if (translations) {\n res = this.parser.interpolate(this.parser.getValue(translations, key), interpolateParams);\n }\n if (typeof res === \"undefined\" && this.defaultLang != null && this.defaultLang !== this.currentLang && this.useDefaultLang) {\n res = this.parser.interpolate(this.parser.getValue(this.translations[this.defaultLang], key), interpolateParams);\n }\n if (typeof res === \"undefined\") {\n /** @type {?} */\n let params = { key, translateService: this };\n if (typeof interpolateParams !== 'undefined') {\n params.interpolateParams = interpolateParams;\n }\n res = this.missingTranslationHandler.handle(params);\n }\n return typeof res !== \"undefined\" ? res : key;\n }\n /**\n * Gets the translated value of a key (or an array of keys)\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} the translated key, or an object of translated keys\n */\n get(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n // check if we are loading a new translation to use\n if (this.pending) {\n return this.loadingTranslations.pipe(concatMap((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n res = this.getParsedResult(res, key, interpolateParams);\n return isObservable(res) ? res : of(res);\n })));\n }\n else {\n /** @type {?} */\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\n return isObservable(res) ? res : of(res);\n }\n }\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the translation changes.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} A stream of the translated key, or an object of translated keys\n */\n getStreamOnTranslationChange(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n return concat(defer((/**\n * @return {?}\n */\n () => this.get(key, interpolateParams))), this.onTranslationChange.pipe(switchMap((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n /** @type {?} */\n const res = this.getParsedResult(event.translations, key, interpolateParams);\n if (typeof res.subscribe === 'function') {\n return res;\n }\n else {\n return of(res);\n }\n }))));\n }\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the language changes.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} A stream of the translated key, or an object of translated keys\n */\n stream(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n return concat(defer((/**\n * @return {?}\n */\n () => this.get(key, interpolateParams))), this.onLangChange.pipe(switchMap((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n /** @type {?} */\n const res = this.getParsedResult(event.translations, key, interpolateParams);\n return isObservable(res) ? res : of(res);\n }))));\n }\n /**\n * Returns a translation instantly from the internal state of loaded translation.\n * All rules regarding the current language, the preferred language of even fallback languages will be used except any promise handling.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?}\n */\n instant(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n /** @type {?} */\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\n if (isObservable(res)) {\n if (key instanceof Array) {\n /** @type {?} */\n let obj = {};\n key.forEach((/**\n * @param {?} value\n * @param {?} index\n * @return {?}\n */\n (value, index) => {\n obj[key[index]] = key[index];\n }));\n return obj;\n }\n return key;\n }\n else {\n return res;\n }\n }\n /**\n * Sets the translated value of a key, after compiling it\n * @param {?} key\n * @param {?} value\n * @param {?=} lang\n * @return {?}\n */\n set(key, value, lang = this.currentLang) {\n this.translations[lang][key] = this.compiler.compile(value, lang);\n this.updateLangs();\n this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Changes the current lang\n * @private\n * @param {?} lang\n * @return {?}\n */\n changeLang(lang) {\n this.currentLang = lang;\n this.onLangChange.emit({ lang: lang, translations: this.translations[lang] });\n // if there is no default lang, use the one that we just set\n if (this.defaultLang == null) {\n this.changeDefaultLang(lang);\n }\n }\n /**\n * Changes the default lang\n * @private\n * @param {?} lang\n * @return {?}\n */\n changeDefaultLang(lang) {\n this.defaultLang = lang;\n this.onDefaultLangChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Allows to reload the lang file from the file\n * @param {?} lang\n * @return {?}\n */\n reloadLang(lang) {\n this.resetLang(lang);\n return this.getTranslation(lang);\n }\n /**\n * Deletes inner translation\n * @param {?} lang\n * @return {?}\n */\n resetLang(lang) {\n this._translationRequests[lang] = undefined;\n this.translations[lang] = undefined;\n }\n /**\n * Returns the language code name from the browser, e.g. \"de\"\n * @return {?}\n */\n getBrowserLang() {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n /** @type {?} */\n let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;\n browserLang = browserLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\n if (typeof browserLang === 'undefined') {\n return undefined;\n }\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0];\n }\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0];\n }\n return browserLang;\n }\n /**\n * Returns the culture language code name from the browser, e.g. \"de-DE\"\n * @return {?}\n */\n getBrowserCultureLang() {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n /** @type {?} */\n let browserCultureLang = window.navigator.languages ? window.navigator.languages[0] : null;\n browserCultureLang = browserCultureLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\n return browserCultureLang;\n }\n}\nTranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(ɵngcc0.ɵɵinject(TranslateStore), ɵngcc0.ɵɵinject(TranslateLoader), ɵngcc0.ɵɵinject(TranslateCompiler), ɵngcc0.ɵɵinject(TranslateParser), ɵngcc0.ɵɵinject(MissingTranslationHandler), ɵngcc0.ɵɵinject(USE_DEFAULT_LANG), ɵngcc0.ɵɵinject(USE_STORE), ɵngcc0.ɵɵinject(USE_EXTEND), ɵngcc0.ɵɵinject(DEFAULT_LANGUAGE)); };\nTranslateService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac });\n/** @nocollapse */\nTranslateService.ctorParameters = () => [\n { type: TranslateStore },\n { type: TranslateLoader },\n { type: TranslateCompiler },\n { type: TranslateParser },\n { type: MissingTranslationHandler },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_DEFAULT_LANG,] }] },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_STORE,] }] },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_EXTEND,] }] },\n { type: String, decorators: [{ type: Inject, args: [DEFAULT_LANGUAGE,] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateService, [{\n type: Injectable\n }], function () { return [{ type: TranslateStore }, { type: TranslateLoader }, { type: TranslateCompiler }, { type: TranslateParser }, { type: MissingTranslationHandler }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_DEFAULT_LANG]\n }] }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_STORE]\n }] }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_EXTEND]\n }] }, { type: String, decorators: [{\n type: Inject,\n args: [DEFAULT_LANGUAGE]\n }] }]; }, null); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.loadingTranslations;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.pending;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onTranslationChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onDefaultLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._defaultLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._currentLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._langs;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._translations;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._translationRequests;\n /** @type {?} */\n TranslateService.prototype.store;\n /** @type {?} */\n TranslateService.prototype.currentLoader;\n /** @type {?} */\n TranslateService.prototype.compiler;\n /** @type {?} */\n TranslateService.prototype.parser;\n /** @type {?} */\n TranslateService.prototype.missingTranslationHandler;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.useDefaultLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.isolate;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.extend;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.directive.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslateDirective {\n /**\n * @param {?} translateService\n * @param {?} element\n * @param {?} _ref\n */\n constructor(translateService, element, _ref) {\n this.translateService = translateService;\n this.element = element;\n this._ref = _ref;\n // subscribe to onTranslationChange event, in case the translations of the current lang change\n if (!this.onTranslationChangeSub) {\n this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (event.lang === this.translateService.currentLang) {\n this.checkNodes(true, event.translations);\n }\n }));\n }\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChangeSub) {\n this.onLangChangeSub = this.translateService.onLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.checkNodes(true, event.translations);\n }));\n }\n // subscribe to onDefaultLangChange event, in case the default language changes\n if (!this.onDefaultLangChangeSub) {\n this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.checkNodes(true);\n }));\n }\n }\n /**\n * @param {?} key\n * @return {?}\n */\n set translate(key) {\n if (key) {\n this.key = key;\n this.checkNodes();\n }\n }\n /**\n * @param {?} params\n * @return {?}\n */\n set translateParams(params) {\n if (!equals(this.currentParams, params)) {\n this.currentParams = params;\n this.checkNodes(true);\n }\n }\n /**\n * @return {?}\n */\n ngAfterViewChecked() {\n this.checkNodes();\n }\n /**\n * @param {?=} forceUpdate\n * @param {?=} translations\n * @return {?}\n */\n checkNodes(forceUpdate = false, translations) {\n /** @type {?} */\n let nodes = this.element.nativeElement.childNodes;\n // if the element is empty\n if (!nodes.length) {\n // we add the key as content\n this.setContent(this.element.nativeElement, this.key);\n nodes = this.element.nativeElement.childNodes;\n }\n for (let i = 0; i < nodes.length; ++i) {\n /** @type {?} */\n let node = nodes[i];\n if (node.nodeType === 3) { // node type 3 is a text node\n // node type 3 is a text node\n /** @type {?} */\n let key;\n if (forceUpdate) {\n node.lastKey = null;\n }\n if (isDefined(node.lookupKey)) {\n key = node.lookupKey;\n }\n else if (this.key) {\n key = this.key;\n }\n else {\n /** @type {?} */\n let content = this.getContent(node);\n /** @type {?} */\n let trimmedContent = content.trim();\n if (trimmedContent.length) {\n node.lookupKey = trimmedContent;\n // we want to use the content as a key, not the translation value\n if (content !== node.currentValue) {\n key = trimmedContent;\n // the content was changed from the user, we'll use it as a reference if needed\n node.originalContent = content || node.originalContent;\n }\n else if (node.originalContent) { // the content seems ok, but the lang has changed\n // the current content is the translation, not the key, use the last real content as key\n key = node.originalContent.trim();\n }\n else if (content !== node.currentValue) {\n // we want to use the content as a key, not the translation value\n key = trimmedContent;\n // the content was changed from the user, we'll use it as a reference if needed\n node.originalContent = content || node.originalContent;\n }\n }\n }\n this.updateValue(key, node, translations);\n }\n }\n }\n /**\n * @param {?} key\n * @param {?} node\n * @param {?} translations\n * @return {?}\n */\n updateValue(key, node, translations) {\n if (key) {\n if (node.lastKey === key && this.lastParams === this.currentParams) {\n return;\n }\n this.lastParams = this.currentParams;\n /** @type {?} */\n let onTranslation = (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n if (res !== key) {\n node.lastKey = key;\n }\n if (!node.originalContent) {\n node.originalContent = this.getContent(node);\n }\n node.currentValue = isDefined(res) ? res : (node.originalContent || key);\n // we replace in the original content to preserve spaces that we might have trimmed\n this.setContent(node, this.key ? node.currentValue : node.originalContent.replace(key, node.currentValue));\n this._ref.markForCheck();\n });\n if (isDefined(translations)) {\n /** @type {?} */\n let res = this.translateService.getParsedResult(translations, key, this.currentParams);\n if (isObservable(res)) {\n res.subscribe(onTranslation);\n }\n else {\n onTranslation(res);\n }\n }\n else {\n this.translateService.get(key, this.currentParams).subscribe(onTranslation);\n }\n }\n }\n /**\n * @param {?} node\n * @return {?}\n */\n getContent(node) {\n return isDefined(node.textContent) ? node.textContent : node.data;\n }\n /**\n * @param {?} node\n * @param {?} content\n * @return {?}\n */\n setContent(node, content) {\n if (isDefined(node.textContent)) {\n node.textContent = content;\n }\n else {\n node.data = content;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.onLangChangeSub) {\n this.onLangChangeSub.unsubscribe();\n }\n if (this.onDefaultLangChangeSub) {\n this.onDefaultLangChangeSub.unsubscribe();\n }\n if (this.onTranslationChangeSub) {\n this.onTranslationChangeSub.unsubscribe();\n }\n }\n}\nTranslateDirective.ɵfac = function TranslateDirective_Factory(t) { return new (t || TranslateDirective)(ɵngcc0.ɵɵdirectiveInject(TranslateService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nTranslateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TranslateDirective, selectors: [[\"\", \"translate\", \"\"], [\"\", \"ngx-translate\", \"\"]], inputs: { translate: \"translate\", translateParams: \"translateParams\" } });\n/** @nocollapse */\nTranslateDirective.ctorParameters = () => [\n { type: TranslateService },\n { type: ElementRef },\n { type: ChangeDetectorRef }\n];\nTranslateDirective.propDecorators = {\n translate: [{ type: Input }],\n translateParams: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateDirective, [{\n type: Directive,\n args: [{\n selector: '[translate],[ngx-translate]'\n }]\n }], function () { return [{ type: TranslateService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }]; }, { translate: [{\n type: Input\n }], translateParams: [{\n type: Input\n }] }); })();\nif (false) {\n /** @type {?} */\n TranslateDirective.prototype.key;\n /** @type {?} */\n TranslateDirective.prototype.lastParams;\n /** @type {?} */\n TranslateDirective.prototype.currentParams;\n /** @type {?} */\n TranslateDirective.prototype.onLangChangeSub;\n /** @type {?} */\n TranslateDirective.prototype.onDefaultLangChangeSub;\n /** @type {?} */\n TranslateDirective.prototype.onTranslationChangeSub;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype.translateService;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype.element;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype._ref;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.pipe.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslatePipe {\n /**\n * @param {?} translate\n * @param {?} _ref\n */\n constructor(translate, _ref) {\n this.translate = translate;\n this._ref = _ref;\n this.value = '';\n }\n /**\n * @param {?} key\n * @param {?=} interpolateParams\n * @param {?=} translations\n * @return {?}\n */\n updateValue(key, interpolateParams, translations) {\n /** @type {?} */\n let onTranslation = (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.value = res !== undefined ? res : key;\n this.lastKey = key;\n this._ref.markForCheck();\n });\n if (translations) {\n /** @type {?} */\n let res = this.translate.getParsedResult(translations, key, interpolateParams);\n if (isObservable(res.subscribe)) {\n res.subscribe(onTranslation);\n }\n else {\n onTranslation(res);\n }\n }\n this.translate.get(key, interpolateParams).subscribe(onTranslation);\n }\n /**\n * @param {?} query\n * @param {...?} args\n * @return {?}\n */\n transform(query, ...args) {\n if (!query || !query.length) {\n return query;\n }\n // if we ask another time for the same key, return the last value\n if (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n return this.value;\n }\n /** @type {?} */\n let interpolateParams;\n if (isDefined(args[0]) && args.length) {\n if (typeof args[0] === 'string' && args[0].length) {\n // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n // which is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n /** @type {?} */\n let validArgs = args[0]\n .replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n .replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n try {\n interpolateParams = JSON.parse(validArgs);\n }\n catch (e) {\n throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\n }\n }\n else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {\n interpolateParams = args[0];\n }\n }\n // store the query, in case it changes\n this.lastKey = query;\n // store the params, in case they change\n this.lastParams = args;\n // set the value\n this.updateValue(query, interpolateParams);\n // if there is a subscription to onLangChange, clean it\n this._dispose();\n // subscribe to onTranslationChange event, in case the translations change\n if (!this.onTranslationChange) {\n this.onTranslationChange = this.translate.onTranslationChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (this.lastKey && event.lang === this.translate.currentLang) {\n this.lastKey = null;\n this.updateValue(query, interpolateParams, event.translations);\n }\n }));\n }\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChange) {\n this.onLangChange = this.translate.onLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams, event.translations);\n }\n }));\n }\n // subscribe to onDefaultLangChange event, in case the default language changes\n if (!this.onDefaultLangChange) {\n this.onDefaultLangChange = this.translate.onDefaultLangChange.subscribe((/**\n * @return {?}\n */\n () => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams);\n }\n }));\n }\n return this.value;\n }\n /**\n * Clean any existing subscription to change events\n * @private\n * @return {?}\n */\n _dispose() {\n if (typeof this.onTranslationChange !== 'undefined') {\n this.onTranslationChange.unsubscribe();\n this.onTranslationChange = undefined;\n }\n if (typeof this.onLangChange !== 'undefined') {\n this.onLangChange.unsubscribe();\n this.onLangChange = undefined;\n }\n if (typeof this.onDefaultLangChange !== 'undefined') {\n this.onDefaultLangChange.unsubscribe();\n this.onDefaultLangChange = undefined;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._dispose();\n }\n}\nTranslatePipe.ɵfac = function TranslatePipe_Factory(t) { return new (t || TranslatePipe)(ɵngcc0.ɵɵdirectiveInject(TranslateService, 16), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef, 16)); };\nTranslatePipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"translate\", type: TranslatePipe, pure: false });\nTranslatePipe.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslatePipe, factory: TranslatePipe.ɵfac });\n/** @nocollapse */\nTranslatePipe.ctorParameters = () => [\n { type: TranslateService },\n { type: ChangeDetectorRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslatePipe, [{\n type: Injectable\n }, {\n type: Pipe,\n args: [{\n name: 'translate',\n pure: false // required to update the value when the promise is resolved\n }]\n }], function () { return [{ type: TranslateService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\nif (false) {\n /** @type {?} */\n TranslatePipe.prototype.value;\n /** @type {?} */\n TranslatePipe.prototype.lastKey;\n /** @type {?} */\n TranslatePipe.prototype.lastParams;\n /** @type {?} */\n TranslatePipe.prototype.onTranslationChange;\n /** @type {?} */\n TranslatePipe.prototype.onLangChange;\n /** @type {?} */\n TranslatePipe.prototype.onDefaultLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslatePipe.prototype.translate;\n /**\n * @type {?}\n * @private\n */\n TranslatePipe.prototype._ref;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: public_api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction TranslateModuleConfig() { }\nif (false) {\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.loader;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.compiler;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.parser;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.missingTranslationHandler;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.isolate;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.extend;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.useDefaultLang;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.defaultLanguage;\n}\nclass TranslateModule {\n /**\n * Use this method in your root module to provide the TranslateService\n * @param {?=} config\n * @return {?}\n */\n static forRoot(config = {}) {\n return {\n ngModule: TranslateModule,\n providers: [\n config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },\n config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },\n config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },\n config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },\n TranslateStore,\n { provide: USE_STORE, useValue: config.isolate },\n { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },\n { provide: USE_EXTEND, useValue: config.extend },\n { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },\n TranslateService\n ]\n };\n }\n /**\n * Use this method in your other (non root) modules to import the directive/pipe\n * @param {?=} config\n * @return {?}\n */\n static forChild(config = {}) {\n return {\n ngModule: TranslateModule,\n providers: [\n config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },\n config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },\n config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },\n config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },\n { provide: USE_STORE, useValue: config.isolate },\n { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },\n { provide: USE_EXTEND, useValue: config.extend },\n { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },\n TranslateService\n ]\n };\n }\n}\nTranslateModule.ɵfac = function TranslateModule_Factory(t) { return new (t || TranslateModule)(); };\nTranslateModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TranslateModule });\nTranslateModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateModule, [{\n type: NgModule,\n args: [{\n declarations: [\n TranslatePipe,\n TranslateDirective\n ],\n exports: [\n TranslatePipe,\n TranslateDirective\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TranslateModule, { declarations: [TranslatePipe, TranslateDirective], exports: [TranslatePipe, TranslateDirective] }); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: ngx-translate-core.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { DEFAULT_LANGUAGE, FakeMissingTranslationHandler, MissingTranslationHandler, TranslateCompiler, TranslateDefaultParser, TranslateDirective, TranslateFakeCompiler, TranslateFakeLoader, TranslateLoader, TranslateModule, TranslateParser, TranslatePipe, TranslateService, TranslateStore, USE_DEFAULT_LANG, USE_EXTEND, USE_STORE };\n\n","import { decompressJson } from './utils';\nimport CourierBoldCompressed from './Courier-Bold.compressed.json';\nimport CourierBoldObliqueCompressed from './Courier-BoldOblique.compressed.json';\nimport CourierObliqueCompressed from './Courier-Oblique.compressed.json';\nimport CourierCompressed from './Courier.compressed.json';\nimport HelveticaBoldCompressed from './Helvetica-Bold.compressed.json';\nimport HelveticaBoldObliqueCompressed from './Helvetica-BoldOblique.compressed.json';\nimport HelveticaObliqueCompressed from './Helvetica-Oblique.compressed.json';\nimport HelveticaCompressed from './Helvetica.compressed.json';\nimport TimesBoldCompressed from './Times-Bold.compressed.json';\nimport TimesBoldItalicCompressed from './Times-BoldItalic.compressed.json';\nimport TimesItalicCompressed from './Times-Italic.compressed.json';\nimport TimesRomanCompressed from './Times-Roman.compressed.json';\nimport SymbolCompressed from './Symbol.compressed.json';\nimport ZapfDingbatsCompressed from './ZapfDingbats.compressed.json';\n// prettier-ignore\nvar compressedJsonForFontName = {\n 'Courier': CourierCompressed,\n 'Courier-Bold': CourierBoldCompressed,\n 'Courier-Oblique': CourierObliqueCompressed,\n 'Courier-BoldOblique': CourierBoldObliqueCompressed,\n 'Helvetica': HelveticaCompressed,\n 'Helvetica-Bold': HelveticaBoldCompressed,\n 'Helvetica-Oblique': HelveticaObliqueCompressed,\n 'Helvetica-BoldOblique': HelveticaBoldObliqueCompressed,\n 'Times-Roman': TimesRomanCompressed,\n 'Times-Bold': TimesBoldCompressed,\n 'Times-Italic': TimesItalicCompressed,\n 'Times-BoldItalic': TimesBoldItalicCompressed,\n 'Symbol': SymbolCompressed,\n 'ZapfDingbats': ZapfDingbatsCompressed,\n};\nexport var FontNames;\n(function (FontNames) {\n FontNames[\"Courier\"] = \"Courier\";\n FontNames[\"CourierBold\"] = \"Courier-Bold\";\n FontNames[\"CourierOblique\"] = \"Courier-Oblique\";\n FontNames[\"CourierBoldOblique\"] = \"Courier-BoldOblique\";\n FontNames[\"Helvetica\"] = \"Helvetica\";\n FontNames[\"HelveticaBold\"] = \"Helvetica-Bold\";\n FontNames[\"HelveticaOblique\"] = \"Helvetica-Oblique\";\n FontNames[\"HelveticaBoldOblique\"] = \"Helvetica-BoldOblique\";\n FontNames[\"TimesRoman\"] = \"Times-Roman\";\n FontNames[\"TimesRomanBold\"] = \"Times-Bold\";\n FontNames[\"TimesRomanItalic\"] = \"Times-Italic\";\n FontNames[\"TimesRomanBoldItalic\"] = \"Times-BoldItalic\";\n FontNames[\"Symbol\"] = \"Symbol\";\n FontNames[\"ZapfDingbats\"] = \"ZapfDingbats\";\n})(FontNames || (FontNames = {}));\nvar fontCache = {};\nvar Font = /** @class */ (function () {\n function Font() {\n var _this = this;\n this.getWidthOfGlyph = function (glyphName) {\n return _this.CharWidths[glyphName];\n };\n this.getXAxisKerningForPair = function (leftGlyphName, rightGlyphName) {\n return (_this.KernPairXAmounts[leftGlyphName] || {})[rightGlyphName];\n };\n }\n Font.load = function (fontName) {\n var cachedFont = fontCache[fontName];\n if (cachedFont)\n return cachedFont;\n var json = decompressJson(compressedJsonForFontName[fontName]);\n var font = Object.assign(new Font(), JSON.parse(json));\n font.CharWidths = font.CharMetrics.reduce(function (acc, metric) {\n acc[metric.N] = metric.WX;\n return acc;\n }, {});\n font.KernPairXAmounts = font.KernPairs.reduce(function (acc, _a) {\n var name1 = _a[0], name2 = _a[1], width = _a[2];\n if (!acc[name1])\n acc[name1] = {};\n acc[name1][name2] = width;\n return acc;\n }, {});\n fontCache[fontName] = font;\n return font;\n };\n return Font;\n}());\nexport { Font };\n","import * as base64 from 'base64-arraybuffer';\nimport pako from 'pako';\nvar arrayToString = function (array) {\n var str = '';\n for (var i = 0; i < array.length; i++) {\n str += String.fromCharCode(array[i]);\n }\n return str;\n};\nexport var decompressJson = function (compressedJson) {\n return arrayToString(pako.inflate(base64.decode(compressedJson)));\n};\n","/* tslint:disable max-classes-per-file */\nimport { decompressJson } from './utils';\nimport AllEncodingsCompressed from './all-encodings.compressed.json';\nvar decompressedEncodings = decompressJson(AllEncodingsCompressed);\nvar allUnicodeMappings = JSON.parse(decompressedEncodings);\nvar Encoding = /** @class */ (function () {\n function Encoding(name, unicodeMappings) {\n var _this = this;\n this.canEncodeUnicodeCodePoint = function (codePoint) {\n return codePoint in _this.unicodeMappings;\n };\n this.encodeUnicodeCodePoint = function (codePoint) {\n var mapped = _this.unicodeMappings[codePoint];\n if (!mapped) {\n var str = String.fromCharCode(codePoint);\n var msg = _this.name + \" cannot encode \\\"\" + str + \"\\\"\";\n throw new Error(msg);\n }\n return { code: mapped[0], name: mapped[1] };\n };\n this.name = name;\n this.unicodeMappings = unicodeMappings;\n }\n return Encoding;\n}());\nexport var Encodings = {\n Symbol: new Encoding('Symbol', allUnicodeMappings.symbol),\n ZapfDingbats: new Encoding('ZapfDingbats', allUnicodeMappings.zapfdingbats),\n WinAnsi: new Encoding('WinAnsi', allUnicodeMappings.win1252),\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { Injectable, EventEmitter, Input, Output, HostBinding, HostListener, Directive, Optional, ElementRef, Renderer2, NgZone, isDevMode, ContentChildren, QueryList, Component, NgModule, TemplateRef, ViewContainerRef, InjectionToken, Inject, ContentChild, ViewChild, ChangeDetectorRef, forwardRef } from '@angular/core';\nimport { BehaviorSubject, Subject, fromEvent, merge, Subscription } from 'rxjs';\nimport { Keys, isChanged, isDocumentAvailable, hasObservers, guid, EventsModule } from '@progress/kendo-angular-common';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { filter, take } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { CommonModule } from '@angular/common';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { sequence, query, style, stagger, animate, AnimationBuilder } from '@angular/animations';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\nimport * as ɵngcc4 from '@angular/animations';\nimport * as ɵngcc5 from '@progress/kendo-angular-common';\n\nconst _c0 = [[[\"\", \"kendoButton\", \"\"]]];\nconst _c1 = [\"[kendoButton]\"];\nfunction ListComponent_li_1_1_ng_template_0_Template(rf, ctx) { }\nconst _c2 = function (a0, a1) { return { templateRef: a0, $implicit: a1 }; };\nfunction ListComponent_li_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c2, ctx_r3.itemTemplate == null ? null : ctx_r3.itemTemplate.templateRef, dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_span_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r7.getIconClasses(dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_img_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"img\", 9);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"src\", dataItem_r1.imageUrl, ɵngcc0.ɵɵsanitizeUrl);\n} }\nfunction ListComponent_li_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_ng_template_2_span_0_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_ng_template_2_img_1_Template, 1, 1, \"img\", 7);\n ɵngcc0.ɵɵtext(2);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.icon || dataItem_r1.iconClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.imageUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r4.getText(dataItem_r1), \" \");\n} }\nconst _c3 = function (a1) { return { \"k-item\": true, \"k-state-disabled\": a1 }; };\nfunction ListComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function ListComponent_li_1_Template_li_click_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r13); const index_r2 = restoredCtx.index; const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.onClick(index_r2); })(\"blur\", function ListComponent_li_1_Template_li_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.onBlur(); });\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_1_Template, 1, 4, null, 3);\n ɵngcc0.ɵɵtemplate(2, ListComponent_li_1_ng_template_2_Template, 3, 3, \"ng-template\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r1 = ctx.$implicit;\n const index_r2 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"index\", index_r2)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(5, _c3, dataItem_r1.disabled));\n ɵngcc0.ɵɵattribute(\"aria-disabled\", dataItem_r1.disabled ? true : false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef));\n} }\nconst _c4 = [\"button\"];\nconst _c5 = [\"arrowButton\"];\nconst _c6 = [\"popupTemplate\"];\nconst _c7 = [\"container\"];\nfunction SplitButtonComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 8);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function SplitButtonComponent_ng_template_8_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onItemClick($event); })(\"keydown\", function SplitButtonComponent_ng_template_8_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.keyDownHandler($event); })(\"keypress\", function SplitButtonComponent_ng_template_8_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.keyPressHandler($event); })(\"keyup\", function SplitButtonComponent_ng_template_8_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r3.listId)(\"data\", ctx_r3.data)(\"textField\", ctx_r3.textField)(\"itemTemplate\", ctx_r3.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r3.dir);\n} }\nconst _c10 = [\"*\"];\nconst _c11 = [\"buttonList\"];\nfunction DropDownButtonComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 4, 5);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onItemClick($event); })(\"keydown\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.keyDownHandler($event); })(\"keypress\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.keyPressHandler($event); })(\"keyup\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r2.listId)(\"data\", ctx_r2.data)(\"textField\", ctx_r2.textField)(\"itemTemplate\", ctx_r2.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r2.dir);\n} }\nfunction ChipComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r0.selectedIconClasses);\n} }\nfunction ChipComponent_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r1.iconClasses);\n} }\nfunction ChipComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r2.label, \" \");\n} }\nfunction ChipComponent_ng_content_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!label\"]);\n} }\nfunction ChipComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function ChipComponent_span_6_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.onRemoveClick($event); });\n ɵngcc0.ɵɵelement(1, \"span\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.removeIconClasses);\n} }\nfunction FloatingActionButtonComponent_2_ng_template_0_Template(rf, ctx) { }\nfunction FloatingActionButtonComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FloatingActionButtonComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.fabTemplate == null ? null : ctx_r1.fabTemplate.templateRef);\n} }\nfunction FloatingActionButtonComponent_ng_container_3_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r6.iconClasses);\n} }\nfunction FloatingActionButtonComponent_ng_container_3_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 8);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r7.text);\n} }\nfunction FloatingActionButtonComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, FloatingActionButtonComponent_ng_container_3_span_1_Template, 1, 1, \"span\", 5);\n ɵngcc0.ɵɵtemplate(2, FloatingActionButtonComponent_ng_container_3_span_2_Template, 2, 1, \"span\", 6);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.icon || ctx_r2.iconClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.text);\n} }\nfunction FloatingActionButtonComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"ul\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function FloatingActionButtonComponent_ng_template_4_Template_ul_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.onItemClick($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.dialClass)(\"dialItems\", ctx_r4.dialItems)(\"dialItemTemplate\", ctx_r4.dialItemTemplate == null ? null : ctx_r4.dialItemTemplate.templateRef)(\"align\", ctx_r4.align);\n ɵngcc0.ɵɵattribute(\"aria-labelledby\", ctx_r4.id);\n} }\nconst _c12 = function (a0, a1) { return { keydown: a0, click: a1 }; };\nconst _c13 = [\"kendoDialList\", \"\"];\nfunction DialListComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"li\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const idx_r2 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"item\", ctx_r0.dialItems[idx_r2])(\"index\", idx_r2)(\"dialItemTemplate\", ctx_r0.dialItemTemplate)(\"isFocused\", ctx_r0.isFocused(idx_r2))(\"ngClass\", item_r1.cssClass)(\"ngStyle\", item_r1.cssStyle)(\"align\", ctx_r0.align);\n} }\nconst _c14 = [\"kendoDialItem\", \"\"];\nfunction DialItemComponent_0_ng_template_0_Template(rf, ctx) { }\nconst _c15 = function (a0, a1, a2) { return { $implicit: a0, index: a1, isFocused: a2 }; };\nfunction DialItemComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialItemComponent_0_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.dialItemTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(2, _c15, ctx_r0.item, ctx_r0.index, ctx_r0.isFocused));\n} }\nfunction DialItemComponent_ng_container_1_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r3.item.label);\n} }\nfunction DialItemComponent_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 5);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.iconClasses);\n} }\nfunction DialItemComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, DialItemComponent_ng_container_1_span_1_Template, 2, 1, \"span\", 2);\n ɵngcc0.ɵɵtemplate(2, DialItemComponent_ng_container_1_span_2_Template, 1, 1, \"span\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.item.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.item.icon || ctx_r1.item.iconClass);\n} }\nlet KendoButtonService = class KendoButtonService {\n /**\n * @hidden\n */\n constructor() {\n this.buttonLookChange = new BehaviorSubject('default');\n this.buttonClicked = new Subject();\n this.buttonClicked$ = this.buttonClicked.asObservable();\n }\n click(button) {\n this.buttonClicked.next(button);\n }\n setButtonLook(look) {\n this.buttonLookChange.next(look);\n }\n};\nKendoButtonService.ɵfac = function KendoButtonService_Factory(t) { return new (t || KendoButtonService)(); };\nKendoButtonService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: KendoButtonService, factory: function (t) { return KendoButtonService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-buttons',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1635937762,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nconst SPAN_TAG_NAME = 'SPAN';\n/**\n * Represents the Kendo UI Button component for Angular.\n */\nlet ButtonDirective = class ButtonDirective {\n constructor(element, renderer, service, localization, ngZone) {\n this.service = service;\n this.ngZone = ngZone;\n /**\n * Provides visual styling that indicates if the Button is active.\n * By default, `toggleable` is set to `false`.\n */\n this.toggleable = false;\n /**\n * Adds visual weight to the Button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug appearance_button %})).\n *\n * The available values are:\n * * [`ButtonLook`]({% slug api_buttons_buttonlook %}) = `flat` | `outline`\n * * `clear`\n */\n this.look = 'default';\n /**\n * @hidden\n */\n this.role = 'button';\n /**\n * Fires each time the selected state of a toggleable button is changed.\n *\n * The event argument is the new selected state (boolean).\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks the button.\n */\n this.click = new EventEmitter();\n this.isDisabled = false;\n this.isIcon = false;\n this.isIconClass = false;\n this._focused = false;\n this.domEvents = [];\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.element = element.nativeElement;\n this.renderer = renderer;\n }\n /**\n * Backwards-compatible alias\n *\n * @hidden\n */\n get togglable() {\n return this.toggleable;\n }\n /**\n * @hidden\n */\n set togglable(value) {\n this.toggleable = value;\n }\n /**\n * Sets the selected state of the Button.\n */\n get selected() {\n return this._selected || false;\n }\n set selected(value) {\n this._selected = value;\n }\n /**\n * @hidden\n */\n set tabIndex(index) {\n this.element.tabIndex = index;\n }\n get tabIndex() {\n return this.element.tabIndex;\n }\n /**\n * Defines the name for an existing icon in a Kendo UI theme.\n * The icon is rendered inside the Button by a `span.k-icon` element.\n */\n set icon(icon) {\n if (icon) {\n this.iconSetter(icon, () => {\n this.isIcon = true;\n const classes = 'k-icon k-i-' + icon;\n this.addIcon(classes);\n });\n }\n else {\n this.isIcon = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a CSS class—or multiple classes separated by spaces—\n * which are applied to a `span` element inside the Button. Allows the usage of custom icons.\n */\n set iconClass(iconClassName) {\n if (iconClassName) {\n this.iconSetter(iconClassName, () => {\n this.isIconClass = true;\n this.addIcon(iconClassName);\n });\n }\n else {\n this.isIconClass = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a URL which is used for an `img` element inside the Button.\n * The URL can be relative or absolute. If relative, it is evaluated with relation to the web page URL.\n */\n set imageUrl(imageUrl) {\n if (imageUrl) {\n this.iconSetter(imageUrl, this.addImgIcon.bind(this));\n }\n else {\n this.removeImageNode();\n }\n }\n /**\n * If set to `true`, it disables the Button.\n */\n set disabled(disabled) {\n this.isDisabled = disabled;\n this.renderer.setProperty(this.element, 'disabled', disabled);\n }\n get disabled() {\n return this.isDisabled;\n }\n set isFocused(isFocused) {\n this.toggleClass('k-state-focused', isFocused);\n this._focused = isFocused;\n }\n get isFocused() {\n return this._focused;\n }\n get classButton() {\n return true;\n }\n get classPrimary() {\n return this.primary;\n }\n get isToggleable() {\n return this.toggleable;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get isClear() {\n return this.look === 'clear';\n }\n get roleSetter() {\n return this.role;\n }\n get classDisabled() {\n return this.isDisabled;\n }\n get classActive() {\n return this.selected;\n }\n get getDirection() {\n return this.direction;\n }\n /**\n * @hidden\n */\n onFocus() {\n this.isFocused = true;\n }\n /**\n * @hidden\n */\n onBlur() {\n this.isFocused = false;\n }\n ngOnInit() {\n const isSpan = this.element.tagName === SPAN_TAG_NAME;\n if (this.service) {\n this.buttonLookChangeSubscription = this.service.buttonLookChange\n .pipe(filter((look) => look !== 'default'))\n .subscribe((look) => this.look = look);\n }\n if (!this.element.hasAttribute('role') && this.togglable) {\n this.toggleAriaPressed(this.toggleable);\n }\n if (this.role) {\n this.setAttribute('role', this.role);\n }\n this.ngZone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element, 'click', this._onButtonClick.bind(this)));\n this.domEvents.push(this.renderer.listen(this.element, 'keydown', (event) => {\n if (isSpan && (event.keyCode === Keys.Space || event.keyCode === Keys.Enter)) {\n this.click.emit(event);\n this._onButtonClick();\n }\n }));\n });\n }\n ngOnChanges(change) {\n if (isChanged('togglable', change) || isChanged('toggleable', change)) {\n this.toggleAriaPressed(this.toggleable);\n }\n }\n ngAfterViewChecked() {\n this.setIconTextClasses();\n }\n ngOnDestroy() {\n this.imageNode = null;\n this.iconNode = null;\n this.renderer = null;\n this.localizationChangeSubscription.unsubscribe();\n if (this.service && this.buttonLookChangeSubscription) {\n this.buttonLookChangeSubscription.unsubscribe();\n }\n clearTimeout(this.deferTimeout);\n this.domEvents.forEach(unbindHandler => unbindHandler());\n }\n /**\n * Focuses the Button component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.focus();\n this.isFocused = true;\n }\n }\n /**\n * Blurs the Button component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.blur();\n this.isFocused = false;\n }\n }\n /**\n * @hidden\n */\n setAttribute(attribute, value) {\n this.renderer.setAttribute(this.element, attribute, value);\n }\n /**\n * @hidden\n */\n removeAttribute(attribute) {\n this.renderer.removeAttribute(this.element, attribute);\n }\n /**\n * @hidden\n *\n * Internal setter that triggers selectedChange\n */\n setSelected(value) {\n const changed = this.selected !== value;\n this.selected = value;\n this.setAttribute('aria-pressed', this.selected.toString());\n this.toggleClass('k-state-selected', this.selected);\n if (changed && hasObservers(this.selectedChange)) {\n this.ngZone.run(() => {\n this.selectedChange.emit(value);\n });\n }\n }\n toggleAriaPressed(shouldSet) {\n if (!isDocumentAvailable()) {\n return;\n }\n if (shouldSet) {\n this.setAttribute('aria-pressed', this.selected.toString());\n }\n else {\n this.removeAttribute('aria-pressed');\n }\n }\n hasText() {\n if (isDocumentAvailable()) {\n return String(this.element.textContent).trim().length > 0;\n }\n else {\n return false;\n }\n }\n addImgIcon(imageUrl) {\n let renderer = this.renderer;\n if (this.imageNode) {\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n }\n else if (isDocumentAvailable()) {\n this.imageNode = renderer.createElement('img');\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n renderer.setProperty(this.imageNode, 'className', 'k-image');\n renderer.setAttribute(this.imageNode, 'role', 'presentation');\n this.prependChild(this.imageNode);\n }\n }\n addIcon(classNames) {\n let renderer = this.renderer;\n if (this.iconNode) {\n renderer.setProperty(this.iconNode, 'className', classNames);\n }\n else if (isDocumentAvailable()) {\n this.iconNode = renderer.createElement('span');\n renderer.setProperty(this.iconNode, 'className', classNames);\n renderer.setAttribute(this.iconNode, 'role', 'presentation');\n this.prependChild(this.iconNode);\n }\n }\n prependChild(node) {\n this.defer(() => {\n if (this.renderer && node !== this.element.firstChild) {\n this.renderer.insertBefore(this.element, node, this.element.firstChild);\n }\n });\n }\n defer(callback) {\n this.ngZone.runOutsideAngular(() => {\n this.deferTimeout = setTimeout(callback, 0);\n });\n }\n iconSetter(icon, insertIcon) {\n if (icon) {\n insertIcon(icon);\n }\n this.setIconTextClasses();\n }\n removeImageNode() {\n if (this.imageNode && this.renderer.parentNode(this.imageNode)) {\n this.renderer.removeChild(this.element, this.imageNode);\n this.imageNode = null;\n }\n }\n removeIconNode() {\n if (this.iconNode && this.renderer.parentNode(this.iconNode)) {\n this.renderer.removeChild(this.element, this.iconNode);\n this.iconNode = null;\n }\n }\n updateIconNode() {\n if (!this.isIcon && !this.isIconClass) {\n this.removeIconNode();\n }\n }\n setIconTextClasses() {\n const hasIcon = this.isIcon || this.isIconClass || this.imageNode;\n const hasText = this.hasText();\n this.toggleClass('k-button-icon', hasIcon && !hasText);\n this.toggleClass('k-button-icontext', hasIcon && hasText);\n }\n toggleClass(className, add) {\n if (add) {\n this.renderer.addClass(this.element, className);\n }\n else {\n this.renderer.removeClass(this.element, className);\n }\n }\n _onButtonClick() {\n if (!this.disabled && this.service) {\n this.ngZone.run(() => {\n this.service.click(this);\n });\n }\n if (this.togglable && !this.service) {\n this.setSelected(!this.selected);\n }\n }\n};\nButtonDirective.ɵfac = function ButtonDirective_Factory(t) { return new (t || ButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(KendoButtonService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ButtonDirective, selectors: [[\"button\", \"kendoButton\", \"\"], [\"span\", \"kendoButton\", \"\"]], hostVars: 21, hostBindings: function ButtonDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function ButtonDirective_focus_HostBindingHandler() { return ctx.onFocus(); })(\"blur\", function ButtonDirective_blur_HostBindingHandler() { return ctx.onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleSetter)(\"aria-disabled\", ctx.classDisabled)(\"dir\", ctx.getDirection);\n ɵngcc0.ɵɵclassProp(\"k-button\", ctx.classButton)(\"k-primary\", ctx.classPrimary)(\"k-toggle-button\", ctx.isToggleable)(\"k-flat\", ctx.isFlat)(\"k-bare\", ctx.isBare)(\"k-outline\", ctx.isOutline)(\"k-button-clear\", ctx.isClear)(\"k-state-disabled\", ctx.classDisabled)(\"k-state-selected\", ctx.classActive);\n } }, inputs: { toggleable: \"toggleable\", primary: \"primary\", look: \"look\", role: \"role\", togglable: \"togglable\", selected: \"selected\", tabIndex: \"tabIndex\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\" }, outputs: { selectedChange: \"selectedChange\", click: \"click\" }, exportAs: [\"kendoButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ButtonDirective.prototype, \"toggleable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ButtonDirective.prototype, \"togglable\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ButtonDirective.prototype, \"primary\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ButtonDirective.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ButtonDirective.prototype, \"selected\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ButtonDirective.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ButtonDirective.prototype, \"icon\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ButtonDirective.prototype, \"iconClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ButtonDirective.prototype, \"imageUrl\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ButtonDirective.prototype, \"disabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ButtonDirective.prototype, \"role\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ButtonDirective.prototype, \"selectedChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ButtonDirective.prototype, \"click\", void 0);\n__decorate([\n HostBinding('class.k-button'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"classButton\", null);\n__decorate([\n HostBinding('class.k-primary'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"classPrimary\", null);\n__decorate([\n HostBinding('class.k-toggle-button'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"isToggleable\", null);\n__decorate([\n HostBinding('class.k-flat'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"isFlat\", null);\n__decorate([\n HostBinding('class.k-bare'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"isBare\", null);\n__decorate([\n HostBinding('class.k-outline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"isOutline\", null);\n__decorate([\n HostBinding('class.k-button-clear'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"isClear\", null);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"roleSetter\", null);\n__decorate([\n HostBinding('attr.aria-disabled'),\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"classDisabled\", null);\n__decorate([\n HostBinding('class.k-state-selected'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"classActive\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ButtonDirective.prototype, \"getDirection\", null);\n__decorate([\n HostListener('focus'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], ButtonDirective.prototype, \"onFocus\", null);\n__decorate([\n HostListener('blur'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], ButtonDirective.prototype, \"onBlur\", null);\nButtonDirective = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n KendoButtonService,\n LocalizationService,\n NgZone])\n], ButtonDirective);\n\n/* tslint:disable:no-null-keyword */\n/* tslint:disable:no-bitwise */\nconst resolvedPromise = Promise.resolve(null);\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst tick = (f) => (resolvedPromise.then(f));\n/**\n * @hidden\n */\nfunction isDocumentNode(container) {\n return container.nodeType === 9;\n}\n/**\n * @hidden\n */\nfunction closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n const matches = Element.prototype.matches ?\n (el, sel) => el.matches(sel)\n : (el, sel) => el.msMatchesSelector(sel);\n let node = element;\n while (node && !isDocumentNode(node)) {\n if (matches(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n}\n/**\n * @hidden\n */\nconst replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\\{\\\\s*${name}\\\\s*\\}`, 'g'), value);\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst tabindex = 'tabindex';\n/**\n * Represents the Kendo UI ButtonGroup component for Angular.\n */\nlet ButtonGroupComponent = class ButtonGroupComponent {\n constructor(service, localization, element) {\n this.service = service;\n this.element = element;\n /**\n * By default, the selection mode of the ButtonGroup is set to `multiple`.\n */\n this.selection = 'multiple';\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug styling_buttongroup %})).\n * The `look` property of the ButtonGroup takes precedence over the `look` property\n * of the individual buttons that are part of the group.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Fires every time keyboard navigation occurs.\n */\n this.navigate = new EventEmitter();\n this._tabIndex = 0;\n this.currentTabIndex = 0;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabIndex(value) {\n this._tabIndex = value;\n this.currentTabIndex = value;\n }\n get tabIndex() {\n return this._tabIndex;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get stretchedClass() {\n return !!this.width;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get getRole() {\n return this.isSelectionSingle() ? 'radiogroup' : 'group';\n }\n get dir() {\n return this.direction;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get wrapperWidth() {\n return this.width;\n }\n get wrapperTabIndex() {\n return this.disabled ? undefined : this.currentTabIndex;\n }\n /**\n * @hidden\n */\n keydown(event) {\n if (!this.disabled) {\n this.navigateFocus(event);\n }\n }\n /**\n * @hidden\n */\n onFocus() {\n this.currentTabIndex = -1;\n const focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const index = focusedIndex === -1 ? 0 : focusedIndex;\n this.focus(this.buttons.filter((_current, i) => {\n return i === index;\n }));\n }\n /**\n * @hidden\n */\n focusout(event) {\n if (event.relatedTarget && event.relatedTarget.parentNode !== this.element.nativeElement) {\n this.defocus(this.buttons.toArray());\n this.currentTabIndex = this.tabIndex;\n }\n }\n ngOnInit() {\n this.service.setButtonLook(this.look);\n this.subscription = this.service.buttonClicked$.subscribe((button) => {\n let newSelectionValue;\n if (this.isSelectionSingle()) {\n newSelectionValue = true;\n this.deactivate(this.buttons.filter(current => current !== button));\n }\n else {\n this.defocus(this.buttons.toArray());\n newSelectionValue = !button.selected;\n }\n if (button.togglable) {\n button.setSelected(newSelectionValue);\n }\n button.setAttribute(tabindex, \"0\");\n });\n }\n ngOnChanges(change) {\n if (isChanged('disabled', change)) {\n this.buttons.forEach((button) => {\n if (isPresent(this.disabled)) {\n button.disabled = this.disabled;\n }\n });\n }\n }\n ngAfterContentInit() {\n this.buttons.forEach((button) => {\n if (button.selected) {\n button.setAttribute(tabindex, \"0\");\n }\n else {\n button.setAttribute(tabindex, \"-1\");\n }\n });\n }\n ngAfterViewChecked() {\n if (this.buttons.length) {\n this.buttons.first.renderer.addClass(this.buttons.first.element, 'k-group-start');\n this.buttons.last.renderer.addClass(this.buttons.last.element, 'k-group-end');\n }\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n this.localizationChangeSubscription.unsubscribe();\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n navigateFocus(event) {\n let focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const firstIndex = 0;\n const lastIndex = this.buttons.length - 1;\n const eventArgs = new PreventableEvent();\n if (event.keyCode === Keys.ArrowRight && focusedIndex < lastIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex + 1;\n }));\n }\n }\n if (event.keyCode === Keys.ArrowLeft && focusedIndex > firstIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex - 1;\n }));\n }\n }\n }\n deactivate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(false);\n button.setAttribute(tabindex, \"-1\");\n });\n }\n activate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(true);\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n defocus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"-1\");\n });\n }\n focus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n verifySettings() {\n if (isDevMode()) {\n if (this.isSelectionSingle() && this.buttons.filter(button => button.selected).length > 1) {\n throw new Error('Having multiple selected buttons with single selection mode is not supported');\n }\n }\n }\n isSelectionSingle() {\n return this.selection === 'single';\n }\n};\nButtonGroupComponent.ɵfac = function ButtonGroupComponent_Factory(t) { return new (t || ButtonGroupComponent)(ɵngcc0.ɵɵdirectiveInject(KendoButtonService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nButtonGroupComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ButtonGroupComponent, selectors: [[\"kendo-buttongroup\"]], contentQueries: function ButtonGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonDirective, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttons = _t);\n } }, hostVars: 18, hostBindings: function ButtonGroupComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function ButtonGroupComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"focus\", function ButtonGroupComponent_focus_HostBindingHandler() { return ctx.onFocus(); })(\"focusout\", function ButtonGroupComponent_focusout_HostBindingHandler($event) { return ctx.focusout($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.getRole)(\"dir\", ctx.dir)(\"aria-disabled\", ctx.ariaDisabled)(\"tabindex\", ctx.wrapperTabIndex);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.wrapperWidth);\n ɵngcc0.ɵɵclassProp(\"k-button-group\", ctx.wrapperClass)(\"k-state-disabled\", ctx.disabledClass)(\"k-button-group-stretched\", ctx.stretchedClass)(\"k-button-group-flat\", ctx.isFlat)(\"k-button-group-bare\", ctx.isBare)(\"k-button-group-outline\", ctx.isOutline);\n } }, inputs: { selection: \"selection\", look: \"look\", tabIndex: \"tabIndex\", disabled: \"disabled\", width: \"width\" }, outputs: { navigate: \"navigate\" }, exportAs: [\"kendoButtonGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 1, vars: 0, template: function ButtonGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n__decorate([\n Input('disabled'),\n __metadata(\"design:type\", Boolean)\n], ButtonGroupComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input('selection'),\n __metadata(\"design:type\", String)\n], ButtonGroupComponent.prototype, \"selection\", void 0);\n__decorate([\n Input('width'),\n __metadata(\"design:type\", String)\n], ButtonGroupComponent.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ButtonGroupComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ButtonGroupComponent.prototype, \"tabIndex\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ButtonGroupComponent.prototype, \"navigate\", void 0);\n__decorate([\n ContentChildren(ButtonDirective),\n __metadata(\"design:type\", QueryList)\n], ButtonGroupComponent.prototype, \"buttons\", void 0);\n__decorate([\n HostBinding('class.k-button-group'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"wrapperClass\", null);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('class.k-button-group-stretched'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"stretchedClass\", null);\n__decorate([\n HostBinding('class.k-button-group-flat'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"isFlat\", null);\n__decorate([\n HostBinding('class.k-button-group-bare'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"isBare\", null);\n__decorate([\n HostBinding('class.k-button-group-outline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"isOutline\", null);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"getRole\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"dir\", null);\n__decorate([\n HostBinding('attr.aria-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"ariaDisabled\", null);\n__decorate([\n HostBinding('style.width'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"wrapperWidth\", null);\n__decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [])\n], ButtonGroupComponent.prototype, \"wrapperTabIndex\", null);\n__decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ButtonGroupComponent.prototype, \"keydown\", null);\n__decorate([\n HostListener('focus'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], ButtonGroupComponent.prototype, \"onFocus\", null);\n__decorate([\n HostListener('focusout', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ButtonGroupComponent.prototype, \"focusout\", null);\nButtonGroupComponent = __decorate([ __metadata(\"design:paramtypes\", [KendoButtonService,\n LocalizationService,\n ElementRef])\n], ButtonGroupComponent);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Button directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Button module\n * import { ButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonModule], // import Button module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet ButtonModule = class ButtonModule {\n};\nButtonModule.ɵfac = function ButtonModule_Factory(t) { return new (t || ButtonModule)(); };\nButtonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ButtonModule });\nButtonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ButtonGroupComponent`—The ButtonGroupComponent component class.\n */\nlet ButtonGroupModule = class ButtonGroupModule {\n};\nButtonGroupModule.ɵfac = function ButtonGroupModule_Factory(t) { return new (t || ButtonGroupModule)(); };\nButtonGroupModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ButtonGroupModule });\nButtonGroupModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, ButtonModule]] });\n\n/**\n * Used for rendering the list item content.\n *\n * To define the item template, nest a `` tag with the `kendoItemTemplate` directive inside the component tag.\n *\n * For the DropDownButton, use the `kendoDropDownButtonItemTemplate` directive.\n * For the SplitButton, use the `kendoSplitButtonItemTemplate` directive.\n *\n * The template context is set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [{\n * text: 'item1',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }, {\n * text: 'item2',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }]\n * }\n * ```\n *\n * For more examples, refer to the article on the [DropDownList templates]({% slug overview_ddl %}#templates).\n */\nlet ButtonItemTemplateDirective = class ButtonItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nButtonItemTemplateDirective.ɵfac = function ButtonItemTemplateDirective_Factory(t) { return new (t || ButtonItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nButtonItemTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ButtonItemTemplateDirective, selectors: [[\"\", \"kendoDropDownButtonItemTemplate\", \"\"], [\"\", \"kendoSplitButtonItemTemplate\", \"\"]] });\nButtonItemTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], ButtonItemTemplateDirective);\n\n/**\n * @hidden\n */\nlet ListComponent = class ListComponent {\n constructor() {\n this.onItemClick = new EventEmitter();\n this.onItemBlur = new EventEmitter();\n validatePackage(packageMetadata);\n }\n getText(dataItem) {\n if (dataItem) {\n return this.textField ? dataItem[this.textField] : dataItem.text || dataItem;\n }\n return undefined;\n }\n getIconClasses(dataItem) {\n const icon = dataItem.icon ? 'k-icon k-i-' + dataItem.icon : undefined;\n const classes = {};\n classes[icon || dataItem.iconClass] = true;\n return classes;\n }\n onClick(index) {\n this.onItemClick.emit(index);\n }\n onBlur() {\n this.onItemBlur.emit();\n }\n};\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(); };\nListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-button-list\"]], inputs: { data: \"data\", textField: \"textField\", itemTemplate: \"itemTemplate\" }, outputs: { onItemClick: \"onItemClick\", onItemBlur: \"onItemBlur\" }, decls: 2, vars: 1, consts: [[\"unselectable\", \"on\", \"role\", \"menu\", 1, \"k-list\", \"k-reset\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\"], [4, \"ngIf\"], [3, \"ngIf\"], [3, \"templateContext\"], [3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-image\", \"alt\", \"\", 3, \"src\", 4, \"ngIf\"], [3, \"ngClass\"], [\"alt\", \"\", 1, \"k-image\", 3, \"src\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_Template, 3, 7, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: function () { return [ɵngcc2.NgForOf, FocusableDirective, ɵngcc2.NgClass, ɵngcc2.NgIf, TemplateContextDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ListComponent.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", ButtonItemTemplateDirective)\n], ListComponent.prototype, \"itemTemplate\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ListComponent.prototype, \"onItemClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ListComponent.prototype, \"onItemBlur\", void 0);\nListComponent = __decorate([ __metadata(\"design:paramtypes\", [])\n], ListComponent);\n\n/**\n * @hidden\n */\nlet FocusService = class FocusService {\n /**\n * @hidden\n */\n constructor() {\n this.onFocus = new EventEmitter();\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n resetFocus() {\n this.focused = -1;\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n};\nFocusService.ɵfac = function FocusService_Factory(t) { return new (t || FocusService)(); };\nFocusService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: FocusService, factory: function (t) { return FocusService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet FocusableDirective = class FocusableDirective {\n constructor(focusService, elementRef, renderer) {\n this.focusService = focusService;\n this.renderer = renderer;\n this.element = elementRef.nativeElement;\n this.subscribeEvents();\n }\n ngOnInit() {\n if (this.index === this.focusService.focused) {\n this.renderer.addClass(this.element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(this.element, 'k-state-focused');\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.unsubscribeEvents();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.focusSubscription = this.focusService.onFocus.subscribe((index) => {\n if (this.index === index) {\n this.renderer.addClass(this.element, 'k-state-focused');\n this.element.focus();\n }\n else {\n this.renderer.removeClass(this.element, 'k-state-focused');\n }\n });\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.focusSubscription) {\n this.focusSubscription.unsubscribe();\n }\n }\n};\nFocusableDirective.ɵfac = function FocusableDirective_Factory(t) { return new (t || FocusableDirective)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nFocusableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FocusableDirective, selectors: [[\"\", \"kendoButtonFocusable\", \"\"]], inputs: { index: \"index\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], FocusableDirective.prototype, \"index\", void 0);\nFocusableDirective = __decorate([ __metadata(\"design:paramtypes\", [FocusService, ElementRef, Renderer2])\n], FocusableDirective);\n\n/**\n * @hidden\n */\nlet TemplateContextDirective = class TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n};\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], TemplateContextDirective.prototype, \"templateContext\", null);\nTemplateContextDirective = __decorate([ __metadata(\"design:paramtypes\", [ViewContainerRef])\n], TemplateContextDirective);\n\nconst EXPORTED_DIRECTIVES = [\n ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective\n];\n/**\n * @hidden\n */\nlet ListModule = class ListModule {\n};\nListModule.ɵfac = function ListModule_Factory(t) { return new (t || ListModule)(); };\nListModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ListModule });\nListModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\n/**\n * @hidden\n */\nvar KeyEvents;\n(function (KeyEvents) {\n KeyEvents[KeyEvents[\"keydown\"] = 0] = \"keydown\";\n KeyEvents[KeyEvents[\"keypress\"] = 1] = \"keypress\";\n KeyEvents[KeyEvents[\"keyup\"] = 2] = \"keyup\";\n})(KeyEvents || (KeyEvents = {}));\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"EnterPress\"] = 4] = \"EnterPress\";\n NavigationAction[NavigationAction[\"EnterUp\"] = 5] = \"EnterUp\";\n NavigationAction[NavigationAction[\"Tab\"] = 6] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 7] = \"Esc\";\n NavigationAction[NavigationAction[\"Navigate\"] = 8] = \"Navigate\";\n})(NavigationAction || (NavigationAction = {}));\n\n/* tslint:disable:deprecation */\n/**\n * @hidden\n */\nclass ListButton {\n constructor(focusService, navigationService, wrapperRef, _zone, localization, cdr) {\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapperRef = wrapperRef;\n this._zone = _zone;\n this.cdr = cdr;\n this._open = false;\n this._disabled = false;\n this._active = false;\n this._popupSettings = { animate: true, popupClass: '' };\n this.listId = guid();\n this._isFocused = false;\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapper = wrapperRef.nativeElement;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr'));\n this.subscribeEvents();\n }\n get popupClasses() {\n const popupClasses = ['k-list-container', 'k-reset', 'k-group'];\n if (this._popupSettings.popupClass) {\n popupClasses.push(this._popupSettings.popupClass);\n }\n return popupClasses.join(' ');\n }\n get openState() {\n return this._open;\n }\n set openState(open) {\n this._open = open;\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n if (this._disabled) {\n return;\n }\n this.openState = !this.openState;\n if (!this.openState) {\n this.focusService.focus(-1);\n }\n }\n /**\n * @hidden\n */\n onItemClick(index) {\n this.emitItemClickHandler(index);\n setTimeout(() => this.focusWrapper(), 1);\n }\n ngOnDestroy() {\n this.openState = false;\n this.unsubscribeEvents();\n clearTimeout(this.focusFirstTimeout);\n clearTimeout(this.blurTimeout);\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subscribeListItemFocusEvent();\n this.subscribeComponentBlurredEvent();\n this.subscribeNavigationEvents();\n }\n subscribeListItemFocusEvent() {\n this.focusSubscription = this.focusService.onFocus.subscribe(() => {\n this._isFocused = true;\n });\n }\n subscribeComponentBlurredEvent() {\n this._zone.runOutsideAngular(() => {\n this.tabSubscription = this.navigationService.tab.pipe(filter(() => this._isFocused)).subscribe(this.handleTab.bind(this));\n this.componentBlurredSubscription = fromEvent(document, 'click')\n .pipe(filter((event) => !this.wrapperContains(event.target)), filter(() => this._isFocused))\n .subscribe(() => this._zone.run(() => this.blurWrapper()));\n });\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate.subscribe(this.focusService.focus.bind(this.focusService));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(() => {\n this.enterHandler();\n this.focusWrapper();\n });\n this.openSubscription = this.navigationService.open.subscribe(() => {\n if (!this._open) {\n this.togglePopupVisibility();\n this.focusFirstItem();\n }\n else {\n this.focusWrapper();\n }\n });\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(() => this.focusWrapper());\n }\n enterHandler() { } // tslint:disable-line\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.unsubscribe(this.componentBlurredSubscription);\n this.unsubscribe(this.focusSubscription);\n this.unsubscribe(this.navigationSubscription);\n this.unsubscribe(this.enterPressSubscription);\n this.unsubscribe(this.enterUpSubscription);\n this.unsubscribe(this.openSubscription);\n this.unsubscribe(this.closeSubscription);\n this.unsubscribe(this.tabSubscription);\n }\n unsubscribe(subscription) {\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyPressHandler(event) {\n this.keyHandler(event, KeyEvents.keypress);\n }\n /**\n * @hidden\n */\n keyUpHandler(event) {\n this.keyHandler(event, KeyEvents.keyup);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this._disabled) {\n return;\n }\n let focused = this.focusService.focused || 0;\n const eventData = event;\n const action = this.navigationService.process({\n altKey: eventData.altKey,\n current: focused,\n keyCode: eventData.keyCode,\n keyEvent: keyEvent,\n max: this._data ? this._data.length - 1 : 0,\n min: 0\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n (action !== NavigationAction.Enter || (action === NavigationAction.Enter && this._open))) {\n if (event.keyCode === Keys.Space && action === NavigationAction.EnterUp) {\n this._open = false;\n }\n else {\n eventData.preventDefault();\n }\n }\n }\n emitItemClickHandler(index) {\n const dataItem = this._data[index];\n if (this._itemClick) {\n this._itemClick.emit(dataItem);\n }\n if (dataItem && dataItem.click && !dataItem.disabled) {\n dataItem.click(dataItem);\n }\n }\n focusFirstItem() {\n if (this._data && isPresent(this._data[0])) {\n this.focusFirstTimeout = setTimeout(() => this.focusService.focus(0), 1);\n }\n }\n focusWrapper() {\n if (this._open) {\n this.togglePopupVisibility();\n this.focusButton();\n }\n }\n wrapperContains(element) {\n return this.wrapper === element || this.wrapper.contains(element);\n }\n blurWrapper(emit = true) {\n if (this._open) {\n this.togglePopupVisibility();\n }\n this._isFocused = false;\n if (emit) {\n this._blur.emit();\n this.cdr.markForCheck();\n }\n }\n focusButton() {\n if (this.button) {\n this.button.nativeElement.focus();\n }\n }\n handleTab() {\n this.focusButton();\n this.blurWrapper(false);\n }\n}\nListButton.ɵfac = function ListButton_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nListButton.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ListButton });\n\n/**\n * @hidden\n */\nconst NAVIGATION_CONFIG = new InjectionToken('navigation.config');\n\n/**\n * @hidden\n */\nlet NavigationService = class NavigationService {\n constructor(config) {\n this.navigate = new EventEmitter();\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.enterpress = new EventEmitter();\n this.enterup = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.useLeftRightArrows = config.useLeftRightArrows;\n }\n process(args) {\n const keyCode = args.keyCode;\n const keyEvent = args.keyEvent;\n let index;\n let action = NavigationAction.Undefined;\n if (keyEvent === KeyEvents.keypress) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterPress;\n }\n }\n else if (keyEvent === KeyEvents.keyup) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterUp;\n }\n }\n else {\n if (args.altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (args.altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (this.isEnter(keyCode)) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp || (this.useLeftRightArrows && keyCode === Keys.ArrowLeft)) {\n const step = args.flipNavigation ? 1 : -1;\n const start = args.flipNavigation ? args.min : args.max;\n const end = args.flipNavigation ? args.max : args.min;\n index = this.next({\n current: args.current,\n start: start,\n end: end,\n step: step\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.ArrowDown || (this.useLeftRightArrows && keyCode === Keys.ArrowRight)) {\n const step = args.flipNavigation ? -1 : 1;\n const start = args.flipNavigation ? args.max : args.min;\n const end = args.flipNavigation ? args.min : args.max;\n index = this.next({\n current: args.current,\n start: start,\n end: end,\n step: step\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.Home) {\n index = args.min;\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.End) {\n index = args.max;\n action = NavigationAction.Navigate;\n }\n }\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(index);\n }\n return action;\n }\n isEnter(keyCode) {\n return keyCode === Keys.Enter || keyCode === Keys.Space;\n }\n next(args) {\n if (!isPresent(args.current)) {\n return args.start;\n }\n else {\n return args.current !== args.end ? args.current + args.step : args.end;\n }\n }\n};\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(NAVIGATION_CONFIG)); };\nNavigationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: function (t) { return NavigationService.ɵfac(t); } });\nNavigationService = __decorate([ __param(0, Inject(NAVIGATION_CONFIG)),\n __metadata(\"design:paramtypes\", [Object])\n], NavigationService);\n\nconst NAVIGATION_SETTINGS = {\n useLeftRightArrows: true\n};\nconst ɵ0 = NAVIGATION_SETTINGS;\nconst NAVIGATION_SETTINGS_PROVIDER = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0\n};\n/**\n * Represents the Kendo UI SplitButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * Paste\n * `\n * })\n *\n * class AppComponent {\n * public data: Array = [{\n * text: 'Keep Text Only',\n * icon: 'paste-plain-text',\n * click: () => { console.log('Keep Text Only click handler'); }\n * }, {\n * text: 'Paste as HTML',\n * icon: 'paste-as-html'\n * }, {\n * text: 'Paste Markdown',\n * icon: 'paste-markdown'\n * }, {\n * text: 'Set Default Paste'\n * }];\n *\n * public onSplitButtonClick(dataItem: any): void {\n * console.log('Paste');\n * }\n *\n * public onSplitButtonItemClick(dataItem: any): void {\n * if (dataItem) {\n * console.log(dataItem.text);\n * }\n * }\n * }\n * ```\n */\nlet SplitButtonComponent = class SplitButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n this.localization = localization;\n /**\n * Sets the text of the SplitButton.\n */\n this.text = '';\n /**\n * Defines an icon to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.icon = '';\n /**\n * Defines an icon with a custom CSS class to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.iconClass = '';\n /**\n * Defines the type attribute of the main button\n */\n this.type = 'button';\n /**\n * Defines the location of an image to be displayed next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.imageUrl = '';\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Specifies the name of the [font icon]({% slug icons %}#toc-list-of-font-icons) that will\n * be rendered for the button which opens the popup.\n */\n this.arrowButtonIcon = 'arrow-s';\n /**\n * Fires each time the user clicks the main button.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonClick(): void {\n * console.log('SplitButton click');\n * }\n * }\n * ```\n *\n */\n this.buttonClick = new EventEmitter();\n /**\n * Fires each time the user clicks on the drop-down list. The event data contains the data item bound to the clicked list item.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonItemClick(dataItem?: string): void {\n * if (dataItem) {\n * console.log(dataItem);\n * }\n * }\n * }\n * ```\n *\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the SplitButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the SplitButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n this.listId = guid();\n /**\n * @hidden\n */\n this.activeArrow = false;\n this.buttonText = '';\n this.lockFocus = false;\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * When set to `true`, disables a SplitButton item\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n set disabled(value) {\n if (this.isOpen) {\n this.toggle(false);\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Configures the popup of the SplitButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the data of the SplitButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? -1 : this.tabIndex;\n }\n set isFocused(value) {\n this._isFocused = value;\n }\n get isFocused() {\n return this._isFocused && !this._disabled;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get ariaLabel() {\n const localizationMsg = this.localization.get('splitButtonLabel') || '';\n return replaceMessagePlaceholder(localizationMsg, 'buttonText', this.buttonText);\n }\n /**\n * @hidden\n */\n onButtonFocus() {\n if (!this.isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n onArrowButtonClick() {\n this.lockFocus = true;\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n toggleButtonActiveState(enable) {\n this._active = enable;\n }\n /**\n * @hidden\n */\n toggleArrowButtonActiveState(enable) {\n this.activeArrow = enable;\n }\n /**\n * @hidden\n */\n onButtonClick() {\n this.lockFocus = true;\n this.buttonClick.emit();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen && !this.lockFocus) {\n this.blurWrapper();\n }\n this.lockFocus = false;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this._active = false;\n if (event.keyCode !== Keys.Space) {\n this.keyUpHandler(event);\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.updateButtonText();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('text')) {\n this.updateButtonText();\n }\n if (isChanged(\"popupSettings\", changes) && isPresent(this.popupRef)) {\n const popup = this.popupRef.popup.instance;\n const newSettings = changes.popupSettings.currentValue;\n popup.popupClass = newSettings.popupClass;\n popup.animate = newSettings.animate;\n popup.popupAlign = this.popupAlign;\n }\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n super.togglePopupVisibility();\n if (isDocumentAvailable() && this.lockFocus) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return (this.wrapper === element || this.wrapper.contains(element) || (this.popupRef && this.popupRef.popupElement.contains(element)));\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the SplitButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the SplitButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => this._toggle(open === undefined ? !this._open : open));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n enterHandler() {\n if (this.disabled) {\n return;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n else {\n this.buttonClick.emit();\n }\n }\n updateButtonText() {\n if (isDocumentAvailable()) {\n let innerText = this.wrapper.innerText\n .split('\\n')\n .join('')\n .trim();\n //setTimout is needed because of `Expression has changed after it was checked.` error;\n setTimeout(() => (this.buttonText = innerText), 0);\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.containerRef : appendTo;\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => (this.openState = false));\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n};\nSplitButtonComponent.ɵfac = function SplitButtonComponent_Factory(t) { return new (t || SplitButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSplitButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SplitButtonComponent, selectors: [[\"kendo-splitbutton\"]], contentQueries: function SplitButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function SplitButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c4, 7);\n ɵngcc0.ɵɵviewQuery(_c5, 7, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c6, 7);\n ɵngcc0.ɵɵviewQuery(_c7, 7, ViewContainerRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.arrowButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);\n } }, hostVars: 11, hostBindings: function SplitButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function SplitButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function SplitButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function SplitButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.isFocused)(\"k-flat\", ctx.isFlat)(\"k-outline\", ctx.isOutline)(\"k-split-button\", ctx.widgetClasses)(\"k-button-group\", ctx.widgetClasses);\n } }, inputs: { text: \"text\", icon: \"icon\", iconClass: \"iconClass\", type: \"type\", imageUrl: \"imageUrl\", look: \"look\", tabIndex: \"tabIndex\", arrowButtonIcon: \"arrowButtonIcon\", disabled: \"disabled\", popupSettings: \"popupSettings\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\", arrowButtonClass: \"arrowButtonClass\" }, outputs: { buttonClick: \"buttonClick\", itemClick: \"itemClick\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendoSplitButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c10, decls: 12, vars: 24, consts: function () { let i18n_8; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the SplitButton aria-label\n * @meaning kendo.splitbutton.splitButtonLabel\n */\n const MSG_EXTERNAL_109169670915733361$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"{$interpolation}\", { \"interpolation\": \"\\uFFFD0\\uFFFD\" });\n i18n_8 = MSG_EXTERNAL_109169670915733361$$DIST_FESM2015_INDEX_JS_9;\n }\n else {\n i18n_8 = $localize `:kendo.splitbutton.splitButtonLabel|The text for the SplitButton aria-label␟ee2d4273142c9694614c71170691ca688717ef31␟109169670915733361:${\"\\uFFFD0\\uFFFD\"}:INTERPOLATION:`;\n } return [[\"kendoSplitButtonLocalizedMessages\", \"\", 6, \"splitButtonLabel\"], [\"splitButtonLabel\", i18n_8], [\"kendoButton\", \"\", 3, \"type\", \"look\", \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"focus\", \"click\", \"blur\", \"mousedown\", \"mouseup\"], [\"button\", \"\"], [\"kendoButton\", \"\", \"type\", \"button\", 3, \"disabled\", \"icon\", \"look\", \"tabindex\", \"ngClass\", \"click\", \"mousedown\", \"mouseup\"], [\"arrowButton\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"]]; }, template: function SplitButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, 1);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"button\", 2, 3);\n ɵngcc0.ɵɵlistener(\"focus\", function SplitButtonComponent_Template_button_focus_2_listener() { return ctx.onButtonFocus(); })(\"click\", function SplitButtonComponent_Template_button_click_2_listener() { return ctx.onButtonClick(); })(\"blur\", function SplitButtonComponent_Template_button_blur_2_listener() { return ctx.onButtonBlur(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_2_listener() { return ctx.toggleButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_2_listener() { return ctx.toggleButtonActiveState(false); });\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵprojection(5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function SplitButtonComponent_Template_button_click_6_listener() { return ctx.onArrowButtonClick(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_6_listener() { return ctx.toggleArrowButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_6_listener() { return ctx.toggleArrowButtonActiveState(false); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, SplitButtonComponent_ng_template_8_Template, 1, 5, \"ng-template\", null, 6, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(10, null, 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵi18nExp(\"{buttonText} splitbutton\");\n ɵngcc0.ɵɵi18nApply(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"type\", ctx.type)(\"look\", ctx.look)(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId)(\"aria-label\", ctx.ariaLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \"\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.activeArrow);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"icon\", ctx.arrowButtonIcon)(\"look\", ctx.look)(\"tabindex\", -1)(\"ngClass\", ctx.arrowButtonClass);\n } }, directives: function () { return [LocalizedSplitButtonMessagesDirective, ButtonDirective, ɵngcc2.NgClass, ListComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"imageUrl\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], SplitButtonComponent.prototype, \"disabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], SplitButtonComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SplitButtonComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], SplitButtonComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SplitButtonComponent.prototype, \"buttonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SplitButtonComponent.prototype, \"arrowButtonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SplitButtonComponent.prototype, \"arrowButtonIcon\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"buttonClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"itemClick\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SplitButtonComponent.prototype, \"close\", void 0);\n__decorate([\n ContentChild(ButtonItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ButtonItemTemplateDirective)\n], SplitButtonComponent.prototype, \"itemTemplate\", void 0);\n__decorate([\n ViewChild('button', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SplitButtonComponent.prototype, \"button\", void 0);\n__decorate([\n ViewChild('arrowButton', { static: true, read: ElementRef }),\n __metadata(\"design:type\", ElementRef)\n], SplitButtonComponent.prototype, \"arrowButton\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], SplitButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], SplitButtonComponent.prototype, \"containerRef\", void 0);\n__decorate([\n HostBinding('class.k-state-focused'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], SplitButtonComponent.prototype, \"isFocused\", null);\n__decorate([\n HostBinding('class.k-flat'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SplitButtonComponent.prototype, \"isFlat\", null);\n__decorate([\n HostBinding('class.k-outline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SplitButtonComponent.prototype, \"isOutline\", null);\n__decorate([\n HostBinding('class.k-split-button'),\n HostBinding('class.k-button-group'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SplitButtonComponent.prototype, \"widgetClasses\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], SplitButtonComponent.prototype, \"dir\", null);\n__decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], SplitButtonComponent.prototype, \"keydown\", null);\n__decorate([\n HostListener('keypress', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], SplitButtonComponent.prototype, \"keypress\", null);\n__decorate([\n HostListener('keyup', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], SplitButtonComponent.prototype, \"keyup\", null);\nSplitButtonComponent = __decorate([ __metadata(\"design:paramtypes\", [FocusService,\n NavigationService,\n ElementRef,\n NgZone,\n PopupService,\n ElementRef,\n LocalizationService,\n ChangeDetectorRef])\n], SplitButtonComponent);\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { splitButtonLabel: \"splitButtonLabel\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"splitButtonLabel\", void 0);\n\nvar LocalizedSplitButtonMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedSplitButtonMessagesDirective = LocalizedSplitButtonMessagesDirective_1 = class LocalizedSplitButtonMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedSplitButtonMessagesDirective.ɵfac = function LocalizedSplitButtonMessagesDirective_Factory(t) { return new (t || LocalizedSplitButtonMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedSplitButtonMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedSplitButtonMessagesDirective, selectors: [[\"\", \"kendoSplitButtonLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedSplitButtonMessagesDirective = LocalizedSplitButtonMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedSplitButtonMessagesDirective);\n\nvar SplitButtonCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_buttons %}).\n */\nlet SplitButtonCustomMessagesComponent = SplitButtonCustomMessagesComponent_1 = class SplitButtonCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nSplitButtonCustomMessagesComponent.ɵfac = function SplitButtonCustomMessagesComponent_Factory(t) { return new (t || SplitButtonCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nSplitButtonCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SplitButtonCustomMessagesComponent, selectors: [[\"kendo-splitbutton-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => SplitButtonCustomMessagesComponent_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SplitButtonCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nSplitButtonCustomMessagesComponent = SplitButtonCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], SplitButtonCustomMessagesComponent);\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `SplitButtonComponent`—The SplitButtonComponent component class.\n */\nlet SplitButtonModule = class SplitButtonModule {\n};\nSplitButtonModule.ɵfac = function SplitButtonModule_Factory(t) { return new (t || SplitButtonModule)(); };\nSplitButtonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SplitButtonModule });\nSplitButtonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, PopupModule, ButtonModule, ListModule], ListModule] });\n\nconst NAVIGATION_SETTINGS$1 = {\n useLeftRightArrows: true\n};\nconst ɵ0$1 = NAVIGATION_SETTINGS$1;\nconst NAVIGATION_SETTINGS_PROVIDER$1 = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0$1\n};\n/**\n * Represents the Kendo UI DropDownButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * User Settings\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [{\n * text: 'My Profile'\n * }, {\n * text: 'Friend Requests'\n * }, {\n * text: 'Account Settings'\n * }, {\n * text: 'Support'\n * }, {\n * text: 'Log Out'\n * }];\n * }\n * ```\n */\nlet DropDownButtonComponent = class DropDownButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Defines the name of an existing icon in a Kendo UI theme.\n */\n this.icon = '';\n /**\n * Defines the list of CSS classes which are used for styling the Button with custom icons.\n */\n this.iconClass = '';\n /**\n * Defines a URL for styling the button with a custom image.\n */\n this.imageUrl = '';\n /**\n * Adds visual weight to the default button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Fires each time the user clicks on a drop-down list item. The event data contains the data item bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the DropDownButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the DropDownButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n this.listId = guid();\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * Configures the popup of the DropDownButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the disabled state of the DropDownButton.\n */\n set disabled(value) {\n if (value && this.openState) {\n this.openState = false;\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets or gets the data of the DropDownButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get focused() {\n return this._isFocused && !this._disabled;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this.keyUpHandler(event);\n this._active = false;\n }\n /**\n * @hidden\n */\n mousedown(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = true;\n }\n /**\n * @hidden\n */\n mouseup(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = false;\n }\n /**\n * @hidden\n */\n openPopup() {\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen) {\n this.blurWrapper();\n }\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the DropDownButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnChanges(changes) {\n if (isChanged(\"popupSettings\", changes) && isPresent(this.popupRef)) {\n const popup = this.popupRef.popup.instance;\n const newSettings = changes.popupSettings.currentValue;\n popup.popupClass = newSettings.popupClass;\n popup.animate = newSettings.animate;\n popup.popupAlign = this.popupAlign;\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => (this._toggle((open === undefined) ? !this._open : open)));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this._disabled && !this._isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return this.wrapper === element\n || this.wrapper.contains(element)\n || (this.popupRef && this.popupRef.popupElement.contains(element));\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate\n .subscribe(this.onArrowKeyNavigate.bind(this));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(this.onNavigationEnterUp.bind(this));\n this.openSubscription = this.navigationService.open.subscribe(this.onNavigationOpen.bind(this));\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this));\n }\n onNavigationEnterUp() {\n if (!this._disabled && !this.openState) {\n this._active = false;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n this.togglePopupVisibility();\n if (!this.openState && isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n onNavigationOpen() {\n if (!this._disabled && !this.openState) {\n this.togglePopupVisibility();\n }\n }\n onNavigationClose() {\n if (this.openState) {\n this.togglePopupVisibility();\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n _toggle(open) {\n if (this._open === open) {\n return;\n }\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.openState = false);\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n};\nDropDownButtonComponent.ɵfac = function DropDownButtonComponent_Factory(t) { return new (t || DropDownButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDropDownButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DropDownButtonComponent, selectors: [[\"kendo-dropdownbutton\"]], contentQueries: function DropDownButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function DropDownButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c4, 7);\n ɵngcc0.ɵɵviewQuery(_c11, 5);\n ɵngcc0.ɵɵviewQuery(_c6, 7);\n ɵngcc0.ɵɵviewQuery(_c7, 7, ViewContainerRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttonList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n } }, hostVars: 9, hostBindings: function DropDownButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function DropDownButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function DropDownButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function DropDownButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); })(\"mousedown\", function DropDownButtonComponent_mousedown_HostBindingHandler($event) { return ctx.mousedown($event); })(\"mouseup\", function DropDownButtonComponent_mouseup_HostBindingHandler($event) { return ctx.mouseup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focused)(\"k-flat\", ctx.isFlat)(\"k-outline\", ctx.isOutline)(\"k-dropdown-button\", ctx.widgetClasses);\n } }, inputs: { icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", primary: \"primary\", look: \"look\", tabIndex: \"tabIndex\", popupSettings: \"popupSettings\", disabled: \"disabled\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\" }, outputs: { itemClick: \"itemClick\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoDropDownButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c10, decls: 7, vars: 14, consts: [[\"kendoButton\", \"\", \"role\", \"menu\", \"type\", \"button\", 3, \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"look\", \"primary\", \"click\", \"focus\", \"blur\"], [\"button\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"], [\"buttonList\", \"\"]], template: function DropDownButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownButtonComponent_Template_button_click_0_listener() { return ctx.openPopup(); })(\"focus\", function DropDownButtonComponent_Template_button_focus_0_listener() { return ctx.handleFocus(); })(\"blur\", function DropDownButtonComponent_Template_button_blur_0_listener() { return ctx.onButtonBlur(); });\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, DropDownButtonComponent_ng_template_3_Template, 2, 5, \"ng-template\", null, 2, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(5, null, 3);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass)(\"look\", ctx.look)(\"primary\", ctx.primary);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId);\n } }, directives: [ButtonDirective, ɵngcc2.NgClass, ListComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownButtonComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownButtonComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownButtonComponent.prototype, \"imageUrl\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownButtonComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownButtonComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], DropDownButtonComponent.prototype, \"disabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownButtonComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownButtonComponent.prototype, \"primary\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownButtonComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DropDownButtonComponent.prototype, \"buttonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownButtonComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownButtonComponent.prototype, \"itemClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownButtonComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownButtonComponent.prototype, \"close\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownButtonComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownButtonComponent.prototype, \"onBlur\", void 0);\n__decorate([\n HostBinding('class.k-state-focused'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DropDownButtonComponent.prototype, \"focused\", null);\n__decorate([\n HostBinding('class.k-flat'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DropDownButtonComponent.prototype, \"isFlat\", null);\n__decorate([\n HostBinding('class.k-outline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DropDownButtonComponent.prototype, \"isOutline\", null);\n__decorate([\n HostBinding('class.k-dropdown-button'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DropDownButtonComponent.prototype, \"widgetClasses\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], DropDownButtonComponent.prototype, \"dir\", null);\n__decorate([\n ContentChild(ButtonItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ButtonItemTemplateDirective)\n], DropDownButtonComponent.prototype, \"itemTemplate\", void 0);\n__decorate([\n ViewChild('button', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], DropDownButtonComponent.prototype, \"button\", void 0);\n__decorate([\n ViewChild('buttonList', { static: false }),\n __metadata(\"design:type\", ListComponent)\n], DropDownButtonComponent.prototype, \"buttonList\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], DropDownButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], DropDownButtonComponent.prototype, \"container\", void 0);\n__decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], DropDownButtonComponent.prototype, \"keydown\", null);\n__decorate([\n HostListener('keypress', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], DropDownButtonComponent.prototype, \"keypress\", null);\n__decorate([\n HostListener('keyup', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], DropDownButtonComponent.prototype, \"keyup\", null);\n__decorate([\n HostListener('mousedown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], DropDownButtonComponent.prototype, \"mousedown\", null);\n__decorate([\n HostListener('mouseup', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], DropDownButtonComponent.prototype, \"mouseup\", null);\nDropDownButtonComponent = __decorate([ __metadata(\"design:paramtypes\", [FocusService,\n NavigationService,\n ElementRef,\n NgZone,\n PopupService,\n ElementRef,\n LocalizationService,\n ChangeDetectorRef])\n], DropDownButtonComponent);\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownButtonComponent`—The DropDownButtonComponent component class.\n */\nlet DropDownButtonModule = class DropDownButtonModule {\n};\nDropDownButtonModule.ɵfac = function DropDownButtonModule_Factory(t) { return new (t || DropDownButtonModule)(); };\nDropDownButtonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DropDownButtonModule });\nDropDownButtonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, PopupModule, ListModule, ButtonModule], ListModule] });\n\n/**\n * Displays a Chip that represents an input, attribute or an action.\n */\nlet ChipComponent = class ChipComponent {\n constructor(element, renderer, ngZone, localizationService) {\n this.element = element;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localizationService = localizationService;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `solid`\n * * `outline`\n * * `filled` (The `filled` option will be deprecated. To apply identical styling, use `solid` instead).\n * * `outlined` (The `outlined` option will be deprecated. To apply identical styling, use `outline` instead).\n */\n this.look = 'solid';\n /**\n * Specifies the selected state of the Chip.\n */\n this.selected = false;\n /**\n * Specifies if the Chip will be removable or not.\n * If the property is set to `true`, the Chip renders a remove icon.\n */\n this.removable = false;\n /**\n * Specifies the Chip type.\n *\n * The possible values are:\n * - `none` (default)\n * - `success`\n * - `error`\n * - `warning`\n * - `info`\n */\n this.type = 'none';\n /**\n * If set to `true`, the Chip will be disabled.\n */\n this.disabled = false;\n /**\n * Fires each time the user clicks the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n /**\n * Fires each time the user clicks the content of the Chip.\n */\n this.contentClick = new EventEmitter();\n this.tabIndex = 0;\n this.hostClass = true;\n this.focused = false;\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get ariaChecked() {\n return this.selected;\n }\n get outlineClass() {\n return this.look === 'outline' || this.look === 'outlined';\n }\n get solidClass() {\n return this.look === 'solid' || this.look === 'filled';\n }\n get hasIconClass() {\n return this.icon || this.iconClass ? true : false;\n }\n get disabledClass() {\n return this.disabled;\n }\n get selectedClass() {\n return this.selected;\n }\n get focusedClass() {\n return this.focused;\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n if (this.detachDomEvents) {\n this.detachDomEvents();\n }\n }\n ngAfterViewInit() {\n const chip = this.element.nativeElement;\n const typeClass = this.typeClass();\n if (this.type !== 'none') {\n this.renderer.addClass(chip, typeClass);\n }\n this.attachElementEventHandlers(chip);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n const classes = [];\n if (this.iconClass) {\n classes.push(`${this.iconClass}`);\n }\n if (this.icon) {\n classes.push(`k-icon k-i-${this.icon}`);\n }\n return classes;\n }\n /**\n * @hidden\n */\n get selectedIconClasses() {\n if (this.selectedIcon) {\n return `${this.selectedIcon}`;\n }\n return `k-icon k-i-check`;\n }\n /**\n * @hidden\n */\n get removeIconClasses() {\n if (this.removeIcon) {\n return `${this.removeIcon}`;\n }\n return `k-icon k-i-close-circle`;\n }\n /**\n * @hidden\n */\n typeClass() {\n return {\n 'none': '',\n 'success': 'k-chip-success',\n 'warning': 'k-chip-warning',\n 'error': 'k-chip-error',\n 'info': 'k-chip-info'\n }[this.type];\n }\n /**\n * Focuses the Chip component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.focus();\n }\n }\n /**\n * Blurs the Chip component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.blur();\n }\n }\n /**\n * @hidden\n */\n onRemoveClick(e) {\n if (this.removable) {\n this.remove.emit({ sender: this, originalEvent: e });\n }\n }\n attachElementEventHandlers(chip) {\n this.ngZone.runOutsideAngular(() => {\n const focusListener = this.renderer.listen(chip, 'focus', () => {\n this.renderer.addClass(chip, 'k-focus');\n });\n const blurListener = this.renderer.listen(chip, 'blur', () => {\n this.renderer.removeClass(chip, 'k-focus');\n });\n const contentClickListener = this.renderer.listen(chip, 'click', (e) => {\n const isRemoveClicked = closest(e.target, '.k-remove-icon');\n if (!isRemoveClicked) {\n this.ngZone.run(() => {\n this.contentClick.emit({ sender: this, originalEvent: e });\n });\n }\n });\n this.detachDomEvents = () => {\n focusListener();\n blurListener();\n contentClickListener();\n };\n });\n }\n};\nChipComponent.ɵfac = function ChipComponent_Factory(t) { return new (t || ChipComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChipComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ChipComponent, selectors: [[\"kendo-chip\"]], hostVars: 18, hostBindings: function ChipComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndex)(\"dir\", ctx.direction)(\"aria-checked\", ctx.ariaChecked)(\"aria-disabled\", ctx.disabledClass);\n ɵngcc0.ɵɵclassProp(\"k-chip\", ctx.hostClass)(\"k-chip-outline\", ctx.outlineClass)(\"k-chip-solid\", ctx.solidClass)(\"k-chip-has-icon\", ctx.hasIconClass)(\"k-disabled\", ctx.disabledClass)(\"k-selected\", ctx.selectedClass)(\"k-focus\", ctx.focusedClass);\n } }, inputs: { look: \"look\", selected: \"selected\", removable: \"removable\", type: \"type\", disabled: \"disabled\", label: \"label\", icon: \"icon\", iconClass: \"iconClass\", selectedIcon: \"selectedIcon\", removeIcon: \"removeIcon\" }, outputs: { remove: \"remove\", contentClick: \"contentClick\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ])], ngContentSelectors: _c10, decls: 7, vars: 5, consts: [[1, \"k-selected-icon-wrapper\"], [\"class\", \"k-selected-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-chip-icon\", 3, \"ngClass\", 4, \"ngIf\"], [1, \"k-chip-content\"], [\"class\", \"k-chip-label\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-remove-icon\", 3, \"click\", 4, \"ngIf\"], [1, \"k-selected-icon\", 3, \"ngClass\"], [1, \"k-chip-icon\", 3, \"ngClass\"], [1, \"k-chip-label\"], [1, \"k-remove-icon\", 3, \"click\"], [3, \"ngClass\"]], template: function ChipComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, ChipComponent_span_1_Template, 1, 1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ChipComponent_span_2_Template, 1, 1, \"span\", 2);\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, ChipComponent_span_4_Template, 2, 1, \"span\", 4);\n ɵngcc0.ɵɵtemplate(5, ChipComponent_ng_content_5_Template, 1, 0, \"ng-content\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ChipComponent_span_6_Template, 2, 1, \"span\", 6);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.selected);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon || ctx.iconClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.removable);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgClass], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"label\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ChipComponent.prototype, \"selected\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"selectedIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ChipComponent.prototype, \"removable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"removeIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ChipComponent.prototype, \"disabled\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChipComponent.prototype, \"remove\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChipComponent.prototype, \"contentClick\", void 0);\n__decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number)\n], ChipComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n HostBinding('attr.aria-checked'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"ariaChecked\", null);\n__decorate([\n HostBinding('class.k-chip'),\n __metadata(\"design:type\", Boolean)\n], ChipComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('class.k-chip-outline'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"outlineClass\", null);\n__decorate([\n HostBinding('class.k-chip-solid'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"solidClass\", null);\n__decorate([\n HostBinding('class.k-chip-has-icon'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"hasIconClass\", null);\n__decorate([\n HostBinding('attr.aria-disabled'),\n HostBinding('class.k-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('class.k-selected'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"selectedClass\", null);\n__decorate([\n HostBinding('class.k-focus'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipComponent.prototype, \"focusedClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], ChipComponent.prototype, \"direction\", void 0);\nChipComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n NgZone,\n LocalizationService])\n], ChipComponent);\n\nlet ChipListComponent = class ChipListComponent {\n constructor(localizationService, renderer) {\n this.localizationService = localizationService;\n this.renderer = renderer;\n this.hostClass = true;\n /**\n * Sets the selection mode of the ChipList.\n *\n * The available values are:\n * * `none` (default)\n * * `single`\n * * `multiple`\n */\n this.selection = 'none';\n /**\n * Fires each time when the ChipList selection is changed.\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks on the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.role = 'listbox';\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get single() {\n return this.selection === 'single';\n }\n get multiple() {\n return this.selection === 'multiple';\n }\n /**\n * @hidden\n */\n onClick($event) {\n const target = $event.target;\n const isRemoveClicked = closest(target, '.k-remove-icon');\n const clickedChip = closest(target, '.k-chip');\n const chip = this.chips.find((chip) => clickedChip === chip.element.nativeElement);\n if (isRemoveClicked && clickedChip) {\n const removeEventArgs = { sender: this, originalEvent: $event, removedChip: chip };\n this.remove.emit(removeEventArgs);\n }\n if (this.selection !== 'none' && clickedChip && !isRemoveClicked) {\n this.setSelection(chip);\n }\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngAfterContentInit() {\n this.chips.forEach((chip) => {\n this.renderer.setAttribute(chip.element.nativeElement, 'role', 'option');\n });\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n selectedChips() {\n return this.chips.reduce((acc, cur, idx) => { return cur.selected ? acc.concat(idx) : acc; }, []);\n }\n /**\n * Updates the selection on click of a Chip. Emits events.\n */\n setSelection(chip) {\n if (this.selection === 'single') {\n this.clearSelection(chip);\n }\n chip.selected = !chip.selected;\n this.selectedChange.emit(this.selectedChips());\n }\n clearSelection(chip) {\n this.chips.forEach((c) => {\n if (chip !== c) {\n c.selected = false;\n }\n });\n }\n};\nChipListComponent.ɵfac = function ChipListComponent_Factory(t) { return new (t || ChipListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nChipListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ChipListComponent, selectors: [[\"kendo-chip-list\"], [\"kendo-chiplist\"]], contentQueries: function ChipListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ChipComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.chips = _t);\n } }, hostVars: 8, hostBindings: function ChipListComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ChipListComponent_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-chip-list\", ctx.hostClass)(\"k-selection-single\", ctx.single)(\"k-selection-multiple\", ctx.multiple);\n } }, inputs: { selection: \"selection\" }, outputs: { selectedChange: \"selectedChange\", remove: \"remove\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ])], ngContentSelectors: _c10, decls: 1, vars: 0, template: function ChipListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-chip-list'),\n __metadata(\"design:type\", Boolean)\n], ChipListComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], ChipListComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ChipListComponent.prototype, \"selection\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChipListComponent.prototype, \"selectedChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ChipListComponent.prototype, \"remove\", void 0);\n__decorate([\n ContentChildren(ChipComponent),\n __metadata(\"design:type\", QueryList)\n], ChipListComponent.prototype, \"chips\", void 0);\n__decorate([\n HostBinding('class.k-selection-single'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipListComponent.prototype, \"single\", null);\n__decorate([\n HostBinding('class.k-selection-multiple'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ChipListComponent.prototype, \"multiple\", null);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String)\n], ChipListComponent.prototype, \"role\", void 0);\n__decorate([\n HostListener('click', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ChipListComponent.prototype, \"onClick\", null);\nChipListComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService, Renderer2])\n], ChipListComponent);\n\nconst exportedModules = [\n ChipComponent,\n ChipListComponent\n];\nconst declarations = [\n ...exportedModules\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Chip and ChipList components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Chip module\n * import { ChipModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ChipModule], // import Chip module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nlet ChipModule = class ChipModule {\n};\nChipModule.ɵfac = function ChipModule_Factory(t) { return new (t || ChipModule)(); };\nChipModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ChipModule });\nChipModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\n/**\n * @hidden\n */\nfunction getAnchorAlign(fabAlign, rtl) {\n let align = { horizontal: (rtl ? 'right' : 'left'), vertical: 'bottom' };\n if (fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n }\n if (fabAlign.vertical === 'bottom') {\n align.vertical = 'top';\n }\n if (fabAlign.vertical === 'bottom' && fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n align.vertical = 'top';\n }\n return align;\n}\n/**\n * @hidden\n */\nfunction getPopupAlign(fabAlign, rtl) {\n let align = { horizontal: (rtl ? 'right' : 'left'), vertical: 'top' };\n if (fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n }\n if (fabAlign.vertical === 'bottom') {\n align.vertical = 'bottom';\n }\n if (fabAlign.vertical === 'bottom' && fabAlign.horizontal === 'end') {\n align.horizontal = rtl ? 'left' : 'right';\n align.vertical = 'bottom';\n }\n return align;\n}\n\n/**\n * @hidden\n */\nfunction openAnimation(animationSettings) {\n const isBottom = animationSettings.align.vertical === 'bottom';\n const duration = animationSettings.duration;\n const gap = animationSettings.gap;\n return sequence([\n query(`.k-fab-item`, [\n style({ opacity: 0, transform: `translateY(${isBottom ? '8px' : '-8px'})` }),\n stagger(gap, [animate(`${duration}ms ease-in`, style({ opacity: '*', transform: 'translateY(0)' }))])\n ], { optional: true })\n ]);\n}\n/**\n * @hidden\n */\nfunction closeAnimation(animationSettings) {\n const isBottom = animationSettings.align.vertical === 'bottom';\n const duration = animationSettings.duration;\n const gap = animationSettings.gap;\n return sequence([\n query(`.k-fab-item`, [\n style({ opacity: '*', transform: 'translateY(0)' }),\n stagger(-gap, [animate(`${duration}ms ease-in`, style({ opacity: 0, transform: `translateY(${isBottom ? '8px' : '-8px'})` }))])\n ], { optional: true })\n ]);\n}\n\n/**\n * Represents a template that defines the content of the whole dial item.\n * To define the template, nest an `` tag\n * with the `kendoDialItemTemplate` directive inside the `` tag\n * ([see example]({% slug templates_floatingactionbutton %}#toc-dial-item-template)).\n */\nlet DialItemTemplateDirective = class DialItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nDialItemTemplateDirective.ɵfac = function DialItemTemplateDirective_Factory(t) { return new (t || DialItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDialItemTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DialItemTemplateDirective, selectors: [[\"\", \"kendoDialItemTemplate\", \"\"]] });\nDialItemTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], DialItemTemplateDirective);\n\n/**\n * Represents a template that defines the content of the FloatingActionButton.\n * To define the template, nest an `` tag\n * with the `kendoFloatingActionButtonTemplate` directive inside the `` tag\n * ([see example]({% slug templates_floatingactionbutton %}#toc-floatingactionbutton-template)).\n */\nlet FloatingActionButtonTemplateDirective = class FloatingActionButtonTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nFloatingActionButtonTemplateDirective.ɵfac = function FloatingActionButtonTemplateDirective_Factory(t) { return new (t || FloatingActionButtonTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFloatingActionButtonTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FloatingActionButtonTemplateDirective, selectors: [[\"\", \"kendoFloatingActionButtonTemplate\", \"\"]] });\nFloatingActionButtonTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], FloatingActionButtonTemplateDirective);\n\nconst NAVIGATION_SETTINGS$2 = {\n useLeftRightArrows: false\n};\nconst ɵ0$2 = NAVIGATION_SETTINGS$2;\nconst NAVIGATION_SETTINGS_PROVIDER$2 = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0$2\n};\nconst SIZE_CLASSES = {\n small: 'k-fab-sm',\n medium: 'k-fab-md',\n large: 'k-fab-lg'\n};\nconst SHAPE_CLASSES = {\n pill: 'k-fab-pill',\n circle: 'k-fab-circle',\n rectangle: 'k-fab-rectangle',\n square: 'k-fab-square',\n rounded: 'k-fab-rounded'\n};\nconst DEFAULT_DURATION = 180;\nconst DEFAULT_ITEM_GAP = 90;\nconst DEFAULT_OFFSET = '16px';\n/**\n *\n * Represents the [Kendo UI FloatingActionButton component for Angular]({% slug overview_floatingactionbutton %}).\n * Used to specify the primary or the most common action in an application.\n *\n */\nlet FloatingActionButtonComponent = class FloatingActionButtonComponent {\n constructor(renderer, element, focusService, navigationService, ngZone, popupService, builder, localizationService) {\n this.renderer = renderer;\n this.element = element;\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.ngZone = ngZone;\n this.popupService = popupService;\n this.builder = builder;\n this.localizationService = localizationService;\n /**\n * Specifies the positionMode of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-positionMode)).\n *\n * * The possible values are:\n * * `absolute`—Positions the FloatingActionButton absolutely to its first positioned parent element.\n * * `fixed` (Default)—Positions the FloatingActionButton relative to the viewport. It always stays in the same place even if the page is scrolled.\n */\n this.positionMode = 'fixed';\n /**\n * Specifies the animation settings of the FloatingActionButton dial items.\n * ([see example]({% slug dialitems_floatingactionbutton %}#toc-animation)).\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`—Applies the default [`DialItemAnimation`]({% slug api_buttons_dialitemanimation %}) settings.\n * * `false`\n * * `DialItemAnimation`\n * * `duration`—Specifies the animation duration in milliseconds for each dial item. Defaults to `180ms`.\n * * `gap`—Specifies the animation duration gap in milliseconds after each dial item is animated. Defaults to `90ms`.\n */\n this.dialItemAnimation = true;\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the FloatingActionButton.\n */\n this.tabIndex = 0;\n /**\n * Specifies the collection of the dial items that will be rendered in the FloatingActionButton popup.\n */\n this.dialItems = [];\n /**\n * Fires each time the FloatingActionButton gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the FloatingActionButton gets focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time a dial item is clicked.\n */\n this.dialItemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed\n * ([more information and example]({% slug overview_floatingactionbutton %}#toc-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open\n * ([more information and example]({% slug overview_floatingactionbutton %}#toc-events)).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.id = `k-${guid()}`;\n this._themeColor = 'primary';\n this._size = 'medium';\n this._shape = 'pill';\n this._disabled = false;\n this._align = { horizontal: 'end', vertical: 'bottom' };\n this._offset = { x: DEFAULT_OFFSET, y: DEFAULT_OFFSET };\n this.subscriptions = new Subscription();\n this.rtl = false;\n this.animationEnd = new EventEmitter();\n validatePackage(packageMetadata);\n this.subscribeNavigationEvents();\n this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n }));\n }\n get fixedClass() {\n return this.positionMode === 'fixed';\n }\n get absoluteClass() {\n return this.positionMode === 'absolute';\n }\n /**\n * Specifies the theme color of the FloatingActionButton\n * ([see example]({% slug appearance_floatingactionbutton %}#toc-themeColor)).\n * The theme color will be applied as background color of the component.\n *\n * The possible values are:\n * * `primary` (Default)—Applies coloring based on the `primary` theme color.\n * * `secondary`—Applies coloring based on the `secondary` theme color.\n * * `tertiary`— Applies coloring based on the `tertiary` theme color.\n * * `inherit`— Applies inherited coloring value.\n * * `info`—Applies coloring based on the `info` theme color.\n * * `success`— Applies coloring based on the `success` theme color.\n * * `warning`— Applies coloring based on the `warning` theme color.\n * * `error`— Applies coloring based on the `error` theme color.\n * * `dark`— Applies coloring based on the `dark` theme color.\n * * `light`— Applies coloring based on the `light` theme color.\n * * `inverse`— Applies coloring based on the `inverse` theme color.\n *\n */\n set themeColor(themeColor) {\n this.handleClasses(themeColor, 'themeColor');\n this._themeColor = themeColor;\n }\n get themeColor() {\n return this._themeColor;\n }\n /**\n * Specifies the size of the FloatingActionButton\n * ([see example]({% slug appearance_floatingactionbutton %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n *\n */\n set size(size) {\n this.handleClasses(size, 'size');\n this._size = size;\n }\n get size() {\n return this._size;\n }\n /**\n * Specifies the shape of the FloatingActionButton\n * ([see example]({% slug appearance_floatingactionbutton %}#toc-shape)).\n *\n * The possible values are:\n * * `pill` (Default)—Applies border radius equal to half of the height of the FloatingActionButton.\n * * `circle`—Applies circle shape on the FloatingActionButton.\n * * `rectangle`—Applies rectangular shape on the FloatingActionButton.\n * * `rounded`—Applies rounded shape on the FloatingActionButton.\n * * `square`—Applies square shape on the FloatingActionButton.\n *\n */\n set shape(shape) {\n this.handleClasses(shape, 'shape');\n this._shape = shape;\n }\n get shape() {\n return this._shape;\n }\n /**\n * Specifies whether the FloatingActionButton is disabled.\n */\n set disabled(disabled) {\n this._disabled = disabled;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Specifies the horizontal and vertical alignment of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-align)).\n *\n * The possible values are:\n * * `{ horizontal: 'start'|'center'|'end', vertical: 'top'|'middle'|'bottom' }`\n *\n * The default value is:\n * * `{ horizontal: 'end', vertical: 'bottom' }`\n *\n */\n set align(align) {\n this._align = Object.assign(this._align, align);\n }\n get align() {\n return this._align;\n }\n /**\n * Specifies the horizontal and vertical offset position of the FloatingActionButton\n * ([see example]({% slug positioning_floatingactionbutton %}#toc-offset)).\n *\n * * The default value is:\n * * `{ x: '16px', y: '16px' }`\n */\n set offset(offset) {\n this._offset = Object.assign(this._offset, offset);\n this.offsetStyles();\n }\n get offset() {\n return this._offset;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n ngAfterViewInit() {\n this.applyClasses();\n this.offsetStyles();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * Indicates whether the FloatingActionButton is currently open.\n */\n get isOpen() { return isPresent(this.popupRef); }\n /**\n * Focuses the FloatingActionButton.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the FloatingActionButton.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n }\n }\n /**\n * Toggles the visibility of the FloatingActionButton dial items popup.\n *\n * If you use the `toggleDial` method to open or close the dial items,\n * the `open` and `close` events do not fire ([more information and examples]({% slug openstate_floatingactionbutton %}#toc-events)).\n *\n * @param open - The state of dial items popup.\n */\n toggleDial(open) {\n if (this.disabled || !this.hasDialItems) {\n return;\n }\n const shouldOpen = isPresent(open) ? open : !this.isOpen;\n if (this.disabled || shouldOpen === this.isOpen) {\n return;\n }\n shouldOpen ? setTimeout(() => this.openDial()) : this.closeDial();\n }\n /**\n * @hidden\n */\n get role() {\n return (this.dialItems && this.dialItems.length) ? 'menubutton' : 'button';\n }\n /**\n * @hidden\n */\n get ariaExpanded() {\n return isPresent(this.isOpen);\n }\n /**\n * @hidden\n */\n get ariaHasPopup() {\n return isPresent(this.isOpen);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n const classes = [];\n if (this.iconClass) {\n classes.push(`${this.iconClass}`);\n }\n if (this.icon) {\n classes.push(`k-fab-icon k-icon k-i-${this.icon}`);\n }\n return classes;\n }\n /**\n * @hidden\n */\n clickHandler() {\n if (this.disabled || !this.hasDialItems) {\n return;\n }\n this.ngZone.run(() => {\n const shouldOpen = !this.isOpen;\n this.toggleDialWithEvents(shouldOpen);\n });\n }\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this.disabled) {\n return;\n }\n const focused = this.focusService.focused || 0;\n const keyCode = event.keyCode;\n const action = this.navigationService.process({\n altKey: event.altKey,\n current: focused,\n keyCode,\n keyEvent: keyEvent,\n max: this.dialItems ? this.dialItems.length - 1 : 0,\n min: 0,\n flipNavigation: this.align.vertical === 'bottom'\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab) {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n */\n onItemClick(event) {\n const item = closest(event.target, '.k-fab-item');\n if (!item) {\n return;\n }\n const index = item.getAttribute('data-fab-item-index');\n this.emitItemClick(index);\n }\n /**\n * @hidden\n */\n focusHandler() {\n if (!this.disabled) {\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n blurHandler() {\n this.onBlur.emit();\n this.toggleDialWithEvents(false);\n }\n handleClasses(inputValue, input) {\n if (isPresent(this.button) && (this[input] !== inputValue)) {\n const button = this.button.nativeElement;\n const classesToRemove = {\n themeColor: `k-fab-${this.themeColor}`,\n size: SIZE_CLASSES[this.size],\n shape: SHAPE_CLASSES[this.shape]\n };\n const classesToAdd = {\n themeColor: `k-fab-${inputValue}`,\n size: SIZE_CLASSES[inputValue],\n shape: SHAPE_CLASSES[inputValue]\n };\n this.renderer.removeClass(button, classesToRemove[input]);\n this.renderer.addClass(button, classesToAdd[input]);\n }\n }\n onEnterPressed() {\n const index = this.focusService.focused;\n this.emitItemClick(index);\n }\n emitItemClick(index) {\n const item = this.dialItems[index];\n if (item && !item.disabled) {\n const clickEventArgs = { item: item, index: index };\n this.dialItemClick.emit(clickEventArgs);\n this.toggleDialWithEvents(false);\n }\n }\n subscribeNavigationEvents() {\n this.subscriptions.add(this.navigationService.navigate.subscribe(this.onArrowKeyNavigate.bind(this)));\n this.subscriptions.add(this.navigationService.enter.subscribe(this.onNavigationEnterPress.bind(this)));\n this.subscriptions.add(merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this)));\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n onNavigationEnterPress() {\n this.ngZone.run(() => {\n if (this.isOpen) {\n let focusedIndex = this.focusService.focused;\n const focusedItem = this.dialItems[focusedIndex];\n if (focusedItem && focusedItem.disabled) {\n return;\n }\n if (isPresent(focusedIndex) && focusedIndex !== -1) {\n this.onEnterPressed();\n return;\n }\n }\n if (!this.isOpen && isDocumentAvailable()) {\n this.toggleDialWithEvents(true);\n this.button.nativeElement.focus();\n }\n });\n }\n onNavigationClose() {\n if (this.isOpen) {\n this.ngZone.run(() => {\n this.toggleDialWithEvents(false);\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n });\n }\n }\n alignClass() {\n return `k-pos-${this.align.vertical}-${this.align.horizontal}`;\n }\n applyClasses() {\n const hostElement = this.element.nativeElement;\n const button = this.button.nativeElement;\n this.renderer.addClass(button, SHAPE_CLASSES[this.shape]);\n this.renderer.addClass(button, `k-fab-${this.themeColor}`);\n this.renderer.addClass(button, SIZE_CLASSES[this.size]);\n this.renderer.addClass(hostElement, this.alignClass());\n }\n toggleDialWithEvents(open) {\n if (open === this.isOpen) {\n return;\n }\n const event = new PreventableEvent();\n open ? this.open.emit(event) : this.close.emit(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n open ? this.openDial() : this.closeDial();\n }\n openPopup() {\n if (this.isOpen) {\n return;\n }\n const isIconFab = this.icon && !this.text;\n const rtl = this.rtl;\n const align = this.align;\n this.popupRef = this.popupService.open({\n anchor: this.element.nativeElement,\n animate: false,\n content: this.popupTemplate,\n anchorAlign: getAnchorAlign(align, rtl),\n popupAlign: getPopupAlign(align, rtl),\n popupClass: 'k-fab-popup k-popup-transparent'\n });\n const popupElement = this.popupRef.popupElement;\n this.renderer.setStyle(popupElement, 'box-shadow', 'none');\n if (isIconFab) {\n this.subscriptions.add(this.popupRef.popupOpen.subscribe(() => this.positionPopup()));\n }\n this.ngZone.runOutsideAngular(() => {\n this.popupMouseDownListener = this.renderer.listen(popupElement, 'mousedown', (event) => {\n event.preventDefault();\n });\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.toggleDialWithEvents(false));\n }\n closePopup() {\n if (this.isOpen) {\n if (this.popupMouseDownListener) {\n this.popupMouseDownListener();\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n openDial() {\n this.openPopup();\n this.focusService.focus(0);\n if (this.dialItemAnimation && this.isValidAnimation()) {\n this.playAnimation(true);\n }\n }\n closeDial() {\n if (this.dialItemAnimation && this.isValidAnimation()) {\n this.playAnimation(false);\n this.animationEnd.pipe(take(1)).subscribe(() => this.closePopup());\n }\n else {\n this.closePopup();\n }\n }\n isValidAnimation() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean') {\n return animation.duration !== 0;\n }\n return true;\n }\n positionPopup() {\n if (this.dialItemTemplate) {\n return;\n }\n const fab = this.element.nativeElement;\n const fabWidth = fab.getBoundingClientRect().width;\n const popupEl = this.popupRef.popupElement;\n const icon = popupEl.querySelector('.k-fab-item-icon');\n if (!icon) {\n return;\n }\n const iconWidth = icon.getBoundingClientRect().width;\n const left = (fabWidth / 2) - (iconWidth / 2);\n const popupLeft = popupEl.getBoundingClientRect().left;\n const isEndAlign = this.align.horizontal === 'end';\n const leftValue = isEndAlign ? (popupLeft - left) : (left + popupLeft);\n const rtlLeftValue = isEndAlign ? (left + popupLeft) : (popupLeft - left);\n popupEl.style.left = this.rtl ? `${rtlLeftValue}px` : `${leftValue}px`;\n }\n offsetStyles() {\n const hostElement = this.element.nativeElement;\n this.renderer.setStyle(hostElement, this.horizontalPosition, this.horizontalOffset);\n this.renderer.setStyle(hostElement, this.verticalPosition, this.verticalOffset);\n }\n get hasDialItems() {\n return isPresent(this.dialItems) && this.dialItems.length !== 0;\n }\n /**\n * Gets the CSS prop name of the selected vertical position (`top`/`bottom`);\n */\n get verticalPosition() {\n return {\n top: 'top',\n middle: 'top',\n bottom: 'bottom'\n }[this.align.vertical];\n }\n /**\n * Gets the offset according to the selected vertical position.\n */\n get verticalOffset() {\n if (this.align.vertical === 'middle') {\n return this.offset.y === DEFAULT_OFFSET ? '50%' : `calc(50% + ${this.offset.y})`;\n }\n return this.offset.y;\n }\n /**\n * Gets the CSS prop name of the selected horizontal position (`left`/`right`);\n */\n get horizontalPosition() {\n const { horizontal } = this.align;\n return {\n end: this.rtl ? 'left' : 'right',\n center: 'left',\n start: this.rtl ? 'right' : 'left'\n }[horizontal];\n }\n /**\n * Gets the offset according to the selected horizontal position.\n */\n get horizontalOffset() {\n if (this.align.horizontal === 'center') {\n return this.offset.x === DEFAULT_OFFSET ? '50%' : `calc(50% + ${this.offset.x})`;\n }\n return this.offset.x;\n }\n playerFor(element, animation) {\n const factory = this.builder.build(animation);\n return factory.create(element);\n }\n playAnimation(open) {\n const durationSettings = this.durationSettings();\n const animationSettings = {\n duration: durationSettings.duration,\n gap: durationSettings.gap,\n align: this.align\n };\n const animation = open ? openAnimation(animationSettings) : closeAnimation(animationSettings);\n let player = this.playerFor(this.popupRef.popupElement, animation);\n player.play();\n player.onDone(() => {\n if (player) {\n this.animationEnd.emit();\n player.destroy();\n player = null;\n }\n });\n }\n durationSettings() {\n return {\n duration: this.animationDuration(),\n gap: this.animationGap()\n };\n }\n animationGap() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean' && isPresent(animation.gap)) {\n return animation.gap;\n }\n return DEFAULT_ITEM_GAP;\n }\n animationDuration() {\n const animation = this.dialItemAnimation;\n if (typeof animation !== 'boolean' && isPresent(animation.duration)) {\n return animation.duration;\n }\n return DEFAULT_DURATION;\n }\n};\nFloatingActionButtonComponent.ɵfac = function FloatingActionButtonComponent_Factory(t) { return new (t || FloatingActionButtonComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.AnimationBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFloatingActionButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FloatingActionButtonComponent, selectors: [[\"kendo-floatingactionbutton\"]], contentQueries: function FloatingActionButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DialItemTemplateDirective, 7);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FloatingActionButtonTemplateDirective, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialItemTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fabTemplate = _t.first);\n } }, viewQuery: function FloatingActionButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c4, 7);\n ɵngcc0.ɵɵviewQuery(_c6, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n } }, hostVars: 5, hostBindings: function FloatingActionButtonComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-pos-fixed\", ctx.fixedClass)(\"k-pos-absolute\", ctx.absoluteClass);\n } }, inputs: { positionMode: \"positionMode\", dialItemAnimation: \"dialItemAnimation\", tabIndex: \"tabIndex\", dialItems: \"dialItems\", themeColor: \"themeColor\", size: \"size\", shape: \"shape\", disabled: \"disabled\", align: \"align\", offset: \"offset\", icon: \"icon\", iconClass: \"iconClass\", buttonClass: \"buttonClass\", dialClass: \"dialClass\", text: \"text\" }, outputs: { onBlur: \"blur\", onFocus: \"focus\", dialItemClick: \"dialItemClick\", open: \"open\", close: \"close\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$2,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatingactionbutton'\n }\n ])], decls: 6, vars: 19, consts: [[\"type\", \"button\", 3, \"tabIndex\", \"ngClass\", \"disabled\", \"kendoEventsOutsideAngular\", \"scope\", \"focus\", \"blur\"], [\"button\", \"\"], [4, \"ngIf\"], [\"popupTemplate\", \"\"], [3, \"ngTemplateOutlet\"], [3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-fab-text\", 4, \"ngIf\"], [3, \"ngClass\"], [1, \"k-fab-text\"], [\"kendoDialList\", \"\", 3, \"ngClass\", \"dialItems\", \"dialItemTemplate\", \"align\", \"click\"]], template: function FloatingActionButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"focus\", function FloatingActionButtonComponent_Template_button_focus_0_listener() { return ctx.focusHandler(); })(\"blur\", function FloatingActionButtonComponent_Template_button_blur_0_listener() { return ctx.blurHandler(); });\n ɵngcc0.ɵɵtemplate(2, FloatingActionButtonComponent_2_Template, 1, 1, null, 2);\n ɵngcc0.ɵɵtemplate(3, FloatingActionButtonComponent_ng_container_3_Template, 3, 2, \"ng-container\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, FloatingActionButtonComponent_ng_template_4_Template, 1, 5, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-fab\", true)(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵproperty(\"tabIndex\", ctx.componentTabIndex)(\"ngClass\", ctx.buttonClass)(\"disabled\", ctx.disabled)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(16, _c12, ctx.keyDownHandler, ctx.clickHandler))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"role\", ctx.role)(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.ariaExpanded)(\"aria-haspopup\", ctx.ariaHasPopup);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.fabTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.fabTemplate);\n } }, directives: function () { return [ɵngcc2.NgClass, ɵngcc5.EventsOutsideAngularDirective, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet, DialListComponent]; }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-pos-fixed'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FloatingActionButtonComponent.prototype, \"fixedClass\", null);\n__decorate([\n HostBinding('class.k-pos-absolute'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FloatingActionButtonComponent.prototype, \"absoluteClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], FloatingActionButtonComponent.prototype, \"direction\", void 0);\n__decorate([\n ViewChild('button', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], FloatingActionButtonComponent.prototype, \"button\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], FloatingActionButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ContentChild(DialItemTemplateDirective, { static: true }),\n __metadata(\"design:type\", DialItemTemplateDirective)\n], FloatingActionButtonComponent.prototype, \"dialItemTemplate\", void 0);\n__decorate([\n ContentChild(FloatingActionButtonTemplateDirective, { static: true }),\n __metadata(\"design:type\", FloatingActionButtonTemplateDirective)\n], FloatingActionButtonComponent.prototype, \"fabTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], FloatingActionButtonComponent.prototype, \"themeColor\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], FloatingActionButtonComponent.prototype, \"size\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], FloatingActionButtonComponent.prototype, \"shape\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], FloatingActionButtonComponent.prototype, \"disabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], FloatingActionButtonComponent.prototype, \"align\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], FloatingActionButtonComponent.prototype, \"offset\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingActionButtonComponent.prototype, \"positionMode\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingActionButtonComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingActionButtonComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FloatingActionButtonComponent.prototype, \"buttonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FloatingActionButtonComponent.prototype, \"dialClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingActionButtonComponent.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FloatingActionButtonComponent.prototype, \"dialItemAnimation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], FloatingActionButtonComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], FloatingActionButtonComponent.prototype, \"dialItems\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], FloatingActionButtonComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], FloatingActionButtonComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('dialItemClick'),\n __metadata(\"design:type\", EventEmitter)\n], FloatingActionButtonComponent.prototype, \"dialItemClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FloatingActionButtonComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FloatingActionButtonComponent.prototype, \"close\", void 0);\nFloatingActionButtonComponent = __decorate([ __metadata(\"design:paramtypes\", [Renderer2,\n ElementRef,\n FocusService,\n NavigationService,\n NgZone,\n PopupService,\n AnimationBuilder,\n LocalizationService])\n], FloatingActionButtonComponent);\n\n/**\n * @hidden\n */\nlet DialListComponent = class DialListComponent {\n constructor(focusService, cdr) {\n this.focusService = focusService;\n this.cdr = cdr;\n this.hostClass = true;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.focusService.onFocus.subscribe(() => this.cdr.detectChanges()));\n }\n get bottomClass() {\n return this.align.vertical === 'top' || this.align.vertical === 'middle';\n }\n get topClass() {\n return this.align.vertical === 'bottom';\n }\n isFocused(index) {\n return this.focusService.isFocused(index);\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n};\nDialListComponent.ɵfac = function DialListComponent_Factory(t) { return new (t || DialListComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDialListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DialListComponent, selectors: [[\"\", \"kendoDialList\", \"\"]], hostVars: 6, hostBindings: function DialListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-fab-items\", ctx.hostClass)(\"k-fab-items-bottom\", ctx.bottomClass)(\"k-fab-items-top\", ctx.topClass);\n } }, inputs: { dialItems: \"dialItems\", dialItemTemplate: \"dialItemTemplate\", align: \"align\" }, attrs: _c13, decls: 1, vars: 1, consts: [[4, \"ngFor\", \"ngForOf\"], [\"kendoButtonFocusable\", \"\", \"kendoDialItem\", \"\", 3, \"item\", \"index\", \"dialItemTemplate\", \"isFocused\", \"ngClass\", \"ngStyle\", \"align\"]], template: function DialListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialListComponent_ng_container_0_Template, 2, 7, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.dialItems);\n } }, directives: function () { return [ɵngcc2.NgForOf, FocusableDirective, DialItemComponent, ɵngcc2.NgClass, ɵngcc2.NgStyle]; }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-fab-items'),\n __metadata(\"design:type\", Boolean)\n], DialListComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('class.k-fab-items-bottom'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialListComponent.prototype, \"bottomClass\", null);\n__decorate([\n HostBinding('class.k-fab-items-top'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialListComponent.prototype, \"topClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], DialListComponent.prototype, \"dialItems\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], DialListComponent.prototype, \"dialItemTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialListComponent.prototype, \"align\", void 0);\nDialListComponent = __decorate([ __metadata(\"design:paramtypes\", [FocusService, ChangeDetectorRef])\n], DialListComponent);\n\n/**\n * @hidden\n */\nlet DialItemComponent = class DialItemComponent {\n constructor(element, renderer, localisationService) {\n this.element = element;\n this.renderer = renderer;\n this.localisationService = localisationService;\n this.hostClass = true;\n this.role = 'menuitem';\n }\n get disabledClass() {\n return this.item.disabled;\n }\n get title() {\n const label = this.item.label;\n return label ? label : this.itemTitle;\n }\n get indexAttr() {\n return this.index;\n }\n get iconClasses() {\n const classes = [];\n if (this.item.iconClass) {\n classes.push(`${this.item.iconClass}`);\n }\n if (this.item.icon) {\n classes.push(`k-fab-item-icon k-icon k-i-${this.item.icon}`);\n }\n return classes;\n }\n get itemTitle() {\n const icon = this.item.icon;\n const itemTitle = this.item.itemTitle;\n return (icon && itemTitle) ? itemTitle : icon;\n }\n ngAfterViewInit() {\n const element = this.element.nativeElement;\n const rtl = this.localisationService.rtl;\n const hAlign = this.align.horizontal;\n this.renderer.addClass(element, this.getTextDirectionClass(rtl, hAlign));\n }\n getTextDirectionClass(rtl, hAlign) {\n const dir = rtl ? 'rtl' : 'ltr';\n const align = hAlign === 'end' ? 'end' : 'start';\n const directions = {\n rtl: { end: 'k-text-left', start: 'k-text-right' },\n ltr: { start: 'k-text-left', end: 'k-text-right' }\n };\n return directions[dir][align];\n }\n};\nDialItemComponent.ɵfac = function DialItemComponent_Factory(t) { return new (t || DialItemComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDialItemComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DialItemComponent, selectors: [[\"\", \"kendoDialItem\", \"\"]], hostVars: 9, hostBindings: function DialItemComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"aria-disabled\", ctx.disabledClass)(\"title\", ctx.title)(\"aria-label\", ctx.title)(\"data-fab-item-index\", ctx.indexAttr);\n ɵngcc0.ɵɵclassProp(\"k-fab-item\", ctx.hostClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { cssClass: \"cssClass\", cssStyle: \"cssStyle\", isFocused: \"isFocused\", index: \"index\", item: \"item\", dialItemTemplate: \"dialItemTemplate\", align: \"align\" }, attrs: _c14, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"class\", \"k-fab-item-text\", 4, \"ngIf\"], [3, \"ngClass\", 4, \"ngIf\"], [1, \"k-fab-item-text\"], [3, \"ngClass\"]], template: function DialItemComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialItemComponent_0_Template, 1, 6, null, 0);\n ɵngcc0.ɵɵtemplate(1, DialItemComponent_ng_container_1_Template, 3, 2, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.dialItemTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.dialItemTemplate);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgClass], encapsulation: 2 });\n__decorate([\n HostBinding('class.k-fab-item'),\n __metadata(\"design:type\", Boolean)\n], DialItemComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String)\n], DialItemComponent.prototype, \"role\", void 0);\n__decorate([\n HostBinding('attr.aria-disabled'),\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialItemComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('attr.title'),\n HostBinding('attr.aria-label'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], DialItemComponent.prototype, \"title\", null);\n__decorate([\n HostBinding('attr.data-fab-item-index'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], DialItemComponent.prototype, \"indexAttr\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialItemComponent.prototype, \"cssClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialItemComponent.prototype, \"cssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DialItemComponent.prototype, \"isFocused\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialItemComponent.prototype, \"index\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialItemComponent.prototype, \"item\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], DialItemComponent.prototype, \"dialItemTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialItemComponent.prototype, \"align\", void 0);\nDialItemComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n LocalizationService])\n], DialItemComponent);\n\nconst exportedModules$1 = [\n FloatingActionButtonComponent,\n DialItemTemplateDirective,\n FloatingActionButtonTemplateDirective\n];\nconst declarations$1 = [\n ...exportedModules$1,\n DialListComponent,\n DialItemComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the FloatingActionButton component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the FloatingActionButton module\n * import { FloatingActionButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FloatingActionButtonModule], // import FloatingActionButton module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nlet FloatingActionButtonModule = class FloatingActionButtonModule {\n};\nFloatingActionButtonModule.ɵfac = function FloatingActionButtonModule_Factory(t) { return new (t || FloatingActionButtonModule)(); };\nFloatingActionButtonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: FloatingActionButtonModule });\nFloatingActionButtonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, PopupModule, ListModule, EventsModule]] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Buttons components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Buttons module\n * import { ButtonsModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonsModule], // import Buttons module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet ButtonsModule = class ButtonsModule {\n};\nButtonsModule.ɵfac = function ButtonsModule_Factory(t) { return new (t || ButtonsModule)(); };\nButtonsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ButtonsModule });\nButtonsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(KendoButtonService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoButton',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoButton], span[kendoButton]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: KendoButtonService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { toggleable: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], role: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], click: [{\n type: Output\n }], togglable: [{\n type: Input\n }], selected: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], classButton: [{\n type: HostBinding,\n args: ['class.k-button']\n }], classPrimary: [{\n type: HostBinding,\n args: ['class.k-primary']\n }], isToggleable: [{\n type: HostBinding,\n args: ['class.k-toggle-button']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-outline']\n }], isClear: [{\n type: HostBinding,\n args: ['class.k-button-clear']\n }], roleSetter: [{\n type: HostBinding,\n args: ['attr.role']\n }], classDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], classActive: [{\n type: HostBinding,\n args: ['class.k-state-selected']\n }], getDirection: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n onFocus: [{\n type: HostListener,\n args: ['focus']\n }], \n /**\n * @hidden\n */\n onBlur: [{\n type: HostListener,\n args: ['blur']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonGroupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoButtonGroup',\n providers: [\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ],\n selector: 'kendo-buttongroup',\n template: `\n \n `\n }]\n }], function () { return [{ type: KendoButtonService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ElementRef }]; }, { selection: [{\n type: Input,\n args: ['selection']\n }], look: [{\n type: Input\n }], navigate: [{\n type: Output\n }], tabIndex: [{\n type: Input\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-button-group']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-button-group-stretched']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-button-group-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-button-group-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-button-group-outline']\n }], getRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], wrapperWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], wrapperTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n onFocus: [{\n type: HostListener,\n args: ['focus']\n }], \n /**\n * @hidden\n */\n focusout: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }], disabled: [{\n type: Input,\n args: ['disabled']\n }], width: [{\n type: Input,\n args: ['width']\n }], buttons: [{\n type: ContentChildren,\n args: [ButtonDirective]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonDirective],\n exports: [ButtonDirective]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonModule, { declarations: [ButtonDirective], exports: [ButtonDirective] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonGroupModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonGroupComponent],\n exports: [ButtonGroupComponent],\n imports: [CommonModule, ButtonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonGroupModule, { declarations: function () { return [ButtonGroupComponent]; }, imports: function () { return [CommonModule, ButtonModule]; }, exports: function () { return [ButtonGroupComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-button-list',\n template: `\n
    \n
  • \n \n \n \n \n \n {{ getText(dataItem) }}\n \n
  • \n
\n `\n }]\n }], function () { return []; }, { onItemClick: [{\n type: Output\n }], onItemBlur: [{\n type: Output\n }], data: [{\n type: Input\n }], textField: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FocusService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FocusableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoButtonFocusable]'\n }]\n }], function () { return [{ type: FocusService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { index: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ListModule, [{\n type: NgModule,\n args: [{\n declarations: [EXPORTED_DIRECTIVES],\n exports: [EXPORTED_DIRECTIVES],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ListModule, { declarations: function () { return [ListComponent, FocusableDirective, ButtonItemTemplateDirective, TemplateContextDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ListComponent, FocusableDirective, ButtonItemTemplateDirective, TemplateContextDirective]; } }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: Object, decorators: [{\n type: Inject,\n args: [NAVIGATION_CONFIG]\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SplitButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ],\n selector: 'kendo-splitbutton',\n template: `\n \n \n \n {{ text }}\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], type: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], arrowButtonIcon: [{\n type: Input\n }], buttonClick: [{\n type: Output\n }], itemClick: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], disabled: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], isFocused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-flat']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-outline']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-split-button']\n }, {\n type: HostBinding,\n args: ['class.k-button-group']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], \n /**\n * @hidden\n */\n keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], arrowButtonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective, { static: false }]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], arrowButton: [{\n type: ViewChild,\n args: ['arrowButton', { static: true, read: ElementRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], containerRef: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedSplitButtonMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSplitButtonMessagesDirective_1)\n }\n ],\n selector: '[kendoSplitButtonLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SplitButtonCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => SplitButtonCustomMessagesComponent_1)\n }\n ],\n selector: 'kendo-splitbutton-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SplitButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [SplitButtonComponent, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent],\n exports: [SplitButtonComponent, ListModule, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent],\n imports: [CommonModule, PopupModule, ButtonModule, ListModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SplitButtonModule, { declarations: function () { return [SplitButtonComponent, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent]; }, imports: function () { return [CommonModule, PopupModule, ButtonModule, ListModule]; }, exports: function () { return [SplitButtonComponent, ListModule, LocalizedSplitButtonMessagesDirective, SplitButtonCustomMessagesComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ],\n selector: 'kendo-dropdownbutton',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], popupSettings: [{\n type: Input\n }], disabled: [{\n type: Input\n }], data: [{\n type: Input\n }], focused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-flat']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-outline']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-dropdown-button']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], \n /**\n * @hidden\n */\n keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], \n /**\n * @hidden\n */\n keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], \n /**\n * @hidden\n */\n mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], \n /**\n * @hidden\n */\n mouseup: [{\n type: HostListener,\n args: ['mouseup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective, { static: false }]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], buttonList: [{\n type: ViewChild,\n args: ['buttonList', { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [DropDownButtonComponent],\n exports: [DropDownButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ListModule, ButtonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownButtonModule, { declarations: function () { return [DropDownButtonComponent]; }, imports: function () { return [CommonModule, PopupModule, ListModule, ButtonModule]; }, exports: function () { return [DropDownButtonComponent, ListModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChipComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip',\n template: `\n \n \n \n \n\n \n \n\n \n \n {{ label }}\n \n \n \n\n \n \n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.LocalizationService }]; }, { look: [{\n type: Input\n }], selected: [{\n type: Input\n }], removable: [{\n type: Input\n }], type: [{\n type: Input\n }], disabled: [{\n type: Input\n }], remove: [{\n type: Output\n }], contentClick: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-chip']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaChecked: [{\n type: HostBinding,\n args: ['attr.aria-checked']\n }], outlineClass: [{\n type: HostBinding,\n args: ['class.k-chip-outline']\n }], solidClass: [{\n type: HostBinding,\n args: ['class.k-chip-solid']\n }], hasIconClass: [{\n type: HostBinding,\n args: ['class.k-chip-has-icon']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['class.k-selected']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-focus']\n }], label: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], selectedIcon: [{\n type: Input\n }], removeIcon: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChipListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip-list, kendo-chiplist',\n template: `\n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Renderer2 }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-chip-list']\n }], selection: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], single: [{\n type: HostBinding,\n args: ['class.k-selection-single']\n }], multiple: [{\n type: HostBinding,\n args: ['class.k-selection-multiple']\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], chips: [{\n type: ContentChildren,\n args: [ChipComponent]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ChipModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ChipModule, { declarations: function () { return [ChipComponent, ChipListComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ChipComponent, ChipListComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDialItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FloatingActionButtonTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFloatingActionButtonTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FloatingActionButtonComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-floatingactionbutton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$2,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatingactionbutton'\n }\n ],\n template: `\n \n \n \n\n \n \n {{ text }}\n \n \n\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: FocusService }, { type: NavigationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc4.AnimationBuilder }, { type: ɵngcc1.LocalizationService }]; }, { positionMode: [{\n type: Input\n }], dialItemAnimation: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], dialItems: [{\n type: Input\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], dialItemClick: [{\n type: Output,\n args: ['dialItemClick']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], fixedClass: [{\n type: HostBinding,\n args: ['class.k-pos-fixed']\n }], absoluteClass: [{\n type: HostBinding,\n args: ['class.k-pos-absolute']\n }], themeColor: [{\n type: Input\n }], size: [{\n type: Input\n }], shape: [{\n type: Input\n }], disabled: [{\n type: Input\n }], align: [{\n type: Input\n }], offset: [{\n type: Input\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], dialItemTemplate: [{\n type: ContentChild,\n args: [DialItemTemplateDirective, { static: true }]\n }], fabTemplate: [{\n type: ContentChild,\n args: [FloatingActionButtonTemplateDirective, { static: true }]\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], dialClass: [{\n type: Input\n }], text: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialListComponent, [{\n type: Component,\n args: [{\n selector: '[kendoDialList]',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-fab-items']\n }], bottomClass: [{\n type: HostBinding,\n args: ['class.k-fab-items-bottom']\n }], topClass: [{\n type: HostBinding,\n args: ['class.k-fab-items-top']\n }], dialItems: [{\n type: Input\n }], dialItemTemplate: [{\n type: Input\n }], align: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialItemComponent, [{\n type: Component,\n args: [{\n selector: '[kendoDialItem]',\n template: `\n \n \n\n \n {{ item.label }}\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-fab-item']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], title: [{\n type: HostBinding,\n args: ['attr.title']\n }, {\n type: HostBinding,\n args: ['attr.aria-label']\n }], indexAttr: [{\n type: HostBinding,\n args: ['attr.data-fab-item-index']\n }], cssClass: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }], isFocused: [{\n type: Input\n }], index: [{\n type: Input\n }], item: [{\n type: Input\n }], dialItemTemplate: [{\n type: Input\n }], align: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FloatingActionButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$1],\n imports: [CommonModule, PopupModule, ListModule, EventsModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FloatingActionButtonModule, { declarations: function () { return [FloatingActionButtonComponent, DialItemTemplateDirective, FloatingActionButtonTemplateDirective, DialListComponent, DialItemComponent]; }, imports: function () { return [CommonModule, PopupModule, ListModule, EventsModule]; }, exports: function () { return [FloatingActionButtonComponent, DialItemTemplateDirective, FloatingActionButtonTemplateDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ButtonsModule, [{\n type: NgModule,\n args: [{\n exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonsModule, { exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule, FloatingActionButtonModule] }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { KendoButtonService, DialItemComponent, DialListComponent, FocusService, FocusableDirective, ButtonItemTemplateDirective, ListButton, ListComponent, ListModule, TemplateContextDirective, NAVIGATION_CONFIG, NavigationService, LocalizedSplitButtonMessagesDirective, Messages, ButtonDirective, ButtonDirective as Button, ButtonGroupComponent, ButtonGroupComponent as ButtonGroup, ButtonGroupModule, ButtonModule, ButtonsModule, SplitButtonComponent, SplitButtonComponent as SplitButton, SplitButtonModule, SplitButtonCustomMessagesComponent, DropDownButtonComponent, DropDownButtonComponent as DropDownButton, DropDownButtonModule, ChipComponent, ChipListComponent, ChipModule, FloatingActionButtonModule, FloatingActionButtonComponent, FloatingActionButtonTemplateDirective, DialItemTemplateDirective };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata } from 'tslib';\nimport { EventEmitter, Input, Output, Directive, ElementRef, NgZone, NgModule, Renderer2, Injectable, Component } from '@angular/core';\nimport Draggable from '@telerik/kendo-draggable';\nimport { CommonModule } from '@angular/common';\nimport { auditTime } from 'rxjs/operators';\nimport { merge, fromEvent, from } from 'rxjs';\n\nimport * as ɵngcc0 from '@angular/core';\nconst isDocumentAvailable = () => typeof document !== 'undefined';\n\nconst isChanged = (propertyName, changes, skipFirstChange = true) => (typeof changes[propertyName] !== 'undefined' &&\n (!changes[propertyName].isFirstChange() || !skipFirstChange) &&\n changes[propertyName].previousValue !== changes[propertyName].currentValue);\n\nconst anyChanged = (propertyNames, changes, skipFirstChange = true) => propertyNames.some(name => isChanged(name, changes, skipFirstChange));\n\nconst hasObservers = (emitter) => emitter && emitter.observers.length > 0;\n\nconst guid = () => {\n let id = \"\";\n for (let i = 0; i < 32; i++) {\n const random = Math.random() * 16 | 0; // tslint:disable-line:no-bitwise\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n // tslint:disable-next-line:no-bitwise\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);\n }\n return id;\n};\n\nlet DraggableDirective = class DraggableDirective {\n constructor(element, ngZone) {\n this.element = element;\n this.ngZone = ngZone;\n this.enableDrag = true;\n this.kendoPress = new EventEmitter();\n this.kendoDrag = new EventEmitter();\n this.kendoRelease = new EventEmitter();\n }\n ngOnInit() {\n this.toggleDraggable();\n }\n ngOnChanges(changes) {\n if (isChanged('enableDrag', changes)) {\n this.toggleDraggable();\n }\n }\n ngOnDestroy() {\n this.destroyDraggable();\n }\n toggleDraggable() {\n if (isDocumentAvailable()) {\n this.destroyDraggable();\n if (this.enableDrag) {\n this.draggable = new Draggable({\n drag: (e) => this.kendoDrag.next(e),\n press: (e) => this.kendoPress.next(e),\n release: (e) => this.kendoRelease.next(e)\n });\n this.ngZone.runOutsideAngular(() => this.draggable.bindTo(this.element.nativeElement));\n }\n }\n }\n destroyDraggable() {\n if (this.draggable) {\n this.draggable.destroy();\n this.draggable = null;\n }\n }\n};\nDraggableDirective.ɵfac = function DraggableDirective_Factory(t) { return new (t || DraggableDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDraggableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DraggableDirective, selectors: [[\"\", \"kendoDraggable\", \"\"]], inputs: { enableDrag: \"enableDrag\" }, outputs: { kendoPress: \"kendoPress\", kendoDrag: \"kendoDrag\", kendoRelease: \"kendoRelease\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DraggableDirective.prototype, \"enableDrag\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DraggableDirective.prototype, \"kendoPress\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DraggableDirective.prototype, \"kendoDrag\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DraggableDirective.prototype, \"kendoRelease\", void 0);\nDraggableDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef, NgZone])\n], DraggableDirective);\n\n/**\n * @hidden\n */\nlet DraggableModule = class DraggableModule {\n};\nDraggableModule.ɵfac = function DraggableModule_Factory(t) { return new (t || DraggableModule)(); };\nDraggableModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DraggableModule });\nDraggableModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\nconst contains = (parent, node, matchSelf = false) => {\n const outside = !closest(node, (child) => child === parent);\n if (outside) {\n return false;\n }\n const el = closest(node, (child) => child === node);\n return el && (matchSelf || el !== parent);\n};\n\nconst findElement = (node, predicate, matchSelf = true) => {\n if (!node) {\n return;\n }\n if (matchSelf && predicate(node)) {\n return node;\n }\n node = node.firstChild;\n while (node) {\n if (node.nodeType === 1) {\n const element = findElement(node, predicate);\n if (element) {\n return element;\n }\n }\n node = node.nextSibling;\n }\n};\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst isFocusable = (element) => {\n if (!element.tagName) {\n return false;\n }\n const tagName = element.tagName.toLowerCase();\n const hasTabIndex = Boolean(element.getAttribute('tabIndex'));\n const focusable = !element.disabled && focusableRegex.test(tagName);\n return focusable || hasTabIndex;\n};\n\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n const hasSize = rect.width > 0 && rect.height > 0;\n const hasPosition = rect.x !== 0 && rect.y !== 0;\n // Elements can have zero size due to styling, but they will still count as visible.\n // For example, the selection checkbox has no size, but is made visible through styling.\n return (hasSize || hasPosition) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n\nconst isFocusableWithTabKey = (element, checkVisibility = true) => {\n if (!isFocusable(element)) {\n return false;\n }\n const tabIndex = element.getAttribute('tabIndex');\n const visible = !checkVisibility || isVisible(element);\n return visible && tabIndex !== '-1';\n};\n\nconst findFocusableChild = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);\n};\n\nconst findFocusable = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility));\n};\n\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n\nconst matchesClasses = (classNames) => (element) => hasClasses(element, classNames);\n\nconst NODE_NAME_PREDICATES = {};\nconst matchesNodeName = (nodeName) => {\n if (!NODE_NAME_PREDICATES[nodeName]) {\n NODE_NAME_PREDICATES[nodeName] = (element) => String(element.nodeName).toLowerCase() === nodeName.toLowerCase();\n }\n return NODE_NAME_PREDICATES[nodeName];\n};\n\n/**\n * Normalizes a scroll position value in RTL mode.\n */\nfunction rtlScrollPosition(position, element, initial) {\n let result = position;\n if (initial < 0) {\n result = -position;\n }\n else if (initial > 0) {\n result = element.scrollWidth - element.offsetWidth - position;\n }\n return result;\n}\n\n/* tslint:disable:no-input-rename */\n/**\n * @hidden\n */\nlet EventsOutsideAngularDirective = class EventsOutsideAngularDirective {\n constructor(element, ngZone, renderer) {\n this.element = element;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.events = {};\n }\n ngOnInit() {\n if (!this.element || !this.element.nativeElement) {\n return;\n }\n const events = this.events;\n this.subscriptions = [];\n this.ngZone.runOutsideAngular(() => {\n for (let name in events) {\n if (events.hasOwnProperty(name)) {\n this.subscriptions.push(this.renderer.listen(this.element.nativeElement, name, this.scope ? events[name].bind(this.scope) : events[name]));\n }\n }\n });\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n for (let idx = 0; idx < this.subscriptions.length; idx++) {\n this.subscriptions[idx]();\n }\n this.subscriptions = null;\n }\n }\n};\nEventsOutsideAngularDirective.ɵfac = function EventsOutsideAngularDirective_Factory(t) { return new (t || EventsOutsideAngularDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nEventsOutsideAngularDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EventsOutsideAngularDirective, selectors: [[\"\", \"kendoEventsOutsideAngular\", \"\"]], inputs: { events: [\"kendoEventsOutsideAngular\", \"events\"], scope: \"scope\" } });\n__decorate([\n Input('kendoEventsOutsideAngular'),\n __metadata(\"design:type\", Object)\n], EventsOutsideAngularDirective.prototype, \"events\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EventsOutsideAngularDirective.prototype, \"scope\", void 0);\nEventsOutsideAngularDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone,\n Renderer2])\n], EventsOutsideAngularDirective);\n\n/**\n * @hidden\n */\nlet EventsModule = class EventsModule {\n};\nEventsModule.ɵfac = function EventsModule_Factory(t) { return new (t || EventsModule)(); };\nEventsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: EventsModule });\nEventsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\nclass ResizeService {\n constructor(resizeBatchService) {\n this.resizeBatchService = resizeBatchService;\n this.resize = new EventEmitter();\n this.acceptedSize = false;\n this.state = 0 /* Initial */;\n }\n acceptSize(size = this.measure()) {\n this.lastWidth = size.width;\n this.lastHeight = size.height;\n this.acceptedSize = true;\n }\n checkChanges() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.state === 0 /* Initial */) {\n this.state = 1 /* Initializing */;\n // batch initial measure\n this.resizeBatchService.schedule(this, this.init);\n }\n }\n destroy() {\n this.resizeBatchService.cancel(this);\n }\n checkSize() {\n if (!this.parentElement) {\n return;\n }\n const { width, height } = this.measure();\n const sameSize = width === this.lastWidth && height === this.lastHeight;\n if (sameSize) {\n return;\n }\n this.lastWidth = width;\n this.lastHeight = height;\n this.acceptedSize = false;\n this.resize.emit();\n return true;\n }\n initSize() {\n const size = this.measure();\n this.lastWidth = size.width;\n this.lastHeight = size.height;\n }\n measure() {\n let width = 0;\n let height = 0;\n if (this.parentElement) {\n height = this.parentElement.offsetHeight;\n width = this.parentElement.offsetWidth;\n }\n return { height, width };\n }\n}\n\n// tslint:disable:deprecation\nconst div = style => {\n const el = document.createElement('div');\n el.style.cssText = style;\n return el;\n};\nconst computedProp = (elem, prop) => getComputedStyle(elem, null).getPropertyValue(prop);\nconst WRAP_STYLE = 'position: absolute; display: block; left: 0; top: 0; right: 0; bottom: 0; z-index: -1;' +\n 'overflow: hidden; visibility: hidden;';\nconst EXPAND_CHILD_STYLE = 'position: absolute; left: 0; top: 0; transition: 0s;';\nconst SHRINK_CHILD_STYLE = EXPAND_CHILD_STYLE + 'width: 200%; height: 200%;';\nclass ResizeCompatService extends ResizeService {\n constructor(resizeBatchService, element, ngZone) {\n super(resizeBatchService);\n this.element = element;\n this.ngZone = ngZone;\n }\n checkChanges() {\n if (this.state === 2 /* Initialized */) {\n if (!this.resizeBatchService.isScheduled(this)) {\n this.resizeBatchService.schedule(this, this.checkSize);\n }\n return;\n }\n super.checkChanges();\n }\n destroy() {\n super.destroy();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.expand) {\n const element = this.element.nativeElement;\n element.removeChild(this.expand);\n element.removeChild(this.shrink);\n this.expand.removeChild(this.expandChild);\n this.expand = this.expandChild = this.shrink = this.element = null;\n }\n }\n checkSize() {\n if (super.checkSize()) {\n this.reset();\n return true;\n }\n }\n init() {\n const parentElement = this.parentElement = this.element.nativeElement.parentElement;\n if (computedProp(parentElement, 'position') === 'static') {\n parentElement.style.position = 'relative';\n }\n this.state = 2 /* Initialized */;\n this.render();\n this.reset();\n this.initSize();\n this.subscribe();\n }\n render() {\n const element = this.element.nativeElement;\n element.style.cssText = WRAP_STYLE;\n element.setAttribute('dir', 'ltr');\n this.expand = div(WRAP_STYLE);\n this.expandChild = div(EXPAND_CHILD_STYLE);\n this.expand.appendChild(this.expandChild);\n element.appendChild(this.expand);\n this.shrink = div(WRAP_STYLE);\n const shrinkChild = div(SHRINK_CHILD_STYLE);\n this.shrink.appendChild(shrinkChild);\n element.appendChild(this.shrink);\n }\n reset() {\n const expandChild = this.expandChild;\n expandChild.style.width = 100000 + 'px';\n expandChild.style.height = 100000 + 'px';\n const expand = this.expand;\n expand.scrollLeft = 100000;\n expand.scrollTop = 100000;\n const shrink = this.shrink;\n shrink.scrollLeft = 100000;\n shrink.scrollTop = 100000;\n }\n subscribe() {\n this.ngZone.runOutsideAngular(() => {\n this.subscription = merge(fromEvent(this.shrink, 'scroll'), fromEvent(this.expand, 'scroll'))\n .subscribe(() => {\n this.checkSize();\n });\n });\n }\n}\n\nconst HAS_OBSERVER = typeof ResizeObserver !== 'undefined';\n/**\n * @hidden\n */\nclass ResizeObserverService extends ResizeService {\n constructor(resizeBatchService, element, ngZone) {\n super(resizeBatchService);\n this.element = element;\n this.ngZone = ngZone;\n }\n static supported() {\n return HAS_OBSERVER;\n }\n destroy() {\n super.destroy();\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n this.parentElement = null;\n }\n init() {\n this.parentElement = this.element.nativeElement.parentElement;\n this.initSize();\n this.state = 2 /* Initialized */;\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => {\n this.checkSize();\n });\n this.resizeObserver.observe(this.parentElement);\n });\n }\n}\n\n/**\n * @hidden\n */\nlet ResizeBatchService = class ResizeBatchService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.scheduled = [];\n this.resolvedPromise = Promise.resolve(null);\n this.flush = this.flush.bind(this);\n }\n schedule(instance, method) {\n this.scheduled.push({ instance, method });\n if (!this.subscription) {\n this.ngZone.runOutsideAngular(() => {\n this.subscription = from(this.resolvedPromise)\n .subscribe(this.flush);\n });\n }\n }\n isScheduled(instance) {\n return Boolean(this.scheduled.find(item => item.instance === instance));\n }\n cancel(instance) {\n const scheduled = this.scheduled;\n const count = scheduled.length;\n for (let idx = 0; idx < count; idx++) {\n if (scheduled[idx].instance === instance) {\n scheduled.splice(idx, 1);\n if (!scheduled.length) {\n this.unsubscribe();\n }\n return;\n }\n }\n }\n ngOnDestroy() {\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = null;\n }\n }\n flush() {\n this.scheduled.forEach(item => {\n item.method.call(item.instance);\n });\n this.scheduled = [];\n this.unsubscribe();\n }\n};\nResizeBatchService.ɵfac = function ResizeBatchService_Factory(t) { return new (t || ResizeBatchService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nResizeBatchService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ResizeBatchService, factory: function (t) { return ResizeBatchService.ɵfac(t); } });\nResizeBatchService = __decorate([ __metadata(\"design:paramtypes\", [NgZone])\n], ResizeBatchService);\n\n/**\n * Emit up to 10 resize events per second by default.\n * Chosen as a compromise between responsiveness and performance.\n */\nconst DEFAULT_RATE_LIMIT = 10;\n/**\n * Resize Sensor Component\n *\n * Triggers a \"resize\" event whenever the parent DOM element size changes.\n */\nlet ResizeSensorComponent = class ResizeSensorComponent {\n constructor(resizeBatchService, element, ngZone) {\n /**\n * The maximum number of resize events to emit per second.\n *\n * Defaults to 10.\n */\n this.rateLimit = DEFAULT_RATE_LIMIT;\n /**\n * Fires when the parent DOM element has been resized.\n */\n this.resize = new EventEmitter();\n const serviceType = ResizeObserverService.supported() ? ResizeObserverService : ResizeCompatService;\n this.resizeService = new serviceType(resizeBatchService, element, ngZone);\n const throttleTime = 1000 / (this.rateLimit || DEFAULT_RATE_LIMIT);\n this.subscription = this.resizeService.resize\n .pipe(auditTime(throttleTime))\n .subscribe(() => {\n if (!this.resizeService.acceptedSize) {\n this.resize.emit();\n }\n });\n }\n ngAfterViewChecked() {\n this.resizeService.checkChanges();\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n this.resizeService.destroy();\n }\n acceptSize(size) {\n this.resizeService.acceptSize(size);\n }\n};\nResizeSensorComponent.ɵfac = function ResizeSensorComponent_Factory(t) { return new (t || ResizeSensorComponent)(ɵngcc0.ɵɵdirectiveInject(ResizeBatchService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nResizeSensorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ResizeSensorComponent, selectors: [[\"kendo-resize-sensor\"]], inputs: { rateLimit: \"rateLimit\" }, outputs: { resize: \"resize\" }, decls: 0, vars: 0, template: function ResizeSensorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ResizeSensorComponent.prototype, \"rateLimit\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ResizeSensorComponent.prototype, \"resize\", void 0);\nResizeSensorComponent = __decorate([ __metadata(\"design:paramtypes\", [ResizeBatchService, ElementRef, NgZone])\n], ResizeSensorComponent);\n\nconst COMPONENT_DIRECTIVES = [ResizeSensorComponent];\n/**\n * Resize Sensor module\n */\nlet ResizeSensorModule = class ResizeSensorModule {\n};\nResizeSensorModule.ɵfac = function ResizeSensorModule_Factory(t) { return new (t || ResizeSensorModule)(); };\nResizeSensorModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ResizeSensorModule });\nResizeSensorModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [ResizeBatchService] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DraggableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDraggable]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { enableDrag: [{\n type: Input\n }], kendoPress: [{\n type: Output\n }], kendoDrag: [{\n type: Output\n }], kendoRelease: [{\n type: Output\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DraggableModule, [{\n type: NgModule,\n args: [{\n declarations: [DraggableDirective],\n exports: [DraggableDirective],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DraggableModule, { declarations: function () { return [DraggableDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [DraggableDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EventsOutsideAngularDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoEventsOutsideAngular]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { events: [{\n type: Input,\n args: ['kendoEventsOutsideAngular']\n }], scope: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EventsModule, [{\n type: NgModule,\n args: [{\n declarations: [EventsOutsideAngularDirective],\n exports: [EventsOutsideAngularDirective]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(EventsModule, { declarations: [EventsOutsideAngularDirective], exports: [EventsOutsideAngularDirective] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeBatchService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeSensorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-resize-sensor',\n template: ''\n }]\n }], function () { return [{ type: ResizeBatchService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { rateLimit: [{\n type: Input\n }], resize: [{\n type: Output\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeSensorModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n providers: [ResizeBatchService]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ResizeSensorModule, { declarations: [ResizeSensorComponent], exports: [ResizeSensorComponent] }); })();\n\nclass KendoInput {\n}\n\n/**\n * Enum with key codes.\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"Alt\"] = 18] = \"Alt\";\n Keys[Keys[\"ArrowDown\"] = 40] = \"ArrowDown\";\n Keys[Keys[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Keys[Keys[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Keys[Keys[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Keys[Keys[\"Backspace\"] = 8] = \"Backspace\";\n Keys[Keys[\"Control\"] = 17] = \"Control\";\n Keys[Keys[\"Delete\"] = 46] = \"Delete\";\n Keys[Keys[\"Digit0\"] = 48] = \"Digit0\";\n Keys[Keys[\"Digit1\"] = 49] = \"Digit1\";\n Keys[Keys[\"Digit2\"] = 50] = \"Digit2\";\n Keys[Keys[\"Digit3\"] = 51] = \"Digit3\";\n Keys[Keys[\"Digit4\"] = 52] = \"Digit4\";\n Keys[Keys[\"Digit5\"] = 53] = \"Digit5\";\n Keys[Keys[\"Digit6\"] = 54] = \"Digit6\";\n Keys[Keys[\"Digit7\"] = 55] = \"Digit7\";\n Keys[Keys[\"Digit8\"] = 56] = \"Digit8\";\n Keys[Keys[\"Digit9\"] = 57] = \"Digit9\";\n Keys[Keys[\"End\"] = 35] = \"End\";\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n Keys[Keys[\"F1\"] = 112] = \"F1\";\n Keys[Keys[\"F2\"] = 113] = \"F2\";\n Keys[Keys[\"F10\"] = 121] = \"F10\";\n Keys[Keys[\"Home\"] = 36] = \"Home\";\n Keys[Keys[\"Insert\"] = 45] = \"Insert\";\n Keys[Keys[\"KeyA\"] = 65] = \"KeyA\";\n Keys[Keys[\"KeyB\"] = 66] = \"KeyB\";\n Keys[Keys[\"KeyC\"] = 67] = \"KeyC\";\n Keys[Keys[\"KeyD\"] = 68] = \"KeyD\";\n Keys[Keys[\"KeyE\"] = 69] = \"KeyE\";\n Keys[Keys[\"KeyF\"] = 70] = \"KeyF\";\n Keys[Keys[\"KeyG\"] = 71] = \"KeyG\";\n Keys[Keys[\"KeyH\"] = 72] = \"KeyH\";\n Keys[Keys[\"KeyI\"] = 73] = \"KeyI\";\n Keys[Keys[\"KeyJ\"] = 74] = \"KeyJ\";\n Keys[Keys[\"KeyK\"] = 75] = \"KeyK\";\n Keys[Keys[\"KeyL\"] = 76] = \"KeyL\";\n Keys[Keys[\"KeyM\"] = 77] = \"KeyM\";\n Keys[Keys[\"KeyN\"] = 78] = \"KeyN\";\n Keys[Keys[\"KeyO\"] = 79] = \"KeyO\";\n Keys[Keys[\"KeyP\"] = 80] = \"KeyP\";\n Keys[Keys[\"KeyQ\"] = 81] = \"KeyQ\";\n Keys[Keys[\"KeyR\"] = 82] = \"KeyR\";\n Keys[Keys[\"KeyS\"] = 83] = \"KeyS\";\n Keys[Keys[\"KeyT\"] = 84] = \"KeyT\";\n Keys[Keys[\"KeyU\"] = 85] = \"KeyU\";\n Keys[Keys[\"KeyV\"] = 86] = \"KeyV\";\n Keys[Keys[\"KeyW\"] = 87] = \"KeyW\";\n Keys[Keys[\"KeyX\"] = 88] = \"KeyX\";\n Keys[Keys[\"KeyY\"] = 89] = \"KeyY\";\n Keys[Keys[\"KeyZ\"] = 90] = \"KeyZ\";\n Keys[Keys[\"NumpadDecimal\"] = 110] = \"NumpadDecimal\";\n Keys[Keys[\"PageDown\"] = 34] = \"PageDown\";\n Keys[Keys[\"PageUp\"] = 33] = \"PageUp\";\n Keys[Keys[\"Shift\"] = 16] = \"Shift\";\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n})(Keys || (Keys = {}));\n\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ResizeService, PreventableEvent, DraggableDirective, DraggableModule, closestInScope, closest, contains, findElement, findFocusableChild, findFocusable, hasClasses, isFocusableWithTabKey, isFocusable, isVisible, matchesClasses, matchesNodeName, rtlScrollPosition, EventsOutsideAngularDirective, EventsModule, ResizeSensorComponent, ResizeBatchService, ResizeCompatService, ResizeObserverService, ResizeSensorModule, KendoInput, isDocumentAvailable, isChanged, anyChanged, hasObservers, guid, Keys };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { EventEmitter, TemplateRef, Input, Output, HostBinding, Component, ElementRef, InjectionToken, Inject, Optional, NgZone, ContentChildren, QueryList, ViewChildren, ViewChild, Renderer2, ChangeDetectorRef, Injectable, isDevMode, ComponentFactoryResolver, Directive, Host, HostListener, ContentChild, ViewContainerRef, forwardRef, NgModule } from '@angular/core';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { LocalizationService, L10N_PREFIX, RTL, MessageService, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { take, filter, map, share, tap, switchMap, takeUntil } from 'rxjs/operators';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { Subscription, Subject, merge, of } from 'rxjs';\nimport { DraggableDirective, isChanged, isDocumentAvailable, DraggableModule } from '@progress/kendo-angular-common';\nimport { offset, scrollPosition, positionWithScroll, getDocumentElement, getWindowViewPort } from '@progress/kendo-popup-common';\nimport { Button } from '@progress/kendo-angular-buttons';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Specifies the action buttons of the Dialog\n * ([see example]({% slug actionbuttons_dialog %})).\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\n\nfunction DialogActionsComponent_ng_content_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!actions\"]);\n} }\nfunction DialogActionsComponent_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function DialogActionsComponent_ng_container_1_button_1_Template_button_click_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r6); const action_r4 = restoredCtx.$implicit; const ctx_r5 = ɵngcc0.ɵɵnextContext(2); return ctx_r5.onButtonClick(action_r4, $event); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const action_r4 = ctx.$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r3.buttonClass(action_r4));\n ɵngcc0.ɵɵattribute(\"aria-label\", action_r4.text);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", action_r4.text, \" \");\n} }\nfunction DialogActionsComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, DialogActionsComponent_ng_container_1_button_1_Template, 2, 3, \"button\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r1.actions);\n} }\nfunction DialogActionsComponent_2_ng_template_0_Template(rf, ctx) { }\nfunction DialogActionsComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialogActionsComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r2.actions);\n} }\nconst _c0 = [\"*\"];\nfunction DialogComponent_kendo_dialog_titlebar_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 7);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"closeTitle\", ctx_r0.closeTitle)(\"id\", ctx_r0.titleId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.title);\n} }\nfunction DialogComponent_ng_content_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!title\"]);\n} }\nfunction DialogComponent_ng_content_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 1, [\"*ngIf\", \"!contentTemplate\"]);\n} }\nfunction DialogComponent_7_ng_template_0_Template(rf, ctx) { }\nfunction DialogComponent_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialogComponent_7_ng_template_0_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r3.contentTemplate);\n} }\nfunction DialogComponent_ng_content_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 2, [\"*ngIf\", \"!actions\"]);\n} }\nfunction DialogComponent_kendo_dialog_actions_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-dialog-actions\", 9);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"actions\", ctx_r5.actions)(\"layout\", ctx_r5.actionsLayout);\n} }\nconst _c5 = [[[\"kendo-dialog-titlebar\"]], \"*\", [[\"kendo-dialog-actions\"]]];\nconst _c6 = [\"kendo-dialog-titlebar\", \"*\", \"kendo-dialog-actions\"];\nfunction WindowTitleBarComponent_ng_content_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!template\"]);\n} }\nfunction WindowTitleBarComponent_1_ng_template_0_Template(rf, ctx) { }\nconst _c7 = function (a0) { return { \"$implicit\": a0 }; };\nfunction WindowTitleBarComponent_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowTitleBarComponent_1_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.template)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(2, _c7, ctx_r1.service));\n} }\nfunction WindowComponent_kendo_window_titlebar_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-window-titlebar\", 5)(1, \"div\", 6);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"div\", 7);\n ɵngcc0.ɵɵelement(4, \"button\", 8)(5, \"button\", 9)(6, \"button\", 10)(7, \"button\", 11);\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"template\", ctx_r0.titleBarTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r0.minimizeButtonTitle)(\"aria-label\", ctx_r0.minimizeButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r0.maximizeButtonTitle)(\"aria-label\", ctx_r0.maximizeButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r0.restoreButtonTitle)(\"aria-label\", ctx_r0.restoreButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r0.closeButtonTitle)(\"aria-label\", ctx_r0.closeButtonTitle);\n} }\nfunction WindowComponent_ng_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!showDefaultTitleBar\"]);\n} }\nfunction WindowComponent_div_4_ng_content_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 1, [\"*ngIf\", \"!contentTemplate\"]);\n} }\nfunction WindowComponent_div_4_2_ng_template_0_Template(rf, ctx) { }\nfunction WindowComponent_div_4_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowComponent_div_4_2_ng_template_0_Template, 0, 0, \"ng-template\", 13);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r5.contentTemplate);\n} }\nfunction WindowComponent_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12);\n ɵngcc0.ɵɵtemplate(1, WindowComponent_div_4_ng_content_1_Template, 1, 0, \"ng-content\", 2);\n ɵngcc0.ɵɵtemplate(2, WindowComponent_div_4_2_Template, 1, 1, null, 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"hidden\", ctx_r2.state === \"minimized\" && ctx_r2.keepContent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r2.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.contentTemplate);\n} }\nfunction WindowComponent_ng_template_5_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 15);\n} if (rf & 2) {\n const dir_r8 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"direction\", dir_r8);\n} }\nfunction WindowComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowComponent_ng_template_5_div_0_Template, 1, 1, \"div\", 14);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.resizeDirections);\n} }\nconst _c16 = [[[\"kendo-window-titlebar\"]], \"*\"];\nconst _c17 = [\"kendo-window-titlebar\", \"*\"];\nlet DialogActionsComponent = class DialogActionsComponent {\n constructor(el) {\n this.el = el;\n /**\n * Specifies the possible layout of the action buttons.\n */\n this.layout = 'stretched';\n /**\n * Fires when the user clicks an action button.\n */\n this.action = new EventEmitter();\n this.buttonGroupClassName = true;\n }\n get className() {\n return this.layout === 'stretched';\n }\n /**\n * @hidden\n */\n actionTemplate() {\n return this.actions instanceof TemplateRef;\n }\n /**\n * @hidden\n */\n onButtonClick(action, _e) {\n this.action.emit(action);\n }\n /**\n * @hidden\n */\n buttonClass(action) {\n const classes = ['k-button'];\n if (action.primary) {\n classes.push('k-primary');\n }\n return classes.join(' ');\n }\n};\nDialogActionsComponent.ɵfac = function DialogActionsComponent_Factory(t) { return new (t || DialogActionsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nDialogActionsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DialogActionsComponent, selectors: [[\"kendo-dialog-actions\"]], hostVars: 6, hostBindings: function DialogActionsComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-dialog-buttongroup\", ctx.buttonGroupClassName)(\"k-actions\", ctx.buttonGroupClassName)(\"k-actions-stretched\", ctx.className);\n } }, inputs: { layout: \"layout\", actions: \"actions\" }, outputs: { action: \"action\" }, ngContentSelectors: _c0, decls: 3, vars: 3, consts: [[4, \"ngIf\"], [\"type\", \"button\", 3, \"ngClass\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"type\", \"button\", 3, \"ngClass\", \"click\"], [3, \"ngTemplateOutlet\"]], template: function DialogActionsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, DialogActionsComponent_ng_content_0_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵtemplate(1, DialogActionsComponent_ng_container_1_Template, 2, 1, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(2, DialogActionsComponent_2_Template, 1, 1, null, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actions);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actionTemplate());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.actionTemplate());\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc1.NgClass, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogActionsComponent.prototype, \"actions\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogActionsComponent.prototype, \"layout\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DialogActionsComponent.prototype, \"action\", void 0);\n__decorate([\n HostBinding('class.k-dialog-buttongroup'),\n HostBinding('class.k-actions'),\n __metadata(\"design:type\", Boolean)\n], DialogActionsComponent.prototype, \"buttonGroupClassName\", void 0);\n__decorate([\n HostBinding('class.k-actions-stretched'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialogActionsComponent.prototype, \"className\", null);\nDialogActionsComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef])\n], DialogActionsComponent);\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst DIALOG_LOCALIZATION_SERVICE = new InjectionToken('Dialog LocalizationService');\n\n/**\n * @hidden\n */\nlet TitleBarLocalizationService = class TitleBarLocalizationService extends LocalizationService {\n constructor(prefix, messageService, rtl, dialogLocalization) {\n super(prefix, messageService, rtl);\n this.dialogLocalization = dialogLocalization;\n }\n get(shortKey) {\n if (this.dialogLocalization) {\n return this.dialogLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n};\nTitleBarLocalizationService.ɵfac = function TitleBarLocalizationService_Factory(t) { return new (t || TitleBarLocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(ɵngcc2.MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8), ɵngcc0.ɵɵinject(DIALOG_LOCALIZATION_SERVICE, 8)); };\nTitleBarLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TitleBarLocalizationService, factory: function (t) { return TitleBarLocalizationService.ɵfac(t); } });\nTitleBarLocalizationService = __decorate([\n __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __param(3, Optional()), __param(3, Inject(DIALOG_LOCALIZATION_SERVICE)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean, LocalizationService])\n], TitleBarLocalizationService);\n\n/**\n * Represents the [Kendo UI DialogTitleBar component for Angular]({% slug api_dialog_dialogtitlebarcomponent %}).\n *\n * It is used as part of the Dialog content when the component is created dynamically by using an [Angular service]({% slug service_dialog %}).\n */\nlet DialogTitleBarComponent = class DialogTitleBarComponent {\n constructor(zone, hostElement, localizationService) {\n this.zone = zone;\n this.hostElement = hostElement;\n this.localizationService = localizationService;\n /**\n * Fires when the close button of the title-bar is clicked.\n */\n this.close = new EventEmitter();\n }\n get className() {\n return true;\n }\n get closeButtonTitle() {\n return this.closeTitle || this.localizationService.get('closeTitle');\n }\n ngAfterViewInit() {\n this.zone.onStable.pipe(take(1)).subscribe(() => {\n const element = this.hostElement.nativeElement.querySelector('.k-dialog-title');\n element.setAttribute('id', this.id);\n });\n }\n /**\n * @hidden\n */\n onCloseClick(e) {\n e.preventDefault();\n const eventArgs = new PreventableEvent();\n this.close.emit(eventArgs);\n }\n};\nDialogTitleBarComponent.ɵfac = function DialogTitleBarComponent_Factory(t) { return new (t || DialogTitleBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService, 8)); };\nDialogTitleBarComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DialogTitleBarComponent, selectors: [[\"kendo-dialog-titlebar\"]], hostVars: 4, hostBindings: function DialogTitleBarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-window-titlebar\", ctx.className)(\"k-dialog-titlebar\", ctx.className);\n } }, inputs: { id: \"id\", closeTitle: \"closeTitle\" }, outputs: { close: \"close\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n TitleBarLocalizationService,\n {\n provide: LocalizationService,\n useExisting: TitleBarLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ])], ngContentSelectors: _c0, decls: 6, vars: 2, consts: function () { let i18n_1; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.dialog.closeTitle\n */\n const MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_2 = goog.getMsg(\"Close\");\n i18n_1 = MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_2;\n }\n else {\n i18n_1 = $localize `:kendo.dialog.closeTitle|The title of the close button␟9b2bd34897f127e69e5f02f64692fca98a5a7572␟7499923323865444383:Close`;\n } return [[\"kendoDialogTitleBarLocalizedMessages\", \"\", \"closeTitle\", i18n_1], [1, \"k-window-title\", \"k-dialog-title\"], [1, \"k-window-actions\", \"k-dialog-actions\"], [\"href\", \"#\", \"role\", \"button\", 1, \"k-button\", \"k-flat\", \"k-button-icon\", \"k-window-action\", \"k-dialog-action\", \"k-dialog-close\", 3, \"click\"], [1, \"k-icon\", \"k-i-x\"]]; }, template: function DialogTitleBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"div\", 2)(4, \"a\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function DialogTitleBarComponent_Template_a_click_4_listener($event) { return ctx.onCloseClick($event); });\n ɵngcc0.ɵɵelement(5, \"span\", 4);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵattribute(\"title\", ctx.closeButtonTitle)(\"aria-label\", ctx.closeButtonTitle);\n } }, directives: function () { return [LocalizedMessagesDirective]; }, encapsulation: 2 });\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DialogTitleBarComponent.prototype, \"close\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogTitleBarComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogTitleBarComponent.prototype, \"closeTitle\", void 0);\n__decorate([\n HostBinding('class.k-window-titlebar'),\n HostBinding('class.k-dialog-titlebar'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialogTitleBarComponent.prototype, \"className\", null);\nDialogTitleBarComponent = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [NgZone, ElementRef, LocalizationService])\n], DialogTitleBarComponent);\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-dialog',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1637576271,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isTruthy = (value) => !!value;\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\nconst focusableRegex = /^(?:a|input|select|textarea|button|object)$/i;\n/**\n * @hidden\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"esc\"] = 27] = \"esc\";\n Keys[Keys[\"tab\"] = 9] = \"tab\";\n Keys[Keys[\"enter\"] = 13] = \"enter\";\n Keys[Keys[\"space\"] = 32] = \"space\";\n Keys[Keys[\"ctrl\"] = 17] = \"ctrl\";\n Keys[Keys[\"shift\"] = 16] = \"shift\";\n Keys[Keys[\"left\"] = 37] = \"left\";\n Keys[Keys[\"up\"] = 38] = \"up\";\n Keys[Keys[\"right\"] = 39] = \"right\";\n Keys[Keys[\"down\"] = 40] = \"down\";\n})(Keys || (Keys = {}));\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ESC_KEY = 'k-dialog-wrapper k-dialog-buttongroup k-dialog-action';\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ARROWS = 'k-dialog-buttongroup';\n/**\n * @hidden\n */\nconst WINDOW_CLASSES = 'k-window';\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n return !!(rect.width && rect.height) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst isFocusable = (element, checkVisibility = true) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const validTabIndex = tabIndex !== null && !isNaN(tabIndex) && tabIndex > -1;\n let focusable = false;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled;\n }\n else {\n focusable = validTabIndex;\n }\n return focusable && (!checkVisibility || isVisible(element));\n }\n return false;\n};\n/**\n * @hidden\n */\nconst setHTMLAttributes = (attributes, renderer, element) => {\n for (const attribute in attributes) {\n if (attribute) {\n renderer.setAttribute(element, attribute, attributes[attribute]);\n }\n }\n};\n/**\n * Receives CSS class declarations either as an object, string or array and returns an array of the class names.\n *\n * @hidden\n */\nconst parseCSSClassNames = (value) => {\n if (isObject(value)) {\n return parseObjectClassNames(value);\n }\n if (isString(value)) {\n return parseStringClassNames(value);\n }\n if (Array.isArray(value)) {\n return parseArrayClassNames(value);\n }\n};\nconst parseObjectClassNames = (value) => {\n const classes = [];\n Object.keys(value).forEach(className => {\n const currentClassName = splitStringToArray(className);\n if (value[className] && currentClassName[0]) {\n classes.push(...currentClassName);\n }\n });\n return classes;\n};\nconst parseStringClassNames = (value) => {\n const classes = [];\n const classesArray = splitStringToArray(value);\n classesArray.forEach(className => {\n classes.push(className);\n });\n return classes;\n};\nconst parseArrayClassNames = (value) => {\n const classes = [];\n value.forEach((className) => {\n const current = splitStringToArray(className);\n if (current[0]) {\n classes.push(...current);\n }\n });\n return classes;\n};\n/**\n * @hidden\n */\nconst focusableSelector = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '*[tabindex]',\n '*[contenteditable]'\n].join(',');\n/**\n * @hidden\n */\nconst preventDefault = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\n/**\n * @hidden\n */\nconst RESIZE_DIRECTIONS = ['n', 'e', 's', 'w', 'se', 'sw', 'ne', 'nw'];\n/**\n * @hidden\n */\nconst OFFSET_STYLES = ['top', 'left', 'width', 'height'];\n/**\n * @hidden\n */\nconst isString = (value) => value instanceof String || typeof value === 'string';\n/**\n * @hidden\n */\nconst isObject = (value) => isPresent(value) && !Array.isArray(value) && typeof value === 'object';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === 'number' && isFinite(value);\n/**\n * @hidden\n */\nconst createValueWithUnit = (value) => value + (isNumber(value) ? 'px' : '');\n/**\n * @hidden\n */\nconst splitStringToArray = (value) => value.trim().replace(/\\s+/g, \" \").split(' ');\n\n/**\n * The settings for the Dialog actions when the Dialog is opened through `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogAction {\n}\n/**\n * Indicates that the **Close** button is clicked. Used when the results from\n * the Dialogs that are opened through `DialogService` are filtered\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogCloseResult {\n}\n/**\n * The settings that can be used when the Dialog is opened through `DialogService`.\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogSettings {\n}\n/**\n * Holds references to the object instance and published events of the Dialog.\n * Controls the Dialogs that were opened through the `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogRef {\n}\n\n/**\n * Represents the [Kendo UI Dialog component for Angular]({% slug overview_dialog_dialogs %}).\n */\nlet DialogComponent = class DialogComponent {\n constructor(wrapper, renderer, localization, cdr, ngZone) {\n this.wrapper = wrapper;\n this.renderer = renderer;\n this.cdr = cdr;\n this.ngZone = ngZone;\n /**\n * Specifies the layout of the action buttons in the Dialog.\n * This option is only applicable if the action buttons are specified through the `actions` options.\n *\n * @default 'stretched'\n */\n this.actionsLayout = 'stretched';\n /**\n * @hidden\n */\n this.titleId = null;\n /**\n * @hidden\n */\n this.contentId = null;\n /**\n * Fires when the user clicks an action button of the Dialog.\n * The event is fired only when the action buttons are specified through the `actions` options.\n */\n this.action = new EventEmitter();\n /**\n * Fires when the user clicks the **Close** button of the Dialog or the **ESC** key.\n */\n this.close = new EventEmitter();\n this.tabIndex = 0;\n this.subscriptions = [];\n this.domSubs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscriptions.push(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n this.titleId = this.generateTitleId();\n this.contentId = this.generateContentId();\n }\n /**\n * @hidden\n */\n set htmlAttributes(attributes) {\n setHTMLAttributes(attributes, this.renderer, this.wrapper.nativeElement);\n const el = this.wrapper.nativeElement;\n const dir = el.getAttribute('dir');\n const tIndex = el.getAttribute('tabindex');\n if (this.direction !== dir) {\n this.direction = dir;\n }\n if (this.tabIndex !== tIndex) {\n this.tabIndex = tIndex;\n }\n this._htmlAttributes = attributes;\n }\n get htmlAttributes() {\n return this._htmlAttributes;\n }\n /**\n * @hidden\n */\n set cssClass(classes) {\n this.setServiceClasses(this._cssClass, classes);\n this._cssClass = classes;\n }\n get cssClass() {\n return this._cssClass;\n }\n get dir() {\n return this.direction;\n }\n ngAfterContentInit() {\n this.bubble('close', this.titlebarContent.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-describedby', this.contentId);\n if (this.titlebarContent.first) {\n this.titlebarContent.first.id = this.titleId;\n }\n else {\n this.subscriptions.push(this.titlebarContent.changes.subscribe(() => {\n if (isPresent(this.titlebarContent.first)) {\n this.titlebarContent.first.id = this.titleId;\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.bubble('close', this.titlebarContent.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n });\n }\n }));\n }\n }\n ngAfterViewInit() {\n this.handleInitialFocus();\n this.bubble('close', this.titlebarView.first);\n this.bubble('action', this.actionsView);\n if (this.titlebarView.first || this.titlebarContent.first) {\n //Needed for Dialogs created via service\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n }\n else {\n this.subscriptions.push(this.titlebarView.changes.subscribe(() => {\n if (isPresent(this.titlebarView.first)) {\n this.titlebarView.first.id = this.titleId;\n this.ngZone.onStable.pipe(take(1)).subscribe(() => {\n this.bubble('close', this.titlebarView.first);\n this.renderer.setAttribute(this.wrapper.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n });\n }\n }));\n }\n this.initDomEvents();\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper.nativeElement, 'title');\n this.cdr.detectChanges();\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.subscriptions = [];\n if (this.domSubs) {\n this.domSubs.unsubscribe();\n }\n }\n /**\n * Focuses the wrapper of the Dialog component.\n */\n focus() {\n const wrapper = this.wrapper.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n initDomEvents() {\n if (!this.wrapper) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubs.add(this.renderer.listen(this.wrapper.nativeElement, 'keydown', (ev) => {\n this.onKeyDown(ev);\n }));\n });\n }\n onKeyDown(event) {\n const target = event.target;\n const parent = target.parentElement;\n if (hasClasses(target, DIALOG_ELEMENTS_HANDLING_ESC_KEY) || hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ESC_KEY)) {\n if (event.keyCode === Keys.esc) {\n this.ngZone.run(() => {\n this.close.emit(new DialogCloseResult());\n });\n }\n }\n if (hasClasses(target, 'k-button') && hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ARROWS) &&\n (event.keyCode === Keys.left || event.keyCode === Keys.right)) {\n this.ngZone.run(() => {\n this.handleActionButtonFocus(parent, event.keyCode);\n });\n }\n if (event.keyCode === Keys.tab) {\n this.ngZone.run(() => {\n this.keepFocusWithinComponent(target, event);\n });\n }\n }\n setServiceClasses(prevValue, value) {\n const el = this.wrapper.nativeElement;\n if (prevValue) {\n parseCSSClassNames(prevValue).forEach(className => {\n this.renderer.removeClass(el, className);\n });\n }\n if (value) {\n parseCSSClassNames(value).forEach(className => {\n this.renderer.addClass(el, className);\n });\n }\n }\n /**\n * @hidden\n */\n handleInitialFocus() {\n const wrapper = this.wrapper.nativeElement;\n const primaryButton = wrapper.querySelector('.k-primary');\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else if (this.shouldFocusPrimary(primaryButton)) {\n primaryButton.focus();\n }\n else {\n wrapper.focus();\n }\n }\n /**\n * @hidden\n */\n handleActionButtonFocus(parent, key) {\n const focusableActionButtons = this.getAllFocusableChildren(parent);\n for (let i = 0; i < focusableActionButtons.length; i++) {\n const current = focusableActionButtons[i];\n if (current === document.activeElement) {\n if (key === Keys.left && i > 0) {\n focusableActionButtons[i - 1].focus();\n break;\n }\n if (key === Keys.right && i < focusableActionButtons.length - 1) {\n focusableActionButtons[i + 1].focus();\n break;\n }\n }\n }\n }\n /**\n * @hidden\n */\n keepFocusWithinComponent(target, event) {\n const wrapper = this.wrapper.nativeElement;\n const [firstFocusable, lastFocusable] = this.getFirstAndLastFocusable(wrapper);\n const tabAfterLastFocusable = !event.shiftKey && target === lastFocusable;\n const shiftTabAfterFirstFocusable = event.shiftKey && target === firstFocusable;\n if (tabAfterLastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n if (shiftTabAfterFirstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n }\n }\n /**\n * @hidden\n */\n shouldFocusPrimary(el) {\n return isPresent(el) && isFocusable(el);\n }\n /**\n * @hidden\n */\n getAllFocusableChildren(parent) {\n return parent.querySelectorAll(focusableSelector);\n }\n /**\n * @hidden\n */\n getFirstAndLastFocusable(parent) {\n const all = this.getAllFocusableChildren(parent);\n const firstFocusable = all.length > 0 ? all[0] : parent;\n const lastFocusable = all.length > 0 ? all[all.length - 1] : parent;\n return [firstFocusable, lastFocusable];\n }\n /**\n * @hidden\n */\n generateTitleId() {\n return 'kendo-dialog-title-' + Math.ceil(Math.random() * 1000000).toString();\n }\n /**\n * @hidden\n */\n generateContentId() {\n return 'kendo-dialog-content-' + Math.ceil(Math.random() * 1000000).toString();\n }\n get wrapperClass() {\n return true;\n }\n get styles() {\n const styles = {};\n if (this.width) {\n styles.width = createValueWithUnit(this.width);\n }\n if (this.height) {\n styles.height = createValueWithUnit(this.height);\n }\n if (this.minWidth) {\n styles.minWidth = createValueWithUnit(this.minWidth);\n }\n if (this.maxWidth) {\n styles.maxWidth = createValueWithUnit(this.maxWidth);\n }\n if (this.minHeight) {\n styles.minHeight = createValueWithUnit(this.minHeight);\n }\n if (this.maxHeight) {\n styles.maxHeight = createValueWithUnit(this.maxHeight);\n }\n return styles;\n }\n bubble(eventName, component) {\n if (component) {\n const emit = e => this[eventName].emit(e);\n const s = component[eventName].subscribe(emit);\n this.subscriptions.push(s);\n }\n }\n};\nDialogComponent.ɵfac = function DialogComponent_Factory(t) { return new (t || DialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DialogComponent, selectors: [[\"kendo-dialog\"]], contentQueries: function DialogComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DialogTitleBarComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titlebarContent = _t);\n } }, viewQuery: function DialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DialogActionsComponent, 5);\n ɵngcc0.ɵɵviewQuery(DialogTitleBarComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.actionsView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titlebarView = _t);\n } }, hostVars: 4, hostBindings: function DialogComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-dialog-wrapper\", ctx.wrapperClass);\n } }, inputs: { actionsLayout: \"actionsLayout\", actions: \"actions\", autoFocusedElement: \"autoFocusedElement\", title: \"title\", width: \"width\", minWidth: \"minWidth\", maxWidth: \"maxWidth\", height: \"height\", minHeight: \"minHeight\", maxHeight: \"maxHeight\" }, outputs: { action: \"action\", close: \"close\" }, exportAs: [\"kendoDialog\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ])], ngContentSelectors: _c6, decls: 10, vars: 10, consts: function () { let i18n_3; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.dialog.closeTitle\n */\n const MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_4 = goog.getMsg(\"Close\");\n i18n_3 = MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_4;\n }\n else {\n i18n_3 = $localize `:kendo.dialog.closeTitle|The title of the close button␟9b2bd34897f127e69e5f02f64692fca98a5a7572␟7499923323865444383:Close`;\n } return [[\"kendoDialogLocalizedMessages\", \"\", \"closeTitle\", i18n_3], [1, \"k-overlay\"], [\"role\", \"dialog\", \"aria-modal\", \"true\", 1, \"k-window\", \"k-dialog\", 3, \"ngStyle\"], [3, \"closeTitle\", \"id\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"k-content\", \"k-window-content\", \"k-dialog-content\", 3, \"id\"], [3, \"actions\", \"layout\", 4, \"ngIf\"], [3, \"closeTitle\", \"id\"], [3, \"ngTemplateOutlet\"], [3, \"actions\", \"layout\"]]; }, template: function DialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c5);\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵelement(1, \"div\", 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵtemplate(3, DialogComponent_kendo_dialog_titlebar_3_Template, 2, 3, \"kendo-dialog-titlebar\", 3);\n ɵngcc0.ɵɵtemplate(4, DialogComponent_ng_content_4_Template, 1, 0, \"ng-content\", 4);\n ɵngcc0.ɵɵelementStart(5, \"div\", 5);\n ɵngcc0.ɵɵtemplate(6, DialogComponent_ng_content_6_Template, 1, 0, \"ng-content\", 4);\n ɵngcc0.ɵɵtemplate(7, DialogComponent_7_Template, 1, 1, null, 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, DialogComponent_ng_content_8_Template, 1, 0, \"ng-content\", 4);\n ɵngcc0.ɵɵtemplate(9, DialogComponent_kendo_dialog_actions_9_Template, 1, 2, \"kendo-dialog-actions\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"@overlayAppear\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.styles)(\"@dialogSlideInAppear\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.contentId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actions);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.actions);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc1.NgStyle, ɵngcc1.NgIf, DialogTitleBarComponent, ɵngcc1.NgTemplateOutlet, DialogActionsComponent]; }, encapsulation: 2, data: { animation: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ]),\n trigger('dialogSlideInAppear', [\n state('in', style({ transform: 'translate(0, 0)' })),\n transition('void => *', [style({ transform: 'translate(0, -10%)' }), animate('.3s cubic-bezier(.2, 1, .2, 1)')])\n ])\n ] } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], DialogComponent.prototype, \"actions\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogComponent.prototype, \"actionsLayout\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogComponent.prototype, \"autoFocusedElement\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DialogComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"minWidth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"maxWidth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"minHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DialogComponent.prototype, \"maxHeight\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DialogComponent.prototype, \"action\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DialogComponent.prototype, \"close\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], DialogComponent.prototype, \"dir\", null);\n__decorate([\n HostBinding('attr.tabIndex'),\n __metadata(\"design:type\", Number)\n], DialogComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n ContentChildren(DialogTitleBarComponent, { descendants: false }),\n __metadata(\"design:type\", QueryList)\n], DialogComponent.prototype, \"titlebarContent\", void 0);\n__decorate([\n ViewChildren(DialogTitleBarComponent),\n __metadata(\"design:type\", QueryList)\n], DialogComponent.prototype, \"titlebarView\", void 0);\n__decorate([\n ViewChild(DialogActionsComponent, { static: false }),\n __metadata(\"design:type\", DialogActionsComponent)\n], DialogComponent.prototype, \"actionsView\", void 0);\n__decorate([\n HostBinding('class.k-dialog-wrapper'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DialogComponent.prototype, \"wrapperClass\", null);\nDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n LocalizationService,\n ChangeDetectorRef,\n NgZone])\n], DialogComponent);\n\n/**\n * The base class which will be extended by a component that is provided as content through `content`\n * ([see example]({% slug service_dialog %}#toc-passing-title-content-and-actions-as-a-single-component)).\n */\nclass DialogContentBase {\n constructor(dialog) {\n this.dialog = dialog;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n if (this.dialogTitleBar) {\n // when opening component inside dialog with service AND the component has defined its own titlebar\n this.dialogTitleBar.close.pipe(filter((e) => !e.isDefaultPrevented())).subscribe(() => {\n this.dialog.close();\n });\n }\n if (this.dialogActions) {\n if (this.dialogActions.actions) {\n this.dialogActions.action.subscribe(action => this.dialog.dialog.instance.action.emit(action));\n }\n }\n }\n}\nDialogContentBase.ɵfac = function DialogContentBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nDialogContentBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DialogContentBase, viewQuery: function DialogContentBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DialogTitleBarComponent, 5);\n ɵngcc0.ɵɵviewQuery(DialogActionsComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogTitleBar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogActions = _t.first);\n } } });\n__decorate([\n ViewChild(DialogTitleBarComponent, { static: false }),\n __metadata(\"design:type\", DialogTitleBarComponent)\n], DialogContentBase.prototype, \"dialogTitleBar\", void 0);\n__decorate([\n ViewChild(DialogActionsComponent, { static: false }),\n __metadata(\"design:type\", DialogActionsComponent)\n], DialogContentBase.prototype, \"dialogActions\", void 0);\n\nvar DialogContainerService_1;\n/**\n * @hidden\n */\nlet DialogContainerService = DialogContainerService_1 = class DialogContainerService {\n set container(container) {\n DialogContainerService_1.container = container;\n }\n get container() {\n return DialogContainerService_1.container;\n }\n};\nDialogContainerService.ɵfac = function DialogContainerService_Factory(t) { return new (t || DialogContainerService)(); };\nDialogContainerService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DialogContainerService, factory: function (t) { return DialogContainerService.ɵfac(t); } });\nDialogContainerService.container = null;\n\nconst isNotComponent = (component) => isString(component) || component instanceof TemplateRef;\nclass DialogInjector {\n constructor(getDialogRef, parentInjector) {\n this.getDialogRef = getDialogRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === DialogRef) {\n return this.getDialogRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Dialog windows dynamically\n * ([see example]({% slug service_dialog %})).\n */\nlet DialogService = class DialogService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Dialog window. Requires an element in the application that uses the\n * [`kendoDialogContainer`]({% slug api_dialog_dialogcontainerdirective %}) directive.\n * Created Dialogs will be mounted in the DOM directly after that element.\n *\n * @param {DialogAction} options - The options that define the Dialog.\n * @returns {DialogRef} - A reference to the Dialog object and the convenience properties.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private dialogService: DialogService ) {}\n *\n * public open() {\n * var dialog = this.dialogService.open({\n * title: \"Please confirm\",\n * content: \"Are you sure?\",\n * actions: [\n * { text: \"No\" },\n * { text: \"Yes\", primary: true }\n * ]\n * });\n *\n * dialog.result.subscribe((result) => {\n * if (result instanceof DialogCloseResult) {\n * console.log(\"close\");\n * } else {\n * console.log(\"action\", result);\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(options) {\n const factory = this.resolver.resolveComponentFactory(DialogComponent);\n const container = options.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`\nCannot attach dialog to the page.\nAdd an element that uses the kendoDialogContainer directive, or set the 'appendTo' property.\nSee https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/.\n `);\n }\n // create DialogRef to (1) pass as result, (2) provide through injector\n const dialogRef = {\n close: () => {\n /* noop */\n },\n content: null,\n dialog: null,\n result: null\n };\n return this.initializeDialog(options.content, factory, container, dialogRef, options);\n }\n initializeDialog(component, factory, container, dialogRef, options) {\n const content = this.contentFrom(component, container, dialogRef);\n const dialog = container.createComponent(factory, undefined, undefined, content.nodes);\n dialogRef.dialog = dialog;\n dialog.changeDetectorRef.markForCheck();\n // copy @Input options to dialog instance\n this.applyOptions(dialog.instance, options);\n // create close handler and result stream\n const apiClose = new Subject();\n const close = (e) => {\n if (e instanceof PreventableEvent) {\n e = new DialogCloseResult();\n }\n apiClose.next(e || new DialogCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n dialog.destroy();\n };\n const result = merge(apiClose, \n // triggered when the titlebar or actions are defined in DialogSettings\n merge(dialog.instance.close, dialog.instance.action).pipe(map(e => (e instanceof PreventableEvent ? new DialogCloseResult() : e)), filter(e => {\n if (options.preventAction) {\n // add dialogRef only when using component\n const dialogRefParameter = isNotComponent(component) ? undefined : dialogRef;\n return !options.preventAction(e, dialogRefParameter);\n }\n return true;\n }))).pipe(take(1), \n // Takes care for multiple subscriptions:\n // We subscribe internaly and the user may subscribe to get a close result - dialog.result.subscribe().\n // This causes multiple subscriptions to the same source and thus multiple emissions. share() solves that.\n share());\n result.subscribe(close);\n dialogRef.close = close;\n dialogRef.result = result;\n if (component && isDevMode()) {\n const hasContentTitle = content.nodes[0] && content.nodes[0].length > 0;\n const hasContentActions = content.nodes[2] && content.nodes[2].length > 0;\n const multipleTitles = options.title && hasContentTitle;\n const multipleActions = options.actions && hasContentActions;\n if (component.prototype instanceof DialogContentBase) {\n // content component extends DialogContentBase\n if (multipleTitles || multipleActions) {\n console.warn(`\n Multiple Title and/or Actions configurations detected.\n When using a component as content, provide the title and actions either in the component's markup\n or via the title and actions properties of the DialogSettings object, but not both.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n else {\n if (hasContentTitle || hasContentActions) {\n console.warn(`\n When Title and/or Actions markup is provided in content component's template,\n the component needs to inherit the DialogContentBase class to ensure that close and result events are properly hooked.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n }\n return dialogRef;\n }\n applyOptions(instance, options) {\n instance.title = options.title;\n instance.actions = options.actions;\n instance.actionsLayout = options.actionsLayout || 'stretched';\n instance.width = options.width;\n instance.minWidth = options.minWidth;\n instance.maxWidth = options.maxWidth;\n instance.height = options.height;\n instance.minHeight = options.minHeight;\n instance.maxHeight = options.maxHeight;\n instance.autoFocusedElement = options.autoFocusedElement;\n instance.closeTitle = options.closeTitle;\n instance.cssClass = options.cssClass;\n instance.htmlAttributes = options.htmlAttributes;\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n }\n contentFrom(content, container, dialogRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let titleNodes = [];\n let actionNodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n // Component\n const injector = new DialogInjector(() => dialogRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n titleNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-titlebar'));\n nodes = [componentRef.location.nativeElement];\n actionNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-actions'));\n dialogRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n titleNodes,\n nodes,\n actionNodes // \n ]\n };\n }\n};\nDialogService.ɵfac = function DialogService_Factory(t) { return new (t || DialogService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(DialogContainerService)); };\nDialogService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DialogService, factory: function (t) { return DialogService.ɵfac(t); } });\nDialogService = __decorate([ __param(1, Inject(DialogContainerService)),\n __metadata(\"design:paramtypes\", [ComponentFactoryResolver,\n DialogContainerService])\n], DialogService);\n\n/**\n * @hidden\n */\nlet newZIndex = 10002;\n/**\n * @hidden\n */\nconst DEFAULT_OPTIONS = {\n draggable: true,\n height: null,\n left: null,\n minHeight: 100,\n minWidth: 120,\n position: 'absolute',\n resizable: true,\n state: 'default',\n top: null,\n width: null\n};\n/**\n * @hidden\n */\nconst createMoveStream = (el, ev) => mouseDown => {\n return el.kendoDrag\n .pipe(takeUntil(el.kendoRelease.pipe(tap(() => { ev.emit(); }))), map(({ pageX, pageY }) => ({\n originalX: mouseDown.pageX,\n originalY: mouseDown.pageY,\n pageX,\n pageY\n })));\n};\n/**\n * @hidden\n */\nlet DragResizeService = class DragResizeService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.close = new EventEmitter();\n this.focus = new EventEmitter();\n this.change = new EventEmitter();\n this.stateChange = new EventEmitter();\n this.dragStart = new EventEmitter();\n this.dragEnd = new EventEmitter();\n this.resizeStart = new EventEmitter();\n this.resizeEnd = new EventEmitter();\n this.options = Object.assign({}, DEFAULT_OPTIONS);\n this.lastAction = null;\n this.subscriptions = new Subscription();\n this.dragSubscription = new Subscription();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.dragSubscription) {\n this.dragSubscription.unsubscribe();\n }\n }\n init(el) {\n const state$$1 = this.options.state;\n let options = this.options;\n this.window = el;\n if (state$$1 !== 'default') {\n this.restoreOptions = Object.assign({}, options);\n }\n if (state$$1 === 'minimized') {\n options.height = 0;\n options.minHeight = 0;\n }\n if (state$$1 === 'maximized') {\n options.position = 'fixed';\n }\n }\n onDrag(el) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startPosition;\n let dragStarted;\n this.dragSubscription = el.kendoPress\n .pipe(tap((ev) => {\n if (!ev.isTouch) {\n preventDefault(ev);\n }\n this.focus.emit();\n startPosition = this.currentPosition();\n dragStarted = false;\n }), switchMap(createMoveStream(el, this.dragEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!dragStarted) {\n this.ensureWidth();\n this.dragStart.emit();\n dragStarted = true;\n }\n this.handleDrag({\n originalX, originalY,\n pageX, pageY, startPosition\n });\n });\n }));\n }\n handleDrag({ originalX, originalY, pageX, pageY, startPosition }) {\n this.options.left = startPosition.x + pageX - originalX;\n this.options.top = startPosition.y + pageY - originalY;\n if (this.options.state === 'minimized' && isPresent(this.restoreOptions)) {\n this.restoreOptions.left = this.options.left;\n this.restoreOptions.top = this.options.top;\n }\n this.change.emit({\n left: startPosition.x + pageX - originalX,\n top: startPosition.y + pageY - originalY\n });\n }\n onResize(handle, direction) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startOffsetAndPosition;\n let resizeStarted = false;\n handle.kendoPress.pipe(tap((ev) => {\n preventDefault(ev);\n this.focus.emit();\n startOffsetAndPosition = this.currentOffsetAndPosition();\n resizeStarted = false;\n }), switchMap(createMoveStream(handle, this.resizeEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!resizeStarted) {\n this.resizeStart.emit(direction);\n resizeStarted = true;\n }\n let deltaX = pageX - originalX;\n let deltaY = pageY - originalY;\n this.handleResize(startOffsetAndPosition, direction, deltaX, deltaY);\n });\n }));\n }\n handleResize(initial, dir, deltaX, deltaY) {\n const old = this.options;\n let ev = {};\n if (dir.indexOf('e') >= 0) {\n const newWidth = initial.width + deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth) {\n ev.width = newWidth;\n }\n }\n if (dir.indexOf('n') >= 0) {\n const newHeight = initial.height - deltaY;\n const newTop = initial.y + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight && newTop !== old.top) {\n ev.height = newHeight;\n ev.top = newTop;\n }\n }\n if (dir.indexOf('s') >= 0) {\n const newHeight = initial.height + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight) {\n ev.height = newHeight;\n }\n }\n if (dir.indexOf('w') >= 0) {\n const newLeft = initial.x + deltaX;\n const newWidth = initial.width - deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth && newLeft !== old.left) {\n ev.width = newWidth;\n ev.left = newLeft;\n }\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.options[style$$1] = ev[style$$1];\n }\n });\n this.change.emit(ev);\n }\n }\n restoreAction() {\n this.lastAction = 'restore';\n this.defaultState();\n }\n defaultState() {\n if (isPresent(this.restoreOptions)) {\n this.options = Object.assign({}, this.restoreOptions);\n }\n this.options.state = 'default';\n this.stateChange.emit('default');\n }\n storeOptions() {\n this.restoreOptions = Object.assign({}, this.options);\n }\n maximizeAction() {\n this.lastAction = 'maximize';\n this.maximizeState();\n }\n maximizeState() {\n this.storeOptions();\n const wnd = this.windowViewPort;\n this.options = Object.assign({}, this.options, {\n height: wnd.height,\n left: 0,\n position: 'fixed',\n state: 'maximized',\n top: 0,\n width: wnd.width\n });\n this.stateChange.emit('maximized');\n }\n minimizeAction() {\n this.lastAction = 'minimize';\n this.minimizeState();\n }\n minimizeState() {\n this.storeOptions();\n this.options = Object.assign({}, this.options, {\n height: null,\n minHeight: 0,\n state: 'minimized'\n });\n this.stateChange.emit('minimized');\n }\n /**\n * Handles manual changes of the 'state' property.\n * Required to distinguish them from action clicks.\n */\n applyManualState() {\n const state$$1 = this.options.state;\n switch (state$$1) {\n case 'default':\n this.clearHeight();\n this.defaultState();\n break;\n case 'maximized':\n this.clearHeight();\n this.maximizeState();\n break;\n case 'minimized':\n this.minimizeState();\n break;\n default:\n break;\n }\n }\n closeAction() {\n this.close.emit();\n }\n ensureWidth() {\n const windowOffset = offset(this.window.nativeElement);\n if (!isPresent(this.options.width)) {\n this.options.width = windowOffset.width;\n this.change.emit({ width: windowOffset.width });\n }\n }\n clearHeight() {\n if (this.options.height === 0) {\n delete this.options.height;\n }\n if (this.options.minHeight === 0) {\n delete this.options.minHeight;\n }\n }\n center() {\n if (this.options.state === 'maximized') {\n return;\n }\n let scroll = scrollPosition(this.window.nativeElement);\n let wnd = this.windowViewPort;\n let wrapper = offset(this.window.nativeElement);\n let ev = {};\n if (!isPresent(this.options.left)) {\n this.options.left = scroll.x + Math.max(0, (wnd.width - wrapper.width) / 2);\n ev.left = this.options.left;\n }\n if (!isPresent(this.options.top)) {\n this.options.top = scroll.y + Math.max(0, (wnd.height - wrapper.height) / 2);\n ev.top = this.options.top;\n }\n this.change.emit(ev);\n }\n currentOffsetAndPosition() {\n const o = this.options;\n const off = offset(this.window.nativeElement);\n return Object.assign({}, this.currentPosition(), {\n height: o.height ? o.height : off.height,\n width: o.width ? o.width : off.width\n });\n }\n currentPosition() {\n const o = this.options;\n if (!o.top || !o.left) {\n this.setPosition();\n }\n return {\n x: this.options.left,\n y: this.options.top\n };\n }\n setPosition() {\n const wrapper = positionWithScroll(this.window.nativeElement, getDocumentElement(this.window.nativeElement));\n this.options.left = wrapper.left;\n this.options.top = wrapper.top;\n }\n setRestoreOption(style$$1, value) {\n if (isPresent(this.restoreOptions)) {\n this.restoreOptions[style$$1] = value;\n }\n }\n get nextPossibleZIndex() {\n return newZIndex;\n }\n get nextZIndex() {\n return newZIndex++;\n }\n get windowViewPort() {\n return getWindowViewPort(this.window.nativeElement);\n }\n};\nDragResizeService.ɵfac = function DragResizeService_Factory(t) { return new (t || DragResizeService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nDragResizeService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DragResizeService, factory: function (t) { return DragResizeService.ɵfac(t); } });\nDragResizeService = __decorate([ __metadata(\"design:paramtypes\", [NgZone])\n], DragResizeService);\n\n/**\n * @hidden\n */\nlet ResizeHandleDirective = class ResizeHandleDirective {\n constructor(draggable, el, renderer, service) {\n this.draggable = draggable;\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.subscriptions = new Subscription();\n }\n get hostClass() {\n return true;\n }\n ngOnInit() {\n this.setDisplay();\n this.renderer.addClass(this.el.nativeElement, 'k-resize-' + this.direction);\n this.subscriptions.add(of(this.draggable).subscribe(handle => {\n this.service.onResize(handle, this.direction);\n }));\n this.subscriptions.add(this.service.resizeStart.subscribe((dir) => {\n if (dir !== this.direction) {\n this.setDisplay('none');\n }\n }));\n this.subscriptions.add(this.service.dragStart.subscribe(() => {\n this.setDisplay('none');\n }));\n this.subscriptions.add(merge(this.service.resizeEnd, this.service.dragEnd).subscribe(() => {\n this.setDisplay('block');\n }));\n this.subscriptions.add(this.service.stateChange.subscribe((state$$1) => {\n this.setDisplay(state$$1 === 'default' ? 'block' : 'none');\n }));\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n setDisplay(value = 'block') {\n this.renderer.setStyle(this.el.nativeElement, 'display', this.service.options.state === 'default' ? value : 'none');\n }\n};\nResizeHandleDirective.ɵfac = function ResizeHandleDirective_Factory(t) { return new (t || ResizeHandleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc3.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService)); };\nResizeHandleDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ResizeHandleDirective, selectors: [[\"\", \"kendoWindowResizeHandle\", \"\"]], hostVars: 2, hostBindings: function ResizeHandleDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-resize-handle\", ctx.hostClass);\n } }, inputs: { direction: \"direction\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ResizeHandleDirective.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-resize-handle'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ResizeHandleDirective.prototype, \"hostClass\", null);\nResizeHandleDirective = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [DraggableDirective,\n ElementRef,\n Renderer2,\n DragResizeService])\n], ResizeHandleDirective);\n\nlet WindowTitleBarComponent = class WindowTitleBarComponent {\n constructor(el, service, ngZone) {\n this.el = el;\n this.ngZone = ngZone;\n this.service = service;\n }\n ngOnInit() {\n this.dragDirective = new DraggableDirective(this.el, this.ngZone);\n this.dragDirective.ngOnInit();\n if (this.isDraggable) {\n this.subscribeDrag();\n }\n this.subscribeStateChange();\n }\n ngOnDestroy() {\n this.dragDirective.ngOnDestroy();\n this.unsubscribeDrag();\n this.unsubscribeState();\n }\n /**\n * @hidden\n */\n subscribeDrag() {\n this.unsubscribeDrag();\n this.dragSubscription = of(this.dragDirective).subscribe(titleBar => {\n this.service.onDrag(titleBar);\n });\n }\n /**\n * @hidden\n */\n subscribeStateChange() {\n this.stateSubscription = this.service.stateChange.subscribe((state$$1) => {\n if (this.service.options.draggable) {\n if (state$$1 === 'maximized') {\n this.unsubscribeDrag();\n }\n else {\n this.subscribeDrag();\n }\n }\n });\n }\n /**\n * @hidden\n */\n unsubscribeDrag() {\n if (this.dragSubscription) {\n this.service.dragSubscription.unsubscribe();\n this.dragSubscription.unsubscribe();\n this.dragSubscription = null;\n }\n }\n /**\n * @hidden\n */\n unsubscribeState() {\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n this.stateSubscription = null;\n }\n }\n get className() {\n return true;\n }\n get touchAction() {\n if (this.isDraggable) {\n return 'none';\n }\n }\n /**\n * @hidden\n */\n handle(ev) {\n const target = ev.target;\n const state$$1 = this.service.options.state;\n if (!hasClasses(target, 'k-icon') && !isFocusable(target, false) && this.service.options.resizable) {\n if (state$$1 === 'default') {\n this.service.maximizeAction();\n }\n else if (state$$1 === 'maximized') {\n this.service.restoreAction();\n }\n }\n }\n get isDraggable() {\n const options = this.service.options;\n return options.draggable && options.state !== 'maximized';\n }\n};\nWindowTitleBarComponent.ɵfac = function WindowTitleBarComponent_Factory(t) { return new (t || WindowTitleBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragResizeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowTitleBarComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: WindowTitleBarComponent, selectors: [[\"kendo-window-titlebar\"]], hostVars: 6, hostBindings: function WindowTitleBarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"dblclick\", function WindowTitleBarComponent_dblclick_HostBindingHandler($event) { return ctx.handle($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.touchAction);\n ɵngcc0.ɵɵclassProp(\"k-window-titlebar\", ctx.className)(\"k-dialog-titlebar\", ctx.className);\n } }, inputs: { template: \"template\" }, ngContentSelectors: _c0, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function WindowTitleBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, WindowTitleBarComponent_ng_content_0_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵtemplate(1, WindowTitleBarComponent_1_Template, 1, 4, null, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], WindowTitleBarComponent.prototype, \"template\", void 0);\n__decorate([\n HostBinding('class.k-window-titlebar'),\n HostBinding('class.k-dialog-titlebar'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], WindowTitleBarComponent.prototype, \"className\", null);\n__decorate([\n HostBinding('style.touch-action'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowTitleBarComponent.prototype, \"touchAction\", null);\n__decorate([\n HostListener('dblclick', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], WindowTitleBarComponent.prototype, \"handle\", null);\nWindowTitleBarComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef, DragResizeService, NgZone])\n], WindowTitleBarComponent);\n\n/**\n * @hidden\n */\nlet NavigationService = class NavigationService {\n constructor(window, ngZone) {\n this.window = window;\n this.ngZone = ngZone;\n }\n process(ev) {\n const key = ev.keyCode;\n switch (key) {\n case Keys.up:\n case Keys.down:\n case Keys.left:\n case Keys.right: {\n ev.preventDefault();\n this.ngZone.run(() => {\n this.handleArrow(key, ev);\n });\n break;\n }\n case Keys.esc:\n this.ngZone.run(() => {\n this.handleEscape();\n });\n break;\n default:\n break;\n }\n }\n handleArrow(key, ev) {\n const options = this.window.options;\n if (ev.altKey) {\n this.handleStateChange(key, options.state);\n return;\n }\n if ((ev.ctrlKey || ev.metaKey) && options.state === 'default') {\n this.handleResize(key);\n }\n else {\n this.handleDrag(key);\n }\n }\n handleEscape() {\n this.window.closeAction();\n }\n handleDrag(key) {\n let options = this.window.options;\n if (!options.draggable) {\n return;\n }\n const offset$$1 = this.window.currentOffsetAndPosition();\n let restoreOptions = this.window.restoreOptions;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n ev.left = offset$$1.x + delta;\n options.left = ev.left;\n break;\n }\n case Keys.up:\n case Keys.down: {\n ev.top = offset$$1.y + delta;\n options.top = ev.top;\n break;\n }\n default:\n break;\n }\n if (options.state === 'minimized' && isPresent(restoreOptions)) {\n restoreOptions.left = options.left;\n restoreOptions.top = options.top;\n }\n this.window.change.emit(ev);\n }\n handleResize(key) {\n const options = this.window.options;\n if (!options.resizable) {\n return;\n }\n const offset$$1 = this.window.currentOffsetAndPosition();\n let newWidth;\n let newHeight;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n newWidth = offset$$1.width + delta;\n if (newWidth !== options.width && newWidth >= options.minWidth) {\n ev.width = newWidth;\n }\n break;\n }\n case Keys.up:\n case Keys.down: {\n newHeight = offset$$1.height + delta;\n if (newHeight !== options.height && newHeight >= options.minHeight) {\n ev.height = newHeight;\n }\n break;\n }\n default:\n break;\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.window.options[style$$1] = ev[style$$1];\n }\n });\n this.window.change.emit(ev);\n }\n }\n handleStateChange(key, state$$1) {\n if ((state$$1 === 'minimized' && key === Keys.up) ||\n (state$$1 === 'maximized' && key === Keys.down)) {\n this.window.restoreAction();\n return;\n }\n if (state$$1 === 'default') {\n if (key === Keys.up) {\n this.window.maximizeAction();\n }\n else if (key === Keys.down) {\n this.window.minimizeAction();\n }\n }\n }\n};\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(DragResizeService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nNavigationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: function (t) { return NavigationService.ɵfac(t); } });\nNavigationService = __decorate([ __metadata(\"design:paramtypes\", [DragResizeService,\n NgZone])\n], NavigationService);\n\n/**\n * Represents the [Kendo UI Window component for Angular]({% slug overview_window_dialogs %}).\n */\nlet WindowComponent = class WindowComponent {\n constructor(el, renderer, service, navigation, ngZone, localization) {\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.navigation = navigation;\n this.ngZone = ngZone;\n this.localization = localization;\n /**\n * Specifies if the content of the component is persisted in the DOM when minimized.\n * @default false\n */\n this.keepContent = false;\n /**\n * Fires when the user starts to move the Window.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the Window was moved by the user.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires when the user starts to resize the Window.\n */\n this.resizeStart = new EventEmitter();\n /**\n * Fires when the Window was resized by the user.\n */\n this.resizeEnd = new EventEmitter();\n /**\n * Fires when the user closes the Window.\n */\n this.close = new EventEmitter();\n /**\n * Fires when the `width` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new width. Allows a two-way binding of the `width` property.\n */\n this.widthChange = new EventEmitter();\n /**\n * Fires when the `height` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new height. Allows a two-way binding of the `height` property.\n */\n this.heightChange = new EventEmitter();\n /**\n * Fires when the `top` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new top offset. Allows a two-way binding of the `top` property.\n */\n this.topChange = new EventEmitter();\n /**\n * Fires when the `left` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new left offset. Allows a two-way binding of the `left` property.\n */\n this.leftChange = new EventEmitter();\n /**\n * Fires when the `state` property of the component was updated. The event data contains the new state. Allows a\n * two-way binding of the `state` property.\n */\n this.stateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.messages = {};\n this.tabIndex = 0;\n this.draged = false;\n this.resized = false;\n this.windowSubscription = new Subscription();\n this.domSubs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = this.localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = this.localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.resizeDirections = RESIZE_DIRECTIONS;\n this.subscribeEvents();\n }\n /**\n * Specifies whether the user will be able to drag the component.\n * @default true\n */\n set draggable(value) {\n this.options.draggable = value;\n }\n get draggable() {\n return this.options.draggable;\n }\n /**\n * Specifies whether the user will be able to resize the component.\n * @default true\n */\n set resizable(value) {\n this.options.resizable = value;\n }\n get resizable() {\n return this.options.resizable;\n }\n /**\n * @hidden\n */\n set cssClass(classes) {\n this.setServiceClasses(this._cssClass, classes);\n this._cssClass = classes;\n }\n get cssClass() {\n return this._cssClass;\n }\n /**\n * @hidden\n */\n set htmlAttributes(attributes) {\n setHTMLAttributes(attributes, this.renderer, this.el.nativeElement);\n const el = this.el.nativeElement;\n const dir = el.getAttribute('dir');\n const tIndex = el.getAttribute('tabindex');\n if (this.direction !== dir) {\n this.direction = dir;\n }\n if (this.tabIndex !== tIndex) {\n this.tabIndex = tIndex;\n }\n this._htmlAttributes = attributes;\n }\n get htmlAttributes() {\n return this._htmlAttributes;\n }\n /**\n * Specifies the initial state of the component.\n * If not specified, the value is set to `default`.\n *\n * The possible values are:\n * * `minimized`\n * * `maximized`\n * * `default`\n */\n set state(value) {\n this.options.state = value;\n }\n get state() {\n return this.options.state;\n }\n /**\n * Specifies the minimum width of the component.\n * The `minWidth` property has to be set in pixels.\n * @default 120\n */\n set minWidth(value) {\n this.setOption('minWidth', value);\n }\n get minWidth() {\n return this.options.minWidth;\n }\n /**\n * Specifies the minimum height of the Window.\n * The `minHeight` property has to be set in pixels.\n * @default 100\n */\n set minHeight(value) {\n this.setOption('minHeight', value);\n }\n get minHeight() {\n return this.options.minHeight;\n }\n /**\n * Specifies the width of the Window.\n * The `width` property has to be set in pixels.\n */\n set width(value) {\n this.setOption('width', value);\n }\n get width() {\n return this.options.width;\n }\n /**\n * Specifies the height of the Window.\n * The `height` property has to be set in pixels.\n */\n set height(value) {\n this.setOption('height', value);\n }\n get height() {\n return this.options.height;\n }\n /**\n * Specifies the initial top offset of the Window.\n * The `top` property has to be set in pixels.\n */\n set top(value) {\n this.setOption('top', value);\n }\n get top() {\n return this.options.top;\n }\n /**\n * Specifies the initial left offset of the Window.\n * Numeric values are treated as pixels.\n */\n set left(value) {\n this.setOption('left', value);\n }\n get left() {\n return this.options.left;\n }\n get closeButtonTitle() {\n if (this.messages && this.messages.closeTitle) {\n return this.messages.closeTitle;\n }\n return this.localization.get('closeTitle');\n }\n get restoreButtonTitle() {\n if (this.messages && this.messages.restoreTitle) {\n return this.messages.restoreTitle;\n }\n return this.localization.get('restoreTitle');\n }\n get maximizeButtonTitle() {\n if (this.messages && this.messages.maximizeTitle) {\n return this.messages.maximizeTitle;\n }\n return this.localization.get('maximizeTitle');\n }\n get minimizeButtonTitle() {\n if (this.messages && this.messages.minimizeTitle) {\n return this.messages.minimizeTitle;\n }\n return this.localization.get('minimizeTitle');\n }\n get hostClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n ngAfterViewInit() {\n this.setNextZIndex();\n this.handleInitialFocus();\n this.ngZone.runOutsideAngular(() => Promise.resolve(null).then(() => this.setInitialOffset()));\n this.initDomEvents();\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.el.nativeElement, 'title');\n this.service.init(this.el);\n }\n ngOnChanges(changes) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isChanged(style$$1, changes)) {\n this.setStyle(style$$1, this.options[style$$1]);\n }\n });\n if (isChanged('draggable', changes)) {\n const titleBar = isPresent(this.titleBarContent) ? this.titleBarContent : this.titleBarView;\n if (isTruthy(changes.draggable.currentValue)) {\n titleBar.subscribeDrag();\n }\n else {\n titleBar.unsubscribeDrag();\n }\n }\n if (isChanged('state', changes)) {\n if (isPresent(this.service.lastAction)) {\n this.service.lastAction = null;\n }\n else {\n this.service.applyManualState();\n this.updateAllOffset();\n }\n }\n }\n ngOnDestroy() {\n if (this.windowSubscription) {\n this.windowSubscription.unsubscribe();\n }\n if (this.domSubs) {\n this.domSubs.unsubscribe();\n }\n this.localizationChangeSubscription.unsubscribe();\n }\n /**\n * Focuses the wrapper of the Window component.\n */\n focus() {\n const wrapper = this.el.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n /**\n * Brings the current Window component on top of other Window components on the page.\n */\n bringToFront() {\n this.setNextZIndex();\n }\n /**\n * Manually updates the `width` or `height` option of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for sizing dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowDimensionSetting} dimension - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setDimension(dimension, value) {\n this.setOption(dimension, value);\n this.setStyle(dimension, value);\n }\n /**\n * Manually updates the `top` or `left` offset of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for positioning dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowOffsetSetting} offset - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setOffset(offset$$1, value) {\n this.setOption(offset$$1, value);\n this.setStyle(offset$$1, value);\n }\n get showDefaultTitleBar() {\n return !isPresent(this.titleBarContent);\n }\n get styleMinWidth() {\n return this.minWidth + 'px';\n }\n get styleMinHeight() {\n return this.minHeight + 'px';\n }\n get stylePosition() {\n return this.options.position;\n }\n get wrapperMaximizedClass() {\n return this.state === 'maximized';\n }\n get wrapperMinimizedClass() {\n return this.state === 'minimized';\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n this.renderer.addClass(this.el.nativeElement, 'k-state-focused');\n this.setNextZIndex();\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n this.renderer.removeClass(this.el.nativeElement, 'k-state-focused');\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.windowSubscription.add(this.service.focus.subscribe(() => {\n this.el.nativeElement.focus();\n }));\n this.windowSubscription.add(this.service.dragStart.subscribe(() => {\n this.draged = true;\n this.ngZone.run(() => {\n this.dragStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.dragEnd.subscribe(() => {\n if (this.draged) {\n this.draged = false;\n this.ngZone.run(() => {\n this.dragEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.close.subscribe(() => {\n this.close.emit();\n }));\n this.windowSubscription.add(this.service.resizeStart.subscribe(() => {\n this.resized = true;\n this.ngZone.run(() => {\n this.resizeStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.resizeEnd.subscribe(() => {\n if (this.resized) {\n this.resized = false;\n this.ngZone.run(() => {\n this.resizeEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.change.subscribe((ev) => {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.setStyle(style$$1, ev[style$$1]);\n if (this.state !== 'maximized') {\n const emitter = this[style$$1 + 'Change'];\n if (emitter.observers.length) {\n this.ngZone.run(() => {\n emitter.emit(ev[style$$1]);\n });\n }\n }\n }\n });\n }));\n this.windowSubscription.add(this.service.stateChange.subscribe((state$$1) => {\n if (isPresent(this.service.lastAction)) {\n this.updateAllOffset();\n this.stateChange.emit(state$$1);\n }\n }));\n }\n initDomEvents() {\n if (!this.el) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubs.add(this.renderer.listen(this.el.nativeElement, 'keydown', (ev) => {\n this.onKeyDown(ev);\n }));\n });\n }\n onKeyDown(event) {\n if (hasClasses(event.target, WINDOW_CLASSES)) {\n this.navigation.process(event);\n }\n }\n setServiceClasses(prevValue, value) {\n const el = this.el.nativeElement;\n if (prevValue) {\n parseCSSClassNames(prevValue).forEach(className => {\n this.renderer.removeClass(el, className);\n });\n }\n if (value) {\n parseCSSClassNames(value).forEach(className => {\n this.renderer.addClass(el, className);\n });\n }\n }\n setNextZIndex() {\n const currentZIndex = this.el.nativeElement.style['z-index'];\n const nextPossibleZIndex = this.service.nextPossibleZIndex;\n if (!currentZIndex || (nextPossibleZIndex - currentZIndex > 1)) {\n this.renderer.setStyle(this.el.nativeElement, \"z-index\", this.service.nextZIndex);\n }\n }\n setInitialOffset() {\n if (this.state !== 'maximized') {\n this.updateAllOffset();\n if (!isPresent(this.left) || !isPresent(this.top)) {\n this.service.center();\n }\n }\n else {\n const viewPort = this.service.windowViewPort;\n this.setStyle('width', viewPort.width);\n this.setStyle('height', viewPort.height);\n this.setStyle('top', 0);\n this.setStyle('left', 0);\n }\n }\n updateAllOffset() {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(this[style$$1])) {\n this.setStyle(style$$1, this[style$$1]);\n }\n else {\n this.removeStyle(style$$1);\n }\n });\n }\n setStyle(style$$1, value) {\n this.renderer.setStyle(this.el.nativeElement, style$$1, value + 'px');\n }\n removeStyle(style$$1) {\n this.renderer.removeStyle(this.el.nativeElement, style$$1);\n }\n get options() {\n return this.service.options;\n }\n setOption(style$$1, value) {\n if (typeof value !== 'number' && typeof value !== 'string') {\n return;\n }\n const parsedValue = (typeof value === 'number') ? value : parseInt(value, 10);\n this.options[style$$1] = parsedValue;\n this.service.setRestoreOption(style$$1, parsedValue);\n }\n handleInitialFocus() {\n const wrapper = this.el.nativeElement;\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else {\n this.focus();\n }\n }\n};\nWindowComponent.ɵfac = function WindowComponent_Factory(t) { return new (t || WindowComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nWindowComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: WindowComponent, selectors: [[\"kendo-window\"]], contentQueries: function WindowComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, WindowTitleBarComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titleBarContent = _t.first);\n } }, viewQuery: function WindowComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(WindowTitleBarComponent, 5);\n ɵngcc0.ɵɵviewQuery(ResizeHandleDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titleBarView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeHandles = _t);\n } }, hostVars: 14, hostBindings: function WindowComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function WindowComponent_focus_HostBindingHandler() { return ctx.onComponentFocus(); })(\"blur\", function WindowComponent_blur_HostBindingHandler() { return ctx.onComponentBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵstyleProp(\"min-width\", ctx.styleMinWidth)(\"min-height\", ctx.styleMinHeight)(\"position\", ctx.stylePosition);\n ɵngcc0.ɵɵclassProp(\"k-window\", ctx.hostClasses)(\"k-window-maximized\", ctx.wrapperMaximizedClass)(\"k-window-minimized\", ctx.wrapperMinimizedClass);\n } }, inputs: { keepContent: \"keepContent\", draggable: \"draggable\", resizable: \"resizable\", state: \"state\", minWidth: \"minWidth\", minHeight: \"minHeight\", width: \"width\", height: \"height\", top: \"top\", left: \"left\", autoFocusedElement: \"autoFocusedElement\", title: \"title\" }, outputs: { dragStart: \"dragStart\", dragEnd: \"dragEnd\", resizeStart: \"resizeStart\", resizeEnd: \"resizeEnd\", close: \"close\", widthChange: \"widthChange\", heightChange: \"heightChange\", topChange: \"topChange\", leftChange: \"leftChange\", stateChange: \"stateChange\" }, exportAs: [\"kendoWindow\"], features: [ɵngcc0.ɵɵProvidersFeature([\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c17, decls: 6, vars: 4, consts: function () { let i18n_8; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.window.closeTitle\n */\n const MSG_EXTERNAL_2849207436137160812$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"Close\");\n i18n_8 = MSG_EXTERNAL_2849207436137160812$$DIST_FESM2015_INDEX_JS_9;\n }\n else {\n i18n_8 = $localize `:kendo.window.closeTitle|The title of the close button␟bb50cb526949482fc976fd868573ab283580ee69␟2849207436137160812:Close`;\n } let i18n_10; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the restore button\n * @meaning kendo.window.restoreTitle\n */\n const MSG_EXTERNAL_3443120027481340803$$DIST_FESM2015_INDEX_JS_11 = goog.getMsg(\"Restore\");\n i18n_10 = MSG_EXTERNAL_3443120027481340803$$DIST_FESM2015_INDEX_JS_11;\n }\n else {\n i18n_10 = $localize `:kendo.window.restoreTitle|The title of the restore button␟9a9ce231f0396e40adcfa80bfa76e546e0085be0␟3443120027481340803:Restore`;\n } let i18n_12; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the maximize button\n * @meaning kendo.window.maximizeTitle\n */\n const MSG_EXTERNAL_7793415109119115257$$DIST_FESM2015_INDEX_JS_13 = goog.getMsg(\"Maximize\");\n i18n_12 = MSG_EXTERNAL_7793415109119115257$$DIST_FESM2015_INDEX_JS_13;\n }\n else {\n i18n_12 = $localize `:kendo.window.maximizeTitle|The title of the maximize button␟42bc654ef8767c5df5277aa88941b94f8d373b4d␟7793415109119115257:Maximize`;\n } let i18n_14; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the minimize button\n * @meaning kendo.window.minimizeTitle\n */\n const MSG_EXTERNAL_7581084655285341827$$DIST_FESM2015_INDEX_JS_15 = goog.getMsg(\"Minimize\");\n i18n_14 = MSG_EXTERNAL_7581084655285341827$$DIST_FESM2015_INDEX_JS_15;\n }\n else {\n i18n_14 = $localize `:kendo.window.minimizeTitle|The title of the minimize button␟7ca9f9b41a23760f7f74e91ee4c76d5a5f4a706c␟7581084655285341827:Minimize`;\n } return [[\"kendoWindowLocalizedMessages\", \"\", \"closeTitle\", i18n_8, \"restoreTitle\", i18n_10, \"maximizeTitle\", i18n_12, \"minimizeTitle\", i18n_14], [3, \"template\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-content k-window-content\", 3, \"hidden\", 4, \"ngIf\"], [3, \"ngIf\"], [3, \"template\"], [1, \"k-window-title\"], [1, \"k-window-actions\"], [\"kendoWindowMinimizeAction\", \"\"], [\"kendoWindowMaximizeAction\", \"\"], [\"kendoWindowRestoreAction\", \"\"], [\"kendoWindowCloseAction\", \"\"], [1, \"k-content\", \"k-window-content\", 3, \"hidden\"], [3, \"ngTemplateOutlet\"], [\"kendoWindowResizeHandle\", \"\", \"kendoDraggable\", \"\", 3, \"direction\", 4, \"ngFor\", \"ngForOf\"], [\"kendoWindowResizeHandle\", \"\", \"kendoDraggable\", \"\", 3, \"direction\"]]; }, template: function WindowComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c16);\n ɵngcc0.ɵɵelementContainerStart(0, 0)(1);\n ɵngcc0.ɵɵtemplate(2, WindowComponent_kendo_window_titlebar_2_Template, 8, 10, \"kendo-window-titlebar\", 1);\n ɵngcc0.ɵɵtemplate(3, WindowComponent_ng_content_3_Template, 1, 0, \"ng-content\", 2);\n ɵngcc0.ɵɵtemplate(4, WindowComponent_div_4_Template, 3, 3, \"div\", 3);\n ɵngcc0.ɵɵtemplate(5, WindowComponent_ng_template_5_Template, 1, 1, \"ng-template\", 4);\n ɵngcc0.ɵɵelementContainerEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showDefaultTitleBar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.showDefaultTitleBar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.state !== \"minimized\" || ctx.keepContent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.resizable);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc1.NgIf, WindowTitleBarComponent, WindowMinimizeActionDirective, WindowMaximizeActionDirective, WindowRestoreActionDirective, WindowCloseActionDirective, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgForOf, ResizeHandleDirective, ɵngcc3.DraggableDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], WindowComponent.prototype, \"autoFocusedElement\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], WindowComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], WindowComponent.prototype, \"draggable\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], WindowComponent.prototype, \"resizable\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], WindowComponent.prototype, \"keepContent\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], WindowComponent.prototype, \"state\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"minWidth\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"minHeight\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"width\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"height\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"top\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], WindowComponent.prototype, \"left\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"dragStart\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"dragEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"resizeStart\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"resizeEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"widthChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"heightChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"topChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"leftChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], WindowComponent.prototype, \"stateChange\", void 0);\n__decorate([\n HostBinding('attr.tabIndex'),\n __metadata(\"design:type\", Number)\n], WindowComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n HostBinding('class.k-window'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"hostClasses\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"dir\", null);\n__decorate([\n ViewChild(WindowTitleBarComponent, { static: false }),\n __metadata(\"design:type\", WindowTitleBarComponent)\n], WindowComponent.prototype, \"titleBarView\", void 0);\n__decorate([\n ContentChild(WindowTitleBarComponent, { static: false }),\n __metadata(\"design:type\", WindowTitleBarComponent)\n], WindowComponent.prototype, \"titleBarContent\", void 0);\n__decorate([\n ViewChildren(ResizeHandleDirective),\n __metadata(\"design:type\", QueryList)\n], WindowComponent.prototype, \"resizeHandles\", void 0);\n__decorate([\n HostBinding('style.minWidth'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"styleMinWidth\", null);\n__decorate([\n HostBinding('style.minHeight'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"styleMinHeight\", null);\n__decorate([\n HostBinding('style.position'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"stylePosition\", null);\n__decorate([\n HostBinding('class.k-window-maximized'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"wrapperMaximizedClass\", null);\n__decorate([\n HostBinding('class.k-window-minimized'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], WindowComponent.prototype, \"wrapperMinimizedClass\", null);\n__decorate([\n HostListener('focus'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowComponent.prototype, \"onComponentFocus\", null);\n__decorate([\n HostListener('blur'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowComponent.prototype, \"onComponentBlur\", null);\nWindowComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DragResizeService,\n NavigationService,\n NgZone,\n LocalizationService])\n], WindowComponent);\n\nlet WindowMaximizeActionDirective = class WindowMaximizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-maximize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.maximizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n};\nWindowMaximizeActionDirective.ɵfac = function WindowMaximizeActionDirective_Factory(t) { return new (t || WindowMaximizeActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowMaximizeActionDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: WindowMaximizeActionDirective, selectors: [[\"button\", \"kendoWindowMaximizeAction\", \"\"]], hostVars: 3, hostBindings: function WindowMaximizeActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowMaximizeActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowMaximizeAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], WindowMaximizeActionDirective.prototype, \"window\", void 0);\n__decorate([\n HostBinding('attr.type'),\n __metadata(\"design:type\", String)\n], WindowMaximizeActionDirective.prototype, \"buttonType\", void 0);\n__decorate([\n HostListener('click'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowMaximizeActionDirective.prototype, \"onClick\", null);\n__decorate([\n HostBinding('style.display'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowMaximizeActionDirective.prototype, \"visible\", null);\nWindowMaximizeActionDirective = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DragResizeService,\n LocalizationService,\n NgZone])\n], WindowMaximizeActionDirective);\n\nlet WindowMinimizeActionDirective = class WindowMinimizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-minimize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.minimizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n};\nWindowMinimizeActionDirective.ɵfac = function WindowMinimizeActionDirective_Factory(t) { return new (t || WindowMinimizeActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowMinimizeActionDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: WindowMinimizeActionDirective, selectors: [[\"button\", \"kendoWindowMinimizeAction\", \"\"]], hostVars: 3, hostBindings: function WindowMinimizeActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowMinimizeActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowMinimizeAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], WindowMinimizeActionDirective.prototype, \"window\", void 0);\n__decorate([\n HostBinding('attr.type'),\n __metadata(\"design:type\", String)\n], WindowMinimizeActionDirective.prototype, \"buttonType\", void 0);\n__decorate([\n HostListener('click'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowMinimizeActionDirective.prototype, \"onClick\", null);\n__decorate([\n HostBinding('style.display'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowMinimizeActionDirective.prototype, \"visible\", null);\nWindowMinimizeActionDirective = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DragResizeService,\n LocalizationService,\n NgZone])\n], WindowMinimizeActionDirective);\n\nlet WindowCloseActionDirective = class WindowCloseActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'close';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.closeAction();\n }\n }\n};\nWindowCloseActionDirective.ɵfac = function WindowCloseActionDirective_Factory(t) { return new (t || WindowCloseActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowCloseActionDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: WindowCloseActionDirective, selectors: [[\"button\", \"kendoWindowCloseAction\", \"\"]], hostVars: 1, hostBindings: function WindowCloseActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowCloseActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowCloseAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], WindowCloseActionDirective.prototype, \"window\", void 0);\n__decorate([\n HostBinding('attr.type'),\n __metadata(\"design:type\", String)\n], WindowCloseActionDirective.prototype, \"buttonType\", void 0);\n__decorate([\n HostListener('click'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowCloseActionDirective.prototype, \"onClick\", null);\nWindowCloseActionDirective = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DragResizeService,\n LocalizationService,\n NgZone])\n], WindowCloseActionDirective);\n\nlet WindowRestoreActionDirective = class WindowRestoreActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-restore';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.restoreAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'none' : 'inline-flex';\n }\n};\nWindowRestoreActionDirective.ɵfac = function WindowRestoreActionDirective_Factory(t) { return new (t || WindowRestoreActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowRestoreActionDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: WindowRestoreActionDirective, selectors: [[\"button\", \"kendoWindowRestoreAction\", \"\"]], hostVars: 3, hostBindings: function WindowRestoreActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowRestoreActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowRestoreAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], WindowRestoreActionDirective.prototype, \"window\", void 0);\n__decorate([\n HostBinding('attr.type'),\n __metadata(\"design:type\", String)\n], WindowRestoreActionDirective.prototype, \"buttonType\", void 0);\n__decorate([\n HostListener('click'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], WindowRestoreActionDirective.prototype, \"onClick\", null);\n__decorate([\n HostBinding('style.display'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], WindowRestoreActionDirective.prototype, \"visible\", null);\nWindowRestoreActionDirective = __decorate([ __param(2, Optional()),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n DragResizeService,\n LocalizationService,\n NgZone])\n], WindowRestoreActionDirective);\n\n/**\n * The settings for the Window actions when the Window is opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowSettings {\n}\n/**\n * Indicates that the **Close** button of a Window that is opened through `WindowService` is clicked.\n */\nclass WindowCloseResult {\n}\n/**\n * Holds references to the object instance of the Window.\n * Controls the Windows that were opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowRef {\n}\n\nvar WindowContainerService_1;\n/**\n * @hidden\n */\nlet WindowContainerService = WindowContainerService_1 = class WindowContainerService {\n set container(container) {\n WindowContainerService_1.container = container;\n }\n get container() {\n return WindowContainerService_1.container;\n }\n};\nWindowContainerService.ɵfac = function WindowContainerService_Factory(t) { return new (t || WindowContainerService)(); };\nWindowContainerService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: WindowContainerService, factory: function (t) { return WindowContainerService.ɵfac(t); } });\nWindowContainerService.container = null;\n\nconst isNotComponent$1 = (component) => isString(component) || component instanceof TemplateRef;\nclass WindowInjector {\n constructor(getWindowRef, parentInjector) {\n this.getWindowRef = getWindowRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === WindowRef) {\n return this.getWindowRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Windows dynamically\n * ([see example]({% slug service_window %})).\n */\nlet WindowService = class WindowService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Window component.\n *\n * @param {WindowSettings} settings - The settings that define the Window.\n * @returns {WindowRef} - A reference to the Window object.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private windowService: WindowService ) {}\n *\n * public open() {\n * var window = this.windowService.open({\n * title: \"My window\",\n * content: \"My content!\"\n * });\n *\n * window.result.subscribe((result) => {\n * if (result instanceof WindowCloseResult) {\n * console.log(\"Window was closed\");\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(settings) {\n const factory = this.resolver.resolveComponentFactory(WindowComponent);\n const container = settings.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`Cannot attach window to the page.\n Add an element that uses the kendoWindowContainer directive, or set the 'appendTo' property.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/window/service/\n `);\n }\n const windowRef = {\n close: () => { },\n content: null,\n result: null,\n window: null\n };\n const content = this.contentFrom(settings.content, container, windowRef);\n const window = container.createComponent(factory, undefined, undefined, content.nodes);\n windowRef.window = window;\n this.applyOptions(window.instance, settings);\n const apiClose = new Subject();\n const close = (e) => {\n apiClose.next(e || new WindowCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n window.destroy();\n };\n const result = merge(apiClose, window.instance.close.pipe(map(e => (e ? e : new WindowCloseResult())), filter((e) => {\n if (settings.preventClose) {\n // add windowRef only when using component\n const windowRefParameter = isNotComponent$1(settings.content) ? undefined : windowRef;\n return !settings.preventClose(e, windowRefParameter);\n }\n return true;\n }))).pipe(take(1), \n // Takes care for multiple subscriptions:\n // We subscribe internally and the user may subscribe to get a close result - window.result.subscribe().\n // This causes multiple subscriptions to the same source and thus multiple emissions. share() solves that.\n share());\n result.subscribe(close);\n windowRef.close = close;\n windowRef.result = result;\n window.changeDetectorRef.markForCheck();\n return windowRef;\n }\n applyOptions(instance, options) {\n if (isPresent(options.htmlAttributes)) {\n instance.htmlAttributes = options.htmlAttributes;\n }\n if (isPresent(options.cssClass)) {\n instance.cssClass = options.cssClass;\n }\n if (isPresent(options.title)) {\n instance.title = options.title;\n }\n if (isPresent(options.keepContent)) {\n instance.keepContent = options.keepContent;\n }\n if (isPresent(options.width)) {\n instance.width = options.width;\n }\n if (isPresent(options.minWidth)) {\n instance.minWidth = options.minWidth;\n }\n if (isPresent(options.height)) {\n instance.height = options.height;\n }\n if (isPresent(options.minHeight)) {\n instance.minHeight = options.minHeight;\n }\n if (isPresent(options.left)) {\n instance.left = options.left;\n }\n if (isPresent(options.top)) {\n instance.top = options.top;\n }\n if (isPresent(options.draggable)) {\n instance.draggable = options.draggable;\n }\n if (isPresent(options.resizable)) {\n instance.resizable = options.resizable;\n }\n if (isPresent(options.messages && options.messages.closeTitle)) {\n instance.messages.closeTitle = options.messages.closeTitle;\n }\n if (isPresent(options.messages && options.messages.restoreTitle)) {\n instance.messages.restoreTitle = options.messages.restoreTitle;\n }\n if (isPresent(options.messages && options.messages.maximizeTitle)) {\n instance.messages.maximizeTitle = options.messages.maximizeTitle;\n }\n if (isPresent(options.messages && options.messages.minimizeTitle)) {\n instance.messages.minimizeTitle = options.messages.minimizeTitle;\n }\n if (isPresent(options.autoFocusedElement)) {\n instance.autoFocusedElement = options.autoFocusedElement;\n }\n if (isPresent(options.state)) {\n instance.state = options.state;\n if (options.state === 'minimized') {\n instance.keepContent = true;\n }\n }\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n if (options.titleBarContent instanceof TemplateRef) {\n instance.titleBarTemplate = options.titleBarContent;\n }\n }\n contentFrom(content, container, windowRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n const injector = new WindowInjector(() => windowRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n nodes = [componentRef.location.nativeElement];\n windowRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n [],\n nodes // Content\n ]\n };\n }\n};\nWindowService.ɵfac = function WindowService_Factory(t) { return new (t || WindowService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(WindowContainerService)); };\nWindowService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: WindowService, factory: function (t) { return WindowService.ɵfac(t); } });\nWindowService = __decorate([ __param(1, Inject(WindowContainerService)),\n __metadata(\"design:paramtypes\", [ComponentFactoryResolver,\n WindowContainerService])\n], WindowService);\n\n/**\n * Provides an insertion point for the Dialogs which are created through the\n * Dialog service ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n * Created Dialogs will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nlet DialogContainerDirective = class DialogContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n};\nDialogContainerDirective.ɵfac = function DialogContainerDirective_Factory(t) { return new (t || DialogContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DialogContainerService)); };\nDialogContainerDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DialogContainerDirective, selectors: [[\"\", \"kendoDialogContainer\", \"\"]] });\nDialogContainerDirective = __decorate([ __metadata(\"design:paramtypes\", [ViewContainerRef,\n DialogContainerService])\n], DialogContainerDirective);\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { closeTitle: \"closeTitle\", restoreTitle: \"restoreTitle\", maximizeTitle: \"maximizeTitle\", minimizeTitle: \"minimizeTitle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"closeTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"restoreTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"maximizeTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"minimizeTitle\", void 0);\n\nvar LocalizedMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedMessagesDirective = LocalizedMessagesDirective_1 = class LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoDialogLocalizedMessages\", \"\"], [\"\", \"kendoWindowLocalizedMessages\", \"\"], [\"\", \"kendoDialogTitleBarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedMessagesDirective = LocalizedMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedMessagesDirective);\n\nvar CustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_dialogs %}#toc-localization)).\n */\nlet CustomMessagesComponent = CustomMessagesComponent_1 = class CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-dialog-messages\"], [\"kendo-window-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nCustomMessagesComponent = CustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], CustomMessagesComponent);\n\n/**\n * @hidden\n */\nconst SHARED_DIRECTIVES = [\n DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective\n];\n/**\n * @hidden\n */\nlet SharedModule = class SharedModule {\n};\nSharedModule.ɵfac = function SharedModule_Factory(t) { return new (t || SharedModule)(); };\nSharedModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule], CommonModule] });\n\n/**\n * @hidden\n */\nconst DIALOG_DIRECTIVES = [\n DialogComponent,\n DialogTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialog component that includes all Dialog components and directives.\n * Imports `DialogModule` into the [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Dialog component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { DialogModule } from '@progress/kendo-angular-dialog';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet DialogModule = class DialogModule {\n};\nDialogModule.ɵfac = function DialogModule_Factory(t) { return new (t || DialogModule)(); };\nDialogModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DialogModule });\nDialogModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [DialogContainerService, DialogService], imports: [[SharedModule]] });\n\n/**\n * Provides an insertion point for the Windows which are created through the\n * Window service ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n * Created Windows will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nlet WindowContainerDirective = class WindowContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n};\nWindowContainerDirective.ɵfac = function WindowContainerDirective_Factory(t) { return new (t || WindowContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(WindowContainerService)); };\nWindowContainerDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: WindowContainerDirective, selectors: [[\"\", \"kendoWindowContainer\", \"\"]] });\nWindowContainerDirective = __decorate([ __metadata(\"design:paramtypes\", [ViewContainerRef,\n WindowContainerService])\n], WindowContainerDirective);\n\nconst WINDOW_DIRECTIVES = [\n ResizeHandleDirective,\n WindowComponent,\n WindowTitleBarComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective\n];\nconst ENTRY_COMPONENTS = [\n WindowComponent,\n WindowTitleBarComponent\n];\nconst exportedModules = [\n WindowComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Window component. Imports `WindowModule` into the\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Window component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { WindowModule } from '@progress/kendo-angular-window';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, WindowModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nlet WindowModule = class WindowModule {\n};\nWindowModule.ɵfac = function WindowModule_Factory(t) { return new (t || WindowModule)(); };\nWindowModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: WindowModule });\nWindowModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [WindowContainerService, WindowService], imports: [[SharedModule, DraggableModule]] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialogs components.\n *\n * @example\n *\n * ```ts-no-run\n * import { DialogsModule } from '@progress/kendo-angular-dialog';\n *\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { NgModule } from '@angular/core';\n *\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogsModule],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet DialogsModule = class DialogsModule {\n};\nDialogsModule.ɵfac = function DialogsModule_Factory(t) { return new (t || DialogsModule)(); };\nDialogsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DialogsModule });\nDialogsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [DialogModule, WindowModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogActionsComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-actions',\n template: `\n \n \n \n {{ action.text }}\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { layout: [{\n type: Input\n }], action: [{\n type: Output\n }], buttonGroupClassName: [{\n type: HostBinding,\n args: ['class.k-dialog-buttongroup']\n }, {\n type: HostBinding,\n args: ['class.k-actions']\n }], className: [{\n type: HostBinding,\n args: ['class.k-actions-stretched']\n }], actions: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogTitleBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-titlebar',\n providers: [\n TitleBarLocalizationService,\n {\n provide: LocalizationService,\n useExisting: TitleBarLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ],\n template: `\n \n
\n \n
\n\n
\n \n \n \n
\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.LocalizationService, decorators: [{\n type: Optional\n }] }]; }, { close: [{\n type: Output\n }], className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }], id: [{\n type: Input\n }], closeTitle: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ]),\n trigger('dialogSlideInAppear', [\n state('in', style({ transform: 'translate(0, 0)' })),\n transition('void => *', [style({ transform: 'translate(0, -10%)' }), animate('.3s cubic-bezier(.2, 1, .2, 1)')])\n ])\n ],\n exportAs: 'kendoDialog',\n providers: [\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ],\n selector: 'kendo-dialog',\n template: `\n \n
\n\n
\n {{ title }}\n \n\n
\n \n \n
\n\n \n \n
\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }]; }, { actionsLayout: [{\n type: Input\n }], action: [{\n type: Output\n }], close: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-dialog-wrapper']\n }], actions: [{\n type: Input\n }], autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], width: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], maxWidth: [{\n type: Input\n }], height: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], titlebarContent: [{\n type: ContentChildren,\n args: [DialogTitleBarComponent, { descendants: false }]\n }], titlebarView: [{\n type: ViewChildren,\n args: [DialogTitleBarComponent]\n }], actionsView: [{\n type: ViewChild,\n args: [DialogActionsComponent, { static: false }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogContainerService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: DialogContainerService, decorators: [{\n type: Inject,\n args: [DialogContainerService]\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragResizeService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeHandleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoWindowResizeHandle]'\n }]\n }], function () { return [{ type: ɵngcc3.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-resize-handle']\n }], direction: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowTitleBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-window-titlebar',\n template: `\n \n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragResizeService }, { type: ɵngcc0.NgZone }]; }, { className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], \n /**\n * @hidden\n */\n handle: [{\n type: HostListener,\n args: ['dblclick', ['$event']]\n }], template: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: DragResizeService }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoWindow',\n providers: [\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ],\n selector: 'kendo-window',\n template: `\n \n \n\n \n
{{ title }}
\n
\n \n \n \n \n
\n
\n \n\n
\n \n \n
\n\n \n
\n
\n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService }, { type: NavigationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc2.LocalizationService }]; }, { keepContent: [{\n type: Input\n }], dragStart: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], resizeStart: [{\n type: Output\n }], resizeEnd: [{\n type: Output\n }], close: [{\n type: Output\n }], widthChange: [{\n type: Output\n }], heightChange: [{\n type: Output\n }], topChange: [{\n type: Output\n }], leftChange: [{\n type: Output\n }], stateChange: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], draggable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], state: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], top: [{\n type: Input\n }], left: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-window']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], styleMinWidth: [{\n type: HostBinding,\n args: ['style.minWidth']\n }], styleMinHeight: [{\n type: HostBinding,\n args: ['style.minHeight']\n }], stylePosition: [{\n type: HostBinding,\n args: ['style.position']\n }], wrapperMaximizedClass: [{\n type: HostBinding,\n args: ['class.k-window-maximized']\n }], wrapperMinimizedClass: [{\n type: HostBinding,\n args: ['class.k-window-minimized']\n }], \n /**\n * @hidden\n */\n onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }], \n /**\n * @hidden\n */\n onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }], autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], titleBarView: [{\n type: ViewChild,\n args: [WindowTitleBarComponent, { static: false }]\n }], titleBarContent: [{\n type: ContentChild,\n args: [WindowTitleBarComponent, { static: false }]\n }], resizeHandles: [{\n type: ViewChildren,\n args: [ResizeHandleDirective]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowMaximizeActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMaximizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMaximizeAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowMinimizeActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMinimizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMinimizeAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowCloseActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowCloseAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowCloseAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowRestoreActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowRestoreAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowRestoreAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], \n /**\n * @hidden\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowContainerService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: WindowContainerService, decorators: [{\n type: Inject,\n args: [WindowContainerService]\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDialogContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: DialogContainerService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ],\n selector: `\n [kendoDialogLocalizedMessages],\n [kendoWindowLocalizedMessages],\n [kendoDialogTitleBarLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-dialog-messages, kendo-window-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES, CommonModule],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective, CommonModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogModule, [{\n type: NgModule,\n args: [{\n declarations: [DIALOG_DIRECTIVES, DialogContainerDirective],\n entryComponents: [DIALOG_DIRECTIVES],\n exports: [DIALOG_DIRECTIVES, SHARED_DIRECTIVES, DialogContainerDirective],\n imports: [SharedModule],\n providers: [DialogContainerService, DialogService]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DialogModule, { declarations: [DialogComponent, DialogTitleBarComponent, DialogContainerDirective], imports: [SharedModule], exports: [DialogComponent, DialogTitleBarComponent, DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective, DialogContainerDirective] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoWindowContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: WindowContainerService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(WindowModule, [{\n type: NgModule,\n args: [{\n declarations: [WINDOW_DIRECTIVES, WindowContainerDirective],\n entryComponents: [ENTRY_COMPONENTS],\n exports: [exportedModules, SHARED_DIRECTIVES, WindowContainerDirective],\n imports: [SharedModule, DraggableModule],\n providers: [WindowContainerService, WindowService]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(WindowModule, { declarations: function () { return [ResizeHandleDirective, WindowComponent, WindowTitleBarComponent, WindowCloseActionDirective, WindowMinimizeActionDirective, WindowMaximizeActionDirective, WindowRestoreActionDirective, WindowContainerDirective]; }, imports: function () { return [SharedModule, DraggableModule]; }, exports: function () { return [WindowComponent, WindowCloseActionDirective, WindowMinimizeActionDirective, WindowMaximizeActionDirective, WindowRestoreActionDirective, WindowTitleBarComponent, DialogActionsComponent, CustomMessagesComponent, LocalizedMessagesDirective, WindowContainerDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DialogsModule, [{\n type: NgModule,\n args: [{\n exports: [DialogModule, WindowModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DialogsModule, { exports: [DialogModule, WindowModule] }); })();\n\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DIALOG_DIRECTIVES, DialogContainerDirective, DialogContainerService, CustomMessagesComponent, DIALOG_LOCALIZATION_SERVICE, LocalizedMessagesDirective, Messages, TitleBarLocalizationService, SHARED_DIRECTIVES, SharedModule, DragResizeService, NavigationService, WindowContainerDirective, WindowContainerService, ResizeHandleDirective, DialogComponent, DialogTitleBarComponent, DialogContentBase, DialogActionsComponent, DialogService, DialogCloseResult, DialogRef, DialogSettings, DialogAction, WindowComponent, WindowTitleBarComponent, WindowMaximizeActionDirective, WindowMinimizeActionDirective, WindowCloseActionDirective, WindowRestoreActionDirective, WindowSettings, WindowRef, WindowCloseResult, WindowService, DialogModule, WindowModule, DialogsModule };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { EventEmitter, Injectable, Directive, Optional, TemplateRef, forwardRef, isDevMode, HostBinding, ViewChild, ViewContainerRef, Input, Output, ContentChild, Component, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, NgZone, Renderer2, ComponentFactoryResolver, Host, NgModule } from '@angular/core';\nimport { isDocumentAvailable, Keys, anyChanged, hasObservers, isChanged, guid } from '@progress/kendo-angular-common';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { Subject, of, BehaviorSubject, Subscription, EMPTY, merge } from 'rxjs';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { getter, setter } from '@progress/kendo-common';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { filter, catchError, tap, finalize, switchMap, take, map, delay, takeUntil } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport Draggable from '@telerik/kendo-draggable';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-inputs';\n\nconst _c0 = [\"assetsContainer\"];\nfunction TreeViewComponent_kendo_textbox_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 6);\n} }\nfunction TreeViewComponent_kendo_textbox_0_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-textbox\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TreeViewComponent_kendo_textbox_0_Template_kendo_textbox_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.filterChange.emit($event); });\n ɵngcc0.ɵɵtemplate(2, TreeViewComponent_kendo_textbox_0_ng_template_2_Template, 1, 0, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r0.filter)(\"clearButton\", true)(\"placeholder\", ctx_r0.filterInputPlaceholder);\n} }\nconst _c1 = [\"kendoTreeViewGroup\", \"\"];\nfunction TreeViewGroupComponent_li_0_span_2_Template(rf, ctx) { if (rf & 1) {\n const _r11 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 11);\n ɵngcc0.ɵɵlistener(\"click\", function TreeViewGroupComponent_li_0_span_2_Template_span_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r10 = ɵngcc0.ɵɵnextContext(); const index_r3 = ctx_r10.index; const node_r2 = ctx_r10.$implicit; const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.expandNode(ctx_r9.nodeIndex(index_r3), node_r2, !ctx_r9.isExpanded(node_r2, ctx_r9.nodeIndex(index_r3))); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext();\n const node_r2 = ctx_r12.$implicit;\n const index_r3 = ctx_r12.index;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-i-collapse\", ctx_r4.isExpanded(node_r2, ctx_r4.nodeIndex(index_r3)))(\"k-i-expand\", !ctx_r4.isExpanded(node_r2, ctx_r4.nodeIndex(index_r3)));\n ɵngcc0.ɵɵproperty(\"kendoTreeViewLoading\", ctx_r4.nodeIndex(index_r3));\n} }\nfunction TreeViewGroupComponent_li_0_kendo_checkbox_3_Template(rf, ctx) { if (rf & 1) {\n const _r15 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-checkbox\", 12);\n ɵngcc0.ɵɵlistener(\"checkStateChange\", function TreeViewGroupComponent_li_0_kendo_checkbox_3_Template_kendo_checkbox_checkStateChange_0_listener() { ɵngcc0.ɵɵrestoreView(_r15); const index_r3 = ɵngcc0.ɵɵnextContext().index; const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.checkNode(ctx_r13.nodeIndex(index_r3)); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext();\n const node_r2 = ctx_r16.$implicit;\n const index_r3 = ctx_r16.index;\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"node\", node_r2)(\"index\", ctx_r5.nodeIndex(index_r3))(\"isChecked\", ctx_r5.isChecked);\n} }\nfunction TreeViewGroupComponent_li_0_ng_container_6_ng_template_1_Template(rf, ctx) { }\nconst _c2 = function (a0, a1) { return { $implicit: a0, index: a1 }; };\nfunction TreeViewGroupComponent_li_0_ng_container_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, TreeViewGroupComponent_li_0_ng_container_6_ng_template_1_Template, 0, 0, \"ng-template\", 13);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext();\n const node_r2 = ctx_r18.$implicit;\n const index_r3 = ctx_r18.index;\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r6.nodeTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c2, node_r2, ctx_r6.nodeIndex(index_r3)));\n} }\nfunction TreeViewGroupComponent_li_0_ng_container_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const node_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r7.nodeText(node_r2), \" \");\n} }\nfunction TreeViewGroupComponent_li_0_ul_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"ul\", 14);\n} if (rf & 2) {\n const ctx_r20 = ɵngcc0.ɵɵnextContext();\n const node_r2 = ctx_r20.$implicit;\n const index_r3 = ctx_r20.index;\n const ctx_r8 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"nodes\", ctx_r8.fetchChildren)(\"loadOnDemand\", ctx_r8.loadOnDemand)(\"checkboxes\", ctx_r8.checkboxes)(\"expandIcons\", ctx_r8.expandIcons)(\"selectable\", ctx_r8.selectable)(\"touchActions\", ctx_r8.touchActions)(\"children\", ctx_r8.children)(\"hasChildren\", ctx_r8.hasChildren)(\"isChecked\", ctx_r8.isChecked)(\"isDisabled\", ctx_r8.isDisabled)(\"disabled\", ctx_r8.disabled || ctx_r8.isDisabled(node_r2, ctx_r8.nodeIndex(index_r3)))(\"isExpanded\", ctx_r8.isExpanded)(\"isSelected\", ctx_r8.isSelected)(\"isVisible\", ctx_r8.isVisible)(\"nodeTemplateRef\", ctx_r8.nodeTemplateRef)(\"loadMoreButtonTemplateRef\", ctx_r8.loadMoreButtonTemplateRef)(\"parentIndex\", ctx_r8.nodeIndex(index_r3))(\"parentDataItem\", node_r2)(\"textField\", ctx_r8.nextFields)(\"loadMoreService\", ctx_r8.loadMoreService)(\"@toggle\", true)(\"trackBy\", ctx_r8.trackBy);\n} }\nfunction TreeViewGroupComponent_li_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 2)(1, \"div\", 3);\n ɵngcc0.ɵɵtemplate(2, TreeViewGroupComponent_li_0_span_2_Template, 1, 5, \"span\", 4);\n ɵngcc0.ɵɵtemplate(3, TreeViewGroupComponent_li_0_kendo_checkbox_3_Template, 1, 3, \"kendo-checkbox\", 5);\n ɵngcc0.ɵɵelementStart(4, \"span\", 6);\n ɵngcc0.ɵɵelementContainerStart(5, 7);\n ɵngcc0.ɵɵtemplate(6, TreeViewGroupComponent_li_0_ng_container_6_Template, 2, 5, \"ng-container\", 8);\n ɵngcc0.ɵɵtemplate(7, TreeViewGroupComponent_li_0_ng_container_7_Template, 2, 1, \"ng-container\", 9);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(8, TreeViewGroupComponent_li_0_ul_8_Template, 1, 22, \"ul\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const node_r2 = ctx.$implicit;\n const index_r3 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-display-none\", !ctx_r0.isVisible(node_r2, ctx_r0.nodeIndex(index_r3)));\n ɵngcc0.ɵɵproperty(\"dataItem\", node_r2)(\"index\", ctx_r0.nodeIndex(index_r3))(\"parentDataItem\", ctx_r0.parentDataItem)(\"parentIndex\", ctx_r0.parentIndex)(\"loadOnDemand\", ctx_r0.loadOnDemand)(\"checkable\", ctx_r0.checkboxes)(\"isChecked\", ctx_r0.isChecked(node_r2, ctx_r0.nodeIndex(index_r3)))(\"isDisabled\", ctx_r0.disabled || ctx_r0.isDisabled(node_r2, ctx_r0.nodeIndex(index_r3)))(\"isVisible\", ctx_r0.isVisible(node_r2, ctx_r0.nodeIndex(index_r3)))(\"expandable\", ctx_r0.expandIcons && ctx_r0.hasChildren(node_r2))(\"isExpanded\", ctx_r0.isExpanded(node_r2, ctx_r0.nodeIndex(index_r3)))(\"selectable\", ctx_r0.selectable)(\"isSelected\", ctx_r0.isSelected(node_r2, ctx_r0.nodeIndex(index_r3)));\n ɵngcc0.ɵɵattribute(\"aria-setsize\", ctx_r0.totalNodesCount)(\"data-treeindex\", ctx_r0.nodeIndex(index_r3));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.expandIcons && ctx_r0.hasChildren(node_r2));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.checkboxes);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx_r0.touchActions ? \"\" : \"none\");\n ɵngcc0.ɵɵproperty(\"dataItem\", node_r2)(\"index\", ctx_r0.nodeIndex(index_r3))(\"initialSelection\", ctx_r0.isSelected(node_r2, ctx_r0.nodeIndex(index_r3)))(\"isSelected\", ctx_r0.isSelected);\n ɵngcc0.ɵɵattribute(\"data-treeindex\", ctx_r0.nodeIndex(index_r3));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx_r0.hasTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.isExpanded(node_r2, ctx_r0.nodeIndex(index_r3)) && ctx_r0.hasChildren(node_r2));\n} }\nfunction TreeViewGroupComponent_li_1_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 19);\n} }\nfunction TreeViewGroupComponent_li_1_4_ng_template_0_Template(rf, ctx) { }\nconst _c3 = function (a0) { return { index: a0 }; };\nfunction TreeViewGroupComponent_li_1_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TreeViewGroupComponent_li_1_4_ng_template_0_Template, 0, 0, \"ng-template\", 13);\n} if (rf & 2) {\n const ctx_r22 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r22.loadMoreButtonTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(2, _c3, ctx_r22.loadMoreButtonIndex));\n} }\nfunction TreeViewGroupComponent_li_1_ng_container_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1, \" Load more \");\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction TreeViewGroupComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 15)(1, \"div\", 3);\n ɵngcc0.ɵɵtemplate(2, TreeViewGroupComponent_li_1_span_2_Template, 1, 0, \"span\", 16);\n ɵngcc0.ɵɵelementStart(3, \"span\", 17);\n ɵngcc0.ɵɵtemplate(4, TreeViewGroupComponent_li_1_4_Template, 1, 4, null, 18);\n ɵngcc0.ɵɵtemplate(5, TreeViewGroupComponent_li_1_ng_container_5_Template, 2, 0, \"ng-container\", 18);\n ɵngcc0.ɵɵelementEnd()()();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-treeview-load-more-checkboxes-container\", ctx_r1.checkboxes);\n ɵngcc0.ɵɵproperty(\"selectable\", false)(\"checkable\", false)(\"expandable\", false)(\"index\", ctx_r1.loadMoreButtonIndex)(\"parentDataItem\", ctx_r1.parentDataItem)(\"parentIndex\", ctx_r1.parentIndex);\n ɵngcc0.ɵɵattribute(\"data-treeindex\", ctx_r1.loadMoreButtonIndex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.loadingMoreNodes);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"index\", ctx_r1.loadMoreButtonIndex);\n ɵngcc0.ɵɵattribute(\"data-treeindex\", ctx_r1.loadMoreButtonIndex);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r1.loadMoreButtonTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.loadMoreButtonTemplateRef);\n} }\nfunction DragClueComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"span\");\n ɵngcc0.ɵɵelementStart(2, \"span\");\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassMapInterpolate1(\"k-icon \", ctx_r0.statusIconClass, \" k-drag-status\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.text);\n} }\nfunction DragClueComponent_1_ng_template_0_Template(rf, ctx) { }\nconst _c4 = function (a0, a1, a2, a3) { return { text: a0, action: a1, sourceItem: a2, destinationItem: a3 }; };\nfunction DragClueComponent_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DragClueComponent_1_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.template)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction4(2, _c4, ctx_r1.text, ctx_r1.action, ctx_r1.sourceItem, ctx_r1.destinationItem));\n} }\nfunction DropHintComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵelement(1, \"div\", 3)(2, \"div\", 4);\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction DropHintComponent_1_ng_template_0_ng_template_0_Template(rf, ctx) { }\nfunction DropHintComponent_1_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropHintComponent_1_ng_template_0_ng_template_0_Template, 0, 0, \"ng-template\");\n} }\nconst _c5 = function (a0, a1, a2) { return { action: a0, sourceItem: a1, destinationItem: a2 }; };\nfunction DropHintComponent_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropHintComponent_1_ng_template_0_Template, 1, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.template)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(2, _c5, ctx_r1.action, ctx_r1.sourceItem, ctx_r1.destinationItem));\n} }\nconst packageMetadata = {\n name: '@progress/kendo-angular-treeview',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1638439762,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nclass DataChangeNotificationService {\n constructor() {\n this.changes = new EventEmitter();\n }\n notify() {\n this.changes.emit();\n }\n}\nDataChangeNotificationService.ɵfac = function DataChangeNotificationService_Factory(t) { return new (t || DataChangeNotificationService)(); };\nDataChangeNotificationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DataChangeNotificationService, factory: DataChangeNotificationService.ɵfac });\n\n/**\n * @hidden\n */\nconst hasChildren = () => false;\n/**\n * @hidden\n */\nconst isChecked = () => 'none';\n/**\n * @hidden\n */\nconst isDisabled = () => false;\n/**\n * @hidden\n */\nconst isExpanded = () => true;\n/**\n * @hidden\n */\nconst isSelected = () => false;\n/**\n * @hidden\n */\nconst isVisible = () => true;\n/**\n * @hidden\n */\nconst trackBy = (_, item) => item;\n\n/**\n * @hidden\n */\nlet ExpandStateService = class ExpandStateService {\n /**\n * @hidden\n */\n constructor() {\n this.changes = new Subject();\n }\n expand(index, dataItem) {\n this.changes.next({ dataItem, index, expand: true });\n }\n collapse(index, dataItem) {\n this.changes.next({ dataItem, index, expand: false });\n }\n};\nExpandStateService.ɵfac = function ExpandStateService_Factory(t) { return new (t || ExpandStateService)(); };\nExpandStateService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ExpandStateService, factory: function (t) { return ExpandStateService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet IndexBuilderService = class IndexBuilderService {\n /**\n * @hidden\n */\n constructor() {\n this.INDEX_SEPARATOR = '_';\n }\n nodeIndex(index = '', parentIndex = '') {\n return `${parentIndex}${parentIndex ? this.INDEX_SEPARATOR : ''}${index}`;\n }\n indexForLevel(index, level) {\n return index.split(this.INDEX_SEPARATOR).slice(0, level).join(this.INDEX_SEPARATOR);\n }\n lastLevelIndex(index = '') {\n const parts = index.split(this.INDEX_SEPARATOR);\n if (!parts.length) {\n return NaN;\n }\n return parseInt(parts[parts.length - 1], 10);\n }\n level(index) {\n return index.split(this.INDEX_SEPARATOR).length;\n }\n};\nIndexBuilderService.ɵfac = function IndexBuilderService_Factory(t) { return new (t || IndexBuilderService)(); };\nIndexBuilderService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: IndexBuilderService, factory: function (t) { return IndexBuilderService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet LoadingNotificationService = class LoadingNotificationService {\n /**\n * @hidden\n */\n constructor() {\n this.changes = new Subject();\n }\n notifyLoaded(index) {\n this.changes.next(index);\n }\n};\nLoadingNotificationService.ɵfac = function LoadingNotificationService_Factory(t) { return new (t || LoadingNotificationService)(); };\nLoadingNotificationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: LoadingNotificationService, factory: function (t) { return LoadingNotificationService.ɵfac(t); } });\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\n/**\n * @hidden\n */\nconst match = (element, selector) => {\n const matcher = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (!matcher) {\n return false;\n }\n return matcher.call(element, selector);\n};\n/**\n * @hidden\n */\nconst closestWithMatch = (element, selector) => {\n if (!document.documentElement.contains(element)) {\n return null;\n }\n let parent = element;\n while (parent !== null && parent.nodeType === 1) {\n if (match(parent, selector)) {\n return parent;\n }\n parent = parent.parentElement || parent.parentNode;\n }\n return null;\n};\n/**\n * @hidden\n */\nconst noop = () => { };\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isBlank = (value) => value === null || value === undefined;\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isNullOrEmptyString = (value) => isBlank(value) || value.trim().length === 0;\n/**\n * @hidden\n */\nconst isBoolean = (value) => typeof value === 'boolean';\n/**\n * @hidden\n */\nconst closestNode = (element) => {\n const selector = 'li.k-treeview-item';\n if (!isDocumentAvailable()) {\n return null;\n }\n if (element.closest) {\n return element.closest(selector);\n }\n else {\n return closestWithMatch(element, selector);\n }\n};\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const skipTab = tabIndex === '-1';\n let focusable = tabIndex !== null && !skipTab;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled && !skipTab;\n }\n return focusable;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst isContent = (element) => {\n const scopeSelector = '.k-in:not(.k-treeview-load-more-button),.k-treeview-item,.k-treeview';\n if (!isDocumentAvailable()) {\n return null;\n }\n let node = element;\n while (node && !match(node, scopeSelector)) {\n node = node.parentNode;\n }\n if (node) {\n return match(node, '.k-in:not(.k-treeview-load-more-button)');\n }\n};\n/**\n * @hidden\n *\n * Returns the nested .k-in:not(.k-treeview-load-more-button) element.\n * If the passed parent item is itself a content node, it is returned.\n */\nconst getContentElement = (parent) => {\n if (!isPresent(parent)) {\n return null;\n }\n const selector = '.k-in:not(.k-treeview-load-more-button)';\n if (match(parent, selector)) {\n return parent;\n }\n return parent.querySelector(selector);\n};\n/**\n * @hidden\n */\nconst isLoadMoreButton = (element) => {\n return isPresent(closestWithMatch(element, '.k-in.k-treeview-load-more-button'));\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nconst hasParent = (element, container) => {\n return Boolean(closest(element, (node) => node === container));\n};\n/**\n * @hidden\n */\nconst focusableNode = (element) => element.nativeElement.querySelector('li[tabindex=\"0\"]');\n/**\n * @hidden\n */\nconst nodeId = (node) => node ? node.getAttribute('data-treeindex') : '';\n/**\n * @hidden\n */\nconst nodeIndex = (item) => (item || {}).index;\n/**\n * @hidden\n */\nconst dataItemsEqual = (first, second) => {\n if (!isPresent(first) && !isPresent(second)) {\n return true;\n }\n return isPresent(first) && isPresent(second) && first.item.dataItem === second.item.dataItem;\n};\n/**\n * @hidden\n */\nconst getDataItem = (lookup) => {\n if (!isPresent(lookup)) {\n return lookup;\n }\n return lookup.item.dataItem;\n};\n/**\n * @hidden\n */\nconst isArrayWithAtLeastOneItem = v => v && Array.isArray(v) && v.length !== 0;\n/**\n * @hidden\n * A recursive tree-filtering algorithm that returns:\n * - all child nodes of matching nodes\n * - a chain parent nodes from the match to the root node\n */\nconst filterTree = (items, term, { operator, ignoreCase, mode }, textField, depth = 0) => {\n const field = typeof textField === \"string\" ? textField : textField[depth];\n items.forEach((wrapper) => {\n const matcher = typeof operator === \"string\" ? matchByFieldAndCase(field, operator, ignoreCase) : operator;\n const isMatch = matcher(wrapper.dataItem, term);\n wrapper.isMatch = isMatch;\n wrapper.visible = isMatch;\n wrapper.containsMatches = false;\n if (isMatch) {\n setParentChain(wrapper.parent);\n }\n if (wrapper.children && wrapper.children.length > 0) {\n if (mode === \"strict\" || !isMatch) {\n filterTree(wrapper.children, term, { operator, ignoreCase, mode }, textField, depth + 1);\n }\n else {\n makeAllVisible(wrapper.children);\n }\n }\n });\n};\nconst setParentChain = (node) => {\n if (!isPresent(node)) {\n return;\n }\n node.containsMatches = true;\n node.visible = true;\n if (isPresent(node.parent) && !node.parent.containsMatches) {\n setParentChain(node.parent);\n }\n};\nconst makeAllVisible = (nodes) => {\n nodes.forEach(node => {\n node.visible = true;\n if (node.children) {\n makeAllVisible(node.children);\n }\n });\n};\nconst ɵ2 = (a, b) => a.indexOf(b) >= 0, ɵ3 = (a, b) => a.indexOf(b) === -1, ɵ4 = (a, b) => a.lastIndexOf(b, 0) === 0, ɵ5 = (a, b) => a.lastIndexOf(b, 0) === -1, ɵ6 = (a, b) => a.indexOf(b, a.length - b.length) >= 0, ɵ7 = (a, b) => a.indexOf(b, a.length - b.length) < 0;\nconst operators = {\n contains: ɵ2,\n doesnotcontain: ɵ3,\n startswith: ɵ4,\n doesnotstartwith: ɵ5,\n endswith: ɵ6,\n doesnotendwith: ɵ7\n};\nconst matchByCase = (matcher, ignoreCase) => (a, b) => {\n if (ignoreCase) {\n return matcher(a.toLowerCase(), b.toLowerCase());\n }\n return matcher(a, b);\n};\nconst matchByFieldAndCase = (field, operator, ignoreCase) => (dataItem, term) => matchByCase(operators[operator], ignoreCase)(getter(field)(dataItem), term);\n/**\n * @hidden\n */\nconst buildTreeIndex = (parentIndex, itemIndex) => {\n return [parentIndex, itemIndex].filter(part => isPresent(part)).join('_');\n};\n/**\n * @hidden\n */\nconst buildTreeItem = (dataItem, currentLevelIndex, parentIndex) => {\n if (!isPresent(dataItem)) {\n return null;\n }\n return {\n dataItem,\n index: buildTreeIndex(parentIndex, currentLevelIndex)\n };\n};\n/**\n * @hidden\n *\n * Retrieves all descendant nodes' lookups which are currently registered in the provided lookup item as a flat array.\n */\nconst fetchLoadedDescendants = (lookup, filterExpression) => {\n if (!isPresent(lookup) || lookup.children.length === 0) {\n return [];\n }\n let descendants = lookup.children;\n if (isPresent(filterExpression)) {\n descendants = descendants.filter(filterExpression);\n }\n descendants.forEach(child => descendants = descendants.concat(fetchLoadedDescendants(child, filterExpression)));\n return descendants;\n};\n/**\n * @hidden\n *\n * Compares two arrays to determine whether all unique elements in one, are present in the other.\n * Important:\n * - it disregards the element order\n * - it disregards element repetitions - sameValues([1, 1, 2], [1, 2, 2]) will return true\n */\nconst sameValues = (a, b) => {\n if (a.length !== b.length) {\n return false;\n }\n const values = new Set(b);\n return a.every(v => values.has(v));\n};\n\nconst safe = node => (node || {});\nconst safeChildren = node => (safe(node).children || []);\nconst lastVisibleNode = (nodes) => {\n if (!Array.isArray(nodes) || nodes.length === 0) {\n return null;\n }\n const nodesCount = nodes.length;\n const lastIndex = nodesCount - 1;\n for (let index = lastIndex; index >= 0; index -= 1) {\n const node = nodes[index];\n if (node.visible) {\n return node;\n }\n }\n return null;\n};\n/**\n * @hidden\n */\nclass NavigationModel {\n constructor() {\n this.ib = new IndexBuilderService();\n this.nodes = [];\n }\n firstVisibleNode() {\n return (this.nodes || []).find(node => node.visible);\n }\n lastVisibleNode() {\n let node = lastVisibleNode(this.nodes);\n while (isPresent(node) && safeChildren(node).length > 0) {\n const children = safeChildren(node);\n const lastVisibleChild = lastVisibleNode(children);\n if (!isPresent(lastVisibleChild)) {\n return node;\n }\n node = lastVisibleChild;\n }\n return node;\n }\n closestNode(index) {\n const { prev } = safe(this.findNode(index));\n const sibling = prev || this.firstVisibleNode();\n return safe(sibling).index === index ? this.visibleSibling(sibling, 1) : sibling;\n }\n firstFocusableNode() {\n return this.nodes.find((node) => {\n return !node.disabled && node.visible;\n });\n }\n findNode(index) {\n return this.find(index, this.nodes);\n }\n findParent(index) {\n const parentLevel = this.ib.level(index) - 1;\n return this.findNode(this.ib.indexForLevel(index, parentLevel));\n }\n findVisibleChild(index) {\n const node = this.findNode(index);\n const children = safeChildren(node);\n return children.find((child) => child.visible);\n }\n findVisiblePrev(item) {\n const index = item.index;\n const parent = this.findParent(index);\n const levelIndex = this.ib.lastLevelIndex(index);\n const prevNodes = this.container(parent).slice(0, levelIndex);\n const prevNodesHidden = prevNodes.every(node => !node.visible);\n if (levelIndex === 0 || prevNodesHidden) {\n return parent;\n }\n const currentNode = this.findNode(index);\n let prev = this.visibleSibling(currentNode, -1);\n if (prev) {\n let children = this.container(prev);\n while (children.length > 0 && children.some(node => node.visible)) {\n prev = lastVisibleNode(children);\n children = this.container(prev);\n }\n }\n return prev;\n }\n findVisibleNext(item) {\n const children = this.container(item);\n const hasVisibleChildren = children.some(child => child.visible);\n if (children.length === 0 || !hasVisibleChildren) {\n return this.visibleSibling(item, 1);\n }\n return children.find(child => child.visible);\n }\n registerItem(id, index, disabled, loadMoreButton = false, visible = true) {\n const children = [];\n const level = this.ib.level(index);\n const parent = this.findParent(index);\n if (parent || level === 1) {\n const node = { id, children, index, parent, disabled, loadMoreButton, visible };\n this.insert(node, parent);\n }\n }\n unregisterItem(id, index) {\n const node = this.find(index, this.nodes);\n if (!node || node.id !== id) {\n return;\n }\n const children = this.container(node.parent);\n children.splice(children.indexOf(node), 1);\n }\n childLevel(nodes) {\n const children = nodes.filter(node => isPresent(node));\n if (!children || !children.length) {\n return 1;\n }\n return this.ib.level(children[0].index);\n }\n container(node) {\n return node ? node.children : this.nodes;\n }\n find(index, nodes) {\n const childLevel = this.childLevel(nodes);\n const indexToMatch = this.ib.indexForLevel(index, childLevel);\n const isLeaf = childLevel === this.ib.level(index);\n const node = nodes.find(n => n && n.index === indexToMatch);\n if (!node) {\n return null;\n }\n return isLeaf ? node : this.find(index, node.children);\n }\n insert(node, parent) {\n const nodes = this.container(parent);\n nodes.splice(this.ib.lastLevelIndex(node.index), 0, node);\n }\n visibleSibling(node, offset) {\n if (!node) {\n return null;\n }\n const parent = this.findParent(node.index);\n const container = this.container(parent);\n let nextItemIndex = container.indexOf(node) + offset;\n let nextItem = container[nextItemIndex];\n while (isPresent(nextItem)) {\n if (nextItem.visible) {\n return nextItem;\n }\n nextItemIndex += offset;\n nextItem = container[nextItemIndex];\n }\n return this.visibleSibling(parent, offset);\n }\n}\n\n/**\n * @hidden\n */\nlet NavigationService = class NavigationService {\n constructor(localization) {\n this.localization = localization;\n this.expands = new Subject();\n this.moves = new Subject();\n this.checks = new Subject();\n this.selects = new Subject();\n this.loadMore = new Subject();\n this.navigable = true;\n this.actions = {\n [Keys.ArrowUp]: () => this.activate(this.model.findVisiblePrev(this.focusableItem)),\n [Keys.ArrowDown]: () => this.activate(this.model.findVisibleNext(this.focusableItem)),\n [Keys.ArrowLeft]: () => !this.isLoadMoreButton && (this.expand({\n expand: this.localization.rtl,\n intercept: this.localization.rtl ? this.moveToFirstVisibleChild : this.moveToParent\n })),\n [Keys.ArrowRight]: () => !this.isLoadMoreButton && (this.expand({\n expand: !this.localization.rtl,\n intercept: this.localization.rtl ? this.moveToParent : this.moveToFirstVisibleChild\n })),\n [Keys.Home]: () => this.activate(this.model.firstVisibleNode()),\n [Keys.End]: () => this.activate(this.model.lastVisibleNode()),\n [Keys.Enter]: () => this.handleEnter(),\n [Keys.Space]: () => this.handleSpace()\n };\n this.isFocused = false;\n this._model = new NavigationModel();\n this.moveToFirstVisibleChild = this.moveToFirstVisibleChild.bind(this);\n this.moveToParent = this.moveToParent.bind(this);\n }\n get model() {\n return this._model;\n }\n set model(model) {\n this._model = model;\n }\n get activeIndex() {\n return nodeIndex(this.activeItem) || null;\n }\n get isActiveExpanded() {\n return this.activeItem && this.activeItem.children.length > 0;\n }\n get isLoadMoreButton() {\n return this.activeItem && this.activeItem.loadMoreButton;\n }\n get focusableItem() {\n return this.activeItem || this.model.firstFocusableNode();\n }\n activate(item) {\n if (!this.navigable || !item || this.isActive(nodeIndex(item))) {\n return;\n }\n this.isFocused = true;\n this.activeItem = item || this.activeItem;\n this.notifyMove();\n }\n activateParent(index) {\n this.activate(this.model.findParent(index));\n }\n activateIndex(index) {\n if (!index) {\n return;\n }\n this.activate(this.model.findNode(index));\n }\n activateClosest(index) {\n if (!index || nodeIndex(this.focusableItem) !== index) {\n return;\n }\n this.activeItem = this.model.closestNode(index);\n this.notifyMove();\n }\n activateFocusable() {\n if (this.activeItem) {\n return;\n }\n this.activeItem = this.model.firstVisibleNode();\n this.notifyMove();\n }\n deactivate() {\n if (!this.navigable || !this.isFocused) {\n return;\n }\n this.isFocused = false;\n this.notifyMove();\n }\n checkIndex(index) {\n if (!this.isDisabled(index)) {\n this.checks.next(index);\n }\n }\n selectIndex(index) {\n if (!this.isDisabled(index)) {\n this.selects.next(index);\n }\n }\n notifyLoadMore(index) {\n if (!isPresent(index)) {\n return;\n }\n this.loadMore.next(index);\n }\n isActive(index) {\n if (!index) {\n return false;\n }\n return this.isFocused && this.activeIndex === index;\n }\n isFocusable(index) {\n return nodeIndex(this.focusableItem) === index;\n }\n isDisabled(index) {\n return this.model.findNode(index).disabled;\n }\n registerItem(id, index, disabled, loadMoreButton = false, visible = true) {\n const itemAtIndex = this.model.findNode(index);\n if (isPresent(itemAtIndex)) {\n this.model.unregisterItem(itemAtIndex.id, itemAtIndex.index);\n if (this.isActive(index)) {\n this.deactivate();\n }\n }\n this.model.registerItem(id, index, disabled, loadMoreButton, visible);\n }\n unregisterItem(id, index) {\n if (this.isActive(index)) {\n this.activateParent(index);\n }\n this.model.unregisterItem(id, index);\n }\n move(e) {\n if (!this.navigable) {\n return;\n }\n const moveAction = this.actions[e.keyCode];\n if (!moveAction) {\n return;\n }\n moveAction();\n e.preventDefault();\n }\n expand({ expand, intercept }) {\n const index = nodeIndex(this.activeItem);\n if (!index || intercept(index)) {\n return;\n }\n this.notifyExpand(expand);\n }\n moveToParent() {\n if (this.isActiveExpanded) {\n return false;\n }\n this.activate(this.model.findParent(nodeIndex(this.activeItem)));\n return true;\n }\n moveToFirstVisibleChild() {\n if (!this.isActiveExpanded) {\n return false;\n }\n this.activate(this.model.findVisibleChild(nodeIndex(this.activeItem)));\n return true;\n }\n notifyExpand(expand) {\n this.expands.next(this.navigationState(expand));\n }\n notifyMove() {\n this.moves.next(this.navigationState());\n }\n navigationState(expand = false) {\n return ({ expand, index: this.activeIndex, isFocused: this.isFocused });\n }\n handleEnter() {\n if (!this.navigable) {\n return;\n }\n if (this.isLoadMoreButton) {\n this.notifyLoadMore(this.activeIndex);\n }\n else {\n this.selectIndex(this.activeIndex);\n }\n }\n handleSpace() {\n if (!this.navigable) {\n return;\n }\n if (this.isLoadMoreButton) {\n this.notifyLoadMore(this.activeIndex);\n }\n else {\n this.checkIndex(this.activeIndex);\n }\n }\n};\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(ɵngcc1.LocalizationService)); };\nNavigationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: function (t) { return NavigationService.ɵfac(t); } });\nNavigationService = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], NavigationService);\n\n/**\n * @hidden\n */\nlet NodeChildrenService = class NodeChildrenService {\n /**\n * @hidden\n */\n constructor() {\n this.changes = new Subject();\n }\n childrenLoaded(item, children) {\n this.changes.next({ item, children });\n }\n};\nNodeChildrenService.ɵfac = function NodeChildrenService_Factory(t) { return new (t || NodeChildrenService)(); };\nNodeChildrenService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NodeChildrenService, factory: function (t) { return NodeChildrenService.ɵfac(t); } });\n\n/**\n * Represents the template for the TreeView nodes ([more information and example]({% slug nodetemplate_treeview %})).\n * The template helps to customize the content of the nodes. To define the node template, nest an ``\n * tag with the `kendoTreeViewNodeTemplate` directive inside a `` tag.\n *\n *\n * The node data item and its hierarchical index are available as context variables:\n *\n * - `let-dataItem` (`any`) - available as implicit context variable\n * - `let-index=\"index\"` (`string`)\n *\n *\n * @example\n * ```ts\n *\n * import { Component } from '@angular/core';\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{ index }}: {{ dataItem.text }}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * {\n * text: \"Inbox\",\n * items: [{ text: \"Read Mail\" }]\n * },\n * {\n * text: \"Drafts\"\n * },\n * {\n * text: \"Search Folders\",\n * items: [\n * { text: \"Categorized Mail\" },\n * { text: \"Large Mail\" },\n * { text: \"Unread Mail\"}\n * ]\n * },\n * { text: \"Settings\" }\n * ];\n * }\n *\n * ```\n */\nlet NodeTemplateDirective = class NodeTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nNodeTemplateDirective.ɵfac = function NodeTemplateDirective_Factory(t) { return new (t || NodeTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nNodeTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: NodeTemplateDirective, selectors: [[\"\", \"kendoTreeViewNodeTemplate\", \"\"]] });\nNodeTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], NodeTemplateDirective);\n\n/**\n * Represents the template for the TreeView load more buttons.\n * To define a button template, nest an ``\n * tag with the `kendoTreeViewLoadMoreButtonTemplate` directive inside a `` tag\n * ([see example]({% slug loadmorebutton_treeview %}#toc-button-template)).\n *\n * The hierarchical index of the load more button node is available as a context variable:\n *\n * - `let-index=\"index\"` (`string`)\n */\nlet LoadMoreButtonTemplateDirective = class LoadMoreButtonTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nLoadMoreButtonTemplateDirective.ɵfac = function LoadMoreButtonTemplateDirective_Factory(t) { return new (t || LoadMoreButtonTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nLoadMoreButtonTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LoadMoreButtonTemplateDirective, selectors: [[\"\", \"kendoTreeViewLoadMoreButtonTemplate\", \"\"]] });\nLoadMoreButtonTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], LoadMoreButtonTemplateDirective);\n\n/**\n * @hidden\n *\n * An injection token used by the data binding directives to interface with\n * the TreeView or the DropDownTree components.\n */\nlet DataBoundComponent = class DataBoundComponent {\n};\nDataBoundComponent.ɵfac = function DataBoundComponent_Factory(t) { return new (t || DataBoundComponent)(); };\nDataBoundComponent.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DataBoundComponent, factory: function (t) { return DataBoundComponent.ɵfac(t); } });\n\n/**\n * @hidden\n *\n * An injection token used by the expand-directive to interface with\n * the TreeView or the DropDownTree components.\n */\nlet ExpandableComponent = class ExpandableComponent {\n};\nExpandableComponent.ɵfac = function ExpandableComponent_Factory(t) { return new (t || ExpandableComponent)(); };\nExpandableComponent.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ExpandableComponent, factory: function (t) { return ExpandableComponent.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet SelectionService = class SelectionService {\n /**\n * @hidden\n */\n constructor() {\n this.changes = new Subject();\n }\n isFirstSelected(index) {\n return this.firstIndex === index;\n }\n setFirstSelected(index, selected) {\n if (this.firstIndex === index && selected === false) {\n this.firstIndex = null;\n }\n else if (!this.firstIndex && selected) {\n this.firstIndex = index;\n }\n }\n select(index, dataItem) {\n this.changes.next({ dataItem, index });\n }\n};\nSelectionService.ɵfac = function SelectionService_Factory(t) { return new (t || SelectionService)(); };\nSelectionService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: SelectionService, factory: function (t) { return SelectionService.ɵfac(t); } });\n\nconst INDEX_REGEX = /\\d+$/;\n/**\n * @hidden\n */\nlet TreeViewLookupService = class TreeViewLookupService {\n /**\n * @hidden\n */\n constructor() {\n this.map = new Map();\n }\n reset() {\n this.map.clear();\n }\n registerItem(item, parent) {\n const currentLookup = {\n children: [],\n item,\n parent: this.item(nodeIndex(parent))\n };\n this.map.set(item.index, currentLookup);\n }\n registerChildren(index, children) {\n const item = this.item(index);\n if (!item) {\n return;\n }\n item.children = children;\n }\n unregisterItem(index, dataItem) {\n const current = this.item(index);\n if (current && current.item.dataItem === dataItem) {\n this.map.delete(index);\n if (current.parent && current.parent.children) {\n current.parent.children = current.parent.children.filter(item => item.dataItem !== dataItem);\n }\n }\n }\n replaceItem(index, item, parent) {\n if (!item) {\n return;\n }\n this.unregisterItem(index, item.dataItem);\n this.registerItem(item, parent);\n this.addToParent(item, parent);\n }\n itemLookup(index) {\n const item = this.item(index);\n if (!item) {\n return null;\n }\n return {\n children: this.mapChildren(item.children),\n item: item.item,\n parent: item.parent\n };\n }\n hasItem(index) {\n return this.map.has(index);\n }\n item(index) {\n return this.map.get(index) || null;\n }\n addToParent(item, parent) {\n if (parent) {\n const parentItem = this.item(parent.index);\n const index = parseInt(INDEX_REGEX.exec(item.index)[0], 10);\n parentItem.children = parentItem.children || [];\n parentItem.children.splice(index, 0, item);\n }\n }\n mapChildren(children = []) {\n return children.map(c => {\n const { item, parent, children } = this.item(c.index);\n return {\n children: this.mapChildren(children),\n item,\n parent\n };\n });\n }\n};\nTreeViewLookupService.ɵfac = function TreeViewLookupService_Factory(t) { return new (t || TreeViewLookupService)(); };\nTreeViewLookupService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TreeViewLookupService, factory: function (t) { return TreeViewLookupService.ɵfac(t); } });\n\nconst LOAD_MORE_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/treeview/load-more-button/';\nconst providers = [\n ExpandStateService,\n IndexBuilderService,\n TreeViewLookupService,\n LoadingNotificationService,\n NodeChildrenService,\n NavigationService,\n SelectionService,\n DataChangeNotificationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.treeview'\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => TreeViewComponent)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => TreeViewComponent)\n }\n];\n/* tslint:disable:member-ordering */\n/**\n * Represents the [Kendo UI TreeView component for Angular]({% slug overview_treeview %}).\n *\n * @example\n * {% meta height:450 %}\n * {% embed_file get-started/app.component.ts preview %}\n * {% embed_file get-started/app.module.ts %}\n * {% embed_file shared/main.ts %}\n * {% endmeta %}\n */\nlet TreeViewComponent = class TreeViewComponent {\n constructor(element, changeDetectorRef, expandService, navigationService, nodeChildrenService, selectionService, treeViewLookupService, ngZone, renderer, dataChangeNotification, localization) {\n this.element = element;\n this.changeDetectorRef = changeDetectorRef;\n this.expandService = expandService;\n this.navigationService = navigationService;\n this.nodeChildrenService = nodeChildrenService;\n this.selectionService = selectionService;\n this.treeViewLookupService = treeViewLookupService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.dataChangeNotification = dataChangeNotification;\n this.localization = localization;\n this.classNames = true;\n this.role = 'tree';\n /**\n * The hint which is displayed when the component is empty.\n */\n this.filterInputPlaceholder = \"\";\n /** @hidden */\n this.fetchNodes = () => this.data;\n /**\n * Fires when the children of the expanded node are loaded.\n */\n this.childrenLoaded = new EventEmitter();\n /**\n * Fires when the user blurs the component.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires when the user focuses the component.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires when the user expands a TreeView node.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the user collapses a TreeView node.\n */\n this.collapse = new EventEmitter();\n /**\n * Fires just before the dragging of the node starts ([see example]({% slug draganddrop_treeview %}#toc-setup)). This event is preventable.\n * If you prevent the event default, no drag hint will be created and the subsequent drag-related events will not be fired.\n */\n this.nodeDragStart = new EventEmitter();\n /**\n * Fires when an item is being dragged ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n */\n this.nodeDrag = new EventEmitter();\n /**\n * Emits when the built-in filtering mechanism in the data-binding directives updates the node's visibility.\n * Used for the built-in auto-expand functionalities of the component and available for custom implementations.\n */\n this.filterStateChange = new EventEmitter();\n /**\n * Fires on the target TreeView when a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * This event is preventable. If you prevent the event default (`event.preventDefualt()`) or invalidate its state (`event.setValid(false)`),\n * the `addItem` and `removeItem` events will not be triggered.\n *\n * Both operations cancel the default drop operation, but the indication to the user is different. `event.setValid(false)` indicates that the operation was\n * unsuccessful by animating the drag clue to its original position. `event.preventDefault()` simply removes the clue, as if it has been dropped successfully.\n * As a general rule, use `preventDefault` to manually handle the add and remove operations, and `setValid(false)` to indicate the operation was unsuccessful.\n */\n this.nodeDrop = new EventEmitter();\n /**\n * Fires on the source TreeView after the dragged item has been dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n */\n this.nodeDragEnd = new EventEmitter();\n /**\n * Fires after a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * Called on the TreeView where the item is dropped.\n */\n this.addItem = new EventEmitter();\n /**\n * Fires after a dragged item is dropped ([see example]({% slug draganddrop_treeview %}#toc-setup)).\n * Called on the TreeView from where the item is dragged.\n */\n this.removeItem = new EventEmitter();\n /**\n * Fires when the user selects a TreeView node checkbox\n * ([see example]({% slug checkboxes_treeview %}#toc-modifying-the-checked-state)).\n */\n this.checkedChange = new EventEmitter();\n /**\n * Fires when the user selects a TreeView node\n * ([see example]({% slug selection_treeview %}#toc-modifying-the-selection)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires when the user clicks a TreeView node.\n */\n this.nodeClick = new EventEmitter();\n /**\n * Fires when the user double clicks a TreeView node.\n */\n this.nodeDblClick = new EventEmitter();\n /**\n * A function that defines how to track node changes.\n * By default, the TreeView tracks the nodes by data item object reference.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * { text: \"Furniture\" },\n * { text: \"Decor\" }\n * ];\n *\n * public trackBy(index: number, item: any): any {\n * return item.text;\n * }\n * }\n * ```\n */\n this.trackBy = trackBy;\n /**\n * A function which determines if a specific node is disabled.\n */\n this.isDisabled = isDisabled;\n /**\n * A callback which determines whether a TreeView node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isVisible = isVisible;\n /**\n * Determines whether the TreeView keyboard navigable is enabled.\n */\n this.navigable = true;\n /**\n * A function which provides the child nodes for a given parent node\n * ([see example]({% slug databinding_treeview %})).\n */\n this.children = () => of([]);\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default true\n */\n this.loadOnDemand = true;\n /**\n * Renders the built-in input element for filtering the TreeView.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the TreeView manually]({% slug filtering_treeview %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoTreeViewHierarchyBinding`]({% slug api_treeview_hierarchybindingdirective %}) and [`kendoTreeViewFlatDataBinding`]({% slug api_treeview_flatdatabindingdirective %}) directives.\n */\n this.filterable = false;\n /**\n * Sets an initial value of the built-in input element used for filtering.\n */\n this.filter = '';\n this.checkboxes = false;\n this.expandIcons = false;\n this.selectable = false;\n this.touchActions = true;\n this.isActive = false;\n this.data = new BehaviorSubject([]);\n this._animate = true;\n this.subscriptions = new Subscription();\n this.domSubscriptions = [];\n validatePackage(packageMetadata);\n }\n /** @hidden */\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Determines whether the content animation is enabled.\n */\n set animate(value) {\n this._animate = value;\n }\n get animate() {\n return !this._animate;\n }\n /**\n * @hidden\n *\n * Defines the template for each node.\n * Takes precedence over nested templates in the TreeView tag.\n */\n set nodeTemplateRef(template) {\n this._nodeTemplateRef = template;\n }\n get nodeTemplateRef() {\n return this._nodeTemplateRef || this.nodeTemplateQuery;\n }\n /**\n * @hidden\n *\n * Defines the template for each load-more button.\n * Takes precedence over nested templates in the TreeView tag.\n */\n set loadMoreButtonTemplateRef(template) {\n this._loadMoreButtonTemplateRef = template;\n }\n get loadMoreButtonTemplateRef() {\n return this._loadMoreButtonTemplateRef || this.loadMoreButtonTemplateQuery;\n }\n /**\n * The nodes which will be displayed by the TreeView\n * ([see example]({% slug databinding_treeview %})).\n */\n set nodes(value) {\n this.data.next(value || []);\n this.dataChangeNotification.notify();\n }\n get nodes() {\n return this.data.value;\n }\n /**\n * A function which determines if a specific node has child nodes\n * ([see example]({% slug databinding_treeview %})).\n */\n get hasChildren() {\n return this._hasChildren || hasChildren;\n }\n set hasChildren(callback) {\n this._hasChildren = callback;\n this.expandIcons = Boolean(this._isExpanded && this._hasChildren);\n }\n /**\n * A function which determines if a specific node is checked\n * ([see example]({% slug checkboxes_treeview %}#toc-modifying-the-checked-state)).\n */\n get isChecked() {\n return this._isChecked || isChecked;\n }\n set isChecked(callback) {\n this._isChecked = callback;\n this.checkboxes = Boolean(this._isChecked);\n }\n /**\n * A function which determines if a specific node is expanded.\n */\n get isExpanded() {\n return this._isExpanded || isExpanded;\n }\n set isExpanded(callback) {\n this._isExpanded = callback;\n this.expandIcons = Boolean(this._isExpanded && this._hasChildren);\n }\n /**\n * A function which determines if a specific node is selected\n * ([see example]({% slug selection_treeview %}#toc-modifying-the-selection)).\n */\n get isSelected() {\n return this._isSelected || isSelected;\n }\n set isSelected(callback) {\n this._isSelected = callback;\n this.selectable = Boolean(this._isSelected);\n }\n ngOnChanges(changes) {\n this.navigationService.navigable = Boolean(this.navigable);\n // TODO: should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'children', 'hasChildren', 'loadOnDemand'], changes, false) && !this.loadOnDemand) {\n this.preloadChildNodes();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.domSubscriptions.forEach(subscription => subscription());\n }\n ngOnInit() {\n this.subscriptions.add(this.nodeChildrenService\n .changes\n .subscribe((x) => this.childrenLoaded.emit(x)));\n this.subscriptions.add(this.expandService.changes\n .subscribe(({ index, dataItem, expand }) => expand\n ? this.expand.emit({ index, dataItem })\n : this.collapse.emit({ index, dataItem })));\n this.subscriptions.add(this.navigationService.checks\n .subscribe((x) => this.checkedChange.emit(this.treeViewLookupService.itemLookup(x))));\n this.subscriptions.add(this.selectionService.changes\n .subscribe((x) => {\n if (hasObservers(this.selectionChange)) {\n this.ngZone.run(() => {\n this.selectionChange.emit(x);\n });\n }\n }));\n if (this.element) {\n this.ngZone.runOutsideAngular(() => {\n this.attachDomHandlers();\n });\n }\n }\n /**\n * Blurs the focused TreeView item.\n */\n blur() {\n if (!isDocumentAvailable()) {\n return;\n }\n const target = focusableNode(this.element);\n if (document.activeElement === target) {\n target.blur();\n }\n }\n /**\n * Focuses the first focusable item in the TreeView component if no hierarchical index is provided.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public data: any[] = [\n * { text: \"Furniture\" },\n * { text: \"Decor\" }\n * ];\n * }\n * ```\n */\n focus(index) {\n const focusIndex = index || nodeIndex(this.navigationService.focusableItem);\n this.navigationService.activateIndex(focusIndex);\n const target = focusableNode(this.element);\n if (target) {\n target.focus();\n }\n }\n /**\n * Based on the specified index, returns the TreeItemLookup node.\n *\n * @param index - The index of the node.\n * @returns {TreeItemLookup} - The item that was searched (looked up).\n */\n itemLookup(index) {\n return this.treeViewLookupService.itemLookup(index);\n }\n /**\n * Triggers the [`children`]({% slug api_treeview_treeviewcomponent %}#toc-children) function for every expanded node,\n * causing all rendered child nodes to be fetched again.\n */\n rebindChildren() {\n this.dataChangeNotification.notify();\n }\n /**\n * Triggers the `expand` event for the provided node and displays it's loading indicator.\n */\n expandNode(item, index) {\n this.expandService.expand(index, item);\n }\n /**\n * Triggers the `collapse` event for the provided node.\n */\n collapseNode(item, index) {\n this.expandService.collapse(index, item);\n }\n /**\n * Gets the current page size of the checked data item children collection\n * ([see example]({% slug loadmorebutton_treeview %}#toc-managing-page-sizes)).\n *\n * > Since the root nodes collection is not associated with any parent data item, pass `null` as `dataItem` param to get its page size.\n *\n * @param dataItem {any} - The parent data item of the targeted collection.\n * @returns {number} - The page size of the checked data item children collection.\n */\n getNodePageSize(dataItem) {\n this.verifyLoadMoreService();\n return this.loadMoreService.getGroupSize(dataItem);\n }\n /**\n * Sets the page size of the targeted data item children collection\n * ([see example]({% slug loadmorebutton_treeview %}#toc-managing-page-sizes)).\n *\n * > Since the root nodes collection is not associated with any parent data item, pass `null` as `dataItem` param to target its page size.\n *\n * @param dataItem {any} - The parent data item of the targeted collection.\n * @param pageSize {number} - The new page size.\n */\n setNodePageSize(dataItem, pageSize) {\n this.verifyLoadMoreService();\n this.loadMoreService.setGroupSize(dataItem, pageSize);\n }\n /**\n * @hidden\n *\n * Clears the current TreeViewLookupService node map and re-registers all nodes anew.\n * Child nodes are acquired through the provided `children` callback.\n */\n preloadChildNodes() {\n this.treeViewLookupService.reset();\n this.registerLookupItems(this.nodes);\n }\n attachDomHandlers() {\n const element = this.element.nativeElement;\n this.clickHandler = this.clickHandler.bind(this);\n this.domSubscriptions.push(this.renderer.listen(element, 'contextmenu', this.clickHandler), this.renderer.listen(element, 'click', this.clickHandler), this.renderer.listen(element, 'dblclick', this.clickHandler), this.renderer.listen(element, 'focusin', this.focusHandler.bind(this)), this.renderer.listen(element, 'focusout', this.blurHandler.bind(this)), this.renderer.listen(element, 'keydown', this.keydownHandler.bind(this)));\n }\n focusHandler(e) {\n let focusItem;\n if (match(e.target, '.k-treeview-item')) {\n focusItem = e.target;\n }\n else if (!isFocusable(e.target)) { // with compliments to IE\n focusItem = closestNode(e.target);\n }\n if (focusItem) {\n this.navigationService.activateIndex(nodeId(e.target));\n if (!this.isActive && hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n this.isActive = true;\n }\n }\n blurHandler(e) {\n if (this.isActive && match(e.target, '.k-treeview-item') &&\n (!e.relatedTarget || !match(e.relatedTarget, '.k-treeview-item') || !hasParent(e.relatedTarget, this.element.nativeElement))) {\n this.navigationService.deactivate();\n this.isActive = false;\n if (hasObservers(this.onBlur)) {\n this.ngZone.run(() => {\n this.onBlur.emit();\n });\n }\n }\n }\n clickHandler(e) {\n const target = e.target;\n if ((e.type === 'contextmenu' && !hasObservers(this.nodeClick)) ||\n (e.type === 'click' && !hasObservers(this.nodeClick) && !hasObservers(this.selectionChange) && !isLoadMoreButton(target)) ||\n (e.type === 'dblclick' && !hasObservers(this.nodeDblClick)) || isFocusable(target) ||\n (!isContent(target) && !isLoadMoreButton(target)) || !hasParent(target, this.element.nativeElement)) {\n return;\n }\n const index = nodeId(closestNode(target));\n // the disabled check is probably not needed due to the k-state-disabled styles\n if (!index || this.navigationService.isDisabled(index)) {\n return;\n }\n this.ngZone.run(() => {\n // record this value before emitting selectionChange (`this.navigationService.selectIndex`), as the treeview state may be changed on its emission\n const lookup = this.treeViewLookupService.itemLookup(index);\n if (e.type === 'click') {\n const loadMoreButton = this.navigationService.model.findNode(index).loadMoreButton;\n if (loadMoreButton) {\n this.navigationService.notifyLoadMore(index);\n return;\n }\n else {\n this.navigationService.selectIndex(index);\n }\n }\n const emitter = e.type === 'dblclick' ? this.nodeDblClick : this.nodeClick;\n emitter.emit({\n item: lookup.item,\n originalEvent: e,\n type: e.type\n });\n });\n }\n keydownHandler(e) {\n if (this.isActive && this.navigable) {\n this.ngZone.run(() => {\n this.navigationService.move(e);\n });\n }\n }\n verifyLoadMoreService() {\n if (isDevMode() && !isPresent(this.loadMoreService)) {\n throw new Error(`To use the TreeView paging functionality, you need to assign the \\`kendoTreeViewLoadMore\\` directive. See ${LOAD_MORE_DOC_LINK}.`);\n }\n }\n registerLookupItems(data, parentItem = null) {\n if (!isPresent(data) || data.length === 0) {\n return;\n }\n const parentIndex = nodeIndex(parentItem);\n const treeItems = data.map((node, index) => buildTreeItem(node, index, parentIndex));\n if (isPresent(parentItem)) {\n this.treeViewLookupService.registerChildren(parentIndex, treeItems);\n }\n treeItems.forEach(item => {\n this.treeViewLookupService.registerItem(item, parentItem);\n if (this.hasChildren(item.dataItem)) {\n this.children(item.dataItem)\n .subscribe(children => this.registerLookupItems(children, item));\n }\n });\n }\n};\nTreeViewComponent.ɵfac = function TreeViewComponent_Factory(t) { return new (t || TreeViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ExpandStateService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(NodeChildrenService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(TreeViewLookupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DataChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nTreeViewComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TreeViewComponent, selectors: [[\"kendo-treeview\"]], contentQueries: function TreeViewComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, NodeTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, LoadMoreButtonTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.nodeTemplateQuery = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.loadMoreButtonTemplateQuery = _t.first);\n } }, viewQuery: function TreeViewComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7, ViewContainerRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.assetsContainer = _t.first);\n } }, hostVars: 7, hostBindings: function TreeViewComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵsyntheticHostProperty(\"@.disabled\", ctx.animate);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.classNames)(\"k-treeview\", ctx.classNames);\n } }, inputs: { filterInputPlaceholder: \"filterInputPlaceholder\", trackBy: \"trackBy\", isDisabled: \"isDisabled\", isVisible: \"isVisible\", navigable: \"navigable\", children: \"children\", loadOnDemand: \"loadOnDemand\", filterable: \"filterable\", filter: \"filter\", animate: \"animate\", nodeTemplateRef: [\"nodeTemplate\", \"nodeTemplateRef\"], loadMoreButtonTemplateRef: [\"loadMoreButtonTemplate\", \"loadMoreButtonTemplateRef\"], nodes: \"nodes\", hasChildren: \"hasChildren\", isChecked: \"isChecked\", isExpanded: \"isExpanded\", isSelected: \"isSelected\", textField: \"textField\" }, outputs: { childrenLoaded: \"childrenLoaded\", onBlur: \"blur\", onFocus: \"focus\", expand: \"expand\", collapse: \"collapse\", nodeDragStart: \"nodeDragStart\", nodeDrag: \"nodeDrag\", filterStateChange: \"filterStateChange\", nodeDrop: \"nodeDrop\", nodeDragEnd: \"nodeDragEnd\", addItem: \"addItem\", removeItem: \"removeItem\", checkedChange: \"checkedChange\", selectionChange: \"selectionChange\", filterChange: \"filterChange\", nodeClick: \"nodeClick\", nodeDblClick: \"nodeDblClick\" }, exportAs: [\"kendoTreeView\"], features: [ɵngcc0.ɵɵProvidersFeature(providers), ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 19, consts: [[3, \"value\", \"clearButton\", \"placeholder\", \"valueChange\", 4, \"ngIf\"], [\"kendoTreeViewGroup\", \"\", \"role\", \"group\", 1, \"k-treeview-lines\", 3, \"loadOnDemand\", \"checkboxes\", \"expandIcons\", \"selectable\", \"touchActions\", \"children\", \"hasChildren\", \"isChecked\", \"isDisabled\", \"isExpanded\", \"isSelected\", \"isVisible\", \"nodeTemplateRef\", \"loadMoreButtonTemplateRef\", \"textField\", \"nodes\", \"loadMoreService\", \"trackBy\"], [\"assetsContainer\", \"\"], [3, \"value\", \"clearButton\", \"placeholder\", \"valueChange\"], [\"filterInput\", \"\"], [\"kendoTextBoxPrefixTemplate\", \"\"], [1, \"k-icon\", \"k-i-search\"]], template: function TreeViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TreeViewComponent_kendo_textbox_0_Template, 3, 3, \"kendo-textbox\", 0);\n ɵngcc0.ɵɵelement(1, \"ul\", 1);\n ɵngcc0.ɵɵelementContainer(2, null, 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.filterable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"loadOnDemand\", ctx.loadOnDemand)(\"checkboxes\", ctx.checkboxes)(\"expandIcons\", ctx.expandIcons)(\"selectable\", ctx.selectable)(\"touchActions\", ctx.touchActions)(\"children\", ctx.children)(\"hasChildren\", ctx.hasChildren)(\"isChecked\", ctx.isChecked)(\"isDisabled\", ctx.isDisabled)(\"isExpanded\", ctx.isExpanded)(\"isSelected\", ctx.isSelected)(\"isVisible\", ctx.isVisible)(\"nodeTemplateRef\", ctx.nodeTemplateRef == null ? null : ctx.nodeTemplateRef.templateRef)(\"loadMoreButtonTemplateRef\", ctx.loadMoreButtonTemplateRef == null ? null : ctx.loadMoreButtonTemplateRef.templateRef)(\"textField\", ctx.textField)(\"nodes\", ctx.fetchNodes)(\"loadMoreService\", ctx.loadMoreService)(\"trackBy\", ctx.trackBy);\n } }, directives: function () { return [ɵngcc2.NgIf, ɵngcc3.TextBoxComponent, ɵngcc3.TextBoxPrefixTemplateDirective, TreeViewGroupComponent]; }, encapsulation: 2 });\n__decorate([\n HostBinding(\"class.k-widget\"),\n HostBinding(\"class.k-treeview\"),\n __metadata(\"design:type\", Boolean)\n], TreeViewComponent.prototype, \"classNames\", void 0);\n__decorate([\n HostBinding(\"attr.role\"),\n __metadata(\"design:type\", String)\n], TreeViewComponent.prototype, \"role\", void 0);\n__decorate([\n HostBinding(\"attr.dir\"),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], TreeViewComponent.prototype, \"direction\", null);\n__decorate([\n ViewChild('assetsContainer', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], TreeViewComponent.prototype, \"assetsContainer\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewComponent.prototype, \"filterInputPlaceholder\", void 0);\n__decorate([\n Input(),\n HostBinding('@.disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], TreeViewComponent.prototype, \"animate\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"childrenLoaded\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"expand\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"collapse\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeDragStart\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeDrag\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"filterStateChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeDrop\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeDragEnd\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"addItem\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"removeItem\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"checkedChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"selectionChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TreeViewComponent.prototype, \"nodeDblClick\", void 0);\n__decorate([\n ContentChild(NodeTemplateDirective, { static: false }),\n __metadata(\"design:type\", NodeTemplateDirective)\n], TreeViewComponent.prototype, \"nodeTemplateQuery\", void 0);\n__decorate([\n Input('nodeTemplate'),\n __metadata(\"design:type\", NodeTemplateDirective),\n __metadata(\"design:paramtypes\", [NodeTemplateDirective])\n], TreeViewComponent.prototype, \"nodeTemplateRef\", null);\n__decorate([\n ContentChild(LoadMoreButtonTemplateDirective, { static: false }),\n __metadata(\"design:type\", LoadMoreButtonTemplateDirective)\n], TreeViewComponent.prototype, \"loadMoreButtonTemplateQuery\", void 0);\n__decorate([\n Input('loadMoreButtonTemplate'),\n __metadata(\"design:type\", LoadMoreButtonTemplateDirective),\n __metadata(\"design:paramtypes\", [LoadMoreButtonTemplateDirective])\n], TreeViewComponent.prototype, \"loadMoreButtonTemplateRef\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewComponent.prototype, \"trackBy\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], TreeViewComponent.prototype, \"nodes\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], TreeViewComponent.prototype, \"hasChildren\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], TreeViewComponent.prototype, \"isChecked\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewComponent.prototype, \"isDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], TreeViewComponent.prototype, \"isExpanded\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], TreeViewComponent.prototype, \"isSelected\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewComponent.prototype, \"isVisible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewComponent.prototype, \"navigable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewComponent.prototype, \"children\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewComponent.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewComponent.prototype, \"filter\", void 0);\nTreeViewComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n ChangeDetectorRef,\n ExpandStateService,\n NavigationService,\n NodeChildrenService,\n SelectionService,\n TreeViewLookupService,\n NgZone,\n Renderer2,\n DataChangeNotificationService,\n LocalizationService])\n], TreeViewComponent);\n\n/**\n * @hidden\n */\nlet TreeViewGroupComponent = class TreeViewGroupComponent {\n constructor(expandService, loadingService, indexBuilder, treeViewLookupService, navigationService, nodeChildrenService, dataChangeNotification, changeDetectorRef) {\n this.expandService = expandService;\n this.loadingService = loadingService;\n this.indexBuilder = indexBuilder;\n this.treeViewLookupService = treeViewLookupService;\n this.navigationService = navigationService;\n this.nodeChildrenService = nodeChildrenService;\n this.dataChangeNotification = dataChangeNotification;\n this.changeDetectorRef = changeDetectorRef;\n this.kGroupClass = true;\n this.role = 'group';\n this.loadOnDemand = true;\n this.textField = \"\";\n this.initialNodesLoaded = false;\n this.loadingMoreNodes = false;\n this._data = [];\n this.singleRecordSubscriptions = new Subscription();\n this.isChecked = () => 'none';\n this.isDisabled = () => false;\n this.isExpanded = () => false;\n this.isVisible = () => true;\n this.isSelected = () => false;\n this.children = () => of([]);\n this.hasChildren = () => false;\n }\n get moreNodesAvailable() {\n if (!isPresent(this.loadMoreService) || this.data.length === 0) {\n return false;\n }\n return this.pageSize < this.totalNodesCount;\n }\n get pageSize() {\n if (!isPresent(this.loadMoreService)) {\n return null;\n }\n return this.loadMoreService.getGroupSize(this.parentDataItem);\n }\n set pageSize(pageSize) {\n this.loadMoreService.setGroupSize(this.parentDataItem, pageSize);\n }\n get data() {\n if (isPresent(this.pageSize)) {\n const normalizedSizeValue = this.pageSize > 0 ? this.pageSize : 0;\n return this._data.slice(0, normalizedSizeValue);\n }\n return this._data;\n }\n set data(data) {\n this._data = data;\n this.registerLoadedNodes(this.data);\n }\n get loadMoreButtonIndex() {\n if (!this.loadMoreService) {\n return null;\n }\n return this.nodeIndex(this.data.length);\n }\n /**\n * Represents the total number of nodes for the current level.\n */\n get totalNodesCount() {\n if (!this.loadMoreService) {\n return this.data.length;\n }\n return this.loadMoreService.getTotalNodesCount(this.parentDataItem, this._data.length);\n }\n get hasTemplate() {\n return isPresent(this.nodeTemplateRef);\n }\n expandNode(index, dataItem, expand) {\n if (expand) {\n this.expandService.expand(index, dataItem);\n }\n else {\n this.expandService.collapse(index, dataItem);\n }\n }\n checkNode(index) {\n this.navigationService.checkIndex(index);\n this.navigationService.activateIndex(index);\n }\n nodeIndex(index) {\n return this.indexBuilder.nodeIndex(index.toString(), this.parentIndex);\n }\n nodeText(dataItem) {\n const textField = isArray(this.textField) ? this.textField[0] : this.textField;\n return getter(textField)(dataItem);\n }\n ngOnDestroy() {\n if (isPresent(this.nodesSubscription)) {\n this.nodesSubscription.unsubscribe();\n }\n if (isPresent(this.loadMoreNodesSubscription)) {\n this.loadMoreNodesSubscription.unsubscribe();\n }\n this.singleRecordSubscriptions.unsubscribe();\n }\n ngOnInit() {\n this.subscribeToNodesChange();\n this.singleRecordSubscriptions.add(this.dataChangeNotification\n .changes\n .subscribe(this.subscribeToNodesChange.bind(this)));\n this.singleRecordSubscriptions.add(this.navigationService.loadMore\n .pipe(filter(index => index === this.loadMoreButtonIndex))\n .subscribe(this.loadMoreNodes.bind(this)));\n }\n ngOnChanges(changes) {\n if (changes.parentIndex && this.loadOnDemand) {\n this.setNodeChildren(this.mapToTreeItem(this.data));\n }\n }\n fetchChildren(node, index) {\n return this.children(node)\n .pipe(catchError(() => {\n this.loadingService.notifyLoaded(index);\n return EMPTY;\n }), tap(() => this.loadingService.notifyLoaded(index)));\n }\n get nextFields() {\n if (isArray(this.textField)) {\n return this.textField.length > 1 ? this.textField.slice(1) : this.textField;\n }\n return [this.textField];\n }\n loadMoreNodes() {\n if (isPresent(this.loadMoreService.loadMoreNodes)) {\n this.fetchMoreNodes();\n }\n else {\n this.loadMoreLocalNodes();\n }\n }\n loadMoreLocalNodes() {\n const initialLoadMoreButtonIndex = this.loadMoreButtonIndex;\n this.pageSize += this.loadMoreService.getInitialPageSize(this.parentDataItem);\n this.registerLoadedNodes(this.data);\n // forces the new items to be registered before the focus is changed\n this.changeDetectorRef.detectChanges();\n this.reselectItemAt(initialLoadMoreButtonIndex);\n }\n fetchMoreNodes() {\n if (this.loadingMoreNodes) {\n return;\n }\n this.loadingMoreNodes = true;\n if (isPresent(this.loadMoreNodesSubscription)) {\n this.loadMoreNodesSubscription.unsubscribe();\n }\n this.loadMoreNodesSubscription = this.loadMoreService\n .loadMoreNodes({\n dataItem: this.parentDataItem,\n skip: this.data.length,\n take: this.loadMoreService.getInitialPageSize(this.parentDataItem)\n })\n .pipe(finalize(() => this.loadingMoreNodes = false))\n .subscribe(items => {\n if (!(Array.isArray(items) && items.length > 0)) {\n return;\n }\n const initialLoadMoreButtonIndex = this.loadMoreButtonIndex;\n this.pageSize += items.length;\n this.data = this.data.concat(items);\n if (this.navigationService.isActive(initialLoadMoreButtonIndex)) {\n // forces the new items to be registered before the focus is changed\n this.changeDetectorRef.detectChanges();\n this.reselectItemAt(initialLoadMoreButtonIndex);\n }\n });\n }\n setNodeChildren(children) {\n this.treeViewLookupService.registerChildren(this.parentIndex, children);\n }\n mapToTreeItem(data) {\n if (!this.parentIndex) {\n return [];\n }\n return data.map((dataItem, idx) => ({ dataItem, index: this.nodeIndex(idx) }));\n }\n emitChildrenLoaded(children) {\n if (!this.parentIndex) {\n return;\n }\n // ignores the registered load-more button\n const contentChildren = children.filter(item => item.dataItem);\n this.nodeChildrenService.childrenLoaded({ dataItem: this.parentDataItem, index: this.parentIndex }, contentChildren);\n }\n subscribeToNodesChange() {\n if (this.nodesSubscription) {\n this.nodesSubscription.unsubscribe();\n }\n this.nodesSubscription = this.nodes(this.parentDataItem, this.parentIndex)\n .subscribe(data => {\n this.data = data;\n this.initialNodesLoaded = true;\n });\n }\n reselectItemAt(index) {\n if (!isPresent(index)) {\n return;\n }\n // make sure the old index is cleared first\n this.navigationService.deactivate();\n this.navigationService.activateIndex(index);\n }\n registerLoadedNodes(nodes = []) {\n const mappedChildren = this.mapToTreeItem(nodes);\n if (this.loadOnDemand) {\n this.setNodeChildren(mappedChildren);\n }\n this.emitChildrenLoaded(mappedChildren);\n }\n};\nTreeViewGroupComponent.ɵfac = function TreeViewGroupComponent_Factory(t) { return new (t || TreeViewGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ExpandStateService), ɵngcc0.ɵɵdirectiveInject(LoadingNotificationService), ɵngcc0.ɵɵdirectiveInject(IndexBuilderService), ɵngcc0.ɵɵdirectiveInject(TreeViewLookupService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(NodeChildrenService), ɵngcc0.ɵɵdirectiveInject(DataChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nTreeViewGroupComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TreeViewGroupComponent, selectors: [[\"\", \"kendoTreeViewGroup\", \"\"]], hostVars: 3, hostBindings: function TreeViewGroupComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.role);\n ɵngcc0.ɵɵclassProp(\"k-group\", ctx.kGroupClass);\n } }, inputs: { loadOnDemand: \"loadOnDemand\", textField: \"textField\", isChecked: \"isChecked\", isDisabled: \"isDisabled\", isExpanded: \"isExpanded\", isVisible: \"isVisible\", isSelected: \"isSelected\", children: \"children\", hasChildren: \"hasChildren\", checkboxes: \"checkboxes\", expandIcons: \"expandIcons\", disabled: \"disabled\", selectable: \"selectable\", touchActions: \"touchActions\", trackBy: \"trackBy\", nodes: \"nodes\", parentDataItem: \"parentDataItem\", parentIndex: \"parentIndex\", nodeTemplateRef: \"nodeTemplateRef\", loadMoreButtonTemplateRef: \"loadMoreButtonTemplateRef\", loadMoreService: \"loadMoreService\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c1, decls: 2, vars: 3, consts: [[\"class\", \"k-item k-treeview-item\", \"kendoTreeViewItem\", \"\", 3, \"k-display-none\", \"dataItem\", \"index\", \"parentDataItem\", \"parentIndex\", \"loadOnDemand\", \"checkable\", \"isChecked\", \"isDisabled\", \"isVisible\", \"expandable\", \"isExpanded\", \"selectable\", \"isSelected\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"class\", \"k-item k-treeview-item\", \"kendoTreeViewItem\", \"\", \"role\", \"button\", 3, \"k-treeview-load-more-checkboxes-container\", \"selectable\", \"checkable\", \"expandable\", \"index\", \"parentDataItem\", \"parentIndex\", 4, \"ngIf\"], [\"kendoTreeViewItem\", \"\", 1, \"k-item\", \"k-treeview-item\", 3, \"dataItem\", \"index\", \"parentDataItem\", \"parentIndex\", \"loadOnDemand\", \"checkable\", \"isChecked\", \"isDisabled\", \"isVisible\", \"expandable\", \"isExpanded\", \"selectable\", \"isSelected\"], [1, \"k-mid\"], [\"class\", \"k-icon\", 3, \"k-i-collapse\", \"k-i-expand\", \"kendoTreeViewLoading\", \"click\", 4, \"ngIf\"], [\"tabindex\", \"-1\", 3, \"node\", \"index\", \"isChecked\", \"checkStateChange\", 4, \"ngIf\"], [\"kendoTreeViewItemContent\", \"\", 1, \"k-in\", 3, \"dataItem\", \"index\", \"initialSelection\", \"isSelected\"], [3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [4, \"ngSwitchDefault\"], [\"kendoTreeViewGroup\", \"\", \"role\", \"group\", 3, \"nodes\", \"loadOnDemand\", \"checkboxes\", \"expandIcons\", \"selectable\", \"touchActions\", \"children\", \"hasChildren\", \"isChecked\", \"isDisabled\", \"disabled\", \"isExpanded\", \"isSelected\", \"isVisible\", \"nodeTemplateRef\", \"loadMoreButtonTemplateRef\", \"parentIndex\", \"parentDataItem\", \"textField\", \"loadMoreService\", \"trackBy\", 4, \"ngIf\"], [1, \"k-icon\", 3, \"kendoTreeViewLoading\", \"click\"], [\"tabindex\", \"-1\", 3, \"node\", \"index\", \"isChecked\", \"checkStateChange\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"kendoTreeViewGroup\", \"\", \"role\", \"group\", 3, \"nodes\", \"loadOnDemand\", \"checkboxes\", \"expandIcons\", \"selectable\", \"touchActions\", \"children\", \"hasChildren\", \"isChecked\", \"isDisabled\", \"disabled\", \"isExpanded\", \"isSelected\", \"isVisible\", \"nodeTemplateRef\", \"loadMoreButtonTemplateRef\", \"parentIndex\", \"parentDataItem\", \"textField\", \"loadMoreService\", \"trackBy\"], [\"kendoTreeViewItem\", \"\", \"role\", \"button\", 1, \"k-item\", \"k-treeview-item\", 3, \"selectable\", \"checkable\", \"expandable\", \"index\", \"parentDataItem\", \"parentIndex\"], [\"class\", \"k-icon k-i-loading k-i-expand\", 4, \"ngIf\"], [\"kendoTreeViewItemContent\", \"\", 1, \"k-in\", \"k-treeview-load-more-button\", 3, \"index\"], [4, \"ngIf\"], [1, \"k-icon\", \"k-i-loading\", \"k-i-expand\"]], template: function TreeViewGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TreeViewGroupComponent_li_0_Template, 9, 29, \"li\", 0);\n ɵngcc0.ɵɵtemplate(1, TreeViewGroupComponent_li_1_Template, 6, 14, \"li\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data)(\"ngForTrackBy\", ctx.trackBy);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.initialNodesLoaded && ctx.moreNodesAvailable);\n } }, directives: function () { return [ɵngcc2.NgForOf, TreeViewItemDirective, ɵngcc2.NgIf, LoadingIndicatorDirective, CheckBoxComponent, TreeViewItemContentDirective, ɵngcc2.NgSwitch, ɵngcc2.NgSwitchCase, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgSwitchDefault, TreeViewGroupComponent]; }, encapsulation: 2, data: { animation: [\n trigger('toggle', [\n transition('void => *', [\n style({ height: 0 }),\n animate('0.1s ease-in', style({ height: \"*\" }))\n ]),\n transition('* => void', [\n style({ height: \"*\" }),\n animate('0.1s ease-in', style({ height: 0 }))\n ])\n ])\n ] } });\n__decorate([\n HostBinding(\"class.k-group\"),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"kGroupClass\", void 0);\n__decorate([\n HostBinding(\"attr.role\"),\n __metadata(\"design:type\", String)\n], TreeViewGroupComponent.prototype, \"role\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"checkboxes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"expandIcons\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"selectable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"touchActions\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewGroupComponent.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"trackBy\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"nodes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewGroupComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewGroupComponent.prototype, \"parentDataItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewGroupComponent.prototype, \"parentIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], TreeViewGroupComponent.prototype, \"nodeTemplateRef\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], TreeViewGroupComponent.prototype, \"loadMoreButtonTemplateRef\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewGroupComponent.prototype, \"loadMoreService\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"isChecked\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"isDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"isExpanded\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"isVisible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"isSelected\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"children\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewGroupComponent.prototype, \"hasChildren\", void 0);\nTreeViewGroupComponent = __decorate([ __metadata(\"design:paramtypes\", [ExpandStateService,\n LoadingNotificationService,\n IndexBuilderService,\n TreeViewLookupService,\n NavigationService,\n NodeChildrenService,\n DataChangeNotificationService,\n ChangeDetectorRef])\n], TreeViewGroupComponent);\n\nconst indexChecked = (keys, index) => keys.filter(k => k === index).length > 0;\nconst matchKey = index => k => {\n if (index === k) {\n return true;\n }\n if (!k.split) {\n return false;\n }\n return k.split('_').reduce(({ key, result }, part) => {\n key += part;\n if (index === key || result) {\n return { result: true };\n }\n key += \"_\";\n return { key, result: false };\n }, { key: \"\", result: false }).result;\n};\n/**\n * A directive which manages the in-memory checked state of the TreeView node\n * ([see example]({% slug checkboxes_treeview %})).\n */\nlet CheckDirective = class CheckDirective {\n constructor(treeView, zone) {\n this.treeView = treeView;\n this.zone = zone;\n /**\n * Fires when the `checkedKeys` collection was updated.\n */\n this.checkedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n this.checkActions = {\n 'multiple': (e) => this.checkMultiple(e),\n 'single': (e) => this.checkSingle(e)\n };\n this._checkedKeys = [];\n this.subscriptions.add(this.treeView.checkedChange\n .subscribe((e) => this.check(e)));\n let expandedItems = [];\n this.subscriptions.add(this.treeView.childrenLoaded\n .pipe(filter(() => this.options.checkChildren && this.treeView.loadOnDemand), tap(item => expandedItems.push(item)), switchMap(() => this.zone.onStable.pipe(take(1))))\n .subscribe(() => this.addCheckedItemsChildren(expandedItems)));\n this.treeView.isChecked = this.isItemChecked.bind(this);\n }\n /**\n * @hidden\n */\n set isChecked(value) {\n this.treeView.isChecked = value;\n }\n /**\n * Defines the collection that will store the checked keys\n * ([see example]({% slug checkboxes_treeview %})).\n */\n get checkedKeys() {\n return this._checkedKeys;\n }\n set checkedKeys(keys) {\n this._checkedKeys = keys;\n }\n get options() {\n const defaultOptions = {\n checkChildren: true,\n checkParents: true,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.checkable) || typeof this.checkable === 'string') {\n return defaultOptions;\n }\n const checkSettings = isBoolean(this.checkable)\n ? { enabled: this.checkable }\n : this.checkable;\n return Object.assign(defaultOptions, checkSettings);\n }\n ngOnChanges(changes) {\n if (changes.checkable) {\n this.treeView.checkboxes = this.options.enabled;\n this.toggleCheckOnClick();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribeClick();\n }\n isItemChecked(dataItem, index) {\n if (!this.checkKey) {\n return this.isIndexChecked(index);\n }\n const keyIndex = this.checkedKeys.indexOf(this.itemKey({ dataItem, index }));\n return keyIndex > -1 ? 'checked' : 'none';\n }\n isIndexChecked(index) {\n const checkedKeys = this.checkedKeys.filter(matchKey(index));\n if (indexChecked(checkedKeys, index)) {\n return 'checked';\n }\n const { mode, checkParents } = this.options;\n if (mode === 'multiple' && checkParents && checkedKeys.length) {\n return 'indeterminate';\n }\n return 'none';\n }\n itemKey(item) {\n if (!isPresent(this.checkKey)) {\n return item.index;\n }\n if (typeof this.checkKey === \"string\" && isPresent(item.dataItem)) {\n return item.dataItem[this.checkKey];\n }\n if (typeof this.checkKey === \"function\") {\n return this.checkKey(item);\n }\n }\n check(e) {\n const { enabled, mode } = this.options;\n const performSelection = this.checkActions[mode] || noop;\n if (!enabled) {\n return;\n }\n performSelection(e);\n }\n checkSingle(node) {\n const key = this.itemKey(node.item);\n this.checkedKeys = this.checkedKeys[0] !== key ? [key] : [];\n this.notify();\n }\n checkMultiple(node) {\n this.checkNode(node);\n if (this.options.checkParents) {\n this.checkParents(node.parent);\n }\n this.notify();\n }\n toggleCheckOnClick() {\n this.unsubscribeClick();\n if (this.options.checkOnClick) {\n this.clickSubscription = this.treeView.nodeClick.subscribe(args => {\n if (args.type === 'click') {\n const lookup = this.treeView.itemLookup(args.item.index);\n this.check(lookup);\n }\n });\n }\n }\n unsubscribeClick() {\n if (this.clickSubscription) {\n this.clickSubscription.unsubscribe();\n this.clickSubscription = null;\n }\n }\n checkNode(node) {\n if (!isPresent(node.item.dataItem) || this.treeView.isDisabled(node.item.dataItem, node.item.index)) {\n return;\n }\n const currentKey = this.itemKey(node.item);\n if (!isPresent(currentKey)) {\n return;\n }\n const checkedKeys = new Set(this.checkedKeys);\n const pendingCheck = [currentKey];\n if (this.options.checkChildren) {\n const descendants = fetchLoadedDescendants(node, ({ item }) => this.treeView.isVisible(item.dataItem, item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index))\n .map(({ item }) => this.itemKey(item));\n pendingCheck.push(...descendants);\n }\n const shouldCheck = !checkedKeys.has(currentKey);\n pendingCheck.forEach(key => {\n if (shouldCheck) {\n checkedKeys.add(key);\n }\n else {\n checkedKeys.delete(key);\n }\n });\n this.checkedKeys = Array.from(checkedKeys);\n }\n checkParents(parent) {\n if (!isPresent(parent)) {\n return;\n }\n const checkedKeys = new Set(this.checkedKeys);\n let currentParent = parent;\n while (currentParent) {\n const parentKey = this.itemKey(currentParent.item);\n const allChildrenSelected = currentParent.children.every(item => checkedKeys.has(this.itemKey(item)));\n if (allChildrenSelected) {\n checkedKeys.add(parentKey);\n }\n else {\n checkedKeys.delete(parentKey);\n }\n currentParent = currentParent.parent;\n }\n this.checkedKeys = Array.from(checkedKeys);\n }\n notify() {\n this.checkedKeysChange.emit(this.checkedKeys.slice());\n }\n addCheckedItemsChildren(lookups) {\n if (!isPresent(lookups) || lookups.length === 0) {\n return;\n }\n const initiallyCheckedItemsCount = this.checkedKeys.length;\n const checkedKeys = new Set(this.checkedKeys);\n lookups.forEach(lookup => {\n const itemKey = this.itemKey(lookup.item);\n if (!checkedKeys.has(itemKey)) {\n return;\n }\n lookup.children.forEach(item => {\n // ensure both the parent item and each child node is enabled\n if (!this.treeView.isDisabled(lookup.item.dataItem, lookup.item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index)) {\n checkedKeys.add(this.itemKey(item));\n }\n });\n });\n const hasNewlyCheckedItems = initiallyCheckedItemsCount !== checkedKeys.size;\n if (hasNewlyCheckedItems) {\n this.checkedKeys = Array.from(checkedKeys);\n this.zone.run(() => this.notify());\n }\n }\n};\nCheckDirective.ɵfac = function CheckDirective_Factory(t) { return new (t || CheckDirective)(ɵngcc0.ɵɵdirectiveInject(TreeViewComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nCheckDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CheckDirective, selectors: [[\"\", \"kendoTreeViewCheckable\", \"\"]], inputs: { isChecked: \"isChecked\", checkedKeys: \"checkedKeys\", checkKey: [\"checkBy\", \"checkKey\"], checkable: [\"kendoTreeViewCheckable\", \"checkable\"] }, outputs: { checkedKeysChange: \"checkedKeysChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], CheckDirective.prototype, \"isChecked\", null);\n__decorate([\n Input(\"checkBy\"),\n __metadata(\"design:type\", Object)\n], CheckDirective.prototype, \"checkKey\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], CheckDirective.prototype, \"checkedKeys\", null);\n__decorate([\n Input('kendoTreeViewCheckable'),\n __metadata(\"design:type\", Object)\n], CheckDirective.prototype, \"checkable\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], CheckDirective.prototype, \"checkedKeysChange\", void 0);\nCheckDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent,\n NgZone])\n], CheckDirective);\n\n/**\n * A directive which manages the disabled in-memory state of the TreeView node\n * ([see example]({% slug disabledstate_treeview %})).\n */\nlet DisableDirective = class DisableDirective {\n constructor(treeView, cdr) {\n this.treeView = treeView;\n this.cdr = cdr;\n /**\n * Defines the collection that will store the disabled keys.\n */\n this.disabledKeys = [];\n this.treeView.isDisabled = (dataItem, index) => (this.disabledKeys.indexOf(this.itemKey({ dataItem, index })) > -1);\n }\n /**\n * @hidden\n */\n set isDisabled(value) {\n this.treeView.isDisabled = value;\n }\n ngOnChanges(changes = {}) {\n const { disabledKeys } = changes;\n if (disabledKeys && !disabledKeys.firstChange) {\n this.cdr.markForCheck();\n }\n }\n itemKey(e) {\n if (!this.disableKey) {\n return e.index;\n }\n if (typeof this.disableKey === \"string\") {\n return e.dataItem[this.disableKey];\n }\n if (typeof this.disableKey === \"function\") {\n return this.disableKey(e);\n }\n }\n};\nDisableDirective.ɵfac = function DisableDirective_Factory(t) { return new (t || DisableDirective)(ɵngcc0.ɵɵdirectiveInject(TreeViewComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDisableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DisableDirective, selectors: [[\"\", \"kendoTreeViewDisable\", \"\"]], inputs: { disabledKeys: \"disabledKeys\", isDisabled: \"isDisabled\", disableKey: [\"kendoTreeViewDisable\", \"disableKey\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], DisableDirective.prototype, \"isDisabled\", null);\n__decorate([\n Input(\"kendoTreeViewDisable\"),\n __metadata(\"design:type\", Object)\n], DisableDirective.prototype, \"disableKey\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], DisableDirective.prototype, \"disabledKeys\", void 0);\nDisableDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent,\n ChangeDetectorRef])\n], DisableDirective);\n\nconst DEFAULT_FILTER_EXPAND_SETTINGS = {\n maxAutoExpandResults: -1,\n expandMatches: false,\n expandedOnClear: \"none\"\n};\n/**\n * A directive which manages the expanded state of the TreeView.\n * ([see example]({% slug expandedstate_treeview %})).\n */\nlet ExpandDirective = class ExpandDirective {\n constructor(component) {\n this.component = component;\n /**\n * Whether or not to auto-expand the nodes leading from the root node to each filter result.\n * To fine-tune this behavior, pass a [`FilterExpandSettings`]({% slug api_treeview_filterexpandsettings %}) object to this input.\n * @default false\n */\n this.expandOnFilter = false;\n /**\n * Fires when the `expandedKeys` collection was updated.\n */\n this.expandedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n this._expandedKeys = [];\n this.originalExpandedKeys = [];\n this.isFiltered = false;\n /**\n * Fills array with the correct expand keys according to wrapper metadata.\n */\n this.updateExpandedNodes = (collection, node, autoExpandMatches) => {\n if (node.containsMatches || node.isMatch && autoExpandMatches && isArrayWithAtLeastOneItem(node.children)) {\n collection.push(this.itemKey({ dataItem: node.dataItem, index: node.index }));\n }\n if (isArrayWithAtLeastOneItem(node.children)) {\n node.children.forEach(child => {\n this.updateExpandedNodes(collection, child, autoExpandMatches);\n });\n }\n };\n /**\n * Fills array with the expand key of every node.\n */\n this.getEveryExpandKey = (collection, node) => {\n if (isArrayWithAtLeastOneItem(node.children)) {\n collection.push(this.itemKey({ dataItem: node.dataItem, index: node.index }));\n }\n if (isArrayWithAtLeastOneItem(node.children)) {\n node.children.forEach(child => {\n this.getEveryExpandKey(collection, child);\n });\n }\n };\n this.subscriptions.add(merge(this.component.expand.pipe(map(e => (Object.assign({ expand: true }, e)))), this.component.collapse.pipe(map(e => (Object.assign({ expand: false }, e))))).subscribe(this.toggleExpand.bind(this)));\n if (this.component.filterStateChange) {\n this.subscriptions.add(this.component.filterStateChange.subscribe(this.handleAutoExpand.bind(this)));\n }\n this.component.isExpanded = (dataItem, index) => this.expandedKeys.indexOf(this.itemKey({ dataItem, index })) > -1;\n }\n /**\n * @hidden\n */\n set isExpanded(value) {\n this.component.isExpanded = value;\n }\n get filterExpandSettings() {\n const settings = isBoolean(this.expandOnFilter) ? { enabled: this.expandOnFilter } : Object.assign({}, this.expandOnFilter, { enabled: true });\n return Object.assign({}, DEFAULT_FILTER_EXPAND_SETTINGS, settings);\n }\n /**\n * Defines the collection that will store the expanded keys.\n */\n get expandedKeys() {\n return this._expandedKeys;\n }\n set expandedKeys(keys) {\n this._expandedKeys = keys;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n itemKey(e) {\n if (this.expandKey) {\n if (typeof this.expandKey === \"string\") {\n return e.dataItem[this.expandKey];\n }\n if (typeof this.expandKey === \"function\") {\n return this.expandKey(e);\n }\n }\n return e.index;\n }\n toggleExpand({ index, dataItem, expand }) {\n const item = this.itemKey({ index, dataItem });\n const idx = this.expandedKeys.indexOf(item);\n let notify = false;\n if (idx > -1 && !expand) {\n this.expandedKeys.splice(idx, 1);\n notify = true;\n }\n else if (idx === -1 && expand) {\n this.expandedKeys.push(item);\n notify = true;\n }\n if (notify) {\n this.expandedKeysChange.emit(this.expandedKeys);\n }\n }\n handleAutoExpand({ nodes, matchCount, term }) {\n if (!this.filterExpandSettings.enabled) {\n return;\n }\n const { maxAutoExpandResults, expandMatches: autoExpandMatches, expandedOnClear } = this.filterExpandSettings;\n if (!this.isFiltered) {\n this.originalExpandedKeys = this.expandedKeys.slice();\n }\n const exitingFilteredState = this.isFiltered && !term;\n const maxExceeded = maxAutoExpandResults !== -1 && matchCount > maxAutoExpandResults;\n const exitAutoExpandedState = exitingFilteredState || maxExceeded;\n if (exitAutoExpandedState) {\n switch (expandedOnClear) {\n case \"initial\": {\n if (!sameValues(this.expandedKeys, this.originalExpandedKeys)) {\n this.expandedKeys = this.originalExpandedKeys;\n this.expandedKeysChange.emit(this.expandedKeys);\n }\n break;\n }\n case \"all\": {\n this.expandedKeys = nodes.reduce((acc, rootNode) => {\n this.getEveryExpandKey(acc, rootNode);\n return acc;\n }, []);\n this.expandedKeysChange.emit(this.expandedKeys);\n break;\n }\n case \"unchanged\": {\n break;\n }\n case \"none\":\n default: {\n if (this.expandedKeys.length !== 0) {\n this.expandedKeys = [];\n this.expandedKeysChange.emit(this.expandedKeys);\n }\n break;\n }\n }\n this.isFiltered = false;\n return;\n }\n const indicesToExpand = nodes.reduce((acc, rootNode) => {\n this.updateExpandedNodes(acc, rootNode, autoExpandMatches);\n return acc;\n }, []);\n if (!sameValues(this.expandedKeys, indicesToExpand)) {\n this.expandedKeys = indicesToExpand;\n this.expandedKeysChange.emit(this.expandedKeys);\n }\n this.isFiltered = true;\n }\n};\nExpandDirective.ɵfac = function ExpandDirective_Factory(t) { return new (t || ExpandDirective)(ɵngcc0.ɵɵdirectiveInject(ExpandableComponent)); };\nExpandDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ExpandDirective, selectors: [[\"\", \"kendoTreeViewExpandable\", \"\"]], inputs: { expandOnFilter: \"expandOnFilter\", isExpanded: \"isExpanded\", expandedKeys: \"expandedKeys\", expandKey: [\"expandBy\", \"expandKey\"] }, outputs: { expandedKeysChange: \"expandedKeysChange\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], ExpandDirective.prototype, \"isExpanded\", null);\n__decorate([\n Input(\"expandBy\"),\n __metadata(\"design:type\", Object)\n], ExpandDirective.prototype, \"expandKey\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ExpandDirective.prototype, \"expandOnFilter\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ExpandDirective.prototype, \"expandedKeysChange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], ExpandDirective.prototype, \"expandedKeys\", null);\nExpandDirective = __decorate([ __metadata(\"design:paramtypes\", [ExpandableComponent])\n], ExpandDirective);\n\n/**\n * A directive which manages the in-memory selection state of the TreeView node\n * ([see example]({% slug selection_treeview %})).\n */\nlet SelectDirective = class SelectDirective {\n constructor(treeView) {\n this.treeView = treeView;\n /**\n * Fires when the `selectedKeys` collection was updated.\n */\n this.selectedKeysChange = new EventEmitter();\n this.subscriptions = new Subscription();\n this.selectActions = {\n 'multiple': (e) => this.selectMultiple(e),\n 'single': (e) => this.selectSingle(e)\n };\n this._selectedKeys = [];\n this.subscriptions.add(this.treeView.selectionChange.subscribe(this.select.bind(this)));\n this.treeView.isSelected = (dataItem, index) => (this.selectedKeys.indexOf(this.itemKey({ dataItem, index })) > -1);\n }\n /**\n * @hidden\n */\n set isSelected(value) {\n this.treeView.isSelected = value;\n }\n /**\n * Defines the collection that will store the selected keys\n * ([see example]({% slug selection_treeview %}#toc-selection-modes)).\n */\n get selectedKeys() {\n return this._selectedKeys;\n }\n set selectedKeys(keys) {\n this._selectedKeys = keys;\n }\n get getAriaMultiselectable() {\n return this.options.mode === 'multiple';\n }\n get options() {\n const defaultOptions = {\n enabled: true,\n mode: 'single'\n };\n if (!isPresent(this.selection) || typeof this.selection === 'string') {\n return defaultOptions;\n }\n const selectionSettings = isBoolean(this.selection) ? { enabled: this.selection } : this.selection;\n return Object.assign(defaultOptions, selectionSettings);\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n itemKey(e) {\n if (!this.selectKey) {\n return e.index;\n }\n if (typeof this.selectKey === 'string') {\n return e.dataItem[this.selectKey];\n }\n if (typeof this.selectKey === 'function') {\n return this.selectKey(e);\n }\n }\n select(e) {\n const { enabled, mode } = this.options;\n const performSelection = this.selectActions[mode] || noop;\n if (!enabled) {\n return;\n }\n performSelection(e);\n }\n selectSingle(node) {\n const key = this.itemKey(node);\n if (this.selectedKeys[0] === key) {\n return;\n }\n this.selectedKeys = [key];\n this.notify();\n }\n selectMultiple(node) {\n const key = this.itemKey(node);\n const idx = this.selectedKeys.indexOf(key);\n const isSelected = idx > -1;\n if (!isPresent(key)) {\n return;\n }\n if (isSelected) {\n this.selectedKeys.splice(idx, 1);\n }\n else {\n this.selectedKeys.push(key);\n }\n this.notify();\n }\n notify() {\n this.selectedKeysChange.emit(this.selectedKeys.slice());\n }\n};\nSelectDirective.ɵfac = function SelectDirective_Factory(t) { return new (t || SelectDirective)(ɵngcc0.ɵɵdirectiveInject(TreeViewComponent)); };\nSelectDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SelectDirective, selectors: [[\"\", \"kendoTreeViewSelectable\", \"\"]], hostVars: 1, hostBindings: function SelectDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-multiselectable\", ctx.getAriaMultiselectable);\n } }, inputs: { isSelected: \"isSelected\", selectedKeys: \"selectedKeys\", selectKey: [\"selectBy\", \"selectKey\"], selection: [\"kendoTreeViewSelectable\", \"selection\"] }, outputs: { selectedKeysChange: \"selectedKeysChange\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], SelectDirective.prototype, \"isSelected\", null);\n__decorate([\n Input('selectBy'),\n __metadata(\"design:type\", Object)\n], SelectDirective.prototype, \"selectKey\", void 0);\n__decorate([\n Input('kendoTreeViewSelectable'),\n __metadata(\"design:type\", Object)\n], SelectDirective.prototype, \"selection\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], SelectDirective.prototype, \"selectedKeys\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SelectDirective.prototype, \"selectedKeysChange\", void 0);\n__decorate([\n HostBinding('attr.aria-multiselectable'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SelectDirective.prototype, \"getAriaMultiselectable\", null);\nSelectDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent])\n], SelectDirective);\n\n/**\n * Describes the attempted drop action during dragging.\n * Passed as `action` value to the [`kendoTreeViewDragClueTemplate`]({% slug api_treeview_dragcluetemplatedirective %}) directive.\n * By default, this value defines the rendered icon in the drag clue.\n */\nvar DropAction;\n(function (DropAction) {\n DropAction[DropAction[\"Add\"] = 0] = \"Add\";\n DropAction[DropAction[\"InsertTop\"] = 1] = \"InsertTop\";\n DropAction[DropAction[\"InsertBottom\"] = 2] = \"InsertBottom\";\n DropAction[DropAction[\"InsertMiddle\"] = 3] = \"InsertMiddle\";\n DropAction[DropAction[\"Invalid\"] = 4] = \"Invalid\";\n})(DropAction || (DropAction = {}));\n\n/**\n * Describes where the dragged item is dropped relative to the drop target item.\n */\nvar DropPosition;\n(function (DropPosition) {\n DropPosition[DropPosition[\"Over\"] = 0] = \"Over\";\n DropPosition[DropPosition[\"Before\"] = 1] = \"Before\";\n DropPosition[DropPosition[\"After\"] = 2] = \"After\";\n})(DropPosition || (DropPosition = {}));\n\n/**\n * @hidden\n */\nvar ScrollDirection;\n(function (ScrollDirection) {\n ScrollDirection[ScrollDirection[\"Up\"] = -1] = \"Up\";\n ScrollDirection[ScrollDirection[\"Down\"] = 1] = \"Down\";\n})(ScrollDirection || (ScrollDirection = {}));\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDrop`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrop) event.\n */\nclass TreeItemDropEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(initializer, originalEvent) {\n super();\n /**\n * @hidden\n */\n this.isValid = true;\n Object.assign(this, initializer);\n this.originalEvent = originalEvent;\n }\n /**\n * Specifies if the drop action should be marked as valid.\n * If set to `false`, the [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and\n * [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem) events will not be fired and the drag clue\n * will be animated back to the source item to indicate the action is marked as invalid.\n */\n setValid(isValid) {\n this.isValid = isValid;\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDragStart`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragstart) event.\n */\nclass TreeItemDragStartEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor(initializer) {\n super();\n Object.assign(this, initializer);\n }\n}\n\n/**\n * Arguments for the TreeView [`nodeDrag`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrag) and\n * [`nodeDragEnd`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragend) events.\n */\nclass TreeItemDragEvent {\n}\n\nconst ɵ0$3 = () => {\n if (!(isDocumentAvailable() && isPresent(document.body))) {\n return false;\n }\n const top = 10;\n const parent = document.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
child
`;\n document.body.appendChild(parent);\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n document.body.removeChild(parent);\n return isDifferent;\n};\n/**\n * Checks if the browser supports relative stacking context.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n */\nconst hasRelativeStackingContext = memoize(ɵ0$3);\n/**\n * Stores the result of the passed function's first invokation and returns it instead of invoking it again afterwards.\n */\nfunction memoize(fn) {\n let result;\n let called = false;\n return (...args) => {\n if (called) {\n return result;\n }\n result = fn(...args);\n called = true;\n return result;\n };\n}\n/**\n * @hidden\n *\n * Gets the offset of the parent element if the latter has the `transform` CSS prop applied.\n * Transformed parents create new stacking context and the `fixed` children must be position based on the transformed parent.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n *\n * If no parent container is `transform`-ed the function will return `{ left: 0, top: 0 }`;\n */\nconst getContainerOffset = (element) => {\n if (!(element && hasRelativeStackingContext())) {\n return { left: 0, top: 0 };\n }\n let offsetParent = element.parentElement;\n while (offsetParent) {\n if (window.getComputedStyle(offsetParent).transform !== 'none') {\n break;\n }\n offsetParent = offsetParent.parentElement;\n }\n if (offsetParent) {\n const rect = offsetParent.getBoundingClientRect();\n return {\n left: rect.left - offsetParent.scrollLeft,\n top: rect.top - offsetParent.scrollTop\n };\n }\n return { left: 0, top: 0 };\n};\n/**\n * @hidden\n */\nconst getDropAction = (dropPosition, dropTarget) => {\n if (!(isPresent(dropPosition) && isPresent(dropTarget))) {\n return DropAction.Invalid;\n }\n switch (dropPosition) {\n case DropPosition.Over:\n return DropAction.Add;\n case DropPosition.Before:\n return isPresent(closestNode(dropTarget).previousElementSibling) ? DropAction.InsertMiddle : DropAction.InsertTop;\n case DropPosition.After:\n return isPresent(closestNode(dropTarget).nextElementSibling) ? DropAction.InsertMiddle : DropAction.InsertBottom;\n default:\n return DropAction.Invalid;\n }\n};\n/**\n * @hidden\n */\nconst getDropPosition = (draggedItem, target, clientY, targetTreeView, containerOffset) => {\n if (!(isPresent(draggedItem) && isPresent(target) && isPresent(targetTreeView) && isPresent(containerOffset))) {\n return;\n }\n // the .k-mid element starts just after the checkbox/expand arrow and stretches till the end of the treeview on the right\n const item = closestWithMatch(target, '.k-mid');\n if (!isPresent(item)) {\n return;\n }\n // the content element (.k-in:not(.k-treeview-load-more-button)) holds just the treeview item text\n const content = getContentElement(item);\n const targetChildOfDraggedItem = hasParent(item, closestNode(draggedItem));\n if (!isPresent(content) || (content === draggedItem) || targetChildOfDraggedItem) {\n return;\n }\n const itemViewPortCoords = content.getBoundingClientRect();\n /*\n if the user is hovering a treeview item, split the item height into four parts:\n - dropping into the top quarter should insert the dragged item before the drop target\n - dropping into the bottom quarter should insert the dragged item after the drop target\n - dropping into the second or third quarter should add the item as child node of the drop target\n\n if the user is NOT hovering a treeview item (he's dragging somewhere on the right), split the item height to just two parts:\n - dropping should insert before or after\n */\n const itemDivisionHeight = itemViewPortCoords.height / (isContent(target) ? 4 : 2);\n // clear any possible container offset created by parent elements with `transform` css property set\n const pointerPosition = clientY - containerOffset.top;\n const itemTop = itemViewPortCoords.top - containerOffset.top;\n if (pointerPosition < itemTop + itemDivisionHeight) {\n return DropPosition.Before;\n }\n if (pointerPosition >= itemTop + itemViewPortCoords.height - itemDivisionHeight) {\n return DropPosition.After;\n }\n return DropPosition.Over;\n};\n/**\n * @hidden\n */\nconst treeItemFromEventTarget = (treeView, dropTarget) => {\n if (!(isPresent(treeView) && isPresent(dropTarget))) {\n return null;\n }\n const node = closestNode(dropTarget);\n const index = nodeId(node);\n const lookup = treeView.itemLookup(index);\n if (!(isPresent(lookup) && isPresent(lookup.item.dataItem))) {\n return null;\n }\n return lookup;\n};\n/**\n * @hidden\n *\n * Emits `collapse` on the specified TreeView node if the latter is left empty after its last child node was dragged out.\n */\nconst collapseEmptyParent = (parent, parentNodes, treeview) => {\n if (isPresent(parent) && parentNodes.length === 0 && treeview.isExpanded(parent.item.dataItem, parent.item.index)) {\n treeview.collapseNode(parent.item.dataItem, parent.item.index);\n }\n};\n/**\n * @hidden\n *\n * Expands the node if it's dropped into and it's not yet expanded.\n */\nconst expandDropTarget = (dropTarget, treeView) => {\n if (!treeView.isExpanded(dropTarget.item.dataItem, dropTarget.item.index)) {\n treeView.expandNode(dropTarget.item.dataItem, dropTarget.item.index);\n }\n};\n/**\n * @hidden\n *\n * Extracts the event target from the viewport coords. Required for touch devices\n * where the `event.target` of a `pointermove` event is always the initially dragged item.\n */\nconst getDropTarget = (event) => {\n if (!(isDocumentAvailable() && isPresent(document.elementFromPoint))) {\n return event.target;\n }\n return document.elementFromPoint(event.clientX, event.clientY);\n};\n/**\n * @hidden\n *\n * Checks if the original index is before the new one and corrects the new one by decrementing the index for the level, where the original item stood.\n */\nconst updateMovedItemIndex = (newIndex, originalIndex) => {\n const movedItemNewIndexParts = newIndex.split('_');\n const originalItemIndexParts = originalIndex.split('_');\n // if the original item was moved from a deeper level, there's no need for index correction\n // e.g. 4_0_1 is moved to 5_0 => removing 4_0_1 will not cause 5_0 to be moved\n if (movedItemNewIndexParts.length < originalItemIndexParts.length) {\n return newIndex;\n }\n // check if the parent item paths are the same - index correction is not required when the original item path differs from the path of the moved item - they belong to different hierarchies\n // e.g. 4_1 is moved to 5_1 - the parent item paths are differen (4 compared to 5) => removing 4_1 will not cause 5_1 to be moved\n // e.g 4_1 is moved to 4_3 - the parent paths are the same (both 4) => removing 4_1 will cause 4_3 to be moved\n const originalItemParentPathLength = originalItemIndexParts.length - 1;\n const originalItemParentPath = originalItemIndexParts.slice(0, originalItemParentPathLength).join('_');\n const movedItemParentPath = movedItemNewIndexParts.slice(0, originalItemParentPathLength).join('_');\n // check if the the index of the level where the original item is taken from is greater than the one of the moved item\n // e.g. 4_5 is moved to 4_1 (comapre 5 and 1) => removing 4_5 will not cause 4_1 to be moved\n // e.g. 4_1 is moved to 4_5 (comapre 1 and 5) => removing 4_1 will cause 4_5 to be moved\n const originalItemIndexLevel = originalItemIndexParts.length - 1;\n const originalItemLevelIndex = Number(originalItemIndexParts[originalItemIndexLevel]);\n const movedItemLevelIndex = Number(movedItemNewIndexParts[originalItemIndexLevel]);\n if ((originalItemParentPath === movedItemParentPath) && (movedItemLevelIndex > originalItemLevelIndex)) {\n // if the removed item causes the dropped item to be moved a position up - decrement the index at that level\n movedItemNewIndexParts[originalItemIndexLevel] = String(movedItemLevelIndex - 1);\n return movedItemNewIndexParts.join('_');\n }\n return newIndex;\n};\n/**\n * @hidden\n */\nconst SCROLLBAR_REG_EXP = new RegExp('(auto|scroll)');\n/**\n * @hidden\n *\n * Retrives the first scrollable element starting the search from the provided one, traversing to the top of the DOM tree.\n */\nconst getScrollableContainer = (node) => {\n while (isPresent(node) && node.nodeName !== 'HTML') {\n const hasOverflow = node.scrollHeight > node.clientHeight;\n const hasScrollbar = SCROLLBAR_REG_EXP.test(getComputedStyle(node).overflowY);\n if (hasOverflow && hasScrollbar) {\n return node;\n }\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n *\n * Checks if the top of the scrollable element is reached.\n * Floors the scrollTop value.\n */\nconst isTopReached = (element) => Math.floor(element.scrollTop) <= 0;\n/**\n * @hidden\n *\n * Checks if the bottom of the scrollable element is reached.\n * Ceils the scrollTop value.\n */\nconst isBottomReached = (element) => Math.ceil(element.scrollTop) >= element.scrollHeight - element.clientHeight;\n/**\n * @hidden\n *\n * Scrolls the element in the given direction by the provided step.\n *\n * If the targeted scroll incrementation doesn't yield any result due to device pixel ratio issues (https://github.com/dimitar-pechev/RenderingIndependentScrollOffsets#readme),\n * increments the step with 1px and again attempts to change the scrollTop of the element, until the content is actually scrolled.\n *\n * Cuts the operation short after 20 unsuccessful attempts to prevent infinite loops in possible corner-case scenarios.\n */\nconst scrollElementBy = (element, step, direction) => {\n if (!(isPresent(element) && isDocumentAvailable())) {\n return;\n }\n const initialScrollTop = element.scrollTop;\n let currentStep = step;\n let iterations = 0;\n while (initialScrollTop === element.scrollTop &&\n !(direction === ScrollDirection.Up && isTopReached(element)) &&\n !(direction === ScrollDirection.Down && isBottomReached(element)) &&\n iterations < 20 // as the bulgarian saying goes - to ties our underpants\n ) {\n element.scrollTop += (currentStep * direction);\n currentStep += 1;\n iterations += 1;\n }\n};\n\n/**\n * @hidden\n */\nconst copyPageSize = (treeview, source, target) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const sourceGroupSize = treeview.getNodePageSize(source);\n treeview.setNodePageSize(target, sourceGroupSize);\n};\n/**\n * @hidden\n */\nconst incrementPageSize = (treeview, dataItem) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const currentPageSize = treeview.getNodePageSize(dataItem);\n treeview.setNodePageSize(dataItem, currentPageSize + 1);\n};\n/**\n * @hidden\n */\nconst decrementPageSize = (treeview, dataItem) => {\n if (!isPresent(treeview.loadMoreService)) {\n return;\n }\n const currentPageSize = treeview.getNodePageSize(dataItem);\n treeview.setNodePageSize(dataItem, currentPageSize - 1);\n};\n\n/**\n * @hidden\n */\nclass HierarchyEditingService {\n constructor(hierarchyBinding) {\n this.hierarchyBinding = hierarchyBinding;\n }\n add({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }) {\n // shallow clone the item as not to mistake it for its 'older' version when the remove handler kicks in to splice the item at its old position\n const clonedSourceDataItem = Object.assign({}, getDataItem(sourceItem));\n if (dropPosition === DropPosition.Over) {\n // expand the item that was dropped into\n expandDropTarget(destinationItem, destinationTree);\n const destinationChildren = this.childrenFor(getDataItem(destinationItem));\n // add the moved node just before the load more button if load more is enabled\n const targetIndex = isPresent(destinationTree.loadMoreService) ?\n Math.min(destinationTree.loadMoreService.getGroupSize(getDataItem(destinationItem)), destinationChildren.length) : // the page size might be greater than the actual children array length\n destinationChildren.length;\n destinationChildren.splice(targetIndex, 0, clonedSourceDataItem);\n setter(this.hierarchyBinding.childrenField)(getDataItem(destinationItem), destinationChildren);\n this.movedItemNewIndex = buildTreeIndex(destinationItem.item.index, targetIndex);\n }\n else {\n const destinationParentNodes = this.getParentNodes(destinationItem, destinationTree);\n const shiftIndex = dropPosition === DropPosition.After ? 1 : 0;\n const targetIndex = destinationParentNodes.indexOf(getDataItem(destinationItem)) + shiftIndex;\n destinationParentNodes.splice(targetIndex, 0, clonedSourceDataItem);\n const parentIndex = destinationItem.parent ? destinationItem.parent.item.index : null;\n this.movedItemNewIndex = buildTreeIndex(parentIndex, targetIndex);\n }\n // increment the parent page size => an item is moved into it\n const updatedParent = dropPosition === DropPosition.Over ? getDataItem(destinationItem) : getDataItem(destinationItem.parent);\n incrementPageSize(destinationTree, updatedParent);\n // the page sizes are stored by data-item reference => copy the old item ref page size to the new item reference\n copyPageSize(destinationTree, getDataItem(sourceItem), clonedSourceDataItem);\n // the source tree nodes are reloaded on `removeItem` - reload the destination tree nodes if the soruce and the destination tree are different\n if (sourceTree !== destinationTree && !destinationTree.loadOnDemand) {\n destinationTree.preloadChildNodes();\n }\n // if the source and destination trees are the same, focusing the moved item here will not have the desired effect\n // as the `remove` handler has not yet kicked-in to remove the item from its old position\n if (sourceTree !== destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n destinationTree.focus(this.movedItemNewIndex);\n }\n }\n remove({ sourceItem, sourceTree, destinationTree }) {\n const sourceParentNodes = this.getParentNodes(sourceItem, sourceTree);\n const sourceItemIndex = sourceParentNodes.indexOf(getDataItem(sourceItem));\n sourceParentNodes.splice(sourceItemIndex, 1);\n // emit collapse for the parent node if its last child node was spliced\n collapseEmptyParent(sourceItem.parent, sourceParentNodes, sourceTree);\n // decrement source item parent page size => an item has been removed from it\n decrementPageSize(sourceTree, getDataItem(sourceItem.parent));\n // reload the treeview nodes\n if (!sourceTree.loadOnDemand) {\n sourceTree.preloadChildNodes();\n }\n // if the source and destination trees are different we want to focus only the moved item in the destination tree\n if (sourceTree === destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n // after the source item is removed from its original position, the candidate index might have to be corrected\n const index = updateMovedItemIndex(this.movedItemNewIndex, sourceItem.item.index);\n destinationTree.focus(index);\n }\n }\n getParentNodes(node, treeView) {\n return isPresent(node.parent) ?\n this.childrenFor(getDataItem(node.parent)) :\n treeView.nodes;\n }\n childrenFor(dataItem) {\n return getter(this.hierarchyBinding.childrenField)(dataItem) || [];\n }\n}\n\n/**\n * @hidden\n */\nlet DragClueComponent = class DragClueComponent {\n constructor(cdr) {\n this.cdr = cdr;\n this.hostClasses = true;\n this.posistionStyle = 'fixed';\n }\n get statusIconClass() {\n switch (this.action) {\n case DropAction.Add: return 'k-i-plus';\n case DropAction.InsertTop: return 'k-i-insert-up';\n case DropAction.InsertBottom: return 'k-i-insert-down';\n case DropAction.InsertMiddle: return 'k-i-insert-middle';\n case DropAction.Invalid:\n default: return 'k-i-cancel';\n }\n }\n // exposed as a public method that can be called from outside as the component uses `OnPush` strategy\n detectChanges() {\n this.cdr.detectChanges();\n }\n};\nDragClueComponent.ɵfac = function DragClueComponent_Factory(t) { return new (t || DragClueComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDragClueComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DragClueComponent, selectors: [[\"kendo-treeview-drag-clue\"]], hostVars: 6, hostBindings: function DragClueComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"position\", ctx.posistionStyle);\n ɵngcc0.ɵɵclassProp(\"k-header\", ctx.hostClasses)(\"k-drag-clue\", ctx.hostClasses);\n } }, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function DragClueComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DragClueComponent_ng_container_0_Template, 4, 4, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, DragClueComponent_1_Template, 1, 7, null, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet], encapsulation: 2, changeDetection: 0 });\n__decorate([\n HostBinding('class.k-header'),\n HostBinding('class.k-drag-clue'),\n __metadata(\"design:type\", Boolean)\n], DragClueComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('style.position'),\n __metadata(\"design:type\", String)\n], DragClueComponent.prototype, \"posistionStyle\", void 0);\nDragClueComponent = __decorate([ __metadata(\"design:paramtypes\", [ChangeDetectorRef])\n], DragClueComponent);\n\n/**\n * @hidden\n */\nclass DragAndDropAssetService {\n get componentRef() {\n if (!isPresent(this._componentRef)) {\n throw new Error('The `initalize` method must be called before calling other service methods.');\n }\n return this._componentRef;\n }\n set componentRef(componentRef) {\n this._componentRef = componentRef;\n }\n get element() {\n return this.componentRef.location.nativeElement;\n }\n ngOnDestroy() {\n if (!isPresent(this._componentRef)) {\n return;\n }\n this.element.parentElement.removeChild(this.element);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n show() {\n this.element.style.display = '';\n }\n hide() {\n this.element.style.display = 'none';\n }\n move(left, top, offset = 0) {\n this.element.style.left = `${left + offset}px`;\n this.element.style.top = `${top + offset}px`;\n }\n}\nDragAndDropAssetService.ɵfac = function DragAndDropAssetService_Factory(t) { return new (t || DragAndDropAssetService)(); };\nDragAndDropAssetService.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DragAndDropAssetService });\n\n/**\n * @hidden\n */\nconst CLUE_OFFSET = 10;\n/**\n * @hidden\n */\nconst RETURN_ANIMATION_DURATION = 200;\n/**\n * @hidden\n */\nlet DragClueService = class DragClueService extends DragAndDropAssetService {\n constructor(componentFactoryResolver) {\n super();\n this.componentFactoryResolver = componentFactoryResolver;\n }\n initialize(container, template) {\n if (isPresent(this._componentRef)) {\n this.ngOnDestroy();\n }\n const clueComponentFactory = this.componentFactoryResolver.resolveComponentFactory(DragClueComponent);\n this.componentRef = container.createComponent(clueComponentFactory);\n this.hide();\n this.componentRef.instance.template = template;\n this.componentRef.changeDetectorRef.detectChanges();\n }\n ngOnDestroy() {\n this.cancelReturnAnimation();\n this.cancelScroll();\n super.ngOnDestroy();\n }\n move(left, top) {\n super.move(left, top, CLUE_OFFSET);\n }\n animateDragClueToElementPosition(target) {\n if (!(isPresent(target) && isPresent(this.element.animate))) {\n this.hide();\n return;\n }\n const targetElementViewPortCoords = target.getBoundingClientRect();\n const clueElementViewPortCoords = this.element.getBoundingClientRect();\n this.returnAnimation = this.element.animate([\n { transform: 'translate(0, 0)' },\n { transform: `translate(${targetElementViewPortCoords.left - clueElementViewPortCoords.left}px, ${targetElementViewPortCoords.top - clueElementViewPortCoords.top}px)` }\n ], RETURN_ANIMATION_DURATION);\n this.returnAnimation.onfinish = () => this.hide();\n }\n cancelReturnAnimation() {\n if (!isPresent(this.returnAnimation)) {\n return;\n }\n this.returnAnimation.cancel();\n this.returnAnimation = null;\n }\n updateDragClueData(action, sourceItem, destinationItem) {\n const dragClue = this.componentRef.instance;\n if (action === dragClue.action && dataItemsEqual(sourceItem, dragClue.sourceItem) && dataItemsEqual(destinationItem, dragClue.destinationItem)) {\n return;\n }\n dragClue.action = action;\n dragClue.sourceItem = sourceItem;\n dragClue.destinationItem = destinationItem;\n dragClue.detectChanges();\n }\n updateText(text) {\n if (text === this.componentRef.instance.text) {\n return;\n }\n this.componentRef.instance.text = text;\n this.componentRef.instance.detectChanges();\n }\n /**\n * Triggers the first scrollable parent to scroll upwards or downwards.\n * Uses setInterval, so should be called outside the angular zone.\n */\n scrollIntoView({ step, interval }) {\n this.cancelScroll();\n const scrollableContainer = getScrollableContainer(this.element);\n if (!isPresent(scrollableContainer)) {\n return;\n }\n const containerRect = scrollableContainer.getBoundingClientRect();\n const clueRect = this.element.getBoundingClientRect();\n // if the beginning of the scrollable container is above the current viewport, fall-back to 0\n const firstVisibleClientTopPart = Math.max(containerRect.top, 0);\n // start scrolling up when the first visible item is dragged over\n const topLimit = firstVisibleClientTopPart + clueRect.height;\n // if the end of the scrollable container is beneath the current viewport, fall-back to its client height\n // add the distance from the start of the viewport to the beginning of the container to ensure scrolling bottom begins when the actual end of the container is reached\n const bottomLimit = firstVisibleClientTopPart + Math.min(containerRect.bottom, scrollableContainer.clientHeight);\n if (clueRect.top < topLimit) {\n this.scrollInterval = setInterval(() => scrollElementBy(scrollableContainer, step, ScrollDirection.Up), interval);\n }\n else if (clueRect.bottom > bottomLimit) {\n this.scrollInterval = setInterval(() => scrollElementBy(scrollableContainer, step, ScrollDirection.Down), interval);\n }\n }\n /**\n * Cancels out the on-going scroll animation, if present.\n */\n cancelScroll() {\n if (isPresent(this.scrollInterval)) {\n clearInterval(this.scrollInterval);\n this.scrollInterval = null;\n }\n }\n};\nDragClueService.ɵfac = function DragClueService_Factory(t) { return new (t || DragClueService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver)); };\nDragClueService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DragClueService, factory: function (t) { return DragClueService.ɵfac(t); } });\nDragClueService = __decorate([ __metadata(\"design:paramtypes\", [ComponentFactoryResolver])\n], DragClueService);\n\n/**\n * @hidden\n */\nlet DropHintComponent = class DropHintComponent {\n constructor(changeDetectorRef) {\n this.changeDetectorRef = changeDetectorRef;\n this.hostClass = true;\n this.position = 'fixed';\n this.pointerEvents = 'none';\n }\n // exposed as a public method that can be called from outside as the component uses `OnPush` strategy\n detectChanges() {\n this.changeDetectorRef.detectChanges();\n }\n};\nDropHintComponent.ɵfac = function DropHintComponent_Factory(t) { return new (t || DropHintComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDropHintComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DropHintComponent, selectors: [[\"kendo-treeview-drop-hint\"]], hostVars: 6, hostBindings: function DropHintComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"position\", ctx.position)(\"pointer-events\", ctx.pointerEvents);\n ɵngcc0.ɵɵclassProp(\"k-drop-hint-container\", ctx.hostClass);\n } }, decls: 2, vars: 2, consts: [[\"class\", \"k-drop-hint k-drop-hint-h\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"k-drop-hint\", \"k-drop-hint-h\"], [1, \"k-drop-hint-start\"], [1, \"k-drop-hint-line\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function DropHintComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropHintComponent_div_0_Template, 3, 0, \"div\", 0);\n ɵngcc0.ɵɵtemplate(1, DropHintComponent_1_Template, 1, 6, null, 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet], encapsulation: 2, changeDetection: 0 });\n__decorate([\n HostBinding('class.k-drop-hint-container'),\n __metadata(\"design:type\", Boolean)\n], DropHintComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('style.position'),\n __metadata(\"design:type\", String)\n], DropHintComponent.prototype, \"position\", void 0);\n__decorate([\n HostBinding('style.pointer-events'),\n __metadata(\"design:type\", String)\n], DropHintComponent.prototype, \"pointerEvents\", void 0);\nDropHintComponent = __decorate([ __metadata(\"design:paramtypes\", [ChangeDetectorRef])\n], DropHintComponent);\n\n/**\n * @hidden\n */\nlet DropHintService = class DropHintService extends DragAndDropAssetService {\n constructor(componentFactoryResolver) {\n super();\n this.componentFactoryResolver = componentFactoryResolver;\n }\n initialize(container, template) {\n if (isPresent(this._componentRef)) {\n this.ngOnDestroy();\n }\n const hintComponentFactory = this.componentFactoryResolver.resolveComponentFactory(DropHintComponent);\n this.componentRef = container.createComponent(hintComponentFactory);\n this.hide();\n this.componentRef.instance.template = template;\n this.componentRef.changeDetectorRef.detectChanges();\n }\n updateDropHintData(action, sourceItem, destinationItem) {\n const dropHint = this.componentRef.instance;\n if (action === dropHint.action && dataItemsEqual(sourceItem, dropHint.sourceItem) && dataItemsEqual(destinationItem, dropHint.destinationItem)) {\n return;\n }\n dropHint.action = action;\n dropHint.sourceItem = sourceItem;\n dropHint.destinationItem = destinationItem;\n dropHint.detectChanges();\n }\n};\nDropHintService.ɵfac = function DropHintService_Factory(t) { return new (t || DropHintService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver)); };\nDropHintService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DropHintService, factory: function (t) { return DropHintService.ɵfac(t); } });\nDropHintService = __decorate([ __metadata(\"design:paramtypes\", [ComponentFactoryResolver])\n], DropHintService);\n\n/**\n * Represents the template for the TreeView drag clue when an item is dragged. To define the clue template,\n * nest an `` tag with the `kendoTreeViewDragClueTemplate` directive inside a `` tag\n * ([see example]({% slug draganddrop_treeview %}#toc-templates)).\n *\n *\n * The text, attempted drop action, source item and destination item are available as context variables in the template:\n *\n *\n * - `let-text=\"text\"` (`string`)\n * - `let-action=\"action\"` ([`DropAction`]({% slug api_treeview_dropaction %}))\n * - `let-sourceItem=\"sourceItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n * - `let-destinationItem=\"destinationItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n */\nlet DragClueTemplateDirective = class DragClueTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nDragClueTemplateDirective.ɵfac = function DragClueTemplateDirective_Factory(t) { return new (t || DragClueTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDragClueTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DragClueTemplateDirective, selectors: [[\"\", \"kendoTreeViewDragClueTemplate\", \"\"]] });\nDragClueTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], DragClueTemplateDirective);\n\n/**\n * Represents the template for the TreeView drop hint when an item is dragged. To define the hint template,\n * nest an `` tag with the `kendoTreeViewDropHintTemplate` directive inside a `` tag\n * ([see example]({% slug draganddrop_treeview %}#toc-templates)).\n *\n * The attempted drop action, source item and destination item are available as context variables in the template:\n *\n * - `let-action=\"action\"` ([`DropAction`]({% slug api_treeview_dropaction %}))\n * - `let-sourceItem=\"sourceItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n * - `let-destinationItem=\"destinationItem\"` ([`TreeItemLookup`]({% slug api_treeview_treeitemlookup %}))\n */\nlet DropHintTemplateDirective = class DropHintTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nDropHintTemplateDirective.ɵfac = function DropHintTemplateDirective_Factory(t) { return new (t || DropHintTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDropHintTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DropHintTemplateDirective, selectors: [[\"\", \"kendoTreeViewDropHintTemplate\", \"\"]] });\nDropHintTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], DropHintTemplateDirective);\n\nconst DEFAULT_SCROLL_SETTINGS = {\n enabled: true,\n step: 1,\n interval: 1\n};\n/**\n * A directive which enables the dragging and dropping items inside the current TreeView or between multiple linked TreeView component instances\n * ([see example]({% slug draganddrop_treeview %})).\n *\n * Triggers the [`nodeDragStart`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragstart),\n * [`nodeDrag`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrag),\n * [`nodeDrop`]({% slug api_treeview_treeviewcomponent %}#toc-nodedrop),\n * [`nodeDragEnd`]({% slug api_treeview_treeviewcomponent %}#toc-nodedragend),\n * [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and\n * [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem)\n * events when the corresponding actions occur on the respective TreeView instance.\n */\nlet DragAndDropDirective = class DragAndDropDirective {\n constructor(element, zone, treeview, dragClueService, dropHintService) {\n this.element = element;\n this.zone = zone;\n this.treeview = treeview;\n this.dragClueService = dragClueService;\n this.dropHintService = dropHintService;\n /**\n * Specifies whether the `removeItem` event will be fired after an item is dropped when the `ctrl` key is pressed.\n * If enabled, the `removeItem` event will not be fired on the source TreeView\n * ([see example]({% slug draganddrop_treeview %}#toc-multiple-treeviews)).\n *\n * @default false\n */\n this.allowCopy = false;\n /**\n * Specifes the TreeViewComponent instances into which dragged items from the current TreeViewComponent can be dropped\n * ([see example]({% slug draganddrop_treeview %}#toc-multiple-treeviews)).\n */\n this.dropZoneTreeViews = [];\n /**\n * Specifies the distance in pixels from the initial item pointerdown event, before the dragging is initiated.\n * The `nodeDragStart` and all consequent TreeView drag events will not be fired until the actual dragging begins.\n *\n * @default 5\n */\n this.startDragAfter = 5;\n /**\n * Controlls the auto-scrolling behavior during drag-and-drop ([see example]({% slug draganddrop_treeview %}#toc-auto-scrolling)).\n * Enbaled by default. To turn the auto-scrolling off, set this prop to `false`.\n *\n * By default, the scrolling will be performed by 1 pixel at every 1 millisecond, when the dragged item reaches the top or the bottom of the scrollable container.\n * The `step` and `interval` can be overridden by providing a `DragAndDropScrollSettings` object to this prop.\n *\n * @default true\n */\n this.autoScroll = true;\n /**\n * @hidden\n */\n this.userSelectStyle = 'none';\n /**\n * Describes the offset of the parent element if the latter has the `transform` CSS prop applied.\n * Transformed parents create new stacking context and the fixed children must be position based on the transformed parent.\n * https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n */\n this.containerOffset = { top: 0, left: 0 };\n this.treeview.touchActions = false;\n }\n get scrollSettings() {\n const userProvidedSettings = typeof this.autoScroll === 'boolean' ?\n { enabled: this.autoScroll } :\n this.autoScroll;\n return Object.assign({}, DEFAULT_SCROLL_SETTINGS, userProvidedSettings);\n }\n ngAfterContentInit() {\n this.initalizeDraggable();\n this.dragClueService.initialize(this.treeview.assetsContainer, this.dragClueTemplate && this.dragClueTemplate.templateRef);\n this.dropHintService.initialize(this.treeview.assetsContainer, this.dropHintTemplate && this.dropHintTemplate.templateRef);\n }\n ngOnDestroy() {\n this.draggable.destroy();\n }\n /**\n * @hidden\n */\n handlePress({ originalEvent }) {\n if (!isContent(originalEvent.target)) {\n return;\n }\n // store the drag target on press, show it only when it's actually dragged\n this.draggedItem = closestWithMatch(originalEvent.target, '.k-in');\n // record the current pointer down coords - copared to the `startDragAfter` value to calculate whether to initiate dragging\n this.pendingDragStartEvent = originalEvent;\n }\n /**\n * @hidden\n */\n handleDrag({ originalEvent, clientX, clientY }) {\n if (this.shouldInitiateDragStart({ clientX, clientY })) {\n this.initiateDragStart();\n }\n if (!isPresent(this.draggedItem) || isPresent(this.pendingDragStartEvent)) {\n return;\n }\n const dropTarget = getDropTarget(originalEvent);\n if (hasObservers(this.treeview.nodeDrag)) {\n this.zone.run(() => this.notifyDrag(originalEvent, dropTarget));\n }\n const targetTreeView = this.getTargetTreeView(dropTarget);\n const dropPosition = getDropPosition(this.draggedItem, dropTarget, clientY, targetTreeView, this.containerOffset);\n const dropHintAnchor = closestWithMatch(dropTarget, '.k-mid');\n const dropAction = getDropAction(dropPosition, dropTarget);\n const sourceItem = treeItemFromEventTarget(this.treeview, this.draggedItem);\n const destinationItem = treeItemFromEventTarget(targetTreeView, dropTarget);\n this.updateDropHintState(dropPosition, dropHintAnchor, dropAction, sourceItem, destinationItem);\n this.updateDragClueState(dropAction, clientX, clientY, sourceItem, destinationItem);\n if (this.scrollSettings.enabled) {\n this.dragClueService.scrollIntoView(this.scrollSettings);\n }\n }\n /**\n * @hidden\n */\n handleRelease({ originalEvent, clientY }) {\n if (this.scrollSettings.enabled) {\n this.dragClueService.cancelScroll();\n }\n if (!isPresent(this.draggedItem) || isPresent(this.pendingDragStartEvent)) {\n this.pendingDragStartEvent = null;\n this.draggedItem = null;\n return;\n }\n const dropTarget = getDropTarget(originalEvent);\n const sourceTree = this.treeview;\n const destinationTree = this.getTargetTreeView(dropTarget);\n const dropPosition = getDropPosition(this.draggedItem, dropTarget, clientY, this.getTargetTreeView(dropTarget), this.containerOffset);\n const sourceItem = treeItemFromEventTarget(sourceTree, this.draggedItem);\n const destinationItem = treeItemFromEventTarget(destinationTree, dropTarget);\n if (isPresent(destinationItem) && isPresent(dropPosition)) {\n this.zone.run(() => this.notifyDrop({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }, originalEvent));\n }\n else {\n this.dragClueService.animateDragClueToElementPosition(this.draggedItem);\n }\n if (hasObservers(this.treeview.nodeDragEnd)) {\n this.zone.run(() => this.notifyDragEnd({ sourceItem, destinationItem, originalEvent }));\n }\n this.dropHintService.hide();\n this.draggedItem = null;\n }\n updateDropHintState(dropPosition, dropHintAnchor, dropAction, sourceItem, destinationItem) {\n if (!isPresent(dropHintAnchor) || dropPosition === DropPosition.Over || !isPresent(dropPosition)) {\n this.dropHintService.hide();\n return;\n }\n const anchorViewPortCoords = dropHintAnchor.getBoundingClientRect();\n const insertBefore = dropPosition === DropPosition.Before;\n const top = insertBefore ? anchorViewPortCoords.top : (anchorViewPortCoords.top + anchorViewPortCoords.height);\n this.dropHintService.updateDropHintData(dropAction, sourceItem, destinationItem);\n // clear any possible container offset created by parent elements with `transform` css property set\n this.dropHintService.move(anchorViewPortCoords.left - this.containerOffset.left, top - this.containerOffset.top);\n this.dropHintService.show();\n }\n updateDragClueState(dropAction, clientX, clientY, sourceItem, destinationItem) {\n // clear any possible container offset created by parent elements with `transform` css property set\n this.dragClueService.move(clientX - this.containerOffset.left, clientY - this.containerOffset.top);\n this.dragClueService.updateDragClueData(dropAction, sourceItem, destinationItem);\n this.dragClueService.show();\n }\n initalizeDraggable() {\n this.draggable = new Draggable({\n press: this.handlePress.bind(this),\n drag: this.handleDrag.bind(this),\n release: this.handleRelease.bind(this)\n });\n this.zone.runOutsideAngular(() => this.draggable.bindTo(this.element.nativeElement));\n }\n notifyDragStart(originalEvent, dropTarget) {\n const sourceItem = treeItemFromEventTarget(this.treeview, dropTarget);\n const event = new TreeItemDragStartEvent({ sourceItem, originalEvent });\n this.treeview.nodeDragStart.emit(event);\n return event;\n }\n notifyDrag(originalEvent, dropTarget) {\n const dragEvent = {\n sourceItem: treeItemFromEventTarget(this.treeview, this.draggedItem),\n destinationItem: treeItemFromEventTarget(this.getTargetTreeView(dropTarget), dropTarget),\n originalEvent\n };\n this.treeview.nodeDrag.emit(dragEvent);\n }\n notifyDrop(args, originalEvent) {\n const event = new TreeItemDropEvent(args, originalEvent);\n args.destinationTree.nodeDrop.emit(event);\n // disable the animations on drop and restore them afterwards (if they were initially turned on)\n this.disableAnimationsForNextTick(args.destinationTree);\n if (args.sourceTree !== args.destinationTree) {\n this.disableAnimationsForNextTick(args.sourceTree);\n }\n if (!event.isDefaultPrevented() && event.isValid) {\n this.dragClueService.hide();\n // order matters in a flat data binding scenario (first add, then remove)\n args.destinationTree.addItem.emit(args);\n if (!(originalEvent.ctrlKey && this.allowCopy)) {\n args.sourceTree.removeItem.emit(args);\n }\n }\n else if (event.isDefaultPrevented()) {\n // directly hide the clue if the default is prevented\n this.dragClueService.hide();\n }\n else if (!event.isValid) {\n // animate the clue back to the source item position if marked as invalid\n this.dragClueService.animateDragClueToElementPosition(this.draggedItem);\n }\n }\n notifyDragEnd(dragEndEvent) {\n this.treeview.nodeDragEnd.emit(dragEndEvent);\n }\n getTargetTreeView(dropTarget) {\n const treeViewTagName = this.treeview.element.nativeElement.tagName;\n const targetTreeView = closestWithMatch(dropTarget, treeViewTagName);\n return [this.treeview, ...this.dropZoneTreeViews].find(treeView => isPresent(treeView) && treeView.element.nativeElement === targetTreeView);\n }\n disableAnimationsForNextTick(treeView) {\n // the treeView.animate getter returns `true` when the animations are turned off\n // confusing, but seems on purpose (the `animate` prop sets the value of the @.disabled host-bound attribute)\n if (treeView.animate) {\n return;\n }\n treeView.animate = false;\n this.zone.runOutsideAngular(() => setTimeout(() => treeView.animate = true));\n }\n shouldInitiateDragStart(currentPointerCoords) {\n if (!isPresent(this.pendingDragStartEvent)) {\n return false;\n }\n const distanceFromPointerDown = Math.sqrt(Math.pow((this.pendingDragStartEvent.clientX - currentPointerCoords.clientX), 2) +\n Math.pow((this.pendingDragStartEvent.clientY - currentPointerCoords.clientY), 2));\n return distanceFromPointerDown >= this.startDragAfter;\n }\n initiateDragStart() {\n if (hasObservers(this.treeview.nodeDragStart)) {\n const dragStartEvent = this.zone.run(() => this.notifyDragStart(this.pendingDragStartEvent, getDropTarget(this.pendingDragStartEvent)));\n if (dragStartEvent.isDefaultPrevented()) {\n this.pendingDragStartEvent = null;\n this.draggedItem = null;\n return;\n }\n }\n this.dragClueService.cancelReturnAnimation();\n this.dragClueService.updateText(this.draggedItem.innerText);\n this.containerOffset = getContainerOffset(this.draggedItem);\n this.pendingDragStartEvent = null;\n }\n};\nDragAndDropDirective.ɵfac = function DragAndDropDirective_Factory(t) { return new (t || DragAndDropDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(TreeViewComponent), ɵngcc0.ɵɵdirectiveInject(DragClueService), ɵngcc0.ɵɵdirectiveInject(DropHintService)); };\nDragAndDropDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DragAndDropDirective, selectors: [[\"\", \"kendoTreeViewDragAndDrop\", \"\"]], contentQueries: function DragAndDropDirective_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DragClueTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DropHintTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dragClueTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropHintTemplate = _t.first);\n } }, hostVars: 8, hostBindings: function DragAndDropDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"user-select\", ctx.userSelectStyle)(\"-ms-user-select\", ctx.userSelectStyle)(\"-moz-user-select\", ctx.userSelectStyle)(\"-webkit-user-select\", ctx.userSelectStyle);\n } }, inputs: { allowCopy: \"allowCopy\", dropZoneTreeViews: \"dropZoneTreeViews\", startDragAfter: \"startDragAfter\", autoScroll: \"autoScroll\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n DragClueService,\n DropHintService\n ])] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DragAndDropDirective.prototype, \"allowCopy\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], DragAndDropDirective.prototype, \"dropZoneTreeViews\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DragAndDropDirective.prototype, \"startDragAfter\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DragAndDropDirective.prototype, \"autoScroll\", void 0);\n__decorate([\n ContentChild(DragClueTemplateDirective, { static: false }),\n __metadata(\"design:type\", DragClueTemplateDirective)\n], DragAndDropDirective.prototype, \"dragClueTemplate\", void 0);\n__decorate([\n ContentChild(DropHintTemplateDirective, { static: false }),\n __metadata(\"design:type\", DropHintTemplateDirective)\n], DragAndDropDirective.prototype, \"dropHintTemplate\", void 0);\n__decorate([\n HostBinding('style.user-select'),\n HostBinding('style.-ms-user-select'),\n HostBinding('style.-moz-user-select'),\n HostBinding('style.-webkit-user-select'),\n __metadata(\"design:type\", String)\n], DragAndDropDirective.prototype, \"userSelectStyle\", void 0);\nDragAndDropDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone,\n TreeViewComponent,\n DragClueService,\n DropHintService])\n], DragAndDropDirective);\n\n/**\n * @hidden\n */\nconst DEFAULT_FILTER_SETTINGS = {\n operator: 'contains',\n ignoreCase: true,\n mode: \"lenient\"\n};\n\n/**\n * @hidden\n */\nclass FilteringBase {\n constructor(component) {\n this.component = component;\n this.visibleNodes = new Set();\n this._filterSettings = DEFAULT_FILTER_SETTINGS;\n }\n /**\n * The settings which are applied when performing a filter on the component's data.\n */\n set filterSettings(settings) {\n this._filterSettings = Object.assign({}, DEFAULT_FILTER_SETTINGS, settings);\n }\n get filterSettings() {\n return this._filterSettings;\n }\n /**\n * Applies a filter and changes the visibility of the component's nodes accordingly.\n */\n set filter(term) {\n this.handleFilterChange(term);\n }\n /**\n * @hidden\n */\n handleFilterChange(term) {\n if (!this.filterData) {\n return;\n }\n this.resetNodesVisibility(this.filterData);\n if (term) {\n filterTree(this.filterData, term, this.filterSettings, this.component.textField);\n }\n this.updateVisibleNodes(this.filterData);\n if (isPresent(this.component.filterStateChange)) {\n this.component.filterStateChange.emit({\n nodes: this.filterData,\n matchCount: this.visibleNodes.size,\n term,\n filterSettings: this.filterSettings\n });\n }\n }\n updateVisibleNodes(items) {\n items.forEach((wrapper) => {\n if (wrapper.visible) {\n this.visibleNodes.add(wrapper.dataItem);\n }\n if (wrapper.children) {\n this.updateVisibleNodes(wrapper.children);\n }\n });\n }\n resetNodesVisibility(items) {\n this.visibleNodes.clear();\n items.forEach((wrapper) => {\n wrapper.visible = true;\n if (wrapper.children) {\n this.resetNodesVisibility(wrapper.children);\n }\n });\n }\n}\nFilteringBase.ɵfac = function FilteringBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilteringBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FilteringBase, inputs: { filterSettings: \"filterSettings\", filter: \"filter\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], FilteringBase.prototype, \"filterSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], FilteringBase.prototype, \"filter\", null);\n\nconst indexBuilder = new IndexBuilderService();\nconst mapToWrappers = (currentLevelNodes, childrenField, parent = null, parentIndex = '') => {\n if (!isArrayWithAtLeastOneItem(currentLevelNodes)) {\n return [];\n }\n return currentLevelNodes.map((node, idx) => {\n const index = indexBuilder.nodeIndex(idx.toString(), parentIndex);\n const wrapper = {\n dataItem: node,\n index,\n parent,\n visible: true\n };\n wrapper.children = mapToWrappers(getter(childrenField)(node), childrenField, wrapper, index);\n return wrapper;\n });\n};\n/**\n * A directive which encapsulates the retrieval of child nodes.\n */\nlet HierarchyBindingDirective = class HierarchyBindingDirective extends FilteringBase {\n constructor(component, dragAndDropDirective) {\n super(component);\n this.component = component;\n this.dragAndDropDirective = dragAndDropDirective;\n /**\n * @hidden\n */\n this.loadOnDemand = true;\n this.originalData = [];\n const shouldFilter = !isPresent(this.dragAndDropDirective);\n this.component.isVisible = shouldFilter ? (node) => this.visibleNodes.has(node) : isVisible;\n }\n /**\n * The field name which holds the data items of the child component.\n */\n set childrenField(value) {\n if (!value) {\n throw new Error(\"'childrenField' cannot be empty\");\n }\n this._childrenField = value;\n }\n /**\n * The nodes which will be displayed by the TreeView.\n */\n set nodes(values) {\n this.originalData = values || [];\n this.filterData = mapToWrappers(values, this.childrenField) || [];\n this.updateVisibleNodes(this.filterData);\n }\n /**\n * @hidden\n * A callback which determines whether a TreeView node should be rendered as hidden.\n */\n set isVisible(fn) {\n this.component.isVisible = fn;\n }\n /**\n * The field name which holds the data items of the child component.\n */\n get childrenField() {\n return this._childrenField;\n }\n ngOnInit() {\n if (isPresent(this.childrenField)) {\n this.component.children = item => of(getter(this.childrenField)(item));\n this.component.hasChildren = item => {\n const children = getter(this.childrenField)(item);\n return Boolean(children && children.length);\n };\n this.component.editService = new HierarchyEditingService(this);\n this.component.filterChange.subscribe(this.handleFilterChange.bind(this));\n if (this.component.filter) {\n this.handleFilterChange(this.component.filter);\n }\n if (!this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n }\n ngOnChanges(changes) {\n if (isChanged('childrenField', changes, false)) {\n this.nodes = this.originalData;\n }\n // should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'loadOnDemand'], changes) && !this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n};\nHierarchyBindingDirective.ɵfac = function HierarchyBindingDirective_Factory(t) { return new (t || HierarchyBindingDirective)(ɵngcc0.ɵɵdirectiveInject(DataBoundComponent), ɵngcc0.ɵɵdirectiveInject(DragAndDropDirective, 9)); };\nHierarchyBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: HierarchyBindingDirective, selectors: [[\"\", \"kendoTreeViewHierarchyBinding\", \"\"]], inputs: { loadOnDemand: \"loadOnDemand\", childrenField: \"childrenField\", nodes: \"nodes\", isVisible: \"isVisible\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], HierarchyBindingDirective.prototype, \"childrenField\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], HierarchyBindingDirective.prototype, \"nodes\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], HierarchyBindingDirective.prototype, \"isVisible\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], HierarchyBindingDirective.prototype, \"loadOnDemand\", void 0);\nHierarchyBindingDirective = __decorate([ __param(1, Optional()), __param(1, Host()),\n __metadata(\"design:paramtypes\", [DataBoundComponent,\n DragAndDropDirective])\n], HierarchyBindingDirective);\n\n/**\n * @hidden\n */\nlet LoadingIndicatorDirective = class LoadingIndicatorDirective {\n constructor(expandService, loadingService, cd) {\n this.expandService = expandService;\n this.loadingService = loadingService;\n this.cd = cd;\n this._loading = false;\n }\n get loading() {\n return this._loading;\n }\n set loading(value) {\n this._loading = value;\n this.cd.markForCheck();\n }\n ngOnInit() {\n const loadingNotifications = this.loadingService\n .changes\n .pipe(filter(index => index === this.index));\n this.subscription = this.expandService\n .changes\n .pipe(filter(({ index }) => index === this.index), tap(({ expand }) => {\n if (!expand && this.loading) {\n this.loading = false;\n }\n }), filter(({ expand }) => expand), switchMap(x => of(x).pipe(delay(100), takeUntil(loadingNotifications))))\n .subscribe(() => this.loading = true);\n this.subscription.add(loadingNotifications.subscribe(() => this.loading = false));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n};\nLoadingIndicatorDirective.ɵfac = function LoadingIndicatorDirective_Factory(t) { return new (t || LoadingIndicatorDirective)(ɵngcc0.ɵɵdirectiveInject(ExpandStateService), ɵngcc0.ɵɵdirectiveInject(LoadingNotificationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nLoadingIndicatorDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LoadingIndicatorDirective, selectors: [[\"\", \"kendoTreeViewLoading\", \"\"]], hostVars: 2, hostBindings: function LoadingIndicatorDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-i-loading\", ctx.loading);\n } }, inputs: { index: [\"kendoTreeViewLoading\", \"index\"] } });\n__decorate([\n HostBinding(\"class.k-i-loading\"),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], LoadingIndicatorDirective.prototype, \"loading\", null);\n__decorate([\n Input(\"kendoTreeViewLoading\"),\n __metadata(\"design:type\", String)\n], LoadingIndicatorDirective.prototype, \"index\", void 0);\nLoadingIndicatorDirective = __decorate([ __metadata(\"design:paramtypes\", [ExpandStateService,\n LoadingNotificationService,\n ChangeDetectorRef])\n], LoadingIndicatorDirective);\n\n/**\n * @hidden\n * Performs the right-to-left function composition. Functions must have a unary.\n */\nconst compose = (...args) => (data) => args.reduceRight((acc, curr) => curr(acc), data);\n\n/**\n * @hidden\n */\nclass FlatEditingService {\n constructor(flatBinding) {\n this.flatBinding = flatBinding;\n }\n add({ sourceItem, destinationItem, dropPosition, sourceTree, destinationTree }) {\n // shallow clone the item as not to mistake it for its 'older' version when the remove handler kicks in to splice the item at its old position\n const clonedSourceDataItem = Object.assign({}, getDataItem(sourceItem));\n if (dropPosition === DropPosition.Over) {\n // expand the item that was dropped into\n expandDropTarget(destinationItem, destinationTree);\n const destinationItemId = getter(this.flatBinding.idField)(getDataItem(destinationItem));\n setter(this.flatBinding.parentIdField)(clonedSourceDataItem, destinationItemId);\n const lastChildNodeIndex = this.getLastVisibleChildNodeIndex(destinationTree, this.flatBinding.originalData, getDataItem(destinationItem));\n // insert after the last visible child\n const targetIndex = lastChildNodeIndex + 1;\n this.flatBinding.originalData.splice(targetIndex, 0, clonedSourceDataItem);\n // rebind the treeview data before searching for the focus target index\n this.rebindData();\n const focusTarget = this.fetchChildNodes(getDataItem(destinationItem), destinationTree).indexOf(clonedSourceDataItem);\n this.movedItemNewIndex = buildTreeIndex(destinationItem.item.index, focusTarget);\n }\n else {\n const shiftIndex = dropPosition === DropPosition.After ? 1 : 0;\n const targetIndex = this.flatBinding.originalData.indexOf(getDataItem(destinationItem)) + shiftIndex;\n this.flatBinding.originalData.splice(targetIndex, 0, clonedSourceDataItem);\n const destinationItemParentId = getter(this.flatBinding.parentIdField)(getDataItem(destinationItem));\n setter(this.flatBinding.parentIdField)(clonedSourceDataItem, destinationItemParentId);\n // rebind the treeview data before searching for the focus target index\n this.rebindData();\n const parentIndex = destinationItem.parent ?\n destinationItem.parent.item.index :\n null;\n const parentContainer = destinationItem.parent ?\n this.fetchChildNodes(getDataItem(destinationItem.parent), destinationTree) :\n destinationTree.nodes;\n const focusTarget = parentContainer.indexOf(clonedSourceDataItem);\n this.movedItemNewIndex = buildTreeIndex(parentIndex, focusTarget);\n }\n if (sourceTree !== destinationTree) {\n this.addChildNodes(clonedSourceDataItem, sourceTree);\n }\n // increment the parent page size => an item is moved into it\n const updatedParent = dropPosition === DropPosition.Over ? getDataItem(destinationItem) : getDataItem(destinationItem.parent);\n incrementPageSize(destinationTree, updatedParent);\n // the page sizes are stored by data-item reference => copy the old item ref page size to the new item reference\n copyPageSize(destinationTree, getDataItem(sourceItem), clonedSourceDataItem);\n // the source tree nodes are reloaded on `removeItem` - reload the destination tree nodes if the soruce and the destination tree are different\n if (sourceTree !== destinationTree && !destinationTree.loadOnDemand) {\n destinationTree.preloadChildNodes();\n }\n // if the source and destination trees are the same, focusing the moved item here will not have the desired effect\n // as the `remove` handler has not yet kicked-in to remove the item from its old position\n if (sourceTree !== destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n destinationTree.focus(this.movedItemNewIndex);\n }\n }\n remove({ sourceItem, sourceTree, destinationTree }) {\n const sourceDataItem = getDataItem(sourceItem);\n const sourceItemIndex = this.flatBinding.originalData.indexOf(sourceDataItem);\n this.flatBinding.originalData.splice(sourceItemIndex, 1);\n if (sourceTree !== destinationTree) {\n this.removeChildNodes(sourceDataItem, sourceTree);\n }\n this.rebindData();\n // emit collapse for the parent node if its last child node was spliced\n const parentChildren = sourceItem.parent ? sourceItem.parent.children : [];\n collapseEmptyParent(sourceItem.parent, parentChildren, sourceTree);\n // decrement source item parent page size => an item has been removed from it\n decrementPageSize(sourceTree, getDataItem(sourceItem.parent));\n // reload the treeview nodes\n if (!sourceTree.loadOnDemand) {\n sourceTree.preloadChildNodes();\n }\n // if the source and destination trees are different we want to focus only the moved item in the destination tree\n if (sourceTree === destinationTree) {\n // ensure the focus target is rendered and registered\n destinationTree.changeDetectorRef.detectChanges();\n // after the source item is removed from its original position, the candidate index might have to be corrected\n const index = updateMovedItemIndex(this.movedItemNewIndex, sourceItem.item.index);\n destinationTree.focus(index);\n }\n }\n addChildNodes(dataItem, source) {\n const itemChildren = this.fetchAllDescendantNodes(dataItem, source);\n this.flatBinding.originalData.push(...itemChildren);\n }\n removeChildNodes(dataItem, source) {\n const sourceChildren = this.fetchAllDescendantNodes(dataItem, source);\n sourceChildren.forEach(item => {\n const index = this.flatBinding.originalData.indexOf(item);\n this.flatBinding.originalData.splice(index, 1);\n });\n }\n fetchAllDescendantNodes(node, treeview) {\n let nodes = this.fetchChildNodes(node, treeview);\n nodes.forEach(node => nodes = nodes.concat(this.fetchAllDescendantNodes(node, treeview) || []));\n return nodes;\n }\n fetchChildNodes(node, treeview) {\n if (!node) {\n return [];\n }\n let nodes = [];\n treeview\n .children(node)\n .pipe(take(1))\n .subscribe(children => nodes = nodes.concat(children || []));\n return nodes;\n }\n getLastVisibleChildNodeIndex(treeview, data, node) {\n if (!isPresent(treeview.loadMoreService) || !treeview.hasChildren(node)) {\n return data.length;\n }\n const visibleNodesCount = treeview.loadMoreService.getGroupSize(node);\n const visibleChildren = this.fetchChildNodes(node, treeview).slice(0, visibleNodesCount);\n const lastNode = visibleChildren[visibleChildren.length - 1];\n const lastNodeIndex = data.indexOf(lastNode);\n return lastNodeIndex;\n }\n rebindData() {\n this.flatBinding.nodes = this.flatBinding.originalData;\n }\n}\n\nconst findChildren = (prop, nodes, value) => nodes.filter((x) => prop(x) === value);\nconst indexBuilder$1 = new IndexBuilderService();\nconst mapToTree = (currentLevelNodes, allNodes, parentIdField, idField, parent = null, parentIndex = '') => {\n if (!isArrayWithAtLeastOneItem(currentLevelNodes)) {\n return [];\n }\n return currentLevelNodes.map((node, idx) => {\n const index = indexBuilder$1.nodeIndex(idx.toString(), parentIndex);\n const wrapper = {\n dataItem: node,\n index,\n parent,\n visible: true\n };\n wrapper.children = mapToTree(findChildren(getter(parentIdField), allNodes || [], getter(idField)(node)), allNodes, parentIdField, idField, wrapper, index);\n return wrapper;\n });\n};\n/**\n * A directive which encapsulates the retrieval of the child nodes.\n */\nlet FlatDataBindingDirective = class FlatDataBindingDirective extends FilteringBase {\n constructor(component) {\n super(component);\n this.component = component;\n /**\n * @hidden\n */\n this.loadOnDemand = true;\n /**\n * @hidden\n */\n this.originalData = [];\n this.component.isVisible = (node) => this.visibleNodes.has(node);\n }\n /**\n * The nodes which will be displayed by the TreeView.\n */\n set nodes(values) {\n this.originalData = values || [];\n if (!isNullOrEmptyString(this.parentIdField)) {\n const prop = getter(this.parentIdField);\n this.component.nodes = this.originalData.filter(compose(isBlank, prop));\n this.filterData = mapToTree(this.component.nodes, this.originalData, this.parentIdField, this.idField);\n this.updateVisibleNodes(this.filterData);\n }\n else {\n this.component.nodes = this.originalData.slice(0);\n }\n }\n /**\n * @hidden\n * A callback which determines whether a TreeView node should be rendered as hidden.\n */\n set isVisible(fn) {\n this.component.isVisible = fn;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (isPresent(this.parentIdField) && isPresent(this.idField)) {\n const fetchChildren = (node) => findChildren(getter(this.parentIdField), this.originalData || [], getter(this.idField)(node));\n this.component.hasChildren = (node) => fetchChildren(node).length > 0;\n this.component.children = (node) => of(fetchChildren(node));\n this.component.editService = new FlatEditingService(this);\n this.component.filterChange.subscribe(this.handleFilterChange.bind(this));\n if (this.component.filter) {\n this.handleFilterChange(this.component.filter);\n }\n if (!this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (isChanged('parentIdField', changes, false)) {\n this.nodes = this.originalData;\n }\n // should react to changes.loadOnDemand as well - should preload the data or clear the already cached items\n if (anyChanged(['nodes', 'loadOnDemand'], changes) && !this.loadOnDemand && isPresent(this.component.preloadChildNodes)) {\n this.component.preloadChildNodes();\n }\n }\n};\nFlatDataBindingDirective.ɵfac = function FlatDataBindingDirective_Factory(t) { return new (t || FlatDataBindingDirective)(ɵngcc0.ɵɵdirectiveInject(DataBoundComponent)); };\nFlatDataBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FlatDataBindingDirective, selectors: [[\"\", \"kendoTreeViewFlatDataBinding\", \"\"]], inputs: { loadOnDemand: \"loadOnDemand\", nodes: \"nodes\", isVisible: \"isVisible\", parentIdField: \"parentIdField\", idField: \"idField\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], FlatDataBindingDirective.prototype, \"nodes\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FlatDataBindingDirective.prototype, \"parentIdField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FlatDataBindingDirective.prototype, \"idField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FlatDataBindingDirective.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], FlatDataBindingDirective.prototype, \"isVisible\", null);\nFlatDataBindingDirective = __decorate([ __metadata(\"design:paramtypes\", [DataBoundComponent])\n], FlatDataBindingDirective);\n\nconst buildItem = (index, dataItem) => ({ dataItem, index });\nlet id = 0;\nconst TREE_ITEM_ROLE = 'treeitem';\nconst BUTTON_ROLE = 'button';\n/**\n * @hidden\n *\n * A directive which manages the expanded state of the TreeView.\n */\nlet TreeViewItemDirective = class TreeViewItemDirective {\n constructor(element, expandService, navigationService, selectionService, lookupService, renderer, ib) {\n this.element = element;\n this.expandService = expandService;\n this.navigationService = navigationService;\n this.selectionService = selectionService;\n this.lookupService = lookupService;\n this.renderer = renderer;\n this.ib = ib;\n this.role = TREE_ITEM_ROLE;\n this.loadOnDemand = true;\n this.isDisabled = false;\n this.isVisible = true;\n this.ariaChecked = 'false';\n this.id = id++;\n this.isInitialized = false;\n this.subscriptions = [];\n this.subscribe();\n }\n set isChecked(checked) {\n if (checked === 'checked') {\n this.ariaChecked = 'true';\n }\n else if (checked === 'indeterminate') {\n this.ariaChecked = 'mixed';\n }\n else {\n this.ariaChecked = 'false';\n }\n }\n get isExpanded() {\n return this._isExpanded || false;\n }\n set isExpanded(isExpanded) {\n this._isExpanded = isExpanded;\n }\n get isSelected() {\n return this._isSelected || false;\n }\n set isSelected(isSelected) {\n this._isSelected = isSelected;\n }\n get isButton() {\n return this.role === BUTTON_ROLE;\n }\n get treeItem() {\n return buildItem(this.index, this.dataItem);\n }\n get parentTreeItem() {\n return this.parentDataItem ? buildItem(this.parentIndex, this.parentDataItem) : null;\n }\n ngOnInit() {\n if (this.loadOnDemand && !this.isButton) {\n this.lookupService.registerItem(this.treeItem, this.parentTreeItem);\n }\n this.registerNavigationItem();\n this.isInitialized = true;\n this.setAttribute('role', this.role);\n this.setAriaAttributes();\n this.setDisabledClass();\n this.updateTabIndex();\n }\n ngOnChanges(changes) {\n const { index, isDisabled } = changes;\n if (anyChanged(['index', 'checkable', 'isChecked', 'expandable', 'isExpanded', 'selectable', 'isSelected'], changes)) {\n this.setAriaAttributes();\n }\n if (isDisabled) {\n this.setDisabledClass();\n }\n if (this.loadOnDemand && !this.isButton) {\n this.moveLookupItem(changes);\n }\n this.moveNavigationItem(index);\n if (anyChanged(['isDisabled', 'isVisible'], changes)) {\n this.updateNodeAvailability();\n }\n }\n ngOnDestroy() {\n this.navigationService.unregisterItem(this.id, this.index);\n if (this.loadOnDemand && !this.isButton) {\n this.lookupService.unregisterItem(this.index, this.dataItem);\n }\n this.subscriptions = this.subscriptions.reduce((list, callback) => (callback.unsubscribe(), list), []);\n }\n subscribe() {\n this.subscriptions = [\n this.navigationService.moves\n .subscribe(() => {\n this.updateTabIndex();\n this.focusItem();\n }),\n this.navigationService.expands\n .pipe(filter(({ index }) => index === this.index && !this.isDisabled))\n .subscribe(({ expand }) => this.expand(expand))\n ];\n }\n registerNavigationItem() {\n this.navigationService.registerItem(this.id, this.index, this.isDisabled, this.isButton, this.isVisible);\n this.activateItem();\n }\n activateItem() {\n if (this.isDisabled) {\n return;\n }\n const navigationService = this.navigationService;\n const selectionService = this.selectionService;\n const index = this.index;\n selectionService.setFirstSelected(index, this.isSelected);\n if (!navigationService.isActive(index) && selectionService.isFirstSelected(index)) {\n navigationService.activateIndex(index);\n }\n }\n expand(shouldExpand) {\n this.expandService[shouldExpand ? 'expand' : 'collapse'](this.index, this.dataItem);\n }\n isFocusable() {\n return !this.isDisabled && this.navigationService.isFocusable(this.index);\n }\n focusItem() {\n if (this.isInitialized && this.navigationService.isActive(this.index)) {\n this.element.nativeElement.focus();\n }\n }\n moveLookupItem(changes = {}) {\n const { dataItem, index, parentDataItem, parentIndex } = changes;\n if ((index && index.firstChange) || //skip first change\n (!dataItem && !index && !parentDataItem && !parentIndex)) {\n return;\n }\n const oldIndex = (index || {}).previousValue || this.index;\n this.lookupService.replaceItem(oldIndex, this.treeItem, this.parentTreeItem);\n }\n moveNavigationItem(indexChange = {}) {\n const { currentValue, firstChange, previousValue } = indexChange;\n if (!firstChange && isPresent(currentValue) && isPresent(previousValue)) {\n this.navigationService.unregisterItem(this.id, previousValue);\n this.navigationService.registerItem(this.id, currentValue, this.isDisabled, this.isButton);\n }\n }\n updateNodeAvailability() {\n const service = this.navigationService;\n if (this.isDisabled || !this.isVisible) {\n service.activateClosest(this.index); // activate before unregister the item\n }\n else {\n service.activateFocusable();\n }\n service.unregisterItem(this.id, this.index);\n service.registerItem(this.id, this.index, this.isDisabled, this.isButton, this.isVisible);\n }\n setAriaAttributes() {\n this.setAttribute('aria-level', this.ib.level(this.index).toString());\n // don't render attributes when the component configuration doesn't allow the specified state\n this.setAttribute('aria-expanded', this.expandable ? this.isExpanded.toString() : null);\n this.setAttribute('aria-selected', this.selectable ? this.isSelected.toString() : null);\n this.setAttribute('aria-checked', this.checkable ? this.ariaChecked : null);\n }\n setDisabledClass() {\n this.setClass('k-state-disabled', this.isDisabled);\n }\n setClass(className, toggle) {\n const action = toggle ? 'addClass' : 'removeClass';\n this.renderer[action](this.element.nativeElement, className);\n }\n updateTabIndex() {\n this.setAttribute('tabIndex', this.isFocusable() ? '0' : '-1');\n }\n setAttribute(attr, value) {\n if (!isPresent(value)) {\n this.renderer.removeAttribute(this.element.nativeElement, attr);\n return;\n }\n this.renderer.setAttribute(this.element.nativeElement, attr, value);\n }\n};\nTreeViewItemDirective.ɵfac = function TreeViewItemDirective_Factory(t) { return new (t || TreeViewItemDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ExpandStateService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(TreeViewLookupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(IndexBuilderService)); };\nTreeViewItemDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TreeViewItemDirective, selectors: [[\"\", \"kendoTreeViewItem\", \"\"]], inputs: { role: \"role\", loadOnDemand: \"loadOnDemand\", isDisabled: \"isDisabled\", isVisible: \"isVisible\", isChecked: \"isChecked\", isExpanded: \"isExpanded\", isSelected: \"isSelected\", dataItem: \"dataItem\", index: \"index\", parentDataItem: \"parentDataItem\", parentIndex: \"parentIndex\", checkable: \"checkable\", selectable: \"selectable\", expandable: \"expandable\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewItemDirective.prototype, \"dataItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewItemDirective.prototype, \"index\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewItemDirective.prototype, \"parentDataItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewItemDirective.prototype, \"parentIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewItemDirective.prototype, \"role\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"checkable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"selectable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"expandable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], TreeViewItemDirective.prototype, \"isChecked\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"isDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemDirective.prototype, \"isVisible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], TreeViewItemDirective.prototype, \"isExpanded\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], TreeViewItemDirective.prototype, \"isSelected\", null);\nTreeViewItemDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n ExpandStateService,\n NavigationService,\n SelectionService,\n TreeViewLookupService,\n Renderer2,\n IndexBuilderService])\n], TreeViewItemDirective);\n\n/**\n * @hidden\n *\n * A directive which manages the expanded state of the TreeView.\n */\nlet TreeViewItemContentDirective = class TreeViewItemContentDirective {\n constructor(element, navigationService, selectionService, renderer) {\n this.element = element;\n this.navigationService = navigationService;\n this.selectionService = selectionService;\n this.renderer = renderer;\n this.initialSelection = false;\n this.isSelected = isSelected;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.navigationService.moves\n .subscribe(this.updateFocusClass.bind(this)));\n this.subscriptions.add(this.navigationService.selects\n .pipe(filter((index) => index === this.index))\n .subscribe((index) => this.selectionService.select(index, this.dataItem)));\n this.subscriptions.add(this.selectionService.changes\n .subscribe(() => {\n this.updateSelectionClass(this.isSelected(this.dataItem, this.index));\n }));\n }\n ngOnChanges(changes) {\n if (changes.initialSelection) {\n this.updateSelectionClass(this.initialSelection);\n }\n if (changes.index) {\n this.updateFocusClass();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n updateFocusClass() {\n this.render(this.navigationService.isActive(this.index), 'k-state-focused');\n }\n updateSelectionClass(selected) {\n this.render(selected, 'k-state-selected');\n }\n render(addClass, className) {\n const action = addClass ? 'addClass' : 'removeClass';\n this.renderer[action](this.element.nativeElement, className);\n }\n};\nTreeViewItemContentDirective.ɵfac = function TreeViewItemContentDirective_Factory(t) { return new (t || TreeViewItemContentDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nTreeViewItemContentDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TreeViewItemContentDirective, selectors: [[\"\", \"kendoTreeViewItemContent\", \"\"]], inputs: { initialSelection: \"initialSelection\", isSelected: \"isSelected\", dataItem: \"dataItem\", index: \"index\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TreeViewItemContentDirective.prototype, \"dataItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TreeViewItemContentDirective.prototype, \"index\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TreeViewItemContentDirective.prototype, \"initialSelection\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], TreeViewItemContentDirective.prototype, \"isSelected\", void 0);\nTreeViewItemContentDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NavigationService,\n SelectionService,\n Renderer2])\n], TreeViewItemContentDirective);\n\n/**\n * @hidden\n *\n * Represents the CheckBox component of the Kendo UI TreeView for Angular.\n *\n */\nlet CheckBoxComponent = class CheckBoxComponent {\n constructor(element, renderer, changeDetector) {\n this.element = element;\n this.renderer = renderer;\n this.changeDetector = changeDetector;\n /**\n * Specifies the [`id`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id) of the component.\n */\n this.id = `_${guid()}`;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires when the user changes the check state of the component.\n */\n this.checkStateChange = new EventEmitter();\n this.checkState = 'none';\n }\n //XXX: implement ComponentValueAccessor\n //XXX: focus/blur methods\n get classWrapper() { return true; }\n get indeterminate() {\n return this.checkState === 'indeterminate';\n }\n get checked() {\n return this.checkState === 'checked';\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.element.nativeElement, \"tabindex\");\n }\n ngDoCheck() {\n this.checkState = this.isChecked(this.node, this.index);\n }\n handleChange(e) {\n const state = e.target.checked ? 'checked' : 'none';\n // update the View State so that Angular updates the input if the isChecked value is the same\n this.checkState = state;\n this.changeDetector.detectChanges();\n this.checkStateChange.emit(state);\n }\n};\nCheckBoxComponent.ɵfac = function CheckBoxComponent_Factory(t) { return new (t || CheckBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nCheckBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CheckBoxComponent, selectors: [[\"kendo-checkbox\"]], hostVars: 2, hostBindings: function CheckBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-checkbox-wrapper\", ctx.classWrapper);\n } }, inputs: { id: \"id\", tabindex: \"tabindex\", isChecked: \"isChecked\", node: \"node\", index: \"index\", labelText: \"labelText\" }, outputs: { checkStateChange: \"checkStateChange\" }, decls: 3, vars: 6, consts: [[\"type\", \"checkbox\", 1, \"k-checkbox\", 3, \"id\", \"checked\", \"indeterminate\", \"tabindex\", \"change\"], [\"tabindex\", \"-1\", 1, \"k-checkbox-label\", 3, \"for\"]], template: function CheckBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"input\", 0);\n ɵngcc0.ɵɵlistener(\"change\", function CheckBoxComponent_Template_input_change_0_listener($event) { return ctx.handleChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"label\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"id\", ctx.id)(\"checked\", ctx.checked)(\"indeterminate\", ctx.indeterminate)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"for\", ctx.id);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.labelText);\n } }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-checkbox-wrapper'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], CheckBoxComponent.prototype, \"classWrapper\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CheckBoxComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CheckBoxComponent.prototype, \"isChecked\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CheckBoxComponent.prototype, \"node\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CheckBoxComponent.prototype, \"index\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CheckBoxComponent.prototype, \"labelText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], CheckBoxComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], CheckBoxComponent.prototype, \"checkStateChange\", void 0);\nCheckBoxComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n ChangeDetectorRef])\n], CheckBoxComponent);\n\nconst COMPONENT_DIRECTIVES = [\n CheckBoxComponent\n];\n/**\n * @hidden\n *\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the CheckBox component.\n */\nlet CheckBoxModule = class CheckBoxModule {\n};\nCheckBoxModule.ɵfac = function CheckBoxModule_Factory(t) { return new (t || CheckBoxModule)(); };\nCheckBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CheckBoxModule });\nCheckBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\n/**\n * A directive which enables the update of the initially provided data array during drag-and-drop.\n *\n * Either use this directive in combination with one of the data binding directives ([`kendoTreeViewHierarchyBinding`]({% slug api_treeview_hierarchybindingdirective %})\n * or [`kendoTreeViewFlatDataBinding`]({% slug api_treeview_flatdatabindingdirective %})) which set their own edit handlers, or provide\n * your own [`editService`]({% slug api_treeview_editservice %}) to this directive. The latter subscribes to and calls the\n * [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem) and [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem)\n * handlers when the corresponding events are triggered by the TreeView component.\n */\nlet DragAndDropEditingDirective = class DragAndDropEditingDirective {\n constructor(treeview) {\n this.treeview = treeview;\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.treeview.addItem.subscribe(this.handleAdd.bind(this)));\n this.subscriptions.add(this.treeview.removeItem.subscribe(this.handleRemove.bind(this)));\n }\n /**\n * Specifies the handlers called on drag-and-drop [`addItem`]({% slug api_treeview_treeviewcomponent %}#toc-additem)\n * and [`removeItem`]({% slug api_treeview_treeviewcomponent %}#toc-removeitem) events.\n */\n set editService(service) {\n this.treeview.editService = service;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n handleAdd(args) {\n if (!isPresent(this.treeview.editService)) {\n throw new Error('No `editService` provided. Either provide your own implementation or use this directive in combination with one of the data binding directives (`kendoTreeViewHierarchyBinding` or `kendoTreeViewFlatDataBinding`).');\n }\n this.treeview.editService.add(args);\n }\n handleRemove(args) {\n if (!isPresent(this.treeview.editService)) {\n throw new Error('No `editService` provided. Either provide your own implementation or use this directive in combination with one of the data binding directives (`kendoTreeViewHierarchyBinding` or `kendoTreeViewFlatDataBinding`).');\n }\n this.treeview.editService.remove(args);\n }\n};\nDragAndDropEditingDirective.ɵfac = function DragAndDropEditingDirective_Factory(t) { return new (t || DragAndDropEditingDirective)(ɵngcc0.ɵɵdirectiveInject(TreeViewComponent)); };\nDragAndDropEditingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DragAndDropEditingDirective, selectors: [[\"\", \"kendoTreeViewDragAndDropEditing\", \"\"]], inputs: { editService: \"editService\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DragAndDropEditingDirective.prototype, \"editService\", null);\nDragAndDropEditingDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent])\n], DragAndDropEditingDirective);\n\nconst LOAD_MORE_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/treeview/load-more-button/';\n/**\n * A directive that enables the display of only a limited amount of nodes per level\n * ([see example]({% slug loadmorebutton_treeview %})).\n */\nlet LoadMoreDirective = class LoadMoreDirective {\n constructor(treeview) {\n this.treeview = treeview;\n /**\n * Keeps track of the current page size of each node over expand/collapse cycles.\n */\n this.pageSizes = new Map();\n /**\n * Used as an identifier for the root page size as the root collection of nodes is not associated with a data item.\n */\n this.rootLevelId = guid();\n this.treeview.loadMoreService = {\n getInitialPageSize: this.getInitalPageSize.bind(this),\n getGroupSize: this.getGroupSize.bind(this),\n setGroupSize: this.setGroupSize.bind(this),\n getTotalNodesCount: this.getTotalNodesCount.bind(this)\n };\n }\n /**\n * Specifies the callback that will be called when the load more button is clicked.\n * Providing a function is only required when additional nodes are fetched on demand\n * ([see example]({% slug loadmorebutton_treeview %}#toc-remote-data)).\n */\n set loadMoreNodes(loadMoreNodes) {\n if (typeof loadMoreNodes === 'string') {\n return;\n }\n this.treeview.loadMoreService.loadMoreNodes = loadMoreNodes;\n }\n ngOnChanges() {\n this.verifySettings();\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isPresent(this.pageSize)) {\n throw new Error(`To use the TreeView \\`kendoTreeViewLoadMore\\` directive, you need to assign a \\`pageSize\\` value. See ${LOAD_MORE_DOC_LINK$1}.`);\n }\n const loadMoreNodes = this.treeview.loadMoreService.loadMoreNodes;\n if (isPresent(loadMoreNodes) && typeof loadMoreNodes !== 'function') {\n throw new Error(`The passed value to the \\`kendoTreeViewLoadMore\\` directive must be a function that retrieves additional nodes. See ${LOAD_MORE_DOC_LINK$1}.`);\n }\n if (isPresent(loadMoreNodes) && !isPresent(this.totalField)) {\n throw new Error(`When a function to fetch additional nodes is provided to the \\`kendoTreeViewLoadMore\\` directive, the \\`totalField\\` and \\`totalRootNodes\\` values must also be provided. See ${LOAD_MORE_DOC_LINK$1}.`);\n }\n }\n getGroupSize(dataItem) {\n const itemKey = dataItem || this.rootLevelId;\n return this.pageSizes.has(itemKey) ? this.pageSizes.get(itemKey) : this.pageSize;\n }\n setGroupSize(dataItem, pageSize) {\n const itemKey = dataItem || this.rootLevelId;\n const normalizedSizeValue = pageSize > 0 ? pageSize : 0;\n this.pageSizes.set(itemKey, normalizedSizeValue);\n }\n getTotalNodesCount(dataItem, loadedNodesCount) {\n if (isPresent(dataItem) && isPresent(this.totalField)) {\n return dataItem[this.totalField];\n }\n else if (!isPresent(dataItem) && isPresent(this.totalRootNodes)) {\n return this.totalRootNodes;\n }\n else {\n return loadedNodesCount;\n }\n }\n getInitalPageSize() {\n return this.pageSize;\n }\n};\nLoadMoreDirective.ɵfac = function LoadMoreDirective_Factory(t) { return new (t || LoadMoreDirective)(ɵngcc0.ɵɵdirectiveInject(TreeViewComponent)); };\nLoadMoreDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LoadMoreDirective, selectors: [[\"\", \"kendoTreeViewLoadMore\", \"\"]], inputs: { loadMoreNodes: [\"kendoTreeViewLoadMore\", \"loadMoreNodes\"], pageSize: \"pageSize\", totalRootNodes: \"totalRootNodes\", totalField: \"totalField\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input('kendoTreeViewLoadMore'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], LoadMoreDirective.prototype, \"loadMoreNodes\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LoadMoreDirective.prototype, \"pageSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], LoadMoreDirective.prototype, \"totalRootNodes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LoadMoreDirective.prototype, \"totalField\", void 0);\nLoadMoreDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent])\n], LoadMoreDirective);\n\nconst COMPONENT_DIRECTIVES$1 = [\n TreeViewComponent,\n TreeViewGroupComponent,\n TreeViewItemDirective,\n TreeViewItemContentDirective,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n LoadingIndicatorDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DragClueComponent,\n DropHintTemplateDirective,\n DropHintComponent,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective\n];\n/**\n * @hidden\n */\nlet SharedModule = class SharedModule {\n};\nSharedModule.ɵfac = function SharedModule_Factory(t) { return new (t || SharedModule)(); };\nSharedModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n CheckBoxModule,\n InputsModule\n ]] });\n\nconst EXPORTS = [\n TreeViewComponent,\n NodeTemplateDirective,\n CheckDirective,\n DisableDirective,\n ExpandDirective,\n SelectDirective,\n HierarchyBindingDirective,\n FlatDataBindingDirective,\n DragAndDropDirective,\n DragClueTemplateDirective,\n DropHintTemplateDirective,\n DragAndDropEditingDirective,\n LoadMoreDirective,\n LoadMoreButtonTemplateDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the TreeView component.\n */\nlet TreeViewModule = class TreeViewModule {\n};\nTreeViewModule.ɵfac = function TreeViewModule_Factory(t) { return new (t || TreeViewModule)(); };\nTreeViewModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TreeViewModule });\nTreeViewModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[SharedModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ExpandStateService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(IndexBuilderService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadingNotificationService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NodeChildrenService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NodeTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewNodeTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadMoreButtonTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewLoadMoreButtonTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DataBoundComponent, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ExpandableComponent, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SelectionService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewLookupService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.Default,\n exportAs: 'kendoTreeView',\n providers: providers,\n selector: 'kendo-treeview',\n template: `\n \n \n \n \n \n
    \n
\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ExpandStateService }, { type: NavigationService }, { type: NodeChildrenService }, { type: SelectionService }, { type: TreeViewLookupService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: DataChangeNotificationService }, { type: ɵngcc1.LocalizationService }]; }, { classNames: [{\n type: HostBinding,\n args: [\"class.k-widget\"]\n }, {\n type: HostBinding,\n args: [\"class.k-treeview\"]\n }], role: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], filterInputPlaceholder: [{\n type: Input\n }], childrenLoaded: [{\n type: Output\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], nodeDragStart: [{\n type: Output\n }], nodeDrag: [{\n type: Output\n }], filterStateChange: [{\n type: Output\n }], nodeDrop: [{\n type: Output\n }], nodeDragEnd: [{\n type: Output\n }], addItem: [{\n type: Output\n }], removeItem: [{\n type: Output\n }], checkedChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], nodeClick: [{\n type: Output\n }], nodeDblClick: [{\n type: Output\n }], trackBy: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], navigable: [{\n type: Input\n }], children: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: [\"attr.dir\"]\n }], animate: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['@.disabled']\n }], nodeTemplateRef: [{\n type: Input,\n args: ['nodeTemplate']\n }], loadMoreButtonTemplateRef: [{\n type: Input,\n args: ['loadMoreButtonTemplate']\n }], nodes: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], assetsContainer: [{\n type: ViewChild,\n args: ['assetsContainer', { read: ViewContainerRef, static: true }]\n }], nodeTemplateQuery: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], loadMoreButtonTemplateQuery: [{\n type: ContentChild,\n args: [LoadMoreButtonTemplateDirective, { static: false }]\n }], textField: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewGroupComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('toggle', [\n transition('void => *', [\n style({ height: 0 }),\n animate('0.1s ease-in', style({ height: \"*\" }))\n ]),\n transition('* => void', [\n style({ height: \"*\" }),\n animate('0.1s ease-in', style({ height: 0 }))\n ])\n ])\n ],\n selector: '[kendoTreeViewGroup]',\n template: `\n \n
\n \n \n \n \n \n \n \n \n \n \n {{nodeText(node)}}\n \n \n \n
\n \n \n \n \n
\n \n \n \n \n \n \n Load more\n \n \n
\n \n `\n }]\n }], function () { return [{ type: ExpandStateService }, { type: LoadingNotificationService }, { type: IndexBuilderService }, { type: TreeViewLookupService }, { type: NavigationService }, { type: NodeChildrenService }, { type: DataChangeNotificationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { kGroupClass: [{\n type: HostBinding,\n args: [\"class.k-group\"]\n }], role: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], loadOnDemand: [{\n type: Input\n }], textField: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], children: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], checkboxes: [{\n type: Input\n }], expandIcons: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selectable: [{\n type: Input\n }], touchActions: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], nodes: [{\n type: Input\n }], parentDataItem: [{\n type: Input\n }], parentIndex: [{\n type: Input\n }], nodeTemplateRef: [{\n type: Input\n }], loadMoreButtonTemplateRef: [{\n type: Input\n }], loadMoreService: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewCheckable]' }]\n }], function () { return [{ type: TreeViewComponent }, { type: ɵngcc0.NgZone }]; }, { checkedKeysChange: [{\n type: Output\n }], isChecked: [{\n type: Input\n }], checkedKeys: [{\n type: Input\n }], checkKey: [{\n type: Input,\n args: [\"checkBy\"]\n }], checkable: [{\n type: Input,\n args: ['kendoTreeViewCheckable']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DisableDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewDisable]' }]\n }], function () { return [{ type: TreeViewComponent }, { type: ɵngcc0.ChangeDetectorRef }]; }, { disabledKeys: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], disableKey: [{\n type: Input,\n args: [\"kendoTreeViewDisable\"]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ExpandDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewExpandable]' }]\n }], function () { return [{ type: ExpandableComponent }]; }, { expandOnFilter: [{\n type: Input\n }], expandedKeysChange: [{\n type: Output\n }], isExpanded: [{\n type: Input\n }], expandedKeys: [{\n type: Input\n }], expandKey: [{\n type: Input,\n args: [\"expandBy\"]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SelectDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewSelectable]' }]\n }], function () { return [{ type: TreeViewComponent }]; }, { selectedKeysChange: [{\n type: Output\n }], isSelected: [{\n type: Input\n }], selectedKeys: [{\n type: Input\n }], getAriaMultiselectable: [{\n type: HostBinding,\n args: ['attr.aria-multiselectable']\n }], selectKey: [{\n type: Input,\n args: ['selectBy']\n }], selection: [{\n type: Input,\n args: ['kendoTreeViewSelectable']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragClueComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-treeview-drag-clue',\n template: `\n \n \n {{text}}\n \n\n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-header']\n }, {\n type: HostBinding,\n args: ['class.k-drag-clue']\n }], posistionStyle: [{\n type: HostBinding,\n args: ['style.position']\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragClueService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropHintComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-treeview-drop-hint',\n template: `\n \n
\n
\n \n\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-drop-hint-container']\n }], position: [{\n type: HostBinding,\n args: ['style.position']\n }], pointerEvents: [{\n type: HostBinding,\n args: ['style.pointer-events']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropHintService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragClueTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragClueTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropHintTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDropHintTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragAndDropDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragAndDrop]',\n providers: [\n DragClueService,\n DropHintService\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: TreeViewComponent }, { type: DragClueService }, { type: DropHintService }]; }, { allowCopy: [{\n type: Input\n }], dropZoneTreeViews: [{\n type: Input\n }], startDragAfter: [{\n type: Input\n }], autoScroll: [{\n type: Input\n }], userSelectStyle: [{\n type: HostBinding,\n args: ['style.user-select']\n }, {\n type: HostBinding,\n args: ['style.-ms-user-select']\n }, {\n type: HostBinding,\n args: ['style.-moz-user-select']\n }, {\n type: HostBinding,\n args: ['style.-webkit-user-select']\n }], dragClueTemplate: [{\n type: ContentChild,\n args: [DragClueTemplateDirective, { static: false }]\n }], dropHintTemplate: [{\n type: ContentChild,\n args: [DropHintTemplateDirective, { static: false }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(HierarchyBindingDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewHierarchyBinding]' }]\n }], function () { return [{ type: DataBoundComponent }, { type: DragAndDropDirective, decorators: [{\n type: Optional\n }, {\n type: Host\n }] }]; }, { loadOnDemand: [{\n type: Input\n }], childrenField: [{\n type: Input\n }], nodes: [{\n type: Input\n }], isVisible: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadingIndicatorDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewLoading]' }]\n }], function () { return [{ type: ExpandStateService }, { type: LoadingNotificationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { loading: [{\n type: HostBinding,\n args: [\"class.k-i-loading\"]\n }], index: [{\n type: Input,\n args: [\"kendoTreeViewLoading\"]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FlatDataBindingDirective, [{\n type: Directive,\n args: [{ selector: \"[kendoTreeViewFlatDataBinding]\" }]\n }], function () { return [{ type: DataBoundComponent }]; }, { loadOnDemand: [{\n type: Input\n }], nodes: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], parentIdField: [{\n type: Input\n }], idField: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewItemDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewItem]' }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ExpandStateService }, { type: NavigationService }, { type: SelectionService }, { type: TreeViewLookupService }, { type: ɵngcc0.Renderer2 }, { type: IndexBuilderService }]; }, { role: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], isVisible: [{\n type: Input\n }], isChecked: [{\n type: Input\n }], isExpanded: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], dataItem: [{\n type: Input\n }], index: [{\n type: Input\n }], parentDataItem: [{\n type: Input\n }], parentIndex: [{\n type: Input\n }], checkable: [{\n type: Input\n }], selectable: [{\n type: Input\n }], expandable: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewItemContentDirective, [{\n type: Directive,\n args: [{ selector: '[kendoTreeViewItemContent]' }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: NavigationService }, { type: SelectionService }, { type: ɵngcc0.Renderer2 }]; }, { initialSelection: [{\n type: Input\n }], isSelected: [{\n type: Input\n }], dataItem: [{\n type: Input\n }], index: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckBoxComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-checkbox',\n template: `\n \n {{labelText}}\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }]; }, { id: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], checkStateChange: [{\n type: Output\n }], classWrapper: [{\n type: HostBinding,\n args: ['class.k-checkbox-wrapper']\n }], isChecked: [{\n type: Input\n }], node: [{\n type: Input\n }], index: [{\n type: Input\n }], labelText: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CheckBoxModule, { declarations: [CheckBoxComponent], exports: [CheckBoxComponent] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragAndDropEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewDragAndDropEditing]'\n }]\n }], function () { return [{ type: TreeViewComponent }]; }, { editService: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LoadMoreDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTreeViewLoadMore]'\n }]\n }], function () { return [{ type: TreeViewComponent }]; }, { loadMoreNodes: [{\n type: Input,\n args: ['kendoTreeViewLoadMore']\n }], pageSize: [{\n type: Input\n }], totalRootNodes: [{\n type: Input\n }], totalField: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$1],\n exports: [COMPONENT_DIRECTIVES$1],\n imports: [\n CommonModule,\n CheckBoxModule,\n InputsModule\n ],\n entryComponents: [\n DragClueComponent,\n DropHintComponent\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [TreeViewComponent, TreeViewGroupComponent, TreeViewItemDirective, TreeViewItemContentDirective, NodeTemplateDirective, CheckDirective, DisableDirective, ExpandDirective, SelectDirective, HierarchyBindingDirective, LoadingIndicatorDirective, FlatDataBindingDirective, DragAndDropDirective, DragClueTemplateDirective, DragClueComponent, DropHintTemplateDirective, DropHintComponent, DragAndDropEditingDirective, LoadMoreDirective, LoadMoreButtonTemplateDirective]; }, imports: function () { return [CommonModule, CheckBoxModule, InputsModule]; }, exports: function () { return [TreeViewComponent, TreeViewGroupComponent, TreeViewItemDirective, TreeViewItemContentDirective, NodeTemplateDirective, CheckDirective, DisableDirective, ExpandDirective, SelectDirective, HierarchyBindingDirective, LoadingIndicatorDirective, FlatDataBindingDirective, DragAndDropDirective, DragClueTemplateDirective, DragClueComponent, DropHintTemplateDirective, DropHintComponent, DragAndDropEditingDirective, LoadMoreDirective, LoadMoreButtonTemplateDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TreeViewModule, [{\n type: NgModule,\n args: [{\n exports: [EXPORTS],\n imports: [SharedModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TreeViewModule, { imports: [SharedModule], exports: [TreeViewComponent, NodeTemplateDirective, CheckDirective, DisableDirective, ExpandDirective, SelectDirective, HierarchyBindingDirective, FlatDataBindingDirective, DragAndDropDirective, DragClueTemplateDirective, DropHintTemplateDirective, DragAndDropEditingDirective, LoadMoreDirective, LoadMoreButtonTemplateDirective] }); })();\n\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CheckBoxComponent, CheckBoxModule, DataChangeNotificationService, DragClueComponent, DragClueService, DropHintComponent, DropHintService, DragAndDropAssetService, PreventableEvent, ExpandStateService, FilteringBase, IndexBuilderService, LoadingIndicatorDirective, LoadingNotificationService, NavigationService, NodeChildrenService, SelectionService, SharedModule, TreeViewGroupComponent, TreeViewItemContentDirective, TreeViewItemDirective, TreeViewLookupService, TreeViewComponent, TreeViewModule, NodeTemplateDirective, CheckDirective, DisableDirective, ExpandDirective, SelectDirective, DataBoundComponent, ExpandableComponent, HierarchyBindingDirective, FlatDataBindingDirective, DragAndDropDirective, DragAndDropEditingDirective, DropHintTemplateDirective, DragClueTemplateDirective, DropAction, DropPosition, TreeItemDropEvent, TreeItemDragStartEvent, TreeItemDragEvent, LoadMoreDirective, LoadMoreButtonTemplateDirective };\n\n","export function not(pred, thisArg) {\n function notPred() {\n return !(notPred.pred.apply(notPred.thisArg, arguments));\n }\n notPred.pred = pred;\n notPred.thisArg = thisArg;\n return notPred;\n}\n","import { Subscriber } from '../Subscriber';\nexport function skipWhile(predicate) {\n return (source) => source.lift(new SkipWhileOperator(predicate));\n}\nclass SkipWhileOperator {\n constructor(predicate) {\n this.predicate = predicate;\n }\n call(subscriber, source) {\n return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));\n }\n}\nclass SkipWhileSubscriber extends Subscriber {\n constructor(destination, predicate) {\n super(destination);\n this.predicate = predicate;\n this.skipping = true;\n this.index = 0;\n }\n _next(value) {\n const destination = this.destination;\n if (this.skipping) {\n this.tryCallPredicate(value);\n }\n if (!this.skipping) {\n destination.next(value);\n }\n }\n tryCallPredicate(value) {\n try {\n const result = this.predicate(value, this.index++);\n this.skipping = Boolean(result);\n }\n catch (err) {\n this.destination.error(err);\n }\n }\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { EventEmitter, Input, Output, ViewChild, ElementRef, HostBinding, Component, Renderer2, Directive, TemplateRef, Injectable, ViewChildren, QueryList, ChangeDetectorRef, NgZone, InjectionToken, forwardRef, isDevMode, ContentChild, ViewContainerRef, Optional, Inject, KeyValueDiffers, ContentChildren, ChangeDetectionStrategy, NgModule, HostListener } from '@angular/core';\nimport { isDocumentAvailable, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';\nimport { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { getter, pointers, touchEnabled } from '@progress/kendo-common';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { merge, fromEvent, Subject, Subscription, of, interval } from 'rxjs';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@progress/kendo-angular-common';\nimport * as ɵngcc3 from '@angular/common';\nimport * as ɵngcc4 from '@progress/kendo-angular-popup';\nimport * as ɵngcc5 from '@angular/forms';\nimport * as ɵngcc6 from '@progress/kendo-angular-treeview';\n\nconst _c0 = [\"input\"];\nconst _c1 = function (a0, a1) { return { focus: a0, blur: a1 }; };\nconst _c2 = [\"content\"];\nconst _c3 = [\"list\"];\nconst _c4 = [\"virtualContainer\"];\nfunction ListComponent_div_0_1_ng_template_0_Template(rf, ctx) { }\nconst _c5 = function (a0, a1) { return { templateRef: a0, $implicit: a1 }; };\nfunction ListComponent_div_0_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_div_0_1_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r7.fixedGroupTemplate.templateRef, ctx_r7.currentGroup));\n} }\nfunction ListComponent_div_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"strong\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r8.currentGroup);\n} }\nconst _c6 = function (a0) { return { \"k-virtual-item\": a0 }; };\nconst _c7 = function (a0, a1, a2) { return { \"height.px\": a0, \"minHeight.px\": a1, \"boxSizing\": a2 }; };\nfunction ListComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 8);\n ɵngcc0.ɵɵtemplate(1, ListComponent_div_0_1_Template, 1, 4, null, 5);\n ɵngcc0.ɵɵtemplate(2, ListComponent_div_0_ng_template_2_Template, 2, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(4, _c6, ctx_r0.virtual))(\"ngStyle\", ɵngcc0.ɵɵpureFunction3(6, _c7, ctx_r0.virtual == null ? null : ctx_r0.virtual.itemHeight, ctx_r0.virtual == null ? null : ctx_r0.virtual.itemHeight, ctx_r0.virtual ? \"border-box\" : \"inherit\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.fixedGroupTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r0.fixedGroupTemplate);\n} }\nfunction ListComponent_5_ng_template_0_label_1_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"label\", 14)(1, \"input\", 15);\n ɵngcc0.ɵɵlistener(\"change\", function ListComponent_5_ng_template_0_label_1_Template_input_change_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const itemIndex_r12 = ɵngcc0.ɵɵnextContext().index; const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.onCheckedChange($event, itemIndex_r12); });\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const itemIndex_r12 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"checked\", ctx_r13.isChecked(itemIndex_r12));\n} }\nfunction ListComponent_5_ng_template_0_2_ng_template_0_Template(rf, ctx) { }\nfunction ListComponent_5_ng_template_0_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_5_ng_template_0_2_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const dataItem_r11 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r14.template.templateRef, dataItem_r11));\n} }\nfunction ListComponent_5_ng_template_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const dataItem_r11 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r15 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r15.getText(dataItem_r11));\n} }\nconst _c8 = function (a0, a1) { return { \"k-virtual-item\": a0, \"k-state-disabled\": a1 }; };\nfunction ListComponent_5_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 12);\n ɵngcc0.ɵɵtemplate(1, ListComponent_5_ng_template_0_label_1_Template, 2, 1, \"label\", 13);\n ɵngcc0.ɵɵtemplate(2, ListComponent_5_ng_template_0_2_Template, 1, 4, null, 5);\n ɵngcc0.ɵɵtemplate(3, ListComponent_5_ng_template_0_ng_template_3_Template, 1, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r11 = ctx.$implicit;\n const itemIndex_r12 = ctx.index;\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"checkboxes\", ctx_r10.checkboxes)(\"height\", ctx_r10.virtual == null ? null : ctx_r10.virtual.itemHeight)(\"index\", itemIndex_r12 + ctx_r10.startFrom)(\"multipleSelection\", ctx_r10.multipleSelection)(\"ngClass\", ɵngcc0.ɵɵpureFunction2(10, _c8, ctx_r10.virtual, ctx_r10.isDisabled(itemIndex_r12)));\n ɵngcc0.ɵɵattribute(\"id\", ctx_r10.optionPrefix + \"-\" + ctx_r10.getValue(dataItem_r11))(\"tabIndex\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r10.checkboxes.enabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r10.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r10.template);\n} }\nfunction ListComponent_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_5_ng_template_0_Template, 4, 13, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.data);\n} }\nfunction ListComponent_6_ng_template_0_li_0_1_ng_template_0_Template(rf, ctx) { }\nfunction ListComponent_6_ng_template_0_li_0_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_6_ng_template_0_li_0_1_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r28 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r28.groupTemplate.templateRef, dataItem_r24.value));\n} }\nfunction ListComponent_6_ng_template_0_li_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"strong\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r24.value, \"\");\n} }\nfunction ListComponent_6_ng_template_0_li_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 18);\n ɵngcc0.ɵɵtemplate(1, ListComponent_6_ng_template_0_li_0_1_Template, 1, 4, null, 5);\n ɵngcc0.ɵɵtemplate(2, ListComponent_6_ng_template_0_li_0_ng_template_2_Template, 2, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r26 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(7, _c6, ctx_r26.virtual))(\"ngStyle\", ɵngcc0.ɵɵpureFunction3(9, _c7, ctx_r26.virtual == null ? null : ctx_r26.virtual.itemHeight, ctx_r26.virtual == null ? null : ctx_r26.virtual.itemHeight, ctx_r26.virtual ? \"border-box\" : \"inherit\"));\n ɵngcc0.ɵɵattribute(\"group-index\", dataItem_r24.index)(\"id\", ctx_r26.optionPrefix + \"-\" + ctx_r26.getValue(dataItem_r24.value))(\"tabIndex\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r26.groupTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r26.groupTemplate);\n} }\nfunction ListComponent_6_ng_template_0_li_1_1_ng_template_0_Template(rf, ctx) { }\nfunction ListComponent_6_ng_template_0_li_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_6_ng_template_0_li_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r34 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r34.template.templateRef, dataItem_r24.value));\n} }\nfunction ListComponent_6_ng_template_0_li_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r35 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r35.getText(dataItem_r24.value));\n} }\nfunction ListComponent_6_ng_template_0_li_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 19);\n ɵngcc0.ɵɵtemplate(1, ListComponent_6_ng_template_0_li_1_1_Template, 1, 4, null, 5);\n ɵngcc0.ɵɵtemplate(2, ListComponent_6_ng_template_0_li_1_ng_template_2_Template, 1, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r24 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r27 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"height\", ctx_r27.virtual == null ? null : ctx_r27.virtual.itemHeight)(\"index\", dataItem_r24.offsetIndex)(\"multipleSelection\", ctx_r27.multipleSelection)(\"ngClass\", ɵngcc0.ɵɵpureFunction2(9, _c8, ctx_r27.virtual, ctx_r27.isDisabled(dataItem_r24.offsetIndex)));\n ɵngcc0.ɵɵattribute(\"absolute-index\", dataItem_r24.index)(\"id\", ctx_r27.optionPrefix + \"-\" + ctx_r27.getValue(dataItem_r24.value))(\"tabIndex\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r27.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r27.template);\n} }\nfunction ListComponent_6_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_6_ng_template_0_li_0_Template, 3, 13, \"li\", 16);\n ɵngcc0.ɵɵtemplate(1, ListComponent_6_ng_template_0_li_1_Template, 3, 12, \"li\", 17);\n} if (rf & 2) {\n const dataItem_r24 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r24.header && dataItem_r24.index > 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !dataItem_r24.header);\n} }\nfunction ListComponent_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_6_ng_template_0_Template, 2, 2, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r4.data);\n} }\nfunction ListComponent_kendo_resize_sensor_7_Template(rf, ctx) { if (rf & 1) {\n const _r41 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 20);\n ɵngcc0.ɵɵlistener(\"resize\", function ListComponent_kendo_resize_sensor_7_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r41); const ctx_r40 = ɵngcc0.ɵɵnextContext(); return ctx_r40.listResize.emit(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ListComponent_div_8_Template(rf, ctx) { if (rf & 1) {\n const _r44 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 21, 22)(2, \"div\")(3, \"kendo-resize-sensor\", 20);\n ɵngcc0.ɵɵlistener(\"resize\", function ListComponent_div_8_Template_kendo_resize_sensor_resize_3_listener() { ɵngcc0.ɵɵrestoreView(_r44); const ctx_r43 = ɵngcc0.ɵɵnextContext(); return ctx_r43.listResize.emit(); });\n ɵngcc0.ɵɵelementEnd()()();\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r6.scrollHeight, \"px\");\n} }\nconst _c9 = function (a0, a1) { return { \"k-virtual-content\": a0, \"k-list-scroller\": a1 }; };\nconst _c10 = function (a0) { return { \"k-virtual-list\": a0 }; };\nconst _c11 = [\"container\"];\nconst _c12 = [\"popupTemplate\"];\nconst _c13 = [\"optionsList\"];\nfunction AutoCompleteComponent_span_3_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 8);\n ɵngcc0.ɵɵlistener(\"click\", function AutoCompleteComponent_span_3_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.clearValue($event); })(\"mousedown\", function AutoCompleteComponent_span_3_Template_span_mousedown_0_listener($event) { return $event.preventDefault(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r1.clearButtonVisiblity);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r1.clearTitle);\n} }\nfunction AutoCompleteComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 9);\n} }\nfunction AutoCompleteComponent_ng_template_5_0_ng_template_0_Template(rf, ctx) { }\nconst _c18 = function (a0) { return { templateRef: a0 }; };\nfunction AutoCompleteComponent_ng_template_5_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, AutoCompleteComponent_ng_template_5_0_ng_template_0_Template, 0, 0, \"ng-template\", 14);\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r10.headerTemplate.templateRef));\n} }\nfunction AutoCompleteComponent_ng_template_5_div_3_ng_template_1_Template(rf, ctx) { }\nfunction AutoCompleteComponent_ng_template_5_div_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r16.noDataText);\n} }\nfunction AutoCompleteComponent_ng_template_5_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 15);\n ɵngcc0.ɵɵtemplate(1, AutoCompleteComponent_ng_template_5_div_3_ng_template_1_Template, 0, 0, \"ng-template\", 16);\n ɵngcc0.ɵɵtemplate(2, AutoCompleteComponent_ng_template_5_div_3_ng_template_2_Template, 2, 1, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r12.noDataTemplate == null ? null : ctx_r12.noDataTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r12.noDataTemplate);\n} }\nfunction AutoCompleteComponent_ng_template_5_4_ng_template_0_Template(rf, ctx) { }\nfunction AutoCompleteComponent_ng_template_5_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, AutoCompleteComponent_ng_template_5_4_ng_template_0_Template, 0, 0, \"ng-template\", 14);\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r13.footerTemplate.templateRef));\n} }\nfunction AutoCompleteComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n const _r19 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, AutoCompleteComponent_ng_template_5_0_Template, 1, 3, null, 10);\n ɵngcc0.ɵɵelementStart(1, \"kendo-list\", 11, 12);\n ɵngcc0.ɵɵlistener(\"pageChange\", function AutoCompleteComponent_ng_template_5_Template_kendo_list_pageChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r19); const ctx_r18 = ɵngcc0.ɵɵnextContext(); return ctx_r18.pageChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, AutoCompleteComponent_ng_template_5_div_3_Template, 3, 5, \"div\", 13);\n ɵngcc0.ɵɵtemplate(4, AutoCompleteComponent_ng_template_5_4_Template, 1, 3, null, 10);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r4.listBoxId)(\"optionPrefix\", ctx_r4.optionPrefix)(\"data\", ctx_r4.data)(\"textField\", ctx_r4.valueField)(\"valueField\", ctx_r4.valueField)(\"template\", ctx_r4.template)(\"groupTemplate\", ctx_r4.groupTemplate)(\"fixedGroupTemplate\", ctx_r4.fixedGroupTemplate)(\"height\", ctx_r4.listHeight)(\"show\", ctx_r4.isOpen)(\"virtual\", ctx_r4.virtual);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.data.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.footerTemplate);\n} }\nfunction AutoCompleteComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n const _r21 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 17);\n ɵngcc0.ɵɵlistener(\"resize\", function AutoCompleteComponent_ng_template_7_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c19 = [\"wrapper\"];\nconst _c20 = [\"select\"];\nconst _c25 = function (a0) { return { mousedown: a0 }; };\nfunction ComboBoxComponent_span_5_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"click\", function ComboBoxComponent_span_5_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.clearValue($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r2.clearButtonVisiblity);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(4, _c25, ctx_r2.preventEventDefault));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r2.clearTitle);\n} }\nfunction ComboBoxComponent_ng_template_9_0_ng_template_0_Template(rf, ctx) { }\nfunction ComboBoxComponent_ng_template_9_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ComboBoxComponent_ng_template_9_0_ng_template_0_Template, 0, 0, \"ng-template\", 17);\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r10.headerTemplate.templateRef));\n} }\nfunction ComboBoxComponent_ng_template_9_div_3_ng_template_1_Template(rf, ctx) { }\nfunction ComboBoxComponent_ng_template_9_div_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r16.noDataText);\n} }\nfunction ComboBoxComponent_ng_template_9_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 18);\n ɵngcc0.ɵɵtemplate(1, ComboBoxComponent_ng_template_9_div_3_ng_template_1_Template, 0, 0, \"ng-template\", 19);\n ɵngcc0.ɵɵtemplate(2, ComboBoxComponent_ng_template_9_div_3_ng_template_2_Template, 2, 1, \"ng-template\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r12.noDataTemplate ? ctx_r12.noDataTemplate.templateRef : undefined));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r12.noDataTemplate);\n} }\nfunction ComboBoxComponent_ng_template_9_4_ng_template_0_Template(rf, ctx) { }\nfunction ComboBoxComponent_ng_template_9_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ComboBoxComponent_ng_template_9_4_ng_template_0_Template, 0, 0, \"ng-template\", 17);\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r13.footerTemplate.templateRef));\n} }\nfunction ComboBoxComponent_ng_template_9_Template(rf, ctx) { if (rf & 1) {\n const _r19 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, ComboBoxComponent_ng_template_9_0_Template, 1, 3, null, 13);\n ɵngcc0.ɵɵelementStart(1, \"kendo-list\", 14, 15);\n ɵngcc0.ɵɵlistener(\"pageChange\", function ComboBoxComponent_ng_template_9_Template_kendo_list_pageChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r19); const ctx_r18 = ɵngcc0.ɵɵnextContext(); return ctx_r18.pageChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ComboBoxComponent_ng_template_9_div_3_Template, 3, 5, \"div\", 16);\n ɵngcc0.ɵɵtemplate(4, ComboBoxComponent_ng_template_9_4_Template, 1, 3, null, 13);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r5.listBoxId)(\"optionPrefix\", ctx_r5.optionPrefix)(\"data\", ctx_r5.data)(\"textField\", ctx_r5.textField)(\"valueField\", ctx_r5.valueField)(\"template\", ctx_r5.template)(\"groupTemplate\", ctx_r5.groupTemplate)(\"fixedGroupTemplate\", ctx_r5.fixedGroupTemplate)(\"height\", ctx_r5.listHeight)(\"show\", ctx_r5.isOpen)(\"virtual\", ctx_r5.virtual);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.data.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.footerTemplate);\n} }\nfunction ComboBoxComponent_ng_template_11_Template(rf, ctx) { if (rf & 1) {\n const _r21 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 20);\n ɵngcc0.ɵɵlistener(\"resize\", function ComboBoxComponent_ng_template_11_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c26 = function (a0) { return { \"k-state-disabled\": a0 }; };\nfunction DropDownListComponent_4_ng_template_0_Template(rf, ctx) { }\nfunction DropDownListComponent_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownListComponent_4_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r1.valueTemplate.templateRef, ctx_r1.dataItem));\n} }\nfunction DropDownListComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r2.getText());\n} }\nfunction DropDownListComponent_ng_template_8_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r17 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 14);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownListComponent_ng_template_8_ng_template_0_Template_span_click_0_listener($event) { return $event.stopImmediatePropagation(); });\n ɵngcc0.ɵɵelementStart(1, \"input\", 15);\n ɵngcc0.ɵɵlistener(\"ngModelChange\", function DropDownListComponent_ng_template_8_ng_template_0_Template_input_ngModelChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.filterText = $event; })(\"keydown\", function DropDownListComponent_ng_template_8_ng_template_0_Template_input_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r18 = ɵngcc0.ɵɵnextContext(2); return ctx_r18.keydown($event); })(\"input\", function DropDownListComponent_ng_template_8_ng_template_0_Template_input_input_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ctx_r19.handleFilter($event); })(\"focus\", function DropDownListComponent_ng_template_8_ng_template_0_Template_input_focus_1_listener() { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r20 = ɵngcc0.ɵɵnextContext(2); return ctx_r20.onFilterFocus(); })(\"blur\", function DropDownListComponent_ng_template_8_ng_template_0_Template_input_blur_1_listener() { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r21 = ɵngcc0.ɵɵnextContext(2); return ctx_r21.blurFilterInput(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"span\", 16);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterInput\", ctx_r8.isFocused && !ctx_r8.touchEnabled)(\"dir\", ctx_r8.direction)(\"ngModel\", ctx_r8.filterText);\n ɵngcc0.ɵɵattribute(\"aria-owns\", ctx_r8.ariaOwns)(\"aria-activedescendant\", ctx_r8.ariaActivedescendant)(\"aria-label\", ctx_r8.noDataLabel);\n} }\nfunction DropDownListComponent_ng_template_8_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 17);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c26, ctx_r9.isDisabledDefaultItem))(\"index\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r9.getDefaultItemText(), \" \");\n} }\nfunction DropDownListComponent_ng_template_8_ng_template_2_ng_template_1_Template(rf, ctx) { }\nfunction DropDownListComponent_ng_template_8_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 17);\n ɵngcc0.ɵɵtemplate(1, DropDownListComponent_ng_template_8_ng_template_2_ng_template_1_Template, 0, 0, \"ng-template\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c26, ctx_r10.isDisabledDefaultItem))(\"index\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(5, _c5, ctx_r10.itemTemplate.templateRef, ctx_r10.defaultItem));\n} }\nfunction DropDownListComponent_ng_template_8_3_ng_template_0_Template(rf, ctx) { }\nfunction DropDownListComponent_ng_template_8_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownListComponent_ng_template_8_3_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r11.headerTemplate.templateRef));\n} }\nfunction DropDownListComponent_ng_template_8_div_6_ng_template_1_Template(rf, ctx) { }\nfunction DropDownListComponent_ng_template_8_div_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r25 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r25.noDataText);\n} }\nfunction DropDownListComponent_ng_template_8_div_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 18);\n ɵngcc0.ɵɵtemplate(1, DropDownListComponent_ng_template_8_div_6_ng_template_1_Template, 0, 0, \"ng-template\", 19);\n ɵngcc0.ɵɵtemplate(2, DropDownListComponent_ng_template_8_div_6_ng_template_2_Template, 2, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r13.noDataTemplate ? ctx_r13.noDataTemplate.templateRef : undefined));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r13.noDataTemplate);\n} }\nfunction DropDownListComponent_ng_template_8_7_ng_template_0_Template(rf, ctx) { }\nfunction DropDownListComponent_ng_template_8_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownListComponent_ng_template_8_7_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r14.footerTemplate.templateRef));\n} }\nfunction DropDownListComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n const _r28 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, DropDownListComponent_ng_template_8_ng_template_0_Template, 3, 6, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(1, DropDownListComponent_ng_template_8_ng_template_1_Template, 2, 5, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(2, DropDownListComponent_ng_template_8_ng_template_2_Template, 2, 8, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(3, DropDownListComponent_ng_template_8_3_Template, 1, 3, null, 4);\n ɵngcc0.ɵɵelementStart(4, \"kendo-list\", 11, 12);\n ɵngcc0.ɵɵlistener(\"pageChange\", function DropDownListComponent_ng_template_8_Template_kendo_list_pageChange_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r28); const ctx_r27 = ɵngcc0.ɵɵnextContext(); return ctx_r27.pageChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, DropDownListComponent_ng_template_8_div_6_Template, 3, 5, \"div\", 13);\n ɵngcc0.ɵɵtemplate(7, DropDownListComponent_ng_template_8_7_Template, 1, 3, null, 4);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.filterable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.defaultItem && !ctx_r4.itemTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.defaultItem && ctx_r4.itemTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r4.listBoxId)(\"optionPrefix\", ctx_r4.optionPrefix)(\"data\", ctx_r4.data)(\"textField\", ctx_r4.textField)(\"valueField\", ctx_r4.valueField)(\"template\", ctx_r4.itemTemplate)(\"groupTemplate\", ctx_r4.groupTemplate)(\"fixedGroupTemplate\", ctx_r4.fixedGroupTemplate)(\"height\", ctx_r4.listHeight)(\"show\", ctx_r4.isOpen)(\"virtual\", ctx_r4.virtual);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.data.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.footerTemplate);\n} }\nfunction DropDownListComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {\n const _r30 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 20);\n ɵngcc0.ɵɵlistener(\"resize\", function DropDownListComponent_ng_template_10_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r30); const ctx_r29 = ɵngcc0.ɵɵnextContext(); return ctx_r29.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c29 = function (a1) { return { \"k-dropdown-wrap\": true, \"k-state-disabled\": a1 }; };\nfunction MultiSelectComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 11);\n ɵngcc0.ɵɵlistener(\"mousedown\", function MultiSelectComponent_span_6_Template_span_mousedown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.clearAll($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r2.clearButtonVisiblity);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r2.clearTitle);\n} }\nfunction MultiSelectComponent_span_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 12);\n} }\nfunction MultiSelectComponent_ng_template_8_0_ng_template_0_Template(rf, ctx) { }\nfunction MultiSelectComponent_ng_template_8_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiSelectComponent_ng_template_8_0_ng_template_0_Template, 0, 0, \"ng-template\", 18);\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r10.headerTemplate.templateRef));\n} }\nfunction MultiSelectComponent_ng_template_8_div_1_2_ng_template_0_Template(rf, ctx) { }\nfunction MultiSelectComponent_ng_template_8_div_1_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiSelectComponent_ng_template_8_div_1_2_ng_template_0_Template, 0, 0, \"ng-template\", 18);\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r16.customItemTemplate.templateRef, ctx_r16.text));\n} }\nfunction MultiSelectComponent_ng_template_8_div_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r18.text);\n} }\nfunction MultiSelectComponent_ng_template_8_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 19)(1, \"div\", 20);\n ɵngcc0.ɵɵtemplate(2, MultiSelectComponent_ng_template_8_div_1_2_Template, 1, 4, null, 21);\n ɵngcc0.ɵɵtemplate(3, MultiSelectComponent_ng_template_8_div_1_ng_template_3_Template, 1, 1, \"ng-template\", null, 22, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelement(5, \"span\", 23);\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const _r17 = ɵngcc0.ɵɵreference(4);\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"multipleSelection\", true)(\"index\", -1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r11.customItemTemplate)(\"ngIfElse\", _r17);\n} }\nfunction MultiSelectComponent_ng_template_8_div_4_ng_template_1_Template(rf, ctx) { }\nfunction MultiSelectComponent_ng_template_8_div_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r21 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r21.noDataText);\n} }\nfunction MultiSelectComponent_ng_template_8_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 24);\n ɵngcc0.ɵɵtemplate(1, MultiSelectComponent_ng_template_8_div_4_ng_template_1_Template, 0, 0, \"ng-template\", 25);\n ɵngcc0.ɵɵtemplate(2, MultiSelectComponent_ng_template_8_div_4_ng_template_2_Template, 2, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r13.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r13.noDataTemplate ? ctx_r13.noDataTemplate.templateRef : undefined));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r13.noDataTemplate);\n} }\nfunction MultiSelectComponent_ng_template_8_5_ng_template_0_Template(rf, ctx) { }\nfunction MultiSelectComponent_ng_template_8_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiSelectComponent_ng_template_8_5_ng_template_0_Template, 0, 0, \"ng-template\", 18);\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r14.footerTemplate.templateRef));\n} }\nfunction MultiSelectComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n const _r24 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, MultiSelectComponent_ng_template_8_0_Template, 1, 3, null, 13);\n ɵngcc0.ɵɵtemplate(1, MultiSelectComponent_ng_template_8_div_1_Template, 6, 4, \"div\", 14);\n ɵngcc0.ɵɵelementStart(2, \"kendo-list\", 15, 16);\n ɵngcc0.ɵɵlistener(\"pageChange\", function MultiSelectComponent_ng_template_8_Template_kendo_list_pageChange_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r23 = ɵngcc0.ɵɵnextContext(); return ctx_r23.pageChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, MultiSelectComponent_ng_template_8_div_4_Template, 3, 5, \"div\", 17);\n ɵngcc0.ɵɵtemplate(5, MultiSelectComponent_ng_template_8_5_Template, 1, 3, null, 13);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.allowCustom && ctx_r5.text);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r5.listBoxId)(\"optionPrefix\", ctx_r5.optionPrefix)(\"data\", ctx_r5.data)(\"textField\", ctx_r5.textField)(\"valueField\", ctx_r5.valueField)(\"height\", ctx_r5.listHeight)(\"template\", ctx_r5.template)(\"groupTemplate\", ctx_r5.groupTemplate)(\"fixedGroupTemplate\", ctx_r5.fixedGroupTemplate)(\"show\", ctx_r5.isOpen)(\"multipleSelection\", true)(\"virtual\", ctx_r5.virtual)(\"checkboxes\", ctx_r5.checkboxes);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.data.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.footerTemplate);\n} }\nfunction MultiSelectComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {\n const _r26 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 26);\n ɵngcc0.ɵɵlistener(\"resize\", function MultiSelectComponent_ng_template_10_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r26); const ctx_r25 = ɵngcc0.ɵɵnextContext(); return ctx_r25.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c34 = [\"header\"];\nfunction MultiColumnComboBoxComponent_span_5_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"click\", function MultiColumnComboBoxComponent_span_5_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.clearValue($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r2.clearButtonVisiblity);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(4, _c25, ctx_r2.preventEventDefault));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r2.clearTitle);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_0_ng_template_0_Template(rf, ctx) { }\nfunction MultiColumnComboBoxComponent_ng_template_9_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiColumnComboBoxComponent_ng_template_9_0_ng_template_0_Template, 0, 0, \"ng-template\", 23);\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r10.headerTemplate == null ? null : ctx_r10.headerTemplate.templateRef));\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_6_col_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n const column_r20 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵstyleProp(\"width\", column_r20.width, \"px\");\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_ng_container_6_col_1_Template, 1, 2, \"col\", 24);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const column_r20 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r20.hidden && column_r20.matchesMedia);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const column_r23 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", column_r23.title || column_r23.field, \" \");\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_2_ng_template_0_Template(rf, ctx) { }\nconst _c39 = function (a0, a1, a2) { return { templateRef: a0, $implicit: a1, column: a2 }; };\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_2_ng_template_0_Template, 0, 0, \"ng-template\", 23);\n} if (rf & 2) {\n const column_r23 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction3(1, _c39, column_r23.headerTemplate == null ? null : column_r23.headerTemplate.templateRef, column_r23, column_r23));\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 26);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_ng_container_1_Template, 2, 1, \"ng-container\", 13);\n ɵngcc0.ɵɵtemplate(2, MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_2_Template, 1, 5, null, 13);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r23 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵproperty(\"ngStyle\", column_r23.headerStyle)(\"ngClass\", column_r23.headerClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r23.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", column_r23.headerTemplate);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_ng_container_9_th_1_Template, 3, 4, \"th\", 25);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const column_r23 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r23.hidden && column_r23.matchesMedia);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const column_r33 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const dataItem_r31 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r35 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r35.textFrom(dataItem_r31, column_r33.field), \" \");\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_2_ng_template_0_Template(rf, ctx) { }\nconst _c40 = function (a0, a1, a2, a3) { return { templateRef: a0, $implicit: a1, dataItem: a2, column: a3 }; };\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_2_ng_template_0_Template, 0, 0, \"ng-template\", 23);\n} if (rf & 2) {\n const column_r33 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const dataItem_r31 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(1, _c40, column_r33.cellTemplate == null ? null : column_r33.cellTemplate.templateRef, dataItem_r31, dataItem_r31, column_r33));\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 28);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_ng_container_1_Template, 2, 1, \"ng-container\", 13);\n ɵngcc0.ɵɵtemplate(2, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_2_Template, 1, 6, null, 13);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r33 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵstyleProp(\"width\", column_r33.width, \"px\");\n ɵngcc0.ɵɵproperty(\"ngClass\", column_r33.class)(\"ngStyle\", column_r33.style);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r33.cellTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", column_r33.cellTemplate);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_span_1_Template, 3, 6, \"span\", 27);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const column_r33 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r33.hidden && column_r33.matchesMedia);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_template_10_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_ng_container_0_Template, 2, 1, \"ng-container\", 18);\n} if (rf & 2) {\n const ctx_r15 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r15.columns);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_div_14_ng_template_1_Template(rf, ctx) { }\nfunction MultiColumnComboBoxComponent_ng_template_9_div_14_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r44 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r44.noDataText);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_div_14_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 29);\n ɵngcc0.ɵɵtemplate(1, MultiColumnComboBoxComponent_ng_template_9_div_14_ng_template_1_Template, 0, 0, \"ng-template\", 30);\n ɵngcc0.ɵɵtemplate(2, MultiColumnComboBoxComponent_ng_template_9_div_14_ng_template_2_Template, 2, 1, \"ng-template\", 31);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r17 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r17.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r17.noDataTemplate == null ? null : ctx_r17.noDataTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r17.noDataTemplate);\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_15_ng_template_2_Template(rf, ctx) { }\nfunction MultiColumnComboBoxComponent_ng_template_9_ng_container_15_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 32);\n ɵngcc0.ɵɵtemplate(2, MultiColumnComboBoxComponent_ng_template_9_ng_container_15_ng_template_2_Template, 0, 0, \"ng-template\", 23);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r18.footerTemplate.templateRef));\n} }\nfunction MultiColumnComboBoxComponent_ng_template_9_Template(rf, ctx) { if (rf & 1) {\n const _r47 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, MultiColumnComboBoxComponent_ng_template_9_0_Template, 1, 3, null, 13);\n ɵngcc0.ɵɵelementStart(1, \"div\", 14, 15)(3, \"div\", 16)(4, \"table\", 17)(5, \"colgroup\");\n ɵngcc0.ɵɵtemplate(6, MultiColumnComboBoxComponent_ng_template_9_ng_container_6_Template, 2, 1, \"ng-container\", 18);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"tbody\")(8, \"tr\");\n ɵngcc0.ɵɵtemplate(9, MultiColumnComboBoxComponent_ng_template_9_ng_container_9_Template, 2, 1, \"ng-container\", 18);\n ɵngcc0.ɵɵelementEnd()()()()();\n ɵngcc0.ɵɵtemplate(10, MultiColumnComboBoxComponent_ng_template_9_ng_template_10_Template, 1, 1, \"ng-template\", null, 19, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementStart(12, \"kendo-list\", 20, 21);\n ɵngcc0.ɵɵlistener(\"pageChange\", function MultiColumnComboBoxComponent_ng_template_9_Template_kendo_list_pageChange_12_listener($event) { ɵngcc0.ɵɵrestoreView(_r47); const ctx_r46 = ɵngcc0.ɵɵnextContext(); return ctx_r46.pageChange($event); })(\"listResize\", function MultiColumnComboBoxComponent_ng_template_9_Template_kendo_list_listResize_12_listener() { ɵngcc0.ɵɵrestoreView(_r47); const _r11 = ɵngcc0.ɵɵreference(2); const ctx_r48 = ɵngcc0.ɵɵnextContext(); return ctx_r48.updateHeaderPadding(_r11); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(14, MultiColumnComboBoxComponent_ng_template_9_div_14_Template, 3, 5, \"div\", 22);\n ɵngcc0.ɵɵtemplate(15, MultiColumnComboBoxComponent_ng_template_9_ng_container_15_Template, 3, 3, \"ng-container\", 13);\n} if (rf & 2) {\n const _r14 = ɵngcc0.ɵɵreference(11);\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.headerTemplate);\n ɵngcc0.ɵɵadvance(6);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r5.columns);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r5.columns);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r5.listBoxId)(\"optionPrefix\", ctx_r5.optionPrefix)(\"data\", ctx_r5.data)(\"textField\", ctx_r5.textField)(\"valueField\", ctx_r5.valueField)(\"template\", ɵngcc0.ɵɵpureFunction1(17, _c18, _r14))(\"groupTemplate\", ctx_r5.groupTemplate)(\"fixedGroupTemplate\", ctx_r5.fixedGroupTemplate)(\"height\", ctx_r5.listHeight)(\"show\", ctx_r5.isOpen)(\"virtual\", ctx_r5.virtual)(\"listClass\", \"k-reset k-grid-list\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.data.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.footerTemplate);\n} }\nfunction MultiColumnComboBoxComponent_kendo_resize_sensor_11_Template(rf, ctx) { if (rf & 1) {\n const _r50 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-resize-sensor\", 33);\n ɵngcc0.ɵɵlistener(\"resize\", function MultiColumnComboBoxComponent_kendo_resize_sensor_11_Template_kendo_resize_sensor_resize_0_listener() { ɵngcc0.ɵɵrestoreView(_r50); const ctx_r49 = ɵngcc0.ɵɵnextContext(); return ctx_r49.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c41 = [\"treeview\"];\nconst _c42 = [\"filterInput\"];\nfunction DropDownTreeComponent_4_ng_template_0_Template(rf, ctx) { }\nfunction DropDownTreeComponent_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownTreeComponent_4_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r1.valueTemplate.templateRef, ctx_r1.dataItem));\n} }\nfunction DropDownTreeComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r2.text || ctx_r2.placeholder, \" \");\n} }\nfunction DropDownTreeComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownTreeComponent_span_6_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r9); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.clearValue($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r3.clearButtonVisiblity);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.messageFor(\"clearTitle\"));\n} }\nconst _c47 = function (a0) { return { blur: a0 }; };\nfunction DropDownTreeComponent_ng_template_9_span_0_Template(rf, ctx) { if (rf & 1) {\n const _r17 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 16)(1, \"input\", 17, 18);\n ɵngcc0.ɵɵlistener(\"input\", function DropDownTreeComponent_ng_template_9_span_0_Template_input_input_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.handleFilterInputChange($event.target.value); })(\"keydown.arrowdown\", function DropDownTreeComponent_ng_template_9_span_0_Template_input_keydown_arrowdown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r18 = ɵngcc0.ɵɵnextContext(2); return ctx_r18.handleKeydown($event); })(\"keydown.alt.arrowup\", function DropDownTreeComponent_ng_template_9_span_0_Template_input_keydown_alt_arrowup_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ctx_r19.handleKeydown($event); })(\"ngModelChange\", function DropDownTreeComponent_ng_template_9_span_0_Template_input_ngModelChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r20 = ɵngcc0.ɵɵnextContext(2); return ctx_r20.filter = $event; });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(3, \"span\", 19);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterInput\", ctx_r10.filterable && !ctx_r10.touchEnabled)(\"ngModel\", ctx_r10.filter)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(4, _c47, ctx_r10.handleBlur))(\"scope\", ctx_r10);\n} }\nfunction DropDownTreeComponent_ng_template_9_1_ng_template_0_Template(rf, ctx) { }\nfunction DropDownTreeComponent_ng_template_9_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownTreeComponent_ng_template_9_1_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r11.headerTemplate == null ? null : ctx_r11.headerTemplate.templateRef));\n} }\nfunction DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template(rf, ctx) { if (rf & 1) {\n const _r24 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-treeview\", 20, 21);\n ɵngcc0.ɵɵlistener(\"selectedKeysChange\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_selectedKeysChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r23 = ɵngcc0.ɵɵnextContext(2); return ctx_r23.selectedKeys = $event; })(\"focusout\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_focusout_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r25 = ɵngcc0.ɵɵnextContext(2); return ctx_r25.handleBlur($event); })(\"keydown\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r26 = ɵngcc0.ɵɵnextContext(2); return ctx_r26.handleKeydown($event); })(\"selectionChange\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_selectionChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r27 = ɵngcc0.ɵɵnextContext(2); return ctx_r27.onSelectionChange($event); })(\"expand\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_expand_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r28 = ɵngcc0.ɵɵnextContext(2); return ctx_r28.nodeExpand.emit($event); })(\"collapse\", function DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template_kendo_treeview_collapse_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r24); const ctx_r29 = ɵngcc0.ɵɵnextContext(2); return ctx_r29.nodeCollapse.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"max-height\", ctx_r12.listHeight, \"px\");\n ɵngcc0.ɵɵproperty(\"nodes\", ctx_r12.data)(\"animate\", false)(\"selectedKeys\", ctx_r12.selectedKeys)(\"selectBy\", ctx_r12.selectBy)(\"textField\", ctx_r12.textField)(\"children\", ctx_r12.children)(\"hasChildren\", ctx_r12.hasChildren)(\"loadOnDemand\", ctx_r12.loadOnDemand)(\"isExpanded\", ctx_r12.isNodeExpanded)(\"isDisabled\", ctx_r12.itemDisabled)(\"nodeTemplate\", ctx_r12.nodeTemplate)(\"filter\", ctx_r12.filter)(\"isVisible\", ctx_r12.isNodeVisible);\n} }\nfunction DropDownTreeComponent_ng_template_9_3_ng_template_0_Template(rf, ctx) { }\nfunction DropDownTreeComponent_ng_template_9_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownTreeComponent_ng_template_9_3_ng_template_0_Template, 0, 0, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r13.footerTemplate == null ? null : ctx_r13.footerTemplate.templateRef));\n} }\nfunction DropDownTreeComponent_ng_template_9_div_4_ng_template_1_Template(rf, ctx) { }\nfunction DropDownTreeComponent_ng_template_9_div_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r32 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r32.messageFor(\"noDataText\"));\n} }\nfunction DropDownTreeComponent_ng_template_9_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 22);\n ɵngcc0.ɵɵtemplate(1, DropDownTreeComponent_ng_template_9_div_4_ng_template_1_Template, 0, 0, \"ng-template\", 23);\n ɵngcc0.ɵɵtemplate(2, DropDownTreeComponent_ng_template_9_div_4_ng_template_2_Template, 2, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r14.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r14.noDataTemplate == null ? null : ctx_r14.noDataTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r14.noDataTemplate);\n} }\nfunction DropDownTreeComponent_ng_template_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DropDownTreeComponent_ng_template_9_span_0_Template, 4, 6, \"span\", 13);\n ɵngcc0.ɵɵtemplate(1, DropDownTreeComponent_ng_template_9_1_Template, 1, 3, null, 4);\n ɵngcc0.ɵɵtemplate(2, DropDownTreeComponent_ng_template_9_kendo_treeview_2_Template, 2, 15, \"kendo-treeview\", 14);\n ɵngcc0.ɵɵtemplate(3, DropDownTreeComponent_ng_template_9_3_Template, 1, 3, null, 4);\n ɵngcc0.ɵɵtemplate(4, DropDownTreeComponent_ng_template_9_div_4_Template, 3, 5, \"div\", 15);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.filterable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.data.length !== 0 && !ctx_r5.allNodesHidden);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.footerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.data.length === 0 || ctx_r5.allNodesHidden);\n} }\nconst _c48 = [\"checkAllInput\"];\nfunction MultiSelectTreeComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.placeholder, \" \");\n} }\nfunction MultiSelectTreeComponent_span_5_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function MultiSelectTreeComponent_span_5_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.clearAll($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵattribute(\"title\", ctx_r2.messageFor(\"clearTitle\"));\n} }\nfunction MultiSelectTreeComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 11);\n} }\nfunction MultiSelectTreeComponent_ng_template_7_span_0_Template(rf, ctx) { if (rf & 1) {\n const _r17 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 18)(1, \"input\", 19, 20);\n ɵngcc0.ɵɵlistener(\"input\", function MultiSelectTreeComponent_ng_template_7_span_0_Template_input_input_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.handleFilterInputChange($event.target.value); })(\"keydown\", function MultiSelectTreeComponent_ng_template_7_span_0_Template_input_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r18 = ɵngcc0.ɵɵnextContext(2); return ctx_r18.handleKeydown($event); })(\"ngModelChange\", function MultiSelectTreeComponent_ng_template_7_span_0_Template_input_ngModelChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r17); const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ctx_r19.filter = $event; });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(3, \"span\", 21);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterInput\", ctx_r9.filterable && !ctx_r9.touchEnabled)(\"ngModel\", ctx_r9.filter)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(4, _c47, ctx_r9.handleBlur))(\"scope\", ctx_r9);\n} }\nfunction MultiSelectTreeComponent_ng_template_7_1_ng_template_0_Template(rf, ctx) { }\nfunction MultiSelectTreeComponent_ng_template_7_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiSelectTreeComponent_ng_template_7_1_ng_template_0_Template, 0, 0, \"ng-template\", 22);\n} if (rf & 2) {\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r10.headerTemplate == null ? null : ctx_r10.headerTemplate.templateRef));\n} }\nfunction MultiSelectTreeComponent_ng_template_7_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r23 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 23)(1, \"input\", 24, 25);\n ɵngcc0.ɵɵlistener(\"checkedItemsChange\", function MultiSelectTreeComponent_ng_template_7_div_2_Template_input_checkedItemsChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r23); const ctx_r22 = ɵngcc0.ɵɵnextContext(2); return ctx_r22.handleCheckedItemsChange($event); })(\"keydown\", function MultiSelectTreeComponent_ng_template_7_div_2_Template_input_keydown_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r23); const ctx_r24 = ɵngcc0.ɵɵnextContext(2); return ctx_r24.handleKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 26);\n ɵngcc0.ɵɵlistener(\"click\", function MultiSelectTreeComponent_ng_template_7_div_2_Template_span_click_3_listener() { ɵngcc0.ɵɵrestoreView(_r23); const ctx_r25 = ɵngcc0.ɵɵnextContext(2); return ctx_r25.toggleCheckAll(); })(\"mousedown\", function MultiSelectTreeComponent_ng_template_7_div_2_Template_span_mousedown_3_listener($event) { return $event.preventDefault(); });\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n ɵngcc0.ɵɵnextContext();\n const _r12 = ɵngcc0.ɵɵreference(4);\n const ctx_r11 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"checkAll\", !ctx_r11.filterable && !ctx_r11.touchEnabled)(\"treeview\", _r12)(\"checkedItems\", ctx_r11.checkedItems)(\"valueField\", ctx_r11.valueField)(\"lastAction\", ctx_r11.lastAction)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(8, _c47, ctx_r11.handleBlur))(\"scope\", ctx_r11);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r11.messageFor(\"checkAllText\"), \" \");\n} }\nfunction MultiSelectTreeComponent_ng_template_7_5_ng_template_0_Template(rf, ctx) { }\nfunction MultiSelectTreeComponent_ng_template_7_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, MultiSelectTreeComponent_ng_template_7_5_ng_template_0_Template, 0, 0, \"ng-template\", 22);\n} if (rf & 2) {\n const ctx_r13 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction1(1, _c18, ctx_r13.footerTemplate == null ? null : ctx_r13.footerTemplate.templateRef));\n} }\nfunction MultiSelectTreeComponent_ng_template_7_div_6_ng_template_1_Template(rf, ctx) { }\nfunction MultiSelectTreeComponent_ng_template_7_div_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r29 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r29.messageFor(\"noDataText\"));\n} }\nfunction MultiSelectTreeComponent_ng_template_7_div_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 27);\n ɵngcc0.ɵɵtemplate(1, MultiSelectTreeComponent_ng_template_7_div_6_ng_template_1_Template, 0, 0, \"ng-template\", 28);\n ɵngcc0.ɵɵtemplate(2, MultiSelectTreeComponent_ng_template_7_div_6_ng_template_2_Template, 2, 1, \"ng-template\", 29);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r14.noDataTemplate)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(3, _c18, ctx_r14.noDataTemplate == null ? null : ctx_r14.noDataTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r14.noDataTemplate);\n} }\nconst _c55 = function (a0) { return { focusout: a0 }; };\nfunction MultiSelectTreeComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n const _r31 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, MultiSelectTreeComponent_ng_template_7_span_0_Template, 4, 6, \"span\", 12);\n ɵngcc0.ɵɵtemplate(1, MultiSelectTreeComponent_ng_template_7_1_Template, 1, 3, null, 13);\n ɵngcc0.ɵɵtemplate(2, MultiSelectTreeComponent_ng_template_7_div_2_Template, 5, 10, \"div\", 14);\n ɵngcc0.ɵɵelementStart(3, \"kendo-treeview\", 15, 16);\n ɵngcc0.ɵɵlistener(\"keydown\", function MultiSelectTreeComponent_ng_template_7_Template_kendo_treeview_keydown_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r30 = ɵngcc0.ɵɵnextContext(); return ctx_r30.handleKeydown($event); })(\"nodeClick\", function MultiSelectTreeComponent_ng_template_7_Template_kendo_treeview_nodeClick_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r32 = ɵngcc0.ɵɵnextContext(); return ctx_r32.handleNodeClick($event); })(\"expand\", function MultiSelectTreeComponent_ng_template_7_Template_kendo_treeview_expand_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r33 = ɵngcc0.ɵɵnextContext(); return ctx_r33.nodeExpand.emit($event); })(\"collapse\", function MultiSelectTreeComponent_ng_template_7_Template_kendo_treeview_collapse_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r34 = ɵngcc0.ɵɵnextContext(); return ctx_r34.nodeCollapse.emit($event); })(\"checkedItemsChange\", function MultiSelectTreeComponent_ng_template_7_Template_kendo_treeview_checkedItemsChange_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r35 = ɵngcc0.ɵɵnextContext(); return ctx_r35.handleCheckedItemsChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, MultiSelectTreeComponent_ng_template_7_5_Template, 1, 3, null, 13);\n ɵngcc0.ɵɵtemplate(6, MultiSelectTreeComponent_ng_template_7_div_6_Template, 3, 5, \"div\", 17);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.filterable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.checkAll);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"max-height\", ctx_r5.listHeight, \"px\");\n ɵngcc0.ɵɵproperty(\"nodes\", ctx_r5.data)(\"animate\", false)(\"checkable\", ctx_r5.checkableSettings)(\"checkedItems\", ctx_r5.checkedItems)(\"valueField\", ctx_r5.valueField)(\"textField\", ctx_r5.textField)(\"children\", ctx_r5.children)(\"hasChildren\", ctx_r5.hasChildren)(\"isExpanded\", ctx_r5.isNodeExpanded)(\"isDisabled\", ctx_r5.itemDisabled)(\"nodeTemplate\", ctx_r5.nodeTemplate)(\"loadOnDemand\", ctx_r5.loadOnDemand)(\"filter\", ctx_r5.filter)(\"isVisible\", ctx_r5.isNodeVisible)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(23, _c55, ctx_r5.handleBlur))(\"scope\", ctx_r5);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.footerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (ctx_r5.data == null ? null : ctx_r5.data.length) === 0 || ctx_r5.allNodesHidden);\n} }\nconst _c56 = function (a2) { return { \"k-multiselect-wrap\": true, \"k-floatwrap\": true, \"k-state-disabled\": a2 }; };\nfunction TagListComponent_li_1_1_ng_template_0_Template(rf, ctx) { }\nfunction TagListComponent_li_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TagListComponent_li_1_1_ng_template_0_Template, 0, 0, \"ng-template\");\n} }\nfunction TagListComponent_li_1_ng_template_2_1_ng_template_0_Template(rf, ctx) { }\nfunction TagListComponent_li_1_ng_template_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TagListComponent_li_1_ng_template_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const tag_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r9 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r9.groupTemplate.templateRef, tag_r1));\n} }\nfunction TagListComponent_li_1_ng_template_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const tag_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵtextInterpolate2(\"\", tag_r1.length, \" \", tag_r1.length === 1 ? \"item\" : \"items\", \" selected\");\n} }\nfunction TagListComponent_li_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtemplate(1, TagListComponent_li_1_ng_template_2_1_Template, 1, 4, null, 8);\n ɵngcc0.ɵɵtemplate(2, TagListComponent_li_1_ng_template_2_ng_template_2_Template, 1, 2, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r5.groupTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r5.groupTemplate);\n} }\nfunction TagListComponent_li_1_ng_template_4_1_ng_template_0_Template(rf, ctx) { }\nfunction TagListComponent_li_1_ng_template_4_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TagListComponent_li_1_ng_template_4_1_ng_template_0_Template, 0, 0, \"ng-template\", 10);\n} if (rf & 2) {\n const tag_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r14 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c5, ctx_r14.template.templateRef, tag_r1));\n} }\nfunction TagListComponent_li_1_ng_template_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext(2);\n const tag_r1 = ctx_r18.$implicit;\n const index_r2 = ctx_r18.index;\n const ctx_r15 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r15.tagProp(tag_r1, ctx_r15.textField, index_r2));\n} }\nfunction TagListComponent_li_1_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtemplate(1, TagListComponent_li_1_ng_template_4_1_Template, 1, 4, null, 8);\n ɵngcc0.ɵɵtemplate(2, TagListComponent_li_1_ng_template_4_ng_template_2_Template, 1, 1, \"ng-template\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r7 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r7.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r7.template);\n} }\nconst _c57 = function (a0, a1) { return { \"k-state-focused\": a0, \"k-state-disabled\": a1 }; };\nfunction TagListComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r20 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\", 2);\n ɵngcc0.ɵɵtemplate(1, TagListComponent_li_1_1_Template, 1, 0, null, 3);\n ɵngcc0.ɵɵtemplate(2, TagListComponent_li_1_ng_template_2_Template, 3, 2, \"ng-template\", null, 4, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(4, TagListComponent_li_1_ng_template_4_Template, 3, 2, \"ng-template\", null, 5, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementStart(6, \"span\", 6)(7, \"span\", 7);\n ɵngcc0.ɵɵlistener(\"mousedown\", function TagListComponent_li_1_Template_span_mousedown_7_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r20); const tag_r1 = restoredCtx.$implicit; const index_r2 = restoredCtx.index; const ctx_r19 = ɵngcc0.ɵɵnextContext(); return ctx_r19.deleteTag($event, tag_r1, index_r2); });\n ɵngcc0.ɵɵelementEnd()()();\n} if (rf & 2) {\n const tag_r1 = ctx.$implicit;\n const index_r2 = ctx.index;\n const _r4 = ɵngcc0.ɵɵreference(3);\n const _r6 = ɵngcc0.ɵɵreference(5);\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(8, _c57, index_r2 === ctx_r0.focused, ctx_r0.isTagDisabled(tag_r1, index_r2)));\n ɵngcc0.ɵɵattribute(\"id\", ctx_r0.itemId(tag_r1, index_r2))(\"aria-hidden\", ctx_r0.tagAriaHidden(index_r2))(\"aria-setsize\", ctx_r0.tags == null ? null : ctx_r0.tags.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.isGroupTag(tag_r1))(\"ngIfThen\", _r4)(\"ngIfElse\", _r6);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", index_r2 !== ctx_r0.focused);\n} }\nexport { PopupComponent } from '@progress/kendo-angular-popup';\nimport { map, switchMap, take, auditTime, tap, filter, partition, throttleTime, catchError, skipWhile, concatMap, takeUntil } from 'rxjs/operators';\nimport { TreeViewComponent, DataBoundComponent, ExpandableComponent, FlatDataBindingDirective, HierarchyBindingDirective, ExpandDirective, TreeViewModule } from '@progress/kendo-angular-treeview';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-dropdowns',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1639043976,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/* tslint:disable:no-bitwise */\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isNumber = (value) => !isNaN(value);\n/**\n * @hidden\n */\nconst guid$1 = () => {\n let id = \"\";\n let i;\n let random;\n for (i = 0; i < 32; i++) {\n random = Math.random() * 16 | 0;\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16);\n }\n return id;\n};\n/**\n * @hidden\n */\nconst combineStr = (begin, end) => {\n return begin.concat(end.substr(end.toLowerCase().indexOf(begin.toLowerCase()) + begin.length));\n};\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isObject = (value) => isPresent(value) && typeof value === 'object';\n/**\n * @hidden\n */\nconst isEmptyString = (value) => typeof value === 'string' && value.length === 0;\n/**\n * @hidden\n */\nconst resolveValuesInArray = (values, data = [], valueField) => values\n .map(value => {\n return data.find(item => getter$1(item, valueField) === value);\n})\n .filter(value => value !== undefined);\n/**\n * @hidden\n */\nconst validateComplexValues = (values, valueField) => isArray(values) && values.filter(item => {\n return isObject(item) && isPresent(getter$1(item, valueField));\n});\n/**\n * @hidden\n */\nconst resolveAllValues = (value, data, valueField) => {\n const customValues = validateComplexValues(value, valueField) || [];\n const resolvedValues = resolveValuesInArray(value, data, valueField) || [];\n return resolvedValues.concat(customValues);\n};\n/**\n * @hidden\n */\nconst isObjectArray = (values) => {\n return isArray(values) && values.every(item => isObject(item));\n};\n/**\n * @hidden\n */\nconst selectedIndices = (values, data, valueField) => {\n const extractedValues = data.map(item => {\n return isPresent(item) && isPresent(getter$1(item, valueField)) ? getter$1(item, valueField) : item;\n });\n return values.reduce((arr, item) => {\n const value = isPresent(item) && isPresent(getter$1(item, valueField)) ? getter$1(item, valueField) : item;\n const index = extractedValues.indexOf(value);\n if (index !== -1) {\n arr.push(index);\n }\n return arr;\n }, []);\n};\n/**\n * @hidden\n */\nconst getter$1 = (dataItem, field) => {\n if (!isPresent(dataItem)) {\n return null;\n }\n if (!isPresent(field) || !isObject(dataItem)) {\n return dataItem;\n }\n // creates a field accessor supporting nested fields processing\n const valueFrom = getter(field);\n return valueFrom(dataItem);\n};\n/**\n * @hidden\n */\nconst sameCharsOnly = (word, character) => {\n for (let idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n};\n/**\n * @hidden\n */\nconst shuffleData = (data, splitIndex, defaultItem) => {\n let result = data;\n if (defaultItem) {\n result = [defaultItem].concat(result);\n }\n return result.slice(splitIndex).concat(result.slice(0, splitIndex));\n};\n/**\n * @hidden\n */\nconst matchText = (text, word, ignoreCase) => {\n if (!isPresent(text)) {\n return false;\n }\n let temp = String(text);\n if (ignoreCase) {\n temp = temp.toLowerCase();\n }\n return temp.indexOf(word) === 0;\n};\n/**\n * @hidden\n *\n * Checks whether the passed object has all of the listed properties.\n */\nconst hasProps = (obj, props) => {\n if (!isPresent(obj)) {\n return false;\n }\n return props.every(prop => obj.hasOwnProperty(prop));\n};\n/**\n * @hidden\n *\n * Checks whether an element is untouched by looking for the ng-untouched css class\n */\nconst isUntouched = (element) => element.className.includes('ng-untouched');\n/**\n * @hidden\n */\nconst noop = (_) => { };\n/**\n * IE element `matches` polyfill.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\n */\nconst matches = (element, selector) => {\n const matcher = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (!matcher) {\n return false;\n }\n return matcher.call(element, selector);\n};\n/**\n * @hidden\n *\n * IE element `closest` polyfill.\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\n */\nconst closest = (element, selector) => {\n let parent = element;\n while (parent !== null && parent.nodeType === 1) {\n if (matches(parent, selector)) {\n return parent;\n }\n parent = parent.parentElement || parent.parentNode;\n }\n return null;\n};\n/**\n * @hidden\n *\n * Parses a provided value to its type 'number' representation.\n * If the parsed value (via Number(value)) is NaN, the provided default value is returned.\n * Uses 0 as default value if a second param is not provided.\n */\nconst parseNumber = (num, defaultValue = 0) => {\n const normalizedValue = Number(num);\n return isNaN(normalizedValue) ? defaultValue : normalizedValue;\n};\n/**\n * @hidden\n *\n * Checks whether the passed target element is inside the provided host or popupRef.\n */\nconst inDropDown = (host, target, popupRef) => {\n return host.nativeElement.contains(target) || (popupRef && popupRef.popupElement.contains(target));\n};\n/**\n * @hidden\n *\n * Calculates the hierarchical level of an item, based on the provided index.\n * The result level is zero-based (starts from 0).\n */\nconst getHierarchicalItemLevel = (index) => {\n return (index || '').split('_').length - 1;\n};\n/**\n * @hidden\n *\n * Retrieves all descendant nodes' lookups which are currently registered in the provided lookup item as a flat array.\n */\nconst fetchDescendentNodes = (lookup, filterExpression) => {\n if (!isPresent(lookup) || lookup.children.length === 0) {\n return [];\n }\n let descendants = lookup.children;\n if (isPresent(filterExpression)) {\n descendants = descendants.filter(descendent => filterExpression(descendent.item));\n }\n descendants.forEach(child => descendants = descendants.concat(fetchDescendentNodes(child, filterExpression)));\n return descendants;\n};\n/**\n * @hidden\n *\n * Retrieves the correct value based on the item's level and the provided value field/s.\n * Used in the MultiSelectTree component.\n */\nconst valueFrom = ({ dataItem, index, level }, valueField) => {\n const fields = Array.isArray(valueField) ? valueField : [valueField];\n // either use the explicitly provided value level, or infer it from the item index\n const valueLevel = isPresent(level) ? level : getHierarchicalItemLevel(index);\n // fall-back to the last available one, if the current node is in a deeper level\n const normalizedLevel = Math.min(valueLevel, fields.length - 1);\n const field = fields[normalizedLevel];\n return getter(field)(dataItem);\n};\n\n/* tslint:disable:member-ordering */\n/**\n * @hidden\n */\nlet SearchBarComponent = class SearchBarComponent {\n constructor(localization, renderer) {\n this.localization = localization;\n this.valueChange = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.onFocus = new EventEmitter();\n this.onClick = new EventEmitter();\n this.onNavigate = new EventEmitter();\n this.searchBarClass = true;\n this._userInput = \"\";\n this._previousValue = \"\";\n this._placeholder = \"\";\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer = renderer;\n }\n get userInput() {\n return this._userInput;\n }\n set userInput(userInput) {\n this._userInput = userInput || \"\";\n }\n get value() {\n return this.input.nativeElement.value;\n }\n set placeholder(text) {\n this._placeholder = text || '';\n this.setInputSize();\n }\n get placeholder() {\n return this._placeholder;\n }\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnChanges(changes) {\n let previousUserInput;\n if (this.input && (changes.userInput || changes.suggestedText)) {\n if (changes.userInput && changes.userInput.previousValue) {\n if (this._previousValue === changes.userInput.previousValue) {\n previousUserInput = this._previousValue;\n }\n else {\n previousUserInput = changes.userInput.currentValue || \"\";\n }\n }\n else {\n previousUserInput = this._previousValue;\n }\n const caretIndex = this.input.nativeElement.selectionStart;\n const caretAtEnd = previousUserInput.length === caretIndex;\n this.writeInputValue(this.suggestedText ? combineStr(this.userInput, this.suggestedText) : this.userInput);\n if (this.suggestedText) {\n this.setInputSelection(this.userInput.length, this.suggestedText.length);\n }\n else if (caretAtEnd) {\n this.setInputSelection(this.userInput.length, this.userInput.length);\n }\n else {\n this.setInputSelection(caretIndex, caretIndex);\n }\n this._previousValue = this.userInput;\n }\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n writeInputValue(text) {\n if (isDocumentAvailable()) {\n this.renderer.setProperty(this.input.nativeElement, 'value', text);\n }\n }\n setInputSelection(start, end) {\n if (isDocumentAvailable() && this.input.nativeElement === document.activeElement) {\n try {\n this.input.nativeElement.setSelectionRange(start, end);\n }\n catch (e) {\n //Make sure that the element is in the DOM before you invoke its methods\n }\n }\n }\n handleInput(event) {\n const value = event.target.value;\n if (value !== this.userInput) {\n this._previousValue = value;\n this.valueChange.emit(value);\n }\n }\n handleFocus(event) {\n this.onFocus.emit(event);\n }\n handleBlur(event) {\n this.onBlur.emit(event);\n }\n handleKeydown(event) {\n const keyCode = event.keyCode;\n const keys = [Keys.ArrowUp, Keys.ArrowDown, Keys.ArrowLeft, Keys.ArrowRight, Keys.Enter,\n Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End];\n if (keys.indexOf(keyCode) > -1) {\n this.onNavigate.emit(event);\n }\n }\n focus() {\n if (isDocumentAvailable()) {\n this.input.nativeElement.focus();\n }\n }\n blur() {\n if (isDocumentAvailable()) {\n this.input.nativeElement.blur();\n }\n }\n setInputSize() {\n const lengthOf = x => x ? x.length : 0;\n const input = this.input.nativeElement;\n const placeholderLength = lengthOf(this.placeholder);\n const textLength = lengthOf(this.value);\n const size = Math.max(placeholderLength, textLength, 1);\n this.renderer.setAttribute(input, 'size', size.toString());\n }\n};\nSearchBarComponent.ɵfac = function SearchBarComponent_Factory(t) { return new (t || SearchBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nSearchBarComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SearchBarComponent, selectors: [[\"kendo-searchbar\"]], viewQuery: function SearchBarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 2, hostBindings: function SearchBarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-searchbar\", ctx.searchBarClass);\n } }, inputs: { userInput: \"userInput\", placeholder: \"placeholder\", id: \"id\", listId: \"listId\", tagListId: \"tagListId\", activeDescendant: \"activeDescendant\", noDataLabel: \"noDataLabel\", disabled: \"disabled\", readonly: \"readonly\", tabIndex: \"tabIndex\", popupOpen: \"popupOpen\", role: \"role\", suggestedText: \"suggestedText\" }, outputs: { valueChange: \"valueChange\", onBlur: \"onBlur\", onFocus: \"onFocus\", onClick: \"onClick\", onNavigate: \"onNavigate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 2, vars: 21, consts: [[\"autocomplete\", \"off\", \"aria-haspopup\", \"listbox\", 3, \"id\", \"disabled\", \"readonly\", \"placeholder\", \"kendoEventsOutsideAngular\", \"scope\", \"input\", \"keydown\"], [\"input\", \"\"]], template: function SearchBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"input\", 0, 1);\n ɵngcc0.ɵɵlistener(\"input\", function SearchBarComponent_Template_input_input_0_listener($event) { return ctx.handleInput($event); })(\"keydown\", function SearchBarComponent_Template_input_keydown_0_listener($event) { return ctx.handleKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassMap(\"k-input\");\n ɵngcc0.ɵɵproperty(\"id\", ctx.id)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"placeholder\", ctx.placeholder)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(18, _c1, ctx.handleFocus, ctx.handleBlur))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"dir\", ctx.direction)(\"role\", ctx.role)(\"aria-disabled\", ctx.disabled)(\"aria-readonly\", ctx.readonly)(\"aria-expanded\", ctx.popupOpen)(\"aria-owns\", ctx.listId)(\"aria-describedby\", ctx.tagListId)(\"aria-activedescendant\", ctx.activeDescendant)(\"aria-label\", ctx.noDataLabel);\n } }, directives: [ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"listId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"tagListId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"activeDescendant\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"noDataLabel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SearchBarComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SearchBarComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SearchBarComponent.prototype, \"tabIndex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SearchBarComponent.prototype, \"popupOpen\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"role\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], SearchBarComponent.prototype, \"userInput\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SearchBarComponent.prototype, \"suggestedText\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SearchBarComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SearchBarComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SearchBarComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SearchBarComponent.prototype, \"onClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SearchBarComponent.prototype, \"onNavigate\", void 0);\n__decorate([\n ViewChild('input', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SearchBarComponent.prototype, \"input\", void 0);\n__decorate([\n HostBinding('class.k-searchbar'),\n __metadata(\"design:type\", Boolean)\n], SearchBarComponent.prototype, \"searchBarClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], SearchBarComponent.prototype, \"placeholder\", null);\nSearchBarComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n Renderer2])\n], SearchBarComponent);\n\n/**\n * Renders the list item content. To define the item template, nest an `` tag\n * with the `kendoItemTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * - [Using `ItemTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-item-template)\n * - [Using `ItemTemplate` with the ComboBox]({% slug templates_combobox %}#toc-item-template)\n * - [Using `ItemTemplate` with the DropDownList]({% slug templates_ddl %}#toc-item-template)\n * - [Using `ItemTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-item-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet ItemTemplateDirective = class ItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nItemTemplateDirective.ɵfac = function ItemTemplateDirective_Factory(t) { return new (t || ItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nItemTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ItemTemplateDirective, selectors: [[\"\", \"kendoDropDownListItemTemplate\", \"\"], [\"\", \"kendoComboBoxItemTemplate\", \"\"], [\"\", \"kendoAutoCompleteItemTemplate\", \"\"], [\"\", \"kendoMultiSelectItemTemplate\", \"\"]] });\nItemTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], ItemTemplateDirective);\n\n/**\n * Renders the header content of the list. To define the header template, nest an `` tag\n * with the `kendoHeaderTemplate` directive inside the component tag.\n *\n * - [Using `HeaderTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-header-template)\n * - [Using `HeaderTemplate` with the ComboBox]({% slug templates_combobox %}#toc-header-template)\n * - [Using `HeaderTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-header-template)\n * - [Using `HeaderTemplate` with the DropDownList]({% slug templates_ddl %}#toc-header-template)\n * - [Using `HeaderTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-header-template)\n * - [Using `HeaderTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-header-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

Header template

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet HeaderTemplateDirective = class HeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nHeaderTemplateDirective.ɵfac = function HeaderTemplateDirective_Factory(t) { return new (t || HeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nHeaderTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: HeaderTemplateDirective, selectors: [[\"\", \"kendoDropDownListHeaderTemplate\", \"\"], [\"\", \"kendoComboBoxHeaderTemplate\", \"\"], [\"\", \"kendoDropDownTreeHeaderTemplate\", \"\"], [\"\", \"kendoMultiColumnComboBoxHeaderTemplate\", \"\"], [\"\", \"kendoAutoCompleteHeaderTemplate\", \"\"], [\"\", \"kendoMultiSelectHeaderTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeHeaderTemplate\", \"\"]] });\nHeaderTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], HeaderTemplateDirective);\n\n/**\n * Renders the footer content of the list. To define the footer template, nest an `` tag\n * with the `kendoFooterTemplate` directive inside the component tag.\n *\n * - [Using `FooterTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-footer-template)\n * - [Using `FooterTemplate` with the ComboBox]({% slug templates_combobox %}#toc-footer-template)\n * - [Using `FooterTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-footer-template)\n * - [Using `FooterTemplate` with the DropDownList]({% slug templates_ddl %}#toc-footer-template)\n * - [Using `FooterTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-footer-template)\n * - [Using `FooterTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-footer-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

Footer template

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet FooterTemplateDirective = class FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nFooterTemplateDirective.ɵfac = function FooterTemplateDirective_Factory(t) { return new (t || FooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nFooterTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FooterTemplateDirective, selectors: [[\"\", \"kendoDropDownListFooterTemplate\", \"\"], [\"\", \"kendoComboBoxFooterTemplate\", \"\"], [\"\", \"kendoDropDownTreeFooterTemplate\", \"\"], [\"\", \"kendoMultiColumnComboBoxFooterTemplate\", \"\"], [\"\", \"kendoAutoCompleteFooterTemplate\", \"\"], [\"\", \"kendoMultiSelectFooterTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeFooterTemplate\", \"\"]] });\nFooterTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], FooterTemplateDirective);\n\n/**\n * Renders the group header content. To define the group template, nest an `` tag\n * with the `kendoGroupTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-groupName` directive.\n *\n * - [Using `GroupTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-group-template)\n * - [Using `GroupTemplate` with the ComboBox]({% slug templates_combobox %}#toc-group-template)\n * - [Using `GroupTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-group-template)\n * - [Using `GroupTemplate` with the DropDownList]({% slug templates_ddl %}#toc-group-template)\n * - [Using `GroupTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-group-template)\n *\n * @example\n * ```ts\n * import { groupBy } from '@progress/kendo-data-query';\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Food type: {{groupName}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n * public groupedData = groupBy(this.data, [{field: \"subcategory\"}]);\n * }\n * ```\n */\nlet GroupTemplateDirective = class GroupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nGroupTemplateDirective.ɵfac = function GroupTemplateDirective_Factory(t) { return new (t || GroupTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nGroupTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: GroupTemplateDirective, selectors: [[\"\", \"kendoDropDownListGroupTemplate\", \"\"], [\"\", \"kendoComboBoxGroupTemplate\", \"\"], [\"\", \"kendoMultiColumnComboBoxGroupTemplate\", \"\"], [\"\", \"kendoAutoCompleteGroupTemplate\", \"\"], [\"\", \"kendoMultiSelectGroupTemplate\", \"\"]] });\nGroupTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], GroupTemplateDirective);\n\n/**\n * Renders the fixed group header content. To define the fixed group template, nest an `` tag\n * with the `kendoFixedGroupTemplate` directive inside the component tag. The template context is\n * set to the current component. To get a reference to the current data item, use the `let-groupName` directive.\n *\n * - [Using `FixedGroupTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the ComboBox]({% slug templates_combobox %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the DropDownList]({% slug templates_ddl %}#toc-fixed-group-template)\n * - [Using `FixedGroupTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-fixed-group-template)\n *\n * @example\n * ```ts\n * import { groupBy } from '@progress/kendo-data-query';\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Food type: {{groupName}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public data = [\n * { name: \"Pork\", category: \"Food\", subcategory: \"Meat\" },\n * { name: \"Pepper\", category: \"Food\", subcategory: \"Vegetables\" },\n * { name: \"Beef\", category: \"Food\", subcategory: \"Meat\" }\n * ];\n * public groupedData = groupBy(this.data, [{field: \"subcategory\"}]);\n * }\n * ```\n */\nlet FixedGroupTemplateDirective = class FixedGroupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nFixedGroupTemplateDirective.ɵfac = function FixedGroupTemplateDirective_Factory(t) { return new (t || FixedGroupTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nFixedGroupTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FixedGroupTemplateDirective, selectors: [[\"\", \"kendoDropDownListFixedGroupTemplate\", \"\"], [\"\", \"kendoComboBoxFixedGroupTemplate\", \"\"], [\"\", \"kendoMultiColumnComboBoxFixedGroupTemplate\", \"\"], [\"\", \"kendoAutoCompleteFixedGroupTemplate\", \"\"], [\"\", \"kendoMultiSelectFixedGroupTemplate\", \"\"]] });\nFixedGroupTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], FixedGroupTemplateDirective);\n\n/**\n * @hidden\n */\nlet SelectionService = class SelectionService {\n /**\n * @hidden\n */\n constructor() {\n this.onSelect = new EventEmitter();\n this.onChange = new EventEmitter();\n this.onFocus = new EventEmitter();\n this.total = 0;\n this.selectedIndices = [];\n }\n getTotal() {\n return this.total;\n }\n isSelected(index) {\n return isPresent(this.selectedIndices.find(current => current === index));\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n select(index) {\n if (this.isSelected(index)) {\n return;\n }\n this.selectedIndices = [index];\n this.focused = index;\n this.onSelect.emit({\n indices: [index],\n newSelection: isPresent(index)\n });\n }\n add(index) {\n if (this.isSelected(index)) {\n return;\n }\n this.selectedIndices.push(index);\n this.focused = index;\n this.onChange.emit({\n added: index,\n indices: this.selectedIndices.slice()\n });\n }\n unselect(index) {\n if (!this.isSelected(index)) {\n return;\n }\n const position = this.selectedIndices.indexOf(index);\n this.selectedIndices.splice(position, 1);\n this.focused = index;\n this.onChange.emit({\n indices: this.selectedIndices.slice(),\n removed: index\n });\n }\n change(index) {\n const newSelection = isPresent(index) && !this.isSelected(index);\n this.selectedIndices = [index];\n this.focused = index;\n this.onChange.emit({\n indices: [index],\n newSelection: newSelection\n });\n }\n resetSelection(index) {\n this.selectedIndices = index instanceof Array ? index : [index];\n this.focused = this.selectedIndices[this.selectedIndices.length - 1];\n }\n get selected() {\n return this.selectedIndices.slice();\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n if (this.focusedIndex !== index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n }\n};\nSelectionService.ɵfac = function SelectionService_Factory(t) { return new (t || SelectionService)(); };\nSelectionService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: SelectionService, factory: function (t) { return SelectionService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"Tab\"] = 4] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 5] = \"Esc\";\n NavigationAction[NavigationAction[\"Delete\"] = 6] = \"Delete\";\n NavigationAction[NavigationAction[\"Backspace\"] = 7] = \"Backspace\";\n NavigationAction[NavigationAction[\"Home\"] = 8] = \"Home\";\n NavigationAction[NavigationAction[\"End\"] = 9] = \"End\";\n NavigationAction[NavigationAction[\"Up\"] = 10] = \"Up\";\n NavigationAction[NavigationAction[\"Down\"] = 11] = \"Down\";\n NavigationAction[NavigationAction[\"Left\"] = 12] = \"Left\";\n NavigationAction[NavigationAction[\"Right\"] = 13] = \"Right\";\n})(NavigationAction || (NavigationAction = {}));\n\n/**\n * @hidden\n */\nlet DataService = class DataService {\n /**\n * @hidden\n */\n constructor() {\n this.grouped = false;\n this.groupIndices = [];\n }\n set data(data) {\n this._data = data;\n this.grouped = this.isGrouped(data);\n if (this.grouped) {\n this.groupIndices = this.getGroupIndices(data);\n this._flatData = this.flatten(data);\n }\n }\n get data() {\n if (this.grouped) {\n return this._flatData;\n }\n return this._data;\n }\n /**\n * @hidden\n * Used to get the actual items count, i.e. excluding the header items in case of grouping.\n */\n get itemsCount() {\n if (!isPresent(this.data) || this.data.length === 0) {\n return 0;\n }\n const items = this.grouped ? this._flatData.filter(item => !item.header) : this.data;\n return items.length;\n }\n /**\n * @hidden\n * Used to determine if the component received grouped data.\n */\n isGrouped(data) {\n // GroupResult { aggregates: AggregateResult, field: string, items: object[], value: any }\n // https://www.telerik.com/kendo-angular-ui/components/dataquery/api/GroupResult/\n return (isPresent(data) && data.length !== 0) && isPresent(data[0]) && hasProps(data[0], ['aggregates', 'field', 'items', 'value']);\n }\n /**\n * @hidden\n * Used to calculate the last item index of each group.\n */\n getGroupIndices(data) {\n let groupIndices = [];\n for (let i = 0; i <= data.length - 1; i++) {\n groupIndices[i] = (groupIndices[i - 1] || 0) + data[i].items.length;\n }\n return groupIndices;\n }\n /**\n * @hidden\n * Used to get a flat array containing all items matching certain criteria.\n */\n filter(predicate) {\n let result = [];\n if (this.isGrouped(this.data)) {\n for (let i = 0; i <= this.groupIndices.length - 1; i++) {\n const matches = this.data[i].items.filter(predicate);\n if (matches) {\n result = result.concat(matches);\n }\n }\n }\n else {\n result = this.data.filter(predicate);\n }\n return result;\n }\n /**\n * @hidden\n * Used to get the index of a given data item.\n */\n indexOf(item, startFrom = 0) {\n let predicate = (element) => {\n return element === item;\n };\n if (this.grouped) {\n predicate = (element) => {\n return element.value === item;\n };\n }\n return this.findIndex(predicate, startFrom);\n }\n /**\n * @hidden\n * Used to get the index of a data item based on an expression.\n */\n findIndex(predicate, startFrom = 0) {\n let index = -1;\n if (this.grouped) {\n const data = this._flatData.filter(item => !item.header && item.offsetIndex >= startFrom);\n index = data.findIndex(predicate);\n index = data[index] ? data[index].offsetIndex : -1;\n }\n else {\n const data = this.data.slice(startFrom);\n const itemIndex = data.findIndex(predicate);\n index = itemIndex !== -1 ? itemIndex + startFrom : -1;\n }\n return index;\n }\n /**\n * @hidden\n * Used to get the closest group header prior to an item index.\n */\n closestGroup(index) {\n for (let i = index; i >= 0; i--) {\n if (this._flatData[i].header) {\n return this._flatData[i];\n }\n }\n }\n /**\n * @hidden\n * Used to get the first item matching the criteria.\n */\n find(predicate) {\n const index = this.findIndex(predicate);\n return this.itemAt(index);\n }\n /**\n * @hidden\n * Used to get the true index in a flattened data array.\n */\n flatIndex(index) {\n if (this.itemsCount === 0) {\n return -1;\n }\n if (this.grouped) {\n const match = this._flatData.find((item) => !item.header && item.offsetIndex === index);\n if (match) {\n return match.index;\n }\n }\n else {\n return index;\n }\n return -1;\n }\n /**\n * @hidden\n * Used to get the item at the provided index.\n */\n itemAt(index) {\n let dataItem;\n if (this.itemsCount === 0) {\n return dataItem;\n }\n if (this.grouped) {\n const match = this._flatData.find((item) => !item.header && item.offsetIndex === index);\n if (match) {\n dataItem = match.value;\n }\n }\n else {\n dataItem = this.data[index];\n }\n return dataItem;\n }\n /**\n * @hidden\n * Used to get the group at the provided index.\n */\n groupAt(index) {\n if (this.itemsCount === 0 || !this.isGrouped) {\n return;\n }\n return this._flatData.find((item) => item.header && item.index === index);\n }\n /**\n * @hidden\n * Used to get the field by which the data is grouped.\n */\n groupField() {\n if (this.itemsCount === 0 || !this.isGrouped) {\n return null;\n }\n return this._data[0].field;\n }\n /**\n * @hidden\n * Used to get the group to which a dataItem belongs.\n */\n itemGroup(item) {\n if (!item || this.itemsCount === 0 || !this.isGrouped) {\n return;\n }\n const fieldName = this.groupField();\n if (fieldName) {\n return getter$1(item, fieldName);\n }\n }\n flatten(data, group = undefined, offset = 0, groupIndex = 0) {\n let flat = [];\n if (isPresent(group)) {\n flat.push({\n header: true,\n index: groupIndex + offset,\n offsetIndex: groupIndex,\n value: group\n });\n }\n for (let i = 0; i < data.length; i++) {\n let result = [];\n if (data[i].items) {\n result = this.flatten(data[i].items, data[i].value, offset, i);\n offset = offset + data[i].items.length;\n }\n else {\n result.push({\n header: false,\n index: groupIndex + offset + i + 1,\n offsetIndex: offset + i,\n value: data[i]\n });\n }\n flat = flat.concat(result);\n }\n return flat;\n }\n};\nDataService.ɵfac = function DataService_Factory(t) { return new (t || DataService)(); };\nDataService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DataService, factory: function (t) { return DataService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet DisabledItemsService = class DisabledItemsService {\n constructor(dataService) {\n this.dataService = dataService;\n this.itemDisabled = null;\n }\n isIndexDisabled(index) {\n if (this.itemDisabled) {\n const item = this.dataService.itemAt(index);\n if (isPresent(item)) {\n return this.itemDisabled({ dataItem: item, index });\n }\n else if (isPresent(this.defaultItem)) {\n return this.itemDisabled({ dataItem: this.defaultItem, index: -1 });\n }\n }\n }\n isItemDisabled(item) {\n if (this.itemDisabled) {\n const index = this.dataService.indexOf(item);\n if (index !== -1) {\n return this.itemDisabled({ dataItem: item, index });\n }\n else if (isPresent(this.defaultItem)) {\n return this.itemDisabled({ dataItem: this.defaultItem, index: -1 });\n }\n }\n }\n};\nDisabledItemsService.ɵfac = function DisabledItemsService_Factory(t) { return new (t || DisabledItemsService)(ɵngcc0.ɵɵinject(DataService)); };\nDisabledItemsService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DisabledItemsService, factory: function (t) { return DisabledItemsService.ɵfac(t); } });\nDisabledItemsService = __decorate([ __metadata(\"design:paramtypes\", [DataService])\n], DisabledItemsService);\n\nconst MIN_INDEX = 0;\n/**\n * @hidden\n */\nclass NavigationEvent {\n /**\n * The index of the item to which the user navigated.\n */\n constructor(index, originalEvent) {\n this.index = index;\n this.originalEvent = originalEvent;\n }\n}\n/**\n * @hidden\n */\nlet NavigationService = class NavigationService {\n constructor(disabledItemsService, selectionService) {\n this.disabledItemsService = disabledItemsService;\n this.selectionService = selectionService;\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.up = new EventEmitter();\n this.right = new EventEmitter();\n this.down = new EventEmitter();\n this.left = new EventEmitter();\n this.delete = new EventEmitter();\n this.backspace = new EventEmitter();\n this.home = new EventEmitter();\n this.end = new EventEmitter();\n }\n process(args) {\n const keyCode = args.originalEvent.keyCode;\n const altKey = args.originalEvent.altKey;\n let index;\n let action = NavigationAction.Undefined;\n if (altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (keyCode === Keys.Enter) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: -1 });\n action = NavigationAction.Up;\n }\n else if (keyCode === Keys.ArrowLeft) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: -1 });\n action = NavigationAction.Left;\n }\n else if (keyCode === Keys.ArrowDown) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: 1 });\n action = NavigationAction.Down;\n }\n else if (keyCode === Keys.ArrowRight) {\n index = this.next({ current: args.current, start: args.min, end: args.max, step: 1 });\n action = NavigationAction.Right;\n }\n else if (keyCode === Keys.Home) {\n index = this.isDisabled(MIN_INDEX) ? args.current : MIN_INDEX;\n action = NavigationAction.Home;\n }\n else if (keyCode === Keys.End) {\n index = this.isDisabled(args.max) ? args.current : args.max;\n action = NavigationAction.End;\n }\n else if (keyCode === Keys.Delete) {\n action = NavigationAction.Delete;\n }\n else if (keyCode === Keys.Backspace) {\n action = NavigationAction.Backspace;\n }\n const eventData = new NavigationEvent(index, args.originalEvent);\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(eventData);\n }\n return action;\n }\n next(args) {\n const { current, start, end, step } = args;\n const nextIndex = !isPresent(current) ? start : this.clampIndex(current + step, start, end);\n const firstFocusableIndex = this.firstFocusableIndex(nextIndex, start, end, step);\n if (isPresent(firstFocusableIndex)) {\n return firstFocusableIndex;\n }\n if (this.selectionService.isSelected(current) && current >= start) {\n return current;\n }\n const inversedStep = -1 * step;\n return this.firstFocusableIndex(nextIndex, start, end, inversedStep);\n }\n clampIndex(index, min, max) {\n if (!isPresent(index) || index < min) {\n return min;\n }\n if (index > max) {\n return max;\n }\n return index;\n }\n firstFocusableIndex(startIndex, min, max, step) {\n while (min <= startIndex && startIndex <= max) {\n if (!this.isDisabled(startIndex)) {\n return startIndex;\n }\n startIndex += step;\n }\n return undefined;\n }\n isDisabled(index) {\n if (this.disabledItemsService) {\n return this.disabledItemsService.isIndexDisabled(index);\n }\n }\n};\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(DisabledItemsService), ɵngcc0.ɵɵinject(SelectionService)); };\nNavigationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: function (t) { return NavigationService.ɵfac(t); } });\nNavigationService = __decorate([ __metadata(\"design:paramtypes\", [DisabledItemsService,\n SelectionService])\n], NavigationService);\n\n/**\n * Renders content when no data is available. To define the no-data template, nest a `` tag\n * with the `kendoNoDataTemplate` directive inside the component tag.\n *\n * - [Using `NoDataTemplate` with the AutoComplete]({% slug templates_autocomplete %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the ComboBox]({% slug templates_combobox %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the MultiColumnComboBox]({% slug templates_multicolumncombobox %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the DropDownList]({% slug templates_ddl %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-no-data-template)\n * - [Using `NoDataTemplate` with the MultiSelect]({% slug templates_multiselect %}#toc-no-data-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n *

No data!

\n *
\n *
\n * `\n * })\n * class AppComponent {\n * public listItems: Array = [];\n * }\n * ```\n */\nlet NoDataTemplateDirective = class NoDataTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nNoDataTemplateDirective.ɵfac = function NoDataTemplateDirective_Factory(t) { return new (t || NoDataTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nNoDataTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: NoDataTemplateDirective, selectors: [[\"\", \"kendoDropDownListNoDataTemplate\", \"\"], [\"\", \"kendoDropDownTreeNoDataTemplate\", \"\"], [\"\", \"kendoComboBoxNoDataTemplate\", \"\"], [\"\", \"kendoMultiColumnComboBoxNoDataTemplate\", \"\"], [\"\", \"kendoAutoCompleteNoDataTemplate\", \"\"], [\"\", \"kendoMultiSelectNoDataTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeNoDataTemplate\", \"\"]] });\nNoDataTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], NoDataTemplateDirective);\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Defines the mandatory properties of the `kendoDropDownFilter` directive\n * so that `kendoDropDownFilter` can be used with any of the DropDowns components\n * which implement the `FilterableDropDownComponentBase` class.\n *\n * @hidden\n */\nclass FilterableComponent {\n}\n\n/**\n * @hidden\n */\nlet ListItemDirective = class ListItemDirective {\n constructor(element) {\n this.element = element;\n }\n};\nListItemDirective.ɵfac = function ListItemDirective_Factory(t) { return new (t || ListItemDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nListItemDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ListItemDirective, selectors: [[\"li\", \"role\", \"option\"], [\"li\", \"role\", \"group\"]] });\nListItemDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef])\n], ListItemDirective);\n\n/**\n * @hidden\n */\nlet ListComponent = class ListComponent {\n /* tslint:disable:member-ordering */\n constructor(dataService, wrapper, selectionService, disabledItemsService, cdr, zone, renderer) {\n this.dataService = dataService;\n this.wrapper = wrapper;\n this.selectionService = selectionService;\n this.disabledItemsService = disabledItemsService;\n this.cdr = cdr;\n this.zone = zone;\n this.renderer = renderer;\n this.selected = [];\n this.focused = -1;\n this.show = true;\n this.multipleSelection = false;\n this.listClass = 'k-list k-reset';\n this.checkboxes = { enabled: false };\n this.onClick = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.listResize = new EventEmitter();\n this.startFrom = 0;\n this.lastLoaded = 0;\n this.lastScrollTop = 0;\n this.scrollToFocused = false;\n this.selectSubscription = merge(this.selectionService.onSelect.pipe(map((args) => args.indices[0])), this.selectionService.onFocus)\n .pipe(\n // handle only the very last onSelect/onFocus emission\n switchMap(event => this.zone.onStable.pipe(take(1), map(() => event))))\n .subscribe(this.scrollToItem.bind(this));\n }\n set data(data) {\n this._data = data[0] && data[0].header ? data.slice(0) : data;\n }\n get data() {\n return this._data;\n }\n get pageSize() {\n if (this.virtual.pageSize) {\n return this.virtual.pageSize;\n }\n let size = Math.round(this.height / this.virtual.itemHeight);\n return size;\n }\n get scrollHeight() {\n return (this.dataService.grouped ? this.virtual.total - 1 : this.virtual.total) * this.virtual.itemHeight;\n }\n get overflowY() {\n if (isPresent(this.virtual)) {\n const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';\n return overflow;\n }\n }\n ngOnChanges(changes) {\n if (isChanged('data', changes, false)) {\n if (this.lastLoaded <= 0) {\n this.lastLoaded = this.data.length - 1;\n this.scrollToFocused = !changes.data.isFirstChange();\n }\n this.setOverflow();\n }\n if (isChanged('virtual', changes, false)) {\n this.setOverflow();\n }\n }\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.scrollSubscription = fromEvent(this.content.nativeElement, \"scroll\").pipe(auditTime(100), tap(this.prefetchData.bind(this)), tap(this.findCurrentGroup.bind(this))).subscribe(() => {\n this.lastScrollTop = this.content.nativeElement.scrollTop;\n });\n });\n this.setOverflow();\n }\n ngAfterViewChecked() {\n if (this.virtual) {\n this.positionItems();\n }\n if (this.items && this.scrollToFocused) {\n this.scrollToFocused = false;\n const scrollTarget = this.items.length && this.selectionService.focused === -1 ? 0 : this.selectionService.focused;\n this.scrollToItem(scrollTarget);\n }\n if (this.dataService.grouped) {\n this.findCurrentGroup();\n }\n }\n ngOnDestroy() {\n this.selectSubscription.unsubscribe();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n }\n onCheckedChange(e, index) {\n const isChecked = e.target['checked'];\n if (isChecked && !this.selectionService.isSelected(index)) {\n this.selectionService.add(index);\n }\n if (!isChecked && this.selectionService.isSelected(index)) {\n this.selectionService.unselect(index);\n }\n }\n isChecked(index) {\n const normalizedIndex = this.virtual ? index + this.virtual.skip : index;\n return this.selectionService.isSelected(normalizedIndex);\n }\n firstVisibleItem() {\n const content = this.content.nativeElement;\n const rect = content.getBoundingClientRect();\n // IE9 hack\n const disabled = Array.prototype.slice.call(content.querySelectorAll(\".k-state-disabled\"));\n // This is a workaround for finding elements with pointer-events: none;\n disabled.forEach((el) => this.renderer.setStyle(el, \"pointer-events\", \"auto\"));\n const item = document.elementFromPoint(rect.left + 1, rect.top + 1);\n disabled.forEach((el) => this.renderer.setStyle(el, \"pointer-events\", \"none\"));\n // return the closest `li` item to cover the custom template scenario\n return closest(item, 'li');\n }\n findCurrentGroup() {\n if (!this.dataService.grouped) {\n this.currentGroup = undefined;\n return;\n }\n const item = this.firstVisibleItem();\n if (item) {\n let index;\n if (item.getAttribute(\"role\") === \"group\") {\n index = parseInt(item.getAttribute(\"group-index\"), 10);\n this.currentGroup = this.dataService.groupAt(index).value;\n }\n else {\n index = parseInt(item.getAttribute(\"index\"), 10);\n this.currentGroup = this.dataService.itemGroup(this.dataService.itemAt(index));\n }\n }\n else {\n this.currentGroup = undefined;\n }\n this.cdr.detectChanges();\n }\n prefetchData() {\n if (!this.virtual) {\n return;\n }\n const visibleItems = Math.trunc(this.content.nativeElement.clientHeight / this.virtual.itemHeight);\n const offsetY = this.content.nativeElement.scrollTop;\n const start = Math.trunc(offsetY / this.virtual.itemHeight);\n const down = offsetY > this.lastScrollTop;\n const nextPage = (start + visibleItems >= this.lastLoaded) && this.lastLoaded < this.virtual.total - 1;\n const leftOver = this.pageSize - (this.lastLoaded - this.startFrom);\n const prevPage = this.lastLoaded - this.pageSize + visibleItems >= start - leftOver;\n if (down && nextPage) {\n this.changePage(start);\n }\n if (!down && prevPage) {\n this.changePage(start - this.pageSize + visibleItems + 1);\n }\n }\n changePage(start) {\n this.zone.run(() => {\n let end = this.pageSize + start;\n if (end > this.virtual.total) {\n start--;\n end = this.virtual.total;\n }\n if (start < 0) {\n start = 0;\n }\n this.startFrom = start;\n this.lastLoaded = end;\n this.pageChange.emit({ skip: start, take: this.pageSize });\n });\n }\n index(groupIndex, itemIndex) {\n return groupIndex > 0 ? (this.dataService.groupIndices[groupIndex - 1] + itemIndex) : itemIndex;\n }\n getText(dataItem) {\n return getter$1(dataItem, this.textField);\n }\n getValue(dataItem) {\n return getter$1(dataItem, this.valueField);\n }\n isDisabled(index) {\n if (isPresent(this.virtual)) {\n index += this.virtual.skip;\n }\n return this.disabledItemsService.isIndexDisabled(index);\n }\n scrollToItem(index) {\n let flatIndex = index;\n if (this.dataService.grouped) {\n // takes into account the group header items\n flatIndex = this.dataService.flatIndex(index);\n /* The first group header item is not rendered in the list (see template), so subtract 1 when calulating the flat index.\n With virtualization enabled, the first group header could be in a previous page, in which case don't subtract anything. */\n const groupHeaderOffset = this.firstGroupHeaderInTargetedPage(flatIndex) ? -1 : 0;\n flatIndex += groupHeaderOffset;\n }\n if (this.virtual && flatIndex > -1) {\n this.scrollToIndex(flatIndex);\n return;\n }\n const items = this.items.toArray();\n if (isPresent(items[flatIndex]) && flatIndex !== -1) {\n this.scroll(items[flatIndex].element);\n }\n }\n scrollToIndex(index) {\n let content = this.content.nativeElement;\n let contentScrollTop = content.scrollTop;\n const itemOffsetTop = index * this.virtual.itemHeight;\n const itemOffsetHeight = this.virtual.itemHeight;\n const contentOffsetHeight = content.clientHeight;\n const bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n }\n else if (bottomDistance > (contentScrollTop + contentOffsetHeight)) {\n contentScrollTop = (bottomDistance - contentOffsetHeight);\n }\n content.scrollTop = contentScrollTop;\n }\n scroll(item) {\n if (!item) {\n return;\n }\n const nativeElement = item.nativeElement;\n let content = this.content.nativeElement, itemOffsetTop = nativeElement.offsetTop, itemOffsetHeight = nativeElement.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n }\n else if (bottomDistance > (contentScrollTop + contentOffsetHeight)) {\n contentScrollTop = (bottomDistance - contentOffsetHeight);\n }\n content.scrollTop = contentScrollTop;\n }\n /**\n * Indicates whether a scrollbar is currently rendered in the list.\n */\n hasScrollbar() {\n if (!(isPresent(this.items) && this.items.length && isPresent(this.list) && isPresent(this.content))) {\n return false;\n }\n const hasVirtualScroll = isPresent(this.virtual) && this.hasVirtualScrollbar();\n return hasVirtualScroll || this.list.nativeElement.scrollHeight > this.content.nativeElement.offsetHeight;\n }\n /**\n * Sets the list's content overflow (hides/shows scrollbar)\n */\n setOverflow() {\n if (this.virtual) {\n const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';\n this.renderer.setStyle(this.content.nativeElement, 'overflow-y', overflow);\n }\n }\n /**\n * Indicates whether the scrollbar should be visible in virtual mode.\n */\n hasVirtualScrollbar() {\n const contentOffsetHeight = this.content.nativeElement.offsetHeight;\n const virtualOffsetHeight = this.virtualContainer && this.virtualContainer.nativeElement.offsetHeight;\n return this.virtualContainer && virtualOffsetHeight > contentOffsetHeight;\n }\n positionItems() {\n this.items.forEach((item, index) => {\n const offsetY = (index + this.startFrom) * this.virtual.itemHeight;\n this.renderer.setStyle(item.element.nativeElement, \"transform\", `translateY(${offsetY}px`);\n });\n }\n /**\n * Indicates whether the first group header from the data set is in the targeted virtual page.\n */\n firstGroupHeaderInTargetedPage(itemIndex) {\n if (!isPresent(this.virtual)) {\n return true;\n }\n return this.virtual.skip === 0 && (this.virtual.pageSize > itemIndex);\n }\n};\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-list\"]], viewQuery: function ListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c2, 7);\n ɵngcc0.ɵɵviewQuery(_c3, 7);\n ɵngcc0.ɵɵviewQuery(_c4, 5);\n ɵngcc0.ɵɵviewQuery(ListItemDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.content = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.list = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.items = _t);\n } }, inputs: { selected: \"selected\", focused: \"focused\", show: \"show\", multipleSelection: \"multipleSelection\", listClass: \"listClass\", checkboxes: \"checkboxes\", data: \"data\", textField: \"textField\", valueField: \"valueField\", height: \"height\", template: \"template\", groupTemplate: \"groupTemplate\", fixedGroupTemplate: \"fixedGroupTemplate\", id: \"id\", optionPrefix: \"optionPrefix\", virtual: \"virtual\" }, outputs: { onClick: \"onClick\", pageChange: \"pageChange\", listResize: \"listResize\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 9, vars: 20, consts: [[\"class\", \"k-outer-group-header k-first\", 3, \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"unselectable\", \"on\", 3, \"ngClass\"], [\"content\", \"\"], [\"role\", \"listbox\", 3, \"ngClass\"], [\"list\", \"\"], [4, \"ngIf\"], [3, \"resize\", 4, \"ngIf\"], [\"class\", \"k-height-container\", \"role\", \"presentation\", 4, \"ngIf\"], [1, \"k-outer-group-header\", \"k-first\", 3, \"ngClass\", \"ngStyle\"], [3, \"ngIf\"], [3, \"templateContext\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"role\", \"option\", \"kendoDropDownsSelectable\", \"\", 1, \"k-item\", 3, \"checkboxes\", \"height\", \"index\", \"multipleSelection\", \"ngClass\"], [\"class\", \"k-checkbox-label\", 4, \"ngIf\"], [1, \"k-checkbox-label\"], [\"type\", \"checkbox\", 1, \"k-checkbox\", 3, \"checked\", \"change\"], [\"role\", \"group\", \"class\", \"k-outer-group-header\", 3, \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"role\", \"option\", \"kendoDropDownsSelectable\", \"\", \"class\", \"k-item\", 3, \"height\", \"index\", \"multipleSelection\", \"ngClass\", 4, \"ngIf\"], [\"role\", \"group\", 1, \"k-outer-group-header\", 3, \"ngClass\", \"ngStyle\"], [\"role\", \"option\", \"kendoDropDownsSelectable\", \"\", 1, \"k-item\", 3, \"height\", \"index\", \"multipleSelection\", \"ngClass\"], [3, \"resize\"], [\"role\", \"presentation\", 1, \"k-height-container\"], [\"virtualContainer\", \"\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_div_0_Template, 3, 10, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2)(3, \"ul\", 3, 4);\n ɵngcc0.ɵɵtemplate(5, ListComponent_5_Template, 1, 1, null, 5);\n ɵngcc0.ɵɵtemplate(6, ListComponent_6_Template, 1, 1, null, 5);\n ɵngcc0.ɵɵtemplate(7, ListComponent_kendo_resize_sensor_7_Template, 1, 0, \"kendo-resize-sensor\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, ListComponent_div_8_Template, 4, 2, \"div\", 7);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.dataService.grouped);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"overscroll-behavior\", \"none\")(\"max-height\", ctx.height, \"px\");\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(15, _c9, ctx.virtual, !ctx.virtual));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassMap(ctx.listClass);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(18, _c10, ctx.virtual));\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"aria-hidden\", !ctx.show);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.dataService.grouped && ctx.show);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.dataService.grouped);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.virtual);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.virtual);\n } }, directives: function () { return [ɵngcc3.NgIf, ɵngcc3.NgClass, ɵngcc3.NgStyle, TemplateContextDirective, ɵngcc3.NgForOf, ListItemDirective, SelectableDirective, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ListComponent.prototype, \"selected\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ListComponent.prototype, \"focused\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ListComponent.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", ItemTemplateDirective)\n], ListComponent.prototype, \"template\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", GroupTemplateDirective)\n], ListComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", FixedGroupTemplateDirective)\n], ListComponent.prototype, \"fixedGroupTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ListComponent.prototype, \"show\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"optionPrefix\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ListComponent.prototype, \"multipleSelection\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ListComponent.prototype, \"virtual\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ListComponent.prototype, \"listClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ListComponent.prototype, \"checkboxes\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], ListComponent.prototype, \"data\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ListComponent.prototype, \"onClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ListComponent.prototype, \"pageChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ListComponent.prototype, \"listResize\", void 0);\n__decorate([\n ViewChildren(ListItemDirective),\n __metadata(\"design:type\", QueryList)\n], ListComponent.prototype, \"items\", void 0);\n__decorate([\n ViewChild('content', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ListComponent.prototype, \"content\", void 0);\n__decorate([\n ViewChild('list', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ListComponent.prototype, \"list\", void 0);\n__decorate([\n ViewChild('virtualContainer', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ListComponent.prototype, \"virtualContainer\", void 0);\nListComponent = __decorate([ __metadata(\"design:paramtypes\", [DataService,\n ElementRef,\n SelectionService,\n DisabledItemsService,\n ChangeDetectorRef,\n NgZone,\n Renderer2])\n], ListComponent);\n\n/**\n * @hidden\n */\nconst DEFAULTS = {\n pageSize: 50,\n itemHeight: 28\n};\n/**\n * @hidden\n */\nconst normalizeVirtualizationSettings = (settings, defaultOverrides) => {\n const defaults = Object.assign({}, DEFAULTS, defaultOverrides);\n if (settings === true) {\n return defaults;\n }\n if (!settings) {\n return null;\n }\n return Object.assign({ pageSize: DEFAULTS.pageSize }, settings);\n};\n\n/**\n * @hidden\n */\nconst TOUCH_ENABLED = new InjectionToken('dropdowns-touch-enabled');\n\n/* tslint:disable:member-ordering */\nvar AutoCompleteComponent_1;\nconst NO_VALUE = \"\";\n/**\n * @hidden\n */\nconst AUTOCOMPLETE_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AutoCompleteComponent)\n};\n/**\n * Represents the [Kendo UI AutoComplete component for Angular]({% slug overview_autocomplete %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public placeholder: string = 'Type \"it\" for suggestions';\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponent {\n constructor(localization, dataService, popupService, selectionService, navigationService, disabledItemsService, _zone, cdr, renderer, hostElement, touchEnabled$$1) {\n this.localization = localization;\n this.dataService = dataService;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this._zone = _zone;\n this.cdr = cdr;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.touchEnabled = touchEnabled$$1;\n /**\n * Defines whether the first match from the suggestions list will be automatically focused.\n * By default, `highlightFirst` is set to `true`.\n */\n this.highlightFirst = true;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * @hidden\n *\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Enables the [filtering]({% slug filtering_autocomplete %}) functionality.\n * If set to `true`, the component emits the `filterChange` event.\n */\n this.filterable = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_autocomplete %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value\n * ([see example]({% slug overview_autocomplete %}#toc-events)).\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the AutoComplete.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the AutoComplete gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.widgetClasses = true;\n this.listBoxId = guid$1();\n this.optionPrefix = guid$1();\n this.onChangeCallback = noop;\n this.onTouchedCallback = noop;\n this.popupMouseDownHandler = (event) => event.preventDefault();\n this._popupSettings = { animate: true };\n this._open = false;\n this._value = \"\";\n this.valueChangeSubject = new Subject();\n this._isFocused = false;\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.wrapper = this.hostElement.nativeElement;\n this.data = [];\n this.subscribeEvents();\n this.subscribeTouchEvents();\n this.selectionService.resetSelection([-1]);\n }\n get width() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n get suggestion() {\n if (!this.text || !this.suggestedText) {\n this.suggestedText = undefined;\n return;\n }\n const hasMatch = this.suggestedText.toLowerCase().startsWith(this.text.toLowerCase());\n const shouldSuggest = this.suggest && !this.backspacePressed;\n if (shouldSuggest && hasMatch) {\n return this.suggestedText;\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * Toggles the visibility of the popup.\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n get activeDescendant() {\n if (!this.isOpen || !isPresent(this.selectionService.focused) || this.selectionService.focused === -1) {\n return null;\n }\n const dataItem = this.dataService.itemAt(this.selectionService.focused);\n return this.optionPrefix + \"-\" + getter$1(dataItem, this.valueField);\n }\n get noDataLabel() {\n if (this.data.length === 0) {\n return this.noDataText;\n }\n }\n get clearTitle() {\n return this.localization.get('clearTitle');\n }\n /**\n * Sets the data of the AutoComplete.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n if (this.filterable) {\n this.selectionService.focused = this.isOpen && this.data.length && this.highlightFirst ? this.firstFocusableIndex(0) : -1;\n }\n if (this.suggest && this.dataService.itemsCount > 0) {\n this.suggestedText = getter$1(this.dataService.itemAt(0), this.valueField);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the AutoComplete.\n */\n set value(newValue) {\n this.verifySettings(newValue);\n this._value = newValue || NO_VALUE;\n this.text = this.value;\n this.cdr.markForCheck();\n }\n get value() {\n return this._value || NO_VALUE;\n }\n /**\n * Configures the popup of the AutoComplete.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_autocomplete %})).\n * Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_autocomplete %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper, \"k-state-focused\");\n this._isFocused = isFocused;\n }\n get isDisabled() {\n return this.disabled;\n }\n get dir() {\n return this.direction;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.wrapper, \"tabindex\");\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.setMessages();\n });\n this.setMessages();\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n clearTimeout(this.messagesTimeout);\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n }\n /**\n * Resets the value of the AutoComplete.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = NO_VALUE;\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this.change(NO_VALUE);\n if (this.filterable) {\n this.filterChange.emit('');\n }\n this.selectionService.resetSelection([]);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\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 * Focuses a specific item of the AutoComplete based on a provided index.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const isInRange = index >= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n /**\n * Focuses the AutoComplete.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * Blurs the AutoComplete.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n emitChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n verifySettings(newValue) {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(newValue) && typeof newValue !== \"string\") {\n throw new Error(\"Expected value of type string. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/autocomplete/value-binding/\");\n }\n }\n search(text, startFrom = 0) {\n let index;\n if (text.length && this.dataService.itemsCount) {\n index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);\n }\n else {\n index = -1;\n }\n if (this.disabledItemsService.isIndexDisabled(index)) {\n if (index + 1 < this.dataService.itemsCount) {\n this.search(text, index + 1);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n else {\n this.selectionService.focus(index);\n if (this.suggest) {\n this.suggestedText = getter$1(this.dataService.itemAt(index), this.valueField);\n }\n }\n }\n navigate(index) {\n if (!this.isOpen) {\n return;\n }\n this.selectionService.focus(index);\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(0) : this.selectionService.focused;\n if (this.disabled || this.readonly || isNaN(focused)) {\n return;\n }\n const action = this.navigationService.process({\n current: focused,\n max: this.dataService.itemsCount - 1,\n min: 0,\n originalEvent: event\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n action !== NavigationAction.Home &&\n action !== NavigationAction.End &&\n action !== NavigationAction.Left &&\n action !== NavigationAction.Right &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n handleEnter(event) {\n const focused = this.selectionService.focused;\n let value;\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n if (focused >= 0) {\n value = getter$1(this.dataService.itemAt(focused), this.valueField);\n }\n else {\n const match = this.suggest && this.suggestedText && this.data.length &&\n getter$1(this.dataService.itemAt(0), this.valueField).toLowerCase() === this.searchbar.value.toLowerCase();\n if (this.isOpen && match) {\n value = this.suggestedText;\n }\n else {\n value = this.searchbar.value;\n }\n }\n this.change(value);\n }\n handleEscape() {\n this.togglePopup(false);\n this.selectionService.focused = -1;\n this.suggestedText = null;\n }\n /**\n * @hidden\n */\n searchBarChange(text) {\n const currentTextLength = isPresent(this.text) ? this.text.length : 0;\n this.backspacePressed = (text.length < currentTextLength) ? true : false;\n this.text = text;\n this.togglePopup(text.length > 0);\n if (!this.highlightFirst) {\n this.selectionService.focused = -1;\n }\n if (this.filterable) {\n this.filterChange.emit(text);\n }\n else if (this.highlightFirst) {\n this.search(text);\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n /**\n * @hidden\n */\n handleBlur() {\n const focused = this.filterable ? this.selectionService.focused : -1;\n this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers\n let dataItem;\n let text;\n if (focused !== -1) {\n dataItem = this.dataService.itemAt(focused);\n text = getter$1(dataItem, this.valueField) || \"\";\n }\n else {\n text = this.searchbar.value;\n }\n const exactMatch = text === this.searchbar.value;\n const insensitiveMatch = text.toLowerCase() === this.searchbar.value.toLowerCase();\n if (!exactMatch && insensitiveMatch) {\n this.selectionService.resetSelection([]);\n }\n this.isFocused = false;\n const valueHasChanged = this.value !== this.text;\n const runInZone = hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.wrapper) || valueHasChanged;\n if (runInZone) {\n this._zone.run(() => {\n if (valueHasChanged) {\n this.change(this.searchbar.value);\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n this.togglePopup(false);\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n change(value) {\n this.togglePopup(false);\n this.valueChangeSubject.next(value);\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.valueChangeSubscription = this.valueChangeSubject\n .subscribe(value => {\n const hasChange = this.value !== value;\n this.value = value;\n this.text = value;\n // emit change after assigning `this.value` => allows the user to modify the component value on `valueChange`\n if (hasChange) {\n this.emitChange(value);\n }\n });\n this.changeSubscription = this.selectionService.onChange.subscribe(this.handleItemChange.bind(this));\n this.focusSubscription = this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this));\n this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index));\n this.closeSubscription = this.navigationService.close.subscribe(() => this.togglePopup(false));\n this.enterSubscription = this.navigationService.enter.subscribe(this.handleEnter.bind(this));\n this.escSubscription = this.navigationService.esc.subscribe(this.handleEscape.bind(this));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up AutoComplete on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.hostElement, target, this.popupRef)) {\n this._zone.run(() => this.blur());\n }\n }));\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.changeSubscription.unsubscribe();\n this.navigationSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.enterSubscription.unsubscribe();\n this.escSubscription.unsubscribe();\n this.valueChangeSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n handleItemChange(event) {\n const index = event.indices.length ? event.indices[0] : undefined;\n this.selectionService.resetSelection([-1]);\n if (!isPresent(index)) {\n return;\n }\n let text = getter$1(this.dataService.itemAt(index), this.valueField);\n this.change(text);\n }\n handleItemFocus(_event) {\n const focused = this.selectionService.focused;\n const shouldSuggest = Boolean(this.suggest && this.data && this.data.length && focused >= 0);\n if (shouldSuggest) {\n this.suggestedText = getter$1(this.dataService.itemAt(focused), this.valueField);\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute',\n popupAlign: popupPosition,\n anchorAlign: anchorPosition\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n firstFocusableIndex(index) {\n const maxIndex = this.data.length - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n findIndexPredicate(text) {\n if (this.dataService.grouped) {\n return (item) => {\n let itemText = getter$1(item.value, this.valueField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n else {\n return (item) => {\n let itemText = getter$1(item, this.valueField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n }\n setMessages() {\n this._zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.noDataText = this.localization.get('noDataText');\n this.cdr.detectChanges();\n });\n });\n }\n};\nAutoCompleteComponent.ɵfac = function AutoCompleteComponent_Factory(t) { return new (t || AutoCompleteComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nAutoCompleteComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: AutoCompleteComponent, selectors: [[\"kendo-autocomplete\"]], contentQueries: function AutoCompleteComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ItemTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FixedGroupTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fixedGroupTemplate = _t.first);\n } }, viewQuery: function AutoCompleteComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(SearchBarComponent, 7);\n ɵngcc0.ɵɵviewQuery(_c13, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.searchbar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionsList = _t.first);\n } }, hostVars: 7, hostBindings: function AutoCompleteComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-autocomplete\", ctx.widgetClasses)(\"k-state-disabled\", ctx.isDisabled);\n } }, inputs: { highlightFirst: \"highlightFirst\", focusableId: \"focusableId\", placeholder: \"placeholder\", listHeight: \"listHeight\", clearButton: \"clearButton\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", filterable: \"filterable\", data: \"data\", value: \"value\", popupSettings: \"popupSettings\", itemDisabled: \"itemDisabled\", tabIndex: \"tabIndex\", virtual: \"virtual\", valueField: \"valueField\", loading: \"loading\", suggest: \"suggest\" }, outputs: { valueChange: \"valueChange\", filterChange: \"filterChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoAutoComplete\"], features: [ɵngcc0.ɵɵProvidersFeature([\n AUTOCOMPLETE_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.autocomplete'\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => AutoCompleteComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => AutoCompleteComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 15, consts: function () { let i18n_14; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.autocomplete.noDataText\n */\n const MSG_EXTERNAL_2690656529626907484$$DIST_FESM2015_INDEX_JS_15 = goog.getMsg(\"NO DATA FOUND\");\n i18n_14 = MSG_EXTERNAL_2690656529626907484$$DIST_FESM2015_INDEX_JS_15;\n }\n else {\n i18n_14 = $localize `:kendo.autocomplete.noDataText|The text displayed in the popup when there are no items␟4e9993e088a293543eb0c2801343518c115b6f20␟2690656529626907484:NO DATA FOUND`;\n } let i18n_16; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.autocomplete.clearTitle\n */\n const MSG_EXTERNAL_4821453594854847070$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"clear\");\n i18n_16 = MSG_EXTERNAL_4821453594854847070$$DIST_FESM2015_INDEX_JS_17;\n }\n else {\n i18n_16 = $localize `:kendo.autocomplete.clearTitle|The title of the clear button␟7cf49cc2d50eebd29f8d61564512383caaaac7a6␟4821453594854847070:clear`;\n } return [[\"kendoAutoCompleteLocalizedMessages\", \"\", \"noDataText\", i18n_14, \"clearTitle\", i18n_16], [3, \"role\", \"id\", \"listId\", \"activeDescendant\", \"noDataLabel\", \"userInput\", \"suggestedText\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"placeholder\", \"onNavigate\", \"valueChange\", \"onBlur\", \"onFocus\"], [\"searchbar\", \"\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"role\", \"button\", \"tabindex\", \"-1\", 3, \"visibility\", \"click\", \"mousedown\", 4, \"ngIf\"], [\"class\", \"k-icon k-i-loading\", 4, \"ngIf\"], [\"popupTemplate\", \"\"], [3, \"ngIf\"], [\"container\", \"\"], [\"role\", \"button\", \"tabindex\", \"-1\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"click\", \"mousedown\"], [1, \"k-icon\", \"k-i-loading\"], [4, \"ngIf\"], [3, \"id\", \"optionPrefix\", \"data\", \"textField\", \"valueField\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"height\", \"show\", \"virtual\", \"pageChange\"], [\"optionsList\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [3, \"templateContext\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"resize\"]]; }, template: function AutoCompleteComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-searchbar\", 1, 2);\n ɵngcc0.ɵɵlistener(\"onNavigate\", function AutoCompleteComponent_Template_kendo_searchbar_onNavigate_1_listener($event) { return ctx.handleNavigate($event); })(\"valueChange\", function AutoCompleteComponent_Template_kendo_searchbar_valueChange_1_listener($event) { return ctx.searchBarChange($event); })(\"onBlur\", function AutoCompleteComponent_Template_kendo_searchbar_onBlur_1_listener() { return ctx.handleBlur(); })(\"onFocus\", function AutoCompleteComponent_Template_kendo_searchbar_onFocus_1_listener() { return ctx.handleFocus(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, AutoCompleteComponent_span_3_Template, 1, 3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, AutoCompleteComponent_span_4_Template, 1, 0, \"span\", 4);\n ɵngcc0.ɵɵtemplate(5, AutoCompleteComponent_ng_template_5_Template, 5, 14, \"ng-template\", null, 5, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(7, AutoCompleteComponent_ng_template_7_Template, 1, 0, \"ng-template\", 6);\n ɵngcc0.ɵɵelementContainer(8, null, 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"role\", \"combobox\")(\"id\", ctx.focusableId)(\"listId\", ctx.listBoxId)(\"activeDescendant\", ctx.activeDescendant)(\"noDataLabel\", ctx.noDataLabel)(\"userInput\", ctx.text)(\"suggestedText\", ctx.suggestion)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"tabIndex\", ctx.tabIndex)(\"popupOpen\", ctx.isOpen)(\"placeholder\", ctx.placeholder);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.loading && !ctx.readonly && (ctx.clearButton && (ctx.text == null ? null : ctx.text.length)));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.loading);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isOpen);\n } }, directives: function () { return [LocalizedMessagesDirective, SearchBarComponent, ɵngcc3.NgIf, TemplateContextDirective, ListComponent, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"highlightFirst\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AutoCompleteComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], AutoCompleteComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], AutoCompleteComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AutoCompleteComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], AutoCompleteComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], AutoCompleteComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AutoCompleteComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"suggest\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], AutoCompleteComponent.prototype, \"itemDisabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], AutoCompleteComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(\"tabIndex\"),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], AutoCompleteComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], AutoCompleteComponent.prototype, \"virtual\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"closed\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], AutoCompleteComponent.prototype, \"onBlur\", void 0);\n__decorate([\n ContentChild(ItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ItemTemplateDirective)\n], AutoCompleteComponent.prototype, \"template\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], AutoCompleteComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], AutoCompleteComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], AutoCompleteComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n ContentChild(GroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTemplateDirective)\n], AutoCompleteComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n ContentChild(FixedGroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", FixedGroupTemplateDirective)\n], AutoCompleteComponent.prototype, \"fixedGroupTemplate\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], AutoCompleteComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], AutoCompleteComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild(SearchBarComponent, { static: true }),\n __metadata(\"design:type\", SearchBarComponent)\n], AutoCompleteComponent.prototype, \"searchbar\", void 0);\n__decorate([\n ViewChild('optionsList', { static: false }),\n __metadata(\"design:type\", ListComponent)\n], AutoCompleteComponent.prototype, \"optionsList\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-autocomplete'),\n __metadata(\"design:type\", Boolean)\n], AutoCompleteComponent.prototype, \"widgetClasses\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], AutoCompleteComponent.prototype, \"isDisabled\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], AutoCompleteComponent.prototype, \"dir\", null);\nAutoCompleteComponent = AutoCompleteComponent_1 = __decorate([ __param(10, Optional()), __param(10, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [LocalizationService,\n DataService,\n PopupService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n NgZone,\n ChangeDetectorRef,\n Renderer2,\n ElementRef, Boolean])\n], AutoCompleteComponent);\n\n/* tslint:disable:variable-name */\n/**\n * @hidden\n */\nconst MultiselectMessages = {\n 'array': 'Expected values of array type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'object': 'Expected values of Object type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'primitive': 'Expected values of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselect/#toc-bind-to-arrays-of-complex-data'\n};\n/**\n * @hidden\n */\nconst MultiSelectTreeMessages = {\n 'array': 'Expected values of array type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/#value-selection',\n 'primitive': 'Expected values of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding/#toc-primitive-values',\n 'object': 'Expected values of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding/#toc-object-values',\n 'dataItems': 'Expected dataItems of type Object[] to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/MultiSelectTreeComponent/#toc-dataitems',\n 'dataItemsLength': 'Expected dataItems length to match the number of provided values. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/MultiSelectTreeComponent/#toc-dataitems',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multiselecttree/value-binding',\n 'valueDepth': 'Expected valueDepth of type number[] to be set. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/MultiSelectTreeComponent/#toc-valuedepth',\n 'valueDepthLength': 'Expected valueDepth length to match the number of provided values. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/MultiSelectTreeComponent/#toc-valuedepth'\n};\n/**\n * @hidden\n */\nconst ComboBoxMessages = {\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-value-selection',\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/combobox/#toc-bind-to-arrays-of-complex-data',\n 'noItemHeight': 'Expected virtual.itemHeight of type number.'\n};\n/**\n * @hidden\n */\nconst MultiColumnComboBoxMessages = {\n 'data': 'Provided data must consist only of objects. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multicolumncombobox/data-binding/',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/multicolumncombobox/data-binding/#toc-fields-configuration'\n};\n/**\n * @hidden\n */\nconst DropDownListMessages = {\n 'defaultItem': 'defaultItem and data items must be of same type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/api/DropDownListComponent/#toc-defaultitem',\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-value-selection',\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-value-selection',\n 'textAndValue': 'Expected textField and valueField options to be set. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdownlist/#toc-bind-to-arrays-of-complex-data'\n};\n/**\n * @hidden\n */\nconst DropDownTreeMessages = {\n 'primitive': 'Expected value of primitive type. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding/#toc-primitive-values',\n 'object': 'Expected value of type Object. See http://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding/#toc-object-values',\n 'dataItem': 'Expected dataItem of type Object to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/api/DropDownTreeComponent/#toc-dataitem',\n 'textAndValue': 'Expected textField and valueField options to be set. See https://www.telerik.com/kendo-angular-ui/components/dropdowns/dropdowntree/value-binding',\n 'valueDepth': 'Expected valueDepth to be set. See https://www.telerik.com/kendo-angular-ui-develop/components/dropdowns/api/DropDownTreeComponent/#toc-valuedepth'\n};\n\n/* tslint:disable:member-ordering */\nvar ComboBoxComponent_1;\n/**\n * @hidden\n */\nconst COMBOBOX_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboBoxComponent)\n};\n/**\n * Represents the [Kendo UI ComboBox component for Angular]({% slug overview_combobox %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {\n constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, cdr, renderer, hostElement, touchEnabled$$1) {\n this.localization = localization;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.dataService = dataService;\n this.zone = zone;\n this.cdr = cdr;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.touchEnabled = touchEnabled$$1;\n this.selected = [];\n /**\n * @hidden\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * Specifies whether the ComboBox allows user-defined values that are not present in the dataset\n * ([more information and examples]({% slug custom_values_combobox %})).\n * Defaults to `false`.\n */\n this.allowCustom = false;\n /**\n * A user-defined callback which returns normalized custom values.\n * Typically used when the data items are different from type `string`.\n * @param { Any } value - The custom value defined by the user.\n * @returns { Any }\n *\n * @example\n * ```ts\n * import { map } from 'rxjs/operators';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public listItems: Array<{ text: string, value: number }> = [\n * { text: \"Small\", value: 1 },\n * { text: \"Medium\", value: 2 },\n * { text: \"Large\", value: 3 }\n * ];\n *\n * public onValueChange(value) {\n * console.log(\"valueChange : \", value);\n * }\n *\n * public valueNormalizer = (text$: Observable) => text$.pipe(map((text: string) => {\n * return { ProductID: null, ProductName: text };\n * }));\n *\n * }\n * ```\n */\n this.valueNormalizer = (text) => text.pipe(map((userInput) => userInput));\n /**\n * The hint that is displayed when the component is empty.\n *\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Enables the auto-completion of the text based on the first data item.\n */\n this.suggest = false;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Enables the [filtering]({% slug filtering_combobox %}) functionality.\n * If set to `true`, the component emits the `filterChange` event.\n */\n this.filterable = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_combobox %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time an item selection is changed\n * ([see example]({% slug overview_combobox %}#toc-events)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value\n * ([see example]({% slug overview_combobox %}#toc-events)).\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the ComboBox.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the ComboBox gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.widgetClasses = true;\n this._isFocused = false;\n this.listBoxId = guid$1();\n this.optionPrefix = guid$1();\n this.onChangeCallback = (_) => { };\n this.onTouchedCallback = (_) => { };\n /**\n * Used for the default virtualization settings config.\n */\n this.defaultVirtualItemHeight = 28;\n /**\n * Used for the default virtualization settings config.\n */\n this.defaultVirtualPageSize = 50;\n this._filtering = false;\n this._text = '';\n this.filterText = '';\n this._open = false;\n this._popupSettings = { animate: true };\n this.popupMouseDownHandler = (event) => event.preventDefault();\n this.customValueSubject = new Subject();\n this.valueSubject = new Subject();\n this.clearValueSubject = new Subject();\n this.subs = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.data = [];\n }\n set text(text) {\n this._text = isPresent(text) ? text.toString() : \"\";\n }\n get text() {\n return this._text;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n get activeDescendant() {\n if (!this.isOpen || !isPresent(this.selectionService.focused) || this.selectionService.focused === -1) {\n return null;\n }\n const dataItem = this.dataService.itemAt(this.selectionService.focused);\n return this.optionPrefix + \"-\" + (dataItem ? getter$1(dataItem, this.valueField) : \"\");\n }\n get noDataLabel() {\n if (this.data.length === 0) {\n return this.noDataText;\n }\n }\n get clearTitle() {\n return this.localization.get('clearTitle');\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the ComboBox.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n this.setState();\n if (this._filtering) {\n const queryAndDataPresent = this.text.length > 0 && this.dataService.itemsCount > 0;\n const index = queryAndDataPresent ? this.firstFocusableIndex(0) : -1;\n this.selectionService.focused = index;\n }\n if (this.suggest && this.dataService.itemsCount && this.text) {\n this.suggestedText = getter$1(this.dataService.itemAt(0), this.textField);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the ComboBox.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the dataset are considered custom values.\n * > When the `Enter` key is pressed or the component loses focus, custom values get dismissed unless `allowCustom` is set to `true`.\n */\n set value(newValue) {\n this._value = newValue;\n this.setState();\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the type of the selected value.\n * If set to `true`, the selected value has to be of the primitive type\n * ([more information and example]({% slug valuebinding_combobox %}#toc-primitive-values-from-object-fields)).\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n /**\n * Configures the popup of the ComboBox.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_combobox %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_combobox %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings, {\n itemHeight: this.defaultVirtualItemHeight,\n pageSize: this.defaultVirtualPageSize\n });\n }\n get virtual() {\n return this._virtualSettings;\n }\n get clearable() {\n return this.clearButton;\n }\n get dir() {\n return this.direction;\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n this.renderer[value ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, \"k-state-focused\");\n this._isFocused = value;\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n get popupWidth() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get popupHeight() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, 'tabindex');\n this.attachStreams();\n this.createValueStream();\n this.subscribeTouchEvents();\n this.attachSelectClickHandler();\n this.setMessages();\n }\n createValueStream() {\n const valueStream = this.valueSubject.pipe(filter((candidate) => {\n const current = getter$1(this.value, this.valueField);\n const newValue = getter$1(candidate, this.valueField);\n let newText = getter$1(candidate, this.textField);\n if (!isPresent(this.value) && !isPresent(newValue)) {\n return false;\n }\n if (isPresent(newText)) {\n newText = newText.toString();\n }\n if (current === newValue && this.text === newText) {\n this.clearFilter();\n return false;\n }\n else {\n return true;\n }\n }), map((candidate) => {\n const newValue = getter$1(candidate, this.valueField);\n const newText = getter$1(candidate, this.textField);\n return {\n dataItem: candidate,\n text: newText,\n value: this.valuePrimitive ? newValue : candidate\n };\n }));\n const customValueStreams = partition(() => this.allowCustom)(this.customValueSubject.pipe(throttleTime(300)));\n const allowCustomValueStream = customValueStreams[0].pipe(tap(() => {\n this.loading = true;\n this.disabled = true;\n this.cdr.detectChanges();\n }), filter(() => {\n const hasChange = this.text !== getter$1(this.value, this.valueField);\n this.loading = hasChange;\n this.disabled = hasChange;\n if (!hasChange) {\n this.clearFilter();\n }\n return hasChange;\n }), this.valueNormalizer, map((normalizedValue) => {\n return {\n custom: true,\n dataItem: normalizedValue,\n text: this.text,\n value: normalizedValue\n };\n }));\n const disableCustomValueStream = customValueStreams[1].pipe(map(() => {\n return {\n custom: true,\n dataItem: undefined,\n text: undefined,\n value: undefined\n };\n }));\n const clearValueStream = this.clearValueSubject.pipe(map(() => ({\n dataItem: undefined,\n text: undefined,\n value: undefined\n })));\n if (this.valueSubscription) {\n this.valueSubscription.unsubscribe();\n }\n const merged = merge(valueStream, allowCustomValueStream, disableCustomValueStream, clearValueStream);\n this.valueSubscription = merged.pipe(catchError(() => {\n const selectionChanged = getter$1(this.dataItem, this.valueField) !== undefined;\n this.dataItem = undefined;\n this.value = undefined;\n this.text = undefined;\n this.loading = false;\n this.disabled = false;\n if (selectionChanged) {\n this.selectionChange.emit(undefined);\n }\n this.emitValueChange();\n this.createValueStream();\n return of(null);\n }))\n .subscribe((state) => {\n const selectionChanged = getter$1(this.dataItem, this.valueField) !== getter$1(state.dataItem, this.valueField);\n this.dataItem = state.dataItem;\n this.value = state.value;\n this.text = state.text;\n this.loading = false;\n this.disabled = false;\n this.clearFilter();\n if (state.custom) {\n this.selectionService.focused = -1;\n }\n if (selectionChanged) {\n const selectionArgs = state.custom ? undefined : this.dataItem;\n this.selectionChange.emit(selectionArgs);\n }\n this.emitValueChange();\n });\n }\n attachStreams() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subs.add(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.setMessages();\n }));\n this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.home, this.navigationService.end)\n .pipe(filter((event) => isPresent(event.index)))\n .subscribe((event) => this.navigate(event.index)));\n this.subs.add(this.navigationService.open.subscribe(this.handleNavigationOpen.bind(this)));\n this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));\n this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));\n this.subs.add(this.navigationService.enter.pipe(tap((event) => {\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n }))\n .subscribe(this.handleEnter.bind(this)));\n this.subs.add(merge(this.selectionService.onChange, this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)))\n .pipe(tap(_ => {\n this._filtering = false;\n this.togglePopup(false);\n }), map((event) => this.dataService.itemAt(event.indices[0])))\n .subscribe(dataItem => {\n this.change(dataItem);\n }));\n this.subs.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), tap(_ => this._filtering = false), map((event) => this.dataService.itemAt(event.indices[0])))\n .subscribe(dataItem => {\n const selectionChanged = getter$1(dataItem, this.valueField) !== getter$1(this.dataItem, this.valueField);\n this.updateState({ dataItem });\n if (selectionChanged) {\n this.selectionChange.emit(dataItem);\n }\n }));\n }\n ngOnDestroy() {\n this.destroyPopup();\n clearTimeout(this.messagesTimeout);\n this.subs.unsubscribe();\n if (isPresent(this.valueSubscription)) {\n this.valueSubscription.unsubscribe();\n }\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n if (this.selectClickDisposeHandler) {\n this.selectClickDisposeHandler();\n }\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('valueNormalizer', changes)) {\n this.createValueStream();\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.setState();\n }\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * Focuses a specific item of the ComboBox based on a provided index.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const isInRange = index >= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n /**\n * Focuses the ComboBox.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * Blurs the ComboBox.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to open or close the popup,\n * the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n this.cdr.markForCheck();\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the ComboBox.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = undefined;\n this.clearState();\n this.resetSelection();\n }\n /**\n * @hidden\n *\n * Used by the TextBoxContainer to determine if the floating label\n * should be rendered in the input when the component is not focused.\n */\n isEmpty() {\n const textEmpty = !isPresent(this.text) || isEmptyString(this.text);\n const valueEmpty = !isPresent(this.value) || isEmptyString(this.value);\n return textEmpty && valueEmpty;\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this._filtering = true;\n this._previousDataItem = undefined;\n this.selectionService.resetSelection([]);\n this.clearValueSubject.next();\n this._filtering = false;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value === null ? undefined : value;\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 */\n get buttonClasses() {\n return this.loading ? 'k-i-loading' : this.iconClass || 'k-i-arrow-s';\n }\n /**\n * @hidden\n */\n onResize() {\n if (this.isOpen) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.popupWidth;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(ComboBoxMessages.primitive);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(ComboBoxMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(ComboBoxMessages.textAndValue);\n }\n if (this.virtual && isNaN(this.virtual.itemHeight)) {\n throw new Error(ComboBoxMessages.noItemHeight);\n }\n }\n setState() {\n // Filtering in process, do nothing.\n if (this._filtering) {\n return;\n }\n const value = this.value;\n const valueField = this.valueField;\n const resolved = this.findDataItem({ valueField, value });\n if (isPresent(resolved.index) && resolved.index !== -1) {\n this.updateState({ dataItem: resolved.dataItem, confirm: true });\n this.resetSelection(resolved.index);\n }\n else if (isPresent(value) && this.allowCustom) {\n this.updateState({ dataItem: value });\n this.resetSelection(-1);\n }\n else if (this._previousDataItem && this.value) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else {\n this.clearState();\n this.resetSelection(-1);\n }\n }\n updateState({ dataItem, confirm = false }) {\n this.dataItem = dataItem;\n this.text = getter$1(dataItem, this.textField);\n if (confirm) {\n this._previousDataItem = dataItem;\n }\n }\n clearState() {\n this.text = undefined;\n this.dataItem = undefined;\n }\n resetSelection(index) {\n const clear = !isPresent(index) || index < 0;\n this.selectionService.resetSelection(clear ? [] : [index]);\n this.selectionService.focused = index;\n }\n firstFocusableIndex(index) {\n const maxIndex = this.data.length - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n findIndexPredicate(text) {\n if (this.dataService.grouped) {\n return (item) => {\n let itemText = getter$1(item.value, this.textField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n else {\n return (item) => {\n let itemText = getter$1(item, this.textField);\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return itemText.startsWith(text.toLowerCase());\n };\n }\n }\n findDataItem({ valueField, value }) {\n const result = {\n dataItem: null,\n index: -1\n };\n const comparer = (element) => {\n const dataItem = this.dataService.grouped ? element.value : element;\n return getter$1(dataItem, valueField) === getter$1(value, valueField);\n };\n const index = this.dataService.findIndex(comparer);\n result.dataItem = this.dataService.itemAt(index);\n result.index = index;\n return result;\n }\n search(text, startFrom = 0) {\n let index;\n if (text.length && this.dataService.itemsCount) {\n index = this.dataService.findIndex(this.findIndexPredicate(text), startFrom);\n }\n else {\n index = -1;\n }\n if (this.disabledItemsService.isIndexDisabled(index)) {\n if (index + 1 < this.dataService.itemsCount) {\n this.search(text, index + 1);\n }\n else {\n this.selectionService.focus(-1);\n }\n }\n else {\n this.selectionService.focus(index);\n if (this.suggest) {\n this.suggestedText = getter$1(this.dataService.itemAt(index), this.textField);\n }\n }\n }\n /**\n * @hidden\n */\n getSuggestion() {\n const hasSelected = !!this.selectionService.selected.length;\n const shouldSuggest = this.suggest && !this.backspacePressed && this.suggestedText && this.text;\n if (!hasSelected && shouldSuggest && this.suggestedText.toLowerCase().startsWith(this.text.toLowerCase())) {\n return this.suggestedText;\n }\n else {\n this.suggestedText = undefined;\n }\n }\n navigate(index) {\n if (this.dataService.itemsCount === 0) {\n return;\n }\n this.text = getter$1(this.dataService.itemAt(index), this.textField);\n this.selectionService.select(index);\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const hasSelected = isPresent(this.selectionService.selected[0]);\n const focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(0) : this.selectionService.focused;\n let offset = 0;\n if (this.disabled || this.readonly) {\n return;\n }\n if (event.keyCode === Keys.Home || event.keyCode === Keys.End) {\n return;\n }\n if (!hasSelected) {\n if (event.keyCode === Keys.ArrowDown) {\n offset = -1;\n }\n else if (event.keyCode === Keys.ArrowUp) {\n offset = 1;\n }\n }\n const action = this.navigationService.process({\n current: offset + focused,\n max: this.dataService.itemsCount - 1,\n min: 0,\n originalEvent: event\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Left &&\n action !== NavigationAction.Right &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n handleEnter() {\n const text = this.text;\n const focused = this.selectionService.focused;\n const hasFocused = isPresent(focused) && focused !== -1;\n const previousText = getter$1(this._previousDataItem, this.textField) || \"\";\n const focusedItemText = getter$1(this.dataService.itemAt(focused), this.textField);\n const textHasChanged = text !== previousText;\n this.togglePopup(false);\n this._filtering = false;\n if (this.allowCustom && textHasChanged) {\n if (text === focusedItemText || this.useSuggestion()) {\n this.selectionService.change(focused);\n }\n else {\n this.change(text, true);\n }\n }\n if (!this.allowCustom) {\n if (hasFocused) {\n this.selectionService.change(focused);\n }\n else if (textHasChanged) {\n this.change(text, true);\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur() {\n this._filtering = false;\n this.searchbar.input.nativeElement.scrollLeft = 0; // Firefox doesn't auto-scroll to the left on blur like other browsers\n this.isFocused = false;\n const unresolvedSelection = getter$1(this.dataItem, this.valueField) !== getter$1(this.value, this.valueField);\n const currentText = this.searchbar.value;\n const textHasChanged = currentText !== (getter$1(this.dataItem, this.textField) || '');\n const valueHasChanged = unresolvedSelection || textHasChanged;\n const runInZone = valueHasChanged || hasObservers(this.onBlur) || hasObservers(this.close) || isUntouched(this.hostElement.nativeElement);\n if (runInZone) {\n this.zone.run(() => {\n if (valueHasChanged) {\n const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();\n if (lowerCaseMatch || unresolvedSelection) {\n this.selectionService.change(this.selectionService.focused);\n }\n else {\n this.change(currentText, true);\n }\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n this.togglePopup(false);\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleEscape() {\n this.togglePopup(false);\n // clear the focus only if the focused item is not selected\n const hasSelected = this.selectionService.selected.length > 0;\n if (!hasSelected) {\n this.suggestedText = null;\n this.selectionService.focused = -1;\n }\n }\n /**\n * @hidden\n */\n handleNavigationOpen() {\n this.restoreItemFocus();\n this.togglePopup(true);\n }\n /**\n * @hidden\n */\n searchBarChange(text) {\n const currentTextLength = this.text ? this.text.length : 0;\n this.backspacePressed = (text.length < currentTextLength) ? true : false;\n this.text = text;\n // Reset the selection prior to filter. If a match is present, it will be resolved. If a match is not present, it is not needed.\n this.selectionService.resetSelection([]);\n this.togglePopup(true);\n this._filtering = true;\n if (this.filterable && this.filterText !== text) {\n this.filterText = text;\n this.filterChange.emit(text);\n }\n else {\n this.search(text);\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => this.onFocus.emit());\n }\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n change(candidate, isCustom = false) {\n if (isCustom) {\n this.customValueSubject.next(candidate);\n }\n else {\n this.valueSubject.next(candidate);\n }\n }\n emitValueChange() {\n this.onChangeCallback(this.value);\n this.valueChange.emit(this.value);\n this._previousDataItem = this.dataItem;\n }\n /**\n * @hidden\n */\n selectClick() {\n if (!this.touchEnabled) {\n this.searchbar.focus();\n }\n if (!this.isOpen) {\n this.restoreItemFocus();\n }\n this.togglePopup(!this.isOpen);\n }\n get listContainerClasses() {\n return ['k-list-container', 'k-reset'].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n preventEventDefault(event) {\n event.preventDefault();\n }\n get focusedItemText() {\n const focused = this.selectionService.focused;\n if (!isPresent(focused) || focused === -1) {\n return null;\n }\n const itemText = getter$1(this.dataService.itemAt(focused), this.textField);\n return !isPresent(itemText) ? \"\" : itemText.toString();\n }\n /**\n * Focuses the first match when there's text in the input field, but no focused item.\n */\n restoreItemFocus() {\n const hasFocus = isPresent(this.selectionService.focused) && this.selectionService.focused > -1;\n if (!hasFocus && this.text && this.dataService.itemsCount) {\n if (this.filterable) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n else {\n this.search(this.text);\n }\n }\n }\n useSuggestion() {\n if (!(this.suggest && isPresent(this.searchbar.value))) {\n return false;\n }\n const focusedDataItem = this.dataService.itemAt(this.selectionService.focused);\n const focusedItemText = getter$1(focusedDataItem, this.textField);\n if (!isPresent(focusedItemText)) {\n return false;\n }\n return this.searchbar.value.toLowerCase() === focusedItemText.toLowerCase();\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute',\n anchorAlign: anchorPosition,\n popupAlign: popupPosition\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.popupWidth;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.popupHeight;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n clearFilter() {\n if (!(this.filterable && this.filterText)) {\n return;\n }\n this.filterText = '';\n this.filterChange.emit(this.filterText);\n }\n setMessages() {\n this.zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.noDataText = this.localization.get('noDataText');\n this.cdr.detectChanges();\n });\n });\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this.zone.runOutsideAngular(() => \n // Roll up ComboBox on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n const isInDropDown = inDropDown(this.hostElement, target, this.popupRef);\n if (this.isFocused && !isInDropDown) {\n // Close popup and mobile keyboard if searchbar is focused\n this.zone.run(() => this.blur());\n }\n else if (this.isOpen && !isInDropDown) {\n // Close popup if the popup is opened via the select click\n this.zone.run(() => this.togglePopup(false));\n }\n }));\n }\n attachSelectClickHandler() {\n const selectElement = this.select.nativeElement;\n const event = pointers ? 'pointerdown' : 'click';\n this.selectClickDisposeHandler = this.renderer.listen(selectElement, event, this.selectClick.bind(this));\n }\n};\nComboBoxComponent.ɵfac = function ComboBoxComponent_Factory(t) { return new (t || ComboBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nComboBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ComboBoxComponent, selectors: [[\"kendo-combobox\"]], contentQueries: function ComboBoxComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ItemTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FixedGroupTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fixedGroupTemplate = _t.first);\n } }, viewQuery: function ComboBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(SearchBarComponent, 7);\n ɵngcc0.ɵɵviewQuery(_c13, 5);\n ɵngcc0.ɵɵviewQuery(_c19, 7);\n ɵngcc0.ɵɵviewQuery(_c20, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.searchbar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionsList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.select = _t.first);\n } }, hostVars: 7, hostBindings: function ComboBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-combobox\", ctx.widgetClasses)(\"k-combobox-clearable\", ctx.clearable);\n } }, inputs: { focusableId: \"focusableId\", allowCustom: \"allowCustom\", valueNormalizer: \"valueNormalizer\", placeholder: \"placeholder\", listHeight: \"listHeight\", suggest: \"suggest\", clearButton: \"clearButton\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", filterable: \"filterable\", data: \"data\", value: \"value\", valuePrimitive: \"valuePrimitive\", popupSettings: \"popupSettings\", itemDisabled: \"itemDisabled\", tabIndex: \"tabIndex\", virtual: \"virtual\", loading: \"loading\", textField: \"textField\", valueField: \"valueField\", iconClass: \"iconClass\" }, outputs: { valueChange: \"valueChange\", selectionChange: \"selectionChange\", filterChange: \"filterChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoComboBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n COMBOBOX_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.combobox'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => ComboBoxComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 21, consts: function () { let i18n_21; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.combobox.noDataText\n */\n const MSG_EXTERNAL_7708502966028483300$$DIST_FESM2015_INDEX_JS_22 = goog.getMsg(\"NO DATA FOUND\");\n i18n_21 = MSG_EXTERNAL_7708502966028483300$$DIST_FESM2015_INDEX_JS_22;\n }\n else {\n i18n_21 = $localize `:kendo.combobox.noDataText|The text displayed in the popup when there are no items␟2b6e00c74a6d9c98c03a6274d0224e9bd457ff89␟7708502966028483300:NO DATA FOUND`;\n } let i18n_23; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.combobox.clearTitle\n */\n const MSG_EXTERNAL_2025597431468961462$$DIST_FESM2015_INDEX_JS_24 = goog.getMsg(\"clear\");\n i18n_23 = MSG_EXTERNAL_2025597431468961462$$DIST_FESM2015_INDEX_JS_24;\n }\n else {\n i18n_23 = $localize `:kendo.combobox.clearTitle|The title of the clear button␟069e8fae80677e3e785861123bef446b3ff41ab4␟2025597431468961462:clear`;\n } return [[\"kendoComboBoxLocalizedMessages\", \"\", \"noDataText\", i18n_21, \"clearTitle\", i18n_23], [\"unselectable\", \"on\", 1, \"k-dropdown-wrap\", 3, \"ngClass\"], [\"wrapper\", \"\"], [3, \"role\", \"id\", \"listId\", \"activeDescendant\", \"noDataLabel\", \"userInput\", \"suggestedText\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"placeholder\", \"onNavigate\", \"valueChange\", \"onBlur\", \"onFocus\"], [\"searchbar\", \"\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"aria-hidden\", \"true\", 3, \"visibility\", \"kendoEventsOutsideAngular\", \"click\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", \"unselectable\", \"on\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\"], [\"select\", \"\"], [1, \"k-icon\", 3, \"ngClass\"], [\"popupTemplate\", \"\"], [3, \"ngIf\"], [\"container\", \"\"], [\"aria-hidden\", \"true\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"kendoEventsOutsideAngular\", \"click\"], [4, \"ngIf\"], [3, \"id\", \"optionPrefix\", \"data\", \"textField\", \"valueField\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"height\", \"show\", \"virtual\", \"pageChange\"], [\"optionsList\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [3, \"templateContext\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"resize\"]]; }, template: function ComboBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2)(3, \"kendo-searchbar\", 3, 4);\n ɵngcc0.ɵɵlistener(\"onNavigate\", function ComboBoxComponent_Template_kendo_searchbar_onNavigate_3_listener($event) { return ctx.handleNavigate($event); })(\"valueChange\", function ComboBoxComponent_Template_kendo_searchbar_valueChange_3_listener($event) { return ctx.searchBarChange($event); })(\"onBlur\", function ComboBoxComponent_Template_kendo_searchbar_onBlur_3_listener() { return ctx.handleBlur(); })(\"onFocus\", function ComboBoxComponent_Template_kendo_searchbar_onFocus_3_listener() { return ctx.handleFocus(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, ComboBoxComponent_span_5_Template, 1, 6, \"span\", 5);\n ɵngcc0.ɵɵelementStart(6, \"span\", 6, 7);\n ɵngcc0.ɵɵelement(8, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, ComboBoxComponent_ng_template_9_Template, 5, 14, \"ng-template\", null, 9, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(11, ComboBoxComponent_ng_template_11_Template, 1, 0, \"ng-template\", 10);\n ɵngcc0.ɵɵelementContainer(12, null, 11);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(17, _c26, ctx.disabled));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"role\", \"combobox\")(\"id\", ctx.focusableId)(\"listId\", ctx.listBoxId)(\"activeDescendant\", ctx.activeDescendant)(\"noDataLabel\", ctx.noDataLabel)(\"userInput\", ctx.text)(\"suggestedText\", ctx.getSuggestion())(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"tabIndex\", ctx.tabIndex)(\"popupOpen\", ctx.isOpen)(\"placeholder\", ctx.placeholder);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.clearButton && !ctx.loading && !ctx.disabled && !ctx.readonly && (ctx.text == null ? null : ctx.text.length));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(19, _c25, ctx.preventEventDefault));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.buttonClasses);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isOpen);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc3.NgClass, SearchBarComponent, ɵngcc3.NgIf, ɵngcc2.EventsOutsideAngularDirective, TemplateContextDirective, ListComponent, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"allowCustom\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ComboBoxComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ComboBoxComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ComboBoxComponent.prototype, \"valuePrimitive\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], ComboBoxComponent.prototype, \"valueNormalizer\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ComboBoxComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ComboBoxComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"suggest\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], ComboBoxComponent.prototype, \"itemDisabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ComboBoxComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(\"tabIndex\"),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ComboBoxComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ComboBoxComponent.prototype, \"virtual\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"selectionChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"closed\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], ComboBoxComponent.prototype, \"onBlur\", void 0);\n__decorate([\n ContentChild(ItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ItemTemplateDirective)\n], ComboBoxComponent.prototype, \"template\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], ComboBoxComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], ComboBoxComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], ComboBoxComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n ContentChild(GroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTemplateDirective)\n], ComboBoxComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n ContentChild(FixedGroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", FixedGroupTemplateDirective)\n], ComboBoxComponent.prototype, \"fixedGroupTemplate\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], ComboBoxComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ComboBoxComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild(SearchBarComponent, { static: true }),\n __metadata(\"design:type\", SearchBarComponent)\n], ComboBoxComponent.prototype, \"searchbar\", void 0);\n__decorate([\n ViewChild('optionsList', { static: false }),\n __metadata(\"design:type\", ListComponent)\n], ComboBoxComponent.prototype, \"optionsList\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ComboBoxComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('select', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ComboBoxComponent.prototype, \"select\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-combobox'),\n __metadata(\"design:type\", Boolean)\n], ComboBoxComponent.prototype, \"widgetClasses\", void 0);\n__decorate([\n HostBinding('class.k-combobox-clearable'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ComboBoxComponent.prototype, \"clearable\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], ComboBoxComponent.prototype, \"dir\", null);\nComboBoxComponent = ComboBoxComponent_1 = __decorate([ __param(10, Optional()), __param(10, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [LocalizationService,\n PopupService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n DataService,\n NgZone,\n ChangeDetectorRef,\n Renderer2,\n ElementRef, Boolean])\n], ComboBoxComponent);\n\n/**\n * Renders the selected value of the dropdown. To define the header template, nest an `` tag\n * with the `kendoValueTemplate` directive inside the component tag.\n *\n * The template context is set to the current component.\n * To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * > The `ValueTemplate` directive can only be used with the DropDownList and DropDownTree components.\n *\n * - [Using `ValueTemplate` with the DropDownList]({% slug templates_ddl %}#toc-value-template)\n * - [Using `ValueTemplate` with the DropDownTree]({% slug templates_ddt %}#toc-value-template)\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet ValueTemplateDirective = class ValueTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nValueTemplateDirective.ɵfac = function ValueTemplateDirective_Factory(t) { return new (t || ValueTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nValueTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ValueTemplateDirective, selectors: [[\"\", \"kendoDropDownListValueTemplate\", \"\"], [\"\", \"kendoDropDownTreeValueTemplate\", \"\"]] });\nValueTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], ValueTemplateDirective);\n\n/* tslint:disable:member-ordering */\nvar DropDownListComponent_1;\n/**\n * @hidden\n */\nconst DROPDOWNLIST_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownListComponent)\n};\n/**\n * Represents the [Kendo UI DropDownList component for Angular]({% slug overview_ddl %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet DropDownListComponent = DropDownListComponent_1 = class DropDownListComponent {\n constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, _zone, renderer, hostElement, cdr, touchEnabled$$1) {\n this.localization = localization;\n this.popupService = popupService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.dataService = dataService;\n this._zone = _zone;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.cdr = cdr;\n this.touchEnabled = touchEnabled$$1;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Enables the [filtering]({% slug filtering_ddl %}) functionality of the DropDownList.\n */\n this.filterable = false;\n /**\n * Enables a case-insensitive search. When filtration is disabled, use this option.\n */\n this.ignoreCase = true;\n /**\n * Sets the delay before an item search is performed. When filtration is disabled, use this option.\n */\n this.delay = 500;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires each time the value is changed ([see example]({% slug overview_ddl %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user types in the input field\n * ([see example]({% slug overview_ddl %}#toc-events)).\n * You can filter the source based on the passed filtration value.\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the item selection is changed\n * ([see example]({% slug overview_ddl %}#toc-events)).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_ddl %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_ddl %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the DropDownList.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the DropDownList gets blurred.\n */\n this.onBlur = new EventEmitter();\n this.widgetClasses = true;\n this.groupIndices = [];\n this.listBoxId = guid$1();\n this.optionPrefix = guid$1();\n this.filterText = \"\";\n this._isFocused = false;\n this.onTouchedCallback = (_) => { };\n this.onChangeCallback = (_) => { };\n this.word = \"\";\n this.last = \"\";\n this.filterFocused = new EventEmitter();\n this.filterBlurred = new EventEmitter();\n this.wrapperFocused = new EventEmitter();\n this.wrapperBlurred = new EventEmitter();\n this.selectionSubscription = new Subscription();\n this._open = false;\n this._popupSettings = { animate: true };\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.data = [];\n this.subscribeEvents();\n this.subscribeTouchEvents();\n this.popupMouseDownHandler = this.onMouseDown.bind(this);\n }\n get width() {\n const wrapperWidth = isDocumentAvailable() ? this.wrapper.nativeElement.offsetWidth : 0;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get widgetTabIndex() {\n if (this.disabled) {\n return undefined;\n }\n const providedTabIndex = Number(this.tabIndex);\n const defaultTabIndex = 0;\n return !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get ariaExpanded() {\n return this.isOpen;\n }\n get ariaOwns() {\n if (!this.isOpen) {\n return;\n }\n return this.listBoxId;\n }\n get ariaActivedescendant() {\n if (!isPresent(this.dataItem)) {\n return;\n }\n return this.optionPrefix + \"-\" + getter$1(this.dataItem, this.valueField);\n }\n get noDataLabel() {\n if (this.dataService.itemsCount === 0) {\n return this.noDataText;\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the DropDownList.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n this.setState();\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n // Use length instead of itemsCount because of the grouping.\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the DropDownList.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the source are ignored.\n */\n set value(newValue) {\n if (!isPresent(newValue)) {\n this._previousDataItem = undefined;\n }\n this._value = newValue;\n this.setState();\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the DropDownList.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_ddl %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_ddl %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_ddl %}#toc-primitive-values-from-object-fields)).\n * If set to `true`, the selected value has to be of a primitive value.\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n blurComponent() {\n this.wrapperBlurred.emit();\n }\n /**\n * @hidden\n */\n blurFilterInput() {\n this.filterBlurred.emit();\n }\n /**\n * @hidden\n */\n focusComponent() {\n this.wrapperFocused.emit();\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * @hidden\n */\n keydown(event) {\n const firstIndex = isPresent(this.defaultItem) ? -1 : 0;\n let focused = isNaN(this.selectionService.focused) ? this.firstFocusableIndex(firstIndex) : this.selectionService.focused;\n let offset = 0;\n if (this.disabled || this.readonly) {\n return;\n }\n const isHomeEnd = event.keyCode === Keys.Home || event.keyCode === Keys.End;\n const isFilterFocused = this.filterable && this.isFocused && this.isOpen;\n if (isFilterFocused && isHomeEnd) {\n return;\n }\n const hasSelected = isPresent(this.selectionService.selected[0]);\n const focusedItemNotSelected = isPresent(this.selectionService.focused) && !this.selectionService.isSelected(this.selectionService.focused);\n if (!hasSelected || focusedItemNotSelected) {\n if (event.keyCode === Keys.ArrowDown || event.keyCode === Keys.ArrowRight) {\n offset = -1;\n }\n else if (event.keyCode === Keys.ArrowUp || event.keyCode === Keys.ArrowLeft) {\n offset = 1;\n }\n }\n const eventData = event;\n const action = this.navigationService.process({\n current: focused + offset,\n max: this.dataService.itemsCount - 1,\n min: this.defaultItem ? -1 : 0,\n originalEvent: eventData\n });\n const leftRightKeys = (action === NavigationAction.Left) || (action === NavigationAction.Right);\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n action !== NavigationAction.Backspace &&\n action !== NavigationAction.Delete &&\n !(leftRightKeys && this.filterable) &&\n action !== NavigationAction.Enter //enter when popup is opened is handled before `handleEnter`\n ) {\n eventData.preventDefault();\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n if (this.disabled || this.readonly || this.filterable) {\n return;\n }\n this.onKeyPress(event);\n }\n /**\n * @hidden\n */\n click(event) {\n event.preventDefault();\n this.focus();\n this.togglePopup(!this.isOpen);\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n get dir() {\n return this.direction;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-state-focused');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n this.localizationChangesSubscription = this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.setMessages();\n });\n this.setMessages();\n this.assignAriaDescribedBy();\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n const value = this.value;\n return !(value === 0 || value === false || value || this.defaultItem);\n }\n /**\n * @hidden\n */\n onFilterFocus() {\n this.filterFocused.emit();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n clearTimeout(this.messagesTimeout);\n if (this.localizationChangesSubscription) {\n this.localizationChangesSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('defaultItem', changes, false)) {\n this.disabledItemsService.defaultItem = this.defaultItem;\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive', 'defaultItem', 'itemDisabled'], changes, false)) {\n this.setState();\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * Focuses a specific item of the DropDownList based on a provided index.\n * If there is a default item it is positioned at index -1.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const minIndex = isPresent(this.defaultItem) ? -1 : 0;\n const isInRange = minIndex <= index && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(null);\n }\n }\n /**\n * Focuses the DropDownList.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownList.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_ddl %}#toc-setting-the-initially-opened-component)).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"Expression has changed...\" type error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n });\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n if (!open && this.filterable && this.isFocused) {\n this.focus();\n }\n this._toggle(open);\n }\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the DropDownList.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.value = undefined;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value === null ? undefined : value;\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 */\n get buttonClasses() {\n return this.loading ? 'k-i-loading' : this.iconClass || 'k-i-arrow-s';\n }\n /**\n * @hidden\n */\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n */\n get isDisabledDefaultItem() {\n return this.disabledItemsService.isItemDisabled(this.defaultItem);\n }\n /**\n * @hidden\n */\n getText() {\n return this.text;\n }\n /**\n * @hidden\n */\n getDefaultItemText() {\n return getter$1(this.defaultItem, this.textField);\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: anchorPosition,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute'\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n if (!this.filterable) {\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));\n }\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n updateState({ dataItem, confirm = false }) {\n this.dataItem = dataItem;\n this.text = getter$1(dataItem, this.textField);\n if (confirm) {\n this._previousDataItem = dataItem;\n }\n }\n clearState() {\n this.text = undefined;\n this.dataItem = undefined;\n }\n resetSelection(index) {\n const clear = !isPresent(index);\n this.selectionService.resetSelection(clear ? [] : [index]);\n this.selectionService.focused = clear ? this.firstFocusableIndex(0) : index;\n }\n onSelectionChange({ dataItem }) {\n this.updateState({ dataItem });\n this.selectionChange.emit(dataItem);\n // reassigning the value label ID as aria-deascibedby forces firefox/nvda, forefox/jaws to read\n // the new value when the popup is closed and the value is changed with the arrow keys (up/down)\n this.assignAriaDescribedBy();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n // Item selection when the popup is open.\n this.selectionSubscription.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))\n .subscribe(this.onSelectionChange.bind(this)));\n // Item selection when the popup is closed | clicked | enter, and so on.\n this.selectionSubscription.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))\n .subscribe(({ dataItem, value: newValue, newSelection }) => {\n if (newSelection) {\n this.onSelectionChange({ dataItem });\n }\n const shouldUsePrevious = !isPresent(dataItem) && this._previousDataItem;\n const shouldUseNewValue = newValue !== getter$1(this.value, this.valueField);\n if (shouldUsePrevious) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else if (shouldUseNewValue) {\n this.value = this.valuePrimitive ? newValue : dataItem;\n this._previousDataItem = dataItem;\n this.emitChange(this.value);\n }\n this.clearFilter();\n }));\n this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)\n .pipe(filter((event) => !isNaN(event.index)))\n .subscribe((event) => this.selectionService.select(event.index));\n this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));\n this.closeSubscription = this.navigationService.close.subscribe(() => {\n this.togglePopup(false);\n this.focus();\n });\n this.enterSubscription = this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(this.handleEnter.bind(this));\n this.escSubscription = this.navigationService.esc\n .subscribe(this.handleEscape.bind(this));\n this.filterBlurredSubscription = this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.wrapperFocused))))\n .subscribe(() => {\n this.wrapperBlurred.emit();\n });\n this._zone.runOutsideAngular(() => {\n this.componentBlurredSubscription =\n merge(this.wrapperBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))\n .subscribe(() => this.componentBlur());\n });\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up DropDownList on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.hostElement, target, this.popupRef)) {\n this._zone.run(() => {\n if (this.filterFocused) {\n // Close popup if filter is focused\n this.togglePopup(false);\n }\n this.blur();\n });\n }\n }));\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.navigationSubscription.unsubscribe();\n this.openSubscription.unsubscribe();\n this.closeSubscription.unsubscribe();\n this.enterSubscription.unsubscribe();\n this.escSubscription.unsubscribe();\n this.componentBlurredSubscription.unsubscribe();\n this.filterBlurredSubscription.unsubscribe();\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n }\n itemFromEvent(event) {\n const index = event.indices[0];\n let dataItem = this.dataService.itemAt(index);\n dataItem = isPresent(dataItem) ? dataItem : this.currentOrDefault(index);\n const value = getter$1(dataItem, this.valueField);\n const newSelection = event.newSelection;\n return {\n dataItem,\n index,\n newSelection,\n value\n };\n }\n currentOrDefault(selectedIndex) {\n const defaultItemIndex = -1;\n if (isPresent(this.dataItem) && selectedIndex !== defaultItemIndex) {\n return this.dataItem;\n }\n else {\n return this.defaultItem;\n }\n }\n firstFocusableIndex(index) {\n const maxIndex = this.dataService.itemsCount - 1;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index < maxIndex) ? this.firstFocusableIndex(index + 1) : undefined;\n }\n else {\n return index;\n }\n }\n handleEnter() {\n if (this.isOpen) {\n this.selectionService.change(this.selectionService.focused);\n this.focus();\n }\n else {\n this.togglePopup(true);\n }\n }\n handleEscape() {\n if (isPresent(this.selectionService.selected[0])) {\n this.selectionService.change(this.selectionService.selected[0]);\n }\n else {\n this.togglePopup(false);\n this.clearFilter();\n }\n this.focus();\n }\n clearFilter() {\n if (!(this.filterable && this.filterText)) {\n return;\n }\n this.filterText = \"\";\n this.cdr.markForCheck();\n this.filterChange.emit(this.filterText);\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.defaultItem && this.valueField && typeof this.defaultItem !== \"object\") {\n throw new Error(DropDownListMessages.defaultItem);\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(DropDownListMessages.primitive);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(DropDownListMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(DropDownListMessages.textAndValue);\n }\n }\n componentBlur() {\n this.isFocused = false;\n const selectionPresent = isPresent(this.selectionService.selected[0]);\n const valueHasChanged = selectionPresent && getter$1(this.value, this.valueField) !== getter$1(this.dataService.itemAt(this.selectionService.selected[0]), this.valueField);\n if (valueHasChanged ||\n hasObservers(this.close) ||\n hasObservers(this.onBlur) ||\n hasObservers(this.filterChange) ||\n isUntouched(this.hostElement.nativeElement)) {\n this._zone.run(() => {\n if (valueHasChanged) {\n this.selectionService.change(this.selectionService.selected[0]);\n }\n this.togglePopup(false);\n this.clearFilter();\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n onMouseDown(event) {\n const tagName = event.target.tagName.toLowerCase();\n if (tagName !== \"input\") {\n event.preventDefault();\n }\n }\n onKeyPress(event) {\n if (event.which === 0 || event.keyCode === Keys.Enter) {\n return;\n }\n let character = String.fromCharCode(event.charCode || event.keyCode);\n if (this.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === \" \") {\n event.preventDefault();\n }\n this.word += character;\n this.last = character;\n this.search();\n }\n search() {\n clearTimeout(this.typingTimeout);\n if (!this.filterable) {\n this.typingTimeout = setTimeout(() => { this.word = \"\"; }, this.delay);\n this.selectNext();\n }\n }\n selectNext() {\n let data = this.dataService\n .filter((item) => isPresent(item) && !item.header && !this.disabledItemsService.isItemDisabled(item))\n .map((item) => {\n if (this.dataService.grouped) {\n return { item: item.value, itemIndex: item.offsetIndex };\n }\n return { item: item, itemIndex: this.dataService.indexOf(item) };\n });\n const isInLoop = sameCharsOnly(this.word, this.last);\n let dataLength = data.length;\n let hasSelected = !isNaN(this.selectionService.selected[0]);\n let startIndex = !hasSelected ? 0 : this.selectionService.selected[0];\n let text, index, defaultItem;\n if (this.defaultItem && !this.disabledItemsService.isItemDisabled(this.defaultItem)) {\n defaultItem = { item: this.defaultItem, itemIndex: -1 };\n dataLength += 1;\n startIndex += 1;\n }\n startIndex += isInLoop && hasSelected ? 1 : 0;\n data = shuffleData(data, startIndex, defaultItem);\n index = 0;\n for (; index < dataLength; index++) {\n text = getter$1(data[index].item, this.textField);\n const loopMatch = Boolean(isInLoop && matchText(text, this.last, this.ignoreCase));\n const nextMatch = Boolean(matchText(text, this.word, this.ignoreCase));\n if (loopMatch || nextMatch) {\n index = data[index].itemIndex;\n break;\n }\n }\n if (index !== dataLength) {\n this.navigate(index);\n }\n }\n emitChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n navigate(index) {\n this.selectionService.select(index);\n }\n findDataItem({ valueField, value }) {\n const result = {\n dataItem: null,\n index: -1\n };\n const prop = dataItem => getter$1(dataItem, valueField);\n let comparer;\n if (this.dataService.grouped) {\n comparer = (element) => {\n return prop(element.value) === prop(value);\n };\n }\n else {\n comparer = (element) => {\n return prop(element) === prop(value);\n };\n }\n const index = this.dataService.findIndex(comparer);\n result.dataItem = this.dataService.itemAt(index);\n result.index = index;\n return result;\n }\n setState() {\n const value = this.value;\n const valueField = this.valueField;\n const textField = this.textField;\n const primitive = this.valuePrimitive;\n if (this.defaultItem) {\n const defaultValue = getter$1(this.defaultItem, valueField);\n const currentValue = getter$1(value, valueField);\n if (!isPresent(value) || (currentValue === defaultValue)) {\n this.updateState({ dataItem: this.defaultItem, confirm: true });\n this.resetSelection(-1);\n if (this.filterable && this.filterText && this.dataService.itemsCount) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n return;\n }\n }\n const resolved = this.findDataItem({ valueField, value });\n // The data and value are of same shape,\n // for example, value: 'foo', data: ['foo', 'bar']\n // or value: { value: 1, text: 'foo' }, data: [{ value: 1, text: 'foo' }].\n const ofSameType = !(primitive && textField);\n if (resolved.dataItem) {\n this.updateState({ dataItem: resolved.dataItem, confirm: true });\n this.resetSelection(resolved.index);\n }\n else if (isPresent(value) && ofSameType) {\n this.updateState({ dataItem: value });\n this.resetSelection();\n }\n else if (this._previousDataItem) {\n this.updateState({ dataItem: this._previousDataItem });\n this.resetSelection();\n }\n else {\n this.clearState();\n this.resetSelection();\n }\n }\n /**\n * @hidden\n */\n handleFilter(event) {\n this.filterChange.emit(event.target.value);\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n setMessages() {\n this._zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.noDataText = this.localization.get('noDataText');\n this.cdr.detectChanges();\n });\n });\n }\n assignAriaDescribedBy() {\n const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';\n const trimmed = currentValue.replace(this.valueLabelId, '').trim();\n // reset the value label ID to force readers to read the new value\n this.valueLabelId = guid$1();\n // add to the current value - don't replace it\n const newValue = `${this.valueLabelId} ${trimmed}`.trim();\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);\n }\n};\nDropDownListComponent.ɵfac = function DropDownListComponent_Factory(t) { return new (t || DropDownListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nDropDownListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DropDownListComponent, selectors: [[\"kendo-dropdownlist\"]], contentQueries: function DropDownListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ItemTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FixedGroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ValueTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fixedGroupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.valueTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n } }, viewQuery: function DropDownListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(_c19, 7);\n ɵngcc0.ɵɵviewQuery(_c13, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionsList = _t.first);\n } }, hostVars: 5, hostBindings: function DropDownListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-dropdown\", ctx.widgetClasses);\n } }, inputs: { focusableId: \"focusableId\", listHeight: \"listHeight\", disabled: \"disabled\", readonly: \"readonly\", filterable: \"filterable\", ignoreCase: \"ignoreCase\", delay: \"delay\", tabindex: \"tabindex\", data: \"data\", value: \"value\", popupSettings: \"popupSettings\", itemDisabled: \"itemDisabled\", virtual: \"virtual\", valuePrimitive: \"valuePrimitive\", tabIndex: \"tabIndex\", iconClass: \"iconClass\", loading: \"loading\", textField: \"textField\", valueField: \"valueField\", defaultItem: \"defaultItem\" }, outputs: { valueChange: \"valueChange\", filterChange: \"filterChange\", selectionChange: \"selectionChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoDropDownList\"], features: [ɵngcc0.ɵɵProvidersFeature([\n DROPDOWNLIST_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownlist'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => DropDownListComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 13, vars: 23, consts: function () { let i18n_27; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.dropdownlist.noDataText\n */\n const MSG_EXTERNAL_8289552890585138350$$DIST_FESM2015_INDEX_JS_28 = goog.getMsg(\"NO DATA FOUND\");\n i18n_27 = MSG_EXTERNAL_8289552890585138350$$DIST_FESM2015_INDEX_JS_28;\n }\n else {\n i18n_27 = $localize `:kendo.dropdownlist.noDataText|The text displayed in the popup when there are no items␟4fc2f70c9c8cf7b18affd6b938105996d6ac3306␟8289552890585138350:NO DATA FOUND`;\n } return [[\"kendoDropDownListLocalizedMessages\", \"\", \"noDataText\", i18n_27], [\"unselectable\", \"on\", \"role\", \"listbox\", \"aria-haspopup\", \"listbox\", 3, \"id\", \"ngClass\", \"kendoEventsOutsideAngular\", \"scope\", \"keydown\", \"keypress\", \"click\"], [\"wrapper\", \"\"], [\"unselectable\", \"on\", 1, \"k-input\", 3, \"id\"], [4, \"ngIf\"], [3, \"ngIf\"], [\"unselectable\", \"on\", 1, \"k-select\"], [\"unselectable\", \"on\", 1, \"k-icon\", 3, \"ngClass\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"templateContext\"], [3, \"id\", \"optionPrefix\", \"data\", \"textField\", \"valueField\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"height\", \"show\", \"virtual\", \"pageChange\"], [\"optionsList\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [1, \"k-list-filter\", 3, \"click\"], [\"tabindex\", \"-1\", 1, \"k-textbox\", 3, \"filterInput\", \"dir\", \"ngModel\", \"ngModelChange\", \"keydown\", \"input\", \"focus\", \"blur\"], [\"unselectable\", \"on\", 1, \"k-icon\", \"k-i-search\"], [\"kendoDropDownsSelectable\", \"\", 1, \"k-list-optionlabel\", 3, \"ngClass\", \"index\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"resize\"]]; }, template: function DropDownListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵlistener(\"keydown\", function DropDownListComponent_Template_span_keydown_1_listener($event) { return ctx.keydown($event); })(\"keypress\", function DropDownListComponent_Template_span_keypress_1_listener($event) { return ctx.keypress($event); })(\"click\", function DropDownListComponent_Template_span_click_1_listener($event) { return ctx.click($event); });\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, DropDownListComponent_4_Template, 1, 4, null, 4);\n ɵngcc0.ɵɵtemplate(5, DropDownListComponent_ng_template_5_Template, 1, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"span\", 6);\n ɵngcc0.ɵɵelement(7, \"span\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, DropDownListComponent_ng_template_8_Template, 8, 17, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(10, DropDownListComponent_ng_template_10_Template, 1, 0, \"ng-template\", 5);\n ɵngcc0.ɵɵelementContainer(11, null, 9);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(18, _c29, ctx.disabled))(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(20, _c1, ctx.focusComponent, ctx.blurComponent))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"readonly\", ctx.readonly)(\"tabindex\", ctx.widgetTabIndex)(\"aria-disabled\", ctx.disabled)(\"aria-readonly\", ctx.readonly)(\"aria-expanded\", ctx.ariaExpanded)(\"aria-owns\", ctx.ariaOwns)(\"aria-activedescendant\", ctx.ariaActivedescendant)(\"aria-label\", ctx.noDataLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.valueLabelId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.valueTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.valueTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.buttonClasses);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isOpen);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc3.NgClass, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf, TemplateContextDirective, ɵngcc5.DefaultValueAccessor, FilterInputDirective, ɵngcc5.NgControlStatus, ɵngcc5.NgModel, SelectableDirective, ListComponent, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownListComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownListComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownListComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownListComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownListComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownListComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownListComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownListComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DropDownListComponent.prototype, \"defaultItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], DropDownListComponent.prototype, \"itemDisabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownListComponent.prototype, \"virtual\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"ignoreCase\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownListComponent.prototype, \"delay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], DropDownListComponent.prototype, \"valuePrimitive\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownListComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(\"tabIndex\"),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], DropDownListComponent.prototype, \"tabIndex\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"selectionChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"closed\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownListComponent.prototype, \"onBlur\", void 0);\n__decorate([\n ContentChild(ItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ItemTemplateDirective)\n], DropDownListComponent.prototype, \"itemTemplate\", void 0);\n__decorate([\n ContentChild(GroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTemplateDirective)\n], DropDownListComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n ContentChild(FixedGroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", FixedGroupTemplateDirective)\n], DropDownListComponent.prototype, \"fixedGroupTemplate\", void 0);\n__decorate([\n ContentChild(ValueTemplateDirective, { static: false }),\n __metadata(\"design:type\", ValueTemplateDirective)\n], DropDownListComponent.prototype, \"valueTemplate\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], DropDownListComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], DropDownListComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], DropDownListComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], DropDownListComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], DropDownListComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], DropDownListComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('optionsList', { static: false }),\n __metadata(\"design:type\", ListComponent)\n], DropDownListComponent.prototype, \"optionsList\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-dropdown'),\n __metadata(\"design:type\", Boolean)\n], DropDownListComponent.prototype, \"widgetClasses\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], DropDownListComponent.prototype, \"dir\", null);\nDropDownListComponent = DropDownListComponent_1 = __decorate([ __param(10, Optional()), __param(10, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [LocalizationService,\n PopupService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n DataService,\n NgZone,\n Renderer2,\n ElementRef,\n ChangeDetectorRef, Boolean])\n], DropDownListComponent);\n\n/**\n * Renders the content of the custom list item in the MultiSelect\n * ([see example]({% slug templates_multiselect %}#toc-customizing-the-item-content)).\n * The template context is set to the current component.\n * To get a reference to the current text that is typed by the\n * user, use the `let-customItem` directive.\n *\n * > The `CustomItemTemplate` directive can only be used with the MultiSelect component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * New Item: {{customItem}}\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n *\n */\nlet CustomItemTemplateDirective = class CustomItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nCustomItemTemplateDirective.ɵfac = function CustomItemTemplateDirective_Factory(t) { return new (t || CustomItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCustomItemTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CustomItemTemplateDirective, selectors: [[\"\", \"kendoMultiSelectCustomItemTemplate\", \"\"]] });\nCustomItemTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], CustomItemTemplateDirective);\n\n/**\n * Renders the selected tag value of the MultiSelect\n * ([see example]({% slug templates_multiselect %}#toc-tag-template)).\n * The template context is set to the current component.\n * To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * > The `TagTemplate` directive can only be used with the MultiSelect and MultiSelectTree components.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public items: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet TagTemplateDirective = class TagTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nTagTemplateDirective.ɵfac = function TagTemplateDirective_Factory(t) { return new (t || TagTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nTagTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TagTemplateDirective, selectors: [[\"\", \"kendoMultiSelectTagTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeTagTemplate\", \"\"]] });\nTagTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], TagTemplateDirective);\n\n/**\n * Renders the grouped tag values in the MultiSelect\n * ([see example]({% slug summarytagmode_multiselect %})).\n * The template context is set to the current component.\n * To get a reference to the current grouped\n * data items collection, use the `let-dataItems` directive.\n *\n * > The `GroupTagTemplate` directive can only be used with the MultiSelect and MultiSelectTree components.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItems.length}} item(s) selected\n * \n * \n * `\n * })\n * class AppComponent {\n * public items: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet GroupTagTemplateDirective = class GroupTagTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nGroupTagTemplateDirective.ɵfac = function GroupTagTemplateDirective_Factory(t) { return new (t || GroupTagTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nGroupTagTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: GroupTagTemplateDirective, selectors: [[\"\", \"kendoMultiSelectGroupTagTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeGroupTagTemplate\", \"\"]] });\nGroupTagTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], GroupTagTemplateDirective);\n\n/**\n * Arguments for the `removeTag` event. The `removeTag` event fires when a tag is about\n * to the removed. If you cancel the event, the removal is prevented.\n */\nclass RemoveTagEvent extends PreventableEvent {\n /**\n * Constructs the event arguments for the `remove` event.\n * @param dataItem - The data item or an array of data items that will be removed.\n */\n constructor(dataItem) {\n super();\n this.dataItem = dataItem;\n }\n}\n\n/**\n * @hidden\n */\nconst normalizeCheckboxesSettings = (settings) => {\n if (isObject(settings)) {\n const defaultSettings = { enabled: true, checkOnClick: true };\n return Object.assign({}, defaultSettings, settings);\n }\n return { enabled: Boolean(settings), checkOnClick: true };\n};\n\n/* tslint:disable:member-ordering */\nvar MultiSelectComponent_1;\nconst MULTISELECT_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n // tslint:disable-next-line:no-use-before-declare\n useExisting: forwardRef(() => MultiSelectComponent)\n};\n/**\n * Represents the [Kendo UI MultiSelect component for Angular]({% slug overview_multiselect %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [\"Item 1\", \"Item 2\", \"Item 3\", \"Item 4\"];\n * }\n * ```\n */\nlet MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {\n constructor(localization, popupService, dataService, selectionService, navigationService, disabledItemsService, cdr, differs, renderer, hostElement, _zone, touchEnabled$$1) {\n this.localization = localization;\n this.popupService = popupService;\n this.dataService = dataService;\n this.selectionService = selectionService;\n this.navigationService = navigationService;\n this.disabledItemsService = disabledItemsService;\n this.cdr = cdr;\n this.differs = differs;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this._zone = _zone;\n this.touchEnabled = touchEnabled$$1;\n this.listBoxId = guid$1();\n this.tagListId = guid$1();\n this.tagPrefix = \"tag-\" + guid$1();\n this.optionPrefix = \"option-\" + guid$1();\n this.focusedTagIndex = undefined;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid$1()}`;\n /**\n * Determines whether to close the options list of the MultiSelect after the item selection is finished\n * ([see example]({% slug openstate_multiselect %}#toc-keeping-the-options-list-open-while-on-focus)).\n * @default true\n */\n this.autoClose = true;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Enables the [filtering]({% slug filtering_multiselect %}) functionality of the MultiSelect.\n */\n this.filterable = false;\n /**\n * Sets the height of the suggestions list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of suggestions and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to an empty array and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * A user-defined callback function which receives an array of selected data items and maps them to an array of tags.\n *\n * @param { Any[] } dataItems - The selected data items from the list.\n * @returns { Any[] } - The tags that will be rendered by the component.\n */\n this.tagMapper = (tags) => tags || [];\n /**\n * Specifies whether the MultiSelect allows user-defined values that are not present in the dataset\n * ([more information and examples]({% slug custom_values_multiselect %})).\n * Defaults to `false`.\n */\n this.allowCustom = false;\n /**\n * A user-defined callback function which returns normalized custom values.\n * Typically used when the data items are different from type `string`.\n *\n * @param { Any } value - The custom value that is defined by the user.\n * @returns { Any }\n *\n * @example\n * ```ts\n * import { map } from 'rxjs/operators';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public listItems: Array<{ text: string, value: number }> = [\n * { text: \"Small\", value: 1 },\n * { text: \"Medium\", value: 2 },\n * { text: \"Large\", value: 3 }\n * ];\n *\n * public onValueChange(value) {\n * console.log(\"valueChange : \", value);\n * }\n *\n * public valueNormalizer = (text$: Observable) => text$.pipe(map((text: string) => {\n * return {\n * value: Math.floor(Math.random() * (1000 - 100) + 1000), //generate unique valueField\n * text: text };\n * }));\n *\n * }\n * ```\n */\n this.valueNormalizer = (text) => text.pipe(map((userInput) => {\n const comparer = (item) => typeof item === 'string' && userInput.toLowerCase() === item.toLowerCase();\n const matchingValue = this.value.find(comparer);\n if (matchingValue) {\n return matchingValue;\n }\n const matchingItem = this.dataService.find(comparer);\n return matchingItem ? matchingItem : userInput;\n }));\n /**\n * Fires each time the user types in the input field.\n * You can filter the source based on the passed filtration value.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_multiselect %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_multiselect %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_multiselect %}#toc-preventing-opening-and-closing)).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires each time the user focuses the MultiSelect.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the MultiSelect gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time a tag is about to be removed.\n * This event is preventable. If you cancel it, the tag will not be removed.\n */\n this.removeTag = new EventEmitter();\n this.widgetClasses = true;\n this.initialized = false;\n this.onChangeCallback = (_) => { };\n this.onTouchedCallback = (_) => { };\n this._placeholder = '';\n this._open = false;\n this._value = [];\n this._popupSettings = { animate: true };\n this._checkboxes = { enabled: false };\n this._isFocused = false;\n this.selectedDataItems = [];\n this.customValueSubject = new Subject();\n this.observableSubscriptions = new Subscription();\n validatePackage(packageMetadata);\n this.popupMouseDownHandler = this.onMouseDown.bind(this);\n this.data = [];\n this.direction = this.localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n this.subscribeTouchEvents();\n }\n /**\n * Focuses a specific item of the MultiSelect based on a provided index.\n * If there is a custom item it is positioned at index -1.\n * If null or invalid index is provided the focus will be removed.\n */\n focusItemAt(index) {\n const minIndex = this.allowCustom ? -1 : 0;\n const isInRange = minIndex <= 0 && index < this.data.length;\n if (isPresent(index) && isInRange && !this.disabledItemsService.isIndexDisabled(index)) {\n this.selectionService.focus(index);\n }\n else {\n this.selectionService.focus(null);\n }\n }\n /**\n * Focuses the MultiSelect.\n */\n focus() {\n if (!this.disabled) {\n this.searchbar.focus();\n }\n }\n /**\n * @hidden\n */\n onSearchBarFocus() {\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * Blurs the MultiSelect.\n */\n blur() {\n if (!this.disabled) {\n this.searchbar.blur();\n }\n }\n /**\n * @hidden\n */\n onSearchBarBlur() {\n if (!this.isFocused) {\n return;\n }\n this.isFocused = false;\n if (hasObservers(this.onBlur) ||\n hasObservers(this.filterChange) ||\n hasObservers(this.close) ||\n isUntouched(this.hostElement.nativeElement)) {\n this._zone.run(() => {\n this.closePopup();\n if (!(this.isOpen && this.allowCustom)) {\n this.clearFilter();\n }\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n if (!this.allowCustom) {\n this.clearFilter();\n }\n this.closePopup();\n }\n }\n /**\n * @hidden\n */\n wrapperMousedown(event) {\n const inputElement = this.searchbar.input.nativeElement;\n if (event.button === 0) {\n if (this.isFocused && this.isOpen && event.target === inputElement) {\n return;\n }\n if (!this.touchEnabled || (this.touchEnabled && event.target.tagName !== 'SPAN')) {\n this.searchbar.focus();\n }\n this.togglePopup(!this.isOpen);\n event.preventDefault();\n }\n }\n /**\n * @hidden\n */\n onMouseDown(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n onResize() {\n if (this._open) {\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * Sets the data of the MultiSelect.\n *\n * > The data has to be provided in an array-like list of items.\n */\n set data(data) {\n this.dataService.data = data || [];\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n if (this.initialized) {\n this.setState(this.value);\n }\n }\n get data() {\n const virtual = this.virtual;\n if (virtual) {\n const start = virtual.skip || 0;\n const end = start + virtual.pageSize;\n //Use length instead of itemsCount because of grouping\n virtual.total = this.dataService.data.length;\n return this.dataService.data.slice(start, end);\n }\n return this.dataService.data;\n }\n /**\n * Sets the value of the MultiSelect. It can be either of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n * > All selected values which are not present in the source are ignored.\n */\n set value(values) {\n this._value = values ? values : [];\n if (!this.differ && this.value) {\n this.differ = this.differs.find(this.value).create();\n }\n this.valueChangeDetected = true;\n if (this.initialized) {\n this.setState(this.value);\n }\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * The hint which is displayed when the component is empty.\n * When the values are selected, it disappears.\n */\n set placeholder(text) {\n this._placeholder = text || '';\n }\n get placeholder() {\n return this.selectedDataItems.length ? '' : this._placeholder;\n }\n /**\n * Defines a Boolean function that is executed for each data item in the component\n * ([see examples]({% slug disableditems_multiselect %})). Determines whether the item will be disabled.\n */\n set itemDisabled(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`itemDisabled must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this.disabledItemsService.itemDisabled = fn;\n }\n /**\n * Specifies whether checkboxes will be rendered before each item in the popup list.\n */\n set checkboxes(settings) {\n this._checkboxes = normalizeCheckboxesSettings(settings);\n }\n get checkboxes() {\n return this._checkboxes;\n }\n /**\n * Enables the [virtualization]({% slug virtualization_multiselect %}) functionality.\n */\n set virtual(settings) {\n this._virtualSettings = normalizeVirtualizationSettings(settings);\n }\n get virtual() {\n return this._virtualSettings;\n }\n /**\n * Configures the popup of the MultiSelect.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped. The `auto` mode is not supported when virtual scrolling is enabled.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the type of the selected value.\n * If set to `true`, the selected value has to be of the primitive type\n * ([more information and example]({% slug valuebinding_multiselect %}#toc-primitive-values-from-object-fields)).\n */\n set valuePrimitive(isPrimitive) {\n this._valuePrimitive = isPrimitive;\n }\n get valuePrimitive() {\n if (!isPresent(this._valuePrimitive)) {\n return !isPresent(this.valueField);\n }\n return this._valuePrimitive;\n }\n get dir() {\n return this.direction;\n }\n get disabledClass() {\n return this.disabled;\n }\n get listContainerClasses() {\n const containerClasses = ['k-list-container', 'k-reset'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n get width() {\n let wrapperOffsetWidth = 0;\n if (isDocumentAvailable()) {\n wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n }\n const width = this.popupSettings.width || wrapperOffsetWidth;\n const minWidth = isNaN(wrapperOffsetWidth) ? wrapperOffsetWidth : `${wrapperOffsetWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get activeDescendant() {\n const focusedTagIndex = this.focusedTagIndex;\n const focusedListIndex = this.selectionService.focused;\n let prefix;\n let item;\n if (isPresent(focusedTagIndex) && !this.isOpen) {\n item = this.tags[focusedTagIndex];\n prefix = this.tagPrefix;\n }\n else if (isPresent(focusedListIndex) && focusedListIndex !== -1 && this.isOpen) {\n item = this.dataService.itemAt(focusedListIndex);\n prefix = this.optionPrefix;\n }\n else {\n return null;\n }\n return prefix + \"-\" + getter$1(item, this.valueField);\n }\n get noDataLabel() {\n if (this.dataService.itemsCount === 0) {\n return this.noDataText;\n }\n }\n get clearTitle() {\n return this.localization.get('clearTitle');\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * @hidden\n */\n verifySettings() {\n if (!isDevMode() || this.value.length === 0) {\n return;\n }\n if (!isArray(this.value)) {\n throw new Error(MultiselectMessages.array);\n }\n if (this.valuePrimitive === true && isObjectArray(this.value)) {\n throw new Error(MultiselectMessages.primitive);\n }\n if (this.valuePrimitive === false && !isObjectArray(this.value)) {\n throw new Error(MultiselectMessages.object);\n }\n const valueOrText = !isPresent(this.valueField) !== !isPresent(this.textField);\n if (valueOrText) {\n throw new Error(MultiselectMessages.textAndValue);\n }\n }\n /**\n * @hidden\n */\n change(event) {\n const isCustomItem = (isPresent(event.added) || isPresent(event.removed)) && (event.added === -1 || event.removed === -1);\n if (isCustomItem) {\n this.addCustomValue(this.text);\n return; // The change is emited asynchronosly.\n }\n // Existing items.\n if (isPresent(event.added)) {\n const dataItem = this.dataService.itemAt(event.added);\n const newItem = (this.valuePrimitive && isPresent(dataItem) && isPresent(dataItem[this.valueField])) ? dataItem[this.valueField] : dataItem;\n this.value = [...this.value, newItem];\n }\n if (isPresent(event.removed)) {\n const dataItem = this.dataService.itemAt(event.removed);\n const filter$$1 = (item) => getter$1(item, this.valueField) !== getter$1(dataItem, this.valueField);\n this.value = this.value.filter(filter$$1);\n this.selectionService.focused = event.removed;\n this.cdr.detectChanges();\n }\n this.emitValueChange();\n }\n /**\n * @hidden\n */\n setState(value) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const selection = selectedIndices(this.value, data, this.valueField);\n this.selectionService.resetSelection(selection);\n if (this.disabledItemsService.isIndexDisabled(this.selectionService.focused)) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n if (this.isOpen && this.selectionService.focused === undefined) {\n if (this.dataService.itemsCount > 0) {\n this.selectionService.focused = this.firstFocusableIndex(0);\n }\n else if (this.allowCustom) {\n this.selectionService.focused = -1;\n }\n }\n if (this.valuePrimitive && !this.valueField) {\n this.selectedDataItems = value.slice();\n }\n if (isObjectArray(value) || this.valuePrimitive && this.valueField) {\n this.selectedDataItems = resolveAllValues(value, data, this.valueField);\n }\n if (this.selectedDataItems.length < value.length) {\n this.selectedDataItems = value\n .map(current => {\n const dataItem = this.selectedDataItems.find(item => getter$1(item, this.valueField) === getter$1(current, this.valueField));\n return isPresent(dataItem) ? dataItem : this.resolveDataItemFromTags(current);\n })\n .filter(dataItem => isPresent(dataItem));\n }\n this.tags = this.tagMapper(this.selectedDataItems.slice(0));\n this.disabledIndices = this.disabledItemsMapper();\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilter(text) {\n this.text = text;\n if (text && !this.isOpen) {\n this.openPopup();\n }\n if (this.filterable) {\n this.filterChange.emit(text);\n }\n else {\n this.searchTextAndFocus(text);\n }\n this.searchbar.setInputSize();\n }\n /**\n * @hidden\n */\n pageChange(event) {\n const virtual = this.virtual;\n virtual.skip = event.skip;\n }\n /**\n * @hidden\n */\n clearFilter() {\n if (this.filterable && this.text) {\n this.filterChange.emit(\"\");\n }\n this.text = \"\";\n /* Clearing the value from the input as the setInputSize calculation will be incorrect otherwise.\n Calling cdr.detectChanges to clear the input value as a result of property binding\n causes JAWS to read outdated tag values in IE upon tag selection for some reason. */\n this.searchbar.input.nativeElement.value = \"\";\n this.searchbar.setInputSize();\n }\n /**\n * @hidden\n */\n handleNavigate(event) {\n const navigateInput = this.text && event.keyCode !== Keys.ArrowDown && event.keyCode !== Keys.ArrowUp;\n const selectValue = this.text && event.keyCode === Keys.Enter || event.keyCode === Keys.Escape;\n const deleteTag = !this.text && event.keyCode === Keys.Backspace && this.tags.length > 0;\n if (deleteTag) {\n this.handleBackspace();\n return;\n }\n if (this.disabled || navigateInput && !selectValue) {\n return;\n }\n const eventData = event;\n const focused = isNaN(this.selectionService.focused) ? -1 : this.selectionService.focused;\n const action = this.navigationService.process({\n current: focused,\n max: this.dataService.itemsCount - 1,\n min: this.allowCustom && this.text ? -1 : 0,\n open: this.isOpen,\n originalEvent: eventData\n });\n if (action !== NavigationAction.Undefined &&\n ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {\n event.preventDefault();\n }\n }\n /**\n * @hidden\n */\n handleRemoveTag({ tag }) {\n const eventArgs = new RemoveTagEvent(tag);\n if (this.disabled || this.readonly) {\n return;\n }\n this.focus();\n this.removeTag.emit(eventArgs);\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n if (tag instanceof Array) {\n this.removeGroupTag(tag);\n }\n else {\n this.removeSingleTag(tag);\n }\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n clearAll(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n this.focus();\n this.clearFilter();\n const selected = this.selectionService.selected;\n this.value = this.value.filter((_item, index) => this.disabledItemsService.isIndexDisabled(selected[index]));\n this.emitValueChange();\n }\n /**\n * @hidden\n */\n addCustomValue(text) {\n this.customValueSubject.next(text);\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n ngDoCheck() {\n const valueChanges = this.differ && this.differ.diff(this.value);\n if (valueChanges && !this.valueChangeDetected) {\n this.setState(this.value);\n }\n this.valueChangeDetected = false;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n this.createCustomValueStream();\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.setMessages();\n });\n this.setMessages();\n this.setState(this.value);\n this.initialized = true;\n }\n ngOnChanges(changes) {\n const virtual = this.virtual;\n const requestInitialData = virtual && changes.data && changes.data.isFirstChange();\n if (requestInitialData) {\n this.pageChange({ skip: 0, take: virtual.pageSize });\n }\n if (isChanged('valueNormalizer', changes)) {\n this.createCustomValueStream();\n }\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes)) {\n this.setState(this.value);\n }\n }\n ngAfterViewInit() {\n this.searchbar.setInputSize();\n }\n ngOnDestroy() {\n this._toggle(false);\n this.unsubscribeEvents();\n clearTimeout(this.messagesTimeout);\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_multiselect %}#toc-setting-the-initially-opened-component)).\n * If you use the `toggle` method to open or close the popup, the respective `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required for opening the popup on load.\n // Otherwise, the \"Expression has changed...\" type error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !this._open;\n this._toggle(shouldOpen);\n this.cdr.markForCheck();\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this._open;\n }\n /**\n * Resets the value of the MultiSelect.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.\n */\n reset() {\n this.text = \"\";\n this.value = [];\n }\n // NG MODEL BINDINGS\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value || [];\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 */\n onTagMapperChange() {\n this.tags = this.tagMapper(this.selectedDataItems.slice(0));\n this.cdr.markForCheck();\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.hostElement.nativeElement, 'k-state-focused');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n const isOpen = () => this.isOpen;\n const isClosed = () => !this.isOpen;\n const isTagFocused = () => !this.isOpen && this.focusedTagIndex !== undefined;\n [\n this.selectionService.onChange.subscribe(this.handleItemChange.bind(this)),\n this.navigationService.esc.subscribe(this.closePopup.bind(this)),\n this.navigationService.enter.pipe(filter(isOpen)).subscribe(this.handleEnter.bind(this)),\n this.navigationService.open.subscribe(this.openPopup.bind(this)),\n this.navigationService.close.subscribe(this.handleClose.bind(this)),\n this.navigationService.up.pipe(filter(isOpen)).subscribe((event) => this.handleUp(event.index)),\n this.navigationService.home.pipe(filter(() => isClosed)).subscribe(this.handleHome.bind(this)),\n this.navigationService.end.pipe(filter(() => isClosed)).subscribe(this.handleEnd.bind(this)),\n this.navigationService.backspace.pipe(filter(isTagFocused)).subscribe(this.handleBackspace.bind(this)),\n this.navigationService.delete.pipe(filter(isTagFocused)).subscribe(this.handleDelete.bind(this)),\n this.navigationService.left.subscribe(this.direction === 'rtl' ? this.handleRightKey.bind(this) : this.handleLeftKey.bind(this)),\n this.navigationService.right.subscribe(this.direction === 'rtl' ? this.handleLeftKey.bind(this) : this.handleRightKey.bind(this)),\n this.navigationService.down.subscribe((event) => this.handleDownKey(event.index))\n ].forEach(s => this.observableSubscriptions.add(s));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up MultiSelect on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if ((this.isFocused || this.isOpen) && !inDropDown(this.hostElement, target, this.popupRef)) {\n this._zone.run(() => {\n this.blur();\n if (this.isOpen) {\n this.togglePopup(false);\n }\n });\n }\n }));\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.observableSubscriptions.unsubscribe();\n if (this.customValueSubscription) {\n this.customValueSubscription.unsubscribe();\n }\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n removeGroupTag(dataItems) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const dataItemValues = new Set(dataItems.map(item => getter$1(item, this.valueField)));\n this.value = this.value.filter(value => {\n const index = selectedIndices([value], data, this.valueField)[0];\n const isDataItemDisabled = this.disabledItemsService.isIndexDisabled(index);\n return !dataItemValues.has(getter$1(value, this.valueField)) || isDataItemDisabled;\n });\n this.emitValueChange();\n }\n removeSingleTag(dataItem) {\n let data = this.dataService.data;\n if (this.dataService.grouped) {\n data = data.filter(item => !item.header).map(item => item.value);\n }\n const index = selectedIndices([dataItem], data, this.valueField)[0];\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return;\n }\n if (isNumber(index)) {\n this.selectionService.unselect(index);\n this.selectionService.focused = index;\n this.togglePopup(false);\n }\n else { // the deleted item is not present in the source\n const filter$$1 = item => getter$1(item, this.valueField) !== getter$1(dataItem, this.valueField);\n this.value = this.value.filter(filter$$1);\n this.emitValueChange();\n }\n }\n /**\n * @hidden\n *\n * Determines which of the provided tags should be disabled and stores their position indices\n */\n disabledItemsMapper() {\n const { selected } = this.selectionService;\n return new Set(this.selectedDataItems.reduce((indices, _item, index) => {\n if (this.disabledItemsService.isIndexDisabled(selected[index])) {\n indices.push(index);\n }\n return indices;\n }, []));\n }\n createCustomValueStream() {\n if (this.customValueSubscription) {\n this.customValueSubscription.unsubscribe();\n }\n this.customValueSubscription = this.customValueSubject.pipe(tap(() => {\n this.loading = true;\n this.disabled = true;\n this.cdr.detectChanges();\n }), this.valueNormalizer, catchError(() => {\n this.loading = false;\n this.disabled = false;\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n this.nextTick(() => {\n this.searchbar.focus();\n });\n this.createCustomValueStream();\n return of(null);\n }))\n .subscribe((normalizedValue) => {\n this.loading = false;\n this.disabled = false;\n if (isPresent(normalizedValue)) { // if valueNormalizer returns `null` or `undefined` custom value is discarded\n const newValue = this.valuePrimitive ? getter$1(normalizedValue, this.valueField) : normalizedValue;\n const itemIndex = this.dataService.indexOf(newValue);\n const customItem = itemIndex === -1;\n if (this.value.indexOf(newValue) === -1) {\n this.tags = this.tagMapper([...this.selectedDataItems, normalizedValue]);\n if (!customItem) {\n this.selectionService.add(itemIndex);\n }\n else {\n this.value = [...this.value, newValue];\n }\n }\n else {\n if (!customItem && this.selectionService.isSelected(itemIndex)) {\n this.selectionService.unselect(itemIndex);\n this.selectionService.focused = itemIndex;\n }\n else {\n this.value = this.value.filter(item => getter$1(item, this.valueField) !== newValue);\n }\n }\n this.emitValueChange();\n }\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n this.nextTick(() => {\n this.searchbar.focus();\n });\n });\n }\n handleItemChange(event) {\n this.change(event);\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n }\n handleEnter(event) {\n const service = this.selectionService;\n const focusedIndex = this.selectionService.focused;\n if (this.isOpen) {\n event.originalEvent.preventDefault();\n }\n if (focusedIndex === -1) {\n if (this.allowCustom && this.text) {\n this.addCustomValue(this.text);\n }\n return; // Clear filter & close are done at customValueSubscription due to race conditions.\n }\n if (service.isSelected(focusedIndex)) {\n service.unselect(focusedIndex);\n service.focused = focusedIndex;\n }\n else {\n service.add(focusedIndex);\n }\n if (this.autoClose) {\n this.togglePopup(false);\n }\n if (this.autoClose || !this.filterable) {\n this.clearFilter();\n }\n }\n handleClose() {\n this.closePopup();\n this.searchbar.focus();\n }\n handleEnd() {\n this.focusedTagIndex = this.tags.length - 1;\n }\n handleHome() {\n this.focusedTagIndex = 0;\n }\n handleUp(index) {\n this.selectionService.focused = index;\n }\n handleBackspace() {\n if (this.focusedTagIndex !== undefined) {\n this.handleDelete();\n }\n else {\n this.handleRemoveTag({ tag: this.tags[this.tags.length - 1] });\n this.searchbar.focus();\n }\n }\n handleDelete() {\n this.handleRemoveTag({ tag: this.tags[this.focusedTagIndex] });\n if (this.focusedTagIndex === this.tags.length) {\n this.focusedTagIndex = undefined;\n }\n }\n handleLeftKey() {\n if (this.focusedTagIndex === undefined || this.focusedTagIndex < 0) {\n this.focusedTagIndex = this.tags.length - 1;\n }\n else if (this.focusedTagIndex !== 0) {\n this.focusedTagIndex--;\n }\n }\n handleDownKey(index) {\n if (this.isOpen) {\n this.selectionService.focused = index || this.firstFocusableIndex(0);\n }\n else {\n this.openPopup();\n }\n }\n handleRightKey() {\n const last = this.tags.length - 1;\n if (this.focusedTagIndex === last) {\n this.focusedTagIndex = undefined;\n }\n else if (this.focusedTagIndex < last) {\n this.focusedTagIndex++;\n }\n }\n findIndex(text, startsFrom = 0) {\n let itemText;\n text = text.toLowerCase();\n let index = this.dataService.findIndex(item => {\n if (this.dataService.grouped) {\n itemText = getter$1(item.value, this.textField);\n }\n else {\n itemText = getter$1(item, this.textField);\n }\n itemText = !isPresent(itemText) ? \"\" : itemText.toString().toLowerCase();\n return text && itemText.startsWith(text);\n }, startsFrom);\n if (this.disabledItemsService.isIndexDisabled(index)) {\n return (index + 1 > this.dataService.itemsCount) ? -1 : this.findIndex(text, index + 1);\n }\n else {\n return index;\n }\n }\n searchTextAndFocus(text) {\n const index = this.findIndex(text);\n this.selectionService.focused = index;\n }\n closePopup() {\n this.togglePopup(false);\n this.focusedTagIndex = undefined;\n }\n openPopup() {\n this.togglePopup(true);\n this.focusedTagIndex = undefined;\n }\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const isDefaultPrevented = this.triggerPopupEvents(open);\n if (!isDefaultPrevented) {\n this._toggle(open);\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.popupElement\n .removeEventListener('mousedown', this.popupMouseDownHandler);\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n createPopup() {\n if (this.virtual) {\n this.virtual.skip = 0;\n }\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: anchorPosition,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n popupClass: this.listContainerClasses,\n positionMode: 'absolute'\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.optionsList.scrollToItem(this.selectionService.focused);\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => {\n this.togglePopup(false);\n });\n }\n emitValueChange() {\n this.onChangeCallback(this.value);\n this.valueChange.emit(this.value);\n }\n resolveDataItemFromTags(value) {\n if (!(this.tags && this.tags.length && isPresent(value))) {\n return undefined;\n }\n // Flattening the tags array in case of a summary tag occurrence.\n const tags = this.tags.reduce((acc, tag) => {\n const items = isArray(tag) ? tag : [tag];\n acc.push(...items);\n return acc;\n }, []);\n return tags.find(tag => getter$1(tag, this.valueField) === getter$1(value, this.valueField));\n }\n firstFocusableIndex(index) {\n const maxIndex = this.dataService.itemsCount;\n if (this.disabledItemsService.isIndexDisabled(index)) {\n const nextIndex = index + 1;\n return (nextIndex < maxIndex) ? this.firstFocusableIndex(nextIndex) : undefined;\n }\n else {\n return index;\n }\n }\n nextTick(f) {\n this._zone.runOutsideAngular(() => {\n // Use `setTimeout` instead of a resolved promise\n // because the latter does not wait long enough.\n setTimeout(() => this._zone.run(f));\n });\n }\n setMessages() {\n this._zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.noDataText = this.localization.get('noDataText');\n this.cdr.detectChanges();\n });\n });\n }\n};\nMultiSelectComponent.ɵfac = function MultiSelectComponent_Factory(t) { return new (t || MultiSelectComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.KeyValueDiffers), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nMultiSelectComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MultiSelectComponent, selectors: [[\"kendo-multiselect\"]], contentQueries: function MultiSelectComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ItemTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CustomItemTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FixedGroupTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TagTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTagTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.customItemTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fixedGroupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tagTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTagTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n } }, viewQuery: function MultiSelectComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(SearchBarComponent, 7);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(_c19, 7);\n ɵngcc0.ɵɵviewQuery(_c13, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.searchbar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.optionsList = _t.first);\n } }, hostVars: 7, hostBindings: function MultiSelectComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-multiselect\", ctx.widgetClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", autoClose: \"autoClose\", tabindex: \"tabindex\", disabled: \"disabled\", readonly: \"readonly\", filterable: \"filterable\", listHeight: \"listHeight\", clearButton: \"clearButton\", tagMapper: \"tagMapper\", allowCustom: \"allowCustom\", valueNormalizer: \"valueNormalizer\", data: \"data\", value: \"value\", tabIndex: \"tabIndex\", placeholder: \"placeholder\", itemDisabled: \"itemDisabled\", checkboxes: \"checkboxes\", virtual: \"virtual\", popupSettings: \"popupSettings\", valuePrimitive: \"valuePrimitive\", loading: \"loading\", valueField: \"valueField\", textField: \"textField\" }, outputs: { filterChange: \"filterChange\", valueChange: \"valueChange\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", onFocus: \"focus\", onBlur: \"blur\", removeTag: \"removeTag\" }, exportAs: [\"kendoMultiSelect\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MULTISELECT_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselect'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => MultiSelectComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 13, vars: 24, consts: function () { let i18n_30; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.multiselect.noDataText\n */\n const MSG_EXTERNAL_1450213984397806503$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"NO DATA FOUND\");\n i18n_30 = MSG_EXTERNAL_1450213984397806503$$DIST_FESM2015_INDEX_JS_31;\n }\n else {\n i18n_30 = $localize `:kendo.multiselect.noDataText|The text displayed in the popup when there are no items␟3cc1323f79a5fe012960578e513f8a35b2af1e96␟1450213984397806503:NO DATA FOUND`;\n } let i18n_32; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.combobox.clearTitle\n */\n const MSG_EXTERNAL_2025597431468961462$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"clear\");\n i18n_32 = MSG_EXTERNAL_2025597431468961462$$DIST_FESM2015_INDEX_JS_33;\n }\n else {\n i18n_32 = $localize `:kendo.combobox.clearTitle|The title of the clear button␟069e8fae80677e3e785861123bef446b3ff41ab4␟2025597431468961462:clear`;\n } return [[\"kendoMultiSelectLocalizedMessages\", \"\", \"noDataText\", i18n_30, \"clearTitle\", i18n_32], [1, \"k-multiselect-wrap\", \"k-floatwrap\", 3, \"mousedown\"], [\"wrapper\", \"\"], [3, \"id\", \"tags\", \"textField\", \"valueField\", \"focused\", \"disabled\", \"template\", \"groupTemplate\", \"tagPrefix\", \"disabledIndices\", \"removeTag\"], [3, \"id\", \"role\", \"tagListId\", \"activeDescendant\", \"noDataLabel\", \"userInput\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"placeholder\", \"onNavigate\", \"valueChange\", \"onBlur\", \"onFocus\"], [\"searchbar\", \"\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"role\", \"button\", \"tabindex\", \"-1\", 3, \"visibility\", \"mousedown\", 4, \"ngIf\"], [\"class\", \"k-icon k-i-loading\", 4, \"ngIf\"], [\"popupTemplate\", \"\"], [3, \"ngIf\"], [\"container\", \"\"], [\"role\", \"button\", \"tabindex\", \"-1\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"mousedown\"], [1, \"k-icon\", \"k-i-loading\"], [4, \"ngIf\"], [\"class\", \"k-list\", 4, \"ngIf\"], [3, \"id\", \"optionPrefix\", \"data\", \"textField\", \"valueField\", \"height\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"show\", \"multipleSelection\", \"virtual\", \"checkboxes\", \"pageChange\"], [\"optionsList\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [3, \"templateContext\"], [1, \"k-list\"], [\"kendoDropDownsSelectable\", \"\", 1, \"k-item\", \"k-custom-item\", 3, \"multipleSelection\", \"index\"], [4, \"ngIf\", \"ngIfElse\"], [\"default_custom_item_template\", \"\"], [1, \"k-icon\", \"k-i-plus\", 2, \"float\", \"right\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"resize\"]]; }, template: function MultiSelectComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵlistener(\"mousedown\", function MultiSelectComponent_Template_div_mousedown_1_listener($event) { return ctx.wrapperMousedown($event); });\n ɵngcc0.ɵɵelementStart(3, \"kendo-taglist\", 3);\n ɵngcc0.ɵɵlistener(\"removeTag\", function MultiSelectComponent_Template_kendo_taglist_removeTag_3_listener($event) { return ctx.handleRemoveTag($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-searchbar\", 4, 5);\n ɵngcc0.ɵɵlistener(\"onNavigate\", function MultiSelectComponent_Template_kendo_searchbar_onNavigate_4_listener($event) { return ctx.handleNavigate($event); })(\"valueChange\", function MultiSelectComponent_Template_kendo_searchbar_valueChange_4_listener($event) { return ctx.handleFilter($event); })(\"onBlur\", function MultiSelectComponent_Template_kendo_searchbar_onBlur_4_listener() { return ctx.onSearchBarBlur(); })(\"onFocus\", function MultiSelectComponent_Template_kendo_searchbar_onFocus_4_listener() { return ctx.onSearchBarFocus(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, MultiSelectComponent_span_6_Template, 1, 3, \"span\", 6);\n ɵngcc0.ɵɵtemplate(7, MultiSelectComponent_span_7_Template, 1, 0, \"span\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, MultiSelectComponent_ng_template_8_Template, 6, 17, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(10, MultiSelectComponent_ng_template_10_Template, 1, 0, \"ng-template\", 9);\n ɵngcc0.ɵɵelementContainer(11, null, 10);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"id\", ctx.tagListId)(\"tags\", ctx.tags)(\"textField\", ctx.textField)(\"valueField\", ctx.valueField)(\"focused\", ctx.focusedTagIndex)(\"disabled\", ctx.disabled)(\"template\", ctx.tagTemplate)(\"groupTemplate\", ctx.groupTagTemplate)(\"tagPrefix\", ctx.tagPrefix)(\"disabledIndices\", ctx.disabledIndices);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"role\", \"listbox\")(\"tagListId\", ctx.tagListId)(\"activeDescendant\", ctx.activeDescendant)(\"noDataLabel\", ctx.noDataLabel)(\"userInput\", ctx.text)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"tabIndex\", ctx.tabIndex)(\"popupOpen\", ctx.isOpen)(\"placeholder\", ctx.placeholder);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.loading && !ctx.readonly && ctx.clearButton && ((ctx.tags == null ? null : ctx.tags.length) || (ctx.text == null ? null : ctx.text.length)));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.loading);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isOpen);\n } }, directives: function () { return [LocalizedMessagesDirective, TagListComponent, SearchBarComponent, ɵngcc3.NgIf, TemplateContextDirective, SelectableDirective, ListComponent, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MultiSelectComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"autoClose\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MultiSelectComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MultiSelectComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], MultiSelectComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(\"tabIndex\"),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], MultiSelectComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], MultiSelectComponent.prototype, \"placeholder\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], MultiSelectComponent.prototype, \"itemDisabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MultiSelectComponent.prototype, \"checkboxes\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MultiSelectComponent.prototype, \"virtual\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MultiSelectComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], MultiSelectComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], MultiSelectComponent.prototype, \"valuePrimitive\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], MultiSelectComponent.prototype, \"tagMapper\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"allowCustom\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectComponent.prototype, \"valueNormalizer\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"closed\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectComponent.prototype, \"removeTag\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], MultiSelectComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild(SearchBarComponent, { static: true }),\n __metadata(\"design:type\", SearchBarComponent)\n], MultiSelectComponent.prototype, \"searchbar\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], MultiSelectComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], MultiSelectComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('optionsList', { static: false }),\n __metadata(\"design:type\", ListComponent)\n], MultiSelectComponent.prototype, \"optionsList\", void 0);\n__decorate([\n ContentChild(ItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", ItemTemplateDirective)\n], MultiSelectComponent.prototype, \"template\", void 0);\n__decorate([\n ContentChild(CustomItemTemplateDirective, { static: false }),\n __metadata(\"design:type\", CustomItemTemplateDirective)\n], MultiSelectComponent.prototype, \"customItemTemplate\", void 0);\n__decorate([\n ContentChild(GroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTemplateDirective)\n], MultiSelectComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n ContentChild(FixedGroupTemplateDirective, { static: false }),\n __metadata(\"design:type\", FixedGroupTemplateDirective)\n], MultiSelectComponent.prototype, \"fixedGroupTemplate\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], MultiSelectComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], MultiSelectComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(TagTemplateDirective, { static: false }),\n __metadata(\"design:type\", TagTemplateDirective)\n], MultiSelectComponent.prototype, \"tagTemplate\", void 0);\n__decorate([\n ContentChild(GroupTagTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTagTemplateDirective)\n], MultiSelectComponent.prototype, \"groupTagTemplate\", void 0);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], MultiSelectComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-multiselect'),\n __metadata(\"design:type\", Boolean)\n], MultiSelectComponent.prototype, \"widgetClasses\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], MultiSelectComponent.prototype, \"dir\", null);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], MultiSelectComponent.prototype, \"disabledClass\", null);\nMultiSelectComponent = MultiSelectComponent_1 = __decorate([ __param(11, Optional()), __param(11, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [LocalizationService,\n PopupService,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n ChangeDetectorRef,\n KeyValueDiffers,\n Renderer2,\n ElementRef,\n NgZone, Boolean])\n], MultiSelectComponent);\n\n/**\n * Renders the column cell content of the MultiColumnComboBox. To define a column cell template, nest an `` tag\n * with the `kendoMultiColumnComboBoxColumnCellTemplate` directive inside the [``]({% slug api_dropdowns_comboboxcolumncomponent %}) tag\n * ([see example]({% slug templates_multicolumncombobox %})).\n *\n * The current [`column`]({% slug api_dropdowns_comboboxcolumncomponent %}) and data item are available as context variables:\n *\n * - `let-dataItem=\"dataItem\"` (`any`) - The current data item. Also available as implicit context variable.\n * - `let-column=\"column\"` ([`ColumnComponent`]({% slug api_dropdowns_comboboxcolumncomponent %})) - The current column configuration obejct.\n */\nlet ColumnCellTemplateDirective = class ColumnCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nColumnCellTemplateDirective.ɵfac = function ColumnCellTemplateDirective_Factory(t) { return new (t || ColumnCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nColumnCellTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ColumnCellTemplateDirective, selectors: [[\"\", \"kendoMultiColumnComboBoxColumnCellTemplate\", \"\"]] });\nColumnCellTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], ColumnCellTemplateDirective);\n\n/**\n * Renders the column header content of the MultiColumnComboBox. To define a column header template, nest an `` tag\n * with the `kendoMultiColumnComboBoxColumnHeaderTemplate` directive inside the [``]({% slug api_dropdowns_comboboxcolumncomponent %}) tag\n * ([see example]({% slug templates_multicolumncombobox %})).\n *\n * The current [`column`]({% slug api_dropdowns_comboboxcolumncomponent %}) is available as implicit context variable.\n */\nlet ColumnHeaderTemplateDirective = class ColumnHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nColumnHeaderTemplateDirective.ɵfac = function ColumnHeaderTemplateDirective_Factory(t) { return new (t || ColumnHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nColumnHeaderTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ColumnHeaderTemplateDirective, selectors: [[\"\", \"kendoMultiColumnComboBoxColumnHeaderTemplate\", \"\"]] });\nColumnHeaderTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], ColumnHeaderTemplateDirective);\n\n/**\n * Represents the column definition of the [MultiColumnComboBox]({% slug overview_multicolumncombobox %})\n * ([see example]({% slug columns_multicolumncombobox %})).\n */\nlet ComboBoxColumnComponent = class ComboBoxColumnComponent {\n /**\n * Represents the column definition of the [MultiColumnComboBox]({% slug overview_multicolumncombobox %})\n * ([see example]({% slug columns_multicolumncombobox %})).\n */\n constructor() {\n /**\n * Sets the visibility of the column.\n *\n * @default false\n */\n this.hidden = false;\n /**\n * @hidden\n */\n this.matchesMedia = true;\n }\n};\nComboBoxColumnComponent.ɵfac = function ComboBoxColumnComponent_Factory(t) { return new (t || ComboBoxColumnComponent)(); };\nComboBoxColumnComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ComboBoxColumnComponent, selectors: [[\"kendo-combobox-column\"]], contentQueries: function ComboBoxColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnCellTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnHeaderTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n } }, inputs: { hidden: \"hidden\", field: \"field\", title: \"title\", width: \"width\", style: \"style\", headerStyle: \"headerStyle\", class: \"class\", headerClass: \"headerClass\", media: \"media\" }, decls: 0, vars: 0, template: function ComboBoxColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n ContentChild(ColumnCellTemplateDirective, { static: false }),\n __metadata(\"design:type\", ColumnCellTemplateDirective)\n], ComboBoxColumnComponent.prototype, \"cellTemplate\", void 0);\n__decorate([\n ContentChild(ColumnHeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", ColumnHeaderTemplateDirective)\n], ComboBoxColumnComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxColumnComponent.prototype, \"field\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxColumnComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ComboBoxColumnComponent.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ComboBoxColumnComponent.prototype, \"hidden\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ComboBoxColumnComponent.prototype, \"style\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ComboBoxColumnComponent.prototype, \"headerStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ComboBoxColumnComponent.prototype, \"class\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ComboBoxColumnComponent.prototype, \"headerClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ComboBoxColumnComponent.prototype, \"media\", void 0);\n\n/**\n * Persists the intially resolved scrollbar width value.\n */\nlet SCROLLBAR_WIDTH;\n/**\n * @hidden\n *\n * Gets the default scrollbar width accoring to the current environment.\n */\nconst scrollbarWidth = () => {\n // calculate scrollbar width only once, then return the memoized value\n if (isNaN(SCROLLBAR_WIDTH)) {\n const div = document.createElement('div');\n div.style.cssText = 'overflow: scroll; overflow-x: hidden; zoom: 1; clear: both; display: block;';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n SCROLLBAR_WIDTH = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n }\n return SCROLLBAR_WIDTH;\n};\n/**\n * Checks if all columns have a valid user-defined width.\n */\nconst allColumnsWidthsSet = (columns) => {\n if (!isPresent(columns) || columns.length === 0) {\n return false;\n }\n return columns.toArray().every(column => !isNaN(column.width) && column.width > 0);\n};\n/**\n * @hidden\n *\n * Calculates the row width according to the passed columns width configuration.\n * Hidden columns and such that don't match the provided media query are ignored.\n * If some of the columns don't have a preset width or have an invalid width value, the function returns `null`.\n */\nconst getRowWidthFromColumnsMeta = (columns) => {\n if (!allColumnsWidthsSet(columns)) {\n return null;\n }\n const bordersWidth = 2;\n const initialRowWidht = scrollbarWidth() + bordersWidth;\n return columns.reduce((totalWidth, column) => {\n if (!column.hidden && column.matchesMedia) {\n totalWidth += parseInt(column.width, 10);\n }\n return totalWidth;\n }, initialRowWidht);\n};\n\nvar MultiColumnComboBoxComponent_1;\n/**\n * Represents the [Kendo UI MultiColumnComboBox component for Angular]({% slug overview_multicolumncombobox %}).\n */\nlet MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = class MultiColumnComboBoxComponent extends ComboBoxComponent {\n constructor(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, hostElement, touchEnabled$$1) {\n super(localization, popupService, selectionService, navigationService, disabledItemsService, dataService, zone, changeDetector, renderer, hostElement, touchEnabled$$1);\n /**\n * @hidden\n */\n this.hostClasses = true;\n this.removeWindowResizeListener = noop;\n // the row height in @progress/kendo-theme-default\n this.defaultVirtualItemHeight = 36;\n // use a smaller virtual page size as columns with multiple cells can cause poor performance\n this.defaultVirtualPageSize = 30;\n }\n /**\n * @hidden\n */\n set header(header) {\n // updates the header padding on initial render as the resize senzor doesn't kick in as early\n this.updateHeaderPadding(header && header.nativeElement);\n }\n get popupWidth() {\n const wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;\n const min = `${wrapperOffsetWidth}px`;\n const width = this.popupSettings.width || getRowWidthFromColumnsMeta(this.columns) || wrapperOffsetWidth;\n const max = isNaN(width) ? width : `${width}px`;\n return { min, max };\n }\n /**\n * @hidden\n */\n get listContainerClasses() {\n return [\n 'k-list-container',\n 'k-popup',\n 'k-reset',\n 'k-group',\n 'k-dropdowngrid-popup',\n 'k-popup-flush',\n 'k-state-border-up'\n ].concat(this.popupSettings.popupClass || []);\n }\n ngAfterViewInit() {\n this.updateColumnsMediaState();\n this.addWindowResizeListener();\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.removeWindowResizeListener();\n }\n /**\n * @hidden\n */\n textFrom(dataItem, field) {\n return getter$1(dataItem, field);\n }\n /**\n * @hidden\n *\n * Adds or removes a padding value at the end of the header container equal to the size of the scrollbar.\n * As when the items container has a scrollbar, the column headers and the cells are misaligned.\n * When the container has a scrollbar, the padding style is added, and when there is none - it is removed.\n */\n updateHeaderPadding(header) {\n if (!isPresent(header)) {\n return;\n }\n // the scrollbar is rendered on the left in rtl\n const headerPaddingPosition = this.localization.rtl ? 'padding-left' : 'padding-right';\n if (this.optionsList.hasScrollbar() && scrollbarWidth() > 0) {\n this.renderer.setStyle(header, headerPaddingPosition, `${scrollbarWidth()}px`);\n }\n else {\n this.renderer.removeStyle(header, headerPaddingPosition);\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(this.data) && this.data.length > 0 && this.data.some(item => !isObject(item))) {\n throw new Error(MultiColumnComboBoxMessages.data);\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(MultiColumnComboBoxMessages.textAndValue);\n }\n super.verifySettings();\n }\n addWindowResizeListener() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.zone.runOutsideAngular(() => this.removeWindowResizeListener = this.renderer.listen(window, 'resize', this.updateColumnsMediaState.bind(this)));\n }\n updateColumnsMediaState() {\n if (!(isPresent(this.columns) && isDocumentAvailable())) {\n return;\n }\n this.columns.forEach(column => {\n const matchesMedia = !column.media || window.matchMedia(column.media).matches;\n if (column.matchesMedia !== matchesMedia) {\n column.matchesMedia = matchesMedia;\n if (this.isOpen) {\n // enter the zone only if the popup is actually open\n // update its width in case it's dependent on the columns' width\n this.zone.run(() => this.popupRef.popupElement.style.width = this.popupWidth.max);\n }\n }\n });\n }\n};\nMultiColumnComboBoxComponent.ɵfac = function MultiColumnComboBoxComponent_Factory(t) { return new (t || MultiColumnComboBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(DisabledItemsService), ɵngcc0.ɵɵdirectiveInject(DataService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED)); };\nMultiColumnComboBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MultiColumnComboBoxComponent, selectors: [[\"kendo-multicolumncombobox\"]], contentQueries: function MultiColumnComboBoxComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ComboBoxColumnComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, viewQuery: function MultiColumnComboBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c34, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.header = _t.first);\n } }, hostVars: 2, hostBindings: function MultiColumnComboBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-dropdowngrid\", ctx.hostClasses);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n SelectionService,\n DataService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multicolumncombobox'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 14, vars: 20, consts: function () { let i18n_35; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.multicolumncombobox.noDataText\n */\n const MSG_EXTERNAL_3227251500690942605$$DIST_FESM2015_INDEX_JS_36 = goog.getMsg(\"NO DATA FOUND\");\n i18n_35 = MSG_EXTERNAL_3227251500690942605$$DIST_FESM2015_INDEX_JS_36;\n }\n else {\n i18n_35 = $localize `:kendo.multicolumncombobox.noDataText|The text displayed in the popup when there are no items␟23a18095f2c16d40a04251fa2fb15d3927e7a79a␟3227251500690942605:NO DATA FOUND`;\n } let i18n_37; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.multicolumncombobox.clearTitle\n */\n const MSG_EXTERNAL_326603149056291198$$DIST_FESM2015_INDEX_JS_38 = goog.getMsg(\"clear\");\n i18n_37 = MSG_EXTERNAL_326603149056291198$$DIST_FESM2015_INDEX_JS_38;\n }\n else {\n i18n_37 = $localize `:kendo.multicolumncombobox.clearTitle|The title of the clear button␟6b371962a2564e2e50986f7ec238e513b466d553␟326603149056291198:clear`;\n } return [[\"kendoMultiColumnComboBoxLocalizedMessages\", \"\", \"noDataText\", i18n_35, \"clearTitle\", i18n_37], [\"unselectable\", \"on\", 1, \"k-dropdown-wrap\"], [\"wrapper\", \"\"], [3, \"role\", \"id\", \"listId\", \"activeDescendant\", \"noDataLabel\", \"userInput\", \"suggestedText\", \"disabled\", \"readonly\", \"tabIndex\", \"popupOpen\", \"placeholder\", \"onNavigate\", \"valueChange\", \"onBlur\", \"onFocus\"], [\"searchbar\", \"\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"aria-hidden\", \"true\", 3, \"visibility\", \"kendoEventsOutsideAngular\", \"click\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", \"unselectable\", \"on\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\"], [\"select\", \"\"], [1, \"k-icon\", 3, \"ngClass\"], [\"popupTemplate\", \"\"], [3, \"resize\", 4, \"ngIf\"], [\"container\", \"\"], [\"aria-hidden\", \"true\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"kendoEventsOutsideAngular\", \"click\"], [4, \"ngIf\"], [1, \"k-grid-header\"], [\"header\", \"\"], [1, \"k-grid-header-wrap\"], [\"role\", \"presentation\"], [4, \"ngFor\", \"ngForOf\"], [\"rowTemplate\", \"\"], [3, \"id\", \"optionPrefix\", \"data\", \"textField\", \"valueField\", \"template\", \"groupTemplate\", \"fixedGroupTemplate\", \"height\", \"show\", \"virtual\", \"listClass\", \"pageChange\", \"listResize\"], [\"optionsList\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [3, \"templateContext\"], [3, \"width\", 4, \"ngIf\"], [\"class\", \"k-header\", 3, \"ngStyle\", \"ngClass\", 4, \"ngIf\"], [1, \"k-header\", 3, \"ngStyle\", \"ngClass\"], [\"class\", \"k-cell\", 3, \"ngClass\", \"width\", \"ngStyle\", 4, \"ngIf\"], [1, \"k-cell\", 3, \"ngClass\", \"ngStyle\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"ngIf\"], [1, \"k-footer\"], [3, \"resize\"]]; }, template: function MultiColumnComboBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2)(3, \"kendo-searchbar\", 3, 4);\n ɵngcc0.ɵɵlistener(\"onNavigate\", function MultiColumnComboBoxComponent_Template_kendo_searchbar_onNavigate_3_listener($event) { return ctx.handleNavigate($event); })(\"valueChange\", function MultiColumnComboBoxComponent_Template_kendo_searchbar_valueChange_3_listener($event) { return ctx.searchBarChange($event); })(\"onBlur\", function MultiColumnComboBoxComponent_Template_kendo_searchbar_onBlur_3_listener() { return ctx.handleBlur(); })(\"onFocus\", function MultiColumnComboBoxComponent_Template_kendo_searchbar_onFocus_3_listener() { return ctx.handleFocus(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, MultiColumnComboBoxComponent_span_5_Template, 1, 6, \"span\", 5);\n ɵngcc0.ɵɵelementStart(6, \"span\", 6, 7);\n ɵngcc0.ɵɵelement(8, \"span\", 8);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(9, MultiColumnComboBoxComponent_ng_template_9_Template, 16, 19, \"ng-template\", null, 9, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(11, MultiColumnComboBoxComponent_kendo_resize_sensor_11_Template, 1, 0, \"kendo-resize-sensor\", 10);\n ɵngcc0.ɵɵelementContainer(12, null, 11);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"role\", \"combobox\")(\"id\", ctx.focusableId)(\"listId\", ctx.listBoxId)(\"activeDescendant\", ctx.activeDescendant)(\"noDataLabel\", ctx.noDataLabel)(\"userInput\", ctx.text)(\"suggestedText\", ctx.getSuggestion())(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"tabIndex\", ctx.tabIndex)(\"popupOpen\", ctx.isOpen)(\"placeholder\", ctx.placeholder);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.clearButton && !ctx.loading && !ctx.disabled && !ctx.readonly && (ctx.text == null ? null : ctx.text.length));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(18, _c25, ctx.preventEventDefault));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.buttonClasses);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isOpen);\n } }, directives: function () { return [LocalizedMessagesDirective, SearchBarComponent, ɵngcc3.NgIf, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgClass, TemplateContextDirective, ɵngcc3.NgForOf, ɵngcc3.NgStyle, ListComponent, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-dropdowngrid'),\n __metadata(\"design:type\", Boolean)\n], MultiColumnComboBoxComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n ContentChildren(ComboBoxColumnComponent),\n __metadata(\"design:type\", QueryList)\n], MultiColumnComboBoxComponent.prototype, \"columns\", void 0);\n__decorate([\n ViewChild('header', { static: false }),\n __metadata(\"design:type\", ElementRef),\n __metadata(\"design:paramtypes\", [ElementRef])\n], MultiColumnComboBoxComponent.prototype, \"header\", null);\nMultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = __decorate([ __param(10, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [LocalizationService,\n PopupService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n DataService,\n NgZone,\n ChangeDetectorRef,\n Renderer2,\n ElementRef, Boolean])\n], MultiColumnComboBoxComponent);\n\n/**\n * Renders the content of each node in the DropDownTree. To define a node template, nest an `` tag\n * with the `kendoDropDownTreeNodeTemplate` directive inside the `` tag.\n *\n * The current data item and hierarchical index are available as context variables:\n *\n * - `let-dataItem` (`any`) - The current data item. Available as implicit context variable.\n * - `let-index=\"index\"` (`string`) - The current item hierarchical index.\n */\nlet NodeTemplateDirective = class NodeTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nNodeTemplateDirective.ɵfac = function NodeTemplateDirective_Factory(t) { return new (t || NodeTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nNodeTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: NodeTemplateDirective, selectors: [[\"\", \"kendoDropDownTreeNodeTemplate\", \"\"], [\"\", \"kendoMultiSelectTreeNodeTemplate\", \"\"]] });\nNodeTemplateDirective = __decorate([ __metadata(\"design:paramtypes\", [TemplateRef])\n], NodeTemplateDirective);\n\nvar DropDownTreeComponent_1;\n/* tslint:disable:member-ordering */\nconst DEFAULT_POPUP_SETTINGS = { animate: true };\nconst hasChildren = () => false;\nconst fetchChildren = () => of([]);\nconst itemDisabled = () => false;\nconst isNodeVisible = () => true;\n/**\n * Represents the [Kendo UI DropDownTree component for Angular]({% slug overview_ddt %}).\n */\nlet DropDownTreeComponent = DropDownTreeComponent_1 = class DropDownTreeComponent {\n constructor(popupService, navigationService, renderer, hostElement, _zone, cdr, localization, touchEnabled$$1) {\n this.popupService = popupService;\n this.navigationService = navigationService;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this._zone = _zone;\n this.cdr = cdr;\n this.localization = localization;\n this.touchEnabled = touchEnabled$$1;\n this.hostClasses = true;\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_ddt %})).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_ddt %})).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires when the user expands a node in the popup TreeView.\n */\n this.nodeExpand = new EventEmitter();\n /**\n * Fires when the user collapses a node in the popup TreeView.\n */\n this.nodeCollapse = new EventEmitter();\n /**\n * Fires each time the user focuses the DropDownTree.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the DropDownTree gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the value is changed\n * ([see example]({% slug overview_ddt %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n */\n this.clearButton = true;\n /**\n * A function which determines if a specific node has child nodes.\n */\n this.hasChildren = hasChildren;\n /**\n * A function which provides the child nodes for a given parent node.\n */\n this.fetchChildren = fetchChildren;\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_ddt %}#toc-primitive-values)).\n * If set to `true`, the selected value has to be of a primitive value.\n */\n this.valuePrimitive = false;\n /**\n * A function that is executed for each data item and determines if a specific item is disabled.\n */\n this.itemDisabled = itemDisabled;\n /**\n * A callback which determines whether a tree node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isNodeVisible = isNodeVisible;\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default true\n */\n this.loadOnDemand = true;\n /**\n * Renders the built-in input element for filtering the DropDownTree.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the DropDownTree manually]({% slug filtering_ddt %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoDropDownTreeHierarchyBinding`]({% slug api_dropdowns_dropdowntreehierarchybindingdirective %}) and [`kendoDropDownTreeFlatBinding`]({% slug api_dropdowns_dropdowntreeflatbindingdirective %}) directives.\n */\n this.filterable = false;\n /**\n * @hidden\n */\n this.filter = '';\n /**\n * @hidden\n *\n * Used by the kendo-label and kendo-floatinglabel to access and associate the focusable element with the provided label via aria-labelledby.\n */\n this.focusableId = `k-${guid()}`;\n /**\n * @hidden\n */\n this.selectedKeys = [];\n /**\n * @hidden\n */\n this.filterStateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.allNodesHidden = false;\n /**\n * @hidden\n *\n * Used to associate the value label with the wrapper via aria-describedby.\n */\n this.valueLabelId = `k-${guid()}`;\n this._popupSettings = DEFAULT_POPUP_SETTINGS;\n this._tabindex = 0;\n this._isFocused = false;\n this.subscriptions = [];\n this.onTouchedCallback = noop;\n this.onChangeCallback = noop;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n this.subscribeTouchEvents();\n }\n get clearable() {\n return this.clearButton;\n }\n set treeview(treeview) {\n if (treeview) {\n if (this.isFocused && !this.filterable || this.touchEnabled) {\n treeview.focus();\n }\n // the treeview animations are initially disabled (we don't want expand animations during popup opening)\n // re-enables the animations for user interaction\n treeview.animate = true;\n this._treeview = treeview;\n }\n }\n get treeview() {\n return this._treeview;\n }\n /**\n * Sets the data of the DropDownTree.\n *\n * > The data has to be provided in an array-like list with objects.\n */\n set data(data) {\n this._nodes = data;\n this.setState();\n }\n get data() {\n return this._nodes;\n }\n /**\n * Sets the value of the DropDownTree.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n */\n set value(newValue) {\n this._value = newValue;\n this.setState();\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the DropDownTree.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, DEFAULT_POPUP_SETTINGS, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Keeps the current `dataItem` object in order to resolve selection.\n * Needs to be provided when `value` is bound in and `valuePrimitive` is set to true.\n */\n set dataItem(item) {\n this._dataItem = item;\n this.setState();\n }\n get dataItem() {\n return this._dataItem ? this._dataItem : this.value;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const providedTabIndex = Number(value);\n const defaultTabIndex = 0;\n this._tabindex = !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.wrapper.nativeElement, 'k-state-focused');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n get width() {\n const wrapperWidth = this.wrapper.nativeElement.offsetWidth;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n get clearButtonVisiblity() {\n if (this.touchEnabled) {\n return 'visible';\n }\n }\n /**\n * @hidden\n *\n * Alias for `isNodeExpanded`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n set isExpanded(callback) {\n this.isNodeExpanded = callback;\n }\n get isExpanded() {\n return this.isNodeExpanded;\n }\n /**\n * @hidden\n *\n * Alias for `nodeExpand`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get expand() {\n return this.nodeExpand;\n }\n /**\n * @hidden\n *\n * Alias for `nodeCollapse`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get collapse() {\n return this.nodeCollapse;\n }\n /**\n * @hidden\n *\n * Alias for `data`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives.\n */\n set nodes(nodes) {\n this.data = nodes;\n }\n get nodes() {\n return this.data;\n }\n /**\n * @hidden\n *\n * Alias for `fetchChildren`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives\n */\n set children(callback) {\n this.fetchChildren = callback;\n }\n get children() {\n return this.fetchChildren;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeVisible`. Used for compatibility with the `DataBoundComponent` interface.\n * The `DataBoundComponent` interface is used in the data-binding directives.\n */\n set isVisible(callback) {\n this.isNodeVisible = callback;\n }\n get isVisible() {\n return this.isNodeVisible;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, 'tabindex');\n this.assignAriaDescribedBy();\n this.subscriptions.push(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.markForCheck();\n }));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.setState();\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * @hidden\n *\n * Used by the kendo-floatinglabel component to determine if the floating label\n * should be rendered inside the input when the component is not focused.\n */\n isEmpty() {\n return !this.text && !this.placeholder;\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n if (isDisabled || sameState) {\n return;\n }\n const togglePrevented = this.triggerPopupEvents(open);\n if (!togglePrevented) {\n open ?\n this.createPopup() :\n this.destroyPopup();\n }\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur(e) {\n const relatedTarget = e && e.relatedTarget;\n if (this.hostElement.nativeElement.contains(relatedTarget) ||\n (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {\n return;\n }\n this.isFocused = false;\n if (hasObservers(this.onBlur) ||\n isUntouched(this.hostElement.nativeElement)) {\n this._zone.run(() => {\n this.togglePopup(false);\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n else {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n const eventData = event;\n this.navigationService.process({\n originalEvent: eventData\n });\n }\n /**\n * @hidden\n */\n handleClick() {\n this.togglePopup(!this.isOpen);\n }\n /**\n * Focuses a specific item of the DropDownTree based on a provided index in the format of `1_1`.\n * The targeted item should be expanded in order for it to be focused.\n * If null or invalid index is provided the focus will be set on the first item.\n */\n focusItemAt(index) {\n if (this.treeview) {\n const lookup = this.treeview.itemLookup(index);\n let isItemDisabled = !isPresent(lookup) || this.treeview.isDisabled(lookup.item.dataItem, lookup.item.index);\n if (!isItemDisabled) {\n this.treeview.focus(index);\n }\n }\n }\n /**\n * Focuses the DropDownTree.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownTree.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Resets the value of the DropDownTree.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `valueChange` event will not be fired.\n */\n reset() {\n this.value = undefined;\n this.dataItem = undefined;\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_ddt %})).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"ViewContainerRef not found...\" error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !isPresent(this.popupRef);\n this.destroyPopup();\n if (shouldOpen) {\n this.createPopup();\n }\n });\n }\n /**\n * @hidden\n */\n get popupContainerClasses() {\n const containerClasses = ['k-popup-dropdowntree', 'k-reset', 'k-group', 'k-list-container'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n */\n onSelectionChange({ dataItem, index }) {\n this.valueDepth = index.split('_').length - 1;\n const valueField = this.getField(this.valueField, dataItem);\n const newValue = this.valuePrimitive ?\n getter(valueField)(dataItem) :\n dataItem;\n const shouldUpdateValue = newValue !== this.value;\n if (shouldUpdateValue) {\n this.value = newValue;\n this.dataItem = dataItem;\n this.emitValueChange(this.value);\n }\n this.togglePopup(false);\n this.focus();\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n clearValue(event) {\n event.stopImmediatePropagation();\n this.focus();\n this.value = undefined;\n this.dataItem = undefined;\n this.clearState();\n this.valueChange.emit(undefined);\n this.emitValueChange();\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n preventEventDefault(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n // If the user resets the value by providing null/undefined we need to reset the `dataItem`\n // Because upon initialization of the component the `writeValue` is being called twice -\n // first time with `null` value regardless of sync/async value - an extra check is added to\n // distinguish between client reset and initial phanotm 'null' value\n if (!isPresent(value) && isPresent(this.value)) {\n this.dataItem = null;\n }\n this.value = value === null ? undefined : value;\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 this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilterInputChange(term) {\n this.filterChange.next(term);\n this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));\n }\n /**\n * @hidden\n */\n get buttonClasses() {\n return this.loading ? 'k-i-loading' : 'k-i-arrow-s';\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.value === \"object\") {\n throw new Error(DropDownTreeMessages.primitive);\n }\n if (this.valuePrimitive === true && isPresent(this.value) && typeof this.dataItem !== \"object\") {\n throw new Error(DropDownTreeMessages.dataItem);\n }\n if (this.valuePrimitive === false && isPresent(this.value) && typeof this.value !== \"object\") {\n throw new Error(DropDownTreeMessages.object);\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(DropDownTreeMessages.textAndValue);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && isPresent(this.value) && !isPresent(this.valueDepth)) {\n throw new Error(DropDownTreeMessages.valueDepth);\n }\n }\n emitValueChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n getText(textField, dataItem) {\n if (isPresent(dataItem) && isPresent(textField)) {\n const field = this.getField(textField, dataItem);\n return getter(field)(dataItem);\n }\n return null;\n }\n /**\n * @hidden\n *\n * Determines the `valueField` and `textField` for a specific level in the data set\n * @param field - the field value (string | string[])\n * @param value - current value\n */\n getField(field, value) {\n const fieldsCount = field.length - 1;\n if (typeof field === 'string') {\n // If the `valueField` | `textField` is the same for all levels\n return field;\n }\n else if (isPresent(this.valueDepth)) {\n // When `valueDepth` can be defined from the index on selectionChange or provided by the user\n return fieldsCount < this.valueDepth ? field[fieldsCount] : field[this.valueDepth];\n }\n else {\n // Fallback: Look to find a match of each field in the current data item\n // Side effect may occur if all of the listed fields are present in the data item\n return field.find(item => item in value);\n }\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n createPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };\n const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n appendTo: this.appendTo,\n anchorAlign: anchorPosition,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n positionMode: 'absolute',\n popupClass: this.popupContainerClasses\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n popupWrapper.setAttribute(\"dir\", this.direction);\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n if (this.filter !== \"\") {\n this.filter = \"\";\n this.allNodesHidden = false;\n if (hasObservers(this.filterChange)) {\n this._zone.run(() => {\n this.filterChange.emit(\"\");\n });\n }\n }\n }\n }\n handleEscape() {\n this.togglePopup(false);\n this.focus();\n }\n setState() {\n if (isPresent(this.value) && isPresent(this.dataItem) && isPresent(this.valueField)) {\n this.text = this.getText(this.textField, this.dataItem);\n const valueField = this.getField(this.valueField, this.dataItem);\n this.selectBy = valueField;\n this.selectedKeys = [getter(valueField)(this.dataItem)];\n }\n else {\n this.clearState();\n }\n this.cdr.markForCheck();\n }\n clearState() {\n this.text = undefined;\n this.selectedKeys = [];\n }\n subscribeEvents() {\n this.subscriptions.push(this.navigationService.open.subscribe(() => this.togglePopup(true)), this.navigationService.close.subscribe(() => {\n this.togglePopup(false);\n this.focus();\n }), this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(() => this.togglePopup(true)), this.navigationService.esc\n .subscribe(() => this.handleEscape()), this.navigationService.tab.subscribe(() => this.focus()), this.navigationService.down.subscribe((event) => {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n if (!this.treeview.isActive) {\n this.treeview.focus();\n }\n }), this.navigationService.up.subscribe((event) => {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n if (this.filterable && this.treeview['navigationService']['activeIndex'] === '0') {\n this.filterInput.nativeElement.focus();\n }\n }));\n }\n subscribeTouchEvents() {\n if (!isDocumentAvailable() || !this.touchEnabled) {\n return;\n }\n this._zone.runOutsideAngular(() => \n // Roll up DropDownTree on iOS when tapped outside\n this.touchstartDisposeHandler = this.renderer.listen(document, 'touchstart', (e) => {\n const target = e.target;\n if (this.isFocused && !inDropDown(this.hostElement, target, this.popupRef)) {\n this._zone.run(() => {\n if (this.isOpen) {\n this.treeview.blur();\n }\n this.blur();\n });\n }\n }));\n }\n unsubscribeEvents() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n if (this.touchstartDisposeHandler) {\n this.touchstartDisposeHandler();\n }\n }\n assignAriaDescribedBy() {\n const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';\n // add to the current value - don't replace it (the aria-describedby is used by the FormField component as well)\n const newValue = `${this.valueLabelId} ${currentValue.trim()}`.trim();\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);\n }\n};\nDropDownTreeComponent.ɵfac = function DropDownTreeComponent_Factory(t) { return new (t || DropDownTreeComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nDropDownTreeComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: DropDownTreeComponent, selectors: [[\"kendo-dropdowntree\"]], contentQueries: function DropDownTreeComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NodeTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ValueTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.nodeTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.valueTemplate = _t.first);\n } }, viewQuery: function DropDownTreeComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c41, 5);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(_c19, 7);\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c42, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.treeview = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterInput = _t.first);\n } }, hostVars: 7, hostBindings: function DropDownTreeComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-dropdowntree\", ctx.hostClasses)(\"k-dropdowntree-clearable\", ctx.clearable);\n } }, inputs: { clearButton: \"clearButton\", hasChildren: \"hasChildren\", fetchChildren: \"fetchChildren\", placeholder: \"placeholder\", listHeight: \"listHeight\", disabled: \"disabled\", readonly: \"readonly\", valuePrimitive: \"valuePrimitive\", itemDisabled: \"itemDisabled\", isNodeVisible: \"isNodeVisible\", loadOnDemand: \"loadOnDemand\", filterable: \"filterable\", filter: \"filter\", focusableId: \"focusableId\", data: \"data\", value: \"value\", popupSettings: \"popupSettings\", dataItem: \"dataItem\", tabindex: \"tabindex\", isNodeExpanded: \"isNodeExpanded\", valueDepth: \"valueDepth\", loading: \"loading\", textField: \"textField\", valueField: \"valueField\" }, outputs: { open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", nodeExpand: \"nodeExpand\", nodeCollapse: \"nodeCollapse\", onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\", filterChange: \"filterChange\" }, exportAs: [\"kendoDropDownTree\"], features: [ɵngcc0.ɵɵProvidersFeature([\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdowntree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 13, vars: 18, consts: function () { let i18n_43; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.dropdowntree.noDataText\n */\n const MSG_EXTERNAL_8377764809518564323$$DIST_FESM2015_INDEX_JS_44 = goog.getMsg(\"NO DATA FOUND\");\n i18n_43 = MSG_EXTERNAL_8377764809518564323$$DIST_FESM2015_INDEX_JS_44;\n }\n else {\n i18n_43 = $localize `:kendo.dropdowntree.noDataText|The text displayed in the popup when there are no items␟b5507b240a829a596159da3600ea1c73810d8708␟8377764809518564323:NO DATA FOUND`;\n } let i18n_45; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.dropdowntree.clearTitle\n */\n const MSG_EXTERNAL_5091538317194981642$$DIST_FESM2015_INDEX_JS_46 = goog.getMsg(\"clear\");\n i18n_45 = MSG_EXTERNAL_5091538317194981642$$DIST_FESM2015_INDEX_JS_46;\n }\n else {\n i18n_45 = $localize `:kendo.dropdowntree.clearTitle|The title of the clear button␟549a21c02a5be9711c5297a917390d5f4c06448b␟5091538317194981642:clear`;\n } return [[\"kendoDropDownTreeLocalizedMessages\", \"\", \"noDataText\", i18n_43, \"clearTitle\", i18n_45], [\"role\", \"listbox\", \"aria-haspopup\", \"tree\", 3, \"ngClass\", \"kendoEventsOutsideAngular\", \"scope\", \"click\", \"keydown\"], [\"wrapper\", \"\"], [1, \"k-input\"], [4, \"ngIf\"], [3, \"ngIf\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"aria-hidden\", \"true\", 3, \"visibility\", \"click\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", 1, \"k-select\"], [1, \"k-icon\", \"k-i-arrow-60-down\", 3, \"ngClass\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"templateContext\"], [\"aria-hidden\", \"true\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"click\"], [\"class\", \"k-list-filter\", 4, \"ngIf\"], [\"kendoTreeViewSelectable\", \"\", 3, \"nodes\", \"maxHeight\", \"animate\", \"selectedKeys\", \"selectBy\", \"textField\", \"children\", \"hasChildren\", \"loadOnDemand\", \"isExpanded\", \"isDisabled\", \"nodeTemplate\", \"filter\", \"isVisible\", \"selectedKeysChange\", \"focusout\", \"keydown\", \"selectionChange\", \"expand\", \"collapse\", 4, \"ngIf\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [1, \"k-list-filter\"], [\"role\", \"textbox\", \"aria-haspopup\", \"true\", \"aria-expanded\", \"false\", \"tabindex\", \"0\", \"aria-disabled\", \"false\", \"aria-readonly\", \"false\", 1, \"k-textbox\", 3, \"filterInput\", \"ngModel\", \"kendoEventsOutsideAngular\", \"scope\", \"input\", \"keydown.arrowdown\", \"keydown.alt.arrowup\", \"ngModelChange\"], [\"filterInput\", \"\"], [1, \"k-icon\", \"k-i-zoom\"], [\"kendoTreeViewSelectable\", \"\", 3, \"nodes\", \"animate\", \"selectedKeys\", \"selectBy\", \"textField\", \"children\", \"hasChildren\", \"loadOnDemand\", \"isExpanded\", \"isDisabled\", \"nodeTemplate\", \"filter\", \"isVisible\", \"selectedKeysChange\", \"focusout\", \"keydown\", \"selectionChange\", \"expand\", \"collapse\"], [\"treeview\", \"\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"]]; }, template: function DropDownTreeComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownTreeComponent_Template_span_click_1_listener() { return ctx.handleClick(); })(\"keydown\", function DropDownTreeComponent_Template_span_keydown_1_listener($event) { return ctx.handleKeydown($event); });\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, DropDownTreeComponent_4_Template, 1, 4, null, 4);\n ɵngcc0.ɵɵtemplate(5, DropDownTreeComponent_ng_template_5_Template, 1, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, DropDownTreeComponent_span_6_Template, 1, 3, \"span\", 6);\n ɵngcc0.ɵɵelementStart(7, \"span\", 7);\n ɵngcc0.ɵɵelement(8, \"span\", 8);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(9, DropDownTreeComponent_ng_template_9_Template, 5, 5, \"ng-template\", null, 9, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(11, null, 10);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(13, _c29, ctx.disabled))(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(15, _c1, ctx.handleFocus, ctx.handleBlur))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"id\", ctx.focusableId)(\"aria-expanded\", ctx.isOpen)(\"aria-readonly\", ctx.readonly)(\"tabindex\", ctx.tabindex)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"id\", ctx.valueLabelId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.valueTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.valueTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.loading && !ctx.readonly && ctx.clearButton && (ctx.text == null ? null : ctx.text.length) && !ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.buttonClasses);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc3.NgClass, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf, TemplateContextDirective, ɵngcc5.DefaultValueAccessor, FilterInputDirective, ɵngcc5.NgControlStatus, ɵngcc5.NgModel, ɵngcc6.TreeViewComponent, ɵngcc6.SelectDirective]; }, encapsulation: 2, changeDetection: 0 });\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-dropdowntree'),\n HostBinding('class.k-dropdowntree-clearable'),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], DropDownTreeComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-dropdowntree-clearable'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], DropDownTreeComponent.prototype, \"clearable\", null);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], DropDownTreeComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], DropDownTreeComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], DropDownTreeComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(NodeTemplateDirective, { static: false }),\n __metadata(\"design:type\", NodeTemplateDirective)\n], DropDownTreeComponent.prototype, \"nodeTemplate\", void 0);\n__decorate([\n ContentChild(ValueTemplateDirective, { static: false }),\n __metadata(\"design:type\", ValueTemplateDirective)\n], DropDownTreeComponent.prototype, \"valueTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], DropDownTreeComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], DropDownTreeComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], DropDownTreeComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('treeview', { static: false }),\n __metadata(\"design:type\", TreeViewComponent),\n __metadata(\"design:paramtypes\", [TreeViewComponent])\n], DropDownTreeComponent.prototype, \"treeview\", null);\n__decorate([\n ViewChild('filterInput', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], DropDownTreeComponent.prototype, \"filterInput\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"closed\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"nodeExpand\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"nodeCollapse\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], DropDownTreeComponent.prototype, \"filterChange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], DropDownTreeComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownTreeComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DropDownTreeComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], DropDownTreeComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownTreeComponent.prototype, \"valueDepth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], DropDownTreeComponent.prototype, \"hasChildren\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], DropDownTreeComponent.prototype, \"fetchChildren\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownTreeComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownTreeComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], DropDownTreeComponent.prototype, \"dataItem\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], DropDownTreeComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"valuePrimitive\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], DropDownTreeComponent.prototype, \"tabindex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], DropDownTreeComponent.prototype, \"itemDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], DropDownTreeComponent.prototype, \"isNodeExpanded\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], DropDownTreeComponent.prototype, \"isNodeVisible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], DropDownTreeComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownTreeComponent.prototype, \"filter\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], DropDownTreeComponent.prototype, \"focusableId\", void 0);\nDropDownTreeComponent = DropDownTreeComponent_1 = __decorate([ __param(7, Optional()), __param(7, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [PopupService,\n NavigationService,\n Renderer2,\n ElementRef,\n NgZone,\n ChangeDetectorRef,\n LocalizationService, Boolean])\n], DropDownTreeComponent);\n\nvar MultiSelectTreeComponent_1;\n/* tslint:disable:member-ordering */\nconst DEFAULT_POPUP_SETTINGS$1 = { animate: true };\nconst DEFAULT_CHECKABLE_SETTINGS = { checkChildren: true, checkOnClick: true };\nconst hasChildren$1 = () => false;\nconst fetchChildren$1 = () => of([]);\nconst itemDisabled$1 = () => false;\nconst isNodeVisible$1 = () => true;\n/**\n * Represents the [Kendo UI MultiSelectTree component for Angular]({% slug overview_multiselecttree %}).\n */\nlet MultiSelectTreeComponent = MultiSelectTreeComponent_1 = class MultiSelectTreeComponent {\n constructor(popupService, renderer, hostElement, navigationService, _zone, localization, cdr, touchEnabled$$1) {\n this.popupService = popupService;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.navigationService = navigationService;\n this._zone = _zone;\n this.localization = localization;\n this.cdr = cdr;\n this.touchEnabled = touchEnabled$$1;\n this.hostClasses = true;\n /**\n * Sets the levels in the data set where the values can be found when `valueField` is an Array.\n * The field serves to correctly allocate a data item used when the MultiSelectTree is initialized with a value.\n */\n this.valueDepth = [];\n /**\n * The hint which is displayed when the component is empty.\n */\n this.placeholder = \"\";\n /**\n * Sets the height of the options list. By default, `listHeight` is 200px.\n *\n * > The `listHeight` property affects only the list of options and not the whole popup container.\n * > To set the height of the popup container, use `popupSettings.height`.\n */\n this.listHeight = 200;\n /**\n * Sets the disabled state of the component.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n */\n this.readonly = false;\n /**\n * Specifies the type of the selected value\n * ([more information and example]({% slug valuebinding_multiselecttree %}#toc-primitive-values)).\n * If set to `true`, the selected value has to be a primitive one.\n */\n this.valuePrimitive = false;\n /**\n * Indicates whether the child nodes will be fetched on node expand or will be initially prefetched.\n * @default false\n */\n this.loadOnDemand = false;\n /**\n * @hidden\n *\n * Used by the kendo-label and kendo-floatinglabel to access and associate the focusable element with the provided label via aria-labelledby.\n */\n this.focusableId = `k-${guid()}`;\n /**\n * If set to `true`, renders a button on hovering over the component.\n * Clicking this button resets the value of the component to `undefined` and triggers the `change` event.\n * @default true\n */\n this.clearButton = true;\n /**\n * Renders the built-in input element for filtering the MultiSelectTree.\n * If set to `true`, the component emits the `filterChange` event, which can be used to [filter the MultiSelectTree manually]({% slug filtering_multiselecttree %}#toc-manual-filtering).\n * A built-in filtering implementation is available to use with the [`kendoMultiSelectTreeHierarchyBinding`]({% slug api_dropdowns_multiselecttreehierarchybindingdirective %}) and [`kendoMultiSelectTreeFlatBinding`]({% slug api_dropdowns_multiselecttreeflatbindingdirective %}) directives.\n * @default false\n */\n this.filterable = false;\n /**\n * If `checkАll` is set to `true` and the checkboxes are enabled, a tri-state checkbox appears above the embedded treeview.\n * Clicking the checkbox checks or unchecks all enabled items of the treeview that are loaded.\n * @default false\n */\n this.checkAll = false;\n /**\n * A function which determines if a specific node has child nodes.\n */\n this.hasChildren = hasChildren$1;\n /**\n * A function which provides the child nodes for a given parent node.\n */\n this.fetchChildren = fetchChildren$1;\n /**\n * A callback which determines whether a tree node should be rendered as hidden. The utility .k-display-none class is used to hide the nodes.\n * Useful for custom filtering implementations.\n */\n this.isNodeVisible = isNodeVisible$1;\n /**\n * A function that is executed for each data item and determines if a specific item is disabled.\n */\n this.itemDisabled = itemDisabled$1;\n /**\n * A user-defined callback function which receives an array of selected data items and maps them to an array of tags.\n *\n * @param { Any[] } dataItems - The selected data items from the list.\n * @returns { Any[] } - The tags that will be rendered by the component.\n */\n this.tagMapper = (tags) => tags || [];\n /**\n * Fires each time the user focuses the MultiSelectTree.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the MultiSelectTree gets blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the popup is about to open\n * ([see example]({% slug openstate_multiselecttree %})).\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the popup has been opened.\n */\n this.opened = new EventEmitter();\n /**\n * Fires each time the popup is about to close\n * ([see example]({% slug openstate_multiselecttree %})).\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the popup has been closed.\n */\n this.closed = new EventEmitter();\n /**\n * Fires when the user expands a node in the popup TreeView.\n */\n this.nodeExpand = new EventEmitter();\n /**\n * Fires when the user collapses a node in the popup TreeView.\n */\n this.nodeCollapse = new EventEmitter();\n /**\n * Fires each time the value is changed\n * ([see example]({% slug overview_multiselecttree %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time a tag is about to be removed.\n * This event is preventable. If you cancel it, the tag will not be removed.\n */\n this.removeTag = new EventEmitter();\n /**\n * Fires when the value of the built-in filter input element changes.\n */\n this.filterChange = new EventEmitter();\n /**\n * @hidden\n */\n this.filterStateChange = new EventEmitter();\n /**\n * @hidden\n */\n this.checkedItems = [];\n /**\n * @hidden\n */\n this.checkBy = (item) => item;\n /**\n * @hidden\n */\n this.showAfter = 0;\n /**\n * @hidden\n */\n this.allNodesHidden = false;\n this.tagListId = guid();\n this.tagPrefix = \"tag-\" + guid();\n this.focusedTagIndex = undefined;\n this._value = [];\n this._tabindex = 0;\n this._popupSettings = DEFAULT_POPUP_SETTINGS$1;\n this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;\n this._isFocused = false;\n this.subscriptions = [];\n this.lastAction = 'check';\n this.onTouchedCallback = noop;\n this.onChangeCallback = noop;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscribeEvents();\n }\n set treeview(treeview) {\n this._treeview = treeview;\n if (treeview) {\n // If filtering is enabled, focus the TreeView on mobile devices instead of the filter input\n if (this.isFocused && !this.filterable && !this.checkAll || this.touchEnabled) {\n treeview.focus();\n }\n /**\n * the treeview animations are initially disabled (we don't want expand animations during popup opening)\n * re-enables the animations for user interaction\n * The Promise is required to properly change the `animate` property when\n * the popup is appended to a container and opened upon initialization.\n * Otherwise, the \"Expression has changed...\" type error will be thrown.\n */\n Promise.resolve(null).then(() => this.treeview.animate = true);\n }\n }\n get treeview() {\n return this._treeview;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const providedTabIndex = parseNumber(value);\n const defaultTabIndex = 0;\n this._tabindex = !isNaN(providedTabIndex) ? providedTabIndex : defaultTabIndex;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Configures the popup of the MultiSelectTree.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `width: Number | String`—Sets the width of the popup container. By default, the width of the host element is used. If set to `auto`, the component automatically adjusts the width of the popup and no item labels are wrapped.\n * - `height: Number`—Sets the height of the popup container.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, DEFAULT_POPUP_SETTINGS$1, settings);\n // `detectChanges` needed, otherwise upon value initialization and `appendTo` property\n // an error is thrown => ExpressionChangedAfterItHasBeenCheckedError\n this.cdr.detectChanges();\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Defines the checkable settings of the MultiSelecTree nodes.\n * If no value is provided, the default [`CheckableSettings`]({% slug api_dropdowns_multiselecttreecheckablesettings %}) are applied.\n */\n set checkableSettings(settings) {\n this._checkableSettings = Object.assign({}, DEFAULT_CHECKABLE_SETTINGS, settings);\n }\n get checkableSettings() {\n return this._checkableSettings;\n }\n /**\n * Sets the data of the MultiSelectTree.\n *\n * > The data has to be provided in an array-like list with objects.\n */\n set data(data) {\n this._nodes = data;\n this.setState();\n }\n get data() {\n return this._nodes;\n }\n /**\n * Sets the value of the MultiSelectTree.\n * It can either be of the primitive (string, numbers) or of the complex (objects) type.\n * To define the type, use the `valuePrimitive` option.\n *\n */\n set value(value) {\n this._value = value ? value : [];\n this.setState();\n }\n get value() {\n return this._value;\n }\n /**\n * Keeps the current `dataItems` object in order to resolve selection.\n * Needs to be provided when when programmatically setting a `value` and `valuePrimitive` is set to `true`.\n */\n set dataItems(items) {\n this._dataItems = (items || []).map((item, index) => {\n if (hasProps(item, ['dataItem', 'index', 'level'])) {\n return item;\n }\n return {\n dataItem: item,\n index: null,\n level: this.valueDepth[index] || 0\n };\n });\n this.setState();\n }\n get dataItems() {\n return this._dataItems || this.value.map((value, index) => ({\n dataItem: value,\n index: null,\n level: this.valueDepth[index] || 0\n }));\n }\n /**\n * @hidden\n */\n get focusedTagId() {\n if (!isPresent(this.focusedTagIndex) || this.isOpen) {\n return null;\n }\n const dataItem = this.tags[this.focusedTagIndex];\n return `${this.tagPrefix}-${valueFrom({ dataItem }, this.valueField)}`;\n }\n set isFocused(isFocused) {\n this.renderer[isFocused ? 'addClass' : 'removeClass'](this.hostElement.nativeElement, 'k-state-focused');\n this._isFocused = isFocused;\n }\n get isFocused() {\n return this._isFocused;\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n get width() {\n const wrapperWidth = this.wrapper.nativeElement.offsetWidth;\n const width = this.popupSettings.width || wrapperWidth;\n const minWidth = isNaN(wrapperWidth) ? wrapperWidth : `${wrapperWidth}px`;\n const maxWidth = isNaN(width) ? width : `${width}px`;\n return { min: minWidth, max: maxWidth };\n }\n get height() {\n const popupHeight = this.popupSettings.height;\n return isPresent(popupHeight) ? `${popupHeight}px` : 'auto';\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n get popupContainerClasses() {\n const containerClasses = ['k-popup-dropdowntree', 'k-reset', 'k-group', 'k-list-container'];\n if (this.popupSettings.popupClass) {\n containerClasses.push(this.popupSettings.popupClass);\n }\n return containerClasses;\n }\n /**\n * @hidden\n *\n * Alias for `data`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives.\n */\n set nodes(nodes) {\n this.data = nodes;\n }\n get nodes() {\n return this.data;\n }\n /**\n * @hidden\n *\n * Alias for `fetchChildren`. Used for compatibility with the `DataBoundComponent` interface.\n * Required for the data-binding directives\n */\n set children(callback) {\n this.fetchChildren = callback;\n }\n get children() {\n return this.fetchChildren;\n }\n /**\n * @hidden\n *\n * Alias for `nodeExpand`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get expand() {\n return this.nodeExpand;\n }\n /**\n * @hidden\n *\n * Alias for `nodeCollapse`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n get collapse() {\n return this.nodeCollapse;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeExpanded`. Used for compatibility with the `ExpandableComponent` interface.\n * Required for the expand-directive.\n */\n set isExpanded(callback) {\n this.isNodeExpanded = callback;\n }\n get isExpanded() {\n return this.isNodeExpanded;\n }\n /**\n * @hidden\n *\n * Alias for `isNodeVisible`. Used for compatibility with the `DataBoundComponent` interface.\n * The `DataBoundComponent` interface is used in the data-binding directives.\n */\n set isVisible(callback) {\n this.isNodeVisible = callback;\n }\n get isVisible() {\n return this.isNodeVisible;\n }\n get isTagFocused() {\n return !this.isOpen && this.focusedTagIndex !== undefined;\n }\n get isTreeViewActive() {\n return this.treeview && this.treeview.isActive;\n }\n get isWrapperActive() {\n return document.activeElement === this.wrapper.nativeElement;\n }\n get isFilterActive() {\n return this.filterInput && document.activeElement === this.filterInput.nativeElement;\n }\n get isCheckAllActive() {\n return this.checkAllInput && document.activeElement === this.checkAllInput.nativeElement;\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.hostElement.nativeElement, 'tabindex');\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', String(this.isOpen));\n this.subscriptions.push(this.localization\n .changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.cdr.markForCheck();\n }));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.destroyPopup();\n this.unsubscribeEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(['textField', 'valueField', 'valuePrimitive'], changes, false)) {\n this.setState();\n }\n if (anyChanged(['valueDepth', 'value', 'dataItems'], changes, false)) {\n if (changes.value && !changes.dataItems && !this.valuePrimitive) {\n // Update the dataItems if the value is updated programmatically (non-primitive values only)\n // In the primitive case, the client should update the dataItems as well\n this.dataItems = this.value;\n }\n else {\n // Re-map the dataItems because `valueDepth` is not yet available when the check directive parses the items\n this.dataItems = this.dataItems.map((item, index) => (Object.assign({}, item, { level: this.valueDepth[index] || 0 })));\n }\n }\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.verifySettings();\n }\n /**\n * @hidden\n *\n * Used by the kendo-floatinglabel component to determine if the floating label\n * should be rendered inside the input when the component is not focused.\n */\n isEmpty() {\n return !Boolean(this.placeholder) && (!isPresent(this.value) || this.value.length === 0);\n }\n /**\n * Focuses the MultiSelectTree.\n */\n focus() {\n if (!this.disabled) {\n this.wrapper.nativeElement.focus();\n }\n }\n /**\n * Blurs the MultiSelectTree.\n */\n blur() {\n if (!this.disabled) {\n this.wrapper.nativeElement.blur();\n }\n }\n /**\n * Focuses a specific item of the MultiSelectTree based on a provided index in the format of `1_1`.\n * The targeted item should be expanded in order for it to be focused.\n * If null or invalid index is provided the focus will be set on the first item.\n */\n focusItemAt(index) {\n if (this.treeview) {\n const lookup = this.treeview.itemLookup(index);\n const isItemDisabled = !isPresent(lookup) || this.treeview.isDisabled(lookup.item.dataItem, lookup.item.index);\n if (!isItemDisabled) {\n this.treeview.focus(index);\n }\n }\n }\n /**\n * Resets the value of the MultiSelectTree.\n * If you use the `reset` method to clear the value of the component,\n * the model will not update automatically and the `valueChange` event will not be fired.\n */\n reset() {\n this.value = [];\n this.dataItems = [];\n this.valueDepth = [];\n }\n /**\n * Toggles the visibility of the popup\n * ([see example]({% slug openstate_multiselecttree %})).\n * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n // The Promise is required to open the popup on load.\n // Otherwise, the \"ViewContainerRef not found...\" error will be thrown.\n Promise.resolve(null).then(() => {\n const shouldOpen = isPresent(open) ? open : !isPresent(this.popupRef);\n this.destroyPopup();\n if (shouldOpen) {\n this.createPopup();\n }\n });\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this.isFocused) {\n this.isFocused = true;\n if (hasObservers(this.onFocus)) {\n this._zone.run(() => {\n this.onFocus.emit();\n });\n }\n // Re-focus the treeview if `close` is prevented\n if (this.isOpen && this.treeview) {\n this.lastNodeOnFocus.setAttribute('tabindex', '0');\n this.treeview.focus();\n }\n }\n }\n /**\n * @hidden\n */\n handleBlur(e) {\n const relatedTarget = e && e.relatedTarget;\n if (this.hostElement.nativeElement.contains(relatedTarget) ||\n (this.isOpen && this.popupRef.popupElement.contains(relatedTarget))) {\n return;\n }\n this.isFocused = false;\n this.togglePopup(false);\n if (hasObservers(this.onBlur) ||\n isUntouched(this.hostElement.nativeElement)) {\n this._zone.run(() => {\n this.onBlur.emit();\n this.onTouchedCallback();\n });\n }\n }\n /**\n * @hidden\n */\n handleClick() {\n this.togglePopup(!this.isOpen);\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const deleteTag = this.isWrapperActive && event.keyCode === Keys.Backspace && this.tags.length > 0;\n if (deleteTag) {\n this.handleBackspace();\n return;\n }\n if (this.disabled || this.readonly) {\n return;\n }\n const eventData = event;\n const action = this.navigationService.process({\n originalEvent: eventData\n });\n if (action === NavigationAction.Open) {\n eventData.preventDefault();\n }\n }\n /**\n * @hidden\n */\n handleNodeClick(node) {\n if (!this.isFocused) {\n // Re-focus the MultiSelectTree when popup close is prevented and a node is clicked\n // On click the focus should be on the clicked element which is why we need to update the lastNodeOnFocus\n const parent = node.originalEvent.target.parentElement.parentElement;\n this.lastNodeOnFocus = parent;\n this.focus();\n }\n }\n /**\n * @hidden\n */\n togglePopup(open) {\n const isDisabled = this.disabled || this.readonly;\n const sameState = this.isOpen === open;\n this._zone.run(() => {\n this.focusedTagIndex = undefined;\n });\n if (isDisabled || sameState) {\n return;\n }\n const togglePrevented = this.triggerPopupEvents(open);\n if (!togglePrevented) {\n open ?\n this.createPopup() :\n this.destroyPopup();\n }\n else {\n this.removeTreeViewFromTabOrder();\n }\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n handleCheckedItemsChange(items) {\n this.valueDepth = items.map(item => item.level);\n this.lastAction = items.length > this.dataItems.length ? 'check' : 'uncheck';\n this.dataItems = items.slice();\n this.updateValue(this.dataItems);\n }\n /**\n * @hidden\n */\n handleRemoveTag({ tag, index }) {\n if (this.disabled || this.readonly) {\n return;\n }\n const eventArgs = new RemoveTagEvent(tag);\n this.removeTag.emit(eventArgs);\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n // Remove tags based on their position index\n if (tag instanceof Array) {\n // Remove group tag\n this.dataItems = this.dataItems.filter((_item, i) => i < this.showAfter || this.disabledIndices.has(i));\n this.valueDepth = this.valueDepth.filter((_item, i) => i < this.showAfter || this.disabledIndices.has(i));\n }\n else {\n // Remove single tag\n this.dataItems = this.dataItems.filter((_item, i) => i !== index || this.disabledIndices.has(i));\n this.valueDepth = this.valueDepth.filter((_item, i) => i !== index || this.disabledIndices.has(i));\n }\n this.updateValue(this.dataItems);\n // focus the wrapper if the component is not focused - the floating label reacts to focus/blur\n if (!this.isFocused) {\n this.focus();\n }\n }\n /**\n * @hidden\n */\n handleTagMapperChange(showAfter) {\n this.showAfter = parseNumber(showAfter);\n this.setTags();\n }\n /**\n * @hidden\n */\n clearAll(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n this.focus();\n this.value = this.value.filter((_item, index) => this.disabledIndices.has(index));\n this.dataItems = this.dataItems.filter((_item, index) => this.disabledIndices.has(index));\n this.valueDepth = this.valueDepth.filter((_depth, index) => this.disabledIndices.has(index));\n this.emitValueChange(this.value);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value || [];\n // Update the dataItems if the value is updated programmatically (non-primitive values only)\n // In the primitive case, the client should update the dataItems as well\n if (!this.valuePrimitive) {\n this.dataItems = this.value;\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 setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleFilterInputChange(term) {\n this.filterChange.next(term);\n this.allNodesHidden = this.nodes.every((node, index) => !this.isVisible(node, String(index)));\n }\n /**\n * @hidden\n */\n toggleCheckAll() {\n this.checkAllInput.nativeElement.focus();\n this.checkAllInput.nativeElement.click();\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isPresent(this.valueField) || !isPresent(this.textField)) {\n throw new Error(MultiSelectTreeMessages.textAndValue);\n }\n if (!isArray(this.value)) {\n throw new Error(MultiSelectTreeMessages.array);\n }\n if (this.value.length > 0) {\n if (this.valuePrimitive && this.value.some(item => isObject(item))) {\n throw new Error(MultiSelectTreeMessages.primitive);\n }\n const isEveryDataItemObject = this.dataItems.every(item => isObject(item.dataItem));\n if (this.valuePrimitive && !isArray(this.dataItems)) {\n throw new Error(MultiSelectTreeMessages.dataItems);\n }\n if (this.valuePrimitive && !isEveryDataItemObject) {\n throw new Error(MultiSelectTreeMessages.dataItems);\n }\n if (this.valuePrimitive && this.dataItems.length !== this.value.length) {\n throw new Error(MultiSelectTreeMessages.dataItemsLength);\n }\n if (!this.valuePrimitive && !isObjectArray(this.value)) {\n throw new Error(MultiSelectTreeMessages.object);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && !isArray(this.valueDepth)) {\n throw new Error(MultiSelectTreeMessages.valueDepth);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && this.valueDepth.length === 0) {\n throw new Error(MultiSelectTreeMessages.valueDepth);\n }\n if ((isArray(this.valueField) || isArray(this.textField)) && this.valueDepth.length !== this.value.length) {\n throw new Error(MultiSelectTreeMessages.valueDepthLength);\n }\n }\n }\n emitValueChange(value) {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n }\n triggerPopupEvents(open) {\n const eventArgs = new PreventableEvent();\n open ?\n this.open.emit(eventArgs) :\n this.close.emit(eventArgs);\n return eventArgs.isDefaultPrevented();\n }\n createPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };\n const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n appendTo: this.appendTo,\n anchorAlign: anchorPosition,\n content: this.popupTemplate,\n popupAlign: popupPosition,\n positionMode: 'absolute',\n popupClass: this.popupContainerClasses\n });\n const popupWrapper = this.popupRef.popupElement;\n const { min, max } = this.width;\n popupWrapper.style.minWidth = min;\n popupWrapper.style.width = max;\n popupWrapper.style.height = this.height;\n this.renderer.setAttribute(popupWrapper, 'dir', this.direction);\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');\n this.popupRef.popupOpen.subscribe(() => {\n this.cdr.detectChanges();\n this.opened.emit();\n });\n this.popupRef.popupClose.subscribe(() => {\n this.closed.emit();\n });\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'false');\n if (this.filter !== \"\") {\n this.filter = \"\";\n this.allNodesHidden = false;\n if (hasObservers(this.filterChange)) {\n this._zone.run(() => {\n this.filterChange.emit(\"\");\n });\n }\n }\n }\n }\n subscribeEvents() {\n this.subscriptions.push(this.navigationService.open.subscribe(() => this.togglePopup(true)), this.navigationService.enter\n .pipe(tap((event) => event.originalEvent.preventDefault()))\n .subscribe(() => this.togglePopup(true)), merge(this.navigationService.close, this.navigationService.esc).subscribe(() => {\n this.focus();\n this.togglePopup(false);\n }), this.navigationService.tab.subscribe(this.handleTabKey.bind(this)), this.navigationService.up.subscribe(this.handleUpKey.bind(this)), this.navigationService.down.subscribe(this.handleDownKey.bind(this)), this.navigationService.left\n .pipe(filter(() => !this.isTreeViewActive))\n .subscribe(this.direction === 'rtl' ? this.handleRightKey.bind(this) : this.handleLeftKey.bind(this)), this.navigationService.right\n .pipe(filter(() => !this.isTreeViewActive))\n .subscribe(this.direction === 'rtl' ? this.handleLeftKey.bind(this) : this.handleRightKey.bind(this)), this.navigationService.home.pipe(filter(() => !this.isOpen)).subscribe(this.handleHome.bind(this)), this.navigationService.end.pipe(filter(() => !this.isOpen)).subscribe(this.handleEnd.bind(this)), this.navigationService.backspace.pipe(filter(() => this.isTagFocused)).subscribe(this.handleBackspace.bind(this)), this.navigationService.delete.pipe(filter(() => this.isTagFocused)).subscribe(this.handleDelete.bind(this)));\n }\n handleTabKey() {\n this.focus();\n if (this.isOpen) {\n this.treeview.blur();\n this.removeTreeViewFromTabOrder();\n }\n }\n handleUpKey(event) {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n // Prevent toggling the focus between the filterInput and the wrapper elements with `up` key\n if (this.isWrapperActive) {\n return;\n }\n const isFirstNodeActive = this.treeview['navigationService']['activeIndex'] === '0';\n // Current focus is on the filter input => should focus the wrapper\n if (this.filterable && this.isFilterActive) {\n this.focus();\n // Current focus is on the treeview first node => should focus the check all checkbox if enabled\n }\n else if (this.checkAll && !this.isCheckAllActive && isFirstNodeActive) {\n this.checkAllInput.nativeElement.focus();\n // Current focus is either on the check all checkbox or the treeview's first node\n // => should focus either the filter input (if enabled) or the wrapper\n }\n else if (this.isCheckAllActive || isFirstNodeActive) {\n this.filterable ?\n this.filterInput.nativeElement.focus() :\n this.focus();\n }\n }\n handleDownKey(event) {\n if (!this.treeview) {\n return;\n }\n event.originalEvent.preventDefault();\n // Current focus is on the wrapper => should focus the filter input\n if (this.filterable && this.isWrapperActive) {\n this.filterInput.nativeElement.focus();\n // Current focus is on the wrapper/filter input => should focus check all checkbox if enabled\n }\n else if (this.checkAll && (this.isWrapperActive || this.isFilterActive)) {\n this.checkAllInput.nativeElement.focus();\n // Should focus the treeview if filterable and check all are disabled\n }\n else if (!this.treeview.isActive) {\n this.treeview.focus();\n }\n this.focusedTagIndex = undefined;\n }\n handleRightKey(event) {\n event.originalEvent.preventDefault();\n const last = this.tags.length - 1;\n if (this.focusedTagIndex === last) {\n this.focusedTagIndex = undefined;\n }\n else if (this.focusedTagIndex < last) {\n this.focusedTagIndex++;\n }\n else if (!this.focusedTagIndex) {\n this.focusedTagIndex = 0;\n }\n }\n handleLeftKey(event) {\n event.originalEvent.preventDefault();\n if (this.focusedTagIndex === undefined || this.focusedTagIndex < 0) {\n this.focusedTagIndex = this.tags.length - 1;\n }\n else if (this.focusedTagIndex !== 0) {\n this.focusedTagIndex--;\n }\n }\n handleEnd(event) {\n event.originalEvent.preventDefault();\n this.focusedTagIndex = this.tags.length - 1;\n }\n handleHome(event) {\n event.originalEvent.preventDefault();\n this.focusedTagIndex = 0;\n }\n handleBackspace() {\n if (this.focusedTagIndex !== undefined) {\n this.handleDelete();\n }\n else {\n const tag = this.tags[this.tags.length - 1];\n const index = this.tags.length - 1;\n this.handleRemoveTag({ tag, index });\n }\n }\n handleDelete() {\n const tag = this.tags[this.focusedTagIndex];\n const index = this.focusedTagIndex;\n this.handleRemoveTag({ tag, index });\n if (this.focusedTagIndex === this.tags.length) {\n this.focusedTagIndex = undefined;\n }\n }\n unsubscribeEvents() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n /**\n * Remove the `TreeView` from the tab order, otherwise a focus loop between the page elements will occur\n * and the user will not be able to tab to the rest of the browser elements\n */\n removeTreeViewFromTabOrder() {\n const nodes = this.treeview.element.nativeElement.querySelectorAll('li');\n nodes.forEach(item => {\n if (item.getAttribute('tabindex') === '0') {\n this.lastNodeOnFocus = item;\n this.lastNodeOnFocus.setAttribute('tabindex', '-1');\n }\n });\n }\n setState() {\n if (isPresent(this.dataItems) && isPresent(this.valueField)) {\n this.setTags();\n this.checkedItems = this.dataItems.slice();\n }\n this.cdr.markForCheck();\n }\n setTags() {\n const source = this.dataItems.map(item => item.dataItem);\n this.tags = this.tagMapper(source);\n this.disabledIndices = this.disabledItemsMapper();\n }\n updateValue(value) {\n const newValue = this.valuePrimitive ?\n value.map(item => valueFrom(item, this.valueField)) :\n value.map(item => item.dataItem);\n this.value = newValue;\n this.emitValueChange(this.value);\n }\n /**\n * @hidden\n *\n * Determines which of the provided tags should be disabled and stores their position indices\n */\n disabledItemsMapper() {\n return new Set(this.dataItems.reduce((indices, item, index) => {\n if (this.itemDisabled(item.dataItem, item.index)) {\n indices.push(index);\n }\n return indices;\n }, []));\n }\n};\nMultiSelectTreeComponent.ɵfac = function MultiSelectTreeComponent_Factory(t) { return new (t || MultiSelectTreeComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nMultiSelectTreeComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MultiSelectTreeComponent, selectors: [[\"kendo-multiselecttree\"]], contentQueries: function MultiSelectTreeComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NodeTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoDataTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TagTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupTagTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.nodeTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noDataTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tagTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupTagTemplate = _t.first);\n } }, viewQuery: function MultiSelectTreeComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c41, 5);\n ɵngcc0.ɵɵviewQuery(_c12, 7);\n ɵngcc0.ɵɵviewQuery(_c19, 7);\n ɵngcc0.ɵɵviewQuery(_c11, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c42, 5);\n ɵngcc0.ɵɵviewQuery(_c48, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.treeview = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.checkAllInput = _t.first);\n } }, hostVars: 5, hostBindings: function MultiSelectTreeComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-dropdowntree\", ctx.hostClasses);\n } }, inputs: { valueDepth: \"valueDepth\", placeholder: \"placeholder\", listHeight: \"listHeight\", disabled: \"disabled\", readonly: \"readonly\", valuePrimitive: \"valuePrimitive\", loadOnDemand: \"loadOnDemand\", focusableId: \"focusableId\", clearButton: \"clearButton\", filterable: \"filterable\", checkAll: \"checkAll\", hasChildren: \"hasChildren\", fetchChildren: \"fetchChildren\", isNodeVisible: \"isNodeVisible\", itemDisabled: \"itemDisabled\", tagMapper: \"tagMapper\", tabindex: \"tabindex\", popupSettings: \"popupSettings\", checkableSettings: \"checkableSettings\", data: \"data\", value: \"value\", dataItems: \"dataItems\", isNodeExpanded: \"isNodeExpanded\", textField: \"textField\", valueField: \"valueField\", loading: \"loading\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", open: \"open\", opened: \"opened\", close: \"close\", closed: \"closed\", nodeExpand: \"nodeExpand\", nodeCollapse: \"nodeCollapse\", valueChange: \"valueChange\", removeTag: \"removeTag\", filterChange: \"filterChange\" }, exportAs: [\"kendoMultiSelectTree\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n NavigationService,\n DataService,\n DisabledItemsService,\n SelectionService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselecttree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 28, consts: function () { let i18n_49; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed in the popup when there are no items\n * @meaning kendo.multiselecttree.noDataText\n */\n const MSG_EXTERNAL_5589893825114548617$$DIST_FESM2015_INDEX_JS_50 = goog.getMsg(\"NO DATA FOUND\");\n i18n_49 = MSG_EXTERNAL_5589893825114548617$$DIST_FESM2015_INDEX_JS_50;\n }\n else {\n i18n_49 = $localize `:kendo.multiselecttree.noDataText|The text displayed in the popup when there are no items␟1689309191709bbbb071c889072707cb3f12dc93␟5589893825114548617:NO DATA FOUND`;\n } let i18n_51; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the clear button\n * @meaning kendo.multiselecttree.clearTitle\n */\n const MSG_EXTERNAL_7268188619735862842$$DIST_FESM2015_INDEX_JS_52 = goog.getMsg(\"clear\");\n i18n_51 = MSG_EXTERNAL_7268188619735862842$$DIST_FESM2015_INDEX_JS_52;\n }\n else {\n i18n_51 = $localize `:kendo.multiselecttree.clearTitle|The title of the clear button␟f99cf5ed2ae05c7d1df8dc97f56176a4934c8db9␟7268188619735862842:clear`;\n } let i18n_53; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text displayed for the check-all checkbox\n * @meaning kendo.multiselecttree.checkAllText\n */\n const MSG_EXTERNAL_4511060501589211517$$DIST_FESM2015_INDEX_JS_54 = goog.getMsg(\"Check all\");\n i18n_53 = MSG_EXTERNAL_4511060501589211517$$DIST_FESM2015_INDEX_JS_54;\n }\n else {\n i18n_53 = $localize `:kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox␟7213da1304801b92c6dd35231b5305408e2734e3␟4511060501589211517:Check all`;\n } return [[\"kendoMultiSelectTreeLocalizedMessages\", \"\", \"noDataText\", i18n_49, \"clearTitle\", i18n_51, \"checkAllText\", i18n_53], [\"role\", \"listbox\", \"aria-haspopup\", \"tree\", 3, \"ngClass\", \"kendoEventsOutsideAngular\", \"scope\", \"click\", \"keydown\"], [\"wrapper\", \"\"], [3, \"id\", \"tags\", \"focused\", \"textField\", \"valueField\", \"valueDepth\", \"disabled\", \"tagPrefix\", \"template\", \"groupTemplate\", \"disabledIndices\", \"removeTag\"], [\"class\", \"k-input k-readonly\", 4, \"ngIf\"], [\"class\", \"k-icon k-clear-value k-i-close\", \"role\", \"button\", \"tabindex\", \"-1\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"k-icon k-i-loading\", 4, \"ngIf\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [1, \"k-input\", \"k-readonly\"], [\"role\", \"button\", \"tabindex\", \"-1\", 1, \"k-icon\", \"k-clear-value\", \"k-i-close\", 3, \"click\"], [1, \"k-icon\", \"k-i-loading\"], [\"class\", \"k-list-filter\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-check-all\", 4, \"ngIf\"], [\"kendoMultiSelectTreeCheckable\", \"\", 3, \"nodes\", \"animate\", \"checkable\", \"checkedItems\", \"valueField\", \"textField\", \"children\", \"hasChildren\", \"isExpanded\", \"isDisabled\", \"nodeTemplate\", \"loadOnDemand\", \"filter\", \"isVisible\", \"kendoEventsOutsideAngular\", \"scope\", \"keydown\", \"nodeClick\", \"expand\", \"collapse\", \"checkedItemsChange\"], [\"treeview\", \"\"], [\"class\", \"k-nodata\", 4, \"ngIf\"], [1, \"k-list-filter\"], [\"role\", \"textbox\", \"aria-haspopup\", \"true\", \"aria-expanded\", \"false\", \"tabindex\", \"0\", \"aria-disabled\", \"false\", \"aria-readonly\", \"false\", 1, \"k-textbox\", 3, \"filterInput\", \"ngModel\", \"kendoEventsOutsideAngular\", \"scope\", \"input\", \"keydown\", \"ngModelChange\"], [\"filterInput\", \"\"], [1, \"k-icon\", \"k-i-zoom\"], [3, \"templateContext\"], [1, \"k-check-all\"], [\"type\", \"checkbox\", \"role\", \"checkbox\", \"tabindex\", \"0\", \"aria-disabled\", \"false\", \"aria-readonly\", \"false\", 1, \"k-checkbox\", 3, \"checkAll\", \"treeview\", \"checkedItems\", \"valueField\", \"lastAction\", \"kendoEventsOutsideAngular\", \"scope\", \"checkedItemsChange\", \"keydown\"], [\"checkAllInput\", \"\"], [1, \"k-checkbox-label\", 3, \"click\", \"mousedown\"], [1, \"k-nodata\"], [3, \"ngIf\", \"templateContext\"], [3, \"ngIf\"]]; }, template: function MultiSelectTreeComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵlistener(\"click\", function MultiSelectTreeComponent_Template_div_click_1_listener() { return ctx.handleClick(); })(\"keydown\", function MultiSelectTreeComponent_Template_div_keydown_1_listener($event) { return ctx.handleKeydown($event); });\n ɵngcc0.ɵɵelementStart(3, \"kendo-taglist\", 3);\n ɵngcc0.ɵɵlistener(\"removeTag\", function MultiSelectTreeComponent_Template_kendo_taglist_removeTag_3_listener($event) { return ctx.handleRemoveTag($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, MultiSelectTreeComponent_span_4_Template, 2, 1, \"span\", 4);\n ɵngcc0.ɵɵtemplate(5, MultiSelectTreeComponent_span_5_Template, 1, 1, \"span\", 5);\n ɵngcc0.ɵɵtemplate(6, MultiSelectTreeComponent_span_6_Template, 1, 0, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, MultiSelectTreeComponent_ng_template_7_Template, 7, 25, \"ng-template\", null, 7, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(9, null, 8);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(23, _c56, ctx.disabled))(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(25, _c1, ctx.handleFocus, ctx.handleBlur))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"aria-describedby\", ctx.tagListId)(\"aria-readonly\", ctx.readonly)(\"aria-activedescendant\", ctx.focusedTagId)(\"tabindex\", ctx.tabindex)(\"id\", ctx.focusableId)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.tagListId)(\"tags\", ctx.tags)(\"focused\", ctx.focusedTagIndex)(\"textField\", ctx.textField)(\"valueField\", ctx.valueField)(\"valueDepth\", ctx.valueDepth)(\"disabled\", ctx.disabled)(\"tagPrefix\", ctx.tagPrefix)(\"template\", ctx.tagTemplate)(\"groupTemplate\", ctx.groupTagTemplate)(\"disabledIndices\", ctx.disabledIndices);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.tags || !ctx.tags.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.disabled && !ctx.loading && !ctx.readonly && ctx.clearButton && (ctx.tags == null ? null : ctx.tags.length));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.loading);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc3.NgClass, ɵngcc2.EventsOutsideAngularDirective, TagListComponent, ɵngcc3.NgIf, ɵngcc5.DefaultValueAccessor, FilterInputDirective, ɵngcc5.NgControlStatus, ɵngcc5.NgModel, TemplateContextDirective, CheckAllDirective, ɵngcc6.TreeViewComponent, CheckDirective]; }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-dropdowntree'),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], MultiSelectTreeComponent.prototype, \"direction\", void 0);\n__decorate([\n ContentChild(HeaderTemplateDirective, { static: false }),\n __metadata(\"design:type\", HeaderTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"headerTemplate\", void 0);\n__decorate([\n ContentChild(FooterTemplateDirective, { static: false }),\n __metadata(\"design:type\", FooterTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"footerTemplate\", void 0);\n__decorate([\n ContentChild(NodeTemplateDirective, { static: false }),\n __metadata(\"design:type\", NodeTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"nodeTemplate\", void 0);\n__decorate([\n ContentChild(NoDataTemplateDirective, { static: false }),\n __metadata(\"design:type\", NoDataTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"noDataTemplate\", void 0);\n__decorate([\n ContentChild(TagTemplateDirective, { static: false }),\n __metadata(\"design:type\", TagTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"tagTemplate\", void 0);\n__decorate([\n ContentChild(GroupTagTemplateDirective, { static: false }),\n __metadata(\"design:type\", GroupTagTemplateDirective)\n], MultiSelectTreeComponent.prototype, \"groupTagTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], MultiSelectTreeComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], MultiSelectTreeComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], MultiSelectTreeComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('treeview', { static: false }),\n __metadata(\"design:type\", TreeViewComponent),\n __metadata(\"design:paramtypes\", [TreeViewComponent])\n], MultiSelectTreeComponent.prototype, \"treeview\", null);\n__decorate([\n ViewChild('filterInput', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], MultiSelectTreeComponent.prototype, \"filterInput\", void 0);\n__decorate([\n ViewChild('checkAllInput', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], MultiSelectTreeComponent.prototype, \"checkAllInput\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], MultiSelectTreeComponent.prototype, \"tabindex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MultiSelectTreeComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MultiSelectTreeComponent.prototype, \"checkableSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectTreeComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectTreeComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectTreeComponent.prototype, \"dataItems\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], MultiSelectTreeComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], MultiSelectTreeComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], MultiSelectTreeComponent.prototype, \"valueDepth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"loading\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MultiSelectTreeComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], MultiSelectTreeComponent.prototype, \"listHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"valuePrimitive\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"loadOnDemand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MultiSelectTreeComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"filterable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MultiSelectTreeComponent.prototype, \"checkAll\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectTreeComponent.prototype, \"hasChildren\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectTreeComponent.prototype, \"fetchChildren\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectTreeComponent.prototype, \"isNodeExpanded\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectTreeComponent.prototype, \"isNodeVisible\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], MultiSelectTreeComponent.prototype, \"itemDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], MultiSelectTreeComponent.prototype, \"tagMapper\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"opened\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"closed\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"nodeExpand\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"nodeCollapse\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"removeTag\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MultiSelectTreeComponent.prototype, \"filterChange\", void 0);\nMultiSelectTreeComponent = MultiSelectTreeComponent_1 = __decorate([ __param(7, Optional()), __param(7, Inject(TOUCH_ENABLED)),\n __metadata(\"design:paramtypes\", [PopupService,\n Renderer2,\n ElementRef,\n NavigationService,\n NgZone,\n LocalizationService,\n ChangeDetectorRef, Boolean])\n], MultiSelectTreeComponent);\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when flat data is provided.\n */\nlet DropDownTreeFlatBindingDirective = class DropDownTreeFlatBindingDirective extends FlatDataBindingDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n }\n};\nDropDownTreeFlatBindingDirective.ɵfac = function DropDownTreeFlatBindingDirective_Factory(t) { return new (t || DropDownTreeFlatBindingDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.DataBoundComponent)); };\nDropDownTreeFlatBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DropDownTreeFlatBindingDirective, selectors: [[\"\", \"kendoDropDownTreeFlatBinding\", \"\"]], inputs: { nodes: [\"kendoDropDownTreeFlatBinding\", \"nodes\"], idField: [\"valueField\", \"idField\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input('kendoDropDownTreeFlatBinding'),\n __metadata(\"design:type\", Array)\n], DropDownTreeFlatBindingDirective.prototype, \"nodes\", void 0);\n__decorate([\n Input('valueField'),\n __metadata(\"design:type\", String)\n], DropDownTreeFlatBindingDirective.prototype, \"idField\", void 0);\nDropDownTreeFlatBindingDirective = __decorate([ __metadata(\"design:paramtypes\", [DataBoundComponent])\n], DropDownTreeFlatBindingDirective);\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when hierarchical data is provided.\n */\nlet DropDownTreeHierarchyBindingDirective = class DropDownTreeHierarchyBindingDirective extends HierarchyBindingDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n this.dropDownTree = dropDownTree;\n }\n /**\n * The nodes which will be displayed by the DropDownTree.\n */\n set data(nodes) {\n this.dropDownTree.nodes = nodes;\n this.nodes = nodes;\n }\n};\nDropDownTreeHierarchyBindingDirective.ɵfac = function DropDownTreeHierarchyBindingDirective_Factory(t) { return new (t || DropDownTreeHierarchyBindingDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.DataBoundComponent)); };\nDropDownTreeHierarchyBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DropDownTreeHierarchyBindingDirective, selectors: [[\"\", \"kendoDropDownTreeHierarchyBinding\", \"\"]], inputs: { data: [\"kendoDropDownTreeHierarchyBinding\", \"data\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input('kendoDropDownTreeHierarchyBinding'),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], DropDownTreeHierarchyBindingDirective.prototype, \"data\", null);\nDropDownTreeHierarchyBindingDirective = __decorate([ __metadata(\"design:paramtypes\", [DataBoundComponent])\n], DropDownTreeHierarchyBindingDirective);\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when flat data is provided.\n */\nlet MultiSelectTreeFlatBindingDirective = class MultiSelectTreeFlatBindingDirective extends FlatDataBindingDirective {\n constructor(multiSelectTree) {\n super(multiSelectTree);\n }\n};\nMultiSelectTreeFlatBindingDirective.ɵfac = function MultiSelectTreeFlatBindingDirective_Factory(t) { return new (t || MultiSelectTreeFlatBindingDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.DataBoundComponent)); };\nMultiSelectTreeFlatBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MultiSelectTreeFlatBindingDirective, selectors: [[\"\", \"kendoMultiSelectTreeFlatBinding\", \"\"]], inputs: { nodes: [\"kendoMultiSelectTreeFlatBinding\", \"nodes\"], idField: [\"valueField\", \"idField\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input('kendoMultiSelectTreeFlatBinding'),\n __metadata(\"design:type\", Array)\n], MultiSelectTreeFlatBindingDirective.prototype, \"nodes\", void 0);\n__decorate([\n Input('valueField'),\n __metadata(\"design:type\", String)\n], MultiSelectTreeFlatBindingDirective.prototype, \"idField\", void 0);\nMultiSelectTreeFlatBindingDirective = __decorate([ __metadata(\"design:paramtypes\", [DataBoundComponent])\n], MultiSelectTreeFlatBindingDirective);\n\n/**\n * A directive which encapsulates the retrieval of the child nodes when hierarchical data is provided.\n */\nlet MultiSelectTreeHierarchyBindingDirective = class MultiSelectTreeHierarchyBindingDirective extends HierarchyBindingDirective {\n constructor(multiSelectTree) {\n super(multiSelectTree);\n this.multiSelectTree = multiSelectTree;\n }\n /**\n * The nodes which will be displayed by the MultiSelectTree.\n */\n set data(nodes) {\n this.multiSelectTree.nodes = nodes;\n this.nodes = nodes;\n }\n};\nMultiSelectTreeHierarchyBindingDirective.ɵfac = function MultiSelectTreeHierarchyBindingDirective_Factory(t) { return new (t || MultiSelectTreeHierarchyBindingDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.DataBoundComponent)); };\nMultiSelectTreeHierarchyBindingDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MultiSelectTreeHierarchyBindingDirective, selectors: [[\"\", \"kendoMultiSelectTreeHierarchyBinding\", \"\"]], inputs: { data: [\"kendoMultiSelectTreeHierarchyBinding\", \"data\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input('kendoMultiSelectTreeHierarchyBinding'),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], MultiSelectTreeHierarchyBindingDirective.prototype, \"data\", null);\nMultiSelectTreeHierarchyBindingDirective = __decorate([ __metadata(\"design:paramtypes\", [DataBoundComponent])\n], MultiSelectTreeHierarchyBindingDirective);\n\n/**\n * A directive which manages the expanded state of the popup TreeView.\n */\nlet DropDownTreesExpandDirective = class DropDownTreesExpandDirective extends ExpandDirective {\n constructor(dropDownTree) {\n super(dropDownTree);\n }\n};\nDropDownTreesExpandDirective.ɵfac = function DropDownTreesExpandDirective_Factory(t) { return new (t || DropDownTreesExpandDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ExpandableComponent)); };\nDropDownTreesExpandDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DropDownTreesExpandDirective, selectors: [[\"\", \"kendoDropDownTreeExpandable\", \"\"], [\"\", \"kendoMultiSelectTreeExpandable\", \"\"]], inputs: { isExpanded: [\"isNodeExpanded\", \"isExpanded\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input('isNodeExpanded'),\n __metadata(\"design:type\", Function)\n], DropDownTreesExpandDirective.prototype, \"isExpanded\", void 0);\nDropDownTreesExpandDirective = __decorate([ __metadata(\"design:paramtypes\", [ExpandableComponent])\n], DropDownTreesExpandDirective);\n\n/**\n * @hidden\n */\nlet TagListComponent = class TagListComponent {\n /**\n * @hidden\n */\n constructor() {\n /**\n * A collection with the disabled tags' indices.\n */\n this.disabledIndices = new Set();\n this.removeTag = new EventEmitter();\n }\n tagProp(tag, prop, index) {\n const propField = prop && this.getPropField(tag, prop, index);\n return getter$1(tag, propField);\n }\n isTagDisabled(tag, positionIndex) {\n if (this.isGroupTag(tag)) {\n /** The `positionIndex` is used to determine after how many single tags is the group tag displayed =>\n * => it is used to increment the indices inside the group tag so that we determine the actual position index\n * of each group tag item as they appear in the `value` (important to check against `disabledIndices`)\n * e.g. `disabledIndices = [0, 1]` && `tags = ['Small', ['Medium', 'Large']]` => without the incrementation with\n * `positionIndex`, the group tag would yield [0, 1] as indices, while it should yield [1, 2]\n */\n return tag.every((_tag, index) => this.disabledIndices.has(index + positionIndex));\n }\n return this.disabledIndices.has(positionIndex);\n }\n deleteTag(event, tag, index) {\n event.preventDefault();\n event.stopImmediatePropagation();\n if (!this.disabled && event.which === 1) {\n this.removeTag.emit({ tag, index });\n }\n }\n itemId(tag, index) {\n if (tag) { //because of custom values\n return this.tagPrefix + \"-\" + this.tagProp(tag, this.valueField, index);\n }\n }\n isGroupTag(tag) {\n return tag instanceof Array;\n }\n tagAriaHidden(index) {\n return isPresent(this.focused) && this.focused !== index;\n }\n getPropField(tag, prop, index) {\n // Needed for MultiSelectTree value binding (Heterogeneous Data)\n const fieldsCount = prop.length - 1;\n if (typeof prop === 'string') {\n return prop;\n }\n else if (this.valueDepth) {\n const depth = this.valueDepth[index];\n return fieldsCount < depth ? prop[fieldsCount] : prop[depth];\n }\n else {\n return prop.find(item => item in tag);\n }\n }\n};\nTagListComponent.ɵfac = function TagListComponent_Factory(t) { return new (t || TagListComponent)(); };\nTagListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TagListComponent, selectors: [[\"kendo-taglist\"]], inputs: { disabledIndices: \"disabledIndices\", tags: \"tags\", textField: \"textField\", valueField: \"valueField\", valueDepth: \"valueDepth\", focused: \"focused\", template: \"template\", groupTemplate: \"groupTemplate\", disabled: \"disabled\", tagPrefix: \"tagPrefix\", id: \"id\" }, outputs: { removeTag: \"removeTag\" }, decls: 2, vars: 2, consts: [[1, \"k-reset\"], [\"role\", \"option\", \"aria-selected\", \"true\", \"class\", \"k-button\", 3, \"ngClass\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"option\", \"aria-selected\", \"true\", 1, \"k-button\", 3, \"ngClass\"], [4, \"ngIf\", \"ngIfThen\", \"ngIfElse\"], [\"groupTag\", \"\"], [\"singleTag\", \"\"], [\"aria-label\", \"delete\", 1, \"k-select\"], [1, \"k-icon\", \"k-i-close\", 3, \"mousedown\"], [4, \"ngIf\"], [3, \"ngIf\"], [3, \"templateContext\"]], template: function TagListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, TagListComponent_li_1_Template, 8, 11, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.tags);\n } }, directives: function () { return [ɵngcc3.NgForOf, ListItemDirective, ɵngcc3.NgClass, ɵngcc3.NgIf, TemplateContextDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], TagListComponent.prototype, \"tags\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TagListComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TagListComponent.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], TagListComponent.prototype, \"valueDepth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TagListComponent.prototype, \"focused\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TagTemplateDirective)\n], TagListComponent.prototype, \"template\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", GroupTagTemplateDirective)\n], TagListComponent.prototype, \"groupTemplate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TagListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TagListComponent.prototype, \"tagPrefix\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TagListComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Set)\n], TagListComponent.prototype, \"disabledIndices\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TagListComponent.prototype, \"removeTag\", void 0);\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { noDataText: \"noDataText\", clearTitle: \"clearTitle\", checkAllText: \"checkAllText\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"noDataText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"clearTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"checkAllText\", void 0);\n\nvar LocalizedMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedMessagesDirective = LocalizedMessagesDirective_1 = class LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoDropDownListLocalizedMessages\", \"\"], [\"\", \"kendoDropDownTreeLocalizedMessages\", \"\"], [\"\", \"kendoComboBoxLocalizedMessages\", \"\"], [\"\", \"kendoMultiColumnComboBoxLocalizedMessages\", \"\"], [\"\", \"kendoAutoCompleteLocalizedMessages\", \"\"], [\"\", \"kendoMultiSelectLocalizedMessages\", \"\"], [\"\", \"kendoMultiSelectTreeLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedMessagesDirective = LocalizedMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedMessagesDirective);\n\nvar CustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_dropdowns %}#toc-messages)).\n */\nlet CustomMessagesComponent = CustomMessagesComponent_1 = class CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-dropdownlist-messages\"], [\"kendo-combobox-messages\"], [\"kendo-multicolumncombobox-messages\"], [\"kendo-autocomplete-messages\"], [\"kendo-multiselect-messages\"], [\"kendo-dropdowntree-messages\"], [\"kendo-multiselecttree-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nCustomMessagesComponent = CustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], CustomMessagesComponent);\n\nconst DEFAULT_FILTER_SETTINGS = {\n caseSensitive: false,\n operator: 'startsWith'\n};\n/**\n * Implements an event handler for the `filterChange` event of a DropDowns component\n * which performs simple data filtering.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [\"Albania\", \"Andorra\", \"Armenia\", \"Austria\", \"Azerbaijan\"];\n * }\n * ```\n * > Currently, the built-in filtering does not work with [grouped data]({% slug api_kendo-data-query_groupby %}).\n */\nlet FilterDirective = class FilterDirective {\n constructor(component) {\n this.component = component;\n /**\n * @hidden\n *\n * Sets whether the filtering functionality is enabled on component init.\n */\n this.filterable = true;\n this._data = [];\n }\n /**\n * The initial data that will be used as a source array for the filtering operations.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n ngOnInit() {\n this.component.filterable = this.filterable;\n this.filterChangeSubscription = this.component.filterChange\n .subscribe(this.handleFilterChange.bind(this));\n }\n ngOnDestroy() {\n if (isPresent(this.filterChangeSubscription)) {\n this.filterChangeSubscription.unsubscribe();\n }\n }\n handleFilterChange(query) {\n this.component.data = this.data.filter(item => this.matchesAnyField(item, query));\n }\n matchesAnyField(item, query) {\n const normalizedQuery = this.normalizeValue(query);\n const { fields } = this.filterSettings;\n // if no filter fields are present, we are dealing with primitive data\n if (fields.length === 0) {\n return this.checkItem(item, normalizedQuery);\n }\n return fields.some(field => this.checkItem(getter$1(item, field), normalizedQuery));\n }\n checkItem(target, query) {\n target = this.normalizeValue(target);\n if (this.filterSettings.operator === 'contains') {\n return target.indexOf(query) !== -1;\n }\n else {\n return target.indexOf(query) === 0;\n }\n }\n normalizeValue(value) {\n const normalizedValue = isPresent(value) ? value.toString() : '';\n return this.filterSettings.caseSensitive ? normalizedValue : normalizedValue.toLowerCase();\n }\n getFilterFields(providedFields) {\n // ignore provided fields if the component deals with primitive data\n if (!this.component.textField && !this.component.valueField) {\n return [];\n }\n if (isArray(providedFields) && providedFields.length > 0) {\n return providedFields;\n }\n else {\n // the autocomplete uses `valueField` for text extraction\n const textField = this.component.textField || this.component.valueField;\n return [textField];\n }\n }\n get filterSettings() {\n const settings = this.rawSettings;\n const providedFields = isPresent(settings) && typeof settings === 'object' ? settings.fields : [];\n return Object.assign({}, DEFAULT_FILTER_SETTINGS, settings, { fields: this.getFilterFields(providedFields) });\n }\n};\nFilterDirective.ɵfac = function FilterDirective_Factory(t) { return new (t || FilterDirective)(ɵngcc0.ɵɵdirectiveInject(FilterableComponent)); };\nFilterDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FilterDirective, selectors: [[\"\", \"kendoDropDownFilter\", \"\"]], inputs: { filterable: \"filterable\", data: \"data\", rawSettings: [\"kendoDropDownFilter\", \"rawSettings\"] } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], FilterDirective.prototype, \"data\", null);\n__decorate([\n Input('kendoDropDownFilter'),\n __metadata(\"design:type\", Object)\n], FilterDirective.prototype, \"rawSettings\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FilterDirective.prototype, \"filterable\", void 0);\nFilterDirective = __decorate([ __metadata(\"design:paramtypes\", [FilterableComponent])\n], FilterDirective);\n\n/**\n * @hidden\n */\nlet FilterInputDirective = class FilterInputDirective {\n constructor(element, zone) {\n this.element = element;\n this.zone = zone;\n }\n ngOnChanges() {\n if (this.focused) {\n this.nextTick(() => this.element.nativeElement.focus());\n }\n }\n nextTick(fn) {\n this.zone.runOutsideAngular(() => setTimeout(fn));\n }\n};\nFilterInputDirective.ɵfac = function FilterInputDirective_Factory(t) { return new (t || FilterInputDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nFilterInputDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FilterInputDirective, selectors: [[\"\", \"filterInput\", \"\"]], inputs: { focused: [\"filterInput\", \"focused\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input('filterInput'),\n __metadata(\"design:type\", Boolean)\n], FilterInputDirective.prototype, \"focused\", void 0);\nFilterInputDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone])\n], FilterInputDirective);\n\nconst SHARED_DIRECTIVES = [\n HeaderTemplateDirective,\n FooterTemplateDirective,\n ItemTemplateDirective,\n GroupTemplateDirective,\n FixedGroupTemplateDirective,\n NoDataTemplateDirective,\n ValueTemplateDirective,\n TagTemplateDirective,\n GroupTagTemplateDirective,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n FilterDirective,\n FilterInputDirective\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ItemTemplateDirective`—The item template directive.\n * - `ValueTemplateDirective`—The value template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `NoDataTemplateDirective`—The noData template directive.\n * - `TagTemplateDirective`—The tag template directive.\n * - `SummaryTagTemplateDirective`—The summary tag template directive.\n */\nlet SharedDirectivesModule = class SharedDirectivesModule {\n};\nSharedDirectivesModule.ɵfac = function SharedDirectivesModule_Factory(t) { return new (t || SharedDirectivesModule)(); };\nSharedDirectivesModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedDirectivesModule });\nSharedDirectivesModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\n/**\n * @hidden\n */\nlet SelectableDirective = class SelectableDirective {\n constructor(selectionService) {\n this.checkboxes = { enabled: false };\n // @HostBinding('attr.offset-index')\n // @Input() public offsetIndex: number;\n this.multipleSelection = false;\n this.selectionService = selectionService;\n }\n get focusedClassName() {\n return this.selectionService.isFocused(this.index);\n }\n get selectedClassName() {\n return !this.checkboxes.enabled && this.selectionService.isSelected(this.index);\n }\n onClick(event) {\n event.stopPropagation();\n if (this.checkboxes.enabled && !this.checkboxes.checkOnClick) {\n return;\n }\n if (this.multipleSelection) {\n if (this.selectionService.isSelected(this.index)) {\n this.selectionService.unselect(this.index);\n }\n else {\n this.selectionService.add(this.index);\n }\n }\n else {\n this.selectionService.change(this.index);\n }\n }\n};\nSelectableDirective.ɵfac = function SelectableDirective_Factory(t) { return new (t || SelectableDirective)(ɵngcc0.ɵɵdirectiveInject(SelectionService)); };\nSelectableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SelectableDirective, selectors: [[\"\", \"kendoDropDownsSelectable\", \"\"]], hostVars: 9, hostBindings: function SelectableDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function SelectableDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"index\", ctx.index);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx.height, \"px\")(\"min-height\", ctx.height, \"px\");\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focusedClassName)(\"k-state-selected\", ctx.selectedClassName);\n } }, inputs: { checkboxes: \"checkboxes\", multipleSelection: \"multipleSelection\", index: \"index\", height: \"height\" } });\n__decorate([\n HostBinding('attr.index'),\n Input(),\n __metadata(\"design:type\", Number)\n], SelectableDirective.prototype, \"index\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SelectableDirective.prototype, \"checkboxes\", void 0);\n__decorate([\n HostBinding('style.height.px'),\n HostBinding('style.minHeight.px'),\n Input(),\n __metadata(\"design:type\", Number)\n], SelectableDirective.prototype, \"height\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SelectableDirective.prototype, \"multipleSelection\", void 0);\n__decorate([\n HostBinding('class.k-state-focused'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SelectableDirective.prototype, \"focusedClassName\", null);\n__decorate([\n HostBinding('class.k-state-selected'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SelectableDirective.prototype, \"selectedClassName\", null);\n__decorate([\n HostListener('click', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], SelectableDirective.prototype, \"onClick\", null);\nSelectableDirective = __decorate([ __metadata(\"design:paramtypes\", [SelectionService])\n], SelectableDirective);\n\n/**\n * @hidden\n */\nlet TemplateContextDirective = class TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n};\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], TemplateContextDirective.prototype, \"templateContext\", null);\nTemplateContextDirective = __decorate([ __metadata(\"design:paramtypes\", [ViewContainerRef])\n], TemplateContextDirective);\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nclass BaseCheckDirective {\n addItem(item) {\n if (this.isItemChecked(item)) {\n return;\n }\n const level = getHierarchicalItemLevel(item.index);\n const candidate = Object.assign({}, item, { level });\n this.checkedItems.push(candidate);\n this.checkedKeys.add(valueFrom(candidate, this.valueField));\n }\n removeItem(item) {\n if (!this.isItemChecked(item)) {\n return;\n }\n const level = getHierarchicalItemLevel(item.index);\n const candidate = Object.assign({}, item, { level });\n this.checkedItems = this.checkedItems\n .filter(item => valueFrom(item, this.valueField) !== valueFrom(candidate, this.valueField));\n this.checkedKeys.delete(valueFrom(candidate, this.valueField));\n }\n isItemChecked(item) {\n return this.checkedKeys.has(valueFrom(item, this.valueField));\n }\n updateItems() {\n this.checkedItems = this.checkedItems || [];\n this.checkedKeys = new Set(this.checkedItems.map(item => valueFrom(item, this.valueField)));\n }\n}\nBaseCheckDirective.ɵfac = function BaseCheckDirective_Factory(t) { return new (t || BaseCheckDirective)(); };\nBaseCheckDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: BaseCheckDirective, inputs: { checkedItems: \"checkedItems\", valueField: \"valueField\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], BaseCheckDirective.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], BaseCheckDirective.prototype, \"checkedItems\", void 0);\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nlet CheckDirective = class CheckDirective extends BaseCheckDirective {\n constructor(treeView) {\n super();\n this.treeView = treeView;\n /**\n * Fires when the `checkedItems` collection was updated.\n */\n this.checkedItemsChange = new EventEmitter();\n /**\n * Holds a Set with just the checked item keys.\n *\n * Should be updated each time the `checkedItems` value or content is changed.\n * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).\n */\n this.checkedKeys = new Set();\n this.subscriptions = new Subscription();\n this.subscriptions.add(this.treeView.checkedChange\n .subscribe(this.handleCheckedChange.bind(this)));\n this.treeView.isChecked = this.getCheckedState.bind(this);\n }\n ngOnChanges(changes) {\n if (isPresent(changes.checkable)) {\n this.toggleCheckOnClick();\n }\n if (isPresent(changes.checkedItems)) {\n this.updateItems();\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribeClick();\n }\n getCheckedState(dataItem, index) {\n if (this.isItemChecked({ dataItem, index })) {\n return 'checked';\n }\n else if (this.checkable.checkChildren && this.isItemIndeterminate(this.treeView.itemLookup(index))) {\n return 'indeterminate';\n }\n else {\n return 'none';\n }\n }\n handleCheckedChange(node) {\n this.checkNode(node);\n // parents should be checked if `checkChildren` is set to `true` (single config option for both)\n const checkParents = this.checkable.checkChildren;\n if (checkParents) {\n this.checkParents(node.parent);\n }\n this.checkedItemsChange.emit(this.checkedItems.slice());\n }\n toggleCheckOnClick() {\n this.unsubscribeClick();\n if (this.checkable.checkOnClick) {\n this.clickSubscription = this.treeView.nodeClick\n .pipe(filter(event => event.type === 'click'))\n .subscribe(event => {\n const lookup = this.treeView.itemLookup(event.item.index);\n this.handleCheckedChange(lookup);\n });\n }\n }\n unsubscribeClick() {\n if (this.clickSubscription) {\n this.clickSubscription.unsubscribe();\n this.clickSubscription = null;\n }\n }\n checkNode(lookup) {\n if (this.treeView.isDisabled(lookup.item.dataItem, lookup.item.index)) {\n return;\n }\n const target = lookup.item;\n const pendingCheck = [target];\n // TODO: extract in a separate `checkChildren` method?\n if (this.checkable.checkChildren) {\n const filter$$1 = (item) => this.treeView.isVisible(item.dataItem, item.index) &&\n !this.treeView.isDisabled(item.dataItem, item.index);\n fetchDescendentNodes(lookup, filter$$1)\n .forEach(lookup => pendingCheck.push(lookup.item));\n }\n const shouldCheck = !this.isItemChecked(target);\n pendingCheck.forEach(item => {\n if (shouldCheck) {\n this.addItem(item);\n }\n else {\n this.removeItem(item);\n }\n });\n }\n checkParents(parent) {\n let currentParent = parent;\n while (currentParent) {\n const allChildrenSelected = currentParent.children.every(item => this.isItemChecked(item));\n if (allChildrenSelected) {\n this.addItem(currentParent.item);\n }\n else {\n this.removeItem(currentParent.item);\n }\n currentParent = currentParent.parent;\n }\n }\n isItemIndeterminate(lookup) {\n const children = lookup.children;\n if (!Array.isArray(children) || children.length === 0) {\n return false;\n }\n let index = 0;\n let child = children[index];\n while (isPresent(child)) {\n if (this.isItemChecked(child.item) || this.isItemIndeterminate(child)) {\n return true;\n }\n index += 1;\n child = children[index];\n }\n return false;\n }\n};\nCheckDirective.ɵfac = function CheckDirective_Factory(t) { return new (t || CheckDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.TreeViewComponent)); };\nCheckDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CheckDirective, selectors: [[\"\", \"kendoMultiSelectTreeCheckable\", \"\"]], inputs: { checkable: \"checkable\", valueField: \"valueField\", checkedItems: \"checkedItems\" }, outputs: { checkedItemsChange: \"checkedItemsChange\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CheckDirective.prototype, \"checkable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CheckDirective.prototype, \"valueField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], CheckDirective.prototype, \"checkedItems\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], CheckDirective.prototype, \"checkedItemsChange\", void 0);\nCheckDirective = __decorate([ __metadata(\"design:paramtypes\", [TreeViewComponent])\n], CheckDirective);\n\n/**\n * @hidden\n *\n * A directive which manages the in-memory checked state of the MultiSelectTree nodes.\n */\nlet CheckAllDirective = class CheckAllDirective extends BaseCheckDirective {\n constructor(element, zone, cdr, renderer) {\n super();\n this.element = element;\n this.zone = zone;\n this.cdr = cdr;\n this.renderer = renderer;\n /**\n * Fires when the `checkedItems` collection was updated.\n */\n this.checkedItemsChange = new EventEmitter();\n /**\n * Holds a Set with just the checked item keys.\n *\n * Should be updated each time the `checkedItems` value or content is changed.\n * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).\n */\n this.checkedKeys = new Set();\n }\n handleChange(event) {\n // Need to store the current checkbox state at the moment of click\n this.currentCheckedState = event.checked;\n this.currentIndeterminateState = this.isIndeterminate;\n this.treeview.nodes.map((_value, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n this.checkNode(itemLookup);\n });\n this.checkedItemsChange.emit(this.checkedItems.slice());\n }\n get isIndeterminate() {\n const isIndeterminate = this.treeview.nodes.some((_node, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n return this.someChecked(itemLookup);\n });\n return this.isChecked ? false : isIndeterminate;\n }\n get isChecked() {\n const isChecked = this.treeview.nodes.every((_node, index) => {\n const itemIndex = String(index);\n const itemLookup = this.treeview.itemLookup(itemIndex);\n return this.allChecked(itemLookup);\n });\n return isChecked;\n }\n ngOnChanges(changes) {\n if (isPresent(changes.checkedItems)) {\n this.updateItems();\n this.renderer.setProperty(this.element.nativeElement, 'checked', this.isChecked);\n this.renderer.setProperty(this.element.nativeElement, 'indeterminate', this.isIndeterminate);\n }\n }\n ngOnInit() {\n if (this.focused) {\n this.nextTick(() => this.element.nativeElement.focus());\n }\n }\n nextTick(fn) {\n this.zone.runOutsideAngular(() => setTimeout(fn));\n }\n checkNode(itemLookup) {\n if (this.treeview.isDisabled(itemLookup.item.dataItem, itemLookup.item.index)) {\n return;\n }\n const pendingCheck = [];\n const filter$$1 = (item) => this.treeview.isVisible(item.dataItem, item.index) &&\n !this.treeview.isDisabled(item.dataItem, item.index);\n pendingCheck.push(itemLookup.item);\n fetchDescendentNodes(itemLookup, filter$$1)\n .forEach(lookup => pendingCheck.push(lookup.item));\n pendingCheck.forEach(item => {\n if (this.currentIndeterminateState) {\n this.lastAction === 'check' ?\n this.addItem(item) :\n this.removeItem(item);\n return;\n }\n this.currentCheckedState ?\n this.addItem(item) :\n this.removeItem(item);\n });\n }\n allChecked(lookup) {\n const children = lookup && lookup.children;\n if (!Array.isArray(children)) {\n return;\n }\n const childrenChecked = children.every(child => {\n if (child.children.length) {\n return this.isItemChecked(child.item) && this.allChecked(child);\n }\n return this.isItemChecked(child.item);\n });\n return childrenChecked && this.isItemChecked(lookup.item);\n }\n someChecked(lookup) {\n const children = lookup && lookup.children;\n if (!Array.isArray(children)) {\n return;\n }\n const childrenChecked = children.some(child => {\n if (child.children.length) {\n return this.isItemChecked(child.item) || this.someChecked(child);\n }\n return this.isItemChecked(child.item);\n });\n return childrenChecked || this.isItemChecked(lookup.item);\n }\n};\nCheckAllDirective.ɵfac = function CheckAllDirective_Factory(t) { return new (t || CheckAllDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nCheckAllDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CheckAllDirective, selectors: [[\"\", \"checkAll\", \"\"]], hostBindings: function CheckAllDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"change\", function CheckAllDirective_change_HostBindingHandler($event) { return ctx.handleChange($event.target); });\n } }, inputs: { lastAction: \"lastAction\", treeview: \"treeview\", checkedItems: \"checkedItems\", valueField: \"valueField\", focused: [\"checkAll\", \"focused\"] }, outputs: { checkedItemsChange: \"checkedItemsChange\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], CheckAllDirective.prototype, \"lastAction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TreeViewComponent)\n], CheckAllDirective.prototype, \"treeview\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], CheckAllDirective.prototype, \"checkedItems\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], CheckAllDirective.prototype, \"valueField\", void 0);\n__decorate([\n Input('checkAll'),\n __metadata(\"design:type\", Boolean)\n], CheckAllDirective.prototype, \"focused\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], CheckAllDirective.prototype, \"checkedItemsChange\", void 0);\n__decorate([\n HostListener('change', ['$event.target']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], CheckAllDirective.prototype, \"handleChange\", null);\nCheckAllDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef, NgZone, ChangeDetectorRef, Renderer2])\n], CheckAllDirective);\n\nconst INTERNAL_DIRECTIVES = [\n ListComponent,\n ListItemDirective,\n SelectableDirective,\n SearchBarComponent,\n TemplateContextDirective,\n TagListComponent,\n CheckDirective,\n CheckAllDirective\n];\n/**\n * @hidden\n */\nlet SharedModule = class SharedModule {\n};\nSharedModule.ɵfac = function SharedModule_Factory(t) { return new (t || SharedModule)(); };\nSharedModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });\n\n/**\n * A directive which configures the MultiSelectTree to show one single summary tag for all selected data items.\n * When a number is provided, the summary tag is displayed after the given amount of data items are selected\n * ([more information and examples]({% slug api_dropdowns_multiselecttreesummarytagdirective %})).\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet MultiSelectTreeSummaryTagDirective = class MultiSelectTreeSummaryTagDirective {\n constructor(multiSelectTreeComponent) {\n this.multiSelectTreeComponent = multiSelectTreeComponent;\n /**\n * A numeric value that indicates the number of selected data items after which the summary tag will appear.\n */\n this.showAfter = 0;\n this.createTagMapper();\n }\n ngOnChanges(changes) {\n if (isPresent(changes.showAfter)) {\n this.createTagMapper();\n this.multiSelectTreeComponent.handleTagMapperChange(this.showAfter);\n }\n }\n createTagMapper() {\n const showAfter = parseNumber(this.showAfter);\n this.multiSelectTreeComponent.tagMapper = (tags) => {\n if (tags.length > showAfter) {\n // tags provided in an array are rendered as a single group tag\n return [...tags.slice(0, showAfter), tags.slice(showAfter)];\n }\n else {\n return tags;\n }\n };\n }\n};\nMultiSelectTreeSummaryTagDirective.ɵfac = function MultiSelectTreeSummaryTagDirective_Factory(t) { return new (t || MultiSelectTreeSummaryTagDirective)(ɵngcc0.ɵɵdirectiveInject(MultiSelectTreeComponent)); };\nMultiSelectTreeSummaryTagDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: MultiSelectTreeSummaryTagDirective, selectors: [[\"\", \"kendoMultiSelectTreeSummaryTag\", \"\"]], inputs: { showAfter: [\"kendoMultiSelectTreeSummaryTag\", \"showAfter\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input('kendoMultiSelectTreeSummaryTag'),\n __metadata(\"design:type\", Object)\n], MultiSelectTreeSummaryTagDirective.prototype, \"showAfter\", void 0);\nMultiSelectTreeSummaryTagDirective = __decorate([ __metadata(\"design:paramtypes\", [MultiSelectTreeComponent])\n], MultiSelectTreeSummaryTagDirective);\n\nconst DROPDOWNTREE_DIRECTIVES = [\n DropDownTreeComponent,\n MultiSelectTreeComponent,\n DropDownTreeFlatBindingDirective,\n DropDownTreeHierarchyBindingDirective,\n MultiSelectTreeFlatBindingDirective,\n MultiSelectTreeHierarchyBindingDirective,\n DropDownTreesExpandDirective,\n NodeTemplateDirective,\n MultiSelectTreeSummaryTagDirective\n];\n/**\n * @hidden\n */\nlet DropDownTreesModule = class DropDownTreesModule {\n};\nDropDownTreesModule.ɵfac = function DropDownTreesModule_Factory(t) { return new (t || DropDownTreesModule)(); };\nDropDownTreesModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DropDownTreesModule });\nDropDownTreesModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[SharedModule, TreeViewModule], SharedDirectivesModule] });\n\n/**\n * A directive which configures the MultiSelect to show one single summary tag for all selected data items.\n * When a number is provided, the summary tag is displayed after the given amount of data items are selected\n * ([more information and examples]({% slug summarytagmode_multiselect %})).\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet SummaryTagDirective = class SummaryTagDirective {\n constructor(multiSelectComponent) {\n this.multiSelectComponent = multiSelectComponent;\n /**\n * A numeric value that indicates the number of selected data items after which the summary tag will appear.\n */\n this.showAfter = 0;\n this.createTagMapper();\n }\n ngOnChanges(changes) {\n if (isPresent(changes.showAfter)) {\n this.createTagMapper();\n this.multiSelectComponent.onTagMapperChange();\n }\n }\n createTagMapper() {\n const showAfter = parseNumber(this.showAfter);\n this.multiSelectComponent.tagMapper = (tags) => {\n if (tags.length > showAfter) {\n let result;\n result = tags.slice(0, showAfter);\n result.push(tags.slice(showAfter, tags.length));\n return result;\n }\n else {\n return tags;\n }\n };\n }\n};\nSummaryTagDirective.ɵfac = function SummaryTagDirective_Factory(t) { return new (t || SummaryTagDirective)(ɵngcc0.ɵɵdirectiveInject(MultiSelectComponent)); };\nSummaryTagDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SummaryTagDirective, selectors: [[\"\", \"kendoMultiSelectSummaryTag\", \"\"]], inputs: { showAfter: [\"kendoMultiSelectSummaryTag\", \"showAfter\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input('kendoMultiSelectSummaryTag'),\n __metadata(\"design:type\", Object)\n], SummaryTagDirective.prototype, \"showAfter\", void 0);\nSummaryTagDirective = __decorate([ __metadata(\"design:paramtypes\", [MultiSelectComponent])\n], SummaryTagDirective);\n\nconst AUTOCOMPLETE_DIRECTIVES = [\n AutoCompleteComponent\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `AutoCompleteComponent`—The AutoComplete component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n */\nlet AutoCompleteModule = class AutoCompleteModule {\n};\nAutoCompleteModule.ɵfac = function AutoCompleteModule_Factory(t) { return new (t || AutoCompleteModule)(); };\nAutoCompleteModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: AutoCompleteModule });\nAutoCompleteModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[SharedModule], SharedDirectivesModule] });\n\nconst COMBOBOX_DIRECTIVES = [\n ComboBoxComponent,\n MultiColumnComboBoxComponent,\n ComboBoxColumnComponent,\n ColumnHeaderTemplateDirective,\n ColumnCellTemplateDirective\n];\nconst ɵ0$4 = touchEnabled;\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ComboBoxComponent`—The ComboBox component class.\n * - `MultiColumnComboBoxComponent`—The MultiColumnComboBox component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `ColumnHeaderTemplateDirective`—The column header template directive.\n * - `ColumnCellTemplateDirective`—The column cell template directive.\n */\nlet ComboBoxModule = class ComboBoxModule {\n};\nComboBoxModule.ɵfac = function ComboBoxModule_Factory(t) { return new (t || ComboBoxModule)(); };\nComboBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ComboBoxModule });\nComboBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$4 }], imports: [[SharedModule], SharedDirectivesModule] });\n\nconst DROPDOWNLIST_DIRECTIVES = [\n DropDownListComponent\n];\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownListComponent`—The DropDownList component class.\n * - `ItemTemplateDirective`—The item template directive.\n * - `ValueTemplateDirective`—The value template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n */\nlet DropDownListModule = class DropDownListModule {\n};\nDropDownListModule.ɵfac = function DropDownListModule_Factory(t) { return new (t || DropDownListModule)(); };\nDropDownListModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DropDownListModule });\nDropDownListModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[SharedModule], SharedDirectivesModule] });\n\nconst MULTISELECT_DIRECTIVES = [\n MultiSelectComponent,\n SummaryTagDirective,\n CustomItemTemplateDirective\n];\nconst ɵ0$5 = touchEnabled;\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `MultiSelectComponent`—The MultiSelect component class.\n * - `SummaryTagDirective`—The MultiSelect summary tag directive.\n * - `ItemTemplateDirective`—The item template directive.\n * - `CustomItemTemplateDirective`—The custom item template directive.\n * - `TagTemplateDirective`—The tag template directive.\n * - `SummaryTagTemplateDirective`—The summary tag template directive.\n * - `HeaderTemplateDirective`—The header template directive.\n * - `FooterTemplateDirective`—The footer template directive.\n * - `NoDataTemplateDirective`—The no-data template directive.\n */\nlet MultiSelectModule = class MultiSelectModule {\n};\nMultiSelectModule.ɵfac = function MultiSelectModule_Factory(t) { return new (t || MultiSelectModule)(); };\nMultiSelectModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MultiSelectModule });\nMultiSelectModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$5 }], imports: [[SharedModule], SharedDirectivesModule] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dropdowns components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Dropdowns module\n * import { DropDownsModule } from '@progress/kendo-angular-dropdowns';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, DropDownsModule], // import the Dropdowns module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet DropDownsModule = class DropDownsModule {\n};\nDropDownsModule.ɵfac = function DropDownsModule_Factory(t) { return new (t || DropDownsModule)(); };\nDropDownsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DropDownsModule });\nDropDownsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SearchBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-searchbar',\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Renderer2 }]; }, { valueChange: [{\n type: Output\n }], onBlur: [{\n type: Output\n }], onFocus: [{\n type: Output\n }], onClick: [{\n type: Output\n }], onNavigate: [{\n type: Output\n }], searchBarClass: [{\n type: HostBinding,\n args: ['class.k-searchbar']\n }], userInput: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], id: [{\n type: Input\n }], listId: [{\n type: Input\n }], tagListId: [{\n type: Input\n }], activeDescendant: [{\n type: Input\n }], noDataLabel: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], popupOpen: [{\n type: Input\n }], role: [{\n type: Input\n }], suggestedText: [{\n type: Input\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(HeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListHeaderTemplate],[kendoComboBoxHeaderTemplate],[kendoDropDownTreeHeaderTemplate],[kendoMultiColumnComboBoxHeaderTemplate],[kendoAutoCompleteHeaderTemplate],[kendoMultiSelectHeaderTemplate],[kendoMultiSelectTreeHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListFooterTemplate],[kendoComboBoxFooterTemplate],[kendoDropDownTreeFooterTemplate],[kendoMultiColumnComboBoxFooterTemplate],[kendoAutoCompleteFooterTemplate],[kendoMultiSelectFooterTemplate],[kendoMultiSelectTreeFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(GroupTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListGroupTemplate],[kendoComboBoxGroupTemplate],[kendoMultiColumnComboBoxGroupTemplate],[kendoAutoCompleteGroupTemplate],[kendoMultiSelectGroupTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FixedGroupTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListFixedGroupTemplate],[kendoComboBoxFixedGroupTemplate],[kendoMultiColumnComboBoxFixedGroupTemplate],[kendoAutoCompleteFixedGroupTemplate],[kendoMultiSelectFixedGroupTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SelectionService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DataService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DisabledItemsService, [{\n type: Injectable\n }], function () { return [{ type: DataService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: DisabledItemsService }, { type: SelectionService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NoDataTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ListItemDirective, [{\n type: Directive,\n args: [{\n selector: '\"li[role=option], li[role=group]\"' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-list',\n template: `\n
\n \n \n {{ currentGroup }} \n
\n
\n
    \n \n \n \n \n \n {{ getText(dataItem) }}\n \n \n \n 0\"\n role=\"group\"\n class='k-outer-group-header'\n [ngClass]=\"{ 'k-virtual-item': virtual }\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n [attr.group-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\">\n \n \n {{ dataItem.value }} \n \n \n \n \n {{ getText(dataItem.value) }}\n \n \n \n \n
\n
\n
\n \n
\n
\n
\n `\n }]\n }], function () { return [{ type: DataService }, { type: ɵngcc0.ElementRef }, { type: SelectionService }, { type: DisabledItemsService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { selected: [{\n type: Input\n }], focused: [{\n type: Input\n }], show: [{\n type: Input\n }], multipleSelection: [{\n type: Input\n }], listClass: [{\n type: Input\n }], checkboxes: [{\n type: Input\n }], onClick: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], listResize: [{\n type: Output\n }], data: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], height: [{\n type: Input\n }], template: [{\n type: Input\n }], groupTemplate: [{\n type: Input\n }], fixedGroupTemplate: [{\n type: Input\n }], id: [{\n type: Input\n }], optionPrefix: [{\n type: Input\n }], virtual: [{\n type: Input\n }], items: [{\n type: ViewChildren,\n args: [ListItemDirective]\n }], content: [{\n type: ViewChild,\n args: ['content', { static: true }]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }], virtualContainer: [{\n type: ViewChild,\n args: ['virtualContainer', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AutoCompleteComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoAutoComplete',\n providers: [\n AUTOCOMPLETE_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.autocomplete'\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => AutoCompleteComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => AutoCompleteComponent_1)\n }\n ],\n selector: 'kendo-autocomplete',\n template: `\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ noDataText }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: DataService }, { type: ɵngcc4.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { highlightFirst: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], filterable: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-autocomplete']\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], virtual: [{\n type: Input\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], valueField: [{\n type: Input\n }], loading: [{\n type: Input\n }], suggest: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ComboBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoComboBox',\n providers: [\n COMBOBOX_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.combobox'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => ComboBoxComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => ComboBoxComponent_1)\n }\n ],\n selector: 'kendo-combobox',\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
{{ noDataText }}
\n
\n
\n \n \n \n
\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc4.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], allowCustom: [{\n type: Input\n }], valueNormalizer: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], suggest: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], filterable: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-combobox']\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], virtual: [{\n type: Input\n }], clearable: [{\n type: HostBinding,\n args: ['class.k-combobox-clearable']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], loading: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], select: [{\n type: ViewChild,\n args: ['select', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ValueTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownListComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownList',\n providers: [\n DROPDOWNLIST_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownlist'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => DropDownListComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => DropDownListComponent_1)\n }\n ],\n selector: 'kendo-dropdownlist',\n template: `\n \n \n \n \n \n \n {{ getText() }}\n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n {{ getDefaultItemText() }}\n
\n
\n \n
\n \n \n
\n
\n \n \n \n \n \n \n \n
\n \n \n \n
{{ noDataText }}
\n
\n
\n \n \n \n
\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc4.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], filterable: [{\n type: Input\n }], ignoreCase: [{\n type: Input\n }], delay: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dropdown']\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], virtual: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], iconClass: [{\n type: Input\n }], loading: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], defaultItem: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], valueTemplate: [{\n type: ContentChild,\n args: [ValueTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CustomItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectCustomItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TagTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTagTemplate],[kendoMultiSelectTreeTagTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(GroupTagTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectGroupTagTemplate],[kendoMultiSelectTreeGroupTagTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoMultiSelect',\n providers: [\n MULTISELECT_VALUE_ACCESSOR,\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselect'\n },\n {\n provide: FilterableComponent, useExisting: forwardRef(() => MultiSelectComponent_1)\n },\n {\n provide: KendoInput, useExisting: forwardRef(() => MultiSelectComponent_1)\n }\n ],\n selector: 'kendo-multiselect',\n template: `\n \n \n
\n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n
\n
\n \n \n {{ text }}\n \n
\n
\n \n \n \n \n
\n \n \n \n
{{ noDataText }}
\n
\n
\n \n \n \n
\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc4.PopupService }, { type: DataService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.KeyValueDiffers }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], autoClose: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], filterable: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], tagMapper: [{\n type: Input\n }], allowCustom: [{\n type: Input\n }], valueNormalizer: [{\n type: Input\n }], filterChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], removeTag: [{\n type: Output\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-multiselect']\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: [\"tabIndex\"]\n }], placeholder: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], checkboxes: [{\n type: Input\n }], virtual: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], loading: [{\n type: Input\n }], valueField: [{\n type: Input\n }], textField: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], searchbar: [{\n type: ViewChild,\n args: [SearchBarComponent, { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], optionsList: [{\n type: ViewChild,\n args: ['optionsList', { static: false }]\n }], template: [{\n type: ContentChild,\n args: [ItemTemplateDirective, { static: false }]\n }], customItemTemplate: [{\n type: ContentChild,\n args: [CustomItemTemplateDirective, { static: false }]\n }], groupTemplate: [{\n type: ContentChild,\n args: [GroupTemplateDirective, { static: false }]\n }], fixedGroupTemplate: [{\n type: ContentChild,\n args: [FixedGroupTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], tagTemplate: [{\n type: ContentChild,\n args: [TagTemplateDirective, { static: false }]\n }], groupTagTemplate: [{\n type: ContentChild,\n args: [GroupTagTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColumnCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiColumnComboBoxColumnCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColumnHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiColumnComboBoxColumnHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ComboBoxColumnComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-combobox-column',\n template: ''\n }]\n }], function () { return []; }, { hidden: [{\n type: Input\n }], cellTemplate: [{\n type: ContentChild,\n args: [ColumnCellTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [ColumnHeaderTemplateDirective, { static: false }]\n }], field: [{\n type: Input\n }], title: [{\n type: Input\n }], width: [{\n type: Input\n }], style: [{\n type: Input\n }], headerStyle: [{\n type: Input\n }], class: [{\n type: Input\n }], headerClass: [{\n type: Input\n }], media: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiColumnComboBoxComponent, [{\n type: Component,\n args: [{\n providers: [\n SelectionService,\n DataService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multicolumncombobox'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n },\n {\n provide: FilterableComponent,\n useExisting: forwardRef(() => MultiColumnComboBoxComponent_1)\n }\n ],\n selector: 'kendo-multicolumncombobox',\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 \n \n \n \n \n \n \n \n \n \n {{ column.title || column.field }}\n \n \n \n \n \n \n \n
\n
\n \n\n \n \n \n \n \n {{ textFrom(dataItem, column.field) }}\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n
{{ noDataText }}
\n
\n \n\n \n \n
\n \n \n
\n
\n \n\n \n \n\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc4.PopupService }, { type: SelectionService }, { type: NavigationService }, { type: DisabledItemsService }, { type: DataService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: Boolean, decorators: [{\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-dropdowngrid']\n }], header: [{\n type: ViewChild,\n args: ['header', { static: false }]\n }], columns: [{\n type: ContentChildren,\n args: [ComboBoxColumnComponent]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NodeTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeNodeTemplate], [kendoMultiSelectTreeNodeTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownTreeComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownTree',\n providers: [\n DataService,\n SelectionService,\n NavigationService,\n DisabledItemsService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdowntree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => DropDownTreeComponent_1)\n }\n ],\n selector: 'kendo-dropdowntree',\n template: `\n \n \n \n \n \n \n {{ text || placeholder }} \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n }]\n }], function () { return [{ type: ɵngcc4.PopupService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dropdowntree']\n }, {\n type: HostBinding,\n args: ['class.k-dropdowntree-clearable']\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], nodeExpand: [{\n type: Output\n }], nodeCollapse: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], clearButton: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], fetchChildren: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], isNodeVisible: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], clearable: [{\n type: HostBinding,\n args: ['class.k-dropdowntree-clearable']\n }], treeview: [{\n type: ViewChild,\n args: ['treeview', { static: false }]\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], dataItem: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], isNodeExpanded: [{\n type: Input\n }], valueDepth: [{\n type: Input\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], nodeTemplate: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], valueTemplate: [{\n type: ContentChild,\n args: [ValueTemplateDirective, { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], filterInput: [{\n type: ViewChild,\n args: ['filterInput', { static: false }]\n }], loading: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectTreeComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoMultiSelectTree',\n providers: [\n LocalizationService,\n NavigationService,\n DataService,\n DisabledItemsService,\n SelectionService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiselecttree'\n },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: DataBoundComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: ExpandableComponent,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MultiSelectTreeComponent_1)\n }\n ],\n selector: 'kendo-multiselecttree',\n template: `\n \n \n
\n \n \n \n {{ placeholder }}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n
\n \n \n {{ messageFor('checkAllText') }}\n \n
\n \n \n \n \n \n \n
\n \n \n \n
{{ messageFor('noDataText') }}
\n
\n
\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc4.PopupService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: NavigationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dropdowntree']\n }], valueDepth: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], listHeight: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valuePrimitive: [{\n type: Input\n }], loadOnDemand: [{\n type: Input\n }], focusableId: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], filterable: [{\n type: Input\n }], checkAll: [{\n type: Input\n }], hasChildren: [{\n type: Input\n }], fetchChildren: [{\n type: Input\n }], isNodeVisible: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], tagMapper: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], opened: [{\n type: Output\n }], close: [{\n type: Output\n }], closed: [{\n type: Output\n }], nodeExpand: [{\n type: Output\n }], nodeCollapse: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], removeTag: [{\n type: Output\n }], filterChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], treeview: [{\n type: ViewChild,\n args: ['treeview', { static: false }]\n }], tabindex: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], checkableSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], dataItems: [{\n type: Input\n }], isNodeExpanded: [{\n type: Input\n }], headerTemplate: [{\n type: ContentChild,\n args: [HeaderTemplateDirective, { static: false }]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective, { static: false }]\n }], nodeTemplate: [{\n type: ContentChild,\n args: [NodeTemplateDirective, { static: false }]\n }], noDataTemplate: [{\n type: ContentChild,\n args: [NoDataTemplateDirective, { static: false }]\n }], tagTemplate: [{\n type: ContentChild,\n args: [TagTemplateDirective, { static: false }]\n }], groupTagTemplate: [{\n type: ContentChild,\n args: [GroupTagTemplateDirective, { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], filterInput: [{\n type: ViewChild,\n args: ['filterInput', { static: false }]\n }], checkAllInput: [{\n type: ViewChild,\n args: ['checkAllInput', { static: false }]\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], loading: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownTreeFlatBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeFlatBinding]'\n }]\n }], function () { return [{ type: ɵngcc6.DataBoundComponent }]; }, { nodes: [{\n type: Input,\n args: ['kendoDropDownTreeFlatBinding']\n }], idField: [{\n type: Input,\n args: ['valueField']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownTreeHierarchyBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeHierarchyBinding]'\n }]\n }], function () { return [{ type: ɵngcc6.DataBoundComponent }]; }, { data: [{\n type: Input,\n args: ['kendoDropDownTreeHierarchyBinding']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectTreeFlatBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeFlatBinding]'\n }]\n }], function () { return [{ type: ɵngcc6.DataBoundComponent }]; }, { nodes: [{\n type: Input,\n args: ['kendoMultiSelectTreeFlatBinding']\n }], idField: [{\n type: Input,\n args: ['valueField']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectTreeHierarchyBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeHierarchyBinding]'\n }]\n }], function () { return [{ type: ɵngcc6.DataBoundComponent }]; }, { data: [{\n type: Input,\n args: ['kendoMultiSelectTreeHierarchyBinding']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownTreesExpandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]'\n }]\n }], function () { return [{ type: ɵngcc6.ExpandableComponent }]; }, { isExpanded: [{\n type: Input,\n args: ['isNodeExpanded']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TagListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-taglist',\n template: `\n
    \n \n \n \n \n \n \n {{ tag.length }} {{ tag.length === 1 ? 'item' : 'items' }} selected\n \n \n \n \n \n \n {{ tagProp(tag, textField, index) }}\n \n \n\n \n \n \n \n \n
\n `\n }]\n }], function () { return []; }, { disabledIndices: [{\n type: Input\n }], removeTag: [{\n type: Output\n }], tags: [{\n type: Input\n }], textField: [{\n type: Input\n }], valueField: [{\n type: Input\n }], valueDepth: [{\n type: Input\n }], focused: [{\n type: Input\n }], template: [{\n type: Input\n }], groupTemplate: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tagPrefix: [{\n type: Input\n }], id: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ],\n selector: `\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ],\n selector: 'kendo-dropdownlist-messages,kendo-combobox-messages,kendo-multicolumncombobox-messages,kendo-autocomplete-messages,kendo-multiselect-messages,kendo-dropdowntree-messages,kendo-multiselecttree-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FilterDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownFilter]'\n }]\n }], function () { return [{ type: FilterableComponent }]; }, { filterable: [{\n type: Input\n }], data: [{\n type: Input\n }], rawSettings: [{\n type: Input,\n args: ['kendoDropDownFilter']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FilterInputDirective, [{\n type: Directive,\n args: [{\n selector: '[filterInput]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { focused: [{\n type: Input,\n args: ['filterInput']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedDirectivesModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedDirectivesModule, { declarations: [HeaderTemplateDirective, FooterTemplateDirective, ItemTemplateDirective, GroupTemplateDirective, FixedGroupTemplateDirective, NoDataTemplateDirective, ValueTemplateDirective, TagTemplateDirective, GroupTagTemplateDirective, LocalizedMessagesDirective, CustomMessagesComponent, FilterDirective, FilterInputDirective], exports: [HeaderTemplateDirective, FooterTemplateDirective, ItemTemplateDirective, GroupTemplateDirective, FixedGroupTemplateDirective, NoDataTemplateDirective, ValueTemplateDirective, TagTemplateDirective, GroupTagTemplateDirective, LocalizedMessagesDirective, CustomMessagesComponent, FilterDirective, FilterInputDirective] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SelectableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownsSelectable]'\n }]\n }], function () { return [{ type: SelectionService }]; }, { checkboxes: [{\n type: Input\n }], multipleSelection: [{\n type: Input\n }], focusedClassName: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], selectedClassName: [{\n type: HostBinding,\n args: ['class.k-state-selected']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], index: [{\n type: HostBinding,\n args: ['attr.index']\n }, {\n type: Input\n }], height: [{\n type: HostBinding,\n args: ['style.height.px']\n }, {\n type: HostBinding,\n args: ['style.minHeight.px']\n }, {\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeCheckable]'\n }]\n }], function () { return [{ type: ɵngcc6.TreeViewComponent }]; }, { checkedItemsChange: [{\n type: Output\n }], checkable: [{\n type: Input\n }], valueField: [{\n type: Input\n }], checkedItems: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckAllDirective, [{\n type: Directive,\n args: [{\n selector: '[checkAll]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { checkedItemsChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['change', ['$event.target']]\n }], lastAction: [{\n type: Input\n }], treeview: [{\n type: Input\n }], checkedItems: [{\n type: Input\n }], valueField: [{\n type: Input\n }], focused: [{\n type: Input,\n args: ['checkAll']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_DIRECTIVES],\n exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule],\n imports: [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [ListComponent, ListItemDirective, SelectableDirective, SearchBarComponent, TemplateContextDirective, TagListComponent, CheckDirective, CheckAllDirective]; }, imports: function () { return [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]; }, exports: function () { return [ListComponent, ListItemDirective, SelectableDirective, SearchBarComponent, TemplateContextDirective, TagListComponent, CheckDirective, CheckAllDirective, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectTreeSummaryTagDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectTreeSummaryTag]'\n }]\n }], function () { return [{ type: MultiSelectTreeComponent }]; }, { showAfter: [{\n type: Input,\n args: ['kendoMultiSelectTreeSummaryTag']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownTreesModule, [{\n type: NgModule,\n args: [{\n declarations: [DROPDOWNTREE_DIRECTIVES],\n exports: [DROPDOWNTREE_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule, TreeViewModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownTreesModule, { declarations: function () { return [DropDownTreeComponent, MultiSelectTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, DropDownTreesExpandDirective, NodeTemplateDirective, MultiSelectTreeSummaryTagDirective]; }, imports: function () { return [SharedModule, TreeViewModule]; }, exports: function () { return [DropDownTreeComponent, MultiSelectTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, DropDownTreesExpandDirective, NodeTemplateDirective, MultiSelectTreeSummaryTagDirective, SharedDirectivesModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SummaryTagDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoMultiSelectSummaryTag]'\n }]\n }], function () { return [{ type: MultiSelectComponent }]; }, { showAfter: [{\n type: Input,\n args: ['kendoMultiSelectSummaryTag']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AutoCompleteModule, [{\n type: NgModule,\n args: [{\n declarations: [AUTOCOMPLETE_DIRECTIVES],\n exports: [AUTOCOMPLETE_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(AutoCompleteModule, { declarations: [AutoCompleteComponent], imports: [SharedModule], exports: [AutoCompleteComponent, SharedDirectivesModule] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ComboBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [COMBOBOX_DIRECTIVES],\n exports: [COMBOBOX_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule],\n providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$4 }]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ComboBoxModule, { declarations: [ComboBoxComponent, MultiColumnComboBoxComponent, ComboBoxColumnComponent, ColumnHeaderTemplateDirective, ColumnCellTemplateDirective], imports: [SharedModule], exports: [ComboBoxComponent, MultiColumnComboBoxComponent, ComboBoxColumnComponent, ColumnHeaderTemplateDirective, ColumnCellTemplateDirective, SharedDirectivesModule] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownListModule, [{\n type: NgModule,\n args: [{\n declarations: [DROPDOWNLIST_DIRECTIVES],\n exports: [DROPDOWNLIST_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownListModule, { declarations: [DropDownListComponent], imports: [SharedModule], exports: [DropDownListComponent, SharedDirectivesModule] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MultiSelectModule, [{\n type: NgModule,\n args: [{\n declarations: [MULTISELECT_DIRECTIVES],\n exports: [MULTISELECT_DIRECTIVES, SharedDirectivesModule],\n imports: [SharedModule],\n providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$5 }]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MultiSelectModule, { declarations: [MultiSelectComponent, SummaryTagDirective, CustomItemTemplateDirective], imports: [SharedModule], exports: [MultiSelectComponent, SummaryTagDirective, CustomItemTemplateDirective, SharedDirectivesModule] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownsModule, [{\n type: NgModule,\n args: [{\n exports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownsModule, { exports: [AutoCompleteModule, ComboBoxModule, DropDownListModule, MultiSelectModule, DropDownTreesModule] }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AUTOCOMPLETE_VALUE_ACCESSOR, COMBOBOX_VALUE_ACCESSOR, TOUCH_ENABLED, DataService, DisabledItemsService, FilterInputDirective, FilterableComponent, ListItemDirective, CustomMessagesComponent, LocalizedMessagesDirective, Messages, NavigationService, SearchBarComponent, SelectionService, TagListComponent, NoDataTemplateDirective, TagTemplateDirective, DROPDOWNLIST_VALUE_ACCESSOR, BaseCheckDirective, CheckAllDirective, CheckDirective, MultiSelectTreeSummaryTagDirective, AutoCompleteComponent, ComboBoxComponent, DropDownListComponent, MultiSelectComponent, MultiColumnComboBoxComponent, ComboBoxColumnComponent, ColumnCellTemplateDirective, ColumnHeaderTemplateDirective, DropDownTreeComponent, MultiSelectTreeComponent, DropDownTreeFlatBindingDirective, DropDownTreeHierarchyBindingDirective, MultiSelectTreeFlatBindingDirective, MultiSelectTreeHierarchyBindingDirective, DropDownTreesExpandDirective, DropDownTreesModule, NodeTemplateDirective, ItemTemplateDirective, GroupTemplateDirective, FixedGroupTemplateDirective, CustomItemTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, ValueTemplateDirective, TemplateContextDirective, GroupTagTemplateDirective, SelectableDirective, SummaryTagDirective, FilterDirective, DropDownsModule, MultiSelectModule, SharedModule, AutoCompleteModule, ComboBoxModule, DropDownListModule, SharedDirectivesModule, ListComponent, PreventableEvent, RemoveTagEvent };\n\n","import { not } from '../util/not';\nimport { filter } from './filter';\nexport function partition(predicate, thisArg) {\n return (source) => [\n filter(predicate, thisArg)(source),\n filter(not(predicate, thisArg))(source)\n ];\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (var i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n { return a.childCount == b.childCount ? null : pos }\n\n var childA = a.child(i), childB = b.child(i);\n if (childA == childB) { pos += childA.nodeSize; continue }\n\n if (!childA.sameMarkup(childB)) { return pos }\n\n if (childA.isText && childA.text != childB.text) {\n for (var j = 0; childA.text[j] == childB.text[j]; j++)\n { pos++; }\n return pos\n }\n if (childA.content.size || childB.content.size) {\n var inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null) { return inner }\n }\n pos += childA.nodeSize;\n }\n}\n\nfunction findDiffEnd(a, b, posA, posB) {\n for (var iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n { return iA == iB ? null : {a: posA, b: posB} }\n\n var childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size; posB -= size;\n continue\n }\n\n if (!childA.sameMarkup(childB)) { return {a: posA, b: posB} }\n\n if (childA.isText && childA.text != childB.text) {\n var same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++; posA--; posB--;\n }\n return {a: posA, b: posB}\n }\n if (childA.content.size || childB.content.size) {\n var inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner) { return inner }\n }\n posA -= size; posB -= size;\n }\n}\n\n// ::- A fragment represents a node's collection of child nodes.\n//\n// Like nodes, fragments are persistent data structures, and you\n// should not mutate them or their content. Rather, you create new\n// instances whenever needed. The API tries to make this easy.\nvar Fragment = function Fragment(content, size) {\n this.content = content;\n // :: number\n // The size of the fragment, which is the total of the size of its\n // content nodes.\n this.size = size || 0;\n if (size == null) { for (var i = 0; i < content.length; i++)\n { this.size += content[i].nodeSize; } }\n};\n\nvar prototypeAccessors = { firstChild: { configurable: true },lastChild: { configurable: true },childCount: { configurable: true } };\n\n// :: (number, number, (node: Node, start: number, parent: Node, index: number) → ?bool, ?number)\n// Invoke a callback for all descendant nodes between the given two\n// positions (relative to start of this fragment). Doesn't descend\n// into a node when the callback returns `false`.\nFragment.prototype.nodesBetween = function nodesBetween (from, to, f, nodeStart, parent) {\n if ( nodeStart === void 0 ) nodeStart = 0;\n\n for (var i = 0, pos = 0; pos < to; i++) {\n var child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent, i) !== false && child.content.size) {\n var start = pos + 1;\n child.nodesBetween(Math.max(0, from - start),\n Math.min(child.content.size, to - start),\n f, nodeStart + start);\n }\n pos = end;\n }\n};\n\n// :: ((node: Node, pos: number, parent: Node) → ?bool)\n// Call the given callback for every descendant node. The callback\n// may return `false` to prevent traversal of a given node's children.\nFragment.prototype.descendants = function descendants (f) {\n this.nodesBetween(0, this.size, f);\n};\n\n// :: (number, number, ?string, ?string | ?(leafNode: Node) -> string) → string\n// Extract the text between `from` and `to`. See the same method on\n// [`Node`](#model.Node.textBetween).\nFragment.prototype.textBetween = function textBetween (from, to, blockSeparator, leafText) {\n var text = \"\", separated = true;\n this.nodesBetween(from, to, function (node, pos) {\n if (node.isText) {\n text += node.text.slice(Math.max(from, pos) - pos, to - pos);\n separated = !blockSeparator;\n } else if (node.isLeaf && leafText) {\n text += typeof leafText === 'function' ? leafText(node): leafText;\n separated = !blockSeparator;\n } else if (!separated && node.isBlock) {\n text += blockSeparator;\n separated = true;\n }\n }, 0);\n return text\n};\n\n// :: (Fragment) → Fragment\n// Create a new fragment containing the combined content of this\n// fragment and the other.\nFragment.prototype.append = function append (other) {\n if (!other.size) { return this }\n if (!this.size) { return other }\n var last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++) { content.push(other.content[i]); }\n return new Fragment(content, this.size + other.size)\n};\n\n// :: (number, ?number) → Fragment\n// Cut out the sub-fragment between the two given positions.\nFragment.prototype.cut = function cut (from, to) {\n if (to == null) { to = this.size; }\n if (from == 0 && to == this.size) { return this }\n var result = [], size = 0;\n if (to > from) { for (var i = 0, pos = 0; pos < to; i++) {\n var child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n { child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos)); }\n else\n { child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1)); }\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n } }\n return new Fragment(result, size)\n};\n\nFragment.prototype.cutByIndex = function cutByIndex (from, to) {\n if (from == to) { return Fragment.empty }\n if (from == 0 && to == this.content.length) { return this }\n return new Fragment(this.content.slice(from, to))\n};\n\n// :: (number, Node) → Fragment\n// Create a new fragment in which the node at the given index is\n// replaced by the given node.\nFragment.prototype.replaceChild = function replaceChild (index, node) {\n var current = this.content[index];\n if (current == node) { return this }\n var copy = this.content.slice();\n var size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size)\n};\n\n// : (Node) → Fragment\n// Create a new fragment by prepending the given node to this\n// fragment.\nFragment.prototype.addToStart = function addToStart (node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize)\n};\n\n// : (Node) → Fragment\n// Create a new fragment by appending the given node to this\n// fragment.\nFragment.prototype.addToEnd = function addToEnd (node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize)\n};\n\n// :: (Fragment) → bool\n// Compare this fragment to another one.\nFragment.prototype.eq = function eq (other) {\n if (this.content.length != other.content.length) { return false }\n for (var i = 0; i < this.content.length; i++)\n { if (!this.content[i].eq(other.content[i])) { return false } }\n return true\n};\n\n// :: ?Node\n// The first child of the fragment, or `null` if it is empty.\nprototypeAccessors.firstChild.get = function () { return this.content.length ? this.content[0] : null };\n\n// :: ?Node\n// The last child of the fragment, or `null` if it is empty.\nprototypeAccessors.lastChild.get = function () { return this.content.length ? this.content[this.content.length - 1] : null };\n\n// :: number\n// The number of child nodes in this fragment.\nprototypeAccessors.childCount.get = function () { return this.content.length };\n\n// :: (number) → Node\n// Get the child node at the given index. Raise an error when the\n// index is out of range.\nFragment.prototype.child = function child (index) {\n var found = this.content[index];\n if (!found) { throw new RangeError(\"Index \" + index + \" out of range for \" + this) }\n return found\n};\n\n// :: (number) → ?Node\n// Get the child node at the given index, if it exists.\nFragment.prototype.maybeChild = function maybeChild (index) {\n return this.content[index]\n};\n\n// :: ((node: Node, offset: number, index: number))\n// Call `f` for every child node, passing the node, its offset\n// into this parent node, and its index.\nFragment.prototype.forEach = function forEach (f) {\n for (var i = 0, p = 0; i < this.content.length; i++) {\n var child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n};\n\n// :: (Fragment) → ?number\n// Find the first position at which this fragment and another\n// fragment differ, or `null` if they are the same.\nFragment.prototype.findDiffStart = function findDiffStart$1 (other, pos) {\n if ( pos === void 0 ) pos = 0;\n\n return findDiffStart(this, other, pos)\n};\n\n// :: (Fragment) → ?{a: number, b: number}\n// Find the first position, searching from the end, at which this\n// fragment and the given fragment differ, or `null` if they are the\n// same. Since this position will not be the same in both nodes, an\n// object with two separate positions is returned.\nFragment.prototype.findDiffEnd = function findDiffEnd$1 (other, pos, otherPos) {\n if ( pos === void 0 ) pos = this.size;\n if ( otherPos === void 0 ) otherPos = other.size;\n\n return findDiffEnd(this, other, pos, otherPos)\n};\n\n// : (number, ?number) → {index: number, offset: number}\n// Find the index and inner offset corresponding to a given relative\n// position in this fragment. The result object will be reused\n// (overwritten) the next time the function is called. (Not public.)\nFragment.prototype.findIndex = function findIndex (pos, round) {\n if ( round === void 0 ) round = -1;\n\n if (pos == 0) { return retIndex(0, pos) }\n if (pos == this.size) { return retIndex(this.content.length, pos) }\n if (pos > this.size || pos < 0) { throw new RangeError((\"Position \" + pos + \" outside of fragment (\" + (this) + \")\")) }\n for (var i = 0, curPos = 0;; i++) {\n var cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos || round > 0) { return retIndex(i + 1, end) }\n return retIndex(i, curPos)\n }\n curPos = end;\n }\n};\n\n// :: () → string\n// Return a debugging string that describes this fragment.\nFragment.prototype.toString = function toString () { return \"<\" + this.toStringInner() + \">\" };\n\nFragment.prototype.toStringInner = function toStringInner () { return this.content.join(\", \") };\n\n// :: () → ?Object\n// Create a JSON-serializeable representation of this fragment.\nFragment.prototype.toJSON = function toJSON () {\n return this.content.length ? this.content.map(function (n) { return n.toJSON(); }) : null\n};\n\n// :: (Schema, ?Object) → Fragment\n// Deserialize a fragment from its JSON representation.\nFragment.fromJSON = function fromJSON (schema, value) {\n if (!value) { return Fragment.empty }\n if (!Array.isArray(value)) { throw new RangeError(\"Invalid input for Fragment.fromJSON\") }\n return new Fragment(value.map(schema.nodeFromJSON))\n};\n\n// :: ([Node]) → Fragment\n// Build a fragment from an array of nodes. Ensures that adjacent\n// text nodes with the same marks are joined together.\nFragment.fromArray = function fromArray (array) {\n if (!array.length) { return Fragment.empty }\n var joined, size = 0;\n for (var i = 0; i < array.length; i++) {\n var node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined) { joined = array.slice(0, i); }\n joined[joined.length - 1] = node.withText(joined[joined.length - 1].text + node.text);\n } else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size)\n};\n\n// :: (?union) → Fragment\n// Create a fragment from something that can be interpreted as a set\n// of nodes. For `null`, it returns the empty fragment. For a\n// fragment, the fragment itself. For a node or array of nodes, a\n// fragment containing those nodes.\nFragment.from = function from (nodes) {\n if (!nodes) { return Fragment.empty }\n if (nodes instanceof Fragment) { return nodes }\n if (Array.isArray(nodes)) { return this.fromArray(nodes) }\n if (nodes.attrs) { return new Fragment([nodes], nodes.nodeSize) }\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"))\n};\n\nObject.defineProperties( Fragment.prototype, prototypeAccessors );\n\nvar found = {index: 0, offset: 0};\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found\n}\n\n// :: Fragment\n// An empty fragment. Intended to be reused whenever a node doesn't\n// contain anything (rather than allocating a new empty fragment for\n// each leaf node).\nFragment.empty = new Fragment([], 0);\n\nfunction compareDeep(a, b) {\n if (a === b) { return true }\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\")) { return false }\n var array = Array.isArray(a);\n if (Array.isArray(b) != array) { return false }\n if (array) {\n if (a.length != b.length) { return false }\n for (var i = 0; i < a.length; i++) { if (!compareDeep(a[i], b[i])) { return false } }\n } else {\n for (var p in a) { if (!(p in b) || !compareDeep(a[p], b[p])) { return false } }\n for (var p$1 in b) { if (!(p$1 in a)) { return false } }\n }\n return true\n}\n\n// ::- A mark is a piece of information that can be attached to a node,\n// such as it being emphasized, in code font, or a link. It has a type\n// and optionally a set of attributes that provide further information\n// (such as the target of the link). Marks are created through a\n// `Schema`, which controls which types exist and which\n// attributes they have.\nvar Mark = function Mark(type, attrs) {\n // :: MarkType\n // The type of this mark.\n this.type = type;\n // :: Object\n // The attributes associated with this mark.\n this.attrs = attrs;\n};\n\n// :: ([Mark]) → [Mark]\n// Given a set of marks, create a new set which contains this one as\n// well, in the right position. If this mark is already in the set,\n// the set itself is returned. If any marks that are set to be\n// [exclusive](#model.MarkSpec.excludes) with this mark are present,\n// those are replaced by this one.\nMark.prototype.addToSet = function addToSet (set) {\n var copy, placed = false;\n for (var i = 0; i < set.length; i++) {\n var other = set[i];\n if (this.eq(other)) { return set }\n if (this.type.excludes(other.type)) {\n if (!copy) { copy = set.slice(0, i); }\n } else if (other.type.excludes(this.type)) {\n return set\n } else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy) { copy = set.slice(0, i); }\n copy.push(this);\n placed = true;\n }\n if (copy) { copy.push(other); }\n }\n }\n if (!copy) { copy = set.slice(); }\n if (!placed) { copy.push(this); }\n return copy\n};\n\n// :: ([Mark]) → [Mark]\n// Remove this mark from the given set, returning a new set. If this\n// mark is not in the set, the set itself is returned.\nMark.prototype.removeFromSet = function removeFromSet (set) {\n for (var i = 0; i < set.length; i++)\n { if (this.eq(set[i]))\n { return set.slice(0, i).concat(set.slice(i + 1)) } }\n return set\n};\n\n// :: ([Mark]) → bool\n// Test whether this mark is in the given set of marks.\nMark.prototype.isInSet = function isInSet (set) {\n for (var i = 0; i < set.length; i++)\n { if (this.eq(set[i])) { return true } }\n return false\n};\n\n// :: (Mark) → bool\n// Test whether this mark has the same type and attributes as\n// another mark.\nMark.prototype.eq = function eq (other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs))\n};\n\n// :: () → Object\n// Convert this mark to a JSON-serializeable representation.\nMark.prototype.toJSON = function toJSON () {\n var obj = {type: this.type.name};\n for (var _ in this.attrs) {\n obj.attrs = this.attrs;\n break\n }\n return obj\n};\n\n// :: (Schema, Object) → Mark\nMark.fromJSON = function fromJSON (schema, json) {\n if (!json) { throw new RangeError(\"Invalid input for Mark.fromJSON\") }\n var type = schema.marks[json.type];\n if (!type) { throw new RangeError((\"There is no mark type \" + (json.type) + \" in this schema\")) }\n return type.create(json.attrs)\n};\n\n// :: ([Mark], [Mark]) → bool\n// Test whether two sets of marks are identical.\nMark.sameSet = function sameSet (a, b) {\n if (a == b) { return true }\n if (a.length != b.length) { return false }\n for (var i = 0; i < a.length; i++)\n { if (!a[i].eq(b[i])) { return false } }\n return true\n};\n\n// :: (?union) → [Mark]\n// Create a properly sorted mark set from null, a single mark, or an\n// unsorted array of marks.\nMark.setFrom = function setFrom (marks) {\n if (!marks || marks.length == 0) { return Mark.none }\n if (marks instanceof Mark) { return [marks] }\n var copy = marks.slice();\n copy.sort(function (a, b) { return a.type.rank - b.type.rank; });\n return copy\n};\n\n// :: [Mark] The empty set of marks.\nMark.none = [];\n\n// ReplaceError:: class extends Error\n// Error type raised by [`Node.replace`](#model.Node.replace) when\n// given an invalid replacement.\n\nfunction ReplaceError(message) {\n var err = Error.call(this, message);\n err.__proto__ = ReplaceError.prototype;\n return err\n}\n\nReplaceError.prototype = Object.create(Error.prototype);\nReplaceError.prototype.constructor = ReplaceError;\nReplaceError.prototype.name = \"ReplaceError\";\n\n// ::- A slice represents a piece cut out of a larger document. It\n// stores not only a fragment, but also the depth up to which nodes on\n// both side are ‘open’ (cut through).\nvar Slice = function Slice(content, openStart, openEnd) {\n // :: Fragment The slice's content.\n this.content = content;\n // :: number The open depth at the start.\n this.openStart = openStart;\n // :: number The open depth at the end.\n this.openEnd = openEnd;\n};\n\nvar prototypeAccessors$1 = { size: { configurable: true } };\n\n// :: number\n// The size this slice would add when inserted into a document.\nprototypeAccessors$1.size.get = function () {\n return this.content.size - this.openStart - this.openEnd\n};\n\nSlice.prototype.insertAt = function insertAt (pos, fragment) {\n var content = insertInto(this.content, pos + this.openStart, fragment, null);\n return content && new Slice(content, this.openStart, this.openEnd)\n};\n\nSlice.prototype.removeBetween = function removeBetween (from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd)\n};\n\n// :: (Slice) → bool\n// Tests whether this slice is equal to another slice.\nSlice.prototype.eq = function eq (other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd\n};\n\nSlice.prototype.toString = function toString () {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\"\n};\n\n// :: () → ?Object\n// Convert a slice to a JSON-serializable representation.\nSlice.prototype.toJSON = function toJSON () {\n if (!this.content.size) { return null }\n var json = {content: this.content.toJSON()};\n if (this.openStart > 0) { json.openStart = this.openStart; }\n if (this.openEnd > 0) { json.openEnd = this.openEnd; }\n return json\n};\n\n// :: (Schema, ?Object) → Slice\n// Deserialize a slice from its JSON representation.\nSlice.fromJSON = function fromJSON (schema, json) {\n if (!json) { return Slice.empty }\n var openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n { throw new RangeError(\"Invalid input for Slice.fromJSON\") }\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd)\n};\n\n// :: (Fragment, ?bool) → Slice\n// Create a slice from a fragment by taking the maximum possible\n// open value on both side of the fragment.\nSlice.maxOpen = function maxOpen (fragment, openIsolating) {\n if ( openIsolating === void 0 ) openIsolating=true;\n\n var openStart = 0, openEnd = 0;\n for (var n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild) { openStart++; }\n for (var n$1 = fragment.lastChild; n$1 && !n$1.isLeaf && (openIsolating || !n$1.type.spec.isolating); n$1 = n$1.lastChild) { openEnd++; }\n return new Slice(fragment, openStart, openEnd)\n};\n\nObject.defineProperties( Slice.prototype, prototypeAccessors$1 );\n\nfunction removeRange(content, from, to) {\n var ref = content.findIndex(from);\n var index = ref.index;\n var offset = ref.offset;\n var child = content.maybeChild(index);\n var ref$1 = content.findIndex(to);\n var indexTo = ref$1.index;\n var offsetTo = ref$1.offset;\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText) { throw new RangeError(\"Removing non-flat range\") }\n return content.cut(0, from).append(content.cut(to))\n }\n if (index != indexTo) { throw new RangeError(\"Removing non-flat range\") }\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)))\n}\n\nfunction insertInto(content, dist, insert, parent) {\n var ref = content.findIndex(dist);\n var index = ref.index;\n var offset = ref.offset;\n var child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert)) { return null }\n return content.cut(0, dist).append(insert).append(content.cut(dist))\n }\n var inner = insertInto(child.content, dist - offset - 1, insert);\n return inner && content.replaceChild(index, child.copy(inner))\n}\n\n// :: Slice\n// The empty slice.\nSlice.empty = new Slice(Fragment.empty, 0, 0);\n\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n { throw new ReplaceError(\"Inserted content deeper than insertion position\") }\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n { throw new ReplaceError(\"Inconsistent open depths\") }\n return replaceOuter($from, $to, slice, 0)\n}\n\nfunction replaceOuter($from, $to, slice, depth) {\n var index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n var inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner))\n } else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth))\n } else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n var parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)))\n } else {\n var ref = prepareSliceForReplace(slice, $from);\n var start = ref.start;\n var end = ref.end;\n return close(node, replaceThreeWay($from, start, end, $to, depth))\n }\n}\n\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n { throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name) }\n}\n\nfunction joinable($before, $after, depth) {\n var node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node\n}\n\nfunction addNode(child, target) {\n var last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n { target[last] = child.withText(target[last].text + child.text); }\n else\n { target.push(child); }\n}\n\nfunction addRange($start, $end, depth, target) {\n var node = ($end || $start).node(depth);\n var startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n } else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (var i = startIndex; i < endIndex; i++) { addNode(node.child(i), target); }\n if ($end && $end.depth == depth && $end.textOffset)\n { addNode($end.nodeBefore, target); }\n}\n\nfunction close(node, content) {\n if (!node.type.validContent(content))\n { throw new ReplaceError(\"Invalid content for node \" + node.type.name) }\n return node.copy(content)\n}\n\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n var openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n var openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n\n var content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n } else {\n if (openStart)\n { addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content); }\n addRange($start, $end, depth, content);\n if (openEnd)\n { addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content); }\n }\n addRange($to, null, depth, content);\n return new Fragment(content)\n}\n\nfunction replaceTwoWay($from, $to, depth) {\n var content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n var type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content)\n}\n\nfunction prepareSliceForReplace(slice, $along) {\n var extra = $along.depth - slice.openStart, parent = $along.node(extra);\n var node = parent.copy(slice.content);\n for (var i = extra - 1; i >= 0; i--)\n { node = $along.node(i).copy(Fragment.from(node)); }\n return {start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra)}\n}\n\n// ::- You can [_resolve_](#model.Node.resolve) a position to get more\n// information about it. Objects of this class represent such a\n// resolved position, providing various pieces of context information,\n// and some helper methods.\n//\n// Throughout this interface, methods that take an optional `depth`\n// parameter will interpret undefined as `this.depth` and negative\n// numbers as `this.depth + value`.\nvar ResolvedPos = function ResolvedPos(pos, path, parentOffset) {\n // :: number The position that was resolved.\n this.pos = pos;\n this.path = path;\n // :: number\n // The number of levels the parent node is from the root. If this\n // position points directly into the root node, it is 0. If it\n // points into a top-level paragraph, 1, and so on.\n this.depth = path.length / 3 - 1;\n // :: number The offset this position has into its parent node.\n this.parentOffset = parentOffset;\n};\n\nvar prototypeAccessors$2 = { parent: { configurable: true },doc: { configurable: true },textOffset: { configurable: true },nodeAfter: { configurable: true },nodeBefore: { configurable: true } };\n\nResolvedPos.prototype.resolveDepth = function resolveDepth (val) {\n if (val == null) { return this.depth }\n if (val < 0) { return this.depth + val }\n return val\n};\n\n// :: Node\n// The parent node that the position points into. Note that even if\n// a position points into a text node, that node is not considered\n// the parent—text nodes are ‘flat’ in this model, and have no content.\nprototypeAccessors$2.parent.get = function () { return this.node(this.depth) };\n\n// :: Node\n// The root node in which the position was resolved.\nprototypeAccessors$2.doc.get = function () { return this.node(0) };\n\n// :: (?number) → Node\n// The ancestor node at the given level. `p.node(p.depth)` is the\n// same as `p.parent`.\nResolvedPos.prototype.node = function node (depth) { return this.path[this.resolveDepth(depth) * 3] };\n\n// :: (?number) → number\n// The index into the ancestor at the given level. If this points at\n// the 3rd node in the 2nd paragraph on the top level, for example,\n// `p.index(0)` is 1 and `p.index(1)` is 2.\nResolvedPos.prototype.index = function index (depth) { return this.path[this.resolveDepth(depth) * 3 + 1] };\n\n// :: (?number) → number\n// The index pointing after this position into the ancestor at the\n// given level.\nResolvedPos.prototype.indexAfter = function indexAfter (depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1)\n};\n\n// :: (?number) → number\n// The (absolute) position at the start of the node at the given\n// level.\nResolvedPos.prototype.start = function start (depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1\n};\n\n// :: (?number) → number\n// The (absolute) position at the end of the node at the given\n// level.\nResolvedPos.prototype.end = function end (depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size\n};\n\n// :: (?number) → number\n// The (absolute) position directly before the wrapping node at the\n// given level, or, when `depth` is `this.depth + 1`, the original\n// position.\nResolvedPos.prototype.before = function before (depth) {\n depth = this.resolveDepth(depth);\n if (!depth) { throw new RangeError(\"There is no position before the top-level node\") }\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1]\n};\n\n// :: (?number) → number\n// The (absolute) position directly after the wrapping node at the\n// given level, or the original position when `depth` is `this.depth + 1`.\nResolvedPos.prototype.after = function after (depth) {\n depth = this.resolveDepth(depth);\n if (!depth) { throw new RangeError(\"There is no position after the top-level node\") }\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize\n};\n\n// :: number\n// When this position points into a text node, this returns the\n// distance between the position and the start of the text node.\n// Will be zero for positions that point between nodes.\nprototypeAccessors$2.textOffset.get = function () { return this.pos - this.path[this.path.length - 1] };\n\n// :: ?Node\n// Get the node directly after the position, if any. If the position\n// points into a text node, only the part of that node after the\n// position is returned.\nprototypeAccessors$2.nodeAfter.get = function () {\n var parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount) { return null }\n var dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child\n};\n\n// :: ?Node\n// Get the node directly before the position, if any. If the\n// position points into a text node, only the part of that node\n// before the position is returned.\nprototypeAccessors$2.nodeBefore.get = function () {\n var index = this.index(this.depth);\n var dOff = this.pos - this.path[this.path.length - 1];\n if (dOff) { return this.parent.child(index).cut(0, dOff) }\n return index == 0 ? null : this.parent.child(index - 1)\n};\n\n// :: (number, ?number) → number\n// Get the position at the given index in the parent node at the\n// given depth (which defaults to `this.depth`).\nResolvedPos.prototype.posAtIndex = function posAtIndex (index, depth) {\n depth = this.resolveDepth(depth);\n var node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (var i = 0; i < index; i++) { pos += node.child(i).nodeSize; }\n return pos\n};\n\n// :: () → [Mark]\n// Get the marks at this position, factoring in the surrounding\n// marks' [`inclusive`](#model.MarkSpec.inclusive) property. If the\n// position is at the start of a non-empty node, the marks of the\n// node after it (if any) are returned.\nResolvedPos.prototype.marks = function marks () {\n var parent = this.parent, index = this.index();\n\n // In an empty parent, return the empty array\n if (parent.content.size == 0) { return Mark.none }\n\n // When inside a text node, just return the text node's marks\n if (this.textOffset) { return parent.child(index).marks }\n\n var main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) { var tmp = main; main = other; other = tmp; }\n\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n var marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n { if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n { marks = marks[i--].removeFromSet(marks); } }\n\n return marks\n};\n\n// :: (ResolvedPos) → ?[Mark]\n// Get the marks after the current position, if any, except those\n// that are non-inclusive and not present at position `$end`. This\n// is mostly useful for getting the set of marks to preserve after a\n// deletion. Will return `null` if this position is at the end of\n// its parent node or its parent node isn't a textblock (in which\n// case no marks should be preserved).\nResolvedPos.prototype.marksAcross = function marksAcross ($end) {\n var after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline) { return null }\n\n var marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n { if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n { marks = marks[i--].removeFromSet(marks); } }\n return marks\n};\n\n// :: (number) → number\n// The depth up to which this position and the given (non-resolved)\n// position share the same parent nodes.\nResolvedPos.prototype.sharedDepth = function sharedDepth (pos) {\n for (var depth = this.depth; depth > 0; depth--)\n { if (this.start(depth) <= pos && this.end(depth) >= pos) { return depth } }\n return 0\n};\n\n// :: (?ResolvedPos, ?(Node) → bool) → ?NodeRange\n// Returns a range based on the place where this position and the\n// given position diverge around block content. If both point into\n// the same textblock, for example, a range around that textblock\n// will be returned. If they point into different blocks, the range\n// around those blocks in their shared ancestor is returned. You can\n// pass in an optional predicate that will be called with a parent\n// node to see if a range into that parent is acceptable.\nResolvedPos.prototype.blockRange = function blockRange (other, pred) {\n if ( other === void 0 ) other = this;\n\n if (other.pos < this.pos) { return other.blockRange(this) }\n for (var d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n { if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n { return new NodeRange(this, other, d) } }\n};\n\n// :: (ResolvedPos) → bool\n// Query whether the given position shares the same parent node.\nResolvedPos.prototype.sameParent = function sameParent (other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset\n};\n\n// :: (ResolvedPos) → ResolvedPos\n// Return the greater of this and the given position.\nResolvedPos.prototype.max = function max (other) {\n return other.pos > this.pos ? other : this\n};\n\n// :: (ResolvedPos) → ResolvedPos\n// Return the smaller of this and the given position.\nResolvedPos.prototype.min = function min (other) {\n return other.pos < this.pos ? other : this\n};\n\nResolvedPos.prototype.toString = function toString () {\n var str = \"\";\n for (var i = 1; i <= this.depth; i++)\n { str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1); }\n return str + \":\" + this.parentOffset\n};\n\nResolvedPos.resolve = function resolve (doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size)) { throw new RangeError(\"Position \" + pos + \" out of range\") }\n var path = [];\n var start = 0, parentOffset = pos;\n for (var node = doc;;) {\n var ref = node.content.findIndex(parentOffset);\n var index = ref.index;\n var offset = ref.offset;\n var rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem) { break }\n node = node.child(index);\n if (node.isText) { break }\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset)\n};\n\nResolvedPos.resolveCached = function resolveCached (doc, pos) {\n for (var i = 0; i < resolveCache.length; i++) {\n var cached = resolveCache[i];\n if (cached.pos == pos && cached.doc == doc) { return cached }\n }\n var result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos);\n resolveCachePos = (resolveCachePos + 1) % resolveCacheSize;\n return result\n};\n\nObject.defineProperties( ResolvedPos.prototype, prototypeAccessors$2 );\n\nvar resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12;\n\n// ::- Represents a flat range of content, i.e. one that starts and\n// ends in the same node.\nvar NodeRange = function NodeRange($from, $to, depth) {\n // :: ResolvedPos A resolved position along the start of the\n // content. May have a `depth` greater than this object's `depth`\n // property, since these are the positions that were used to\n // compute the range, not re-resolved positions directly at its\n // boundaries.\n this.$from = $from;\n // :: ResolvedPos A position along the end of the content. See\n // caveat for [`$from`](#model.NodeRange.$from).\n this.$to = $to;\n // :: number The depth of the node that this range points into.\n this.depth = depth;\n};\n\nvar prototypeAccessors$1$1 = { start: { configurable: true },end: { configurable: true },parent: { configurable: true },startIndex: { configurable: true },endIndex: { configurable: true } };\n\n// :: number The position at the start of the range.\nprototypeAccessors$1$1.start.get = function () { return this.$from.before(this.depth + 1) };\n// :: number The position at the end of the range.\nprototypeAccessors$1$1.end.get = function () { return this.$to.after(this.depth + 1) };\n\n// :: Node The parent node that the range points into.\nprototypeAccessors$1$1.parent.get = function () { return this.$from.node(this.depth) };\n// :: number The start index of the range in the parent node.\nprototypeAccessors$1$1.startIndex.get = function () { return this.$from.index(this.depth) };\n// :: number The end index of the range in the parent node.\nprototypeAccessors$1$1.endIndex.get = function () { return this.$to.indexAfter(this.depth) };\n\nObject.defineProperties( NodeRange.prototype, prototypeAccessors$1$1 );\n\nvar emptyAttrs = Object.create(null);\n\n// ::- This class represents a node in the tree that makes up a\n// ProseMirror document. So a document is an instance of `Node`, with\n// children that are also instances of `Node`.\n//\n// Nodes are persistent data structures. Instead of changing them, you\n// create new ones with the content you want. Old ones keep pointing\n// at the old document shape. This is made cheaper by sharing\n// structure between the old and new data as much as possible, which a\n// tree shape like this (without back pointers) makes easy.\n//\n// **Do not** directly mutate the properties of a `Node` object. See\n// [the guide](/docs/guide/#doc) for more information.\nvar Node = function Node(type, attrs, content, marks) {\n // :: NodeType\n // The type of node that this is.\n this.type = type;\n\n // :: Object\n // An object mapping attribute names to values. The kind of\n // attributes allowed and required are\n // [determined](#model.NodeSpec.attrs) by the node type.\n this.attrs = attrs;\n\n // :: Fragment\n // A container holding the node's children.\n this.content = content || Fragment.empty;\n\n // :: [Mark]\n // The marks (things like whether it is emphasized or part of a\n // link) applied to this node.\n this.marks = marks || Mark.none;\n};\n\nvar prototypeAccessors$3 = { nodeSize: { configurable: true },childCount: { configurable: true },textContent: { configurable: true },firstChild: { configurable: true },lastChild: { configurable: true },isBlock: { configurable: true },isTextblock: { configurable: true },inlineContent: { configurable: true },isInline: { configurable: true },isText: { configurable: true },isLeaf: { configurable: true },isAtom: { configurable: true } };\n\n// text:: ?string\n// For text nodes, this contains the node's text content.\n\n// :: number\n// The size of this node, as defined by the integer-based [indexing\n// scheme](/docs/guide/#doc.indexing). For text nodes, this is the\n// amount of characters. For other leaf nodes, it is one. For\n// non-leaf nodes, it is the size of the content plus two (the start\n// and end token).\nprototypeAccessors$3.nodeSize.get = function () { return this.isLeaf ? 1 : 2 + this.content.size };\n\n// :: number\n// The number of children that the node has.\nprototypeAccessors$3.childCount.get = function () { return this.content.childCount };\n\n// :: (number) → Node\n// Get the child node at the given index. Raises an error when the\n// index is out of range.\nNode.prototype.child = function child (index) { return this.content.child(index) };\n\n// :: (number) → ?Node\n// Get the child node at the given index, if it exists.\nNode.prototype.maybeChild = function maybeChild (index) { return this.content.maybeChild(index) };\n\n// :: ((node: Node, offset: number, index: number))\n// Call `f` for every child node, passing the node, its offset\n// into this parent node, and its index.\nNode.prototype.forEach = function forEach (f) { this.content.forEach(f); };\n\n// :: (number, number, (node: Node, pos: number, parent: Node, index: number) → ?bool, ?number)\n// Invoke a callback for all descendant nodes recursively between\n// the given two positions that are relative to start of this node's\n// content. The callback is invoked with the node, its\n// parent-relative position, its parent node, and its child index.\n// When the callback returns false for a given node, that node's\n// children will not be recursed over. The last parameter can be\n// used to specify a starting position to count from.\nNode.prototype.nodesBetween = function nodesBetween (from, to, f, startPos) {\n if ( startPos === void 0 ) startPos = 0;\n\n this.content.nodesBetween(from, to, f, startPos, this);\n};\n\n// :: ((node: Node, pos: number, parent: Node) → ?bool)\n// Call the given callback for every descendant node. Doesn't\n// descend into a node when the callback returns `false`.\nNode.prototype.descendants = function descendants (f) {\n this.nodesBetween(0, this.content.size, f);\n};\n\n// :: string\n// Concatenates all the text nodes found in this fragment and its\n// children.\nprototypeAccessors$3.textContent.get = function () { return this.textBetween(0, this.content.size, \"\") };\n\n// :: (number, number, ?string, ?string | ?(leafNode: Node) -> string) → string\n// Get all text between positions `from` and `to`. When\n// `blockSeparator` is given, it will be inserted whenever a new\n// block node is started. When `leafText` is given, it'll be\n// inserted for every non-text leaf node encountered.\nNode.prototype.textBetween = function textBetween (from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText)\n};\n\n// :: ?Node\n// Returns this node's first child, or `null` if there are no\n// children.\nprototypeAccessors$3.firstChild.get = function () { return this.content.firstChild };\n\n// :: ?Node\n// Returns this node's last child, or `null` if there are no\n// children.\nprototypeAccessors$3.lastChild.get = function () { return this.content.lastChild };\n\n// :: (Node) → bool\n// Test whether two nodes represent the same piece of document.\nNode.prototype.eq = function eq (other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content))\n};\n\n// :: (Node) → bool\n// Compare the markup (type, attributes, and marks) of this node to\n// those of another. Returns `true` if both have the same markup.\nNode.prototype.sameMarkup = function sameMarkup (other) {\n return this.hasMarkup(other.type, other.attrs, other.marks)\n};\n\n// :: (NodeType, ?Object, ?[Mark]) → bool\n// Check whether this node's markup correspond to the given type,\n// attributes, and marks.\nNode.prototype.hasMarkup = function hasMarkup (type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none)\n};\n\n// :: (?Fragment) → Node\n// Create a new node with the same markup as this node, containing\n// the given content (or empty, if no content is given).\nNode.prototype.copy = function copy (content) {\n if ( content === void 0 ) content = null;\n\n if (content == this.content) { return this }\n return new this.constructor(this.type, this.attrs, content, this.marks)\n};\n\n// :: ([Mark]) → Node\n// Create a copy of this node, with the given set of marks instead\n// of the node's own marks.\nNode.prototype.mark = function mark (marks) {\n return marks == this.marks ? this : new this.constructor(this.type, this.attrs, this.content, marks)\n};\n\n// :: (number, ?number) → Node\n// Create a copy of this node with only the content between the\n// given positions. If `to` is not given, it defaults to the end of\n// the node.\nNode.prototype.cut = function cut (from, to) {\n if (from == 0 && to == this.content.size) { return this }\n return this.copy(this.content.cut(from, to))\n};\n\n// :: (number, ?number) → Slice\n// Cut out the part of the document between the given positions, and\n// return it as a `Slice` object.\nNode.prototype.slice = function slice (from, to, includeParents) {\n if ( to === void 0 ) to = this.content.size;\n if ( includeParents === void 0 ) includeParents = false;\n\n if (from == to) { return Slice.empty }\n\n var $from = this.resolve(from), $to = this.resolve(to);\n var depth = includeParents ? 0 : $from.sharedDepth(to);\n var start = $from.start(depth), node = $from.node(depth);\n var content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth)\n};\n\n// :: (number, number, Slice) → Node\n// Replace the part of the document between the given positions with\n// the given slice. The slice must 'fit', meaning its open sides\n// must be able to connect to the surrounding content, and its\n// content nodes must be valid children for the node they are placed\n// into. If any of this is violated, an error of type\n// [`ReplaceError`](#model.ReplaceError) is thrown.\nNode.prototype.replace = function replace$1 (from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice)\n};\n\n// :: (number) → ?Node\n// Find the node directly after the given position.\nNode.prototype.nodeAt = function nodeAt (pos) {\n for (var node = this;;) {\n var ref = node.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n node = node.maybeChild(index);\n if (!node) { return null }\n if (offset == pos || node.isText) { return node }\n pos -= offset + 1;\n }\n};\n\n// :: (number) → {node: ?Node, index: number, offset: number}\n// Find the (direct) child node after the given offset, if any,\n// and return it along with its index and offset relative to this\n// node.\nNode.prototype.childAfter = function childAfter (pos) {\n var ref = this.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n return {node: this.content.maybeChild(index), index: index, offset: offset}\n};\n\n// :: (number) → {node: ?Node, index: number, offset: number}\n// Find the (direct) child node before the given offset, if any,\n// and return it along with its index and offset relative to this\n// node.\nNode.prototype.childBefore = function childBefore (pos) {\n if (pos == 0) { return {node: null, index: 0, offset: 0} }\n var ref = this.content.findIndex(pos);\n var index = ref.index;\n var offset = ref.offset;\n if (offset < pos) { return {node: this.content.child(index), index: index, offset: offset} }\n var node = this.content.child(index - 1);\n return {node: node, index: index - 1, offset: offset - node.nodeSize}\n};\n\n// :: (number) → ResolvedPos\n// Resolve the given position in the document, returning an\n// [object](#model.ResolvedPos) with information about its context.\nNode.prototype.resolve = function resolve (pos) { return ResolvedPos.resolveCached(this, pos) };\n\nNode.prototype.resolveNoCache = function resolveNoCache (pos) { return ResolvedPos.resolve(this, pos) };\n\n// :: (number, number, union) → bool\n// Test whether a given mark or mark type occurs in this document\n// between the two given positions.\nNode.prototype.rangeHasMark = function rangeHasMark (from, to, type) {\n var found = false;\n if (to > from) { this.nodesBetween(from, to, function (node) {\n if (type.isInSet(node.marks)) { found = true; }\n return !found\n }); }\n return found\n};\n\n// :: bool\n// True when this is a block (non-inline node)\nprototypeAccessors$3.isBlock.get = function () { return this.type.isBlock };\n\n// :: bool\n// True when this is a textblock node, a block node with inline\n// content.\nprototypeAccessors$3.isTextblock.get = function () { return this.type.isTextblock };\n\n// :: bool\n// True when this node allows inline content.\nprototypeAccessors$3.inlineContent.get = function () { return this.type.inlineContent };\n\n// :: bool\n// True when this is an inline node (a text node or a node that can\n// appear among text).\nprototypeAccessors$3.isInline.get = function () { return this.type.isInline };\n\n// :: bool\n// True when this is a text node.\nprototypeAccessors$3.isText.get = function () { return this.type.isText };\n\n// :: bool\n// True when this is a leaf node.\nprototypeAccessors$3.isLeaf.get = function () { return this.type.isLeaf };\n\n// :: bool\n// True when this is an atom, i.e. when it does not have directly\n// editable content. This is usually the same as `isLeaf`, but can\n// be configured with the [`atom` property](#model.NodeSpec.atom) on\n// a node's spec (typically used when the node is displayed as an\n// uneditable [node view](#view.NodeView)).\nprototypeAccessors$3.isAtom.get = function () { return this.type.isAtom };\n\n// :: () → string\n// Return a string representation of this node for debugging\n// purposes.\nNode.prototype.toString = function toString () {\n if (this.type.spec.toDebugString) { return this.type.spec.toDebugString(this) }\n var name = this.type.name;\n if (this.content.size)\n { name += \"(\" + this.content.toStringInner() + \")\"; }\n return wrapMarks(this.marks, name)\n};\n\n// :: (number) → ContentMatch\n// Get the content match in this node at the given index.\nNode.prototype.contentMatchAt = function contentMatchAt (index) {\n var match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match) { throw new Error(\"Called contentMatchAt on a node with invalid content\") }\n return match\n};\n\n// :: (number, number, ?Fragment, ?number, ?number) → bool\n// Test whether replacing the range between `from` and `to` (by\n// child index) with the given replacement fragment (which defaults\n// to the empty fragment) would leave the node's content valid. You\n// can optionally pass `start` and `end` indices into the\n// replacement fragment.\nNode.prototype.canReplace = function canReplace (from, to, replacement, start, end) {\n if ( replacement === void 0 ) replacement = Fragment.empty;\n if ( start === void 0 ) start = 0;\n if ( end === void 0 ) end = replacement.childCount;\n\n var one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n var two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd) { return false }\n for (var i = start; i < end; i++) { if (!this.type.allowsMarks(replacement.child(i).marks)) { return false } }\n return true\n};\n\n// :: (number, number, NodeType, ?[Mark]) → bool\n// Test whether replacing the range `from` to `to` (by index) with a\n// node of the given type would leave the node's content valid.\nNode.prototype.canReplaceWith = function canReplaceWith (from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks)) { return false }\n var start = this.contentMatchAt(from).matchType(type);\n var end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false\n};\n\n// :: (Node) → bool\n// Test whether the given node's content could be appended to this\n// node. If that node is empty, this will only return true if there\n// is at least one node type that can appear in both nodes (to avoid\n// merging completely incompatible nodes).\nNode.prototype.canAppend = function canAppend (other) {\n if (other.content.size) { return this.canReplace(this.childCount, this.childCount, other.content) }\n else { return this.type.compatibleContent(other.type) }\n};\n\n// :: ()\n// Check whether this node and its descendants conform to the\n// schema, and raise error when they do not.\nNode.prototype.check = function check () {\n if (!this.type.validContent(this.content))\n { throw new RangeError((\"Invalid content for node \" + (this.type.name) + \": \" + (this.content.toString().slice(0, 50)))) }\n var copy = Mark.none;\n for (var i = 0; i < this.marks.length; i++) { copy = this.marks[i].addToSet(copy); }\n if (!Mark.sameSet(copy, this.marks))\n { throw new RangeError((\"Invalid collection of marks for node \" + (this.type.name) + \": \" + (this.marks.map(function (m) { return m.type.name; })))) }\n this.content.forEach(function (node) { return node.check(); });\n};\n\n// :: () → Object\n// Return a JSON-serializeable representation of this node.\nNode.prototype.toJSON = function toJSON () {\n var obj = {type: this.type.name};\n for (var _ in this.attrs) {\n obj.attrs = this.attrs;\n break\n }\n if (this.content.size)\n { obj.content = this.content.toJSON(); }\n if (this.marks.length)\n { obj.marks = this.marks.map(function (n) { return n.toJSON(); }); }\n return obj\n};\n\n// :: (Schema, Object) → Node\n// Deserialize a node from its JSON representation.\nNode.fromJSON = function fromJSON (schema, json) {\n if (!json) { throw new RangeError(\"Invalid input for Node.fromJSON\") }\n var marks = null;\n if (json.marks) {\n if (!Array.isArray(json.marks)) { throw new RangeError(\"Invalid mark data for Node.fromJSON\") }\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\") { throw new RangeError(\"Invalid text node in JSON\") }\n return schema.text(json.text, marks)\n }\n var content = Fragment.fromJSON(schema, json.content);\n return schema.nodeType(json.type).create(json.attrs, content, marks)\n};\n\nObject.defineProperties( Node.prototype, prototypeAccessors$3 );\n\nvar TextNode = /*@__PURE__*/(function (Node) {\n function TextNode(type, attrs, content, marks) {\n Node.call(this, type, attrs, null, marks);\n\n if (!content) { throw new RangeError(\"Empty text nodes are not allowed\") }\n\n this.text = content;\n }\n\n if ( Node ) TextNode.__proto__ = Node;\n TextNode.prototype = Object.create( Node && Node.prototype );\n TextNode.prototype.constructor = TextNode;\n\n var prototypeAccessors$1 = { textContent: { configurable: true },nodeSize: { configurable: true } };\n\n TextNode.prototype.toString = function toString () {\n if (this.type.spec.toDebugString) { return this.type.spec.toDebugString(this) }\n return wrapMarks(this.marks, JSON.stringify(this.text))\n };\n\n prototypeAccessors$1.textContent.get = function () { return this.text };\n\n TextNode.prototype.textBetween = function textBetween (from, to) { return this.text.slice(from, to) };\n\n prototypeAccessors$1.nodeSize.get = function () { return this.text.length };\n\n TextNode.prototype.mark = function mark (marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks)\n };\n\n TextNode.prototype.withText = function withText (text) {\n if (text == this.text) { return this }\n return new TextNode(this.type, this.attrs, text, this.marks)\n };\n\n TextNode.prototype.cut = function cut (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.text.length;\n\n if (from == 0 && to == this.text.length) { return this }\n return this.withText(this.text.slice(from, to))\n };\n\n TextNode.prototype.eq = function eq (other) {\n return this.sameMarkup(other) && this.text == other.text\n };\n\n TextNode.prototype.toJSON = function toJSON () {\n var base = Node.prototype.toJSON.call(this);\n base.text = this.text;\n return base\n };\n\n Object.defineProperties( TextNode.prototype, prototypeAccessors$1 );\n\n return TextNode;\n}(Node));\n\nfunction wrapMarks(marks, str) {\n for (var i = marks.length - 1; i >= 0; i--)\n { str = marks[i].type.name + \"(\" + str + \")\"; }\n return str\n}\n\n// ::- Instances of this class represent a match state of a node\n// type's [content expression](#model.NodeSpec.content), and can be\n// used to find out whether further content matches here, and whether\n// a given position is a valid end of the node.\nvar ContentMatch = function ContentMatch(validEnd) {\n // :: bool\n // True when this match state represents a valid end of the node.\n this.validEnd = validEnd;\n this.next = [];\n this.wrapCache = [];\n};\n\nvar prototypeAccessors$4 = { inlineContent: { configurable: true },defaultType: { configurable: true },edgeCount: { configurable: true } };\n\nContentMatch.parse = function parse (string, nodeTypes) {\n var stream = new TokenStream(string, nodeTypes);\n if (stream.next == null) { return ContentMatch.empty }\n var expr = parseExpr(stream);\n if (stream.next) { stream.err(\"Unexpected trailing text\"); }\n var match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match\n};\n\n// :: (NodeType) → ?ContentMatch\n// Match a node type, returning a match after that node if\n// successful.\nContentMatch.prototype.matchType = function matchType (type) {\n for (var i = 0; i < this.next.length; i += 2)\n { if (this.next[i] == type) { return this.next[i + 1] } }\n return null\n};\n\n// :: (Fragment, ?number, ?number) → ?ContentMatch\n// Try to match a fragment. Returns the resulting match when\n// successful.\nContentMatch.prototype.matchFragment = function matchFragment (frag, start, end) {\n if ( start === void 0 ) start = 0;\n if ( end === void 0 ) end = frag.childCount;\n\n var cur = this;\n for (var i = start; cur && i < end; i++)\n { cur = cur.matchType(frag.child(i).type); }\n return cur\n};\n\nprototypeAccessors$4.inlineContent.get = function () {\n var first = this.next[0];\n return first ? first.isInline : false\n};\n\n// :: ?NodeType\n// Get the first matching node type at this match position that can\n// be generated.\nprototypeAccessors$4.defaultType.get = function () {\n for (var i = 0; i < this.next.length; i += 2) {\n var type = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs())) { return type }\n }\n};\n\nContentMatch.prototype.compatible = function compatible (other) {\n for (var i = 0; i < this.next.length; i += 2)\n { for (var j = 0; j < other.next.length; j += 2)\n { if (this.next[i] == other.next[j]) { return true } } }\n return false\n};\n\n// :: (Fragment, bool, ?number) → ?Fragment\n// Try to match the given fragment, and if that fails, see if it can\n// be made to match by inserting nodes in front of it. When\n// successful, return a fragment of inserted nodes (which may be\n// empty if nothing had to be inserted). When `toEnd` is true, only\n// return a fragment if the resulting match goes to the end of the\n// content expression.\nContentMatch.prototype.fillBefore = function fillBefore (after, toEnd, startIndex) {\n if ( toEnd === void 0 ) toEnd = false;\n if ( startIndex === void 0 ) startIndex = 0;\n\n var seen = [this];\n function search(match, types) {\n var finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n { return Fragment.from(types.map(function (tp) { return tp.createAndFill(); })) }\n\n for (var i = 0; i < match.next.length; i += 2) {\n var type = match.next[i], next = match.next[i + 1];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n var found = search(next, types.concat(type));\n if (found) { return found }\n }\n }\n }\n\n return search(this, [])\n};\n\n// :: (NodeType) → ?[NodeType]\n// Find a set of wrapping node types that would allow a node of the\n// given type to appear at this position. The result may be empty\n// (when it fits directly) and will be null when no such wrapping\n// exists.\nContentMatch.prototype.findWrapping = function findWrapping (target) {\n for (var i = 0; i < this.wrapCache.length; i += 2)\n { if (this.wrapCache[i] == target) { return this.wrapCache[i + 1] } }\n var computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed\n};\n\nContentMatch.prototype.computeWrapping = function computeWrapping (target) {\n var seen = Object.create(null), active = [{match: this, type: null, via: null}];\n while (active.length) {\n var current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n var result = [];\n for (var obj = current; obj.type; obj = obj.via)\n { result.push(obj.type); }\n return result.reverse()\n }\n for (var i = 0; i < match.next.length; i += 2) {\n var type = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || match.next[i + 1].validEnd)) {\n active.push({match: type.contentMatch, type: type, via: current});\n seen[type.name] = true;\n }\n }\n }\n};\n\n// :: number\n// The number of outgoing edges this node has in the finite\n// automaton that describes the content expression.\nprototypeAccessors$4.edgeCount.get = function () {\n return this.next.length >> 1\n};\n\n// :: (number) → {type: NodeType, next: ContentMatch}\n// Get the _n_​th outgoing edge from this node in the finite\n// automaton that describes the content expression.\nContentMatch.prototype.edge = function edge (n) {\n var i = n << 1;\n if (i >= this.next.length) { throw new RangeError((\"There's no \" + n + \"th edge in this content match\")) }\n return {type: this.next[i], next: this.next[i + 1]}\n};\n\nContentMatch.prototype.toString = function toString () {\n var seen = [];\n function scan(m) {\n seen.push(m);\n for (var i = 1; i < m.next.length; i += 2)\n { if (seen.indexOf(m.next[i]) == -1) { scan(m.next[i]); } }\n }\n scan(this);\n return seen.map(function (m, i) {\n var out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (var i$1 = 0; i$1 < m.next.length; i$1 += 2)\n { out += (i$1 ? \", \" : \"\") + m.next[i$1].name + \"->\" + seen.indexOf(m.next[i$1 + 1]); }\n return out\n }).join(\"\\n\")\n};\n\nObject.defineProperties( ContentMatch.prototype, prototypeAccessors$4 );\n\nContentMatch.empty = new ContentMatch(true);\n\nvar TokenStream = function TokenStream(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\") { this.tokens.pop(); }\n if (this.tokens[0] == \"\") { this.tokens.shift(); }\n};\n\nvar prototypeAccessors$1$2 = { next: { configurable: true } };\n\nprototypeAccessors$1$2.next.get = function () { return this.tokens[this.pos] };\n\nTokenStream.prototype.eat = function eat (tok) { return this.next == tok && (this.pos++ || true) };\n\nTokenStream.prototype.err = function err (str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\") };\n\nObject.defineProperties( TokenStream.prototype, prototypeAccessors$1$2 );\n\nfunction parseExpr(stream) {\n var exprs = [];\n do { exprs.push(parseExprSeq(stream)); }\n while (stream.eat(\"|\"))\n return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs: exprs}\n}\n\nfunction parseExprSeq(stream) {\n var exprs = [];\n do { exprs.push(parseExprSubscript(stream)); }\n while (stream.next && stream.next != \")\" && stream.next != \"|\")\n return exprs.length == 1 ? exprs[0] : {type: \"seq\", exprs: exprs}\n}\n\nfunction parseExprSubscript(stream) {\n var expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n { expr = {type: \"plus\", expr: expr}; }\n else if (stream.eat(\"*\"))\n { expr = {type: \"star\", expr: expr}; }\n else if (stream.eat(\"?\"))\n { expr = {type: \"opt\", expr: expr}; }\n else if (stream.eat(\"{\"))\n { expr = parseExprRange(stream, expr); }\n else { break }\n }\n return expr\n}\n\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next)) { stream.err(\"Expected number, got '\" + stream.next + \"'\"); }\n var result = Number(stream.next);\n stream.pos++;\n return result\n}\n\nfunction parseExprRange(stream, expr) {\n var min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\") { max = parseNum(stream); }\n else { max = -1; }\n }\n if (!stream.eat(\"}\")) { stream.err(\"Unclosed braced range\"); }\n return {type: \"range\", min: min, max: max, expr: expr}\n}\n\nfunction resolveName(stream, name) {\n var types = stream.nodeTypes, type = types[name];\n if (type) { return [type] }\n var result = [];\n for (var typeName in types) {\n var type$1 = types[typeName];\n if (type$1.groups.indexOf(name) > -1) { result.push(type$1); }\n }\n if (result.length == 0) { stream.err(\"No node type or group '\" + name + \"' found\"); }\n return result\n}\n\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n var expr = parseExpr(stream);\n if (!stream.eat(\")\")) { stream.err(\"Missing closing paren\"); }\n return expr\n } else if (!/\\W/.test(stream.next)) {\n var exprs = resolveName(stream, stream.next).map(function (type) {\n if (stream.inline == null) { stream.inline = type.isInline; }\n else if (stream.inline != type.isInline) { stream.err(\"Mixing inline and block content\"); }\n return {type: \"name\", value: type}\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : {type: \"choice\", exprs: exprs}\n } else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n\n// The code below helps compile a regular-expression-like language\n// into a deterministic finite automaton. For a good introduction to\n// these concepts, see https://swtch.com/~rsc/regexp/regexp1.html\n\n// : (Object) → [[{term: ?any, to: number}]]\n// Construct an NFA from an expression as returned by the parser. The\n// NFA is represented as an array of states, which are themselves\n// arrays of edges, which are `{term, to}` objects. The first state is\n// the entry state and the last node is the success state.\n//\n// Note that unlike typical NFAs, the edge ordering in this one is\n// significant, in that it is used to contruct filler content when\n// necessary.\nfunction nfa(expr) {\n var nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa\n\n function node() { return nfa.push([]) - 1 }\n function edge(from, to, term) {\n var edge = {term: term, to: to};\n nfa[from].push(edge);\n return edge\n }\n function connect(edges, to) { edges.forEach(function (edge) { return edge.to = to; }); }\n\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce(function (out, expr) { return out.concat(compile(expr, from)); }, [])\n } else if (expr.type == \"seq\") {\n for (var i = 0;; i++) {\n var next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1) { return next }\n connect(next, from = node());\n }\n } else if (expr.type == \"star\") {\n var loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)]\n } else if (expr.type == \"plus\") {\n var loop$1 = node();\n connect(compile(expr.expr, from), loop$1);\n connect(compile(expr.expr, loop$1), loop$1);\n return [edge(loop$1)]\n } else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from))\n } else if (expr.type == \"range\") {\n var cur = from;\n for (var i$1 = 0; i$1 < expr.min; i$1++) {\n var next$1 = node();\n connect(compile(expr.expr, cur), next$1);\n cur = next$1;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n } else {\n for (var i$2 = expr.min; i$2 < expr.max; i$2++) {\n var next$2 = node();\n edge(cur, next$2);\n connect(compile(expr.expr, cur), next$2);\n cur = next$2;\n }\n }\n return [edge(cur)]\n } else if (expr.type == \"name\") {\n return [edge(from, null, expr.value)]\n }\n }\n}\n\nfunction cmp(a, b) { return b - a }\n\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n var result = [];\n scan(node);\n return result.sort(cmp)\n\n function scan(node) {\n var edges = nfa[node];\n if (edges.length == 1 && !edges[0].term) { return scan(edges[0].to) }\n result.push(node);\n for (var i = 0; i < edges.length; i++) {\n var ref = edges[i];\n var term = ref.term;\n var to = ref.to;\n if (!term && result.indexOf(to) == -1) { scan(to); }\n }\n }\n}\n\n// : ([[{term: ?any, to: number}]]) → ContentMatch\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n var labeled = Object.create(null);\n return explore(nullFrom(nfa, 0))\n\n function explore(states) {\n var out = [];\n states.forEach(function (node) {\n nfa[node].forEach(function (ref) {\n var term = ref.term;\n var to = ref.to;\n\n if (!term) { return }\n var known = out.indexOf(term), set = known > -1 && out[known + 1];\n nullFrom(nfa, to).forEach(function (node) {\n if (!set) { out.push(term, set = []); }\n if (set.indexOf(node) == -1) { set.push(node); }\n });\n });\n });\n var state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (var i = 0; i < out.length; i += 2) {\n var states$1 = out[i + 1].sort(cmp);\n state.next.push(out[i], labeled[states$1.join(\",\")] || explore(states$1));\n }\n return state\n }\n}\n\nfunction checkForDeadEnds(match, stream) {\n for (var i = 0, work = [match]; i < work.length; i++) {\n var state = work[i], dead = !state.validEnd, nodes = [];\n for (var j = 0; j < state.next.length; j += 2) {\n var node = state.next[j], next = state.next[j + 1];\n nodes.push(node.name);\n if (dead && !(node.isText || node.hasRequiredAttrs())) { dead = false; }\n if (work.indexOf(next) == -1) { work.push(next); }\n }\n if (dead) { stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\"); }\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n var defaults = Object.create(null);\n for (var attrName in attrs) {\n var attr = attrs[attrName];\n if (!attr.hasDefault) { return null }\n defaults[attrName] = attr.default;\n }\n return defaults\n}\n\nfunction computeAttrs(attrs, value) {\n var built = Object.create(null);\n for (var name in attrs) {\n var given = value && value[name];\n if (given === undefined) {\n var attr = attrs[name];\n if (attr.hasDefault) { given = attr.default; }\n else { throw new RangeError(\"No value supplied for attribute \" + name) }\n }\n built[name] = given;\n }\n return built\n}\n\nfunction initAttrs(attrs) {\n var result = Object.create(null);\n if (attrs) { for (var name in attrs) { result[name] = new Attribute(attrs[name]); } }\n return result\n}\n\n// ::- Node types are objects allocated once per `Schema` and used to\n// [tag](#model.Node.type) `Node` instances. They contain information\n// about the node type, such as its name and what kind of node it\n// represents.\nvar NodeType = function NodeType(name, schema, spec) {\n // :: string\n // The name the node type has in this schema.\n this.name = name;\n\n // :: Schema\n // A link back to the `Schema` the node type belongs to.\n this.schema = schema;\n\n // :: NodeSpec\n // The spec that this type is based on\n this.spec = spec;\n\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(spec.attrs);\n\n this.defaultAttrs = defaultAttrs(this.attrs);\n\n // :: ContentMatch\n // The starting match of the node type's content expression.\n this.contentMatch = null;\n\n // : ?[MarkType]\n // The set of marks allowed in this node. `null` means all marks\n // are allowed.\n this.markSet = null;\n\n // :: bool\n // True if this node type has inline content.\n this.inlineContent = null;\n\n // :: bool\n // True if this is a block type\n this.isBlock = !(spec.inline || name == \"text\");\n\n // :: bool\n // True if this is the text node type.\n this.isText = name == \"text\";\n};\n\nvar prototypeAccessors$5 = { isInline: { configurable: true },isTextblock: { configurable: true },isLeaf: { configurable: true },isAtom: { configurable: true } };\n\n// :: bool\n// True if this is an inline type.\nprototypeAccessors$5.isInline.get = function () { return !this.isBlock };\n\n// :: bool\n// True if this is a textblock type, a block that contains inline\n// content.\nprototypeAccessors$5.isTextblock.get = function () { return this.isBlock && this.inlineContent };\n\n// :: bool\n// True for node types that allow no content.\nprototypeAccessors$5.isLeaf.get = function () { return this.contentMatch == ContentMatch.empty };\n\n// :: bool\n// True when this node is an atom, i.e. when it does not have\n// directly editable content.\nprototypeAccessors$5.isAtom.get = function () { return this.isLeaf || this.spec.atom };\n\n// :: () → bool\n// Tells you whether this node type has any required attributes.\nNodeType.prototype.hasRequiredAttrs = function hasRequiredAttrs () {\n for (var n in this.attrs) { if (this.attrs[n].isRequired) { return true } }\n return false\n};\n\nNodeType.prototype.compatibleContent = function compatibleContent (other) {\n return this == other || this.contentMatch.compatible(other.contentMatch)\n};\n\nNodeType.prototype.computeAttrs = function computeAttrs$1 (attrs) {\n if (!attrs && this.defaultAttrs) { return this.defaultAttrs }\n else { return computeAttrs(this.attrs, attrs) }\n};\n\n// :: (?Object, ?union, ?[Mark]) → Node\n// Create a `Node` of this type. The given attributes are\n// checked and defaulted (you can pass `null` to use the type's\n// defaults entirely, if no required attributes exist). `content`\n// may be a `Fragment`, a node, an array of nodes, or\n// `null`. Similarly `marks` may be `null` to default to the empty\n// set of marks.\nNodeType.prototype.create = function create (attrs, content, marks) {\n if (this.isText) { throw new Error(\"NodeType.create can't construct text nodes\") }\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks))\n};\n\n// :: (?Object, ?union, ?[Mark]) → Node\n// Like [`create`](#model.NodeType.create), but check the given content\n// against the node type's content restrictions, and throw an error\n// if it doesn't match.\nNodeType.prototype.createChecked = function createChecked (attrs, content, marks) {\n content = Fragment.from(content);\n if (!this.validContent(content))\n { throw new RangeError(\"Invalid content for node \" + this.name) }\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks))\n};\n\n// :: (?Object, ?union, ?[Mark]) → ?Node\n// Like [`create`](#model.NodeType.create), but see if it is necessary to\n// add nodes to the start or end of the given fragment to make it\n// fit the node. If no fitting wrapping can be found, return null.\n// Note that, due to the fact that required nodes can always be\n// created, this will always succeed if you pass null or\n// `Fragment.empty` as content.\nNodeType.prototype.createAndFill = function createAndFill (attrs, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n var before = this.contentMatch.fillBefore(content);\n if (!before) { return null }\n content = before.append(content);\n }\n var after = this.contentMatch.matchFragment(content).fillBefore(Fragment.empty, true);\n if (!after) { return null }\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks))\n};\n\n// :: (Fragment) → bool\n// Returns true if the given fragment is valid content for this node\n// type with the given attributes.\nNodeType.prototype.validContent = function validContent (content) {\n var result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd) { return false }\n for (var i = 0; i < content.childCount; i++)\n { if (!this.allowsMarks(content.child(i).marks)) { return false } }\n return true\n};\n\n// :: (MarkType) → bool\n// Check whether the given mark type is allowed in this node.\nNodeType.prototype.allowsMarkType = function allowsMarkType (markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1\n};\n\n// :: ([Mark]) → bool\n// Test whether the given set of marks are allowed in this node.\nNodeType.prototype.allowsMarks = function allowsMarks (marks) {\n if (this.markSet == null) { return true }\n for (var i = 0; i < marks.length; i++) { if (!this.allowsMarkType(marks[i].type)) { return false } }\n return true\n};\n\n// :: ([Mark]) → [Mark]\n// Removes the marks that are not allowed in this node from the given set.\nNodeType.prototype.allowedMarks = function allowedMarks (marks) {\n if (this.markSet == null) { return marks }\n var copy;\n for (var i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy) { copy = marks.slice(0, i); }\n } else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.empty\n};\n\nNodeType.compile = function compile (nodes, schema) {\n var result = Object.create(null);\n nodes.forEach(function (name, spec) { return result[name] = new NodeType(name, schema, spec); });\n\n var topType = schema.spec.topNode || \"doc\";\n if (!result[topType]) { throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\") }\n if (!result.text) { throw new RangeError(\"Every schema needs a 'text' type\") }\n for (var _ in result.text.attrs) { throw new RangeError(\"The text node type should not have attributes\") }\n\n return result\n};\n\nObject.defineProperties( NodeType.prototype, prototypeAccessors$5 );\n\n// Attribute descriptors\n\nvar Attribute = function Attribute(options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n};\n\nvar prototypeAccessors$1$3 = { isRequired: { configurable: true } };\n\nprototypeAccessors$1$3.isRequired.get = function () {\n return !this.hasDefault\n};\n\nObject.defineProperties( Attribute.prototype, prototypeAccessors$1$3 );\n\n// Marks\n\n// ::- Like nodes, marks (which are associated with nodes to signify\n// things like emphasis or being part of a link) are\n// [tagged](#model.Mark.type) with type objects, which are\n// instantiated once per `Schema`.\nvar MarkType = function MarkType(name, rank, schema, spec) {\n // :: string\n // The name of the mark type.\n this.name = name;\n\n // :: Schema\n // The schema that this mark type instance is part of.\n this.schema = schema;\n\n // :: MarkSpec\n // The spec on which the type is based.\n this.spec = spec;\n\n this.attrs = initAttrs(spec.attrs);\n\n this.rank = rank;\n this.excluded = null;\n var defaults = defaultAttrs(this.attrs);\n this.instance = defaults && new Mark(this, defaults);\n};\n\n// :: (?Object) → Mark\n// Create a mark of this type. `attrs` may be `null` or an object\n// containing only some of the mark's attributes. The others, if\n// they have defaults, will be added.\nMarkType.prototype.create = function create (attrs) {\n if (!attrs && this.instance) { return this.instance }\n return new Mark(this, computeAttrs(this.attrs, attrs))\n};\n\nMarkType.compile = function compile (marks, schema) {\n var result = Object.create(null), rank = 0;\n marks.forEach(function (name, spec) { return result[name] = new MarkType(name, rank++, schema, spec); });\n return result\n};\n\n// :: ([Mark]) → [Mark]\n// When there is a mark of this type in the given set, a new set\n// without it is returned. Otherwise, the input set is returned.\nMarkType.prototype.removeFromSet = function removeFromSet (set) {\n for (var i = 0; i < set.length; i++) { if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n } }\n return set\n};\n\n// :: ([Mark]) → ?Mark\n// Tests whether there is a mark of this type in the given set.\nMarkType.prototype.isInSet = function isInSet (set) {\n for (var i = 0; i < set.length; i++)\n { if (set[i].type == this) { return set[i] } }\n};\n\n// :: (MarkType) → bool\n// Queries whether a given mark type is\n// [excluded](#model.MarkSpec.excludes) by this one.\nMarkType.prototype.excludes = function excludes (other) {\n return this.excluded.indexOf(other) > -1\n};\n\n// SchemaSpec:: interface\n// An object describing a schema, as passed to the [`Schema`](#model.Schema)\n// constructor.\n//\n// nodes:: union, OrderedMap>\n// The node types in this schema. Maps names to\n// [`NodeSpec`](#model.NodeSpec) objects that describe the node type\n// associated with that name. Their order is significant—it\n// determines which [parse rules](#model.NodeSpec.parseDOM) take\n// precedence by default, and which nodes come first in a given\n// [group](#model.NodeSpec.group).\n//\n// marks:: ?union, OrderedMap>\n// The mark types that exist in this schema. The order in which they\n// are provided determines the order in which [mark\n// sets](#model.Mark.addToSet) are sorted and in which [parse\n// rules](#model.MarkSpec.parseDOM) are tried.\n//\n// topNode:: ?string\n// The name of the default top-level node for the schema. Defaults\n// to `\"doc\"`.\n\n// NodeSpec:: interface\n//\n// content:: ?string\n// The content expression for this node, as described in the [schema\n// guide](/docs/guide/#schema.content_expressions). When not given,\n// the node does not allow any content.\n//\n// marks:: ?string\n// The marks that are allowed inside of this node. May be a\n// space-separated string referring to mark names or groups, `\"_\"`\n// to explicitly allow all marks, or `\"\"` to disallow marks. When\n// not given, nodes with inline content default to allowing all\n// marks, other nodes default to not allowing marks.\n//\n// group:: ?string\n// The group or space-separated groups to which this node belongs,\n// which can be referred to in the content expressions for the\n// schema.\n//\n// inline:: ?bool\n// Should be set to true for inline nodes. (Implied for text nodes.)\n//\n// atom:: ?bool\n// Can be set to true to indicate that, though this isn't a [leaf\n// node](#model.NodeType.isLeaf), it doesn't have directly editable\n// content and should be treated as a single unit in the view.\n//\n// attrs:: ?Object\n// The attributes that nodes of this type get.\n//\n// selectable:: ?bool\n// Controls whether nodes of this type can be selected as a [node\n// selection](#state.NodeSelection). Defaults to true for non-text\n// nodes.\n//\n// draggable:: ?bool\n// Determines whether nodes of this type can be dragged without\n// being selected. Defaults to false.\n//\n// code:: ?bool\n// Can be used to indicate that this node contains code, which\n// causes some commands to behave differently.\n//\n// defining:: ?bool\n// Determines whether this node is considered an important parent\n// node during replace operations (such as paste). Non-defining (the\n// default) nodes get dropped when their entire content is replaced,\n// whereas defining nodes persist and wrap the inserted content.\n// Likewise, in _inserted_ content the defining parents of the\n// content are preserved when possible. Typically,\n// non-default-paragraph textblock types, and possibly list items,\n// are marked as defining.\n//\n// isolating:: ?bool\n// When enabled (default is false), the sides of nodes of this type\n// count as boundaries that regular editing operations, like\n// backspacing or lifting, won't cross. An example of a node that\n// should probably have this enabled is a table cell.\n//\n// toDOM:: ?(node: Node) → DOMOutputSpec\n// Defines the default way a node of this type should be serialized\n// to DOM/HTML (as used by\n// [`DOMSerializer.fromSchema`](#model.DOMSerializer^fromSchema)).\n// Should return a DOM node or an [array\n// structure](#model.DOMOutputSpec) that describes one, with an\n// optional number zero (“hole”) in it to indicate where the node's\n// content should be inserted.\n//\n// For text nodes, the default is to create a text DOM node. Though\n// it is possible to create a serializer where text is rendered\n// differently, this is not supported inside the editor, so you\n// shouldn't override that in your text node spec.\n//\n// parseDOM:: ?[ParseRule]\n// Associates DOM parser information with this node, which can be\n// used by [`DOMParser.fromSchema`](#model.DOMParser^fromSchema) to\n// automatically derive a parser. The `node` field in the rules is\n// implied (the name of this node will be filled in automatically).\n// If you supply your own parser, you do not need to also specify\n// parsing rules in your schema.\n//\n// toDebugString:: ?(node: Node) -> string\n// Defines the default way a node of this type should be serialized\n// to a string representation for debugging (e.g. in error messages).\n\n// MarkSpec:: interface\n//\n// attrs:: ?Object\n// The attributes that marks of this type get.\n//\n// inclusive:: ?bool\n// Whether this mark should be active when the cursor is positioned\n// at its end (or at its start when that is also the start of the\n// parent node). Defaults to true.\n//\n// excludes:: ?string\n// Determines which other marks this mark can coexist with. Should\n// be a space-separated strings naming other marks or groups of marks.\n// When a mark is [added](#model.Mark.addToSet) to a set, all marks\n// that it excludes are removed in the process. If the set contains\n// any mark that excludes the new mark but is not, itself, excluded\n// by the new mark, the mark can not be added an the set. You can\n// use the value `\"_\"` to indicate that the mark excludes all\n// marks in the schema.\n//\n// Defaults to only being exclusive with marks of the same type. You\n// can set it to an empty string (or any string not containing the\n// mark's own name) to allow multiple marks of a given type to\n// coexist (as long as they have different attributes).\n//\n// group:: ?string\n// The group or space-separated groups to which this mark belongs.\n//\n// spanning:: ?bool\n// Determines whether marks of this type can span multiple adjacent\n// nodes when serialized to DOM/HTML. Defaults to true.\n//\n// toDOM:: ?(mark: Mark, inline: bool) → DOMOutputSpec\n// Defines the default way marks of this type should be serialized\n// to DOM/HTML. When the resulting spec contains a hole, that is\n// where the marked content is placed. Otherwise, it is appended to\n// the top node.\n//\n// parseDOM:: ?[ParseRule]\n// Associates DOM parser information with this mark (see the\n// corresponding [node spec field](#model.NodeSpec.parseDOM)). The\n// `mark` field in the rules is implied.\n\n// AttributeSpec:: interface\n//\n// Used to [define](#model.NodeSpec.attrs) attributes on nodes or\n// marks.\n//\n// default:: ?any\n// The default value for this attribute, to use when no explicit\n// value is provided. Attributes that have no default must be\n// provided whenever a node or mark of a type that has them is\n// created.\n\n// ::- A document schema. Holds [node](#model.NodeType) and [mark\n// type](#model.MarkType) objects for the nodes and marks that may\n// occur in conforming documents, and provides functionality for\n// creating and deserializing such documents.\nvar Schema = function Schema(spec) {\n // :: SchemaSpec\n // The [spec](#model.SchemaSpec) on which the schema is based,\n // with the added guarantee that its `nodes` and `marks`\n // properties are\n // [`OrderedMap`](https://github.com/marijnh/orderedmap) instances\n // (not raw objects).\n this.spec = {};\n for (var prop in spec) { this.spec[prop] = spec[prop]; }\n this.spec.nodes = OrderedMap.from(spec.nodes);\n this.spec.marks = OrderedMap.from(spec.marks);\n\n // :: Object\n // An object mapping the schema's node names to node type objects.\n this.nodes = NodeType.compile(this.spec.nodes, this);\n\n // :: Object\n // A map from mark names to mark type objects.\n this.marks = MarkType.compile(this.spec.marks, this);\n\n var contentExprCache = Object.create(null);\n for (var prop$1 in this.nodes) {\n if (prop$1 in this.marks)\n { throw new RangeError(prop$1 + \" can not be both a node and a mark\") }\n var type = this.nodes[prop$1], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (var prop$2 in this.marks) {\n var type$1 = this.marks[prop$2], excl = type$1.spec.excludes;\n type$1.excluded = excl == null ? [type$1] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n\n this.nodeFromJSON = this.nodeFromJSON.bind(this);\n this.markFromJSON = this.markFromJSON.bind(this);\n\n // :: NodeType\n // The type of the [default top node](#model.SchemaSpec.topNode)\n // for this schema.\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n\n // :: Object\n // An object for storing whatever values modules may want to\n // compute and cache per schema. (If you want to store something\n // in it, try to use property names unlikely to clash.)\n this.cached = Object.create(null);\n this.cached.wrappings = Object.create(null);\n};\n\n// :: (union, ?Object, ?union, ?[Mark]) → Node\n// Create a node in this schema. The `type` may be a string or a\n// `NodeType` instance. Attributes will be extended\n// with defaults, `content` may be a `Fragment`,\n// `null`, a `Node`, or an array of nodes.\nSchema.prototype.node = function node (type, attrs, content, marks) {\n if (typeof type == \"string\")\n { type = this.nodeType(type); }\n else if (!(type instanceof NodeType))\n { throw new RangeError(\"Invalid node type: \" + type) }\n else if (type.schema != this)\n { throw new RangeError(\"Node type from different schema used (\" + type.name + \")\") }\n\n return type.createChecked(attrs, content, marks)\n};\n\n// :: (string, ?[Mark]) → Node\n// Create a text node in the schema. Empty text nodes are not\n// allowed.\nSchema.prototype.text = function text (text$1, marks) {\n var type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text$1, Mark.setFrom(marks))\n};\n\n// :: (union, ?Object) → Mark\n// Create a mark with the given type and attributes.\nSchema.prototype.mark = function mark (type, attrs) {\n if (typeof type == \"string\") { type = this.marks[type]; }\n return type.create(attrs)\n};\n\n// :: (Object) → Node\n// Deserialize a node from its JSON representation. This method is\n// bound.\nSchema.prototype.nodeFromJSON = function nodeFromJSON (json) {\n return Node.fromJSON(this, json)\n};\n\n// :: (Object) → Mark\n// Deserialize a mark from its JSON representation. This method is\n// bound.\nSchema.prototype.markFromJSON = function markFromJSON (json) {\n return Mark.fromJSON(this, json)\n};\n\nSchema.prototype.nodeType = function nodeType (name) {\n var found = this.nodes[name];\n if (!found) { throw new RangeError(\"Unknown node type: \" + name) }\n return found\n};\n\nfunction gatherMarks(schema, marks) {\n var found = [];\n for (var i = 0; i < marks.length; i++) {\n var name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n } else {\n for (var prop in schema.marks) {\n var mark$1 = schema.marks[prop];\n if (name == \"_\" || (mark$1.spec.group && mark$1.spec.group.split(\" \").indexOf(name) > -1))\n { found.push(ok = mark$1); }\n }\n }\n if (!ok) { throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\") }\n }\n return found\n}\n\n// ParseOptions:: interface\n// These are the options recognized by the\n// [`parse`](#model.DOMParser.parse) and\n// [`parseSlice`](#model.DOMParser.parseSlice) methods.\n//\n// preserveWhitespace:: ?union\n// By default, whitespace is collapsed as per HTML's rules. Pass\n// `true` to preserve whitespace, but normalize newlines to\n// spaces, and `\"full\"` to preserve whitespace entirely.\n//\n// findPositions:: ?[{node: dom.Node, offset: number}]\n// When given, the parser will, beside parsing the content,\n// record the document positions of the given DOM positions. It\n// will do so by writing to the objects, adding a `pos` property\n// that holds the document position. DOM positions that are not\n// in the parsed content will not be written to.\n//\n// from:: ?number\n// The child node index to start parsing from.\n//\n// to:: ?number\n// The child node index to stop parsing at.\n//\n// topNode:: ?Node\n// By default, the content is parsed into the schema's default\n// [top node type](#model.Schema.topNodeType). You can pass this\n// option to use the type and attributes from a different node\n// as the top container.\n//\n// topMatch:: ?ContentMatch\n// Provide the starting content match that content parsed into the\n// top node is matched against.\n//\n// context:: ?ResolvedPos\n// A set of additional nodes to count as\n// [context](#model.ParseRule.context) when parsing, above the\n// given [top node](#model.ParseOptions.topNode).\n\n// ParseRule:: interface\n// A value that describes how to parse a given DOM node or inline\n// style as a ProseMirror node or mark.\n//\n// tag:: ?string\n// A CSS selector describing the kind of DOM elements to match. A\n// single rule should have _either_ a `tag` or a `style` property.\n//\n// namespace:: ?string\n// The namespace to match. This should be used with `tag`.\n// Nodes are only matched when the namespace matches or this property\n// is null.\n//\n// style:: ?string\n// A CSS property name to match. When given, this rule matches\n// inline styles that list that property. May also have the form\n// `\"property=value\"`, in which case the rule only matches if the\n// property's value exactly matches the given value. (For more\n// complicated filters, use [`getAttrs`](#model.ParseRule.getAttrs)\n// and return false to indicate that the match failed.) Rules\n// matching styles may only produce [marks](#model.ParseRule.mark),\n// not nodes.\n//\n// priority:: ?number\n// Can be used to change the order in which the parse rules in a\n// schema are tried. Those with higher priority come first. Rules\n// without a priority are counted as having priority 50. This\n// property is only meaningful in a schema—when directly\n// constructing a parser, the order of the rule array is used.\n//\n// consuming:: ?boolean\n// By default, when a rule matches an element or style, no further\n// rules get a chance to match it. By setting this to `false`, you\n// indicate that even when this rule matches, other rules that come\n// after it should also run.\n//\n// context:: ?string\n// When given, restricts this rule to only match when the current\n// context—the parent nodes into which the content is being\n// parsed—matches this expression. Should contain one or more node\n// names or node group names followed by single or double slashes.\n// For example `\"paragraph/\"` means the rule only matches when the\n// parent node is a paragraph, `\"blockquote/paragraph/\"` restricts\n// it to be in a paragraph that is inside a blockquote, and\n// `\"section//\"` matches any position inside a section—a double\n// slash matches any sequence of ancestor nodes. To allow multiple\n// different contexts, they can be separated by a pipe (`|`)\n// character, as in `\"blockquote/|list_item/\"`.\n//\n// node:: ?string\n// The name of the node type to create when this rule matches. Only\n// valid for rules with a `tag` property, not for style rules. Each\n// rule should have one of a `node`, `mark`, or `ignore` property\n// (except when it appears in a [node](#model.NodeSpec.parseDOM) or\n// [mark spec](#model.MarkSpec.parseDOM), in which case the `node`\n// or `mark` property will be derived from its position).\n//\n// mark:: ?string\n// The name of the mark type to wrap the matched content in.\n//\n// ignore:: ?bool\n// When true, ignore content that matches this rule.\n//\n// closeParent:: ?bool\n// When true, finding an element that matches this rule will close\n// the current node.\n//\n// skip:: ?bool\n// When true, ignore the node that matches this rule, but do parse\n// its content.\n//\n// attrs:: ?Object\n// Attributes for the node or mark created by this rule. When\n// `getAttrs` is provided, it takes precedence.\n//\n// getAttrs:: ?(union) → ?union\n// A function used to compute the attributes for the node or mark\n// created by this rule. Can also be used to describe further\n// conditions the DOM element or style must match. When it returns\n// `false`, the rule won't match. When it returns null or undefined,\n// that is interpreted as an empty/default set of attributes.\n//\n// Called with a DOM Element for `tag` rules, and with a string (the\n// style's value) for `style` rules.\n//\n// contentElement:: ?union\n// For `tag` rules that produce non-leaf nodes or marks, by default\n// the content of the DOM element is parsed as content of the mark\n// or node. If the child nodes are in a descendent node, this may be\n// a CSS selector string that the parser must use to find the actual\n// content element, or a function that returns the actual content\n// element to the parser.\n//\n// getContent:: ?(dom.Node, schema: Schema) → Fragment\n// Can be used to override the content of a matched node. When\n// present, instead of parsing the node's child nodes, the result of\n// this function is used.\n//\n// preserveWhitespace:: ?union\n// Controls whether whitespace should be preserved when parsing the\n// content inside the matched element. `false` means whitespace may\n// be collapsed, `true` means that whitespace should be preserved\n// but newlines normalized to spaces, and `\"full\"` means that\n// newlines should also be preserved.\n\n// ::- A DOM parser represents a strategy for parsing DOM content into\n// a ProseMirror document conforming to a given schema. Its behavior\n// is defined by an array of [rules](#model.ParseRule).\nvar DOMParser = function DOMParser(schema, rules) {\n var this$1 = this;\n\n // :: Schema\n // The schema into which the parser parses.\n this.schema = schema;\n // :: [ParseRule]\n // The set of [parse rules](#model.ParseRule) that the parser\n // uses, in order of precedence.\n this.rules = rules;\n this.tags = [];\n this.styles = [];\n\n rules.forEach(function (rule) {\n if (rule.tag) { this$1.tags.push(rule); }\n else if (rule.style) { this$1.styles.push(rule); }\n });\n\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(function (r) {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node) { return false }\n var node = schema.nodes[r.node];\n return node.contentMatch.matchType(node)\n });\n};\n\n// :: (dom.Node, ?ParseOptions) → Node\n// Parse a document from the content of a DOM node.\nDOMParser.prototype.parse = function parse (dom, options) {\n if ( options === void 0 ) options = {};\n\n var context = new ParseContext(this, options, false);\n context.addAll(dom, null, options.from, options.to);\n return context.finish()\n};\n\n// :: (dom.Node, ?ParseOptions) → Slice\n// Parses the content of the given DOM node, like\n// [`parse`](#model.DOMParser.parse), and takes the same set of\n// options. But unlike that method, which produces a whole node,\n// this one returns a slice that is open at the sides, meaning that\n// the schema constraints aren't applied to the start of nodes to\n// the left of the input and the end of nodes at the end.\nDOMParser.prototype.parseSlice = function parseSlice (dom, options) {\n if ( options === void 0 ) options = {};\n\n var context = new ParseContext(this, options, true);\n context.addAll(dom, null, options.from, options.to);\n return Slice.maxOpen(context.finish())\n};\n\nDOMParser.prototype.matchTag = function matchTag (dom, context, after) {\n for (var i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n var rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n var result = rule.getAttrs(dom);\n if (result === false) { continue }\n rule.attrs = result;\n }\n return rule\n }\n }\n};\n\nDOMParser.prototype.matchStyle = function matchStyle (prop, value, context, after) {\n for (var i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n var rule = this.styles[i];\n if (rule.style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n rule.style.length > prop.length &&\n (rule.style.charCodeAt(prop.length) != 61 || rule.style.slice(prop.length + 1) != value))\n { continue }\n if (rule.getAttrs) {\n var result = rule.getAttrs(value);\n if (result === false) { continue }\n rule.attrs = result;\n }\n return rule\n }\n};\n\n// : (Schema) → [ParseRule]\nDOMParser.schemaRules = function schemaRules (schema) {\n var result = [];\n function insert(rule) {\n var priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n var next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority) { break }\n }\n result.splice(i, 0, rule);\n }\n\n var loop = function ( name ) {\n var rules = schema.marks[name].spec.parseDOM;\n if (rules) { rules.forEach(function (rule) {\n insert(rule = copy(rule));\n rule.mark = name;\n }); }\n };\n\n for (var name in schema.marks) loop( name );\n var loop$1 = function ( name ) {\n var rules$1 = schema.nodes[name$1].spec.parseDOM;\n if (rules$1) { rules$1.forEach(function (rule) {\n insert(rule = copy(rule));\n rule.node = name$1;\n }); }\n };\n\n for (var name$1 in schema.nodes) loop$1();\n return result\n};\n\n// :: (Schema) → DOMParser\n// Construct a DOM parser using the parsing rules listed in a\n// schema's [node specs](#model.NodeSpec.parseDOM), reordered by\n// [priority](#model.ParseRule.priority).\nDOMParser.fromSchema = function fromSchema (schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)))\n};\n\n// : Object The block-level tags in HTML5\nvar blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\n\n// : Object The tags that we normally ignore.\nvar ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\n\n// : Object List tags.\nvar listTags = {ol: true, ul: true};\n\n// Using a bitfield for node context options\nvar OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\n\nfunction wsOptionsFor(preserveWhitespace) {\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) | (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0)\n}\n\nvar NodeContext = function NodeContext(type, attrs, marks, pendingMarks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.solid = solid;\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n this.options = options;\n this.content = [];\n // Marks applied to this node itself\n this.marks = marks;\n // Marks applied to its children\n this.activeMarks = Mark.none;\n // Marks that can't apply here, but will be used in children if possible\n this.pendingMarks = pendingMarks;\n // Nested Marks with same type\n this.stashMarks = [];\n};\n\nNodeContext.prototype.findWrapping = function findWrapping (node) {\n if (!this.match) {\n if (!this.type) { return [] }\n var fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n } else {\n var start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap\n } else {\n return null\n }\n }\n }\n return this.match.findWrapping(node.type)\n};\n\nNodeContext.prototype.finish = function finish (openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n var last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n if (last.text.length == m[0].length) { this.content.pop(); }\n else { this.content[this.content.length - 1] = last.withText(last.text.slice(0, last.text.length - m[0].length)); }\n }\n }\n var content = Fragment.from(this.content);\n if (!openEnd && this.match)\n { content = content.append(this.match.fillBefore(Fragment.empty, true)); }\n return this.type ? this.type.create(this.attrs, content, this.marks) : content\n};\n\nNodeContext.prototype.popFromStashMark = function popFromStashMark (mark) {\n for (var i = this.stashMarks.length - 1; i >= 0; i--)\n { if (mark.eq(this.stashMarks[i])) { return this.stashMarks.splice(i, 1)[0] } }\n};\n\nNodeContext.prototype.applyPending = function applyPending (nextType) {\n for (var i = 0, pending = this.pendingMarks; i < pending.length; i++) {\n var mark = pending[i];\n if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) &&\n !mark.isInSet(this.activeMarks)) {\n this.activeMarks = mark.addToSet(this.activeMarks);\n this.pendingMarks = mark.removeFromSet(this.pendingMarks);\n }\n }\n};\n\nNodeContext.prototype.inlineContext = function inlineContext (node) {\n if (this.type) { return this.type.inlineContent }\n if (this.content.length) { return this.content[0].isInline }\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase())\n};\n\nvar ParseContext = function ParseContext(parser, options, open) {\n // : DOMParser The parser we are using.\n this.parser = parser;\n // : Object The options passed to this parse.\n this.options = options;\n this.isOpen = open;\n var topNode = options.topNode, topContext;\n var topOptions = wsOptionsFor(options.preserveWhitespace) | (open ? OPT_OPEN_LEFT : 0);\n if (topNode)\n { topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true,\n options.topMatch || topNode.type.contentMatch, topOptions); }\n else if (open)\n { topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions); }\n else\n { topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions); }\n this.nodes = [topContext];\n // : [Mark] The current set of marks\n this.open = 0;\n this.find = options.findPositions;\n this.needsBlock = false;\n};\n\nvar prototypeAccessors$6 = { top: { configurable: true },currentPos: { configurable: true } };\n\nprototypeAccessors$6.top.get = function () {\n return this.nodes[this.open]\n};\n\n// : (dom.Node)\n// Add a DOM node to the content. Text is inserted as text node,\n// otherwise, the node is passed to `addElement` or, if it has a\n// `style` attribute, `addElementWithStyles`.\nParseContext.prototype.addDOM = function addDOM (dom) {\n if (dom.nodeType == 3) {\n this.addTextNode(dom);\n } else if (dom.nodeType == 1) {\n var style = dom.getAttribute(\"style\");\n var marks = style ? this.readStyles(parseStyles(style)) : null, top = this.top;\n if (marks != null) { for (var i = 0; i < marks.length; i++) { this.addPendingMark(marks[i]); } }\n this.addElement(dom);\n if (marks != null) { for (var i$1 = 0; i$1 < marks.length; i$1++) { this.removePendingMark(marks[i$1], top); } }\n }\n};\n\nParseContext.prototype.addTextNode = function addTextNode (dom) {\n var value = dom.nodeValue;\n var top = this.top;\n if (top.options & OPT_PRESERVE_WS_FULL ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!(top.options & OPT_PRESERVE_WS)) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n var nodeBefore = top.content[top.content.length - 1];\n var domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n { value = value.slice(1); }\n }\n } else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n } else {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n if (value) { this.insertNode(this.parser.schema.text(value)); }\n this.findInText(dom);\n } else {\n this.findInside(dom);\n }\n};\n\n// : (dom.Element, ?ParseRule)\n// Try to find a handler for the given tag and use that to parse. If\n// none is found, the element's content nodes are added directly.\nParseContext.prototype.addElement = function addElement (dom, matchAfter) {\n var name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists) { normalizeList(dom); }\n var rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom);\n } else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent) { this.open = Math.max(0, this.open - 1); }\n else if (rule && rule.skip.nodeType) { dom = rule.skip; }\n var sync, top = this.top, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n sync = true;\n if (!top.type) { this.needsBlock = true; }\n } else if (!dom.firstChild) {\n this.leafFallback(dom);\n return\n }\n this.addAll(dom);\n if (sync) { this.sync(top); }\n this.needsBlock = oldNeedsBlock;\n } else {\n this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : null);\n }\n};\n\n// Called for leaf DOM nodes that would otherwise be ignored\nParseContext.prototype.leafFallback = function leafFallback (dom) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n { this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\")); }\n};\n\n// Called for ignored nodes\nParseContext.prototype.ignoreFallback = function ignoreFallback (dom) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n { this.findPlace(this.parser.schema.text(\"-\")); }\n};\n\n// Run any style parser associated with the node's styles. Either\n// return an array of marks, or null to indicate some of the styles\n// had a rule with `ignore` set.\nParseContext.prototype.readStyles = function readStyles (styles) {\n var marks = Mark.none;\n style: for (var i = 0; i < styles.length; i += 2) {\n for (var after = null;;) {\n var rule = this.parser.matchStyle(styles[i], styles[i + 1], this, after);\n if (!rule) { continue style }\n if (rule.ignore) { return null }\n marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks);\n if (rule.consuming === false) { after = rule; }\n else { break }\n }\n }\n return marks\n};\n\n// : (dom.Element, ParseRule) → bool\n// Look up a handler for the given node. If none are found, return\n// false. Otherwise, apply it, use its return value to drive the way\n// the node's content is wrapped, and return true.\nParseContext.prototype.addElementByRule = function addElementByRule (dom, rule, continueAfter) {\n var this$1 = this;\n\n var sync, nodeType, markType, mark;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n sync = this.enter(nodeType, rule.attrs, rule.preserveWhitespace);\n } else if (!this.insertNode(nodeType.create(rule.attrs))) {\n this.leafFallback(dom);\n }\n } else {\n markType = this.parser.schema.marks[rule.mark];\n mark = markType.create(rule.attrs);\n this.addPendingMark(mark);\n }\n var startIn = this.top;\n\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n } else if (continueAfter) {\n this.addElement(dom, continueAfter);\n } else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(function (node) { return this$1.insertNode(node); });\n } else {\n var contentDOM = rule.contentElement;\n if (typeof contentDOM == \"string\") { contentDOM = dom.querySelector(contentDOM); }\n else if (typeof contentDOM == \"function\") { contentDOM = contentDOM(dom); }\n if (!contentDOM) { contentDOM = dom; }\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM, sync);\n }\n if (sync) { this.sync(startIn); this.open--; }\n if (mark) { this.removePendingMark(mark, startIn); }\n};\n\n// : (dom.Node, ?NodeBuilder, ?number, ?number)\n// Add all child nodes between `startIndex` and `endIndex` (or the\n// whole node, if not given). If `sync` is passed, use it to\n// synchronize after every block element.\nParseContext.prototype.addAll = function addAll (parent, sync, startIndex, endIndex) {\n var index = startIndex || 0;\n for (var dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild,\n end = endIndex == null ? null : parent.childNodes[endIndex];\n dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom);\n if (sync && blockTags.hasOwnProperty(dom.nodeName.toLowerCase()))\n { this.sync(sync); }\n }\n this.findAtPoint(parent, index);\n};\n\n// Try to find a way to fit the given node type into the current\n// context. May add intermediate wrappers and/or leave non-solid\n// nodes that we're in.\nParseContext.prototype.findPlace = function findPlace (node) {\n var route, sync;\n for (var depth = this.open; depth >= 0; depth--) {\n var cx = this.nodes[depth];\n var found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length)) {\n route = found;\n sync = cx;\n if (!found.length) { break }\n }\n if (cx.solid) { break }\n }\n if (!route) { return false }\n this.sync(sync);\n for (var i = 0; i < route.length; i++)\n { this.enterInner(route[i], null, false); }\n return true\n};\n\n// : (Node) → ?Node\n// Try to insert the given node, adjusting the context when needed.\nParseContext.prototype.insertNode = function insertNode (node) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n var block = this.textblockFromContext();\n if (block) { this.enterInner(block); }\n }\n if (this.findPlace(node)) {\n this.closeExtra();\n var top = this.top;\n top.applyPending(node.type);\n if (top.match) { top.match = top.match.matchType(node.type); }\n var marks = top.activeMarks;\n for (var i = 0; i < node.marks.length; i++)\n { if (!top.type || top.type.allowsMarkType(node.marks[i].type))\n { marks = node.marks[i].addToSet(marks); } }\n top.content.push(node.mark(marks));\n return true\n }\n return false\n};\n\n// : (NodeType, ?Object) → bool\n// Try to start a node of the given type, adjusting the context when\n// necessary.\nParseContext.prototype.enter = function enter (type, attrs, preserveWS) {\n var ok = this.findPlace(type.create(attrs));\n if (ok) { this.enterInner(type, attrs, true, preserveWS); }\n return ok\n};\n\n// Open a node of the given type\nParseContext.prototype.enterInner = function enterInner (type, attrs, solid, preserveWS) {\n this.closeExtra();\n var top = this.top;\n top.applyPending(type);\n top.match = top.match && top.match.matchType(type, attrs);\n var options = preserveWS == null ? top.options & ~OPT_OPEN_LEFT : wsOptionsFor(preserveWS);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0) { options |= OPT_OPEN_LEFT; }\n this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options));\n this.open++;\n};\n\n// Make sure all nodes above this.open are finished and added to\n// their parents\nParseContext.prototype.closeExtra = function closeExtra (openEnd) {\n var i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--) { this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd)); }\n this.nodes.length = this.open + 1;\n }\n};\n\nParseContext.prototype.finish = function finish () {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(this.isOpen || this.options.topOpen)\n};\n\nParseContext.prototype.sync = function sync (to) {\n for (var i = this.open; i >= 0; i--) { if (this.nodes[i] == to) {\n this.open = i;\n return\n } }\n};\n\nprototypeAccessors$6.currentPos.get = function () {\n this.closeExtra();\n var pos = 0;\n for (var i = this.open; i >= 0; i--) {\n var content = this.nodes[i].content;\n for (var j = content.length - 1; j >= 0; j--)\n { pos += content[j].nodeSize; }\n if (i) { pos++; }\n }\n return pos\n};\n\nParseContext.prototype.findAtPoint = function findAtPoint (parent, offset) {\n if (this.find) { for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n { this.find[i].pos = this.currentPos; }\n } }\n};\n\nParseContext.prototype.findInside = function findInside (parent) {\n if (this.find) { for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n { this.find[i].pos = this.currentPos; }\n } }\n};\n\nParseContext.prototype.findAround = function findAround (parent, content, before) {\n if (parent != content && this.find) { for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n var pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n { this.find[i].pos = this.currentPos; }\n }\n } }\n};\n\nParseContext.prototype.findInText = function findInText (textNode) {\n if (this.find) { for (var i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n { this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset); }\n } }\n};\n\n// : (string) → bool\n// Determines whether the given [context\n// string](#ParseRule.context) matches this context.\nParseContext.prototype.matchesContext = function matchesContext (context) {\n var this$1 = this;\n\n if (context.indexOf(\"|\") > -1)\n { return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this) }\n\n var parts = context.split(\"/\");\n var option = this.options.context;\n var useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n var minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n var match = function (i, depth) {\n for (; i >= 0; i--) {\n var part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0) { continue }\n for (; depth >= minDepth; depth--)\n { if (match(i - 1, depth)) { return true } }\n return false\n } else {\n var next = depth > 0 || (depth == 0 && useRoot) ? this$1.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && next.groups.indexOf(part) == -1))\n { return false }\n depth--;\n }\n }\n return true\n };\n return match(parts.length - 1, this.open)\n};\n\nParseContext.prototype.textblockFromContext = function textblockFromContext () {\n var $context = this.options.context;\n if ($context) { for (var d = $context.depth; d >= 0; d--) {\n var deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs) { return deflt }\n } }\n for (var name in this.parser.schema.nodes) {\n var type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs) { return type }\n }\n};\n\nParseContext.prototype.addPendingMark = function addPendingMark (mark) {\n var found = findSameMarkInSet(mark, this.top.pendingMarks);\n if (found) { this.top.stashMarks.push(found); }\n this.top.pendingMarks = mark.addToSet(this.top.pendingMarks);\n};\n\nParseContext.prototype.removePendingMark = function removePendingMark (mark, upto) {\n for (var depth = this.open; depth >= 0; depth--) {\n var level = this.nodes[depth];\n var found = level.pendingMarks.lastIndexOf(mark);\n if (found > -1) {\n level.pendingMarks = mark.removeFromSet(level.pendingMarks);\n } else {\n level.activeMarks = mark.removeFromSet(level.activeMarks);\n var stashMark = level.popFromStashMark(mark);\n if (stashMark && level.type && level.type.allowsMarkType(stashMark.type))\n { level.activeMarks = stashMark.addToSet(level.activeMarks); }\n }\n if (level == upto) { break }\n }\n};\n\nObject.defineProperties( ParseContext.prototype, prototypeAccessors$6 );\n\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (var child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n var name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n } else if (name == \"li\") {\n prevItem = child;\n } else if (name) {\n prevItem = null;\n }\n }\n}\n\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector)\n}\n\n// : (string) → [string]\n// Tokenize a style attribute into property/value pairs.\nfunction parseStyles(style) {\n var re = /\\s*([\\w-]+)\\s*:\\s*([^;]+)/g, m, result = [];\n while (m = re.exec(style)) { result.push(m[1], m[2].trim()); }\n return result\n}\n\nfunction copy(obj) {\n var copy = {};\n for (var prop in obj) { copy[prop] = obj[prop]; }\n return copy\n}\n\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n var nodes = nodeType.schema.nodes;\n var loop = function ( name ) {\n var parent = nodes[name];\n if (!parent.allowsMarkType(markType)) { return }\n var seen = [], scan = function (match) {\n seen.push(match);\n for (var i = 0; i < match.edgeCount; i++) {\n var ref = match.edge(i);\n var type = ref.type;\n var next = ref.next;\n if (type == nodeType) { return true }\n if (seen.indexOf(next) < 0 && scan(next)) { return true }\n }\n };\n if (scan(parent.contentMatch)) { return { v: true } }\n };\n\n for (var name in nodes) {\n var returned = loop( name );\n\n if ( returned ) return returned.v;\n }\n}\n\nfunction findSameMarkInSet(mark, set) {\n for (var i = 0; i < set.length; i++) {\n if (mark.eq(set[i])) { return set[i] }\n }\n}\n\n// DOMOutputSpec:: interface\n// A description of a DOM structure. Can be either a string, which is\n// interpreted as a text node, a DOM node, which is interpreted as\n// itself, a `{dom: Node, contentDOM: ?Node}` object, or an array.\n//\n// An array describes a DOM element. The first value in the array\n// should be a string—the name of the DOM element, optionally prefixed\n// by a namespace URL and a space. If the second element is plain\n// object, it is interpreted as a set of attributes for the element.\n// Any elements after that (including the 2nd if it's not an attribute\n// object) are interpreted as children of the DOM elements, and must\n// either be valid `DOMOutputSpec` values, or the number zero.\n//\n// The number zero (pronounced “hole”) is used to indicate the place\n// where a node's child nodes should be inserted. If it occurs in an\n// output spec, it should be the only child element in its parent\n// node.\n\n// ::- A DOM serializer knows how to convert ProseMirror nodes and\n// marks of various types to DOM nodes.\nvar DOMSerializer = function DOMSerializer(nodes, marks) {\n // :: Object<(node: Node) → DOMOutputSpec>\n // The node serialization functions.\n this.nodes = nodes || {};\n // :: Object\n // The mark serialization functions.\n this.marks = marks || {};\n};\n\n// :: (Fragment, ?Object) → dom.DocumentFragment\n// Serialize the content of this fragment to a DOM fragment. When\n// not in the browser, the `document` option, containing a DOM\n// document, should be passed so that the serializer can create\n// nodes.\nDOMSerializer.prototype.serializeFragment = function serializeFragment (fragment, options, target) {\n var this$1 = this;\n if ( options === void 0 ) options = {};\n\n if (!target) { target = doc(options).createDocumentFragment(); }\n\n var top = target, active = null;\n fragment.forEach(function (node) {\n if (active || node.marks.length) {\n if (!active) { active = []; }\n var keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n var next = node.marks[rendered];\n if (!this$1.marks[next.type.name]) { rendered++; continue }\n if (!next.eq(active[keep]) || next.type.spec.spanning === false) { break }\n keep += 2; rendered++;\n }\n while (keep < active.length) {\n top = active.pop();\n active.pop();\n }\n while (rendered < node.marks.length) {\n var add = node.marks[rendered++];\n var markDOM = this$1.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push(add, top);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this$1.serializeNodeInner(node, options));\n });\n\n return target\n};\n\nDOMSerializer.prototype.serializeNodeInner = function serializeNodeInner (node, options) {\n if ( options === void 0 ) options = {};\n\n var ref =\n DOMSerializer.renderSpec(doc(options), this.nodes[node.type.name](node));\n var dom = ref.dom;\n var contentDOM = ref.contentDOM;\n if (contentDOM) {\n if (node.isLeaf)\n { throw new RangeError(\"Content hole not allowed in a leaf node spec\") }\n if (options.onContent)\n { options.onContent(node, contentDOM, options); }\n else\n { this.serializeFragment(node.content, options, contentDOM); }\n }\n return dom\n};\n\n// :: (Node, ?Object) → dom.Node\n// Serialize this node to a DOM node. This can be useful when you\n// need to serialize a part of a document, as opposed to the whole\n// document. To serialize a whole document, use\n// [`serializeFragment`](#model.DOMSerializer.serializeFragment) on\n// its [content](#model.Node.content).\nDOMSerializer.prototype.serializeNode = function serializeNode (node, options) {\n if ( options === void 0 ) options = {};\n\n var dom = this.serializeNodeInner(node, options);\n for (var i = node.marks.length - 1; i >= 0; i--) {\n var wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n(wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom\n};\n\nDOMSerializer.prototype.serializeMark = function serializeMark (mark, inline, options) {\n if ( options === void 0 ) options = {};\n\n var toDOM = this.marks[mark.type.name];\n return toDOM && DOMSerializer.renderSpec(doc(options), toDOM(mark, inline))\n};\n\n// :: (dom.Document, DOMOutputSpec) → {dom: dom.Node, contentDOM: ?dom.Node}\n// Render an [output spec](#model.DOMOutputSpec) to a DOM node. If\n// the spec has a hole (zero) in it, `contentDOM` will point at the\n// node with the hole.\nDOMSerializer.renderSpec = function renderSpec (doc, structure, xmlNS) {\n if ( xmlNS === void 0 ) xmlNS = null;\n\n if (typeof structure == \"string\")\n { return {dom: doc.createTextNode(structure)} }\n if (structure.nodeType != null)\n { return {dom: structure} }\n if (structure.dom && structure.dom.nodeType != null)\n { return structure }\n var tagName = structure[0], space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n var contentDOM = null, dom = xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName);\n var attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (var name in attrs) { if (attrs[name] != null) {\n var space$1 = name.indexOf(\" \");\n if (space$1 > 0) { dom.setAttributeNS(name.slice(0, space$1), name.slice(space$1 + 1), attrs[name]); }\n else { dom.setAttribute(name, attrs[name]); }\n } }\n }\n for (var i = start; i < structure.length; i++) {\n var child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n { throw new RangeError(\"Content hole must be the only child of its parent node\") }\n return {dom: dom, contentDOM: dom}\n } else {\n var ref = DOMSerializer.renderSpec(doc, child, xmlNS);\n var inner = ref.dom;\n var innerContent = ref.contentDOM;\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM) { throw new RangeError(\"Multiple content holes\") }\n contentDOM = innerContent;\n }\n }\n }\n return {dom: dom, contentDOM: contentDOM}\n};\n\n// :: (Schema) → DOMSerializer\n// Build a serializer using the [`toDOM`](#model.NodeSpec.toDOM)\n// properties in a schema's node and mark specs.\nDOMSerializer.fromSchema = function fromSchema (schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)))\n};\n\n// : (Schema) → Object<(node: Node) → DOMOutputSpec>\n// Gather the serializers in a schema's node specs into an object.\n// This can be useful as a base to build a custom serializer from.\nDOMSerializer.nodesFromSchema = function nodesFromSchema (schema) {\n var result = gatherToDOM(schema.nodes);\n if (!result.text) { result.text = function (node) { return node.text; }; }\n return result\n};\n\n// : (Schema) → Object<(mark: Mark) → DOMOutputSpec>\n// Gather the serializers in a schema's mark specs into an object.\nDOMSerializer.marksFromSchema = function marksFromSchema (schema) {\n return gatherToDOM(schema.marks)\n};\n\nfunction gatherToDOM(obj) {\n var result = {};\n for (var name in obj) {\n var toDOM = obj[name].spec.toDOM;\n if (toDOM) { result[name] = toDOM; }\n }\n return result\n}\n\nfunction doc(options) {\n // declare global: window\n return options.document || window.document\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","import { ReplaceError, Slice, Fragment, MarkType } from 'prosemirror-model';\n\n// Mappable:: interface\n// There are several things that positions can be mapped through.\n// Such objects conform to this interface.\n//\n// map:: (pos: number, assoc: ?number) → number\n// Map a position through this object. When given, `assoc` (should\n// be -1 or 1, defaults to 1) determines with which side the\n// position is associated, which determines in which direction to\n// move when a chunk of content is inserted at the mapped position.\n//\n// mapResult:: (pos: number, assoc: ?number) → MapResult\n// Map a position, and return an object containing additional\n// information about the mapping. The result's `deleted` field tells\n// you whether the position was deleted (completely enclosed in a\n// replaced range) during the mapping. When content on only one side\n// is deleted, the position itself is only considered deleted when\n// `assoc` points in the direction of the deleted content.\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\n\nvar lower16 = 0xffff;\nvar factor16 = Math.pow(2, 16);\n\nfunction makeRecover(index, offset) { return index + offset * factor16 }\nfunction recoverIndex(value) { return value & lower16 }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16 }\n\n// ::- An object representing a mapped position with extra\n// information.\nvar MapResult = function MapResult(pos, deleted, recover) {\n if ( deleted === void 0 ) deleted = false;\n if ( recover === void 0 ) recover = null;\n\n // :: number The mapped version of the position.\n this.pos = pos;\n // :: bool Tells you whether the position was deleted, that is,\n // whether the step removed its surroundings from the document.\n this.deleted = deleted;\n this.recover = recover;\n};\n\n// :: class extends Mappable\n// A map describing the deletions and insertions made by a step, which\n// can be used to find the correspondence between positions in the\n// pre-step version of a document and the same position in the\n// post-step version.\nvar StepMap = function StepMap(ranges, inverted) {\n if ( inverted === void 0 ) inverted = false;\n\n this.ranges = ranges;\n this.inverted = inverted;\n};\n\nStepMap.prototype.recover = function recover (value) {\n var diff = 0, index = recoverIndex(value);\n if (!this.inverted) { for (var i = 0; i < index; i++)\n { diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1]; } }\n return this.ranges[index * 3] + diff + recoverOffset(value)\n};\n\n// : (number, ?number) → MapResult\nStepMap.prototype.mapResult = function mapResult (pos, assoc) {\n if ( assoc === void 0 ) assoc = 1;\n return this._map(pos, assoc, false) };\n\n// : (number, ?number) → number\nStepMap.prototype.map = function map (pos, assoc) {\n if ( assoc === void 0 ) assoc = 1;\n return this._map(pos, assoc, true) };\n\nStepMap.prototype._map = function _map (pos, assoc, simple) {\n var diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (var i = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos) { break }\n var oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n if (pos <= end) {\n var side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n var result = start + diff + (side < 0 ? 0 : newSize);\n if (simple) { return result }\n var recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n return new MapResult(result, assoc < 0 ? pos != start : pos != end, recover)\n }\n diff += newSize - oldSize;\n }\n return simple ? pos + diff : new MapResult(pos + diff)\n};\n\nStepMap.prototype.touches = function touches (pos, recover) {\n var diff = 0, index = recoverIndex(recover);\n var oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (var i = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos) { break }\n var oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n if (pos <= end && i == index * 3) { return true }\n diff += this.ranges[i + newIndex] - oldSize;\n }\n return false\n};\n\n// :: ((oldStart: number, oldEnd: number, newStart: number, newEnd: number))\n// Calls the given function on each of the changed ranges included in\n// this map.\nStepMap.prototype.forEach = function forEach (f) {\n var oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (var i = 0, diff = 0; i < this.ranges.length; i += 3) {\n var start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n var oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n};\n\n// :: () → StepMap\n// Create an inverted version of this map. The result can be used to\n// map positions in the post-step document to the pre-step document.\nStepMap.prototype.invert = function invert () {\n return new StepMap(this.ranges, !this.inverted)\n};\n\nStepMap.prototype.toString = function toString () {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges)\n};\n\n// :: (n: number) → StepMap\n// Create a map that moves all positions by offset `n` (which may be\n// negative). This can be useful when applying steps meant for a\n// sub-document to a larger document, or vice-versa.\nStepMap.offset = function offset (n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n])\n};\n\nStepMap.empty = new StepMap([]);\n\n// :: class extends Mappable\n// A mapping represents a pipeline of zero or more [step\n// maps](#transform.StepMap). It has special provisions for losslessly\n// handling mapping positions through a series of steps in which some\n// steps are inverted versions of earlier steps. (This comes up when\n// ‘[rebasing](/docs/guide/#transform.rebasing)’ steps for\n// collaboration or history management.)\nvar Mapping = function Mapping(maps, mirror, from, to) {\n // :: [StepMap]\n // The step maps in this mapping.\n this.maps = maps || [];\n // :: number\n // The starting position in the `maps` array, used when `map` or\n // `mapResult` is called.\n this.from = from || 0;\n // :: number\n // The end position in the `maps` array.\n this.to = to == null ? this.maps.length : to;\n this.mirror = mirror;\n};\n\n// :: (?number, ?number) → Mapping\n// Create a mapping that maps only through a part of this one.\nMapping.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.maps.length;\n\n return new Mapping(this.maps, this.mirror, from, to)\n};\n\nMapping.prototype.copy = function copy () {\n return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to)\n};\n\n// :: (StepMap, ?number)\n// Add a step map to the end of this mapping. If `mirrors` is\n// given, it should be the index of the step map that is the mirror\n// image of this one.\nMapping.prototype.appendMap = function appendMap (map, mirrors) {\n this.to = this.maps.push(map);\n if (mirrors != null) { this.setMirror(this.maps.length - 1, mirrors); }\n};\n\n// :: (Mapping)\n// Add all the step maps in a given mapping to this one (preserving\n// mirroring information).\nMapping.prototype.appendMapping = function appendMapping (mapping) {\n for (var i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) {\n var mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : null);\n }\n};\n\n// :: (number) → ?number\n// Finds the offset of the step map that mirrors the map at the\n// given offset, in this mapping (as per the second argument to\n// `appendMap`).\nMapping.prototype.getMirror = function getMirror (n) {\n if (this.mirror) { for (var i = 0; i < this.mirror.length; i++)\n { if (this.mirror[i] == n) { return this.mirror[i + (i % 2 ? -1 : 1)] } } }\n};\n\nMapping.prototype.setMirror = function setMirror (n, m) {\n if (!this.mirror) { this.mirror = []; }\n this.mirror.push(n, m);\n};\n\n// :: (Mapping)\n// Append the inverse of the given mapping to this one.\nMapping.prototype.appendMappingInverted = function appendMappingInverted (mapping) {\n for (var i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) {\n var mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : null);\n }\n};\n\n// :: () → Mapping\n// Create an inverted version of this mapping.\nMapping.prototype.invert = function invert () {\n var inverse = new Mapping;\n inverse.appendMappingInverted(this);\n return inverse\n};\n\n// : (number, ?number) → number\n// Map a position through this mapping.\nMapping.prototype.map = function map (pos, assoc) {\n if ( assoc === void 0 ) assoc = 1;\n\n if (this.mirror) { return this._map(pos, assoc, true) }\n for (var i = this.from; i < this.to; i++)\n { pos = this.maps[i].map(pos, assoc); }\n return pos\n};\n\n// : (number, ?number) → MapResult\n// Map a position through this mapping, returning a mapping\n// result.\nMapping.prototype.mapResult = function mapResult (pos, assoc) {\n if ( assoc === void 0 ) assoc = 1;\n return this._map(pos, assoc, false) };\n\nMapping.prototype._map = function _map (pos, assoc, simple) {\n var deleted = false;\n\n for (var i = this.from; i < this.to; i++) {\n var map = this.maps[i], result = map.mapResult(pos, assoc);\n if (result.recover != null) {\n var corr = this.getMirror(i);\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this.maps[corr].recover(result.recover);\n continue\n }\n }\n\n if (result.deleted) { deleted = true; }\n pos = result.pos;\n }\n\n return simple ? pos : new MapResult(pos, deleted)\n};\n\nfunction TransformError(message) {\n var err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err\n}\n\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n\n// ::- Abstraction to build up and track an array of\n// [steps](#transform.Step) representing a document transformation.\n//\n// Most transforming methods return the `Transform` object itself, so\n// that they can be chained.\nvar Transform = function Transform(doc) {\n // :: Node\n // The current document (the result of applying the steps in the\n // transform).\n this.doc = doc;\n // :: [Step]\n // The steps in this transform.\n this.steps = [];\n // :: [Node]\n // The documents before each of the steps.\n this.docs = [];\n // :: Mapping\n // A mapping with the maps for each of the steps in this transform.\n this.mapping = new Mapping;\n};\n\nvar prototypeAccessors = { before: { configurable: true },docChanged: { configurable: true } };\n\n// :: Node The starting document.\nprototypeAccessors.before.get = function () { return this.docs.length ? this.docs[0] : this.doc };\n\n// :: (step: Step) → this\n// Apply a new step in this transform, saving the result. Throws an\n// error when the step fails.\nTransform.prototype.step = function step (object) {\n var result = this.maybeStep(object);\n if (result.failed) { throw new TransformError(result.failed) }\n return this\n};\n\n// :: (Step) → StepResult\n// Try to apply a step in this transformation, ignoring it if it\n// fails. Returns the step result.\nTransform.prototype.maybeStep = function maybeStep (step) {\n var result = step.apply(this.doc);\n if (!result.failed) { this.addStep(step, result.doc); }\n return result\n};\n\n// :: bool\n// True when the document has been changed (when there are any\n// steps).\nprototypeAccessors.docChanged.get = function () {\n return this.steps.length > 0\n};\n\nTransform.prototype.addStep = function addStep (step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n};\n\nObject.defineProperties( Transform.prototype, prototypeAccessors );\n\nfunction mustOverride() { throw new Error(\"Override me\") }\n\nvar stepsByID = Object.create(null);\n\n// ::- A step object represents an atomic change. It generally applies\n// only to the document it was created for, since the positions\n// stored in it will only make sense for that document.\n//\n// New steps are defined by creating classes that extend `Step`,\n// overriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\n// methods, and registering your class with a unique\n// JSON-serialization identifier using\n// [`Step.jsonID`](#transform.Step^jsonID).\nvar Step = function Step () {};\n\nStep.prototype.apply = function apply (_doc) { return mustOverride() };\n\n// :: () → StepMap\n// Get the step map that represents the changes made by this step,\n// and which can be used to transform between positions in the old\n// and the new document.\nStep.prototype.getMap = function getMap () { return StepMap.empty };\n\n// :: (doc: Node) → Step\n// Create an inverted version of this step. Needs the document as it\n// was before the step as argument.\nStep.prototype.invert = function invert (_doc) { return mustOverride() };\n\n// :: (mapping: Mappable) → ?Step\n// Map this step through a mappable thing, returning either a\n// version of that step with its positions adjusted, or `null` if\n// the step was entirely deleted by the mapping.\nStep.prototype.map = function map (_mapping) { return mustOverride() };\n\n// :: (other: Step) → ?Step\n// Try to merge this step with another one, to be applied directly\n// after it. Returns the merged step when possible, null if the\n// steps can't be merged.\nStep.prototype.merge = function merge (_other) { return null };\n\n// :: () → Object\n// Create a JSON-serializeable representation of this step. When\n// defining this for a custom subclass, make sure the result object\n// includes the step type's [JSON id](#transform.Step^jsonID) under\n// the `stepType` property.\nStep.prototype.toJSON = function toJSON () { return mustOverride() };\n\n// :: (Schema, Object) → Step\n// Deserialize a step from its JSON representation. Will call\n// through to the step class' own implementation of this method.\nStep.fromJSON = function fromJSON (schema, json) {\n if (!json || !json.stepType) { throw new RangeError(\"Invalid input for Step.fromJSON\") }\n var type = stepsByID[json.stepType];\n if (!type) { throw new RangeError((\"No step type \" + (json.stepType) + \" defined\")) }\n return type.fromJSON(schema, json)\n};\n\n// :: (string, constructor)\n// To be able to serialize steps to JSON, each step needs a string\n// ID to attach to its JSON representation. Use this method to\n// register an ID for your step classes. Try to pick something\n// that's unlikely to clash with steps from other modules.\nStep.jsonID = function jsonID (id, stepClass) {\n if (id in stepsByID) { throw new RangeError(\"Duplicate use of step JSON ID \" + id) }\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass\n};\n\n// ::- The result of [applying](#transform.Step.apply) a step. Contains either a\n// new document or a failure value.\nvar StepResult = function StepResult(doc, failed) {\n // :: ?Node The transformed document.\n this.doc = doc;\n // :: ?string Text providing information about a failed step.\n this.failed = failed;\n};\n\n// :: (Node) → StepResult\n// Create a successful step result.\nStepResult.ok = function ok (doc) { return new StepResult(doc, null) };\n\n// :: (string) → StepResult\n// Create a failed step result.\nStepResult.fail = function fail (message) { return new StepResult(null, message) };\n\n// :: (Node, number, number, Slice) → StepResult\n// Call [`Node.replace`](#model.Node.replace) with the given\n// arguments. Create a successful result if it succeeds, and a\n// failed one if it throws a `ReplaceError`.\nStepResult.fromReplace = function fromReplace (doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice))\n } catch (e) {\n if (e instanceof ReplaceError) { return StepResult.fail(e.message) }\n throw e\n }\n};\n\n// ::- Replace a part of the document with a slice of new content.\nvar ReplaceStep = /*@__PURE__*/(function (Step) {\n function ReplaceStep(from, to, slice, structure) {\n Step.call(this);\n // :: number\n // The start position of the replaced range.\n this.from = from;\n // :: number\n // The end position of the replaced range.\n this.to = to;\n // :: Slice\n // The slice to insert.\n this.slice = slice;\n this.structure = !!structure;\n }\n\n if ( Step ) ReplaceStep.__proto__ = Step;\n ReplaceStep.prototype = Object.create( Step && Step.prototype );\n ReplaceStep.prototype.constructor = ReplaceStep;\n\n ReplaceStep.prototype.apply = function apply (doc) {\n if (this.structure && contentBetween(doc, this.from, this.to))\n { return StepResult.fail(\"Structure replace would overwrite content\") }\n return StepResult.fromReplace(doc, this.from, this.to, this.slice)\n };\n\n ReplaceStep.prototype.getMap = function getMap () {\n return new StepMap([this.from, this.to - this.from, this.slice.size])\n };\n\n ReplaceStep.prototype.invert = function invert (doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to))\n };\n\n ReplaceStep.prototype.map = function map (mapping) {\n var from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted) { return null }\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice)\n };\n\n ReplaceStep.prototype.merge = function merge (other) {\n if (!(other instanceof ReplaceStep) || other.structure || this.structure) { return null }\n\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n var slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure)\n } else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n var slice$1 = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice$1, this.structure)\n } else {\n return null\n }\n };\n\n ReplaceStep.prototype.toJSON = function toJSON () {\n var json = {stepType: \"replace\", from: this.from, to: this.to};\n if (this.slice.size) { json.slice = this.slice.toJSON(); }\n if (this.structure) { json.structure = true; }\n return json\n };\n\n ReplaceStep.fromJSON = function fromJSON (schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n { throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\") }\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure)\n };\n\n return ReplaceStep;\n}(Step));\n\nStep.jsonID(\"replace\", ReplaceStep);\n\n// ::- Replace a part of the document with a slice of content, but\n// preserve a range of the replaced content by moving it into the\n// slice.\nvar ReplaceAroundStep = /*@__PURE__*/(function (Step) {\n function ReplaceAroundStep(from, to, gapFrom, gapTo, slice, insert, structure) {\n Step.call(this);\n // :: number\n // The start position of the replaced range.\n this.from = from;\n // :: number\n // The end position of the replaced range.\n this.to = to;\n // :: number\n // The start of preserved range.\n this.gapFrom = gapFrom;\n // :: number\n // The end of preserved range.\n this.gapTo = gapTo;\n // :: Slice\n // The slice to insert.\n this.slice = slice;\n // :: number\n // The position in the slice where the preserved range should be\n // inserted.\n this.insert = insert;\n this.structure = !!structure;\n }\n\n if ( Step ) ReplaceAroundStep.__proto__ = Step;\n ReplaceAroundStep.prototype = Object.create( Step && Step.prototype );\n ReplaceAroundStep.prototype.constructor = ReplaceAroundStep;\n\n ReplaceAroundStep.prototype.apply = function apply (doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n contentBetween(doc, this.gapTo, this.to)))\n { return StepResult.fail(\"Structure gap-replace would overwrite content\") }\n\n var gap = doc.slice(this.gapFrom, this.gapTo);\n if (gap.openStart || gap.openEnd)\n { return StepResult.fail(\"Gap is not a flat range\") }\n var inserted = this.slice.insertAt(this.insert, gap.content);\n if (!inserted) { return StepResult.fail(\"Content does not fit in gap\") }\n return StepResult.fromReplace(doc, this.from, this.to, inserted)\n };\n\n ReplaceAroundStep.prototype.getMap = function getMap () {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n this.gapTo, this.to - this.gapTo, this.slice.size - this.insert])\n };\n\n ReplaceAroundStep.prototype.invert = function invert (doc) {\n var gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap,\n this.from + this.insert, this.from + this.insert + gap,\n doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from),\n this.gapFrom - this.from, this.structure)\n };\n\n ReplaceAroundStep.prototype.map = function map (mapping) {\n var from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n var gapFrom = mapping.map(this.gapFrom, -1), gapTo = mapping.map(this.gapTo, 1);\n if ((from.deleted && to.deleted) || gapFrom < from.pos || gapTo > to.pos) { return null }\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure)\n };\n\n ReplaceAroundStep.prototype.toJSON = function toJSON () {\n var json = {stepType: \"replaceAround\", from: this.from, to: this.to,\n gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert};\n if (this.slice.size) { json.slice = this.slice.toJSON(); }\n if (this.structure) { json.structure = true; }\n return json\n };\n\n ReplaceAroundStep.fromJSON = function fromJSON (schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n { throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\") }\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo,\n Slice.fromJSON(schema, json.slice), json.insert, !!json.structure)\n };\n\n return ReplaceAroundStep;\n}(Step));\n\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\n\nfunction contentBetween(doc, from, to) {\n var $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n if (dist > 0) {\n var next = $from.node(depth).maybeChild($from.indexAfter(depth));\n while (dist > 0) {\n if (!next || next.isLeaf) { return true }\n next = next.firstChild;\n dist--;\n }\n }\n return false\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) &&\n (end == node.childCount || node.canReplace(0, end))\n}\n\n// :: (NodeRange) → ?number\n// Try to find a target depth to which the content in the given range\n// can be lifted. Will not go across\n// [isolating](#model.NodeSpec.isolating) parent nodes.\nfunction liftTarget(range) {\n var parent = range.parent;\n var content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n for (var depth = range.depth;; --depth) {\n var node = range.$from.node(depth);\n var index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth);\n if (depth < range.depth && node.canReplace(index, endIndex, content))\n { return depth }\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex)) { break }\n }\n}\n\n// :: (NodeRange, number) → this\n// Split the content in the given range off from its parent, if there\n// is sibling content before or after it, and move it up the tree to\n// the depth specified by `target`. You'll probably want to use\n// [`liftTarget`](#transform.liftTarget) to compute `target`, to make\n// sure the lift is valid.\nTransform.prototype.lift = function(range, target) {\n var $from = range.$from;\n var $to = range.$to;\n var depth = range.depth;\n\n var gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n var start = gapStart, end = gapEnd;\n\n var before = Fragment.empty, openStart = 0;\n for (var d = depth, splitting = false; d > target; d--)\n { if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n } else {\n start--;\n } }\n var after = Fragment.empty, openEnd = 0;\n for (var d$1 = depth, splitting$1 = false; d$1 > target; d$1--)\n { if (splitting$1 || $to.after(d$1 + 1) < $to.end(d$1)) {\n splitting$1 = true;\n after = Fragment.from($to.node(d$1).copy(after));\n openEnd++;\n } else {\n end++;\n } }\n\n return this.step(new ReplaceAroundStep(start, end, gapStart, gapEnd,\n new Slice(before.append(after), openStart, openEnd),\n before.size - openStart, true))\n};\n\n// :: (NodeRange, NodeType, ?Object, ?NodeRange) → ?[{type: NodeType, attrs: ?Object}]\n// Try to find a valid way to wrap the content in the given range in a\n// node of the given type. May introduce extra nodes around and inside\n// the wrapper node, if necessary. Returns null if no valid wrapping\n// could be found. When `innerRange` is given, that range's content is\n// used as the content to fit into the wrapping, instead of the\n// content of `range`.\nfunction findWrapping(range, nodeType, attrs, innerRange) {\n if ( innerRange === void 0 ) innerRange = range;\n\n var around = findWrappingOutside(range, nodeType);\n var inner = around && findWrappingInside(innerRange, nodeType);\n if (!inner) { return null }\n return around.map(withAttrs).concat({type: nodeType, attrs: attrs}).concat(inner.map(withAttrs))\n}\n\nfunction withAttrs(type) { return {type: type, attrs: null} }\n\nfunction findWrappingOutside(range, type) {\n var parent = range.parent;\n var startIndex = range.startIndex;\n var endIndex = range.endIndex;\n var around = parent.contentMatchAt(startIndex).findWrapping(type);\n if (!around) { return null }\n var outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null\n}\n\nfunction findWrappingInside(range, type) {\n var parent = range.parent;\n var startIndex = range.startIndex;\n var endIndex = range.endIndex;\n var inner = parent.child(startIndex);\n var inside = type.contentMatch.findWrapping(inner.type);\n if (!inside) { return null }\n var lastType = inside.length ? inside[inside.length - 1] : type;\n var innerMatch = lastType.contentMatch;\n for (var i = startIndex; innerMatch && i < endIndex; i++)\n { innerMatch = innerMatch.matchType(parent.child(i).type); }\n if (!innerMatch || !innerMatch.validEnd) { return null }\n return inside\n}\n\n// :: (NodeRange, [{type: NodeType, attrs: ?Object}]) → this\n// Wrap the given [range](#model.NodeRange) in the given set of wrappers.\n// The wrappers are assumed to be valid in this position, and should\n// probably be computed with [`findWrapping`](#transform.findWrapping).\nTransform.prototype.wrap = function(range, wrappers) {\n var content = Fragment.empty;\n for (var i = wrappers.length - 1; i >= 0; i--)\n { content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content)); }\n\n var start = range.start, end = range.end;\n return this.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true))\n};\n\n// :: (number, ?number, NodeType, ?Object) → this\n// Set the type of all textblocks (partly) between `from` and `to` to\n// the given node type with the given attributes.\nTransform.prototype.setBlockType = function(from, to, type, attrs) {\n var this$1 = this;\n if ( to === void 0 ) to = from;\n\n if (!type.isTextblock) { throw new RangeError(\"Type given to setBlockType should be a textblock\") }\n var mapFrom = this.steps.length;\n this.doc.nodesBetween(from, to, function (node, pos) {\n if (node.isTextblock && !node.hasMarkup(type, attrs) && canChangeType(this$1.doc, this$1.mapping.slice(mapFrom).map(pos), type)) {\n // Ensure all markup that isn't allowed in the new node type is cleared\n this$1.clearIncompatible(this$1.mapping.slice(mapFrom).map(pos, 1), type);\n var mapping = this$1.mapping.slice(mapFrom);\n var startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n this$1.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1,\n new Slice(Fragment.from(type.create(attrs, null, node.marks)), 0, 0), 1, true));\n return false\n }\n });\n return this\n};\n\nfunction canChangeType(doc, pos, type) {\n var $pos = doc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type)\n}\n\n// :: (number, ?NodeType, ?Object, ?[Mark]) → this\n// Change the type, attributes, and/or marks of the node at `pos`.\n// When `type` isn't given, the existing node type is preserved,\nTransform.prototype.setNodeMarkup = function(pos, type, attrs, marks) {\n var node = this.doc.nodeAt(pos);\n if (!node) { throw new RangeError(\"No node at given position\") }\n if (!type) { type = node.type; }\n var newNode = type.create(attrs, null, marks || node.marks);\n if (node.isLeaf)\n { return this.replaceWith(pos, pos + node.nodeSize, newNode) }\n\n if (!type.validContent(node.content))\n { throw new RangeError(\"Invalid content for node type \" + type.name) }\n\n return this.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0), 1, true))\n};\n\n// :: (Node, number, number, ?[?{type: NodeType, attrs: ?Object}]) → bool\n// Check whether splitting at the given position is allowed.\nfunction canSplit(doc, pos, depth, typesAfter) {\n if ( depth === void 0 ) depth = 1;\n\n var $pos = doc.resolve(pos), base = $pos.depth - depth;\n var innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n if (base < 0 || $pos.parent.type.spec.isolating ||\n !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n { return false }\n for (var d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n var node = $pos.node(d), index$1 = $pos.index(d);\n if (node.type.spec.isolating) { return false }\n var rest = node.content.cutByIndex(index$1, node.childCount);\n var after = (typesAfter && typesAfter[i]) || node;\n if (after != node) { rest = rest.replaceChild(0, after.type.create(after.attrs)); }\n if (!node.canReplace(index$1 + 1, node.childCount) || !after.type.validContent(rest))\n { return false }\n }\n var index = $pos.indexAfter(base);\n var baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type)\n}\n\n// :: (number, ?number, ?[?{type: NodeType, attrs: ?Object}]) → this\n// Split the node at the given position, and optionally, if `depth` is\n// greater than one, any number of nodes above that. By default, the\n// parts split off will inherit the node type of the original node.\n// This can be changed by passing an array of types and attributes to\n// use after the split.\nTransform.prototype.split = function(pos, depth, typesAfter) {\n if ( depth === void 0 ) depth = 1;\n\n var $pos = this.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n for (var d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n var typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n return this.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true))\n};\n\n// :: (Node, number) → bool\n// Test whether the blocks before and after a given position can be\n// joined.\nfunction canJoin(doc, pos) {\n var $pos = doc.resolve(pos), index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n $pos.parent.canReplace(index, index + 1)\n}\n\nfunction joinable(a, b) {\n return a && b && !a.isLeaf && a.canAppend(b)\n}\n\n// :: (Node, number, ?number) → ?number\n// Find an ancestor of the given position that can be joined to the\n// block before (or after if `dir` is positive). Returns the joinable\n// point, if any.\nfunction joinPoint(doc, pos, dir) {\n if ( dir === void 0 ) dir = -1;\n\n var $pos = doc.resolve(pos);\n for (var d = $pos.depth;; d--) {\n var before = (void 0), after = (void 0), index = $pos.index(d);\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n } else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n } else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n if (before && !before.isTextblock && joinable(before, after) &&\n $pos.node(d).canReplace(index, index + 1)) { return pos }\n if (d == 0) { break }\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n}\n\n// :: (number, ?number) → this\n// Join the blocks around the given position. If depth is 2, their\n// last and first siblings are also joined, and so on.\nTransform.prototype.join = function(pos, depth) {\n if ( depth === void 0 ) depth = 1;\n\n var step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true);\n return this.step(step)\n};\n\n// :: (Node, number, NodeType) → ?number\n// Try to find a point where a node of the given type can be inserted\n// near `pos`, by searching up the node hierarchy when `pos` itself\n// isn't a valid place but is at the start or end of a node. Return\n// null if no position was found.\nfunction insertPoint(doc, pos, nodeType) {\n var $pos = doc.resolve(pos);\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType)) { return pos }\n\n if ($pos.parentOffset == 0)\n { for (var d = $pos.depth - 1; d >= 0; d--) {\n var index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType)) { return $pos.before(d + 1) }\n if (index > 0) { return null }\n } }\n if ($pos.parentOffset == $pos.parent.content.size)\n { for (var d$1 = $pos.depth - 1; d$1 >= 0; d$1--) {\n var index$1 = $pos.indexAfter(d$1);\n if ($pos.node(d$1).canReplaceWith(index$1, index$1, nodeType)) { return $pos.after(d$1 + 1) }\n if (index$1 < $pos.node(d$1).childCount) { return null }\n } }\n}\n\n// :: (Node, number, Slice) → ?number\n// Finds a position at or around the given position where the given\n// slice can be inserted. Will look at parent nodes' nearest boundary\n// and try there, even if the original position wasn't directly at the\n// start or end of that node. Returns null when no position was found.\nfunction dropPoint(doc, pos, slice) {\n var $pos = doc.resolve(pos);\n if (!slice.content.size) { return pos }\n var content = slice.content;\n for (var i = 0; i < slice.openStart; i++) { content = content.firstChild.content; }\n for (var pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (var d = $pos.depth; d >= 0; d--) {\n var bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n var insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n var parent = $pos.node(d), fits = false;\n if (pass == 1) {\n fits = parent.canReplace(insertPos, insertPos, content);\n } else {\n var wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n }\n if (fits)\n { return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1) }\n }\n }\n return null\n}\n\nfunction mapFragment(fragment, f, parent) {\n var mapped = [];\n for (var i = 0; i < fragment.childCount; i++) {\n var child = fragment.child(i);\n if (child.content.size) { child = child.copy(mapFragment(child.content, f, child)); }\n if (child.isInline) { child = f(child, parent, i); }\n mapped.push(child);\n }\n return Fragment.fromArray(mapped)\n}\n\n// ::- Add a mark to all inline content between two positions.\nvar AddMarkStep = /*@__PURE__*/(function (Step) {\n function AddMarkStep(from, to, mark) {\n Step.call(this);\n // :: number\n // The start of the marked range.\n this.from = from;\n // :: number\n // The end of the marked range.\n this.to = to;\n // :: Mark\n // The mark to add.\n this.mark = mark;\n }\n\n if ( Step ) AddMarkStep.__proto__ = Step;\n AddMarkStep.prototype = Object.create( Step && Step.prototype );\n AddMarkStep.prototype.constructor = AddMarkStep;\n\n AddMarkStep.prototype.apply = function apply (doc) {\n var this$1 = this;\n\n var oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n var parent = $from.node($from.sharedDepth(this.to));\n var slice = new Slice(mapFragment(oldSlice.content, function (node, parent) {\n if (!node.isAtom || !parent.type.allowsMarkType(this$1.mark.type)) { return node }\n return node.mark(this$1.mark.addToSet(node.marks))\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice)\n };\n\n AddMarkStep.prototype.invert = function invert () {\n return new RemoveMarkStep(this.from, this.to, this.mark)\n };\n\n AddMarkStep.prototype.map = function map (mapping) {\n var from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos) { return null }\n return new AddMarkStep(from.pos, to.pos, this.mark)\n };\n\n AddMarkStep.prototype.merge = function merge (other) {\n if (other instanceof AddMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n { return new AddMarkStep(Math.min(this.from, other.from),\n Math.max(this.to, other.to), this.mark) }\n };\n\n AddMarkStep.prototype.toJSON = function toJSON () {\n return {stepType: \"addMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to}\n };\n\n AddMarkStep.fromJSON = function fromJSON (schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n { throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\") }\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark))\n };\n\n return AddMarkStep;\n}(Step));\n\nStep.jsonID(\"addMark\", AddMarkStep);\n\n// ::- Remove a mark from all inline content between two positions.\nvar RemoveMarkStep = /*@__PURE__*/(function (Step) {\n function RemoveMarkStep(from, to, mark) {\n Step.call(this);\n // :: number\n // The start of the unmarked range.\n this.from = from;\n // :: number\n // The end of the unmarked range.\n this.to = to;\n // :: Mark\n // The mark to remove.\n this.mark = mark;\n }\n\n if ( Step ) RemoveMarkStep.__proto__ = Step;\n RemoveMarkStep.prototype = Object.create( Step && Step.prototype );\n RemoveMarkStep.prototype.constructor = RemoveMarkStep;\n\n RemoveMarkStep.prototype.apply = function apply (doc) {\n var this$1 = this;\n\n var oldSlice = doc.slice(this.from, this.to);\n var slice = new Slice(mapFragment(oldSlice.content, function (node) {\n return node.mark(this$1.mark.removeFromSet(node.marks))\n }), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice)\n };\n\n RemoveMarkStep.prototype.invert = function invert () {\n return new AddMarkStep(this.from, this.to, this.mark)\n };\n\n RemoveMarkStep.prototype.map = function map (mapping) {\n var from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos) { return null }\n return new RemoveMarkStep(from.pos, to.pos, this.mark)\n };\n\n RemoveMarkStep.prototype.merge = function merge (other) {\n if (other instanceof RemoveMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n { return new RemoveMarkStep(Math.min(this.from, other.from),\n Math.max(this.to, other.to), this.mark) }\n };\n\n RemoveMarkStep.prototype.toJSON = function toJSON () {\n return {stepType: \"removeMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to}\n };\n\n RemoveMarkStep.fromJSON = function fromJSON (schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n { throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\") }\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark))\n };\n\n return RemoveMarkStep;\n}(Step));\n\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n\n// :: (number, number, Mark) → this\n// Add the given mark to the inline content between `from` and `to`.\nTransform.prototype.addMark = function(from, to, mark) {\n var this$1 = this;\n\n var removed = [], added = [], removing = null, adding = null;\n this.doc.nodesBetween(from, to, function (node, pos, parent) {\n if (!node.isInline) { return }\n var marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n var start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n var newSet = mark.addToSet(marks);\n\n for (var i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i]))\n { removing.to = end; }\n else\n { removed.push(removing = new RemoveMarkStep(start, end, marks[i])); }\n }\n }\n\n if (adding && adding.to == start)\n { adding.to = end; }\n else\n { added.push(adding = new AddMarkStep(start, end, mark)); }\n }\n });\n\n removed.forEach(function (s) { return this$1.step(s); });\n added.forEach(function (s) { return this$1.step(s); });\n return this\n};\n\n// :: (number, number, ?union) → this\n// Remove marks from inline nodes between `from` and `to`. When `mark`\n// is a single mark, remove precisely that mark. When it is a mark type,\n// remove all marks of that type. When it is null, remove all marks of\n// any type.\nTransform.prototype.removeMark = function(from, to, mark) {\n var this$1 = this;\n if ( mark === void 0 ) mark = null;\n\n var matched = [], step = 0;\n this.doc.nodesBetween(from, to, function (node, pos) {\n if (!node.isInline) { return }\n step++;\n var toRemove = null;\n if (mark instanceof MarkType) {\n var set = node.marks, found;\n while (found = mark.isInSet(set)) {\n(toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n } else if (mark) {\n if (mark.isInSet(node.marks)) { toRemove = [mark]; }\n } else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n var end = Math.min(pos + node.nodeSize, to);\n for (var i = 0; i < toRemove.length; i++) {\n var style = toRemove[i], found$1 = (void 0);\n for (var j = 0; j < matched.length; j++) {\n var m = matched[j];\n if (m.step == step - 1 && style.eq(matched[j].style)) { found$1 = m; }\n }\n if (found$1) {\n found$1.to = end;\n found$1.step = step;\n } else {\n matched.push({style: style, from: Math.max(pos, from), to: end, step: step});\n }\n }\n }\n });\n matched.forEach(function (m) { return this$1.step(new RemoveMarkStep(m.from, m.to, m.style)); });\n return this\n};\n\n// :: (number, NodeType, ?ContentMatch) → this\n// Removes all marks and nodes from the content of the node at `pos`\n// that don't match the given new parent node type. Accepts an\n// optional starting [content match](#model.ContentMatch) as third\n// argument.\nTransform.prototype.clearIncompatible = function(pos, parentType, match) {\n if ( match === void 0 ) match = parentType.contentMatch;\n\n var node = this.doc.nodeAt(pos);\n var delSteps = [], cur = pos + 1;\n for (var i = 0; i < node.childCount; i++) {\n var child = node.child(i), end = cur + child.nodeSize;\n var allowed = match.matchType(child.type, child.attrs);\n if (!allowed) {\n delSteps.push(new ReplaceStep(cur, end, Slice.empty));\n } else {\n match = allowed;\n for (var j = 0; j < child.marks.length; j++) { if (!parentType.allowsMarkType(child.marks[j].type))\n { this.step(new RemoveMarkStep(cur, end, child.marks[j])); } }\n }\n cur = end;\n }\n if (!match.validEnd) {\n var fill = match.fillBefore(Fragment.empty, true);\n this.replace(cur, cur, new Slice(fill, 0, 0));\n }\n for (var i$1 = delSteps.length - 1; i$1 >= 0; i$1--) { this.step(delSteps[i$1]); }\n return this\n};\n\n// :: (Node, number, ?number, ?Slice) → ?Step\n// ‘Fit’ a slice into a given position in the document, producing a\n// [step](#transform.Step) that inserts it. Will return null if\n// there's no meaningful way to insert the slice here, or inserting it\n// would be a no-op (an empty slice over an empty range).\nfunction replaceStep(doc, from, to, slice) {\n if ( to === void 0 ) to = from;\n if ( slice === void 0 ) slice = Slice.empty;\n\n if (from == to && !slice.size) { return null }\n\n var $from = doc.resolve(from), $to = doc.resolve(to);\n // Optimization -- avoid work if it's obvious that it's not needed.\n if (fitsTrivially($from, $to, slice)) { return new ReplaceStep(from, to, slice) }\n return new Fitter($from, $to, slice).fit()\n}\n\n// :: (number, ?number, ?Slice) → this\n// Replace the part of the document between `from` and `to` with the\n// given `slice`.\nTransform.prototype.replace = function(from, to, slice) {\n if ( to === void 0 ) to = from;\n if ( slice === void 0 ) slice = Slice.empty;\n\n var step = replaceStep(this.doc, from, to, slice);\n if (step) { this.step(step); }\n return this\n};\n\n// :: (number, number, union) → this\n// Replace the given range with the given content, which may be a\n// fragment, node, or array of nodes.\nTransform.prototype.replaceWith = function(from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0))\n};\n\n// :: (number, number) → this\n// Delete the content between the given positions.\nTransform.prototype.delete = function(from, to) {\n return this.replace(from, to, Slice.empty)\n};\n\n// :: (number, union) → this\n// Insert the given content at the given position.\nTransform.prototype.insert = function(pos, content) {\n return this.replaceWith(pos, pos, content)\n};\n\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n $from.parent.canReplace($from.index(), $to.index(), slice.content)\n}\n\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in , when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\nvar Fitter = function Fitter($from, $to, slice) {\n this.$to = $to;\n this.$from = $from;\n this.unplaced = slice;\n\n this.frontier = [];\n for (var i = 0; i <= $from.depth; i++) {\n var node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n\n this.placed = Fragment.empty;\n for (var i$1 = $from.depth; i$1 > 0; i$1--)\n { this.placed = Fragment.from($from.node(i$1).copy(this.placed)); }\n};\n\nvar prototypeAccessors$1 = { depth: { configurable: true } };\n\nprototypeAccessors$1.depth.get = function () { return this.frontier.length - 1 };\n\nFitter.prototype.fit = function fit () {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n var fit = this.findFittable();\n if (fit) { this.placeNodes(fit); }\n else { this.openMore() || this.dropNode(); }\n }\n // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n var moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n var $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n if (!$to) { return null }\n\n // If closing to `$to` succeeded, create a step\n var content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--; openEnd--;\n }\n var slice = new Slice(content, openStart, openEnd);\n if (moveInline > -1)\n { return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize) }\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n { return new ReplaceStep($from.pos, $to.pos, slice) }\n};\n\n// Find a position on the start spine of `this.unplaced` that has\n// content that can be moved somewhere on the frontier. Returns two\n// depths, one for the slice and one for the frontier.\nFitter.prototype.findFittable = function findFittable () {\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (var pass = 1; pass <= 2; pass++) {\n for (var sliceDepth = this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n var fragment = (void 0), parent = (void 0);\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n } else {\n fragment = this.unplaced.content;\n }\n var first = fragment.firstChild;\n for (var frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n var ref = this.frontier[frontierDepth];\n var type = ref.type;\n var match = ref.match;\n var wrap = (void 0), inject = (void 0);\n // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n : type.compatibleContent(parent.type)))\n { return {sliceDepth: sliceDepth, frontierDepth: frontierDepth, parent: parent, inject: inject} }\n // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n { return {sliceDepth: sliceDepth, frontierDepth: frontierDepth, parent: parent, wrap: wrap} }\n // Don't continue looking further up if the parent node\n // would fit here.\n if (parent && match.matchType(parent.type)) { break }\n }\n }\n }\n};\n\nFitter.prototype.openMore = function openMore () {\n var ref = this.unplaced;\n var content = ref.content;\n var openStart = ref.openStart;\n var openEnd = ref.openEnd;\n var inner = contentAt(content, openStart);\n if (!inner.childCount || inner.firstChild.isLeaf) { return false }\n this.unplaced = new Slice(content, openStart + 1,\n Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true\n};\n\nFitter.prototype.dropNode = function dropNode () {\n var ref = this.unplaced;\n var content = ref.content;\n var openStart = ref.openStart;\n var openEnd = ref.openEnd;\n var inner = contentAt(content, openStart);\n if (inner.childCount <= 1 && openStart > 0) {\n var openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1,\n openAtEnd ? openStart - 1 : openEnd);\n } else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n};\n\n// : ({sliceDepth: number, frontierDepth: number, parent: ?Node, wrap: ?[NodeType], inject: ?Fragment})\n// Move content from the unplaced slice at `sliceDepth` to the\n// frontier node at `frontierDepth`. Close that frontier node when\n// applicable.\nFitter.prototype.placeNodes = function placeNodes (ref) {\n var sliceDepth = ref.sliceDepth;\n var frontierDepth = ref.frontierDepth;\n var parent = ref.parent;\n var inject = ref.inject;\n var wrap = ref.wrap;\n\n while (this.depth > frontierDepth) { this.closeFrontierNode(); }\n if (wrap) { for (var i = 0; i < wrap.length; i++) { this.openFrontierNode(wrap[i]); } }\n\n var slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n var openStart = slice.openStart - sliceDepth;\n var taken = 0, add = [];\n var ref$1 = this.frontier[frontierDepth];\n var match = ref$1.match;\n var type = ref$1.type;\n if (inject) {\n for (var i$1 = 0; i$1 < inject.childCount; i$1++) { add.push(inject.child(i$1)); }\n match = match.matchFragment(inject);\n }\n // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n var openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n // Scan over the fragment, fitting as many child nodes as\n // possible.\n while (taken < fragment.childCount) {\n var next = fragment.child(taken), matches = match.matchType(next.type);\n if (!matches) { break }\n taken++;\n if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0,\n taken == fragment.childCount ? openEndCount : -1));\n }\n }\n var toEnd = taken == fragment.childCount;\n if (!toEnd) { openEndCount = -1; }\n\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match;\n\n // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n { this.closeFrontierNode(); }\n\n // Add new frontier nodes for any open nodes at the end.\n for (var i$2 = 0, cur = fragment; i$2 < openEndCount; i$2++) {\n var node = cur.lastChild;\n this.frontier.push({type: node.type, match: node.contentMatchAt(node.childCount)});\n cur = node.content;\n }\n\n // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n : sliceDepth == 0 ? Slice.empty\n : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1),\n sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n};\n\nFitter.prototype.mustMoveInline = function mustMoveInline () {\n if (!this.$to.parent.isTextblock || this.$to.end() == this.$to.pos) { return -1 }\n var top = this.frontier[this.depth], level;\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth)) { return -1 }\n\n var ref = this.$to;\n var depth = ref.depth;\n var after = this.$to.after(depth);\n while (depth > 1 && after == this.$to.end(--depth)) { ++after; }\n return after\n};\n\nFitter.prototype.findCloseLevel = function findCloseLevel ($to) {\n scan: for (var i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n var ref = this.frontier[i];\n var match = ref.match;\n var type = ref.type;\n var dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n var fit = contentAfterFits($to, i, type, match, dropInner);\n if (!fit) { continue }\n for (var d = i - 1; d >= 0; d--) {\n var ref$1 = this.frontier[d];\n var match$1 = ref$1.match;\n var type$1 = ref$1.type;\n var matches = contentAfterFits($to, d, type$1, match$1, true);\n if (!matches || matches.childCount) { continue scan }\n }\n return {depth: i, fit: fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to}\n }\n};\n\nFitter.prototype.close = function close ($to) {\n var close = this.findCloseLevel($to);\n if (!close) { return null }\n\n while (this.depth > close.depth) { this.closeFrontierNode(); }\n if (close.fit.childCount) { this.placed = addToFragment(this.placed, close.depth, close.fit); }\n $to = close.move;\n for (var d = close.depth + 1; d <= $to.depth; d++) {\n var node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n return $to\n};\n\nFitter.prototype.openFrontierNode = function openFrontierNode (type, attrs, content) {\n var top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({type: type, match: type.contentMatch});\n};\n\nFitter.prototype.closeFrontierNode = function closeFrontierNode () {\n var open = this.frontier.pop();\n var add = open.match.fillBefore(Fragment.empty, true);\n if (add.childCount) { this.placed = addToFragment(this.placed, this.frontier.length, add); }\n};\n\nObject.defineProperties( Fitter.prototype, prototypeAccessors$1 );\n\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0) { return fragment.cutByIndex(count) }\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)))\n}\n\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0) { return fragment.append(content) }\n return fragment.replaceChild(fragment.childCount - 1,\n fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)))\n}\n\nfunction contentAt(fragment, depth) {\n for (var i = 0; i < depth; i++) { fragment = fragment.firstChild.content; }\n return fragment\n}\n\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0) { return node }\n var frag = node.content;\n if (openStart > 1)\n { frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0)); }\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n if (openEnd <= 0) { frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true)); }\n }\n return node.copy(frag)\n}\n\nfunction contentAfterFits($to, depth, type, match, open) {\n var node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n if (index == node.childCount && !type.compatibleContent(node.type)) { return null }\n var fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null\n}\n\nfunction invalidMarks(type, fragment, start) {\n for (var i = start; i < fragment.childCount; i++)\n { if (!type.allowsMarks(fragment.child(i).marks)) { return true } }\n return false\n}\n\n// :: (number, number, Slice) → this\n// Replace a range of the document with a given slice, using `from`,\n// `to`, and the slice's [`openStart`](#model.Slice.openStart) property\n// as hints, rather than fixed start and end points. This method may\n// grow the replaced area or close open nodes in the slice in order to\n// get a fit that is more in line with WYSIWYG expectations, by\n// dropping fully covered parent nodes of the replaced region when\n// they are marked [non-defining](#model.NodeSpec.defining), or\n// including an open parent node from the slice that _is_ marked as\n// [defining](#model.NodeSpec.defining).\n//\n// This is the method, for example, to handle paste. The similar\n// [`replace`](#transform.Transform.replace) method is a more\n// primitive tool which will _not_ move the start and end of its given\n// range, and is useful in situations where you need more precise\n// control over what happens.\nTransform.prototype.replaceRange = function(from, to, slice) {\n if (!slice.size) { return this.deleteRange(from, to) }\n\n var $from = this.doc.resolve(from), $to = this.doc.resolve(to);\n if (fitsTrivially($from, $to, slice))\n { return this.step(new ReplaceStep(from, to, slice)) }\n\n var targetDepths = coveredDepths($from, this.doc.resolve(to));\n // Can't replace the whole document, so remove 0 if it's present\n if (targetDepths[targetDepths.length - 1] == 0) { targetDepths.pop(); }\n // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n var preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget);\n // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n for (var d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n var spec = $from.node(d).type.spec;\n if (spec.defining || spec.isolating) { break }\n if (targetDepths.indexOf(d) > -1) { preferredTarget = d; }\n else if ($from.before(d) == pos) { targetDepths.splice(1, 0, -d); }\n }\n // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n var preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n\n var leftNodes = [], preferredDepth = slice.openStart;\n for (var content = slice.content, i = 0;; i++) {\n var node = content.firstChild;\n leftNodes.push(node);\n if (i == slice.openStart) { break }\n content = node.content;\n }\n // Back up if the node directly above openStart, or the node above\n // that separated only by a non-defining textblock node, is defining.\n if (preferredDepth > 0 && leftNodes[preferredDepth - 1].type.spec.defining &&\n $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 1].type)\n { preferredDepth -= 1; }\n else if (preferredDepth >= 2 && leftNodes[preferredDepth - 1].isTextblock && leftNodes[preferredDepth - 2].type.spec.defining &&\n $from.node(preferredTargetIndex).type != leftNodes[preferredDepth - 2].type)\n { preferredDepth -= 2; }\n\n for (var j = slice.openStart; j >= 0; j--) {\n var openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n var insert = leftNodes[openDepth];\n if (!insert) { continue }\n for (var i$1 = 0; i$1 < targetDepths.length; i$1++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n var targetDepth = targetDepths[(i$1 + preferredTargetIndex) % targetDepths.length], expand = true;\n if (targetDepth < 0) { expand = false; targetDepth = -targetDepth; }\n var parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n { return this.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to,\n new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth),\n openDepth, slice.openEnd)) }\n }\n }\n\n var startSteps = this.steps.length;\n for (var i$2 = targetDepths.length - 1; i$2 >= 0; i$2--) {\n this.replace(from, to, slice);\n if (this.steps.length > startSteps) { break }\n var depth = targetDepths[i$2];\n if (depth < 0) { continue }\n from = $from.before(depth); to = $to.after(depth);\n }\n return this\n};\n\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n var first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n if (depth > newOpen) {\n var match = parent.contentMatchAt(0);\n var start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n return fragment\n}\n\n// :: (number, number, Node) → this\n// Replace the given range with a node, but use `from` and `to` as\n// hints, rather than precise positions. When from and to are the same\n// and are at the start or end of a parent node in which the given\n// node doesn't fit, this method may _move_ them out towards a parent\n// that does allow the given node to be placed. When the given range\n// completely covers a parent node, this method may completely replace\n// that parent node.\nTransform.prototype.replaceRangeWith = function(from, to, node) {\n if (!node.isInline && from == to && this.doc.resolve(from).parent.content.size) {\n var point = insertPoint(this.doc, from, node.type);\n if (point != null) { from = to = point; }\n }\n return this.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0))\n};\n\n// :: (number, number) → this\n// Delete the given range, expanding it to cover fully covered\n// parent nodes until a valid replace is found.\nTransform.prototype.deleteRange = function(from, to) {\n var $from = this.doc.resolve(from), $to = this.doc.resolve(to);\n var covered = coveredDepths($from, $to);\n for (var i = 0; i < covered.length; i++) {\n var depth = covered[i], last = i == covered.length - 1;\n if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n { return this.delete($from.start(depth), $to.end(depth)) }\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n { return this.delete($from.before(depth), $to.after(depth)) }\n }\n for (var d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d)\n { return this.delete($from.before(d), to) }\n }\n return this.delete(from, to)\n};\n\n// : (ResolvedPos, ResolvedPos) → [number]\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n var result = [], minDepth = Math.min($from.depth, $to.depth);\n for (var d = minDepth; d >= 0; d--) {\n var start = $from.start(d);\n if (start < $from.pos - ($from.depth - d) ||\n $to.end(d) > $to.pos + ($to.depth - d) ||\n $from.node(d).type.spec.isolating ||\n $to.node(d).type.spec.isolating) { break }\n if (start == $to.start(d) ||\n (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n d && $to.start(d - 1) == start - 1))\n { result.push(d); }\n }\n return result\n}\n\nexport { AddMarkStep, MapResult, Mapping, RemoveMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nvar classesById = Object.create(null);\n\n// ::- Superclass for editor selections. Every selection type should\n// extend this. Should not be instantiated directly.\nvar Selection = function Selection($anchor, $head, ranges) {\n // :: [SelectionRange]\n // The ranges covered by the selection.\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n // :: ResolvedPos\n // The resolved anchor of the selection (the side that stays in\n // place when the selection is modified).\n this.$anchor = $anchor;\n // :: ResolvedPos\n // The resolved head of the selection (the side that moves when\n // the selection is modified).\n this.$head = $head;\n};\n\nvar prototypeAccessors = { anchor: { configurable: true },head: { configurable: true },from: { configurable: true },to: { configurable: true },$from: { configurable: true },$to: { configurable: true },empty: { configurable: true } };\n\n// :: number\n// The selection's anchor, as an unresolved position.\nprototypeAccessors.anchor.get = function () { return this.$anchor.pos };\n\n// :: number\n// The selection's head.\nprototypeAccessors.head.get = function () { return this.$head.pos };\n\n// :: number\n// The lower bound of the selection's main range.\nprototypeAccessors.from.get = function () { return this.$from.pos };\n\n// :: number\n// The upper bound of the selection's main range.\nprototypeAccessors.to.get = function () { return this.$to.pos };\n\n// :: ResolvedPos\n// The resolved lowerbound of the selection's main range.\nprototypeAccessors.$from.get = function () {\n return this.ranges[0].$from\n};\n\n// :: ResolvedPos\n// The resolved upper bound of the selection's main range.\nprototypeAccessors.$to.get = function () {\n return this.ranges[0].$to\n};\n\n// :: bool\n// Indicates whether the selection contains any content.\nprototypeAccessors.empty.get = function () {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++)\n { if (ranges[i].$from.pos != ranges[i].$to.pos) { return false } }\n return true\n};\n\n// eq:: (Selection) → bool\n// Test whether the selection is the same as another selection.\n\n// map:: (doc: Node, mapping: Mappable) → Selection\n// Map this selection through a [mappable](#transform.Mappable) thing. `doc`\n// should be the new document to which we are mapping.\n\n// :: () → Slice\n// Get the content of this selection as a slice.\nSelection.prototype.content = function content () {\n return this.$from.node(0).slice(this.from, this.to, true)\n};\n\n// :: (Transaction, ?Slice)\n// Replace the selection with a slice or, if no slice is given,\n// delete the selection. Will append to the given transaction.\nSelection.prototype.replace = function replace (tr, content) {\n if ( content === void 0 ) content = Slice.empty;\n\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n var lastNode = content.content.lastChild, lastParent = null;\n for (var i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n\n var mapFrom = tr.steps.length, ranges = this.ranges;\n for (var i$1 = 0; i$1 < ranges.length; i$1++) {\n var ref = ranges[i$1];\n var $from = ref.$from;\n var $to = ref.$to;\n var mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i$1 ? Slice.empty : content);\n if (i$1 == 0)\n { selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1); }\n }\n};\n\n// :: (Transaction, Node)\n// Replace the selection with the given node, appending the changes\n// to the given transaction.\nSelection.prototype.replaceWith = function replaceWith (tr, node) {\n var mapFrom = tr.steps.length, ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var ref = ranges[i];\n var $from = ref.$from;\n var $to = ref.$to;\n var mapping = tr.mapping.slice(mapFrom);\n var from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n } else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n};\n\n// toJSON:: () → Object\n// Convert the selection to a JSON representation. When implementing\n// this for a custom selection class, make sure to give the object a\n// `type` property whose value matches the ID under which you\n// [registered](#state.Selection^jsonID) your class.\n\n// :: (ResolvedPos, number, ?bool) → ?Selection\n// Find a valid cursor or leaf node selection starting at the given\n// position and searching back if `dir` is negative, and forward if\n// positive. When `textOnly` is true, only consider cursor\n// selections. Will return null when no valid selection position is\n// found.\nSelection.findFrom = function findFrom ($pos, dir, textOnly) {\n var inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner) { return inner }\n\n for (var depth = $pos.depth - 1; depth >= 0; depth--) {\n var found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found) { return found }\n }\n};\n\n// :: (ResolvedPos, ?number) → Selection\n// Find a valid cursor or leaf node selection near the given\n// position. Searches forward first by default, but if `bias` is\n// negative, it will search backwards first.\nSelection.near = function near ($pos, bias) {\n if ( bias === void 0 ) bias = 1;\n\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0))\n};\n\n// :: (Node) → Selection\n// Find the cursor or leaf node selection closest to the start of\n// the given document. Will return an\n// [`AllSelection`](#state.AllSelection) if no valid position\n// exists.\nSelection.atStart = function atStart (doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc)\n};\n\n// :: (Node) → Selection\n// Find the cursor or leaf node selection closest to the end of the\n// given document.\nSelection.atEnd = function atEnd (doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc)\n};\n\n// :: (Node, Object) → Selection\n// Deserialize the JSON representation of a selection. Must be\n// implemented for custom classes (as a static class method).\nSelection.fromJSON = function fromJSON (doc, json) {\n if (!json || !json.type) { throw new RangeError(\"Invalid input for Selection.fromJSON\") }\n var cls = classesById[json.type];\n if (!cls) { throw new RangeError((\"No selection type \" + (json.type) + \" defined\")) }\n return cls.fromJSON(doc, json)\n};\n\n// :: (string, constructor)\n// To be able to deserialize selections from JSON, custom selection\n// classes must register themselves with an ID string, so that they\n// can be disambiguated. Try to pick something that's unlikely to\n// clash with classes from other modules.\nSelection.jsonID = function jsonID (id, selectionClass) {\n if (id in classesById) { throw new RangeError(\"Duplicate use of selection JSON ID \" + id) }\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass\n};\n\n// :: () → SelectionBookmark\n// Get a [bookmark](#state.SelectionBookmark) for this selection,\n// which is a value that can be mapped without having access to a\n// current document, and later resolved to a real selection for a\n// given document again. (This is used mostly by the history to\n// track and restore old selections.) The default implementation of\n// this method just converts the selection to a text selection and\n// returns the bookmark for that.\nSelection.prototype.getBookmark = function getBookmark () {\n return TextSelection.between(this.$anchor, this.$head).getBookmark()\n};\n\nObject.defineProperties( Selection.prototype, prototypeAccessors );\n\n// :: bool\n// Controls whether, when a selection of this type is active in the\n// browser, the selected range should be visible to the user. Defaults\n// to `true`.\nSelection.prototype.visible = true;\n\n// SelectionBookmark:: interface\n// A lightweight, document-independent representation of a selection.\n// You can define a custom bookmark type for a custom selection class\n// to make the history handle it well.\n//\n// map:: (mapping: Mapping) → SelectionBookmark\n// Map the bookmark through a set of changes.\n//\n// resolve:: (doc: Node) → Selection\n// Resolve the bookmark to a real selection again. This may need to\n// do some error checking and may fall back to a default (usually\n// [`TextSelection.between`](#state.TextSelection^between)) if\n// mapping made the bookmark invalid.\n\n// ::- Represents a selected range in a document.\nvar SelectionRange = function SelectionRange($from, $to) {\n // :: ResolvedPos\n // The lower bound of the range.\n this.$from = $from;\n // :: ResolvedPos\n // The upper bound of the range.\n this.$to = $to;\n};\n\n// ::- A text selection represents a classical editor selection, with\n// a head (the moving side) and anchor (immobile side), both of which\n// point into textblock nodes. It can be empty (a regular cursor\n// position).\nvar TextSelection = /*@__PURE__*/(function (Selection) {\n function TextSelection($anchor, $head) {\n if ( $head === void 0 ) $head = $anchor;\n\n Selection.call(this, $anchor, $head);\n }\n\n if ( Selection ) TextSelection.__proto__ = Selection;\n TextSelection.prototype = Object.create( Selection && Selection.prototype );\n TextSelection.prototype.constructor = TextSelection;\n\n var prototypeAccessors$1 = { $cursor: { configurable: true } };\n\n // :: ?ResolvedPos\n // Returns a resolved position if this is a cursor selection (an\n // empty text selection), and null otherwise.\n prototypeAccessors$1.$cursor.get = function () { return this.$anchor.pos == this.$head.pos ? this.$head : null };\n\n TextSelection.prototype.map = function map (doc, mapping) {\n var $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent) { return Selection.near($head) }\n var $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head)\n };\n\n TextSelection.prototype.replace = function replace (tr, content) {\n if ( content === void 0 ) content = Slice.empty;\n\n Selection.prototype.replace.call(this, tr, content);\n if (content == Slice.empty) {\n var marks = this.$from.marksAcross(this.$to);\n if (marks) { tr.ensureMarks(marks); }\n }\n };\n\n TextSelection.prototype.eq = function eq (other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head\n };\n\n TextSelection.prototype.getBookmark = function getBookmark () {\n return new TextBookmark(this.anchor, this.head)\n };\n\n TextSelection.prototype.toJSON = function toJSON () {\n return {type: \"text\", anchor: this.anchor, head: this.head}\n };\n\n TextSelection.fromJSON = function fromJSON (doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n { throw new RangeError(\"Invalid input for TextSelection.fromJSON\") }\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head))\n };\n\n // :: (Node, number, ?number) → TextSelection\n // Create a text selection from non-resolved positions.\n TextSelection.create = function create (doc, anchor, head) {\n if ( head === void 0 ) head = anchor;\n\n var $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head))\n };\n\n // :: (ResolvedPos, ResolvedPos, ?number) → Selection\n // Return a text selection that spans the given positions or, if\n // they aren't text positions, find a text selection near them.\n // `bias` determines whether the method searches forward (default)\n // or backwards (negative number) first. Will fall back to calling\n // [`Selection.near`](#state.Selection^near) when the document\n // doesn't contain a valid text position.\n TextSelection.between = function between ($anchor, $head, bias) {\n var dPos = $anchor.pos - $head.pos;\n if (!bias || dPos) { bias = dPos >= 0 ? 1 : -1; }\n if (!$head.parent.inlineContent) {\n var found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found) { $head = found.$head; }\n else { return Selection.near($head, bias) }\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n } else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0)) { $anchor = $head; }\n }\n }\n return new TextSelection($anchor, $head)\n };\n\n Object.defineProperties( TextSelection.prototype, prototypeAccessors$1 );\n\n return TextSelection;\n}(Selection));\n\nSelection.jsonID(\"text\", TextSelection);\n\nvar TextBookmark = function TextBookmark(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n};\nTextBookmark.prototype.map = function map (mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head))\n};\nTextBookmark.prototype.resolve = function resolve (doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head))\n};\n\n// ::- A node selection is a selection that points at a single node.\n// All nodes marked [selectable](#model.NodeSpec.selectable) can be\n// the target of a node selection. In such a selection, `from` and\n// `to` point directly before and after the selected node, `anchor`\n// equals `from`, and `head` equals `to`..\nvar NodeSelection = /*@__PURE__*/(function (Selection) {\n function NodeSelection($pos) {\n var node = $pos.nodeAfter;\n var $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n Selection.call(this, $pos, $end);\n // :: Node The selected node.\n this.node = node;\n }\n\n if ( Selection ) NodeSelection.__proto__ = Selection;\n NodeSelection.prototype = Object.create( Selection && Selection.prototype );\n NodeSelection.prototype.constructor = NodeSelection;\n\n NodeSelection.prototype.map = function map (doc, mapping) {\n var ref = mapping.mapResult(this.anchor);\n var deleted = ref.deleted;\n var pos = ref.pos;\n var $pos = doc.resolve(pos);\n if (deleted) { return Selection.near($pos) }\n return new NodeSelection($pos)\n };\n\n NodeSelection.prototype.content = function content () {\n return new Slice(Fragment.from(this.node), 0, 0)\n };\n\n NodeSelection.prototype.eq = function eq (other) {\n return other instanceof NodeSelection && other.anchor == this.anchor\n };\n\n NodeSelection.prototype.toJSON = function toJSON () {\n return {type: \"node\", anchor: this.anchor}\n };\n\n NodeSelection.prototype.getBookmark = function getBookmark () { return new NodeBookmark(this.anchor) };\n\n NodeSelection.fromJSON = function fromJSON (doc, json) {\n if (typeof json.anchor != \"number\")\n { throw new RangeError(\"Invalid input for NodeSelection.fromJSON\") }\n return new NodeSelection(doc.resolve(json.anchor))\n };\n\n // :: (Node, number) → NodeSelection\n // Create a node selection from non-resolved positions.\n NodeSelection.create = function create (doc, from) {\n return new this(doc.resolve(from))\n };\n\n // :: (Node) → bool\n // Determines whether the given node may be selected as a node\n // selection.\n NodeSelection.isSelectable = function isSelectable (node) {\n return !node.isText && node.type.spec.selectable !== false\n };\n\n return NodeSelection;\n}(Selection));\n\nNodeSelection.prototype.visible = false;\n\nSelection.jsonID(\"node\", NodeSelection);\n\nvar NodeBookmark = function NodeBookmark(anchor) {\n this.anchor = anchor;\n};\nNodeBookmark.prototype.map = function map (mapping) {\n var ref = mapping.mapResult(this.anchor);\n var deleted = ref.deleted;\n var pos = ref.pos;\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos)\n};\nNodeBookmark.prototype.resolve = function resolve (doc) {\n var $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node)) { return new NodeSelection($pos) }\n return Selection.near($pos)\n};\n\n// ::- A selection type that represents selecting the whole document\n// (which can not necessarily be expressed with a text selection, when\n// there are for example leaf block nodes at the start or end of the\n// document).\nvar AllSelection = /*@__PURE__*/(function (Selection) {\n function AllSelection(doc) {\n Selection.call(this, doc.resolve(0), doc.resolve(doc.content.size));\n }\n\n if ( Selection ) AllSelection.__proto__ = Selection;\n AllSelection.prototype = Object.create( Selection && Selection.prototype );\n AllSelection.prototype.constructor = AllSelection;\n\n AllSelection.prototype.replace = function replace (tr, content) {\n if ( content === void 0 ) content = Slice.empty;\n\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n var sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection)) { tr.setSelection(sel); }\n } else {\n Selection.prototype.replace.call(this, tr, content);\n }\n };\n\n AllSelection.prototype.toJSON = function toJSON () { return {type: \"all\"} };\n\n AllSelection.fromJSON = function fromJSON (doc) { return new AllSelection(doc) };\n\n AllSelection.prototype.map = function map (doc) { return new AllSelection(doc) };\n\n AllSelection.prototype.eq = function eq (other) { return other instanceof AllSelection };\n\n AllSelection.prototype.getBookmark = function getBookmark () { return AllBookmark };\n\n return AllSelection;\n}(Selection));\n\nSelection.jsonID(\"all\", AllSelection);\n\nvar AllBookmark = {\n map: function map() { return this },\n resolve: function resolve(doc) { return new AllSelection(doc) }\n};\n\n// FIXME we'll need some awareness of text direction when scanning for selections\n\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text) {\n if (node.inlineContent) { return TextSelection.create(doc, pos) }\n for (var i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n var child = node.child(i);\n if (!child.isAtom) {\n var inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner) { return inner }\n } else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0))\n }\n pos += child.nodeSize * dir;\n }\n}\n\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n var last = tr.steps.length - 1;\n if (last < startLen) { return }\n var step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) { return }\n var map = tr.mapping.maps[last], end;\n map.forEach(function (_from, _to, _newFrom, newTo) { if (end == null) { end = newTo; } });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nvar UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n\n// ::- An editor state transaction, which can be applied to a state to\n// create an updated state. Use\n// [`EditorState.tr`](#state.EditorState.tr) to create an instance.\n//\n// Transactions track changes to the document (they are a subclass of\n// [`Transform`](#transform.Transform)), but also other state changes,\n// like selection updates and adjustments of the set of [stored\n// marks](#state.EditorState.storedMarks). In addition, you can store\n// metadata properties in a transaction, which are extra pieces of\n// information that client code or plugins can use to describe what a\n// transacion represents, so that they can update their [own\n// state](#state.StateField) accordingly.\n//\n// The [editor view](#view.EditorView) uses a few metadata properties:\n// it will attach a property `\"pointer\"` with the value `true` to\n// selection transactions directly caused by mouse or touch input, and\n// a `\"uiEvent\"` property of that may be `\"paste\"`, `\"cut\"`, or `\"drop\"`.\nvar Transaction = /*@__PURE__*/(function (Transform) {\n function Transaction(state) {\n Transform.call(this, state.doc);\n // :: number\n // The timestamp associated with this transaction, in the same\n // format as `Date.now()`.\n this.time = Date.now();\n this.curSelection = state.selection;\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // :: ?[Mark]\n // The stored marks set by this transaction, if any.\n this.storedMarks = state.storedMarks;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n }\n\n if ( Transform ) Transaction.__proto__ = Transform;\n Transaction.prototype = Object.create( Transform && Transform.prototype );\n Transaction.prototype.constructor = Transaction;\n\n var prototypeAccessors = { selection: { configurable: true },selectionSet: { configurable: true },storedMarksSet: { configurable: true },isGeneric: { configurable: true },scrolledIntoView: { configurable: true } };\n\n // :: Selection\n // The transaction's current selection. This defaults to the editor\n // selection [mapped](#state.Selection.map) through the steps in the\n // transaction, but can be overwritten with\n // [`setSelection`](#state.Transaction.setSelection).\n prototypeAccessors.selection.get = function () {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection\n };\n\n // :: (Selection) → Transaction\n // Update the transaction's current selection. Will determine the\n // selection that the editor gets when the transaction is applied.\n Transaction.prototype.setSelection = function setSelection (selection) {\n if (selection.$from.doc != this.doc)\n { throw new RangeError(\"Selection passed to setSelection must point at the current document\") }\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this\n };\n\n // :: bool\n // Whether the selection was explicitly updated by this transaction.\n prototypeAccessors.selectionSet.get = function () {\n return (this.updated & UPDATED_SEL) > 0\n };\n\n // :: (?[Mark]) → Transaction\n // Set the current stored marks.\n Transaction.prototype.setStoredMarks = function setStoredMarks (marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this\n };\n\n // :: ([Mark]) → Transaction\n // Make sure the current stored marks or, if that is null, the marks\n // at the selection, match the given set of marks. Does nothing if\n // this is already the case.\n Transaction.prototype.ensureMarks = function ensureMarks (marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n { this.setStoredMarks(marks); }\n return this\n };\n\n // :: (Mark) → Transaction\n // Add a mark to the set of stored marks.\n Transaction.prototype.addStoredMark = function addStoredMark (mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()))\n };\n\n // :: (union) → Transaction\n // Remove a mark or mark type from the set of stored marks.\n Transaction.prototype.removeStoredMark = function removeStoredMark (mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()))\n };\n\n // :: bool\n // Whether the stored marks were explicitly set for this transaction.\n prototypeAccessors.storedMarksSet.get = function () {\n return (this.updated & UPDATED_MARKS) > 0\n };\n\n Transaction.prototype.addStep = function addStep (step, doc) {\n Transform.prototype.addStep.call(this, step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n };\n\n // :: (number) → Transaction\n // Update the timestamp for the transaction.\n Transaction.prototype.setTime = function setTime (time) {\n this.time = time;\n return this\n };\n\n // :: (Slice) → Transaction\n // Replace the current selection with the given slice.\n Transaction.prototype.replaceSelection = function replaceSelection (slice) {\n this.selection.replace(this, slice);\n return this\n };\n\n // :: (Node, ?bool) → Transaction\n // Replace the selection with the given node. When `inheritMarks` is\n // true and the content is inline, it inherits the marks from the\n // place where it is inserted.\n Transaction.prototype.replaceSelectionWith = function replaceSelectionWith (node, inheritMarks) {\n var selection = this.selection;\n if (inheritMarks !== false)\n { node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none))); }\n selection.replaceWith(this, node);\n return this\n };\n\n // :: () → Transaction\n // Delete the selection.\n Transaction.prototype.deleteSelection = function deleteSelection () {\n this.selection.replace(this);\n return this\n };\n\n // :: (string, from: ?number, to: ?number) → Transaction\n // Replace the given range, or the selection if no range is given,\n // with a text node containing the given string.\n Transaction.prototype.insertText = function insertText (text, from, to) {\n if ( to === void 0 ) to = from;\n\n var schema = this.doc.type.schema;\n if (from == null) {\n if (!text) { return this.deleteSelection() }\n return this.replaceSelectionWith(schema.text(text), true)\n } else {\n if (!text) { return this.deleteRange(from, to) }\n var marks = this.storedMarks;\n if (!marks) {\n var $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty) { this.setSelection(Selection.near(this.selection.$to)); }\n return this\n }\n };\n\n // :: (union, any) → Transaction\n // Store a metadata property in this transaction, keyed either by\n // name or by plugin.\n Transaction.prototype.setMeta = function setMeta (key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this\n };\n\n // :: (union) → any\n // Retrieve a metadata property for a given name or plugin.\n Transaction.prototype.getMeta = function getMeta (key) {\n return this.meta[typeof key == \"string\" ? key : key.key]\n };\n\n // :: bool\n // Returns true if this transaction doesn't contain any metadata,\n // and can thus safely be extended.\n prototypeAccessors.isGeneric.get = function () {\n for (var _ in this.meta) { return false }\n return true\n };\n\n // :: () → Transaction\n // Indicate that the editor should scroll the selection into view\n // when updated to the state produced by this transaction.\n Transaction.prototype.scrollIntoView = function scrollIntoView () {\n this.updated |= UPDATED_SCROLL;\n return this\n };\n\n prototypeAccessors.scrolledIntoView.get = function () {\n return (this.updated & UPDATED_SCROLL) > 0\n };\n\n Object.defineProperties( Transaction.prototype, prototypeAccessors );\n\n return Transaction;\n}(Transform));\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self)\n}\n\nvar FieldDesc = function FieldDesc(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n};\n\nvar baseFields = [\n new FieldDesc(\"doc\", {\n init: function init(config) { return config.doc || config.schema.topNodeType.createAndFill() },\n apply: function apply(tr) { return tr.doc }\n }),\n\n new FieldDesc(\"selection\", {\n init: function init(config, instance) { return config.selection || Selection.atStart(instance.doc) },\n apply: function apply(tr) { return tr.selection }\n }),\n\n new FieldDesc(\"storedMarks\", {\n init: function init(config) { return config.storedMarks || null },\n apply: function apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null }\n }),\n\n new FieldDesc(\"scrollToSelection\", {\n init: function init() { return 0 },\n apply: function apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev }\n })\n];\n\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nvar Configuration = function Configuration(schema, plugins) {\n var this$1 = this;\n\n this.schema = schema;\n this.fields = baseFields.concat();\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n if (plugins) { plugins.forEach(function (plugin) {\n if (this$1.pluginsByKey[plugin.key])\n { throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\") }\n this$1.plugins.push(plugin);\n this$1.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n { this$1.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin)); }\n }); }\n};\n\n// ::- The state of a ProseMirror editor is represented by an object\n// of this type. A state is a persistent data structure—it isn't\n// updated, but rather a new state value is computed from an old one\n// using the [`apply`](#state.EditorState.apply) method.\n//\n// A state holds a number of built-in fields, and plugins can\n// [define](#state.PluginSpec.state) additional fields.\nvar EditorState = function EditorState(config) {\n this.config = config;\n};\n\nvar prototypeAccessors$1 = { schema: { configurable: true },plugins: { configurable: true },tr: { configurable: true } };\n\n// doc:: Node\n// The current document.\n\n// selection:: Selection\n// The selection.\n\n// storedMarks:: ?[Mark]\n// A set of marks to apply to the next input. Will be null when\n// no explicit marks have been set.\n\n// :: Schema\n// The schema of the state's document.\nprototypeAccessors$1.schema.get = function () {\n return this.config.schema\n};\n\n// :: [Plugin]\n// The plugins that are active in this state.\nprototypeAccessors$1.plugins.get = function () {\n return this.config.plugins\n};\n\n// :: (Transaction) → EditorState\n// Apply the given transaction to produce a new state.\nEditorState.prototype.apply = function apply (tr) {\n return this.applyTransaction(tr).state\n};\n\n// : (Transaction) → bool\nEditorState.prototype.filterTransaction = function filterTransaction (tr, ignore) {\n if ( ignore === void 0 ) ignore = -1;\n\n for (var i = 0; i < this.config.plugins.length; i++) { if (i != ignore) {\n var plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n { return false }\n } }\n return true\n};\n\n// :: (Transaction) → {state: EditorState, transactions: [Transaction]}\n// Verbose variant of [`apply`](#state.EditorState.apply) that\n// returns the precise transactions that were applied (which might\n// be influenced by the [transaction\n// hooks](#state.PluginSpec.filterTransaction) of\n// plugins) along with the new state.\nEditorState.prototype.applyTransaction = function applyTransaction (rootTr) {\n if (!this.filterTransaction(rootTr)) { return {state: this, transactions: []} }\n\n var trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n var haveNew = false;\n for (var i = 0; i < this.config.plugins.length; i++) {\n var plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n var n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n var tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (var j = 0; j < this.config.plugins.length; j++)\n { seen.push(j < i ? {state: newState, n: trs.length} : {state: this, n: 0}); }\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen) { seen[i] = {state: newState, n: trs.length}; }\n }\n }\n if (!haveNew) { return {state: newState, transactions: trs} }\n }\n};\n\n// : (Transaction) → EditorState\nEditorState.prototype.applyInner = function applyInner (tr) {\n if (!tr.before.eq(this.doc)) { throw new RangeError(\"Applying a mismatched transaction\") }\n var newInstance = new EditorState(this.config), fields = this.config.fields;\n for (var i = 0; i < fields.length; i++) {\n var field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n for (var i$1 = 0; i$1 < applyListeners.length; i$1++) { applyListeners[i$1](this, tr, newInstance); }\n return newInstance\n};\n\n// :: Transaction\n// Start a [transaction](#state.Transaction) from this state.\nprototypeAccessors$1.tr.get = function () { return new Transaction(this) };\n\n// :: (Object) → EditorState\n// Create a new state.\n//\n// config::- Configuration options. Must contain `schema` or `doc` (or both).\n//\n// schema:: ?Schema\n// The schema to use (only relevant if no `doc` is specified).\n//\n// doc:: ?Node\n// The starting document.\n//\n// selection:: ?Selection\n// A valid selection in the document.\n//\n// storedMarks:: ?[Mark]\n// The initial set of [stored marks](#state.EditorState.storedMarks).\n//\n// plugins:: ?[Plugin]\n// The plugins that should be active in this state.\nEditorState.create = function create (config) {\n var $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n var instance = new EditorState($config);\n for (var i = 0; i < $config.fields.length; i++)\n { instance[$config.fields[i].name] = $config.fields[i].init(config, instance); }\n return instance\n};\n\n// :: (Object) → EditorState\n// Create a new state based on this one, but with an adjusted set of\n// active plugins. State fields that exist in both sets of plugins\n// are kept unchanged. Those that no longer exist are dropped, and\n// those that are new are initialized using their\n// [`init`](#state.StateField.init) method, passing in the new\n// configuration object..\n//\n// config::- configuration options\n//\n// plugins:: [Plugin]\n// New set of active plugins.\nEditorState.prototype.reconfigure = function reconfigure (config) {\n var $config = new Configuration(this.schema, config.plugins);\n var fields = $config.fields, instance = new EditorState($config);\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance\n};\n\n// :: (?union, string, number>) → Object\n// Serialize this state to JSON. If you want to serialize the state\n// of plugins, pass an object mapping property names to use in the\n// resulting JSON object to plugin objects. The argument may also be\n// a string or number, in which case it is ignored, to support the\n// way `JSON.stringify` calls `toString` methods.\nEditorState.prototype.toJSON = function toJSON (pluginFields) {\n var result = {doc: this.doc.toJSON(), selection: this.selection.toJSON()};\n if (this.storedMarks) { result.storedMarks = this.storedMarks.map(function (m) { return m.toJSON(); }); }\n if (pluginFields && typeof pluginFields == 'object') { for (var prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n { throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\") }\n var plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON) { result[prop] = state.toJSON.call(plugin, this[plugin.key]); }\n } }\n return result\n};\n\n// :: (Object, Object, ?Object) → EditorState\n// Deserialize a JSON representation of a state. `config` should\n// have at least a `schema` field, and should contain array of\n// plugins to initialize the state with. `pluginFields` can be used\n// to deserialize the state of plugins, by associating plugin\n// instances with the property names they use in the JSON object.\n//\n// config::- configuration options\n//\n// schema:: Schema\n// The schema to use.\n//\n// plugins:: ?[Plugin]\n// The set of active plugins.\nEditorState.fromJSON = function fromJSON (config, json, pluginFields) {\n if (!json) { throw new RangeError(\"Invalid input for EditorState.fromJSON\") }\n if (!config.schema) { throw new RangeError(\"Required config field 'schema' missing\") }\n var $config = new Configuration(config.schema, config.plugins);\n var instance = new EditorState($config);\n $config.fields.forEach(function (field) {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n } else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n } else if (field.name == \"storedMarks\") {\n if (json.storedMarks) { instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON); }\n } else {\n if (pluginFields) { for (var prop in pluginFields) {\n var plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n // This field belongs to a plugin mapped to a JSON field, read it from there.\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return\n }\n } }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance\n};\n\n// Kludge to allow the view to track mappings between different\n// instances of a state.\n//\n// FIXME this is no longer needed as of prosemirror-view 1.9.0,\n// though due to backwards-compat we should probably keep it around\n// for a while (if only as a no-op)\nEditorState.addApplyListener = function addApplyListener (f) {\n applyListeners.push(f);\n};\nEditorState.removeApplyListener = function removeApplyListener (f) {\n var found = applyListeners.indexOf(f);\n if (found > -1) { applyListeners.splice(found, 1); }\n};\n\nObject.defineProperties( EditorState.prototype, prototypeAccessors$1 );\n\nvar applyListeners = [];\n\n// PluginSpec:: interface\n//\n// This is the type passed to the [`Plugin`](#state.Plugin)\n// constructor. It provides a definition for a plugin.\n//\n// props:: ?EditorProps\n// The [view props](#view.EditorProps) added by this plugin. Props\n// that are functions will be bound to have the plugin instance as\n// their `this` binding.\n//\n// state:: ?StateField\n// Allows a plugin to define a [state field](#state.StateField), an\n// extra slot in the state object in which it can keep its own data.\n//\n// key:: ?PluginKey\n// Can be used to make this a keyed plugin. You can have only one\n// plugin with a given key in a given state, but it is possible to\n// access the plugin's configuration and state through the key,\n// without having access to the plugin instance object.\n//\n// view:: ?(EditorView) → Object\n// When the plugin needs to interact with the editor view, or\n// set something up in the DOM, use this field. The function\n// will be called when the plugin's state is associated with an\n// editor view.\n//\n// return::-\n// Should return an object with the following optional\n// properties:\n//\n// update:: ?(view: EditorView, prevState: EditorState)\n// Called whenever the view's state is updated.\n//\n// destroy:: ?()\n// Called when the view is destroyed or receives a state\n// with different plugins.\n//\n// filterTransaction:: ?(Transaction, EditorState) → bool\n// When present, this will be called before a transaction is\n// applied by the state, allowing the plugin to cancel it (by\n// returning false).\n//\n// appendTransaction:: ?(transactions: [Transaction], oldState: EditorState, newState: EditorState) → ?Transaction\n// Allows the plugin to append another transaction to be applied\n// after the given array of transactions. When another plugin\n// appends a transaction after this was called, it is called again\n// with the new state and new transactions—but only the new\n// transactions, i.e. it won't be passed transactions that it\n// already saw.\n\nfunction bindProps(obj, self, target) {\n for (var prop in obj) {\n var val = obj[prop];\n if (val instanceof Function) { val = val.bind(self); }\n else if (prop == \"handleDOMEvents\") { val = bindProps(val, self, {}); }\n target[prop] = val;\n }\n return target\n}\n\n// ::- Plugins bundle functionality that can be added to an editor.\n// They are part of the [editor state](#state.EditorState) and\n// may influence that state and the view that contains it.\nvar Plugin = function Plugin(spec) {\n // :: EditorProps\n // The [props](#view.EditorProps) exported by this plugin.\n this.props = {};\n if (spec.props) { bindProps(spec.props, this, this.props); }\n // :: Object\n // The plugin's [spec object](#state.PluginSpec).\n this.spec = spec;\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n};\n\n// :: (EditorState) → any\n// Extract the plugin's state field from an editor state.\nPlugin.prototype.getState = function getState (state) { return state[this.key] };\n\n// StateField:: interface\n// A plugin spec may provide a state field (under its\n// [`state`](#state.PluginSpec.state) property) of this type, which\n// describes the state it wants to keep. Functions provided here are\n// always called with the plugin instance as their `this` binding.\n//\n// init:: (config: Object, instance: EditorState) → T\n// Initialize the value of the field. `config` will be the object\n// passed to [`EditorState.create`](#state.EditorState^create). Note\n// that `instance` is a half-initialized state instance, and will\n// not have values for plugin fields initialized after this one.\n//\n// apply:: (tr: Transaction, value: T, oldState: EditorState, newState: EditorState) → T\n// Apply the given transaction to this state field, producing a new\n// field value. Note that the `newState` argument is again a partially\n// constructed state does not yet contain the state from plugins\n// coming after this one.\n//\n// toJSON:: ?(value: T) → *\n// Convert this field to JSON. Optional, can be left off to disable\n// JSON serialization for the field.\n//\n// fromJSON:: ?(config: Object, value: *, state: EditorState) → T\n// Deserialize the JSON representation of this field. Note that the\n// `state` argument is again a half-initialized state.\n\nvar keys = Object.create(null);\n\nfunction createKey(name) {\n if (name in keys) { return name + \"$\" + ++keys[name] }\n keys[name] = 0;\n return name + \"$\"\n}\n\n// ::- A key is used to [tag](#state.PluginSpec.key)\n// plugins in a way that makes it possible to find them, given an\n// editor state. Assigning a key does mean only one plugin of that\n// type can be active in a state.\nvar PluginKey = function PluginKey(name) {\nif ( name === void 0 ) name = \"key\";\n this.key = createKey(name); };\n\n// :: (EditorState) → ?Plugin\n// Get the active plugin with this key, if any, from an editor\n// state.\nPluginKey.prototype.get = function get (state) { return state.config.pluginsByKey[this.key] };\n\n// :: (EditorState) → ?any\n// Get the plugin's state from an editor state.\nPluginKey.prototype.getState = function getState (state) { return state[this.key] };\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import { DOMSerializer, DOMParser as ProseMirrorDOMParser } from 'prosemirror-model';\nimport { AllSelection } from 'prosemirror-state';\nconst blockWrappers = [\n 'div', 'ol', 'ul', 'li', 'table', 'tbody', 'thead', 'tfoot', 'td', 'th', 'p',\n 'tr', 'col', 'colgroup', 'article', 'main', 'nav', 'header', 'footer', 'aside', 'section'\n];\n/**\n * Trims the whitespace around the provided block nodes.\n *\n * @param html - Input HTML content\n * @param trimAroundTags - Block elements to which trimming will be applied.\n * Defaults to block nodes of the current default schema:\n * 'div', 'ol', 'ul', 'li', 'table', 'tbody', 'thead', 'tfoot', 'td', 'th', 'p'\n * and additional table and semantic nodes from the default Angular Editor schema:\n * 'tr', 'col', 'colgroup', 'article', 'main', 'nav', 'header', 'footer', 'aside', 'section'\n *\n * @returns The trimmed HTML content\n */\nexport const trimWhitespace = (html, trimAroundTags = blockWrappers) => {\n const tags = trimAroundTags.join('|');\n return html.replace(new RegExp('\\\\s*(<(?:' + tags + ')(?:\\\\s[^>]*?)?>)', 'g'), '$1')\n .replace(new RegExp('(<\\\\/(?:' + tags + ')(?:\\\\s[^>]*?)?>)\\\\s*', 'g'), '$1');\n};\n/**\n * Creates a DocumentFragment from the given HTML content.\n *\n * @param html\n * @returns DocumentFragment\n */\nexport const htmlToFragment = (html) => {\n const template = document.createElement('template');\n let fragment;\n if ('content' in template) {\n template.innerHTML = html;\n fragment = template.content;\n }\n else {\n // Internet Explorer\n const parsedDocument = new DOMParser().parseFromString(html, 'text/html');\n fragment = document.createDocumentFragment();\n const dom = parsedDocument.body;\n while (dom && dom.firstChild) {\n fragment.appendChild(dom.firstChild);\n }\n }\n return fragment;\n};\n/**\n * Creates a DocumentFragment from the given ProseMirrorNode.\n * @param doc ProseMirrorNode\n * @returns DocumentFragment\n */\nexport const pmDocToFragment = (doc) => {\n return DOMSerializer.fromSchema(doc.type.schema).serializeFragment(doc.content);\n};\n/**\n * Creates a ProseMirrorNode from the given DOM element.\n *\n * @param dom\n * @param schema\n * @param parseOptions\n * @returns ProseMirrorNode\n */\nexport const domToPmDoc = (dom, schema, parseOptions) => {\n return ProseMirrorDOMParser.fromSchema(schema).parse(dom, parseOptions);\n};\n/**\n * Creates a ProseMirrorNode from the given HTML content.\n *\n * @param content - The new HTML content.\n * @param schema - The document schema.\n * @param parseOptions - ProseMirror parse options recognized by the `parse` and `parseSlice` methods.\n * @returns - New ProseMirrorNode instance.\n */\nexport const parseContent = (content, schema, parseOptions) => {\n const dom = htmlToFragment(content);\n return domToPmDoc(dom, schema, parseOptions);\n};\n/**\n * A function that serializes the Editor State content as HTML string.\n *\n * @param state - The Editor State\n * @returns - The serialized content\n */\nexport const getHtml = (state) => {\n const fragment = pmDocToFragment(state.doc);\n const container = document.createElement('div');\n container.appendChild(fragment);\n return container.innerHTML;\n};\n/**\n * Replaces the content of the editor with a new one.\n *\n * @param content - The new HTML content.\n * @param commandName - The name of the command.\n * @param parseOptions - ProseMirror parse options recognized by the `parse` and `parseSlice` methods.\n * @returns - Command function that takes an editor `state` and `dispatch` function.\n */\nexport const setHtml = (content, command = 'setHTML', parseOptions = { preserveWhitespace: 'full' }) => (state, dispatch) => dispatch(state.tr\n .setSelection(new AllSelection(state.doc))\n .replaceSelectionWith(parseContent(content, state.schema, parseOptions))\n .setMeta('commandName', command));\n","import { Node, Fragment } from 'prosemirror-model';\nimport { TextSelection, AllSelection, NodeSelection } from 'prosemirror-state';\nimport { parseContent } from './source';\nexport const changeStylesString = (styleText, newStyle) => {\n const styleToChange = newStyle.style;\n const regExp = newStyle.value;\n const newValue = newStyle.newValue;\n if (!styleText) {\n return { changed: false, style: null };\n }\n const styles = styleText.split(/\\s*;\\s*/).filter(s => Boolean(s));\n const filtered = styles.filter(s => {\n const nameValue = s.split(/\\s*:\\s*/);\n return !(nameValue[0].toLowerCase() === styleToChange && regExp.test(nameValue[1]));\n });\n if (newValue) {\n filtered.push(`${styleToChange}: ${newValue}`);\n }\n return {\n style: filtered.join('; ') + (filtered.length ? ';' : ''),\n changed: Boolean(newValue) || filtered.length !== styles.length\n };\n};\n/**\n * Determines if a given node type can be inserted at the current cursor position.\n */\nexport const canInsert = (state, nodeType) => {\n let $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n let index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) {\n return true;\n }\n }\n return false;\n};\nconst getTypeName = (n) => {\n return n instanceof Node ? n.type.name : n.name;\n};\nconst findNthParentNode = (predicate, depth = 1) => {\n return (selection) => {\n const { $from } = selection;\n for (let i = $from.depth; i > 0; i--) {\n const node = $from.node(i);\n if (predicate(node)) {\n depth = depth - 1;\n if (depth === 0) {\n return { depth: i, node };\n }\n }\n }\n };\n};\nexport const findNthParentNodeOfType = (nodeType, depth = 1) => {\n return (selection) => {\n return findNthParentNode((node) => getTypeName(node) === getTypeName(nodeType), depth)(selection);\n };\n};\n/**\n * Inserts the given node at the place of current selection.\n */\nexport const insertNode = (node, scrollIntoView) => (state, dispatch) => {\n const tr = state.tr.replaceSelectionWith(node);\n if (scrollIntoView) {\n tr.scrollIntoView();\n }\n dispatch(tr);\n};\nexport const hasSameMarkup = (dom1, dom2, schema, parseOptions) => {\n const fragment1 = Fragment.from(parseContent(dom1, schema, parseOptions));\n const fragment2 = Fragment.from(parseContent(dom2, schema, parseOptions));\n return fragment1.eq(fragment2);\n};\nexport const getSelectionText = (state) => {\n const sel = state.selection;\n if (sel instanceof TextSelection || sel instanceof AllSelection) {\n const fragment = sel.content().content;\n return fragment.textBetween(0, fragment.size);\n }\n return '';\n};\nexport const getNodeFromSelection = (state) => {\n if (state.selection instanceof NodeSelection) {\n return state.selection.node;\n }\n};\n/**\n * Returns the text from the selection if only text is selected on a single line.\n * If selection contains leaf nodes (br, image) between text elements or\n * text from multiple block nodes, the function will return empty string.\n *\n * Useful for values of the inputs of Link and Find&Replace dialogs where the inputs value has been retrieved from the selection and\n * should be single line text only.\n */\nexport const selectedLineTextOnly = (state) => {\n let result = '', hasLeafs = false;\n const { selection, doc } = state;\n const { $from, $to, from, to } = selection;\n if ($from.sameParent($to)) {\n doc.nodesBetween(from, to, (node) => {\n hasLeafs = hasLeafs || (node.isLeaf && !node.isText);\n });\n if (!hasLeafs) {\n result = getSelectionText(state);\n }\n }\n return result;\n};\n/**\n * Used by ViewHtml/ViewSource dialogs for making the HTML more readable.\n */\nexport const indentHtml = (content) => {\n return content.replace(/<\\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/ig, '\\n')\n .replace(/<(ul|ol)([^>]*)>
  • \\n/ig, '
    \\n')\n .replace(/\\n$/, '');\n};\nexport const shallowEqual = (object1, object2) => {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n return keys1.length === keys2.length &&\n keys1.every(k => object1[k] === object2[k]);\n};\nconst applyToWordDefault = { before: /[^ !,?.\\[\\]{}()]+$/i, after: /^[^ !,?.\\[\\]{}()]+/i };\n/**\n * if options.applyToWord is set, expands the selection to the word where the cursor is and\n * returns modified state and dispatch.\n */\nexport const expandSelection = (state, dispatch, options) => {\n if (!options.applyToWord || !state.selection.empty) {\n return { state, dispatch };\n }\n const applyToWordOptions = options.applyToWord === true ? applyToWordDefault : options.applyToWord;\n let initialPosition = null;\n const tr = state.tr;\n const selection = state.selection;\n const before = selection.$head.nodeBefore;\n const after = selection.$head.nodeAfter;\n if (before && before.type.name === 'text' && before.text && after && after.type.name === 'text' && after.text) {\n const children = [];\n selection.$head.parent.descendants((node, pos) => {\n children.push({ node, pos });\n return false;\n });\n let cursor = selection.$head.parentOffset;\n const nodeIndex = children.findIndex(({ node, pos }) => pos <= cursor && pos + node.nodeSize >= cursor);\n let text = children[nodeIndex].node.text;\n let skip = false;\n for (let i = nodeIndex - 1; i >= 0; i--) {\n const element = children[i];\n if (!skip && element && element.node.type.name === 'text') {\n text = element.node.text + text;\n }\n else {\n skip = true;\n cursor -= element.node.nodeSize;\n }\n }\n for (let i = nodeIndex + 1; i < children.length; i++) {\n const element = children[i];\n if (element && element.node.type.name === 'text') {\n text = text + element.node.text;\n }\n else {\n break;\n }\n }\n const textBefore = text.substring(0, cursor);\n const textAfter = text.substring(cursor);\n const matchBefore = applyToWordOptions.before.exec(textBefore);\n const matchAfter = applyToWordOptions.after.exec(textAfter);\n if (matchBefore && matchAfter) {\n const extendLeft = matchBefore[0].length;\n const extendRight = matchAfter[0].length;\n const pos = initialPosition = selection.from;\n tr.setSelection(TextSelection.create(state.doc, pos - extendLeft, pos + extendRight));\n const cmdState = {\n tr,\n selection: tr.selection,\n doc: tr.doc,\n storedMarks: null,\n schema: tr.doc.type.schema\n };\n const cmdDispatch = tran => {\n tran.setSelection(TextSelection.create(tran.doc, initialPosition));\n dispatch(tran);\n };\n return { state: cmdState, dispatch: cmdDispatch };\n }\n }\n return { state, dispatch };\n};\n/**\n * if options.applyToWord is set, expands the selection to the word where the cursor is and\n * use the modified state for the passed command.\n * Designed to work with toggleInlineFormat, applyInlineStyle and applyLink functions.\n *\n * Example:\n * const applyToWord: boolean|{before: RegExp, after: RegExp} = true;\n * // or applyToWord = { before: /[^ !,?.\\[\\]{}()]+$/i, after: /^[^ !,?.\\[\\]{}()]+/i }};\n *\n * const command = expandToWordWrap(toggleInlineFormat, {...bold, applyToWord );\n * command(view.state, view.dispatch);\n */\nexport const expandToWordWrap = (command, options) => {\n return (state, dispatch, _view) => {\n const { state: cmdState, dispatch: cmdDispatch } = expandSelection(state, dispatch, options);\n return command(options)(cmdState, cmdDispatch);\n };\n};\n","import { RemoveMarkStep } from 'prosemirror-transform';\nimport { MarkType } from 'prosemirror-model';\nexport const markApplies = (doc, ranges, type) => {\n let loop = i => {\n let ref = ranges[i];\n let $from = ref.$from;\n let $to = ref.$to;\n let can = $from.depth === 0 ? doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, node => {\n if (can) {\n return false;\n }\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can) {\n return { v: true };\n }\n };\n for (let i = 0; i < ranges.length; i++) {\n let returned = loop(i);\n if (returned) {\n return returned.v;\n }\n }\n return false;\n};\nexport const toggleMark = (markType, attrs, tr) => (state, dispatch) => {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType)) {\n return false;\n }\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks())) {\n dispatch(tr.removeStoredMark(markType));\n }\n else {\n dispatch(tr.addStoredMark(markType.create(attrs)));\n }\n }\n else {\n let has = false;\n for (let i = 0; !has && i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType);\n }\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n if (has) {\n tr.removeMark($from.pos, $to.pos, markType);\n }\n else {\n tr.addMark($from.pos, $to.pos, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n};\nexport const removeMark = (tr, from, to, mark) => {\n if (mark === void 0) {\n mark = null;\n }\n let matched = [], step = 0;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isInline) {\n return;\n }\n step++;\n let toRemove = null;\n if (mark instanceof MarkType) {\n let found = mark.isInSet(node.marks);\n if (found) {\n toRemove = [found];\n }\n }\n else if (mark) {\n if (mark.isInSet(node.marks)) {\n toRemove = [mark];\n }\n }\n else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n let end = Math.min(pos + node.nodeSize, to);\n for (let i = 0; i < toRemove.length; i++) {\n let style = toRemove[i], found$1 = (void 0);\n for (let j = 0; j < matched.length; j++) {\n let m = matched[j];\n if (m.step === step - 1 && style.eq(m.style)) {\n found$1 = m;\n }\n }\n if (found$1) {\n found$1.to = end;\n found$1.step = step;\n }\n else {\n matched.push({ style: style, from: Math.max(pos, from), to: end, step: step });\n }\n }\n }\n });\n matched.forEach((m) => { return tr.step(new RemoveMarkStep(m.from, m.to, m.style)); });\n return tr;\n};\nexport const removeMarks = (marks, state, dispatch, tr) => {\n let { $cursor, ranges } = state.selection;\n tr = tr || state.tr;\n if ($cursor) {\n marks.forEach(m => {\n if (m.isInSet(state.storedMarks || $cursor.marks())) {\n dispatch(tr.removeStoredMark(m));\n }\n });\n }\n else {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n marks.forEach(m => {\n removeMark(tr, $from.pos, $to.pos, m);\n });\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\nconst toArray = (x) => x instanceof Array ? x : [x];\nexport const removeAllMarks = ({ except = [] } = {}) => (state, dispatch) => {\n const tr = state.tr;\n cleanMarks(tr, { except: toArray(except) });\n if (tr.docChanged) {\n dispatch(tr);\n }\n};\n/**\n * Removes the marks from the selection base on the passed parameter.\n * Requires to dispatch the transaction.\n *\n * @example\n * See `removeAllMarks` or `cleanFormatting` function.\n */\nexport const cleanMarks = (tr, { except }) => {\n const { doc, selection } = tr;\n const schema = doc.type.schema;\n const { empty, ranges } = selection;\n const excludedMarkTypes = (except || []).map(mt => mt.name);\n if (!empty) {\n const marks = Object.keys(schema.marks)\n .map(m => schema.marks[m])\n .filter(mt => excludedMarkTypes.indexOf(mt.name) === -1);\n ranges.forEach(({ $from, $to }) => {\n marks.forEach(mark => tr.removeMark($from.pos, $to.pos, mark));\n });\n }\n};\n/**\n * Checks if a mark exists in the selection.\n * Used for checking the state of bold, italic, ... and unlink tools.\n */\nexport const hasMark = (state, options) => {\n const marks = state.schema.marks;\n const altMarks = (options.altMarks || []).filter(m => marks[m]);\n const altStyle = options.altStyle;\n let { from, $from, to, empty } = state.selection;\n const type = marks[options.mark];\n const doc = state.doc;\n let result = false;\n let currMarks;\n if (empty) {\n currMarks = state.storedMarks || $from.marks();\n result = (type && type.isInSet(currMarks)) || altMarks.some(m => marks[m].isInSet(currMarks));\n }\n else {\n result = (type && doc.rangeHasMark(from, to, type)) || altMarks.some(m => doc.rangeHasMark(from, to, marks[m]));\n }\n if (!result && altStyle && marks.style) {\n return selectionMarks(state, marks.style)\n .some(mark => styleValue(mark, altStyle) !== null);\n }\n return Boolean(result);\n};\nexport const styleValue = (mark, style) => {\n const styleText = (mark && mark.attrs.style) || '';\n const styles = styleText.split(/\\s*;\\s*/).filter(s => Boolean(s));\n for (let i = 0; i < styles.length; i++) {\n const nameValue = styles[i].split(/\\s*:\\s*/);\n if (nameValue[0].toLowerCase() === style.name && style.value.test(nameValue[1])) {\n return nameValue[1];\n }\n }\n return null;\n};\n/**\n * Returns the marks of a specific type for every inline node in the selection.\n */\nexport const selectionMarks = (state, markType) => {\n let { from, $from, to, empty } = state.selection;\n let marks = [];\n if (empty) {\n marks.push(markType.isInSet(state.storedMarks || $from.marks()));\n }\n else {\n state.doc.nodesBetween(from, to, node => {\n if (node.isInline) {\n marks.push(markType.isInSet(node.marks));\n }\n });\n }\n return marks;\n};\n/**\n * Returns the specified mark which wraps the selection.\n * Used by link tools.\n */\nexport const getMark = (state, markType) => {\n const marks = selectionMarks(state, markType);\n const filtered = marks.filter(m => Boolean(m));\n return marks.length === filtered.length ? marks[0] : undefined;\n};\n/**\n * **Deprecated.** Use `selectionMarks` function instead.\n */\nexport const getActiveMarks = (state, markType) => {\n const marks = selectionMarks(state, markType);\n const filtered = marks.filter(m => Boolean(m));\n let hasNodesWithoutMarks = marks.length !== filtered.length;\n return {\n hasNodesWithoutMarks,\n marks: filtered\n };\n};\n","import { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\nimport { changeStylesString, shallowEqual } from './utils';\nimport { markApplies, hasMark, removeMarks, toggleMark, styleValue, selectionMarks } from './mark';\nconst changeStyleFromMark = (marks, toChange) => {\n const styleMark = marks.find(m => m.type.name === 'style');\n const elementStyle = styleMark && styleMark.attrs.style;\n return changeStylesString(elementStyle, toChange);\n};\nconst changeStyleMark = (tr, from, to, attrs, markType) => {\n const mark = markType.create({ style: attrs.style });\n let removed = [], added = [], removing = null, adding = null;\n tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n if (!node.isInline) {\n return;\n }\n let marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n const newStyle = changeStyleFromMark(marks, attrs);\n if (newStyle.changed || attrs.newValue) {\n const style = newStyle.changed ?\n { style: newStyle.style || null } : { style: `${[attrs.style]}: ${attrs.newValue};` };\n const currentMark = markType.isInSet(marks) ? marks.find(m => m.type.name === 'style') : null;\n const newMarkAttrs = currentMark ? Object.assign({}, currentMark.attrs, style) : style;\n const newStyleMark = markType.create(newMarkAttrs);\n let newSet = newStyleMark.addToSet(marks);\n for (let i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to === start && removing.mark.eq(marks[i])) {\n removing.to = end;\n }\n else {\n removing = new RemoveMarkStep(start, end, marks[i]);\n removed.push(removing);\n }\n }\n }\n const previousAdded = adding && adding.to === start;\n const sameAdding = previousAdded && newStyleMark.attrs.style === adding.mark.attrs.style;\n if (previousAdded && sameAdding) {\n adding.to = end;\n }\n else if (Object.keys(newMarkAttrs).some(attrName => newMarkAttrs[attrName] !== null)) {\n adding = new AddMarkStep(start, end, newStyleMark);\n added.push(adding);\n }\n }\n }\n });\n removed.forEach(s => tr.step(s));\n added.forEach(s => tr.step(s));\n return removed.length + added.length > 0;\n};\n/**\n * Used by FontSize and FontName tools for getting their state.\n */\nexport const getInlineStyles = (state, style) => {\n const styleMark = state.schema.marks.style;\n const marks = styleMark ? selectionMarks(state, styleMark) : [];\n return marks.map(mark => styleValue(mark, style)).filter(m => m !== null);\n};\nconst changeStyle = (markType, attrs) => {\n return function (state, dispatch, tr) {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType)) {\n return false;\n }\n let result = false;\n if (dispatch) {\n const transaction = tr || state.tr;\n if ($cursor) {\n const currentMarks = state.storedMarks || $cursor.marks();\n if (markType.isInSet(currentMarks)) {\n const newStyle = changeStyleFromMark(currentMarks, attrs);\n const styleMark = currentMarks.find(m => m.type.name === 'style');\n const newAttrs = Object.assign({}, (styleMark ? styleMark.attrs : {}), { style: newStyle.style || null });\n if (shallowEqual(styleMark.attrs, newAttrs)) {\n return false;\n }\n dispatch(transaction.removeStoredMark(markType));\n if (Object.keys(newAttrs).some(attrName => newAttrs[attrName] !== null)) {\n dispatch(transaction.addStoredMark(markType.create(newAttrs)));\n }\n result = true;\n }\n }\n else {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n result = changeStyleMark(transaction, $from.pos, $to.pos, attrs, markType);\n }\n if (result) {\n transaction.scrollIntoView();\n dispatch(transaction);\n }\n }\n }\n return result;\n };\n};\n/**\n * Used by bold, italic, ... and link commands.\n */\nexport const toggleInlineFormat = (options, tr, markAttrs) => (state, dispatch) => {\n const marks = state.schema.marks;\n const { altStyle, altMarks = [], mark } = options;\n const transaction = tr || state.tr;\n let styleRemoved = false;\n let dispatched = false;\n const markDispatched = () => dispatched = true;\n if (altStyle && marks.style) {\n const cmd = changeStyle(marks.style, { style: altStyle.name, value: altStyle.value });\n styleRemoved = cmd(state, markDispatched, transaction);\n }\n const allMarks = [mark, ...altMarks].filter(m => marks[m]);\n const toRemove = allMarks.map(m => hasMark(state, { mark: m }) && marks[m]).filter(m => m);\n if (toRemove.length) {\n removeMarks(toRemove, state, markDispatched, transaction);\n }\n else {\n if (!styleRemoved) {\n toggleMark(marks[mark], markAttrs, transaction)(state, markDispatched);\n }\n }\n if (dispatched) {\n dispatch(transaction);\n }\n return dispatched;\n};\n/**\n * Used by FontSize, FontName, Color and BackColor commands.\n */\nexport const applyInlineStyle = (options, command) => (state, dispatch) => {\n const marks = state.schema.marks;\n const markType = marks.style;\n const attrs = {\n style: options.style, value: /^.+$/, newValue: options.value\n };\n const tr = state.tr;\n if (command) {\n tr.setMeta('commandName', command);\n }\n tr.setMeta('args', options);\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markType || !markApplies(state.doc, ranges, markType)) {\n return false;\n }\n // Empty selection\n if ($cursor) {\n const marksFromSelection = state.storedMarks || $cursor.marks();\n const currentMark = markType.isInSet(marksFromSelection) ? marksFromSelection.find(m => m.type.name === 'style') : null;\n const newStyles = { style: null };\n if (currentMark && currentMark.attrs.style) {\n const resultStyles = changeStylesString(currentMark.attrs.style, attrs);\n if (resultStyles.changed && resultStyles.style) {\n newStyles.style = resultStyles.style;\n }\n }\n else if (attrs.newValue) {\n newStyles.style = `${[attrs.style]}: ${attrs.newValue};`;\n }\n const newMarkAttrs = currentMark ? Object.assign({}, currentMark.attrs, newStyles) : newStyles;\n if (Object.keys(newMarkAttrs).some(attrName => newMarkAttrs[attrName] !== null)) {\n dispatch(tr.addStoredMark(markType.create(newMarkAttrs)));\n }\n else {\n dispatch(tr.removeStoredMark(markType));\n }\n return true;\n }\n return changeStyle(markType, attrs)(state, dispatch, tr);\n};\n","import { toggleInlineFormat } from './inline-style';\nimport { hasMark, toggleMark, removeMark, selectionMarks } from './mark';\nimport { EditorState } from 'prosemirror-state';\nconst modifyLink = (options, tr) => (state, dispatch) => {\n const { $cursor, from, to } = state.selection;\n const markType = state.schema.marks[options.mark];\n if (!$cursor) {\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isInline && markType.isInSet(node.marks)) {\n tr.removeMark(pos, pos + node.nodeSize, markType);\n tr.addMark(pos, pos + node.nodeSize, markType.create(options.attrs));\n dispatch(tr);\n }\n });\n }\n else {\n const parentNode = $cursor.parent;\n const cursorNodeIndex = $cursor.index();\n const mark = parentNode.child(cursorNodeIndex).marks.find(m => m.type === markType);\n const childCount = parentNode.childCount;\n let linkStart = $cursor.pos - $cursor.textOffset, linkSize = parentNode.child(cursorNodeIndex).nodeSize, index, nodeSize;\n index = cursorNodeIndex - 1;\n while (index >= 0 && mark.isInSet(parentNode.child(index).marks)) {\n nodeSize = parentNode.child(index).nodeSize;\n linkSize += nodeSize;\n linkStart -= nodeSize;\n index -= 1;\n }\n index = cursorNodeIndex + 1;\n while (index < childCount && mark.isInSet(parentNode.child(index).marks)) {\n linkSize += parentNode.child(index).nodeSize;\n index += 1;\n }\n tr.removeMark(linkStart, linkStart + linkSize, markType);\n tr.addMark(linkStart, linkStart + linkSize, markType.create(options.attrs));\n dispatch(tr);\n }\n};\nexport const removeLink = (options, tr) => (state, dispatch) => {\n const { $cursor } = state.selection;\n if (!$cursor) {\n toggleInlineFormat(options, tr)(state, dispatch);\n }\n else {\n const parentNode = $cursor.parent;\n const cursorNodeIndex = $cursor.index();\n const toolMark = state.schema.marks[options.mark];\n const mark = parentNode.child(cursorNodeIndex).marks.find(m => m.type === toolMark);\n const childCount = parentNode.childCount;\n let linkStart = $cursor.pos - $cursor.textOffset, linkSize = parentNode.child(cursorNodeIndex).nodeSize, index, nodeSize;\n index = cursorNodeIndex - 1;\n while (index >= 0 && mark.isInSet(parentNode.child(index).marks)) {\n nodeSize = parentNode.child(index).nodeSize;\n linkSize += nodeSize;\n linkStart -= nodeSize;\n index -= 1;\n }\n index = cursorNodeIndex + 1;\n while (index < childCount && mark.isInSet(parentNode.child(index).marks)) {\n linkSize += parentNode.child(index).nodeSize;\n index += 1;\n }\n dispatch(removeMark(tr || state.tr, linkStart, linkStart + linkSize, mark));\n }\n};\n/**\n * Returns a mark which wraps the selection.\n */\nconst getParentMark = (state, markType) => {\n const marks = selectionMarks(state, markType);\n return marks.length === 1 && marks[0] ? marks[0] : null;\n};\nexport const applyLink = ({ mark, attrs }, commandName = 'link') => (state, dispatch) => {\n const marks = state.schema.marks;\n const tr = state.tr;\n if (commandName) {\n tr.setMeta('commandName', commandName);\n tr.setMeta('args', attrs);\n }\n let dispatched = false;\n const markDispatched = () => dispatched = true;\n if (getParentMark(state, marks[mark])) {\n modifyLink({ mark, attrs }, tr)(state, markDispatched);\n }\n else {\n let nextState = state;\n if (hasMark(state, { mark })) {\n removeLink({ mark, attrs }, tr)(state, markDispatched);\n nextState = EditorState.create({ doc: tr.doc, selection: tr.selection });\n }\n if (dispatched) {\n toggleMark(marks[mark], attrs, tr)(nextState, markDispatched);\n }\n else {\n toggleInlineFormat({ mark: mark }, tr, attrs)(nextState, markDispatched);\n }\n }\n if (dispatched) {\n dispatch(tr);\n }\n return dispatched;\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport { changeStylesString } from './utils';\nimport { ReplaceAroundStep } from 'prosemirror-transform';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport { NodeSelection } from 'prosemirror-state';\n/**\n * @hidden\n */\nconst canChangeType = (stateDoc, pos, type) => {\n let $pos = stateDoc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n};\n/**\n * Changes the type or the attributes of the passed node.\n *\n * @example\n * See `cleanTextBlockFormatting` or `formatBlockElements` function.\n */\nexport const changeTextBlock = (tr, node, nodeType, attrs) => {\n if (!nodeType.isTextblock) {\n return false;\n }\n const { ranges } = tr.selection;\n ranges.forEach(range => {\n const mapFrom = tr.steps.length;\n const from = range.$from.pos;\n const to = range.$to.pos;\n tr.doc.nodesBetween(from, to, (currNode, pos) => {\n if (currNode.eq(node) &&\n currNode.isTextblock &&\n !currNode.hasMarkup(nodeType, attrs) &&\n canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), nodeType)) {\n // Ensure all markup that isn't allowed in the new node type is cleared\n tr.clearIncompatible(tr.mapping.slice(mapFrom).map(pos, 1), nodeType);\n let mapping = tr.mapping.slice(mapFrom);\n let startM = mapping.map(pos, 1), endM = mapping.map(pos + currNode.nodeSize, 1);\n let slice = new Slice(Fragment.from(nodeType.create(attrs, null, currNode.marks)), 0, 0);\n tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, slice, 1, true));\n return false; // this will skip the node children\n }\n });\n });\n};\n/**\n * Traverses the selection and returns the block nodes in it.\n *\n * @example\n * See `cleanTextBlockFormatting` function.\n */\nexport const blockNodes = (state, options = { blocksInSelection: false }) => {\n const { doc, selection } = state;\n let { $from, ranges } = selection;\n const { blocksInSelection } = options;\n const result = [];\n const selNode = selection instanceof NodeSelection ? selection.node : undefined;\n if (selNode) {\n if (selNode.isBlock) {\n result.push(selNode);\n selNode.nodesBetween(0, selNode.content.size, node => {\n if (node.isBlock) {\n result.push(node);\n }\n });\n }\n else if (!blocksInSelection && $from.parent && $from.parent.isBlock) {\n result.push($from.parent);\n }\n }\n else {\n ranges.forEach(range => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n doc.nodesBetween(from, to, (node, pos, _parent, _index) => {\n if (node.isBlock && (!blocksInSelection || (pos >= from && pos + node.content.size + 2 <= to))) {\n result.push(node);\n }\n });\n });\n }\n return result;\n};\nexport const formatBlockElements = (value, commandName) => (state, dispatch) => {\n const blocks = blockNodes(state);\n const nodes = state.schema.nodes;\n const tr = state.tr;\n tr.setMeta('commandName', commandName);\n tr.setMeta('args', { value });\n blocks.forEach(node => {\n if (node.type.isTextblock) {\n if (value === 'p') {\n const _a = node.attrs, { level } = _a, attrs = tslib_1.__rest(_a, [\"level\"]);\n changeTextBlock(tr, node, nodes.paragraph, attrs);\n }\n else if (/^h[1-6]$/i.test(value)) {\n const level = parseInt(value.substr(1), 10);\n changeTextBlock(tr, node, nodes.heading, Object.assign({}, node.attrs, { level }));\n }\n else if (value === 'blockquote') {\n const _b = node.attrs, { level } = _b, attrs = tslib_1.__rest(_b, [\"level\"]);\n changeTextBlock(tr, node, nodes.blockquote, attrs);\n }\n }\n });\n const result = tr.docChanged;\n if (result) {\n dispatch(tr.scrollIntoView());\n }\n return result;\n};\n/**\n * Removes the style and class attributes of text block elements.\n * Requires to dispatch the transaction.\n *\n * @example\n * See `cleanFormatting` function.\n */\nexport const cleanTextBlockFormatting = (tr, options = { blocksInSelection: true }) => {\n const { doc, selection } = tr;\n const { blocksInSelection, blockNodeType } = options;\n const nodes = blockNodes({ doc, selection }, { blocksInSelection });\n const textBlocks = nodes.filter(node => node.isTextblock);\n textBlocks.forEach(node => {\n const _a = node.attrs || {}, { style = '', class: className = '' } = _a, attrs = tslib_1.__rest(_a, [\"style\", \"class\"]);\n const nodeType = blockNodeType || node.type;\n if (style || className || nodeType !== node.type) {\n changeTextBlock(tr, node, nodeType, attrs);\n }\n });\n};\nexport const getBlockFormats = (state) => {\n const blocks = blockNodes(state);\n const nodes = state.schema.nodes;\n const result = [];\n blocks.forEach((node) => {\n if (node.type === nodes.paragraph) {\n result.push('p');\n }\n else if (node.type === nodes.heading) {\n result.push(`h${node.attrs.level}`);\n }\n else if (node.type === nodes.blockquote) {\n // In case the blockquote can have inline content.\n // Will be removed once a blockquote command is implemented.\n result.push('blockquote');\n }\n });\n return result;\n};\nexport const addStyles = (node, stylesToApply) => {\n let currentStyles = node.attrs.style, changedStyleResult, toChange;\n if (currentStyles) {\n stylesToApply.forEach(style => {\n toChange = { style: style.name, value: /^.+$/, newValue: style.value };\n changedStyleResult = changeStylesString(currentStyles, toChange);\n currentStyles = changedStyleResult.changed ? changedStyleResult.style : currentStyles;\n });\n }\n const reducer = (acc, curr) => ((acc && curr.value ? acc + ' ' : '') + curr.value ? `${curr.name}: ${curr.value};` : '');\n currentStyles = currentStyles || stylesToApply.reduce(reducer, '');\n return Object.assign({}, node.attrs, { style: currentStyles || null });\n};\nexport const hasNode = (state, nodeType) => {\n let { from, to } = state.selection;\n let result = false;\n state.doc.nodesBetween(from, to, node => {\n result = result || node.type === nodeType;\n return !result;\n });\n return result;\n};\nexport const parentBlockFormat = (state) => {\n const formats = getBlockFormats(state);\n return new Set(formats).size === 1 ? formats[0] : null;\n};\n/**\n * **Deprecated.** Use `parentBlockFormat` function instead.\n */\nexport const activeNode = (state) => {\n return { tag: parentBlockFormat(state) || '' };\n};\n","import { blockNodes, addStyles, changeTextBlock } from './blockNode';\n/**\n * Aligning block elements in the selection.\n *\n * @returns {boolean} - Returns true if any alignment is applied.\n */\nexport const alignBlocks = (actions, commandName) => (state, dispatch) => {\n const blocks = blockNodes(state);\n const tr = state.tr;\n tr.setMeta('commandName', commandName);\n blocks.forEach(node => {\n if (node.type.isTextblock) {\n let newAttrs = {};\n const action = actions.find(n => n.node === node.type.name);\n if (action) {\n newAttrs = addStyles(node, action.style);\n }\n changeTextBlock(tr, node, node.type, newAttrs);\n }\n });\n const result = tr.docChanged;\n if (result) {\n dispatch(tr.scrollIntoView());\n }\n return result;\n};\nexport const isAligned = (state, actions) => {\n const blocks = blockNodes(state);\n let result = false;\n blocks.forEach(node => {\n if (!result && node.type.isTextblock && node.attrs.style) {\n const action = actions.find(a => a.node === node.type.name);\n if (action) {\n result = action.style.every(style => {\n return !!style.value && new RegExp(`${style.name}:\\\\s?${style.value}`, 'i').test(node.attrs.style);\n });\n }\n }\n });\n return result;\n};\n","import { cleanTextBlockFormatting } from './blockNode';\nimport { cleanMarks } from './mark';\n/**\n * A command which removes the inline formatting, class and style attributes of paragraph and heading elements in the selection.\n */\nexport const cleanFormatting = (options = { blocksInSelection: true }) => (state, dispatch) => {\n const tr = state.tr;\n const { blocksInSelection, blockNodeType, exceptMarks } = options;\n const except = (exceptMarks || [state.schema.marks.link]).filter(Boolean);\n cleanMarks(tr, { except });\n cleanTextBlockFormatting(tr, { blocksInSelection, blockNodeType });\n const result = tr.docChanged;\n if (result && dispatch) {\n dispatch(tr);\n }\n return result;\n};\n","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\n\nvar olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n\n// :: NodeSpec\n// An ordered list [node spec](#model.NodeSpec). Has a single\n// attribute, `order`, which determines the number at which the list\n// starts counting, and defaults to 1. Represented as an `
      `\n// element.\nvar orderedList = {\n attrs: {order: {default: 1}},\n parseDOM: [{tag: \"ol\", getAttrs: function getAttrs(dom) {\n return {order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1}\n }}],\n toDOM: function toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", {start: node.attrs.order}, 0]\n }\n};\n\n// :: NodeSpec\n// A bullet list node spec, represented in the DOM as `
        `.\nvar bulletList = {\n parseDOM: [{tag: \"ul\"}],\n toDOM: function toDOM() { return ulDOM }\n};\n\n// :: NodeSpec\n// A list item (`
      • `) spec.\nvar listItem = {\n parseDOM: [{tag: \"li\"}],\n toDOM: function toDOM() { return liDOM },\n defining: true\n};\n\nfunction add(obj, props) {\n var copy = {};\n for (var prop in obj) { copy[prop] = obj[prop]; }\n for (var prop$1 in props) { copy[prop$1] = props[prop$1]; }\n return copy\n}\n\n// :: (OrderedMap, string, ?string) → OrderedMap\n// Convenience function for adding list-related node types to a map\n// specifying the nodes for a schema. Adds\n// [`orderedList`](#schema-list.orderedList) as `\"ordered_list\"`,\n// [`bulletList`](#schema-list.bulletList) as `\"bullet_list\"`, and\n// [`listItem`](#schema-list.listItem) as `\"list_item\"`.\n//\n// `itemContent` determines the content expression for the list items.\n// If you want the commands defined in this module to apply to your\n// list structure, it should have a shape like `\"paragraph block*\"` or\n// `\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\n// given to assign a group name to the list node types, for example\n// `\"block\"`.\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, {content: \"list_item+\", group: listGroup}),\n bullet_list: add(bulletList, {content: \"list_item+\", group: listGroup}),\n list_item: add(listItem, {content: itemContent})\n })\n}\n\n// :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command function that wraps the selection in a list with\n// the given type an attributes. If `dispatch` is null, only return a\n// value to indicate whether this is possible, but don't actually\n// perform the change.\nfunction wrapInList(listType, attrs) {\n return function(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to), doJoin = false, outerRange = range;\n if (!range) { return false }\n // This is at the top of an existing list item\n if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if ($from.index(range.depth - 1) == 0) { return false }\n var $insert = state.doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n { range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth); }\n doJoin = true;\n }\n var wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap) { return false }\n if (dispatch) { dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView()); }\n return true\n }\n}\n\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n var content = Fragment.empty;\n for (var i = wrappers.length - 1; i >= 0; i--)\n { content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content)); }\n\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end,\n new Slice(content, 0, 0), wrappers.length, true));\n\n var found = 0;\n for (var i$1 = 0; i$1 < wrappers.length; i$1++) { if (wrappers[i$1].type == listType) { found = i$1 + 1; } }\n var splitDepth = wrappers.length - found;\n\n var splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (var i$2 = range.startIndex, e = range.endIndex, first = true; i$2 < e; i$2++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i$2).nodeSize;\n }\n return tr\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Build a command that splits a non-empty textblock at the top level\n// of a list item by also splitting that list item.\nfunction splitListItem(itemType) {\n return function(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var node = ref.node;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) { return false }\n var grandParent = $from.node(-1);\n if (grandParent.type != itemType) { return false }\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 2 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1) { return false }\n if (dispatch) {\n var wrap = Fragment.empty;\n var depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (var d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n { wrap = Fragment.from($from.node(d).copy(wrap)); }\n var depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n var start = $from.before($from.depth - (depthBefore - 1));\n var tr$1 = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n var sel = -1;\n tr$1.doc.nodesBetween(start, tr$1.doc.content.size, function (node, pos) {\n if (sel > -1) { return false }\n if (node.isTextblock && node.content.size == 0) { sel = pos + 1; }\n });\n if (sel > -1) { tr$1.setSelection(state.selection.constructor.near(tr$1.doc.resolve(sel))); }\n dispatch(tr$1.scrollIntoView());\n }\n return true\n }\n var nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n var tr = state.tr.delete($from.pos, $to.pos);\n var types = nextType && [null, {type: nextType}];\n if (!canSplit(tr.doc, $from.pos, 2, types)) { return false }\n if (dispatch) { dispatch(tr.split($from.pos, 2, types).scrollIntoView()); }\n return true\n }\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to lift the list item around the selection up into\n// a wrapping list.\nfunction liftListItem(itemType) {\n return function(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to, function (node) { return node.childCount && node.firstChild.type == itemType; });\n if (!range) { return false }\n if (!dispatch) { return true }\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n { return liftToOuterList(state, dispatch, itemType, range) }\n else // Outer list node\n { return liftOutOfList(state, dispatch, range) }\n }\n}\n\nfunction liftToOuterList(state, dispatch, itemType, range) {\n var tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList,\n new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n dispatch(tr.lift(range, liftTarget(range)).scrollIntoView());\n return true\n}\n\nfunction liftOutOfList(state, dispatch, range) {\n var tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (var pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n var $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize) { return false }\n var atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n var parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1,\n item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n { return false }\n var start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1,\n new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))),\n atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true\n}\n\n// :: (NodeType) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command to sink the list item around the selection down\n// into an inner list.\nfunction sinkListItem(itemType) {\n return function(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to, function (node) { return node.childCount && node.firstChild.type == itemType; });\n if (!range) { return false }\n var startIndex = range.startIndex;\n if (startIndex == 0) { return false }\n var parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType) { return false }\n\n if (dispatch) {\n var nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n var inner = Fragment.from(nestedBefore ? itemType.create() : null);\n var slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))),\n nestedBefore ? 3 : 1, 0);\n var before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after,\n before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true\n }\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, wrapInList };\n","export const listsTypes = {\n orderedList: 'ordered_list',\n bulletList: 'bullet_list',\n listItem: 'list_item'\n};\n/**\n * The object of the OrderedList tool settings.\n */\nexport const orderedList = {\n listType: listsTypes.orderedList,\n types: Object.assign({}, listsTypes)\n};\n/**\n * The object of the UnorderedList tool settings.\n */\nexport const bulletList = {\n listType: listsTypes.bulletList,\n types: Object.assign({}, listsTypes)\n};\n","import { listsTypes } from './list-settings';\n/**\n * The object of the Indent tool settings.\n */\nexport const indentRules = {\n nodes: [{\n node: 'paragraph',\n style: 'margin-left',\n rtlStyle: 'margin-right',\n step: 30,\n unit: 'px'\n }, {\n node: 'heading',\n style: 'margin-left',\n rtlStyle: 'margin-right',\n step: 30,\n unit: 'px'\n }],\n listsTypes: Object.assign({}, listsTypes)\n};\n/**\n * The object of the Outdent tool settings.\n */\nexport const outdentRules = {\n nodes: [{\n node: 'paragraph',\n style: 'margin-left',\n rtlStyle: 'margin-right',\n step: -30,\n unit: 'px'\n }, {\n node: 'heading',\n style: 'margin-left',\n rtlStyle: 'margin-right',\n step: -30,\n unit: 'px'\n }],\n listsTypes: Object.assign({}, listsTypes)\n};\n","import { liftTarget, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport { NodeSelection, Selection, AllSelection, TextSelection } from 'prosemirror-state';\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Delete the selection, if there is one.\nfunction deleteSelection(state, dispatch) {\n if (state.selection.empty) { return false }\n if (dispatch) { dispatch(state.tr.deleteSelection().scrollIntoView()); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// If the selection is empty and at the start of a textblock, try to\n// reduce the distance between that block and the one before it—if\n// there's a block directly before it that can be joined, join them.\n// If not, try to move the selected block closer to the next one in\n// the document structure by lifting it out of its parent or moving it\n// into a parent of the previous block. Will use the view for accurate\n// (bidi-aware) start-of-textblock detection if given.\nfunction joinBackward(state, dispatch, view) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state)\n : $cursor.parentOffset > 0))\n { return false }\n\n var $cut = findCutBefore($cursor);\n\n // If there is no node before this, try to lift\n if (!$cut) {\n var range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null) { return false }\n if (dispatch) { dispatch(state.tr.lift(range, target).scrollIntoView()); }\n return true\n }\n\n var before = $cut.nodeBefore;\n // Apply the joining algorithm\n if (!before.type.spec.isolating && deleteBarrier(state, $cut, dispatch))\n { return true }\n\n // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n if (dispatch) {\n var tr = state.tr.deleteRange($cursor.before(), $cursor.after());\n tr.setSelection(textblockAt(before, \"end\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1)\n : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true\n }\n\n // If the node before is an atom, delete it\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch) { dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView()); }\n return true\n }\n\n return false\n}\n\nfunction textblockAt(node, side, only) {\n for (; node; node = (side == \"start\" ? node.firstChild : node.lastChild)) {\n if (node.isTextblock) { return true }\n if (only && node.childCount != 1) { return false }\n }\n return false\n}\n\n// :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// When the selection is empty and at the start of a textblock, select\n// the node before that textblock, if possible. This is intended to be\n// bound to keys like backspace, after\n// [`joinBackward`](#commands.joinBackward) or other deleting\n// commands, as a fall-back behavior when the schema doesn't allow\n// deletion at the selected point.\nfunction selectNodeBackward(state, dispatch, view) {\n var ref = state.selection;\n var $head = ref.$head;\n var empty = ref.empty;\n var $cut = $head;\n if (!empty) { return false }\n\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0) { return false }\n $cut = findCutBefore($head);\n }\n var node = $cut && $cut.nodeBefore;\n if (!node || !NodeSelection.isSelectable(node)) { return false }\n if (dispatch)\n { dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView()); }\n return true\n}\n\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating) { for (var i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0) { return $pos.doc.resolve($pos.before(i + 1)) }\n if ($pos.node(i).type.spec.isolating) { break }\n } }\n return null\n}\n\n// :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// If the selection is empty and the cursor is at the end of a\n// textblock, try to reduce or remove the boundary between that block\n// and the one after it, either by joining them or by moving the other\n// block closer to this one in the tree structure. Will use the view\n// for accurate start-of-textblock detection if given.\nfunction joinForward(state, dispatch, view) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state)\n : $cursor.parentOffset < $cursor.parent.content.size))\n { return false }\n\n var $cut = findCutAfter($cursor);\n\n // If there is no node after this, there's nothing to do\n if (!$cut) { return false }\n\n var after = $cut.nodeAfter;\n // Try the joining algorithm\n if (deleteBarrier(state, $cut, dispatch)) { return true }\n\n // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n if (dispatch) {\n var tr = state.tr.deleteRange($cursor.before(), $cursor.after());\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1)\n : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n return true\n }\n\n // If the next node is an atom, delete it\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch) { dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView()); }\n return true\n }\n\n return false\n}\n\n// :: (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// When the selection is empty and at the end of a textblock, select\n// the node coming after that textblock, if possible. This is intended\n// to be bound to keys like delete, after\n// [`joinForward`](#commands.joinForward) and similar deleting\n// commands, to provide a fall-back behavior when the schema doesn't\n// allow deletion at the selected point.\nfunction selectNodeForward(state, dispatch, view) {\n var ref = state.selection;\n var $head = ref.$head;\n var empty = ref.empty;\n var $cut = $head;\n if (!empty) { return false }\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size)\n { return false }\n $cut = findCutAfter($head);\n }\n var node = $cut && $cut.nodeAfter;\n if (!node || !NodeSelection.isSelectable(node)) { return false }\n if (dispatch)\n { dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView()); }\n return true\n}\n\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating) { for (var i = $pos.depth - 1; i >= 0; i--) {\n var parent = $pos.node(i);\n if ($pos.index(i) + 1 < parent.childCount) { return $pos.doc.resolve($pos.after(i + 1)) }\n if (parent.type.spec.isolating) { break }\n } }\n return null\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Join the selected block or, if there is a text selection, the\n// closest ancestor block of the selection that can be joined, with\n// the sibling above it.\nfunction joinUp(state, dispatch) {\n var sel = state.selection, nodeSel = sel instanceof NodeSelection, point;\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from)) { return false }\n point = sel.from;\n } else {\n point = joinPoint(state.doc, sel.from, -1);\n if (point == null) { return false }\n }\n if (dispatch) {\n var tr = state.tr.join(point);\n if (nodeSel) { tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize)); }\n dispatch(tr.scrollIntoView());\n }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Join the selected block, or the closest ancestor of the selection\n// that can be joined, with the sibling after it.\nfunction joinDown(state, dispatch) {\n var sel = state.selection, point;\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to)) { return false }\n point = sel.to;\n } else {\n point = joinPoint(state.doc, sel.to, 1);\n if (point == null) { return false }\n }\n if (dispatch)\n { dispatch(state.tr.join(point).scrollIntoView()); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Lift the selected block, or the closest ancestor block of the\n// selection that can be lifted, out of its parent node.\nfunction lift(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to), target = range && liftTarget(range);\n if (target == null) { return false }\n if (dispatch) { dispatch(state.tr.lift(range, target).scrollIntoView()); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// If the selection is in a node whose type has a truthy\n// [`code`](#model.NodeSpec.code) property in its spec, replace the\n// selection with a newline character.\nfunction newlineInCode(state, dispatch) {\n var ref = state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) { return false }\n if (dispatch) { dispatch(state.tr.insertText(\"\\n\").scrollIntoView()); }\n return true\n}\n\nfunction defaultBlockAt(match) {\n for (var i = 0; i < match.edgeCount; i++) {\n var ref = match.edge(i);\n var type = ref.type;\n if (type.isTextblock && !type.hasRequiredAttrs()) { return type }\n }\n return null\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// When the selection is in a node with a truthy\n// [`code`](#model.NodeSpec.code) property in its spec, create a\n// default block after the code block, and move the cursor there.\nfunction exitCode(state, dispatch) {\n var ref = state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor)) { return false }\n var above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt(above.contentMatchAt(after));\n if (!above.canReplaceWith(after, after, type)) { return false }\n if (dispatch) {\n var pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// If a block node is selected, create an empty paragraph before (if\n// it is its parent's first child) or after it.\nfunction createParagraphNear(state, dispatch) {\n var sel = state.selection;\n var $from = sel.$from;\n var $to = sel.$to;\n if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent) { return false }\n var type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n if (!type || !type.isTextblock) { return false }\n if (dispatch) {\n var side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n var tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// If the cursor is in an empty textblock that can be lifted, lift the\n// block.\nfunction liftEmptyBlock(state, dispatch) {\n var ref = state.selection;\n var $cursor = ref.$cursor;\n if (!$cursor || $cursor.parent.content.size) { return false }\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n var before = $cursor.before();\n if (canSplit(state.doc, before)) {\n if (dispatch) { dispatch(state.tr.split(before).scrollIntoView()); }\n return true\n }\n }\n var range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null) { return false }\n if (dispatch) { dispatch(state.tr.lift(range, target).scrollIntoView()); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Split the parent block of the selection. If the selection is a text\n// selection, also delete its content.\nfunction splitBlock(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos)) { return false }\n if (dispatch) { dispatch(state.tr.split($from.pos).scrollIntoView()); }\n return true\n }\n\n if (!$from.parent.isBlock) { return false }\n\n if (dispatch) {\n var atEnd = $to.parentOffset == $to.parent.content.size;\n var tr = state.tr;\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection) { tr.deleteSelection(); }\n var deflt = $from.depth == 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n var types = atEnd && deflt ? [{type: deflt}] : null;\n var can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt && [{type: deflt}])) {\n types = [{type: deflt}];\n can = true;\n }\n if (can) {\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (!atEnd && !$from.parentOffset && $from.parent.type != deflt) {\n var first = tr.mapping.map($from.before()), $first = tr.doc.resolve(first);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt))\n { tr.setNodeMarkup(tr.mapping.map($from.before()), deflt); }\n }\n }\n dispatch(tr.scrollIntoView());\n }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Acts like [`splitBlock`](#commands.splitBlock), but without\n// resetting the set of active marks at the cursor.\nfunction splitBlockKeepMarks(state, dispatch) {\n return splitBlock(state, dispatch && (function (tr) {\n var marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks) { tr.ensureMarks(marks); }\n dispatch(tr);\n }))\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Move the selection to the node wrapping the current selection, if\n// any. (Will not select the document node.)\nfunction selectParentNode(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var to = ref.to;\n var pos;\n var same = $from.sharedDepth(to);\n if (same == 0) { return false }\n pos = $from.before(same);\n if (dispatch) { dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos))); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Select the whole document.\nfunction selectAll(state, dispatch) {\n if (dispatch) { dispatch(state.tr.setSelection(new AllSelection(state.doc))); }\n return true\n}\n\nfunction joinMaybeClear(state, $pos, dispatch) {\n var before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index();\n if (!before || !after || !before.type.compatibleContent(after.type)) { return false }\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch) { dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView()); }\n return true\n }\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))\n { return false }\n if (dispatch)\n { dispatch(state.tr\n .clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount))\n .join($pos.pos)\n .scrollIntoView()); }\n return true\n}\n\nfunction deleteBarrier(state, $cut, dispatch) {\n var before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;\n if (before.type.spec.isolating || after.type.spec.isolating) { return false }\n if (joinMaybeClear(state, $cut, dispatch)) { return true }\n\n var canDelAfter = $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n if (canDelAfter &&\n (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) &&\n match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n var end = $cut.pos + after.nodeSize, wrap = Fragment.empty;\n for (var i = conn.length - 1; i >= 0; i--)\n { wrap = Fragment.from(conn[i].create(null, wrap)); }\n wrap = Fragment.from(before.copy(wrap));\n var tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n var joinAt = end + 2 * conn.length;\n if (canJoin(tr.doc, joinAt)) { tr.join(joinAt); }\n dispatch(tr.scrollIntoView());\n }\n return true\n }\n\n var selAfter = Selection.findFrom($cut, 1);\n var range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);\n if (target != null && target >= $cut.depth) {\n if (dispatch) { dispatch(state.tr.lift(range, target).scrollIntoView()); }\n return true\n }\n\n if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n var at = before, wrap$1 = [];\n for (;;) {\n wrap$1.push(at);\n if (at.isTextblock) { break }\n at = at.lastChild;\n }\n var afterText = after, afterDepth = 1;\n for (; !afterText.isTextblock; afterText = afterText.firstChild) { afterDepth++; }\n if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n if (dispatch) {\n var end$1 = Fragment.empty;\n for (var i$1 = wrap$1.length - 1; i$1 >= 0; i$1--) { end$1 = Fragment.from(wrap$1[i$1].copy(end$1)); }\n var tr$1 = state.tr.step(new ReplaceAroundStep($cut.pos - wrap$1.length, $cut.pos + after.nodeSize,\n $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth,\n new Slice(end$1, wrap$1.length, 0), 0, true));\n dispatch(tr$1.scrollIntoView());\n }\n return true\n }\n }\n\n return false\n}\n\n// Parameterized commands\n\n// :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Wrap the selection in a node of the given type with the given\n// attributes.\nfunction wrapIn(nodeType, attrs) {\n return function(state, dispatch) {\n var ref = state.selection;\n var $from = ref.$from;\n var $to = ref.$to;\n var range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping) { return false }\n if (dispatch) { dispatch(state.tr.wrap(range, wrapping).scrollIntoView()); }\n return true\n }\n}\n\n// :: (NodeType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command that tries to set the selected textblocks to the\n// given node type with the given attributes.\nfunction setBlockType(nodeType, attrs) {\n return function(state, dispatch) {\n var ref = state.selection;\n var from = ref.from;\n var to = ref.to;\n var applicable = false;\n state.doc.nodesBetween(from, to, function (node, pos) {\n if (applicable) { return false }\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) { return }\n if (node.type == nodeType) {\n applicable = true;\n } else {\n var $pos = state.doc.resolve(pos), index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n if (!applicable) { return false }\n if (dispatch) { dispatch(state.tr.setBlockType(from, to, nodeType, attrs).scrollIntoView()); }\n return true\n }\n}\n\nfunction markApplies(doc, ranges, type) {\n var loop = function ( i ) {\n var ref = ranges[i];\n var $from = ref.$from;\n var $to = ref.$to;\n var can = $from.depth == 0 ? doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, function (node) {\n if (can) { return false }\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can) { return { v: true } }\n };\n\n for (var i = 0; i < ranges.length; i++) {\n var returned = loop( i );\n\n if ( returned ) return returned.v;\n }\n return false\n}\n\n// :: (MarkType, ?Object) → (state: EditorState, dispatch: ?(tr: Transaction)) → bool\n// Create a command function that toggles the given mark with the\n// given attributes. Will return `false` when the current selection\n// doesn't support that mark. This will remove the mark if any marks\n// of that type exist in the selection, or add it otherwise. If the\n// selection is empty, this applies to the [stored\n// marks](#state.EditorState.storedMarks) instead of a range of the\n// document.\nfunction toggleMark(markType, attrs) {\n return function(state, dispatch) {\n var ref = state.selection;\n var empty = ref.empty;\n var $cursor = ref.$cursor;\n var ranges = ref.ranges;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType)) { return false }\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks()))\n { dispatch(state.tr.removeStoredMark(markType)); }\n else\n { dispatch(state.tr.addStoredMark(markType.create(attrs))); }\n } else {\n var has = false, tr = state.tr;\n for (var i = 0; !has && i < ranges.length; i++) {\n var ref$1 = ranges[i];\n var $from = ref$1.$from;\n var $to = ref$1.$to;\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType);\n }\n for (var i$1 = 0; i$1 < ranges.length; i$1++) {\n var ref$2 = ranges[i$1];\n var $from$1 = ref$2.$from;\n var $to$1 = ref$2.$to;\n if (has) {\n tr.removeMark($from$1.pos, $to$1.pos, markType);\n } else {\n var from = $from$1.pos, to = $to$1.pos, start = $from$1.nodeAfter, end = $to$1.nodeBefore;\n var spaceStart = start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n var spaceEnd = end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n if (from + spaceStart < to) { from += spaceStart; to -= spaceEnd; }\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true\n }\n}\n\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return function (tr) {\n if (!tr.isGeneric) { return dispatch(tr) }\n\n var ranges = [];\n for (var i = 0; i < tr.mapping.maps.length; i++) {\n var map = tr.mapping.maps[i];\n for (var j = 0; j < ranges.length; j++)\n { ranges[j] = map.map(ranges[j]); }\n map.forEach(function (_s, _e, from, to) { return ranges.push(from, to); });\n }\n\n // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n var joinable = [];\n for (var i$1 = 0; i$1 < ranges.length; i$1 += 2) {\n var from = ranges[i$1], to = ranges[i$1 + 1];\n var $from = tr.doc.resolve(from), depth = $from.sharedDepth(to), parent = $from.node(depth);\n for (var index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n var after = parent.maybeChild(index);\n if (!after) { break }\n if (index && joinable.indexOf(pos) == -1) {\n var before = parent.child(index - 1);\n if (before.type == after.type && isJoinable(before, after))\n { joinable.push(pos); }\n }\n pos += after.nodeSize;\n }\n }\n // Join the joinable points\n joinable.sort(function (a, b) { return a - b; });\n for (var i$2 = joinable.length - 1; i$2 >= 0; i$2--) {\n if (canJoin(tr.doc, joinable[i$2])) { tr.join(joinable[i$2]); }\n }\n dispatch(tr);\n }\n}\n\n// :: ((state: EditorState, ?(tr: Transaction)) → bool, union<(before: Node, after: Node) → bool, [string]>) → (state: EditorState, ?(tr: Transaction)) → bool\n// Wrap a command so that, when it produces a transform that causes\n// two joinable nodes to end up next to each other, those are joined.\n// Nodes are considered joinable when they are of the same type and\n// when the `isJoinable` predicate returns true for them or, if an\n// array of strings was passed, if their node type name is in that\n// array.\nfunction autoJoin(command, isJoinable) {\n if (Array.isArray(isJoinable)) {\n var types = isJoinable;\n isJoinable = function (node) { return types.indexOf(node.type.name) > -1; };\n }\n return function (state, dispatch, view) { return command(state, dispatch && wrapDispatchForJoin(dispatch, isJoinable), view); }\n}\n\n// :: (...[(EditorState, ?(tr: Transaction), ?EditorView) → bool]) → (EditorState, ?(tr: Transaction), ?EditorView) → bool\n// Combine a number of command functions into a single function (which\n// calls them one by one until one returns true).\nfunction chainCommands() {\n var commands = [], len = arguments.length;\n while ( len-- ) commands[ len ] = arguments[ len ];\n\n return function(state, dispatch, view) {\n for (var i = 0; i < commands.length; i++)\n { if (commands[i](state, dispatch, view)) { return true } }\n return false\n }\n}\n\nvar backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nvar del = chainCommands(deleteSelection, joinForward, selectNodeForward);\n\n// :: Object\n// A basic keymap containing bindings not specific to any schema.\n// Binds the following keys (when multiple commands are listed, they\n// are chained with [`chainCommands`](#commands.chainCommands)):\n//\n// * **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n// * **Mod-Enter** to `exitCode`\n// * **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n// * **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n// * **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n// * **Mod-a** to `selectAll`\nvar pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Shift-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n};\n\n// :: Object\n// A copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n// **Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n// **Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\n// Ctrl-Delete.\nvar macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"]\n};\nfor (var key in pcBaseKeymap) { macBaseKeymap[key] = pcBaseKeymap[key]; }\n\n// declare global: os, navigator\nvar mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform)\n : typeof os != \"undefined\" ? os.platform() == \"darwin\" : false;\n\n// :: Object\n// Depending on the detected platform, this will hold\n// [`pcBasekeymap`](#commands.pcBaseKeymap) or\n// [`macBaseKeymap`](#commands.macBaseKeymap).\nvar baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\n\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, setBlockType, splitBlock, splitBlockKeepMarks, toggleMark, wrapIn };\n","import { wrapIn } from 'prosemirror-commands';\nexport const blockquote = (state, dispatch) => {\n return wrapIn(state.schema.nodes.blockquote)(state, dispatch);\n};\nexport const liftBlockquote = (state, dispatch) => {\n const { $from, $to } = state.selection;\n const nodeType = state.schema.nodes.blockquote;\n const doc = state.doc;\n let target = -1;\n const range = $from.blockRange($to);\n if (range) {\n doc.nodesBetween(range.start, range.end, (node, pos, _parent, _index) => {\n if (node.type === nodeType) {\n target = pos;\n }\n });\n }\n const result = target !== -1;\n if (dispatch && result) {\n dispatch(state.tr.lift(range, doc.resolve(target).depth));\n }\n return result;\n};\n","import { sinkListItem, liftListItem } from 'prosemirror-schema-list';\nimport { indentRules, outdentRules } from './config/indent-rules';\nimport { blockNodes, addStyles, changeTextBlock, hasNode } from './blockNode';\nimport { findNthParentNodeOfType } from './utils';\nimport { liftBlockquote } from './blockquote';\n/**\n * Indenting block elements in the selection.\n *\n * @returns {boolean} - Returns true if any indentation is applied.\n */\nexport const indentBlocks = (actions, command, dir) => (state, dispatch) => {\n const blocks = blockNodes(state);\n const tr = state.tr;\n tr.setMeta('commandName', command);\n blocks.forEach(node => {\n if (node.type.isTextblock) {\n let newAttrs;\n const action = actions.find(a => a.node === node.type.name);\n if (action) {\n const style = dir === 'rtl' ? action.rtlStyle : action.style;\n const newStyle = {\n name: style,\n value: action.step > 0 ? `${action.step}${action.unit}` : ''\n };\n if (node.attrs.style) {\n const re = new RegExp(`${style}:\\\\s?(\\\\d+)${action.unit}`, 'i');\n const match = node.attrs.style.match(re);\n if (match) {\n let newMargin = parseFloat(match[1]) + action.step;\n newMargin = newMargin <= 0 ? '' : newMargin;\n newStyle.value = `${newMargin}${newMargin ? action.unit : ''}`;\n }\n }\n newAttrs = addStyles(node, [newStyle]);\n }\n if (newAttrs) {\n changeTextBlock(tr, node, node.type, newAttrs);\n }\n }\n });\n const result = tr.docChanged;\n if (result) {\n dispatch(tr.scrollIntoView());\n }\n return result;\n};\nexport const isIndented = (state, rules, dir) => {\n const blocks = blockNodes(state);\n let result = false;\n blocks.forEach(node => {\n if (!result && node.type.isTextblock && node.attrs.style) {\n const action = rules.find(a => a.node === node.type.name);\n if (action) {\n const style = dir === 'rtl' ? action.rtlStyle : action.style;\n const reIndent = new RegExp(`${style}:\\\\s?\\\\d+${action.unit}`, 'i');\n result = reIndent.test(node.attrs.style);\n }\n }\n });\n return result;\n};\nexport const canIndentAsListItem = (state, nodeType) => {\n return sinkListItem(nodeType)(state);\n};\nexport const canOutdentAsListItem = (state, rules) => {\n const listItem = state.schema.nodes[rules.listsTypes.listItem];\n const orderedList = state.schema.nodes[rules.listsTypes.orderedList];\n const bulletList = state.schema.nodes[rules.listsTypes.bulletList];\n const isNestedInOL = !!findNthParentNodeOfType(orderedList, 2)(state.selection);\n const isNestedInUL = !!findNthParentNodeOfType(bulletList, 2)(state.selection);\n return (isNestedInOL || isNestedInUL) && liftListItem(listItem)(state);\n};\nexport const canBeIndented = (state, rules) => {\n const nodes = state.schema.nodes;\n const listItem = nodes[indentRules.listsTypes.listItem];\n return ((isIndented(state, rules.nodes) || indentRules.nodes.some(rule => nodes[rule.node] && hasNode(state, nodes[rule.node]))) &&\n !hasNode(state, listItem));\n};\nexport const indent = (state, dispatch) => {\n const listItem = state.schema.nodes[indentRules.listsTypes.listItem];\n const isIndentableBlock = canBeIndented(state, indentRules);\n if (canIndentAsListItem(state, listItem)) {\n sinkListItem(listItem)(state, dispatch);\n }\n else if (isIndentableBlock) {\n indentBlocks(indentRules.nodes)(state, dispatch);\n }\n};\nexport const outdent = (state, dispatch) => {\n const nodes = state.schema.nodes;\n const listItem = nodes[outdentRules.listsTypes.listItem];\n const isIndentableBlock = canBeIndented(state, outdentRules);\n if (hasNode(state, nodes.blockquote)) {\n liftBlockquote(state, dispatch);\n }\n else if (canOutdentAsListItem(state, outdentRules)) {\n liftListItem(listItem)(state, dispatch);\n }\n else if (isIndentableBlock) {\n indentBlocks(outdentRules.nodes)(state, dispatch);\n }\n};\n","import { Fragment, Slice, NodeRange } from 'prosemirror-model';\nimport { TextSelection, NodeSelection } from 'prosemirror-state';\nimport { liftTarget, ReplaceAroundStep } from 'prosemirror-transform';\nimport { autoJoin } from 'prosemirror-commands';\nimport { wrapInList as pmWrapInList, splitListItem } from 'prosemirror-schema-list';\nimport { bulletList as bulletListSettings, orderedList as orderedListSettings } from './config/list-settings';\nconst rootListDepth = (pos, nodes) => {\n // Get the depth of the nearest ancestor list\n const { bulletList, orderedList, listItem } = nodes;\n let depth;\n for (let i = pos.depth - 1; i > 0; i--) {\n const node = pos.node(i);\n if (node.type === bulletList || node.type === orderedList) {\n depth = i;\n }\n if (node.type !== bulletList && node.type !== orderedList && node.type !== listItem) {\n break;\n }\n }\n return depth;\n};\nconst getListLiftTarget = (schema, resPos, listNodeNames) => {\n // This will return (depth - 1) for root list parent of a list.\n let target = resPos.depth;\n const bulletList = schema.nodes[listNodeNames.bulletList];\n const orderedList = schema.nodes[listNodeNames.orderedList];\n const listItem = schema.nodes[listNodeNames.listItem];\n for (let i = resPos.depth; i > 0; i--) {\n const node = resPos.node(i);\n if (node.type === bulletList || node.type === orderedList) {\n target = i;\n }\n if (node.type !== bulletList && node.type !== orderedList && node.type !== listItem) {\n break;\n }\n }\n return target - 1;\n};\nfunction liftSelectionList(state, tr, listNodeNames) {\n // The function will list paragraphs in selection out to level 1 below root list.\n const { from, to } = state.selection;\n const { paragraph, heading } = state.schema.nodes;\n const listCol = [];\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.type === paragraph || node.type === heading) {\n listCol.push({ node, pos });\n }\n });\n for (let i = listCol.length - 1; i >= 0; i--) {\n const block = listCol[i];\n const start = tr.doc.resolve(tr.mapping.map(block.pos));\n if (start.depth > 0) {\n let end;\n if (block.node.textContent && block.node.textContent.length > 0) {\n end = tr.doc.resolve(tr.mapping.map(block.pos + block.node.textContent.length));\n }\n else {\n end = tr.doc.resolve(tr.mapping.map(block.pos + 1));\n }\n const range = start.blockRange(end);\n if (range) {\n tr.lift(range, getListLiftTarget(state.schema, start, listNodeNames));\n }\n }\n }\n return tr;\n}\nfunction toggleListCommand(listNodeNames) {\n return function (state, dispatch, view) {\n if (!view) {\n return false;\n }\n state = view.state;\n const listNode = state.schema.nodes[listNodeNames.listType];\n const { $from, $to } = state.selection;\n const parent = $from.node(-2);\n const grandgrandParent = $from.node(-3);\n const isRangeOfSingleType = isRangeOfType(state.doc, $from, $to, listNode);\n if (((parent && parent.type === listNode) ||\n (grandgrandParent && grandgrandParent.type === listNode)) &&\n isRangeOfSingleType) {\n // Untoggles list\n return liftListItems(listNodeNames)(state, dispatch);\n }\n else {\n // Wraps selection in list and converts list type e.g. bullet_list -> ordered_list if needed\n if (!isRangeOfSingleType) {\n liftListItems(listNodeNames)(state, dispatch);\n state = view.state;\n }\n return wrapInList(listNode)(state, dispatch);\n }\n };\n}\nfunction liftListItem(state, selection, tr, nodeType) {\n if (!nodeType) {\n nodeType = state.schema.nodes.listItem;\n }\n let { $from, $to } = selection;\n let range = $from.blockRange($to, node => node.childCount && node.firstChild.type === nodeType);\n if (!range || range.depth < 2 || $from.node(range.depth - 1).type !== nodeType) {\n return tr;\n }\n let end = range.end;\n let endOfList = $to.end(range.depth);\n if (end < endOfList) {\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(nodeType.create(undefined, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve($from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n return tr.lift(range, liftTarget(range)).scrollIntoView();\n}\nfunction liftFollowingList(state, from, to, rootListDepthNum, tr, listItem) {\n // Function will lift list item following selection to level-1.\n if (!listItem) {\n listItem = state.schema.nodes.listItem;\n }\n let lifted = false;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!lifted && node.type === listItem && pos > from) {\n lifted = true;\n let listDepth = rootListDepthNum + 3;\n while (listDepth > rootListDepthNum + 2) {\n const start = tr.doc.resolve(tr.mapping.map(pos));\n listDepth = start.depth;\n const end = tr.doc.resolve(tr.mapping.map(pos + node.textContent.length));\n const sel = new TextSelection(start, end);\n tr = liftListItem(state, sel, tr, listItem);\n }\n }\n });\n return tr;\n}\nfunction isRangeOfType(doc, $from, $to, nodeType) {\n // Step through block-nodes between $from and $to and returns false if a node is\n // found that isn't of the specified type\n return getAncestorNodesBetween(doc, $from, $to).filter((node) => node.type !== nodeType).length === 0;\n}\nfunction getAncestorNodesBetween(doc, $from, $to) {\n // Returns all top-level ancestor-nodes between $from and $to\n const nodes = Array();\n const maxDepth = findAncestorPosition(doc, $from).depth;\n let current = doc.resolve($from.start(maxDepth));\n while (current.pos <= $to.start($to.depth)) {\n const depth = Math.min(current.depth, maxDepth);\n const node = current.node(depth);\n if (node) {\n nodes.push(node);\n }\n if (depth === 0) {\n break;\n }\n let next = doc.resolve(current.after(depth));\n if (next.start(depth) >= doc.nodeSize - 2) {\n break;\n }\n if (next.depth !== current.depth) {\n next = doc.resolve(next.pos + 2);\n }\n if (next.depth) {\n current = doc.resolve(next.start(next.depth));\n }\n else {\n current = doc.resolve(next.end(next.depth));\n }\n }\n return nodes;\n}\nfunction findAncestorPosition(doc, pos) {\n // Traverse the document until an \"ancestor\" is found. Any nestable block can be an ancestor.\n const nestableBlocks = ['blockquote', 'bulletList', 'orderedList'];\n if (pos.depth === 1) {\n return pos;\n }\n let node = pos.node(pos.depth);\n let newPos = pos;\n while (pos.depth >= 1) {\n pos = doc.resolve(pos.before(pos.depth));\n node = pos.node(pos.depth);\n if (node && nestableBlocks.indexOf(node.type.name) !== -1) {\n newPos = pos;\n }\n }\n return newPos;\n}\nfunction liftListItems(listNodeNames) {\n return function (state, dispatch) {\n const { tr } = state;\n const { $from, $to } = state.selection;\n tr.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n // Following condition will ensure that block types `paragraph`, `heading`, `codeBlock`, `blockquote`, `div` are lifted.\n // isTextblock is true for paragraph, heading, codeBlock.\n if (node.isTextblock || node.type.name === 'blockquote' || node.type.name === 'div') {\n const sel = new NodeSelection(tr.doc.resolve(tr.mapping.map(pos)));\n const range = sel.$from.blockRange(sel.$to);\n if (!range || sel.$from.parent.type !== state.schema.nodes[listNodeNames.listItem]) {\n return false;\n }\n const target = range && liftTarget(range);\n if (target === undefined || target === null) {\n return false;\n }\n tr.lift(range, target);\n }\n });\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n };\n}\nfunction wrapInList(nodeType) {\n return autoJoin(pmWrapInList(nodeType), (before, after) => before.type === after.type && before.type === nodeType);\n}\nexport const toggleList = (state, dispatch, view, listNodeNames, command) => {\n const { listType } = listNodeNames;\n const { selection } = state;\n const fromNode = selection.$from.node(selection.$from.depth - 2);\n const endNode = selection.$to.node(selection.$to.depth - 2);\n if (!fromNode || fromNode.type.name !== listType || (!endNode || endNode.type.name !== listType)) {\n return toggleListCommand(listNodeNames)(state, dispatch, view);\n }\n else {\n const nodes = view.state.schema.nodes;\n const listNodes = {\n bulletList: nodes[listNodeNames.bulletList],\n orderedList: nodes[listNodeNames.orderedList],\n listItem: nodes[listNodeNames.listItem]\n };\n const depth = rootListDepth(selection.$to, listNodes);\n let tr = liftFollowingList(state, selection.$to.pos, selection.$to.end(depth), depth, view.state.tr, listNodes.listItem);\n tr = liftSelectionList(state, tr, listNodeNames);\n tr.setMeta('commandName', command);\n dispatch(tr);\n return true;\n }\n};\nexport function toggleUnorderedList(state, dispatch, view) {\n return toggleList(state, dispatch, view, Object.assign({ listType: bulletListSettings.listType }, bulletListSettings.types));\n}\nexport function toggleOrderedList(state, dispatch, view) {\n return toggleList(state, dispatch, view, Object.assign({ listType: orderedListSettings.listType }, orderedListSettings.types));\n}\nexport const splitListItemKeepMarks = (itemType) => (state, dispatch) => {\n // see https://github.com/ProseMirror/prosemirror-commands/blob/master/src/commands.js#L321-L327\n return splitListItem(itemType)(state, tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks) {\n tr.ensureMarks(marks);\n }\n dispatch(tr);\n });\n};\n","const style = (name, value) => {\n return { name: name, value: value };\n};\nexport const alignLeftRules = [\n { node: 'paragraph', style: [style('text-align', 'left')] },\n { node: 'heading', style: [style('text-align', 'left')] }\n];\nexport const alignRightRules = [\n { node: 'paragraph', style: [style('text-align', 'right')] },\n { node: 'heading', style: [style('text-align', 'right')] }\n];\nexport const alignCenterRules = [\n { node: 'paragraph', style: [style('text-align', 'center')] },\n { node: 'heading', style: [style('text-align', 'center')] }\n];\nexport const alignJustifyRules = [\n { node: 'paragraph', style: [style('text-align', 'justify')] },\n { node: 'heading', style: [style('text-align', 'justify')] }\n];\nexport const alignRemoveRules = [\n { node: 'paragraph', style: [style('text-align', '')] },\n { node: 'heading', style: [style('text-align', '')] }\n];\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n // On macOS, keys held with Shift and Cmd don't reflect the effect of Shift in `.key`.\n // On IE, shift effect is never included in `.key`.\n var ignoreKey = mac && event.metaKey && event.shiftKey && !event.ctrlKey && !event.altKey ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\n// declare global: navigator\n\nvar mac = typeof navigator != \"undefined\" ? /Mac/.test(navigator.platform) : false;\n\nfunction normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\") { result = \" \"; }\n var alt, ctrl, shift, meta;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { meta = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else if (/^mod$/i.test(mod)) { if (mac) { meta = true; } else { ctrl = true; } }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { result = \"Alt-\" + result; }\n if (ctrl) { result = \"Ctrl-\" + result; }\n if (meta) { result = \"Meta-\" + result; }\n if (shift) { result = \"Shift-\" + result; }\n return result\n}\n\nfunction normalize(map) {\n var copy = Object.create(null);\n for (var prop in map) { copy[normalizeKeyName(prop)] = map[prop]; }\n return copy\n}\n\nfunction modifiers(name, event, shift) {\n if (event.altKey) { name = \"Alt-\" + name; }\n if (event.ctrlKey) { name = \"Ctrl-\" + name; }\n if (event.metaKey) { name = \"Meta-\" + name; }\n if (shift !== false && event.shiftKey) { name = \"Shift-\" + name; }\n return name\n}\n\n// :: (Object) → Plugin\n// Create a keymap plugin for the given set of bindings.\n//\n// Bindings should map key names to [command](#commands)-style\n// functions, which will be called with `(EditorState, dispatch,\n// EditorView)` arguments, and should return true when they've handled\n// the key. Note that the view argument isn't part of the command\n// protocol, but can be used as an escape hatch if a binding needs to\n// directly interact with the UI.\n//\n// Key names may be strings like `\"Shift-Ctrl-Enter\"`—a key\n// identifier prefixed with zero or more modifiers. Key identifiers\n// are based on the strings that can appear in\n// [`KeyEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\n// Use lowercase letters to refer to letter keys (or uppercase letters\n// if you want shift to be held). You may use `\"Space\"` as an alias\n// for the `\" \"` name.\n//\n// Modifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n// `a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n// `Meta-`) are recognized. For characters that are created by holding\n// shift, the `Shift-` prefix is implied, and should not be added\n// explicitly.\n//\n// You can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\n// other platforms.\n//\n// You can add multiple keymap plugins to an editor. The order in\n// which they appear determines their precedence (the ones early in\n// the array get to dispatch first).\nfunction keymap(bindings) {\n return new Plugin({props: {handleKeyDown: keydownHandler(bindings)}})\n}\n\n// :: (Object) → (view: EditorView, event: dom.Event) → bool\n// Given a set of bindings (using the same format as\n// [`keymap`](#keymap.keymap), return a [keydown\n// handler](#view.EditorProps.handleKeyDown) that handles them.\nfunction keydownHandler(bindings) {\n var map = normalize(bindings);\n return function(view, event) {\n var name = keyName(event), isChar = name.length == 1 && name != \" \", baseName;\n var direct = map[modifiers(name, event, !isChar)];\n if (direct && direct(view.state, view.dispatch, view)) { return true }\n if (isChar && (event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060\n var fromCode = map[modifiers(baseName, event, true)];\n if (fromCode && fromCode(view.state, view.dispatch, view)) { return true }\n } else if (isChar && event.shiftKey) {\n // Otherwise, if shift is active, also try the binding with the\n // Shift- prefix enabled. See #997\n var withShift = map[modifiers(name, event, true)];\n if (withShift && withShift(view.state, view.dispatch, view)) { return true }\n }\n return false\n }\n}\n\nexport { keydownHandler, keymap };\n","import { TextSelection, NodeSelection, Selection, AllSelection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, DOMParser, Slice } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nvar result = {};\n\nif (typeof navigator != \"undefined\" && typeof document != \"undefined\") {\n var ie_edge = /Edge\\/(\\d+)/.exec(navigator.userAgent);\n var ie_upto10 = /MSIE \\d/.test(navigator.userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n\n result.mac = /Mac/.test(navigator.platform);\n var ie = result.ie = !!(ie_upto10 || ie_11up || ie_edge);\n result.ie_version = ie_upto10 ? document.documentMode || 6 : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : null;\n result.gecko = !ie && /gecko\\/(\\d+)/i.test(navigator.userAgent);\n result.gecko_version = result.gecko && +(/Firefox\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1];\n var chrome = !ie && /Chrome\\/(\\d+)/.exec(navigator.userAgent);\n result.chrome = !!chrome;\n result.chrome_version = chrome && +chrome[1];\n // Is true for both iOS and iPadOS for convenience\n result.safari = !ie && /Apple Computer/.test(navigator.vendor);\n result.ios = result.safari && (/Mobile\\/\\w+/.test(navigator.userAgent) || navigator.maxTouchPoints > 2);\n result.android = /Android \\d/.test(navigator.userAgent);\n result.webkit = \"webkitFontSmoothing\" in document.documentElement.style;\n result.webkit_version = result.webkit && +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1];\n}\n\nvar domIndex = function(node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node) { return index }\n }\n};\n\nvar parentNode = function(node) {\n var parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent\n};\n\nvar reusedRange = null;\n\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nvar textRange = function(node, from, to) {\n var range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range\n};\n\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nvar isEquivalentPosition = function(node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1))\n};\n\nvar atomElements = /^(img|br|input|textarea|hr)$/i;\n\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n for (;;) {\n if (node == targetNode && off == targetOff) { return true }\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n var parent = node.parentNode;\n if (parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) || node.contentEditable == \"false\")\n { return false }\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n } else if (node.nodeType == 1) {\n node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (node.contentEditable == \"false\") { return false }\n off = dir < 0 ? nodeSize(node) : 0;\n } else {\n return false\n }\n }\n}\n\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n}\n\nfunction isOnEdge(node, offset, parent) {\n for (var atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent) { return true }\n var index = domIndex(node);\n node = node.parentNode;\n if (!node) { return false }\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\n\nfunction hasBlockDesc(dom) {\n var desc;\n for (var cur = dom; cur; cur = cur.parentNode) { if (desc = cur.pmViewDesc) { break } }\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom)\n}\n\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nvar selectionCollapsed = function(domSel) {\n var collapsed = domSel.isCollapsed;\n if (collapsed && result.chrome && domSel.rangeCount && !domSel.getRangeAt(0).collapsed)\n { collapsed = false; }\n return collapsed\n};\n\nfunction keyEvent(keyCode, key) {\n var event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event\n}\n\nfunction windowRect(doc) {\n return {left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight}\n}\n\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side]\n}\n\nfunction clientRect(node) {\n var rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n var scaleX = (rect.width / node.offsetWidth) || 1;\n var scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return {left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY}\n}\n\nfunction scrollRectIntoView(view, rect, startDOM) {\n var scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n var doc = view.dom.ownerDocument;\n for (var parent = startDOM || view.dom;; parent = parentNode(parent)) {\n if (!parent) { break }\n if (parent.nodeType != 1) { continue }\n var atTop = parent == doc.body || parent.nodeType != 1;\n var bounding = atTop ? windowRect(doc) : clientRect(parent);\n var moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n { moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\")); }\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n { moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\"); }\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n { moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\")); }\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n { moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\"); }\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n } else {\n var startX = parent.scrollLeft, startY = parent.scrollTop;\n if (moveY) { parent.scrollTop += moveY; }\n if (moveX) { parent.scrollLeft += moveX; }\n var dX = parent.scrollLeft - startX, dY = parent.scrollTop - startY;\n rect = {left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY};\n }\n }\n if (atTop) { break }\n }\n}\n\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n var rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n var refDOM, refTop;\n for (var x = (rect.left + rect.right) / 2, y = startY + 1;\n y < Math.min(innerHeight, rect.bottom); y += 5) {\n var dom = view.root.elementFromPoint(x, y);\n if (dom == view.dom || !view.dom.contains(dom)) { continue }\n var localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break\n }\n }\n return {refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom)}\n}\n\nfunction scrollStack(dom) {\n var stack = [], doc = dom.ownerDocument;\n for (; dom; dom = parentNode(dom)) {\n stack.push({dom: dom, top: dom.scrollTop, left: dom.scrollLeft});\n if (dom == doc) { break }\n }\n return stack\n}\n\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos(ref) {\n var refDOM = ref.refDOM;\n var refTop = ref.refTop;\n var stack = ref.stack;\n\n var newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\n\nfunction restoreScrollStack(stack, dTop) {\n for (var i = 0; i < stack.length; i++) {\n var ref = stack[i];\n var dom = ref.dom;\n var top = ref.top;\n var left = ref.left;\n if (dom.scrollTop != top + dTop) { dom.scrollTop = top + dTop; }\n if (dom.scrollLeft != left) { dom.scrollLeft = left; }\n }\n}\n\nvar preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive) { return dom.setActive() } // in IE\n if (preventScrollSupported) { return dom.focus(preventScrollSupported) }\n\n var stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = {preventScroll: true};\n return true\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\n\nfunction findOffsetInNode(node, coords) {\n var closest, dxClosest = 2e8, coordsClosest, offset = 0;\n var rowBot = coords.top, rowTop = coords.top;\n for (var child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n var rects = (void 0);\n if (child.nodeType == 1) { rects = child.getClientRects(); }\n else if (child.nodeType == 3) { rects = textRange(child).getClientRects(); }\n else { continue }\n\n for (var i = 0; i < rects.length; i++) {\n var rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n var dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {left: rect.right < coords.left ? rect.right : rect.left, top: coords.top} : coords;\n if (child.nodeType == 1 && dx)\n { offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0); }\n continue\n }\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n { offset = childIndex + 1; }\n }\n }\n if (closest && closest.nodeType == 3) { return findOffsetInText(closest, coordsClosest) }\n if (!closest || (dxClosest && closest.nodeType == 1)) { return {node: node, offset: offset} }\n return findOffsetInNode(closest, coordsClosest)\n}\n\nfunction findOffsetInText(node, coords) {\n var len = node.nodeValue.length;\n var range = document.createRange();\n for (var i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n var rect = singleRect(range, 1);\n if (rect.top == rect.bottom) { continue }\n if (inRect(coords, rect))\n { return {node: node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0)} }\n }\n return {node: node, offset: 0}\n}\n\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1&&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1\n}\n\nfunction targetKludge(dom, coords) {\n var parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n { return parent }\n return dom\n}\n\nfunction posFromElement(view, elt, coords) {\n var ref = findOffsetInNode(elt, coords);\n var node = ref.node;\n var offset = ref.offset;\n var bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n var rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias)\n}\n\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n var outside = -1;\n for (var cur = node;;) {\n if (cur == view.dom) { break }\n var desc = view.docView.nearestDesc(cur, true);\n if (!desc) { return null }\n if (desc.node.isBlock && desc.parent) {\n var rect = desc.dom.getBoundingClientRect();\n if (rect.left > coords.left || rect.top > coords.top) { outside = desc.posBefore; }\n else if (rect.right < coords.left || rect.bottom < coords.top) { outside = desc.posAfter; }\n else { break }\n }\n cur = desc.dom.parentNode;\n }\n return outside > -1 ? outside : view.docView.posFromDOM(node, offset)\n}\n\nfunction elementFromPoint(element, coords, box) {\n var len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (var startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n var child = element.childNodes[i];\n if (child.nodeType == 1) {\n var rects = child.getClientRects();\n for (var j = 0; j < rects.length; j++) {\n var rect = rects[j];\n if (inRect(coords, rect)) { return elementFromPoint(child, coords, rect) }\n }\n }\n if ((i = (i + 1) % len) == startI) { break }\n }\n }\n return element\n}\n\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n var assign, assign$1;\n\n var doc = view.dom.ownerDocument, node, offset;\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n var pos$1 = doc.caretPositionFromPoint(coords.left, coords.top);\n if (pos$1) { ((assign = pos$1, node = assign.offsetNode, offset = assign.offset)); }\n } catch (_) {}\n }\n if (!node && doc.caretRangeFromPoint) {\n var range = doc.caretRangeFromPoint(coords.left, coords.top);\n if (range) { ((assign$1 = range, node = assign$1.startContainer, offset = assign$1.startOffset)); }\n }\n\n var elt = (view.root.elementFromPoint ? view.root : doc).elementFromPoint(coords.left, coords.top + 1), pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n var box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box)) { return null }\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt) { return null }\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (result.safari) {\n for (var p = elt; node && p; p = parentNode(p))\n { if (p.draggable) { node = offset = null; } }\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (result.gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n var next = node.childNodes[offset], box$1;\n if (next.nodeName == \"IMG\" && (box$1 = next.getBoundingClientRect()).right <= coords.left &&\n box$1.bottom > coords.top)\n { offset++; }\n }\n }\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n { pos = view.state.doc.content.size; }\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n { pos = posFromCaret(view, node, offset, coords); }\n }\n if (pos == null) { pos = posFromElement(view, elt, coords); }\n\n var desc = view.docView.nearestDesc(elt, true);\n return {pos: pos, inside: desc ? desc.posAtStart - desc.border : -1}\n}\n\nfunction singleRect(object, bias) {\n var rects = object.getClientRects();\n return !rects.length ? object.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1]\n}\n\nvar BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n\n// : (EditorView, number, number) → {left: number, top: number, right: number, bottom: number}\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n var ref = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n var node = ref.node;\n var offset = ref.offset;\n\n var supportEmptyRange = result.webkit || result.gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n var rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (result.gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n var rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n var rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n { return flattenV(rectAfter, rectAfter.left < rectBefore.left) }\n }\n }\n return rect\n } else {\n var from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) { to++; takeSide = -1; }\n else if (side >= 0 && offset == node.nodeValue.length) { from--; takeSide = 1; }\n else if (side < 0) { from--; }\n else { to ++; }\n return flattenV(singleRect(textRange(node, from, to), takeSide), takeSide < 0)\n }\n }\n\n // Return a horizontal line in block context\n if (!view.state.doc.resolve(pos).parent.inlineContent) {\n if (offset && (side < 0 || offset == nodeSize(node))) {\n var before = node.childNodes[offset - 1];\n if (before.nodeType == 1) { return flattenH(before.getBoundingClientRect(), false) }\n }\n if (offset < nodeSize(node)) {\n var after = node.childNodes[offset];\n if (after.nodeType == 1) { return flattenH(after.getBoundingClientRect(), true) }\n }\n return flattenH(node.getBoundingClientRect(), side >= 0)\n }\n\n // Inline, not in text node (this is not Bidi-safe)\n if (offset && (side < 0 || offset == nodeSize(node))) {\n var before$1 = node.childNodes[offset - 1];\n var target = before$1.nodeType == 3 ? textRange(before$1, nodeSize(before$1) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before$1.nodeType == 1 && (before$1.nodeName != \"BR\" || !before$1.nextSibling) ? before$1 : null;\n if (target) { return flattenV(singleRect(target, 1), false) }\n }\n if (offset < nodeSize(node)) {\n var after$1 = node.childNodes[offset];\n while (after$1.pmViewDesc && after$1.pmViewDesc.ignoreForCoords) { after$1 = after$1.nextSibling; }\n var target$1 = !after$1 ? null : after$1.nodeType == 3 ? textRange(after$1, 0, (supportEmptyRange ? 0 : 1))\n : after$1.nodeType == 1 ? after$1 : null;\n if (target$1) { return flattenV(singleRect(target$1, -1), true) }\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0)\n}\n\nfunction flattenV(rect, left) {\n if (rect.width == 0) { return rect }\n var x = left ? rect.left : rect.right;\n return {top: rect.top, bottom: rect.bottom, left: x, right: x}\n}\n\nfunction flattenH(rect, top) {\n if (rect.height == 0) { return rect }\n var y = top ? rect.top : rect.bottom;\n return {top: y, bottom: y, left: rect.left, right: rect.right}\n}\n\nfunction withFlushedState(view, state, f) {\n var viewState = view.state, active = view.root.activeElement;\n if (viewState != state) { view.updateState(state); }\n if (active != view.dom) { view.focus(); }\n try {\n return f()\n } finally {\n if (viewState != state) { view.updateState(viewState); }\n if (active != view.dom && active) { active.focus(); }\n }\n}\n\n// : (EditorView, number, number)\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n var sel = state.selection;\n var $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, function () {\n var ref = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n var dom = ref.node;\n for (;;) {\n var nearest = view.docView.nearestDesc(dom, true);\n if (!nearest) { break }\n if (nearest.node.isBlock) { dom = nearest.dom; break }\n dom = nearest.dom.parentNode;\n }\n var coords = coordsAtPos(view, $pos.pos, 1);\n for (var child = dom.firstChild; child; child = child.nextSibling) {\n var boxes = (void 0);\n if (child.nodeType == 1) { boxes = child.getClientRects(); }\n else if (child.nodeType == 3) { boxes = textRange(child, 0, child.nodeValue.length).getClientRects(); }\n else { continue }\n for (var i = 0; i < boxes.length; i++) {\n var box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n { return false }\n }\n }\n return true\n })\n}\n\nvar maybeRTL = /[\\u0590-\\u08ac]/;\n\nfunction endOfTextblockHorizontal(view, state, dir) {\n var ref = state.selection;\n var $head = ref.$head;\n if (!$head.parent.isTextblock) { return false }\n var offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n var sel = view.root.getSelection();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n { return dir == \"left\" || dir == \"backward\" ? atStart : atEnd }\n\n return withFlushedState(view, state, function () {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n var oldRange = sel.getRangeAt(0), oldNode = sel.focusNode, oldOff = sel.focusOffset;\n var oldBidiLevel = sel.caretBidiLevel; // Only for Firefox\n sel.modify(\"move\", dir, \"character\");\n var parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n var result = !parentDOM.contains(sel.focusNode.nodeType == 1 ? sel.focusNode : sel.focusNode.parentNode) ||\n (oldNode == sel.focusNode && oldOff == sel.focusOffset);\n // Restore the previous selection\n sel.removeAllRanges();\n sel.addRange(oldRange);\n if (oldBidiLevel != null) { sel.caretBidiLevel = oldBidiLevel; }\n return result\n })\n}\n\nvar cachedState = null, cachedDir = null, cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir) { return cachedResult }\n cachedState = state; cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir)\n}\n\n// NodeView:: interface\n//\n// By default, document nodes are rendered using the result of the\n// [`toDOM`](#model.NodeSpec.toDOM) method of their spec, and managed\n// entirely by the editor. For some use cases, such as embedded\n// node-specific editing interfaces, you want more control over\n// the behavior of a node's in-editor representation, and need to\n// [define](#view.EditorProps.nodeViews) a custom node view.\n//\n// Mark views only support `dom` and `contentDOM`, and don't support\n// any of the node view methods.\n//\n// Objects returned as node views must conform to this interface.\n//\n// dom:: ?dom.Node\n// The outer DOM node that represents the document node. When not\n// given, the default strategy is used to create a DOM node.\n//\n// contentDOM:: ?dom.Node\n// The DOM node that should hold the node's content. Only meaningful\n// if the node view also defines a `dom` property and if its node\n// type is not a leaf node type. When this is present, ProseMirror\n// will take care of rendering the node's children into it. When it\n// is not present, the node view itself is responsible for rendering\n// (or deciding not to render) its child nodes.\n//\n// update:: ?(node: Node, decorations: [Decoration], innerDecorations: DecorationSource) → bool\n// When given, this will be called when the view is updating itself.\n// It will be given a node (possibly of a different type), an array\n// of active decorations around the node (which are automatically\n// drawn, and the node view may ignore if it isn't interested in\n// them), and a [decoration source](#view.DecorationSource) that\n// represents any decorations that apply to the content of the node\n// (which again may be ignored). It should return true if it was\n// able to update to that node, and false otherwise. If the node\n// view has a `contentDOM` property (or no `dom` property), updating\n// its child nodes will be handled by ProseMirror.\n//\n// selectNode:: ?()\n// Can be used to override the way the node's selected status (as a\n// node selection) is displayed.\n//\n// deselectNode:: ?()\n// When defining a `selectNode` method, you should also provide a\n// `deselectNode` method to remove the effect again.\n//\n// setSelection:: ?(anchor: number, head: number, root: dom.Document)\n// This will be called to handle setting the selection inside the\n// node. The `anchor` and `head` positions are relative to the start\n// of the node. By default, a DOM selection will be created between\n// the DOM positions corresponding to those positions, but if you\n// override it you can do something else.\n//\n// stopEvent:: ?(event: dom.Event) → bool\n// Can be used to prevent the editor view from trying to handle some\n// or all DOM events that bubble up from the node view. Events for\n// which this returns true are not handled by the editor.\n//\n// ignoreMutation:: ?(dom.MutationRecord) → bool\n// Called when a DOM\n// [mutation](https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)\n// or a selection change happens within the view. When the change is\n// a selection change, the record will have a `type` property of\n// `\"selection\"` (which doesn't occur for native mutation records).\n// Return false if the editor should re-read the selection or\n// re-parse the range around the mutation, true if it can safely be\n// ignored.\n//\n// destroy:: ?()\n// Called when the node view is removed from the editor or the whole\n// editor is destroyed. (Not available for marks.)\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\n\nvar NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nvar ViewDesc = function ViewDesc(parent, children, dom, contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n};\n\nvar prototypeAccessors = { size: { configurable: true },border: { configurable: true },posBefore: { configurable: true },posAtStart: { configurable: true },posAfter: { configurable: true },posAtEnd: { configurable: true },contentLost: { configurable: true },domAtom: { configurable: true },ignoreForCoords: { configurable: true } };\n\n// Used to check whether a given description corresponds to a\n// widget/mark/node.\nViewDesc.prototype.matchesWidget = function matchesWidget () { return false };\nViewDesc.prototype.matchesMark = function matchesMark () { return false };\nViewDesc.prototype.matchesNode = function matchesNode () { return false };\nViewDesc.prototype.matchesHack = function matchesHack (_nodeName) { return false };\n\n// : () → ?ParseRule\n// When parsing in-editor content (in domchange.js), we allow\n// descriptions to determine the parse rules that should be used to\n// parse them.\nViewDesc.prototype.parseRule = function parseRule () { return null };\n\n// : (dom.Event) → bool\n// Used by the editor's event handler to ignore events that come\n// from certain descs.\nViewDesc.prototype.stopEvent = function stopEvent () { return false };\n\n// The size of the content represented by this desc.\nprototypeAccessors.size.get = function () {\n var size = 0;\n for (var i = 0; i < this.children.length; i++) { size += this.children[i].size; }\n return size\n};\n\n// For block nodes, this represents the space taken up by their\n// start/end tokens.\nprototypeAccessors.border.get = function () { return 0 };\n\nViewDesc.prototype.destroy = function destroy () {\n this.parent = null;\n if (this.dom.pmViewDesc == this) { this.dom.pmViewDesc = null; }\n for (var i = 0; i < this.children.length; i++)\n { this.children[i].destroy(); }\n};\n\nViewDesc.prototype.posBeforeChild = function posBeforeChild (child) {\n for (var i = 0, pos = this.posAtStart; i < this.children.length; i++) {\n var cur = this.children[i];\n if (cur == child) { return pos }\n pos += cur.size;\n }\n};\n\nprototypeAccessors.posBefore.get = function () {\n return this.parent.posBeforeChild(this)\n};\n\nprototypeAccessors.posAtStart.get = function () {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0\n};\n\nprototypeAccessors.posAfter.get = function () {\n return this.posBefore + this.size\n};\n\nprototypeAccessors.posAtEnd.get = function () {\n return this.posAtStart + this.size - 2 * this.border\n};\n\n// : (dom.Node, number, ?number) → number\nViewDesc.prototype.localPosFromDOM = function localPosFromDOM (dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n var domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n } else {\n while (dom.parentNode != this.contentDOM) { dom = dom.parentNode; }\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this)) { domBefore = domBefore.previousSibling; }\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart\n } else {\n var domAfter, desc$1;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n } else {\n while (dom.parentNode != this.contentDOM) { dom = dom.parentNode; }\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc$1 = domAfter.pmViewDesc) && desc$1.parent == this)) { domAfter = domAfter.nextSibling; }\n return domAfter ? this.posBeforeChild(desc$1) : this.posAtEnd\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n var atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n } else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n } else if (this.dom.firstChild) {\n if (offset == 0) { for (var search = dom;; search = search.parentNode) {\n if (search == this.dom) { atEnd = false; break }\n if (search.parentNode.firstChild != search) { break }\n } }\n if (atEnd == null && offset == dom.childNodes.length) { for (var search$1 = dom;; search$1 = search$1.parentNode) {\n if (search$1 == this.dom) { atEnd = true; break }\n if (search$1.parentNode.lastChild != search$1) { break }\n } }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart\n};\n\n// Scan up the dom finding the first desc that is a descendant of\n// this one.\nViewDesc.prototype.nearestDesc = function nearestDesc (dom, onlyNodes) {\n for (var first = true, cur = dom; cur; cur = cur.parentNode) {\n var desc = this.getDesc(cur);\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && desc.nodeDOM &&\n !(desc.nodeDOM.nodeType == 1 ? desc.nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : desc.nodeDOM == dom))\n { first = false; }\n else\n { return desc }\n }\n }\n};\n\nViewDesc.prototype.getDesc = function getDesc (dom) {\n var desc = dom.pmViewDesc;\n for (var cur = desc; cur; cur = cur.parent) { if (cur == this) { return desc } }\n};\n\nViewDesc.prototype.posFromDOM = function posFromDOM (dom, offset, bias) {\n for (var scan = dom; scan; scan = scan.parentNode) {\n var desc = this.getDesc(scan);\n if (desc) { return desc.localPosFromDOM(dom, offset, bias) }\n }\n return -1\n};\n\n// : (number) → ?NodeViewDesc\n// Find the desc for the node after the given pos, if any. (When a\n// parent node overrode rendering, there might not be one.)\nViewDesc.prototype.descAt = function descAt (pos) {\n for (var i = 0, offset = 0; i < this.children.length; i++) {\n var child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length) { child = child.children[0]; }\n return child\n }\n if (pos < end) { return child.descAt(pos - offset - child.border) }\n offset = end;\n }\n};\n\n// : (number, number) → {node: dom.Node, offset: number}\nViewDesc.prototype.domFromPos = function domFromPos (pos, side) {\n if (!this.contentDOM) { return {node: this.dom, offset: 0} }\n // First find the position in the child array\n var i = 0, offset = 0;\n for (var curPos = 0; i < this.children.length; i++) {\n var child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) { offset = pos - curPos; break }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset) { return this.children[i].domFromPos(offset - this.children[i].border, side) }\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (var prev = (void 0); i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.widget.type.side >= 0; i--) {}\n // Scan towards the first useable node\n if (side <= 0) {\n var prev$1, enter = true;\n for (;; i--, enter = false) {\n prev$1 = i ? this.children[i - 1] : null;\n if (!prev$1 || prev$1.dom.parentNode == this.contentDOM) { break }\n }\n if (prev$1 && side && enter && !prev$1.border && !prev$1.domAtom) { return prev$1.domFromPos(prev$1.size, side) }\n return {node: this.contentDOM, offset: prev$1 ? domIndex(prev$1.dom) + 1 : 0}\n } else {\n var next, enter$1 = true;\n for (;; i++, enter$1 = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM) { break }\n }\n if (next && enter$1 && !next.border && !next.domAtom) { return next.domFromPos(0, side) }\n return {node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length}\n }\n};\n\n// Used to find a DOM range in a single parent for a given changed\n// range.\nViewDesc.prototype.parseRange = function parseRange (from, to, base) {\n if ( base === void 0 ) base = 0;\n\n if (this.children.length == 0)\n { return {node: this.contentDOM, from: from, to: to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length} }\n\n var fromOffset = -1, toOffset = -1;\n for (var offset = base, i = 0;; i++) {\n var child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n var childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n { return child.parseRange(from, to, childBase) }\n\n from = offset;\n for (var j = i; j > 0; j--) {\n var prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break\n }\n from -= prev.size;\n }\n if (fromOffset == -1) { fromOffset = 0; }\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (var j$1 = i + 1; j$1 < this.children.length; j$1++) {\n var next = this.children[j$1];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break\n }\n to += next.size;\n }\n if (toOffset == -1) { toOffset = this.contentDOM.childNodes.length; }\n break\n }\n offset = end;\n }\n return {node: this.contentDOM, from: from, to: to, fromOffset: fromOffset, toOffset: toOffset}\n};\n\nViewDesc.prototype.emptyChildAt = function emptyChildAt (side) {\n if (this.border || !this.contentDOM || !this.children.length) { return false }\n var child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side)\n};\n\n// : (number) → dom.Node\nViewDesc.prototype.domAfterPos = function domAfterPos (pos) {\n var ref = this.domFromPos(pos, 0);\n var node = ref.node;\n var offset = ref.offset;\n if (node.nodeType != 1 || offset == node.childNodes.length)\n { throw new RangeError(\"No node after pos \" + pos) }\n return node.childNodes[offset]\n};\n\n// : (number, number, dom.Document)\n// View descs are responsible for setting any selection that falls\n// entirely inside of them, so that custom implementations can do\n// custom things with the selection. Note that this falls apart when\n// a selection starts in such a node and ends in another, in which\n// case we just use whatever domFromPos produces as a best effort.\nViewDesc.prototype.setSelection = function setSelection (anchor, head, root, force) {\n // If the selection falls entirely in a child, give it to that child\n var from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (var i = 0, offset = 0; i < this.children.length; i++) {\n var child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n { return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force) }\n offset = end;\n }\n\n var anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n var headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n var domSel = root.getSelection();\n\n var brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((result.gecko || result.safari) && anchor == head) {\n var node = anchorDOM.node;\n var offset$1 = anchorDOM.offset;\n if (node.nodeType == 3) {\n brKludge = offset$1 && node.nodeValue[offset$1 - 1] == \"\\n\";\n // Issue #1128\n if (brKludge && offset$1 == node.nodeValue.length) {\n for (var scan = node, after = (void 0); scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n { anchorDOM = headDOM = {node: after.parentNode, offset: domIndex(after) + 1}; }\n break\n }\n var desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock) { break }\n }\n }\n } else {\n var prev = node.childNodes[offset$1 - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (result.gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) {\n var after$1 = domSel.focusNode.childNodes[domSel.focusOffset];\n if (after$1 && after$1.contentEditable == \"false\") { force = true; }\n }\n\n if (!(force || brKludge && result.safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset))\n { return }\n\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n var domSelExtended = false;\n if ((domSel.extend || anchor == head) && !brKludge) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head) { domSel.extend(headDOM.node, headDOM.offset); }\n domSelExtended = true;\n } catch (err) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n if (!(err instanceof DOMException)) { throw err }\n // declare global: DOMException\n }\n }\n if (!domSelExtended) {\n if (anchor > head) { var tmp = anchorDOM; anchorDOM = headDOM; headDOM = tmp; }\n var range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n};\n\n// : (dom.MutationRecord) → bool\nViewDesc.prototype.ignoreMutation = function ignoreMutation (mutation) {\n return !this.contentDOM && mutation.type != \"selection\"\n};\n\nprototypeAccessors.contentLost.get = function () {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM)\n};\n\n// Remove a subtree of the element tree that has been touched\n// by a DOM change, so that the next update will redraw it.\nViewDesc.prototype.markDirty = function markDirty (from, to) {\n for (var offset = 0, i = 0; i < this.children.length; i++) {\n var child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n var startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM)) { child.dirty = NODE_DIRTY; }\n else { child.markDirty(from - startInside, to - startInside); }\n return\n } else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n};\n\nViewDesc.prototype.markParentsDirty = function markParentsDirty () {\n var level = 1;\n for (var node = this.parent; node; node = node.parent, level++) {\n var dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty) { node.dirty = dirty; }\n }\n};\n\nprototypeAccessors.domAtom.get = function () { return false };\n\nprototypeAccessors.ignoreForCoords.get = function () { return false };\n\nObject.defineProperties( ViewDesc.prototype, prototypeAccessors );\n\n// Reused array to avoid allocating fresh arrays for things that will\n// stay empty anyway.\nvar nothing = [];\n\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nvar WidgetViewDesc = /*@__PURE__*/(function (ViewDesc) {\n function WidgetViewDesc(parent, widget, view, pos) {\n var self, dom = widget.type.toDOM;\n if (typeof dom == \"function\") { dom = dom(view, function () {\n if (!self) { return pos }\n if (self.parent) { return self.parent.posBeforeChild(self) }\n }); }\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n var wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = false;\n dom.classList.add(\"ProseMirror-widget\");\n }\n ViewDesc.call(this, parent, nothing, dom, null);\n this.widget = widget;\n self = this;\n }\n\n if ( ViewDesc ) WidgetViewDesc.__proto__ = ViewDesc;\n WidgetViewDesc.prototype = Object.create( ViewDesc && ViewDesc.prototype );\n WidgetViewDesc.prototype.constructor = WidgetViewDesc;\n\n var prototypeAccessors$1 = { domAtom: { configurable: true } };\n\n WidgetViewDesc.prototype.matchesWidget = function matchesWidget (widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type)\n };\n\n WidgetViewDesc.prototype.parseRule = function parseRule () { return {ignore: true} };\n\n WidgetViewDesc.prototype.stopEvent = function stopEvent (event) {\n var stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false\n };\n\n WidgetViewDesc.prototype.ignoreMutation = function ignoreMutation (mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection\n };\n\n prototypeAccessors$1.domAtom.get = function () { return true };\n\n Object.defineProperties( WidgetViewDesc.prototype, prototypeAccessors$1 );\n\n return WidgetViewDesc;\n}(ViewDesc));\n\nvar CompositionViewDesc = /*@__PURE__*/(function (ViewDesc) {\n function CompositionViewDesc(parent, dom, textDOM, text) {\n ViewDesc.call(this, parent, nothing, dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n\n if ( ViewDesc ) CompositionViewDesc.__proto__ = ViewDesc;\n CompositionViewDesc.prototype = Object.create( ViewDesc && ViewDesc.prototype );\n CompositionViewDesc.prototype.constructor = CompositionViewDesc;\n\n var prototypeAccessors$2 = { size: { configurable: true } };\n\n prototypeAccessors$2.size.get = function () { return this.text.length };\n\n CompositionViewDesc.prototype.localPosFromDOM = function localPosFromDOM (dom, offset) {\n if (dom != this.textDOM) { return this.posAtStart + (offset ? this.size : 0) }\n return this.posAtStart + offset\n };\n\n CompositionViewDesc.prototype.domFromPos = function domFromPos (pos) {\n return {node: this.textDOM, offset: pos}\n };\n\n CompositionViewDesc.prototype.ignoreMutation = function ignoreMutation (mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue\n };\n\n Object.defineProperties( CompositionViewDesc.prototype, prototypeAccessors$2 );\n\n return CompositionViewDesc;\n}(ViewDesc));\n\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nvar MarkViewDesc = /*@__PURE__*/(function (ViewDesc) {\n function MarkViewDesc(parent, mark, dom, contentDOM) {\n ViewDesc.call(this, parent, [], dom, contentDOM);\n this.mark = mark;\n }\n\n if ( ViewDesc ) MarkViewDesc.__proto__ = ViewDesc;\n MarkViewDesc.prototype = Object.create( ViewDesc && ViewDesc.prototype );\n MarkViewDesc.prototype.constructor = MarkViewDesc;\n\n MarkViewDesc.create = function create (parent, mark, inline, view) {\n var custom = view.nodeViews[mark.type.name];\n var spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n { spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline)); }\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom)\n };\n\n MarkViewDesc.prototype.parseRule = function parseRule () { return {mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM} };\n\n MarkViewDesc.prototype.matchesMark = function matchesMark (mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark) };\n\n MarkViewDesc.prototype.markDirty = function markDirty (from, to) {\n ViewDesc.prototype.markDirty.call(this, from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n var parent = this.parent;\n while (!parent.node) { parent = parent.parent; }\n if (parent.dirty < this.dirty) { parent.dirty = this.dirty; }\n this.dirty = NOT_DIRTY;\n }\n };\n\n MarkViewDesc.prototype.slice = function slice (from, to, view) {\n var copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n var nodes = this.children, size = this.size;\n if (to < size) { nodes = replaceNodes(nodes, to, size, view); }\n if (from > 0) { nodes = replaceNodes(nodes, 0, from, view); }\n for (var i = 0; i < nodes.length; i++) { nodes[i].parent = copy; }\n copy.children = nodes;\n return copy\n };\n\n return MarkViewDesc;\n}(ViewDesc));\n\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nvar NodeViewDesc = /*@__PURE__*/(function (ViewDesc) {\n function NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n ViewDesc.call(this, parent, node.isLeaf ? nothing : [], dom, contentDOM);\n this.nodeDOM = nodeDOM;\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n if (contentDOM) { this.updateChildren(view, pos); }\n }\n\n if ( ViewDesc ) NodeViewDesc.__proto__ = ViewDesc;\n NodeViewDesc.prototype = Object.create( ViewDesc && ViewDesc.prototype );\n NodeViewDesc.prototype.constructor = NodeViewDesc;\n\n var prototypeAccessors$3 = { size: { configurable: true },border: { configurable: true },domAtom: { configurable: true } };\n\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n NodeViewDesc.create = function create (parent, node, outerDeco, innerDeco, view, pos) {\n var assign;\n\n var custom = view.nodeViews[node.type.name], descObj;\n var spec = custom && custom(node, view, function () {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj) { return pos }\n if (descObj.parent) { return descObj.parent.posBeforeChild(descObj) }\n }, outerDeco, innerDeco);\n\n var dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom) { dom = document.createTextNode(node.text); }\n else if (dom.nodeType != 3) { throw new RangeError(\"Text must be rendered as a DOM text node\") }\n } else if (!dom) {\n((assign = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)), dom = assign.dom, contentDOM = assign.contentDOM));\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by
        \n if (!dom.hasAttribute(\"contenteditable\")) { dom.contentEditable = false; }\n if (node.type.spec.draggable) { dom.draggable = true; }\n }\n\n var nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n\n if (spec)\n { return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM,\n spec, view, pos + 1) }\n else if (node.isText)\n { return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) }\n else\n { return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos + 1) }\n };\n\n NodeViewDesc.prototype.parseRule = function parseRule () {\n var this$1 = this;\n\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView) { return null }\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n var rule = {node: this.node.type.name, attrs: this.node.attrs};\n if (this.node.type.spec.code) { rule.preserveWhitespace = \"full\"; }\n if (this.contentDOM && !this.contentLost) { rule.contentElement = this.contentDOM; }\n else { rule.getContent = function () { return this$1.contentDOM ? Fragment.empty : this$1.node.content; }; }\n return rule\n };\n\n NodeViewDesc.prototype.matchesNode = function matchesNode (node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco)\n };\n\n prototypeAccessors$3.size.get = function () { return this.node.nodeSize };\n\n prototypeAccessors$3.border.get = function () { return this.node.isLeaf ? 0 : 1 };\n\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n NodeViewDesc.prototype.updateChildren = function updateChildren (view, pos) {\n var this$1 = this;\n\n var inline = this.node.inlineContent, off = pos;\n var composition = view.composing && this.localCompositionInfo(view, pos);\n var localComposition = composition && composition.pos > -1 ? composition : null;\n var compositionInChild = composition && composition.pos < 0;\n var updater = new ViewTreeUpdater(this, localComposition && localComposition.node);\n iterDeco(this.node, this.innerDeco, function (widget, i, insideNode) {\n if (widget.spec.marks)\n { updater.syncToMarks(widget.spec.marks, inline, view); }\n else if (widget.type.side >= 0 && !insideNode)\n { updater.syncToMarks(i == this$1.node.childCount ? Mark.none : this$1.node.child(i).marks, inline, view); }\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, function (child, outerDeco, innerDeco, i) {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view);\n // Try several strategies for drawing this node\n var compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ; else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ; else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i)) ; else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks(nothing, inline, view);\n if (this.node.isTextblock) { updater.addTextblockHacks(); }\n updater.destroyRest();\n\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition) { this.protectLocalComposition(view, localComposition); }\n renderDescs(this.contentDOM, this.children, view);\n if (result.ios) { iosHacks(this.dom); }\n }\n };\n\n NodeViewDesc.prototype.localCompositionInfo = function localCompositionInfo (view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n var ref = view.state.selection;\n var from = ref.from;\n var to = ref.to;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size) { return }\n var sel = view.root.getSelection();\n var textNode = nearbyTextNode(sel.focusNode, sel.focusOffset);\n if (!textNode || !this.dom.contains(textNode.parentNode)) { return }\n\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n var text = textNode.nodeValue;\n var textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : {node: textNode, pos: textPos, text: text}\n } else {\n return {node: textNode, pos: -1}\n }\n };\n\n NodeViewDesc.prototype.protectLocalComposition = function protectLocalComposition (view, ref) {\n var node = ref.node;\n var pos = ref.pos;\n var text = ref.text;\n\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node)) { return }\n\n // Create a composition view for the orphaned nodes\n var topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM) { break }\n while (topNode.previousSibling) { topNode.parentNode.removeChild(topNode.previousSibling); }\n while (topNode.nextSibling) { topNode.parentNode.removeChild(topNode.nextSibling); }\n if (topNode.pmViewDesc) { topNode.pmViewDesc = null; }\n }\n var desc = new CompositionViewDesc(this, topNode, node, text);\n view.compositionNodes.push(desc);\n\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n };\n\n // : (Node, [Decoration], DecorationSource, EditorView) → bool\n // If this desc be updated to match the given node decoration,\n // do so and return true.\n NodeViewDesc.prototype.update = function update (node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node)) { return false }\n this.updateInner(node, outerDeco, innerDeco, view);\n return true\n };\n\n NodeViewDesc.prototype.updateInner = function updateInner (node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM) { this.updateChildren(view, this.posAtStart); }\n this.dirty = NOT_DIRTY;\n };\n\n NodeViewDesc.prototype.updateOuterDeco = function updateOuterDeco (outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco)) { return }\n var needsWrap = this.nodeDOM.nodeType != 1;\n var oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM,\n computeOuterDeco(this.outerDeco, this.node, needsWrap),\n computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = null;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n };\n\n // Mark this node as being the selected node.\n NodeViewDesc.prototype.selectNode = function selectNode () {\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable) { this.dom.draggable = true; }\n };\n\n // Remove selected node marking from this node.\n NodeViewDesc.prototype.deselectNode = function deselectNode () {\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable) { this.dom.removeAttribute(\"draggable\"); }\n };\n\n prototypeAccessors$3.domAtom.get = function () { return this.node.isAtom };\n\n Object.defineProperties( NodeViewDesc.prototype, prototypeAccessors$3 );\n\n return NodeViewDesc;\n}(ViewDesc));\n\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n return new NodeViewDesc(null, doc, outerDeco, innerDeco, dom, dom, dom, view, 0)\n}\n\nvar TextViewDesc = /*@__PURE__*/(function (NodeViewDesc) {\n function TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n NodeViewDesc.call(this, parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view);\n }\n\n if ( NodeViewDesc ) TextViewDesc.__proto__ = NodeViewDesc;\n TextViewDesc.prototype = Object.create( NodeViewDesc && NodeViewDesc.prototype );\n TextViewDesc.prototype.constructor = TextViewDesc;\n\n var prototypeAccessors$4 = { domAtom: { configurable: true } };\n\n TextViewDesc.prototype.parseRule = function parseRule () {\n var skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco) { skip = skip.parentNode; }\n return {skip: skip || true}\n };\n\n TextViewDesc.prototype.update = function update (node, outerDeco, _, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node)) { return false }\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM) { view.trackWrites = null; }\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true\n };\n\n TextViewDesc.prototype.inParent = function inParent () {\n var parentDOM = this.parent.contentDOM;\n for (var n = this.nodeDOM; n; n = n.parentNode) { if (n == parentDOM) { return true } }\n return false\n };\n\n TextViewDesc.prototype.domFromPos = function domFromPos (pos) {\n return {node: this.nodeDOM, offset: pos}\n };\n\n TextViewDesc.prototype.localPosFromDOM = function localPosFromDOM (dom, offset, bias) {\n if (dom == this.nodeDOM) { return this.posAtStart + Math.min(offset, this.node.text.length) }\n return NodeViewDesc.prototype.localPosFromDOM.call(this, dom, offset, bias)\n };\n\n TextViewDesc.prototype.ignoreMutation = function ignoreMutation (mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\"\n };\n\n TextViewDesc.prototype.slice = function slice (from, to, view) {\n var node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view)\n };\n\n TextViewDesc.prototype.markDirty = function markDirty (from, to) {\n NodeViewDesc.prototype.markDirty.call(this, from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n { this.dirty = NODE_DIRTY; }\n };\n\n prototypeAccessors$4.domAtom.get = function () { return false };\n\n Object.defineProperties( TextViewDesc.prototype, prototypeAccessors$4 );\n\n return TextViewDesc;\n}(NodeViewDesc));\n\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nvar TrailingHackViewDesc = /*@__PURE__*/(function (ViewDesc) {\n function TrailingHackViewDesc () {\n ViewDesc.apply(this, arguments);\n }\n\n if ( ViewDesc ) TrailingHackViewDesc.__proto__ = ViewDesc;\n TrailingHackViewDesc.prototype = Object.create( ViewDesc && ViewDesc.prototype );\n TrailingHackViewDesc.prototype.constructor = TrailingHackViewDesc;\n\n var prototypeAccessors$5 = { domAtom: { configurable: true },ignoreForCoords: { configurable: true } };\n\n TrailingHackViewDesc.prototype.parseRule = function parseRule () { return {ignore: true} };\n TrailingHackViewDesc.prototype.matchesHack = function matchesHack (nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName };\n prototypeAccessors$5.domAtom.get = function () { return true };\n prototypeAccessors$5.ignoreForCoords.get = function () { return this.dom.nodeName == \"IMG\" };\n\n Object.defineProperties( TrailingHackViewDesc.prototype, prototypeAccessors$5 );\n\n return TrailingHackViewDesc;\n}(ViewDesc));\n\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nvar CustomNodeViewDesc = /*@__PURE__*/(function (NodeViewDesc) {\n function CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n NodeViewDesc.call(this, parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n\n if ( NodeViewDesc ) CustomNodeViewDesc.__proto__ = NodeViewDesc;\n CustomNodeViewDesc.prototype = Object.create( NodeViewDesc && NodeViewDesc.prototype );\n CustomNodeViewDesc.prototype.constructor = CustomNodeViewDesc;\n\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n CustomNodeViewDesc.prototype.update = function update (node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY) { return false }\n if (this.spec.update) {\n var result = this.spec.update(node, outerDeco, innerDeco);\n if (result) { this.updateInner(node, outerDeco, innerDeco, view); }\n return result\n } else if (!this.contentDOM && !node.isLeaf) {\n return false\n } else {\n return NodeViewDesc.prototype.update.call(this, node, outerDeco, innerDeco, view)\n }\n };\n\n CustomNodeViewDesc.prototype.selectNode = function selectNode () {\n this.spec.selectNode ? this.spec.selectNode() : NodeViewDesc.prototype.selectNode.call(this);\n };\n\n CustomNodeViewDesc.prototype.deselectNode = function deselectNode () {\n this.spec.deselectNode ? this.spec.deselectNode() : NodeViewDesc.prototype.deselectNode.call(this);\n };\n\n CustomNodeViewDesc.prototype.setSelection = function setSelection (anchor, head, root, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, root)\n : NodeViewDesc.prototype.setSelection.call(this, anchor, head, root, force);\n };\n\n CustomNodeViewDesc.prototype.destroy = function destroy () {\n if (this.spec.destroy) { this.spec.destroy(); }\n NodeViewDesc.prototype.destroy.call(this);\n };\n\n CustomNodeViewDesc.prototype.stopEvent = function stopEvent (event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false\n };\n\n CustomNodeViewDesc.prototype.ignoreMutation = function ignoreMutation (mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : NodeViewDesc.prototype.ignoreMutation.call(this, mutation)\n };\n\n return CustomNodeViewDesc;\n}(NodeViewDesc));\n\n// : (dom.Node, [ViewDesc])\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n var dom = parentDOM.firstChild, written = false;\n for (var i = 0; i < descs.length; i++) {\n var desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) { dom = rm(dom); written = true; }\n dom = dom.nextSibling;\n } else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n var pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) { dom = rm(dom); written = true; }\n if (written && view.trackWrites == parentDOM) { view.trackWrites = null; }\n}\n\nfunction OuterDecoLevel(nodeName) {\n if (nodeName) { this.nodeName = nodeName; }\n}\nOuterDecoLevel.prototype = Object.create(null);\n\nvar noDeco = [new OuterDecoLevel];\n\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0) { return noDeco }\n\n var top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n\n for (var i = 0; i < outerDeco.length; i++) {\n var attrs = outerDeco[i].type.attrs;\n if (!attrs) { continue }\n if (attrs.nodeName)\n { result.push(top = new OuterDecoLevel(attrs.nodeName)); }\n\n for (var name in attrs) {\n var val = attrs[name];\n if (val == null) { continue }\n if (needsWrap && result.length == 1)\n { result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\")); }\n if (name == \"class\") { top.class = (top.class ? top.class + \" \" : \"\") + val; }\n else if (name == \"style\") { top.style = (top.style ? top.style + \";\" : \"\") + val; }\n else if (name != \"nodeName\") { top[name] = val; }\n }\n }\n\n return result\n}\n\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco) { return nodeDOM }\n\n var curDOM = nodeDOM;\n for (var i = 0; i < curComputed.length; i++) {\n var deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n var parent = (void 0);\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.tagName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n } else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM\n}\n\nfunction patchAttributes(dom, prev, cur) {\n for (var name in prev)\n { if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n { dom.removeAttribute(name); } }\n for (var name$1 in cur)\n { if (name$1 != \"class\" && name$1 != \"style\" && name$1 != \"nodeName\" && cur[name$1] != prev[name$1])\n { dom.setAttribute(name$1, cur[name$1]); } }\n if (prev.class != cur.class) {\n var prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : nothing;\n var curList = cur.class ? cur.class.split(\" \").filter(Boolean) : nothing;\n for (var i = 0; i < prevList.length; i++) { if (curList.indexOf(prevList[i]) == -1)\n { dom.classList.remove(prevList[i]); } }\n for (var i$1 = 0; i$1 < curList.length; i$1++) { if (prevList.indexOf(curList[i$1]) == -1)\n { dom.classList.add(curList[i$1]); } }\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n var prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n { dom.style.removeProperty(m[1]); }\n }\n if (cur.style)\n { dom.style.cssText += cur.style; }\n }\n}\n\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1))\n}\n\n// : ([Decoration], [Decoration]) → bool\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length) { return false }\n for (var i = 0; i < a.length; i++) { if (!a[i].type.eq(b[i].type)) { return false } }\n return true\n}\n\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n var next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next\n}\n\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nvar ViewTreeUpdater = function ViewTreeUpdater(top, lockedNode) {\n this.top = top;\n this.lock = lockedNode;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n\n this.preMatch = preMatch(top.node.content, top.children);\n};\n\n// Destroy and remove the children between the given indices in\n// `this.top`.\nViewTreeUpdater.prototype.destroyBetween = function destroyBetween (start, end) {\n if (start == end) { return }\n for (var i = start; i < end; i++) { this.top.children[i].destroy(); }\n this.top.children.splice(start, end - start);\n this.changed = true;\n};\n\n// Destroy all remaining children in `this.top`.\nViewTreeUpdater.prototype.destroyRest = function destroyRest () {\n this.destroyBetween(this.index, this.top.children.length);\n};\n\n// : ([Mark], EditorView)\n// Sync the current stack of mark descs with the given array of\n// marks, reusing existing mark descs when possible.\nViewTreeUpdater.prototype.syncToMarks = function syncToMarks (marks, inline, view) {\n var keep = 0, depth = this.stack.length >> 1;\n var maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1]).matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n { keep++; }\n\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n var found = -1;\n for (var i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n if (this.top.children[i].matchesMark(marks[depth])) { found = i; break }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n } else {\n var markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n};\n\n// : (Node, [Decoration], DecorationSource) → bool\n// Try to find a node desc matching the given data. Skip over it and\n// return true when successful.\nViewTreeUpdater.prototype.findNodeMatch = function findNodeMatch (node, outerDeco, innerDeco, index) {\n var children = this.top.children, found = -1;\n if (index >= this.preMatch.index) {\n for (var i = this.index; i < children.length; i++) { if (children[i].matchesNode(node, outerDeco, innerDeco)) {\n found = i;\n break\n } }\n } else {\n for (var i$1 = this.index, e = Math.min(children.length, i$1 + 1); i$1 < e; i$1++) {\n var child = children[i$1];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i$1;\n break\n }\n }\n }\n if (found < 0) { return false }\n this.destroyBetween(this.index, found);\n this.index++;\n return true\n};\n\nViewTreeUpdater.prototype.updateNodeAt = function updateNodeAt (node, outerDeco, innerDeco, index, view) {\n var child = this.top.children[index];\n if (!child.update(node, outerDeco, innerDeco, view)) { return false }\n this.destroyBetween(this.index, index);\n this.index = index + 1;\n return true\n};\n\nViewTreeUpdater.prototype.findIndexWithChild = function findIndexWithChild (domNode) {\n for (;;) {\n var parent = domNode.parentNode;\n if (!parent) { return -1 }\n if (parent == this.top.contentDOM) {\n var desc = domNode.pmViewDesc;\n if (desc) { for (var i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc) { return i }\n } }\n return -1\n }\n domNode = parent;\n }\n};\n\n// : (Node, [Decoration], DecorationSource, EditorView, Fragment, number) → bool\n// Try to update the next node, if any, to the given data. Checks\n// pre-matches to avoid overwriting nodes that could still be used.\nViewTreeUpdater.prototype.updateNextNode = function updateNextNode (node, outerDeco, innerDeco, view, index) {\n for (var i = this.index; i < this.top.children.length; i++) {\n var next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n var preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index) { return false }\n var nextDOM = next.dom;\n\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n var locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM) { this.changed = true; }\n this.index++;\n return true\n }\n break\n }\n }\n return false\n};\n\n// : (Node, [Decoration], DecorationSource, EditorView)\n// Insert the node as a newly created node desc.\nViewTreeUpdater.prototype.addNode = function addNode (node, outerDeco, innerDeco, view, pos) {\n this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos));\n this.changed = true;\n};\n\nViewTreeUpdater.prototype.placeWidget = function placeWidget (widget, view, pos) {\n var next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) && (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n } else {\n var desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n};\n\n// Make sure a textblock looks and behaves correctly in\n// contentEditable.\nViewTreeUpdater.prototype.addTextblockHacks = function addTextblockHacks () {\n var lastChild = this.top.children[this.index - 1];\n while (lastChild instanceof MarkViewDesc) { lastChild = lastChild.children[lastChild.children.length - 1]; }\n\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text)) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((result.safari || result.chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n { this.addHackNode(\"IMG\"); }\n this.addHackNode(\"BR\");\n }\n};\n\nViewTreeUpdater.prototype.addHackNode = function addHackNode (nodeName) {\n if (this.index < this.top.children.length && this.top.children[this.index].matchesHack(nodeName)) {\n this.index++;\n } else {\n var dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") { dom.className = \"ProseMirror-separator\"; }\n if (nodeName == \"BR\") { dom.className = \"ProseMirror-trailingBreak\"; }\n this.top.children.splice(this.index++, 0, new TrailingHackViewDesc(this.top, nothing, dom, null));\n this.changed = true;\n }\n};\n\n// : (Fragment, [ViewDesc]) → {index: number, matched: Map}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes. Returns the fragment index of the first node that\n// is part of the sequence of matched nodes at the end of the\n// fragment.\nfunction preMatch(frag, descs) {\n var fI = frag.childCount, dI = descs.length, matched = new Map;\n for (; fI > 0 && dI > 0; dI--) {\n var desc = descs[dI - 1], node = desc.node;\n if (!node) { continue }\n if (node != frag.child(fI - 1)) { break }\n --fI;\n matched.set(desc, fI);\n }\n return {index: fI, matched: matched}\n}\n\nfunction compareSide(a, b) { return a.type.side - b.type.side }\n\n// : (ViewDesc, DecorationSource, (Decoration, number), (Node, [Decoration], DecorationSource, number))\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n var locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (var i = 0; i < parent.childCount; i++) {\n var child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return\n }\n\n var decoIndex = 0, active = [], restNode = null;\n for (var parentIndex = 0;;) {\n if (decoIndex < locals.length && locals[decoIndex].to == offset) {\n var widget = locals[decoIndex++], widgets = (void 0);\n while (decoIndex < locals.length && locals[decoIndex].to == offset)\n { (widgets || (widgets = [widget])).push(locals[decoIndex++]); }\n if (widgets) {\n widgets.sort(compareSide);\n for (var i$1 = 0; i$1 < widgets.length; i$1++) { onWidget(widgets[i$1], parentIndex, !!restNode); }\n } else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n\n var child$1 = (void 0), index = (void 0);\n if (restNode) {\n index = -1;\n child$1 = restNode;\n restNode = null;\n } else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child$1 = parent.child(parentIndex++);\n } else {\n break\n }\n\n for (var i$2 = 0; i$2 < active.length; i$2++) { if (active[i$2].to <= offset) { active.splice(i$2--, 1); } }\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n { active.push(locals[decoIndex++]); }\n\n var end = offset + child$1.nodeSize;\n if (child$1.isText) {\n var cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt) { cutAt = locals[decoIndex].from; }\n for (var i$3 = 0; i$3 < active.length; i$3++) { if (active[i$3].to < cutAt) { cutAt = active[i$3].to; } }\n if (cutAt < end) {\n restNode = child$1.cut(cutAt - offset);\n child$1 = child$1.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n\n var outerDeco = !active.length ? nothing\n : child$1.isInline && !child$1.isLeaf ? active.filter(function (d) { return !d.inline; })\n : active.slice();\n onNode(child$1, outerDeco, deco.forChild(offset, child$1), index);\n offset = end;\n }\n}\n\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n var oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\n\nfunction nearbyTextNode(node, offset) {\n for (;;) {\n if (node.nodeType == 3) { return node }\n if (node.nodeType == 1 && offset > 0) {\n if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3)\n { return node.childNodes[offset] }\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n } else if (node.nodeType == 1 && offset < node.childNodes.length) {\n node = node.childNodes[offset];\n offset = 0;\n } else {\n return null\n }\n }\n}\n\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (var i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n var child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText) { continue }\n var str = child.text;\n while (i < frag.childCount) {\n var next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText) { break }\n str += next.text;\n }\n if (pos >= from) {\n var found = str.lastIndexOf(text, to - childStart);\n if (found >= 0 && found + text.length + childStart >= from)\n { return childStart + found }\n }\n }\n return -1\n}\n\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n var result = [];\n for (var i = 0, off = 0; i < nodes.length; i++) {\n var child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n } else {\n if (start < from) { result.push(child.slice(0, from - start, view)); }\n if (replacement) {\n result.push(replacement);\n replacement = null;\n }\n if (end > to) { result.push(child.slice(to - start, child.size, view)); }\n }\n }\n return result\n}\n\nfunction selectionFromDOM(view, origin) {\n var domSel = view.root.getSelection(), doc = view.state.doc;\n if (!domSel.focusNode) { return null }\n var nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n var head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);\n if (head < 0) { return null }\n var $head = doc.resolve(head), $anchor, selection;\n if (selectionCollapsed(domSel)) {\n $anchor = $head;\n while (nearestDesc && !nearestDesc.node) { nearestDesc = nearestDesc.parent; }\n if (nearestDesc && nearestDesc.node.isAtom && NodeSelection.isSelectable(nearestDesc.node) && nearestDesc.parent\n && !(nearestDesc.node.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n var pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n } else {\n var anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);\n if (anchor < 0) { return null }\n $anchor = doc.resolve(anchor);\n }\n\n if (!selection) {\n var bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection\n}\n\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom)\n}\n\nfunction selectionToDOM(view, force) {\n var sel = view.state.selection;\n syncNodeSelection(view, sel);\n\n if (!editorOwnsSelection(view)) { return }\n\n if (!force && view.mouseDown && view.mouseDown.allowDefault) {\n view.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return\n }\n\n view.domObserver.disconnectSelection();\n\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n } else {\n var anchor = sel.anchor;\n var head = sel.head;\n var resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n { resetEditableFrom = temporarilyEditableNear(view, sel.from); }\n if (!sel.empty && !sel.$from.parent.inlineContent)\n { resetEditableTo = temporarilyEditableNear(view, sel.to); }\n }\n view.docView.setSelection(anchor, head, view.root, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom) { resetEditable(resetEditableFrom); }\n if (resetEditableTo) { resetEditable(resetEditableTo); }\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n } else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document) { removeClassOnSelectionChange(view); }\n }\n }\n\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\n\nvar brokenSelectBetweenUneditable = result.safari || result.chrome && result.chrome_version < 63;\n\nfunction temporarilyEditableNear(view, pos) {\n var ref = view.docView.domFromPos(pos, 0);\n var node = ref.node;\n var offset = ref.offset;\n var after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n var before = offset ? node.childNodes[offset - 1] : null;\n if (result.safari && after && after.contentEditable == \"false\") { return setEditable(after) }\n if ((!after || after.contentEditable == \"false\") && (!before || before.contentEditable == \"false\")) {\n if (after) { return setEditable(after) }\n else if (before) { return setEditable(before) }\n }\n}\n\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (result.safari && element.draggable) { element.draggable = false; element.wasDraggable = true; }\n return element\n}\n\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) { element.draggable = true; element.wasDraggable = null; }\n}\n\nfunction removeClassOnSelectionChange(view) {\n var doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.hideSelectionGuard);\n var domSel = view.root.getSelection();\n var node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.hideSelectionGuard = function () {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.hideSelectionGuard);\n setTimeout(function () {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n { view.dom.classList.remove(\"ProseMirror-hideselection\"); }\n }, 20);\n }\n });\n}\n\nfunction selectCursorWrapper(view) {\n var domSel = view.root.getSelection(), range = document.createRange();\n var node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img) { range.setEnd(node.parentNode, domIndex(node) + 1); }\n else { range.setEnd(node, 0); }\n range.collapse(false);\n domSel.removeAllRanges();\n domSel.addRange(range);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && result.ie && result.ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\n\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n var desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc) { desc.selectNode(); }\n view.lastSelectedViewDesc = desc;\n }\n } else {\n clearNodeSelection(view);\n }\n}\n\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n { view.lastSelectedViewDesc.deselectNode(); }\n view.lastSelectedViewDesc = null;\n }\n}\n\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", function (f) { return f(view, $anchor, $head); })\n || TextSelection.between($anchor, $head, bias)\n}\n\nfunction hasFocusAndSelection(view) {\n if (view.editable && view.root.activeElement != view.dom) { return false }\n return hasSelection(view)\n}\n\nfunction hasSelection(view) {\n var sel = view.root.getSelection();\n if (!sel.anchorNode) { return false }\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode))\n } catch(_) {\n return false\n }\n}\n\nfunction anchorInRightPlace(view) {\n var anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n var domSel = view.root.getSelection();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset)\n}\n\nfunction moveSelectionBlock(state, dir) {\n var ref = state.selection;\n var $anchor = ref.$anchor;\n var $head = ref.$head;\n var $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n var $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir)\n}\n\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true\n}\n\nfunction selectHorizontally(view, dir, mods) {\n var sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (!sel.empty || mods.indexOf(\"s\") > -1) {\n return false\n } else if (view.endOfTextblock(dir > 0 ? \"right\" : \"left\")) {\n var next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection)) { return apply(view, next) }\n return false\n } else if (!(result.mac && mods.indexOf(\"m\") > -1)) {\n var $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText) { return false }\n var nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM)) { return false }\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head))\n } else if (result.webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)))\n } else {\n return false\n }\n }\n } else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from))\n } else {\n var next$1 = moveSelectionBlock(view.state, dir);\n if (next$1) { return apply(view, next$1) }\n return false\n }\n}\n\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n}\n\nfunction isIgnorable(dom) {\n var desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != \"BR\")\n}\n\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesLeft(view) {\n var sel = view.root.getSelection();\n var node = sel.focusNode, offset = sel.focusOffset;\n if (!node) { return }\n var moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (result.gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset])) { force = true; }\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break\n } else {\n var before = node.childNodes[offset - 1];\n if (isIgnorable(before)) {\n moveNode = node;\n moveOffset = --offset;\n } else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n } else { break }\n }\n } else if (isBlockNode(node)) {\n break\n } else {\n var prev = node.previousSibling;\n while (prev && isIgnorable(prev)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom) { break }\n offset = 0;\n } else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force) { setSelFocus(view, sel, node, offset); }\n else if (moveNode) { setSelFocus(view, sel, moveNode, moveOffset); }\n}\n\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesRight(view) {\n var sel = view.root.getSelection();\n var node = sel.focusNode, offset = sel.focusOffset;\n if (!node) { return }\n var len = nodeLen(node);\n var moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1) { break }\n var after = node.childNodes[offset];\n if (isIgnorable(after)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else { break }\n } else if (isBlockNode(node)) {\n break\n } else {\n var next = node.nextSibling;\n while (next && isIgnorable(next)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom) { break }\n offset = len = 0;\n } else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode) { setSelFocus(view, sel, moveNode, moveOffset); }\n}\n\nfunction isBlockNode(dom) {\n var desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock\n}\n\nfunction setSelFocus(view, sel, node, offset) {\n if (selectionCollapsed(sel)) {\n var range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n var state = view.state;\n // If no state update ends up happening, reset the selection.\n setTimeout(function () {\n if (view.state == state) { selectionToDOM(view); }\n }, 50);\n}\n\n// : (EditorState, number)\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n var sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1) { return false }\n if (result.mac && mods.indexOf(\"m\") > -1) { return false }\n var $from = sel.$from;\n var $to = sel.$to;\n\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n var next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n { return apply(view, next) }\n }\n if (!$from.parent.inlineContent) {\n var side = dir < 0 ? $from : $to;\n var beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false\n }\n return false\n}\n\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection)) { return true }\n var ref = view.state.selection;\n var $head = ref.$head;\n var $anchor = ref.$anchor;\n var empty = ref.empty;\n if (!$head.sameParent($anchor)) { return true }\n if (!empty) { return false }\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\")) { return true }\n var nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n var tr = view.state.tr;\n if (dir < 0) { tr.delete($head.pos - nextNode.nodeSize, $head.pos); }\n else { tr.delete($head.pos, $head.pos + nextNode.nodeSize); }\n view.dispatch(tr);\n return true\n }\n return false\n}\n\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!result.safari || view.state.selection.$head.parentOffset > 0) { return }\n var ref = view.root.getSelection();\n var focusNode = ref.focusNode;\n var focusOffset = ref.focusOffset;\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n var child = focusNode.firstChild;\n switchEditable(view, child, true);\n setTimeout(function () { return switchEditable(view, child, false); }, 20);\n }\n}\n\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\n\nfunction getMods(event) {\n var result = \"\";\n if (event.ctrlKey) { result += \"c\"; }\n if (event.metaKey) { result += \"m\"; }\n if (event.altKey) { result += \"a\"; }\n if (event.shiftKey) { result += \"s\"; }\n return result\n}\n\nfunction captureKeyDown(view, event) {\n var code = event.keyCode, mods = getMods(event);\n if (code == 8 || (result.mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view)\n } else if (code == 46 || (result.mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view)\n } else if (code == 13 || code == 27) { // Enter, Esc\n return true\n } else if (code == 37) { // Left arrow\n return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view)\n } else if (code == 39) { // Right arrow\n return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view)\n } else if (code == 38) { // Up arrow\n return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view)\n } else if (code == 40) { // Down arrow\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view)\n } else if (mods == (result.mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true\n }\n return false\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\n\nfunction parseBetween(view, from_, to_) {\n var ref = view.docView.parseRange(from_, to_);\n var parent = ref.node;\n var fromOffset = ref.fromOffset;\n var toOffset = ref.toOffset;\n var from = ref.from;\n var to = ref.to;\n\n var domSel = view.root.getSelection(), find = null, anchor = domSel.anchorNode;\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{node: anchor, offset: domSel.anchorOffset}];\n if (!selectionCollapsed(domSel))\n { find.push({node: domSel.focusNode, offset: domSel.focusOffset}); }\n }\n // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n if (result.chrome && view.lastKeyCode === 8) {\n for (var off = toOffset; off > fromOffset; off--) {\n var node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n if (node.nodeName == \"BR\" && !desc) { toOffset = off; break }\n if (!desc || desc.size) { break }\n }\n }\n var startDoc = view.state.doc;\n var parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n var $from = startDoc.resolve(from);\n\n var sel = null, doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.spec.code ? \"full\" : true,\n editableContent: true,\n findPositions: find,\n ruleFromNode: ruleFromNode,\n context: $from\n });\n if (find && find[0].pos != null) {\n var anchor$1 = find[0].pos, head = find[1] && find[1].pos;\n if (head == null) { head = anchor$1; }\n sel = {anchor: anchor$1 + from, head: head + from};\n }\n return {doc: doc, sel: sel, from: from, to: to}\n}\n\nfunction ruleFromNode(dom) {\n var desc = dom.pmViewDesc;\n if (desc) {\n return desc.parseRule()\n } else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (result.safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n var skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return {skip: skip}\n } else if (dom.parentNode.lastChild == dom || result.safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return {ignore: true}\n }\n } else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return {ignore: true}\n }\n}\n\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n if (from < 0) {\n var origin = view.lastSelectionTime > Date.now() - 50 ? view.lastSelectionOrigin : null;\n var newSel = selectionFromDOM(view, origin);\n if (newSel && !view.state.selection.eq(newSel)) {\n var tr$1 = view.state.tr.setSelection(newSel);\n if (origin == \"pointer\") { tr$1.setMeta(\"pointer\", true); }\n else if (origin == \"key\") { tr$1.scrollIntoView(); }\n view.dispatch(tr$1);\n }\n return\n }\n\n var $before = view.state.doc.resolve(from);\n var shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n\n var sel = view.state.selection;\n var parse = parseBetween(view, from, to);\n // Chrome sometimes leaves the cursor before the inserted text when\n // composing after a cursor wrapper. This moves it forward.\n if (result.chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from) {\n var text = view.cursorWrapper.deco.type.toDOM.nextSibling;\n var size = text && text.nodeValue ? text.nodeValue.length : 1;\n parse.sel = {anchor: parse.sel.anchor + size, head: parse.sel.anchor + size};\n }\n\n var doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n var preferredPos, preferredSide;\n // Prefer anchoring to end when Backspace is pressed\n if (view.lastKeyCode === 8 && Date.now() - 100 < view.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n } else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n view.lastKeyCode = null;\n\n var change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = {start: sel.from, endA: sel.to, endB: sel.to};\n } else if ((result.ios && view.lastIOSEnter > Date.now() - 225 || result.android) &&\n addedNodes.some(function (n) { return n.nodeName == \"DIV\" || n.nodeName == \"P\"; }) &&\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); })) {\n view.lastIOSEnter = 0;\n return\n } else {\n if (parse.sel) {\n var sel$1 = resolveSelection(view, view.state.doc, parse.sel);\n if (sel$1 && !sel$1.eq(view.state.selection)) { view.dispatch(view.state.tr.setSelection(sel$1)); }\n }\n return\n }\n }\n view.domChangeCount++;\n // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n if (view.state.selection.from < view.state.selection.to &&\n change.start == change.endB &&\n view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2) {\n change.start = view.state.selection.from;\n } else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2) {\n change.endB += (view.state.selection.to - change.endA);\n change.endA = view.state.selection.to;\n }\n }\n\n // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n if (result.ie && result.ie_version <= 11 && change.endB == change.start + 1 &&\n change.endA == change.start && change.start > parse.from &&\n parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n\n var $from = parse.doc.resolveNoCache(change.start - parse.from);\n var $to = parse.doc.resolveNoCache(change.endB - parse.from);\n var inlineChange = $from.sameParent($to) && $from.parent.inlineContent;\n var nextSel;\n // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n if (((result.ios && view.lastIOSEnter > Date.now() - 225 &&\n (!inlineChange || addedNodes.some(function (n) { return n.nodeName == \"DIV\" || n.nodeName == \"P\"; }))) ||\n (!inlineChange && $from.pos < parse.doc.content.size &&\n (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&\n nextSel.head == $to.pos)) &&\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); })) {\n view.lastIOSEnter = 0;\n return\n }\n // Same for backspace\n if (view.state.selection.anchor > change.start &&\n looksLikeJoin(doc, change.start, change.endA, $from, $to) &&\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(8, \"Backspace\")); })) {\n if (result.android && result.chrome) { view.domObserver.suppressSelectionUpdates(); } // #820\n return\n }\n\n // Chrome Android will occasionally, during composition, delete the\n // entire composition and then immediately insert it again. This is\n // used to detect that situation.\n if (result.chrome && result.android && change.toB == change.from)\n { view.lastAndroidDelete = Date.now(); }\n\n // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n if (result.android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(function () {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n }, 20);\n }\n\n var chFrom = change.start, chTo = change.endA;\n\n var tr, storedMarks, markChange, $from1;\n if (inlineChange) {\n if ($from.pos == $to.pos) { // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (result.ie && result.ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(function () { return selectionToDOM(view); }, 20);\n }\n tr = view.state.tr.delete(chFrom, chTo);\n storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n } else if ( // Adding or removing a mark\n change.endA == change.endB && ($from1 = doc.resolve(change.start)) &&\n (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset),\n $from1.parent.content.cut($from1.parentOffset, change.endA - $from1.start())))\n ) {\n tr = view.state.tr;\n if (markChange.type == \"add\") { tr.addMark(chFrom, chTo, markChange.mark); }\n else { tr.removeMark(chFrom, chTo, markChange.mark); }\n } else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n var text$1 = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n if (view.someProp(\"handleTextInput\", function (f) { return f(view, chFrom, chTo, text$1); })) { return }\n tr = view.state.tr.insertText(text$1, chFrom, chTo);\n }\n }\n\n if (!tr)\n { tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from)); }\n if (parse.sel) {\n var sel$2 = resolveSelection(view, tr.doc, parse.sel);\n // Chrome Android will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n if (sel$2 && !(result.chrome && result.android && view.composing && sel$2.empty &&\n (change.start != change.endB || view.lastAndroidDelete < Date.now() - 100) &&\n (sel$2.head == chFrom || sel$2.head == tr.mapping.map(chTo) - 1) ||\n result.ie && sel$2.empty && sel$2.head == chFrom))\n { tr.setSelection(sel$2); }\n }\n if (storedMarks) { tr.ensureMarks(storedMarks); }\n view.dispatch(tr.scrollIntoView());\n}\n\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size) { return null }\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head))\n}\n\n// : (Fragment, Fragment) → ?{mark: Mark, type: string}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n var curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n var added = curMarks, removed = prevMarks, type, mark, update;\n for (var i = 0; i < prevMarks.length; i++) { added = prevMarks[i].removeFromSet(added); }\n for (var i$1 = 0; i$1 < curMarks.length; i$1++) { removed = curMarks[i$1].removeFromSet(removed); }\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n update = function (node) { return node.mark(mark.addToSet(node.marks)); };\n } else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n update = function (node) { return node.mark(mark.removeFromSet(node.marks)); };\n } else {\n return null\n }\n var updated = [];\n for (var i$2 = 0; i$2 < prev.childCount; i$2++) { updated.push(update(prev.child(i$2))); }\n if (Fragment.from(updated).eq(cur)) { return {mark: mark, type: type} }\n}\n\nfunction looksLikeJoin(old, start, end, $newStart, $newEnd) {\n if (!$newStart.parent.isTextblock ||\n // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos ||\n // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n { return false }\n\n var $start = old.resolve(start);\n // Start must be at the end of a block\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n { return false }\n var $next = old.resolve(skipClosingAndOpening($start, true, true));\n // The next textblock must start before end and end near it\n if (!$next.parent.isTextblock || $next.pos > end ||\n skipClosingAndOpening($next, true, false) < end)\n { return false }\n\n // The fragments after the join point must match\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content)\n}\n\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n var depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n if (mayOpen) {\n var next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n return end\n}\n\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n var start = a.findDiffStart(b, pos);\n if (start == null) { return null }\n var ref = a.findDiffEnd(b, pos + a.size, pos + b.size);\n var endA = ref.a;\n var endB = ref.b;\n if (preferredSide == \"end\") {\n var adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n if (endA < start && a.size < b.size) {\n var move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n endB = start + (endB - endA);\n endA = start;\n } else if (endB < start) {\n var move$1 = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move$1;\n endA = start + (endA - endB);\n endB = start;\n }\n return {start: start, endA: endA, endB: endB}\n}\n\nfunction serializeForClipboard(view, slice) {\n var context = [];\n var content = slice.content;\n var openStart = slice.openStart;\n var openEnd = slice.openEnd;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n var node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n\n var serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n var doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, {document: doc}));\n\n var firstChild = wrap.firstChild, needsWrap;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (var i = needsWrap.length - 1; i >= 0; i--) {\n var wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild) { wrapper.appendChild(wrap.firstChild); }\n wrap.appendChild(wrapper);\n if (needsWrap[i] != \"tbody\") {\n openStart++;\n openEnd++;\n }\n }\n firstChild = wrap.firstChild;\n }\n\n if (firstChild && firstChild.nodeType == 1)\n { firstChild.setAttribute(\"data-pm-slice\", (openStart + \" \" + openEnd + \" \" + (JSON.stringify(context)))); }\n\n var text = view.someProp(\"clipboardTextSerializer\", function (f) { return f(slice); }) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n\n return {dom: wrap, text: text}\n}\n\n// : (EditorView, string, string, ?bool, ResolvedPos) → ?Slice\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n var dom, inCode = $context.parent.type.spec.code, slice;\n if (!html && !text) { return null }\n var asText = text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", function (f) { text = f(text, inCode || plainText); });\n if (inCode) { return text ? new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0) : Slice.empty }\n var parsed = view.someProp(\"clipboardTextParser\", function (f) { return f(text, $context, plainText); });\n if (parsed) {\n slice = parsed;\n } else {\n var marks = $context.marks();\n var ref = view.state;\n var schema = ref.schema;\n var serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(function (block) {\n var p = dom.appendChild(document.createElement(\"p\"));\n if (block) { p.appendChild(serializer.serializeNode(schema.text(block, marks))); }\n });\n }\n } else {\n view.someProp(\"transformPastedHTML\", function (f) { html = f(html); });\n dom = readHTML(html);\n if (result.webkit) { restoreReplacedSpaces(dom); }\n }\n\n var contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n var sliceData = contextNode && /^(\\d+) (\\d+) (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\"));\n if (!slice) {\n var parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {preserveWhitespace: !!(asText || sliceData), context: $context});\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[3]);\n } else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n var openStart = 0, openEnd = 0;\n for (var node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating;\n openStart++, node = node.firstChild) {}\n for (var node$1 = slice.content.lastChild; openEnd < slice.openEnd && !node$1.type.spec.isolating;\n openEnd++, node$1 = node$1.lastChild) {}\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n\n view.someProp(\"transformPasted\", function (f) { slice = f(slice); });\n return slice\n}\n\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2) { return fragment }\n var loop = function ( d ) {\n var parent = $context.node(d);\n var match = parent.contentMatchAt($context.index(d));\n var lastWrap = (void 0), result = [];\n fragment.forEach(function (node) {\n if (!result) { return }\n var wrap = match.findWrapping(node.type), inLast;\n if (!wrap) { return result = null }\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n } else {\n if (result.length) { result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length); }\n var wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type, wrapped.attrs);\n lastWrap = wrap;\n }\n });\n if (result) { return { v: Fragment.from(result) } }\n };\n\n for (var d = $context.depth; d >= 0; d--) {\n var returned = loop( d );\n\n if ( returned ) return returned.v;\n }\n return fragment\n}\n\nfunction withWrappers(node, wrap, from) {\n if ( from === void 0 ) from = 0;\n\n for (var i = wrap.length - 1; i >= from; i--)\n { node = wrap[i].create(null, Fragment.from(node)); }\n return node\n}\n\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n var inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner) { return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner)) }\n var match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n { return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1)))) }\n }\n}\n\nfunction closeRight(node, depth) {\n if (depth == 0) { return node }\n var fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n var fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill))\n}\n\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n var node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (depth < to - 1) { inner = closeRange(inner, side, from, to, depth + 1, openEnd); }\n if (depth >= from)\n { inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true)); }\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner))\n}\n\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n { slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd); }\n if (openEnd < slice.openEnd)\n { slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd); }\n return slice\n}\n\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"..\"` the table cells are ignored.\nvar wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\n\nvar _detachedDoc = null;\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"))\n}\n\nfunction readHTML(html) {\n var metas = /^(\\s*]*>)*/.exec(html);\n if (metas) { html = html.slice(metas[0].length); }\n var elt = detachedDoc().createElement(\"div\");\n var firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n { html = wrap.map(function (n) { return \"<\" + n + \">\"; }).join(\"\") + html + wrap.map(function (n) { return \"\"; }).reverse().join(\"\"); }\n elt.innerHTML = html;\n if (wrap) { for (var i = 0; i < wrap.length; i++) { elt = elt.querySelector(wrap[i]) || elt; } }\n return elt\n}\n\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n var nodes = dom.querySelectorAll(result.chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n { node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node); }\n }\n}\n\nfunction addContext(slice, context) {\n if (!slice.size) { return slice }\n var schema = slice.content.firstChild.type.schema, array;\n try { array = JSON.parse(context); }\n catch(e) { return slice }\n var content = slice.content;\n var openStart = slice.openStart;\n var openEnd = slice.openEnd;\n for (var i = array.length - 2; i >= 0; i -= 2) {\n var type = schema.nodes[array[i]];\n if (!type || type.hasRequiredAttrs()) { break }\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++; openEnd++;\n }\n return new Slice(content, openStart, openEnd)\n}\n\nvar observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nvar useCharData = result.ie && result.ie_version <= 11;\n\nvar SelectionState = function SelectionState() {\n this.anchorNode = this.anchorOffset = this.focusNode = this.focusOffset = null;\n};\n\nSelectionState.prototype.set = function set (sel) {\n this.anchorNode = sel.anchorNode; this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode; this.focusOffset = sel.focusOffset;\n};\n\nSelectionState.prototype.eq = function eq (sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset\n};\n\nvar DOMObserver = function DOMObserver(view, handleDOMChange) {\n var this$1 = this;\n\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = window.MutationObserver &&\n new window.MutationObserver(function (mutations) {\n for (var i = 0; i < mutations.length; i++) { this$1.queue.push(mutations[i]); }\n // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n if (result.ie && result.ie_version <= 11 && mutations.some(\n function (m) { return m.type == \"childList\" && m.removedNodes.length ||\n m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length; }))\n { this$1.flushSoon(); }\n else\n { this$1.flush(); }\n });\n this.currentSelection = new SelectionState;\n if (useCharData) {\n this.onCharData = function (e) {\n this$1.queue.push({target: e.target, type: \"characterData\", oldValue: e.prevValue});\n this$1.flushSoon();\n };\n }\n this.onSelectionChange = this.onSelectionChange.bind(this);\n this.suppressingSelectionUpdates = false;\n};\n\nDOMObserver.prototype.flushSoon = function flushSoon () {\n var this$1 = this;\n\n if (this.flushingSoon < 0)\n { this.flushingSoon = window.setTimeout(function () { this$1.flushingSoon = -1; this$1.flush(); }, 20); }\n};\n\nDOMObserver.prototype.forceFlush = function forceFlush () {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n};\n\nDOMObserver.prototype.start = function start () {\n if (this.observer)\n { this.observer.observe(this.view.dom, observeOptions); }\n if (useCharData)\n { this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData); }\n this.connectSelection();\n};\n\nDOMObserver.prototype.stop = function stop () {\n var this$1 = this;\n\n if (this.observer) {\n var take = this.observer.takeRecords();\n if (take.length) {\n for (var i = 0; i < take.length; i++) { this.queue.push(take[i]); }\n window.setTimeout(function () { return this$1.flush(); }, 20);\n }\n this.observer.disconnect();\n }\n if (useCharData) { this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData); }\n this.disconnectSelection();\n};\n\nDOMObserver.prototype.connectSelection = function connectSelection () {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n};\n\nDOMObserver.prototype.disconnectSelection = function disconnectSelection () {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n};\n\nDOMObserver.prototype.suppressSelectionUpdates = function suppressSelectionUpdates () {\n var this$1 = this;\n\n this.suppressingSelectionUpdates = true;\n setTimeout(function () { return this$1.suppressingSelectionUpdates = false; }, 50);\n};\n\nDOMObserver.prototype.onSelectionChange = function onSelectionChange () {\n if (!hasFocusAndSelection(this.view)) { return }\n if (this.suppressingSelectionUpdates) { return selectionToDOM(this.view) }\n // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n if (result.ie && result.ie_version <= 11 && !this.view.state.selection.empty) {\n var sel = this.view.root.getSelection();\n // Selection.isCollapsed isn't reliable on IE\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n { return this.flushSoon() }\n }\n this.flush();\n};\n\nDOMObserver.prototype.setCurSelection = function setCurSelection () {\n this.currentSelection.set(this.view.root.getSelection());\n};\n\nDOMObserver.prototype.ignoreSelectionChange = function ignoreSelectionChange (sel) {\n if (sel.rangeCount == 0) { return true }\n var container = sel.getRangeAt(0).commonAncestorContainer;\n var desc = this.view.docView.nearestDesc(container);\n if (desc && desc.ignoreMutation({type: \"selection\", target: container.nodeType == 3 ? container.parentNode : container})) {\n this.setCurSelection();\n return true\n }\n};\n\nDOMObserver.prototype.flush = function flush () {\n if (!this.view.docView || this.flushingSoon > -1) { return }\n var mutations = this.observer ? this.observer.takeRecords() : [];\n if (this.queue.length) {\n mutations = this.queue.concat(mutations);\n this.queue.length = 0;\n }\n\n var sel = this.view.root.getSelection();\n var newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasSelection(this.view) && !this.ignoreSelectionChange(sel);\n\n var from = -1, to = -1, typeOver = false, added = [];\n if (this.view.editable) {\n for (var i = 0; i < mutations.length; i++) {\n var result$1 = this.registerMutation(mutations[i], added);\n if (result$1) {\n from = from < 0 ? result$1.from : Math.min(result$1.from, from);\n to = to < 0 ? result$1.to : Math.max(result$1.to, to);\n if (result$1.typeOver) { typeOver = true; }\n }\n }\n }\n\n if (result.gecko && added.length > 1) {\n var brs = added.filter(function (n) { return n.nodeName == \"BR\"; });\n if (brs.length == 2) {\n var a = brs[0];\n var b = brs[1];\n if (a.parentNode && a.parentNode.parentNode == b.parentNode) { b.remove(); }\n else { a.remove(); }\n }\n }\n\n if (from > -1 || newSel) {\n if (from > -1) {\n this.view.docView.markDirty(from, to);\n checkCSS(this.view);\n }\n this.handleDOMChange(from, to, typeOver, added);\n if (this.view.docView.dirty) { this.view.updateState(this.view.state); }\n else if (!this.currentSelection.eq(sel)) { selectionToDOM(this.view); }\n this.currentSelection.set(sel);\n }\n};\n\nDOMObserver.prototype.registerMutation = function registerMutation (mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1) { return null }\n var desc = this.view.docView.nearestDesc(mut.target);\n if (mut.type == \"attributes\" &&\n (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n // Firefox sometimes fires spurious events for null/empty styles\n (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n { return null }\n if (!desc || desc.ignoreMutation(mut)) { return null }\n\n if (mut.type == \"childList\") {\n for (var i = 0; i < mut.addedNodes.length; i++) { added.push(mut.addedNodes[i]); }\n if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n { return {from: desc.posBefore, to: desc.posAfter} }\n var prev = mut.previousSibling, next = mut.nextSibling;\n if (result.ie && result.ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (var i$1 = 0; i$1 < mut.addedNodes.length; i$1++) {\n var ref = mut.addedNodes[i$1];\n var previousSibling = ref.previousSibling;\n var nextSibling = ref.nextSibling;\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0) { prev = previousSibling; }\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0) { next = nextSibling; }\n }\n }\n var fromOffset = prev && prev.parentNode == mut.target\n ? domIndex(prev) + 1 : 0;\n var from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n var toOffset = next && next.parentNode == mut.target\n ? domIndex(next) : mut.target.childNodes.length;\n var to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return {from: from, to: to}\n } else if (mut.type == \"attributes\") {\n return {from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border}\n } else { // \"characterData\"\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n }\n }\n};\n\nvar cssChecked = false;\n\nfunction checkCSS(view) {\n if (cssChecked) { return }\n cssChecked = true;\n if (getComputedStyle(view.dom).whiteSpace == \"normal\")\n { console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\"); }\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nvar handlers = {}, editHandlers = {};\n\nfunction initInput(view) {\n view.shiftKey = false;\n view.mouseDown = null;\n view.lastKeyCode = null;\n view.lastKeyCodeTime = 0;\n view.lastClick = {time: 0, x: 0, y: 0, type: \"\"};\n view.lastSelectionOrigin = null;\n view.lastSelectionTime = 0;\n\n view.lastIOSEnter = 0;\n view.lastIOSEnterFallbackTimeout = null;\n view.lastAndroidDelete = 0;\n\n view.composing = false;\n view.composingTimeout = null;\n view.compositionNodes = [];\n view.compositionEndedAt = -2e8;\n\n view.domObserver = new DOMObserver(view, function (from, to, typeOver, added) { return readDOMChange(view, from, to, typeOver, added); });\n view.domObserver.start();\n // Used by hacks like the beforeinput handler to check whether anything happened in the DOM\n view.domChangeCount = 0;\n\n view.eventHandlers = Object.create(null);\n var loop = function ( event ) {\n var handler = handlers[event];\n view.dom.addEventListener(event, view.eventHandlers[event] = function (event) {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n (view.editable || !(event.type in editHandlers)))\n { handler(view, event); }\n });\n };\n\n for (var event in handlers) loop( event );\n // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n if (result.safari) { view.dom.addEventListener(\"input\", function () { return null; }); }\n\n ensureListeners(view);\n}\n\nfunction setSelectionOrigin(view, origin) {\n view.lastSelectionOrigin = origin;\n view.lastSelectionTime = Date.now();\n}\n\nfunction destroyInput(view) {\n view.domObserver.stop();\n for (var type in view.eventHandlers)\n { view.dom.removeEventListener(type, view.eventHandlers[type]); }\n clearTimeout(view.composingTimeout);\n clearTimeout(view.lastIOSEnterFallbackTimeout);\n}\n\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", function (currentHandlers) {\n for (var type in currentHandlers) { if (!view.eventHandlers[type])\n { view.dom.addEventListener(type, view.eventHandlers[type] = function (event) { return runCustomHandler(view, event); }); } }\n });\n}\n\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", function (handlers) {\n var handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false\n })\n}\n\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles) { return true }\n if (event.defaultPrevented) { return false }\n for (var node = event.target; node != view.dom; node = node.parentNode)\n { if (!node || node.nodeType == 11 ||\n (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n { return false } }\n return true\n}\n\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] &&\n (view.editable || !(event.type in editHandlers)))\n { handlers[event.type](view, event); }\n}\n\neditHandlers.keydown = function (view, event) {\n view.shiftKey = event.keyCode == 16 || event.shiftKey;\n if (inOrNearComposition(view, event)) { return }\n if (event.keyCode != 229) { view.domObserver.forceFlush(); }\n view.lastKeyCode = event.keyCode;\n view.lastKeyCodeTime = Date.now();\n // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n if (result.ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n var now = Date.now();\n view.lastIOSEnter = now;\n view.lastIOSEnterFallbackTimeout = setTimeout(function () {\n if (view.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n view.lastIOSEnter = 0;\n }\n }, 200);\n } else if (view.someProp(\"handleKeyDown\", function (f) { return f(view, event); }) || captureKeyDown(view, event)) {\n event.preventDefault();\n } else {\n setSelectionOrigin(view, \"key\");\n }\n};\n\neditHandlers.keyup = function (view, e) {\n if (e.keyCode == 16) { view.shiftKey = false; }\n};\n\neditHandlers.keypress = function (view, event) {\n if (inOrNearComposition(view, event) || !event.charCode ||\n event.ctrlKey && !event.altKey || result.mac && event.metaKey) { return }\n\n if (view.someProp(\"handleKeyPress\", function (f) { return f(view, event); })) {\n event.preventDefault();\n return\n }\n\n var sel = view.state.selection;\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n var text = String.fromCharCode(event.charCode);\n if (!view.someProp(\"handleTextInput\", function (f) { return f(view, sel.$from.pos, sel.$to.pos, text); }))\n { view.dispatch(view.state.tr.insertText(text).scrollIntoView()); }\n event.preventDefault();\n }\n};\n\nfunction eventCoords(event) { return {left: event.clientX, top: event.clientY} }\n\nfunction isNear(event, click) {\n var dx = click.x - event.clientX, dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100\n}\n\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1) { return false }\n var $pos = view.state.doc.resolve(inside);\n var loop = function ( i ) {\n if (view.someProp(propName, function (f) { return i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n : f(view, pos, $pos.node(i), $pos.before(i), event, false); }))\n { return { v: true } }\n };\n\n for (var i = $pos.depth + 1; i > 0; i--) {\n var returned = loop( i );\n\n if ( returned ) return returned.v;\n }\n return false\n}\n\nfunction updateSelection(view, selection, origin) {\n if (!view.focused) { view.focus(); }\n var tr = view.state.tr.setSelection(selection);\n if (origin == \"pointer\") { tr.setMeta(\"pointer\", true); }\n view.dispatch(tr);\n}\n\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1) { return false }\n var $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true\n }\n return false\n}\n\nfunction selectClickedNode(view, inside) {\n if (inside == -1) { return false }\n var sel = view.state.selection, selectedNode, selectAt;\n if (sel instanceof NodeSelection) { selectedNode = sel.node; }\n\n var $pos = view.state.doc.resolve(inside);\n for (var i = $pos.depth + 1; i > 0; i--) {\n var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 &&\n i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n { selectAt = $pos.before(sel.$from.depth); }\n else\n { selectAt = $pos.before(i); }\n break\n }\n }\n\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true\n } else {\n return false\n }\n}\n\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n view.someProp(\"handleClick\", function (f) { return f(view, pos, event); }) ||\n (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside))\n}\n\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n view.someProp(\"handleDoubleClick\", function (f) { return f(view, pos, event); })\n}\n\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n view.someProp(\"handleTripleClick\", function (f) { return f(view, pos, event); }) ||\n defaultTripleClick(view, inside, event)\n}\n\nfunction defaultTripleClick(view, inside, event) {\n if (event.button != 0) { return false }\n var doc = view.state.doc;\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true\n }\n return false\n }\n\n var $pos = doc.resolve(inside);\n for (var i = $pos.depth + 1; i > 0; i--) {\n var node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n var nodePos = $pos.before(i);\n if (node.inlineContent)\n { updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\"); }\n else if (NodeSelection.isSelectable(node))\n { updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\"); }\n else\n { continue }\n return true\n }\n}\n\nfunction forceDOMFlush(view) {\n return endComposition(view)\n}\n\nvar selectNodeModifier = result.mac ? \"metaKey\" : \"ctrlKey\";\n\nhandlers.mousedown = function (view, event) {\n view.shiftKey = event.shiftKey;\n var flushed = forceDOMFlush(view);\n var now = Date.now(), type = \"singleClick\";\n if (now - view.lastClick.time < 500 && isNear(event, view.lastClick) && !event[selectNodeModifier]) {\n if (view.lastClick.type == \"singleClick\") { type = \"doubleClick\"; }\n else if (view.lastClick.type == \"doubleClick\") { type = \"tripleClick\"; }\n }\n view.lastClick = {time: now, x: event.clientX, y: event.clientY, type: type};\n\n var pos = view.posAtCoords(eventCoords(event));\n if (!pos) { return }\n\n if (type == \"singleClick\") {\n if (view.mouseDown) { view.mouseDown.done(); }\n view.mouseDown = new MouseDown(view, pos, event, flushed);\n } else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n } else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\n\nvar MouseDown = function MouseDown(view, pos, event, flushed) {\n var this$1 = this;\n\n this.view = view;\n this.startDoc = view.state.doc;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.selectNode = event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n this.delayedSelectionSync = false;\n\n var targetNode, targetPos;\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n } else {\n var $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n\n this.mightDrag = null;\n\n var target = flushed ? null : event.target;\n var targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc ? targetDesc.dom : null;\n\n var ref = view.state;\n var selection = ref.selection;\n if (event.button == 0 &&\n targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n { this.mightDrag = {node: targetNode,\n pos: targetPos,\n addAttr: this.target && !this.target.draggable,\n setUneditable: this.target && result.gecko && !this.target.hasAttribute(\"contentEditable\")}; }\n\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr) { this.target.draggable = true; }\n if (this.mightDrag.setUneditable)\n { setTimeout(function () {\n if (this$1.view.mouseDown == this$1) { this$1.target.setAttribute(\"contentEditable\", \"false\"); }\n }, 20); }\n this.view.domObserver.start();\n }\n\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n};\n\nMouseDown.prototype.done = function done () {\n var this$1 = this;\n\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr) { this.target.removeAttribute(\"draggable\"); }\n if (this.mightDrag.setUneditable) { this.target.removeAttribute(\"contentEditable\"); }\n this.view.domObserver.start();\n }\n if (this.delayedSelectionSync) { setTimeout(function () { return selectionToDOM(this$1.view); }); }\n this.view.mouseDown = null;\n};\n\nMouseDown.prototype.up = function up (event) {\n this.done();\n\n if (!this.view.dom.contains(event.target.nodeType == 3 ? event.target.parentNode : event.target))\n { return }\n\n var pos = this.pos;\n if (this.view.state.doc != this.startDoc) { pos = this.view.posAtCoords(eventCoords(event)); }\n\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n } else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n } else if (event.button == 0 &&\n (this.flushed ||\n // Safari ignores clicks on draggable elements\n (result.safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n (result.chrome && !(this.view.state.selection instanceof TextSelection) &&\n Math.min(Math.abs(pos.pos - this.view.state.selection.from),\n Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n } else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n};\n\nMouseDown.prototype.move = function move (event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n Math.abs(this.event.y - event.clientY) > 4))\n { this.allowDefault = true; }\n setSelectionOrigin(this.view, \"pointer\");\n if (event.buttons == 0) { this.done(); }\n};\n\nhandlers.touchdown = function (view) {\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\n\nhandlers.contextmenu = function (view) { return forceDOMFlush(view); };\n\nfunction inOrNearComposition(view, event) {\n if (view.composing) { return true }\n // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n if (result.safari && Math.abs(event.timeStamp - view.compositionEndedAt) < 500) {\n view.compositionEndedAt = -2e8;\n return true\n }\n return false\n}\n\n// Drop active composition after 5 seconds of inactivity on Android\nvar timeoutComposition = result.android ? 5000 : -1;\n\neditHandlers.compositionstart = editHandlers.compositionupdate = function (view) {\n if (!view.composing) {\n view.domObserver.flush();\n var state = view.state;\n var $pos = state.selection.$from;\n if (state.selection.empty &&\n (state.storedMarks ||\n (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(function (m) { return m.type.spec.inclusive === false; })))) {\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n } else {\n endComposition(view);\n // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n if (result.gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n var sel = view.root.getSelection();\n for (var node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n var before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n if (!before) { break }\n if (before.nodeType == 3) {\n sel.collapse(before, before.nodeValue.length);\n break\n } else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n view.composing = true;\n }\n scheduleComposeEnd(view, timeoutComposition);\n};\n\neditHandlers.compositionend = function (view, event) {\n if (view.composing) {\n view.composing = false;\n view.compositionEndedAt = event.timeStamp;\n scheduleComposeEnd(view, 20);\n }\n};\n\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.composingTimeout);\n if (delay > -1) { view.composingTimeout = setTimeout(function () { return endComposition(view); }, delay); }\n}\n\nfunction clearComposition(view) {\n if (view.composing) {\n view.composing = false;\n view.compositionEndedAt = timestampFromCustomEvent();\n }\n while (view.compositionNodes.length > 0) { view.compositionNodes.pop().markParentsDirty(); }\n}\n\nfunction timestampFromCustomEvent() {\n var event = document.createEvent(\"Event\");\n event.initEvent(\"event\", true, true);\n return event.timeStamp\n}\n\nfunction endComposition(view, forceUpdate) {\n view.domObserver.forceFlush();\n clearComposition(view);\n if (forceUpdate || view.docView.dirty) {\n var sel = selectionFromDOM(view);\n if (sel && !sel.eq(view.state.selection)) { view.dispatch(view.state.tr.setSelection(sel)); }\n else { view.updateState(view.state); }\n return true\n }\n return false\n}\n\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode) { return }\n var wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n var sel = getSelection(), range = document.createRange();\n range.selectNodeContents(dom);\n // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(function () {\n if (wrap.parentNode) { wrap.parentNode.removeChild(wrap); }\n view.focus();\n }, 50);\n}\n\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nvar brokenClipboardAPI = (result.ie && result.ie_version < 15) ||\n (result.ios && result.webkit_version < 604);\n\nhandlers.copy = editHandlers.cut = function (view, e) {\n var sel = view.state.selection, cut = e.type == \"cut\";\n if (sel.empty) { return }\n\n // IE and Edge's clipboard interface is completely broken\n var data = brokenClipboardAPI ? null : e.clipboardData;\n var slice = sel.content();\n var ref = serializeForClipboard(view, slice);\n var dom = ref.dom;\n var text = ref.text;\n if (data) {\n e.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n } else {\n captureCopy(view, dom);\n }\n if (cut) { view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\")); }\n};\n\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null\n}\n\nfunction capturePaste(view, e) {\n if (!view.dom.parentNode) { return }\n var plainText = view.shiftKey || view.state.selection.$from.parent.type.spec.code;\n var target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n if (!plainText) { target.contentEditable = \"true\"; }\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n setTimeout(function () {\n view.focus();\n if (target.parentNode) { target.parentNode.removeChild(target); }\n if (plainText) { doPaste(view, target.value, null, e); }\n else { doPaste(view, target.textContent, target.innerHTML, e); }\n }, 50);\n}\n\nfunction doPaste(view, text, html, e) {\n var slice = parseFromClipboard(view, text, html, view.shiftKey, view.state.selection.$from);\n if (view.someProp(\"handlePaste\", function (f) { return f(view, e, slice || Slice.empty); })) { return true }\n if (!slice) { return false }\n\n var singleNode = sliceSingleNode(slice);\n var tr = singleNode ? view.state.tr.replaceSelectionWith(singleNode, view.shiftKey) : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true\n}\n\neditHandlers.paste = function (view, e) {\n var data = brokenClipboardAPI ? null : e.clipboardData;\n if (data && doPaste(view, data.getData(\"text/plain\"), data.getData(\"text/html\"), e)) { e.preventDefault(); }\n else { capturePaste(view, e); }\n};\n\nvar Dragging = function Dragging(slice, move) {\n this.slice = slice;\n this.move = move;\n};\n\nvar dragCopyModifier = result.mac ? \"altKey\" : \"ctrlKey\";\n\nhandlers.dragstart = function (view, e) {\n var mouseDown = view.mouseDown;\n if (mouseDown) { mouseDown.done(); }\n if (!e.dataTransfer) { return }\n\n var sel = view.state.selection;\n var pos = sel.empty ? null : view.posAtCoords(eventCoords(e));\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1: sel.to)) ; else if (mouseDown && mouseDown.mightDrag) {\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos)));\n } else if (e.target && e.target.nodeType == 1) {\n var desc = view.docView.nearestDesc(e.target, true);\n if (desc && desc.node.type.spec.draggable && desc != view.docView)\n { view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, desc.posBefore))); }\n }\n var slice = view.state.selection.content();\n var ref = serializeForClipboard(view, slice);\n var dom = ref.dom;\n var text = ref.text;\n e.dataTransfer.clearData();\n e.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n // See https://github.com/ProseMirror/prosemirror/issues/1156\n e.dataTransfer.effectAllowed = \"copyMove\";\n if (!brokenClipboardAPI) { e.dataTransfer.setData(\"text/plain\", text); }\n view.dragging = new Dragging(slice, !e[dragCopyModifier]);\n};\n\nhandlers.dragend = function (view) {\n var dragging = view.dragging;\n window.setTimeout(function () {\n if (view.dragging == dragging) { view.dragging = null; }\n }, 50);\n};\n\neditHandlers.dragover = editHandlers.dragenter = function (_, e) { return e.preventDefault(); };\n\neditHandlers.drop = function (view, e) {\n var dragging = view.dragging;\n view.dragging = null;\n\n if (!e.dataTransfer) { return }\n\n var eventPos = view.posAtCoords(eventCoords(e));\n if (!eventPos) { return }\n var $mouse = view.state.doc.resolve(eventPos.pos);\n if (!$mouse) { return }\n var slice = dragging && dragging.slice;\n if (slice) {\n view.someProp(\"transformPasted\", function (f) { slice = f(slice); });\n } else {\n slice = parseFromClipboard(view, e.dataTransfer.getData(brokenClipboardAPI ? \"Text\" : \"text/plain\"),\n brokenClipboardAPI ? null : e.dataTransfer.getData(\"text/html\"), false, $mouse);\n }\n var move = dragging && !e[dragCopyModifier];\n if (view.someProp(\"handleDrop\", function (f) { return f(view, e, slice || Slice.empty, move); })) {\n e.preventDefault();\n return\n }\n if (!slice) { return }\n\n e.preventDefault();\n var insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n if (insertPos == null) { insertPos = $mouse.pos; }\n\n var tr = view.state.tr;\n if (move) { tr.deleteSelection(); }\n\n var pos = tr.mapping.map(insertPos);\n var isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n var beforeInsert = tr.doc;\n if (isNode)\n { tr.replaceRangeWith(pos, pos, slice.content.firstChild); }\n else\n { tr.replaceRange(pos, pos, slice); }\n if (tr.doc.eq(beforeInsert)) { return }\n\n var $pos = tr.doc.resolve(pos);\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n } else {\n var end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach(function (_from, _to, _newFrom, newTo) { return end = newTo; });\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n};\n\nhandlers.focus = function (view) {\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(function () {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.root.getSelection()))\n { selectionToDOM(view); }\n }, 20);\n }\n};\n\nhandlers.blur = function (view, e) {\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n if (e.relatedTarget && view.dom.contains(e.relatedTarget))\n { view.domObserver.currentSelection.set({}); }\n view.focused = false;\n }\n};\n\nhandlers.beforeinput = function (view, event) {\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (result.chrome && result.android && event.inputType == \"deleteContentBackward\") {\n var domChangeCount = view.domChangeCount;\n setTimeout(function () {\n if (view.domChangeCount != domChangeCount) { return } // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n view.dom.blur();\n view.focus();\n if (view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(8, \"Backspace\")); })) { return }\n var ref = view.state.selection;\n var $cursor = ref.$cursor;\n // Crude approximation of backspace behavior when no command handled it\n if ($cursor && $cursor.pos > 0) { view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView()); }\n }, 50);\n }\n};\n\n// Make sure all handlers get registered\nfor (var prop in editHandlers) { handlers[prop] = editHandlers[prop]; }\n\nfunction compareObjs(a, b) {\n if (a == b) { return true }\n for (var p in a) { if (a[p] !== b[p]) { return false } }\n for (var p$1 in b) { if (!(p$1 in a)) { return false } }\n return true\n}\n\nvar WidgetType = function WidgetType(toDOM, spec) {\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n this.toDOM = toDOM;\n};\n\nWidgetType.prototype.map = function map (mapping, span, offset, oldOffset) {\n var ref = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n var pos = ref.pos;\n var deleted = ref.deleted;\n return deleted ? null : new Decoration(pos - offset, pos - offset, this)\n};\n\nWidgetType.prototype.valid = function valid () { return true };\n\nWidgetType.prototype.eq = function eq (other) {\n return this == other ||\n (other instanceof WidgetType &&\n (this.spec.key && this.spec.key == other.spec.key ||\n this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)))\n};\n\nvar InlineType = function InlineType(attrs, spec) {\n this.spec = spec || noSpec;\n this.attrs = attrs;\n};\n\nInlineType.prototype.map = function map (mapping, span, offset, oldOffset) {\n var from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n var to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this)\n};\n\nInlineType.prototype.valid = function valid (_, span) { return span.from < span.to };\n\nInlineType.prototype.eq = function eq (other) {\n return this == other ||\n (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec))\n};\n\nInlineType.is = function is (span) { return span.type instanceof InlineType };\n\nvar NodeType = function NodeType(attrs, spec) {\n this.spec = spec || noSpec;\n this.attrs = attrs;\n};\n\nNodeType.prototype.map = function map (mapping, span, offset, oldOffset) {\n var from = mapping.mapResult(span.from + oldOffset, 1);\n if (from.deleted) { return null }\n var to = mapping.mapResult(span.to + oldOffset, -1);\n if (to.deleted || to.pos <= from.pos) { return null }\n return new Decoration(from.pos - offset, to.pos - offset, this)\n};\n\nNodeType.prototype.valid = function valid (node, span) {\n var ref = node.content.findIndex(span.from);\n var index = ref.index;\n var offset = ref.offset;\n var child;\n return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to\n};\n\nNodeType.prototype.eq = function eq (other) {\n return this == other ||\n (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec))\n};\n\n// ::- Decoration objects can be provided to the view through the\n// [`decorations` prop](#view.EditorProps.decorations). They come in\n// several variants—see the static members of this class for details.\nvar Decoration = function Decoration(from, to, type) {\n // :: number\n // The start position of the decoration.\n this.from = from;\n // :: number\n // The end position. Will be the same as `from` for [widget\n // decorations](#view.Decoration^widget).\n this.to = to;\n this.type = type;\n};\n\nvar prototypeAccessors$1 = { spec: { configurable: true },inline: { configurable: true } };\n\nDecoration.prototype.copy = function copy (from, to) {\n return new Decoration(from, to, this.type)\n};\n\nDecoration.prototype.eq = function eq (other, offset) {\n if ( offset === void 0 ) offset = 0;\n\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to\n};\n\nDecoration.prototype.map = function map (mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset)\n};\n\n// :: (number, union<(view: EditorView, getPos: () → number) → dom.Node, dom.Node>, ?Object) → Decoration\n// Creates a widget decoration, which is a DOM node that's shown in\n// the document at the given position. It is recommended that you\n// delay rendering the widget by passing a function that will be\n// called when the widget is actually drawn in a view, but you can\n// also directly pass a DOM node. `getPos` can be used to find the\n// widget's current document position.\n//\n// spec::- These options are supported:\n//\n// side:: ?number\n// Controls which side of the document position this widget is\n// associated with. When negative, it is drawn before a cursor\n// at its position, and content inserted at that position ends\n// up after the widget. When zero (the default) or positive, the\n// widget is drawn after the cursor and content inserted there\n// ends up before the widget.\n//\n// When there are multiple widgets at a given position, their\n// `side` values determine the order in which they appear. Those\n// with lower values appear first. The ordering of widgets with\n// the same `side` value is unspecified.\n//\n// When `marks` is null, `side` also determines the marks that\n// the widget is wrapped in—those of the node before when\n// negative, those of the node after when positive.\n//\n// marks:: ?[Mark]\n// The precise set of marks to draw around the widget.\n//\n// stopEvent:: ?(event: dom.Event) → bool\n// Can be used to control which DOM events, when they bubble out\n// of this widget, the editor view should ignore.\n//\n// ignoreSelection:: ?bool\n// When set (defaults to false), selection changes inside the\n// widget are ignored, and don't cause ProseMirror to try and\n// re-sync the selection with its selection state.\n//\n// key:: ?string\n// When comparing decorations of this type (in order to decide\n// whether it needs to be redrawn), ProseMirror will by default\n// compare the widget DOM node by identity. If you pass a key,\n// that key will be compared instead, which can be useful when\n// you generate decorations on the fly and don't want to store\n// and reuse DOM nodes. Make sure that any widgets with the same\n// key are interchangeable—if widgets differ in, for example,\n// the behavior of some event handler, they should get\n// different keys.\nDecoration.widget = function widget (pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec))\n};\n\n// :: (number, number, DecorationAttrs, ?Object) → Decoration\n// Creates an inline decoration, which adds the given attributes to\n// each inline node between `from` and `to`.\n//\n// spec::- These options are recognized:\n//\n// inclusiveStart:: ?bool\n// Determines how the left side of the decoration is\n// [mapped](#transform.Position_Mapping) when content is\n// inserted directly at that position. By default, the decoration\n// won't include the new content, but you can set this to `true`\n// to make it inclusive.\n//\n// inclusiveEnd:: ?bool\n// Determines how the right side of the decoration is mapped.\n// See\n// [`inclusiveStart`](#view.Decoration^inline^spec.inclusiveStart).\nDecoration.inline = function inline (from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec))\n};\n\n// :: (number, number, DecorationAttrs, ?Object) → Decoration\n// Creates a node decoration. `from` and `to` should point precisely\n// before and after a node in the document. That node, and only that\n// node, will receive the given attributes.\n//\n// spec::-\n//\n// Optional information to store with the decoration. It\n// is also used when comparing decorators for equality.\nDecoration.node = function node (from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec))\n};\n\n// :: Object\n// The spec provided when creating this decoration. Can be useful\n// if you've stored extra information in that object.\nprototypeAccessors$1.spec.get = function () { return this.type.spec };\n\nprototypeAccessors$1.inline.get = function () { return this.type instanceof InlineType };\n\nObject.defineProperties( Decoration.prototype, prototypeAccessors$1 );\n\n// DecorationAttrs:: interface\n// A set of attributes to add to a decorated node. Most properties\n// simply directly correspond to DOM attributes of the same name,\n// which will be set to the property's value. These are exceptions:\n//\n// class:: ?string\n// A CSS class name or a space-separated set of class names to be\n// _added_ to the classes that the node already had.\n//\n// style:: ?string\n// A string of CSS to be _added_ to the node's existing `style` property.\n//\n// nodeName:: ?string\n// When non-null, the target node is wrapped in a DOM element of\n// this type (and the other attributes are applied to this element).\n\nvar none = [], noSpec = {};\n\n// :: class extends DecorationSource\n// A collection of [decorations](#view.Decoration), organized in\n// such a way that the drawing algorithm can efficiently use and\n// compare them. This is a persistent data structure—it is not\n// modified, updates create a new value.\nvar DecorationSet = function DecorationSet(local, children) {\n this.local = local && local.length ? local : none;\n this.children = children && children.length ? children : none;\n};\n\n// :: (Node, [Decoration]) → DecorationSet\n// Create a set of decorations, using the structure of the given\n// document.\nDecorationSet.create = function create (doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty\n};\n\n// :: (?number, ?number, ?(spec: Object) → bool) → [Decoration]\n// Find all decorations in this set which touch the given range\n// (including decorations that start or end directly at the\n// boundaries) and match the given predicate on their spec. When\n// `start` and `end` are omitted, all decorations in the set are\n// considered. When `predicate` isn't given, all decorations are\n// assumed to match.\nDecorationSet.prototype.find = function find (start, end, predicate) {\n var result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result\n};\n\nDecorationSet.prototype.findInner = function findInner (start, end, result, offset, predicate) {\n for (var i = 0; i < this.local.length; i++) {\n var span = this.local[i];\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n { result.push(span.copy(span.from + offset, span.to + offset)); }\n }\n for (var i$1 = 0; i$1 < this.children.length; i$1 += 3) {\n if (this.children[i$1] < end && this.children[i$1 + 1] > start) {\n var childOff = this.children[i$1] + 1;\n this.children[i$1 + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n};\n\n// :: (Mapping, Node, ?Object) → DecorationSet\n// Map the set of decorations in response to a change in the\n// document.\n//\n// options::- An optional set of options.\n//\n// onRemove:: ?(decorationSpec: Object)\n// When given, this function will be called for each decoration\n// that gets dropped as a result of the mapping, passing the\n// spec of that decoration.\nDecorationSet.prototype.map = function map (mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0) { return this }\n return this.mapInner(mapping, doc, 0, 0, options || noSpec)\n};\n\nDecorationSet.prototype.mapInner = function mapInner (mapping, node, offset, oldOffset, options) {\n var newLocal;\n for (var i = 0; i < this.local.length; i++) {\n var mapped = this.local[i].map(mapping, offset, oldOffset);\n if (mapped && mapped.type.valid(node, mapped)) { (newLocal || (newLocal = [])).push(mapped); }\n else if (options.onRemove) { options.onRemove(this.local[i].spec); }\n }\n\n if (this.children.length)\n { return mapChildren(this.children, newLocal, mapping, node, offset, oldOffset, options) }\n else\n { return newLocal ? new DecorationSet(newLocal.sort(byPos)) : empty }\n};\n\n// :: (Node, [Decoration]) → DecorationSet\n// Add the given array of decorations to the ones in the set,\n// producing a new set. Needs access to the current document to\n// create the appropriate tree structure.\nDecorationSet.prototype.add = function add (doc, decorations) {\n if (!decorations.length) { return this }\n if (this == empty) { return DecorationSet.create(doc, decorations) }\n return this.addInner(doc, decorations, 0)\n};\n\nDecorationSet.prototype.addInner = function addInner (doc, decorations, offset) {\n var this$1 = this;\n\n var children, childIndex = 0;\n doc.forEach(function (childNode, childOffset) {\n var baseOffset = childOffset + offset, found;\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset))) { return }\n\n if (!children) { children = this$1.children.slice(); }\n while (childIndex < children.length && children[childIndex] < childOffset) { childIndex += 3; }\n if (children[childIndex] == childOffset)\n { children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1); }\n else\n { children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec)); }\n childIndex += 3;\n });\n\n var local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n for (var i = 0; i < local.length; i++) { if (!local[i].type.valid(doc, local[i])) { local.splice(i--, 1); } }\n\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local,\n children || this.children)\n};\n\n// :: ([Decoration]) → DecorationSet\n// Create a new set that contains the decorations in this set, minus\n// the ones in the given array.\nDecorationSet.prototype.remove = function remove (decorations) {\n if (decorations.length == 0 || this == empty) { return this }\n return this.removeInner(decorations, 0)\n};\n\nDecorationSet.prototype.removeInner = function removeInner (decorations, offset) {\n var children = this.children, local = this.local;\n for (var i = 0; i < children.length; i += 3) {\n var found = (void 0), from = children[i] + offset, to = children[i + 1] + offset;\n for (var j = 0, span = (void 0); j < decorations.length; j++) { if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null\n ;(found || (found = [])).push(span);\n }\n } }\n if (!found) { continue }\n if (children == this.children) { children = this.children.slice(); }\n var removed = children[i + 2].removeInner(found, from + 1);\n if (removed != empty) {\n children[i + 2] = removed;\n } else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n if (local.length) { for (var i$1 = 0, span$1 = (void 0); i$1 < decorations.length; i$1++) { if (span$1 = decorations[i$1]) {\n for (var j$1 = 0; j$1 < local.length; j$1++) { if (local[j$1].eq(span$1, offset)) {\n if (local == this.local) { local = this.local.slice(); }\n local.splice(j$1--, 1);\n } }\n } } }\n if (children == this.children && local == this.local) { return this }\n return local.length || children.length ? new DecorationSet(local, children) : empty\n};\n\nDecorationSet.prototype.forChild = function forChild (offset, node) {\n if (this == empty) { return this }\n if (node.isLeaf) { return DecorationSet.empty }\n\n var child, local;\n for (var i = 0; i < this.children.length; i += 3) { if (this.children[i] >= offset) {\n if (this.children[i] == offset) { child = this.children[i + 2]; }\n break\n } }\n var start = offset + 1, end = start + node.content.size;\n for (var i$1 = 0; i$1 < this.local.length; i$1++) {\n var dec = this.local[i$1];\n if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n var from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n if (from < to) { (local || (local = [])).push(dec.copy(from, to)); }\n }\n }\n if (local) {\n var localSet = new DecorationSet(local.sort(byPos));\n return child ? new DecorationGroup([localSet, child]) : localSet\n }\n return child || empty\n};\n\nDecorationSet.prototype.eq = function eq (other) {\n if (this == other) { return true }\n if (!(other instanceof DecorationSet) ||\n this.local.length != other.local.length ||\n this.children.length != other.children.length) { return false }\n for (var i = 0; i < this.local.length; i++)\n { if (!this.local[i].eq(other.local[i])) { return false } }\n for (var i$1 = 0; i$1 < this.children.length; i$1 += 3)\n { if (this.children[i$1] != other.children[i$1] ||\n this.children[i$1 + 1] != other.children[i$1 + 1] ||\n !this.children[i$1 + 2].eq(other.children[i$1 + 2])) { return false } }\n return true\n};\n\nDecorationSet.prototype.locals = function locals (node) {\n return removeOverlap(this.localsInner(node))\n};\n\nDecorationSet.prototype.localsInner = function localsInner (node) {\n if (this == empty) { return none }\n if (node.inlineContent || !this.local.some(InlineType.is)) { return this.local }\n var result = [];\n for (var i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType))\n { result.push(this.local[i]); }\n }\n return result\n};\n\n// DecorationSource:: interface\n// An object that can [provide](#view.EditorProps.decorations)\n// decorations. Implemented by [`DecorationSet`](#view.DecorationSet),\n// and passed to [node views](#view.EditorProps.nodeViews).\n//\n// map:: (Mapping, Node) → DecorationSource\n// Map the set of decorations in response to a change in the\n// document.\n\nvar empty = new DecorationSet();\n\n// :: DecorationSet\n// The empty set of decorations.\nDecorationSet.empty = empty;\n\nDecorationSet.removeOverlap = removeOverlap;\n\n// :- An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nvar DecorationGroup = function DecorationGroup(members) {\n this.members = members;\n};\n\nDecorationGroup.prototype.map = function map (mapping, doc) {\n var mappedDecos = this.members.map(\n function (member) { return member.map(mapping, doc, noSpec); }\n );\n return DecorationGroup.from(mappedDecos)\n};\n\nDecorationGroup.prototype.forChild = function forChild (offset, child) {\n if (child.isLeaf) { return DecorationSet.empty }\n var found = [];\n for (var i = 0; i < this.members.length; i++) {\n var result = this.members[i].forChild(offset, child);\n if (result == empty) { continue }\n if (result instanceof DecorationGroup) { found = found.concat(result.members); }\n else { found.push(result); }\n }\n return DecorationGroup.from(found)\n};\n\nDecorationGroup.prototype.eq = function eq (other) {\n if (!(other instanceof DecorationGroup) ||\n other.members.length != this.members.length) { return false }\n for (var i = 0; i < this.members.length; i++)\n { if (!this.members[i].eq(other.members[i])) { return false } }\n return true\n};\n\nDecorationGroup.prototype.locals = function locals (node) {\n var result, sorted = true;\n for (var i = 0; i < this.members.length; i++) {\n var locals = this.members[i].localsInner(node);\n if (!locals.length) { continue }\n if (!result) {\n result = locals;\n } else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n for (var j = 0; j < locals.length; j++) { result.push(locals[j]); }\n }\n }\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none\n};\n\n// : ([DecorationSet]) → union\n// Create a group for the given array of decoration sets, or return\n// a single set when possible.\nDecorationGroup.from = function from (members) {\n switch (members.length) {\n case 0: return empty\n case 1: return members[0]\n default: return new DecorationGroup(members)\n }\n};\n\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n var children = oldChildren.slice();\n\n // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n var shift = function (oldStart, oldEnd, newStart, newEnd) {\n for (var i = 0; i < children.length; i += 3) {\n var end = children[i + 1], dSize = (void 0);\n if (end == -1 || oldStart > end + oldOffset) { continue }\n if (oldEnd >= children[i] + oldOffset) {\n children[i + 1] = -1;\n } else if (newStart >= offset && (dSize = (newEnd - newStart) - (oldEnd - oldStart))) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n };\n for (var i = 0; i < mapping.maps.length; i++) { mapping.maps[i].forEach(shift); }\n\n // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n var mustRebuild = false;\n for (var i$1 = 0; i$1 < children.length; i$1 += 3) { if (children[i$1 + 1] == -1) { // Touched nodes\n var from = mapping.map(oldChildren[i$1] + oldOffset), fromLocal = from - offset;\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue\n }\n // Must read oldChildren because children was tagged with -1\n var to = mapping.map(oldChildren[i$1 + 1] + oldOffset, -1), toLocal = to - offset;\n var ref = node.content.findIndex(fromLocal);\n var index = ref.index;\n var childOffset = ref.offset;\n var childNode = node.maybeChild(index);\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n var mapped = children[i$1 + 2].mapInner(mapping, childNode, from + 1, oldChildren[i$1] + oldOffset + 1, options);\n if (mapped != empty) {\n children[i$1] = fromLocal;\n children[i$1 + 1] = toLocal;\n children[i$1 + 2] = mapped;\n } else {\n children[i$1 + 1] = -2;\n mustRebuild = true;\n }\n } else {\n mustRebuild = true;\n }\n } }\n\n // Remaining children must be collected and rebuilt into the appropriate structure\n if (mustRebuild) {\n var decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal || [], mapping,\n offset, oldOffset, options);\n var built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n for (var i$2 = 0; i$2 < children.length; i$2 += 3) { if (children[i$2 + 1] < 0) {\n children.splice(i$2, 3);\n i$2 -= 3;\n } }\n for (var i$3 = 0, j = 0; i$3 < built.children.length; i$3 += 3) {\n var from$1 = built.children[i$3];\n while (j < children.length && children[j] < from$1) { j += 3; }\n children.splice(j, 0, built.children[i$3], built.children[i$3 + 1], built.children[i$3 + 2]);\n }\n }\n\n return new DecorationSet(newLocal && newLocal.sort(byPos), children)\n}\n\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length) { return spans }\n var result = [];\n for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n return result\n}\n\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (var i = 0; i < set.local.length; i++) {\n var mapped = set.local[i].map(mapping, offset, oldOffset);\n if (mapped) { decorations.push(mapped); }\n else if (options.onRemove) { options.onRemove(set.local[i].spec); }\n }\n for (var i$1 = 0; i$1 < set.children.length; i$1 += 3)\n { gather(set.children[i$1 + 2], set.children[i$1] + oldOffset + 1); }\n }\n for (var i = 0; i < children.length; i += 3) { if (children[i + 1] == -1)\n { gather(children[i + 2], oldChildren[i] + oldOffset + 1); } }\n\n return decorations\n}\n\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf) { return null }\n var end = offset + node.nodeSize, found = null;\n for (var i = 0, span = (void 0); i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n(found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n return found\n}\n\nfunction withoutNulls(array) {\n var result = [];\n for (var i = 0; i < array.length; i++)\n { if (array[i] != null) { result.push(array[i]); } }\n return result\n}\n\n// : ([Decoration], Node, number) → DecorationSet\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n var children = [], hasNulls = false;\n node.forEach(function (childNode, localStart) {\n var found = takeSpansForNode(spans, childNode, localStart + offset);\n if (found) {\n hasNulls = true;\n var subtree = buildTree(found, childNode, offset + localStart + 1, options);\n if (subtree != empty)\n { children.push(localStart, localStart + childNode.nodeSize, subtree); }\n }\n });\n var locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n for (var i = 0; i < locals.length; i++) { if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove) { options.onRemove(locals[i].spec); }\n locals.splice(i--, 1);\n } }\n return locals.length || children.length ? new DecorationSet(locals, children) : empty\n}\n\n// : (Decoration, Decoration) → number\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to\n}\n\n// : ([Decoration]) → [Decoration]\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n var working = spans;\n for (var i = 0; i < working.length - 1; i++) {\n var span = working[i];\n if (span.from != span.to) { for (var j = i + 1; j < working.length; j++) {\n var next = working[j];\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans) { working = spans.slice(); }\n // Followed by a partially overlapping larger span. Split that\n // span.\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n continue\n } else {\n if (next.from < span.to) {\n if (working == spans) { working = spans.slice(); }\n // The end of this one overlaps with a subsequent span. Split\n // this one.\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n break\n }\n } }\n }\n return working\n}\n\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0) { i++; }\n array.splice(i, 0, deco);\n}\n\n// : (EditorView) → union\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n var found = [];\n view.someProp(\"decorations\", function (f) {\n var result = f(view.state);\n if (result && result != empty) { found.push(result); }\n });\n if (view.cursorWrapper)\n { found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco])); }\n return DecorationGroup.from(found)\n}\n\n// ::- An editor view manages the DOM structure that represents an\n// editable document. Its state and behavior are determined by its\n// [props](#view.DirectEditorProps).\nvar EditorView = function EditorView(place, props) {\n this._props = props;\n // :: EditorState\n // The view's current [state](#state.EditorState).\n this.state = props.state;\n\n this.directPlugins = props.plugins || [];\n this.directPlugins.forEach(checkStateComponent);\n\n this.dispatch = this.dispatch.bind(this);\n\n this._root = null;\n this.focused = false;\n // Kludge used to work around a Chrome bug\n this.trackWrites = null;\n\n // :: dom.Element\n // An editable DOM node containing the document. (You probably\n // should not directly interfere with its content.)\n this.dom = (place && place.mount) || document.createElement(\"div\");\n if (place) {\n if (place.appendChild) { place.appendChild(this.dom); }\n else if (place.apply) { place(this.dom); }\n else if (place.mount) { this.mounted = true; }\n }\n\n // :: bool\n // Indicates whether the editor is currently [editable](#view.EditorProps.editable).\n this.editable = getEditable(this);\n this.markCursor = null;\n this.cursorWrapper = null;\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n\n this.lastSelectedViewDesc = null;\n // :: ?{slice: Slice, move: bool}\n // When editor content is being dragged, this object contains\n // information about the dragged slice and whether it is being\n // copied or moved. At any other time, it is null.\n this.dragging = null;\n\n initInput(this);\n\n this.prevDirectPlugins = [];\n this.pluginViews = [];\n this.updatePluginViews();\n};\n\nvar prototypeAccessors$2 = { props: { configurable: true },root: { configurable: true } };\n\n// composing:: boolean\n// Holds `true` when a\n// [composition](https://developer.mozilla.org/en-US/docs/Mozilla/IME_handling_guide)\n// is active.\n\n// :: DirectEditorProps\n// The view's current [props](#view.EditorProps).\nprototypeAccessors$2.props.get = function () {\n if (this._props.state != this.state) {\n var prev = this._props;\n this._props = {};\n for (var name in prev) { this._props[name] = prev[name]; }\n this._props.state = this.state;\n }\n return this._props\n};\n\n// :: (DirectEditorProps)\n// Update the view's props. Will immediately cause an update to\n// the DOM.\nEditorView.prototype.update = function update (props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents) { ensureListeners(this); }\n this._props = props;\n if (props.plugins) {\n props.plugins.forEach(checkStateComponent);\n this.directPlugins = props.plugins;\n }\n this.updateStateInner(props.state, true);\n};\n\n// :: (DirectEditorProps)\n// Update the view by updating existing props object with the object\n// given as argument. Equivalent to `view.update(Object.assign({},\n// view.props, props))`.\nEditorView.prototype.setProps = function setProps (props) {\n var updated = {};\n for (var name in this._props) { updated[name] = this._props[name]; }\n updated.state = this.state;\n for (var name$1 in props) { updated[name$1] = props[name$1]; }\n this.update(updated);\n};\n\n// :: (EditorState)\n// Update the editor's `state` prop, without touching any of the\n// other props.\nEditorView.prototype.updateState = function updateState (state) {\n this.updateStateInner(state, this.state.plugins != state.plugins);\n};\n\nEditorView.prototype.updateStateInner = function updateStateInner (state, reconfigured) {\n var this$1 = this;\n\n var prev = this.state, redraw = false, updateSel = false;\n // When stored marks are added, stop composition, so that they can\n // be displayed.\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n this.state = state;\n if (reconfigured) {\n var nodeViews = buildNodeViews(this);\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n ensureListeners(this);\n }\n\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n var innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n\n var scroll = reconfigured ? \"reset\"\n : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n var updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n if (updateDoc || !state.selection.eq(prev.selection)) { updateSel = true; }\n var oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n\n if (updateSel) {\n this.domObserver.stop();\n // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n var forceSelUpdate = updateDoc && (result.ie || result.chrome) && !this.composing &&\n !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n var chromeKludge = result.chrome ? (this.trackWrites = this.root.getSelection().focusNode) : null;\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco([]);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n if (chromeKludge && !this.trackWrites) { forceSelUpdate = true; }\n }\n // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n if (forceSelUpdate ||\n !(this.mouseDown && this.domObserver.currentSelection.eq(this.root.getSelection()) && anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n } else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n this.domObserver.start();\n }\n\n this.updatePluginViews(prev);\n\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n } else if (scroll == \"to selection\") {\n var startDOM = this.root.getSelection().focusNode;\n if (this.someProp(\"handleScrollToSelection\", function (f) { return f(this$1); }))\n ; // Handled\n else if (state.selection instanceof NodeSelection)\n { scrollRectIntoView(this, this.docView.domAfterPos(state.selection.from).getBoundingClientRect(), startDOM); }\n else\n { scrollRectIntoView(this, this.coordsAtPos(state.selection.head, 1), startDOM); }\n } else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n};\n\nEditorView.prototype.destroyPluginViews = function destroyPluginViews () {\n var view;\n while (view = this.pluginViews.pop()) { if (view.destroy) { view.destroy(); } }\n};\n\nEditorView.prototype.updatePluginViews = function updatePluginViews (prevState) {\n if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n this.prevDirectPlugins = this.directPlugins;\n this.destroyPluginViews();\n for (var i = 0; i < this.directPlugins.length; i++) {\n var plugin = this.directPlugins[i];\n if (plugin.spec.view) { this.pluginViews.push(plugin.spec.view(this)); }\n }\n for (var i$1 = 0; i$1 < this.state.plugins.length; i$1++) {\n var plugin$1 = this.state.plugins[i$1];\n if (plugin$1.spec.view) { this.pluginViews.push(plugin$1.spec.view(this)); }\n }\n } else {\n for (var i$2 = 0; i$2 < this.pluginViews.length; i$2++) {\n var pluginView = this.pluginViews[i$2];\n if (pluginView.update) { pluginView.update(this, prevState); }\n }\n }\n};\n\n// :: (string, ?(prop: *) → *) → *\n// Goes over the values of a prop, first those provided directly,\n// then those from plugins given to the view, then from plugins in\n// the state (in order), and calls `f` every time a non-undefined\n// value is found. When `f` returns a truthy value, that is\n// immediately returned. When `f` isn't provided, it is treated as\n// the identity function (the prop value is returned directly).\nEditorView.prototype.someProp = function someProp (propName, f) {\n var prop = this._props && this._props[propName], value;\n if (prop != null && (value = f ? f(prop) : prop)) { return value }\n for (var i = 0; i < this.directPlugins.length; i++) {\n var prop$1 = this.directPlugins[i].props[propName];\n if (prop$1 != null && (value = f ? f(prop$1) : prop$1)) { return value }\n }\n var plugins = this.state.plugins;\n if (plugins) { for (var i$1 = 0; i$1 < plugins.length; i$1++) {\n var prop$2 = plugins[i$1].props[propName];\n if (prop$2 != null && (value = f ? f(prop$2) : prop$2)) { return value }\n } }\n};\n\n// :: () → bool\n// Query whether the view has focus.\nEditorView.prototype.hasFocus = function hasFocus () {\n return this.root.activeElement == this.dom\n};\n\n// :: ()\n// Focus the editor.\nEditorView.prototype.focus = function focus () {\n this.domObserver.stop();\n if (this.editable) { focusPreventScroll(this.dom); }\n selectionToDOM(this);\n this.domObserver.start();\n};\n\n// :: union\n// Get the document root in which the editor exists. This will\n// usually be the top-level `document`, but might be a [shadow\n// DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n// root if the editor is inside one.\nprototypeAccessors$2.root.get = function () {\n var cached = this._root;\n if (cached == null) { for (var search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n if (!search.getSelection) { Object.getPrototypeOf(search).getSelection = function () { return document.getSelection(); }; }\n return this._root = search\n }\n } }\n return cached || document\n};\n\n// :: ({left: number, top: number}) → ?{pos: number, inside: number}\n// Given a pair of viewport coordinates, return the document\n// position that corresponds to them. May return null if the given\n// coordinates aren't inside of the editor. When an object is\n// returned, its `pos` property is the position nearest to the\n// coordinates, and its `inside` property holds the position of the\n// inner node that the position falls inside of, or -1 if it is at\n// the top level, not in any node.\nEditorView.prototype.posAtCoords = function posAtCoords$1 (coords) {\n return posAtCoords(this, coords)\n};\n\n// :: (number, number) → {left: number, right: number, top: number, bottom: number}\n// Returns the viewport rectangle at a given document position.\n// `left` and `right` will be the same number, as this returns a\n// flat cursor-ish rectangle. If the position is between two things\n// that aren't directly adjacent, `side` determines which element is\n// used. When < 0, the element before the position is used,\n// otherwise the element after.\nEditorView.prototype.coordsAtPos = function coordsAtPos$1 (pos, side) {\n if ( side === void 0 ) side = 1;\n\n return coordsAtPos(this, pos, side)\n};\n\n// :: (number, number) → {node: dom.Node, offset: number}\n// Find the DOM position that corresponds to the given document\n// position. When `side` is negative, find the position as close as\n// possible to the content before the position. When positive,\n// prefer positions close to the content after the position. When\n// zero, prefer as shallow a position as possible.\n//\n// Note that you should **not** mutate the editor's internal DOM,\n// only inspect it (and even that is usually not necessary).\nEditorView.prototype.domAtPos = function domAtPos (pos, side) {\n if ( side === void 0 ) side = 0;\n\n return this.docView.domFromPos(pos, side)\n};\n\n// :: (number) → ?dom.Node\n// Find the DOM node that represents the document node after the\n// given position. May return `null` when the position doesn't point\n// in front of a node or if the node is inside an opaque node view.\n//\n// This is intended to be able to call things like\n// `getBoundingClientRect` on that DOM node. Do **not** mutate the\n// editor DOM directly, or add styling this way, since that will be\n// immediately overriden by the editor as it redraws the node.\nEditorView.prototype.nodeDOM = function nodeDOM (pos) {\n var desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null\n};\n\n// :: (dom.Node, number, ?number) → number\n// Find the document position that corresponds to a given DOM\n// position. (Whenever possible, it is preferable to inspect the\n// document structure directly, rather than poking around in the\n// DOM, but sometimes—for example when interpreting an event\n// target—you don't have a choice.)\n//\n// The `bias` parameter can be used to influence which side of a DOM\n// node to use when the position is inside a leaf node.\nEditorView.prototype.posAtDOM = function posAtDOM (node, offset, bias) {\n if ( bias === void 0 ) bias = -1;\n\n var pos = this.docView.posFromDOM(node, offset, bias);\n if (pos == null) { throw new RangeError(\"DOM position not inside the editor\") }\n return pos\n};\n\n// :: (union<\"up\", \"down\", \"left\", \"right\", \"forward\", \"backward\">, ?EditorState) → bool\n// Find out whether the selection is at the end of a textblock when\n// moving in a given direction. When, for example, given `\"left\"`,\n// it will return true if moving left from the current cursor\n// position would leave that position's parent textblock. Will apply\n// to the view's current state by default, but it is possible to\n// pass a different state.\nEditorView.prototype.endOfTextblock = function endOfTextblock$1 (dir, state) {\n return endOfTextblock(this, state || this.state, dir)\n};\n\n// :: ()\n// Removes the editor from the DOM and destroys all [node\n// views](#view.NodeView).\nEditorView.prototype.destroy = function destroy () {\n if (!this.docView) { return }\n destroyInput(this);\n this.destroyPluginViews();\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n } else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n this.docView.destroy();\n this.docView = null;\n};\n\n// Used for testing.\nEditorView.prototype.dispatchEvent = function dispatchEvent$1 (event) {\n return dispatchEvent(this, event)\n};\n\n// :: (Transaction)\n// Dispatch a transaction. Will call\n// [`dispatchTransaction`](#view.DirectEditorProps.dispatchTransaction)\n// when given, and otherwise defaults to applying the transaction to\n// the current state and calling\n// [`updateState`](#view.EditorView.updateState) with the result.\n// This method is bound to the view instance, so that it can be\n// easily passed around.\nEditorView.prototype.dispatch = function dispatch (tr) {\n var dispatchTransaction = this._props.dispatchTransaction;\n if (dispatchTransaction) { dispatchTransaction.call(this, tr); }\n else { this.updateState(this.state.apply(tr)); }\n};\n\nObject.defineProperties( EditorView.prototype, prototypeAccessors$2 );\n\nfunction computeDocDeco(view) {\n var attrs = Object.create(null);\n attrs.class = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n attrs.translate = \"no\";\n\n view.someProp(\"attributes\", function (value) {\n if (typeof value == \"function\") { value = value(view.state); }\n if (value) { for (var attr in value) {\n if (attr == \"class\")\n { attrs.class += \" \" + value[attr]; }\n else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n { attrs[attr] = String(value[attr]); }\n } }\n });\n\n return [Decoration.node(0, view.state.doc.content.size, attrs)]\n}\n\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n var dom = document.createElement(\"img\");\n dom.className = \"ProseMirror-separator\";\n dom.setAttribute(\"mark-placeholder\", \"true\");\n view.cursorWrapper = {dom: dom, deco: Decoration.widget(view.state.selection.head, dom, {raw: true, marks: view.markCursor})};\n } else {\n view.cursorWrapper = null;\n }\n}\n\nfunction getEditable(view) {\n return !view.someProp(\"editable\", function (value) { return value(view.state) === false; })\n}\n\nfunction selectionContextChanged(sel1, sel2) {\n var depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth)\n}\n\nfunction buildNodeViews(view) {\n var result = {};\n view.someProp(\"nodeViews\", function (obj) {\n for (var prop in obj) { if (!Object.prototype.hasOwnProperty.call(result, prop))\n { result[prop] = obj[prop]; } }\n });\n return result\n}\n\nfunction changedNodeViews(a, b) {\n var nA = 0, nB = 0;\n for (var prop in a) {\n if (a[prop] != b[prop]) { return true }\n nA++;\n }\n for (var _ in b) { nB++; }\n return nA != nB\n}\n\nfunction checkStateComponent(plugin) {\n if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n { throw new RangeError(\"Plugins passed directly to the view must not have a state component\") }\n}\n\n// EditorProps:: interface\n//\n// Props are configuration values that can be passed to an editor view\n// or included in a plugin. This interface lists the supported props.\n//\n// The various event-handling functions may all return `true` to\n// indicate that they handled the given event. The view will then take\n// care to call `preventDefault` on the event, except with\n// `handleDOMEvents`, where the handler itself is responsible for that.\n//\n// How a prop is resolved depends on the prop. Handler functions are\n// called one at a time, starting with the base props and then\n// searching through the plugins (in order of appearance) until one of\n// them returns true. For some props, the first plugin that yields a\n// value gets precedence.\n//\n// handleDOMEvents:: ?Object<(view: EditorView, event: dom.Event) → bool>\n// Can be an object mapping DOM event type names to functions that\n// handle them. Such functions will be called before any handling\n// ProseMirror does of events fired on the editable DOM element.\n// Contrary to the other event handling props, when returning true\n// from such a function, you are responsible for calling\n// `preventDefault` yourself (or not, if you want to allow the\n// default behavior).\n//\n// handleKeyDown:: ?(view: EditorView, event: dom.KeyboardEvent) → bool\n// Called when the editor receives a `keydown` event.\n//\n// handleKeyPress:: ?(view: EditorView, event: dom.KeyboardEvent) → bool\n// Handler for `keypress` events.\n//\n// handleTextInput:: ?(view: EditorView, from: number, to: number, text: string) → bool\n// Whenever the user directly input text, this handler is called\n// before the input is applied. If it returns `true`, the default\n// behavior of actually inserting the text is suppressed.\n//\n// handleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a click, from the inside out. The\n// `direct` flag will be true for the inner node.\n//\n// handleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is clicked, after `handleClickOn` handlers\n// have been called.\n//\n// handleDoubleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a double click.\n//\n// handleDoubleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is double-clicked, after `handleDoubleClickOn`.\n//\n// handleTripleClickOn:: ?(view: EditorView, pos: number, node: Node, nodePos: number, event: dom.MouseEvent, direct: bool) → bool\n// Called for each node around a triple click.\n//\n// handleTripleClick:: ?(view: EditorView, pos: number, event: dom.MouseEvent) → bool\n// Called when the editor is triple-clicked, after `handleTripleClickOn`.\n//\n// handlePaste:: ?(view: EditorView, event: dom.ClipboardEvent, slice: Slice) → bool\n// Can be used to override the behavior of pasting. `slice` is the\n// pasted content parsed by the editor, but you can directly access\n// the event to get at the raw content.\n//\n// handleDrop:: ?(view: EditorView, event: dom.Event, slice: Slice, moved: bool) → bool\n// Called when something is dropped on the editor. `moved` will be\n// true if this drop moves from the current selection (which should\n// thus be deleted).\n//\n// handleScrollToSelection:: ?(view: EditorView) → bool\n// Called when the view, after updating its state, tries to scroll\n// the selection into view. A handler function may return false to\n// indicate that it did not handle the scrolling and further\n// handlers or the default behavior should be tried.\n//\n// createSelectionBetween:: ?(view: EditorView, anchor: ResolvedPos, head: ResolvedPos) → ?Selection\n// Can be used to override the way a selection is created when\n// reading a DOM selection between the given anchor and head.\n//\n// domParser:: ?DOMParser\n// The [parser](#model.DOMParser) to use when reading editor changes\n// from the DOM. Defaults to calling\n// [`DOMParser.fromSchema`](#model.DOMParser^fromSchema) on the\n// editor's schema.\n//\n// transformPastedHTML:: ?(html: string) → string\n// Can be used to transform pasted HTML text, _before_ it is parsed,\n// for example to clean it up.\n//\n// clipboardParser:: ?DOMParser\n// The [parser](#model.DOMParser) to use when reading content from\n// the clipboard. When not given, the value of the\n// [`domParser`](#view.EditorProps.domParser) prop is used.\n//\n// transformPastedText:: ?(text: string, plain: bool) → string\n// Transform pasted plain text. The `plain` flag will be true when\n// the text is pasted as plain text.\n//\n// clipboardTextParser:: ?(text: string, $context: ResolvedPos, plain: bool) → Slice\n// A function to parse text from the clipboard into a document\n// slice. Called after\n// [`transformPastedText`](#view.EditorProps.transformPastedText).\n// The default behavior is to split the text into lines, wrap them\n// in `

        ` tags, and call\n// [`clipboardParser`](#view.EditorProps.clipboardParser) on it.\n// The `plain` flag will be true when the text is pasted as plain text.\n//\n// transformPasted:: ?(Slice) → Slice\n// Can be used to transform pasted content before it is applied to\n// the document.\n//\n// nodeViews:: ?Object<(node: Node, view: EditorView, getPos: () → number, decorations: [Decoration], innerDecorations: DecorationSource) → NodeView>\n// Allows you to pass custom rendering and behavior logic for nodes\n// and marks. Should map node and mark names to constructor\n// functions that produce a [`NodeView`](#view.NodeView) object\n// implementing the node's display behavior. For nodes, the third\n// argument `getPos` is a function that can be called to get the\n// node's current position, which can be useful when creating\n// transactions to update it. For marks, the third argument is a\n// boolean that indicates whether the mark's content is inline.\n//\n// `decorations` is an array of node or inline decorations that are\n// active around the node. They are automatically drawn in the\n// normal way, and you will usually just want to ignore this, but\n// they can also be used as a way to provide context information to\n// the node view without adding it to the document itself.\n//\n// `innerDecorations` holds the decorations for the node's content.\n// You can safely ignore this if your view has no content or a\n// `contentDOM` property, since the editor will draw the decorations\n// on the content. But if you, for example, want to create a nested\n// editor with the content, it may make sense to provide it with the\n// inner decorations.\n//\n// clipboardSerializer:: ?DOMSerializer\n// The DOM serializer to use when putting content onto the\n// clipboard. If not given, the result of\n// [`DOMSerializer.fromSchema`](#model.DOMSerializer^fromSchema)\n// will be used.\n//\n// clipboardTextSerializer:: ?(Slice) → string\n// A function that will be called to get the text for the current\n// selection when copying text to the clipboard. By default, the\n// editor will use [`textBetween`](#model.Node.textBetween) on the\n// selected range.\n//\n// decorations:: ?(state: EditorState) → ?DecorationSource\n// A set of [document decorations](#view.Decoration) to show in the\n// view.\n//\n// editable:: ?(state: EditorState) → bool\n// When this returns false, the content of the view is not directly\n// editable.\n//\n// attributes:: ?union, (EditorState) → ?Object>\n// Control the DOM attributes of the editable element. May be either\n// an object or a function going from an editor state to an object.\n// By default, the element will get a class `\"ProseMirror\"`, and\n// will have its `contentEditable` attribute determined by the\n// [`editable` prop](#view.EditorProps.editable). Additional classes\n// provided here will be added to the class. For other attributes,\n// the value provided first (as in\n// [`someProp`](#view.EditorView.someProp)) will be used.\n//\n// scrollThreshold:: ?union\n// Determines the distance (in pixels) between the cursor and the\n// end of the visible viewport at which point, when scrolling the\n// cursor into view, scrolling takes place. Defaults to 0.\n//\n// scrollMargin:: ?union\n// Determines the extra space (in pixels) that is left above or\n// below the cursor when it is scrolled into view. Defaults to 5.\n\n// DirectEditorProps:: interface extends EditorProps\n//\n// The props object given directly to the editor view supports two\n// fields that can't be used in plugins:\n//\n// state:: EditorState\n// The current state of the editor.\n//\n// plugins:: [Plugin]\n// A set of plugins to use in the view, applying their [plugin\n// view](#state.PluginSpec.view) and\n// [props](#state.PluginSpec.props). Passing plugins with a state\n// component (a [state field](#state.PluginSpec.state) field or a\n// [transaction)[#state.PluginSpec.filterTransaction] filter or\n// appender) will result in an error, since such plugins must be\n// present in the state to work.\n//\n// dispatchTransaction:: ?(tr: Transaction)\n// The callback over which to send transactions (state updates)\n// produced by the view. If you specify this, you probably want to\n// make sure this ends up calling the view's\n// [`updateState`](#view.EditorView.updateState) method with a new\n// state that has the transaction\n// [applied](#state.EditorState.apply). The callback will be bound to have\n// the view instance as its `this` binding.\n\nexport { Decoration, DecorationSet, EditorView, endComposition as __endComposition, parseFromClipboard as __parseFromClipboard, serializeForClipboard as __serializeForClipboard };\n","import { PluginKey, TextSelection, Selection, SelectionRange, NodeSelection, Plugin } from 'prosemirror-state';\nimport { Fragment, Slice } from 'prosemirror-model';\nimport { keydownHandler } from 'prosemirror-keymap';\nimport { Decoration, DecorationSet } from 'prosemirror-view';\nimport { Transform } from 'prosemirror-transform';\n\n// Because working with row and column-spanning cells is not quite\n// trivial, this code builds up a descriptive structure for a given\n// table node. The structures are cached with the (persistent) table\n// nodes as key, so that they only have to be recomputed when the\n// content of the table changes.\n//\n// This does mean that they have to store table-relative, not\n// document-relative positions. So code that uses them will typically\n// compute the start position of the table and offset positions passed\n// to or gotten from this structure by that amount.\n\nvar readFromCache, addToCache;\n// Prefer using a weak map to cache table maps. Fall back on a\n// fixed-size cache if that's not supported.\nif (typeof WeakMap != \"undefined\") {\n var cache = new WeakMap;\n readFromCache = function (key) { return cache.get(key); };\n addToCache = function (key, value) {\n cache.set(key, value);\n return value\n };\n} else {\n var cache$1 = [], cacheSize = 10, cachePos = 0;\n readFromCache = function (key) {\n for (var i = 0; i < cache$1.length; i += 2)\n { if (cache$1[i] == key) { return cache$1[i + 1] } }\n };\n addToCache = function (key, value) {\n if (cachePos == cacheSize) { cachePos = 0; }\n cache$1[cachePos++] = key;\n return cache$1[cachePos++] = value\n };\n}\n\nvar Rect = function Rect(left, top, right, bottom) {\n this.left = left; this.top = top; this.right = right; this.bottom = bottom;\n};\n\n// ::- A table map describes the structore of a given table. To avoid\n// recomputing them all the time, they are cached per table node. To\n// be able to do that, positions saved in the map are relative to the\n// start of the table, rather than the start of the document.\nvar TableMap = function TableMap(width, height, map, problems) {\n // :: number The width of the table\n this.width = width;\n // :: number The table's height\n this.height = height;\n // :: [number] A width * height array with the start position of\n // the cell covering that part of the table in each slot\n this.map = map;\n // An optional array of problems (cell overlap or non-rectangular\n // shape) for the table, used by the table normalizer.\n this.problems = problems;\n};\n\n// :: (number) → Rect\n// Find the dimensions of the cell at the given position.\nTableMap.prototype.findCell = function findCell (pos) {\n for (var i = 0; i < this.map.length; i++) {\n var curPos = this.map[i];\n if (curPos != pos) { continue }\n var left = i % this.width, top = (i / this.width) | 0;\n var right = left + 1, bottom = top + 1;\n for (var j = 1; right < this.width && this.map[i + j] == curPos; j++) { right++; }\n for (var j$1 = 1; bottom < this.height && this.map[i + (this.width * j$1)] == curPos; j$1++) { bottom++; }\n return new Rect(left, top, right, bottom)\n }\n throw new RangeError(\"No cell with offset \" + pos + \" found\")\n};\n\n// :: (number) → number\n// Find the left side of the cell at the given position.\nTableMap.prototype.colCount = function colCount (pos) {\n for (var i = 0; i < this.map.length; i++)\n { if (this.map[i] == pos) { return i % this.width } }\n throw new RangeError(\"No cell with offset \" + pos + \" found\")\n};\n\n// :: (number, string, number) → ?number\n// Find the next cell in the given direction, starting from the cell\n// at `pos`, if any.\nTableMap.prototype.nextCell = function nextCell (pos, axis, dir) {\n var ref = this.findCell(pos);\n var left = ref.left;\n var right = ref.right;\n var top = ref.top;\n var bottom = ref.bottom;\n if (axis == \"horiz\") {\n if (dir < 0 ? left == 0 : right == this.width) { return null }\n return this.map[top * this.width + (dir < 0 ? left - 1 : right)]\n } else {\n if (dir < 0 ? top == 0 : bottom == this.height) { return null }\n return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)]\n }\n};\n\n// :: (number, number) → Rect\n// Get the rectangle spanning the two given cells.\nTableMap.prototype.rectBetween = function rectBetween (a, b) {\n var ref = this.findCell(a);\n var leftA = ref.left;\n var rightA = ref.right;\n var topA = ref.top;\n var bottomA = ref.bottom;\n var ref$1 = this.findCell(b);\n var leftB = ref$1.left;\n var rightB = ref$1.right;\n var topB = ref$1.top;\n var bottomB = ref$1.bottom;\n return new Rect(Math.min(leftA, leftB), Math.min(topA, topB),\n Math.max(rightA, rightB), Math.max(bottomA, bottomB))\n};\n\n// :: (Rect) → [number]\n// Return the position of all cells that have the top left corner in\n// the given rectangle.\nTableMap.prototype.cellsInRect = function cellsInRect (rect) {\n var result = [], seen = {};\n for (var row = rect.top; row < rect.bottom; row++) {\n for (var col = rect.left; col < rect.right; col++) {\n var index = row * this.width + col, pos = this.map[index];\n if (seen[pos]) { continue }\n seen[pos] = true;\n if ((col != rect.left || !col || this.map[index - 1] != pos) &&\n (row != rect.top || !row || this.map[index - this.width] != pos))\n { result.push(pos); }\n }\n }\n return result\n};\n\n// :: (number, number, Node) → number\n// Return the position at which the cell at the given row and column\n// starts, or would start, if a cell started there.\nTableMap.prototype.positionAt = function positionAt (row, col, table) {\n for (var i = 0, rowStart = 0;; i++) {\n var rowEnd = rowStart + table.child(i).nodeSize;\n if (i == row) {\n var index = col + row * this.width, rowEndIndex = (row + 1) * this.width;\n // Skip past cells from previous rows (via rowspan)\n while (index < rowEndIndex && this.map[index] < rowStart) { index++; }\n return index == rowEndIndex ? rowEnd - 1 : this.map[index]\n }\n rowStart = rowEnd;\n }\n};\n\n// :: (Node) → TableMap\n// Find the table map for the given table node.\nTableMap.get = function get (table) {\n return readFromCache(table) || addToCache(table, computeMap(table))\n};\n\n// Compute a table map.\nfunction computeMap(table) {\n if (table.type.spec.tableRole != \"table\") { throw new RangeError(\"Not a table node: \" + table.type.name) }\n var width = findWidth(table), height = table.childCount;\n var map = [], mapPos = 0, problems = null, colWidths = [];\n for (var i = 0, e = width * height; i < e; i++) { map[i] = 0; }\n\n for (var row = 0, pos = 0; row < height; row++) {\n var rowNode = table.child(row);\n pos++;\n for (var i$1 = 0;; i$1++) {\n while (mapPos < map.length && map[mapPos] != 0) { mapPos++; }\n if (i$1 == rowNode.childCount) { break }\n var cellNode = rowNode.child(i$1);\n var ref = cellNode.attrs;\n var colspan = ref.colspan;\n var rowspan = ref.rowspan;\n var colwidth = ref.colwidth;\n for (var h = 0; h < rowspan; h++) {\n if (h + row >= height) {\n (problems || (problems = [])).push({type: \"overlong_rowspan\", pos: pos, n: rowspan - h});\n break\n }\n var start = mapPos + (h * width);\n for (var w = 0; w < colspan; w++) {\n if (map[start + w] == 0)\n { map[start + w] = pos; }\n else\n { (problems || (problems = [])).push({type: \"collision\", row: row, pos: pos, n: colspan - w}); }\n var colW = colwidth && colwidth[w];\n if (colW) {\n var widthIndex = ((start + w) % width) * 2, prev = colWidths[widthIndex];\n if (prev == null || (prev != colW && colWidths[widthIndex + 1] == 1)) {\n colWidths[widthIndex] = colW;\n colWidths[widthIndex + 1] = 1;\n } else if (prev == colW) {\n colWidths[widthIndex + 1]++;\n }\n }\n }\n }\n mapPos += colspan;\n pos += cellNode.nodeSize;\n }\n var expectedPos = (row + 1) * width, missing = 0;\n while (mapPos < expectedPos) { if (map[mapPos++] == 0) { missing++; } }\n if (missing) { (problems || (problems = [])).push({type: \"missing\", row: row, n: missing}); }\n pos++;\n }\n\n var tableMap = new TableMap(width, height, map, problems), badWidths = false;\n\n // For columns that have defined widths, but whose widths disagree\n // between rows, fix up the cells whose width doesn't match the\n // computed one.\n for (var i$2 = 0; !badWidths && i$2 < colWidths.length; i$2 += 2)\n { if (colWidths[i$2] != null && colWidths[i$2 + 1] < height) { badWidths = true; } }\n if (badWidths) { findBadColWidths(tableMap, colWidths, table); }\n\n return tableMap\n}\n\nfunction findWidth(table) {\n var width = -1, hasRowSpan = false;\n for (var row = 0; row < table.childCount; row++) {\n var rowNode = table.child(row), rowWidth = 0;\n if (hasRowSpan) { for (var j = 0; j < row; j++) {\n var prevRow = table.child(j);\n for (var i = 0; i < prevRow.childCount; i++) {\n var cell = prevRow.child(i);\n if (j + cell.attrs.rowspan > row) { rowWidth += cell.attrs.colspan; }\n }\n } }\n for (var i$1 = 0; i$1 < rowNode.childCount; i$1++) {\n var cell$1 = rowNode.child(i$1);\n rowWidth += cell$1.attrs.colspan;\n if (cell$1.attrs.rowspan > 1) { hasRowSpan = true; }\n }\n if (width == -1)\n { width = rowWidth; }\n else if (width != rowWidth)\n { width = Math.max(width, rowWidth); }\n }\n return width\n}\n\nfunction findBadColWidths(map, colWidths, table) {\n if (!map.problems) { map.problems = []; }\n for (var i = 0, seen = {}; i < map.map.length; i++) {\n var pos = map.map[i];\n if (seen[pos]) { continue }\n seen[pos] = true;\n var node = table.nodeAt(pos), updated = null;\n for (var j = 0; j < node.attrs.colspan; j++) {\n var col = (i + j) % map.width, colWidth = colWidths[col * 2];\n if (colWidth != null && (!node.attrs.colwidth || node.attrs.colwidth[j] != colWidth))\n { (updated || (updated = freshColWidth(node.attrs)))[j] = colWidth; }\n }\n if (updated) { map.problems.unshift({type: \"colwidth mismatch\", pos: pos, colwidth: updated}); }\n }\n}\n\nfunction freshColWidth(attrs) {\n if (attrs.colwidth) { return attrs.colwidth.slice() }\n var result = [];\n for (var i = 0; i < attrs.colspan; i++) { result.push(0); }\n return result\n}\n\n// Helper for creating a schema that supports tables.\n\nfunction getCellAttrs(dom, extraAttrs) {\n var widthAttr = dom.getAttribute(\"data-colwidth\");\n var widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map(function (s) { return Number(s); }) : null;\n var colspan = Number(dom.getAttribute(\"colspan\") || 1);\n var result = {\n colspan: colspan,\n rowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n colwidth: widths && widths.length == colspan ? widths : null\n };\n for (var prop in extraAttrs) {\n var getter = extraAttrs[prop].getFromDOM;\n var value = getter && getter(dom);\n if (value != null) { result[prop] = value; }\n }\n return result\n}\n\nfunction setCellAttrs(node, extraAttrs) {\n var attrs = {};\n if (node.attrs.colspan != 1) { attrs.colspan = node.attrs.colspan; }\n if (node.attrs.rowspan != 1) { attrs.rowspan = node.attrs.rowspan; }\n if (node.attrs.colwidth)\n { attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\"); }\n for (var prop in extraAttrs) {\n var setter = extraAttrs[prop].setDOMAttr;\n if (setter) { setter(node.attrs[prop], attrs); }\n }\n return attrs\n}\n\n// :: (Object) → Object\n//\n// This function creates a set of [node\n// specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n// `table`, `table_row`, and `table_cell` nodes types as used by this\n// module. The result can then be added to the set of nodes when\n// creating a a schema.\n//\n// options::- The following options are understood:\n//\n// tableGroup:: ?string\n// A group name (something like `\"block\"`) to add to the table\n// node type.\n//\n// cellContent:: string\n// The content expression for table cells.\n//\n// cellAttributes:: ?Object\n// Additional attributes to add to cells. Maps attribute names to\n// objects with the following properties:\n//\n// default:: any\n// The attribute's default value.\n//\n// getFromDOM:: ?(dom.Node) → any\n// A function to read the attribute's value from a DOM node.\n//\n// setDOMAttr:: ?(value: any, attrs: Object)\n// A function to add the attribute's value to an attribute\n// object that's used to render the cell's DOM.\nfunction tableNodes(options) {\n var extraAttrs = options.cellAttributes || {};\n var cellAttrs = {\n colspan: {default: 1},\n rowspan: {default: 1},\n colwidth: {default: null}\n };\n for (var prop in extraAttrs)\n { cellAttrs[prop] = {default: extraAttrs[prop].default}; }\n\n return {\n table: {\n content: \"table_row+\",\n tableRole: \"table\",\n isolating: true,\n group: options.tableGroup,\n parseDOM: [{tag: \"table\"}],\n toDOM: function toDOM() { return [\"table\", [\"tbody\", 0]] }\n },\n table_row: {\n content: \"(table_cell | table_header)*\",\n tableRole: \"row\",\n parseDOM: [{tag: \"tr\"}],\n toDOM: function toDOM() { return [\"tr\", 0] }\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: \"cell\",\n isolating: true,\n parseDOM: [{tag: \"td\", getAttrs: function (dom) { return getCellAttrs(dom, extraAttrs); }}],\n toDOM: function toDOM(node) { return [\"td\", setCellAttrs(node, extraAttrs), 0] }\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: \"header_cell\",\n isolating: true,\n parseDOM: [{tag: \"th\", getAttrs: function (dom) { return getCellAttrs(dom, extraAttrs); }}],\n toDOM: function toDOM(node) { return [\"th\", setCellAttrs(node, extraAttrs), 0] }\n }\n }\n}\n\nfunction tableNodeTypes(schema) {\n var result = schema.cached.tableNodeTypes;\n if (!result) {\n result = schema.cached.tableNodeTypes = {};\n for (var name in schema.nodes) {\n var type = schema.nodes[name], role = type.spec.tableRole;\n if (role) { result[role] = type; }\n }\n }\n return result\n}\n\n// Various helper function for working with tables\n\nvar key = new PluginKey(\"selectingCells\");\n\nfunction cellAround($pos) {\n for (var d = $pos.depth - 1; d > 0; d--)\n { if ($pos.node(d).type.spec.tableRole == \"row\") { return $pos.node(0).resolve($pos.before(d + 1)) } }\n return null\n}\n\nfunction cellWrapping($pos) {\n for (var d = $pos.depth; d > 0; d--) { // Sometimes the cell can be in the same depth.\n var role = $pos.node(d).type.spec.tableRole;\n if (role === \"cell\" || role === 'header_cell') { return $pos.node(d) }\n }\n return null\n}\n\nfunction isInTable(state) {\n var $head = state.selection.$head;\n for (var d = $head.depth; d > 0; d--) { if ($head.node(d).type.spec.tableRole == \"row\") { return true } }\n return false\n}\n\nfunction selectionCell(state) {\n var sel = state.selection;\n if (sel.$anchorCell) {\n return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n } else if (sel.node && sel.node.type.spec.tableRole == \"cell\") {\n return sel.$anchor\n }\n return cellAround(sel.$head) || cellNear(sel.$head)\n}\n\nfunction cellNear($pos) {\n for (var after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n var role = after.type.spec.tableRole;\n if (role == \"cell\" || role == \"header_cell\") { return $pos.doc.resolve(pos) }\n }\n for (var before = $pos.nodeBefore, pos$1 = $pos.pos; before; before = before.lastChild, pos$1--) {\n var role$1 = before.type.spec.tableRole;\n if (role$1 == \"cell\" || role$1 == \"header_cell\") { return $pos.doc.resolve(pos$1 - before.nodeSize) }\n }\n}\n\nfunction pointsAtCell($pos) {\n return $pos.parent.type.spec.tableRole == \"row\" && $pos.nodeAfter\n}\n\nfunction moveCellForward($pos) {\n return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize)\n}\n\nfunction inSameTable($a, $b) {\n return $a.depth == $b.depth && $a.pos >= $b.start(-1) && $a.pos <= $b.end(-1)\n}\n\nfunction findCell($pos) {\n return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1))\n}\n\nfunction colCount($pos) {\n return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1))\n}\n\nfunction nextCell($pos, axis, dir) {\n var start = $pos.start(-1), map = TableMap.get($pos.node(-1));\n var moved = map.nextCell($pos.pos - start, axis, dir);\n return moved == null ? null : $pos.node(0).resolve(start + moved)\n}\n\nfunction setAttr(attrs, name, value) {\n var result = {};\n for (var prop in attrs) { result[prop] = attrs[prop]; }\n result[name] = value;\n return result\n}\n\nfunction removeColSpan(attrs, pos, n) {\n if ( n === void 0 ) n=1;\n\n var result = setAttr(attrs, \"colspan\", attrs.colspan - n);\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n result.colwidth.splice(pos, n);\n if (!result.colwidth.some(function (w) { return w > 0; })) { result.colwidth = null; }\n }\n return result\n}\n\nfunction addColSpan(attrs, pos, n) {\n if ( n === void 0 ) n=1;\n\n var result = setAttr(attrs, \"colspan\", attrs.colspan + n);\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n for (var i = 0; i < n; i++) { result.colwidth.splice(pos, 0, 0); }\n }\n return result\n}\n\nfunction columnIsHeader(map, table, col) {\n var headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (var row = 0; row < map.height; row++)\n { if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n { return false } }\n return true\n}\n\n// This file defines a ProseMirror selection subclass that models\n\n// ::- A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n// subclass that represents a cell selection spanning part of a table.\n// With the plugin enabled, these will be created when the user\n// selects across cells, and will be drawn by giving selected cells a\n// `selectedCell` CSS class.\nvar CellSelection = /*@__PURE__*/(function (Selection) {\n function CellSelection($anchorCell, $headCell) {\n if ( $headCell === void 0 ) $headCell = $anchorCell;\n\n var table = $anchorCell.node(-1), map = TableMap.get(table), start = $anchorCell.start(-1);\n var rect = map.rectBetween($anchorCell.pos - start, $headCell.pos - start);\n var doc = $anchorCell.node(0);\n var cells = map.cellsInRect(rect).filter(function (p) { return p != $headCell.pos - start; });\n // Make the head cell the first range, so that it counts as the\n // primary part of the selection\n cells.unshift($headCell.pos - start);\n var ranges = cells.map(function (pos) {\n var cell = table.nodeAt(pos), from = pos + start + 1;\n return new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size))\n });\n Selection.call(this, ranges[0].$from, ranges[0].$to, ranges);\n // :: ResolvedPos\n // A resolved position pointing _in front of_ the anchor cell (the one\n // that doesn't move when extending the selection).\n this.$anchorCell = $anchorCell;\n // :: ResolvedPos\n // A resolved position pointing in front of the head cell (the one\n // moves when extending the selection).\n this.$headCell = $headCell;\n }\n\n if ( Selection ) CellSelection.__proto__ = Selection;\n CellSelection.prototype = Object.create( Selection && Selection.prototype );\n CellSelection.prototype.constructor = CellSelection;\n\n CellSelection.prototype.map = function map (doc, mapping) {\n var $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n var $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n var tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n if (tableChanged && this.isRowSelection())\n { return CellSelection.rowSelection($anchorCell, $headCell) }\n else if (tableChanged && this.isColSelection())\n { return CellSelection.colSelection($anchorCell, $headCell) }\n else\n { return new CellSelection($anchorCell, $headCell) }\n }\n return TextSelection.between($anchorCell, $headCell)\n };\n\n // :: () → Slice\n // Returns a rectangular slice of table rows containing the selected\n // cells.\n CellSelection.prototype.content = function content () {\n var table = this.$anchorCell.node(-1), map = TableMap.get(table), start = this.$anchorCell.start(-1);\n var rect = map.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start);\n var seen = {}, rows = [];\n for (var row = rect.top; row < rect.bottom; row++) {\n var rowContent = [];\n for (var index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n var pos = map.map[index];\n if (!seen[pos]) {\n seen[pos] = true;\n var cellRect = map.findCell(pos), cell = table.nodeAt(pos);\n var extraLeft = rect.left - cellRect.left, extraRight = cellRect.right - rect.right;\n if (extraLeft > 0 || extraRight > 0) {\n var attrs = cell.attrs;\n if (extraLeft > 0) { attrs = removeColSpan(attrs, 0, extraLeft); }\n if (extraRight > 0) { attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight); }\n if (cellRect.left < rect.left) { cell = cell.type.createAndFill(attrs); }\n else { cell = cell.type.create(attrs, cell.content); }\n }\n if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n var attrs$1 = setAttr(cell.attrs, \"rowspan\", Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top));\n if (cellRect.top < rect.top) { cell = cell.type.createAndFill(attrs$1); }\n else { cell = cell.type.create(attrs$1, cell.content); }\n }\n rowContent.push(cell);\n }\n }\n rows.push(table.child(row).copy(Fragment.from(rowContent)));\n }\n\n var fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n return new Slice(Fragment.from(fragment), 1, 1)\n };\n\n CellSelection.prototype.replace = function replace (tr, content) {\n if ( content === void 0 ) content = Slice.empty;\n\n var mapFrom = tr.steps.length, ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var ref = ranges[i];\n var $from = ref.$from;\n var $to = ref.$to;\n var mapping = tr.mapping.slice(mapFrom);\n tr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n }\n var sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n if (sel) { tr.setSelection(sel); }\n };\n\n CellSelection.prototype.replaceWith = function replaceWith (tr, node) {\n this.replace(tr, new Slice(Fragment.from(node), 0, 0));\n };\n\n CellSelection.prototype.forEachCell = function forEachCell (f) {\n var table = this.$anchorCell.node(-1), map = TableMap.get(table), start = this.$anchorCell.start(-1);\n var cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start));\n for (var i = 0; i < cells.length; i++)\n { f(table.nodeAt(cells[i]), start + cells[i]); }\n };\n\n // :: () → bool\n // True if this selection goes all the way from the top to the\n // bottom of the table.\n CellSelection.prototype.isColSelection = function isColSelection () {\n var anchorTop = this.$anchorCell.index(-1), headTop = this.$headCell.index(-1);\n if (Math.min(anchorTop, headTop) > 0) { return false }\n var anchorBot = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan,\n headBot = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n return Math.max(anchorBot, headBot) == this.$headCell.node(-1).childCount\n };\n\n // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n // Returns the smallest column selection that covers the given anchor\n // and head cell.\n CellSelection.colSelection = function colSelection ($anchorCell, $headCell) {\n if ( $headCell === void 0 ) $headCell = $anchorCell;\n\n var map = TableMap.get($anchorCell.node(-1)), start = $anchorCell.start(-1);\n var anchorRect = map.findCell($anchorCell.pos - start), headRect = map.findCell($headCell.pos - start);\n var doc = $anchorCell.node(0);\n if (anchorRect.top <= headRect.top) {\n if (anchorRect.top > 0)\n { $anchorCell = doc.resolve(start + map.map[anchorRect.left]); }\n if (headRect.bottom < map.height)\n { $headCell = doc.resolve(start + map.map[map.width * (map.height - 1) + headRect.right - 1]); }\n } else {\n if (headRect.top > 0)\n { $headCell = doc.resolve(start + map.map[headRect.left]); }\n if (anchorRect.bottom < map.height)\n { $anchorCell = doc.resolve(start + map.map[map.width * (map.height - 1) + anchorRect.right - 1]); }\n }\n return new CellSelection($anchorCell, $headCell)\n };\n\n // :: () → bool\n // True if this selection goes all the way from the left to the\n // right of the table.\n CellSelection.prototype.isRowSelection = function isRowSelection () {\n var map = TableMap.get(this.$anchorCell.node(-1)), start = this.$anchorCell.start(-1);\n var anchorLeft = map.colCount(this.$anchorCell.pos - start),\n headLeft = map.colCount(this.$headCell.pos - start);\n if (Math.min(anchorLeft, headLeft) > 0) { return false }\n var anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan,\n headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n return Math.max(anchorRight, headRight) == map.width\n };\n\n CellSelection.prototype.eq = function eq (other) {\n return other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos &&\n other.$headCell.pos == this.$headCell.pos\n };\n\n // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n // Returns the smallest row selection that covers the given anchor\n // and head cell.\n CellSelection.rowSelection = function rowSelection ($anchorCell, $headCell) {\n if ( $headCell === void 0 ) $headCell = $anchorCell;\n\n var map = TableMap.get($anchorCell.node(-1)), start = $anchorCell.start(-1);\n var anchorRect = map.findCell($anchorCell.pos - start), headRect = map.findCell($headCell.pos - start);\n var doc = $anchorCell.node(0);\n if (anchorRect.left <= headRect.left) {\n if (anchorRect.left > 0)\n { $anchorCell = doc.resolve(start + map.map[anchorRect.top * map.width]); }\n if (headRect.right < map.width)\n { $headCell = doc.resolve(start + map.map[map.width * (headRect.top + 1) - 1]); }\n } else {\n if (headRect.left > 0)\n { $headCell = doc.resolve(start + map.map[headRect.top * map.width]); }\n if (anchorRect.right < map.width)\n { $anchorCell = doc.resolve(start + map.map[map.width * (anchorRect.top + 1) - 1]); }\n }\n return new CellSelection($anchorCell, $headCell)\n };\n\n CellSelection.prototype.toJSON = function toJSON () {\n return {type: \"cell\", anchor: this.$anchorCell.pos, head: this.$headCell.pos}\n };\n\n CellSelection.fromJSON = function fromJSON (doc, json) {\n return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head))\n };\n\n // :: (Node, number, ?number) → CellSelection\n CellSelection.create = function create (doc, anchorCell, headCell) {\n if ( headCell === void 0 ) headCell = anchorCell;\n\n return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell))\n };\n\n CellSelection.prototype.getBookmark = function getBookmark () { return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos) };\n\n return CellSelection;\n}(Selection));\n\nCellSelection.prototype.visible = false;\n\nSelection.jsonID(\"cell\", CellSelection);\n\nvar CellBookmark = function CellBookmark(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n};\nCellBookmark.prototype.map = function map (mapping) {\n return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head))\n};\nCellBookmark.prototype.resolve = function resolve (doc) {\n var $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n if ($anchorCell.parent.type.spec.tableRole == \"row\" &&\n $headCell.parent.type.spec.tableRole == \"row\" &&\n $anchorCell.index() < $anchorCell.parent.childCount &&\n $headCell.index() < $headCell.parent.childCount &&\n inSameTable($anchorCell, $headCell))\n { return new CellSelection($anchorCell, $headCell) }\n else\n { return Selection.near($headCell, 1) }\n};\n\nfunction drawCellSelection(state) {\n if (!(state.selection instanceof CellSelection)) { return null }\n var cells = [];\n state.selection.forEachCell(function (node, pos) {\n cells.push(Decoration.node(pos, pos + node.nodeSize, {class: \"selectedCell\"}));\n });\n return DecorationSet.create(state.doc, cells)\n}\n\nfunction isCellBoundarySelection(ref) {\n var $from = ref.$from;\n var $to = ref.$to;\n\n if ($from.pos == $to.pos || $from.pos < $from.pos - 6) { return false } // Cheap elimination\n var afterFrom = $from.pos, beforeTo = $to.pos, depth = $from.depth;\n for (; depth >= 0; depth--, afterFrom++)\n { if ($from.after(depth + 1) < $from.end(depth)) { break } }\n for (var d = $to.depth; d >= 0; d--, beforeTo--)\n { if ($to.before(d + 1) > $to.start(d)) { break } }\n return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole)\n}\n\nfunction isTextSelectionAcrossCells(ref) {\n var $from = ref.$from;\n var $to = ref.$to;\n\n var fromCellBoundaryNode;\n var toCellBoundaryNode;\n\n for (var i = $from.depth; i > 0; i--) {\n var node = $from.node(i);\n if (node.type.spec.tableRole === 'cell' || node.type.spec.tableRole === 'header_cell') {\n fromCellBoundaryNode = node;\n break;\n }\n }\n\n for (var i$1 = $to.depth; i$1 > 0; i$1--) {\n var node$1 = $to.node(i$1);\n if (node$1.type.spec.tableRole === 'cell' || node$1.type.spec.tableRole === 'header_cell') {\n toCellBoundaryNode = node$1;\n break;\n }\n }\n\n return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0\n}\n\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n var sel = (tr || state).selection, doc = (tr || state).doc, normalize, role;\n if (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n if (role == \"cell\" || role == \"header_cell\") {\n normalize = CellSelection.create(doc, sel.from);\n } else if (role == \"row\") {\n var $cell = doc.resolve(sel.from + 1);\n normalize = CellSelection.rowSelection($cell, $cell);\n } else if (!allowTableNodeSelection) {\n var map = TableMap.get(sel.node), start = sel.from + 1;\n var lastCell = start + map.map[map.width * map.height - 1];\n normalize = CellSelection.create(doc, start + 1, lastCell);\n }\n } else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) {\n normalize = TextSelection.create(doc, sel.from);\n } else if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) {\n normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n }\n if (normalize)\n { (tr || (tr = state.tr)).setSelection(normalize); }\n return tr\n}\n\n// Utilities used for copy/paste handling.\n\n// Utilities to help with copying and pasting table cells\n\n// : (Slice) → ?{width: number, height: number, rows: [Fragment]}\n// Get a rectangular area of cells from a slice, or null if the outer\n// nodes of the slice aren't table cells or rows.\nfunction pastedCells(slice) {\n if (!slice.size) { return null }\n var content = slice.content;\n var openStart = slice.openStart;\n var openEnd = slice.openEnd;\n while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.firstChild.type.spec.tableRole == \"table\")) {\n openStart--;\n openEnd--;\n content = content.firstChild.content;\n }\n var first = content.firstChild, role = first.type.spec.tableRole;\n var schema = first.type.schema, rows = [];\n if (role == \"row\") {\n for (var i = 0; i < content.childCount; i++) {\n var cells = content.child(i).content;\n var left = i ? 0 : Math.max(0, openStart - 1);\n var right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n if (left || right) { cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content; }\n rows.push(cells);\n }\n } else if (role == \"cell\" || role == \"header_cell\") {\n rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);\n } else {\n return null\n }\n return ensureRectangular(schema, rows)\n}\n\n// : (Schema, [Fragment]) → {width: number, height: number, rows: [Fragment]}\n// Compute the width and height of a set of cells, and make sure each\n// row has the same number of cells.\nfunction ensureRectangular(schema, rows) {\n var widths = [];\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n for (var j = row.childCount - 1; j >= 0; j--) {\n var ref = row.child(j).attrs;\n var rowspan = ref.rowspan;\n var colspan = ref.colspan;\n for (var r = i; r < i + rowspan; r++)\n { widths[r] = (widths[r] || 0) + colspan; }\n }\n }\n var width = 0;\n for (var r$1 = 0; r$1 < widths.length; r$1++) { width = Math.max(width, widths[r$1]); }\n for (var r$2 = 0; r$2 < widths.length; r$2++) {\n if (r$2 >= rows.length) { rows.push(Fragment.empty); }\n if (widths[r$2] < width) {\n var empty = tableNodeTypes(schema).cell.createAndFill(), cells = [];\n for (var i$1 = widths[r$2]; i$1 < width; i$1++) { cells.push(empty); }\n rows[r$2] = rows[r$2].append(Fragment.from(cells));\n }\n }\n return {height: rows.length, width: width, rows: rows}\n}\n\nfunction fitSlice(nodeType, slice) {\n var node = nodeType.createAndFill();\n var tr = new Transform(node).replace(0, node.content.size, slice);\n return tr.doc\n}\n\n// : ({width: number, height: number, rows: [Fragment]}, number, number) → {width: number, height: number, rows: [Fragment]}\n// Clip or extend (repeat) the given set of cells to cover the given\n// width and height. Will clip rowspan/colspan cells at the edges when\n// they stick out.\nfunction clipCells(ref, newWidth, newHeight) {\n var width = ref.width;\n var height = ref.height;\n var rows = ref.rows;\n\n if (width != newWidth) {\n var added = [], newRows = [];\n for (var row = 0; row < rows.length; row++) {\n var frag = rows[row], cells = [];\n for (var col = added[row] || 0, i = 0; col < newWidth; i++) {\n var cell = frag.child(i % frag.childCount);\n if (col + cell.attrs.colspan > newWidth)\n { cell = cell.type.create(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content); }\n cells.push(cell);\n col += cell.attrs.colspan;\n for (var j = 1; j < cell.attrs.rowspan; j++)\n { added[row + j] = (added[row + j] || 0) + cell.attrs.colspan; }\n }\n newRows.push(Fragment.from(cells));\n }\n rows = newRows;\n width = newWidth;\n }\n\n if (height != newHeight) {\n var newRows$1 = [];\n for (var row$1 = 0, i$1 = 0; row$1 < newHeight; row$1++, i$1++) {\n var cells$1 = [], source = rows[i$1 % height];\n for (var j$1 = 0; j$1 < source.childCount; j$1++) {\n var cell$1 = source.child(j$1);\n if (row$1 + cell$1.attrs.rowspan > newHeight)\n { cell$1 = cell$1.type.create(setAttr(cell$1.attrs, \"rowspan\", Math.max(1, newHeight - cell$1.attrs.rowspan)), cell$1.content); }\n cells$1.push(cell$1);\n }\n newRows$1.push(Fragment.from(cells$1));\n }\n rows = newRows$1;\n height = newHeight;\n }\n\n return {width: width, height: height, rows: rows}\n}\n\n// Make sure a table has at least the given width and height. Return\n// true if something was changed.\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n var schema = tr.doc.type.schema, types = tableNodeTypes(schema), empty, emptyHead;\n if (width > map.width) {\n for (var row = 0, rowEnd = 0; row < map.height; row++) {\n var rowNode = table.child(row);\n rowEnd += rowNode.nodeSize;\n var cells = [], add = (void 0);\n if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell)\n { add = empty || (empty = types.cell.createAndFill()); }\n else\n { add = emptyHead || (emptyHead = types.header_cell.createAndFill()); }\n for (var i = map.width; i < width; i++) { cells.push(add); }\n tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n }\n }\n if (height > map.height) {\n var cells$1 = [];\n for (var i$1 = 0, start$1 = (map.height - 1) * map.width; i$1 < Math.max(map.width, width); i$1++) {\n var header = i$1 >= map.width ? false :\n table.nodeAt(map.map[start$1 + i$1]).type == types.header_cell;\n cells$1.push(header\n ? (emptyHead || (emptyHead = types.header_cell.createAndFill()))\n : (empty || (empty = types.cell.createAndFill())));\n }\n\n var emptyRow = types.row.create(null, Fragment.from(cells$1)), rows = [];\n for (var i$2 = map.height; i$2 < height; i$2++) { rows.push(emptyRow); }\n tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n }\n return !!(empty || emptyHead)\n}\n\n// Make sure the given line (left, top) to (right, top) doesn't cross\n// any rowspan cells by splitting cells that cross it. Return true if\n// something changed.\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n if (top == 0 || top == map.height) { return false }\n var found = false;\n for (var col = left; col < right; col++) {\n var index = top * map.width + col, pos = map.map[index];\n if (map.map[index - map.width] == pos) {\n found = true;\n var cell = table.nodeAt(pos);\n var ref = map.findCell(pos);\n var cellTop = ref.top;\n var cellLeft = ref.left;\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, setAttr(cell.attrs, \"rowspan\", top - cellTop));\n tr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)),\n cell.type.createAndFill(setAttr(cell.attrs, \"rowspan\", (cellTop + cell.attrs.rowspan) - top)));\n col += cell.attrs.colspan - 1;\n }\n }\n return found\n}\n\n// Make sure the given line (left, top) to (left, bottom) doesn't\n// cross any colspan cells by splitting cells that cross it. Return\n// true if something changed.\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n if (left == 0 || left == map.width) { return false }\n var found = false;\n for (var row = top; row < bottom; row++) {\n var index = row * map.width + left, pos = map.map[index];\n if (map.map[index - 1] == pos) {\n found = true;\n var cell = table.nodeAt(pos), cellLeft = map.colCount(pos);\n var updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n tr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n tr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n row += cell.attrs.rowspan - 1;\n }\n }\n return found\n}\n\n// Insert the given set of cells (as returned by `pastedCells`) into a\n// table, at the position pointed at by rect.\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n var table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc, map = TableMap.get(table);\n var top = rect.top;\n var left = rect.left;\n var right = left + cells.width, bottom = top + cells.height;\n var tr = state.tr, mapFrom = 0;\n function recomp() {\n table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n map = TableMap.get(table);\n mapFrom = tr.mapping.maps.length;\n }\n // Prepare the table to be large enough and not have any cells\n // crossing the boundaries of the rectangle that we want to\n // insert into. If anything about it changes, recompute the table\n // map so that subsequent operations can see the current shape.\n if (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) { recomp(); }\n if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) { recomp(); }\n if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) { recomp(); }\n if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) { recomp(); }\n if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) { recomp(); }\n\n for (var row = top; row < bottom; row++) {\n var from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n tr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart),\n new Slice(cells.rows[row - top], 0, 0));\n }\n recomp();\n tr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)),\n tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n dispatch(tr);\n}\n\n// This file defines a number of helpers for wiring up user input to\n\nvar handleKeyDown = keydownHandler({\n \"ArrowLeft\": arrow(\"horiz\", -1),\n \"ArrowRight\": arrow(\"horiz\", 1),\n \"ArrowUp\": arrow(\"vert\", -1),\n \"ArrowDown\": arrow(\"vert\", 1),\n\n \"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n \"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n \"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n \"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\n \"Backspace\": deleteCellSelection,\n \"Mod-Backspace\": deleteCellSelection,\n \"Delete\": deleteCellSelection,\n \"Mod-Delete\": deleteCellSelection\n});\n\nfunction maybeSetSelection(state, dispatch, selection) {\n if (selection.eq(state.selection)) { return false }\n if (dispatch) { dispatch(state.tr.setSelection(selection).scrollIntoView()); }\n return true\n}\n\nfunction arrow(axis, dir) {\n return function (state, dispatch, view) {\n var sel = state.selection;\n if (sel instanceof CellSelection) {\n return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir))\n }\n if (axis != \"horiz\" && !sel.empty) { return false }\n var end = atEndOfCell(view, axis, dir);\n if (end == null) { return false }\n if (axis == \"horiz\") {\n return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir))\n } else {\n var $cell = state.doc.resolve(end), $next = nextCell($cell, axis, dir), newSel;\n if ($next) { newSel = Selection.near($next, 1); }\n else if (dir < 0) { newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1); }\n else { newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1); }\n return maybeSetSelection(state, dispatch, newSel)\n }\n }\n}\n\nfunction shiftArrow(axis, dir) {\n return function (state, dispatch, view) {\n var sel = state.selection;\n if (!(sel instanceof CellSelection)) {\n var end = atEndOfCell(view, axis, dir);\n if (end == null) { return false }\n sel = new CellSelection(state.doc.resolve(end));\n }\n var $head = nextCell(sel.$headCell, axis, dir);\n if (!$head) { return false }\n return maybeSetSelection(state, dispatch, new CellSelection(sel.$anchorCell, $head))\n }\n}\n\nfunction deleteCellSelection(state, dispatch) {\n var sel = state.selection;\n if (!(sel instanceof CellSelection)) { return false }\n if (dispatch) {\n var tr = state.tr, baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n sel.forEachCell(function (cell, pos) {\n if (!cell.content.eq(baseContent))\n { tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1),\n new Slice(baseContent, 0, 0)); }\n });\n if (tr.docChanged) { dispatch(tr); }\n }\n return true\n}\n\nfunction handleTripleClick(view, pos) {\n var doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n if (!$cell) { return false }\n view.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n return true\n}\n\nfunction handlePaste(view, _, slice) {\n if (!isInTable(view.state)) { return false }\n var cells = pastedCells(slice), sel = view.state.selection;\n if (sel instanceof CellSelection) {\n if (!cells) { cells = {width: 1, height: 1, rows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]}; }\n var table = sel.$anchorCell.node(-1), start = sel.$anchorCell.start(-1);\n var rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n insertCells(view.state, view.dispatch, start, rect, cells);\n return true\n } else if (cells) {\n var $cell = selectionCell(view.state), start$1 = $cell.start(-1);\n insertCells(view.state, view.dispatch, start$1, TableMap.get($cell.node(-1)).findCell($cell.pos - start$1), cells);\n return true\n } else {\n return false\n }\n}\n\nfunction handleMouseDown(view, startEvent) {\n if (startEvent.ctrlKey || startEvent.metaKey) { return }\n\n var startDOMCell = domInCell(view, startEvent.target), $anchor;\n if (startEvent.shiftKey && (view.state.selection instanceof CellSelection)) {\n // Adding to an existing cell selection\n setCellSelection(view.state.selection.$anchorCell, startEvent);\n startEvent.preventDefault();\n } else if (startEvent.shiftKey && startDOMCell &&\n ($anchor = cellAround(view.state.selection.$anchor)) != null &&\n cellUnderMouse(view, startEvent).pos != $anchor.pos) {\n // Adding to a selection that starts in another cell (causing a\n // cell selection to be created).\n setCellSelection($anchor, startEvent);\n startEvent.preventDefault();\n } else if (!startDOMCell) {\n // Not in a cell, let the default behavior happen.\n return\n }\n\n // Create and dispatch a cell selection between the given anchor and\n // the position under the mouse.\n function setCellSelection($anchor, event) {\n var $head = cellUnderMouse(view, event);\n var starting = key.getState(view.state) == null;\n if (!$head || !inSameTable($anchor, $head)) {\n if (starting) { $head = $anchor; }\n else { return }\n }\n var selection = new CellSelection($anchor, $head);\n if (starting || !view.state.selection.eq(selection)) {\n var tr = view.state.tr.setSelection(selection);\n if (starting) { tr.setMeta(key, $anchor.pos); }\n view.dispatch(tr);\n }\n }\n\n // Stop listening to mouse motion events.\n function stop() {\n view.root.removeEventListener(\"mouseup\", stop);\n view.root.removeEventListener(\"dragstart\", stop);\n view.root.removeEventListener(\"mousemove\", move);\n if (key.getState(view.state) != null) { view.dispatch(view.state.tr.setMeta(key, -1)); }\n }\n\n function move(event) {\n var anchor = key.getState(view.state), $anchor;\n if (anchor != null) {\n // Continuing an existing cross-cell selection\n $anchor = view.state.doc.resolve(anchor);\n } else if (domInCell(view, event.target) != startDOMCell) {\n // Moving out of the initial cell -- start a new cell selection\n $anchor = cellUnderMouse(view, startEvent);\n if (!$anchor) { return stop() }\n }\n if ($anchor) { setCellSelection($anchor, event); }\n }\n view.root.addEventListener(\"mouseup\", stop);\n view.root.addEventListener(\"dragstart\", stop);\n view.root.addEventListener(\"mousemove\", move);\n}\n\n// Check whether the cursor is at the end of a cell (so that further\n// motion would move out of the cell)\nfunction atEndOfCell(view, axis, dir) {\n if (!(view.state.selection instanceof TextSelection)) { return null }\n var ref = view.state.selection;\n var $head = ref.$head;\n for (var d = $head.depth - 1; d >= 0; d--) {\n var parent = $head.node(d), index = dir < 0 ? $head.index(d) : $head.indexAfter(d);\n if (index != (dir < 0 ? 0 : parent.childCount)) { return null }\n if (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n var cellPos = $head.before(d);\n var dirStr = axis == \"vert\" ? (dir > 0 ? \"down\" : \"up\") : (dir > 0 ? \"right\" : \"left\");\n return view.endOfTextblock(dirStr) ? cellPos : null\n }\n }\n return null\n}\n\nfunction domInCell(view, dom) {\n for (; dom && dom != view.dom; dom = dom.parentNode)\n { if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") { return dom } }\n}\n\nfunction cellUnderMouse(view, event) {\n var mousePos = view.posAtCoords({left: event.clientX, top: event.clientY});\n if (!mousePos) { return null }\n return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null\n}\n\n// This file defines helpers for normalizing tables, making sure no\n\nvar fixTablesKey = new PluginKey(\"fix-tables\");\n\n// Helper for iterating through the nodes in a document that changed\n// compared to the given previous document. Useful for avoiding\n// duplicate work on each transaction.\nfunction changedDescendants(old, cur, offset, f) {\n var oldSize = old.childCount, curSize = cur.childCount;\n outer: for (var i = 0, j = 0; i < curSize; i++) {\n var child = cur.child(i);\n for (var scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n if (old.child(scan) == child) {\n j = scan + 1;\n offset += child.nodeSize;\n continue outer\n }\n }\n f(child, offset);\n if (j < oldSize && old.child(j).sameMarkup(child))\n { changedDescendants(old.child(j), child, offset + 1, f); }\n else\n { child.nodesBetween(0, child.content.size, f, offset + 1); }\n offset += child.nodeSize;\n }\n}\n\n// :: (EditorState, ?EditorState) → ?Transaction\n// Inspect all tables in the given state's document and return a\n// transaction that fixes them, if necessary. If `oldState` was\n// provided, that is assumed to hold a previous, known-good state,\n// which will be used to avoid re-scanning unchanged parts of the\n// document.\nfunction fixTables(state, oldState) {\n var tr, check = function (node, pos) {\n if (node.type.spec.tableRole == \"table\") { tr = fixTable(state, node, pos, tr); }\n };\n if (!oldState) { state.doc.descendants(check); }\n else if (oldState.doc != state.doc) { changedDescendants(oldState.doc, state.doc, 0, check); }\n return tr\n}\n\n// : (EditorState, Node, number, ?Transaction) → ?Transaction\n// Fix the given table, if necessary. Will append to the transaction\n// it was given, if non-null, or create a new one if necessary.\nfunction fixTable(state, table, tablePos, tr) {\n var map = TableMap.get(table);\n if (!map.problems) { return tr }\n if (!tr) { tr = state.tr; }\n\n // Track which rows we must add cells to, so that we can adjust that\n // when fixing collisions.\n var mustAdd = [];\n for (var i = 0; i < map.height; i++) { mustAdd.push(0); }\n for (var i$1 = 0; i$1 < map.problems.length; i$1++) {\n var prob = map.problems[i$1];\n if (prob.type == \"collision\") {\n var cell = table.nodeAt(prob.pos);\n for (var j = 0; j < cell.attrs.rowspan; j++) { mustAdd[prob.row + j] += prob.n; }\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(cell.attrs, cell.attrs.colspan - prob.n, prob.n));\n } else if (prob.type == \"missing\") {\n mustAdd[prob.row] += prob.n;\n } else if (prob.type == \"overlong_rowspan\") {\n var cell$1 = table.nodeAt(prob.pos);\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, setAttr(cell$1.attrs, \"rowspan\", cell$1.attrs.rowspan - prob.n));\n } else if (prob.type == \"colwidth mismatch\") {\n var cell$2 = table.nodeAt(prob.pos);\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, setAttr(cell$2.attrs, \"colwidth\", prob.colwidth));\n }\n }\n var first, last;\n for (var i$2 = 0; i$2 < mustAdd.length; i$2++) { if (mustAdd[i$2]) {\n if (first == null) { first = i$2; }\n last = i$2;\n } }\n // Add the necessary cells, using a heuristic for whether to add the\n // cells at the start or end of the rows (if it looks like a 'bite'\n // was taken out of the table, add cells at the start of the row\n // after the bite. Otherwise add them at the end).\n for (var i$3 = 0, pos = tablePos + 1; i$3 < map.height; i$3++) {\n var row = table.child(i$3);\n var end = pos + row.nodeSize;\n var add = mustAdd[i$3];\n if (add > 0) {\n var tableNodeType = 'cell';\n if (row.firstChild) {\n tableNodeType = row.firstChild.type.spec.tableRole;\n }\n var nodes = [];\n for (var j$1 = 0; j$1 < add; j$1++)\n { nodes.push(tableNodeTypes(state.schema)[tableNodeType].createAndFill()); }\n var side = (i$3 == 0 || first == i$3 - 1) && last == i$3 ? pos + 1 : end - 1;\n tr.insert(tr.mapping.map(side), nodes);\n }\n pos = end;\n }\n return tr.setMeta(fixTablesKey, { fixTables: true })\n}\n\n// This file defines a number of table-related commands.\n\n// Helper to get the selected rectangle in a table, if any. Adds table\n// map, table node, and table start offset to the object for\n// convenience.\nfunction selectedRect(state) {\n var sel = state.selection, $pos = selectionCell(state);\n var table = $pos.node(-1), tableStart = $pos.start(-1), map = TableMap.get(table);\n var rect;\n if (sel instanceof CellSelection)\n { rect = map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart); }\n else\n { rect = map.findCell($pos.pos - tableStart); }\n rect.tableStart = tableStart;\n rect.map = map;\n rect.table = table;\n return rect\n}\n\n// Add a column at the given position in a table.\nfunction addColumn(tr, ref, col) {\n var map = ref.map;\n var tableStart = ref.tableStart;\n var table = ref.table;\n\n var refColumn = col > 0 ? -1 : 0;\n if (columnIsHeader(map, table, col + refColumn))\n { refColumn = col == 0 || col == map.width ? null : 0; }\n\n for (var row = 0; row < map.height; row++) {\n var index = row * map.width + col;\n // If this position falls inside a col-spanning cell\n if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n var pos = map.map[index], cell = table.nodeAt(pos);\n tr.setNodeMarkup(tr.mapping.map(tableStart + pos), null,\n addColSpan(cell.attrs, col - map.colCount(pos)));\n // Skip ahead if rowspan > 1\n row += cell.attrs.rowspan - 1;\n } else {\n var type = refColumn == null ? tableNodeTypes(table.type.schema).cell\n : table.nodeAt(map.map[index + refColumn]).type;\n var pos$1 = map.positionAt(row, col, table);\n tr.insert(tr.mapping.map(tableStart + pos$1), type.createAndFill());\n }\n }\n return tr\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command to add a column before the column with the selection.\nfunction addColumnBefore(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.left));\n }\n return true\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command to add a column after the column with the selection.\nfunction addColumnAfter(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.right));\n }\n return true\n}\n\nfunction removeColumn(tr, ref, col) {\n var map = ref.map;\n var table = ref.table;\n var tableStart = ref.tableStart;\n\n var mapStart = tr.mapping.maps.length;\n for (var row = 0; row < map.height;) {\n var index = row * map.width + col, pos = map.map[index], cell = table.nodeAt(pos);\n // If this is part of a col-spanning cell\n if ((col > 0 && map.map[index - 1] == pos) || (col < map.width - 1 && map.map[index + 1] == pos)) {\n tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null,\n removeColSpan(cell.attrs, col - map.colCount(pos)));\n } else {\n var start = tr.mapping.slice(mapStart).map(tableStart + pos);\n tr.delete(start, start + cell.nodeSize);\n }\n row += cell.attrs.rowspan;\n }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Command function that removes the selected columns from a table.\nfunction deleteColumn(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state), tr = state.tr;\n if (rect.left == 0 && rect.right == rect.map.width) { return false }\n for (var i = rect.right - 1;; i--) {\n removeColumn(tr, rect, i);\n if (i == rect.left) { break }\n rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n rect.map = TableMap.get(rect.table);\n }\n dispatch(tr);\n }\n return true\n}\n\nfunction rowIsHeader(map, table, row) {\n var headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (var col = 0; col < map.width; col++)\n { if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n { return false } }\n return true\n}\n\nfunction addRow(tr, ref, row) {\n var map = ref.map;\n var tableStart = ref.tableStart;\n var table = ref.table;\n\n var rowPos = tableStart;\n for (var i = 0; i < row; i++) { rowPos += table.child(i).nodeSize; }\n var cells = [], refRow = row > 0 ? -1 : 0;\n if (rowIsHeader(map, table, row + refRow))\n { refRow = row == 0 || row == map.height ? null : 0; }\n for (var col = 0, index = map.width * row; col < map.width; col++, index++) {\n // Covered by a rowspan cell\n if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n var pos = map.map[index], attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tableStart + pos, null, setAttr(attrs, \"rowspan\", attrs.rowspan + 1));\n col += attrs.colspan - 1;\n } else {\n var type = refRow == null ? tableNodeTypes(table.type.schema).cell\n : table.nodeAt(map.map[index + refRow * map.width]).type;\n cells.push(type.createAndFill());\n }\n }\n tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n return tr\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Add a table row before the selection.\nfunction addRowBefore(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.top));\n }\n return true\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Add a table row after the selection.\nfunction addRowAfter(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.bottom));\n }\n return true\n}\n\nfunction removeRow(tr, ref, row) {\n var map = ref.map;\n var table = ref.table;\n var tableStart = ref.tableStart;\n\n var rowPos = 0;\n for (var i = 0; i < row; i++) { rowPos += table.child(i).nodeSize; }\n var nextRow = rowPos + table.child(row).nodeSize;\n\n var mapFrom = tr.mapping.maps.length;\n tr.delete(rowPos + tableStart, nextRow + tableStart);\n\n for (var col = 0, index = row * map.width; col < map.width; col++, index++) {\n var pos = map.map[index];\n if (row > 0 && pos == map.map[index - map.width]) {\n // If this cell starts in the row above, simply reduce its rowspan\n var attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, setAttr(attrs, \"rowspan\", attrs.rowspan - 1));\n col += attrs.colspan - 1;\n } else if (row < map.width && pos == map.map[index + map.width]) {\n // Else, if it continues in the row below, it has to be moved down\n var cell = table.nodeAt(pos);\n var copy = cell.type.create(setAttr(cell.attrs, \"rowspan\", cell.attrs.rowspan - 1), cell.content);\n var newPos = map.positionAt(row + 1, col, table);\n tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n col += cell.attrs.colspan - 1;\n }\n }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Remove the selected rows from a table.\nfunction deleteRow(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var rect = selectedRect(state), tr = state.tr;\n if (rect.top == 0 && rect.bottom == rect.map.height) { return false }\n for (var i = rect.bottom - 1;; i--) {\n removeRow(tr, rect, i);\n if (i == rect.top) { break }\n rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n rect.map = TableMap.get(rect.table);\n }\n dispatch(tr);\n }\n return true\n}\n\nfunction isEmpty(cell) {\n var c = cell.content;\n return c.childCount == 1 && c.firstChild.isTextblock && c.firstChild.childCount == 0\n}\n\nfunction cellsOverlapRectangle(ref, rect) {\n var width = ref.width;\n var height = ref.height;\n var map = ref.map;\n\n var indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n var indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n for (var i = rect.top; i < rect.bottom; i++) {\n if (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] ||\n rect.right < width && map[indexRight] == map[indexRight + 1]) { return true }\n indexLeft += width; indexRight += width;\n }\n for (var i$1 = rect.left; i$1 < rect.right; i$1++) {\n if (rect.top > 0 && map[indexTop] == map[indexTop - width] ||\n rect.bottom < height && map[indexBottom] == map[indexBottom + width]) { return true }\n indexTop++; indexBottom++;\n }\n return false\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Merge the selected cells into a single cell. Only available when\n// the selected cells' outline forms a rectangle.\nfunction mergeCells(state, dispatch) {\n var sel = state.selection;\n if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) { return false }\n var rect = selectedRect(state);\n var map = rect.map;\n if (cellsOverlapRectangle(map, rect)) { return false }\n if (dispatch) {\n var tr = state.tr, seen = {}, content = Fragment.empty, mergedPos, mergedCell;\n for (var row = rect.top; row < rect.bottom; row++) {\n for (var col = rect.left; col < rect.right; col++) {\n var cellPos = map.map[row * map.width + col], cell = rect.table.nodeAt(cellPos);\n if (seen[cellPos]) { continue }\n seen[cellPos] = true;\n if (mergedPos == null) {\n mergedPos = cellPos;\n mergedCell = cell;\n } else {\n if (!isEmpty(cell)) { content = content.append(cell.content); }\n var mapped = tr.mapping.map(cellPos + rect.tableStart);\n tr.delete(mapped, mapped + cell.nodeSize);\n }\n }\n }\n tr.setNodeMarkup(mergedPos + rect.tableStart, null,\n setAttr(addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, (rect.right - rect.left) - mergedCell.attrs.colspan),\n \"rowspan\", rect.bottom - rect.top));\n if (content.size) {\n var end = mergedPos + 1 + mergedCell.content.size;\n var start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n }\n tr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n dispatch(tr);\n }\n return true\n}\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells. Use the first cell type for the new cells.\nfunction splitCell(state, dispatch) {\n var nodeTypes = tableNodeTypes(state.schema);\n return splitCellWithType(function (ref) {\n var node = ref.node;\n\n return nodeTypes[node.type.spec.tableRole]\n })(state, dispatch)\n}\n\n// :: (getCellType: ({ row: number, col: number, node: Node}) → NodeType) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells with the cell type (th, td) returned by getType function.\nfunction splitCellWithType(getCellType) {\n return function (state, dispatch) {\n var sel = state.selection;\n var cellNode, cellPos;\n if (!(sel instanceof CellSelection)) {\n cellNode = cellWrapping(sel.$from);\n if (!cellNode) { return false }\n cellPos = cellAround(sel.$from).pos;\n } else {\n if (sel.$anchorCell.pos != sel.$headCell.pos) { return false }\n cellNode = sel.$anchorCell.nodeAfter;\n cellPos = sel.$anchorCell.pos;\n }\n if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {return false}\n if (dispatch) {\n var baseAttrs = cellNode.attrs, attrs = [], colwidth = baseAttrs.colwidth;\n if (baseAttrs.rowspan > 1) { baseAttrs = setAttr(baseAttrs, \"rowspan\", 1); }\n if (baseAttrs.colspan > 1) { baseAttrs = setAttr(baseAttrs, \"colspan\", 1); }\n var rect = selectedRect(state), tr = state.tr;\n for (var i = 0; i < rect.right - rect.left; i++)\n { attrs.push(colwidth ? setAttr(baseAttrs, \"colwidth\", colwidth && colwidth[i] ? [colwidth[i]] : null) : baseAttrs); }\n var lastCell;\n for (var row = rect.top; row < rect.bottom; row++) {\n var pos = rect.map.positionAt(row, rect.left, rect.table);\n if (row == rect.top) { pos += cellNode.nodeSize; }\n for (var col = rect.left, i$1 = 0; col < rect.right; col++, i$1++) {\n if (col == rect.left && row == rect.top) { continue }\n tr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({ node: cellNode, row: row, col: col}).createAndFill(attrs[i$1]));\n }\n }\n tr.setNodeMarkup(cellPos, getCellType({ node: cellNode, row: rect.top, col: rect.left}), attrs[0]);\n if (sel instanceof CellSelection)\n { tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos),\n lastCell && tr.doc.resolve(lastCell))); }\n dispatch(tr);\n }\n return true\n }\n}\n\n// :: (string, any) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command that sets the given attribute to the given value,\n// and is only available when the currently selected cell doesn't\n// already have that attribute set to that value.\nfunction setCellAttr(name, value) {\n return function(state, dispatch) {\n if (!isInTable(state)) { return false }\n var $cell = selectionCell(state);\n if ($cell.nodeAfter.attrs[name] === value) { return false }\n if (dispatch) {\n var tr = state.tr;\n if (state.selection instanceof CellSelection)\n { state.selection.forEachCell(function (node, pos) {\n if (node.attrs[name] !== value)\n { tr.setNodeMarkup(pos, null, setAttr(node.attrs, name, value)); }\n }); }\n else\n { tr.setNodeMarkup($cell.pos, null, setAttr($cell.nodeAfter.attrs, name, value)); }\n dispatch(tr);\n }\n return true\n }\n}\n\nfunction deprecated_toggleHeader(type) {\n return function(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var types = tableNodeTypes(state.schema);\n var rect = selectedRect(state), tr = state.tr;\n var cells = rect.map.cellsInRect(type == \"column\" ? new Rect(rect.left, 0, rect.right, rect.map.height) :\n type == \"row\" ? new Rect(0, rect.top, rect.map.width, rect.bottom) : rect);\n var nodes = cells.map(function (pos) { return rect.table.nodeAt(pos); });\n for (var i = 0; i < cells.length; i++) // Remove headers, if any\n { if (nodes[i].type == types.header_cell)\n { tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs); } }\n if (tr.steps.length == 0) { for (var i$1 = 0; i$1 < cells.length; i$1++) // No headers removed, add instead\n { tr.setNodeMarkup(rect.tableStart + cells[i$1], types.header_cell, nodes[i$1].attrs); } }\n dispatch(tr);\n }\n return true\n }\n}\n\nfunction isHeaderEnabledByType(type, rect, types) {\n // Get cell positions for first row or first column\n var cellPositions = rect.map.cellsInRect({\n left: 0,\n top: 0,\n right: type == \"row\" ? rect.map.width : 1,\n bottom: type == \"column\" ? rect.map.height : 1,\n });\n\n for (var i = 0; i < cellPositions.length; i++) {\n var cell = rect.table.nodeAt(cellPositions[i]);\n if (cell && cell.type !== types.header_cell) {\n return false\n }\n }\n\n return true\n}\n\n// :: (string, ?{ useDeprecatedLogic: bool }) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles between row/column header and normal cells (Only applies to first row/column).\n// For deprecated behavior pass `useDeprecatedLogic` in options with true.\nfunction toggleHeader(type, options) {\n options = options || { useDeprecatedLogic: false };\n\n if (options.useDeprecatedLogic)\n { return deprecated_toggleHeader(type) }\n\n return function(state, dispatch) {\n if (!isInTable(state)) { return false }\n if (dispatch) {\n var types = tableNodeTypes(state.schema);\n var rect = selectedRect(state), tr = state.tr;\n\n var isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n var isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\n var isHeaderEnabled = type === \"column\" ? isHeaderRowEnabled :\n type === \"row\" ? isHeaderColumnEnabled : false;\n\n var selectionStartsAt = isHeaderEnabled ? 1 : 0;\n\n var cellsRect = type == \"column\" ? new Rect(0, selectionStartsAt, 1, rect.map.height) :\n type == \"row\" ? new Rect(selectionStartsAt, 0, rect.map.width, 1) : rect;\n\n var newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell :\n type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\n rect.map.cellsInRect(cellsRect).forEach(function (relativeCellPos) {\n var cellPos = relativeCellPos + rect.tableStart;\n var cell = tr.doc.nodeAt(cellPos);\n\n if (cell) {\n tr.setNodeMarkup(cellPos, newType, cell.attrs);\n }\n });\n\n dispatch(tr);\n }\n return true\n }\n}\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected row contains header cells.\nvar toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected column contains header cells.\nvar toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n\n// :: (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Toggles whether the selected cells are header cells.\nvar toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\n\nfunction findNextCell($cell, dir) {\n if (dir < 0) {\n var before = $cell.nodeBefore;\n if (before) { return $cell.pos - before.nodeSize }\n for (var row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n var rowNode = $cell.node(-1).child(row);\n if (rowNode.childCount) { return rowEnd - 1 - rowNode.lastChild.nodeSize }\n rowEnd -= rowNode.nodeSize;\n }\n } else {\n if ($cell.index() < $cell.parent.childCount - 1) { return $cell.pos + $cell.nodeAfter.nodeSize }\n var table = $cell.node(-1);\n for (var row$1 = $cell.indexAfter(-1), rowStart = $cell.after(); row$1 < table.childCount; row$1++) {\n var rowNode$1 = table.child(row$1);\n if (rowNode$1.childCount) { return rowStart + 1 }\n rowStart += rowNode$1.nodeSize;\n }\n }\n}\n\n// :: (number) → (EditorState, dispatch: ?(tr: Transaction)) → bool\n// Returns a command for selecting the next (direction=1) or previous\n// (direction=-1) cell in a table.\nfunction goToNextCell(direction) {\n return function(state, dispatch) {\n if (!isInTable(state)) { return false }\n var cell = findNextCell(selectionCell(state), direction);\n if (cell == null) { return }\n if (dispatch) {\n var $cell = state.doc.resolve(cell);\n dispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n }\n return true\n }\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// Deletes the table around the selection, if any.\nfunction deleteTable(state, dispatch) {\n var $pos = state.selection.$anchor;\n for (var d = $pos.depth; d > 0; d--) {\n var node = $pos.node(d);\n if (node.type.spec.tableRole == \"table\") {\n if (dispatch) { dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView()); }\n return true\n }\n }\n return false\n}\n\nvar TableView = function TableView(node, cellMinWidth) {\n this.node = node;\n this.cellMinWidth = cellMinWidth;\n this.dom = document.createElement(\"div\");\n this.dom.className = \"tableWrapper\";\n this.table = this.dom.appendChild(document.createElement(\"table\"));\n this.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n updateColumns(node, this.colgroup, this.table, cellMinWidth);\n this.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n};\n\nTableView.prototype.update = function update (node) {\n if (node.type != this.node.type) { return false }\n this.node = node;\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth);\n return true\n};\n\nTableView.prototype.ignoreMutation = function ignoreMutation (record) {\n return record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target))\n};\n\nfunction updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {\n var totalWidth = 0, fixedWidth = true;\n var nextDOM = colgroup.firstChild, row = node.firstChild;\n for (var i = 0, col = 0; i < row.childCount; i++) {\n var ref = row.child(i).attrs;\n var colspan = ref.colspan;\n var colwidth = ref.colwidth;\n for (var j = 0; j < colspan; j++, col++) {\n var hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n var cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n totalWidth += hasWidth || cellMinWidth;\n if (!hasWidth) { fixedWidth = false; }\n if (!nextDOM) {\n colgroup.appendChild(document.createElement(\"col\")).style.width = cssWidth;\n } else {\n if (nextDOM.style.width != cssWidth) { nextDOM.style.width = cssWidth; }\n nextDOM = nextDOM.nextSibling;\n }\n }\n }\n\n while (nextDOM) {\n var after = nextDOM.nextSibling;\n nextDOM.parentNode.removeChild(nextDOM);\n nextDOM = after;\n }\n\n if (fixedWidth) {\n table.style.width = totalWidth + \"px\";\n table.style.minWidth = \"\";\n } else {\n table.style.width = \"\";\n table.style.minWidth = totalWidth + \"px\";\n }\n}\n\nvar key$1 = new PluginKey(\"tableColumnResizing\");\n\nfunction columnResizing(ref) {\n if ( ref === void 0 ) ref = {};\n var handleWidth = ref.handleWidth; if ( handleWidth === void 0 ) handleWidth = 5;\n var cellMinWidth = ref.cellMinWidth; if ( cellMinWidth === void 0 ) cellMinWidth = 25;\n var View = ref.View; if ( View === void 0 ) View = TableView;\n var lastColumnResizable = ref.lastColumnResizable; if ( lastColumnResizable === void 0 ) lastColumnResizable = true;\n\n var plugin = new Plugin({\n key: key$1,\n state: {\n init: function init(_, state) {\n this.spec.props.nodeViews[tableNodeTypes(state.schema).table.name] =\n function (node, view) { return new View(node, cellMinWidth, view); };\n return new ResizeState(-1, false)\n },\n apply: function apply(tr, prev) {\n return prev.apply(tr)\n }\n },\n props: {\n attributes: function attributes(state) {\n var pluginState = key$1.getState(state);\n return pluginState.activeHandle > -1 ? {class: \"resize-cursor\"} : null\n },\n\n handleDOMEvents: {\n mousemove: function mousemove(view, event) { handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable); },\n mouseleave: function mouseleave(view) { handleMouseLeave(view); },\n mousedown: function mousedown(view, event) { handleMouseDown$1(view, event, cellMinWidth); }\n },\n\n decorations: function decorations(state) {\n var pluginState = key$1.getState(state);\n if (pluginState.activeHandle > -1) { return handleDecorations(state, pluginState.activeHandle) }\n },\n\n nodeViews: {}\n }\n });\n return plugin\n}\n\nvar ResizeState = function ResizeState(activeHandle, dragging) {\n this.activeHandle = activeHandle;\n this.dragging = dragging;\n};\n\nResizeState.prototype.apply = function apply (tr) {\n var state = this, action = tr.getMeta(key$1);\n if (action && action.setHandle != null)\n { return new ResizeState(action.setHandle, null) }\n if (action && action.setDragging !== undefined)\n { return new ResizeState(state.activeHandle, action.setDragging) }\n if (state.activeHandle > -1 && tr.docChanged) {\n var handle = tr.mapping.map(state.activeHandle, -1);\n if (!pointsAtCell(tr.doc.resolve(handle))) { handle = null; }\n state = new ResizeState(handle, state.dragging);\n }\n return state\n};\n\nfunction handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) {\n var pluginState = key$1.getState(view.state);\n\n if (!pluginState.dragging) {\n var target = domCellAround(event.target), cell = -1;\n if (target) {\n var ref = target.getBoundingClientRect();\n var left = ref.left;\n var right = ref.right;\n if (event.clientX - left <= handleWidth)\n { cell = edgeCell(view, event, \"left\"); }\n else if (right - event.clientX <= handleWidth)\n { cell = edgeCell(view, event, \"right\"); }\n }\n\n if (cell != pluginState.activeHandle) {\n if (!lastColumnResizable && cell !== -1) {\n var $cell = view.state.doc.resolve(cell);\n var table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n var col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\n if (col == map.width - 1) {\n return\n }\n }\n\n updateHandle(view, cell);\n }\n }\n}\n\nfunction handleMouseLeave(view) {\n var pluginState = key$1.getState(view.state);\n if (pluginState.activeHandle > -1 && !pluginState.dragging) { updateHandle(view, -1); }\n}\n\nfunction handleMouseDown$1(view, event, cellMinWidth) {\n var pluginState = key$1.getState(view.state);\n if (pluginState.activeHandle == -1 || pluginState.dragging) { return false }\n\n var cell = view.state.doc.nodeAt(pluginState.activeHandle);\n var width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n view.dispatch(view.state.tr.setMeta(key$1, {setDragging: {startX: event.clientX, startWidth: width}}));\n\n function finish(event) {\n window.removeEventListener(\"mouseup\", finish);\n window.removeEventListener(\"mousemove\", move);\n var pluginState = key$1.getState(view.state);\n if (pluginState.dragging) {\n updateColumnWidth(view, pluginState.activeHandle, draggedWidth(pluginState.dragging, event, cellMinWidth));\n view.dispatch(view.state.tr.setMeta(key$1, {setDragging: null}));\n }\n }\n function move(event) {\n if (!event.which) { return finish(event) }\n var pluginState = key$1.getState(view.state);\n var dragged = draggedWidth(pluginState.dragging, event, cellMinWidth);\n displayColumnWidth(view, pluginState.activeHandle, dragged, cellMinWidth);\n }\n\n window.addEventListener(\"mouseup\", finish);\n window.addEventListener(\"mousemove\", move);\n event.preventDefault();\n return true\n}\n\nfunction currentColWidth(view, cellPos, ref) {\n var colspan = ref.colspan;\n var colwidth = ref.colwidth;\n\n var width = colwidth && colwidth[colwidth.length - 1];\n if (width) { return width }\n var dom = view.domAtPos(cellPos);\n var node = dom.node.childNodes[dom.offset];\n var domWidth = node.offsetWidth, parts = colspan;\n if (colwidth) { for (var i = 0; i < colspan; i++) { if (colwidth[i]) {\n domWidth -= colwidth[i];\n parts--;\n } } }\n return domWidth / parts\n}\n\nfunction domCellAround(target) {\n while (target && target.nodeName != \"TD\" && target.nodeName != \"TH\")\n { target = target.classList.contains(\"ProseMirror\") ? null : target.parentNode; }\n return target\n}\n\nfunction edgeCell(view, event, side) {\n var found = view.posAtCoords({left: event.clientX, top: event.clientY});\n if (!found) { return -1 }\n var pos = found.pos;\n var $cell = cellAround(view.state.doc.resolve(pos));\n if (!$cell) { return -1 }\n if (side == \"right\") { return $cell.pos }\n var map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n var index = map.map.indexOf($cell.pos - start);\n return index % map.width == 0 ? -1 : start + map.map[index - 1]\n}\n\nfunction draggedWidth(dragging, event, cellMinWidth) {\n var offset = event.clientX - dragging.startX;\n return Math.max(cellMinWidth, dragging.startWidth + offset)\n}\n\nfunction updateHandle(view, value) {\n view.dispatch(view.state.tr.setMeta(key$1, {setHandle: value}));\n}\n\nfunction updateColumnWidth(view, cell, width) {\n var $cell = view.state.doc.resolve(cell);\n var table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n var col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n var tr = view.state.tr;\n for (var row = 0; row < map.height; row++) {\n var mapIndex = row * map.width + col;\n // Rowspanning cell that has already been handled\n if (row && map.map[mapIndex] == map.map[mapIndex - map.width]) { continue }\n var pos = map.map[mapIndex];\n var ref = table.nodeAt(pos);\n var attrs = ref.attrs;\n var index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n if (attrs.colwidth && attrs.colwidth[index] == width) { continue }\n var colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n colwidth[index] = width;\n tr.setNodeMarkup(start + pos, null, setAttr(attrs, \"colwidth\", colwidth));\n }\n if (tr.docChanged) { view.dispatch(tr); }\n}\n\nfunction displayColumnWidth(view, cell, width, cellMinWidth) {\n var $cell = view.state.doc.resolve(cell);\n var table = $cell.node(-1), start = $cell.start(-1);\n var col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n var dom = view.domAtPos($cell.start(-1)).node;\n while (dom.nodeName != \"TABLE\") { dom = dom.parentNode; }\n updateColumns(table, dom.firstChild, dom, cellMinWidth, col, width);\n}\n\nfunction zeroes(n) {\n var result = [];\n for (var i = 0; i < n; i++) { result.push(0); }\n return result\n}\n\nfunction handleDecorations(state, cell) {\n var decorations = [];\n var $cell = state.doc.resolve(cell);\n var table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n var col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan;\n for (var row = 0; row < map.height; row++) {\n var index = col + row * map.width - 1;\n // For positions that are have either a different cell or the end\n // of the table to their right, and either the top of the table or\n // a different cell above them, add a decoration\n if ((col == map.width || map.map[index] != map.map[index + 1]) &&\n (row == 0 || map.map[index - 1] != map.map[index - 1 - map.width])) {\n var cellPos = map.map[index];\n var pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n var dom = document.createElement(\"div\");\n dom.className = \"column-resize-handle\";\n decorations.push(Decoration.widget(pos, dom));\n }\n }\n return DecorationSet.create(state.doc, decorations)\n}\n\n// This file defines a plugin that handles the drawing of cell\n\n// :: () → Plugin\n//\n// Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n// that, when added to an editor, enables cell-selection, handles\n// cell-based copy/paste, and makes sure tables stay well-formed (each\n// row has the same width, and cells don't overlap).\n//\n// You should probably put this plugin near the end of your array of\n// plugins, since it handles mouse and arrow key events in tables\n// rather broadly, and other plugins, like the gap cursor or the\n// column-width dragging plugin, might want to get a turn first to\n// perform more specific behavior.\nfunction tableEditing(ref) {\n if ( ref === void 0 ) ref = {};\n var allowTableNodeSelection = ref.allowTableNodeSelection; if ( allowTableNodeSelection === void 0 ) allowTableNodeSelection = false;\n\n return new Plugin({\n key: key,\n\n // This piece of state is used to remember when a mouse-drag\n // cell-selection is happening, so that it can continue even as\n // transactions (which might move its anchor cell) come in.\n state: {\n init: function init() { return null },\n apply: function apply(tr, cur) {\n var set = tr.getMeta(key);\n if (set != null) { return set == -1 ? null : set }\n if (cur == null || !tr.docChanged) { return cur }\n var ref = tr.mapping.mapResult(cur);\n var deleted = ref.deleted;\n var pos = ref.pos;\n return deleted ? null : pos\n }\n },\n\n props: {\n decorations: drawCellSelection,\n\n handleDOMEvents: {\n mousedown: handleMouseDown\n },\n\n createSelectionBetween: function createSelectionBetween(view) {\n if (key.getState(view.state) != null) { return view.state.selection }\n },\n\n handleTripleClick: handleTripleClick,\n\n handleKeyDown: handleKeyDown,\n\n handlePaste: handlePaste\n },\n\n appendTransaction: function appendTransaction(_, oldState, state) {\n return normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection)\n }\n })\n}\n\nexport { CellSelection, TableMap, TableView, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, colCount, columnIsHeader, columnResizing, key$1 as columnResizingPluginKey, deleteColumn, deleteRow, deleteTable, findCell, fixTables, fixTablesKey, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setAttr, setCellAttr, splitCell, splitCellWithType, tableEditing, key as tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumns as updateColumnsOnResize };\n","import { tableNodes } from 'prosemirror-tables';\nconst hole = 0;\nconst blockquoteDOM = ['blockquote', hole], hrDOM = ['hr'], preDOM = ['pre', ['code', hole]];\nconst olDOM = ['ol', 0], ulDOM = ['ul', 0], liDOM = ['li', 0];\nconst getAttributes = (dom) => {\n const result = {};\n let attributes = dom.attributes, attr;\n for (let i = 0; i < attributes.length; i++) {\n attr = attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n};\nconst commonAttributes = () => {\n return {\n style: { default: null },\n class: { default: null },\n id: { default: null }\n };\n};\nconst hasAttrs = (attrs, exclude) => {\n for (let attr in attrs) {\n if (attr && attrs[attr] !== null && attr !== exclude) {\n return true;\n }\n }\n return false;\n};\nconst getAttrs = (attrs, exclude) => {\n const result = {};\n for (let attr in attrs) {\n if (attr && attrs[attr] !== null && attr !== exclude) {\n result[attr] = attrs[attr];\n }\n }\n return result;\n};\nconst tagMark = tag => {\n return {\n [tag]: {\n name: tag,\n inclusive: true,\n parseDOM: [{ tag: tag }],\n toDOM: () => [tag, hole]\n }\n };\n};\nconst marks = Object.assign({ \n // :: MarkSpec A link. Has `href` and `title` attributes. `title`\n // defaults to the empty string. Rendered and parsed as an ``\n // element.\n link: {\n attrs: Object.assign({}, commonAttributes(), { href: { default: null }, target: { default: null }, title: { default: null } }),\n inclusive: false,\n parseDOM: [{ tag: 'a', getAttrs: getAttributes }],\n toDOM: (node) => ['a', getAttrs(node.attrs), hole]\n } }, tagMark('strong'), tagMark('b'), tagMark('em'), tagMark('i'), tagMark('u'), tagMark('del'), tagMark('sub'), tagMark('sup'), tagMark('code'), { style: {\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{\n tag: 'span',\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ?\n ['span', getAttrs(node.attrs), hole] : ['span', hole]\n } });\nconst nodes = Object.assign({ \n // :: NodeSpec The top level document node.\n doc: {\n content: 'block+'\n }, \n // :: NodeSpec A plain paragraph textblock. Represented in the DOM\n // as a `

        ` element.\n paragraph: {\n content: 'inline*',\n group: 'block',\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{\n tag: 'p',\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ? ['p', getAttrs(node.attrs), hole] : ['p', hole]\n }, div: {\n // Uncaught SyntaxError: Mixing inline and block content (in content expression '(block | inline)*')\n // content: '(block | inline)*',\n content: 'block*',\n group: 'block',\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{\n tag: 'div',\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ? ['div', getAttrs(node.attrs), hole] : ['div', hole]\n }, \n // :: NodeSpec A blockquote (`

        `) wrapping one or more blocks.\n blockquote: {\n attrs: Object.assign({}, commonAttributes()),\n content: 'block+',\n group: 'block',\n defining: true,\n parseDOM: [{\n tag: 'blockquote',\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ? ['blockquote', getAttrs(node.attrs), hole] : blockquoteDOM\n }, \n // :: NodeSpec A horizontal rule (`
        `).\n horizontal_rule: {\n group: 'block',\n parseDOM: [{ tag: 'hr' }],\n toDOM: () => hrDOM\n }, \n // :: NodeSpec A heading textblock, with a `level` attribute that\n // has to hold the numbers from 1 to 6. Parsed and serialized as `

        ` to\n // `

        ` elements.\n heading: {\n attrs: Object.assign({}, commonAttributes(), { level: { default: 1 } }),\n content: 'inline*',\n group: 'block',\n defining: true,\n parseDOM: [\n { tag: 'h1', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 1 })) },\n { tag: 'h2', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 2 })) },\n { tag: 'h3', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 3 })) },\n { tag: 'h4', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 4 })) },\n { tag: 'h5', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 5 })) },\n { tag: 'h6', getAttrs: node => (Object.assign({}, getAttributes(node), { level: 6 })) }\n ],\n toDOM: node => hasAttrs(node.attrs, 'level') ?\n ['h' + node.attrs.level, getAttrs(node.attrs, 'level'), hole] :\n ['h' + node.attrs.level, hole]\n }, \n // :: NodeSpec A code listing. Disallows marks or non-text inline\n // nodes by default. Represented as a `
        ` element with a\n    // `` element inside it.\n    code_block: {\n        content: 'text*',\n        marks: '',\n        group: 'block',\n        code: true,\n        defining: true,\n        parseDOM: [{ tag: 'pre', preserveWhitespace: 'full' }],\n        toDOM: () => preDOM\n    }, \n    // :: NodeSpec The text node.\n    text: {\n        inline: true,\n        group: 'inline'\n    }, \n    // :: NodeSpec An inline image (``) node. Supports `src`,\n    // `alt`, and `href` attributes. The latter two default to an empty\n    // string.\n    image: {\n        inline: true,\n        attrs: Object.assign({ src: { default: null }, alt: { default: null }, title: { default: null }, width: { default: null }, height: { default: null } }, commonAttributes()),\n        group: 'inline',\n        draggable: true,\n        parseDOM: [{ tag: 'img', getAttrs: getAttributes }],\n        toDOM: node => hasAttrs(node.attrs) ? ['img', getAttrs(node.attrs)] : ['img']\n    }, \n    // :: NodeSpec A hard line break represented in the DOM as a `
        ` element.\n hard_break: {\n inline: true,\n attrs: Object.assign({}, commonAttributes()),\n group: 'inline',\n selectable: false,\n parseDOM: [{\n tag: 'br',\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ? ['br', getAttrs(node.attrs)] : ['br']\n }, \n // :: NodeSpec\n // An ordered list [node spec](#model.NodeSpec). Has a single\n // attribute, `order`, which determines the number at which the list\n // starts counting, and defaults to 1. Represented as an `
          `\n // element.\n ordered_list: {\n content: 'list_item+',\n group: 'block',\n attrs: Object.assign({}, commonAttributes(), { type: { default: null }, order: { default: 1 } }),\n parseDOM: [{ tag: 'ol', getAttrs: (dom) => {\n return Object.assign({}, getAttributes(dom), { order: dom.hasAttribute('start') ? parseInt(dom.getAttribute('start') || '1', 10) : 1 });\n } }],\n toDOM: node => {\n return node.attrs.order === 1 ?\n (hasAttrs(node.attrs, 'order') ? ['ol', getAttrs(node.attrs, 'order'), hole] : olDOM) :\n ['ol', Object.assign({}, getAttrs(node.attrs, 'order'), { start: node.attrs.order }), hole];\n }\n }, \n // :: NodeSpec\n // A bullet list node specification represented in the DOM as a `
            ` element.\n bullet_list: {\n content: 'list_item+',\n group: 'block',\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{ tag: 'ul', getAttrs: getAttributes }],\n toDOM: node => hasAttrs(node.attrs) ? ['ul', getAttrs(node.attrs), hole] : ulDOM\n }, \n // :: NodeSpec\n // A list item (`
          • `) specification.\n list_item: {\n content: '(paragraph | heading) block*',\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{ tag: 'li', getAttrs: getAttributes }],\n toDOM: node => hasAttrs(node.attrs) ? ['li', getAttrs(node.attrs), hole] : liDOM,\n defining: true\n } }, tableNodes({ tableGroup: 'block', cellContent: 'block+', cellAttributes: {} }));\nexport { nodes, marks };\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n if (!other.length) { return this }\n other = RopeSequence.from(other);\n\n return (!this.length && other) ||\n (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence>) → RopeSequence\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n if (!other.length) { return this }\n return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from >= to) { return RopeSequence.empty }\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n if (i < 0 || i >= this.length) { return undefined }\n return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from <= to)\n { this.forEachInner(f, from, to, 0); }\n else\n { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n var result = [];\n this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n return result\n};\n\n// :: (?union<[T], RopeSequence>) → RopeSequence\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n if (values instanceof RopeSequence) { return values }\n return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Leaf.prototype.constructor = Leaf;\n\n var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n Leaf.prototype.flatten = function flatten () {\n return this.values\n };\n\n Leaf.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n return new Leaf(this.values.slice(from, to))\n };\n\n Leaf.prototype.getInner = function getInner (i) {\n return this.values[i]\n };\n\n Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n for (var i = from; i < to; i++)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n for (var i = from - 1; i >= to; i--)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.leafAppend = function leafAppend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(this.values.concat(other.flatten())) }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(other.flatten().concat(this.values)) }\n };\n\n prototypeAccessors.length.get = function () { return this.values.length };\n\n prototypeAccessors.depth.get = function () { return 0 };\n\n Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if ( RopeSequence ) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten () {\n return this.left.flatten().concat(this.right.flatten())\n };\n\n Append.prototype.getInner = function getInner (i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n };\n\n Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from < leftLen &&\n this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n { return false }\n if (to > leftLen &&\n this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n { return false }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from > leftLen &&\n this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n { return false }\n if (to < leftLen &&\n this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n { return false }\n };\n\n Append.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n var leftLen = this.left.length;\n if (to <= leftLen) { return this.left.slice(from, to) }\n if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n };\n\n Append.prototype.leafAppend = function leafAppend (other) {\n var inner = this.right.leafAppend(other);\n if (inner) { return new Append(this.left, inner) }\n };\n\n Append.prototype.leafPrepend = function leafPrepend (other) {\n var inner = this.left.leafPrepend(other);\n if (inner) { return new Append(inner, this.right) }\n };\n\n Append.prototype.appendInner = function appendInner (other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n { return new Append(this.left, new Append(this.right, other)) }\n return new Append(this, other)\n };\n\n return Append;\n}(RopeSequence));\n\nexport default RopeSequence;\n","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n\n// Used to schedule history compression\nvar max_empty_items = 500;\n\nvar Branch = function Branch(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n};\n\n// : (EditorState, bool) → ?{transform: Transform, selection: ?SelectionBookmark, remaining: Branch}\n// Pop the latest event off the branch's history and apply it\n// to a document transform.\nBranch.prototype.popEvent = function popEvent (state, preserveItems) {\n var this$1 = this;\n\n if (this.eventCount == 0) { return null }\n\n var end = this.items.length;\n for (;; end--) {\n var next = this.items.get(end - 1);\n if (next.selection) { --end; break }\n }\n\n var remap, mapFrom;\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n var transform = state.tr;\n var selection, remaining;\n var addAfter = [], addBefore = [];\n\n this.items.forEach(function (item, i) {\n if (!item.step) {\n if (!remap) {\n remap = this$1.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n mapFrom--;\n addBefore.push(item);\n return\n }\n\n if (remap) {\n addBefore.push(new Item(item.map));\n var step = item.step.map(remap.slice(mapFrom)), map;\n\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, null, null, addAfter.length + addBefore.length));\n }\n mapFrom--;\n if (map) { remap.appendMap(map, mapFrom); }\n } else {\n transform.maybeStep(item.step);\n }\n\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this$1.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this$1.eventCount - 1);\n return false\n }\n }, this.items.length, 0);\n\n return {remaining: remaining, transform: transform, selection: selection}\n};\n\n// : (Transform, ?SelectionBookmark, Object) → Branch\n// Create a new branch with the given transform added.\nBranch.prototype.addTransform = function addTransform (transform, selection, histOptions, preserveItems) {\n var newItems = [], eventCount = this.eventCount;\n var oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n\n for (var i = 0; i < transform.steps.length; i++) {\n var step = transform.steps[i].invert(transform.docs[i]);\n var item = new Item(transform.mapping.maps[i], step, selection), merged = (void 0);\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n if (i) { newItems.pop(); }\n else { oldItems = oldItems.slice(0, oldItems.length - 1); }\n }\n newItems.push(item);\n if (selection) {\n eventCount++;\n selection = null;\n }\n if (!preserveItems) { lastItem = item; }\n }\n var overflow = eventCount - histOptions.depth;\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n return new Branch(oldItems.append(newItems), eventCount)\n};\n\nBranch.prototype.remapping = function remapping (from, to) {\n var maps = new Mapping;\n this.items.forEach(function (item, i) {\n var mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n ? maps.maps.length - item.mirrorOffset : null;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps\n};\n\nBranch.prototype.addMaps = function addMaps (array) {\n if (this.eventCount == 0) { return this }\n return new Branch(this.items.append(array.map(function (map) { return new Item(map); })), this.eventCount)\n};\n\n// : (Transform, number)\n// When the collab module receives remote changes, the history has\n// to know about those, so that it can adjust the steps that were\n// rebased on top of the remote changes, and include the position\n// maps for the remote changes in its array of items.\nBranch.prototype.rebased = function rebased (rebasedTransform, rebasedCount) {\n if (!this.eventCount) { return this }\n\n var rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);\n\n var mapping = rebasedTransform.mapping;\n var newUntil = rebasedTransform.steps.length;\n var eventCount = this.eventCount;\n this.items.forEach(function (item) { if (item.selection) { eventCount--; } }, start);\n\n var iRebased = rebasedCount;\n this.items.forEach(function (item) {\n var pos = mapping.getMirror(--iRebased);\n if (pos == null) { return }\n newUntil = Math.min(newUntil, pos);\n var map = mapping.maps[pos];\n if (item.step) {\n var step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n var selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n if (selection) { eventCount++; }\n rebasedItems.push(new Item(map, step, selection));\n } else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n\n var newMaps = [];\n for (var i = rebasedCount; i < newUntil; i++)\n { newMaps.push(new Item(mapping.maps[i])); }\n var items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n var branch = new Branch(items, eventCount);\n\n if (branch.emptyItemCount() > max_empty_items)\n { branch = branch.compress(this.items.length - rebasedItems.length); }\n return branch\n};\n\nBranch.prototype.emptyItemCount = function emptyItemCount () {\n var count = 0;\n this.items.forEach(function (item) { if (!item.step) { count++; } });\n return count\n};\n\n// Compressing a branch means rewriting it to push the air (map-only\n// items) out. During collaboration, these naturally accumulate\n// because each remote change adds one. The `upto` argument is used\n// to ensure that only the items below a given level are compressed,\n// because `rebased` relies on a clean, untouched set of items in\n// order to associate old items with rebased steps.\nBranch.prototype.compress = function compress (upto) {\n if ( upto === void 0 ) upto = this.items.length;\n\n var remap = this.remapping(0, upto), mapFrom = remap.maps.length;\n var items = [], events = 0;\n this.items.forEach(function (item, i) {\n if (i >= upto) {\n items.push(item);\n if (item.selection) { events++; }\n } else if (item.step) {\n var step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap();\n mapFrom--;\n if (map) { remap.appendMap(map, mapFrom); }\n if (step) {\n var selection = item.selection && item.selection.map(remap.slice(mapFrom));\n if (selection) { events++; }\n var newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1;\n if (merged = items.length && items[last].merge(newItem))\n { items[last] = merged; }\n else\n { items.push(newItem); }\n }\n } else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events)\n};\n\nBranch.empty = new Branch(RopeSequence.empty, 0);\n\nfunction cutOffEvents(items, n) {\n var cutPoint;\n items.forEach(function (item, i) {\n if (item.selection && (n-- == 0)) {\n cutPoint = i;\n return false\n }\n });\n return items.slice(cutPoint)\n}\n\nvar Item = function Item(map, step, selection, mirrorOffset) {\n // The (forward) step map for this item.\n this.map = map;\n // The inverted step\n this.step = step;\n // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n this.selection = selection;\n // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n this.mirrorOffset = mirrorOffset;\n};\n\nItem.prototype.merge = function merge (other) {\n if (this.step && other.step && !other.selection) {\n var step = other.step.merge(this.step);\n if (step) { return new Item(step.getMap().invert(), step, this.selection) }\n }\n};\n\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nvar HistoryState = function HistoryState(done, undone, prevRanges, prevTime) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n};\n\nvar DEPTH_OVERFLOW = 20;\n\n// : (HistoryState, EditorState, Transaction, Object)\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n var historyTr = tr.getMeta(historyKey), rebased;\n if (historyTr) { return historyTr.historyState }\n\n if (tr.getMeta(closeHistoryKey)) { history = new HistoryState(history.done, history.undone, null, 0); }\n\n var appended = tr.getMeta(\"appendedTransaction\");\n\n if (tr.steps.length == 0) {\n return history\n } else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo)\n { return new HistoryState(history.done.addTransform(tr, null, options, mustPreserveItems(state)),\n history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime) }\n else\n { return new HistoryState(history.done, history.undone.addTransform(tr, null, options, mustPreserveItems(state)),\n null, history.prevTime) }\n } else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n var newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay ||\n !isAdjacentTo(tr, history.prevRanges));\n var prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : null,\n options, mustPreserveItems(state)),\n Branch.empty, prevRanges, tr.time)\n } else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased),\n history.undone.rebased(tr, rebased),\n mapRanges(history.prevRanges, tr.mapping), history.prevTime)\n } else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps),\n history.undone.addMaps(tr.mapping.maps),\n mapRanges(history.prevRanges, tr.mapping), history.prevTime)\n }\n}\n\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges) { return false }\n if (!transform.docChanged) { return true }\n var adjacent = false;\n transform.mapping.maps[0].forEach(function (start, end) {\n for (var i = 0; i < prevRanges.length; i += 2)\n { if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n { adjacent = true; } }\n });\n return adjacent\n}\n\nfunction rangesFor(map) {\n var result = [];\n map.forEach(function (_from, _to, from, to) { return result.push(from, to); });\n return result\n}\n\nfunction mapRanges(ranges, mapping) {\n if (!ranges) { return null }\n var result = [];\n for (var i = 0; i < ranges.length; i += 2) {\n var from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);\n if (from <= to) { result.push(from, to); }\n }\n return result\n}\n\n// : (HistoryState, EditorState, (tr: Transaction), bool)\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, dispatch, redo) {\n var preserveItems = mustPreserveItems(state), histOptions = historyKey.get(state).spec.config;\n var pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n if (!pop) { return }\n\n var selection = pop.selection.resolve(pop.transform.doc);\n var added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(),\n histOptions, preserveItems);\n\n var newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0);\n dispatch(pop.transform.setSelection(selection).setMeta(historyKey, {redo: redo, historyState: newHist}).scrollIntoView());\n}\n\nvar cachedPreserveItems = false, cachedPreserveItemsPlugins = null;\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n var plugins = state.plugins;\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n for (var i = 0; i < plugins.length; i++) { if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break\n } }\n }\n return cachedPreserveItems\n}\n\n// :: (Transaction) → Transaction\n// Set a flag on the given transaction that will prevent further steps\n// from being appended to an existing history event (so that they\n// require a separate undo command to undo).\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true)\n}\n\nvar historyKey = new PluginKey(\"history\");\nvar closeHistoryKey = new PluginKey(\"closeHistory\");\n\n// :: (?Object) → Plugin\n// Returns a plugin that enables the undo history for an editor. The\n// plugin will track undo and redo stacks, which can be used with the\n// [`undo`](#history.undo) and [`redo`](#history.redo) commands.\n//\n// You can set an `\"addToHistory\"` [metadata\n// property](#state.Transaction.setMeta) of `false` on a transaction\n// to prevent it from being rolled back by undo.\n//\n// config::-\n// Supports the following configuration options:\n//\n// depth:: ?number\n// The amount of history events that are collected before the\n// oldest events are discarded. Defaults to 100.\n//\n// newGroupDelay:: ?number\n// The delay between changes after which a new group should be\n// started. Defaults to 500 (milliseconds). Note that when changes\n// aren't adjacent, a new group is always started.\nfunction history(config) {\n config = {depth: config && config.depth || 100,\n newGroupDelay: config && config.newGroupDelay || 500};\n return new Plugin({\n key: historyKey,\n\n state: {\n init: function init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0)\n },\n apply: function apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config)\n }\n },\n\n config: config,\n\n props: {\n handleDOMEvents: {\n beforeinput: function beforeinput(view, e) {\n var handled = e.inputType == \"historyUndo\" ? undo(view.state, view.dispatch) :\n e.inputType == \"historyRedo\" ? redo(view.state, view.dispatch) : false;\n if (handled) { e.preventDefault(); }\n return handled\n }\n }\n }\n })\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that undoes the last change, if any.\nfunction undo(state, dispatch) {\n var hist = historyKey.getState(state);\n if (!hist || hist.done.eventCount == 0) { return false }\n if (dispatch) { histTransaction(hist, state, dispatch, false); }\n return true\n}\n\n// :: (EditorState, ?(tr: Transaction)) → bool\n// A command function that redoes the last undone change, if any.\nfunction redo(state, dispatch) {\n var hist = historyKey.getState(state);\n if (!hist || hist.undone.eventCount == 0) { return false }\n if (dispatch) { histTransaction(hist, state, dispatch, true); }\n return true\n}\n\n// :: (EditorState) → number\n// The amount of undoable events available in a given state.\nfunction undoDepth(state) {\n var hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0\n}\n\n// :: (EditorState) → number\n// The amount of redoable events available in a given editor state.\nfunction redoDepth(state) {\n var hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0\n}\n\nexport { HistoryState, closeHistory, history, redo, redoDepth, undo, undoDepth };\n","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform';\n\n// ::- Input rules are regular expressions describing a piece of text\n// that, when typed, causes something to happen. This might be\n// changing two dashes into an emdash, wrapping a paragraph starting\n// with `\"> \"` into a blockquote, or something entirely different.\nvar InputRule = function InputRule(match, handler) {\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n};\n\nfunction stringHandler(string) {\n return function(state, match, start, end) {\n var insert = string;\n if (match[1]) {\n var offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n var cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n return state.tr.insertText(insert, start, end)\n }\n}\n\nvar MAX_MATCH = 500;\n\n// :: (config: {rules: [InputRule]}) → Plugin\n// Create an input rules plugin. When enabled, it will cause text\n// input that matches any of the given rules to trigger the rule's\n// action.\nfunction inputRules(ref) {\n var rules = ref.rules;\n\n var plugin = new Plugin({\n state: {\n init: function init() { return null },\n apply: function apply(tr, prev) {\n var stored = tr.getMeta(this);\n if (stored) { return stored }\n return tr.selectionSet || tr.docChanged ? null : prev\n }\n },\n\n props: {\n handleTextInput: function handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin)\n },\n handleDOMEvents: {\n compositionend: function (view) {\n setTimeout(function () {\n var ref = view.state.selection;\n var $cursor = ref.$cursor;\n if ($cursor) { run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin); }\n });\n }\n }\n },\n\n isInputRules: true\n });\n return plugin\n}\n\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing) { return false }\n var state = view.state, $from = state.doc.resolve(from);\n if ($from.parent.type.spec.code) { return false }\n var textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset,\n null, \"\\ufffc\") + text;\n for (var i = 0; i < rules.length; i++) {\n var match = rules[i].match.exec(textBefore);\n var tr = match && rules[i].handler(state, match, from - (match[0].length - text.length), to);\n if (!tr) { continue }\n view.dispatch(tr.setMeta(plugin, {transform: tr, from: from, to: to, text: text}));\n return true\n }\n return false\n}\n\n// :: (EditorState, ?(Transaction)) → bool\n// This is a command that will undo an input rule, if applying such a\n// rule was the last thing that the user did.\nfunction undoInputRule(state, dispatch) {\n var plugins = state.plugins;\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i], undoable = (void 0);\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n var tr = state.tr, toUndo = undoable.transform;\n for (var j = toUndo.steps.length - 1; j >= 0; j--)\n { tr.step(toUndo.steps[j].invert(toUndo.docs[j])); }\n if (undoable.text) {\n var marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n } else {\n tr.delete(undoable.from, undoable.to);\n }\n dispatch(tr);\n }\n return true\n }\n }\n return false\n}\n\n// :: InputRule Converts double dashes to an emdash.\nvar emDash = new InputRule(/--$/, \"—\");\n// :: InputRule Converts three dots to an ellipsis character.\nvar ellipsis = new InputRule(/\\.\\.\\.$/, \"…\");\n// :: InputRule “Smart” opening double quotes.\nvar openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\");\n// :: InputRule “Smart” closing double quotes.\nvar closeDoubleQuote = new InputRule(/\"$/, \"”\");\n// :: InputRule “Smart” opening single quotes.\nvar openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\");\n// :: InputRule “Smart” closing single quotes.\nvar closeSingleQuote = new InputRule(/'$/, \"’\");\n\n// :: [InputRule] Smart-quote related input rules.\nvar smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];\n\n// :: (RegExp, NodeType, ?union, ?([string], Node) → bool) → InputRule\n// Build an input rule for automatically wrapping a textblock when a\n// given string is typed. The `regexp` argument is\n// directly passed through to the `InputRule` constructor. You'll\n// probably want the regexp to start with `^`, so that the pattern can\n// only occur at the start of a textblock.\n//\n// `nodeType` is the type of node to wrap in. If it needs attributes,\n// you can either pass them directly, or pass a function that will\n// compute them from the regular expression match.\n//\n// By default, if there's a node with the same type above the newly\n// wrapped node, the rule will try to [join](#transform.Transform.join) those\n// two nodes. You can pass a join predicate, which takes a regular\n// expression match and the node before the wrapped node, and can\n// return a boolean to indicate whether a join should happen.\nfunction wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate) {\n return new InputRule(regexp, function (state, match, start, end) {\n var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n var tr = state.tr.delete(start, end);\n var $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping) { return null }\n tr.wrap(range, wrapping);\n var before = tr.doc.resolve(start - 1).nodeBefore;\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before)))\n { tr.join(start - 1); }\n return tr\n })\n}\n\n// :: (RegExp, NodeType, ?union) → InputRule\n// Build an input rule that changes the type of a textblock when the\n// matched text is typed into it. You'll usually want to start your\n// regexp with `^` to that it is only matched at the start of a\n// textblock. The optional `getAttrs` parameter can be used to compute\n// the new node's attributes, and works the same as in the\n// `wrappingInputRule` function.\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs) {\n return new InputRule(regexp, function (state, match, start, end) {\n var $start = state.doc.resolve(start);\n var attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType)) { return null }\n return state.tr\n .delete(start, end)\n .setBlockType(start, start, nodeType, attrs)\n })\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };\n","/**\n * The object of the Bold command.\n */\nexport const bold = {\n mark: 'strong',\n altMarks: ['b'],\n altStyle: { name: 'font-weight', value: /^(bold(er)?|[5-9]\\d{2,})$/ }\n};\n/**\n * The object of the Italic command.\n */\nexport const italic = {\n mark: 'em',\n altMarks: ['i'],\n altStyle: { name: 'font-style', value: /^italic$/i }\n};\n/**\n * The object of the Underline command.\n */\nexport const underline = {\n mark: 'u',\n altStyle: { name: 'text-decoration', value: /^underline$/i }\n};\n/**\n * The object of the Strikethrough command.\n */\nexport const strikethrough = {\n mark: 'del',\n altStyle: { name: 'text-decoration', value: /^line-through$/i }\n};\n/**\n * The object of the Subscript command.\n */\nexport const subscript = {\n mark: 'sub'\n};\n/**\n * The object of the Superscript command.\n */\nexport const superscript = {\n mark: 'sup'\n};\n/**\n * The object of the Link tool settings.\n */\nexport const link = {\n mark: 'link'\n};\n/**\n * The object of the Unlink tool settings.\n */\nexport const unlink = {\n mark: 'link'\n};\n","import { chainCommands, exitCode, newlineInCode, createParagraphNear, liftEmptyBlock, splitBlockKeepMarks, deleteSelection, joinBackward, selectNodeBackward } from 'prosemirror-commands';\nimport { undo, redo } from 'prosemirror-history';\nimport { undoInputRule } from 'prosemirror-inputrules';\nimport { splitListItemKeepMarks } from '../lists';\nimport { bold, italic, underline } from './commands';\nimport { toggleInlineFormat } from './../inline-style';\nimport { expandToWordWrap } from '../utils';\nconst mac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;\n// https://github.com/ProseMirror/prosemirror-example-setup/blob/master/src/keymap.js\nexport const buildKeymap = (schema, options) => {\n const keys = {};\n const applyToWord = (options && options.applyToWord) || false;\n keys['Mod-z'] = undo;\n keys['Shift-Mod-z'] = redo;\n // tslint:disable-next-line:no-string-literal\n keys['Backspace'] = chainCommands(undoInputRule, deleteSelection, joinBackward, selectNodeBackward);\n // tslint:disable-next-line:no-string-literal\n keys['Enter'] = chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlockKeepMarks);\n if (!mac) {\n keys['Mod-y'] = redo;\n }\n if (schema.marks.strong) {\n keys['Mod-b'] = expandToWordWrap(toggleInlineFormat, Object.assign({}, bold, { applyToWord }));\n }\n if (schema.marks.em) {\n keys['Mod-i'] = expandToWordWrap(toggleInlineFormat, Object.assign({}, italic, { applyToWord }));\n }\n if (schema.marks.u) {\n keys['Mod-u'] = expandToWordWrap(toggleInlineFormat, Object.assign({}, underline, { applyToWord }));\n }\n if (schema.nodes.hard_break) {\n const br = schema.nodes.hard_break;\n const cmd = chainCommands(exitCode, (state, dispatch) => {\n dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\n return true;\n });\n keys['Shift-Enter'] = cmd;\n }\n return keys;\n};\nexport const buildListKeymap = (schema) => {\n const keys = {};\n if (schema.nodes.list_item) {\n // tslint:disable-next-line:no-string-literal\n keys['Enter'] = splitListItemKeepMarks(schema.nodes.list_item);\n }\n return keys;\n};\n","const msoListRegExp = /style=['\"]?[^'\"]*?mso-list:\\s*[a-zA-Z]+(\\d+)\\s[a-zA-Z]+(\\d+)\\s(\\w+)/gi;\nconst extractListLevels = (html) => {\n html = html.replace(msoListRegExp, (match, list, level) => {\n return `datalist=\"${list}\" datalevel=\"${level}\" ${match}`;\n });\n return html;\n};\nconst isPartOfListItem = (element) => {\n return /^MsoListParagraph/.test(element.className);\n};\nconst innerText = (node) => {\n let text = node.innerHTML;\n text = text.replace(//gi, '');\n text = text.replace(/<\\/?[^>]+?\\/?>/gm, '');\n return text;\n};\nconst createList = (type, styleType) => {\n const list = document.createElement(type);\n list.style.listStyleType = styleType;\n return list;\n};\nconst guessUnorderedListStyle = (symbol) => {\n if (/^[\\u2022\\u00b7\\u00FC\\u00D8\\u002dv-]/.test(symbol)) {\n return null; // return \"disc\"; //default CSS value\n }\n else if (/^o/.test(symbol)) {\n return 'circle';\n }\n else {\n return 'square';\n }\n};\nconst guessOrderedListStyle = (symbol) => {\n let type = null;\n if (!/^\\d/.test(symbol)) {\n type = (/^[a-z]/.test(symbol) ? 'lower-' : 'upper-') +\n (/^[ivxlcdm]/i.test(symbol) ? 'roman' : 'alpha');\n }\n return type;\n};\nconst mapListsCandidates = (nodes, groups) => {\n let group = [];\n Array.from(nodes).forEach(node => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n let element = node;\n if (element.getAttribute('datalist')) {\n group.push(node);\n groups.add(group);\n }\n else if (isPartOfListItem(element) && group.length) {\n group.push(node);\n }\n else {\n group = [];\n if (element.nodeName === 'DIV') {\n mapListsCandidates(element.children, groups);\n }\n else if (element.nodeName === 'TABLE') {\n Array.from(element.querySelectorAll('td,th')).forEach(cell => {\n mapListsCandidates(cell.children, groups);\n });\n }\n }\n });\n};\nconst listTypes = (p) => {\n let html = p.innerHTML;\n let trimStartText = (t) => {\n return t.replace(/^(?: |[\\u00a0\\n\\r\\s])+/, '');\n };\n html = html.replace(/<\\/?\\w+[^>]*>/g, '').replace(/ /g, '\\u00a0');\n if ((/^[\\u2022\\u00b7\\u00a7\\u00d8oØüvn][\\u00a0 ]+/.test(html))) {\n return {\n tag: 'ul',\n style: guessUnorderedListStyle(trimStartText(innerText(p)))\n };\n }\n if (/^\\s*\\w+[\\.\\)][\\u00a0 ]{2,}/.test(html)) {\n return {\n tag: 'ol',\n style: guessOrderedListStyle(trimStartText(innerText(p)))\n };\n }\n};\nconst convertToLi = (p) => {\n let content, name = p.nodeName.toLowerCase();\n if (p.firstChild && p.firstChild.nodeType === Node.COMMENT_NODE) {\n p.removeChild(p.firstChild);\n }\n if (p.childNodes.length === 1) {\n content = p.firstChild.nodeType === Node.TEXT_NODE ?\n innerText(p) : p.firstChild.innerHTML.replace(/^\\w+[\\.\\)]( )+ /, '');\n }\n else {\n p.removeChild(p.firstChild);\n // check for Roman numerals\n if (p.firstChild.nodeType === 3) {\n if (/^[ivxlcdm]+\\.$/i.test(p.firstChild.nodeValue)) {\n p.removeChild(p.firstChild);\n }\n }\n if (/^( |\\s)+$/i.test(p.firstChild.innerHTML)) {\n p.removeChild(p.firstChild);\n }\n if (name !== 'p') {\n content = '<' + name + '>' + p.innerHTML + '';\n }\n else {\n content = p.innerHTML;\n }\n }\n p.parentNode.removeChild(p);\n const li = document.createElement('li');\n li.innerHTML = content;\n return li;\n};\nconst toList = (blockNodes) => {\n let lastMargin = -1, levels = {}, li, rootMargin, rootIndex, lastRootLi, isLastRootLi, rootList, items, i, p, type, margin, list, listData;\n for (i = 0; i < blockNodes.length; i++) {\n p = blockNodes[i];\n listData = {\n datalist: p.getAttribute('datalist'),\n datalevel: p.getAttribute('datalevel')\n };\n let listIndex = listData.datalist;\n let listType = listTypes(p);\n type = listType && listType.tag;\n if (!type) {\n if (li && (!isLastRootLi || isPartOfListItem(p))) {\n if (p.style.marginLeft) {\n p.style.marginLeft = '';\n }\n if (p.style.marginLeft) {\n // tests runner/framework fails to delete marginLeft\n p.style.margin = '';\n }\n li.appendChild(p);\n }\n continue;\n }\n margin = listData.datalevel || parseFloat(p.style.marginLeft || 0);\n if (!listData.datalevel && !p.style.marginLeft) {\n continue;\n }\n let levelType = type + listIndex;\n if (!levels[margin]) {\n levels[margin] = {};\n }\n if (!rootMargin || rootMargin < 0) {\n rootMargin = margin;\n rootIndex = listIndex;\n items = blockNodes.filter(e => e.getAttribute('datalist') === String(rootIndex));\n lastRootLi = items[items.length - 1];\n rootList = createList(type, listType && listType.style);\n p.parentNode.insertBefore(rootList, p);\n lastMargin = margin;\n levels[margin][levelType] = rootList;\n }\n isLastRootLi = lastRootLi === p;\n list = levels[margin][levelType];\n if (margin > lastMargin || !list) {\n list = createList(type, listType && listType.style);\n levels[margin][levelType] = list;\n li.appendChild(list);\n }\n li = convertToLi(p);\n list.appendChild(li);\n if (isLastRootLi) {\n rootMargin = lastMargin = -1;\n }\n else {\n lastMargin = margin;\n }\n }\n};\nexport const convertMsLists = (html) => {\n const container = document.createElement('div');\n container.innerHTML = extractListLevels(html);\n const groups = new Set();\n mapListsCandidates(container.children, groups);\n groups.forEach(listsCandidates => toList(listsCandidates));\n return container.innerHTML;\n};\n","import { convertMsLists } from './listConvert';\n/**\n * Removes the invalid HTML. Use it as a first step for cleaning the HTML.\n */\nexport const sanitize = (html) => {\n html = html.replace(/^[\\s\\S]+?\\s*([\\s\\S]*?)\\s*[\\s\\S]+$/, '$1');\n html = html.replace(/<\\/?[ovw]:[^>]*?>/gi, ''); // MS elements, e.g. , , ]*>/gi, ''); // XML namespaces\n html = html.replace(/<(?:link|meta) [^>]+?>/ig, '');\n html = html.replace(/]*?>\\s*<\\/style>/ig, '');\n html = html.replace(/<\\/?st1:.*?>/gi, '');\n html = html.replace(//gmi, '');\n html = html.replace(/v:shapes?=\"[^\"]+\"/ig, '');\n html = html.replace(//ig, '');\n html = html.replace(//ig, '');\n return html;\n};\n/**\n * Removes comments in HTML.\n */\nexport const removeComments = (html) => {\n return html.replace(//g, '');\n};\n/**\n * Removes the specified tag(s).\n */\nexport const removeTag = (html, tagPattern) => {\n return html.replace(new RegExp('<\\\\/?(' + tagPattern + ')(?:\\\\s[^>]*?)?>', 'gi'), '');\n};\n/**\n * Removes the passed attribute.\n */\nexport const removeAttribute = (attr) => {\n if (attr.ownerElement) {\n attr.ownerElement.removeAttribute(attr.name);\n }\n};\n/**\n * Remove the attribute if its value matches /^Mso/ regex.\n */\nexport const sanitizeClassAttr = (attr) => {\n if (/^Mso/.test(attr.value)) {\n removeAttribute(attr);\n }\n};\nconst stylesSplit = /\\s*;\\s*/;\nconst styleValueSplit = /\\s*:\\s*/;\n/**\n * Removes invalid HTML styles.\n */\nexport const sanitizeStyleAttr = (attr) => {\n const styles = attr.value.split(stylesSplit).filter(st => Boolean(st));\n const element = attr.ownerElement;\n const supportedStyles = element.style;\n let result = '', name, value;\n styles.forEach(style => {\n [name, value] = style.split(styleValueSplit);\n if (supportedStyles[name] !== undefined) {\n result += `${name}: ${value}; `;\n }\n });\n result = result.trim();\n if (result) {\n attr.value = result;\n }\n else {\n removeAttribute(attr);\n }\n};\nconst removeNode = (node) => {\n const parentNode = node.parentNode;\n if (parentNode) {\n while (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n parentNode.removeChild(node);\n }\n};\nconst sanitizeNode = (node, attributes) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n for (let i = node.attributes.length - 1; i >= 0; i--) {\n const attr = node.attributes[i];\n if (attributes[attr.name]) {\n attributes[attr.name](attr);\n }\n else if (attributes['*']) {\n attributes['*'](attr);\n }\n }\n if (node.nodeName === 'SPAN' && node.attributes.length === 0) {\n removeNode(node);\n }\n }\n};\n/**\n * Cleans the HTML based on passed settings.\n * Before using it, clean the HTML with the `sanitize` function.\n */\nexport const pasteCleanup = (html, settings) => {\n let result = html;\n if (settings.convertMsLists) {\n result = convertMsLists(result);\n }\n if (settings.stripTags) {\n result = removeTag(result, settings.stripTags);\n }\n if (settings.attributes) {\n const div = document.createElement('div');\n div.innerHTML = result;\n Array.from(div.querySelectorAll('*')).forEach(node => sanitizeNode(node, settings.attributes));\n result = div.innerHTML;\n }\n return result;\n};\nfunction convertHexToBase64(hex) {\n const length = hex.length;\n const data = new Array(length / 2);\n for (let i = 0; i < length; i += 2) {\n data[i] = String.fromCharCode(parseInt(hex.substring(i, i + 2), 16));\n }\n return btoa(data.join(''));\n}\nconst reHtmlImg = /]*?src=(?:'|\")file:\\/[^'\"]+(?:'|\")[^>]*>/gi;\nconst reRtfImgHeader = /{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/;\nconst reRtfImg = new RegExp('(?:(' + reRtfImgHeader.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\nconst reNonHex = /[^\\da-fA-F]/g;\nconst reLocalFile = /file:\\/[^'\"]+\\.(jpg|png|gif)/i;\nconst reExtension = /\\\\(png|jpeg)blip\\\\/;\nconst textRtfType = 'text/rtf';\n/**\n * If the input HTML contains images with 'src' pointing to local file system (it happens when pasting images and text from MS Word),\n * the function will extract the image sources form the RTF and replace the image 'src' with extracted base64 format data in `html` string.\n *\n * @param html - The input HTML (pasted HTML).\n * @param clipboardData - The paste event clipboardData object (event.clipboardData).\n * @returns - The html with the replaced images sources.\n */\nexport const replaceImageSourcesFromRtf = (html, clipboardData) => {\n const htmlImages = html.match(reHtmlImg);\n if (!htmlImages || clipboardData.types.indexOf(textRtfType) === -1) {\n return html;\n }\n const rtf = clipboardData.getData(textRtfType);\n const base64Sources = [];\n const rtfImages = rtf.match(reRtfImg);\n if (!rtf || !rtfImages) {\n return html;\n }\n for (const image of rtfImages) {\n const extension = reExtension.exec(image);\n if (extension) {\n const hex = image.replace(reRtfImgHeader, '').replace(reNonHex, '');\n base64Sources.push(`data:image/${extension[1]};base64,${convertHexToBase64(hex)}`);\n }\n }\n if (htmlImages.length !== base64Sources.length) {\n return html;\n }\n return html.replace(reHtmlImg, img => {\n const src = base64Sources.shift() || '';\n return img.replace(reLocalFile, src);\n });\n};\n","import { Plugin, PluginKey } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\n// https://discuss.prosemirror.net/t/passing-data-between-plugins/1843\nexport const textHighlightKey = new PluginKey('highlight');\nexport function textHighlight(key = textHighlightKey) {\n return new Plugin({\n key,\n state: {\n init() { return null; },\n apply(tr) { return tr.getMeta(this.spec.key); }\n },\n props: {\n decorations(state) {\n const decorations = (this.spec.key.getState(state) || [])\n .map((d) => Decoration.inline(d.from, d.to, d.attrs));\n return DecorationSet.create(state.doc, decorations);\n }\n }\n });\n}\n","import { NodeSelection, Plugin, PluginKey } from \"prosemirror-state\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { changeStylesString } from \"../utils\";\nexport const imageResizeKey = new PluginKey('image-resize');\nconst directions = {\n 'southeast': { x: 1, y: 1 },\n 'east': { x: 1, y: 0 },\n 'south': { x: 0, y: 1 },\n 'north': { x: 0, y: -1 },\n 'west': { x: -1, y: 0 },\n 'southwest': { x: -1, y: 1 },\n 'northwest': { x: -1, y: -1 },\n 'northeast': { x: 1, y: -1 } // top right\n};\nconst handles = Object.keys(directions);\nconst setSize = (domNode, sizeType, value) => {\n domNode.style[sizeType] = value + 'px';\n};\nconst reSize = /[^\\-]width:|[^\\-]height:/;\nconst reAnyValue = /^.+$/;\nclass ResizeState {\n constructor(activeHandle, dragging, rect, nodePosition) {\n this.activeHandle = activeHandle;\n this.dragging = dragging;\n this.rect = rect;\n this.nodePosition = nodePosition;\n }\n apply(tr) {\n let state = this, next = tr.getMeta(imageResizeKey);\n if (next) {\n return new ResizeState(next.activeHandle, next.setDragging, next.rect, next.nodePosition);\n }\n return state;\n }\n}\nconst handleMouseMove = (view, event, options) => {\n const state = imageResizeKey.getState(view.state);\n const { rect, dragging, nodePosition: nodePosition, activeHandle } = state;\n if (!dragging || !rect) {\n return;\n }\n const img = view.nodeDOM(nodePosition);\n const dir = directions[activeHandle];\n const diffX = (event.clientX - dragging.startX) * dir.x;\n const diffY = (event.clientY - dragging.startY) * dir.y;\n let width = dir.x ? diffX + img.width : rect.width;\n let height = dir.y ? diffY + img.height : rect.height;\n if (options.lockRatio && dir.x && dir.y) {\n let ratio = Math.min(width / img.width, height / img.height);\n let lockWidth = img.width * ratio;\n let lockHeight = img.height * ratio;\n dragging.startX = event.clientX - (width - lockWidth) * dir.x;\n dragging.startY = event.clientY - (height - lockHeight) * dir.y;\n width = lockWidth;\n height = lockHeight;\n }\n else {\n dragging.startX = dir.x ? event.clientX : dragging.startX;\n dragging.startY = dir.y ? event.clientY : dragging.startY;\n }\n setSize(img, 'width', width);\n setSize(img, 'height', height);\n rect.top = img.offsetTop;\n rect.left = img.offsetLeft;\n rect.width = img.offsetWidth;\n rect.height = img.offsetHeight;\n const handlesWrapper = img.nextElementSibling;\n handlesWrapper.style.width = rect.width + 'px';\n handlesWrapper.style.height = rect.height + 'px';\n handlesWrapper.style.top = rect.top + 'px';\n handlesWrapper.style.left = rect.left + 'px';\n};\nconst handleMouseUp = (view) => {\n const { rect, dragging, nodePosition } = imageResizeKey.getState(view.state);\n if (dragging && rect) {\n const selection = view.state.selection;\n if (selection instanceof NodeSelection) {\n const currAttrs = selection.node.attrs;\n const width = rect.width;\n const height = rect.height;\n let attrs;\n if (reSize.test(currAttrs.style || '')) {\n const changedWidth = changeStylesString(currAttrs.style, { style: 'width', value: reAnyValue, newValue: width + 'px' });\n const { style } = changeStylesString(changedWidth.style || '', { style: 'height', value: reAnyValue, newValue: height + 'px' });\n attrs = Object.assign({}, currAttrs, { style });\n }\n else {\n attrs = Object.assign({}, currAttrs, { width, height });\n }\n const newImage = selection.node.type.createAndFill(attrs);\n if (newImage) {\n const tr = view.state.tr;\n tr.replaceWith(nodePosition, nodePosition + 1, newImage);\n tr.setSelection(NodeSelection.create(tr.doc, nodePosition));\n tr.setMeta('commandName', 'image-resize');\n tr.setMeta('args', attrs);\n tr.setMeta(imageResizeKey, {\n setDragging: null,\n activeHandle: null,\n rect,\n nodePosition\n });\n view.dispatch(tr);\n }\n }\n }\n};\nconst handleMouseDown = (view, event, options) => {\n const target = event.target;\n const activeHandle = target.getAttribute('data-direction');\n if (!activeHandle) {\n return false;\n }\n const resizeState = imageResizeKey.getState(view.state);\n event.preventDefault();\n const transaction = view.state.tr;\n transaction.setMeta(imageResizeKey, {\n setDragging: { startX: event.clientX, startY: event.clientY },\n activeHandle,\n rect: resizeState.rect,\n nodePosition: resizeState.nodePosition\n });\n transaction.setMeta('addToHistory', false);\n view.dispatch(transaction);\n function move(e) {\n handleMouseMove(view, e, options);\n }\n function finish(e) {\n e.view.removeEventListener('mouseup', finish);\n e.view.removeEventListener('mousemove', move);\n handleMouseUp(view);\n }\n event.view.addEventListener('mouseup', finish);\n event.view.addEventListener('mousemove', move);\n return true;\n};\nexport const imageResizing = (options = { node: 'image', lockRatio: true }) => {\n return new Plugin({\n key: imageResizeKey,\n view: (viewObj) => ({\n resize() {\n if (imageResizeKey.getState(viewObj.state).rect) {\n viewObj.dispatch(viewObj.state.tr.setMeta('resize', true));\n }\n },\n get window() {\n return viewObj.dom.ownerDocument && viewObj.dom.ownerDocument.defaultView;\n },\n attachResize() {\n const win = this.window;\n if (win) {\n win.removeEventListener('resize', this.resize);\n win.addEventListener('resize', this.resize);\n }\n },\n removeResize() {\n const win = this.window;\n if (win) {\n win.removeEventListener('resize', this.resize);\n }\n },\n update(view, prevState) {\n const state = view.state;\n const selection = state.selection;\n const nodeType = state.schema.nodes[options.node];\n const pluginState = imageResizeKey.getState(state);\n const prevRect = pluginState.rect;\n if (selection instanceof NodeSelection && nodeType === selection.node.type) {\n const img = view.nodeDOM(selection.from);\n const rect = {\n top: img.offsetTop,\n left: img.offsetLeft,\n width: img.offsetWidth,\n height: img.offsetHeight\n };\n if (!prevState.selection.eq(selection) ||\n (prevRect && (prevRect.width !== rect.width || prevRect.height !== rect.height ||\n prevRect.top !== rect.top || prevRect.left !== rect.left))) {\n const tr = state.tr;\n tr.setMeta(imageResizeKey, { rect, nodePosition: selection.from });\n view.dispatch(tr);\n this.attachResize();\n }\n }\n else if (prevRect) {\n pluginState.rect = null;\n pluginState.nodePosition = -1;\n }\n },\n destroy() {\n this.removeResize();\n }\n }),\n state: {\n init() {\n return new ResizeState('', null, null, -1);\n },\n apply(tr, prev) {\n return prev.apply(tr);\n }\n },\n props: {\n handleDOMEvents: {\n mousedown(view, event) {\n return handleMouseDown(view, event, options);\n }\n },\n decorations(state) {\n const selection = state.selection;\n const nodeType = state.schema.nodes[options.node];\n const rect = imageResizeKey.getState(state).rect;\n if (rect && selection instanceof NodeSelection && nodeType === selection.node.type) {\n const wrapper = document.createElement('div');\n wrapper.className = 'k-editor-resize-handles-wrapper';\n wrapper.style.width = rect.width + 'px';\n wrapper.style.height = rect.height + 'px';\n wrapper.style.top = rect.top + 'px';\n wrapper.style.left = rect.left + 'px';\n for (let i = 0; i < handles.length; i++) {\n let dom = document.createElement('div');\n dom.className = 'k-editor-resize-handle ' + handles[i];\n dom.setAttribute('data-direction', handles[i]);\n wrapper.appendChild(dom);\n }\n return DecorationSet.create(state.doc, [Decoration.widget(state.selection.from + 1, wrapper)]);\n }\n return DecorationSet.empty;\n }\n }\n });\n};\n","import { Plugin } from 'prosemirror-state';\nimport { dropPoint } from 'prosemirror-transform';\n\n// :: (options: ?Object) → Plugin\n// Create a plugin that, when added to a ProseMirror instance,\n// causes a decoration to show up at the drop position when something\n// is dragged over the editor.\n//\n// options::- These options are supported:\n//\n// color:: ?string\n// The color of the cursor. Defaults to `black`.\n//\n// width:: ?number\n// The precise width of the cursor in pixels. Defaults to 1.\n//\n// class:: ?string\n// A CSS class name to add to the cursor element.\nfunction dropCursor(options) {\n if ( options === void 0 ) options = {};\n\n return new Plugin({\n view: function view(editorView) { return new DropCursorView(editorView, options) }\n })\n}\n\nvar DropCursorView = function DropCursorView(editorView, options) {\n var this$1 = this;\n\n this.editorView = editorView;\n this.width = options.width || 1;\n this.color = options.color || \"black\";\n this.class = options.class;\n this.cursorPos = null;\n this.element = null;\n this.timeout = null;\n\n this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(function (name) {\n var handler = function (e) { return this$1[name](e); };\n editorView.dom.addEventListener(name, handler);\n return {name: name, handler: handler}\n });\n};\n\nDropCursorView.prototype.destroy = function destroy () {\n var this$1 = this;\n\n this.handlers.forEach(function (ref) {\n var name = ref.name;\n var handler = ref.handler;\n\n return this$1.editorView.dom.removeEventListener(name, handler);\n });\n};\n\nDropCursorView.prototype.update = function update (editorView, prevState) {\n if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n if (this.cursorPos > editorView.state.doc.content.size) { this.setCursor(null); }\n else { this.updateOverlay(); }\n }\n};\n\nDropCursorView.prototype.setCursor = function setCursor (pos) {\n if (pos == this.cursorPos) { return }\n this.cursorPos = pos;\n if (pos == null) {\n this.element.parentNode.removeChild(this.element);\n this.element = null;\n } else {\n this.updateOverlay();\n }\n};\n\nDropCursorView.prototype.updateOverlay = function updateOverlay () {\n var $pos = this.editorView.state.doc.resolve(this.cursorPos), rect;\n if (!$pos.parent.inlineContent) {\n var before = $pos.nodeBefore, after = $pos.nodeAfter;\n if (before || after) {\n var nodeRect = this.editorView.nodeDOM(this.cursorPos - (before ?before.nodeSize : 0)).getBoundingClientRect();\n var top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after)\n { top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2; }\n rect = {left: nodeRect.left, right: nodeRect.right, top: top - this.width / 2, bottom: top + this.width / 2};\n }\n }\n if (!rect) {\n var coords = this.editorView.coordsAtPos(this.cursorPos);\n rect = {left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom};\n }\n\n var parent = this.editorView.dom.offsetParent;\n if (!this.element) {\n this.element = parent.appendChild(document.createElement(\"div\"));\n if (this.class) { this.element.className = this.class; }\n this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; background-color: \" + this.color;\n }\n var parentLeft, parentTop;\n if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n parentLeft = -pageXOffset;\n parentTop = -pageYOffset;\n } else {\n var rect$1 = parent.getBoundingClientRect();\n parentLeft = rect$1.left - parent.scrollLeft;\n parentTop = rect$1.top - parent.scrollTop;\n }\n this.element.style.left = (rect.left - parentLeft) + \"px\";\n this.element.style.top = (rect.top - parentTop) + \"px\";\n this.element.style.width = (rect.right - rect.left) + \"px\";\n this.element.style.height = (rect.bottom - rect.top) + \"px\";\n};\n\nDropCursorView.prototype.scheduleRemoval = function scheduleRemoval (timeout) {\n var this$1 = this;\n\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () { return this$1.setCursor(null); }, timeout);\n};\n\nDropCursorView.prototype.dragover = function dragover (event) {\n if (!this.editorView.editable) { return }\n var pos = this.editorView.posAtCoords({left: event.clientX, top: event.clientY});\n if (pos) {\n var target = pos.pos;\n if (this.editorView.dragging && this.editorView.dragging.slice) {\n target = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n if (target == null) { return this.setCursor(null) }\n }\n this.setCursor(target);\n this.scheduleRemoval(5000);\n }\n};\n\nDropCursorView.prototype.dragend = function dragend () {\n this.scheduleRemoval(20);\n};\n\nDropCursorView.prototype.drop = function drop () {\n this.scheduleRemoval(20);\n};\n\nDropCursorView.prototype.dragleave = function dragleave (event) {\n if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget))\n { this.setCursor(null); }\n};\n\nexport { dropCursor };\n","import { keydownHandler } from 'prosemirror-keymap';\nimport { NodeSelection, Selection, Plugin, TextSelection } from 'prosemirror-state';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { Slice } from 'prosemirror-model';\n\n// ::- Gap cursor selections are represented using this class. Its\n// `$anchor` and `$head` properties both point at the cursor position.\nvar GapCursor = /*@__PURE__*/(function (Selection) {\n function GapCursor($pos) {\n Selection.call(this, $pos, $pos);\n }\n\n if ( Selection ) GapCursor.__proto__ = Selection;\n GapCursor.prototype = Object.create( Selection && Selection.prototype );\n GapCursor.prototype.constructor = GapCursor;\n\n GapCursor.prototype.map = function map (doc, mapping) {\n var $pos = doc.resolve(mapping.map(this.head));\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos)\n };\n\n GapCursor.prototype.content = function content () { return Slice.empty };\n\n GapCursor.prototype.eq = function eq (other) {\n return other instanceof GapCursor && other.head == this.head\n };\n\n GapCursor.prototype.toJSON = function toJSON () {\n return {type: \"gapcursor\", pos: this.head}\n };\n\n GapCursor.fromJSON = function fromJSON (doc, json) {\n if (typeof json.pos != \"number\") { throw new RangeError(\"Invalid input for GapCursor.fromJSON\") }\n return new GapCursor(doc.resolve(json.pos))\n };\n\n GapCursor.prototype.getBookmark = function getBookmark () { return new GapBookmark(this.anchor) };\n\n GapCursor.valid = function valid ($pos) {\n var parent = $pos.parent;\n if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos)) { return false }\n var override = parent.type.spec.allowGapCursor;\n if (override != null) { return override }\n var deflt = parent.contentMatchAt($pos.index()).defaultType;\n return deflt && deflt.isTextblock\n };\n\n GapCursor.findFrom = function findFrom ($pos, dir, mustMove) {\n search: for (;;) {\n if (!mustMove && GapCursor.valid($pos)) { return $pos }\n var pos = $pos.pos, next = null;\n // Scan up from this position\n for (var d = $pos.depth;; d--) {\n var parent = $pos.node(d);\n if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n break\n } else if (d == 0) {\n return null\n }\n pos += dir;\n var $cur = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur)) { return $cur }\n }\n\n // And then down into the next node\n for (;;) {\n var inside = dir > 0 ? next.firstChild : next.lastChild;\n if (!inside) {\n if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {\n $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n mustMove = false;\n continue search\n }\n break\n }\n next = inside;\n pos += dir;\n var $cur$1 = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur$1)) { return $cur$1 }\n }\n\n return null\n }\n };\n\n return GapCursor;\n}(Selection));\n\nGapCursor.prototype.visible = false;\n\nSelection.jsonID(\"gapcursor\", GapCursor);\n\nvar GapBookmark = function GapBookmark(pos) {\n this.pos = pos;\n};\nGapBookmark.prototype.map = function map (mapping) {\n return new GapBookmark(mapping.map(this.pos))\n};\nGapBookmark.prototype.resolve = function resolve (doc) {\n var $pos = doc.resolve(this.pos);\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos)\n};\n\nfunction closedBefore($pos) {\n for (var d = $pos.depth; d >= 0; d--) {\n var index = $pos.index(d);\n // At the start of this parent, look at next one\n if (index == 0) { continue }\n // See if the node before (or its first ancestor) is closed\n for (var before = $pos.node(d).child(index - 1);; before = before.lastChild) {\n if ((before.childCount == 0 && !before.inlineContent) || before.isAtom || before.type.spec.isolating) { return true }\n if (before.inlineContent) { return false }\n }\n }\n // Hit start of document\n return true\n}\n\nfunction closedAfter($pos) {\n for (var d = $pos.depth; d >= 0; d--) {\n var index = $pos.indexAfter(d), parent = $pos.node(d);\n if (index == parent.childCount) { continue }\n for (var after = parent.child(index);; after = after.firstChild) {\n if ((after.childCount == 0 && !after.inlineContent) || after.isAtom || after.type.spec.isolating) { return true }\n if (after.inlineContent) { return false }\n }\n }\n return true\n}\n\n// :: () → Plugin\n// Create a gap cursor plugin. When enabled, this will capture clicks\n// near and arrow-key-motion past places that don't have a normally\n// selectable position nearby, and create a gap cursor selection for\n// them. The cursor is drawn as an element with class\n// `ProseMirror-gapcursor`. You can either include\n// `style/gapcursor.css` from the package's directory or add your own\n// styles to make it visible.\nvar gapCursor = function() {\n return new Plugin({\n props: {\n decorations: drawGapCursor,\n\n createSelectionBetween: function createSelectionBetween(_view, $anchor, $head) {\n if ($anchor.pos == $head.pos && GapCursor.valid($head)) { return new GapCursor($head) }\n },\n\n handleClick: handleClick,\n handleKeyDown: handleKeyDown\n }\n })\n};\n\nvar handleKeyDown = keydownHandler({\n \"ArrowLeft\": arrow(\"horiz\", -1),\n \"ArrowRight\": arrow(\"horiz\", 1),\n \"ArrowUp\": arrow(\"vert\", -1),\n \"ArrowDown\": arrow(\"vert\", 1)\n});\n\nfunction arrow(axis, dir) {\n var dirStr = axis == \"vert\" ? (dir > 0 ? \"down\" : \"up\") : (dir > 0 ? \"right\" : \"left\");\n return function(state, dispatch, view) {\n var sel = state.selection;\n var $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty;\n if (sel instanceof TextSelection) {\n if (!view.endOfTextblock(dirStr) || $start.depth == 0) { return false }\n mustMove = false;\n $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n }\n var $found = GapCursor.findFrom($start, dir, mustMove);\n if (!$found) { return false }\n if (dispatch) { dispatch(state.tr.setSelection(new GapCursor($found))); }\n return true\n }\n}\n\nfunction handleClick(view, pos, event) {\n if (!view.editable) { return false }\n var $pos = view.state.doc.resolve(pos);\n if (!GapCursor.valid($pos)) { return false }\n var ref = view.posAtCoords({left: event.clientX, top: event.clientY});\n var inside = ref.inside;\n if (inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(inside))) { return false }\n view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n return true\n}\n\nfunction drawGapCursor(state) {\n if (!(state.selection instanceof GapCursor)) { return null }\n var node = document.createElement(\"div\");\n node.className = \"ProseMirror-gapcursor\";\n return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, {key: \"gapcursor\"})])\n}\n\nexport { GapCursor, gapCursor };\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __param, __metadata } from 'tslib';\nimport { Inject, Optional, Input, ViewChild, ElementRef, Component, Injectable, EventEmitter, isDevMode, Output, HostBinding, ContentChild, ViewContainerRef, forwardRef, ChangeDetectorRef, NgZone, TemplateRef, Host, Directive, NgModule } from '@angular/core';\nimport { FormControl, Validators, FormGroup, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Subject, BehaviorSubject, zip, fromEvent, merge, interval } from 'rxjs';\nimport { take, filter, auditTime, map, concatMap, takeUntil } from 'rxjs/operators';\nimport { ToolBarComponent, ToolBarToolComponent, ToolBarButtonComponent, ToolBarModule } from '@progress/kendo-angular-toolbar';\nimport { DialogContentBase, DialogRef, DialogService, DialogModule } from '@progress/kendo-angular-dialog';\nimport { isDocumentAvailable, guid, KendoInput, Keys } from '@progress/kendo-angular-common';\nimport { nodes, Schema, marks, Selection, SelectionRange, TextSelection, Fragment, Slice, NodeSelection, insertNode, expandToWordWrap, toggleInlineFormat, bold, cleanFormatting, applyLink, applyInlineStyle, insertText, italic, strikethrough, subscript, superscript, underline, removeLink, link, selectAll, isAligned, alignCenterRules, alignBlocks, alignRemoveRules, alignJustifyRules, alignLeftRules, alignRightRules, formatBlockElements, getHtml, indent, insertImage, toggleOrderedList, toggleUnorderedList, outdent, redo, setHtml, undo, hasMark, activeNode, canIndentAsListItem, canBeIndented, indentRules, hasNode, canOutdentAsListItem, outdentRules, getActiveMarks, expandSelection, addColumnBefore, addColumnAfter, addRowBefore, addRowAfter, deleteRow, deleteColumn, mergeCells, splitCell, deleteTable, getNodeFromSelection, getMark, getSelectionText, parseContent, Plugin, PluginKey, history, keymap, buildListKeymap, buildKeymap, baseKeymap, gapCursor, imageResizing, placeholder, EditorState, EditorView, hasSameMarkup, pasteCleanup, removeComments, sanitize, removeAttribute, sanitizeStyleAttr, sanitizeClassAttr } from '@progress/kendo-editor-common';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-dialog';\nimport * as ɵngcc2 from '@progress/kendo-angular-buttons';\nimport * as ɵngcc3 from '@angular/forms';\nimport * as ɵngcc4 from '@angular/common';\nimport * as ɵngcc5 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc6 from '@progress/kendo-angular-toolbar';\nimport * as ɵngcc7 from '@progress/kendo-angular-dropdowns';\nimport * as ɵngcc8 from '@progress/kendo-angular-inputs';\nimport * as ɵngcc9 from '@progress/kendo-angular-popup';\n\nconst _c0 = [\"textarea\"];\nconst _c1 = [\"srcInput\"];\nconst _c2 = [\"hrefInput\"];\nfunction FileLinkDialogComponent_ng_container_24_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"div\", 5);\n ɵngcc0.ɵɵelementStart(2, \"div\", 7);\n ɵngcc0.ɵɵelement(3, \"input\", 17);\n ɵngcc0.ɵɵelementStart(4, \"label\", 18);\n ɵngcc0.ɵɵtext(5);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵtextInterpolate(ctx_r3.textForWithPrefix(\"OpenInNewWindow\"));\n} }\nconst _c3 = [\"dialogsContainer\"];\nconst _c4 = [\"content\"];\nconst _c5 = [\"defaultToolbar\"];\nfunction EditorComponent_kendo_toolbar_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-toolbar\", 4, 5)(2, \"kendo-toolbar-buttongroup\");\n ɵngcc0.ɵɵelement(3, \"kendo-toolbar-button\", 6)(4, \"kendo-toolbar-button\", 7)(5, \"kendo-toolbar-button\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(6, \"kendo-toolbar-dropdownlist\", 9);\n ɵngcc0.ɵɵelementStart(7, \"kendo-toolbar-buttongroup\");\n ɵngcc0.ɵɵelement(8, \"kendo-toolbar-button\", 10)(9, \"kendo-toolbar-button\", 11)(10, \"kendo-toolbar-button\", 12)(11, \"kendo-toolbar-button\", 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"kendo-toolbar-buttongroup\");\n ɵngcc0.ɵɵelement(13, \"kendo-toolbar-button\", 14)(14, \"kendo-toolbar-button\", 15)(15, \"kendo-toolbar-button\", 16)(16, \"kendo-toolbar-button\", 17);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(17, \"kendo-toolbar-buttongroup\");\n ɵngcc0.ɵɵelement(18, \"kendo-toolbar-button\", 18)(19, \"kendo-toolbar-button\", 19);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(20, \"kendo-toolbar-button\", 20);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"overflow\", true)(\"tabindex\", ctx_r0.readonly ? -1 : 0);\n} }\nfunction EditorComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 21, 22);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r1.direction);\n} }\nfunction EditorComponent_div_4_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 21)(1, \"iframe\", 23, 22);\n ɵngcc0.ɵɵlistener(\"load\", function EditorComponent_div_4_Template_iframe_load_1_listener() { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.iframeOnLoad(); });\n ɵngcc0.ɵɵelementEnd()();\n} }\nconst _c110 = [[[\"kendo-toolbar\"]]];\nconst _c111 = [\"kendo-toolbar\"];\nconst _c112 = [\"element\"];\nfunction FormatDropDownListComponent_ng_template_2_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 12);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 13);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 14);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 15);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 16);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 17);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 18);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 18);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nfunction FormatDropDownListComponent_ng_template_2_span_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(dataItem_r2.text);\n} }\nfunction FormatDropDownListComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 3);\n ɵngcc0.ɵɵtemplate(1, FormatDropDownListComponent_ng_template_2_span_1_Template, 2, 1, \"span\", 4);\n ɵngcc0.ɵɵtemplate(2, FormatDropDownListComponent_ng_template_2_span_2_Template, 2, 1, \"span\", 5);\n ɵngcc0.ɵɵtemplate(3, FormatDropDownListComponent_ng_template_2_span_3_Template, 2, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(4, FormatDropDownListComponent_ng_template_2_span_4_Template, 2, 1, \"span\", 7);\n ɵngcc0.ɵɵtemplate(5, FormatDropDownListComponent_ng_template_2_span_5_Template, 2, 1, \"span\", 8);\n ɵngcc0.ɵɵtemplate(6, FormatDropDownListComponent_ng_template_2_span_6_Template, 2, 1, \"span\", 9);\n ɵngcc0.ɵɵtemplate(7, FormatDropDownListComponent_ng_template_2_span_7_Template, 2, 1, \"span\", 10);\n ɵngcc0.ɵɵtemplate(8, FormatDropDownListComponent_ng_template_2_span_8_Template, 2, 1, \"span\", 10);\n ɵngcc0.ɵɵtemplate(9, FormatDropDownListComponent_ng_template_2_span_9_Template, 2, 1, \"span\", 11);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const dataItem_r2 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngSwitch\", dataItem_r2.tag);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h1\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h2\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h3\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h4\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h5\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"h6\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"p\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"blockquote\");\n} }\nconst _c113 = [\"formatDropDownList\"];\nconst _c114 = [\"colorpicker\"];\nconst _c115 = function (a0) { return { \"font-family\": a0 }; };\nfunction FontFamilyDropDownListComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r2 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngStyle\", ɵngcc0.ɵɵpureFunction1(2, _c115, dataItem_r2.fontName));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", dataItem_r2.text, \" \");\n} }\nconst _c116 = [\"fontFamilyDropDownList\"];\nconst _c117 = [\"toolbarTemplate\"];\nconst _c118 = [\"popupTemplate\"];\nconst _c119 = [\"formatButton\"];\nconst _c120 = [\"kendoEditorFormat\", \"\"];\nfunction EditorFormatComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-editor-format-dropdownlist\", 2, 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function EditorFormatComponent_ng_template_0_Template_kendo_editor_format_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.value = $event; })(\"valueChange\", function EditorFormatComponent_ng_template_0_Template_kendo_editor_format_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.onValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx_r1.defaultItem)(\"data\", ctx_r1.data)(\"value\", ctx_r1.value)(\"itemDisabled\", ctx_r1.itemDisabled)(\"title\", ctx_r1.title)(\"disabled\", ctx_r1.disabled)(\"tabindex\", ctx_r1.tabindex);\n} }\nfunction EditorFormatComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function EditorFormatComponent_ng_template_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.openDialog(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r3.tabindex)(\"icon\", \"apply-format\")(\"disabled\", ctx_r3.disabled)(\"tabindex\", ctx_r3.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.title, \" \");\n} }\nconst _c121 = [\"fontSizeDropDownList\"];\nconst _c122 = [\"fontSizeButton\"];\nconst _c123 = [\"kendoEditorFontSize\", \"\"];\nfunction EditorFontSizeComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-editor-fontsize-dropdownlist\", 2, 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function EditorFontSizeComponent_ng_template_0_Template_kendo_editor_fontsize_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.value = $event; })(\"valueChange\", function EditorFontSizeComponent_ng_template_0_Template_kendo_editor_fontsize_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.onValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx_r1.defaultItem)(\"data\", ctx_r1.data)(\"value\", ctx_r1.value)(\"itemDisabled\", ctx_r1.itemDisabled)(\"title\", ctx_r1.title)(\"disabled\", ctx_r1.disabled)(\"tabindex\", ctx_r1.tabindex);\n} }\nfunction EditorFontSizeComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function EditorFontSizeComponent_ng_template_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.openDialog(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", \"font-size\")(\"disabled\", ctx_r3.disabled)(\"tabindex\", ctx_r3.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.title, \" \");\n} }\nconst _c124 = [\"fontFamilyButton\"];\nconst _c125 = [\"kendoEditorFontFamily\", \"\"];\nfunction EditorFontFamilyComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-editor-fontfamily-dropdownlist\", 2, 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function EditorFontFamilyComponent_ng_template_0_Template_kendo_editor_fontfamily_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.value = $event; })(\"valueChange\", function EditorFontFamilyComponent_ng_template_0_Template_kendo_editor_fontfamily_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.onValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx_r1.defaultItem)(\"data\", ctx_r1.data)(\"value\", ctx_r1.value)(\"itemDisabled\", ctx_r1.itemDisabled)(\"title\", ctx_r1.title)(\"disabled\", ctx_r1.disabled)(\"tabindex\", ctx_r1.tabindex);\n} }\nfunction EditorFontFamilyComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function EditorFontFamilyComponent_ng_template_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.openDialog(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", \"font-family\")(\"disabled\", ctx_r3.disabled)(\"tabindex\", ctx_r3.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.title, \" \");\n} }\nconst _c126 = [\"colorPickerButton\"];\nfunction EditorColorPickerComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-colorpicker\", 2, 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function EditorColorPickerComponent_ng_template_0_Template_kendo_colorpicker_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.handleValueChange($event); })(\"activeColorClick\", function EditorColorPickerComponent_ng_template_0_Template_kendo_colorpicker_activeColorClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.handleActiveColorClick($event); })(\"open\", function EditorColorPickerComponent_ng_template_0_Template_kendo_colorpicker_open_0_listener() { ɵngcc0.ɵɵrestoreView(_r6); const _r4 = ɵngcc0.ɵɵreference(1); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.onOpen(_r4); })(\"close\", function EditorColorPickerComponent_ng_template_0_Template_kendo_colorpicker_close_0_listener() { ɵngcc0.ɵɵrestoreView(_r6); const _r4 = ɵngcc0.ɵɵreference(1); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.onClose(_r4); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"view\", ctx_r1.view)(\"format\", \"hex\")(\"icon\", ctx_r1.icon)(\"value\", ctx_r1.value)(\"paletteSettings\", ctx_r1.paletteSettings)(\"disabled\", ctx_r1.disabled)(\"tabindex\", ctx_r1.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r1.title);\n} }\nfunction EditorColorPickerComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function EditorColorPickerComponent_ng_template_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.openDialog(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", ctx_r3.icon)(\"disabled\", ctx_r3.disabled)(\"tabindex\", ctx_r3.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.title, \" \");\n} }\nconst _c127 = [\"overflowElement\"];\nconst _c128 = [\"popupGridTemplate\"];\nfunction EditorInsertTableButtonComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 3, 4);\n ɵngcc0.ɵɵlistener(\"click\", function EditorInsertTableButtonComponent_ng_template_0_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.toggle(); })(\"blur\", function EditorInsertTableButtonComponent_ng_template_0_Template_button_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.onBlur(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", \"table-insert\")(\"disabled\", ctx_r1.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r1.title)(\"tabindex\", ctx_r1.tabIndex);\n} }\nfunction EditorInsertTableButtonComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 5, 6);\n ɵngcc0.ɵɵlistener(\"click\", function EditorInsertTableButtonComponent_ng_template_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.openDialog(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", \"table-insert\")(\"disabled\", ctx_r3.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title)(\"tabindex\", ctx_r3.tabIndex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.title, \" \");\n} }\nfunction EditorInsertTableButtonComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n const _r14 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-popup-table-grid\", 7);\n ɵngcc0.ɵɵlistener(\"cellClick\", function EditorInsertTableButtonComponent_ng_template_4_Template_kendo_popup_table_grid_cellClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.onCellClick($event); })(\"tableWizardClick\", function EditorInsertTableButtonComponent_ng_template_4_Template_kendo_popup_table_grid_tableWizardClick_0_listener() { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r15 = ɵngcc0.ɵɵnextContext(); return ctx_r15.onTableWizardClick(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction PopupTableGridComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n const _r3 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 3);\n ɵngcc0.ɵɵlistener(\"mouseenter\", function PopupTableGridComponent_span_1_Template_span_mouseenter_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r3); const i_r1 = restoredCtx.$implicit; const ctx_r2 = ɵngcc0.ɵɵnextContext(); return ctx_r2.setState(i_r1); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const i_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-state-selected\", ctx_r0.selected(i_r1))(\"k-state-disabled\", !ctx_r0.selected(i_r1));\n} }\nexport { Schema, EditorState, Plugin, PluginKey, Transaction, EditorView, Decoration, DecorationSet, NodeType, Node, MarkType, Mark, InputRule, inputRules, wrappingInputRule, textblockTypeInputRule, keymap, baseKeymap, history, dropCursor, gapCursor, tableNodes, getSelectionText } from '@progress/kendo-editor-common';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { LocalizationService, L10N_PREFIX, RTL, MessageService, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { CommonModule } from '@angular/common';\nimport { DropDownListComponent, DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { ColorPickerComponent, ColorPickerModule, NumericTextBoxModule, TextBoxModule } from '@progress/kendo-angular-inputs';\nimport { PopupService } from '@progress/kendo-angular-popup';\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-editor',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1638198421,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nconst hasAttrs = (attrs, exclude) => {\n for (let attr in attrs) {\n if (attr && attrs[attr] !== null && attr !== exclude) {\n return true;\n }\n }\n return false;\n};\n/**\n * @hidden\n */\nconst getAttrs = (attrs, exclude) => {\n const result = {};\n for (let attr in attrs) {\n if (attr && attrs[attr] !== null && attr !== exclude) {\n result[attr] = attrs[attr];\n }\n }\n return result;\n};\n/**\n * @hidden\n */\nconst getAttributes = (dom) => {\n const result = {};\n let attributes = dom.attributes, attr;\n for (let i = 0; i < attributes.length; i++) {\n attr = attributes[i];\n result[attr.name] = attr.value;\n }\n return result;\n};\n/**\n * @hidden\n */\nconst serializeDOMAttrs = (el) => Array.from(el.attributes)\n .reduce((acc, curr) => Object.assign({}, acc, { [curr.name]: curr.value }), {});\n/**\n * @hidden\n */\nconst commonAttributes = () => {\n return Object.assign({}, createDefaultAttributes(['class', 'id', 'style']));\n};\n/**\n * @hidden\n */\nconst createDefaultAttributes = (attrs = []) => {\n return Object.assign({}, attrs.reduce((acc, curr) => (Object.assign({}, acc, { [curr]: { default: null } })), {}));\n};\n/**\n * @hidden\n */\nconst hole = 0;\n/**\n * @hidden\n */\nconst isSchemaNode = (schemaNodeName) => (node) => node.type.name === schemaNodeName;\n/**\n * @hidden\n */\nconst isTable = isSchemaNode('table');\n/**\n * @hidden\n */\nconst isTableBody = isSchemaNode('table_body');\n/**\n * @hidden\n */\nconst isTableHead = isSchemaNode('table_head');\n/**\n * @hidden\n */\nconst isTableFoot = isSchemaNode('table_foot');\n/**\n * @hidden\n */\nconst isTableRow = isSchemaNode('table_row');\n/**\n * @hidden\n */\nconst isTableCell = isSchemaNode('table_cell');\n/**\n * @hidden\n */\nconst isTableHeaderCell = isSchemaNode('table_header');\n\nconst createSemanticNode = (tagName) => ({\n // Uncaught SyntaxError: Mixing inline and block content (in content expression '(block | inline)*')\n // content: '(block | inline)*',\n content: 'block*',\n group: 'block',\n attrs: Object.assign({}, commonAttributes()),\n parseDOM: [{\n tag: tagName,\n getAttrs: getAttributes\n }],\n toDOM: node => hasAttrs(node.attrs) ? [tagName, getAttrs(node.attrs), hole] : [tagName, hole]\n});\n/**\n * @hidden\n */\nconst semanticTagNames = ['article', 'main', 'nav', 'header', 'footer', 'aside', 'section'];\nconst ɵ1 = (acc, curr) => Object.assign(acc, { [curr]: createSemanticNode(curr) });\n/**\n * @hidden\n */\nconst semanticNodes = semanticTagNames.reduce(ɵ1, {});\n\n/**\n * @hidden\n */\nfunction outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseFloat(style.marginLeft) || 0 + parseFloat(style.marginRight) || 0;\n return width;\n}\n/**\n * @hidden\n */\nconst removeEntries = (obj, predicate) => Object.keys(obj)\n .filter(key => predicate(key))\n .reduce((acc, curr) => Object.assign(acc, { [curr]: obj[curr] }), {});\n/**\n * @hidden\n */\nconst removeEmptyEntries = (obj) => {\n const predicate = key => obj[key] !== null && obj[key] !== undefined && obj[key] !== '';\n return removeEntries(obj, predicate);\n};\n/**\n * @hidden\n */\nconst isNullOrUndefined = (value) => value === undefined || value === null;\n/**\n * @hidden\n */\nconst isPresent = (value) => !isNullOrUndefined(value);\n/**\n * @hidden\n */\nconst detectIE = () => {\n if (!isDocumentAvailable()) {\n return false;\n }\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf('MSIE ');\n const trident = ua.indexOf('Trident/');\n return msie > 0 || trident > 0;\n};\n/**\n * @hidden\n */\nconst safeString = (value) => (isNullOrUndefined(value) ? '' : value.toString());\n/**\n * @hidden\n */\nconst first = (arr) => arr[0];\n/**\n * @hidden\n */\nconst last = (arr) => arr[arr.length - 1];\n/**\n * @hidden\n */\nconst split = (splitter) => (value) => value.split(splitter);\n/**\n * @hidden\n */\nconst trim = (value) => value.trim();\n/**\n * @hidden\n */\nconst filter$1 = (predicate) => (arr) => arr.filter(predicate);\n/**\n * @hidden\n */\nconst getUniqueStyleValues = (style, cssStyle) => {\n if (style.hasNodesWithoutMarks) {\n return '';\n }\n const uniqueMarkValues = style.marks\n .filter(m => m.type.name === 'style')\n .map(m => m.attrs.style)\n .map(safeString)\n .map(split(';'))\n .map(filter$1((m) => m.includes(cssStyle)))\n // guards against empty array\n .map((cssStyleValues) => (cssStyleValues.length !== 0 ? cssStyleValues : [`${cssStyle}: INVALID`]))\n .map(first)\n .map(split(':'))\n .map(last)\n .map(trim)\n .reduce((acc, curr) => (acc.indexOf(curr) > -1 ? acc : [...acc, curr]), []);\n if (uniqueMarkValues.indexOf('INVALID') > -1 || uniqueMarkValues.length !== 1) {\n return '';\n }\n return uniqueMarkValues[0];\n};\n/**\n * @hidden\n */\nconst conditionallyExecute = (fn) => (condition) => (param) => (condition ? fn(param) : param);\n/**\n * @hidden\n */\nconst pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);\n\nconst setCellAttrs = nodeAttributes => {\n let attrs = Object.assign({}, nodeAttributes);\n if (nodeAttributes.colspan !== 1) {\n attrs.colspan = nodeAttributes.colspan;\n }\n else {\n attrs.colspan = null;\n }\n if (nodeAttributes.rowspan !== 1) {\n attrs.rowspan = nodeAttributes.rowspan;\n }\n else {\n attrs.rowspan = null;\n }\n return removeEmptyEntries(attrs);\n};\nconst ɵ1$1 = node => ['table', removeEmptyEntries(node.attrs), 0], ɵ2 = node => ['tr', removeEmptyEntries(node.attrs), 0], ɵ3 = node => ['td', setCellAttrs(node.attrs), 0], ɵ4 = node => ['th', setCellAttrs(node.attrs), 0], ɵ5 = node => ['tbody', removeEmptyEntries(node.attrs), 0], ɵ6 = node => ['tfoot', removeEmptyEntries(node.attrs), 0], ɵ7 = node => ['thead', removeEmptyEntries(node.attrs), 0], ɵ8 = node => ['col', removeEmptyEntries(node.attrs)], ɵ9 = node => ['colgroup', removeEmptyEntries(node.attrs), 0];\n/**\n * @hidden\n */\nconst tableNodes = {\n // all table node names must start with table - this is needed for the commands to work properly\n table: {\n attrs: Object.assign({}, commonAttributes(), createDefaultAttributes(['cellspacing', 'cellpadding'])),\n content: '(table_body | table_head | table_foot | table_colgroup)+',\n tableRole: 'table',\n isolating: true,\n group: 'block',\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'table'\n }\n ],\n toDOM: ɵ1$1\n },\n table_row: {\n content: '(table_cell | table_header)*',\n attrs: Object.assign({}, commonAttributes()),\n tableRole: 'row',\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'tr'\n }\n ],\n toDOM: ɵ2\n },\n table_cell: {\n content: 'block+',\n attrs: Object.assign({}, commonAttributes(), createDefaultAttributes(['headers']), { \n // this is needed for the commands\n colspan: { default: 1 }, rowspan: { default: 1 } }),\n tableRole: 'cell',\n isolating: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'td'\n }\n ],\n toDOM: ɵ3\n },\n table_header: {\n content: 'block+',\n attrs: Object.assign({}, commonAttributes(), createDefaultAttributes(['headers', 'abbr', 'scope']), { colspan: { default: 1 }, rowspan: { default: 1 } }),\n tableRole: 'header_cell',\n isolating: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'th'\n }\n ],\n toDOM: ɵ4\n },\n table_body: {\n attrs: Object.assign({}, commonAttributes()),\n content: 'table_row+',\n isolating: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'tbody'\n }\n ],\n toDOM: ɵ5\n },\n table_foot: {\n attrs: Object.assign({}, commonAttributes()),\n content: 'table_row+',\n isolating: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'tfoot'\n }\n ],\n toDOM: ɵ6\n },\n table_head: {\n attrs: Object.assign({}, commonAttributes()),\n content: 'table_row+',\n isolating: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'thead'\n }\n ],\n toDOM: ɵ7\n },\n table_col: {\n attrs: Object.assign({}, commonAttributes(), createDefaultAttributes(['span'])),\n selectable: false,\n atom: true,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'col'\n }\n ],\n toDOM: ɵ8\n },\n table_colgroup: {\n attrs: Object.assign({}, commonAttributes(), createDefaultAttributes(['span'])),\n content: 'table_col*',\n selectable: false,\n parseDOM: [\n {\n getAttrs: serializeDOMAttrs,\n tag: 'colgroup'\n }\n ],\n toDOM: ɵ9\n }\n};\n\n/**\n * @hidden\n */\nconst marks$1 = marks;\nconst nodes$1 = Object.assign(nodes, tableNodes, semanticNodes);\n/**\n * @hidden\n */\nconst schema = new Schema({\n marks: marks$1,\n nodes: Object.assign({}, nodes$1, { blockquote: Object.assign({}, nodes$1.blockquote, { content: 'inline*' }) })\n});\n\n// Because working with row and column-spanning cells is not quite\n// trivial, this code builds up a descriptive structure for a given\n// table node. The structures are cached with the (persistent) table\n// nodes as key, so that they only have to be recomputed when the\n// content of the table changes.\n//\n// This does mean that they have to store table-relative, not\n// document-relative positions. So code that uses them will typically\n// compute the start position of the table and offset positions passed\n// to or gotten from this structure by that amount.\nlet readFromCache;\nlet addToCache;\n// Prefer using a weak map to cache table maps. Fall back on a\n// fixed-size cache if that's not supported.\nif (typeof WeakMap !== 'undefined') {\n let cache = new WeakMap();\n readFromCache = key => cache.get(key);\n addToCache = (key, value) => {\n cache.set(key, value);\n return value;\n };\n}\nelse {\n let cache = [];\n let cacheSize = 10;\n let cachePos = 0;\n readFromCache = key => {\n for (let i = 0; i < cache.length; i += 2) {\n if (cache[i] === key) {\n return cache[i + 1];\n }\n }\n };\n addToCache = (key, value) => {\n if (cachePos === cacheSize) {\n cachePos = 0;\n }\n cache[cachePos++] = key;\n return (cache[cachePos++] = value);\n };\n}\nconst findWidth = (table) => {\n let width = -1;\n let hasRowSpan = false;\n for (let row = 0; row < table.childCount; row++) {\n const rowNode = table.child(row);\n let rowWidth = 0;\n if (hasRowSpan) {\n for (let j = 0; j < row; j++) {\n const prevRow = table.child(j);\n for (let i = 0; i < prevRow.childCount; i++) {\n const cell = prevRow.child(i);\n if (j + cell.attrs.rowspan > row) {\n rowWidth += cell.attrs.colspan;\n }\n }\n }\n }\n // check if the cell spans accross multiple columns\n for (let i = 0; i < rowNode.childCount; i++) {\n const cell = rowNode.child(i);\n rowWidth += cell.attrs.colspan;\n if (cell.attrs.rowspan > 1) {\n hasRowSpan = true;\n }\n }\n if (width === -1) {\n width = rowWidth;\n }\n else if (width !== rowWidth) {\n width = Math.max(width, rowWidth);\n }\n }\n return width;\n};\nconst freshColWidth = attrs => {\n if (attrs.colwidth) {\n return attrs.colwidth.slice();\n }\n const result = [];\n for (let i = 0; i < attrs.colspan; i++) {\n result.push(0);\n }\n return result;\n};\nconst findBadColWidths = (map$$1, colWidths, table) => {\n if (!map$$1.problems) {\n map$$1.problems = [];\n }\n for (let i = 0, seen = {}; i < map$$1.map.length; i++) {\n const pos = map$$1.map[i];\n if (seen[pos]) {\n continue;\n }\n seen[pos] = true;\n let node = table.nodeAt(pos);\n let updated = null;\n for (let j = 0; j < node.attrs.colspan; j++) {\n const col = (i + j) % map$$1.width;\n const colWidth = colWidths[col * 2];\n if (colWidth != null && (!node.attrs.colwidth || node.attrs.colwidth[j] !== colWidth)) {\n (updated || (updated = freshColWidth(node.attrs)))[j] = colWidth;\n }\n }\n if (updated) {\n map$$1.problems.unshift({ type: 'colwidth mismatch', pos, colwidth: updated });\n }\n }\n};\n// Compute a table map.\nconst computeMap = tableNode => {\n if (!isTable(tableNode) && !isTableBody(tableNode) && !isTableHead(tableNode) && !isTableFoot(tableNode)) {\n throw new RangeError('Not a table node: ' + tableNode.type.name);\n }\n const width = findWidth(tableNode);\n const height = tableNode.childCount;\n const map$$1 = [];\n let mapPos = 0;\n let problems = null;\n const colWidths = [];\n for (let i = 0, e = width * height; i < e; i++) {\n map$$1[i] = 0;\n }\n for (let row = 0, pos = 0; row < height; row++) {\n const rowNode = tableNode.child(row);\n pos++;\n for (let i = 0;; i++) {\n while (mapPos < map$$1.length && map$$1[mapPos] !== 0) {\n mapPos++;\n }\n if (i === rowNode.childCount) {\n break;\n }\n const cellNode = rowNode.child(i);\n const { colspan, rowspan, colwidth } = cellNode.attrs;\n for (let h = 0; h < rowspan; h++) {\n if (h + row >= height) {\n (problems || (problems = [])).push({ type: 'overlong_rowspan', pos, n: rowspan - h });\n break;\n }\n const start = mapPos + h * width;\n for (let w = 0; w < colspan; w++) {\n if (map$$1[start + w] === 0) {\n map$$1[start + w] = pos;\n }\n else {\n (problems || (problems = [])).push({ type: 'collision', row, pos, n: colspan - w });\n }\n const colW = colwidth && colwidth[w];\n if (colW) {\n const widthIndex = ((start + w) % width) * 2, prev = colWidths[widthIndex];\n if (prev == null || (prev !== colW && colWidths[widthIndex + 1] === 1)) {\n colWidths[widthIndex] = colW;\n colWidths[widthIndex + 1] = 1;\n }\n else if (prev === colW) {\n colWidths[widthIndex + 1]++;\n }\n }\n }\n }\n mapPos += colspan;\n pos += cellNode.nodeSize;\n }\n const expectedPos = (row + 1) * width;\n let missing = 0;\n while (mapPos < expectedPos) {\n if (map$$1[mapPos++] === 0) {\n missing++;\n }\n }\n if (missing) {\n (problems || (problems = [])).push({ type: 'missing', row, n: missing });\n }\n pos++;\n }\n const tableMap = new TableMap(width, height, map$$1, problems);\n let badWidths = false;\n // For columns that have defined widths, but whose widths disagree\n // between rows, fix up the cells whose width doesn't match the\n // computed one.\n for (let i = 0; !badWidths && i < colWidths.length; i += 2) {\n if (colWidths[i] != null && colWidths[i + 1] < height) {\n badWidths = true;\n }\n }\n if (badWidths) {\n findBadColWidths(tableMap, colWidths, tableNode);\n }\n return tableMap;\n};\n/**\n * @hidden\n */\nclass Rect {\n constructor(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n}\n/**\n * @hidden\n */\nclass TableMap {\n // :: (Node) → TableMap\n // Find the table map for the given table node.\n static get(table) {\n return readFromCache(table) || addToCache(table, computeMap(table));\n }\n constructor(width, height, map$$1, problems) {\n // :: number The width of the table\n this.width = width;\n // :: number The table's height\n this.height = height;\n // :: [number] A width * height array with the start position of\n // the cell covering that part of the table in each slot\n this.map = map$$1;\n // An optional array of problems (cell overlap or non-rectangular\n // shape) for the table, used by the table normalizer.\n this.problems = problems;\n }\n // :: (number) → Rect\n // Find the dimensions of the cell at the given position.\n findCell(pos) {\n for (let i = 0; i < this.map.length; i++) {\n const curPos = this.map[i];\n if (curPos !== pos) {\n continue;\n }\n const left = i % this.width;\n const top = Math.floor(i / this.width);\n let right = left + 1;\n let bottom = top + 1;\n for (let j = 1; right < this.width && this.map[i + j] === curPos; j++) {\n right++;\n }\n for (let j = 1; bottom < this.height && this.map[i + this.width * j] === curPos; j++) {\n bottom++;\n }\n return new Rect(left, top, right, bottom);\n }\n throw new RangeError('No cell with offset ' + pos + ' found');\n }\n // :: (number) → number\n // Find the left side of the cell at the given position.\n colCount(pos) {\n for (let i = 0; i < this.map.length; i++) {\n if (this.map[i] === pos) {\n return i % this.width;\n }\n }\n throw new RangeError('No cell with offset ' + pos + ' found');\n }\n // :: (number, string, number) → ?number\n // Find the next cell in the given direction, starting from the cell\n // at `pos`, if any.\n nextCell(pos, axis, dir) {\n const { left, right, top, bottom } = this.findCell(pos);\n if (axis === 'horiz') {\n if (dir < 0 ? left === 0 : right === this.width) {\n return null;\n }\n return this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n }\n else {\n if (dir < 0 ? top === 0 : bottom === this.height) {\n return null;\n }\n return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n }\n }\n // :: (number, number) → Rect\n // Get the rectangle spanning the two given cells.\n rectBetween(a, b) {\n const { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n const { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n return new Rect(Math.min(leftA, leftB), Math.min(topA, topB), Math.max(rightA, rightB), Math.max(bottomA, bottomB));\n }\n // :: (Rect) → [number]\n // Return the position of all cells that have the top left corner in\n // the given rectangle.\n cellsInRect(rect) {\n const result = [];\n const seen = {};\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const index = row * this.width + col, pos = this.map[index];\n if (seen[pos]) {\n continue;\n }\n seen[pos] = true;\n if ((col !== rect.left || !col || this.map[index - 1] !== pos) &&\n (row !== rect.top || !row || this.map[index - this.width] !== pos)) {\n result.push(pos);\n }\n }\n }\n return result;\n }\n // :: (number, number, Node) → number\n // Return the position at which the cell at the given row and column\n // starts, or would start, if a cell started there.\n positionAt(row, col, table) {\n for (let i = 0, rowStart = 0;; i++) {\n const rowEnd = rowStart + table.child(i).nodeSize;\n if (i === row) {\n let index = col + row * this.width, rowEndIndex = (row + 1) * this.width;\n // Skip past cells from previous rows (via rowspan)\n while (index < rowEndIndex && this.map[index] < rowStart) {\n index++;\n }\n return index === rowEndIndex ? rowEnd - 1 : this.map[index];\n }\n rowStart = rowEnd;\n }\n }\n}\n\n/**\n * @hidden\n */\n// ::- A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n// subclass that represents a cell selection spanning part of a table.\n// With the plugin enabled, these will be created when the user\n// selects across cells, and will be drawn by giving selected cells a\n// `selectedCell` CSS class.\nclass CellSelection extends Selection {\n // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n // Returns the smallest column selection that covers the given anchor\n // and head cell.\n static colSelection($anchorCell, $headCell = $anchorCell) {\n let map$$1 = TableMap.get($anchorCell.node(-1));\n let start = $anchorCell.start(-1);\n let anchorRect = map$$1.findCell($anchorCell.pos - start);\n let headRect = map$$1.findCell($headCell.pos - start);\n let doc = $anchorCell.node(0);\n if (anchorRect.top <= headRect.top) {\n if (anchorRect.top > 0) {\n $anchorCell = doc.resolve(start + map$$1.map[anchorRect.left]);\n }\n if (headRect.bottom < map$$1.height) {\n $headCell = doc.resolve(start + map$$1.map[map$$1.width * (map$$1.height - 1) + headRect.right - 1]);\n }\n }\n else {\n if (headRect.top > 0) {\n $headCell = doc.resolve(start + map$$1.map[headRect.left]);\n }\n if (anchorRect.bottom < map$$1.height) {\n $anchorCell = doc.resolve(start + map$$1.map[map$$1.width * (map$$1.height - 1) + anchorRect.right - 1]);\n }\n }\n return new CellSelection($anchorCell, $headCell);\n }\n // :: (ResolvedPos, ?ResolvedPos) → CellSelection\n // Returns the smallest row selection that covers the given anchor\n // and head cell.\n static rowSelection($anchorCell, $headCell = $anchorCell) {\n let map$$1 = TableMap.get($anchorCell.node(-1));\n let start = $anchorCell.start(-1);\n let anchorRect = map$$1.findCell($anchorCell.pos - start);\n let headRect = map$$1.findCell($headCell.pos - start);\n let doc = $anchorCell.node(0);\n if (anchorRect.left <= headRect.left) {\n if (anchorRect.left > 0) {\n $anchorCell = doc.resolve(start + map$$1.map[anchorRect.top * map$$1.width]);\n }\n if (headRect.right < map$$1.width) {\n $headCell = doc.resolve(start + map$$1.map[map$$1.width * (headRect.top + 1) - 1]);\n }\n }\n else {\n if (headRect.left > 0) {\n $headCell = doc.resolve(start + map$$1.map[headRect.top * map$$1.width]);\n }\n if (anchorRect.right < map$$1.width) {\n $anchorCell = doc.resolve(start + map$$1.map[map$$1.width * (anchorRect.top + 1) - 1]);\n }\n }\n return new CellSelection($anchorCell, $headCell);\n }\n static fromJSON(doc, json) {\n return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n // :: (Node, number, ?number) → CellSelection\n static create(doc, anchorCell, headCell = anchorCell) {\n return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n }\n // :: (ResolvedPos, ?ResolvedPos)\n // A table selection is identified by its anchor and head cells. The\n // positions given to this constructor should point _before_ two\n // cells in the same table. They may be the same, to select a single\n // cell.\n constructor($anchorCell, $headCell = $anchorCell) {\n let table = $anchorCell.node(-1), map$$1 = TableMap.get(table), start = $anchorCell.start(-1);\n let rect = map$$1.rectBetween($anchorCell.pos - start, $headCell.pos - start);\n let doc = $anchorCell.node(0);\n let cells = map$$1.cellsInRect(rect).filter(p => p !== $headCell.pos - start);\n // Make the head cell the first range, so that it counts as the\n // primary part of the selection\n cells.unshift($headCell.pos - start);\n let ranges = cells.map(pos => {\n let cell = table.nodeAt(pos), from = pos + start + 1;\n return new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n });\n super(ranges[0].$from, ranges[0].$to, ranges);\n // :: ResolvedPos\n // A resolved position pointing _in front of_ the anchor cell (the one\n // that doesn't move when extending the selection).\n this.$anchorCell = $anchorCell;\n // :: ResolvedPos\n // A resolved position pointing in front of the head cell (the one\n // moves when extending the selection).\n this.$headCell = $headCell;\n }\n map(doc, mapping) {\n let $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n let $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n let tableChanged = this.$anchorCell.node(-1) !== $anchorCell.node(-1);\n if (tableChanged && this.isRowSelection()) {\n return CellSelection.rowSelection($anchorCell, $headCell);\n }\n else {\n if (tableChanged && this.isColSelection()) {\n return CellSelection.colSelection($anchorCell, $headCell);\n }\n else {\n return new CellSelection($anchorCell, $headCell);\n }\n }\n }\n return TextSelection.between($anchorCell, $headCell);\n }\n // :: () → Slice\n // Returns a rectangular slice of table rows containing the selected\n // cells.\n content() {\n let table = this.$anchorCell.node(-1), map$$1 = TableMap.get(table), start = this.$anchorCell.start(-1);\n let rect = map$$1.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start);\n let seen = {}, rows = [];\n for (let row = rect.top; row < rect.bottom; row++) {\n let rowContent = [];\n for (let index = row * map$$1.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n let pos = map$$1.map[index];\n if (!seen[pos]) {\n seen[pos] = true;\n let cellRect = map$$1.findCell(pos), cell = table.nodeAt(pos);\n let extraLeft = rect.left - cellRect.left, extraRight = cellRect.right - rect.right;\n if (extraLeft > 0 || extraRight > 0) {\n let attrs = cell.attrs;\n if (extraLeft > 0) {\n attrs = removeColSpan(attrs, 0, extraLeft);\n }\n if (extraRight > 0) {\n attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n }\n if (cellRect.left < rect.left) {\n cell = cell.type.createAndFill(attrs);\n }\n else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n let attrs = setAttr(cell.attrs, 'rowspan', Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top));\n if (cellRect.top < rect.top) {\n cell = cell.type.createAndFill(attrs);\n }\n else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n rowContent.push(cell);\n }\n }\n rows.push(table.child(row).copy(Fragment.from(rowContent)));\n }\n const fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n return new Slice(Fragment.from(fragment), 1, 1);\n }\n replace(tr, content = Slice.empty) {\n let mapFrom = tr.steps.length;\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let mapping = tr.mapping.slice(mapFrom);\n tr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n }\n let sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n if (sel) {\n tr.setSelection(sel);\n }\n }\n replaceWith(tr, node) {\n this.replace(tr, new Slice(Fragment.from(node), 0, 0));\n }\n forEachCell(f) {\n let table = this.$anchorCell.node(-1);\n let map$$1 = TableMap.get(table);\n let start = this.$anchorCell.start(-1);\n let cells = map$$1.cellsInRect(map$$1.rectBetween(this.$anchorCell.pos - start, this.$headCell.pos - start));\n for (let i = 0; i < cells.length; i++) {\n f(table.nodeAt(cells[i]), start + cells[i]);\n }\n }\n // :: () → bool\n // True if this selection goes all the way from the top to the\n // bottom of the table.\n isColSelection() {\n let anchorTop = this.$anchorCell.index(-1), headTop = this.$headCell.index(-1);\n if (Math.min(anchorTop, headTop) > 0) {\n return false;\n }\n let anchorBot = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n let headBot = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n return Math.max(anchorBot, headBot) === this.$headCell.node(-1).childCount;\n }\n // :: () → bool\n // True if this selection goes all the way from the left to the\n // right of the table.\n isRowSelection() {\n let map$$1 = TableMap.get(this.$anchorCell.node(-1));\n let start = this.$anchorCell.start(-1);\n let anchorLeft = map$$1.colCount(this.$anchorCell.pos - start);\n let headLeft = map$$1.colCount(this.$headCell.pos - start);\n if (Math.min(anchorLeft, headLeft) > 0) {\n return false;\n }\n let anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n let headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n return Math.max(anchorRight, headRight) === map$$1.width;\n }\n eq(other) {\n return (other instanceof CellSelection && other.$anchorCell.pos === this.$anchorCell.pos && other.$headCell.pos === this.$headCell.pos);\n }\n toJSON() {\n return { type: 'cell', anchor: this.$anchorCell.pos, head: this.$headCell.pos };\n }\n getBookmark() {\n return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n }\n}\nCellSelection.prototype.visible = false;\nSelection.jsonID('table_cell', CellSelection);\nclass CellBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n let $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n if ($anchorCell.parent.type.spec.tableRole === 'row' &&\n $headCell.parent.type.spec.tableRole === 'row' &&\n $anchorCell.index() < $anchorCell.parent.childCount &&\n $headCell.index() < $headCell.parent.childCount &&\n inSameTable($anchorCell, $headCell)) {\n return new CellSelection($anchorCell, $headCell);\n }\n else {\n return Selection.near($headCell, 1);\n }\n }\n}\n\n/**\n * @hidden\n */\nconst findParentNodeClosestToPos = ($pos, predicate) => {\n for (let i = $pos.depth; i > 0; i--) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n start: $pos.start(i),\n pos: i > 0 ? $pos.before(i) : 0,\n depth: i,\n node\n };\n }\n }\n};\n/**\n * @hidden\n */\nconst createTable = (nodes$$1, rows, columns) => {\n const { table, table_body, table_row, table_cell } = nodes$$1;\n const tableRows = [];\n let cells;\n for (let r = 0; r < rows + 1; r++) {\n cells = [];\n for (let c = 0; c < columns + 1; c++) {\n cells.push(table_cell.createAndFill());\n }\n tableRows.push(table_row.createAndFill(undefined, cells));\n }\n const body = table_body.createAndFill(undefined, tableRows);\n return table.createAndFill(undefined, body);\n};\n/**\n * @hidden\n */\nconst isInTable = (state) => {\n const $head = state.selection.$head;\n for (let d = $head.depth; d > 0; d--) {\n if (isTableRow($head.node(d))) {\n return true;\n }\n }\n return false;\n};\n/**\n * @hidden\n */\nconst setAttr = (attrs, name, value) => {\n const result = {};\n // tslint:disable-next-line\n for (const prop in attrs) {\n result[prop] = attrs[prop];\n }\n result[name] = value;\n return result;\n};\nconst cellNear = ($pos) => {\n for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n const role = after.type.spec.tableRole;\n if (role === 'cell' || role === 'header_cell') {\n return $pos.doc.resolve(pos);\n }\n }\n for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n const role = before.type.spec.tableRole;\n if (role === 'cell' || role === 'header_cell') {\n return $pos.doc.resolve(pos - before.nodeSize);\n }\n }\n};\nconst cellAround = ($pos) => {\n for (let d = $pos.depth - 1; d > 0; d--) {\n if (isTableRow($pos.node(d))) {\n return $pos.node(0).resolve($pos.before(d + 1));\n }\n }\n return null;\n};\nconst selectionCell = (sel) => {\n if (sel instanceof CellSelection && sel.$anchorCell) {\n return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n }\n else if (sel instanceof NodeSelection && sel.node && isTableCell(sel.node)) {\n return sel.$anchor;\n }\n return cellAround(sel.$head) || cellNear(sel.$head);\n};\n/**\n * @hidden\n */\n// Helper to get the selected rectangle in a table, if any. Adds table\n// map, table node, and table start offset to the object for\n// convenience.\nconst selectedRect = (sel) => {\n // create arr of rect for each table section\n // there has to be a rect for thead, tbody and tfoot(if each exists)\n // and NOT for colgroups\n const $pos = selectionCell(sel);\n const table = $pos.node(-1);\n const tableStart = $pos.start(-1);\n const map$$1 = TableMap.get(table);\n const rect = sel instanceof CellSelection\n ? map$$1.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart)\n : map$$1.findCell($pos.pos - tableStart);\n rect.tableStart = tableStart;\n rect.map = map$$1;\n rect.table = table;\n return rect;\n};\n/**\n * @hidden\n */\n// this has to be removed since the schema should not have roles inside NodeSpec.\nconst tableNodeTypes = (schema) => {\n let result = schema.cached.tableNodeTypes;\n if (!result) {\n result = schema.cached.tableNodeTypes = {};\n // tslint:disable-next-line\n for (const name in schema.nodes) {\n const type = schema.nodes[name];\n const role = type.spec.tableRole;\n if (role) {\n result[role] = type;\n }\n }\n }\n return result;\n};\n/**\n * @hidden\n */\nconst rowIsHeader = (map$$1, table, row) => {\n const headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (let col = 0; col < map$$1.width; col++) {\n if (table.nodeAt(map$$1.map[col + row * map$$1.width]).type !== headerCell) {\n return false;\n }\n }\n return true;\n};\n/**\n * @hidden\n */\nconst addColSpan = (attrs, pos, n = 1) => {\n const result = setAttr(attrs, 'colspan', attrs.colspan + n);\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n for (let i = 0; i < n; i++) {\n result.colwidth.splice(pos, 0, 0);\n }\n }\n return result;\n};\n/**\n * @hidden\n */\nconst removeColSpan = (attrs, pos, n = 1) => {\n const result = setAttr(attrs, 'colspan', attrs.colspan - n);\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n result.colwidth.splice(pos, n);\n if (!result.colwidth.some(w => w > 0)) {\n result.colwidth = null;\n }\n }\n return result;\n};\n/**\n * @hidden\n */\nconst isCellEmpty = cell => {\n const c = cell.content;\n return c.childCount === 1 && c.firstChild.isTextblock && c.firstChild.childCount === 0;\n};\nconst cellWrapping = ($pos) => {\n for (let d = $pos.depth; d > 0; d--) {\n // Sometimes the cell can be in the same depth.\n const role = $pos.node(d).type.spec.tableRole;\n if (role === 'cell' || role === 'header_cell') {\n return $pos.node(d);\n }\n }\n return null;\n};\n/**\n * @hidden\n */\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells with the cell type (th, td) returned by getType function.\nconst splitCellWithType = getCellType => {\n return (state, dispatch) => {\n const sel = state.selection;\n let cellNode;\n let cellPos;\n if (!(sel instanceof CellSelection)) {\n cellNode = cellWrapping(sel.$from);\n if (!cellNode) {\n return false;\n }\n cellPos = cellAround(sel.$from).pos;\n }\n else {\n if (sel.$anchorCell.pos !== sel.$headCell.pos) {\n return false;\n }\n cellNode = sel.$anchorCell.nodeAfter;\n cellPos = sel.$anchorCell.pos;\n }\n if (cellNode.attrs.colspan === 1 && cellNode.attrs.rowspan === 1) {\n return false;\n }\n if (dispatch) {\n let baseAttrs = cellNode.attrs;\n const attrs = [];\n const colwidth = baseAttrs.colwidth;\n if (baseAttrs.rowspan > 1) {\n baseAttrs = setAttr(baseAttrs, 'rowspan', 1);\n }\n if (baseAttrs.colspan > 1) {\n baseAttrs = setAttr(baseAttrs, 'colspan', 1);\n }\n const rect = selectedRect(state);\n const tr = state.tr;\n for (let i = 0; i < rect.right - rect.left; i++) {\n attrs.push(colwidth ? setAttr(baseAttrs, 'colwidth', colwidth && colwidth[i] ? [colwidth[i]] : null) : baseAttrs);\n }\n let lastCell;\n for (let row = rect.top; row < rect.bottom; row++) {\n let pos = rect.map.positionAt(row, rect.left, rect.table);\n if (row === rect.top) {\n pos += cellNode.nodeSize;\n }\n for (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n if (col === rect.left && row === rect.top) {\n continue;\n }\n tr.insert((lastCell = tr.mapping.map(pos + rect.tableStart, 1)), getCellType({ node: cellNode, row, col }).createAndFill(attrs[i]));\n }\n }\n tr.setNodeMarkup(cellPos, getCellType({ node: cellNode, row: rect.top, col: rect.left }), attrs[0]);\n if (sel instanceof CellSelection) {\n tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell && tr.doc.resolve(lastCell)));\n }\n dispatch(tr);\n }\n return true;\n };\n};\n/**\n * @hidden\n */\nconst pointsAtCell = ($pos) => {\n return isTableRow($pos.parent) && $pos.nodeAfter;\n};\n/**\n * @hidden\n */\nconst inSameTable = ($a, $b) => {\n return $a.depth === $b.depth && $a.pos >= $b.start(-1) && $a.pos <= $b.end(-1);\n};\n/**\n * @hidden\n */\nconst cellsOverlapRectangle = ({ width, height, map: map$$1 }, rect) => {\n let indexTop = rect.top * width + rect.left;\n let indexLeft = indexTop;\n let indexBottom = (rect.bottom - 1) * width + rect.left;\n let indexRight = indexTop + (rect.right - rect.left - 1);\n for (let i = rect.top; i < rect.bottom; i++) {\n if ((rect.left > 0 && map$$1[indexLeft] === map$$1[indexLeft - 1]) || (rect.right < width && map$$1[indexRight] === map$$1[indexRight + 1])) {\n return true;\n }\n indexLeft += width;\n indexRight += width;\n }\n for (let i = rect.left; i < rect.right; i++) {\n if ((rect.top > 0 && map$$1[indexTop] === map$$1[indexTop - width]) ||\n (rect.bottom < height && map$$1[indexBottom] === map$$1[indexBottom + width])) {\n return true;\n }\n indexTop++;\n indexBottom++;\n }\n return false;\n};\n\n/**\n * @hidden\n */\nconst insertTable = (attrs) => (state, dispatch) => {\n const newTable = createTable(state.schema.nodes, attrs.rows, attrs.cols);\n if (newTable) {\n insertNode(newTable, true)(state, dispatch);\n }\n};\nconst addTableGroupColumn = (tr, { left, right }, col, mainTable, requiredGroup, doc) => {\n let refColumn = col > 0 ? -1 : 0;\n // not sure if this should be deleted\n // if (columnIsHeader(map, table, col + refColumn)) {\n // refColumn = col === 0 || col === map.width ? null : 0;\n // }\n let rect;\n mainTable.node.descendants((tableChildNode, offset) => {\n if (requiredGroup(tableChildNode)) {\n let i = -1;\n tableChildNode.firstChild.descendants((childNode, pos) => {\n if (isTableCell(childNode) || isTableHeaderCell(childNode)) {\n i = i + 1;\n if (i === right || i === left) {\n const selection = new Selection(doc.resolve(pos + offset + mainTable.start), doc.resolve(pos + offset + mainTable.start));\n rect = selectedRect(selection);\n }\n }\n });\n }\n });\n // Do nothing if thead, tfoot or tbody is missing\n if (!rect) {\n return tr;\n }\n for (let row = 0; row < rect.map.height; row++) {\n const index = row * rect.map.width + col;\n // If this position falls inside a col-spanning cell\n if (col > 0 && col < rect.map.width && rect.map.map[index - 1] === rect.map.map[index]) {\n const pos = rect.map.map[index];\n const cell = rect.table.nodeAt(pos);\n tr.setNodeMarkup(tr.mapping.map(rect.tableStart + pos), null, addColSpan(cell.attrs, col - rect.map.colCount(pos)));\n // Skip ahead if rowspan > 1\n row += cell.attrs.rowspan - 1;\n }\n else {\n const type = rect.table.nodeAt(rect.map.map[index + refColumn]).type;\n const pos = rect.map.positionAt(row, col, rect.table);\n tr.insert(tr.mapping.map(rect.tableStart + pos), type.createAndFill());\n }\n }\n return tr;\n};\nconst removeTableGroupColumn = (tr, { right, left }, mainTable, requiredGroup, doc) => {\n let rect;\n mainTable.node.descendants((tableChildNode, offset) => {\n if (requiredGroup(tableChildNode)) {\n let i = -1;\n tableChildNode.firstChild.descendants((childNode, pos) => {\n if (isTableCell(childNode) || isTableHeaderCell(childNode)) {\n i = i + 1;\n if (i >= left && i < right) {\n const resolvedPos = doc.resolve(pos + offset + mainTable.start + childNode.nodeSize);\n const selection = new Selection(resolvedPos, resolvedPos);\n rect = selectedRect(selection);\n }\n }\n });\n }\n });\n // Do nothing if thead, tfoot or tbody is missing\n if (!rect) {\n return;\n }\n for (let i = rect.right - 1;; i--) {\n removeColumn(tr, rect, i);\n if (i === rect.left) {\n break;\n }\n rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n rect.map = TableMap.get(rect.table);\n }\n return;\n};\nconst removeColumn = (tr, { map: map$$1, table, tableStart }, col) => {\n for (let row = 0; row < map$$1.height;) {\n const index = row * map$$1.width + col;\n const pos = map$$1.map[index];\n const cell = table.nodeAt(pos);\n // If this is part of a col-spanning cell\n if ((col > 0 && map$$1.map[index - 1] === pos) || (col < map$$1.width - 1 && map$$1.map[index + 1] === pos)) {\n tr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, removeColSpan(cell.attrs, col - map$$1.colCount(pos)));\n }\n else {\n const start = tr.mapping.map(tableStart + pos);\n tr.delete(start, start + cell.nodeSize);\n }\n row += cell.attrs.rowspan;\n }\n};\n/**\n * @hidden\n */\n// Command to add a column before the column with the selection.\nconst addColumnBefore$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n const mainTable = findParentNodeClosestToPos(state.selection.$anchor, isTable);\n const tHeadTr = addTableGroupColumn(state.tr, rect, rect.left, mainTable, isTableHead, state.doc);\n const tBodyTr = addTableGroupColumn(tHeadTr, rect, rect.left, mainTable, isTableBody, state.doc);\n const tFootTr = addTableGroupColumn(tBodyTr, rect, rect.left, mainTable, isTableFoot, state.doc);\n dispatch(tFootTr);\n }\n return true;\n};\n/**\n * @hidden\n */\n// Command to add a column after the column with the selection.\nconst addColumnAfter$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n const mainTable = findParentNodeClosestToPos(state.selection.$anchor, isTable);\n const theadTr = addTableGroupColumn(state.tr, rect, rect.right, mainTable, isTableHead, state.doc);\n const tBodyTr = addTableGroupColumn(theadTr, rect, rect.right, mainTable, isTableBody, state.doc);\n const tFootTr = addTableGroupColumn(tBodyTr, rect, rect.right, mainTable, isTableFoot, state.doc);\n dispatch(tFootTr);\n }\n return true;\n};\nconst addRow = (tr, { map: map$$1, tableStart, table }, row) => {\n let rowPos = tableStart;\n for (let i = 0; i < row; i++) {\n rowPos += table.child(i).nodeSize;\n }\n const cells = [];\n let refRow = row > 0 ? -1 : 0;\n if (rowIsHeader(map$$1, table, row + refRow)) {\n refRow = row === 0 || row === map$$1.height ? null : 0;\n }\n for (let col = 0, index = map$$1.width * row; col < map$$1.width; col++, index++) {\n // Covered by a rowspan cell\n if (row > 0 && row < map$$1.height && map$$1.map[index] === map$$1.map[index - map$$1.width]) {\n const pos = map$$1.map[index];\n const attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tableStart + pos, null, setAttr(attrs, 'rowspan', attrs.rowspan + 1));\n col += attrs.colspan - 1;\n }\n else {\n const type = refRow == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map$$1.map[index + refRow * map$$1.width]).type;\n cells.push(type.createAndFill());\n }\n }\n tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n return tr;\n};\n/**\n * @hidden\n */\n// Add a table row before the selection.\nconst addRowBefore$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n dispatch(addRow(state.tr, rect, rect.top));\n }\n return true;\n};\n/**\n * @hidden\n */\n// Add a table row after the selection.\nconst addRowAfter$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n dispatch(addRow(state.tr, rect, rect.bottom));\n }\n return true;\n};\n/**\n * @hidden\n */\n// Command function that removes the selected columns from a table.\nconst deleteColumn$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n // if only one column left - delete the whole table\n if (rect.left === 0 && rect.right === rect.map.width) {\n return deleteTable$1(state, dispatch);\n }\n const mainTable = findParentNodeClosestToPos(state.selection.$anchor, isTable);\n const tr = state.tr;\n removeTableGroupColumn(tr, rect, mainTable, isTableFoot, tr.doc);\n removeTableGroupColumn(tr, rect, mainTable, isTableBody, tr.doc);\n removeTableGroupColumn(tr, rect, mainTable, isTableHead, tr.doc);\n dispatch(tr);\n }\n return true;\n};\nconst removeRow = (tr, { map: map$$1, table, tableStart }, row) => {\n let rowPos = 0;\n for (let i = 0; i < row; i++) {\n rowPos += table.child(i).nodeSize;\n }\n const nextRow = rowPos + table.child(row).nodeSize;\n const mapFrom = tr.mapping.maps.length;\n tr.delete(rowPos + tableStart, nextRow + tableStart);\n for (let col = 0, index = row * map$$1.width; col < map$$1.width; col++, index++) {\n const pos = map$$1.map[index];\n if (row > 0 && pos === map$$1.map[index - map$$1.width]) {\n // If this cell starts in the row above, simply reduce its rowspan\n const attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, setAttr(attrs, 'rowspan', attrs.rowspan - 1));\n col += attrs.colspan - 1;\n }\n else if (row < map$$1.width && pos === map$$1.map[index + map$$1.width]) {\n // Else, if it continues in the row below, it has to be moved down\n const cell = table.nodeAt(pos);\n const copy = cell.type.create(setAttr(cell.attrs, 'rowspan', cell.attrs.rowspan - 1), cell.content);\n const newPos = map$$1.positionAt(row + 1, col, table);\n tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n col += cell.attrs.colspan - 1;\n }\n }\n};\n/**\n * @hidden\n */\n// Remove the selected rows from a table.\nconst deleteRow$1 = (state, dispatch) => {\n if (!isInTable(state)) {\n return false;\n }\n if (dispatch) {\n const rect = selectedRect(state.selection);\n const tr = state.tr;\n if (rect.top === 0 && rect.bottom === rect.map.height) {\n const mainTable = findParentNodeClosestToPos(state.selection.$anchor, isTable);\n if (mainTable.node.childCount === 1) {\n deleteTable$1(state, dispatch);\n }\n else {\n deleteTableElement(n => n.type.name === rect.table.type.name)(state, dispatch);\n }\n return true;\n }\n for (let i = rect.bottom - 1;; i--) {\n removeRow(tr, rect, i);\n if (i === rect.top) {\n break;\n }\n rect.table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n rect.map = TableMap.get(rect.table);\n }\n dispatch(tr);\n }\n return true;\n};\n/**\n * @hidden\n */\n// Merge the selected cells into a single cell. Only available when\n// the selected cells' outline forms a rectangle.\nconst mergeCells$1 = (state, dispatch) => {\n const sel = state.selection;\n if (!(sel instanceof CellSelection) || sel.$anchorCell.pos === sel.$headCell.pos) {\n return false;\n }\n const rect = selectedRect(state.selection);\n const { map: map$$1 } = rect;\n if (cellsOverlapRectangle(map$$1, rect)) {\n return false;\n }\n if (dispatch) {\n const tr = state.tr;\n const seen = {};\n let content = Fragment.empty;\n let mergedPos;\n let mergedCell;\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const cellPos = map$$1.map[row * map$$1.width + col], cell = rect.table.nodeAt(cellPos);\n if (seen[cellPos]) {\n continue;\n }\n seen[cellPos] = true;\n if (mergedPos === null) {\n mergedPos = cellPos;\n mergedCell = cell;\n }\n else {\n if (!isCellEmpty(cell)) {\n content = content.append(cell.content);\n }\n const mapped = tr.mapping.map(cellPos + rect.tableStart);\n tr.delete(mapped, mapped + cell.nodeSize);\n }\n }\n }\n tr.setNodeMarkup(mergedPos + rect.tableStart, null, setAttr(addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan), 'rowspan', rect.bottom - rect.top));\n if (content.size) {\n const end = mergedPos + 1 + mergedCell.content.size;\n const start = isCellEmpty(mergedCell) ? mergedPos + 1 : end;\n tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n }\n tr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n dispatch(tr);\n }\n return true;\n};\n/**\n * @hidden\n */\n// Split a selected cell, whose rowpan or colspan is greater than one,\n// into smaller cells. Use the first cell type for the new cells.\nconst splitCell$1 = (state, dispatch) => {\n const nodeTypes = tableNodeTypes(state.schema);\n return splitCellWithType(({ node }) => {\n return nodeTypes[node.type.spec.tableRole];\n })(state, dispatch);\n};\nconst deleteTableElement = (selector) => (state, dispatch) => {\n const $pos = state.selection.$anchor;\n for (let d = $pos.depth; d > 0; d--) {\n const node = $pos.node(d);\n if (selector(node)) {\n if (dispatch) {\n const tr = state.tr;\n tr.delete($pos.before(d), $pos.after(d)).scrollIntoView();\n dispatch(tr);\n }\n return true;\n }\n }\n return false;\n};\n/**\n * @hidden\n */\n// Deletes the table around the selection, if any.\nconst deleteTable$1 = deleteTableElement(isTable);\n\nconst alignRemove = (state, dispatch) => alignBlocks(alignRemoveRules)(state, dispatch);\nconst ɵ1$5 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, bold, { applyToWord })), ɵ2$4 = (options) => cleanFormatting(options), ɵ3$4 = attrs => expandToWordWrap(applyLink, { mark: 'link', attrs: attrs.value, applyToWord: attrs.applyToWord }), ɵ4$2 = attrs => expandToWordWrap(applyInlineStyle, { style: 'font-family', value: attrs.value, applyToWord: attrs.applyToWord }), ɵ5$2 = attrs => expandToWordWrap(applyInlineStyle, { style: 'font-size', value: attrs.value + 'px', applyToWord: attrs.applyToWord }), ɵ6$1 = attrs => expandToWordWrap(applyLink, { mark: 'link', attrs: attrs, applyToWord: attrs.applyToWord }), ɵ7$1 = text => insertText(text), ɵ8$1 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, italic, { applyToWord })), ɵ9$1 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, strikethrough, { applyToWord })), ɵ10 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, subscript, { applyToWord })), ɵ11 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, superscript, { applyToWord })), ɵ12 = (applyToWord) => expandToWordWrap(toggleInlineFormat, Object.assign({}, underline, { applyToWord })), ɵ13 = () => removeLink(link), ɵ14 = attrs => expandToWordWrap(applyInlineStyle, { style: 'color', value: attrs.value, applyToWord: attrs.applyToWord }), ɵ15 = attrs => expandToWordWrap(applyInlineStyle, { style: 'background-color', value: attrs.value, applyToWord: attrs.applyToWord }), ɵ16 = () => (state, dispatch) => selectAll(state, dispatch);\nconst inlineCommand = {\n bold: ɵ1$5,\n cleanFormatting: ɵ2$4,\n createLink: ɵ3$4,\n fontFamily: ɵ4$2,\n fontSize: ɵ5$2,\n insertFile: ɵ6$1,\n insertText: ɵ7$1,\n italic: ɵ8$1,\n strikethrough: ɵ9$1,\n subscript: ɵ10,\n superscript: ɵ11,\n underline: ɵ12,\n unlink: ɵ13,\n foreColor: ɵ14,\n backColor: ɵ15,\n selectAll: ɵ16\n};\nconst ɵ17 = () => (state, dispatch) => isAligned(state, alignCenterRules) ? alignRemove(state, dispatch) : alignBlocks(alignCenterRules)(state, dispatch), ɵ18 = () => (state, dispatch) => isAligned(state, alignJustifyRules) ? alignRemove(state, dispatch) : alignBlocks(alignJustifyRules)(state, dispatch), ɵ19 = () => (state, dispatch) => isAligned(state, alignLeftRules) ? alignRemove(state, dispatch) : alignBlocks(alignLeftRules)(state, dispatch), ɵ20 = () => (state, dispatch) => isAligned(state, alignRightRules) ? alignRemove(state, dispatch) : alignBlocks(alignRightRules)(state, dispatch), ɵ21 = formatAttr => formatBlockElements(formatAttr.tag), ɵ22 = () => getHtml, ɵ23 = () => indent, ɵ24 = attrs => insertImage(attrs), ɵ25 = () => toggleOrderedList, ɵ26 = () => toggleUnorderedList, ɵ27 = () => outdent, ɵ28 = () => redo, ɵ29 = ({ content, parseOptions }) => setHtml(content, 'setHTML', parseOptions), ɵ30 = () => undo;\nconst blockCommand = {\n alignCenter: ɵ17,\n alignJustify: ɵ18,\n alignLeft: ɵ19,\n alignRight: ɵ20,\n format: ɵ21,\n getHTML: ɵ22,\n indent: ɵ23,\n insertImage: ɵ24,\n // think about changing the command name.\n insertOrderedList: ɵ25,\n // think about changing the command name.\n insertUnorderedList: ɵ26,\n outdent: ɵ27,\n redo: ɵ28,\n setHTML: ɵ29,\n undo: ɵ30\n};\nconst ɵ31 = attr => insertTable(attr), ɵ32 = () => addColumnBefore$1, ɵ33 = () => addColumnAfter$1, ɵ34 = () => addRowBefore$1, ɵ35 = () => addRowAfter$1, ɵ36 = () => deleteRow$1, ɵ37 = () => deleteColumn$1, ɵ38 = () => mergeCells$1, ɵ39 = () => splitCell$1, ɵ40 = () => deleteTable$1;\nconst tableCommand = {\n insertTable: ɵ31,\n addColumnBefore: ɵ32,\n addColumnAfter: ɵ33,\n addRowBefore: ɵ34,\n addRowAfter: ɵ35,\n deleteRow: ɵ36,\n deleteColumn: ɵ37,\n mergeCells: ɵ38,\n splitCell: ɵ39,\n deleteTable: ɵ40\n};\n/**\n * @hidden\n */\nconst editorCommands = Object.assign({}, inlineCommand, blockCommand, tableCommand);\n\n/**\n * @hidden\n */\nconst getToolbarState = (state, options) => ({\n alignCenter: {\n selected: isAligned(state, alignCenterRules),\n disabled: false\n },\n alignJustify: {\n selected: isAligned(state, alignJustifyRules),\n disabled: false\n },\n alignLeft: {\n selected: isAligned(state, alignLeftRules),\n disabled: false\n },\n alignRight: {\n selected: isAligned(state, alignRightRules),\n disabled: false\n },\n bold: {\n selected: hasMark(state, bold),\n disabled: false\n },\n cleanFormatting: {\n selected: false,\n disabled: !cleanFormatting()(state)\n },\n format: {\n selected: activeNode(state),\n disabled: false\n },\n indent: {\n selected: false,\n disabled: !(canIndentAsListItem(state, state.schema.nodes.list_item) || canBeIndented(state, indentRules))\n },\n insertOrderedList: {\n selected: hasNode(state, state.schema.nodes.ordered_list),\n disabled: false\n },\n insertUnorderedList: {\n selected: hasNode(state, state.schema.nodes.bullet_list),\n disabled: false\n },\n italic: {\n selected: hasMark(state, italic),\n disabled: false\n },\n unlink: {\n selected: false,\n disabled: !hasMark(state, link)\n },\n outdent: {\n selected: false,\n disabled: !(canOutdentAsListItem(state, outdentRules) || canBeIndented(state, outdentRules))\n },\n redo: {\n selected: false,\n disabled: !redo(state)\n },\n selectAll: {\n selected: false,\n disabled: false\n },\n strikethrough: {\n selected: hasMark(state, strikethrough),\n disabled: false\n },\n style: {\n selected: getActiveMarks(state, state.schema.marks.style),\n disabled: false\n },\n subscript: {\n selected: hasMark(state, subscript),\n disabled: false\n },\n superscript: {\n selected: hasMark(state, superscript),\n disabled: false\n },\n underline: {\n selected: hasMark(state, underline),\n disabled: false\n },\n undo: {\n selected: false,\n disabled: !undo(state)\n },\n //dialogs\n createLink: {\n selected: false,\n get disabled() {\n const empty = state.selection.empty;\n const applyToWord = options && options.applyToWord;\n if (applyToWord && empty) {\n const extendedState = expandSelection(state, () => { }, options).state;\n return extendedState.selection.empty;\n }\n return empty;\n }\n },\n insertFile: {\n selected: false,\n disabled: state.selection.empty\n },\n insertImage: {\n selected: false,\n disabled: false\n },\n viewSource: {\n selected: false,\n disabled: false\n },\n // print\n print: {\n selected: false,\n disabled: false\n },\n // table\n insertTable: {\n selected: false,\n disabled: false\n },\n addColumnBefore: {\n selected: false,\n disabled: !addColumnBefore(state)\n },\n addColumnAfter: {\n selected: false,\n disabled: !addColumnAfter(state)\n },\n addRowBefore: {\n selected: false,\n disabled: !addRowBefore(state)\n },\n addRowAfter: {\n selected: false,\n disabled: !addRowAfter(state)\n },\n deleteRow: {\n selected: false,\n disabled: !deleteRow(state)\n },\n deleteColumn: {\n selected: false,\n disabled: !deleteColumn(state)\n },\n mergeCells: {\n selected: false,\n disabled: !mergeCells(state)\n },\n splitCell: {\n selected: false,\n disabled: !splitCell(state)\n },\n deleteTable: {\n selected: false,\n disabled: !deleteTable(state)\n }\n});\n/**\n * @hidden\n */\nconst initialToolBarState = {\n //alignment\n alignCenter: { selected: false, disabled: false },\n alignJustify: { selected: false, disabled: false },\n alignLeft: { selected: false, disabled: false },\n alignRight: { selected: false, disabled: false },\n //marks\n bold: { selected: false, disabled: false },\n italic: { selected: false, disabled: false },\n underline: { selected: false, disabled: false },\n strikethrough: { selected: false, disabled: false },\n subscript: { selected: false, disabled: false },\n superscript: { selected: false, disabled: false },\n //tools\n format: { selected: { text: 'Format', tag: null }, disabled: false },\n style: { selected: { marks: [], hasNodesWithoutMarks: false }, disabled: false },\n cleanFormatting: { selected: false, disabled: true },\n //indent\n indent: { selected: false, disabled: false },\n outdent: { selected: false, disabled: false },\n //lists\n insertOrderedList: { selected: false, disabled: false },\n insertUnorderedList: { selected: false, disabled: false },\n //links\n unlink: { selected: false, disabled: true },\n //history\n redo: { selected: false, disabled: true },\n undo: { selected: false, disabled: true },\n // print\n print: { selected: false, disabled: false },\n //dialogs\n createLink: { selected: false, disabled: true },\n insertFile: { selected: false, disabled: true },\n insertImage: { selected: false, disabled: false },\n viewSource: { selected: false, disabled: false },\n //table\n insertTable: { selected: false, disabled: false },\n addColumnBefore: { selected: false, disabled: true },\n addColumnAfter: { selected: false, disabled: true },\n addRowBefore: { selected: false, disabled: true },\n addRowAfter: { selected: false, disabled: true },\n deleteRow: { selected: false, disabled: true },\n deleteColumn: { selected: false, disabled: true },\n mergeCells: { selected: false, disabled: true },\n splitCell: { selected: false, disabled: true },\n deleteTable: { selected: false, disabled: true },\n // select all\n selectAll: { selected: false, disabled: false }\n};\n/**\n * @hidden\n */\nconst disabledToolBarState = {\n //alignment\n alignCenter: { selected: false, disabled: true },\n alignJustify: { selected: false, disabled: true },\n alignLeft: { selected: false, disabled: true },\n alignRight: { selected: false, disabled: true },\n //marks\n bold: { selected: false, disabled: true },\n italic: { selected: false, disabled: true },\n underline: { selected: false, disabled: true },\n strikethrough: { selected: false, disabled: true },\n subscript: { selected: false, disabled: true },\n superscript: { selected: false, disabled: true },\n //tools\n format: { selected: { text: 'Format', tag: null }, disabled: true },\n style: { selected: { marks: [], hasNodesWithoutMarks: false }, disabled: true },\n cleanFormatting: { selected: false, disabled: true },\n //indent\n indent: { selected: false, disabled: true },\n outdent: { selected: false, disabled: true },\n //lists\n insertOrderedList: { selected: false, disabled: true },\n insertUnorderedList: { selected: false, disabled: true },\n //links\n unlink: { selected: false, disabled: true },\n //history\n redo: { selected: false, disabled: true },\n undo: { selected: false, disabled: true },\n // print\n print: { selected: false, disabled: true },\n //dialogs\n createLink: { selected: false, disabled: true },\n insertFile: { selected: false, disabled: true },\n insertImage: { selected: false, disabled: true },\n viewSource: { selected: false, disabled: true },\n //table\n insertTable: { selected: false, disabled: true },\n addColumnBefore: { selected: false, disabled: true },\n addColumnAfter: { selected: false, disabled: true },\n addRowBefore: { selected: false, disabled: true },\n addRowAfter: { selected: false, disabled: true },\n deleteRow: { selected: false, disabled: true },\n deleteColumn: { selected: false, disabled: true },\n mergeCells: { selected: false, disabled: true },\n splitCell: { selected: false, disabled: true },\n deleteTable: { selected: false, disabled: true },\n // select all\n selectAll: { selected: false, disabled: true }\n};\n\n/**\n * @hidden\n */\nlet EditorLocalizationService = class EditorLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl) {\n super(prefix, messageService, _rtl);\n }\n};\nEditorLocalizationService.ɵfac = function EditorLocalizationService_Factory(t) { return new (t || EditorLocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(ɵngcc5.MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8)); };\nEditorLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: EditorLocalizationService, factory: function (t) { return EditorLocalizationService.ɵfac(t); } });\nEditorLocalizationService = __decorate([\n __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean])\n], EditorLocalizationService);\n\n/**\n * @hidden\n */\nlet SourceDialogComponent = class SourceDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.data = '';\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.textarea.nativeElement.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n this.editor.exec('setHTML', this.getData());\n this.dialog.close();\n this.editor.view.focus();\n }\n getData() {\n return this.textarea.nativeElement.value;\n }\n setData() {\n this.data = this.indent(this.editor.getSource());\n }\n textFor(key) {\n return this.localization.get(key);\n }\n indent(content) {\n return content\n .replace(/<\\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/gi, '\\n')\n .replace(/<(ul|ol)([^>]*)>
          • \\n/gi, '
            \\n')\n .replace(/\\n$/, '');\n }\n};\nSourceDialogComponent.ɵfac = function SourceDialogComponent_Factory(t) { return new (t || SourceDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nSourceDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SourceDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function SourceDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.textarea = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 9, vars: 5, consts: [[3, \"close\"], [1, \"k-textarea\", \"k-editor-textarea\", 3, \"value\"], [\"textarea\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"primary\", \"click\"]], template: function SourceDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function SourceDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"textarea\", 1, 2);\n ɵngcc0.ɵɵelementStart(4, \"kendo-dialog-actions\")(5, \"button\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function SourceDialogComponent_Template_button_click_5_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"button\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function SourceDialogComponent_Template_button_click_7_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(8);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"viewSource\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"value\", ctx.data);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogUpdate\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], styles: [\".k-editor-textarea {\\n height: 100%;\\n }\"] });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], SourceDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('textarea', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SourceDialogComponent.prototype, \"textarea\", void 0);\nSourceDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], SourceDialogComponent);\n\n/**\n * @hidden\n */\nlet ImageDialogComponent = class ImageDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.src = new FormControl('', Validators.required);\n this.alt = new FormControl('');\n this.width = new FormControl('', Validators.min(1));\n this.height = new FormControl('', Validators.min(1));\n this.data = {\n alt: '',\n height: '',\n src: '',\n width: ''\n };\n this.imageData = new FormGroup({\n alt: this.alt,\n height: this.height,\n src: this.src,\n width: this.width\n });\n }\n ngOnInit() {\n this.srcInputId = `k-${guid()}`;\n this.altTextInputId = `k-${guid()}`;\n this.widthInputId = `k-${guid()}`;\n this.heightInputId = `k-${guid()}`;\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.srcInput.nativeElement.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n if (this.src.value) {\n this.editor.exec('insertImage', this.getData());\n this.dialog.close();\n this.editor.view.focus();\n }\n }\n setData(state) {\n const node = getNodeFromSelection(state);\n if (node) {\n this.src.patchValue(node.attrs.src);\n this.alt.patchValue(node.attrs.alt);\n this.width.patchValue(node.attrs.width);\n this.height.patchValue(node.attrs.height);\n }\n }\n textFor(key) {\n return this.localization.get(key);\n }\n getData() {\n return {\n alt: this.alt.value,\n height: this.normalizeDimension(this.height.value),\n src: this.src.value,\n width: this.normalizeDimension(this.width.value)\n };\n }\n normalizeDimension(value) {\n return Number.isNaN(parseInt(value, 10)) || parseInt(value, 10) <= 0 ? '' : safeString(parseInt(value, 10));\n }\n};\nImageDialogComponent.ɵfac = function ImageDialogComponent_Factory(t) { return new (t || ImageDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nImageDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ImageDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function ImageDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c1, 7, ElementRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.srcInput = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 31, vars: 21, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\"], [1, \"k-edit-label\"], [3, \"for\"], [1, \"k-edit-field\"], [\"type\", \"text\", 1, \"k-textbox\", 3, \"id\", \"formControl\"], [\"srcInput\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"disabled\", \"primary\", \"click\"]], template: function ImageDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function ImageDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"div\", 4)(6, \"label\", 5);\n ɵngcc0.ɵɵtext(7);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(8, \"div\", 6);\n ɵngcc0.ɵɵelement(9, \"input\", 7, 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"div\", 4)(12, \"label\", 5);\n ɵngcc0.ɵɵtext(13);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(14, \"div\", 6);\n ɵngcc0.ɵɵelement(15, \"input\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(16, \"div\", 4)(17, \"label\", 5);\n ɵngcc0.ɵɵtext(18);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(19, \"div\", 6);\n ɵngcc0.ɵɵelement(20, \"input\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(21, \"div\", 4)(22, \"label\", 5);\n ɵngcc0.ɵɵtext(23);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(24, \"div\", 6);\n ɵngcc0.ɵɵelement(25, \"input\", 7);\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(26, \"kendo-dialog-actions\")(27, \"button\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function ImageDialogComponent_Template_button_click_27_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(28);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(29, \"button\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function ImageDialogComponent_Template_button_click_29_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(30);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"insertImage\"), \" \");\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"for\", ctx.srcInputId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"imageWebAddress\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.srcInputId)(\"formControl\", ctx.src);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"for\", ctx.altTextInputId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"imageAltText\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.altTextInputId)(\"formControl\", ctx.alt);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"for\", ctx.widthInputId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"imageWidth\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.widthInputId)(\"formControl\", ctx.width);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"for\", ctx.heightInputId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"imageHeight\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.heightInputId)(\"formControl\", ctx.height);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.imageData.invalid)(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogInsert\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, ɵngcc3.DefaultValueAccessor, ɵngcc3.NgControlStatus, ɵngcc3.FormControlDirective, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ImageDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('srcInput', { read: ElementRef, static: true }),\n __metadata(\"design:type\", ElementRef)\n], ImageDialogComponent.prototype, \"srcInput\", void 0);\nImageDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], ImageDialogComponent);\n\n/**\n * @hidden\n */\nlet FileLinkDialogComponent = class FileLinkDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.linkForm = new FormGroup({\n 'href': new FormControl('', Validators.required),\n 'text': new FormControl({ value: '', disabled: true }, Validators.required),\n 'title': new FormControl('')\n });\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.hrefInput.nativeElement.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n const linkData = this.getData();\n this.editor.exec(this.command, linkData);\n this.dialog.close();\n this.editor.view.focus();\n }\n get titleText() {\n return this.localization.get(this.command);\n }\n setData(state, options) {\n if (this.command === 'createLink') {\n this.linkForm.addControl('target', new FormControl());\n }\n const linkMark = getMark(state, state.schema.marks.link);\n if (linkMark) {\n // const linkMarkRange = getMarkRange(state.selection.$cursor, schema.marks.link);\n // const mark = parentNode.child(cursorNodeIndex).marks.find(m => m.type === markType);\n this.linkForm.reset({\n href: linkMark.attrs.href,\n title: linkMark.attrs.title,\n target: isPresent(linkMark.attrs.target),\n text: this.setLinkText(state)\n });\n return;\n }\n if (state.selection.empty) {\n const currentState = options.applyToWord ? expandSelection(state, () => { }, options).state : state;\n if (!currentState.selection.empty) {\n this.linkForm.patchValue({\n 'text': getSelectionText(currentState)\n });\n }\n }\n else {\n this.linkForm.patchValue({\n 'text': getSelectionText(state)\n });\n }\n }\n textForWithPrefix(key) {\n const prefix = this.command === 'createLink' ? 'link' : 'file';\n return this.textFor(prefix + key);\n }\n textFor(key) {\n return this.localization.get(key);\n }\n setLinkText(state) {\n const selection = state.selection;\n if (selection.empty && selection.$cursor) {\n const cursor = selection.$cursor;\n const cursorNodeIndex = cursor.index();\n const parentNode = cursor.parent;\n return parentNode.child(cursorNodeIndex).text;\n }\n else {\n return getSelectionText(state);\n }\n }\n getData() {\n let linkData = this.linkForm.value;\n if (isPresent(this.linkForm.controls.target)) {\n linkData.target = linkData.target ? '_blank' : null;\n }\n return linkData;\n }\n};\nFileLinkDialogComponent.ɵfac = function FileLinkDialogComponent_Factory(t) { return new (t || FileLinkDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nFileLinkDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FileLinkDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function FileLinkDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c2, 7, ElementRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.hrefInput = _t.first);\n } }, inputs: { editor: \"editor\", command: \"command\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 30, vars: 10, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\"], [\"novalidate\", \"\", 3, \"formGroup\"], [1, \"k-edit-label\"], [3, \"click\"], [1, \"k-edit-field\"], [\"formControlName\", \"href\", \"type\", \"text\", 1, \"k-textbox\"], [\"hrefInput\", \"\"], [\"formControlName\", \"text\", \"type\", \"text\", 1, \"k-textbox\"], [\"textInput\", \"\"], [\"formControlName\", \"title\", \"type\", \"text\", 1, \"k-textbox\"], [\"titleInput\", \"\"], [4, \"ngIf\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"disabled\", \"primary\", \"click\"], [\"type\", \"checkbox\", \"id\", \"k-target-blank\", \"formControlName\", \"target\", 1, \"k-checkbox\"], [\"for\", \"k-target-blank\", 1, \"k-checkbox-label\"]], template: function FileLinkDialogComponent_Template(rf, ctx) { if (rf & 1) {\n const _r4 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function FileLinkDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"form\", 4)(6, \"div\", 5)(7, \"label\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FileLinkDialogComponent_Template_label_click_7_listener() { ɵngcc0.ɵɵrestoreView(_r4); const _r0 = ɵngcc0.ɵɵreference(11); return _r0.focus(); });\n ɵngcc0.ɵɵtext(8);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(9, \"div\", 7);\n ɵngcc0.ɵɵelement(10, \"input\", 8, 9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"div\", 5)(13, \"label\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FileLinkDialogComponent_Template_label_click_13_listener() { ɵngcc0.ɵɵrestoreView(_r4); const _r1 = ɵngcc0.ɵɵreference(17); return _r1.focus(); });\n ɵngcc0.ɵɵtext(14);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(15, \"div\", 7);\n ɵngcc0.ɵɵelement(16, \"input\", 10, 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(18, \"div\", 5)(19, \"label\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FileLinkDialogComponent_Template_label_click_19_listener() { ɵngcc0.ɵɵrestoreView(_r4); const _r2 = ɵngcc0.ɵɵreference(23); return _r2.focus(); });\n ɵngcc0.ɵɵtext(20);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(21, \"div\", 7);\n ɵngcc0.ɵɵelement(22, \"input\", 12, 13);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(24, FileLinkDialogComponent_ng_container_24_Template, 6, 1, \"ng-container\", 14);\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(25, \"kendo-dialog-actions\")(26, \"button\", 15);\n ɵngcc0.ɵɵlistener(\"click\", function FileLinkDialogComponent_Template_button_click_26_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(27);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(28, \"button\", 16);\n ɵngcc0.ɵɵlistener(\"click\", function FileLinkDialogComponent_Template_button_click_28_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(29);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.titleText, \" \");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"formGroup\", ctx.linkForm);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx.textForWithPrefix(\"WebAddress\"));\n ɵngcc0.ɵɵadvance(6);\n ɵngcc0.ɵɵtextInterpolate(ctx.textForWithPrefix(\"Text\"));\n ɵngcc0.ɵɵadvance(6);\n ɵngcc0.ɵɵtextInterpolate(ctx.textForWithPrefix(\"Title\"));\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.command === \"createLink\");\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.linkForm.invalid)(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"dialogInsert\"), \" \");\n } }, directives: [ɵngcc1.DialogTitleBarComponent, ɵngcc3.ɵNgNoValidate, ɵngcc3.NgControlStatusGroup, ɵngcc3.FormGroupDirective, ɵngcc3.DefaultValueAccessor, ɵngcc3.NgControlStatus, ɵngcc3.FormControlName, ɵngcc4.NgIf, ɵngcc3.CheckboxControlValueAccessor, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FileLinkDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FileLinkDialogComponent.prototype, \"command\", void 0);\n__decorate([\n ViewChild('hrefInput', { read: ElementRef, static: true }),\n __metadata(\"design:type\", ElementRef)\n], FileLinkDialogComponent.prototype, \"hrefInput\", void 0);\nFileLinkDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef, EditorLocalizationService])\n], FileLinkDialogComponent);\n\n/**\n * @hidden\n */\nconst defaultStyle = `\nhtml, body {\n margin: 0;\n height: 100%;\n padding: 0;\n}\n\nhtml {\n min-height: 100%;\n}\n\nbody {\n box-sizing: border-box;\n position: relative;\n padding: 8px;\n}\n\n.ProseMirror-selectednode {\n outline: 2px solid #8cf;\n}\n\ndiv.ProseMirror {\n position: relative;\n min-height: 100%;\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\ndiv.ProseMirror:focus {\n outline: none;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\n.ProseMirror-hideselection *::selection { background: transparent; }\n.ProseMirror-hideselection *::-moz-selection { background: transparent; }\n.ProseMirror-hideselection { caret-color: transparent; }\n\n.ProseMirror li {\n position: relative;\n}\n\nli.ProseMirror-selectednode {\n outline: none;\n}\n\nli.ProseMirror-selectednode:after {\n content: \"\";\n position: absolute;\n left: -32px;\n right: -2px;\n top: -2px;\n bottom: -2px;\n border: 2px solid #8cf;\n pointer-events: none;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}\n\n.ProseMirror .k-placeholder::before {\n content: attr(data-placeholder);\n height: 0;\n color: #8a8a8a;\n float: left;\n opacity: 1;\n cursor: text;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n/* image resizing */\n.k-editor-resize-handles-wrapper {\n position: absolute;\n visibility: hidden;\n}\n\n.k-editor-resize-handle {\n position: absolute;\n visibility: visible;\n background-color: #fff;\n border: 1px solid #000;\n z-index: 100;\n width: 5px;\n height: 5px;\n}\n\n.k-editor-resize-handle.northwest {\n top: 0;\n left: 0;\n transform: translate(-50%, -50%);\n cursor: nw-resize;\n}\n\n.k-editor-resize-handle.north {\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n cursor: n-resize;\n}\n\n.k-editor-resize-handle.northeast {\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n cursor: ne-resize;\n}\n\n.k-editor-resize-handle.southwest {\n left: 0;\n bottom: 0;\n transform: translate(-50%, 50%);\n cursor: sw-resize;\n}\n\n.k-editor-resize-handle.south {\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 50%);\n cursor: s-resize;\n}\n\n.k-editor-resize-handle.southeast {\n right: 0;\n bottom: 0;\n transform: translate(50%, 50%);\n cursor: se-resize;\n}\n\n.k-editor-resize-handle.west {\n top: 50%;\n left: 0;\n transform: translate(-50%, -50%);\n cursor: w-resize;\n}\n\n.k-editor-resize-handle.east {\n top: 50%;\n right: 0;\n transform: translate(50%, -50%);\n cursor: e-resize;\n}\n`;\n/**\n * @hidden\n */\nconst tablesStyles = `\n .ProseMirror .tableWrapper {\n overflow-x: auto;\n margin: 1em 0;\n }\n\n .ProseMirror table {\n margin: 0;\n border-collapse: collapse;\n table-layout: fixed;\n width: 100%;\n overflow: hidden;\n }\n\n .ProseMirror td, .ProseMirror th {\n min-width: 1em;\n border: 1px solid #ddd;\n padding: 3px 5px;\n vertical-align: top;\n box-sizing: border-box;\n position: relative;\n }\n\n .ProseMirror th {\n font-weight: bold;\n text-align: left;\n }\n\n .ProseMirror .column-resize-handle {\n position: absolute;\n right: -2px;\n top: 0;\n bottom: 0;\n width: 4px;\n z-index: 20;\n background-color: #adf;\n pointer-events: none;\n }\n\n .ProseMirror.resize-cursor {\n cursor: ew-resize;\n cursor: col-resize;\n }\n\n /* Give selected cells a blue overlay */\n .ProseMirror .selectedCell:after {\n z-index: 2;\n position: absolute;\n content: \"\";\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: rgba(200, 200, 255, 0.4);\n pointer-events: none;\n }\n`;\n/**\n * @hidden\n */\nconst rtlStyles = 'body { direction: rtl }';\n\nconst ɵ0$6 = (arg) => `plugins must be a function, but received ${JSON.stringify(arg)}.`;\n/* tslint:disable:variable-name */\n/**\n * @hidden\n */\nconst EditorErrorMessages = {\n schemaType: 'Expected value of type Schema. See http://www.telerik.com/kendo-angular-ui/components/editor/schema/',\n setSchemaOnce: 'The Schema cannot be changed dynamically. See http://www.telerik.com/kendo-angular-ui/components/editor/schema/',\n pluginsCallbackType: ɵ0$6,\n setPluginsOnce: 'The plugins cannot be changed dynamically. See http://www.telerik.com/kendo-angular-ui/components/editor/plugins/',\n setPlaceHolderOnce: 'The placeholder cannot be changed dynamically. See http://www.telerik.com/kendo-angular-ui/components/editor/placeholder/',\n printTool: 'The Print tool and functionality are supported only in iframe mode. See https://www.telerik.com/kendo-angular-ui-develop/components/editor/api/EditorPrintButtonDirective/'\n};\n\n/**\n * @hidden\n */\nlet EditorToolsService = class EditorToolsService {\n /**\n * @hidden\n */\n constructor() {\n this.needsCheck = new Subject();\n }\n};\nEditorToolsService.ɵfac = function EditorToolsService_Factory(t) { return new (t || EditorToolsService)(); };\nEditorToolsService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: EditorToolsService, factory: function (t) { return EditorToolsService.ɵfac(t); } });\n\nvar EditorComponent_1;\nconst EMPTY_PARAGRAPH = '

            ';\nconst defaultPasteCleanupSettings = {\n convertMsLists: false,\n removeAttributes: [],\n removeHtmlComments: false,\n removeInvalidHTML: false,\n removeMsClasses: false,\n removeMsStyles: false,\n stripTags: ['']\n};\nconst removeCommentsIf = conditionallyExecute(removeComments);\nconst removeInvalidHTMLIf = conditionallyExecute(sanitize);\nconst getPasteCleanupAttributes = (config) => {\n if (config.removeAttributes === 'all') {\n return { '*': removeAttribute };\n }\n const initial = removeEmptyEntries({\n style: config.removeMsStyles ? sanitizeStyleAttr : undefined,\n class: config.removeMsClasses ? sanitizeClassAttr : undefined\n });\n return config.removeAttributes.reduce((acc, curr) => (Object.assign({}, acc, { [curr]: removeAttribute })), initial);\n};\n/**\n * Represents the [Kendo UI Editor component for Angular]({% slug overview_editor %}).\n */\nlet EditorComponent = EditorComponent_1 = class EditorComponent {\n constructor(dialogService, localization, cdr, ngZone, element, toolsService) {\n this.dialogService = dialogService;\n this.localization = localization;\n this.cdr = cdr;\n this.ngZone = ngZone;\n this.element = element;\n this.toolsService = toolsService;\n /**\n * If set to `false`, the Editor will run in style non-encapsulated mode. This means\n * that the styles of the page will be persisted in the Editor and its content will be affected by them.\n * @default true\n */\n this.iframe = true;\n /**\n * If set to `true` or `ApplyToWordOptions` object, commands that apply emphasis or inline styles will be applied to the whole word the cursor is in.\n * @default false\n */\n this.applyToWord = false;\n /**\n * By design, the Editor emits `valueChange`, updates the model and the ToolBar state on each keystroke.\n * When you are interested in ignoring the new values for a given amout of time and take only the most recent one, you can use the `updateInterval` property.\n * A possible use case is to get the new values and to update the ToolBar state at a maximum rate per second in order to speed up your application.\n * The specified interval (in milliseconds) should be a positive number.\n * By default the `updateInterval` is set to 100 miliseconds. If set to zero the delay will be disabled entirely.\n */\n this.updateInterval = 100;\n /**\n * By default, whitespace is collapsed as per HTML's rules.\n * Set to `true` to preserve whitespace, but normalize newlines to spaces.\n * Set to `'full'` to preserve whitespace entirely. In this case the default ProseMirror behavior is to parse white space into nodes.\n *\n * @default false\n */\n this.preserveWhitespace = false;\n /**\n * Determines whether the Editor can be resized ([see example]({% slug styling_editor %}#toc-resizable-editor)).\n * @default false\n */\n this.resizable = false;\n /**\n * Fires each time the value of the Editor is changed upon user interaction—\n * for example, when the value is updated through typing in the content area or using some of the Editor tools ([see example]({% slug overview_editor %}#toc-events)).\n * When the value of the Editor is programmatically changed through its API (`ngModel`) or form binding (`formControl`),\n * the `valueChange` event is not triggered because it might cause a mix-up with the\n * built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the content area of the Editor is focused ([see example]({% slug overview_editor %}#toc-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires when the content area of the Editor is blurred ([see example]({% slug overview_editor %}#toc-events)).\n */\n this.onBlur = new EventEmitter();\n this.hostClass = true;\n /**\n * @hidden\n */\n this.stateChange = new BehaviorSubject(initialToolBarState);\n /**\n * @hidden\n */\n this.valueModified = new Subject();\n this._readonly = false;\n this._placeholder = '';\n this.afterViewInit = new Subject();\n this.contentAreaLoaded = new Subject();\n this.onChangeCallback = (_) => { }; // tslint:disable-line:no-empty\n this.onTouchedCallback = (_) => { }; // tslint:disable-line:no-empty\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n // https://stackoverflow.com/questions/56572483/chrome-is-synchronously-handling-iframe-loading-whereas-firefox-handles-it-asyn\n this.subs = zip(this.afterViewInit.asObservable(), this.contentAreaLoaded.asObservable()).subscribe(() => this.initialize());\n }\n /**\n * Sets the value of the Editor ([see example]({% slug overview_editor %}#toc-basic-usage)).\n */\n set value(value) {\n if (this._previousValue === value) {\n return;\n }\n this._value = value;\n this._previousValue = value;\n if (this._view) {\n const iframeContentWindowNotPresent = this.iframe && !this.container.element.nativeElement.contentWindow;\n if (iframeContentWindowNotPresent) {\n return;\n }\n this.exec('setHTML', {\n content: this._value || '',\n parseOptions: {\n preserveWhitespace: this.preserveWhitespace\n }\n });\n }\n }\n get value() {\n let value = this._view ? this.getSource() : this._value;\n if (value === EMPTY_PARAGRAPH) {\n return this._value ? '' : this._value;\n }\n else {\n return value;\n }\n }\n /**\n * Sets the disabled state of the component.\n */\n set disabled(value) {\n this._disabled = value || false;\n if (this._view) {\n this._view.updateState(this._view.state);\n }\n if (this._disabled) {\n this.readonly = false;\n }\n if (this._disabled || this._readonly) {\n this.stateChange.next(disabledToolBarState);\n }\n else {\n this.stateChange.next(initialToolBarState);\n }\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets the read-only state of the component.\n */\n set readonly(value) {\n this._readonly = value || false;\n if (this._view) {\n // remove DOM selection\n let win;\n if (this.iframe) {\n win = this.container.element.nativeElement.contentWindow;\n }\n else {\n win = window;\n }\n const focusedNode = win.getSelection().focusNode;\n if (this._view.dom.contains(focusedNode)) {\n win.getSelection().removeAllRanges();\n }\n // remove ProseMirror selection\n const doc = this._view.state.doc;\n const tr = this._view.state.tr.setSelection(TextSelection.create(doc, 1));\n this._view.dispatch(tr);\n }\n if (this._readonly) {\n if (this.toolbar) {\n this.toolbar.tabindex = -1;\n }\n this.stateChange.next(disabledToolBarState);\n }\n else {\n if (this.toolbar) {\n this.toolbar.tabindex = 0;\n }\n this.stateChange.next(initialToolBarState);\n }\n }\n get readonly() {\n return this._readonly;\n }\n /**\n * Allows providing a custom schema. ([see example]({% slug schema_editor %}))\n */\n set schema(value) {\n if (isDevMode) {\n if (!(value instanceof Schema)) {\n throw new Error(EditorErrorMessages.schemaType);\n }\n if (this._view) {\n throw new Error(EditorErrorMessages.setSchemaOnce);\n }\n }\n this._schema = value;\n }\n get schema() {\n return this._schema;\n }\n /**\n * Defines a function which determines the plugins that will be used when initializing the Editor.\n * It exposes the default plugins collection as an argument, and returns\n * the plugins collection that will be used when creating the Editor component. ([see example]({% slug plugins_editor %}))\n *\n * ```ts-no-run\n * pluginsCallback(defaultPlugins: Plugin[]): Plugin[] {\n * const myPlugin = new Plugin({/custom plugin code/});\n * return [...defaultPlugins, myPlugin];\n * }\n * ```\n */\n set plugins(fn) {\n if (isDevMode) {\n if (typeof fn !== 'function') {\n throw new Error(EditorErrorMessages.pluginsCallbackType(fn));\n }\n if (this._view) {\n throw new Error(EditorErrorMessages.setPluginsOnce);\n }\n }\n this._plugins = fn;\n }\n get plugins() {\n return this._plugins;\n }\n /**\n * The hint, which is displayed when the component is empty.\n */\n set placeholder(value) {\n if (isDevMode && this._view) {\n throw new Error(EditorErrorMessages.setPlaceHolderOnce);\n }\n this._placeholder = value;\n }\n get placeholder() {\n return this._placeholder;\n }\n get resizableClass() {\n return !!this.resizable;\n }\n get isDisabled() {\n return this.disabled;\n }\n get isReadonly() {\n return this.readonly;\n }\n get isIE() {\n return this.iframe && detectIE();\n }\n get dir() {\n return this.direction;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get minWidth() {\n const resizableOptions = this.resizable;\n return resizableOptions.minWidth ? resizableOptions.minWidth + 'px' : undefined;\n }\n get maxWidth() {\n const resizableOptions = this.resizable;\n return resizableOptions.maxWidth ? resizableOptions.maxWidth + 'px' : undefined;\n }\n get minHeight() {\n const resizableOptions = this.resizable;\n return resizableOptions.minHeight ? resizableOptions.minHeight + 'px' : undefined;\n }\n get maxHeight() {\n const resizableOptions = this.resizable;\n return resizableOptions.maxHeight ? resizableOptions.maxHeight + 'px' : undefined;\n }\n get toolbar() {\n return this.defaultToolbarComponent || this.userToolBarComponent;\n }\n /**\n * Returns the ProseMirror [EditorView](https://prosemirror.net/docs/ref/#view.EditorView) object\n * that manages the DOM structure that represents an editable document.\n */\n get view() {\n return this._view;\n }\n /**\n * Returns the text which the current Editor selection contains ([see example]({% slug selection_editor %}#toc-retrieve-the-selected-text)).\n */\n get selectionText() {\n return this._view && this._view.state ? getSelectionText(this._view.state) : '';\n }\n ngOnInit() {\n this.subs.add(this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n }));\n this.subs.add(this.toolsService.needsCheck.subscribe(() => this.cdr.markForCheck()));\n }\n ngAfterViewInit() {\n this.afterViewInit.next();\n if (!this.iframe) {\n this.contentAreaLoaded.next();\n }\n if (this.resizable) {\n this.normalizeSize();\n }\n }\n ngOnChanges(changes) {\n if (changes.iframe && !changes.iframe.isFirstChange()) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.initialize());\n }\n if (changes.resizable && !changes.resizable.isFirstChange()) {\n this.normalizeSize();\n }\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n iframeOnLoad() {\n this.contentAreaLoaded.next();\n }\n /**\n * Executes a command on the currently selected text\n * ([more information and example]({% slug toolbartools_editor %}#toc-custom-tools)).\n *\n * @param {EditorCommand} commandName - The command that will be executed.\n * @param {any} attr - Optional parameters for the command. Apart from the following list,\n * the parameters do not expect specific attributes when you call them:\n * - `format` - Accepts an object with the `tag` property.\n * The supported tags are `p`, `blockquote`, and any of the `h1` to `h6` heading tags.\n * - `createLink` - Accepts an object with the `href`, `title`, and `target` properties. The `href` property is mandatory.\n * - `setHTML` - Accepts a `string` parameter.\n * - `insertTable` - Accepts an object with the `rows` and `cols` properties. The number values are zero based.\n *\n * @example\n * ```ts-no-run\n * // Toggles the bold styling.\n * editor.exec('bold');\n *\n * // Creates a bullet list.\n * editor.exec('insertUnorderedList');\n *\n * // Creates a link.\n * editor.exec('createLink', { href: 'www.progress.com', title: 'Progress', target: 'window' });\n *\n * // Inserts a file.\n * editor.exec('insertFile', { href: 'www.progress.com/resources/myfile.doc', title: 'My file', target: 'window' });\n *\n * // Inserts a image.\n * editor.exec('insertImage', { src: 'www.progress.com/resources/logo.jpg', title: 'Progress', target: 'window' });\n *\n * // Inserts a text at a given position. If no position is specified, the text will be inserted after the cursor.\n * editor.exec('insertText', { text: 'Hello World!', from: 0, to: 0 });\n *\n * // Changes the format of a text block.\n * editor.exec('format', { tag: 'h2' });\n *\n * // Changes the font size of the selected text.\n * editor.exec('fontSize', 24);\n *\n * // Changes the content of the Editor.\n * editor.exec('setHTML', '

            HTML content

            ');\n *\n * // Creates and inserts a table with the specified number of rows and columns. Numbers are zero based.\n * this.editor.exec(\"insertTable\", { rows: 3, cols: 5 });\n * ```\n */\n exec(commandName, attr) {\n // normalizes setHTML attributes\n if (commandName === 'setHTML' && typeof attr === 'string') {\n attr = {\n content: attr,\n parseOptions: {\n preserveWhitespace: this.preserveWhitespace\n }\n };\n }\n else if (['fontFamily', 'fontSize', 'foreColor', 'backColor', 'createLink'].some(name => name === commandName)) {\n attr = {\n value: attr,\n applyToWord: this.applyToWord\n };\n }\n // Finds a command and applies the attributes.\n const command = editorCommands[commandName](attr);\n // Executes a ProseMirror command.\n command(this._view.state, this._view.dispatch, this._view);\n // See the `dispatchTransaction` comments.\n // this.stateChange.emit(updateToolBar(this.view));\n }\n /**\n * Opens a dialog.\n * @param {DialogCommand} dialogName - The name of the dialog that will open.\n *\n * The supported values are:\n * * `createLink`\n * * `viewSource`\n * * `insertFile`\n * * `insertImage`\n * * `tableWizard`\n *\n * @example\n * ```ts-no-run\n * // Opens a `createLink` dialog.\n * editor.openDialog('createLink');\n *\n * // Opens a `viewSource` dialog.\n * editor.openDialog('viewSource');\n * ```\n */\n openDialog(dialogName) {\n const editorDialogs = {\n createLink: {\n content: FileLinkDialogComponent\n },\n insertFile: {\n content: FileLinkDialogComponent\n },\n insertImage: {\n content: ImageDialogComponent\n },\n viewSource: {\n content: SourceDialogComponent,\n height: 400,\n width: 500\n }\n // tableWizard: {\n // content: TableWizardDialogComponent\n // }\n };\n const dialog = Object.assign({ appendTo: this.dialogContainer }, editorDialogs[dialogName]);\n this.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialog).content.instance;\n if (dialogName === 'createLink' || dialogName === 'insertFile') {\n dialogContent.command = dialogName;\n }\n dialogContent.editor = this;\n dialogContent.setData(this._view.state, { applyToWord: this.applyToWord });\n }\n /**\n * Manually focus the Editor.\n */\n focus() {\n this.focusChangedProgrammatically = true;\n this._view.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Manually blur the Editor.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n this._view.dom.blur();\n this.focusChangedProgrammatically = false;\n }\n /**\n * @hidden\n */\n getSource() {\n return getHtml(this._view.state);\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n if (this._styleObserver) {\n this._styleObserver.disconnect();\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n // To avoid confusion, non-existent values are always undefined.\n this.value = value === null ? undefined : value;\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 * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n initialize() {\n if (!isDocumentAvailable()) {\n return;\n }\n const currentSchema = this.schema || schema;\n const that = this;\n const containerNativeElement = this.container.element.nativeElement;\n const contentNode = parseContent((this.value || '').trim(), currentSchema, { preserveWhitespace: this.preserveWhitespace });\n if (this.iframe) {\n const iframeDoc = containerNativeElement.contentDocument;\n const meta = iframeDoc.createElement('meta');\n meta.setAttribute('charset', 'utf-8');\n iframeDoc.head.appendChild(meta);\n [defaultStyle, tablesStyles, this.dir === 'rtl' ? rtlStyles : undefined].forEach(styles => {\n if (styles) {\n const style = iframeDoc.createElement('style');\n style.appendChild(iframeDoc.createTextNode(styles));\n iframeDoc.head.appendChild(style);\n }\n });\n const element = iframeDoc.createElement('div');\n iframeDoc.body.appendChild(element);\n }\n else {\n const element = document.createElement('div');\n containerNativeElement.appendChild(element);\n }\n const defaultPlugins = [\n new Plugin({\n key: new PluginKey('editor-tabindex'),\n props: {\n attributes: () => ({\n // set tabindex when contenteditable is false, so that the content area can be selected\n tabIndex: this.readonly ? '0' : ''\n })\n }\n }),\n new Plugin({\n key: new PluginKey('toolbar-tools-update'),\n view: () => ({\n update: editorView => {\n if (!this.disabled) {\n this.stateChange.next(this.readonly ? disabledToolBarState : getToolbarState(editorView.state, { applyToWord: this.applyToWord }));\n }\n }\n })\n }),\n new Plugin({\n key: new PluginKey('editor-filter-disabled-state'),\n filterTransaction: () => !this.disabled\n }),\n history(),\n keymap(buildListKeymap(currentSchema)),\n keymap(buildKeymap(currentSchema, { applyToWord: this.applyToWord })),\n keymap(baseKeymap),\n gapCursor(),\n imageResizing()\n ];\n if (this.placeholder) {\n defaultPlugins.push(placeholder(this.placeholder));\n }\n const state = EditorState.create({\n schema: currentSchema,\n doc: contentNode,\n plugins: isPresent(this.plugins) ? this.plugins(defaultPlugins) : defaultPlugins\n });\n if (this.iframe) {\n this.viewMountElement = containerNativeElement.contentDocument.querySelector('div');\n }\n else {\n this.viewMountElement = containerNativeElement.querySelector('div');\n }\n this.ngZone.runOutsideAngular(() => {\n this._view = new EditorView({ mount: this.viewMountElement }, {\n state,\n editable: () => !this.readonly,\n dispatchTransaction: function (tr) {\n // `this` is bound to the view instance.\n this.updateState(this.state.apply(tr));\n // that.cdr.detectChanges();\n // When the user utilizes keyboard shortcuts—for example, `Ctrl`+`b`—\n // `tr.docChanged` is `true` and the toolbar is not updated.\n // A possible future solution is to move the keymaps to the service.\n // if (!tr.docChanged) {\n // that.stateChange.emit(updateToolBar(that.view));\n // }\n const value = that.value;\n if (!hasSameMarkup(value, that._previousValue, this.state.schema)) {\n that._previousValue = value;\n that.ngZone.run(() => that.valueModified.next(value));\n }\n },\n transformPastedHTML: (html) => {\n const pasteCleanupSettings = Object.assign({}, defaultPasteCleanupSettings, this.pasteCleanupSettings);\n const clean = pipe(removeCommentsIf(pasteCleanupSettings.removeHtmlComments), removeInvalidHTMLIf(pasteCleanupSettings.removeInvalidHTML))(html);\n const attributes = getPasteCleanupAttributes(pasteCleanupSettings);\n return pasteCleanup(clean, {\n convertMsLists: pasteCleanupSettings.convertMsLists,\n stripTags: pasteCleanupSettings.stripTags.join('|'),\n attributes\n });\n }\n });\n });\n if (this._view) {\n let containerElement;\n const contentAreaClasslist = this.element.nativeElement.querySelector('.k-editor-content').classList;\n if (this.iframe) {\n containerElement = this.container.element.nativeElement.contentDocument;\n }\n else {\n containerElement = this.container.element.nativeElement;\n }\n this.subs.add(fromEvent(containerElement, 'focusin')\n .subscribe(() => {\n if (this.readonly) {\n contentAreaClasslist.add('k-state-focused');\n }\n if (!this.focusChangedProgrammatically || this.shouldEmitFocus) {\n this.ngZone.run(() => this.onFocus.emit());\n this.shouldEmitFocus = false;\n }\n }));\n this.subs.add(fromEvent(containerElement, 'focusout')\n .subscribe(() => {\n if (this.readonly) {\n contentAreaClasslist.remove('k-state-focused');\n }\n if (!this.focusChangedProgrammatically) {\n this.ngZone.run(() => this.onBlur.emit());\n }\n }));\n }\n this.subs.add(this.stateChange.subscribe(() => {\n if (this.userToolBarComponent) {\n this.userToolBarComponent.cdr.detectChanges();\n }\n else {\n this.cdr.detectChanges();\n }\n }));\n this.subs.add(merge(this.valueModified.pipe(filter(() => this.updateInterval > 0), auditTime(this.updateInterval)), this.valueModified.pipe(filter(() => this.updateInterval === 0))).subscribe((value) => {\n this.onChangeCallback(value);\n this.valueChange.emit(value);\n this.cdr.markForCheck();\n }));\n this.subs.add(fromEvent(this.viewMountElement, 'keyup')\n .pipe(map((e) => e.keyCode), filter((code) => code === 121), // F10\n map(() => this.userToolBarElement || this.defaultToolbar))\n .subscribe((toolbar) => toolbar.nativeElement.focus()));\n this.subs.add(fromEvent(this.viewMountElement, 'blur')\n .pipe(filter((event) => !this.viewMountElement.contains(event.relatedTarget)))\n .subscribe(() => this.onTouchedCallback()));\n }\n normalizeSize() {\n if (typeof this.resizable === 'object' && !this._styleObserver) {\n const element = this.element.nativeElement;\n this._styleObserver = new MutationObserver(() => {\n this.ngZone.runOutsideAngular(() => this.normalizeProperties(element));\n });\n this._styleObserver.observe(element, { attributeFilter: ['style'] });\n }\n }\n normalizeProperties(element) {\n const props = Object.keys(this.resizable);\n const pixelWidth = parseInt(element.style.width, 10);\n const pixelHeight = parseInt(element.style.height, 10);\n const resizable = this.resizable;\n props.forEach(prop => {\n const isMinProp = prop.startsWith('min');\n const isMaxProp = !isMinProp;\n const isWidthProp = prop.endsWith('Width');\n const isHeightProp = !isWidthProp;\n if (isMinProp && isWidthProp) {\n if (pixelWidth < resizable.minWidth) {\n element.style.width = resizable.minWidth + 'px';\n }\n }\n else if (isMinProp && isHeightProp) {\n if (pixelHeight < resizable.minHeight) {\n element.style.height = resizable.minHeight + 'px';\n }\n }\n else if (isMaxProp && isWidthProp) {\n if (pixelWidth > resizable.maxWidth) {\n element.style.width = resizable.maxWidth + 'px';\n }\n }\n else {\n if (pixelHeight > resizable.maxHeight) {\n element.style.height = resizable.maxHeight + 'px';\n }\n }\n });\n }\n};\nEditorComponent.ɵfac = function EditorComponent_Factory(t) { return new (t || EditorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorComponent, selectors: [[\"kendo-editor\"]], contentQueries: function EditorComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolBarComponent, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolBarComponent, 5, ElementRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.userToolBarComponent = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.userToolBarElement = _t.first);\n } }, viewQuery: function EditorComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c3, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c4, 5, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c5, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c5, 5, ToolBarComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultToolbar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultToolbarComponent = _t.first);\n } }, hostVars: 20, hostBindings: function EditorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir)(\"ariaDisabled\", ctx.ariaDisabled);\n ɵngcc0.ɵɵstyleProp(\"min-width\", ctx.minWidth)(\"max-width\", ctx.maxWidth)(\"min-height\", ctx.minHeight)(\"max-height\", ctx.maxHeight);\n ɵngcc0.ɵɵclassProp(\"k-editor\", ctx.hostClass)(\"k-editor-resizable\", ctx.resizableClass)(\"k-state-disabled\", ctx.isDisabled)(\"k-readonly\", ctx.isReadonly)(\"k-ie\", ctx.isIE);\n } }, inputs: { iframe: \"iframe\", applyToWord: \"applyToWord\", updateInterval: \"updateInterval\", preserveWhitespace: \"preserveWhitespace\", resizable: \"resizable\", value: \"value\", disabled: \"disabled\", readonly: \"readonly\", schema: \"schema\", plugins: \"plugins\", placeholder: \"placeholder\", pasteCleanupSettings: \"pasteCleanupSettings\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n EditorLocalizationService,\n EditorToolsService,\n {\n provide: LocalizationService,\n useExisting: EditorLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.editor'\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent_1),\n multi: true\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => EditorComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c111, decls: 7, vars: 3, consts: function () { let i18n_6; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that aligns text in the center.\n * @meaning kendo.editor.alignCenter\n */\n const MSG_EXTERNAL_4529292660735098393$$DIST_FESM2015_INDEX_JS_7 = goog.getMsg(\"Center text\");\n i18n_6 = MSG_EXTERNAL_4529292660735098393$$DIST_FESM2015_INDEX_JS_7;\n }\n else {\n i18n_6 = $localize `:kendo.editor.alignCenter|The title of the tool that aligns text in the center.␟c19b9de1395639d8d6906083e06a682537d548b8␟4529292660735098393:Center text`;\n } let i18n_8; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that justifies text both left and right.\n * @meaning kendo.editor.alignJustify\n */\n const MSG_EXTERNAL_4684700365643535728$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"Justify\");\n i18n_8 = MSG_EXTERNAL_4684700365643535728$$DIST_FESM2015_INDEX_JS_9;\n }\n else {\n i18n_8 = $localize `:kendo.editor.alignJustify|The title of the tool that justifies text both left and right.␟6fd8af3052680f0e8af558f02aafbdae846763ad␟4684700365643535728:Justify`;\n } let i18n_10; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that aligns text on the left.\n * @meaning kendo.editor.alignLeft\n */\n const MSG_EXTERNAL_154382826604788564$$DIST_FESM2015_INDEX_JS_11 = goog.getMsg(\"Align text left\");\n i18n_10 = MSG_EXTERNAL_154382826604788564$$DIST_FESM2015_INDEX_JS_11;\n }\n else {\n i18n_10 = $localize `:kendo.editor.alignLeft|The title of the tool that aligns text on the left.␟0e6294e25d0445bf78814703fc3db0f9275cdfaf␟154382826604788564:Align text left`;\n } let i18n_12; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that aligns text on the right.\n * @meaning kendo.editor.alignRight\n */\n const MSG_EXTERNAL_947503876024297122$$DIST_FESM2015_INDEX_JS_13 = goog.getMsg(\"Align text right\");\n i18n_12 = MSG_EXTERNAL_947503876024297122$$DIST_FESM2015_INDEX_JS_13;\n }\n else {\n i18n_12 = $localize `:kendo.editor.alignRight|The title of the tool that aligns text on the right.␟e42635af2f5e2255fe4e5e4259139bed6771d5b0␟947503876024297122:Align text right`;\n } let i18n_14; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that changes the text background color.\n * @meaning kendo.editor.backColor\n */\n const MSG_EXTERNAL_6855434377775366481$$DIST_FESM2015_INDEX_JS_15 = goog.getMsg(\"Background color\");\n i18n_14 = MSG_EXTERNAL_6855434377775366481$$DIST_FESM2015_INDEX_JS_15;\n }\n else {\n i18n_14 = $localize `:kendo.editor.backColor|The title of the tool that changes the text background color.␟94feffd30b062ee0ef8aac49af5faebc986b79ee␟6855434377775366481:Background color`;\n } let i18n_16; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that makes text bold.\n * @meaning kendo.editor.bold\n */\n const MSG_EXTERNAL_2189266817166266173$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"Bold\");\n i18n_16 = MSG_EXTERNAL_2189266817166266173$$DIST_FESM2015_INDEX_JS_17;\n }\n else {\n i18n_16 = $localize `:kendo.editor.bold|The title of the tool that makes text bold.␟e1a1b567ad44320e7949153f90b735a000e0dd54␟2189266817166266173:Bold`;\n } let i18n_18; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Clean Formatting tool.\n * @meaning kendo.editor.cleanFormatting\n */\n const MSG_EXTERNAL_6409775087646476318$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"Clean formatting\");\n i18n_18 = MSG_EXTERNAL_6409775087646476318$$DIST_FESM2015_INDEX_JS_19;\n }\n else {\n i18n_18 = $localize `:kendo.editor.cleanFormatting|The title of the Clean Formatting tool.␟6ee3ea0c48aeb94e9ed4b728391edc424c5b2b90␟6409775087646476318:Clean formatting`;\n } let i18n_20; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that creates hyperlinks.\n * @meaning kendo.editor.createLink\n */\n const MSG_EXTERNAL_2895696791468415067$$DIST_FESM2015_INDEX_JS_21 = goog.getMsg(\"Insert link\");\n i18n_20 = MSG_EXTERNAL_2895696791468415067$$DIST_FESM2015_INDEX_JS_21;\n }\n else {\n i18n_20 = $localize `:kendo.editor.createLink|The title of the tool that creates hyperlinks.␟a0857ff55fd21727d74e873d164f6785c4a1d2a4␟2895696791468415067:Insert link`;\n } let i18n_22; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the **Apply** button in all editor dialogs.\n * @meaning kendo.editor.dialogApply\n */\n const MSG_EXTERNAL_3478270206890847719$$DIST_FESM2015_INDEX_JS_23 = goog.getMsg(\"Apply\");\n i18n_22 = MSG_EXTERNAL_3478270206890847719$$DIST_FESM2015_INDEX_JS_23;\n }\n else {\n i18n_22 = $localize `:kendo.editor.dialogApply|The label of the **Apply** button in all editor dialogs.␟0205d0783c43657539254c5d8cd37d4a88911f1d␟3478270206890847719:Apply`;\n } let i18n_24; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the **Cancel** button in all editor dialogs.\n * @meaning kendo.editor.dialogCancel\n */\n const MSG_EXTERNAL_1436637880389464255$$DIST_FESM2015_INDEX_JS_25 = goog.getMsg(\"Cancel\");\n i18n_24 = MSG_EXTERNAL_1436637880389464255$$DIST_FESM2015_INDEX_JS_25;\n }\n else {\n i18n_24 = $localize `:kendo.editor.dialogCancel|The label of the **Cancel** button in all editor dialogs.␟62c847eb7dfe44fa70224659b77a69e04ad24e98␟1436637880389464255:Cancel`;\n } let i18n_26; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the **Insert** button in all editor dialogs.\n * @meaning kendo.editor.dialogInsert\n */\n const MSG_EXTERNAL_1902538342017591848$$DIST_FESM2015_INDEX_JS_27 = goog.getMsg(\"Insert\");\n i18n_26 = MSG_EXTERNAL_1902538342017591848$$DIST_FESM2015_INDEX_JS_27;\n }\n else {\n i18n_26 = $localize `:kendo.editor.dialogInsert|The label of the **Insert** button in all editor dialogs.␟e2897c2d92e5b0f60dbc34568ea63ee29aac72b1␟1902538342017591848:Insert`;\n } let i18n_28; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the **Update** button in all editor dialogs.\n * @meaning kendo.editor.dialogUpdate\n */\n const MSG_EXTERNAL_3131813297607973618$$DIST_FESM2015_INDEX_JS_29 = goog.getMsg(\"Update\");\n i18n_28 = MSG_EXTERNAL_3131813297607973618$$DIST_FESM2015_INDEX_JS_29;\n }\n else {\n i18n_28 = $localize `:kendo.editor.dialogUpdate|The label of the **Update** button in all editor dialogs.␟da599b240288c66d5682ecf53647fae17b1f255d␟3131813297607973618:Update`;\n } let i18n_30; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the file text in the insertFile dialog.\n * @meaning kendo.editor.fileText\n */\n const MSG_EXTERNAL_2994440335095238335$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"Text\");\n i18n_30 = MSG_EXTERNAL_2994440335095238335$$DIST_FESM2015_INDEX_JS_31;\n }\n else {\n i18n_30 = $localize `:kendo.editor.fileText|The caption for the file text in the insertFile dialog.␟b9e9c0726907339811d576fbecf9ee7ef25228dd␟2994440335095238335:Text`;\n } let i18n_32; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the file Title in the insertFile dialog.\n * @meaning kendo.editor.fileTitle\n */\n const MSG_EXTERNAL_2270852727137392864$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"Title\");\n i18n_32 = MSG_EXTERNAL_2270852727137392864$$DIST_FESM2015_INDEX_JS_33;\n }\n else {\n i18n_32 = $localize `:kendo.editor.fileTitle|The caption for the file Title in the insertFile dialog.␟773650e91245315dd99ba76678b651035d896449␟2270852727137392864:Title`;\n } let i18n_34; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the file URL in the insertFile dialog.\n * @meaning kendo.editor.fileWebAddress\n */\n const MSG_EXTERNAL_272090133902355251$$DIST_FESM2015_INDEX_JS_35 = goog.getMsg(\"Web address\");\n i18n_34 = MSG_EXTERNAL_272090133902355251$$DIST_FESM2015_INDEX_JS_35;\n }\n else {\n i18n_34 = $localize `:kendo.editor.fileWebAddress|The caption for the file URL in the insertFile dialog.␟920e262f27d93e37174869fe53fbda129edd6220␟272090133902355251:Web address`;\n } let i18n_36; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that changes the text font.\n * @meaning kendo.editor.fontFamily\n */\n const MSG_EXTERNAL_2242101754750506857$$DIST_FESM2015_INDEX_JS_37 = goog.getMsg(\"Select font family\");\n i18n_36 = MSG_EXTERNAL_2242101754750506857$$DIST_FESM2015_INDEX_JS_37;\n }\n else {\n i18n_36 = $localize `:kendo.editor.fontFamily|The title of the tool that changes the text font.␟b3c7dd6b566ab94cbad12176f608f617394069a5␟2242101754750506857:Select font family`;\n } let i18n_38; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that changes the text size.\n * @meaning kendo.editor.fontSize\n */\n const MSG_EXTERNAL_3134383620280891369$$DIST_FESM2015_INDEX_JS_39 = goog.getMsg(\"Select font size\");\n i18n_38 = MSG_EXTERNAL_3134383620280891369$$DIST_FESM2015_INDEX_JS_39;\n }\n else {\n i18n_38 = $localize `:kendo.editor.fontSize|The title of the tool that changes the text size.␟1e36b676782998a979c662191a815b60e212b1e4␟3134383620280891369:Select font size`;\n } let i18n_40; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that changes the text color.\n * @meaning kendo.editor.foreColor\n */\n const MSG_EXTERNAL_5478978124365341523$$DIST_FESM2015_INDEX_JS_41 = goog.getMsg(\"Color\");\n i18n_40 = MSG_EXTERNAL_5478978124365341523$$DIST_FESM2015_INDEX_JS_41;\n }\n else {\n i18n_40 = $localize `:kendo.editor.foreColor|The title of the tool that changes the text color.␟6b7246584279a0e44d9bd9cb953a0c701696d059␟5478978124365341523:Color`;\n } let i18n_42; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that lets users choose block formats.\n * @meaning kendo.editor.format\n */\n const MSG_EXTERNAL_7573626268088286043$$DIST_FESM2015_INDEX_JS_43 = goog.getMsg(\"Format\");\n i18n_42 = MSG_EXTERNAL_7573626268088286043$$DIST_FESM2015_INDEX_JS_43;\n }\n else {\n i18n_42 = $localize `:kendo.editor.format|The title of the tool that lets users choose block formats.␟27423769f36c1e1662739fe78b0a29f8449ca2ed␟7573626268088286043:Format`;\n } let i18n_44; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the image alternate text in the insertImage dialog.\n * @meaning kendo.editor.imageAltText\n */\n const MSG_EXTERNAL_2605419586703055723$$DIST_FESM2015_INDEX_JS_45 = goog.getMsg(\"Alternate text\");\n i18n_44 = MSG_EXTERNAL_2605419586703055723$$DIST_FESM2015_INDEX_JS_45;\n }\n else {\n i18n_44 = $localize `:kendo.editor.imageAltText|The caption for the image alternate text in the insertImage dialog.␟588c2538a305890410558065bbb376099873f059␟2605419586703055723:Alternate text`;\n } let i18n_46; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the image height in the insertImage dialog.\n * @meaning kendo.editor.imageHeight\n */\n const MSG_EXTERNAL_7389256657313538937$$DIST_FESM2015_INDEX_JS_47 = goog.getMsg(\"Height (px)\");\n i18n_46 = MSG_EXTERNAL_7389256657313538937$$DIST_FESM2015_INDEX_JS_47;\n }\n else {\n i18n_46 = $localize `:kendo.editor.imageHeight|The caption for the image height in the insertImage dialog.␟1f22b7da203eebe3e1efd22cc86aa9b990b0c16f␟7389256657313538937:Height (px)`;\n } let i18n_48; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the image URL in the insertImage dialog.\n * @meaning kendo.editor.imageWebAddress\n */\n const MSG_EXTERNAL_6975958345731927150$$DIST_FESM2015_INDEX_JS_49 = goog.getMsg(\"Web address\");\n i18n_48 = MSG_EXTERNAL_6975958345731927150$$DIST_FESM2015_INDEX_JS_49;\n }\n else {\n i18n_48 = $localize `:kendo.editor.imageWebAddress|The caption for the image URL in the insertImage dialog.␟31537a903057886e7fb1a79cd5cde73a649a8ed6␟6975958345731927150:Web address`;\n } let i18n_50; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the image width in the insertImage dialog.\n * @meaning kendo.editor.imageWidth\n */\n const MSG_EXTERNAL_8309100232203036921$$DIST_FESM2015_INDEX_JS_51 = goog.getMsg(\"Width (px)\");\n i18n_50 = MSG_EXTERNAL_8309100232203036921$$DIST_FESM2015_INDEX_JS_51;\n }\n else {\n i18n_50 = $localize `:kendo.editor.imageWidth|The caption for the image width in the insertImage dialog.␟4f26f47317f5b69c192fbc9cafecb432e8fa8ee5␟8309100232203036921:Width (px)`;\n } let i18n_52; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that indents the content.\n * @meaning kendo.editor.indent\n */\n const MSG_EXTERNAL_5647108364628468094$$DIST_FESM2015_INDEX_JS_53 = goog.getMsg(\"Indent\");\n i18n_52 = MSG_EXTERNAL_5647108364628468094$$DIST_FESM2015_INDEX_JS_53;\n }\n else {\n i18n_52 = $localize `:kendo.editor.indent|The title of the tool that indents the content.␟332319db3aabf32cd56e64e1569276c5f878fd5d␟5647108364628468094:Indent`;\n } let i18n_54; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that inserts links to files.\n * @meaning kendo.editor.insertFile\n */\n const MSG_EXTERNAL_539957110154874519$$DIST_FESM2015_INDEX_JS_55 = goog.getMsg(\"Insert file\");\n i18n_54 = MSG_EXTERNAL_539957110154874519$$DIST_FESM2015_INDEX_JS_55;\n }\n else {\n i18n_54 = $localize `:kendo.editor.insertFile|The title of the tool that inserts links to files.␟f57591626833e959e88b177754c2e996119a3c1a␟539957110154874519:Insert file`;\n } let i18n_56; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that inserts images.\n * @meaning kendo.editor.insertImage\n */\n const MSG_EXTERNAL_3091202802113261385$$DIST_FESM2015_INDEX_JS_57 = goog.getMsg(\"Insert image\");\n i18n_56 = MSG_EXTERNAL_3091202802113261385$$DIST_FESM2015_INDEX_JS_57;\n }\n else {\n i18n_56 = $localize `:kendo.editor.insertImage|The title of the tool that inserts images.␟759c8463401821450bfa80fd9106314adab25ca3␟3091202802113261385:Insert image`;\n } let i18n_58; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that inserts an ordered list.\n * @meaning kendo.editor.insertOrderedList\n */\n const MSG_EXTERNAL_4334727692818265844$$DIST_FESM2015_INDEX_JS_59 = goog.getMsg(\"Insert ordered list\");\n i18n_58 = MSG_EXTERNAL_4334727692818265844$$DIST_FESM2015_INDEX_JS_59;\n }\n else {\n i18n_58 = $localize `:kendo.editor.insertOrderedList|The title of the tool that inserts an ordered list.␟9de4d5df2c52ec20dda585ddf9046b64042a63dc␟4334727692818265844:Insert ordered list`;\n } let i18n_60; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that inserts an unordered list.\n * @meaning kendo.editor.insertUnorderedList\n */\n const MSG_EXTERNAL_6391583758449842507$$DIST_FESM2015_INDEX_JS_61 = goog.getMsg(\"Insert unordered list\");\n i18n_60 = MSG_EXTERNAL_6391583758449842507$$DIST_FESM2015_INDEX_JS_61;\n }\n else {\n i18n_60 = $localize `:kendo.editor.insertUnorderedList|The title of the tool that inserts an unordered list.␟2c56625f542e63a0fcb2cdfff32ac7958a773131␟6391583758449842507:Insert unordered list`;\n } let i18n_62; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that makes text italicized.\n * @meaning kendo.editor.italic\n */\n const MSG_EXTERNAL_7054357458452689543$$DIST_FESM2015_INDEX_JS_63 = goog.getMsg(\"Italic\");\n i18n_62 = MSG_EXTERNAL_7054357458452689543$$DIST_FESM2015_INDEX_JS_63;\n }\n else {\n i18n_62 = $localize `:kendo.editor.italic|The title of the tool that makes text italicized.␟0c2f657b2d63906813f0d999c34639d6703d29fe␟7054357458452689543:Italic`;\n } let i18n_64; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the checkbox for opening the link in a new window in the createLink dialog.\n * @meaning kendo.editor.linkOpenInNewWindow\n */\n const MSG_EXTERNAL_6304412528521452300$$DIST_FESM2015_INDEX_JS_65 = goog.getMsg(\"Open link in new window\");\n i18n_64 = MSG_EXTERNAL_6304412528521452300$$DIST_FESM2015_INDEX_JS_65;\n }\n else {\n i18n_64 = $localize `:kendo.editor.linkOpenInNewWindow|The caption for the checkbox for opening the link in a new window in the createLink dialog.␟7ddbe5ff681ec56e0a1d47f55baf03aae43143f0␟6304412528521452300:Open link in new window`;\n } let i18n_66; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the link text in the createLink dialog.\n * @meaning kendo.editor.linkText\n */\n const MSG_EXTERNAL_8060045722754477150$$DIST_FESM2015_INDEX_JS_67 = goog.getMsg(\"Text\");\n i18n_66 = MSG_EXTERNAL_8060045722754477150$$DIST_FESM2015_INDEX_JS_67;\n }\n else {\n i18n_66 = $localize `:kendo.editor.linkText|The caption for the link text in the createLink dialog.␟bc5096e9fa3fd49769d041a4734d5d5d8e6fd0e9␟8060045722754477150:Text`;\n } let i18n_68; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the link title in the createLink dialog.\n * @meaning kendo.editor.linkTitle\n */\n const MSG_EXTERNAL_330780229810449102$$DIST_FESM2015_INDEX_JS_69 = goog.getMsg(\"Title\");\n i18n_68 = MSG_EXTERNAL_330780229810449102$$DIST_FESM2015_INDEX_JS_69;\n }\n else {\n i18n_68 = $localize `:kendo.editor.linkTitle|The caption for the link title in the createLink dialog.␟e5c8208c08928222b713afcf80de78633236349d␟330780229810449102:Title`;\n } let i18n_70; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The caption for the URL in the createLink dialog.\n * @meaning kendo.editor.linkWebAddress\n */\n const MSG_EXTERNAL_6362180643798508446$$DIST_FESM2015_INDEX_JS_71 = goog.getMsg(\"Web address\");\n i18n_70 = MSG_EXTERNAL_6362180643798508446$$DIST_FESM2015_INDEX_JS_71;\n }\n else {\n i18n_70 = $localize `:kendo.editor.linkWebAddress|The caption for the URL in the createLink dialog.␟19f853c2933a9a1b71d96accf814e4f9e9e6e8dd␟6362180643798508446:Web address`;\n } let i18n_72; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that outdents the content.\n * @meaning kendo.editor.outdent\n */\n const MSG_EXTERNAL_8474960686200350213$$DIST_FESM2015_INDEX_JS_73 = goog.getMsg(\"Outdent\");\n i18n_72 = MSG_EXTERNAL_8474960686200350213$$DIST_FESM2015_INDEX_JS_73;\n }\n else {\n i18n_72 = $localize `:kendo.editor.outdent|The title of the tool that outdents the content.␟33a49dc9bce8c37c9c957a6cdb7fcd0b82b8bf58␟8474960686200350213:Outdent`;\n } let i18n_74; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the print tool.\n * @meaning kendo.editor.print\n */\n const MSG_EXTERNAL_80847516738809405$$DIST_FESM2015_INDEX_JS_75 = goog.getMsg(\"Print\");\n i18n_74 = MSG_EXTERNAL_80847516738809405$$DIST_FESM2015_INDEX_JS_75;\n }\n else {\n i18n_74 = $localize `:kendo.editor.print|The title of the print tool.␟9d52f416bc1f1a35c55906e927a19befea8a2b84␟80847516738809405:Print`;\n } let i18n_76; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that undos the last action.\n * @meaning kendo.editor.redo\n */\n const MSG_EXTERNAL_6526989398460728046$$DIST_FESM2015_INDEX_JS_77 = goog.getMsg(\"Redo\");\n i18n_76 = MSG_EXTERNAL_6526989398460728046$$DIST_FESM2015_INDEX_JS_77;\n }\n else {\n i18n_76 = $localize `:kendo.editor.redo|The title of the tool that undos the last action.␟117c237ef9fa6ff04fb4447fc233fe846ed366c1␟6526989398460728046:Redo`;\n } let i18n_78; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that selects all content.\n * @meaning kendo.editor.selectAll\n */\n const MSG_EXTERNAL_7460989834038782177$$DIST_FESM2015_INDEX_JS_79 = goog.getMsg(\"Select All\");\n i18n_78 = MSG_EXTERNAL_7460989834038782177$$DIST_FESM2015_INDEX_JS_79;\n }\n else {\n i18n_78 = $localize `:kendo.editor.selectAll|The title of the tool that selects all content.␟f2421e26609d5f0e84c4db8da0d8990a764eb604␟7460989834038782177:Select All`;\n } let i18n_80; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that strikes through text.\n * @meaning kendo.editor.strikethrough\n */\n const MSG_EXTERNAL_2488604920377820272$$DIST_FESM2015_INDEX_JS_81 = goog.getMsg(\"Strikethrough\");\n i18n_80 = MSG_EXTERNAL_2488604920377820272$$DIST_FESM2015_INDEX_JS_81;\n }\n else {\n i18n_80 = $localize `:kendo.editor.strikethrough|The title of the tool that strikes through text.␟6e38a1450b5d50601f44a665fbb329feca31e97b␟2488604920377820272:Strikethrough`;\n } let i18n_82; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that makes text subscript.\n * @meaning kendo.editor.subscript\n */\n const MSG_EXTERNAL_7270994954007735302$$DIST_FESM2015_INDEX_JS_83 = goog.getMsg(\"Subscript\");\n i18n_82 = MSG_EXTERNAL_7270994954007735302$$DIST_FESM2015_INDEX_JS_83;\n }\n else {\n i18n_82 = $localize `:kendo.editor.subscript|The title of the tool that makes text subscript.␟2bd31b9317a43ee8fb808b0c254b1bb200f908fa␟7270994954007735302:Subscript`;\n } let i18n_84; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that makes text superscript.\n * @meaning kendo.editor.superscript\n */\n const MSG_EXTERNAL_7596297815131300603$$DIST_FESM2015_INDEX_JS_85 = goog.getMsg(\"Superscript\");\n i18n_84 = MSG_EXTERNAL_7596297815131300603$$DIST_FESM2015_INDEX_JS_85;\n }\n else {\n i18n_84 = $localize `:kendo.editor.superscript|The title of the tool that makes text superscript.␟825050144d6680f962bf7ec296c42e08e6ac09d9␟7596297815131300603:Superscript`;\n } let i18n_86; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that underlines text.\n * @meaning kendo.editor.underline\n */\n const MSG_EXTERNAL_8473045911658532041$$DIST_FESM2015_INDEX_JS_87 = goog.getMsg(\"Underline\");\n i18n_86 = MSG_EXTERNAL_8473045911658532041$$DIST_FESM2015_INDEX_JS_87;\n }\n else {\n i18n_86 = $localize `:kendo.editor.underline|The title of the tool that underlines text.␟67eb1cff18f5e9a2e7d47aae052c666583bab261␟8473045911658532041:Underline`;\n } let i18n_88; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that removes hyperlinks.\n * @meaning kendo.editor.unlink\n */\n const MSG_EXTERNAL_1024469129593792947$$DIST_FESM2015_INDEX_JS_89 = goog.getMsg(\"Remove Link\");\n i18n_88 = MSG_EXTERNAL_1024469129593792947$$DIST_FESM2015_INDEX_JS_89;\n }\n else {\n i18n_88 = $localize `:kendo.editor.unlink|The title of the tool that removes hyperlinks.␟ad3a3c5c713542df87373b77cae8a124edb29c22␟1024469129593792947:Remove Link`;\n } let i18n_90; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that undos the last action.\n * @meaning kendo.editor.undo\n */\n const MSG_EXTERNAL_3987002812814489417$$DIST_FESM2015_INDEX_JS_91 = goog.getMsg(\"Undo\");\n i18n_90 = MSG_EXTERNAL_3987002812814489417$$DIST_FESM2015_INDEX_JS_91;\n }\n else {\n i18n_90 = $localize `:kendo.editor.undo|The title of the tool that undos the last action.␟18b488b145eeea939eecd65716bc3578939dcc0f␟3987002812814489417:Undo`;\n } let i18n_92; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that shows the editor value as HTML.\n * @meaning kendo.editor.viewSource\n */\n const MSG_EXTERNAL_3825180996241734650$$DIST_FESM2015_INDEX_JS_93 = goog.getMsg(\"View source\");\n i18n_92 = MSG_EXTERNAL_3825180996241734650$$DIST_FESM2015_INDEX_JS_93;\n }\n else {\n i18n_92 = $localize `:kendo.editor.viewSource|The title of the tool that shows the editor value as HTML.␟3caea7fc81a53a3e225561af33a56902f642ac26␟3825180996241734650:View source`;\n } let i18n_94; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that inserts table.\n * @meaning kendo.editor.insertTable\n */\n const MSG_EXTERNAL_5261534950694067764$$DIST_FESM2015_INDEX_JS_95 = goog.getMsg(\"Insert Table\");\n i18n_94 = MSG_EXTERNAL_5261534950694067764$$DIST_FESM2015_INDEX_JS_95;\n }\n else {\n i18n_94 = $localize `:kendo.editor.insertTable|The title of the tool that inserts table.␟32de5e66d4b2073bded7114d8a1ea1411cd7ceec␟5261534950694067764:Insert Table`;\n } let i18n_96; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that adds new column before currently selected column.\n * @meaning kendo.editor.addColumnBefore\n */\n const MSG_EXTERNAL_2967496815045471366$$DIST_FESM2015_INDEX_JS_97 = goog.getMsg(\"Add column before\");\n i18n_96 = MSG_EXTERNAL_2967496815045471366$$DIST_FESM2015_INDEX_JS_97;\n }\n else {\n i18n_96 = $localize `:kendo.editor.addColumnBefore|The title of the tool that adds new column before currently selected column.␟66c68280830690c0ebd374fd34dead01df2e7057␟2967496815045471366:Add column before`;\n } let i18n_98; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that adds new column after currently selected column.\n * @meaning kendo.editor.addColumnAfter\n */\n const MSG_EXTERNAL_1046762424668985150$$DIST_FESM2015_INDEX_JS_99 = goog.getMsg(\"Add column after\");\n i18n_98 = MSG_EXTERNAL_1046762424668985150$$DIST_FESM2015_INDEX_JS_99;\n }\n else {\n i18n_98 = $localize `:kendo.editor.addColumnAfter|The title of the tool that adds new column after currently selected column.␟24d531a9e3507a6ad02bff394c5030a25a731d66␟1046762424668985150:Add column after`;\n } let i18n_100; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that adds new row before currently selected row.\n * @meaning kendo.editor.addRowBefore\n */\n const MSG_EXTERNAL_5531388093960518917$$DIST_FESM2015_INDEX_JS_101 = goog.getMsg(\"Add row before\");\n i18n_100 = MSG_EXTERNAL_5531388093960518917$$DIST_FESM2015_INDEX_JS_101;\n }\n else {\n i18n_100 = $localize `:kendo.editor.addRowBefore|The title of the tool that adds new row before currently selected row.␟c42641b164ae5711cb01b88bcde664031cc230bf␟5531388093960518917:Add row before`;\n } let i18n_102; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that adds new row after currently selected row.\n * @meaning kendo.editor.addRowAfter\n */\n const MSG_EXTERNAL_6647582145372406524$$DIST_FESM2015_INDEX_JS_103 = goog.getMsg(\"Add row after\");\n i18n_102 = MSG_EXTERNAL_6647582145372406524$$DIST_FESM2015_INDEX_JS_103;\n }\n else {\n i18n_102 = $localize `:kendo.editor.addRowAfter|The title of the tool that adds new row after currently selected row.␟c852853beee80e68e673421fd4bc57fa49d417d9␟6647582145372406524:Add row after`;\n } let i18n_104; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that deletes a table column.\n * @meaning kendo.editor.deleteColumn\n */\n const MSG_EXTERNAL_7009319757848972360$$DIST_FESM2015_INDEX_JS_105 = goog.getMsg(\"Delete column\");\n i18n_104 = MSG_EXTERNAL_7009319757848972360$$DIST_FESM2015_INDEX_JS_105;\n }\n else {\n i18n_104 = $localize `:kendo.editor.deleteColumn|The title of the tool that deletes a table column.␟233fbf121ca8b9ea127211a83ab72f0daf01593a␟7009319757848972360:Delete column`;\n } let i18n_106; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that deletes a table row.\n * @meaning kendo.editor.deleteRow\n */\n const MSG_EXTERNAL_8410650025259601548$$DIST_FESM2015_INDEX_JS_107 = goog.getMsg(\"Delete row\");\n i18n_106 = MSG_EXTERNAL_8410650025259601548$$DIST_FESM2015_INDEX_JS_107;\n }\n else {\n i18n_106 = $localize `:kendo.editor.deleteRow|The title of the tool that deletes a table row.␟a7bf50c04d3769d4bde61bab60e6aaa0e982a488␟8410650025259601548:Delete row`;\n } let i18n_108; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the tool that deletes a table.\n * @meaning kendo.editor.deleteTable\n */\n const MSG_EXTERNAL_3609415533235721295$$DIST_FESM2015_INDEX_JS_109 = goog.getMsg(\"Delete table\");\n i18n_108 = MSG_EXTERNAL_3609415533235721295$$DIST_FESM2015_INDEX_JS_109;\n }\n else {\n i18n_108 = $localize `:kendo.editor.deleteTable|The title of the tool that deletes a table.␟2694410604d01084a49e5225a60fbe3eda3af5cc␟3609415533235721295:Delete table`;\n } return [[\"kendoEditorLocalizedMessages\", \"\", \"alignCenter\", i18n_6, \"alignJustify\", i18n_8, \"alignLeft\", i18n_10, \"alignRight\", i18n_12, \"backColor\", i18n_14, \"bold\", i18n_16, \"cleanFormatting\", i18n_18, \"createLink\", i18n_20, \"dialogApply\", i18n_22, \"dialogCancel\", i18n_24, \"dialogInsert\", i18n_26, \"dialogUpdate\", i18n_28, \"fileText\", i18n_30, \"fileTitle\", i18n_32, \"fileWebAddress\", i18n_34, \"fontFamily\", i18n_36, \"fontSize\", i18n_38, \"foreColor\", i18n_40, \"format\", i18n_42, \"imageAltText\", i18n_44, \"imageHeight\", i18n_46, \"imageWebAddress\", i18n_48, \"imageWidth\", i18n_50, \"indent\", i18n_52, \"insertFile\", i18n_54, \"insertImage\", i18n_56, \"insertOrderedList\", i18n_58, \"insertUnorderedList\", i18n_60, \"italic\", i18n_62, \"linkOpenInNewWindow\", i18n_64, \"linkText\", i18n_66, \"linkTitle\", i18n_68, \"linkWebAddress\", i18n_70, \"outdent\", i18n_72, \"print\", i18n_74, \"redo\", i18n_76, \"selectAll\", i18n_78, \"strikethrough\", i18n_80, \"subscript\", i18n_82, \"superscript\", i18n_84, \"underline\", i18n_86, \"unlink\", i18n_88, \"undo\", i18n_90, \"viewSource\", i18n_92, \"insertTable\", i18n_94, \"addColumnBefore\", i18n_96, \"addColumnAfter\", i18n_98, \"addRowBefore\", i18n_100, \"addRowAfter\", i18n_102, \"deleteColumn\", i18n_104, \"deleteRow\", i18n_106, \"deleteTable\", i18n_108], [3, \"overflow\", \"tabindex\", 4, \"ngIf\"], [\"class\", \"k-editor-content\", 4, \"ngIf\"], [\"dialogsContainer\", \"\"], [3, \"overflow\", \"tabindex\"], [\"defaultToolbar\", \"\"], [\"kendoEditorBoldButton\", \"\"], [\"kendoEditorItalicButton\", \"\"], [\"kendoEditorUnderlineButton\", \"\"], [\"kendoEditorFormat\", \"\"], [\"kendoEditorAlignLeftButton\", \"\"], [\"kendoEditorAlignCenterButton\", \"\"], [\"kendoEditorAlignRightButton\", \"\"], [\"kendoEditorAlignJustifyButton\", \"\"], [\"kendoEditorInsertUnorderedListButton\", \"\"], [\"kendoEditorInsertOrderedListButton\", \"\"], [\"kendoEditorIndentButton\", \"\"], [\"kendoEditorOutdentButton\", \"\"], [\"kendoEditorCreateLinkButton\", \"\"], [\"kendoEditorUnlinkButton\", \"\"], [\"kendoEditorInsertImageButton\", \"\"], [1, \"k-editor-content\"], [\"content\", \"\"], [\"frameborder\", \"0\", 1, \"k-iframe\", 3, \"load\"]]; }, template: function EditorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c110);\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵtemplate(2, EditorComponent_kendo_toolbar_2_Template, 21, 2, \"kendo-toolbar\", 1);\n ɵngcc0.ɵɵtemplate(3, EditorComponent_div_3_Template, 2, 1, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, EditorComponent_div_4_Template, 3, 0, \"div\", 2);\n ɵngcc0.ɵɵelementContainer(5, null, 3);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.userToolBarElement);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.iframe);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.iframe);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc4.NgIf, ɵngcc6.ToolBarComponent, ɵngcc6.ToolBarButtonGroupComponent, ɵngcc6.ToolBarButtonComponent, EditorBoldButtonDirective, EditorItalicButtonDirective, EditorUnderlineButtonDirective, EditorFormatComponent, EditorAlignLeftButtonDirective, EditorAlignCenterButtonDirective, EditorAlignRightButtonDirective, EditorAlignJustifyButtonDirective, EditorInsertUnorderedListButtonDirective, EditorInsertOrderedListButtonDirective, EditorIndentButtonDirective, EditorOutdentButtonDirective, EditorCreateLinkButtonDirective, EditorUnlinkButtonDirective, EditorInsertImageButtonDirective]; }, styles: [\".k-editor-content > .ProseMirror {\\n height: 100%;\\n width: 100%;\\n box-sizing: border-box;\\n outline: none;\\n overflow: auto;\\n }\\n\\n .k-iframe[_ngcontent-%COMP%] {\\n width: 100%;\\n height: 100%;\\n display: block;\\n }\"] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], EditorComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], EditorComponent.prototype, \"disabled\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], EditorComponent.prototype, \"readonly\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], EditorComponent.prototype, \"iframe\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EditorComponent.prototype, \"applyToWord\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Schema),\n __metadata(\"design:paramtypes\", [Schema])\n], EditorComponent.prototype, \"schema\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function])\n], EditorComponent.prototype, \"plugins\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], EditorComponent.prototype, \"placeholder\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], EditorComponent.prototype, \"updateInterval\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EditorComponent.prototype, \"preserveWhitespace\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EditorComponent.prototype, \"pasteCleanupSettings\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EditorComponent.prototype, \"resizable\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], EditorComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], EditorComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], EditorComponent.prototype, \"onBlur\", void 0);\n__decorate([\n HostBinding('class.k-editor'),\n __metadata(\"design:type\", Boolean)\n], EditorComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('class.k-editor-resizable'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"resizableClass\", null);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"isDisabled\", null);\n__decorate([\n HostBinding('class.k-readonly'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"isReadonly\", null);\n__decorate([\n HostBinding('class.k-ie'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"isIE\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"dir\", null);\n__decorate([\n HostBinding('attr.ariaDisabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"ariaDisabled\", null);\n__decorate([\n HostBinding('style.minWidth'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"minWidth\", null);\n__decorate([\n HostBinding('style.maxWidth'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"maxWidth\", null);\n__decorate([\n HostBinding('style.minHeight'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"minHeight\", null);\n__decorate([\n HostBinding('style.maxHeight'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], EditorComponent.prototype, \"maxHeight\", null);\n__decorate([\n ContentChild(ToolBarComponent, { static: false }),\n __metadata(\"design:type\", ToolBarComponent)\n], EditorComponent.prototype, \"userToolBarComponent\", void 0);\n__decorate([\n ContentChild(ToolBarComponent, { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorComponent.prototype, \"userToolBarElement\", void 0);\n__decorate([\n ViewChild('dialogsContainer', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], EditorComponent.prototype, \"dialogContainer\", void 0);\n__decorate([\n ViewChild('content', { read: ViewContainerRef, static: false }),\n __metadata(\"design:type\", ViewContainerRef)\n], EditorComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('defaultToolbar', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorComponent.prototype, \"defaultToolbar\", void 0);\n__decorate([\n ViewChild('defaultToolbar', { read: ToolBarComponent, static: false }),\n __metadata(\"design:type\", ToolBarComponent)\n], EditorComponent.prototype, \"defaultToolbarComponent\", void 0);\nEditorComponent = EditorComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [DialogService,\n LocalizationService,\n ChangeDetectorRef,\n NgZone,\n ElementRef,\n EditorToolsService])\n], EditorComponent);\n\n/**\n * @hidden\n */\nlet FormatDropDownListComponent = class FormatDropDownListComponent {\n /**\n * @hidden\n */\n constructor() {\n this.valueChange = new EventEmitter();\n }\n onValueChange(tag) {\n this.valueChange.emit(tag);\n }\n focus() {\n this.dropDownList.focus();\n }\n};\nFormatDropDownListComponent.ɵfac = function FormatDropDownListComponent_Factory(t) { return new (t || FormatDropDownListComponent)(); };\nFormatDropDownListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FormatDropDownListComponent, selectors: [[\"kendo-editor-format-dropdownlist\"]], viewQuery: function FormatDropDownListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c112, 7);\n ɵngcc0.ɵɵviewQuery(_c112, 7, DropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropDownList = _t.first);\n } }, inputs: { data: \"data\", value: \"value\", defaultItem: \"defaultItem\", itemDisabled: \"itemDisabled\", title: \"title\", disabled: \"disabled\", tabindex: \"tabindex\" }, outputs: { valueChange: \"valueChange\" }, decls: 3, vars: 10, consts: [[\"kendoEditorDropDownTool\", \"\", 3, \"defaultItem\", \"textField\", \"valueField\", \"data\", \"value\", \"valuePrimitive\", \"itemDisabled\", \"disabled\", \"tabindex\", \"valueChange\"], [\"element\", \"\"], [\"kendoDropDownListItemTemplate\", \"\"], [3, \"ngSwitch\"], [\"style\", \"display: block; font-size: 2em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; font-size: 1.5em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; font-size: 1.17em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; font-size: 1em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; font-size: .83em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; font-size: .67em; margin-left: 0; font-weight: bold;\", 4, \"ngSwitchCase\"], [\"style\", \"display: block; margin-left: 0;\", 4, \"ngSwitchCase\"], [4, \"ngSwitchDefault\"], [2, \"display\", \"block\", \"font-size\", \"2em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"font-size\", \"1.5em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"font-size\", \"1.17em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"font-size\", \"1em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"font-size\", \".83em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"font-size\", \".67em\", \"margin-left\", \"0\", \"font-weight\", \"bold\"], [2, \"display\", \"block\", \"margin-left\", \"0\"]], template: function FormatDropDownListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 0, 1);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FormatDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.value = $event; })(\"valueChange\", function FormatDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.onValueChange($event); });\n ɵngcc0.ɵɵtemplate(2, FormatDropDownListComponent_ng_template_2_Template, 10, 9, \"ng-template\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"textField\", \"text\")(\"valueField\", \"tag\")(\"data\", ctx.data)(\"value\", ctx.value)(\"valuePrimitive\", true)(\"itemDisabled\", ctx.itemDisabled)(\"disabled\", ctx.disabled)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, directives: function () { return [ɵngcc7.DropDownListComponent, DropDownToolDirective, ɵngcc7.ItemTemplateDirective, ɵngcc4.NgSwitch, ɵngcc4.NgSwitchCase, ɵngcc4.NgSwitchDefault]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], FormatDropDownListComponent.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FormatDropDownListComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FormatDropDownListComponent.prototype, \"defaultItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], FormatDropDownListComponent.prototype, \"itemDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FormatDropDownListComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FormatDropDownListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], FormatDropDownListComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FormatDropDownListComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('element', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], FormatDropDownListComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('element', { read: DropDownListComponent, static: true }),\n __metadata(\"design:type\", DropDownListComponent)\n], FormatDropDownListComponent.prototype, \"dropDownList\", void 0);\n\n/**\n * @hidden\n */\nlet FormatDialogComponent = class FormatDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.data = [];\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.formatDropDownList.dropDownList.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n if (this.value) {\n this.editor.exec('format', { tag: this.value });\n }\n this.dialog.close();\n }\n setData(args) {\n this.editor = args.editor;\n this.data = args.data;\n this.defaultItem = args.defaultItem;\n this.value = args.value;\n this.itemDisabled = args.itemDisabled;\n }\n textFor(key) {\n return this.localization.get(key);\n }\n};\nFormatDialogComponent.ɵfac = function FormatDialogComponent_Factory(t) { return new (t || FormatDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nFormatDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FormatDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function FormatDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c113, 7, FormatDropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formatDropDownList = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 12, vars: 8, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\", 2, \"text-align\", \"center\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"valueChange\"], [\"formatDropDownList\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"primary\", \"click\"]], template: function FormatDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function FormatDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"kendo-editor-format-dropdownlist\", 4, 5);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FormatDialogComponent_Template_kendo_editor_format_dropdownlist_valueChange_5_listener($event) { return ctx.value = $event; });\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(7, \"kendo-dialog-actions\")(8, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FormatDialogComponent_Template_button_click_8_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function FormatDialogComponent_Template_button_click_10_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(11);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"format\"), \" \");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"data\", ctx.data)(\"value\", ctx.value)(\"itemDisabled\", ctx.itemDisabled);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogApply\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, FormatDropDownListComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", EditorComponent)\n], FormatDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('formatDropDownList', { read: FormatDropDownListComponent, static: true }),\n __metadata(\"design:type\", FormatDropDownListComponent)\n], FormatDialogComponent.prototype, \"formatDropDownList\", void 0);\nFormatDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], FormatDialogComponent);\n\n/**\n * @hidden\n */\nlet ColorPickerDialogComponent = class ColorPickerDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.colorPicker.focus();\n });\n }\n handleActiveColorClick(event) {\n event.preventOpen();\n this.value = event.color;\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n if (this.value) {\n this.editor.exec(this.editorCommand, this.value);\n }\n this.dialog.close();\n }\n setData(args) {\n this.editor = args.editor;\n this.value = args.value;\n this.editorCommand = args.editorCommand;\n this.paletteSettings = args.paletteSettings;\n this.icon = args.icon;\n this.view = args.view;\n }\n textFor(key) {\n return this.localization.get(key);\n }\n};\nColorPickerDialogComponent.ɵfac = function ColorPickerDialogComponent_Factory(t) { return new (t || ColorPickerDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nColorPickerDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorPickerDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function ColorPickerDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c114, 7, ColorPickerComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.colorPicker = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 12, vars: 10, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\", 2, \"text-align\", \"center\"], [3, \"view\", \"format\", \"icon\", \"value\", \"paletteSettings\", \"valueChange\", \"activeColorClick\"], [\"colorpicker\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"primary\", \"click\"]], template: function ColorPickerDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function ColorPickerDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"kendo-colorpicker\", 4, 5);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorPickerDialogComponent_Template_kendo_colorpicker_valueChange_5_listener($event) { return ctx.value = $event; })(\"activeColorClick\", function ColorPickerDialogComponent_Template_kendo_colorpicker_activeColorClick_5_listener($event) { return ctx.handleActiveColorClick($event); });\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(7, \"kendo-dialog-actions\")(8, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerDialogComponent_Template_button_click_8_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerDialogComponent_Template_button_click_10_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(11);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(ctx.editorCommand), \" \");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"view\", ctx.view)(\"format\", \"hex\")(\"icon\", ctx.icon)(\"value\", ctx.value)(\"paletteSettings\", ctx.paletteSettings);\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogApply\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, ɵngcc8.ColorPickerComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", EditorComponent)\n], ColorPickerDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('colorpicker', { read: ColorPickerComponent, static: true }),\n __metadata(\"design:type\", ColorPickerComponent)\n], ColorPickerDialogComponent.prototype, \"colorPicker\", void 0);\nColorPickerDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], ColorPickerDialogComponent);\n\n/**\n * @hidden\n */\nlet FontFamilyDropDownListComponent = class FontFamilyDropDownListComponent {\n /**\n * @hidden\n */\n constructor() {\n this.valueChange = new EventEmitter();\n }\n onValueChange(tag) {\n this.valueChange.emit(tag);\n }\n focus() {\n this.dropDownList.focus();\n }\n};\nFontFamilyDropDownListComponent.ɵfac = function FontFamilyDropDownListComponent_Factory(t) { return new (t || FontFamilyDropDownListComponent)(); };\nFontFamilyDropDownListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FontFamilyDropDownListComponent, selectors: [[\"kendo-editor-fontfamily-dropdownlist\"]], viewQuery: function FontFamilyDropDownListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c112, 7);\n ɵngcc0.ɵɵviewQuery(_c112, 7, DropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropDownList = _t.first);\n } }, inputs: { data: \"data\", value: \"value\", defaultItem: \"defaultItem\", itemDisabled: \"itemDisabled\", title: \"title\", disabled: \"disabled\", tabindex: \"tabindex\" }, outputs: { valueChange: \"valueChange\" }, decls: 3, vars: 10, consts: [[\"kendoEditorDropDownTool\", \"\", 3, \"defaultItem\", \"textField\", \"valueField\", \"data\", \"value\", \"valuePrimitive\", \"itemDisabled\", \"disabled\", \"tabindex\", \"valueChange\"], [\"element\", \"\"], [\"kendoDropDownListItemTemplate\", \"\"], [3, \"ngStyle\"]], template: function FontFamilyDropDownListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 0, 1);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FontFamilyDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.value = $event; })(\"valueChange\", function FontFamilyDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.onValueChange($event); });\n ɵngcc0.ɵɵtemplate(2, FontFamilyDropDownListComponent_ng_template_2_Template, 2, 4, \"ng-template\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"textField\", \"text\")(\"valueField\", \"fontName\")(\"data\", ctx.data)(\"value\", ctx.value)(\"valuePrimitive\", true)(\"itemDisabled\", ctx.itemDisabled)(\"disabled\", ctx.disabled)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, directives: function () { return [ɵngcc7.DropDownListComponent, DropDownToolDirective, ɵngcc7.ItemTemplateDirective, ɵngcc4.NgStyle]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], FontFamilyDropDownListComponent.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FontFamilyDropDownListComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FontFamilyDropDownListComponent.prototype, \"defaultItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], FontFamilyDropDownListComponent.prototype, \"itemDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FontFamilyDropDownListComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FontFamilyDropDownListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], FontFamilyDropDownListComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FontFamilyDropDownListComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('element', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], FontFamilyDropDownListComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('element', { read: DropDownListComponent, static: true }),\n __metadata(\"design:type\", DropDownListComponent)\n], FontFamilyDropDownListComponent.prototype, \"dropDownList\", void 0);\n\n/**\n * @hidden\n */\nlet FontFamilyDialogComponent = class FontFamilyDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.data = [];\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.fontFamilyDropDownList.dropDownList.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n if (this.value) {\n this.editor.exec('fontFamily', this.value);\n }\n this.dialog.close();\n }\n setData(args) {\n this.editor = args.editor;\n this.data = args.data;\n this.defaultItem = args.defaultItem;\n this.value = args.value;\n this.itemDisabled = args.itemDisabled;\n }\n textFor(key) {\n return this.localization.get(key);\n }\n};\nFontFamilyDialogComponent.ɵfac = function FontFamilyDialogComponent_Factory(t) { return new (t || FontFamilyDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nFontFamilyDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FontFamilyDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function FontFamilyDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c116, 7, FontFamilyDropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontFamilyDropDownList = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 12, vars: 8, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\", 2, \"text-align\", \"center\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"valueChange\"], [\"fontFamilyDropDownList\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"primary\", \"click\"]], template: function FontFamilyDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function FontFamilyDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"kendo-editor-fontfamily-dropdownlist\", 4, 5);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FontFamilyDialogComponent_Template_kendo_editor_fontfamily_dropdownlist_valueChange_5_listener($event) { return ctx.value = $event; });\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(7, \"kendo-dialog-actions\")(8, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FontFamilyDialogComponent_Template_button_click_8_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function FontFamilyDialogComponent_Template_button_click_10_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(11);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"fontFamily\"), \" \");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"data\", ctx.data)(\"value\", ctx.value)(\"itemDisabled\", ctx.itemDisabled);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogApply\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, FontFamilyDropDownListComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", EditorComponent)\n], FontFamilyDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('fontFamilyDropDownList', { read: FontFamilyDropDownListComponent, static: true }),\n __metadata(\"design:type\", FontFamilyDropDownListComponent)\n], FontFamilyDialogComponent.prototype, \"fontFamilyDropDownList\", void 0);\nFontFamilyDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], FontFamilyDialogComponent);\n\n/**\n * @hidden\n */\nlet InsertTableDialogComponent = class InsertTableDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n }\n onCancelAction() {\n this.dialog.close();\n this.editor.view.focus();\n }\n onCellClick(args) {\n this.dialog.close();\n this.editor.exec(\"insertTable\", args);\n this.editor.view.focus();\n }\n setData(args) {\n this.editor = args.editor;\n }\n textFor(key) {\n return this.localization.get(key);\n }\n};\nInsertTableDialogComponent.ɵfac = function InsertTableDialogComponent_Factory(t) { return new (t || InsertTableDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nInsertTableDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: InsertTableDialogComponent, selectors: [[\"ng-component\"]], inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 9, vars: 2, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-ct-popup\", \"k-window-content\", 2, \"text-align\", \"center\"], [3, \"cellClick\"], [\"kendoButton\", \"\", 3, \"click\"]], template: function InsertTableDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function InsertTableDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"kendo-popup-table-grid\", 4);\n ɵngcc0.ɵɵlistener(\"cellClick\", function InsertTableDialogComponent_Template_kendo_popup_table_grid_cellClick_5_listener($event) { return ctx.onCellClick($event); });\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(6, \"kendo-dialog-actions\")(7, \"button\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function InsertTableDialogComponent_Template_button_click_7_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(8);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"insertTable\"), \" \");\n ɵngcc0.ɵɵadvance(7);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n } }, directives: function () { return [ɵngcc1.DialogTitleBarComponent, PopupTableGridComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", EditorComponent)\n], InsertTableDialogComponent.prototype, \"editor\", void 0);\nInsertTableDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], InsertTableDialogComponent);\n\nvar EditorFormatComponent_1;\n/**\n * A component which configures an existing `DropDownListComponent` as an Editor tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The component associates a `kendo-dropdownlist` with an Editor command that changes the format of a content block and\n * automatically defines the options of the drop-down list and sets its values.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorFormatComponent = EditorFormatComponent_1 = class EditorFormatComponent extends ToolBarToolComponent {\n constructor(editor, dialogService, localization, toolsService) {\n super();\n this.editor = editor;\n this.dialogService = dialogService;\n this.localization = localization;\n this.toolsService = toolsService;\n this.disabled = false;\n this.tabindex = -1;\n /**\n * Fires when the user updates the value of the drop-down list.\n */\n this.valueChange = new EventEmitter();\n this._data = [\n { text: 'Paragraph', tag: 'p' },\n { text: 'Quotation', tag: 'blockquote' },\n { text: 'Heading 1', tag: 'h1' },\n { text: 'Heading 2', tag: 'h2' },\n { text: 'Heading 3', tag: 'h3' },\n { text: 'Heading 4', tag: 'h4' },\n { text: 'Heading 5', tag: 'h5' },\n { text: 'Heading 6', tag: 'h6' }\n ];\n }\n /**\n * Overrides the default format items list.\n */\n set data(formatItems) {\n this._data = formatItems || this._data;\n }\n get data() {\n return this._data;\n }\n ngOnInit() {\n this.itemDisabled = (itemArgs) => {\n if (!this.overflows && this.formatDropDownList && !this.formatDropDownList.dropDownList.isOpen) {\n return true; //disable all items in order to prevent navigation when DDL is closed\n }\n else {\n return itemArgs.dataItem.tag === null;\n }\n };\n setTimeout(() => {\n this.defaultItem = { text: this.title, tag: null };\n this.toolsService.needsCheck.next();\n });\n this.subs = this.editor.stateChange.subscribe(({ format }) => {\n const index = this.data.findIndex(item => item.tag === format.selected.tag);\n this.value = index !== -1 ? format.selected.tag : null;\n this.disabled = format.disabled;\n });\n }\n /**\n * @hidden\n */\n onValueChange(ev) {\n if (isPresent(ev)) {\n this.editor.exec('format', { tag: ev });\n this.editor.view.focus();\n this.valueChange.emit(this.data.find(d => d.tag === ev));\n }\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n get outerWidth() {\n const element = this.formatDropDownList.element;\n if (element) {\n return outerWidth(element.nativeElement);\n }\n }\n get title() {\n return this.localization.get('format');\n }\n /**\n * @hidden\n */\n openDialog() {\n const dialogSettings = {\n appendTo: this.editor.dialogContainer,\n content: FormatDialogComponent\n };\n this.editor.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialogSettings).content.instance;\n dialogContent.setData({\n editor: this.editor,\n data: this.data,\n defaultItem: this.defaultItem,\n value: this.value,\n itemDisabled: this.itemDisabled\n });\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus() {\n this.tabindex = 0;\n if (this.overflows) {\n this.formatButton.nativeElement.focus();\n }\n else {\n this.formatDropDownList.focus();\n }\n }\n /**\n * @hidden\n */\n handleKey() {\n this.tabindex = -1;\n return false;\n }\n};\nEditorFormatComponent.ɵfac = function EditorFormatComponent_Factory(t) { return new (t || EditorFormatComponent)(ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorFormatComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorFormatComponent, selectors: [[\"kendo-toolbar-dropdownlist\", \"kendoEditorFormat\", \"\"]], viewQuery: function EditorFormatComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c117, 7);\n ɵngcc0.ɵɵviewQuery(_c118, 7);\n ɵngcc0.ɵɵviewQuery(_c113, 5);\n ɵngcc0.ɵɵviewQuery(_c119, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formatDropDownList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formatButton = _t.first);\n } }, inputs: { data: \"data\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFormatComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], attrs: _c120, decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"title\", \"disabled\", \"tabindex\", \"valueChange\"], [\"formatDropDownList\", \"\"], [\"type\", \"button\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"tabindex\", \"icon\", \"disabled\", \"click\"], [\"formatButton\", \"\"]], template: function EditorFormatComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, EditorFormatComponent_ng_template_0_Template, 2, 7, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, EditorFormatComponent_ng_template_2_Template, 3, 6, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [FormatDropDownListComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], EditorFormatComponent.prototype, \"data\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], EditorFormatComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFormatComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFormatComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('formatDropDownList', { static: false }),\n __metadata(\"design:type\", FormatDropDownListComponent)\n], EditorFormatComponent.prototype, \"formatDropDownList\", void 0);\n__decorate([\n ViewChild('formatButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorFormatComponent.prototype, \"formatButton\", void 0);\nEditorFormatComponent = EditorFormatComponent_1 = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [EditorComponent,\n DialogService,\n EditorLocalizationService,\n EditorToolsService])\n], EditorFormatComponent);\n\n/**\n * @hidden\n */\nlet FontSizeDropDownListComponent = class FontSizeDropDownListComponent {\n /**\n * @hidden\n */\n constructor() {\n this.valueChange = new EventEmitter();\n }\n onValueChange(size) {\n this.valueChange.emit(size);\n }\n focus() {\n this.dropDownList.focus();\n }\n};\nFontSizeDropDownListComponent.ɵfac = function FontSizeDropDownListComponent_Factory(t) { return new (t || FontSizeDropDownListComponent)(); };\nFontSizeDropDownListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FontSizeDropDownListComponent, selectors: [[\"kendo-editor-fontsize-dropdownlist\"]], viewQuery: function FontSizeDropDownListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c112, 7);\n ɵngcc0.ɵɵviewQuery(_c112, 7, DropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropDownList = _t.first);\n } }, inputs: { data: \"data\", value: \"value\", defaultItem: \"defaultItem\", itemDisabled: \"itemDisabled\", title: \"title\", disabled: \"disabled\", tabindex: \"tabindex\" }, outputs: { valueChange: \"valueChange\" }, decls: 2, vars: 10, consts: [[\"kendoEditorDropDownTool\", \"\", 3, \"defaultItem\", \"textField\", \"valueField\", \"data\", \"value\", \"valuePrimitive\", \"itemDisabled\", \"disabled\", \"tabindex\", \"valueChange\"], [\"element\", \"\"]], template: function FontSizeDropDownListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 0, 1);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FontSizeDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.value = $event; })(\"valueChange\", function FontSizeDropDownListComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.onValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"textField\", \"text\")(\"valueField\", \"size\")(\"data\", ctx.data)(\"value\", ctx.value)(\"valuePrimitive\", true)(\"itemDisabled\", ctx.itemDisabled)(\"disabled\", ctx.disabled)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, directives: function () { return [ɵngcc7.DropDownListComponent, DropDownToolDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], FontSizeDropDownListComponent.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FontSizeDropDownListComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FontSizeDropDownListComponent.prototype, \"defaultItem\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], FontSizeDropDownListComponent.prototype, \"itemDisabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FontSizeDropDownListComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FontSizeDropDownListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], FontSizeDropDownListComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FontSizeDropDownListComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('element', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], FontSizeDropDownListComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('element', { read: DropDownListComponent, static: true }),\n __metadata(\"design:type\", DropDownListComponent)\n], FontSizeDropDownListComponent.prototype, \"dropDownList\", void 0);\n\n/**\n * @hidden\n */\nlet FontSizeDialogComponent = class FontSizeDialogComponent extends DialogContentBase {\n constructor(dialog, localization) {\n super(dialog);\n this.dialog = dialog;\n this.localization = localization;\n this.data = [];\n }\n ngAfterViewInit() {\n Promise.resolve(null).then(() => {\n this.fontSizeDropDownList.dropDownList.focus();\n });\n }\n onCancelAction() {\n this.dialog.close();\n }\n onConfirmAction() {\n if (this.value) {\n this.editor.exec('fontSize', this.value);\n }\n this.dialog.close();\n }\n setData(args) {\n this.editor = args.editor;\n this.data = args.data;\n this.defaultItem = args.defaultItem;\n this.value = args.value;\n this.itemDisabled = args.itemDisabled;\n }\n textFor(key) {\n return this.localization.get(key);\n }\n};\nFontSizeDialogComponent.ɵfac = function FontSizeDialogComponent_Factory(t) { return new (t || FontSizeDialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogRef), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService)); };\nFontSizeDialogComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FontSizeDialogComponent, selectors: [[\"ng-component\"]], viewQuery: function FontSizeDialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c121, 7, FontSizeDropDownListComponent);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontSizeDropDownList = _t.first);\n } }, inputs: { editor: \"editor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 12, vars: 8, consts: [[3, \"close\"], [1, \"k-editor-dialog\"], [1, \"k-editor-dialog\", \"k-popup-edit-form\", \"k-window-content\", \"k-content\"], [1, \"k-edit-form-container\", \"k-window-content\", 2, \"text-align\", \"center\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"valueChange\"], [\"fontSizeDropDownList\", \"\"], [\"kendoButton\", \"\", 3, \"click\"], [\"kendoButton\", \"\", 3, \"primary\", \"click\"]], template: function FontSizeDialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 0);\n ɵngcc0.ɵɵlistener(\"close\", function FontSizeDialogComponent_Template_kendo_dialog_titlebar_close_0_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1)(3, \"div\", 2)(4, \"div\", 3)(5, \"kendo-editor-fontsize-dropdownlist\", 4, 5);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FontSizeDialogComponent_Template_kendo_editor_fontsize_dropdownlist_valueChange_5_listener($event) { return ctx.value = $event; });\n ɵngcc0.ɵɵelementEnd()()()();\n ɵngcc0.ɵɵelementStart(7, \"kendo-dialog-actions\")(8, \"button\", 6);\n ɵngcc0.ɵɵlistener(\"click\", function FontSizeDialogComponent_Template_button_click_8_listener() { return ctx.onCancelAction(); });\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(10, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function FontSizeDialogComponent_Template_button_click_10_listener() { return ctx.onConfirmAction(); });\n ɵngcc0.ɵɵtext(11);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"fontSize\"), \" \");\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"data\", ctx.data)(\"value\", ctx.value)(\"itemDisabled\", ctx.itemDisabled);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogCancel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"primary\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.textFor(\"dialogApply\"));\n } }, directives: [ɵngcc1.DialogTitleBarComponent, FontSizeDropDownListComponent, ɵngcc1.DialogActionsComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", EditorComponent)\n], FontSizeDialogComponent.prototype, \"editor\", void 0);\n__decorate([\n ViewChild('fontSizeDropDownList', { read: FontSizeDropDownListComponent, static: true }),\n __metadata(\"design:type\", FontSizeDropDownListComponent)\n], FontSizeDialogComponent.prototype, \"fontSizeDropDownList\", void 0);\nFontSizeDialogComponent = __decorate([ __metadata(\"design:paramtypes\", [DialogRef,\n EditorLocalizationService])\n], FontSizeDialogComponent);\n\nvar EditorFontSizeComponent_1;\n/**\n * A component which configures an existing `DropDownListComponent` as an Editor tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The component associates a `kendo-dropdownlist` with an Editor command that changes the font size of a content block and\n * automatically defines the options of the drop-down list and sets its values.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorFontSizeComponent = EditorFontSizeComponent_1 = class EditorFontSizeComponent extends ToolBarToolComponent {\n constructor(editor, dialogService, localization, toolsService) {\n super();\n this.editor = editor;\n this.dialogService = dialogService;\n this.localization = localization;\n this.toolsService = toolsService;\n this.disabled = false;\n this.tabindex = -1;\n /**\n * Fires when the user updates the value of the drop-down list.\n */\n this.valueChange = new EventEmitter();\n this._data = [\n { text: '8px', size: 8 },\n { text: '10px', size: 10 },\n { text: '12px', size: 12 },\n { text: '14px', size: 14 },\n { text: '18px', size: 18 },\n { text: '24px', size: 24 },\n { text: '36px', size: 36 }\n ];\n }\n /**\n * Overrides the default font size list.\n */\n set data(sizes) {\n this._data = sizes || this._data;\n }\n get data() {\n return this._data;\n }\n ngOnInit() {\n this.itemDisabled = itemArgs => {\n if (!this.overflows && this.fontSizeDropDownList && !this.fontSizeDropDownList.dropDownList.isOpen) {\n return true; //disable all items in order to prevent navigation when DDL is closed\n }\n else {\n return itemArgs.dataItem.size === null;\n }\n };\n setTimeout(() => {\n this.defaultItem = { text: this.title, size: null };\n this.toolsService.needsCheck.next();\n });\n this.subs = this.editor.stateChange.subscribe(({ style }) => {\n // remove units(px, em, rem...)\n // string#match returns array\n this.value = (getUniqueStyleValues(style.selected, 'font-size').match(/\\d+/g) || [null])[0];\n this.disabled = style.disabled;\n });\n }\n /**\n * @hidden\n */\n onValueChange(ev) {\n if (isPresent(ev)) {\n this.editor.exec('fontSize', ev);\n this.editor.view.focus();\n this.valueChange.emit(this.data.find(d => d.size === parseInt(ev, 10)));\n }\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n get outerWidth() {\n if (this.element) {\n return outerWidth(this.element.nativeElement);\n }\n }\n get title() {\n return this.localization.get('fontSize');\n }\n /**\n * @hidden\n */\n openDialog() {\n const dialogSettings = {\n appendTo: this.editor.dialogContainer,\n content: FontSizeDialogComponent\n };\n this.editor.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialogSettings).content.instance;\n dialogContent.setData({\n editor: this.editor,\n data: this.data,\n defaultItem: this.defaultItem,\n value: this.value,\n itemDisabled: this.itemDisabled\n });\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus() {\n this.tabindex = 0;\n if (this.overflows) {\n this.fontSizeButton.nativeElement.focus();\n }\n else {\n this.fontSizeDropDownList.focus();\n }\n }\n /**\n * @hidden\n */\n handleKey() {\n this.tabindex = -1;\n return false;\n }\n};\nEditorFontSizeComponent.ɵfac = function EditorFontSizeComponent_Factory(t) { return new (t || EditorFontSizeComponent)(ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorFontSizeComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorFontSizeComponent, selectors: [[\"kendo-toolbar-dropdownlist\", \"kendoEditorFontSize\", \"\"]], viewQuery: function EditorFontSizeComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c117, 7);\n ɵngcc0.ɵɵviewQuery(_c118, 7);\n ɵngcc0.ɵɵviewQuery(_c112, 5);\n ɵngcc0.ɵɵviewQuery(_c112, 5, FontSizeDropDownListComponent);\n ɵngcc0.ɵɵviewQuery(_c122, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontSizeDropDownList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontSizeButton = _t.first);\n } }, inputs: { data: \"data\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFontSizeComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], attrs: _c123, decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"title\", \"disabled\", \"tabindex\", \"valueChange\"], [\"element\", \"\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"icon\", \"disabled\", \"tabindex\", \"click\"], [\"fontSizeButton\", \"\"]], template: function EditorFontSizeComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, EditorFontSizeComponent_ng_template_0_Template, 2, 7, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, EditorFontSizeComponent_ng_template_2_Template, 3, 5, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [FontSizeDropDownListComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], EditorFontSizeComponent.prototype, \"data\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], EditorFontSizeComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFontSizeComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFontSizeComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('element', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorFontSizeComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('element', { read: FontSizeDropDownListComponent, static: false }),\n __metadata(\"design:type\", FontSizeDropDownListComponent)\n], EditorFontSizeComponent.prototype, \"fontSizeDropDownList\", void 0);\n__decorate([\n ViewChild('fontSizeButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorFontSizeComponent.prototype, \"fontSizeButton\", void 0);\nEditorFontSizeComponent = EditorFontSizeComponent_1 = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [EditorComponent,\n DialogService,\n EditorLocalizationService,\n EditorToolsService])\n], EditorFontSizeComponent);\n\nvar EditorFontFamilyComponent_1;\n/**\n * A component which configures an existing `DropDownListComponent` as an Editor tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The component associates a `kendo-toolbar-dropdownlist` with an Editor command that changes the font family of a content block and\n * automatically defines the options of the drop-down list and sets its values.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorFontFamilyComponent = EditorFontFamilyComponent_1 = class EditorFontFamilyComponent extends ToolBarToolComponent {\n constructor(editor, dialogService, localization, toolsService) {\n super();\n this.editor = editor;\n this.dialogService = dialogService;\n this.localization = localization;\n this.toolsService = toolsService;\n this.disabled = false;\n this.tabindex = -1;\n /**\n * Fires when the user updates the value of the drop-down list.\n */\n this.valueChange = new EventEmitter();\n this._data = [\n { text: 'Arial', fontName: 'Arial,\"Helvetica Neue\",Helvetica,sans-serif' },\n { text: 'Courier New', fontName: '\"Courier New\",Courier,\"Lucida Sans Typewriter\",\"Lucida Typewriter\",monospace' },\n { text: 'Georgia', fontName: 'Georgia,Times,\"Times New Roman\",serif' },\n {\n fontName: \n // tslint:disable-next-line:max-line-length\n 'Impact,Haettenschweiler,\"Franklin Gothic Bold\",Charcoal,\"Helvetica Inserat\",\"Bitstream Vera Sans Bold\",\"Arial Black\",\"sans serif\"',\n text: 'Impact'\n },\n { text: 'Lucida Console', fontName: '\"Lucida Console\",\"Lucida Sans Typewriter\",monaco,\"Bitstream Vera Sans Mono\",monospace' },\n { text: 'Tahoma', fontName: 'Tahoma,Verdana,Segoe,sans-serif' },\n { text: 'Times New Roman', fontName: 'TimesNewRoman,\"Times New Roman\",Times,Baskerville,Georgia,serif' },\n { text: 'Trebuchet MS', fontName: '\"Trebuchet MS\",\"Lucida Grande\",\"Lucida Sans Unicode\",\"Lucida Sans\",Tahoma,sans-serif' },\n { text: 'Verdana', fontName: 'Verdana,Geneva,sans-serif' }\n ];\n }\n /**\n * Overrides the default font list.\n */\n set data(fonts) {\n this._data = fonts || this._data;\n }\n get data() {\n return this._data;\n }\n ngOnInit() {\n this.itemDisabled = (itemArgs) => {\n if (!this.overflows && this.fontFamilyDropDownList && !this.fontFamilyDropDownList.dropDownList.isOpen) {\n return true; //disable all items in order to prevent navigation when DDL is closed\n }\n else {\n return itemArgs.dataItem.fontName === null;\n }\n };\n setTimeout(() => {\n this.defaultItem = { text: this.title, fontName: null };\n this.toolsService.needsCheck.next();\n });\n this.subs = this.editor.stateChange.subscribe(({ style }) => {\n this.value = getUniqueStyleValues(style.selected, 'font-family') || null;\n this.disabled = style.disabled;\n });\n }\n /**\n * @hidden\n */\n onValueChange(ev) {\n if (isPresent(ev)) {\n this.editor.exec('fontFamily', ev);\n this.editor.view.focus();\n this.valueChange.emit(this.data.find(f => f.fontName === ev));\n }\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n get outerWidth() {\n if (this.element) {\n return outerWidth(this.element.nativeElement);\n }\n }\n get title() {\n return this.localization.get('fontFamily');\n }\n /**\n * @hidden\n */\n openDialog() {\n const dialogSettings = {\n appendTo: this.editor.dialogContainer,\n content: FontFamilyDialogComponent\n };\n this.editor.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialogSettings).content.instance;\n dialogContent.setData({\n editor: this.editor,\n data: this.data,\n defaultItem: this.defaultItem,\n value: this.value,\n itemDisabled: this.itemDisabled\n });\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus() {\n this.tabindex = 0;\n if (this.overflows) {\n this.fontFamilyButton.nativeElement.focus();\n }\n else {\n this.fontFamilyDropDownList.focus();\n }\n }\n /**\n * @hidden\n */\n handleKey() {\n this.tabindex = -1;\n return false;\n }\n};\nEditorFontFamilyComponent.ɵfac = function EditorFontFamilyComponent_Factory(t) { return new (t || EditorFontFamilyComponent)(ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorFontFamilyComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorFontFamilyComponent, selectors: [[\"kendo-toolbar-dropdownlist\", \"kendoEditorFontFamily\", \"\"]], viewQuery: function EditorFontFamilyComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c117, 7);\n ɵngcc0.ɵɵviewQuery(_c118, 7);\n ɵngcc0.ɵɵviewQuery(_c112, 5);\n ɵngcc0.ɵɵviewQuery(_c112, 5, FontFamilyDropDownListComponent);\n ɵngcc0.ɵɵviewQuery(_c124, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontFamilyDropDownList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.fontFamilyButton = _t.first);\n } }, inputs: { data: \"data\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFontFamilyComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], attrs: _c125, decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"defaultItem\", \"data\", \"value\", \"itemDisabled\", \"title\", \"disabled\", \"tabindex\", \"valueChange\"], [\"element\", \"\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"icon\", \"disabled\", \"tabindex\", \"click\"], [\"fontFamilyButton\", \"\"]], template: function EditorFontFamilyComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, EditorFontFamilyComponent_ng_template_0_Template, 2, 7, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, EditorFontFamilyComponent_ng_template_2_Template, 3, 5, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [FontFamilyDropDownListComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], EditorFontFamilyComponent.prototype, \"data\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], EditorFontFamilyComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFontFamilyComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorFontFamilyComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('element', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorFontFamilyComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('element', { read: FontFamilyDropDownListComponent, static: false }),\n __metadata(\"design:type\", FontFamilyDropDownListComponent)\n], EditorFontFamilyComponent.prototype, \"fontFamilyDropDownList\", void 0);\n__decorate([\n ViewChild('fontFamilyButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorFontFamilyComponent.prototype, \"fontFamilyButton\", void 0);\nEditorFontFamilyComponent = EditorFontFamilyComponent_1 = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [EditorComponent,\n DialogService,\n EditorLocalizationService,\n EditorToolsService])\n], EditorFontFamilyComponent);\n\n// tslint:disable:no-forward-ref\nvar EditorColorPickerComponent_1;\n/**\n * A component which configures an existing ColorPickerComponent as a ToolBar tool.\n * To associate a `kendo-toolbar-colorpicker` with an Editor command that changes the\n * foreground or the background color of the text, use the `kendoEditorForeColor` or `kendoEditorBackColor` directive.\n */\nlet EditorColorPickerComponent = EditorColorPickerComponent_1 = class EditorColorPickerComponent extends ToolBarToolComponent {\n constructor(editor, localization, dialogService, ngZone) {\n super();\n this.editor = editor;\n this.localization = localization;\n this.dialogService = dialogService;\n this.ngZone = ngZone;\n this.tabindex = -1;\n /**\n * Specifies if the component should be disabled.\n */\n this.disabled = false;\n /**\n * Specifies whether the ColorPicker will render a gradient, palette or combo view.\n *\n * @default 'palette'\n */\n this.view = 'palette';\n }\n /**\n * @hidden\n */\n get title() {\n return this.localization.get(this.editorCommand);\n }\n ngOnInit() {\n this.subs = this.editor.stateChange.subscribe(({ style }) => {\n this.disabled = style.disabled;\n });\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n handleValueChange(color) {\n this.editor.exec(this.editorCommand, color);\n }\n /**\n * @hidden\n */\n handleActiveColorClick(event) {\n event.preventOpen();\n this.handleValueChange(event.color);\n }\n /**\n * @hidden\n */\n onOpen(picker) {\n this.valueCache = picker.value;\n picker.reset();\n }\n /**\n * @hidden\n */\n onClose(picker) {\n if (!picker.value) {\n picker.value = this.valueCache;\n }\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.editor.view.focus());\n }\n /**\n * @hidden\n */\n get outerWidth() {\n if (this.element) {\n return outerWidth(this.element.nativeElement);\n }\n }\n /**\n * @hidden\n */\n openDialog() {\n const dialogSettings = {\n appendTo: this.editor.dialogContainer,\n content: ColorPickerDialogComponent\n };\n this.editor.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialogSettings).content.instance;\n dialogContent.setData({\n editor: this.editor,\n value: this.value,\n title: this.title,\n editorCommand: this.editorCommand,\n paletteSettings: this.paletteSettings,\n icon: this.icon,\n view: this.view\n });\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus() {\n this.tabindex = 0;\n if (this.overflows) {\n this.colorPickerButton.nativeElement.focus();\n }\n else {\n this.colorPicker.focus();\n }\n }\n /**\n * @hidden\n */\n handleKey() {\n this.tabindex = -1;\n return false;\n }\n};\nEditorColorPickerComponent.ɵfac = function EditorColorPickerComponent_Factory(t) { return new (t || EditorColorPickerComponent)(ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nEditorColorPickerComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorColorPickerComponent, selectors: [[\"kendo-toolbar-colorpicker\"]], viewQuery: function EditorColorPickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c117, 7);\n ɵngcc0.ɵɵviewQuery(_c118, 7);\n ɵngcc0.ɵɵviewQuery(_c114, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c114, 5, ColorPickerComponent);\n ɵngcc0.ɵɵviewQuery(_c126, 5, ElementRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.colorPicker = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.colorPickerButton = _t.first);\n } }, inputs: { disabled: \"disabled\", view: \"view\", value: \"value\", icon: \"icon\", paletteSettings: \"paletteSettings\", editorCommand: \"editorCommand\" }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorColorPickerComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"view\", \"format\", \"icon\", \"value\", \"paletteSettings\", \"disabled\", \"tabindex\", \"valueChange\", \"activeColorClick\", \"open\", \"close\"], [\"colorpicker\", \"\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"icon\", \"disabled\", \"tabindex\", \"click\"], [\"colorPickerButton\", \"\"]], template: function EditorColorPickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, EditorColorPickerComponent_ng_template_0_Template, 2, 8, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, EditorColorPickerComponent_ng_template_2_Template, 3, 5, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc8.ColorPickerComponent, ɵngcc2.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], EditorColorPickerComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], EditorColorPickerComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], EditorColorPickerComponent.prototype, \"paletteSettings\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], EditorColorPickerComponent.prototype, \"editorCommand\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], EditorColorPickerComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], EditorColorPickerComponent.prototype, \"view\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorColorPickerComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorColorPickerComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('colorpicker', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorColorPickerComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('colorpicker', { read: ColorPickerComponent, static: false }),\n __metadata(\"design:type\", ColorPickerComponent)\n], EditorColorPickerComponent.prototype, \"colorPicker\", void 0);\n__decorate([\n ViewChild('colorPickerButton', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorColorPickerComponent.prototype, \"colorPickerButton\", void 0);\nEditorColorPickerComponent = EditorColorPickerComponent_1 = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [EditorComponent,\n EditorLocalizationService,\n DialogService,\n NgZone])\n], EditorColorPickerComponent);\n\nvar EditorInsertTableButtonComponent_1;\nconst popupWrapperWidth = '190px';\nconst popupWrapperHeight = '164px'; // Set to '192px' when TableWizard button is added;\n/**\n * A toolbar component which allows the user to create and insert a table in the Editor's content.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorInsertTableButtonComponent = EditorInsertTableButtonComponent_1 = class EditorInsertTableButtonComponent extends ToolBarToolComponent {\n constructor(editor, localization, popupService, dialogService) {\n super();\n this.editor = editor;\n this.localization = localization;\n this.popupService = popupService;\n this.dialogService = dialogService;\n this.open = false;\n this.buttonBlurred = new EventEmitter();\n this.cellClicked = new EventEmitter();\n this.subs = this.editor.stateChange.subscribe(({ insertTable }) => {\n this.disabled = insertTable.disabled;\n });\n this.subs.add(this.buttonBlurred.pipe(concatMap(() => interval(200).pipe(take(1), takeUntil(this.cellClicked)))).subscribe(() => {\n this.toggle(false);\n }));\n }\n ngOnDestroy() {\n this.destroyPopup();\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n get outerWidth() {\n if (this.element) {\n return outerWidth(this.element.nativeElement);\n }\n }\n get title() {\n return this.localization.get('insertTable');\n }\n /**\n * @hidden\n */\n toggle(open) {\n this.open = open === undefined ? !this.open : open;\n this.destroyPopup();\n if (this.open) {\n this.createPopup();\n }\n }\n /**\n * @hidden\n */\n openDialog() {\n const dialogSettings = {\n appendTo: this.editor.dialogContainer,\n content: InsertTableDialogComponent\n };\n this.editor.toolbar.toggle(false);\n const dialogContent = this.dialogService.open(dialogSettings).content.instance;\n dialogContent.setData({\n editor: this.editor\n });\n }\n /**\n * @hidden\n */\n onBlur() {\n this.tabIndex = -1;\n this.buttonBlurred.emit();\n }\n /**\n * @hidden\n */\n onCellClick(args) {\n this.cellClicked.emit();\n this.toggle(false);\n this.editor.exec('insertTable', args);\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus() {\n this.tabIndex = 0;\n this.getButton().focus();\n }\n /**\n * @hidden\n */\n handleKey(ev) {\n if (ev.keyCode === Keys.Space || ev.keyCode === Keys.Enter) {\n return true;\n }\n this.tabIndex = -1;\n return false;\n }\n /**\n * @hidden\n */\n onTableWizardClick() {\n // this.toggle(false);\n // this.editor.openDialog(\"tableWizard\");\n }\n createPopup() {\n const horizontalAlign = this.editor.direction === 'rtl' ? 'right' : 'left';\n const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };\n const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };\n this.popupRef = this.popupService.open({\n anchor: this.element,\n anchorAlign: anchorPosition,\n animate: true,\n content: this.popupGridTemplate,\n popupAlign: popupPosition,\n popupClass: 'k-ct-popup k-group k-reset k-state-border-up',\n positionMode: 'absolute'\n });\n const popupWrapper = this.popupRef.popupElement;\n popupWrapper.style.width = popupWrapperWidth;\n popupWrapper.style.height = popupWrapperHeight;\n popupWrapper.setAttribute('dir', this.editor.direction);\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n getButton() {\n return (this.overflows ? this.overflowElement : this.element).nativeElement;\n }\n};\nEditorInsertTableButtonComponent.ɵfac = function EditorInsertTableButtonComponent_Factory(t) { return new (t || EditorInsertTableButtonComponent)(ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc9.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DialogService)); };\nEditorInsertTableButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: EditorInsertTableButtonComponent, selectors: [[\"kendo-editor-insert-table-button\"]], viewQuery: function EditorInsertTableButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c117, 7);\n ɵngcc0.ɵɵviewQuery(_c118, 5);\n ɵngcc0.ɵɵviewQuery(_c112, 5);\n ɵngcc0.ɵɵviewQuery(_c127, 5);\n ɵngcc0.ɵɵviewQuery(_c128, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.element = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowElement = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupGridTemplate = _t.first);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorInsertTableButtonComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 6, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [\"popupGridTemplate\", \"\"], [\"type\", \"button\", \"kendoButton\", \"\", 3, \"icon\", \"disabled\", \"click\", \"blur\"], [\"element\", \"\"], [\"kendoButton\", \"\", 3, \"icon\", \"disabled\", \"click\"], [\"overflowElement\", \"\"], [3, \"cellClick\", \"tableWizardClick\"]], template: function EditorInsertTableButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, EditorInsertTableButtonComponent_ng_template_0_Template, 2, 4, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, EditorInsertTableButtonComponent_ng_template_2_Template, 3, 5, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(4, EditorInsertTableButtonComponent_ng_template_4_Template, 1, 0, \"ng-template\", null, 2, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: function () { return [ɵngcc2.ButtonDirective, PopupTableGridComponent]; }, encapsulation: 2 });\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorInsertTableButtonComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: false }),\n __metadata(\"design:type\", TemplateRef)\n], EditorInsertTableButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('element', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorInsertTableButtonComponent.prototype, \"element\", void 0);\n__decorate([\n ViewChild('overflowElement', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], EditorInsertTableButtonComponent.prototype, \"overflowElement\", void 0);\n__decorate([\n ViewChild('popupGridTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], EditorInsertTableButtonComponent.prototype, \"popupGridTemplate\", void 0);\nEditorInsertTableButtonComponent = EditorInsertTableButtonComponent_1 = __decorate([ __param(0, Host()),\n __metadata(\"design:paramtypes\", [EditorComponent,\n EditorLocalizationService,\n PopupService,\n DialogService])\n], EditorInsertTableButtonComponent);\n\n/**\n * @hidden\n */\nlet PopupTableGridComponent = class PopupTableGridComponent {\n /**\n * @hidden\n */\n constructor() {\n this.cellClick = new EventEmitter();\n this.tableWizardClick = new EventEmitter();\n this.state = { rows: -1, cols: -1 };\n this.rows = 6;\n this.cols = 8;\n }\n get message() {\n const { rows, cols } = this.state;\n return `Create a ${rows > -1 ? rows + 1 : ''} ${cols > -1 ? 'x' : ''} ${cols > -1 ? cols + 1 : ''} table`;\n }\n get cells() {\n return Array.from(Array(this.rows * this.cols).keys());\n }\n selected(index) {\n const { rows, cols } = this.state;\n const cellRow = Math.floor(index / this.cols);\n const cellCol = index % this.cols;\n return cellRow <= rows && cellCol <= cols;\n }\n setState(index) {\n const rows = Math.floor(index / this.cols);\n const cols = index % this.cols;\n this.state = { rows: rows, cols: cols };\n }\n resetState() {\n this.state = { rows: -1, cols: -1 };\n }\n insertTable() {\n this.cellClick.emit(this.state);\n }\n openTableWizard() {\n this.tableWizardClick.emit();\n }\n};\nPopupTableGridComponent.ɵfac = function PopupTableGridComponent_Factory(t) { return new (t || PopupTableGridComponent)(); };\nPopupTableGridComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PopupTableGridComponent, selectors: [[\"kendo-popup-table-grid\"]], outputs: { cellClick: \"cellClick\", tableWizardClick: \"tableWizardClick\" }, decls: 4, vars: 2, consts: [[2, \"border-color\", \"inherit\", 3, \"mouseleave\", \"click\"], [\"class\", \"k-ct-cell\", 3, \"k-state-selected\", \"k-state-disabled\", \"mouseenter\", 4, \"ngFor\", \"ngForOf\"], [\"unselectable\", \"on\", 1, \"k-status\"], [1, \"k-ct-cell\", 3, \"mouseenter\"]], template: function PopupTableGridComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"mouseleave\", function PopupTableGridComponent_Template_div_mouseleave_0_listener() { return ctx.resetState(); })(\"click\", function PopupTableGridComponent_Template_div_click_0_listener() { return ctx.insertTable(); });\n ɵngcc0.ɵɵtemplate(1, PopupTableGridComponent_span_1_Template, 1, 4, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.cells);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx.message);\n } }, directives: [ɵngcc4.NgForOf], encapsulation: 2 });\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupTableGridComponent.prototype, \"cellClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupTableGridComponent.prototype, \"tableWizardClick\", void 0);\n\n/**\n * @hidden\n */\nconst commandIcons = {\n alignCenter: 'align-center',\n alignJustify: 'align-justify',\n alignLeft: 'align-left',\n alignRight: 'align-right',\n backColor: 'background',\n bold: 'bold',\n cleanFormatting: 'clear-css',\n createLink: 'link-horizontal',\n foreColor: 'foreground-color',\n indent: 'indent-increase',\n insertFile: 'file-add',\n insertImage: 'image',\n insertOrderedList: 'list-ordered',\n insertUnorderedList: 'list-unordered',\n italic: 'italic',\n outdent: 'indent-decrease',\n print: 'print',\n redo: 'redo',\n selectAll: 'select-all',\n strikethrough: 'strikethrough',\n subscript: 'sub-script',\n superscript: 'sup-script',\n underline: 'underline',\n undo: 'undo',\n unlink: 'unlink-horizontal',\n viewSource: 'html',\n //table\n insertTable: 'table-insert',\n addColumnBefore: 'table-column-insert-left',\n addColumnAfter: 'table-column-insert-right',\n addRowBefore: 'table-row-insert-above',\n addRowAfter: 'table-row-insert-below',\n deleteRow: 'table-row-delete',\n deleteColumn: 'table-column-delete',\n mergeCells: 'cells-merge',\n splitCell: 'cell-split-horizontally',\n deleteTable: 'table-delete'\n // tableWizard: 'table-wizard'\n};\n\n/**\n * @hidden\n */\nclass EditorCommandBase {\n constructor(command, button, editor, localization, toolsService) {\n this.command = command;\n this.button = button;\n this.editor = editor;\n this.localization = localization;\n this.toolsService = toolsService;\n setTimeout(() => {\n const text = this.localization.get(this.command);\n if (text) {\n this.button.showText = 'overflow';\n this.button.showIcon = 'both';\n this.button.text = text;\n }\n if (!this.button.toolbarOptions.icon) {\n this.button.icon = commandIcons[this.command];\n }\n this.button.title = text;\n this.toolsService.needsCheck.next();\n });\n }\n ngOnInit() {\n this.subs = this.editor.stateChange.subscribe(this.onStateChange.bind(this));\n this.subs.add(this.button.click.subscribe((this.clickHandler.bind(this))));\n this.subs.add(this.button.pointerdown.subscribe((this.pointerdownHandler.bind(this))));\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n // tslint:disable-next-line\n clickHandler() { }\n // tslint:disable-next-line\n pointerdownHandler(_event) { }\n // tslint:disable-next-line\n onStateChange(_toolBarState) { }\n}\nEditorCommandBase.ɵfac = function EditorCommandBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nEditorCommandBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorCommandBase });\n\n/**\n * @hidden\n */\nclass EditorCommandButton extends EditorCommandBase {\n constructor(command, button, editor, localization, toolsService) {\n super(command, button, editor, localization, toolsService);\n this.command = command;\n this.button = button;\n this.editor = editor;\n this.localization = localization;\n this.toolsService = toolsService;\n }\n clickHandler() {\n this.editor.exec(this.command, this.editor.applyToWord);\n this.editor.focus();\n }\n pointerdownHandler(e) {\n e.preventDefault();\n }\n onStateChange(toolBarState) {\n this.button.selected = toolBarState[this.command].selected;\n this.button.disabled = toolBarState[this.command].disabled;\n }\n}\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AlignLeft tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAlignLeftButtonDirective = class EditorAlignLeftButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('alignLeft', button, editor, localization, toolsService);\n }\n};\nEditorAlignLeftButtonDirective.ɵfac = function EditorAlignLeftButtonDirective_Factory(t) { return new (t || EditorAlignLeftButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAlignLeftButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAlignLeftButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAlignLeftButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAlignLeftButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAlignLeftButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AlignCenter tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAlignCenterButtonDirective = class EditorAlignCenterButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('alignCenter', button, editor, localization, toolsService);\n }\n};\nEditorAlignCenterButtonDirective.ɵfac = function EditorAlignCenterButtonDirective_Factory(t) { return new (t || EditorAlignCenterButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAlignCenterButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAlignCenterButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAlignCenterButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAlignCenterButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAlignCenterButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AlignRight tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAlignRightButtonDirective = class EditorAlignRightButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('alignRight', button, editor, localization, toolsService);\n }\n};\nEditorAlignRightButtonDirective.ɵfac = function EditorAlignRightButtonDirective_Factory(t) { return new (t || EditorAlignRightButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAlignRightButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAlignRightButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAlignRightButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAlignRightButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAlignRightButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AlignJustify tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAlignJustifyButtonDirective = class EditorAlignJustifyButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('alignJustify', button, editor, localization, toolsService);\n }\n};\nEditorAlignJustifyButtonDirective.ɵfac = function EditorAlignJustifyButtonDirective_Factory(t) { return new (t || EditorAlignJustifyButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAlignJustifyButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAlignJustifyButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAlignJustifyButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAlignJustifyButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAlignJustifyButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Redo tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorRedoButtonDirective = class EditorRedoButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('redo', button, editor, localization, toolsService);\n }\n};\nEditorRedoButtonDirective.ɵfac = function EditorRedoButtonDirective_Factory(t) { return new (t || EditorRedoButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorRedoButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorRedoButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorRedoButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorRedoButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorRedoButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Undo tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorUndoButtonDirective = class EditorUndoButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('undo', button, editor, localization, toolsService);\n }\n};\nEditorUndoButtonDirective.ɵfac = function EditorUndoButtonDirective_Factory(t) { return new (t || EditorUndoButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorUndoButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorUndoButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorUndoButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorUndoButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorUndoButtonDirective);\n\n/**\n * @hidden\n */\nclass EditorCommandDialog extends EditorCommandBase {\n constructor(dialog, button, editor, localization, toolsService) {\n super(dialog, button, editor, localization, toolsService);\n this.dialog = dialog;\n this.button = button;\n this.editor = editor;\n this.localization = localization;\n this.toolsService = toolsService;\n }\n clickHandler() {\n this.editor.openDialog(this.dialog);\n }\n onStateChange(toolBarState) {\n this.button.selected = toolBarState[this.command].selected;\n this.button.disabled = toolBarState[this.command].disabled;\n }\n}\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor InsertImage tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorInsertImageButtonDirective = class EditorInsertImageButtonDirective extends EditorCommandDialog {\n constructor(button, editor, localization, toolsService) {\n super('insertImage', button, editor, localization, toolsService);\n }\n};\nEditorInsertImageButtonDirective.ɵfac = function EditorInsertImageButtonDirective_Factory(t) { return new (t || EditorInsertImageButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorInsertImageButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorInsertImageButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorInsertImageButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorInsertImageButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorInsertImageButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Indent tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorIndentButtonDirective = class EditorIndentButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('indent', button, editor, localization, toolsService);\n }\n};\nEditorIndentButtonDirective.ɵfac = function EditorIndentButtonDirective_Factory(t) { return new (t || EditorIndentButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorIndentButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorIndentButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorIndentButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorIndentButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorIndentButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Outdent tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorOutdentButtonDirective = class EditorOutdentButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('outdent', button, editor, localization, toolsService);\n }\n};\nEditorOutdentButtonDirective.ɵfac = function EditorOutdentButtonDirective_Factory(t) { return new (t || EditorOutdentButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorOutdentButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorOutdentButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorOutdentButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorOutdentButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorOutdentButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor CreateLink tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorCreateLinkButtonDirective = class EditorCreateLinkButtonDirective extends EditorCommandDialog {\n constructor(button, editor, localization, toolsService) {\n super('createLink', button, editor, localization, toolsService);\n }\n};\nEditorCreateLinkButtonDirective.ɵfac = function EditorCreateLinkButtonDirective_Factory(t) { return new (t || EditorCreateLinkButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorCreateLinkButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorCreateLinkButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorCreateLinkButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorCreateLinkButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorCreateLinkButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Unlink tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorUnlinkButtonDirective = class EditorUnlinkButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('unlink', button, editor, localization, toolsService);\n }\n};\nEditorUnlinkButtonDirective.ɵfac = function EditorUnlinkButtonDirective_Factory(t) { return new (t || EditorUnlinkButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorUnlinkButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorUnlinkButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorUnlinkButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorUnlinkButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorUnlinkButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor InsertOrderedList tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorInsertOrderedListButtonDirective = class EditorInsertOrderedListButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('insertOrderedList', button, editor, localization, toolsService);\n }\n};\nEditorInsertOrderedListButtonDirective.ɵfac = function EditorInsertOrderedListButtonDirective_Factory(t) { return new (t || EditorInsertOrderedListButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorInsertOrderedListButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorInsertOrderedListButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorInsertOrderedListButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorInsertOrderedListButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorInsertOrderedListButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor InsertUnorderedList tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorInsertUnorderedListButtonDirective = class EditorInsertUnorderedListButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('insertUnorderedList', button, editor, localization, toolsService);\n }\n};\nEditorInsertUnorderedListButtonDirective.ɵfac = function EditorInsertUnorderedListButtonDirective_Factory(t) { return new (t || EditorInsertUnorderedListButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorInsertUnorderedListButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorInsertUnorderedListButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorInsertUnorderedListButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorInsertUnorderedListButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorInsertUnorderedListButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor ViewSource tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorViewSourceButtonDirective = class EditorViewSourceButtonDirective extends EditorCommandDialog {\n constructor(button, editor, localization, toolsService) {\n super('viewSource', button, editor, localization, toolsService);\n }\n};\nEditorViewSourceButtonDirective.ɵfac = function EditorViewSourceButtonDirective_Factory(t) { return new (t || EditorViewSourceButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorViewSourceButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorViewSourceButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorViewSourceButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorViewSourceButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorViewSourceButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Bold tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorBoldButtonDirective = class EditorBoldButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('bold', button, editor, localization, toolsService);\n }\n};\nEditorBoldButtonDirective.ɵfac = function EditorBoldButtonDirective_Factory(t) { return new (t || EditorBoldButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorBoldButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorBoldButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorBoldButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorBoldButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorBoldButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Italic tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorItalicButtonDirective = class EditorItalicButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('italic', button, editor, localization, toolsService);\n }\n};\nEditorItalicButtonDirective.ɵfac = function EditorItalicButtonDirective_Factory(t) { return new (t || EditorItalicButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorItalicButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorItalicButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorItalicButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorItalicButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorItalicButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Underline tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorUnderlineButtonDirective = class EditorUnderlineButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('underline', button, editor, localization, toolsService);\n }\n};\nEditorUnderlineButtonDirective.ɵfac = function EditorUnderlineButtonDirective_Factory(t) { return new (t || EditorUnderlineButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorUnderlineButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorUnderlineButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorUnderlineButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorUnderlineButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorUnderlineButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Strikethrough tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorStrikethroughButtonDirective = class EditorStrikethroughButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('strikethrough', button, editor, localization, toolsService);\n }\n};\nEditorStrikethroughButtonDirective.ɵfac = function EditorStrikethroughButtonDirective_Factory(t) { return new (t || EditorStrikethroughButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorStrikethroughButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorStrikethroughButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorStrikethroughButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorStrikethroughButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorStrikethroughButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Subscript tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorSubscriptButtonDirective = class EditorSubscriptButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('subscript', button, editor, localization, toolsService);\n }\n};\nEditorSubscriptButtonDirective.ɵfac = function EditorSubscriptButtonDirective_Factory(t) { return new (t || EditorSubscriptButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorSubscriptButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorSubscriptButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorSubscriptButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorSubscriptButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorSubscriptButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Superscript tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `selected` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorSuperscriptButtonDirective = class EditorSuperscriptButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('superscript', button, editor, localization, toolsService);\n }\n};\nEditorSuperscriptButtonDirective.ɵfac = function EditorSuperscriptButtonDirective_Factory(t) { return new (t || EditorSuperscriptButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorSuperscriptButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorSuperscriptButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorSuperscriptButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorSuperscriptButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorSuperscriptButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor 'Insert File' tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorInsertFileButtonDirective = class EditorInsertFileButtonDirective extends EditorCommandDialog {\n constructor(button, editor, localization, toolsService) {\n super('insertFile', button, editor, localization, toolsService);\n }\n};\nEditorInsertFileButtonDirective.ɵfac = function EditorInsertFileButtonDirective_Factory(t) { return new (t || EditorInsertFileButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorInsertFileButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorInsertFileButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorInsertFileButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorInsertFileButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorInsertFileButtonDirective);\n\n/**\n * A directive which configures an `EditorColorPickerComponent`\n * for manipulating the foreground color of the text\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n */\nlet EditorForeColorDirective = class EditorForeColorDirective {\n constructor(colorPicker) {\n this.colorPicker = colorPicker;\n this.colorPicker.icon = commandIcons.foreColor;\n this.colorPicker.editorCommand = 'foreColor';\n }\n};\nEditorForeColorDirective.ɵfac = function EditorForeColorDirective_Factory(t) { return new (t || EditorForeColorDirective)(ɵngcc0.ɵɵdirectiveInject(EditorColorPickerComponent)); };\nEditorForeColorDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorForeColorDirective, selectors: [[\"\", \"kendoEditorForeColor\", \"\"]] });\nEditorForeColorDirective = __decorate([ __metadata(\"design:paramtypes\", [EditorColorPickerComponent])\n], EditorForeColorDirective);\n\n/**\n * A directive which configures an `EditorColorPickerComponent`\n * for manipulating the background color of the text\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n */\nlet EditorBackColorDirective = class EditorBackColorDirective {\n constructor(colorPicker) {\n this.colorPicker = colorPicker;\n this.colorPicker.icon = commandIcons.backColor;\n this.colorPicker.editorCommand = 'backColor';\n }\n};\nEditorBackColorDirective.ɵfac = function EditorBackColorDirective_Factory(t) { return new (t || EditorBackColorDirective)(ɵngcc0.ɵɵdirectiveInject(EditorColorPickerComponent)); };\nEditorBackColorDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorBackColorDirective, selectors: [[\"\", \"kendoEditorBackColor\", \"\"]] });\nEditorBackColorDirective = __decorate([ __metadata(\"design:paramtypes\", [EditorColorPickerComponent])\n], EditorBackColorDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Clean Formatting tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorCleanFormattingButtonDirective = class EditorCleanFormattingButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('cleanFormatting', button, editor, localization, toolsService);\n }\n};\nEditorCleanFormattingButtonDirective.ɵfac = function EditorCleanFormattingButtonDirective_Factory(t) { return new (t || EditorCleanFormattingButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorCleanFormattingButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorCleanFormattingButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorCleanFormattingButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorCleanFormattingButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorCleanFormattingButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AddColumnBefore tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAddColumnBeforeButtonDirective = class EditorAddColumnBeforeButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('addColumnBefore', button, editor, localization, toolsService);\n }\n};\nEditorAddColumnBeforeButtonDirective.ɵfac = function EditorAddColumnBeforeButtonDirective_Factory(t) { return new (t || EditorAddColumnBeforeButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAddColumnBeforeButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAddColumnBeforeButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAddColumnBeforeButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAddColumnBeforeButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAddColumnBeforeButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AddColumnAfter tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAddColumnAfterButtonDirective = class EditorAddColumnAfterButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('addColumnAfter', button, editor, localization, toolsService);\n }\n};\nEditorAddColumnAfterButtonDirective.ɵfac = function EditorAddColumnAfterButtonDirective_Factory(t) { return new (t || EditorAddColumnAfterButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAddColumnAfterButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAddColumnAfterButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAddColumnAfterButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAddColumnAfterButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAddColumnAfterButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AddRowBefore tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAddRowBeforeButtonDirective = class EditorAddRowBeforeButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('addRowBefore', button, editor, localization, toolsService);\n }\n};\nEditorAddRowBeforeButtonDirective.ɵfac = function EditorAddRowBeforeButtonDirective_Factory(t) { return new (t || EditorAddRowBeforeButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAddRowBeforeButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAddRowBeforeButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAddRowBeforeButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAddRowBeforeButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAddRowBeforeButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor AddRowAfter tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorAddRowAfterButtonDirective = class EditorAddRowAfterButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('addRowAfter', button, editor, localization, toolsService);\n }\n};\nEditorAddRowAfterButtonDirective.ɵfac = function EditorAddRowAfterButtonDirective_Factory(t) { return new (t || EditorAddRowAfterButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorAddRowAfterButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorAddRowAfterButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorAddRowAfterButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorAddRowAfterButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorAddRowAfterButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor DeleteColumn tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorDeleteColumnButtonDirective = class EditorDeleteColumnButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('deleteColumn', button, editor, localization, toolsService);\n }\n};\nEditorDeleteColumnButtonDirective.ɵfac = function EditorDeleteColumnButtonDirective_Factory(t) { return new (t || EditorDeleteColumnButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorDeleteColumnButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorDeleteColumnButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorDeleteColumnButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorDeleteColumnButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorDeleteColumnButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor DeleteRow tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorDeleteRowButtonDirective = class EditorDeleteRowButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('deleteRow', button, editor, localization, toolsService);\n }\n};\nEditorDeleteRowButtonDirective.ɵfac = function EditorDeleteRowButtonDirective_Factory(t) { return new (t || EditorDeleteRowButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorDeleteRowButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorDeleteRowButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorDeleteRowButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorDeleteRowButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorDeleteRowButtonDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor DeleteTable tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorDeleteTableButtonDirective = class EditorDeleteTableButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('deleteTable', button, editor, localization, toolsService);\n }\n};\nEditorDeleteTableButtonDirective.ɵfac = function EditorDeleteTableButtonDirective_Factory(t) { return new (t || EditorDeleteTableButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorDeleteTableButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorDeleteTableButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorDeleteTableButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorDeleteTableButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorDeleteTableButtonDirective);\n\n/**\n * @hidden\n *\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor MergeCells tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorMergeCellsButtonDirective = class EditorMergeCellsButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('mergeCells', button, editor, localization, toolsService);\n }\n};\nEditorMergeCellsButtonDirective.ɵfac = function EditorMergeCellsButtonDirective_Factory(t) { return new (t || EditorMergeCellsButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorMergeCellsButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorMergeCellsButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorMergeCellsButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorMergeCellsButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorMergeCellsButtonDirective);\n\n/**\n * @hidden\n *\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor SplitCell tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n * In addition, the directive updates the `disabled` state of the button according to the cursor position in the editing area.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorSplitCellButtonDirective = class EditorSplitCellButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('splitCell', button, editor, localization, toolsService);\n }\n};\nEditorSplitCellButtonDirective.ɵfac = function EditorSplitCellButtonDirective_Factory(t) { return new (t || EditorSplitCellButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorSplitCellButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorSplitCellButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorSplitCellButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorSplitCellButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorSplitCellButtonDirective);\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { alignCenter: \"alignCenter\", alignJustify: \"alignJustify\", alignLeft: \"alignLeft\", alignRight: \"alignRight\", backColor: \"backColor\", bold: \"bold\", cleanFormatting: \"cleanFormatting\", createLink: \"createLink\", fontFamily: \"fontFamily\", fontSize: \"fontSize\", foreColor: \"foreColor\", format: \"format\", indent: \"indent\", insertFile: \"insertFile\", insertImage: \"insertImage\", insertOrderedList: \"insertOrderedList\", insertUnorderedList: \"insertUnorderedList\", italic: \"italic\", outdent: \"outdent\", print: \"print\", redo: \"redo\", selectAll: \"selectAll\", strikethrough: \"strikethrough\", subscript: \"subscript\", superscript: \"superscript\", underline: \"underline\", undo: \"undo\", unlink: \"unlink\", viewSource: \"viewSource\", insertTable: \"insertTable\", addColumnBefore: \"addColumnBefore\", addColumnAfter: \"addColumnAfter\", addRowBefore: \"addRowBefore\", addRowAfter: \"addRowAfter\", deleteColumn: \"deleteColumn\", deleteRow: \"deleteRow\", deleteTable: \"deleteTable\", dialogApply: \"dialogApply\", dialogCancel: \"dialogCancel\", dialogInsert: \"dialogInsert\", dialogUpdate: \"dialogUpdate\", fileText: \"fileText\", fileTitle: \"fileTitle\", fileWebAddress: \"fileWebAddress\", imageAltText: \"imageAltText\", imageHeight: \"imageHeight\", imageWebAddress: \"imageWebAddress\", imageWidth: \"imageWidth\", linkOpenInNewWindow: \"linkOpenInNewWindow\", linkText: \"linkText\", linkTitle: \"linkTitle\", linkWebAddress: \"linkWebAddress\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"alignCenter\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"alignJustify\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"alignLeft\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"alignRight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"backColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"bold\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"cleanFormatting\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"createLink\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"fontFamily\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"fontSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"foreColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"indent\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"insertFile\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"insertImage\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"insertOrderedList\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"insertUnorderedList\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"italic\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"outdent\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"print\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"redo\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"selectAll\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"strikethrough\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"subscript\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"superscript\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"underline\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"undo\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"unlink\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"viewSource\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"insertTable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"addColumnBefore\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"addColumnAfter\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"addRowBefore\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"addRowAfter\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"deleteColumn\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"deleteRow\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"deleteTable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"dialogApply\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"dialogCancel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"dialogInsert\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"dialogUpdate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"fileText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"fileTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"fileWebAddress\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"imageAltText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"imageHeight\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"imageWebAddress\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"imageWidth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"linkOpenInNewWindow\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"linkText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"linkTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"linkWebAddress\", void 0);\n\nvar LocalizedMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedMessagesDirective = LocalizedMessagesDirective_1 = class LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoEditorLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedMessagesDirective = LocalizedMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedMessagesDirective);\n\nvar CustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_editor %}#toc-localization)).\n */\nlet CustomMessagesComponent = CustomMessagesComponent_1 = class CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-editor-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nCustomMessagesComponent = CustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], CustomMessagesComponent);\n\n/**\n * @hidden\n */\nlet DropDownToolDirective = class DropDownToolDirective {\n constructor(hostEl, zone) {\n this.hostEl = hostEl;\n this.zone = zone;\n this.preventDefault = (event) => {\n event.preventDefault();\n };\n }\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.hostEl.nativeElement.addEventListener('pointerdown', this.preventDefault);\n });\n }\n ngOnDestroy() {\n this.hostEl.nativeElement.removeEventListener('pointerdown', this.preventDefault);\n }\n};\nDropDownToolDirective.ɵfac = function DropDownToolDirective_Factory(t) { return new (t || DropDownToolDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDropDownToolDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DropDownToolDirective, selectors: [[\"\", \"kendoEditorDropDownTool\", \"\"]] });\nDropDownToolDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone])\n], DropDownToolDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor Print tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * > The Editor Print tool is supported in the default [`iframe`](https://www.telerik.com/kendo-angular-ui-develop/components/editor/api/EditorComponent/#toc-iframe) mode only.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorPrintDirective = class EditorPrintDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('print', button, editor, localization, toolsService);\n this.editor = editor;\n }\n ngAfterViewInit() {\n if (isDevMode) {\n if (!this.editor.iframe) {\n throw new Error(EditorErrorMessages.printTool);\n }\n }\n }\n clickHandler() {\n if (this.editor.iframe) {\n const view = this.editor.view;\n const dom = view && view.dom;\n const doc = dom && dom.ownerDocument;\n const editorWindow = doc && doc.defaultView;\n if (editorWindow) {\n editorWindow.print();\n }\n }\n }\n};\nEditorPrintDirective.ɵfac = function EditorPrintDirective_Factory(t) { return new (t || EditorPrintDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorPrintDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorPrintDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorPrintButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorPrintDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorPrintDirective);\n\n/**\n * A directive which configures an existing `ToolBarButtonComponent` as an Editor SelectAll tool\n * ([see example]({% slug toolbartools_editor %}#toc-built-in-tools)).\n * The directive will predefine the `icon` and `click` event handlers of the button.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n *\n * The following example demonstrates how to change the default icon that is applied by the directive.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet EditorSelectAllButtonDirective = class EditorSelectAllButtonDirective extends EditorCommandButton {\n constructor(button, editor, localization, toolsService) {\n super('selectAll', button, editor, localization, toolsService);\n }\n clickHandler() {\n this.editor.shouldEmitFocus = true;\n super.clickHandler();\n }\n};\nEditorSelectAllButtonDirective.ɵfac = function EditorSelectAllButtonDirective_Factory(t) { return new (t || EditorSelectAllButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc6.ToolBarButtonComponent), ɵngcc0.ɵɵdirectiveInject(EditorComponent, 1), ɵngcc0.ɵɵdirectiveInject(EditorLocalizationService), ɵngcc0.ɵɵdirectiveInject(EditorToolsService)); };\nEditorSelectAllButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: EditorSelectAllButtonDirective, selectors: [[\"kendo-toolbar-button\", \"kendoEditorSelectAllButton\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nEditorSelectAllButtonDirective = __decorate([ __param(1, Host()),\n __metadata(\"design:paramtypes\", [ToolBarButtonComponent,\n EditorComponent,\n EditorLocalizationService,\n EditorToolsService])\n], EditorSelectAllButtonDirective);\n\nconst COMPONENT_DIRECTIVES = [\n //alignment\n EditorAlignLeftButtonDirective,\n EditorAlignCenterButtonDirective,\n EditorAlignRightButtonDirective,\n EditorAlignJustifyButtonDirective,\n //file\n EditorInsertFileButtonDirective,\n //history\n EditorRedoButtonDirective,\n EditorUndoButtonDirective,\n //image\n EditorInsertImageButtonDirective,\n //indent\n EditorIndentButtonDirective,\n EditorOutdentButtonDirective,\n //link\n EditorCreateLinkButtonDirective,\n EditorUnlinkButtonDirective,\n //list\n EditorInsertOrderedListButtonDirective,\n EditorInsertUnorderedListButtonDirective,\n //source\n EditorViewSourceButtonDirective,\n //typographical emphasis\n EditorBoldButtonDirective,\n EditorItalicButtonDirective,\n EditorUnderlineButtonDirective,\n EditorStrikethroughButtonDirective,\n EditorSubscriptButtonDirective,\n EditorSuperscriptButtonDirective,\n //color\n EditorForeColorDirective,\n EditorBackColorDirective,\n //clear format\n EditorCleanFormattingButtonDirective,\n //table\n EditorAddColumnBeforeButtonDirective,\n EditorAddColumnAfterButtonDirective,\n EditorAddRowBeforeButtonDirective,\n EditorAddRowAfterButtonDirective,\n EditorDeleteColumnButtonDirective,\n EditorDeleteRowButtonDirective,\n EditorDeleteTableButtonDirective,\n EditorMergeCellsButtonDirective,\n EditorSplitCellButtonDirective,\n // EditorTableWizardButtonDirective,\n //localization\n CustomMessagesComponent,\n LocalizedMessagesDirective,\n // dropdown tools\n DropDownToolDirective,\n // print\n EditorPrintDirective,\n // select all\n EditorSelectAllButtonDirective\n];\nconst TOOLBAR_TOOLS = [\n EditorFontSizeComponent,\n EditorFontFamilyComponent,\n EditorFormatComponent,\n EditorColorPickerComponent,\n EditorInsertTableButtonComponent\n];\nconst TOOLBAR_DIALOGS = [\n FileLinkDialogComponent,\n ImageDialogComponent,\n SourceDialogComponent,\n FormatDialogComponent,\n ColorPickerDialogComponent,\n FontFamilyDialogComponent,\n FontSizeDialogComponent,\n InsertTableDialogComponent\n // TableWizardDialogComponent\n // Table Wizard Building Blocks\n // TableSettingsComponent,\n // CellSettingsComponent,\n // AccessibilitySettingsComponent\n];\nconst INTERNAL_COMPONENTS = [\n PopupTableGridComponent,\n FormatDropDownListComponent,\n FontFamilyDropDownListComponent,\n FontSizeDropDownListComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the Editor component.\n *\n * The package exports:\n * - `EditorComponent`—The `EditorComponent` class.\n * - `EditorButtonDirective`—The `EditorButton` directive class.\n * - `EditorDropDownDirective`—The `EditorDropDown` directive class.\n * - `EditorDialogDirective`—The `EditorDialog` directive class.\n * - `ToolBarDropDownListComponent`—The `ToolBarDropDownListComponent` directive class.\n * - `ButtonModule`—The `KendoButton` module.\n * - `ToolBarModule`—The `KendoToolBar` module.\n *\n * * @example\n *\n * ```ts-no-run\n * // Import the Editor module\n * import { EditorModule } from '@progress/kendo-angular-editor';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, EditorModule], // import the Editor module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet EditorModule = class EditorModule {\n};\nEditorModule.ɵfac = function EditorModule_Factory(t) { return new (t || EditorModule)(); };\nEditorModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: EditorModule });\nEditorModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n //Kendo UI Angular Modules\n ButtonModule,\n ColorPickerModule,\n DialogModule,\n DropDownsModule,\n NumericTextBoxModule,\n ToolBarModule,\n TextBoxModule\n ], ToolBarModule,\n ButtonModule,\n FormsModule,\n ReactiveFormsModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SourceDialogComponent, [{\n type: Component,\n args: [{\n styles: [\n `\n >>> .k-editor-textarea {\n height: 100%;\n }\n `\n ],\n template: `\n \n {{ textFor('viewSource') }}\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], textarea: [{\n type: ViewChild,\n args: ['textarea', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ImageDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor('insertImage') }}\n \n
            \n
            \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n \n
            \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], srcInput: [{\n type: ViewChild,\n args: ['srcInput', { read: ElementRef, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FileLinkDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ titleText }}\n \n
            \n
            \n
            \n
            \n
            \n \n
            \n
            \n \n
            \n\n
            \n \n
            \n
            \n \n
            \n\n
            \n \n
            \n
            \n \n
            \n \n
            \n
            \n \n \n
            \n
            \n
            \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], command: [{\n type: Input\n }], hrefInput: [{\n type: ViewChild,\n args: ['hrefInput', { read: ElementRef, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorToolsService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-editor',\n providers: [\n EditorLocalizationService,\n EditorToolsService,\n {\n provide: LocalizationService,\n useExisting: EditorLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.editor'\n },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditorComponent_1),\n multi: true\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => EditorComponent_1)\n }\n ],\n /* tslint:disable:max-line-length */\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 \n \n \n \n \n\n
            \n\n
            \n \n
            \n\n \n `,\n styles: [\n `\n >>> .k-editor-content > .ProseMirror {\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n outline: none;\n overflow: auto;\n }\n\n .k-iframe {\n width: 100%;\n height: 100%;\n display: block;\n }\n `\n ]\n }]\n }], function () { return [{ type: ɵngcc1.DialogService }, { type: ɵngcc5.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: EditorToolsService }]; }, { iframe: [{\n type: Input\n }], applyToWord: [{\n type: Input\n }], updateInterval: [{\n type: Input\n }], preserveWhitespace: [{\n type: Input\n }], resizable: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-editor']\n }], value: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], schema: [{\n type: Input\n }], plugins: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], resizableClass: [{\n type: HostBinding,\n args: ['class.k-editor-resizable']\n }], isDisabled: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], isReadonly: [{\n type: HostBinding,\n args: ['class.k-readonly']\n }], isIE: [{\n type: HostBinding,\n args: ['class.k-ie']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.ariaDisabled']\n }], minWidth: [{\n type: HostBinding,\n args: ['style.minWidth']\n }], maxWidth: [{\n type: HostBinding,\n args: ['style.maxWidth']\n }], minHeight: [{\n type: HostBinding,\n args: ['style.minHeight']\n }], maxHeight: [{\n type: HostBinding,\n args: ['style.maxHeight']\n }], pasteCleanupSettings: [{\n type: Input\n }], userToolBarComponent: [{\n type: ContentChild,\n args: [ToolBarComponent, { static: false }]\n }], userToolBarElement: [{\n type: ContentChild,\n args: [ToolBarComponent, { read: ElementRef, static: false }]\n }], dialogContainer: [{\n type: ViewChild,\n args: ['dialogsContainer', { read: ViewContainerRef, static: true }]\n }], container: [{\n type: ViewChild,\n args: ['content', { read: ViewContainerRef, static: false }]\n }], defaultToolbar: [{\n type: ViewChild,\n args: ['defaultToolbar', { read: ElementRef, static: false }]\n }], defaultToolbarComponent: [{\n type: ViewChild,\n args: ['defaultToolbar', { read: ToolBarComponent, static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FormatDropDownListComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n selector: 'kendo-editor-format-dropdownlist',\n template: `\n \n \n \n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n \n {{ dataItem.text }}\n \n\n {{ dataItem.text }}\n \n \n \n `\n }]\n }], function () { return []; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], defaultItem: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], element: [{\n type: ViewChild,\n args: ['element', { static: true }]\n }], dropDownList: [{\n type: ViewChild,\n args: ['element', { read: DropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FormatDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor('format') }}\n \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], formatDropDownList: [{\n type: ViewChild,\n args: ['formatDropDownList', { read: FormatDropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPickerDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor(editorCommand) }}\n \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], colorPicker: [{\n type: ViewChild,\n args: ['colorpicker', { read: ColorPickerComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FontFamilyDropDownListComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n selector: 'kendo-editor-fontfamily-dropdownlist',\n template: `\n \n \n \n {{ dataItem.text }}\n \n \n \n `\n }]\n }], function () { return []; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], defaultItem: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], element: [{\n type: ViewChild,\n args: ['element', { static: true }]\n }], dropDownList: [{\n type: ViewChild,\n args: ['element', { read: DropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FontFamilyDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor('fontFamily') }}\n \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], fontFamilyDropDownList: [{\n type: ViewChild,\n args: ['fontFamilyDropDownList', { read: FontFamilyDropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(InsertTableDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor('insertTable') }}\n \n
            \n
            \n
            \n \n
            \n
            \n
            \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorFormatComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFormatComponent_1) }],\n selector: 'kendo-toolbar-dropdownlist[kendoEditorFormat]',\n template: `\n \n \n \n \n \n \n {{ title }}\n \n \n `\n }]\n }], function () { return [{ type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: ɵngcc1.DialogService }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], formatDropDownList: [{\n type: ViewChild,\n args: ['formatDropDownList', { static: false }]\n }], formatButton: [{\n type: ViewChild,\n args: ['formatButton', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FontSizeDropDownListComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n selector: 'kendo-editor-fontsize-dropdownlist',\n template: `\n \n \n `\n }]\n }], function () { return []; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], value: [{\n type: Input\n }], defaultItem: [{\n type: Input\n }], itemDisabled: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], element: [{\n type: ViewChild,\n args: ['element', { static: true }]\n }], dropDownList: [{\n type: ViewChild,\n args: ['element', { read: DropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FontSizeDialogComponent, [{\n type: Component,\n args: [{\n template: `\n \n {{ textFor('fontSize') }}\n \n
            \n
            \n
            \n \n \n
            \n
            \n
            \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.DialogRef }, { type: EditorLocalizationService }]; }, { editor: [{\n type: Input\n }], fontSizeDropDownList: [{\n type: ViewChild,\n args: ['fontSizeDropDownList', { read: FontSizeDropDownListComponent, static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorFontSizeComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFontSizeComponent_1) }],\n selector: 'kendo-toolbar-dropdownlist[kendoEditorFontSize]',\n template: `\n \n \n \n \n \n \n {{ title }}\n \n \n `\n }]\n }], function () { return [{ type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: ɵngcc1.DialogService }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], element: [{\n type: ViewChild,\n args: ['element', { static: false }]\n }], fontSizeDropDownList: [{\n type: ViewChild,\n args: ['element', { read: FontSizeDropDownListComponent, static: false }]\n }], fontSizeButton: [{\n type: ViewChild,\n args: ['fontSizeButton', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorFontFamilyComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorFontFamilyComponent_1) }],\n selector: 'kendo-toolbar-dropdownlist[kendoEditorFontFamily]',\n template: `\n \n \n \n \n \n \n {{ title }}\n \n \n `\n }]\n }], function () { return [{ type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: ɵngcc1.DialogService }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, { valueChange: [{\n type: Output\n }], data: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], element: [{\n type: ViewChild,\n args: ['element', { static: false }]\n }], fontFamilyDropDownList: [{\n type: ViewChild,\n args: ['element', { read: FontFamilyDropDownListComponent, static: false }]\n }], fontFamilyButton: [{\n type: ViewChild,\n args: ['fontFamilyButton', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorColorPickerComponent, [{\n type: Component,\n args: [{\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorColorPickerComponent_1) }],\n selector: 'kendo-toolbar-colorpicker',\n template: `\n \n \n \n \n \n \n {{ title }}\n \n \n `\n }]\n }], function () { return [{ type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: ɵngcc1.DialogService }, { type: ɵngcc0.NgZone }]; }, { disabled: [{\n type: Input\n }], view: [{\n type: Input\n }], value: [{\n type: Input\n }], icon: [{\n type: Input\n }], paletteSettings: [{\n type: Input\n }], editorCommand: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], element: [{\n type: ViewChild,\n args: ['colorpicker', { read: ElementRef, static: false }]\n }], colorPicker: [{\n type: ViewChild,\n args: ['colorpicker', { read: ColorPickerComponent, static: false }]\n }], colorPickerButton: [{\n type: ViewChild,\n args: ['colorPickerButton', { read: ElementRef, static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorInsertTableButtonComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => EditorInsertTableButtonComponent_1) }],\n selector: 'kendo-editor-insert-table-button',\n template: `\n \n \n \n \n \n {{ title }}\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: ɵngcc9.PopupService }, { type: ɵngcc1.DialogService }]; }, { toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: false }]\n }], element: [{\n type: ViewChild,\n args: ['element', { static: false }]\n }], overflowElement: [{\n type: ViewChild,\n args: ['overflowElement', { static: false }]\n }], popupGridTemplate: [{\n type: ViewChild,\n args: ['popupGridTemplate', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PopupTableGridComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-popup-table-grid',\n template: `\n
            \n \n \n
            \n
            {{ message }}
            \n \n `\n }]\n }], function () { return []; }, { cellClick: [{\n type: Output\n }], tableWizardClick: [{\n type: Output\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAlignLeftButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAlignLeftButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAlignCenterButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAlignCenterButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAlignRightButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAlignRightButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAlignJustifyButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAlignJustifyButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorRedoButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorRedoButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorUndoButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorUndoButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorInsertImageButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorInsertImageButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorIndentButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorIndentButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorOutdentButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorOutdentButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorCreateLinkButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorCreateLinkButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorUnlinkButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorUnlinkButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorInsertOrderedListButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorInsertOrderedListButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorInsertUnorderedListButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorInsertUnorderedListButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorViewSourceButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorViewSourceButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorBoldButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorBoldButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorItalicButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorItalicButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorUnderlineButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorUnderlineButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorStrikethroughButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorStrikethroughButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorSubscriptButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorSubscriptButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorSuperscriptButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorSuperscriptButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorInsertFileButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorInsertFileButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorForeColorDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoEditorForeColor]'\n }]\n }], function () { return [{ type: EditorColorPickerComponent }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorBackColorDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoEditorBackColor]'\n }]\n }], function () { return [{ type: EditorColorPickerComponent }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorCleanFormattingButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorCleanFormattingButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAddColumnBeforeButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAddColumnBeforeButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAddColumnAfterButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAddColumnAfterButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAddRowBeforeButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAddRowBeforeButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorAddRowAfterButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorAddRowAfterButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorDeleteColumnButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorDeleteColumnButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorDeleteRowButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorDeleteRowButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorDeleteTableButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorDeleteTableButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorMergeCellsButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorMergeCellsButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorSplitCellButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorSplitCellButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ],\n selector: '[kendoEditorLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc5.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n // tslint:disable-next-line:no-forward-ref\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ],\n selector: 'kendo-editor-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc5.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DropDownToolDirective, [{\n type: Directive,\n args: [{ selector: '[kendoEditorDropDownTool]' }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorPrintDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorPrintButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorSelectAllButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'kendo-toolbar-button[kendoEditorSelectAllButton]'\n }]\n }], function () { return [{ type: ɵngcc6.ToolBarButtonComponent }, { type: EditorComponent, decorators: [{\n type: Host\n }] }, { type: EditorLocalizationService }, { type: EditorToolsService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(EditorModule, [{\n type: NgModule,\n args: [{\n declarations: [\n EditorComponent,\n COMPONENT_DIRECTIVES,\n TOOLBAR_TOOLS,\n TOOLBAR_DIALOGS,\n INTERNAL_COMPONENTS\n ],\n entryComponents: [\n TOOLBAR_DIALOGS\n ],\n exports: [\n EditorComponent,\n COMPONENT_DIRECTIVES,\n TOOLBAR_TOOLS,\n ToolBarModule,\n ButtonModule,\n FormsModule,\n ReactiveFormsModule,\n //needed for unit tests\n INTERNAL_COMPONENTS\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n //Kendo UI Angular Modules\n ButtonModule,\n ColorPickerModule,\n DialogModule,\n DropDownsModule,\n NumericTextBoxModule,\n ToolBarModule,\n TextBoxModule\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(EditorModule, { declarations: function () { return [EditorComponent, EditorAlignLeftButtonDirective, EditorAlignCenterButtonDirective, EditorAlignRightButtonDirective, EditorAlignJustifyButtonDirective, EditorInsertFileButtonDirective, EditorRedoButtonDirective, EditorUndoButtonDirective, EditorInsertImageButtonDirective, EditorIndentButtonDirective, EditorOutdentButtonDirective, EditorCreateLinkButtonDirective, EditorUnlinkButtonDirective, EditorInsertOrderedListButtonDirective, EditorInsertUnorderedListButtonDirective, EditorViewSourceButtonDirective, EditorBoldButtonDirective, EditorItalicButtonDirective, EditorUnderlineButtonDirective, EditorStrikethroughButtonDirective, EditorSubscriptButtonDirective, EditorSuperscriptButtonDirective, EditorForeColorDirective, EditorBackColorDirective, EditorCleanFormattingButtonDirective, EditorAddColumnBeforeButtonDirective, EditorAddColumnAfterButtonDirective, EditorAddRowBeforeButtonDirective, EditorAddRowAfterButtonDirective, EditorDeleteColumnButtonDirective, EditorDeleteRowButtonDirective, EditorDeleteTableButtonDirective, EditorMergeCellsButtonDirective, EditorSplitCellButtonDirective, CustomMessagesComponent, LocalizedMessagesDirective, DropDownToolDirective, EditorPrintDirective, EditorSelectAllButtonDirective, EditorFontSizeComponent, EditorFontFamilyComponent, EditorFormatComponent, EditorColorPickerComponent, EditorInsertTableButtonComponent, FileLinkDialogComponent, ImageDialogComponent, SourceDialogComponent, FormatDialogComponent, ColorPickerDialogComponent, FontFamilyDialogComponent, FontSizeDialogComponent, InsertTableDialogComponent, PopupTableGridComponent, FormatDropDownListComponent, FontFamilyDropDownListComponent, FontSizeDropDownListComponent]; }, imports: function () { return [CommonModule,\n FormsModule,\n ReactiveFormsModule,\n //Kendo UI Angular Modules\n ButtonModule,\n ColorPickerModule,\n DialogModule,\n DropDownsModule,\n NumericTextBoxModule,\n ToolBarModule,\n TextBoxModule]; }, exports: function () { return [EditorComponent, EditorAlignLeftButtonDirective, EditorAlignCenterButtonDirective, EditorAlignRightButtonDirective, EditorAlignJustifyButtonDirective, EditorInsertFileButtonDirective, EditorRedoButtonDirective, EditorUndoButtonDirective, EditorInsertImageButtonDirective, EditorIndentButtonDirective, EditorOutdentButtonDirective, EditorCreateLinkButtonDirective, EditorUnlinkButtonDirective, EditorInsertOrderedListButtonDirective, EditorInsertUnorderedListButtonDirective, EditorViewSourceButtonDirective, EditorBoldButtonDirective, EditorItalicButtonDirective, EditorUnderlineButtonDirective, EditorStrikethroughButtonDirective, EditorSubscriptButtonDirective, EditorSuperscriptButtonDirective, EditorForeColorDirective, EditorBackColorDirective, EditorCleanFormattingButtonDirective, EditorAddColumnBeforeButtonDirective, EditorAddColumnAfterButtonDirective, EditorAddRowBeforeButtonDirective, EditorAddRowAfterButtonDirective, EditorDeleteColumnButtonDirective, EditorDeleteRowButtonDirective, EditorDeleteTableButtonDirective, EditorMergeCellsButtonDirective, EditorSplitCellButtonDirective, CustomMessagesComponent, LocalizedMessagesDirective, DropDownToolDirective, EditorPrintDirective, EditorSelectAllButtonDirective, EditorFontSizeComponent, EditorFontFamilyComponent, EditorFormatComponent, EditorColorPickerComponent, EditorInsertTableButtonComponent, ToolBarModule,\n ButtonModule,\n FormsModule,\n ReactiveFormsModule, PopupTableGridComponent, FormatDropDownListComponent, FontFamilyDropDownListComponent, FontSizeDropDownListComponent]; } }); })();\n\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ColorPickerDialogComponent, FileLinkDialogComponent, FontFamilyDialogComponent, FontSizeDialogComponent, FormatDialogComponent, ImageDialogComponent, InsertTableDialogComponent, SourceDialogComponent, CustomMessagesComponent, EditorLocalizationService, LocalizedMessagesDirective, Messages, EditorAlignCenterButtonDirective, EditorAlignJustifyButtonDirective, EditorAlignLeftButtonDirective, EditorAlignRightButtonDirective, EditorBackColorDirective, EditorColorPickerComponent, EditorForeColorDirective, EditorCleanFormattingButtonDirective, FontFamilyDropDownListComponent, EditorFontFamilyComponent, FontSizeDropDownListComponent, EditorFontSizeComponent, FormatDropDownListComponent, EditorFormatComponent, EditorRedoButtonDirective, EditorUndoButtonDirective, EditorInsertImageButtonDirective, EditorIndentButtonDirective, EditorOutdentButtonDirective, EditorCreateLinkButtonDirective, EditorInsertFileButtonDirective, EditorUnlinkButtonDirective, EditorInsertOrderedListButtonDirective, EditorInsertUnorderedListButtonDirective, EditorPrintDirective, EditorSelectAllButtonDirective, DropDownToolDirective, EditorCommandBase, EditorCommandButton, EditorCommandDialog, EditorViewSourceButtonDirective, EditorAddColumnAfterButtonDirective, EditorAddColumnBeforeButtonDirective, EditorAddRowAfterButtonDirective, EditorAddRowBeforeButtonDirective, EditorDeleteColumnButtonDirective, EditorDeleteRowButtonDirective, EditorDeleteTableButtonDirective, EditorInsertTableButtonComponent, EditorMergeCellsButtonDirective, EditorSplitCellButtonDirective, PopupTableGridComponent, EditorToolsService, EditorBoldButtonDirective, EditorItalicButtonDirective, EditorStrikethroughButtonDirective, EditorSubscriptButtonDirective, EditorSuperscriptButtonDirective, EditorUnderlineButtonDirective, EditorComponent, EditorModule, schema };\n\n","export const insertText = (attrs) => (state, dispatch) => {\n dispatch(state.tr.insertText(attrs.text, attrs.from, attrs.to));\n};\n","import { insertNode } from './utils';\nexport const insertImage = (attrs) => (state, dispatch) => {\n const { image } = state.schema.nodes;\n const commandName = 'insertImage';\n const newImage = image.createAndFill(attrs);\n insertNode(newImage)(state, tr => dispatch(tr.setMeta('commandName', commandName).setMeta('args', attrs)));\n};\n","import { Plugin, PluginKey } from 'prosemirror-state';\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nexport function placeholder(message) {\n const decAttrs = { class: 'k-placeholder', 'data-placeholder': message };\n return new Plugin({\n key: new PluginKey('placeholder'),\n props: {\n decorations: (state) => {\n const { doc } = state;\n const firstChild = doc.content.firstChild;\n const empty = doc.childCount === 0 ||\n (doc.childCount === 1 && firstChild.inlineContent && firstChild.childCount === 0);\n if (!empty) {\n return DecorationSet.empty;\n }\n const decorations = [];\n doc.descendants((node, pos) => {\n decorations.push(Decoration.node(pos, pos + node.nodeSize, decAttrs));\n });\n return DecorationSet.create(doc, decorations);\n }\n }\n });\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __param, __metadata } from 'tslib';\nimport { isDevMode, Directive, Optional, TemplateRef, EventEmitter, Input, Output, HostBinding, ViewChild, ElementRef, ContentChild, Component, forwardRef, Injector, Renderer2, NgZone, ChangeDetectorRef, Inject, Injectable, HostListener, ViewChildren, QueryList, NgModule, ViewContainerRef, ContentChildren } from '@angular/core';\nimport { NgControl, NG_VALUE_ACCESSOR, NG_VALIDATORS, RadioControlValueAccessor } from '@angular/forms';\nimport { Subscription, fromEvent, interval, merge, Observable, Subject } from 'rxjs';\nimport { take, filter, concatMap, startWith, takeUntil, skip, debounceTime, throttleTime } from 'rxjs/operators';\nimport { LocalizationService, L10N_PREFIX, RTL, ComponentMessages, MessageService } from '@progress/kendo-angular-l10n';\nimport { Keys, guid, hasObservers, anyChanged, isDocumentAvailable, KendoInput, isChanged, DraggableModule, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { browser, mobileOS, detectDesktopBrowser, detectMobileOS } from '@progress/kendo-common';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport { CommonModule } from '@angular/common';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { Color, parseColor, namedColors } from '@progress/kendo-drawing';\n\n/**\n * @hidden\n *\n * Checks if the value is `null` or `undefined`. Falsy values like '', 0, false, NaN, etc. are regarded as present.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@progress/kendo-angular-common';\nimport * as ɵngcc3 from '@angular/common';\nimport * as ɵngcc4 from '@progress/kendo-angular-intl';\nimport * as ɵngcc5 from '@progress/kendo-angular-popup';\n\nconst _c0 = [\"wrap\"];\nconst _c1 = [\"track\"];\nconst _c2 = [\"sliderSelection\"];\nconst _c3 = [\"ticks\"];\nconst _c4 = [\"draghandle\"];\nconst _c5 = [\"decreaseButton\"];\nconst _c6 = [\"increaseButton\"];\nfunction SliderComponent_button_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 14, 15);\n ɵngcc0.ɵɵelement(2, \"span\", 16);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"title\", ctx_r1.decrementMessage);\n ɵngcc0.ɵɵattribute(\"tabindex\", -1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-i-arrow-w\", !ctx_r1.vertical)(\"k-i-arrow-s\", ctx_r1.vertical);\n} }\nfunction SliderComponent_ul_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"ul\", 17, 18);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tickTitle\", ctx_r2.title)(\"vertical\", ctx_r2.vertical)(\"step\", ctx_r2.smallStep)(\"largeStep\", ctx_r2.largeStep)(\"min\", ctx_r2.min)(\"max\", ctx_r2.max)(\"labelTemplate\", ctx_r2.labelTemplate == null ? null : ctx_r2.labelTemplate.templateRef);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", true);\n} }\nfunction SliderComponent_button_12_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 19, 20);\n ɵngcc0.ɵɵlistener(\"click\", function SliderComponent_button_12_Template_button_click_0_listener($event) { return $event.preventDefault(); });\n ɵngcc0.ɵɵelement(2, \"span\", 16);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"title\", ctx_r6.incrementMessage);\n ɵngcc0.ɵɵattribute(\"tabindex\", -1)(\"aria-label\", ctx_r6.currentValue);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-i-arrow-e\", !ctx_r6.vertical)(\"k-i-arrow-n\", ctx_r6.vertical);\n} }\nconst _c13 = function (a0, a1) { return { click: a0, keydown: a1 }; };\nconst _c14 = [\"draghandleStart\"];\nconst _c15 = [\"draghandleEnd\"];\nfunction RangeSliderComponent_ul_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"ul\", 13, 14);\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tickTitle\", ctx_r1.title)(\"vertical\", ctx_r1.vertical)(\"step\", ctx_r1.smallStep)(\"largeStep\", ctx_r1.largeStep)(\"min\", ctx_r1.min)(\"max\", ctx_r1.max)(\"labelTemplate\", ctx_r1.labelTemplate == null ? null : ctx_r1.labelTemplate.templateRef);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", true);\n} }\nconst _c20 = [\"wrapper\"];\nconst _c25 = function (a0, a1, a2, a3) { return { click: a0, keydown: a1, focus: a2, blur: a3 }; };\nfunction TextBoxContainerComponent_label_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"label\", 1);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"for\", ctx_r0.id);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.floatingLabel);\n} }\nconst _c26 = [\"*\"];\nconst _c27 = [\"numericInput\"];\nconst _c28 = [\"numericWrap\"];\nconst _c33 = function (a0, a1) { return { mouseup: a0, mouseleave: a1 }; };\nconst _c34 = function (a0) { return { mousedown: a0 }; };\nfunction NumericTextBoxComponent_span_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6)(1, \"span\", 7);\n ɵngcc0.ɵɵelement(2, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 9);\n ɵngcc0.ɵɵelement(4, \"span\", 10);\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(11, _c33, ctx_r2.releaseArrow, ctx_r2.releaseArrow));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r2.arrowDirection === ctx_r2.ArrowDirection.Up);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(14, _c34, ctx_r2.increasePress))(\"title\", ctx_r2.incrementTitle);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.incrementTitle);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r2.arrowDirection === ctx_r2.ArrowDirection.Down);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(16, _c34, ctx_r2.decreasePress))(\"title\", ctx_r2.decrementTitle);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.decrementTitle);\n} }\nconst _c35 = function (a0, a1) { return { mousewheel: a0, DOMMouseScroll: a1 }; };\nconst _c36 = function (a0, a1, a2, a3, a4, a5, a6) { return { mousedown: a0, dragenter: a1, keydown: a2, input: a3, focus: a4, blur: a5, paste: a6 }; };\nconst _c37 = [\"input\"];\nconst _c38 = function (a0, a1, a2, a3, a4) { return { focus: a0, blur: a1, click: a2, dragstart: a3, drop: a4 }; };\nconst _c39 = [\"tickElement\"];\nconst _c40 = [\"kendoSliderTicks\", \"\"];\nfunction SliderTicksComponent_li_0_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 7);\n ɵngcc0.ɵɵelementContainer(1, 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const tick_r3 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n const _r1 = ɵngcc0.ɵɵreference(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r5.labelTemplate || _r1)(\"ngTemplateOutletContext\", tick_r3);\n} }\nfunction SliderTicksComponent_li_0_ng_container_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction SliderTicksComponent_li_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 2, 3);\n ɵngcc0.ɵɵelementContainerStart(2, 4);\n ɵngcc0.ɵɵtemplate(3, SliderTicksComponent_li_0_span_3_Template, 2, 2, \"span\", 5);\n ɵngcc0.ɵɵtemplate(4, SliderTicksComponent_li_0_ng_container_4_Template, 2, 0, \"ng-container\", 6);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const tick_r3 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵpropertyInterpolate(\"title\", ctx_r0.tickTitle(tick_r3.value));\n ɵngcc0.ɵɵproperty(\"ngClass\", tick_r3.classes);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", tick_r3.large);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n} }\nfunction SliderTicksComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const value_r8 = ctx.value;\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r2.tickTitle(value_r8), \" \");\n} }\nfunction TextBoxComponent_2_ng_template_0_Template(rf, ctx) { }\nfunction TextBoxComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TextBoxComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.prefixTemplate == null ? null : ctx_r0.prefixTemplate.templateRef);\n} }\nfunction TextBoxComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 9);\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r2.errorIconClasses);\n} }\nfunction TextBoxComponent_span_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 9);\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r3.successIconClasses);\n} }\nfunction TextBoxComponent_span_8_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function TextBoxComponent_span_8_Template_span_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.clearValue(); })(\"mousedown\", function TextBoxComponent_span_8_Template_span_mousedown_0_listener($event) { return $event.preventDefault(); })(\"keydown.enter\", function TextBoxComponent_span_8_Template_span_keydown_enter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10.clearValue($event); })(\"keydown.space\", function TextBoxComponent_span_8_Template_span_keydown_space_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.clearValue($event); });\n ɵngcc0.ɵɵelement(1, \"span\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r4.tabIndex)(\"title\", ctx_r4.clearTitle());\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r4.clearTitle());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r4.clearButtonClasses);\n} }\nfunction TextBoxComponent_9_ng_template_0_Template(rf, ctx) { }\nfunction TextBoxComponent_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TextBoxComponent_9_ng_template_0_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r5.suffixTemplate == null ? null : ctx_r5.suffixTemplate.templateRef);\n} }\nconst _c43 = function (a0, a1, a2) { return { focus: a0, blur: a1, input: a2 }; };\nconst _c44 = [[[\"kendo-textarea-suffix\"]]];\nconst _c45 = [\"kendo-textarea-suffix\"];\nconst _c46 = [\"opacityInput\"];\nconst _c47 = [\"toggleFormatButton\"];\nfunction ColorInputComponent_input_4_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"input\", 6, 7);\n ɵngcc0.ɵɵlistener(\"blur\", function ColorInputComponent_input_4_Template_input_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.handleHexInputBlur(); })(\"input\", function ColorInputComponent_input_4_Template_input_input_0_listener() { ɵngcc0.ɵɵrestoreView(_r5); const _r3 = ɵngcc0.ɵɵreference(1); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.handleHexValueChange(_r3.value); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r1.disabled)(\"readonly\", ctx_r1.readonly)(\"value\", ctx_r1.hex || \"\")(\"placeholder\", ctx_r1.textFor(\"hexInputPlaceholder\"));\n} }\nfunction ColorInputComponent_ng_container_5_div_16_Template(rf, ctx) { if (rf & 1) {\n const _r14 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0)(1, \"kendo-numerictextbox\", 14, 15);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_ng_container_5_div_16_Template_kendo_numerictextbox_valueChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r13 = ɵngcc0.ɵɵnextContext(2); return ctx_r13.rgba.a = $event; })(\"blur\", function ColorInputComponent_ng_container_5_div_16_Template_kendo_numerictextbox_blur_1_listener() { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r15 = ɵngcc0.ɵɵnextContext(2); return ctx_r15.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_ng_container_5_div_16_Template_kendo_numerictextbox_valueChange_1_listener() { ɵngcc0.ɵɵrestoreView(_r14); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"label\", 10);\n ɵngcc0.ɵɵtext(5, \"A\");\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const _r12 = ɵngcc0.ɵɵreference(3);\n const ctx_r10 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r10.disabled)(\"readonly\", ctx_r10.readonly)(\"min\", 0)(\"max\", 1)(\"placeholder\", ctx_r10.textFor(\"alphaInputPlaceholder\"))(\"value\", ctx_r10.rgba.a)(\"autoCorrect\", true)(\"spinners\", false)(\"step\", 0.01)(\"format\", \"n2\")(\"decimals\", 2);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"for\", _r12.focusableId);\n} }\nfunction ColorInputComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 0)(2, \"kendo-numerictextbox\", 8, 9);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r17 = ɵngcc0.ɵɵnextContext(); return ctx_r17.rgba.r = $event; })(\"blur\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_blur_2_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r19 = ɵngcc0.ɵɵnextContext(); return ctx_r19.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_2_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"label\", 10);\n ɵngcc0.ɵɵtext(5, \"R\");\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(6, \"div\", 0)(7, \"kendo-numerictextbox\", 8, 11);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_7_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r21 = ɵngcc0.ɵɵnextContext(); return ctx_r21.rgba.g = $event; })(\"blur\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_blur_7_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r22 = ɵngcc0.ɵɵnextContext(); return ctx_r22.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_7_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r23 = ɵngcc0.ɵɵnextContext(); return ctx_r23.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(9, \"label\", 10);\n ɵngcc0.ɵɵtext(10, \"G\");\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(11, \"div\", 0)(12, \"kendo-numerictextbox\", 8, 12);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_12_listener($event) { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r24 = ɵngcc0.ɵɵnextContext(); return ctx_r24.rgba.b = $event; })(\"blur\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_blur_12_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r25 = ɵngcc0.ɵɵnextContext(); return ctx_r25.handleRgbaInputBlur(); })(\"valueChange\", function ColorInputComponent_ng_container_5_Template_kendo_numerictextbox_valueChange_12_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r26 = ɵngcc0.ɵɵnextContext(); return ctx_r26.handleRgbaValueChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(14, \"label\", 10);\n ɵngcc0.ɵɵtext(15, \"B\");\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(16, ColorInputComponent_ng_container_5_div_16_Template, 6, 12, \"div\", 13);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const _r7 = ɵngcc0.ɵɵreference(3);\n const _r8 = ɵngcc0.ɵɵreference(8);\n const _r9 = ɵngcc0.ɵɵreference(13);\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r2.disabled)(\"readonly\", ctx_r2.readonly)(\"min\", 0)(\"max\", 255)(\"placeholder\", ctx_r2.textFor(\"redInputPlaceholder\"))(\"value\", ctx_r2.rgba.r)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"for\", _r7.focusableId);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r2.disabled)(\"readonly\", ctx_r2.readonly)(\"min\", 0)(\"max\", 255)(\"placeholder\", ctx_r2.textFor(\"greenInputPlaceholder\"))(\"value\", ctx_r2.rgba.g)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"for\", _r8.focusableId);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r2.disabled)(\"readonly\", ctx_r2.readonly)(\"min\", 0)(\"max\", 255)(\"placeholder\", ctx_r2.textFor(\"blueInputPlaceholder\"))(\"value\", ctx_r2.rgba.b)(\"autoCorrect\", true)(\"spinners\", false)(\"format\", \"n\")(\"decimals\", 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"for\", _r9.focusableId);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r2.opacity);\n} }\nconst _c48 = [\"gradientDragHandle\"];\nconst _c49 = [\"inputs\"];\nconst _c50 = [\"alphaSlider\"];\nconst _c51 = [\"gradientWrapper\"];\nfunction ColorGradientComponent_span_8_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 13);\n ɵngcc0.ɵɵlistener(\"click\", function ColorGradientComponent_span_8_Template_span_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.reset(); })(\"keydown.enter\", function ColorGradientComponent_span_8_Template_span_keydown_enter_0_listener() { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.reset(); })(\"keydown.space\", function ColorGradientComponent_span_8_Template_span_keydown_space_0_listener() { ɵngcc0.ɵɵrestoreView(_r7); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.reset(); });\n ɵngcc0.ɵɵelement(1, \"span\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r2.clearButtonTitle)(\"title\", ctx_r2.clearButtonTitle);\n} }\nconst _c78 = function (a0) { return { \"k-align-self-end\": a0 }; };\nfunction ColorGradientComponent_kendo_slider_10_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-slider\", 15, 16);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorGradientComponent_kendo_slider_10_Template_kendo_slider_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.handleAlphaSliderChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(12, _c78, ctx_r3.clearButton))(\"dragHandleTitle\", ctx_r3.opacitySliderTitle)(\"disabled\", ctx_r3.disabled)(\"readonly\", ctx_r3.readonly)(\"showButtons\", false)(\"tickPlacement\", \"none\")(\"vertical\", true)(\"min\", 0)(\"max\", 100)(\"smallStep\", 1)(\"largeStep\", 10)(\"value\", ctx_r3.alphaSliderValue);\n} }\nfunction ColorGradientComponent_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 17);\n} if (rf & 2) {\n const ctx_r5 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r5.value)(\"ratio\", ctx_r5.contrastTool);\n} }\nconst _c79 = [\"palette\"];\nconst _c80 = [\"container\"];\nconst _c81 = [\"popupTemplate\"];\nconst _c82 = [\"colorGradient\"];\nfunction ColorPickerComponent_span_3_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 11);\n} }\nfunction ColorPickerComponent_span_3_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_span_3_Template_span_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r8); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.handleActiveColorClick(); });\n ɵngcc0.ɵɵtemplate(1, ColorPickerComponent_span_3_span_1_Template, 1, 0, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx_r1.value);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r1.value);\n} }\nfunction ColorPickerComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 12);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_span_4_Template_span_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.handleActiveColorClick(); });\n ɵngcc0.ɵɵelement(1, \"span\", 13);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r2.iconStyles);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx_r2.value);\n} }\nfunction ColorPickerComponent_ng_template_7_kendo_colorgradient_0_Template(rf, ctx) { if (rf & 1) {\n const _r15 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-colorgradient\", 16, 17);\n ɵngcc0.ɵɵlistener(\"focusout\", function ColorPickerComponent_ng_template_7_kendo_colorgradient_0_Template_kendo_colorgradient_focusout_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r15); const ctx_r14 = ɵngcc0.ɵɵnextContext(2); return ctx_r14.handlePopupBlur($event); })(\"valueChange\", function ColorPickerComponent_ng_template_7_kendo_colorgradient_0_Template_kendo_colorgradient_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r15); const ctx_r16 = ɵngcc0.ɵɵnextContext(2); return ctx_r16.handleValueChange($event, false); })(\"keydown\", function ColorPickerComponent_ng_template_7_kendo_colorgradient_0_Template_kendo_colorgradient_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r15); const ctx_r17 = ɵngcc0.ɵɵnextContext(2); return ctx_r17.handlePopupKeyDown($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r11.value)(\"format\", ctx_r11.format)(\"opacity\", ctx_r11.gradientSettings.opacity)(\"clearButton\", ctx_r11.gradientSettings.clearButton)(\"delay\", ctx_r11.gradientSettings.delay);\n} }\nfunction ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template(rf, ctx) { if (rf & 1) {\n const _r20 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-colorpalette\", 18, 19);\n ɵngcc0.ɵɵlistener(\"blur\", function ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template_kendo_colorpalette_blur_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r20); const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ctx_r19.handlePopupBlur($event); })(\"cellSelection\", function ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template_kendo_colorpalette_cellSelection_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r20); const ctx_r21 = ɵngcc0.ɵɵnextContext(2); return ctx_r21.handleValueChange($event, true); })(\"mousedown\", function ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template_kendo_colorpalette_mousedown_0_listener($event) { return $event.preventDefault(); })(\"keydown\", function ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template_kendo_colorpalette_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r20); const ctx_r23 = ɵngcc0.ɵɵnextContext(2); return ctx_r23.handlePopupKeyDown($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"palette\", ctx_r12.paletteSettings.palette)(\"columns\", ctx_r12.paletteSettings.columns)(\"tileSize\", ctx_r12.paletteSettings.tileSize)(\"format\", ctx_r12.format)(\"value\", ctx_r12.value);\n} }\nfunction ColorPickerComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColorPickerComponent_ng_template_7_kendo_colorgradient_0_Template, 2, 5, \"kendo-colorgradient\", 14);\n ɵngcc0.ɵɵtemplate(1, ColorPickerComponent_ng_template_7_kendo_colorpalette_1_Template, 2, 5, \"kendo-colorpalette\", 15);\n} if (rf & 2) {\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.view === \"gradient\" || ctx_r4.view === \"combo\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r4.view === \"palette\" || ctx_r4.view === \"combo\");\n} }\nconst _c101 = function (a1, a2) { return { \"k-picker-wrap\": true, \"k-state-disabled\": a1, \"k-state-focused\": a2 }; };\nconst _c104 = function (a0, a1, a2, a3) { return { backgroundColor: a0, width: a1, height: a2, minWidth: a3 }; };\nfunction ColorPaletteComponent_tr_4_td_1_Template(rf, ctx) { if (rf & 1) {\n const _r7 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"td\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPaletteComponent_tr_4_td_1_Template_td_click_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r7); const color_r4 = restoredCtx.$implicit; const colIndex_r5 = restoredCtx.index; const rowIndex_r2 = ɵngcc0.ɵɵnextContext().index; const ctx_r6 = ɵngcc0.ɵɵnextContext(); return ctx_r6.handleCellSelection(color_r4, { row: rowIndex_r2, col: colIndex_r5 }); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const color_r4 = ctx.$implicit;\n const colIndex_r5 = ctx.index;\n const rowIndex_r2 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-state-selected\", (ctx_r3.selectedCell == null ? null : ctx_r3.selectedCell.row) === rowIndex_r2 && (ctx_r3.selectedCell == null ? null : ctx_r3.selectedCell.col) === colIndex_r5)(\"k-state-focus\", ctx_r3.focusInComponent && (ctx_r3.focusedCell == null ? null : ctx_r3.focusedCell.row) === rowIndex_r2 && (ctx_r3.focusedCell == null ? null : ctx_r3.focusedCell.col) === colIndex_r5);\n ɵngcc0.ɵɵproperty(\"id\", rowIndex_r2 + \"-\" + colIndex_r5)(\"ngStyle\", ɵngcc0.ɵɵpureFunction4(9, _c104, color_r4, ctx_r3.tileLayout.width + \"px\", ctx_r3.tileLayout.height + \"px\", ctx_r3.tileLayout.width + \"px\"));\n ɵngcc0.ɵɵattribute(\"aria-selected\", (ctx_r3.selectedCell == null ? null : ctx_r3.selectedCell.row) === rowIndex_r2 && (ctx_r3.selectedCell == null ? null : ctx_r3.selectedCell.col) === colIndex_r5)(\"aria-label\", color_r4)(\"value\", color_r4);\n} }\nfunction ColorPaletteComponent_tr_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\");\n ɵngcc0.ɵɵtemplate(1, ColorPaletteComponent_tr_4_td_1_Template, 1, 14, \"td\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r1 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", row_r1);\n} }\nconst _c105 = [\"kendoContrastValidation\", \"\"];\nfunction ContrastValidationComponent_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 2);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelement(2, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.passMessage, \" \");\n} }\nfunction ContrastValidationComponent_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelement(2, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.failMessage, \" \");\n} }\nconst _c106 = [\"kendoContrastTool\", \"\"];\nfunction ContrastComponent_span_3_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} }\nfunction ContrastComponent_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵelement(1, \"span\", 7);\n ɵngcc0.ɵɵtemplate(2, ContrastComponent_span_3_span_2_Template, 1, 0, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.satisfiesAAACondition);\n} }\nfunction ContrastComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵelement(1, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction FormFieldComponent_ng_content_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 2, [\"*ngIf\", \"hasHints\"]);\n} }\nfunction FormFieldComponent_ng_content_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 3, [\"*ngIf\", \"hasErrors\"]);\n} }\nconst _c107 = [[[\"label\"], [\"kendo-label\"]], \"*\", [[\"kendo-formhint\"]], [[\"kendo-formerror\"]]];\nconst _c108 = [\"label, kendo-label\", \"*\", \"kendo-formhint\", \"kendo-formerror\"];\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst areSame = (value1, value2) => value1 === value2 || (value1 === null && value2 === undefined) || (value1 === undefined && value2 === null);\n/**\n * @hidden\n */\nconst requiresZoneOnBlur = (ngControl) => ngControl &&\n (!ngControl.touched || (ngControl.control && ngControl.control.updateOn === 'blur'));\n/**\n * @hidden\n *\n * Fits the contender number into the specified bounds. If the number is NaN or null, the min is returned.\n *\n * @param contender Represents the number you want to fit into specified bounds.\n * @param min The inclusive lower bound number.\n * @param max The inclusive upper bound number.\n */\nconst fitIntoBounds = (contender, min, max) => {\n if (!isPresent(contender) || isNaN(contender)) {\n return min;\n }\n return contender <= min ? min : contender >= max ? max : contender;\n};\n\n/**\n * @hidden\n */\nconst MAX_PRECISION = 20;\n/**\n * @hidden\n */\nconst limitPrecision = (precision) => Math.min(precision, MAX_PRECISION);\n/**\n * @hidden\n */\nconst fractionLength = (value) => {\n return (String(value).split('.')[1] || \"\").length;\n};\nconst maxFractionLength = (value1, value2) => {\n return Math.max(fractionLength(value1), fractionLength(value2));\n};\n/**\n * @hidden\n */\nconst toFixedPrecision = (value, precision) => {\n const maxPrecision = limitPrecision(precision);\n return parseFloat(value.toFixed(maxPrecision));\n};\n/**\n * @hidden\n */\nconst add = (value1, value2) => {\n const maxPrecision = maxFractionLength(value1, value2);\n return toFixedPrecision(value1 + value2, maxPrecision);\n};\n/**\n * @hidden\n */\nconst subtract = (value1, value2) => {\n return add(value1, -value2);\n};\n/**\n * @hidden\n */\nconst multiply = (value1, value2) => {\n const maxPrecision = fractionLength(value1) + fractionLength(value2);\n return toFixedPrecision(value1 * value2, maxPrecision);\n};\n/**\n * @hidden\n */\nconst divide = (dividend, divisor) => {\n if (divisor === 0) {\n return NaN;\n }\n const power = maxFractionLength(dividend, divisor);\n const correctionValue = Math.pow(10, power);\n return ((correctionValue * dividend) / (correctionValue * divisor));\n};\n/**\n * @hidden\n */\nconst remainder = (dividend, divisor) => {\n return Math.abs(subtract(dividend, multiply(divisor, Math.floor(divide(dividend, divisor)))));\n};\n\n/**\n * @hidden\n */\nconst calculateFixedTrackSize = ({ max, min, smallStep, fixedTickWidth }) => ((max - min) / smallStep) * fixedTickWidth;\n/**\n * @hidden\n */\nconst calculateTicksCount = (min = 0, max = 0, smallStep = 1) => {\n if (smallStep <= 0) {\n throw new Error('Invalid argument: smallStep must be a positive number');\n }\n const adjustedRange = Math.abs(subtract(max, min));\n const adjustedRatio = Math.floor(divide(adjustedRange, smallStep));\n const result = add(adjustedRatio, 1);\n return result;\n};\n/**\n * @hidden\n */\nconst calculateValueFromTick = (index, { max, min, smallStep, reverse, vertical }) => {\n const value = add(min, multiply(index, smallStep));\n return vertical || reverse ? Math.abs(subtract(value, max)) : value;\n};\n/**\n * @hidden\n */\nconst calculateHandlePosition = ({ trackWidth, min, max, reverse, value }) => {\n const step = trackWidth / Math.abs(max - min);\n let pos = isPresent(value) ? step * (value - min) : min;\n if (reverse) {\n pos = trackWidth - pos;\n }\n return Math.floor(pos);\n};\n/**\n * @hidden\n */\nconst decreaseValueToStep = (value, { max, min, smallStep, largeStep }, large = false) => {\n const step = large && largeStep ? multiply(smallStep, largeStep) : smallStep;\n const stepValue = subtract(value, min);\n let result;\n const stepRemainder = remainder(stepValue, step);\n if (stepRemainder === 0) {\n result = subtract(stepValue, step);\n }\n else {\n result = subtract(stepValue, stepRemainder);\n }\n return limitValue(add(result, min), min, max);\n};\n/**\n * @hidden\n */\nconst increaseValueToStep = (value, { max, min, smallStep, largeStep }, large = false) => {\n const step = large && largeStep ? multiply(smallStep, largeStep) : smallStep;\n const stepValue = subtract(value, min);\n const stepRemainder = remainder(stepValue, step);\n const result = add(subtract(stepValue, stepRemainder), step);\n return limitValue(add(result, min), min, max);\n};\n/**\n * @hidden\n */\nconst isStartHandle = (dragHandle) => dragHandle.id.indexOf('k-start-handle') > -1;\n/**\n * @hidden\n */\nconst snapValue = (value, options) => {\n const { smallStep, min, max } = options;\n const limited = limitValue(value, min, max);\n if (value !== limited) {\n return limited;\n }\n const left = decreaseValueToStep(value, options);\n const right = increaseValueToStep(value, options);\n if ((value - min) % smallStep === 0) {\n return value;\n }\n if (right - value <= (right - left) / 2) {\n return right;\n }\n return left;\n};\n/**\n * @hidden\n */\nconst trimValue = (max, min, value) => {\n if (value > max) {\n return max;\n }\n if (value < min) {\n return min;\n }\n return value;\n};\n/**\n * @hidden\n */\nconst trimValueRange = (max, min, value) => {\n return value ? [trimValue(max, min, value[0]), trimValue(max, min, value[1])] : [min, min];\n};\n/**\n * @hidden\n */\nconst identity = (value) => value;\n/**\n * @hidden\n */\nconst isSameRange = (value1, value2) => areSame(value1[0], value2[0]) && areSame(value1[1], value2[1]);\n/**\n * @hidden\n */\nconst elementOffset = (element) => {\n const box = element.getBoundingClientRect();\n const documentElement = document.documentElement;\n return {\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0),\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0)\n };\n};\n/**\n * @hidden\n */\nconst limitValue = (value, min, max) => {\n return Math.max(Math.min(value, max), min);\n};\n/**\n * @hidden\n */\nconst eventValue = (eventArgs, scaleElement, options) => {\n const { min, max, vertical, rtl } = options;\n const trackOffset = elementOffset(scaleElement);\n const offset = vertical ? eventArgs.pageY - trackOffset.top : eventArgs.pageX - trackOffset.left;\n const scale = (max - min) / (vertical ? scaleElement.clientHeight : scaleElement.clientWidth);\n const offsetValue = offset * scale;\n let value = rtl || vertical ? max - offsetValue : min + offsetValue;\n const stepFractionLength = fractionLength(options.smallStep);\n value = toFixedPrecision(value, stepFractionLength + 1);\n return snapValue(value, options);\n};\n/**\n * @hidden\n */\nconst isButton = (element) => {\n return element.className.indexOf('k-button-increase') >= 0 || element.className.indexOf('k-button-decrease') >= 0;\n};\n/**\n * @hidden\n */\nconst increment = (options) => {\n return increaseValueToStep(options.value, options);\n};\n/**\n * @hidden\n */\nconst decrement = (options) => {\n return decreaseValueToStep(options.value, options);\n};\n/**\n * @hidden\n */\nconst incrementLarge = (options) => {\n return increaseValueToStep(options.value, options, true);\n};\n/**\n * @hidden\n */\nconst decrementLarge = (options) => {\n return decreaseValueToStep(options.value, options, true);\n};\n/**\n * @hidden\n */\nconst validateValue = (value) => {\n if (isDevMode && value && value[0] > value[1]) {\n throw new Error('[RangeSlider] The start value should not be greater than the end value.');\n }\n};\n\n/**\n * @hidden\n */\nclass SliderModelBase {\n constructor(props, wrapper, track, renderer) {\n this.props = props;\n this.wrapper = wrapper;\n this.track = track;\n this.renderer = renderer;\n this.props = props;\n this.wrapper = wrapper;\n this.track = track;\n this.tickSizes = this.getTickSizes();\n }\n resizeTrack() {\n const orientation = this.props.vertical ? 'height' : 'width';\n const altOrientation = this.props.vertical ? 'width' : 'height';\n const trackWidth = this.trackWidth();\n this.track.parentElement.style[orientation] = `${trackWidth}px`;\n this.track.parentElement.style[altOrientation] = '';\n }\n resizeTicks(ticksContainer, ticks) {\n const dimension = this.props.vertical ? \"height\" : \"width\";\n [...ticks].map((tick, index) => tick.style[dimension] = `${this.tickSizes[index]}px`);\n if (this.props.vertical) {\n this.adjustPadding(ticksContainer);\n }\n }\n resizeWrapper() {\n const dimension = this.props.vertical ? \"height\" : \"width\";\n const fixedTrackWidth = calculateFixedTrackSize(this.props);\n const wrapperParentEl = this.wrapper.parentElement;\n if (fixedTrackWidth) {\n wrapperParentEl.style[dimension] = \"auto\";\n }\n }\n trackWidth() {\n if (this.props.fixedTickWidth) {\n return calculateFixedTrackSize(this.props);\n }\n return this.elementSize(this.track.parentElement);\n }\n getTickSizes() {\n const { min, max, smallStep } = this.props;\n const count = calculateTicksCount(min, max, smallStep);\n const trackSize = this.trackWidth();\n const distStep = trackSize / subtract(max, min);\n const result = [];\n let usedSpace = 0;\n let endPoint = 0;\n for (let i = 0; i < count; i++) {\n if (i === 0 || i === count - 1) {\n endPoint += (smallStep / 2) * distStep;\n }\n else {\n endPoint += smallStep * distStep;\n }\n // ensure that the sum of the tick sizes does not exceed the track width\n endPoint = +endPoint.toFixed(2) - 0.01;\n const size = Math.round(endPoint - usedSpace);\n result.push(size);\n usedSpace += size;\n }\n if (usedSpace >= trackSize) {\n result[result.length - 1] -= 1;\n }\n return result;\n }\n adjustPadding(ticksContainer) {\n const totalTickSize = this.tickSizes.reduce((prev, curr) => prev + curr, 0);\n const trackWidth = this.trackWidth();\n const reminder = trackWidth - totalTickSize;\n if (reminder !== 0) {\n const padding = reminder + this.elementOffset(this.track);\n ticksContainer.style.paddingTop = `${padding}px`;\n }\n }\n elementOffset(element) {\n const { vertical } = this.props;\n const style = getComputedStyle(element);\n return parseInt(vertical ? style.bottom : style.left, 10);\n }\n elementSize(element) {\n const { vertical } = this.props;\n return vertical ? element.clientHeight : element.clientWidth;\n }\n}\n\n/**\n * @hidden\n */\nclass SliderModel extends SliderModelBase {\n positionHandle(dragHandle) {\n const { max, min, reverse, vertical } = this.props;\n const position = vertical ? 'bottom' : 'left';\n const trackWidth = this.trackWidth();\n const value = trimValue(max, min, this.props.value);\n this.handlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.handlePosition}px`);\n }\n positionSelection(selection) {\n const { reverse, vertical } = this.props;\n const dimension = vertical ? 'height' : 'width';\n let size = this.handlePosition;\n if (reverse) {\n size = this.trackWidth() - size;\n }\n this.renderer.setStyle(selection, dimension, `${size}px`);\n }\n}\n\nconst UNTOUCHED = 'ng-untouched';\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClass = (element, className) => Boolean(toClassList(element.className).find((name) => name === className));\n/**\n * @hidden\n */\nfunction invokeElementMethod(element, name, ...args) {\n if (element && element.nativeElement) {\n return element.nativeElement[name].apply(element.nativeElement, args);\n }\n}\n/**\n * @hidden\n */\nconst isUntouched = (element) => element && element.nativeElement && hasClass(element.nativeElement, UNTOUCHED);\n/**\n * @hidden\n */\nconst containsFocus = (hostElement, contender) => hostElement && contender && (hostElement === contender || hostElement.contains(contender));\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-inputs',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1642518309,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * Represents the template for the labels of the Slider.\n * To define the labels template, nest an `` tag with the `kendoSliderLabelTemplate` directive inside\n * the `` tag. The template context is passed to the `label` value.\n *\n * @example\n * ```ts-no-run\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{value}}\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * }\n *\n * ```\n */\nlet LabelTemplateDirective = class LabelTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nLabelTemplateDirective.ɵfac = function LabelTemplateDirective_Factory(t) { return new (t || LabelTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nLabelTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LabelTemplateDirective, selectors: [[\"\", \"kendoSliderLabelTemplate\", \"\"]] });\nLabelTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], LabelTemplateDirective);\n\n/**\n * @hidden\n */\nclass SliderBase {\n constructor(localizationService, injector, renderer, ngZone, changeDetector, hostElement) {\n this.localizationService = localizationService;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * Defines the title of the ticks ([see example]({% slug ticks_slider %}#toc-titles)). The default title\n * for each tick is its Slider value. If you use a callback function, the function accepts an argument\n * that holds the value of the component and returns a string with the new title.\n */\n this.title = identity;\n /**\n * Denotes the location of the tick marks in the Slider ([see example]({% slug ticks_slider %}#toc-placement)).\n *\n * The available options are:\n * * `before`—The tick marks are located to the top side of the horizontal track or to the left side of a vertical track.\n * * `after`—The tick marks are located to the bottom side of the horizontal track or to the right side of the vertical track.\n * * `both`— (Default) The tick marks are located on both sides of the track.\n * * `none`—The tick marks are not visible. The actual elements are not added to the DOM tree.\n */\n this.tickPlacement = 'both';\n /**\n * If `vertical` is set to `true`, the orientation of the Slider changes from horizontal to vertical\n * ([see example]({% slug orientation_slider %})).\n */\n this.vertical = false;\n /**\n * The minimum value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * The attribute accepts both integers and floating-point numbers.\n */\n this.min = 0;\n /**\n * The maximum value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * The attribute accepts both integers and floating-point numbers.\n */\n this.max = 10;\n /**\n * The step value of the Slider ([see example]({% slug predefinedsteps_slider %}#toc-small-steps)).\n * Accepts positive values only. Can be an integer or a floating-point number.\n */\n this.smallStep = 1;\n /**\n * Specifies that every nth tick will be large and will have a label\n * ([see example]({% slug predefinedsteps_slider %}#toc-large-steps)).\n * Accepts positive integer values only.\n */\n this.largeStep = null;\n /**\n * Determines whether the Slider is disabled ([see example]({% slug disabledstate_slider %})).\n */\n this.disabled = false;\n /**\n * Determines whether the Slider is in its read-only state ([see example]({% slug readonly_slider %})).\n */\n this.readonly = false;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the Slider.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the component.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the component is blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n this.sliderClass = true;\n this.widgetClass = true;\n this.subscriptions = new Subscription();\n /**\n * @hidden\n */\n this.ifEnabled = (callback, event) => {\n if (!this.isDisabled) {\n callback.call(this, event);\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get horizontalClass() {\n return !this.vertical;\n }\n get verticalClass() {\n return this.vertical;\n }\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n ngOnInit() {\n this.subscriptions.add(this.localizationService\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n this.sizeComponent();\n }));\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n */\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n get reverse() {\n return this.localizationService.rtl && !this.vertical;\n }\n get keyBinding() {\n const reverse = this.reverse;\n return {\n [Keys.ArrowLeft]: reverse ? increment : decrement,\n [Keys.ArrowRight]: reverse ? decrement : increment,\n [Keys.ArrowDown]: decrement,\n [Keys.ArrowUp]: increment,\n [Keys.PageUp]: incrementLarge,\n [Keys.PageDown]: decrementLarge,\n [Keys.Home]: ({ min }) => min,\n [Keys.End]: ({ max }) => max\n };\n }\n resetStyles(elements) {\n elements.forEach(el => {\n if (el) {\n if (this.vertical) {\n this.renderer.removeStyle(el, 'width');\n this.renderer.removeStyle(el, 'left');\n this.renderer.removeStyle(el, 'right');\n }\n else {\n this.renderer.removeStyle(el, 'height');\n this.renderer.removeStyle(el, 'bottom');\n }\n this.renderer.removeStyle(el, 'padding-top');\n }\n });\n }\n}\nSliderBase.ɵfac = function SliderBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSliderBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SliderBase, contentQueries: function SliderBase_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, LabelTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.labelTemplate = _t.first);\n } }, viewQuery: function SliderBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c2, 7);\n ɵngcc0.ɵɵviewQuery(_c3, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c3, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.track = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.sliderSelection = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ticksContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ticks = _t.first);\n } }, hostVars: 11, hostBindings: function SliderBase_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-slider\", ctx.sliderClass)(\"k-widget\", ctx.widgetClass)(\"k-slider-horizontal\", ctx.horizontalClass)(\"k-slider-vertical\", ctx.verticalClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { title: \"title\", tickPlacement: \"tickPlacement\", vertical: \"vertical\", min: \"min\", max: \"max\", smallStep: \"smallStep\", largeStep: \"largeStep\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", fixedTickWidth: \"fixedTickWidth\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SliderBase.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderBase.prototype, \"tickPlacement\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderBase.prototype, \"vertical\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"smallStep\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"largeStep\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"fixedTickWidth\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderBase.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderBase.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderBase.prototype, \"tabindex\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], SliderBase.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], SliderBase.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SliderBase.prototype, \"valueChange\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], SliderBase.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-slider-horizontal'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SliderBase.prototype, \"horizontalClass\", null);\n__decorate([\n HostBinding('class.k-slider-vertical'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SliderBase.prototype, \"verticalClass\", null);\n__decorate([\n HostBinding('class.k-slider'),\n __metadata(\"design:type\", Boolean)\n], SliderBase.prototype, \"sliderClass\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n __metadata(\"design:type\", Boolean)\n], SliderBase.prototype, \"widgetClass\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SliderBase.prototype, \"disabledClass\", null);\n__decorate([\n ViewChild('wrap', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SliderBase.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('track', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SliderBase.prototype, \"track\", void 0);\n__decorate([\n ViewChild('sliderSelection', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SliderBase.prototype, \"sliderSelection\", void 0);\n__decorate([\n ViewChild('ticks', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], SliderBase.prototype, \"ticksContainer\", void 0);\n__decorate([\n ViewChild('ticks', { static: false }),\n __metadata(\"design:type\", Object)\n], SliderBase.prototype, \"ticks\", void 0);\n__decorate([\n ContentChild(LabelTemplateDirective, { static: false }),\n __metadata(\"design:type\", LabelTemplateDirective)\n], SliderBase.prototype, \"labelTemplate\", void 0);\n\nvar SliderComponent_1;\nconst PRESSED = 'k-pressed';\n/**\n * Represents the [Kendo UI Slider component for Angular]({% slug overview_slider %}).\n */\nlet SliderComponent = SliderComponent_1 = class SliderComponent extends SliderBase {\n constructor(localization, injector, renderer, ngZone, changeDetector, hostElement) {\n super(localization, injector, renderer, ngZone, changeDetector, hostElement);\n this.localization = localization;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines if the animation will be played on value change.\n * Regardless of this setting, no animation will be played during the initial rendering.\n */\n this.animate = true;\n /**\n * Renders the arrow side buttons of the Slider ([see example]({% slug sidebuttons_slider %}#toc-hidden-state)).\n * When `showButtons` is set to `false`, the buttons are not displayed.\n */\n this.showButtons = true;\n /**\n * The current value of the Slider when it is initially displayed.\n * The component can use either NgModel or the `value` binding but not both of them at the same time.\n */\n this.value = this.min;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.onWrapClick = (args) => {\n const target = args.target;\n if (!this.isDisabled && !(isButton(target) || isButton(target.parentNode))) {\n const value = eventValue(args, this.track.nativeElement, this.getProps());\n this.changeValue(value);\n }\n invokeElementMethod(this.draghandle, 'focus');\n };\n /**\n * @hidden\n */\n this.onKeyDown = (e) => {\n const options = this.getProps();\n const { max, min } = options;\n const handler = this.keyBinding[e.keyCode];\n if (this.isDisabled || !handler) {\n return;\n }\n const value = handler(options);\n this.changeValue(trimValue(max, min, value));\n e.preventDefault();\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.decreaseValue = () => {\n this.changeValue(decreaseValueToStep(this.value, this.getProps()));\n };\n this.increaseValue = () => {\n this.changeValue(increaseValueToStep(this.value, this.getProps()));\n };\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n });\n }\n };\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n get currentValue() {\n return isPresent(this.value) ? this.value.toString() : '';\n }\n /**\n * Focuses the Slider.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.disabled) {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandle, 'focus');\n this.focusChangedProgrammatically = false;\n }\n }\n /**\n * Blurs the Slider.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandle, 'blur');\n this.handleBlur();\n this.focusChangedProgrammatically = false;\n }\n ngOnChanges(changes) {\n if (anyChanged(['value', 'fixedTickWidth', 'tickPlacement'], changes, true)) {\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this.sizeComponent(false);\n });\n }\n }\n ngAfterViewInit() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.showButtons) {\n this.setValueChangeInterval(this.increaseButton.nativeElement, () => this.increaseValue());\n this.setValueChangeInterval(this.decreaseButton.nativeElement, () => this.decreaseValue());\n }\n this.sizeComponent(false);\n if (this.ticks) {\n this.ticks.tickElements\n .changes\n .subscribe(() => this.sizeComponent(false));\n }\n this.attachElementEventHandlers();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get incrementMessage() {\n return this.incrementTitle || this.localizationService.get('increment');\n }\n /**\n * @hidden\n */\n get decrementMessage() {\n return this.decrementTitle || this.localizationService.get('decrement');\n }\n /**\n * @hidden\n */\n get dragHandleMessage() {\n return this.dragHandleTitle || this.localizationService.get('dragHandle');\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (args.originalEvent) {\n args.originalEvent.preventDefault();\n }\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n this.dragging = true;\n this.changeValue(eventValue(args, this.track.nativeElement, this.getProps()));\n }\n /**\n * @hidden\n */\n onHandleRelease() {\n this.dragging = false; //needed for animation\n this.renderer.addClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n this.changeDetector.markForCheck();\n this.value = value;\n this.sizeComponent(this.animate);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n changeValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.sizeComponent(this.animate);\n this.changeDetector.markForCheck();\n });\n }\n }\n /**\n * @hidden\n */\n sizeComponent(animate) {\n if (!isDocumentAvailable()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const track = this.track.nativeElement;\n const selectionEl = this.sliderSelection.nativeElement;\n const dragHandleEl = this.draghandle.nativeElement;\n const ticks = this.ticks ? this.ticksContainer.nativeElement : null;\n if (!animate) {\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n this.resetStyles([track, selectionEl, dragHandleEl, ticks, this.hostElement.nativeElement]);\n const props = this.getProps();\n const model = new SliderModel(props, wrapper, track, this.renderer);\n model.resizeTrack();\n if (this.ticks) { //for case when tickPlacement: none\n model.resizeTicks(this.ticksContainer.nativeElement, this.ticks.tickElements.map(element => element.nativeElement));\n }\n model.positionHandle(dragHandleEl);\n model.positionSelection(selectionEl);\n if (!animate) {\n this.hostElement.nativeElement.getBoundingClientRect();\n this.renderer.addClass(this.hostElement.nativeElement, 'k-slider-transitions');\n }\n if (this.fixedTickWidth) {\n model.resizeWrapper();\n }\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n this.isFocused = value;\n }\n }\n set dragging(value) {\n if (this.isDragged !== value && this.sliderSelection && this.draghandle) {\n const sliderSelection = this.sliderSelection.nativeElement;\n const draghandle = this.draghandle.nativeElement;\n if (value) {\n this.renderer.addClass(sliderSelection, PRESSED);\n this.renderer.addClass(draghandle, PRESSED);\n }\n else {\n this.renderer.removeClass(sliderSelection, PRESSED);\n this.renderer.removeClass(draghandle, PRESSED);\n }\n this.isDragged = value;\n }\n }\n setValueChangeInterval(element, callback) {\n this.ngZone.runOutsideAngular(() => {\n const mousedown = fromEvent(element, 'mousedown');\n const mouseup = fromEvent(element, 'mouseup');\n const mouseout = fromEvent(element, 'mouseout');\n const subscription = mousedown.pipe(filter((e) => e.button === 0 && !this.isDisabled), concatMap(() => interval(150).pipe(startWith(-1), takeUntil(merge(mouseup, mouseout))))).subscribe(() => {\n if (!this.isFocused) {\n invokeElementMethod(this.draghandle, 'focus');\n }\n callback();\n });\n this.subscriptions.add(subscription);\n });\n }\n getProps() {\n return {\n buttons: this.showButtons,\n disabled: this.disabled,\n fixedTickWidth: this.fixedTickWidth,\n largeStep: this.largeStep,\n max: this.max,\n min: this.min,\n readonly: this.readonly,\n reverse: this.reverse,\n rtl: this.localizationService.rtl,\n smallStep: this.smallStep,\n value: trimValue(this.max, this.min, this.value),\n vertical: this.vertical\n };\n }\n attachElementEventHandlers() {\n const hostElement = this.hostElement.nativeElement;\n let tabbing = false;\n let cursorInsideWrapper = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onFocus.emit();\n }\n this.focused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n if (args.relatedTarget !== this.draghandle.nativeElement) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n};\nSliderComponent.ɵfac = function SliderComponent_Factory(t) { return new (t || SliderComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nSliderComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SliderComponent, selectors: [[\"kendo-slider\"]], viewQuery: function SliderComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c4, 7);\n ɵngcc0.ɵɵviewQuery(_c5, 5);\n ɵngcc0.ɵɵviewQuery(_c6, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.draghandle = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decreaseButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.increaseButton = _t.first);\n } }, inputs: { focusableId: \"focusableId\", animate: \"animate\", showButtons: \"showButtons\", value: \"value\", tabIndex: \"tabIndex\", dragHandleTitle: \"dragHandleTitle\", incrementTitle: \"incrementTitle\", decrementTitle: \"decrementTitle\" }, exportAs: [\"kendoSlider\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.slider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent_1) },\n { provide: KendoInput, useExisting: forwardRef(() => SliderComponent_1) }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 25, consts: function () { let i18n_7; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the **Increase** button of the Slider.\n * @meaning kendo.slider.increment\n */\n const MSG_EXTERNAL_8302125540024939132$$DIST_FESM2015_INDEX_JS_8 = goog.getMsg(\"increment\");\n i18n_7 = MSG_EXTERNAL_8302125540024939132$$DIST_FESM2015_INDEX_JS_8;\n }\n else {\n i18n_7 = $localize `:kendo.slider.increment|The title of the **Increase** button of the Slider.␟0fa71630d40c425b9c366afd7f6c3cecc5bef59d␟8302125540024939132:increment`;\n } let i18n_9; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the **Decrease** button of the Slider.\n * @meaning kendo.slider.decrement\n */\n const MSG_EXTERNAL_652458644240352212$$DIST_FESM2015_INDEX_JS_10 = goog.getMsg(\"decrement\");\n i18n_9 = MSG_EXTERNAL_652458644240352212$$DIST_FESM2015_INDEX_JS_10;\n }\n else {\n i18n_9 = $localize `:kendo.slider.decrement|The title of the **Decrease** button of the Slider.␟042c26f68d78afd6834ea46a5f7533850fe8c800␟652458644240352212:decrement`;\n } let i18n_11; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the drag handle of the Slider.\n * @meaning kendo.slider.dragHandle\n */\n const MSG_EXTERNAL_9117416417579607469$$DIST_FESM2015_INDEX_JS_12 = goog.getMsg(\"Drag\");\n i18n_11 = MSG_EXTERNAL_9117416417579607469$$DIST_FESM2015_INDEX_JS_12;\n }\n else {\n i18n_11 = $localize `:kendo.slider.dragHandle|The title of the drag handle of the Slider.␟481eb98e9cd8ef8e8b22051796441901e883763d␟9117416417579607469:Drag`;\n } return [[\"kendoSliderLocalizedMessages\", \"\", \"increment\", i18n_7, \"decrement\", i18n_9, \"dragHandle\", i18n_11], [1, \"k-slider-wrap\", 3, \"kendoEventsOutsideAngular\"], [\"wrap\", \"\"], [\"type\", \"button\", \"class\", \"k-button-decrease k-button k-button-md k-rounded-full k-button-rectangle k-button-solid k-button-solid-base k-icon-button\", \"role\", \"presentation\", 3, \"title\", 4, \"ngIf\"], [1, \"k-slider-track-wrap\"], [\"kendoSliderTicks\", \"\", 3, \"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\", 4, \"ngIf\"], [1, \"k-slider-track\"], [\"track\", \"\"], [1, \"k-slider-selection\"], [\"sliderSelection\", \"\"], [\"role\", \"slider\", \"kendoDraggable\", \"\", 1, \"k-draghandle\", 3, \"title\", \"id\", \"kendoPress\", \"kendoDrag\", \"kendoRelease\"], [\"draghandle\", \"\"], [\"type\", \"button\", \"class\", \"k-button-increase k-button k-button-md k-rounded-full k-button-rectangle k-button-solid k-button-solid-base k-icon-button\", \"role\", \"presentation\", 3, \"title\", \"click\", 4, \"ngIf\"], [3, \"resize\"], [\"type\", \"button\", \"role\", \"presentation\", 1, \"k-button-decrease\", \"k-button\", \"k-button-md\", \"k-rounded-full\", \"k-button-rectangle\", \"k-button-solid\", \"k-button-solid-base\", \"k-icon-button\", 3, \"title\"], [\"decreaseButton\", \"\"], [1, \"k-button-icon\", \"k-icon\"], [\"kendoSliderTicks\", \"\", 3, \"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\"], [\"ticks\", \"\"], [\"type\", \"button\", \"role\", \"presentation\", 1, \"k-button-increase\", \"k-button\", \"k-button-md\", \"k-rounded-full\", \"k-button-rectangle\", \"k-button-solid\", \"k-button-solid-base\", \"k-icon-button\", 3, \"title\", \"click\"], [\"increaseButton\", \"\"]]; }, template: function SliderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵtemplate(3, SliderComponent_button_3_Template, 3, 6, \"button\", 3);\n ɵngcc0.ɵɵelementStart(4, \"div\", 4);\n ɵngcc0.ɵɵtemplate(5, SliderComponent_ul_5_Template, 2, 8, \"ul\", 5);\n ɵngcc0.ɵɵelementStart(6, \"div\", 6, 7);\n ɵngcc0.ɵɵelement(8, \"div\", 8, 9);\n ɵngcc0.ɵɵelementStart(10, \"a\", 10, 11);\n ɵngcc0.ɵɵlistener(\"kendoPress\", function SliderComponent_Template_a_kendoPress_10_listener($event) { return ctx.ifEnabled(ctx.handleDragPress, $event); })(\"kendoDrag\", function SliderComponent_Template_a_kendoDrag_10_listener($event) { return ctx.ifEnabled(ctx.onHandleDrag, $event); })(\"kendoRelease\", function SliderComponent_Template_a_kendoRelease_10_listener($event) { return ctx.ifEnabled(ctx.onHandleRelease, $event); });\n ɵngcc0.ɵɵelementEnd()()();\n ɵngcc0.ɵɵtemplate(12, SliderComponent_button_12_Template, 3, 7, \"button\", 12);\n ɵngcc0.ɵɵelementStart(13, \"kendo-resize-sensor\", 13);\n ɵngcc0.ɵɵlistener(\"resize\", function SliderComponent_Template_kendo_resize_sensor_resize_13_listener() { return ctx.sizeComponent(false); });\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-slider-buttons\", ctx.showButtons)(\"k-slider-topleft\", ctx.tickPlacement === \"before\")(\"k-slider-bottomright\", ctx.tickPlacement === \"after\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(22, _c13, ctx.onWrapClick, ctx.onKeyDown));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showButtons);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.tickPlacement !== \"none\");\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.isDisabled ? \"\" : \"none\");\n ɵngcc0.ɵɵproperty(\"title\", ctx.dragHandleMessage)(\"id\", ctx.focusableId);\n ɵngcc0.ɵɵattribute(\"aria-valuemin\", ctx.min)(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.currentValue)(\"aria-valuetext\", ctx.currentValue)(\"aria-disabled\", ctx.disabled ? true : undefined)(\"aria-readonly\", ctx.readonly ? true : undefined)(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\")(\"tabindex\", ctx.disabled ? \"-1\" : ctx.tabIndex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showButtons);\n } }, directives: function () { return [LocalizedSliderMessagesDirective, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf, SliderTicksComponent, ɵngcc2.DraggableDirective, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderComponent.prototype, \"dragHandleTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderComponent.prototype, \"incrementTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderComponent.prototype, \"animate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderComponent.prototype, \"decrementTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderComponent.prototype, \"showButtons\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], SliderComponent.prototype, \"tabIndex\", null);\n__decorate([\n ViewChild('draghandle', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], SliderComponent.prototype, \"draghandle\", void 0);\n__decorate([\n ViewChild('decreaseButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], SliderComponent.prototype, \"decreaseButton\", void 0);\n__decorate([\n ViewChild('increaseButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], SliderComponent.prototype, \"increaseButton\", void 0);\nSliderComponent = SliderComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n Injector,\n Renderer2,\n NgZone,\n ChangeDetectorRef,\n ElementRef])\n], SliderComponent);\n\n/**\n * @hidden\n */\nclass RangeSliderModel extends SliderModelBase {\n positionHandle(dragHandle) {\n if (!dragHandle.id) {\n return;\n }\n const { max, min, reverse, vertical } = this.props;\n const position = vertical ? 'bottom' : 'left';\n const trackWidth = this.trackWidth();\n const value = isStartHandle(dragHandle) ? trimValueRange(max, min, this.props.value)[0]\n : trimValueRange(max, min, this.props.value)[1];\n if (isStartHandle(dragHandle)) {\n this.startHandlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.startHandlePosition}px`);\n }\n else {\n this.endHandlePosition = calculateHandlePosition({\n min,\n max,\n reverse,\n value,\n trackWidth\n });\n this.renderer.setStyle(dragHandle, position, `${this.endHandlePosition}px`);\n }\n }\n positionSelection(dragHandle, selection) {\n const { reverse, vertical } = this.props;\n const dimension = vertical ? 'height' : 'width';\n const position = vertical ? 'bottom' : reverse ? 'right' : 'left';\n const size = Math.abs(this.endHandlePosition - this.startHandlePosition);\n const currentSelectionPosition = vertical ? dragHandle.style.bottom : dragHandle.style.left;\n this.renderer.setStyle(selection, dimension, `${size}px`);\n this.renderer.setStyle(selection, position, reverse ? this.trackWidth() - parseFloat(currentSelectionPosition) + 'px'\n : parseFloat(currentSelectionPosition) + 'px');\n }\n}\n\nvar RangeSliderComponent_1;\nconst PRESSED$1 = 'k-pressed';\n/**\n * Represents the [Kendo UI RangeSlider component for Angular]({% slug overview_rangeslider %}).\n */\nlet RangeSliderComponent = RangeSliderComponent_1 = class RangeSliderComponent extends SliderBase {\n constructor(localization, injector, renderer, ngZone, changeDetector, hostElement) {\n super(localization, injector, renderer, ngZone, changeDetector, hostElement);\n this.localization = localization;\n this.injector = injector;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.startHandleId = `k-start-handle-${guid()}`;\n /**\n * @hidden\n */\n this.endHandleId = `k-end-handle-${guid()}`;\n /**\n * @hidden\n */\n this.focusableId = this.startHandleId;\n this.handleZIndex = 0;\n this.activeHandle = 'startHandle';\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.onWrapClick = (args) => {\n if (!this.isDisabled) {\n this.value = this.value || [this.min, this.min];\n const trackValue = eventValue(args, this.track.nativeElement, this.getProps());\n let newRangeValue;\n const [startValue, endValue] = newRangeValue = this.value;\n if (trackValue <= startValue) {\n newRangeValue = [trackValue, endValue];\n this.activeHandle = 'startHandle';\n }\n else if (startValue < trackValue && trackValue < endValue) {\n if (trackValue < (startValue + endValue) / 2) {\n newRangeValue = [trackValue, endValue];\n this.activeHandle = 'startHandle';\n }\n else {\n newRangeValue = [startValue, trackValue];\n this.activeHandle = 'endHandle';\n }\n }\n else if (trackValue >= endValue) {\n newRangeValue = [startValue, trackValue];\n this.activeHandle = 'endHandle';\n }\n const activeHandle = this.activeHandle === 'startHandle' ? this.draghandleStart : this.draghandleEnd;\n invokeElementMethod(activeHandle, 'focus');\n this.changeValue(newRangeValue);\n }\n };\n /**\n * @hidden\n */\n this.onKeyDown = (e) => {\n this.value = this.value || [this.min, this.min];\n const options = this.getProps();\n const { max, min } = options;\n const handler = this.keyBinding[e.keyCode];\n if (this.isDisabled || !handler) {\n return;\n }\n this.renderer.setStyle(e.target, 'zIndex', ++this.handleZIndex);\n const startHandleIsActive = isStartHandle(e.target);\n const value = handler(Object.assign({}, options, { value: startHandleIsActive ? this.value[0] : this.value[1] }));\n if (startHandleIsActive) {\n if (value > this.value[1]) {\n this.value[1] = value;\n }\n }\n else {\n if (value < this.value[0]) {\n this.value[0] = value;\n }\n }\n const trimmedValue = trimValue(max, min, value);\n const newValue = startHandleIsActive ? [trimmedValue, this.value[1]]\n : [this.value[0], trimmedValue];\n this.changeValue(newValue);\n e.preventDefault();\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n });\n }\n };\n }\n /**\n * Focuses the RangeSlider.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
            \n * \n *
            \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n this.focusChangedProgrammatically = true;\n invokeElementMethod(this.draghandleStart, 'focus');\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the RangeSlider.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const activeHandle = this.activeHandle === 'startHandle' ? this.draghandleStart : this.draghandleEnd;\n invokeElementMethod(activeHandle, 'blur');\n this.handleBlur();\n this.focusChangedProgrammatically = false;\n }\n ngOnInit() {\n if (!this.value) {\n this.value = [this.min, this.max];\n }\n super.ngOnInit();\n }\n ngOnChanges(changes) {\n if (anyChanged(['value', 'fixedTickWidth', 'tickPlacement'], changes, true)) {\n if (changes.value && changes.value.currentValue) {\n validateValue(changes.value.currentValue);\n }\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n this.sizeComponent();\n });\n }\n }\n ngAfterViewInit() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.sizeComponent();\n if (this.ticks) {\n this.ticks.tickElements\n .changes\n .subscribe(() => this.sizeComponent());\n }\n this.attachElementEventHandlers();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n */\n get valueText() {\n return this.value ? `${this.value[0]} - ${this.value[1]}` : '';\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (args.originalEvent) {\n args.originalEvent.preventDefault();\n }\n const target = args.originalEvent.target;\n this.draggedHandle = target;\n this.renderer.setStyle(target, 'zIndex', ++this.handleZIndex);\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n this.value = this.value || [this.min, this.min];\n const target = args.originalEvent.target;\n const lastCoords = this.draggedHandle.getBoundingClientRect();\n this.lastHandlePosition = { x: lastCoords.left, y: lastCoords.top };\n this.dragging = { value: true, target };\n const left = args.pageX < this.lastHandlePosition.x;\n const right = args.pageX > this.lastHandlePosition.x;\n const up = args.pageY > this.lastHandlePosition.y;\n const moveStartHandle = () => this.changeValue([eventValue(args, this.track.nativeElement, this.getProps()), this.value[1]]);\n const moveEndHandle = () => this.changeValue([this.value[0], eventValue(args, this.track.nativeElement, this.getProps())]);\n const moveBothHandles = () => this.changeValue([eventValue(args, this.track.nativeElement, this.getProps()), eventValue(args, this.track.nativeElement, this.getProps())]);\n const activeStartHandle = isStartHandle(this.draggedHandle);\n const vertical = this.vertical;\n const horizontal = !vertical;\n const forward = (vertical && up) || (this.reverse ? horizontal && right : horizontal && left);\n // const forward = (this.reverse ? (!this.vertical && !left) : (!this.vertical && left)) || (this.vertical && up);\n if (this.value[0] === this.value[1]) {\n if (forward) {\n activeStartHandle ? moveStartHandle() : moveBothHandles();\n }\n else {\n activeStartHandle ? moveBothHandles() : moveEndHandle();\n }\n }\n else {\n activeStartHandle ? moveStartHandle() : moveEndHandle();\n }\n }\n /**\n * @hidden\n */\n onHandleRelease(args) {\n this.dragging = { value: false, target: args.originalEvent.target }; //needed for animation\n this.draggedHandle = undefined;\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n validateValue(value);\n this.value = value;\n this.sizeComponent();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n changeValue(value) {\n if (!this.value || !isSameRange(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n if (this.value) {\n this.valueChange.emit(value);\n }\n this.sizeComponent();\n });\n }\n }\n /**\n * @hidden\n */\n sizeComponent() {\n if (!isDocumentAvailable()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const track = this.track.nativeElement;\n const selectionEl = this.sliderSelection.nativeElement;\n const dragHandleStartEl = this.draghandleStart.nativeElement;\n const dragHandleEndEl = this.draghandleEnd.nativeElement;\n const ticks = this.ticks ? this.ticksContainer.nativeElement : null;\n this.resetStyles([track, selectionEl, dragHandleStartEl, dragHandleEndEl, ticks, this.hostElement.nativeElement]);\n const props = this.getProps();\n const model = new RangeSliderModel(props, wrapper, track, this.renderer);\n model.resizeTrack();\n if (this.ticks) { //for case when tickPlacement: none\n model.resizeTicks(this.ticksContainer.nativeElement, this.ticks.tickElements.map(element => element.nativeElement));\n }\n model.positionHandle(dragHandleStartEl);\n model.positionHandle(dragHandleEndEl);\n model.positionSelection(dragHandleStartEl, selectionEl);\n if (this.fixedTickWidth) {\n model.resizeWrapper();\n }\n }\n /**\n * @hidden\n */\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n /**\n * @hidden\n * Used by the FloatingLabel to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n this.isFocused = value;\n }\n }\n set dragging(data) {\n if (this.isDragged !== data.value && this.sliderSelection && this.draghandleStart && this.draghandleEnd) {\n const sliderSelection = this.sliderSelection.nativeElement;\n const draghandle = data.target;\n if (data.value) {\n this.renderer.addClass(sliderSelection, PRESSED$1);\n this.renderer.addClass(draghandle, PRESSED$1);\n }\n else {\n this.renderer.removeClass(sliderSelection, PRESSED$1);\n this.renderer.removeClass(draghandle, PRESSED$1);\n }\n this.isDragged = data.value;\n }\n }\n getProps() {\n return {\n disabled: this.disabled,\n fixedTickWidth: this.fixedTickWidth,\n largeStep: this.largeStep,\n max: this.max,\n min: this.min,\n readonly: this.readonly,\n reverse: this.reverse,\n rtl: this.localizationService.rtl,\n smallStep: this.smallStep,\n value: trimValueRange(this.max, this.min, this.value),\n vertical: this.vertical,\n buttons: false\n };\n }\n attachElementEventHandlers() {\n const hostElement = this.hostElement.nativeElement;\n let tabbing = false;\n let cursorInsideWrapper = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onFocus.emit();\n }\n this.focused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n if (args.relatedTarget !== this.draghandleStart.nativeElement && args.relatedTarget !== this.draghandleEnd.nativeElement) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n};\nRangeSliderComponent.ɵfac = function RangeSliderComponent_Factory(t) { return new (t || RangeSliderComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nRangeSliderComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: RangeSliderComponent, selectors: [[\"kendo-rangeslider\"]], viewQuery: function RangeSliderComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c14, 7);\n ɵngcc0.ɵɵviewQuery(_c15, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.draghandleStart = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.draghandleEnd = _t.first);\n } }, inputs: { value: \"value\" }, exportAs: [\"kendoRangeSlider\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.rangeslider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RangeSliderComponent_1) },\n { provide: KendoInput, useExisting: forwardRef(() => RangeSliderComponent_1) }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 33, consts: function () { let i18n_16; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the **Start** drag handle of the Slider.\n * @meaning kendo.rangeslider.dragHandleStart\n */\n const MSG_EXTERNAL_1512034289801794423$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"Drag\");\n i18n_16 = MSG_EXTERNAL_1512034289801794423$$DIST_FESM2015_INDEX_JS_17;\n }\n else {\n i18n_16 = $localize `:kendo.rangeslider.dragHandleStart|The title of the **Start** drag handle of the Slider.␟4487c64285c2d8cdb336be783b6cb9304ce86007␟1512034289801794423:Drag`;\n } let i18n_18; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the **End** drag handle of the Slider.\n * @meaning kendo.rangeslider.dragHandleEnd\n */\n const MSG_EXTERNAL_6915505327582510906$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"Drag\");\n i18n_18 = MSG_EXTERNAL_6915505327582510906$$DIST_FESM2015_INDEX_JS_19;\n }\n else {\n i18n_18 = $localize `:kendo.rangeslider.dragHandleEnd|The title of the **End** drag handle of the Slider.␟d6af522570cc1aff06104cee4b7780d6835e01d1␟6915505327582510906:Drag`;\n } return [[\"kendoSliderLocalizedMessages\", \"\", \"dragHandleStart\", i18n_16, \"dragHandleEnd\", i18n_18], [1, \"k-slider-wrap\", 3, \"kendoEventsOutsideAngular\"], [\"wrap\", \"\"], [1, \"k-slider-track-wrap\"], [\"kendoSliderTicks\", \"\", 3, \"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\", 4, \"ngIf\"], [1, \"k-slider-track\"], [\"track\", \"\"], [1, \"k-slider-selection\"], [\"sliderSelection\", \"\"], [\"role\", \"slider\", \"kendoDraggable\", \"\", 1, \"k-draghandle\", 3, \"id\", \"title\", \"kendoPress\", \"kendoDrag\", \"kendoRelease\"], [\"draghandleStart\", \"\"], [\"draghandleEnd\", \"\"], [3, \"resize\"], [\"kendoSliderTicks\", \"\", 3, \"tickTitle\", \"vertical\", \"step\", \"largeStep\", \"min\", \"max\", \"labelTemplate\"], [\"ticks\", \"\"]]; }, template: function RangeSliderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2)(3, \"div\", 3);\n ɵngcc0.ɵɵtemplate(4, RangeSliderComponent_ul_4_Template, 2, 8, \"ul\", 4);\n ɵngcc0.ɵɵelementStart(5, \"div\", 5, 6);\n ɵngcc0.ɵɵelement(7, \"div\", 7, 8);\n ɵngcc0.ɵɵelementStart(9, \"a\", 9, 10);\n ɵngcc0.ɵɵlistener(\"kendoPress\", function RangeSliderComponent_Template_a_kendoPress_9_listener($event) { return ctx.ifEnabled(ctx.handleDragPress, $event); })(\"kendoDrag\", function RangeSliderComponent_Template_a_kendoDrag_9_listener($event) { return ctx.ifEnabled(ctx.onHandleDrag, $event); })(\"kendoRelease\", function RangeSliderComponent_Template_a_kendoRelease_9_listener($event) { return ctx.ifEnabled(ctx.onHandleRelease, $event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(11, \"a\", 9, 11);\n ɵngcc0.ɵɵlistener(\"kendoPress\", function RangeSliderComponent_Template_a_kendoPress_11_listener($event) { return ctx.ifEnabled(ctx.handleDragPress, $event); })(\"kendoDrag\", function RangeSliderComponent_Template_a_kendoDrag_11_listener($event) { return ctx.ifEnabled(ctx.onHandleDrag, $event); })(\"kendoRelease\", function RangeSliderComponent_Template_a_kendoRelease_11_listener($event) { return ctx.ifEnabled(ctx.onHandleRelease, $event); });\n ɵngcc0.ɵɵelementEnd()()();\n ɵngcc0.ɵɵelementStart(13, \"kendo-resize-sensor\", 12);\n ɵngcc0.ɵɵlistener(\"resize\", function RangeSliderComponent_Template_kendo_resize_sensor_resize_13_listener() { return ctx.sizeComponent(); });\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-slider-topleft\", ctx.tickPlacement === \"before\")(\"k-slider-bottomright\", ctx.tickPlacement === \"after\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(30, _c13, ctx.onWrapClick, ctx.onKeyDown));\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.tickPlacement !== \"none\");\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.isDisabled ? \"\" : \"none\");\n ɵngcc0.ɵɵproperty(\"id\", ctx.startHandleId)(\"title\", ctx.textFor(\"dragHandleStart\"));\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? undefined : ctx.tabindex)(\"aria-valuemin\", ctx.min)(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.value ? ctx.value[0] : null)(\"aria-valuetext\", ctx.valueText)(\"aria-disabled\", ctx.disabled ? true : undefined)(\"aria-readonly\", ctx.readonly ? true : undefined)(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.isDisabled ? \"\" : \"none\");\n ɵngcc0.ɵɵproperty(\"id\", ctx.endHandleId)(\"title\", ctx.textFor(\"dragHandleEnd\"));\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? undefined : ctx.tabindex)(\"aria-valuemin\", ctx.min)(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.value ? ctx.value[1] : null)(\"aria-valuetext\", ctx.valueText)(\"aria-disabled\", ctx.disabled ? true : undefined)(\"aria-readonly\", ctx.readonly ? true : undefined)(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n } }, directives: function () { return [LocalizedRangeSliderMessagesDirective, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf, SliderTicksComponent, ɵngcc2.DraggableDirective, ɵngcc2.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], RangeSliderComponent.prototype, \"value\", void 0);\n__decorate([\n ViewChild('draghandleStart', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], RangeSliderComponent.prototype, \"draghandleStart\", void 0);\n__decorate([\n ViewChild('draghandleEnd', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], RangeSliderComponent.prototype, \"draghandleEnd\", void 0);\nRangeSliderComponent = RangeSliderComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n Injector,\n Renderer2,\n NgZone,\n ChangeDetectorRef,\n ElementRef])\n], RangeSliderComponent);\n\nvar SwitchComponent_1;\nconst FOCUSED = 'k-state-focused';\n/**\n * Represents the [Kendo UI Switch component for Angular]({% slug overview_switch %}).\n */\nlet SwitchComponent = SwitchComponent_1 = class SwitchComponent {\n constructor(renderer, hostElement, localizationService, injector, changeDetector, ngZone) {\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.localizationService = localizationService;\n this.injector = injector;\n this.changeDetector = changeDetector;\n this.ngZone = ngZone;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the Switch is disabled ([see example]({% slug disabled_switch %})).\n */\n this.disabled = false;\n /**\n * Determines whether the Switch is in its read-only state ([see example]({% slug readonly_switch %})).\n */\n this.readonly = false;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the Switch.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the `input` element.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the `input` element gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.initialized = false;\n this._checked = false;\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n /**\n * @hidden\n */\n this.handleFocus = () => {\n this.focused = true;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n });\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n this.keyDownHandler = this.keyDownHandler.bind(this);\n this.clickHandler = this.clickHandler.bind(this);\n }\n /**\n * Sets the value of the Switch when it is initially displayed.\n */\n set checked(value) {\n this.setHostClasses(value);\n this._checked = value;\n }\n get checked() {\n return this._checked;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get ieClass() {\n return browser && browser.msie;\n }\n get ariaDisabled() {\n return this.disabled ? true : undefined;\n }\n get ariaReadonly() {\n return this.readonly;\n }\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get onLabelMessage() {\n return this.onLabel || this.localizationService.get('on');\n }\n /**\n * @hidden\n */\n get offLabelMessage() {\n return this.offLabel || this.localizationService.get('off');\n }\n get isEnabled() {\n return !this.disabled && !this.readonly;\n }\n ngOnInit() {\n if (this.hostElement) {\n const wrapper = this.hostElement.nativeElement;\n this.renderer.removeAttribute(wrapper, \"tabindex\");\n }\n this.localizationChangeSubscription = this.localizationService\n .changes\n .pipe(skip(1))\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.control = this.injector.get(NgControl, null);\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.initialized = true);\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n /**\n * Focuses the Switch.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.wrapper) {\n return;\n }\n this.wrapper.nativeElement.focus();\n }\n /**\n * Blurs the Switch.\n */\n blur() {\n if (!this.wrapper) {\n return;\n }\n this.wrapper.nativeElement.blur();\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.changeDetector.markForCheck();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.checked = value === null ? false : value;\n this.changeDetector.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n keyDownHandler(e) {\n const keyCode = e.keyCode;\n if (this.isEnabled && (keyCode === Keys.Space || keyCode === Keys.Enter)) {\n this.changeValue(!this.checked);\n e.preventDefault();\n }\n }\n /**\n * @hidden\n */\n clickHandler() {\n if (this.isEnabled) {\n this.changeValue(!this.checked);\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n changeValue(value) {\n if (this.checked !== value) {\n this.ngZone.run(() => {\n this.checked = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(element, FOCUSED);\n }\n else {\n this.renderer.removeClass(element, FOCUSED);\n }\n this.isFocused = value;\n }\n }\n setHostClasses(value) {\n if (value) {\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-switch-off');\n this.renderer.addClass(this.hostElement.nativeElement, 'k-switch-on');\n }\n else {\n this.renderer.removeClass(this.hostElement.nativeElement, 'k-switch-on');\n this.renderer.addClass(this.hostElement.nativeElement, 'k-switch-off');\n }\n }\n};\nSwitchComponent.ɵfac = function SwitchComponent_Factory(t) { return new (t || SwitchComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSwitchComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SwitchComponent, selectors: [[\"kendo-switch\"]], viewQuery: function SwitchComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c20, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n } }, hostVars: 9, hostBindings: function SwitchComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"aria-disabled\", ctx.ariaDisabled)(\"aria-readonly\", ctx.ariaReadonly);\n ɵngcc0.ɵɵclassProp(\"k-switch\", ctx.hostClasses)(\"k-ie\", ctx.ieClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", checked: \"checked\", tabIndex: \"tabIndex\", onLabel: \"onLabel\", offLabel: \"offLabel\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, exportAs: [\"kendoSwitch\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.switch' },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent_1) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => SwitchComponent_1)\n }\n ])], decls: 8, vars: 17, consts: function () { let i18n_21; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The **On** label of the Switch.\n * @meaning kendo.switch.on\n */\n const MSG_EXTERNAL_818154782831456441$$DIST_FESM2015_INDEX_JS_22 = goog.getMsg(\"ON\");\n i18n_21 = MSG_EXTERNAL_818154782831456441$$DIST_FESM2015_INDEX_JS_22;\n }\n else {\n i18n_21 = $localize `:kendo.switch.on|The **On** label of the Switch.␟155f0a38198ffbf0429c5dbf9765e74f246a8617␟818154782831456441:ON`;\n } let i18n_23; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The **Off** label of the Switch.\n * @meaning kendo.switch.off\n */\n const MSG_EXTERNAL_759820891948194060$$DIST_FESM2015_INDEX_JS_24 = goog.getMsg(\"OFF\");\n i18n_23 = MSG_EXTERNAL_759820891948194060$$DIST_FESM2015_INDEX_JS_24;\n }\n else {\n i18n_23 = $localize `:kendo.switch.off|The **Off** label of the Switch.␟79df1a6d2b35c32b2948e3cee56dd3ffe28127bc␟759820891948194060:OFF`;\n } return [[\"kendoSwitchLocalizedMessages\", \"\", \"on\", i18n_21, \"off\", i18n_23], [\"role\", \"switch\", 1, \"k-switch-container\", 3, \"id\", \"kendoEventsOutsideAngular\"], [\"wrapper\", \"\"], [1, \"k-switch-label-on\"], [1, \"k-switch-label-off\"], [1, \"k-switch-handle\"]]; }, template: function SwitchComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2)(3, \"span\", 3);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 4);\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(7, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"transition-duration\", ctx.initialized ? \"200ms\" : \"0ms\");\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction4(12, _c25, ctx.clickHandler, ctx.keyDownHandler, ctx.handleFocus, ctx.handleBlur));\n ɵngcc0.ɵɵattribute(\"aria-checked\", ctx.checked)(\"tabindex\", ctx.disabled ? undefined : ctx.tabIndex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.onLabelMessage);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.offLabelMessage);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"transition-duration\", ctx.initialized ? \"200ms\" : \"0ms\");\n } }, directives: function () { return [LocalizedSwitchMessagesDirective, ɵngcc2.EventsOutsideAngularDirective]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SwitchComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SwitchComponent.prototype, \"onLabel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SwitchComponent.prototype, \"offLabel\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], SwitchComponent.prototype, \"checked\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SwitchComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SwitchComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SwitchComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], SwitchComponent.prototype, \"tabIndex\", null);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], SwitchComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], SwitchComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], SwitchComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", Object)\n], SwitchComponent.prototype, \"wrapper\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], SwitchComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-ie'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SwitchComponent.prototype, \"ieClass\", null);\n__decorate([\n HostBinding('attr.aria-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SwitchComponent.prototype, \"ariaDisabled\", null);\n__decorate([\n HostBinding('attr.aria-readonly'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SwitchComponent.prototype, \"ariaReadonly\", null);\n__decorate([\n HostBinding('class.k-switch'),\n __metadata(\"design:type\", Boolean)\n], SwitchComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], SwitchComponent.prototype, \"disabledClass\", null);\nSwitchComponent = SwitchComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [Renderer2,\n ElementRef,\n LocalizationService,\n Injector,\n ChangeDetectorRef,\n NgZone])\n], SwitchComponent);\n\nvar TextAreaDirective_1;\n/**\n * Represents the [Kendo UI TextArea directive for the Inputs components for Angular]({% slug overview_textarea %}).\n * Provides floating labels to `textarea` elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet TextAreaDirective = TextAreaDirective_1 = class TextAreaDirective {\n constructor(renderer, element, zone, changeDetector, injector, rtl) {\n this.renderer = renderer;\n this.element = element;\n this.zone = zone;\n this.changeDetector = changeDetector;\n this.injector = injector;\n this.elementClass = true;\n this.autofillClass = true;\n /**\n * Fires each time the textarea value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Specifies if the `textarea` element will resize its height automatically\n * ([see example]({% slug overview_textarea %}#toc-auto-resizing)).\n *\n * @default false\n */\n this.autoSize = false;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n this.direction = rtl ? 'rtl' : 'ltr';\n }\n get id() {\n return this.element.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.element.nativeElement, 'id', id);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.elementValue = value;\n this.resize();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.setElementProperty('disabled', isDisabled);\n }\n ngOnInit() {\n const element = this.element.nativeElement;\n this.zone.runOutsideAngular(() => {\n this.listeners = [\n this.renderer.listen(element, 'focus', this.handleFocus.bind(this)),\n this.renderer.listen(element, 'blur', this.handleBlur.bind(this)),\n this.renderer.listen(element, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n })\n ];\n if (isDocumentAvailable() && this.autoSize) {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe((debounceTime(50)))\n .subscribe(() => this.resize());\n }\n this.inputSubscription = fromEvent(element, 'input')\n .subscribe(this.handleInput.bind(this));\n });\n this.control = this.injector.get(NgControl, null);\n }\n ngOnChanges(changes) {\n const element = this.element.nativeElement;\n if (changes.value) {\n this.elementValue = this.value;\n }\n if (changes.autoSize) {\n if (this.autoSize) {\n this.initialHeight = element.offsetHeight;\n this.renderer.setStyle(element, 'resize', 'none');\n }\n else {\n this.renderer.setStyle(element, 'overflow-y', 'auto');\n this.renderer.setStyle(element, 'resize', 'both');\n element.style.height = `${this.initialHeight}px`;\n }\n }\n this.resize();\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n if (this.inputSubscription) {\n this.inputSubscription.unsubscribe();\n }\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n get elementValue() {\n if (this.element) {\n return this.element.nativeElement.value;\n }\n return '';\n }\n set elementValue(value) {\n this.setElementProperty('value', (value === undefined || value === null) ? '' : value);\n }\n setElementProperty(name, value) {\n if (this.element) {\n this.renderer.setProperty(this.element.nativeElement, name, value);\n }\n }\n resize() {\n if (!this.autoSize) {\n return;\n }\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, 'overflow-y', 'hidden');\n element.style.height = `${this.initialHeight}px`;\n const scrollHeight = element.scrollHeight;\n if (scrollHeight > this.initialHeight) {\n element.style.height = `${scrollHeight}px`;\n }\n }\n handleInput() {\n const value = this.elementValue;\n this.value = value;\n if (this.control || hasObservers(this.onValueChange) || hasObservers(this.valueChange)) {\n this.zone.run(() => {\n this.ngChange(value);\n this.onValueChange.emit(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n this.resize();\n }\n handleFocus() {\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur() {\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n this.changeDetector.markForCheck();\n });\n }\n }\n};\nTextAreaDirective.ɵfac = function TextAreaDirective_Factory(t) { return new (t || TextAreaDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nTextAreaDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextAreaDirective, selectors: [[\"textarea\", \"kendoTextArea\", \"\"]], hostVars: 5, hostBindings: function TextAreaDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textarea\", ctx.elementClass)(\"k-autofill\", ctx.autofillClass);\n } }, inputs: { autoSize: \"autoSize\", value: \"value\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective_1),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective_1)\n }]), ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n HostBinding('class.k-textarea'),\n __metadata(\"design:type\", Boolean)\n], TextAreaDirective.prototype, \"elementClass\", void 0);\n__decorate([\n HostBinding('class.k-autofill'),\n __metadata(\"design:type\", Boolean)\n], TextAreaDirective.prototype, \"autofillClass\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], TextAreaDirective.prototype, \"direction\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextAreaDirective.prototype, \"valueChange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextAreaDirective.prototype, \"autoSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextAreaDirective.prototype, \"value\", void 0);\nTextAreaDirective = TextAreaDirective_1 = __decorate([ __param(5, Optional()), __param(5, Inject(RTL)),\n __metadata(\"design:paramtypes\", [Renderer2,\n ElementRef,\n NgZone,\n ChangeDetectorRef,\n Injector, Boolean])\n], TextAreaDirective);\n\n/**\n * @hidden\n */\nclass FloatingLabelInputAdapter {\n constructor(component, formControl) {\n this.component = component;\n const isObservableOrEventEmitter = (event) => event instanceof Observable || event instanceof EventEmitter;\n if (isObservableOrEventEmitter(component.onFocus)) {\n this.onFocus = component.onFocus;\n }\n if (isObservableOrEventEmitter(component.autoFillStart)) {\n this.autoFillStart = component.autoFillStart;\n }\n if (isObservableOrEventEmitter(component.autoFillEnd)) {\n this.autoFillEnd = component.autoFillEnd;\n }\n if (isObservableOrEventEmitter(component.onBlur)) {\n this.onBlur = component.onBlur;\n }\n if (formControl) {\n this.onValueChange = formControl.valueChanges;\n }\n else if (component.onValueChange) {\n this.onValueChange = component.onValueChange;\n }\n }\n get focusableId() {\n const component = this.component;\n if ('focusableId' in component) {\n return component.focusableId;\n }\n else if ('id' in component) {\n return component.id;\n }\n return \"\";\n }\n set focusableId(value) {\n const component = this.component;\n if ('focusableId' in component) {\n component.focusableId = value;\n }\n else if ('id' in component) {\n component.id = value;\n }\n }\n}\n\nconst isFunction = (x) => Object.prototype.toString.call(x) === '[object Function]';\n/**\n * @hidden\n */\nlet TextBoxContainerComponent = class TextBoxContainerComponent {\n constructor(elementRef, renderer, changeDetectorRef, rtl) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.changeDetectorRef = changeDetectorRef;\n /**\n * @hidden\n */\n this.focused = false;\n /**\n * @hidden\n */\n this.empty = true;\n /**\n * @hidden\n */\n this.invalid = false;\n this._subscriptions = [];\n this.autoFillStarted = false;\n this.direction = rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, \"id\");\n }\n get hostClasses() {\n return true;\n }\n get textareaElementClass() {\n return !!this.textarea;\n }\n get focusedClass() {\n return this.focused;\n }\n get invalidClass() {\n return this.invalid;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (!this.formControl && !this.kendoInput) {\n if (isDevMode()) {\n throw new Error(\"The TextBoxContainer requires a Kendo Input component\" +\n \" or a forms-bound component to function properly.\");\n }\n return;\n }\n // add focus/blur/valueChange handlers\n const control = new FloatingLabelInputAdapter(this.kendoInput || this.formControl.valueAccessor, this.formControl);\n const setFocus = (isFocused) => () => {\n this.focused = isFocused;\n this.updateState();\n };\n this.subscribe(control, 'onFocus', setFocus(true));\n this.subscribe(control, 'onBlur', setFocus(false));\n this.subscribe(control, 'autoFillStart', () => {\n this.autoFillStarted = true;\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n });\n this.subscribe(control, 'autoFillEnd', () => {\n if (this.autoFillStarted) {\n this.autoFillStarted = false;\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n }\n });\n const updateState = () => this.updateState();\n updateState();\n this.subscribe(control, 'onValueChange', updateState);\n // set label id for floating label\n if (this.id && control.focusableId) {\n // input wins\n this.id = control.focusableId;\n }\n else if (this.id) {\n control.focusableId = this.id;\n }\n else if (control.focusableId) {\n this.id = control.focusableId;\n }\n else {\n const id = \"_\" + guid();\n control.focusableId = id;\n this.id = id;\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this._subscriptions.forEach(s => s.unsubscribe());\n this._subscriptions = [];\n }\n subscribe(control, eventName, handler) {\n if (control[eventName] instanceof EventEmitter) {\n const subscription = control[eventName].subscribe(handler);\n this._subscriptions.push(subscription);\n }\n }\n updateState() {\n const empty = value => {\n // zero is not an empty value (e.g., NumericTextBox)\n if (value === 0 || value === false) {\n return false;\n }\n // empty arrays are an empty value (e.g., MultiSelect)\n if (Array.isArray(value) && !value.length) {\n return true;\n }\n return !value;\n };\n const formControl = this.formControl;\n if (formControl) {\n const valueAccessor = formControl.valueAccessor;\n if (isFunction(valueAccessor.isEmpty)) {\n this.empty = valueAccessor.isEmpty();\n }\n else {\n this.empty = empty(formControl.value);\n }\n this.invalid = formControl.invalid && (formControl.touched || formControl.dirty);\n }\n else {\n this.empty = isFunction(this.kendoInput.isEmpty) ?\n this.kendoInput.isEmpty() : empty(this.kendoInput.value);\n }\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n this.changeDetectorRef.markForCheck();\n }\n};\nTextBoxContainerComponent.ɵfac = function TextBoxContainerComponent_Factory(t) { return new (t || TextBoxContainerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nTextBoxContainerComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TextBoxContainerComponent, selectors: [[\"kendo-textbox-container\"]], contentQueries: function TextBoxContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextAreaDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.textarea = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControl = _t.first);\n } }, hostVars: 9, hostBindings: function TextBoxContainerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textbox-container\", ctx.hostClasses)(\"k-textarea-wrapper\", ctx.textareaElementClass)(\"k-state-focused\", ctx.focusedClass)(\"k-state-invalid\", ctx.invalidClass);\n } }, inputs: { id: \"id\", floatingLabel: \"floatingLabel\" }, ngContentSelectors: _c26, decls: 2, vars: 1, consts: [[\"class\", \"k-label\", 3, \"for\", 4, \"ngIf\"], [1, \"k-label\", 3, \"for\"]], template: function TextBoxContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵtemplate(1, TextBoxContainerComponent_label_1_Template, 2, 2, \"label\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.floatingLabel);\n } }, directives: [ɵngcc3.NgIf], encapsulation: 2 });\n__decorate([\n HostBinding('class.k-textbox-container'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextBoxContainerComponent.prototype, \"hostClasses\", null);\n__decorate([\n HostBinding('class.k-textarea-wrapper'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextBoxContainerComponent.prototype, \"textareaElementClass\", null);\n__decorate([\n HostBinding('class.k-state-focused'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextBoxContainerComponent.prototype, \"focusedClass\", null);\n__decorate([\n HostBinding('class.k-state-invalid'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextBoxContainerComponent.prototype, \"invalidClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], TextBoxContainerComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxContainerComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxContainerComponent.prototype, \"floatingLabel\", void 0);\n__decorate([\n ContentChild(KendoInput, { static: false }),\n __metadata(\"design:type\", Object)\n], TextBoxContainerComponent.prototype, \"kendoInput\", void 0);\n__decorate([\n ContentChild(TextAreaDirective, { static: false }),\n __metadata(\"design:type\", TextAreaDirective)\n], TextBoxContainerComponent.prototype, \"textarea\", void 0);\n__decorate([\n ContentChild(NgControl, { static: false }),\n __metadata(\"design:type\", NgControl)\n], TextBoxContainerComponent.prototype, \"formControl\", void 0);\nTextBoxContainerComponent = __decorate([ __param(3, Optional()), __param(3, Inject(RTL)),\n __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n ChangeDetectorRef, Boolean])\n], TextBoxContainerComponent);\n\nvar TextBoxDirective_1;\n/**\n * Represents the [Kendo UI TextBox directive]({% slug overview_textbox %}) for the Inputs components for Angular.\n * Used to style the textbox of any `input` element.\n *\n * @example\n * ```ts-no-run\n * \n * \n * \n * ```\n */\nlet TextBoxDirective = TextBoxDirective_1 = class TextBoxDirective {\n constructor(renderer, inputElement, ngZone) {\n this.renderer = renderer;\n this.inputElement = inputElement;\n this.ngZone = ngZone;\n this.hostClass = true;\n /**\n * @hidden\n */\n this.onFocus = new EventEmitter();\n /**\n * @hidden\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.onValueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillStart = new EventEmitter();\n /**\n * @hidden\n */\n this.autoFillEnd = new EventEmitter();\n this.listeners = [];\n }\n /**\n * @hidden\n */\n set value(text) {\n if (!this.inputElement) {\n return;\n }\n this.inputElement.nativeElement.value = (text === undefined || text === null) ? '' : text;\n this.onValueChange.emit();\n }\n /**\n * @hidden\n */\n get value() {\n return this.inputElement.nativeElement.value;\n }\n get id() {\n return this.inputElement.nativeElement.id;\n }\n set id(id) {\n this.renderer.setAttribute(this.inputElement.nativeElement, 'id', id);\n }\n ngAfterViewInit() {\n const input = this.inputElement.nativeElement;\n this.listeners = [\n this.renderer.listen(input, 'focus', () => this.onFocus.emit()),\n this.renderer.listen(input, 'blur', () => this.onBlur.emit())\n ];\n this.ngZone.runOutsideAngular(() => {\n this.renderer.listen(input, 'animationstart', (e) => {\n if (e.animationName === 'autoFillStart') {\n this.autoFillStart.emit();\n }\n else if (e.animationName === 'autoFillEnd') {\n this.autoFillEnd.emit();\n }\n });\n });\n }\n ngOnDestroy() {\n this.listeners.forEach(listener => listener());\n }\n};\nTextBoxDirective.ɵfac = function TextBoxDirective_Factory(t) { return new (t || TextBoxDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nTextBoxDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextBoxDirective, selectors: [[\"input\", \"kendoTextBox\", \"\"]], hostVars: 2, hostBindings: function TextBoxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-textbox\", ctx.hostClass);\n } }, inputs: { value: \"value\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective_1)\n }])] });\n__decorate([\n HostBinding('class.k-textbox'),\n __metadata(\"design:type\", Boolean)\n], TextBoxDirective.prototype, \"hostClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], TextBoxDirective.prototype, \"value\", null);\nTextBoxDirective = TextBoxDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [Renderer2,\n ElementRef,\n NgZone])\n], TextBoxDirective);\n\n/**\n * @hidden\n */\nconst createMaxValidator = (maxValue) => {\n return (c) => {\n if (!isPresent(maxValue) || !isPresent(c.value) || c.value <= maxValue) {\n return null;\n }\n return {\n maxError: {\n maxValue: maxValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst createMinValidator = (minValue) => {\n return (c) => {\n if (!isPresent(minValue) || !isPresent(c.value) || c.value >= minValue) {\n return null;\n }\n return {\n minError: {\n minValue: minValue,\n value: c.value\n }\n };\n };\n};\n\n/**\n * @hidden\n */\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-min';\n/**\n * @hidden\n */\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/inputs/api/NumericTextBoxComponent/#toc-max';\n/**\n * @hidden\n */\nconst POINT = \".\";\n/**\n * @hidden\n */\nconst INITIAL_SPIN_DELAY = 500;\n/**\n * @hidden\n */\nconst SPIN_DELAY = 50;\n/**\n * @hidden\n */\nconst EXPONENT_REGEX = /[eE][\\-+]?([0-9]+)/;\n\n/**\n * @hidden\n */\nconst numericRegex = (options) => {\n const { autoCorrect, decimals, min } = options;\n let separator = options.separator;\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n const signPattern = autoCorrect && min !== null && min >= 0 ? '' : '-?';\n let numberPattern;\n if (decimals === 0) {\n numberPattern = '\\\\d*';\n }\n else {\n numberPattern = `(?:(?:\\\\d+(${separator}\\\\d*)?)|(?:${separator}\\\\d*))?`;\n }\n return new RegExp(`^${signPattern}${numberPattern}$`);\n};\n/**\n * @hidden\n */\nconst decimalPart = (value) => {\n return value >= 0 ? Math.floor(value) : Math.ceil(value);\n};\n/**\n * @hidden\n */\nconst noop = (_) => { }; // tslint:disable-line:no-empty\n/**\n * @hidden\n */\nconst defined = (value) => {\n return typeof value !== 'undefined';\n};\n/**\n * @hidden\n */\nconst isNumber = (value) => {\n return !isNaN(value) && value !== null;\n};\n/**\n * @hidden\n */\nfunction pad(value, digits) {\n const count = digits - String(value).length;\n let result = value;\n if (count > 0) {\n const padString = new Array(count + 1).join(\"0\");\n result = parseFloat(value + padString);\n }\n return result;\n}\n/**\n * @hidden\n */\nconst getDeltaFromMouseWheel = (e) => {\n let delta = 0;\n if (e.wheelDelta) {\n delta = e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n else if (e.detail) {\n delta = Math.round(-e.detail / 3);\n }\n return delta;\n};\n/**\n * @hidden\n */\nconst getCaretPosition = (element) => element.selectionStart;\n/**\n * @hidden\n */\nconst extractSignificantNumericChars = (formattedString, separator) => {\n const significantCharacters = `${separator}0123456789-`;\n return formattedString.split('').reduce((acc, curr) => significantCharacters.includes(curr) ? ++acc : acc, 0);\n};\n/**\n * @hidden\n */\nconst isRightClick = (event) => {\n const isRightClickIE = event.button && event.button === 2;\n const isRightClickOther = event.which && event.which === 3;\n return isRightClickIE || isRightClickOther;\n};\n\n/**\n * @hidden\n */\nvar ArrowDirection;\n(function (ArrowDirection) {\n ArrowDirection[ArrowDirection[\"Down\"] = -1] = \"Down\";\n ArrowDirection[ArrowDirection[\"None\"] = 0] = \"None\";\n ArrowDirection[ArrowDirection[\"Up\"] = 1] = \"Up\";\n})(ArrowDirection || (ArrowDirection = {}));\n\nvar NumericTextBoxComponent_1;\nconst PARSABLE_OPTIONS = ['min', 'max', 'step', 'decimals'];\nconst PARSABLE_DEFAULTS = {\n decimals: null,\n max: null,\n min: null,\n step: 1\n};\nconst FOCUSED$1 = 'k-state-focused';\nconst FORMATTED_VALUE = 'k-formatted-value';\n/**\n * Represents the [Kendo UI NumericTextBox component for Angular]({% slug overview_numerictextbox %}).\n */\nlet NumericTextBoxComponent = NumericTextBoxComponent_1 = class NumericTextBoxComponent {\n constructor(intl, renderer, localizationService, injector, ngZone, changeDetector, hostElement) {\n this.intl = intl;\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.injector = injector;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the NumericTextBox is disabled ([see example]({% slug disabled_numerictextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the NumericTextBox is in its read-only state ([see example]({% slug readonly_numerictextbox %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the `input` element of the NumericTextBox.\n */\n this.title = '';\n /**\n * Specifies whether the value will be auto-corrected based on the minimum and maximum values\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.autoCorrect = false;\n /**\n * Specifies the number of decimals that the user can enter when the input is focused\n * ([see example]({% slug precision_numerictextbox %})).\n */\n this.decimals = null;\n /**\n * Specifies the value that is used to increment or decrement the component value\n * ([see example]({% slug predefinedsteps_numerictextbox %})).\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered\n * ([see example]({% slug spinbuttons_numerictextbox %})).\n */\n this.spinners = true;\n /**\n * Determines whether the built-in minimum or maximum validators are enforced when a form is validated.\n *\n * > The 4.2.0 Angular version introduces the `min` and `max` validation directives. As a result, even if you set `rangeValidation`\n * to `false`, the built-in Angular validators will be executed.\n */\n this.rangeValidation = true;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Determines whether the value of the NumericTextBox will be changed via scrolling. Defaults to `true`.\n *\n * @default true\n */\n this.changeValueOnScroll = true;\n /**\n * Determines whether the whole value will be selected when the NumericTextBox is clicked. Defaults to `true`.\n */\n this.selectOnFocus = true;\n /**\n * Specifies the value of the NumericTextBox\n * ([see example]({% slug formats_numerictextbox %})).\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred ([see example]({% slug overview_numerictextbox %}#toc-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n */\n this.ArrowDirection = ArrowDirection;\n /**\n * @hidden\n */\n this.arrowDirection = ArrowDirection.None;\n this.inputValue = '';\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this._format = \"n2\";\n this.isPasted = false;\n this.mouseDown = false;\n this.ngChange = noop;\n this.ngTouched = noop;\n this.ngValidatorChange = noop;\n /**\n * @hidden\n */\n this.increasePress = (e) => {\n this.arrowPress(ArrowDirection.Up, e);\n };\n /**\n * @hidden\n */\n this.decreasePress = (e) => {\n this.arrowPress(ArrowDirection.Down, e);\n };\n /**\n * @hidden\n */\n this.releaseArrow = () => {\n clearTimeout(this.spinTimeout);\n if (this.arrowDirection !== ArrowDirection.None) {\n this.arrowDirection = ArrowDirection.None;\n this.changeDetector.detectChanges();\n }\n };\n /**\n * @hidden\n */\n this.handlePaste = () => {\n this.isPasted = true;\n };\n /**\n * @hidden\n */\n this.handleInput = () => {\n const input = this.numericInput.nativeElement;\n let { selectionStart, selectionEnd, value: inputValue } = input;\n if (this.pressedKey === Keys.NumpadDecimal) {\n inputValue = this.replaceNumpadDotValue();\n }\n if (this.isPasted) {\n inputValue = this.formatInputValue(this.intl.parseNumber(inputValue));\n }\n if (!this.isValid(inputValue)) {\n input.value = this.inputValue;\n this.setSelection(selectionStart - 1, selectionEnd - 1);\n return;\n }\n const parsedValue = this.intl.parseNumber(inputValue);\n let value = this.restrictDecimals(parsedValue);\n if (this.autoCorrect) {\n const limited = this.limitInputValue(value);\n value = limited.value;\n selectionStart = limited.selectionStart;\n selectionEnd = limited.selectionEnd;\n }\n if (parsedValue !== value || this.hasTrailingZeros(inputValue) || !this.focused) {\n this.setInputValue(value);\n this.setSelection(selectionStart, selectionEnd);\n }\n else {\n this.inputValue = inputValue;\n }\n if (this.isPasted) {\n input.value = this.inputValue;\n }\n this.updateValue(value);\n this.previousSelection = null;\n this.isPasted = false;\n };\n /**\n * @hidden\n */\n this.handleDragEnter = () => {\n if (!this.focused && !this.isDisabled) {\n this.setInputValue(this.value, true);\n }\n };\n /**\n * @hidden\n */\n this.handleMouseDown = () => {\n this.mouseDown = true;\n };\n /**\n * @hidden\n */\n this.handleFocus = () => {\n if (!this.focused) {\n this.focused = true;\n if (!this.isDisabled) {\n const shouldSelectAll = this.selectOnFocus || !this.mouseDown;\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (shouldSelectAll) {\n this.selectAll();\n }\n else {\n this.selectCaret();\n }\n }, 0);\n });\n }\n }\n this.mouseDown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n //blur is thrown before input when dragging the input text in IE\n if (this.inputValue !== this.elementValue) {\n this.handleInput();\n }\n this.setInputValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.onBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleKeyDown = (e) => {\n if (this.isDisabled) {\n return;\n }\n let step;\n if (e.keyCode === Keys.ArrowDown) {\n step = -1;\n }\n else if (e.keyCode === Keys.ArrowUp) {\n step = 1;\n }\n if (step && this.step) {\n e.preventDefault();\n this.addStep(step);\n }\n const input = this.numericInput.nativeElement;\n this.previousSelection = {\n end: input.selectionEnd,\n start: input.selectionStart\n };\n this.pressedKey = e.keyCode;\n };\n /**\n * @hidden\n */\n this.handleWheel = (e) => {\n if (this.focused && !this.isDisabled && this.changeValueOnScroll) {\n e.preventDefault();\n const delta = getDeltaFromMouseWheel(e);\n this.addStep(delta);\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * Specifies the number format which is used when the NumericTextBox is not focused\n * ([see example]({% slug formats_numerictextbox %})).\n * If `format` is set to `null` or `undefined`, the default format will be used.\n */\n get format() {\n const format = this._format;\n return format !== null && format !== undefined ? format : 'n2';\n }\n set format(value) {\n this._format = value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get widgetClasses() {\n return true;\n }\n ngOnInit() {\n this.subscriptions = this.localizationService\n .changes\n .subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.subscriptions.add(this.intl.changes.subscribe(this.intlChange.bind(this)));\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged(PARSABLE_OPTIONS, changes, false)) {\n this.parseOptions(PARSABLE_OPTIONS.filter(option => changes[option]));\n }\n this.verifySettings();\n if (anyChanged(['min', 'max', 'rangeValidation'], changes, false)) {\n this.minValidateFn = this.rangeValidation ? createMinValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? createMaxValidator(this.max) : noop;\n this.ngValidatorChange();\n }\n if (anyChanged(['autoCorrect', 'decimals', 'min'], changes)) {\n delete this.numericRegex;\n }\n if (anyChanged(['value', 'format'], changes, false)) {\n this.verifyValue(this.value);\n this.value = this.restrictModelValue(this.value);\n if (!this.focused || (this.intl.parseNumber(this.elementValue) !== this.value)) {\n this.setInputValue();\n }\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n clearTimeout(this.spinTimeout);\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.ngValidatorChange = fn;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n let restrictedValue = this.restrictModelValue(value);\n this.value = restrictedValue;\n this.setInputValue();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * Focuses the NumericTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n invokeElementMethod(this.numericInput, 'focus');\n }\n /**\n * Blurs the NumericTextBox.\n */\n blur() {\n invokeElementMethod(this.numericInput, 'blur');\n }\n /**\n * Notifies the `NumericTextBoxComponent` that the input value should be changed.\n * Can be used to update the input after setting the component properties directly.\n */\n notifyValueChange() {\n this.setInputValue();\n }\n /**\n * @hidden\n */\n get incrementTitle() {\n return this.localizationService.get('increment');\n }\n /**\n * @hidden\n */\n get decrementTitle() {\n return this.localizationService.get('decrement');\n }\n get decimalSeparator() {\n const numberSymbols = this.intl.numberSymbols();\n return numberSymbols.decimal;\n }\n get elementValue() {\n return this.numericInput.nativeElement.value;\n }\n set elementValue(value) {\n this.renderer.setProperty(this.numericInput.nativeElement, 'value', value);\n }\n get focused() {\n return this.isFocused;\n }\n get hasDecimals() {\n return this.decimals !== null && this.decimals >= 0;\n }\n set focused(value) {\n if (this.isFocused !== value && this.numericWrap) {\n const wrap = this.numericWrap.nativeElement;\n const input = this.numericInput.nativeElement;\n if (value) {\n this.renderer.addClass(wrap, FOCUSED$1);\n if (!this.isDisabled) {\n this.renderer.removeClass(input, FORMATTED_VALUE);\n }\n }\n else {\n this.renderer.removeClass(wrap, FOCUSED$1);\n this.renderer.addClass(input, FORMATTED_VALUE);\n }\n this.isFocused = value;\n }\n }\n get isDisabled() {\n return this.disabled || this.readonly;\n }\n arrowPress(direction, e) {\n e.preventDefault();\n if (this.isDisabled || isRightClick(e)) {\n return;\n }\n if (!mobileOS) {\n this.focused = true;\n this.focus();\n }\n if (this.arrowDirection !== direction) {\n this.arrowDirection = direction;\n this.changeDetector.detectChanges();\n }\n if (this.step) {\n this.spin(direction, INITIAL_SPIN_DELAY);\n }\n else {\n this.setInputValue();\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n replaceNumpadDotValue() {\n let value = this.inputValue || \"\";\n if (this.previousSelection) {\n const input = this.numericInput.nativeElement;\n const { selectionStart, selectionEnd } = input;\n const { start, end } = this.previousSelection;\n input.value = value = value.substring(0, start) + this.decimalSeparator + value.substring(end);\n this.setSelection(selectionStart, selectionEnd);\n }\n return value;\n }\n isValid(value) {\n if (!this.numericRegex) {\n this.numericRegex = numericRegex({\n autoCorrect: this.autoCorrect,\n decimals: this.decimals,\n min: this.min,\n separator: this.decimalSeparator\n });\n }\n return this.numericRegex.test(value);\n }\n spin(step, timeout) {\n clearTimeout(this.spinTimeout);\n this.spinTimeout = window.setTimeout(() => {\n this.spin(step, SPIN_DELAY);\n }, timeout);\n this.addStep(step);\n }\n addStep(step) {\n let value = add(this.value || 0, this.step * step);\n value = this.limitValue(value);\n value = this.restrictDecimals(value);\n this.setInputValue(value);\n this.updateValue(value);\n }\n setSelection(start, end) {\n if (this.focused) {\n invokeElementMethod(this.numericInput, 'setSelectionRange', start, end);\n }\n }\n limitValue(value) {\n let result = value;\n if (!this.isInRange(value)) {\n if (isNumber(this.max) && value > this.max) {\n result = this.max;\n }\n if (isNumber(this.min) && value < this.min) {\n result = this.min;\n }\n }\n return result;\n }\n limitInputValue(value) {\n let { selectionStart, selectionEnd, value: enteredValue } = this.numericInput.nativeElement;\n let limitedValue = value;\n let selectToEnd = false;\n if (!this.isInRange(value)) {\n const lengthChange = enteredValue.length - String(this.inputValue).length;\n const { min, max } = this;\n const hasMax = isNumber(max);\n const hasMin = isNumber(min);\n let padLimit, replaceNext;\n let correctedValue = value;\n if (selectionStart === 0 && this.inputValue.substr(1) === enteredValue) {\n return {\n selectionEnd: selectionEnd,\n selectionStart: selectionStart,\n value: null\n };\n }\n if (hasMax && value > max) {\n if (value > 0) {\n replaceNext = true;\n }\n else {\n padLimit = max;\n }\n }\n else if (hasMin && value < min) {\n if (value > 0) {\n padLimit = min;\n }\n else {\n replaceNext = true;\n }\n }\n if (padLimit) {\n const paddedValue = this.tryPadValue(value, padLimit);\n if (paddedValue && decimalPart(value) !== decimalPart(padLimit)) {\n correctedValue = paddedValue;\n selectToEnd = true;\n }\n }\n else if (replaceNext) {\n if (this.inputValue && selectionStart !== enteredValue.length) {\n correctedValue = parseFloat(enteredValue.substr(0, selectionStart) +\n enteredValue.substr(selectionStart + lengthChange));\n }\n }\n limitedValue = this.limitValue(correctedValue);\n selectToEnd = (selectToEnd || limitedValue !== correctedValue) && this.previousSelection &&\n (this.previousSelection.end - this.previousSelection.start + lengthChange) > 0;\n }\n return {\n selectionEnd: selectToEnd ? String(limitedValue).length : selectionEnd,\n selectionStart: selectionStart,\n value: limitedValue\n };\n }\n tryPadValue(value, limit) {\n const limitLength = String(Math.floor(limit)).length;\n const zeroPadded = pad(value, limitLength);\n const zeroPaddedNext = pad(value, limitLength + 1);\n let result;\n if (this.isInRange(zeroPadded)) {\n result = zeroPadded;\n }\n else if (this.isInRange(zeroPaddedNext)) {\n result = zeroPaddedNext;\n }\n return result;\n }\n isInRange(value) {\n return !isNumber(value) || ((!isNumber(this.min) || this.min <= value) && (!isNumber(this.max) || value <= this.max));\n }\n restrictModelValue(value) {\n let result = this.restrictDecimals(value, true);\n if (this.autoCorrect && this.limitValue(result) !== result) {\n result = null;\n }\n return result;\n }\n restrictDecimals(value, round) {\n let result = value;\n if (value && this.hasDecimals) {\n const decimals = this.decimals;\n const stringValue = String(value);\n if (round || EXPONENT_REGEX.test(stringValue)) {\n result = toFixedPrecision(value, decimals);\n }\n else {\n const parts = stringValue.split(POINT);\n let fraction = parts[1];\n if (fraction && fraction.length > decimals) {\n fraction = fraction.substr(0, decimals);\n result = parseFloat(`${parts[0]}${POINT}${fraction}`);\n }\n }\n }\n return result;\n }\n formatInputValue(value) {\n let stringValue = String(value);\n const exponentMatch = EXPONENT_REGEX.exec(stringValue);\n if (exponentMatch) {\n stringValue = value.toFixed(limitPrecision(parseInt(exponentMatch[1], 10)));\n }\n return stringValue.replace(POINT, this.decimalSeparator);\n }\n formatValue(value, focused) {\n let formattedValue;\n if (value === null || !defined(value) || value === '') {\n formattedValue = '';\n }\n else if (focused && !this.readonly) {\n formattedValue = this.formatInputValue(value);\n }\n else {\n formattedValue = this.intl.formatNumber(value, this.format);\n }\n return formattedValue;\n }\n setInputValue(value = this.value, focused = this.focused) {\n const formattedValue = this.formatValue(value, focused);\n this.elementValue = formattedValue;\n this.inputValue = formattedValue;\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (this.min !== null && this.max !== null && this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n }\n verifyValue(value) {\n if (isDevMode() && value && typeof value !== 'number') {\n throw new Error(`The NumericTextBox component requires value of type Number and ${JSON.stringify(value)} was set.`);\n }\n }\n parseOptions(options) {\n for (let idx = 0; idx < options.length; idx++) {\n const name = options[idx];\n const value = this[name];\n if (typeof value === 'string') {\n const parsed = parseFloat(value);\n const valid = !isNaN(parsed);\n if (isDevMode() && !valid && value !== '') {\n throw new Error('The NumericTextBox component requires value of type Number or a String representing ' +\n `a number for the ${name} property and ${JSON.stringify(value)} was set.`);\n }\n this[name] = valid ? parsed : PARSABLE_DEFAULTS[name];\n }\n }\n }\n intlChange() {\n delete this.numericRegex;\n if (this.numericInput && (!this.focused || !this.isValid(this.elementValue))) {\n this.setInputValue();\n }\n }\n hasTrailingZeros(inputValue) {\n if (this.hasDecimals && this.focused) {\n const fraction = inputValue.split(this.decimalSeparator)[1];\n return fraction && fraction.length > this.decimals && fraction.lastIndexOf('0') === fraction.length - 1;\n }\n }\n selectAll() {\n this.setInputValue();\n this.setSelection(0, this.inputValue.length);\n }\n selectCaret() {\n const caretPosition = getCaretPosition(this.numericInput.nativeElement);\n const formattedValue = this.elementValue;\n const partialValue = formattedValue.substring(0, caretPosition);\n this.setInputValue();\n if (partialValue.length) {\n const significantCharsInFormattedValue = extractSignificantNumericChars(partialValue, this.decimalSeparator);\n const adjustedSignificantChars = this.adjustSignificantChars(formattedValue, significantCharsInFormattedValue);\n this.setSelection(adjustedSignificantChars, adjustedSignificantChars);\n }\n else {\n this.setSelection(0, 0);\n }\n }\n numberOfLeadingZeroes(formattedValue) {\n const separatorIndex = formattedValue.indexOf(this.decimalSeparator);\n const matchedLeadingZeroes = formattedValue.match(/^[^1-9]*?(0+)/);\n if (matchedLeadingZeroes) {\n const lengthOfMatch = matchedLeadingZeroes[0].length;\n const lengthOfLeadingZeroesMatch = matchedLeadingZeroes[1].length;\n return lengthOfMatch === separatorIndex ? lengthOfLeadingZeroesMatch - 1 : lengthOfLeadingZeroesMatch;\n }\n return 0;\n }\n adjustSignificantChars(formattedValue, significantChars) {\n const leadingZeroes = this.numberOfLeadingZeroes(formattedValue);\n if (leadingZeroes > 0) {\n return Math.max(0, significantChars - leadingZeroes);\n }\n return significantChars;\n }\n};\nNumericTextBoxComponent.ɵfac = function NumericTextBoxComponent_Factory(t) { return new (t || NumericTextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nNumericTextBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NumericTextBoxComponent, selectors: [[\"kendo-numerictextbox\"]], viewQuery: function NumericTextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c27, 7);\n ɵngcc0.ɵɵviewQuery(_c28, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericWrap = _t.first);\n } }, hostVars: 5, hostBindings: function NumericTextBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-numerictextbox\", ctx.widgetClasses);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", autoCorrect: \"autoCorrect\", decimals: \"decimals\", step: \"step\", spinners: \"spinners\", rangeValidation: \"rangeValidation\", tabindex: \"tabindex\", changeValueOnScroll: \"changeValueOnScroll\", selectOnFocus: \"selectOnFocus\", value: \"value\", format: \"format\", tabIndex: \"tabIndex\", max: \"max\", min: \"min\", placeholder: \"placeholder\", maxlength: \"maxlength\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoNumericTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent_1), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent_1), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent_1) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 26, consts: function () { let i18n_29; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Increment** button in the NumericTextBox\n * @meaning kendo.numerictextbox.increment\n */\n const MSG_EXTERNAL_4467784268438010275$$DIST_FESM2015_INDEX_JS_30 = goog.getMsg(\"Increase value\");\n i18n_29 = MSG_EXTERNAL_4467784268438010275$$DIST_FESM2015_INDEX_JS_30;\n }\n else {\n i18n_29 = $localize `:kendo.numerictextbox.increment|The title for the **Increment** button in the NumericTextBox␟0fc68540ffa04fdc246cf6cf8a1fed085f8b19a5␟4467784268438010275:Increase value`;\n } let i18n_31; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Decrement** button in the NumericTextBox\n * @meaning kendo.numerictextbox.decrement\n */\n const MSG_EXTERNAL_3960022057994897997$$DIST_FESM2015_INDEX_JS_32 = goog.getMsg(\"Decrease value\");\n i18n_31 = MSG_EXTERNAL_3960022057994897997$$DIST_FESM2015_INDEX_JS_32;\n }\n else {\n i18n_31 = $localize `:kendo.numerictextbox.decrement|The title for the **Decrement** button in the NumericTextBox␟df4751834075bf970c77d0da2c960b4e19a6b0dd␟3960022057994897997:Decrease value`;\n } return [[\"kendoNumericTextBoxLocalizedMessages\", \"\", \"increment\", i18n_29, \"decrement\", i18n_31], [1, \"k-numeric-wrap\", 3, \"kendoEventsOutsideAngular\"], [\"numericWrap\", \"\"], [\"role\", \"spinbutton\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", 1, \"k-input\", \"k-formatted-value\", 3, \"id\", \"tabindex\", \"disabled\", \"readonly\", \"kendoEventsOutsideAngular\"], [\"numericInput\", \"\"], [\"class\", \"k-select\", 3, \"kendoEventsOutsideAngular\", 4, \"ngIf\"], [1, \"k-select\", 3, \"kendoEventsOutsideAngular\"], [\"role\", \"button\", 1, \"k-link\", \"k-link-increase\", 3, \"kendoEventsOutsideAngular\", \"title\"], [1, \"k-icon\", \"k-i-arrow-n\"], [\"role\", \"button\", 1, \"k-link\", \"k-link-decrease\", 3, \"kendoEventsOutsideAngular\", \"title\"], [1, \"k-icon\", \"k-i-arrow-s\"]]; }, template: function NumericTextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵelement(3, \"input\", 3, 4);\n ɵngcc0.ɵɵtemplate(5, NumericTextBoxComponent_span_5_Template, 5, 18, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(15, _c35, ctx.handleWheel, ctx.handleWheel));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"tabindex\", ctx.tabIndex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction7(18, _c36, ctx.handleMouseDown, ctx.handleDragEnter, ctx.handleKeyDown, ctx.handleInput, ctx.handleFocus, ctx.handleBlur, ctx.handlePaste));\n ɵngcc0.ɵɵattribute(\"aria-valuemin\", ctx.min)(\"aria-valuemax\", ctx.max)(\"aria-valuenow\", ctx.value)(\"title\", ctx.title)(\"placeholder\", ctx.placeholder)(\"maxLength\", ctx.maxlength);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.spinners);\n } }, directives: function () { return [LocalizedNumericTextBoxMessagesDirective, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgIf]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NumericTextBoxComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NumericTextBoxComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"autoCorrect\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], NumericTextBoxComponent.prototype, \"format\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"decimals\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NumericTextBoxComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"spinners\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"rangeValidation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], NumericTextBoxComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"changeValueOnScroll\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], NumericTextBoxComponent.prototype, \"selectOnFocus\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], NumericTextBoxComponent.prototype, \"maxlength\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], NumericTextBoxComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], NumericTextBoxComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], NumericTextBoxComponent.prototype, \"onBlur\", void 0);\n__decorate([\n ViewChild('numericInput', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], NumericTextBoxComponent.prototype, \"numericInput\", void 0);\n__decorate([\n ViewChild('numericWrap', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], NumericTextBoxComponent.prototype, \"numericWrap\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], NumericTextBoxComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-numerictextbox'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], NumericTextBoxComponent.prototype, \"widgetClasses\", null);\nNumericTextBoxComponent = NumericTextBoxComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [IntlService,\n Renderer2,\n LocalizationService,\n Injector,\n NgZone,\n ChangeDetectorRef,\n ElementRef])\n], NumericTextBoxComponent);\n\n/**\n * @hidden\n */\nclass NumericTextBoxMessages extends ComponentMessages {\n}\nNumericTextBoxMessages.ɵfac = /*@__PURE__*/ function () { let ɵNumericTextBoxMessages_BaseFactory; return function NumericTextBoxMessages_Factory(t) { return (ɵNumericTextBoxMessages_BaseFactory || (ɵNumericTextBoxMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(NumericTextBoxMessages)))(t || NumericTextBoxMessages); }; }();\nNumericTextBoxMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: NumericTextBoxMessages, inputs: { decrement: \"decrement\", increment: \"increment\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NumericTextBoxMessages.prototype, \"decrement\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], NumericTextBoxMessages.prototype, \"increment\", void 0);\n\nvar NumericTextBoxCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet NumericTextBoxCustomMessagesComponent = NumericTextBoxCustomMessagesComponent_1 = class NumericTextBoxCustomMessagesComponent extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nNumericTextBoxCustomMessagesComponent.ɵfac = function NumericTextBoxCustomMessagesComponent_Factory(t) { return new (t || NumericTextBoxCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericTextBoxCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: NumericTextBoxCustomMessagesComponent, selectors: [[\"kendo-numerictextbox-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NumericTextBoxCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nNumericTextBoxCustomMessagesComponent = NumericTextBoxCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], NumericTextBoxCustomMessagesComponent);\n\n/**\n * @hidden\n */\nvar ResultType;\n(function (ResultType) {\n ResultType[ResultType[\"Literal\"] = 0] = \"Literal\";\n ResultType[ResultType[\"Mask\"] = 1] = \"Mask\";\n ResultType[ResultType[\"Undefined\"] = 2] = \"Undefined\";\n})(ResultType || (ResultType = {}));\n/**\n * @hidden\n */\nclass Result {\n constructor(value, rest, type = ResultType.Undefined) {\n this.value = value;\n this.rest = rest;\n this.type = type;\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(fn) {\n return new Result(fn(this.value), this.rest);\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(fn) {\n return fn(this.value, this.rest);\n }\n fold(s, _ /*we don't need it*/) {\n return s(this.value, this.rest);\n }\n concat(r) {\n return this.map((vs, _) => r.chain((v, __) => vs.concat([v])));\n }\n toString() {\n return `Result({ value: '${this.value}', rest: ${this.rest} })`;\n }\n}\n\n/**\n * @hidden\n */\nclass Stream {\n constructor(input = [], control = []) {\n this.input = input;\n this.control = control;\n this.inputCursor = 0;\n this.controlCursor = 0;\n }\n eof() {\n return this.inputCursor >= this.input.length;\n }\n // Get the first value from the input.\n next() {\n return {\n char: this.input[this.inputCursor++],\n control: this.control[this.controlCursor++]\n };\n }\n peek() {\n return {\n char: this.input[this.inputCursor],\n control: this.control[this.controlCursor]\n };\n }\n eat_input() {\n this.inputCursor++;\n }\n eat_control() {\n this.controlCursor++;\n }\n eat() {\n this.inputCursor++;\n this.controlCursor++;\n }\n}\n\nconst toArray = (value) => (value || '').split('');\nconst ESCAPE_CHARACTER = '\\\\';\n/**\n * @hidden\n */\nclass Parser {\n constructor(parse) {\n this.parse = parse;\n }\n run(input, control = '') {\n if (input instanceof Stream) {\n return this.parse(input);\n }\n else {\n return this.parse(new Stream(toArray(input), toArray(control)));\n }\n }\n //map :: Functor f => f a ~> (a -> b) -> f b\n map(f) {\n return new Parser(stream => this.parse(stream).map(f));\n }\n //chain :: Chain m => m a ~> (a -> m b) -> m b\n chain(f) {\n return new Parser(stream => this.parse(stream).chain((v, s) => f(v).run(s)));\n }\n isLiteral(c) {\n return this.run(c).type === ResultType.Literal;\n }\n}\n/**\n * @hidden\n */\nconst mask = ({ prompt, promptPlaceholder }) => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === control && control === prompt) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream, ResultType.Mask);\n }\n if (char === promptPlaceholder) {\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result(prompt, stream, ResultType.Mask);\n});\n/**\n * @hidden\n */\nconst literal = _token => new Parser(stream => {\n // let {char, control} = stream.peek();\n let char = stream.peek().char;\n if (char === _token) {\n stream.eat();\n return new Result(_token, stream, ResultType.Literal);\n }\n // if (control === _token) {\n // while (!stream.eof() && char !== _token) {\n // stream.eat_input();\n // char = stream.peek().char;\n // }\n // }\n //\n // if (control !== undefined) {\n // stream.eat();\n // }\n return new Result(_token, stream, ResultType.Literal);\n});\n/**\n * @hidden\n */\nconst unmask = prompt => rule => new Parser(stream => {\n while (!stream.eof()) {\n const { char, control } = stream.peek();\n if (char === prompt && control === prompt) {\n stream.eat();\n return new Result(char, stream);\n }\n if (rule.test(char)) {\n stream.eat();\n return new Result(char, stream);\n }\n stream.eat_input();\n }\n stream.eat();\n return new Result('', stream);\n});\n/**\n * @hidden\n */\nconst unliteral = _token => new Parser(stream => {\n if (stream.eof()) {\n return new Result('', stream);\n }\n const { char } = stream.peek();\n if (char === _token) {\n stream.eat();\n }\n return new Result(_token, stream);\n});\n/**\n * @hidden\n */\nconst token = (rules, creator) => new Parser(stream => {\n let { char } = stream.next();\n const rule = rules[char];\n if (char === ESCAPE_CHARACTER) {\n char = stream.next().char;\n return new Result(creator.literal(char), stream);\n }\n if (!rule) {\n return new Result(creator.literal(char), stream);\n }\n return new Result(creator.mask(rule), stream);\n});\n/**\n * @hidden\n */\nconst rawMask = ({ prompt, promptPlaceholder }) => new Parser(stream => {\n let { char } = stream.next();\n if (char === prompt) {\n return new Result(promptPlaceholder, stream);\n }\n return new Result(char, stream);\n});\n/**\n * @hidden\n */\nconst rawLiteral = includeLiterals => new Parser(stream => {\n let { char } = stream.next();\n if (includeLiterals) {\n return new Result(char, stream);\n }\n return new Result('', stream);\n});\n\n/**\n * @hidden\n */\nconst always = value => new Parser(stream => new Result(value, stream));\n/**\n * @hidden\n */\nconst append = (p1, p2) => p1.chain(vs => p2.map(v => vs.concat([v])));\n/**\n * @hidden\n */\nconst sequence = list => list.reduce((acc, parser) => append(acc, parser), always([]));\n/**\n * @hidden\n */\nconst greedy = parser => new Parser(stream => {\n let result = new Result([], stream);\n while (!stream.eof()) {\n result = result.concat(parser.run(stream));\n }\n return result;\n});\n\n/**\n * @hidden\n */\nlet MaskingService = class MaskingService {\n /**\n * @hidden\n */\n constructor() {\n this.rules = {};\n this.prompt = \"_\";\n this.mask = \"\";\n this.promptPlaceholder = \" \";\n this.includeLiterals = false;\n this.maskTokens = [];\n this.unmaskTokens = [];\n this.rawTokens = [];\n this.validationTokens = [];\n }\n update({ mask: mask$$1 = '', prompt = '', promptPlaceholder = ' ', rules = {}, includeLiterals = false }) {\n this.mask = mask$$1;\n this.prompt = prompt;\n this.promptPlaceholder = promptPlaceholder;\n this.rules = rules;\n this.includeLiterals = includeLiterals;\n this.tokenize();\n }\n validationValue(maskedValue = '') {\n let value = maskedValue;\n sequence(this.validationTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n rawValue(maskedValue = '') {\n let value = maskedValue;\n if (!this.rawTokens.length) {\n return value;\n }\n sequence(this.rawTokens)\n .run(maskedValue)\n .fold(unmasked => {\n value = unmasked.join('');\n });\n return value;\n }\n /**\n * @hidden\n */\n maskRaw(rawValue = '') {\n let value = rawValue;\n if (!this.maskTokens.length) {\n return value;\n }\n sequence(this.maskTokens)\n .run(rawValue)\n .fold(masked => {\n value = masked.join('');\n });\n return value;\n }\n maskInput(input, control, splitPoint) {\n if (input.length < control.length) {\n return this.maskRemoved(input, control, splitPoint);\n }\n return this.maskInserted(input, control, splitPoint);\n }\n maskInRange(pasted, oldValue, start, end) {\n let value = '';\n let selection = end;\n const beforeChange = oldValue.split('').slice(0, start);\n const afterChange = oldValue.split('').slice(end);\n sequence(this.maskTokens.slice(start, end))\n .run(pasted)\n .fold(masked => {\n value = beforeChange\n .concat(masked)\n .concat(afterChange)\n .join('');\n });\n return {\n selection,\n value\n };\n }\n maskRemoved(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const unchanged = input.split('').slice(splitPoint);\n const changed = input.split('').slice(0, splitPoint).join('');\n const take$$1 = this.maskTokens.length - (input.length - splitPoint);\n sequence(this.maskTokens.slice(0, take$$1))\n .run(changed, control)\n .fold(masked => {\n selection = this.adjustPosition(masked, selection);\n value = masked.concat(unchanged).join('');\n });\n return {\n selection,\n value\n };\n }\n adjustPosition(input, selection) {\n const caretChar = input[selection];\n const isLiteral = this.maskTokens[selection].isLiteral(caretChar);\n if (!isLiteral && caretChar !== this.prompt) {\n return selection + 1;\n }\n return selection;\n }\n maskInserted(input, control, splitPoint) {\n let value = '';\n let selection = splitPoint;\n const changed = input.slice(0, splitPoint);\n sequence(this.unmaskTokens)\n .run(changed, control)\n .chain(unmasked => {\n selection = unmasked.join('').length;\n const unchanged = control.slice(selection);\n return sequence(this.maskTokens)\n .run(unmasked.join('') + unchanged, control);\n })\n .fold(masked => {\n value = masked.join('');\n });\n return {\n selection,\n value\n };\n }\n get maskTokenCreator() {\n const { prompt, promptPlaceholder } = this;\n return {\n literal: rule => literal(rule),\n mask: rule => mask({ prompt, promptPlaceholder })(rule)\n };\n }\n get unmaskTokenCreator() {\n return {\n literal: rule => unliteral(rule),\n mask: rule => unmask(this.prompt)(rule)\n };\n }\n get rawTokenCreator() {\n const { prompt, promptPlaceholder, includeLiterals } = this;\n return {\n literal: _ => rawLiteral(includeLiterals),\n mask: _ => rawMask({ prompt, promptPlaceholder })\n };\n }\n get validationTokenCreator() {\n const { prompt } = this;\n return {\n literal: _ => rawLiteral(false),\n mask: _ => rawMask({ prompt, promptPlaceholder: '' })\n };\n }\n tokenize() {\n greedy(token(this.rules, this.maskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.maskTokens = tokens;\n });\n greedy(token(this.rules, this.unmaskTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.unmaskTokens = tokens;\n });\n greedy(token(this.rules, this.rawTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.rawTokens = tokens;\n });\n greedy(token(this.rules, this.validationTokenCreator))\n .run(this.mask)\n .fold((tokens, _) => {\n this.validationTokens = tokens;\n });\n }\n};\nMaskingService.ɵfac = function MaskingService_Factory(t) { return new (t || MaskingService)(); };\nMaskingService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: MaskingService, factory: function (t) { return MaskingService.ɵfac(t); } });\n\nvar MaskedTextBoxComponent_1;\nconst resolvedPromise = Promise.resolve(null);\nconst FOCUSED$2 = 'k-state-focused';\n/**\n * Represents the [Kendo UI MaskedTextBox component for Angular]({% slug overview_maskedtextbox %}).\n *\n * @example\n * ```ts-no-run\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public value: string = \"9580128055807792\";\n * public mask: string = \"0000-0000-0000-0000\";\n * }\n * ```\n */\nlet MaskedTextBoxComponent = MaskedTextBoxComponent_1 = class MaskedTextBoxComponent {\n constructor(service, renderer, hostElement, ngZone, injector, changeDetector, rtl) {\n this.service = service;\n this.renderer = renderer;\n this.hostElement = hostElement;\n this.ngZone = ngZone;\n this.injector = injector;\n this.changeDetector = changeDetector;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Determines whether the MaskedTextBox is disabled ([see example]({% slug disabled_maskedtextbox %})).\n */\n this.disabled = false;\n /**\n * Determines whether the MaskedTextBox is in its read-only state ([see example]({% slug readonly_maskedtextbox %})).\n */\n this.readonly = false;\n this.hostClasses = true;\n /**\n * Represents a prompt character for the masked value.\n * @default `_`\n */\n this.prompt = '_';\n /**\n * Indicates a character which represents an empty position in the raw value.\n * @default ' '\n */\n this.promptPlaceholder = ' ';\n /**\n * Indicates whether to include literals in the raw value ([see example]({% slug value_maskedtextbox %})).\n * @default false\n */\n this.includeLiterals = false;\n /**\n * Specifies if the mask should be shown on focus for empty value.\n */\n this.maskOnFocus = false;\n /**\n * Determines whether the built-in mask validator is enforced when a form is validated\n * ([see example]({% slug validation_maskedtextbox %})).\n * @default true\n */\n this.maskValidation = true;\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Fires each time the user focuses the `input` element.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the `input` element gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the value changes.\n */\n this.valueChange = new EventEmitter();\n this.focusClick = false;\n this.defaultRules = {\n \"#\": /[\\d\\s\\+\\-]/,\n \"&\": /[\\S]/,\n \"0\": /[\\d]/,\n \"9\": /[\\d\\s]/,\n \"?\": /[a-zA-Z\\s]/,\n \"A\": /[a-zA-Z0-9]/,\n \"C\": /./,\n \"L\": /[a-zA-Z]/,\n \"a\": /[a-zA-Z0-9\\s]/\n };\n this.isPasted = false;\n this.selection = [0, 0];\n /**\n * @hidden\n */\n this.handleFocus = () => {\n this.focused = true;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.service.maskRaw(this.value));\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => { this.setSelection(0, 0); }, 0);\n });\n }\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleClick = () => {\n if (this.focused && !this.focusClick) {\n this.focusClick = true;\n const { selectionStart, selectionEnd } = this.input.nativeElement;\n if (selectionStart === selectionEnd) {\n this.setFocusSelection();\n }\n }\n };\n /**\n * @hidden\n */\n this.handleBlur = () => {\n this.changeDetector.markForCheck();\n this.focused = false;\n this.focusClick = false;\n if (this.maskOnFocus && this.emptyMask) {\n this.updateInput(this.maskedValue);\n }\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onTouched();\n this.onBlur.emit();\n });\n }\n };\n this.onChange = (_) => { };\n this.onTouched = () => { };\n validatePackage(packageMetadata);\n this.direction = rtl ? 'rtl' : 'ltr';\n this.updateService();\n }\n get hostDisabledClass() {\n return this.disabled;\n }\n /**\n * Exposes the RegExp-based mask validation array ([see example]({% slug masks_maskedtextbox %})).\n */\n get rules() {\n return this._rules || this.defaultRules;\n }\n set rules(value) {\n this._rules = Object.assign({}, this.defaultRules, value);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n ngOnInit() {\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.control = this.injector.get(NgControl, null);\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the MaskedTextBox is empty.\n */\n isEmpty() {\n if (this.input) {\n return !Boolean(this.input.nativeElement.value);\n }\n }\n /**\n * @hidden\n */\n handleDragDrop() {\n return false;\n }\n /**\n * Focuses the MaskedTextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.focus();\n this.setFocusSelection();\n }\n /**\n * Blurs the MaskedTextBox.\n */\n blur() {\n if (!this.input) {\n return;\n }\n this.input.nativeElement.blur();\n }\n /**\n * @hidden\n */\n pasteHandler(e) {\n const { selectionStart, selectionEnd } = e.target;\n if (selectionEnd === selectionStart) {\n return;\n }\n this.isPasted = true;\n this.selection = [selectionStart, selectionEnd];\n }\n /**\n * @hidden\n */\n inputHandler(e) {\n const value = e.target.value;\n const [start, end] = this.selection;\n if (!this.mask) {\n this.updateValue(value);\n this.isPasted = false;\n return;\n }\n let result;\n if (this.isPasted) {\n this.isPasted = false;\n const rightPart = this.maskedValue.length - end;\n const to = value.length - rightPart;\n result = this.service.maskInRange(value.slice(start, to), this.maskedValue, start, end);\n }\n else {\n result = this.service.maskInput(value, this.maskedValue, e.target.selectionStart);\n }\n this.updateInput(result.value, result.selection);\n this.updateValue(result.value);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.value) {\n this.value = this.normalizeValue();\n }\n if (!this.mask) {\n this.updateInput(this.value);\n return;\n }\n const next = this.extractChanges(changes);\n this.updateService(next);\n if (isChanged('value', changes)) {\n const maskedValue = this.service.maskRaw(this.value);\n if (maskedValue !== this.maskedValue) {\n this.updateInput(maskedValue);\n }\n }\n else if (anyChanged(['promptPlaceholder', 'includeLiterals'], changes)) {\n resolvedPromise.then(() => {\n this.updateValue(this.maskedValue);\n });\n }\n else {\n this.updateInput(this.service.maskRaw(this.value));\n }\n }\n /**\n * @hidden\n * Writes a new value to the element.\n */\n writeValue(value) {\n this.value = this.normalizeValue(value);\n this.updateInput(this.service.maskRaw(this.value));\n }\n /**\n * @hidden\n * Sets the function that will be called when a `change` event is triggered.\n */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /**\n * @hidden\n * Sets the function that will be called when a `touch` event is triggered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n validate(_) {\n if (this.maskValidation === false || !this.mask) {\n return null;\n }\n if (!this.service.validationValue(this.maskedValue)) {\n return null;\n }\n if (this.maskedValue.indexOf(this.prompt) !== -1) {\n return {\n patternError: {\n mask: this.mask,\n maskedValue: this.maskedValue,\n value: this.value\n }\n };\n }\n return null;\n }\n /**\n * @hidden\n */\n updateValue(maskedValue) {\n if (this.mask && !this.service.validationValue(maskedValue)) {\n this.value = '';\n }\n else {\n this.value = this.service.rawValue(maskedValue);\n }\n this.onChange(this.value);\n this.valueChange.emit(this.value);\n }\n updateInput(maskedValue = '', selection) {\n this.maskedValue = maskedValue;\n const value = this.maskOnFocus && !this.focused && this.emptyMask ? '' : maskedValue;\n this.renderer.setProperty(this.input.nativeElement, \"value\", value);\n if (selection !== undefined) {\n this.setSelection(selection, selection);\n }\n }\n extractChanges(changes) {\n return Object.keys(changes).filter(key => key !== 'rules').reduce((obj, key) => {\n obj[key] = changes[key].currentValue;\n return obj;\n }, {}); // tslint:disable-line:align\n }\n updateService(extra) {\n const config = Object.assign({\n includeLiterals: this.includeLiterals,\n mask: this.mask,\n prompt: this.prompt,\n promptPlaceholder: this.promptPlaceholder,\n rules: this.rules\n }, extra); // tslint:disable-line:align\n this.service.update(config);\n }\n setSelection(start = this.selection[0], end = this.selection[1]) {\n if (this.focused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n get emptyMask() {\n return this.service.maskRaw() === this.maskedValue;\n }\n setFocusSelection() {\n const selectionStart = this.input.nativeElement.selectionStart;\n const index = this.maskedValue ? this.maskedValue.indexOf(this.prompt) : 0;\n if (index >= 0 && index < selectionStart) {\n this.selection = [index, index];\n this.setSelection();\n }\n }\n get focused() {\n return this.isFocused;\n }\n set focused(value) {\n if (this.isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value) {\n this.renderer.addClass(element, FOCUSED$2);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$2);\n }\n this.isFocused = value;\n }\n }\n normalizeValue(value = this.value) {\n const present = isPresent(value);\n if (present && typeof value !== 'string') {\n if (isDevMode()) {\n throw new Error('The MaskedTextBox component supports only string values.');\n }\n return String(value);\n }\n return present ? value : '';\n }\n};\nMaskedTextBoxComponent.ɵfac = function MaskedTextBoxComponent_Factory(t) { return new (t || MaskedTextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(MaskingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nMaskedTextBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: MaskedTextBoxComponent, selectors: [[\"kendo-maskedtextbox\"]], viewQuery: function MaskedTextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c37, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 7, hostBindings: function MaskedTextBoxComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"paste\", function MaskedTextBoxComponent_paste_HostBindingHandler($event) { return ctx.pasteHandler($event); })(\"input\", function MaskedTextBoxComponent_input_HostBindingHandler($event) { return ctx.inputHandler($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-maskedtextbox\", ctx.hostClasses)(\"k-state-disabled\", ctx.hostDisabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", prompt: \"prompt\", promptPlaceholder: \"promptPlaceholder\", includeLiterals: \"includeLiterals\", maskOnFocus: \"maskOnFocus\", maskValidation: \"maskValidation\", tabindex: \"tabindex\", rules: \"rules\", tabIndex: \"tabIndex\", value: \"value\", title: \"title\", mask: \"mask\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, exportAs: [\"kendoMaskedTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1) /* tslint:disable-line */\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1)\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 2, vars: 12, consts: [[\"type\", \"text\", \"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"k-textbox\", 3, \"id\", \"tabindex\", \"disabled\", \"readonly\", \"kendoEventsOutsideAngular\"], [\"input\", \"\"]], template: function MaskedTextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 0, 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"tabindex\", ctx.tabIndex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction5(6, _c38, ctx.handleFocus, ctx.handleBlur, ctx.handleClick, ctx.handleDragDrop, ctx.handleDragDrop));\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, directives: [ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"title\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-maskedtextbox'),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], MaskedTextBoxComponent.prototype, \"hostDisabledClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"mask\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], MaskedTextBoxComponent.prototype, \"rules\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"prompt\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], MaskedTextBoxComponent.prototype, \"promptPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"includeLiterals\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"maskOnFocus\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], MaskedTextBoxComponent.prototype, \"maskValidation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], MaskedTextBoxComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], MaskedTextBoxComponent.prototype, \"tabIndex\", null);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], MaskedTextBoxComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], MaskedTextBoxComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], MaskedTextBoxComponent.prototype, \"valueChange\", void 0);\n__decorate([\n ViewChild('input', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], MaskedTextBoxComponent.prototype, \"input\", void 0);\n__decorate([\n HostListener('paste', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], MaskedTextBoxComponent.prototype, \"pasteHandler\", null);\n__decorate([\n HostListener('input', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], MaskedTextBoxComponent.prototype, \"inputHandler\", null);\nMaskedTextBoxComponent = MaskedTextBoxComponent_1 = __decorate([ __param(6, Optional()), __param(6, Inject(RTL)),\n __metadata(\"design:paramtypes\", [MaskingService,\n Renderer2,\n ElementRef,\n NgZone,\n Injector,\n ChangeDetectorRef, Boolean])\n], MaskedTextBoxComponent);\n\n/**\n * @hidden\n */\nclass SliderTick {\n constructor(value) {\n this.value = value;\n this.classes = {\n 'k-tick': true\n };\n }\n}\n/**\n * @hidden\n */\nlet SliderTicksComponent = class SliderTicksComponent {\n /**\n * @hidden\n */\n constructor() {\n this.wrapperClasses = 'k-reset k-slider-items';\n this.ticks = [];\n }\n ngOnChanges(_) {\n this.createTicks();\n }\n createTicks() {\n const count = calculateTicksCount(this.min, this.max, this.step);\n const largeStep = this.largeStep;\n const tickValueProps = {\n max: this.max,\n min: this.min,\n smallStep: this.step\n };\n let result = [];\n for (let i = 0; i < count; i++) {\n result.push(new SliderTick(calculateValueFromTick(i, tickValueProps)));\n if (largeStep && i % largeStep === 0) {\n result[i].large = true;\n result[i].classes['k-tick-large'] = true;\n }\n }\n if (result.length > 0) {\n Object.assign(result[0].classes, this.endTickClasses(true));\n Object.assign(result[result.length - 1].classes, this.endTickClasses(false));\n }\n this.ticks = result;\n }\n endTickClasses(first) {\n return {\n 'k-first': (first && !this.vertical) || (!first && this.vertical),\n 'k-last': (!first && !this.vertical) || (first && this.vertical)\n };\n }\n};\nSliderTicksComponent.ɵfac = function SliderTicksComponent_Factory(t) { return new (t || SliderTicksComponent)(); };\nSliderTicksComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SliderTicksComponent, selectors: [[\"\", \"kendoSliderTicks\", \"\"]], viewQuery: function SliderTicksComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c39, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tickElements = _t);\n } }, hostVars: 2, hostBindings: function SliderTicksComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassMap(ctx.wrapperClasses);\n } }, inputs: { tickTitle: \"tickTitle\", vertical: \"vertical\", step: \"step\", largeStep: \"largeStep\", min: \"min\", max: \"max\", labelTemplate: \"labelTemplate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c40, decls: 3, vars: 1, consts: [[\"role\", \"presentation\", 3, \"ngClass\", \"title\", 4, \"ngFor\", \"ngForOf\"], [\"defaultLabel\", \"\"], [\"role\", \"presentation\", 3, \"ngClass\", \"title\"], [\"tickElement\", \"\"], [3, \"ngSwitch\"], [\"class\", \"k-label\", 4, \"ngSwitchCase\"], [4, \"ngSwitchCase\"], [1, \"k-label\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function SliderTicksComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, SliderTicksComponent_li_0_Template, 5, 5, \"li\", 0);\n ɵngcc0.ɵɵtemplate(1, SliderTicksComponent_ng_template_1_Template, 1, 1, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.ticks);\n } }, directives: [ɵngcc3.NgForOf, ɵngcc3.NgClass, ɵngcc3.NgSwitch, ɵngcc3.NgSwitchCase, ɵngcc3.NgTemplateOutlet], encapsulation: 2 });\n__decorate([\n HostBinding('class'),\n __metadata(\"design:type\", String)\n], SliderTicksComponent.prototype, \"wrapperClasses\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Function)\n], SliderTicksComponent.prototype, \"tickTitle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], SliderTicksComponent.prototype, \"vertical\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderTicksComponent.prototype, \"step\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderTicksComponent.prototype, \"largeStep\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderTicksComponent.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], SliderTicksComponent.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", TemplateRef)\n], SliderTicksComponent.prototype, \"labelTemplate\", void 0);\n__decorate([\n ViewChildren('tickElement'),\n __metadata(\"design:type\", QueryList)\n], SliderTicksComponent.prototype, \"tickElements\", void 0);\n\n/**\n * @hidden\n */\nlet SlidersCommonModule = class SlidersCommonModule {\n};\nSlidersCommonModule.ɵfac = function SlidersCommonModule_Factory(t) { return new (t || SlidersCommonModule)(); };\nSlidersCommonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SlidersCommonModule });\nSlidersCommonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, DraggableModule, EventsModule, ResizeSensorModule], DraggableModule,\n EventsModule,\n ResizeSensorModule] });\n\n/**\n * @hidden\n */\nclass SliderMessages extends ComponentMessages {\n}\nSliderMessages.ɵfac = /*@__PURE__*/ function () { let ɵSliderMessages_BaseFactory; return function SliderMessages_Factory(t) { return (ɵSliderMessages_BaseFactory || (ɵSliderMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(SliderMessages)))(t || SliderMessages); }; }();\nSliderMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: SliderMessages, inputs: { decrement: \"decrement\", increment: \"increment\", dragHandle: \"dragHandle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderMessages.prototype, \"decrement\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderMessages.prototype, \"increment\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], SliderMessages.prototype, \"dragHandle\", void 0);\n\nvar LocalizedSliderMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedSliderMessagesDirective = LocalizedSliderMessagesDirective_1 = class LocalizedSliderMessagesDirective extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedSliderMessagesDirective.ɵfac = function LocalizedSliderMessagesDirective_Factory(t) { return new (t || LocalizedSliderMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedSliderMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedSliderMessagesDirective, selectors: [[\"\", \"kendoSliderLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedSliderMessagesDirective = LocalizedSliderMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedSliderMessagesDirective);\n\nvar SliderCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet SliderCustomMessagesComponent = SliderCustomMessagesComponent_1 = class SliderCustomMessagesComponent extends SliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nSliderCustomMessagesComponent.ɵfac = function SliderCustomMessagesComponent_Factory(t) { return new (t || SliderCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nSliderCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SliderCustomMessagesComponent, selectors: [[\"kendo-slider-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SliderCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nSliderCustomMessagesComponent = SliderCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], SliderCustomMessagesComponent);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Slider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { SliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, SliderModule], // import Slider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet SliderModule = class SliderModule {\n};\nSliderModule.ɵfac = function SliderModule_Factory(t) { return new (t || SliderModule)(); };\nSliderModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SliderModule });\nSliderModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, SlidersCommonModule]] });\n\n/**\n * @hidden\n */\nclass RangeSliderMessages extends ComponentMessages {\n}\nRangeSliderMessages.ɵfac = /*@__PURE__*/ function () { let ɵRangeSliderMessages_BaseFactory; return function RangeSliderMessages_Factory(t) { return (ɵRangeSliderMessages_BaseFactory || (ɵRangeSliderMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(RangeSliderMessages)))(t || RangeSliderMessages); }; }();\nRangeSliderMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: RangeSliderMessages, inputs: { dragHandleStart: \"dragHandleStart\", dragHandleEnd: \"dragHandleEnd\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], RangeSliderMessages.prototype, \"dragHandleStart\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], RangeSliderMessages.prototype, \"dragHandleEnd\", void 0);\n\nvar LocalizedRangeSliderMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedRangeSliderMessagesDirective = LocalizedRangeSliderMessagesDirective_1 = class LocalizedRangeSliderMessagesDirective extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedRangeSliderMessagesDirective.ɵfac = function LocalizedRangeSliderMessagesDirective_Factory(t) { return new (t || LocalizedRangeSliderMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedRangeSliderMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedRangeSliderMessagesDirective, selectors: [[\"\", \"kendoSliderLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedRangeSliderMessagesDirective = LocalizedRangeSliderMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedRangeSliderMessagesDirective);\n\nvar RangeSliderCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet RangeSliderCustomMessagesComponent = RangeSliderCustomMessagesComponent_1 = class RangeSliderCustomMessagesComponent extends RangeSliderMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nRangeSliderCustomMessagesComponent.ɵfac = function RangeSliderCustomMessagesComponent_Factory(t) { return new (t || RangeSliderCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nRangeSliderCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: RangeSliderCustomMessagesComponent, selectors: [[\"kendo-rangeslider-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function RangeSliderCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nRangeSliderCustomMessagesComponent = RangeSliderCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], RangeSliderCustomMessagesComponent);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RangeSlider component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { RangeSliderModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, RangeSliderModule], // import RangeSlider module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet RangeSliderModule = class RangeSliderModule {\n};\nRangeSliderModule.ɵfac = function RangeSliderModule_Factory(t) { return new (t || RangeSliderModule)(); };\nRangeSliderModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: RangeSliderModule });\nRangeSliderModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, SlidersCommonModule]] });\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { on: \"on\", off: \"off\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"on\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"off\", void 0);\n\nvar LocalizedSwitchMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedSwitchMessagesDirective = LocalizedSwitchMessagesDirective_1 = class LocalizedSwitchMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedSwitchMessagesDirective.ɵfac = function LocalizedSwitchMessagesDirective_Factory(t) { return new (t || LocalizedSwitchMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedSwitchMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedSwitchMessagesDirective, selectors: [[\"\", \"kendoSwitchLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedSwitchMessagesDirective = LocalizedSwitchMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedSwitchMessagesDirective);\n\nvar SwitchCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet SwitchCustomMessagesComponent = SwitchCustomMessagesComponent_1 = class SwitchCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nSwitchCustomMessagesComponent.ɵfac = function SwitchCustomMessagesComponent_Factory(t) { return new (t || SwitchCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nSwitchCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: SwitchCustomMessagesComponent, selectors: [[\"kendo-switch-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SwitchCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nSwitchCustomMessagesComponent = SwitchCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], SwitchCustomMessagesComponent);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Switch component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Switch module\n * import { SwitchModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, SwitchModule], // import Switch module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet SwitchModule = class SwitchModule {\n};\nSwitchModule.ɵfac = function SwitchModule_Factory(t) { return new (t || SwitchModule)(); };\nSwitchModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SwitchModule });\nSwitchModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, EventsModule, ResizeSensorModule]] });\n\nvar LocalizedNumericTextBoxMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedNumericTextBoxMessagesDirective = LocalizedNumericTextBoxMessagesDirective_1 = class LocalizedNumericTextBoxMessagesDirective extends NumericTextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedNumericTextBoxMessagesDirective.ɵfac = function LocalizedNumericTextBoxMessagesDirective_Factory(t) { return new (t || LocalizedNumericTextBoxMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedNumericTextBoxMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedNumericTextBoxMessagesDirective, selectors: [[\"\", \"kendoNumericTextBoxLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedNumericTextBoxMessagesDirective = LocalizedNumericTextBoxMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedNumericTextBoxMessagesDirective);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the NumericTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the NumericTextBox module\n * import { NumericTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, NumericTextBoxModule], // import NumericTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet NumericTextBoxModule = class NumericTextBoxModule {\n};\nNumericTextBoxModule.ɵfac = function NumericTextBoxModule_Factory(t) { return new (t || NumericTextBoxModule)(); };\nNumericTextBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: NumericTextBoxModule });\nNumericTextBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, EventsModule]] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the MaskedTextBox component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MaskedTextBox module\n * import { MaskedTextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MaskedTextBoxModule], // import MaskedTextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet MaskedTextBoxModule = class MaskedTextBoxModule {\n};\nMaskedTextBoxModule.ɵfac = function MaskedTextBoxModule_Factory(t) { return new (t || MaskedTextBoxModule)(); };\nMaskedTextBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: MaskedTextBoxModule });\nMaskedTextBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, EventsModule]] });\n\n/**\n * @hidden\n *\n * Returns true if the used browser is Safari.\n */\nconst isSafari = (userAgent) => {\n return detectDesktopBrowser(userAgent).safari ||\n (detectMobileOS(userAgent) && detectMobileOS(userAgent).browser === 'mobilesafari');\n};\n/**\n * @hidden\n *\n * Checks if input is Japanese IME\n */\nconst isJapanese = (input) => {\n const japaneseRegex = /[\\u3000-\\u303F]|[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\uFF00-\\uFFEF]|[\\u4E00-\\u9FAF]|[\\u2605-\\u2606]|[\\u2190-\\u2195]|\\u203B/g;\n return japaneseRegex.test(input);\n};\n\n/**\n * Specifies the adornments in the suffix container ([see examples]({% slug adornments_textbox %}#toc-suffixadornments)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nlet TextBoxSuffixTemplateDirective = class TextBoxSuffixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nTextBoxSuffixTemplateDirective.ɵfac = function TextBoxSuffixTemplateDirective_Factory(t) { return new (t || TextBoxSuffixTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nTextBoxSuffixTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextBoxSuffixTemplateDirective, selectors: [[\"\", \"kendoTextBoxSuffixTemplate\", \"\"]] });\nTextBoxSuffixTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], TextBoxSuffixTemplateDirective);\n\n/**\n * Specifies the adornments in the prefix container ([see examples]({% slug adornments_textbox %}#toc-prefixadornments)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nlet TextBoxPrefixTemplateDirective = class TextBoxPrefixTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nTextBoxPrefixTemplateDirective.ɵfac = function TextBoxPrefixTemplateDirective_Factory(t) { return new (t || TextBoxPrefixTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nTextBoxPrefixTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextBoxPrefixTemplateDirective, selectors: [[\"\", \"kendoTextBoxPrefixTemplate\", \"\"]] });\nTextBoxPrefixTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], TextBoxPrefixTemplateDirective);\n\nvar TextBoxComponent_1;\nconst FOCUSED$3 = 'k-state-focused';\nlet TextBoxComponent = TextBoxComponent_1 = class TextBoxComponent {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets the `title` attribute of the `input` element of the TextBox.\n */\n this.title = '';\n /**\n * Sets the disabled state of the component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the component.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Specifies the `tabindex` of the TextBox.\n *\n * @default 0\n */\n this.tabindex = 0;\n /**\n * Provides a value for the TextBox.\n */\n this.value = null;\n /**\n * Determines whether the whole value will be selected when the TextBox is clicked. Defaults to `false`.\n *\n * @default false\n */\n this.selectOnFocus = false;\n /**\n * Specifies when the Success icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * `boolean`—The Success icon is displayed, if the condition given by the developer is met.\n *\n * `initial`—The Success icon will be displayed when the component state is neither `invalid` nor `touched` or `dirty`.\n *\n * @default false\n */\n this.showSuccessIcon = false;\n /**\n * Specifies when the Error icon will be shown ([see example]({% slug validation_textbox %})).\n *\n * The possible values are:\n *\n * * `initial`—The Error icon will be displayed when the component state is\n * `invalid` and `touched` or `dirty`.\n * * `boolean`—The Error icon is displayed, if the condition given by the developer is met.\n *\n * @default false\n */\n this.showErrorIcon = false;\n /**\n * Specifies whether a Clear button will be rendered.\n *\n * @default false\n */\n this.clearButton = false;\n /**\n * Fires each time the value is changed—\n * when the component is blurred or the value is cleared through the **Clear** button\n * ([see example]({% slug overview_textbox %}#toc-events)).\n * When the value of the component is programmatically changed to `ngModel` or `formControl`\n * through its API or form binding, the `valueChange` event is not triggered because it\n * might cause a mix-up with the built-in `valueChange` mechanisms of the `ngModel` or `formControl` bindings.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the `input` element.\n */\n this.inputFocus = new EventEmitter();\n /**\n * Fires each time the `input` element gets blurred.\n */\n this.inputBlur = new EventEmitter();\n /**\n * Fires each time the user focuses the TextBox component.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log('Component is isFocused');\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the TextBox component gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log('Component is blurred');\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n this.hostClass = true;\n this._isFocused = false;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.handleInputFocus = () => {\n if (!this.disabled) {\n if (this.selectOnFocus && this.value) {\n this.ngZone.run(() => {\n setTimeout(() => { this.selectAll(); });\n });\n }\n if (hasObservers(this.onFocus)) {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n if (hasObservers(this.inputFocus)) {\n if (!this.focusChangedProgrammatically || (this.focusChangedProgrammatically && this.clearButtonClicked)) {\n this.ngZone.run(() => {\n this.inputFocus.emit();\n });\n }\n }\n this.ngZone.run(() => {\n this.isFocused = true;\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInputBlur = () => {\n this.changeDetector.markForCheck();\n if (hasObservers(this.inputBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.inputBlur.emit();\n });\n }\n };\n /**\n * @hidden\n */\n this.handleInput = (ev) => {\n let incomingValue = isSafari(navigator.userAgent) && isJapanese(ev.target.value) ? ev.data : ev.target.value;\n this.updateValue(incomingValue);\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get disabledClass() {\n return this.disabled;\n }\n ngOnInit() {\n this.control = this.injector.get(NgControl, null);\n this.checkClearButton();\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n ngAfterViewInit() {\n const hostElement = this.hostElement.nativeElement;\n let cursorInsideWrapper = false;\n let tabbing = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n this.isFocused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n const closestTextbox = closest(args.relatedTarget, (element) => element === this.hostElement.nativeElement);\n if (!closestTextbox) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper && !this.clearButtonClicked) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n ngOnChanges(changes) {\n if (changes.disabled || changes.readonly || changes.value) {\n this.checkClearButton();\n }\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * Focuses the TextBox.\n *\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.focusChangedProgrammatically = true;\n this.isFocused = true;\n this.input.nativeElement.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the TextBox.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const isFocusedElement = this.hostElement.nativeElement.querySelector(':focus');\n if (isFocusedElement) {\n isFocusedElement.blur();\n }\n this.isFocused = false;\n this.focusChangedProgrammatically = false;\n }\n /**\n * @hidden\n */\n clearTitle() {\n return this.localizationService.get('clear');\n }\n /**\n * @hidden\n */\n checkClearButton() {\n this.showClearButton =\n !this.disabled &&\n !this.readonly &&\n this.clearButton &&\n !!this.value;\n }\n /**\n * @hidden\n */\n clearValue(ev) {\n if (ev) {\n ev.preventDefault();\n }\n this.clearButtonClicked = true;\n this.input.nativeElement.value = '';\n this.input.nativeElement.focus();\n this.updateValue('');\n this.checkClearButton();\n this.clearButtonClicked = false;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.checkClearButton();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n /**\n * @hidden\n */\n showSuccessInitial() {\n if (!this.control) {\n return false;\n }\n const { valid, dirty, touched } = this.control;\n return valid && (dirty || touched);\n }\n /**\n * @hidden\n */\n get successIconClasses() {\n return this.successIcon\n ? `k-text-success ${this.successIcon}`\n : `k-text-success k-icon k-i-check-outline`;\n }\n /**\n * @hidden\n */\n get errorIconClasses() {\n return this.errorIcon\n ? `k-text-error ${this.errorIcon}`\n : `k-text-error k-icon k-i-warning`;\n }\n /**\n * @hidden\n */\n get clearButtonClasses() {\n return this.clearButtonIcon\n ? this.clearButtonIcon\n : `k-icon k-i-close-circle`;\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrorIcon === 'initial'\n ? this.showErrorsInitial()\n : this.showErrorIcon;\n }\n /**\n * @hidden\n */\n get isSuccessful() {\n return this.showSuccessIcon === 'initial'\n ? this.showSuccessInitial()\n : this.showSuccessIcon;\n }\n setSelection(start, end) {\n if (this.isFocused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n selectAll() {\n if (this.value) {\n this.setSelection(0, this.value.length);\n }\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.checkClearButton();\n this.changeDetector.markForCheck();\n });\n }\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n if (this._isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value && !this.disabled) {\n this.renderer.addClass(element, FOCUSED$3);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$3);\n }\n this._isFocused = value;\n }\n }\n handleBlur() {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n this.isFocused = false;\n });\n }\n};\nTextBoxComponent.ɵfac = function TextBoxComponent_Factory(t) { return new (t || TextBoxComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nTextBoxComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TextBoxComponent, selectors: [[\"kendo-textbox\"]], contentQueries: function TextBoxComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextBoxSuffixTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TextBoxPrefixTemplateDirective, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.suffixTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.prefixTemplate = _t.first);\n } }, viewQuery: function TextBoxComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c37, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 5, hostBindings: function TextBoxComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-textbox\", ctx.hostClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", title: \"title\", disabled: \"disabled\", readonly: \"readonly\", tabindex: \"tabindex\", value: \"value\", selectOnFocus: \"selectOnFocus\", showSuccessIcon: \"showSuccessIcon\", showErrorIcon: \"showErrorIcon\", clearButton: \"clearButton\", tabIndex: \"tabIndex\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", clearButtonIcon: \"clearButtonIcon\", placeholder: \"placeholder\", maxlength: \"maxlength\" }, outputs: { valueChange: \"valueChange\", inputFocus: \"inputFocus\", inputBlur: \"inputBlur\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoTextBox\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent_1),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent_1) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 18, consts: function () { let i18n_41; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the **Clear** button in the TextBox.\n * @meaning kendo.textbox.clear\n */\n const MSG_EXTERNAL_2651889799249671820$$DIST_FESM2015_INDEX_JS_42 = goog.getMsg(\"Clear\");\n i18n_41 = MSG_EXTERNAL_2651889799249671820$$DIST_FESM2015_INDEX_JS_42;\n }\n else {\n i18n_41 = $localize `:kendo.textbox.clear|The title for the **Clear** button in the TextBox.␟e6edd360fd0d3c873c0d94a3aecd3c407d31da5a␟2651889799249671820:Clear`;\n } return [[\"kendoTextBoxLocalizedMessages\", \"\", \"clear\", i18n_41], [1, \"k-input-prefix\"], [4, \"ngIf\"], [1, \"k-input\", 3, \"id\", \"disabled\", \"readonly\", \"value\", \"kendoEventsOutsideAngular\"], [\"input\", \"\"], [1, \"k-input-suffix\"], [3, \"ngClass\", 4, \"ngIf\"], [\"role\", \"button\", \"class\", \"k-clear-value\", 3, \"tabindex\", \"title\", \"click\", \"mousedown\", \"keydown.enter\", \"keydown.space\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\"], [3, \"ngClass\"], [\"role\", \"button\", 1, \"k-clear-value\", 3, \"tabindex\", \"title\", \"click\", \"mousedown\", \"keydown.enter\", \"keydown.space\"]]; }, template: function TextBoxComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1);\n ɵngcc0.ɵɵtemplate(2, TextBoxComponent_2_Template, 1, 1, null, 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(3, \"input\", 3, 4);\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵtemplate(6, TextBoxComponent_span_6_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(7, TextBoxComponent_span_7_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(8, TextBoxComponent_span_8_Template, 2, 4, \"span\", 7);\n ɵngcc0.ɵɵtemplate(9, TextBoxComponent_9_Template, 1, 1, null, 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.prefixTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"value\", ctx.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(14, _c43, ctx.handleInputFocus, ctx.handleInputBlur, ctx.handleInput));\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.disabled ? undefined : ctx.tabindex)(\"placeholder\", ctx.placeholder)(\"title\", ctx.title)(\"maxlength\", ctx.maxlength);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasErrors);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isSuccessful);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showClearButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.suffixTemplate);\n } }, directives: function () { return [LocalizedTextBoxMessagesDirective, ɵngcc3.NgIf, ɵngcc3.NgTemplateOutlet, ɵngcc2.EventsOutsideAngularDirective, ɵngcc3.NgClass]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextBoxComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextBoxComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextBoxComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextBoxComponent.prototype, \"selectOnFocus\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TextBoxComponent.prototype, \"showSuccessIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], TextBoxComponent.prototype, \"showErrorIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextBoxComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"successIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"errorIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"clearButtonIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], TextBoxComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"placeholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextBoxComponent.prototype, \"maxlength\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextBoxComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextBoxComponent.prototype, \"inputFocus\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextBoxComponent.prototype, \"inputBlur\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], TextBoxComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], TextBoxComponent.prototype, \"onBlur\", void 0);\n__decorate([\n ViewChild('input', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], TextBoxComponent.prototype, \"input\", void 0);\n__decorate([\n ContentChild(TextBoxSuffixTemplateDirective, { static: false }),\n __metadata(\"design:type\", TextBoxSuffixTemplateDirective)\n], TextBoxComponent.prototype, \"suffixTemplate\", void 0);\n__decorate([\n ContentChild(TextBoxPrefixTemplateDirective, { static: false }),\n __metadata(\"design:type\", TextBoxPrefixTemplateDirective)\n], TextBoxComponent.prototype, \"prefixTemplate\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextBoxComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('class.k-textbox'),\n __metadata(\"design:type\", Boolean)\n], TextBoxComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], TextBoxComponent.prototype, \"direction\", void 0);\nTextBoxComponent = TextBoxComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n NgZone,\n ChangeDetectorRef,\n Renderer2,\n Injector,\n ElementRef])\n], TextBoxComponent);\n\n/**\n * @hidden\n */\nclass TextBoxMessages extends ComponentMessages {\n}\nTextBoxMessages.ɵfac = /*@__PURE__*/ function () { let ɵTextBoxMessages_BaseFactory; return function TextBoxMessages_Factory(t) { return (ɵTextBoxMessages_BaseFactory || (ɵTextBoxMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TextBoxMessages)))(t || TextBoxMessages); }; }();\nTextBoxMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextBoxMessages, inputs: { clear: \"clear\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextBoxMessages.prototype, \"clear\", void 0);\n\nvar TextBoxCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet TextBoxCustomMessagesComponent = TextBoxCustomMessagesComponent_1 = class TextBoxCustomMessagesComponent extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nTextBoxCustomMessagesComponent.ɵfac = function TextBoxCustomMessagesComponent_Factory(t) { return new (t || TextBoxCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nTextBoxCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TextBoxCustomMessagesComponent, selectors: [[\"kendo-textbox-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TextBoxCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nTextBoxCustomMessagesComponent = TextBoxCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], TextBoxCustomMessagesComponent);\n\nvar LocalizedTextBoxMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedTextBoxMessagesDirective = LocalizedTextBoxMessagesDirective_1 = class LocalizedTextBoxMessagesDirective extends TextBoxMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedTextBoxMessagesDirective.ɵfac = function LocalizedTextBoxMessagesDirective_Factory(t) { return new (t || LocalizedTextBoxMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedTextBoxMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedTextBoxMessagesDirective, selectors: [[\"\", \"kendoTextBoxLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedTextBoxMessagesDirective = LocalizedTextBoxMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedTextBoxMessagesDirective);\n\n/**\n * Specifies a separator in the content of components like the TextArea and the TextBox. ([see examples]({% slug adornments_textbox %}#toc-separator)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nlet InputSeparatorComponent = class InputSeparatorComponent {\n /**\n * Specifies a separator in the content of components like the TextArea and the TextBox. ([see examples]({% slug adornments_textbox %}#toc-separator)).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\n constructor() {\n this.hostClass = true;\n }\n};\nInputSeparatorComponent.ɵfac = function InputSeparatorComponent_Factory(t) { return new (t || InputSeparatorComponent)(); };\nInputSeparatorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: InputSeparatorComponent, selectors: [[\"kendo-input-separator\"], [\"kendo-textbox-separator\"]], hostVars: 2, hostBindings: function InputSeparatorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-input-separator\", ctx.hostClass);\n } }, decls: 0, vars: 0, template: function InputSeparatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-input-separator'),\n __metadata(\"design:type\", Boolean)\n], InputSeparatorComponent.prototype, \"hostClass\", void 0);\n\n/**\n * @hidden\n */\nconst SHARED_DIRECTIVES = [\n InputSeparatorComponent,\n TextAreaDirective\n];\n/**\n * @hidden\n */\nlet SharedModule = class SharedModule {\n};\nSharedModule.ɵfac = function SharedModule_Factory(t) { return new (t || SharedModule)(); };\nSharedModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the TextBox module\n * import { TextBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TextBoxModule], // import TextBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet TextBoxModule = class TextBoxModule {\n};\nTextBoxModule.ɵfac = function TextBoxModule_Factory(t) { return new (t || TextBoxModule)(); };\nTextBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TextBoxModule });\nTextBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, EventsModule, SharedModule], EventsModule] });\n\n/**\n * @hidden\n */\nclass TextFieldsBase {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * Sets the `title` attribute of the internal textarea input element of the component.\n */\n this.title = '';\n /**\n * Sets the disabled state of the TextArea component.\n *\n * @default false\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the TextArea component.\n *\n * @default false\n */\n this.readonly = false;\n /**\n * Provides a value for the TextArea component.\n */\n this.value = null;\n /**\n * Determines whether the whole value will be selected when the TextArea is clicked. Defaults to `false`.\n *\n * @default false\n */\n this.selectOnFocus = false;\n /**\n * Fires each time the user focuses the internal textarea element of the component.\n * This event is useful when you need to distinguish between focusing the textarea element and focusing one of its adornments.\n */\n this.inputFocus = new EventEmitter();\n /**\n * Fires each time the internal textarea element gets blurred.\n * This event is useful when adornments are used, in order to distinguish between blurring the textarea element and blurring the whole TextArea component.\n */\n this.inputBlur = new EventEmitter();\n this.subscriptions = new Subscription();\n this._isFocused = false;\n this.focusChangedProgrammatically = false;\n /**\n * @hidden\n */\n this.handleInputBlur = () => {\n this.changeDetector.markForCheck();\n if (hasObservers(this.inputBlur) || requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.ngTouched();\n this.inputBlur.emit();\n });\n }\n };\n this.ngChange = (_) => { };\n this.ngTouched = () => { };\n }\n get disabledClass() {\n return this.disabled;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n * Called when the status of the component changes to or from `disabled`.\n * Depending on the value, it enables or disables the appropriate DOM element.\n *\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.changeDetector.markForCheck();\n this.disabled = isDisabled;\n }\n}\nTextFieldsBase.ɵfac = function TextFieldsBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nTextFieldsBase.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TextFieldsBase, viewQuery: function TextFieldsBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c37, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, hostVars: 3, hostBindings: function TextFieldsBase_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { title: \"title\", disabled: \"disabled\", readonly: \"readonly\", value: \"value\", selectOnFocus: \"selectOnFocus\", placeholder: \"placeholder\" }, outputs: { inputFocus: \"inputFocus\", inputBlur: \"inputBlur\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextFieldsBase.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextFieldsBase.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextFieldsBase.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextFieldsBase.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], TextFieldsBase.prototype, \"selectOnFocus\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextFieldsBase.prototype, \"placeholder\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextFieldsBase.prototype, \"inputFocus\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextFieldsBase.prototype, \"inputBlur\", void 0);\n__decorate([\n ViewChild('input', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], TextFieldsBase.prototype, \"input\", void 0);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextFieldsBase.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], TextFieldsBase.prototype, \"direction\", void 0);\n\nvar TextAreaComponent_1;\nconst resizeClasses = {\n 'vertical': 'k-resize-vertical',\n 'horizontal': 'k-resize-horizontal',\n 'both': 'k-resize-both',\n 'none': 'k-resize-none',\n 'auto': 'k-resize-none'\n};\nconst FOCUSED$4 = 'k-state-focus';\n/**\n * Represents the [Kendo UI TextArea component for Angular]({% slug overview_textarea %}).\n */\nlet TextAreaComponent = TextAreaComponent_1 = class TextAreaComponent extends TextFieldsBase {\n constructor(localizationService, ngZone, changeDetector, renderer, injector, hostElement) {\n super(localizationService, ngZone, changeDetector, renderer, injector, hostElement);\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.renderer = renderer;\n this.injector = injector;\n this.hostElement = hostElement;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n this.hostClass = true;\n /**\n * Specifies the flow direction of the TextArea sections. This property is useful when adornments are used, in order to specify\n * their position in relation to the textarea element.\n *\n * The possible values are:\n * * `vertical`(Default) —TextArea sections are placed from top to bottom.\n * * `horizontal`—TextArea sections are placed from left to right in `ltr`, and from right to left in `rtl` mode.\n */\n this.flow = 'vertical';\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabindex = 0;\n /**\n * Configures the resize behavior of the TextArea.\n *\n * The possible values are:\n * * `vertical`(Default)—The TextArea component can be resized only vertically.\n * * `horizontal`—The TextArea component can be resized only horizontally.\n * * `both`—The TextArea component can be resized in both (horizontal and vertical) directions.\n * * `auto`—Specifies whether the TextArea component will adjust its height automatically, based on the content.\n * * `none`—The TextArea cannot be resized.\n *\n */\n this.resizable = 'vertical';\n /**\n * Fires each time the user focuses the TextArea component.\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleFocus(): void {\n * console.log('Component is focused');\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the TextArea component gets blurred.\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * class AppComponent {\n * public handleBlur(): void {\n * console.log('Component is blurred');\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the value is changed or the component is blurred\n * ([see example]({% slug overview_textarea %}#toc-events)).\n * When the component value is changed programmatically or via its form control binding, the valueChange event is not emitted.\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.handleInput = (ev) => {\n let incomingValue = ev.target.value;\n this.updateValue(incomingValue);\n this.resize();\n };\n /**\n * @hidden\n */\n this.handleInputFocus = () => {\n if (!this.disabled) {\n if (this.selectOnFocus && this.value) {\n this.ngZone.run(() => {\n setTimeout(() => { this.selectAll(); });\n });\n }\n if (hasObservers(this.onFocus)) {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n if (hasObservers(this.inputFocus)) {\n if (!this.focusChangedProgrammatically) {\n this.ngZone.run(() => {\n this.inputFocus.emit();\n });\n }\n }\n this.ngZone.run(() => {\n this.isFocused = true;\n });\n }\n };\n validatePackage(packageMetadata);\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get flowCol() {\n return this.flow === 'vertical';\n }\n get flowRow() {\n return this.flow === 'horizontal';\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n ngAfterViewInit() {\n const hostElement = this.hostElement.nativeElement;\n let cursorInsideWrapper = false;\n let tabbing = false;\n this.ngZone.runOutsideAngular(() => {\n // focusIn and focusOut are relative to the host element\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusin', () => {\n if (!this.isFocused) {\n this.ngZone.run(() => {\n this.onFocus.emit();\n this.isFocused = true;\n });\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'focusout', (args) => {\n if (!this.isFocused) {\n return;\n }\n if (tabbing) {\n const closestTextbox = closest(args.relatedTarget, (element) => element === this.hostElement.nativeElement);\n if (!closestTextbox) {\n this.handleBlur();\n }\n tabbing = false;\n }\n else {\n if (!cursorInsideWrapper) {\n this.handleBlur();\n }\n }\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseenter', () => {\n cursorInsideWrapper = true;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'mouseleave', () => {\n cursorInsideWrapper = false;\n }));\n this.subscriptions.add(this.renderer.listen(hostElement, 'keydown', (args) => {\n if (args.keyCode === Keys.Tab) {\n tabbing = true;\n }\n else {\n tabbing = false;\n }\n }));\n });\n }\n ngOnInit() {\n this.control = this.injector.get(NgControl, null);\n if (isDocumentAvailable() && this.resizable === 'auto') {\n this.resizeSubscription = fromEvent(window, 'resize')\n .pipe((debounceTime(50)))\n .subscribe(() => this.resize());\n }\n if (this.hostElement) {\n this.renderer.removeAttribute(this.hostElement.nativeElement, \"tabindex\");\n }\n this.subscriptions = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n ngOnChanges(changes) {\n const hostElement = this.hostElement.nativeElement;\n const element = this.input.nativeElement;\n if (changes.resizable) {\n if (this.resizable === 'auto') {\n this.initialHeight = element.offsetHeight;\n }\n else {\n this.renderer.setStyle(element, 'overflow-y', 'auto');\n this.renderer.setStyle(element, 'resize', 'both');\n element.style.height = `${this.initialHeight}px`;\n }\n }\n if (changes.cols) {\n if (isPresent(changes.cols.currentValue)) {\n this.renderer.setStyle(hostElement, 'width', 'auto');\n }\n else {\n this.renderer.removeStyle(hostElement, 'width');\n }\n }\n }\n ngAfterViewChecked() {\n this.resize();\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.ngChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.ngTouched = fn;\n }\n updateValue(value) {\n if (!areSame(this.value, value)) {\n this.ngZone.run(() => {\n this.value = value;\n this.ngChange(value);\n this.valueChange.emit(value);\n this.changeDetector.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get resizableClass() {\n return resizeClasses[this.resizable];\n }\n /**\n * Focuses the TextArea component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent { }\n * ```\n */\n focus() {\n if (!this.input) {\n return;\n }\n this.focusChangedProgrammatically = true;\n this.isFocused = true;\n this.input.nativeElement.focus();\n this.focusChangedProgrammatically = false;\n }\n /**\n * Blurs the TextArea component.\n */\n blur() {\n this.focusChangedProgrammatically = true;\n const isFocusedElement = this.hostElement.nativeElement.querySelector(':focus');\n if (isFocusedElement) {\n isFocusedElement.blur();\n }\n this.isFocused = false;\n this.focusChangedProgrammatically = false;\n }\n resize() {\n if (this.resizable !== 'auto') {\n return;\n }\n const element = this.input.nativeElement;\n this.renderer.setStyle(element, 'overflow-y', 'hidden');\n this.renderer.setStyle(element, 'height', `${this.initialHeight}px`);\n const scrollHeight = element.scrollHeight;\n if (scrollHeight > this.initialHeight) {\n element.style.height = `${scrollHeight}px`;\n }\n }\n get isFocused() {\n return this._isFocused;\n }\n set isFocused(value) {\n if (this._isFocused !== value && this.hostElement) {\n const element = this.hostElement.nativeElement;\n if (value && !this.disabled) {\n this.renderer.addClass(element, FOCUSED$4);\n }\n else {\n this.renderer.removeClass(element, FOCUSED$4);\n }\n this._isFocused = value;\n }\n }\n handleBlur() {\n this.ngZone.run(() => {\n if (!this.focusChangedProgrammatically) {\n this.onBlur.emit();\n }\n this.isFocused = false;\n });\n }\n setSelection(start, end) {\n if (this.isFocused) {\n invokeElementMethod(this.input, 'setSelectionRange', start, end);\n }\n }\n selectAll() {\n if (this.value) {\n this.setSelection(0, this.value.length);\n }\n }\n};\nTextAreaComponent.ɵfac = function TextAreaComponent_Factory(t) { return new (t || TextAreaComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nTextAreaComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TextAreaComponent, selectors: [[\"kendo-textarea\"]], hostVars: 6, hostBindings: function TextAreaComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-textarea\", ctx.hostClass)(\"k-flex-col\", ctx.flowCol)(\"k-flex-row\", ctx.flowRow);\n } }, inputs: { focusableId: \"focusableId\", flow: \"flow\", tabindex: \"tabindex\", resizable: \"resizable\", tabIndex: \"tabIndex\", rows: \"rows\", cols: \"cols\", maxlength: \"maxlength\" }, outputs: { onFocus: \"focus\", onBlur: \"blur\", valueChange: \"valueChange\" }, exportAs: [\"kendoTextArea\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textarea' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaComponent_1),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextAreaComponent_1) }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c45, decls: 4, vars: 19, consts: [[1, \"k-input\", 3, \"ngClass\", \"id\", \"value\", \"disabled\", \"readonly\", \"kendoEventsOutsideAngular\"], [\"input\", \"\"]], template: function TextAreaComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c44);\n ɵngcc0.ɵɵelementStart(0, \"textarea\", 0, 1);\n ɵngcc0.ɵɵtext(2, \" \");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(3);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.resizableClass)(\"id\", ctx.focusableId)(\"value\", ctx.value)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(15, _c43, ctx.handleInputFocus, ctx.handleInputBlur, ctx.handleInput));\n ɵngcc0.ɵɵattribute(\"aria-multiline\", true)(\"aria-disabled\", ctx.disabled ? true : undefined)(\"aria-readonly\", ctx.readonly ? true : undefined)(\"placeholder\", ctx.placeholder)(\"rows\", ctx.rows)(\"cols\", ctx.cols)(\"tabindex\", ctx.tabIndex)(\"title\", ctx.title)(\"maxlength\", ctx.maxlength);\n } }, directives: [ɵngcc3.NgClass, ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextAreaComponent.prototype, \"focusableId\", void 0);\n__decorate([\n HostBinding('class.k-textarea'),\n __metadata(\"design:type\", Boolean)\n], TextAreaComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('class.k-flex-col'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextAreaComponent.prototype, \"flowCol\", null);\n__decorate([\n HostBinding('class.k-flex-row'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], TextAreaComponent.prototype, \"flowRow\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextAreaComponent.prototype, \"flow\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextAreaComponent.prototype, \"rows\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextAreaComponent.prototype, \"cols\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextAreaComponent.prototype, \"maxlength\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], TextAreaComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], TextAreaComponent.prototype, \"tabIndex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], TextAreaComponent.prototype, \"resizable\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], TextAreaComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], TextAreaComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], TextAreaComponent.prototype, \"valueChange\", void 0);\nTextAreaComponent = TextAreaComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n NgZone,\n ChangeDetectorRef,\n Renderer2,\n Injector,\n ElementRef])\n], TextAreaComponent);\n\n/**\n * Specifies the adornments in the suffix container ([see example]({% slug textarea_adornments %}).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\nlet TextAreaSuffixComponent = class TextAreaSuffixComponent {\n /**\n * Specifies the adornments in the suffix container ([see example]({% slug textarea_adornments %}).\n * @example\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {}\n * ```\n */\n constructor() {\n this.hostClass = true;\n }\n};\nTextAreaSuffixComponent.ɵfac = function TextAreaSuffixComponent_Factory(t) { return new (t || TextAreaSuffixComponent)(); };\nTextAreaSuffixComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: TextAreaSuffixComponent, selectors: [[\"kendo-textarea-suffix\"]], hostVars: 2, hostBindings: function TextAreaSuffixComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-textarea-suffix\", ctx.hostClass);\n } }, exportAs: [\"kendoTextAreaSuffix\"], ngContentSelectors: _c26, decls: 1, vars: 0, template: function TextAreaSuffixComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-textarea-suffix'),\n __metadata(\"design:type\", Boolean)\n], TextAreaSuffixComponent.prototype, \"hostClass\", void 0);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextArea component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the TextArea module\n * import { TextAreaModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TextAreaModule], // import TextArea module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet TextAreaModule = class TextAreaModule {\n};\nTextAreaModule.ɵfac = function TextAreaModule_Factory(t) { return new (t || TextAreaModule)(); };\nTextAreaModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TextAreaModule });\nTextAreaModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, EventsModule, SharedModule], EventsModule] });\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns - `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * Provides information about the current active color and gives the option to prevent the opening of the popup.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public handleActiveColorClick(event: ActiveColorClickEvent): void {\n * event.preventOpen();\n *\n * console.log('Open prevented:', event.isOpenPrevented());\n * console.log('Current color:', event.color);\n * }\n * }\n * ```\n */\nclass ActiveColorClickEvent {\n /**\n * @hidden\n * @param color Represents the current value of the ColorPicker.\n */\n constructor(color) {\n this.color = color;\n this.openPrevented = false;\n }\n /**\n * Prevents the opening of the popup.\n */\n preventOpen() {\n this.openPrevented = true;\n }\n /**\n * Returns `true` if the popup opening is prevented by any of its subscribers.\n *\n * @returns - Returns `true` if the open action was prevented. Otherwise, returns `false`.\n */\n isOpenPrevented() {\n return this.openPrevented;\n }\n}\n\n/**\n * @hidden\n *\n * Returns the hex or rgba string representation of the color.\n */\nconst parseColor$1 = (value, format, safe = true) => {\n const allowedFormats = ['hex', 'rgba', 'name'];\n if (allowedFormats.indexOf(format) === -1) {\n throw new Error(`Unsupported color output format '${format}'. The available options are 'hex', 'rgba' or 'name'.`);\n }\n if (!isPresent(value)) {\n return;\n }\n if (format === 'name') {\n return nameFormat(value, safe);\n }\n const parsedColor = parseColor(value.trim(), safe);\n if (!isPresent(parsedColor)) {\n return;\n }\n return format === 'hex' ? parsedColor.toCss() : parsedColor.toCssRgba();\n};\n/**\n * @hidden\n *\n * Returns an HSV object representation of the color string.\n */\nconst getHSV = (value, safe = true) => {\n const parsed = parseColor(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toHSV();\n};\n/**\n * @hidden\n *\n * Returns an RGBA object representation of the color string.\n */\nconst getRGBA = (value, safe = true) => {\n const parsed = parseColor(value, safe);\n if (!isPresent(parsed)) {\n return {};\n }\n return parsed.toBytes();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromHSV = (hsva) => {\n const hue = fitIntoBounds(hsva.h, 0, 359.9);\n const saturation = fitIntoBounds(hsva.s, 0, 1);\n const value = fitIntoBounds(hsva.v, 0, 1);\n const alpha = fitIntoBounds(hsva.a, 0, 1);\n return Color.fromHSV(hue, saturation, value, alpha).toCssRgba();\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color based on the `hue`, assuming the `value`, `saturation` and `alpha` have value of `1`.\n */\nconst getColorFromHue = (hue) => {\n return getColorFromHSV({ h: hue, s: 1, v: 1, a: 1 });\n};\n/**\n * @hidden\n *\n * Returns the RGBA string representation of the color.\n */\nconst getColorFromRGBA = (rgba) => {\n const red = fitIntoBounds(rgba.r, 0, 255);\n const green = fitIntoBounds(rgba.g, 0, 255);\n const blue = fitIntoBounds(rgba.b, 0, 255);\n const alpha = fitIntoBounds(rgba.a, 0, 1);\n return Color.fromBytes(red, green, blue, alpha).toCssRgba();\n};\n/**\n *\n * @hidden\n */\nfunction nameFormat(value, safe) {\n value = value.toLowerCase().trim();\n if (isPresent(namedColors[value])) {\n return value;\n }\n if (parseColor(value, safe)) {\n value = parseColor(value, safe).toHex();\n }\n const key = Object.keys(namedColors).find(key => namedColors[key] === value);\n if (!key && !safe) {\n throw new Error(`The provided color ${value} is not supported for 'format=\"name\"' property.To display ${value} color, the component 'format' property shoud be set to 'hex' or 'rgba' `);\n }\n return key;\n}\n/**\n * @hidden\n *\n * Returns the RGB object representation of the color based on the background color.\n */\nconst getRGBFromRGBA = (foregroundColor, backgroundColor) => {\n const r1 = fitIntoBounds(foregroundColor.r, 0, 255);\n const g1 = fitIntoBounds(foregroundColor.g, 0, 255);\n const b1 = fitIntoBounds(foregroundColor.b, 0, 255);\n const a1 = fitIntoBounds(foregroundColor.a, 0, 1);\n const r2 = fitIntoBounds(backgroundColor.r, 0, 255);\n const g2 = fitIntoBounds(backgroundColor.g, 0, 255);\n const b2 = fitIntoBounds(backgroundColor.b, 0, 255);\n return {\n r: Math.round(((1 - a1) * r2) + (a1 * r1)),\n g: Math.round(((1 - a1) * g2) + (a1 * g1)),\n b: Math.round(((1 - a1) * b2) + (a1 * b1))\n };\n};\n/**\n * @hidden\n *\n * Returns the relative luminance.\n */\nconst getLuminance = (rgb) => {\n let a = [rgb.r, rgb.g, rgb.b].map(function (v) {\n v /= 255;\n return v <= 0.03928\n ? v / 12.92\n : Math.pow((v + 0.055) / 1.055, 2.4);\n });\n return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\n};\n/**\n * @hidden\n *\n * Returns the color contrast.\n */\nconst getContrast = (luminance1, luminance2) => {\n const brightest = Math.max(luminance1, luminance2);\n const darkest = Math.min(luminance1, luminance2);\n return (brightest + 0.05)\n / (darkest + 0.05);\n};\n/**\n * @hidden\n *\n * Returns the color contrast from two RGBA colors.\n */\nconst getContrastFromTwoRGBAs = (a, b) => {\n return getContrast(getLuminance(getRGBFromRGBA(a, b)), getLuminance(getRGBFromRGBA(b, { r: 0, g: 0, b: 0, a: 1 })));\n};\n\n// tslint:disable:max-line-length\n/**\n * @hidden\n */\nconst PALETTEPRESETS = {\n basic: {\n colors: '000000,7f7f7f,880015,ed1c24,ff7f27,fff200,22b14c,00a2e8,3f48cc,a349a4,ffffff,c3c3c3,b97a57,ffaec9,ffc90e,efe4b0,b5e61d,99d9ea,7092be,c8bfe7',\n columns: 10\n },\n office: {\n colors: 'ffffff, 000000, e6e6e6, 435569, 4371c4, ed7e32, a5a4a5, febf04, 5a9bd5, 71ae48, f2f2f3, 7f7f7f, d1cece, d5dde3, dae1f4, fce5d4, deeded, fff2cc, deeaf6, e1efd9, d7d8d8, 585959, aeabab, adbaca, b4c5e7, f6caac, dbdbdb, ffe498, bcd6ee, c5e0b2, bfbfc0, 3f3f3f, 767070, 8595b1, 8fabdb, f5b183, c9c8c9, fed965, 9bc4e5, a8d08d, a5a5a6, 262625, 393939, 334050, 2e5496, c45a11, 7b7b7a, bf9000, 2f75b5, 548235, 7f7f7f, 0b0c0c, 161616, 222a34, 203764, 843d0b, 525252, 7f6000, 1d4d79, 375623',\n columns: 10\n },\n apex: {\n colors: 'ffffff, 000000, c9c2d1, 69676d, ceb966, 9cb084, 6bb1c9, 6585cf, 7e6bc9, a379bb, f2f2f2, 7f7f7f, f4f2f5, e0e0e2, f5f1e0, ebefe6, e1eff4, e0e6f5, e5e1f4, ece4f1, d8d8d8, 595959, e9e6ec, c2c1c5, ebe3c1, d7dfcd, c3dfe9, c1ceeb, cbc3e9, dac9e3, bfbfbf, 3f3f3f, dedae3, a4a3a8, e1d5a3, c3cfb5, a6d0de, a2b5e2, b1a6de, c7aed6, a5a5a5, 262626, 9688a5, 4e4d51, ae9638, 758c5a, 3d8da9, 365bb0, 533da9, 7d4d99, 7f7f7f, 0c0c0c, 635672, 343336, 746425, 4e5d3c, 295e70, 243c75, 372970, 533366',\n columns: 10\n },\n austin: {\n colors: 'ffffff, 000000, caf278, 3e3d2d, 94c600, 71685a, ff6700, 909465, 956b43, fea022, f2f2f2, 7f7f7f, f4fce4, dddcd0, efffc0, e3e1dc, ffe0cb, e8e9df, ece1d6, feecd2, d8d8d8, 595959, e9f9c9, bbb9a1, dfff82, c8c3ba, ffc299, d2d4c0, dac3ad, fed9a6, bfbfbf, 3f3f3f, dff7ae, ada598, cfff43, ada598, ffa365, bcbfa1, c8a585, fec67a, a5a5a5, 262626, a9ea25, 2e2d21, 6f9400, 544e43, bf4d00, 6c6f4b, 6f5032, d77b00, 7f7f7f, 0c0c0c, 74a50f, 1f1e16, 4a6300, 38342d, 7f3300, 484a32, 4a3521, 8f5200',\n columns: 10\n },\n clarity: {\n colors: 'ffffff, 292934, f3f2dc, d2533c, 93a299, ad8f67, 726056, 4c5a6a, 808da0, 79463d, f2f2f2, e7e7ec, e7e5b9, f6dcd8, e9ecea, eee8e0, e4dedb, d8dde3, e5e8ec, e9d6d3, d8d8d8, c4c4d1, d5d185, edbab1, d3d9d6, ded2c2, c9beb8, b2bcc8, ccd1d9, d3aea7, bfbfbf, 8a8aa3, aca73b, e4978a, bec7c1, cdbba3, af9e94, 8c9bac, b2bac6, bd857c, a5a5a5, 56566e, 56531d, a43925, 6b7c72, 866b48, 554840, 39434f, 5c697b, 5a342d, 7f7f7f, 3b3b4b, 22210b, 6d2619, 47534c, 594730, 39302b, 262d35, 3d4652, 3c231e',\n columns: 10\n },\n slipstream: {\n colors: 'ffffff, 000000, b4dcfa, 212745, 4e67c8, 5eccf3, a7ea52, 5dceaf, ff8021, f14124, f2f2f2, 7f7f7f, 8bc9f7, c7cce4, dbe0f4, def4fc, edfadc, def5ef, ffe5d2, fcd9d3, d8d8d8, 595959, 4facf3, 909aca, b8c2e9, beeafa, dbf6b9, beebdf, ffcca6, f9b3a7, bfbfbf, 3f3f3f, 0d78c9, 5967af, 94a3de, 9ee0f7, caf297, 9de1cf, ffb279, f68d7b, a5a5a5, 262626, 063c64, 181d33, 31479f, 11b2eb, 81d319, 34ac8b, d85c00, c3260c, 7f7f7f, 0c0c0c, 021828, 101322, 202f6a, 0b769c, 568c11, 22725c, 903d00, 821908',\n columns: 10\n },\n metro: {\n colors: 'ffffff, 000000, d6ecff, 4e5b6f, 7fd13b, ea157a, feb80a, 00addc, 738ac8, 1ab39f, f2f2f2, 7f7f7f, a7d6ff, d9dde4, e5f5d7, fad0e4, fef0cd, c5f2ff, e2e7f4, c9f7f1, d8d8d8, 595959, 60b5ff, b3bcca, cbecb0, f6a1c9, fee29c, 8be6ff, c7d0e9, 94efe3, bfbfbf, 3f3f3f, 007dea, 8d9baf, b2e389, f272af, fed46b, 51d9ff, aab8de, 5fe7d5, a5a5a5, 262626, 003e75, 3a4453, 5ea226, af0f5b, c58c00, 0081a5, 425ea9, 138677, 7f7f7f, 0c0c0c, 00192e, 272d37, 3f6c19, 750a3d, 835d00, 00566e, 2c3f71, 0c594f',\n columns: 10\n },\n flow: {\n colors: 'ffffff, 000000, dbf5f9, 04617b, 0f6fc6, 009dd9, 0bd0d9, 10cf9b, 7cca62, a5c249, f2f2f2, 7f7f7f, b2e9f2, b4ecfc, c7e2fa, c4eeff, c9fafc, c9faed, e4f4df, edf2da, d8d8d8, 595959, 76d9e8, 6adafa, 90c6f6, 89deff, 93f5f9, 94f6db, cae9c0, dbe6b6, bfbfbf, 3f3f3f, 21b2c8, 20c8f7, 59a9f2, 4fceff, 5df0f6, 5ff2ca, b0dfa0, c9da91, a5a5a5, 262626, 105964, 02485c, 0b5394, 0075a2, 089ca2, 0b9b74, 54a838, 7e9532, 7f7f7f, 0c0c0c, 062328, 01303d, 073763, 004e6c, 05686c, 07674d, 387025, 546321',\n columns: 10\n },\n hardcover: {\n colors: 'ffffff, 000000, ece9c6, 895d1d, 873624, d6862d, d0be40, 877f6c, 972109, aeb795, f2f2f2, 7f7f7f, e1dca5, f2e0c6, f0d0c9, f6e6d5, f5f2d8, e7e5e1, fbc7bc, eef0e9, d8d8d8, 595959, d0c974, e6c28d, e2a293, eeceaa, ece5b2, cfccc3, f78f7a, dee2d4, bfbfbf, 3f3f3f, a29a36, daa454, d4735e, e6b681, e2d88c, b7b2a5, f35838, ced3bf, a5a5a5, 262626, 514d1b, 664515, 65281a, a2641f, a39428, 655f50, 711806, 879464, 7f7f7f, 0c0c0c, 201e0a, 442e0e, 431b11, 6c4315, 6d621a, 433f35, 4b1004, 5a6243',\n columns: 10\n },\n trek: {\n colors: 'ffffff, 000000, fbeec9, 4e3b30, f0a22e, a5644e, b58b80, c3986d, a19574, c17529, f2f2f2, 7f7f7f, f7e09e, e1d6cf, fcecd5, eddfda, f0e7e5, f3eae1, ece9e3, f5e3d1, d8d8d8, 595959, f3cc5f, c4ad9f, f9d9ab, dcc0b6, e1d0cc, e7d5c4, d9d4c7, ebc7a3, bfbfbf, 3f3f3f, d29f0f, a78470, f6c781, cba092, d2b9b2, dbc1a7, c6bfab, e1ac76, a5a5a5, 262626, 694f07, 3a2c24, c87d0e, 7b4b3a, 926255, a17242, 7b7153, 90571e, 7f7f7f, 0c0c0c, 2a1f03, 271d18, 855309, 523226, 614138, 6b4c2c, 524b37, 603a14',\n columns: 10\n },\n verve: {\n colors: 'ffffff, 000000, d2d2d2, 666666, ff388c, e40059, 9c007f, 68007f, 005bd3, 00349e, f2f2f2, 7f7f7f, bdbdbd, e0e0e0, ffd7e8, ffc6dc, ffb8f1, f1b2ff, c3dcff, b8cfff, d8d8d8, 595959, 9d9d9d, c1c1c1, ffafd1, ff8eba, ff71e4, e365ff, 87baff, 72a0ff, bfbfbf, 3f3f3f, 696969, a3a3a3, ff87ba, ff5597, ff2ad7, d519ff, 4b98ff, 2b71ff, a5a5a5, 262626, 343434, 4c4c4c, e90062, ab0042, 75005f, 4e005f, 00449e, 002676, 7f7f7f, 0c0c0c, 151515, 333333, 9b0041, 72002c, 4e003f, 34003f, 002d69, 00194f',\n columns: 10\n },\n monochrome: {\n colors: '000000, 1a1a1a, 333333, 4d4d4d, 666666, 808080, 999999, b3b3b3, cccccc, e6e6e6, f2f2f2, ffffff',\n columns: 12\n },\n accessible: {\n colors: 'black, grey, darkred, red, darkorange, gold, green, blue, darkblue, purple, white, darkgrey, saddlebrown, pink, orange, yellow, lightgreen, lightskyblue, lightblue, mediumpurple',\n columns: 10\n }\n};\n\n/**\n * @hidden\n */\nlet ColorPickerLocalizationService = class ColorPickerLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl) {\n super(prefix, messageService, _rtl);\n }\n};\nColorPickerLocalizationService.ɵfac = function ColorPickerLocalizationService_Factory(t) { return new (t || ColorPickerLocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(ɵngcc1.MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8)); };\nColorPickerLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ColorPickerLocalizationService, factory: function (t) { return ColorPickerLocalizationService.ɵfac(t); } });\nColorPickerLocalizationService = __decorate([\n __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean])\n], ColorPickerLocalizationService);\n\n/**\n * @hidden\n */\nlet ColorGradientLocalizationService = class ColorGradientLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl, colorPickerLocalization) {\n super(prefix, messageService, _rtl);\n this.colorPickerLocalization = colorPickerLocalization;\n }\n get(shortKey) {\n if (this.colorPickerLocalization) {\n return this.colorPickerLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n};\nColorGradientLocalizationService.ɵfac = function ColorGradientLocalizationService_Factory(t) { return new (t || ColorGradientLocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(ɵngcc1.MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8), ɵngcc0.ɵɵinject(ColorPickerLocalizationService, 8)); };\nColorGradientLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ColorGradientLocalizationService, factory: function (t) { return ColorGradientLocalizationService.ɵfac(t); } });\nColorGradientLocalizationService = __decorate([\n __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __param(3, Optional()), __param(3, Inject(ColorPickerLocalizationService)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean, ColorPickerLocalizationService])\n], ColorGradientLocalizationService);\n\n/**\n * @hidden\n */\nlet ColorInputComponent = class ColorInputComponent {\n constructor(localization, host, renderer) {\n this.localization = localization;\n this.host = host;\n this.renderer = renderer;\n /**\n * Sets whether the alpha slider will be shown.\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorInput.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorInput.\n */\n this.readonly = false;\n /**\n * Emits a parsed rgba string color.\n */\n this.valueChange = new EventEmitter();\n this.colorInputClass = true;\n /**\n * The rgba inputs values.\n */\n this.rgba = {};\n this.subscriptions = new Subscription();\n }\n /**\n * Indicates whether any of the inputs are focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n const activeElement = document.activeElement;\n return this.host.nativeElement.contains(activeElement);\n }\n /**\n * Indicates whether any of the rgba inputs have value.\n */\n get rgbaInputValid() {\n return Object.keys(this.rgba).every(key => isPresent(this.rgba[key]));\n }\n ngAfterViewInit() {\n this.initDomEvents();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n if (isPresent(changes.value) && !this.isFocused) {\n this.hex = parseColor$1(this.value, 'hex');\n this.rgba = getRGBA(this.value);\n this.rgba.a = parseColor$1(this.value, 'rgba') ? this.rgba.a : 1;\n }\n }\n handleRgbaValueChange() {\n const color = getColorFromRGBA(this.rgba);\n if (!this.rgbaInputValid || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(this.value);\n this.hex = parseColor$1(color, 'hex');\n this.valueChange.emit(color);\n }\n handleHexValueChange(hex) {\n this.hex = hex;\n const color = parseColor$1(hex, 'rgba');\n if (!isPresent(color) || color === this.value) {\n return;\n }\n this.value = color;\n this.rgba = getRGBA(color);\n this.valueChange.emit(color);\n }\n handleRgbaInputBlur() {\n if (!this.rgbaInputValid) {\n this.rgba = getRGBA(this.value);\n }\n }\n handleHexInputBlur() {\n this.hex = parseColor$1(this.value, 'hex');\n }\n textFor(key) {\n return this.localization.get(key);\n }\n toggleFormatView() {\n this.formatView = this.formatView === 'hex' ? 'rgba' : 'hex';\n }\n initDomEvents() {\n if (!this.host) {\n return;\n }\n this.subscriptions.add(this.renderer.listen(this.toggleFormatButton.nativeElement, 'click', () => this.toggleFormatView()));\n }\n};\nColorInputComponent.ɵfac = function ColorInputComponent_Factory(t) { return new (t || ColorInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nColorInputComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorInputComponent, selectors: [[\"kendo-colorinput\"]], viewQuery: function ColorInputComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c46, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c47, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.opacityInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toggleFormatButton = _t.first);\n } }, hostVars: 4, hostBindings: function ColorInputComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-colorgradient-inputs\", ctx.colorInputClass)(\"k-hstack\", ctx.colorInputClass);\n } }, inputs: { opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\", value: \"value\", formatView: \"formatView\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 6, vars: 2, consts: [[1, \"k-vstack\"], [1, \"k-colorgradient-toggle-mode\", \"k-button\", \"k-icon-button\", \"k-flat\"], [\"toggleFormatButton\", \"\"], [1, \"k-button-icon\", \"k-icon\", \"k-i-arrows-kpi\"], [\"class\", \"k-textbox k-hex-value\", 3, \"disabled\", \"readonly\", \"value\", \"placeholder\", \"blur\", \"input\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"k-textbox\", \"k-hex-value\", 3, \"disabled\", \"readonly\", \"value\", \"placeholder\", \"blur\", \"input\"], [\"hexInput\", \"\"], [3, \"disabled\", \"readonly\", \"min\", \"max\", \"placeholder\", \"value\", \"autoCorrect\", \"spinners\", \"format\", \"decimals\", \"valueChange\", \"blur\"], [\"red\", \"\"], [1, \"k-colorgradient-input-label\", 3, \"for\"], [\"green\", \"\"], [\"blue\", \"\"], [\"class\", \"k-vstack\", 4, \"ngIf\"], [3, \"disabled\", \"readonly\", \"min\", \"max\", \"placeholder\", \"value\", \"autoCorrect\", \"spinners\", \"step\", \"format\", \"decimals\", \"valueChange\", \"blur\"], [\"opacityInput\", \"\", \"alpha\", \"\"]], template: function ColorInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0)(1, \"button\", 1, 2);\n ɵngcc0.ɵɵelement(3, \"span\", 3);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(4, ColorInputComponent_input_4_Template, 2, 4, \"input\", 4);\n ɵngcc0.ɵɵtemplate(5, ColorInputComponent_ng_container_5_Template, 17, 34, \"ng-container\", 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.formatView === \"hex\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.formatView === \"rgba\");\n } }, directives: [ɵngcc3.NgIf, NumericTextBoxComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorInputComponent.prototype, \"formatView\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorInputComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorInputComponent.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorInputComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorInputComponent.prototype, \"readonly\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorInputComponent.prototype, \"valueChange\", void 0);\n__decorate([\n HostBinding('class.k-colorgradient-inputs'),\n HostBinding('class.k-hstack'),\n __metadata(\"design:type\", Boolean)\n], ColorInputComponent.prototype, \"colorInputClass\", void 0);\n__decorate([\n ViewChild('opacityInput', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ColorInputComponent.prototype, \"opacityInput\", void 0);\n__decorate([\n ViewChild('toggleFormatButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ColorInputComponent.prototype, \"toggleFormatButton\", void 0);\nColorInputComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n ElementRef,\n Renderer2])\n], ColorInputComponent);\n\n/**\n * @hidden\n */\nconst DEFAULT_OUTPUT_FORMAT = 'rgba';\n/**\n * @hidden\n */\nconst DEFAULT_GRADIENT_BACKGROUND_COLOR = 'rgba(255, 0, 0, 1)';\n/**\n * @hidden\n */\nconst DRAGHANDLE_MOVE_SPEED = 5;\n/**\n * @hidden\n */\nconst AAA_RATIO = 7.0;\n/**\n * @hidden\n */\nconst AA_RATIO = 4.5;\n\nvar ColorGradientComponent_1;\nlet serial = 0;\n/**\n * The ColorGradient component enables smooth color transitions and provides options for selecting specific colors over the drag handle.\n * The ColorGradient is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nlet ColorGradientComponent = ColorGradientComponent_1 = class ColorGradientComponent {\n constructor(host, ngZone, renderer, cdr, localizationService) {\n this.host = host;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.cdr = cdr;\n this.localizationService = localizationService;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.id = `k-colorgradient-${serial++}`;\n /**\n * Defines whether the alpha slider will be displayed.\n */\n this.opacity = true;\n /**\n * Sets the disabled state of the ColorGradient.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorGradient.\n */\n this.readonly = false;\n /**\n * Specifies whether the ColorGradient should display a 'Clear color' button.\n */\n this.clearButton = false;\n /**\n * Determines the delay time (in milliseconds) before the value is changed on handle drag. A value of 0 indicates no delay.\n *\n * @default 0\n */\n this.delay = 0;\n /**\n * Fires each time the user selects a new color.\n */\n this.valueChange = new EventEmitter();\n /**\n * @hidden\n */\n this.backgroundColor = DEFAULT_GRADIENT_BACKGROUND_COLOR;\n /**\n * @hidden\n *\n * Represents the currently selected `hue`, `saturation`, `value`, and `alpha` values.\n * The values are initially set in `ngOnInit` or in `ngOnChanges` and are\n * updated on moving the drag handle or the sliders.\n */\n this.hsva = {};\n /**\n * Specifies the output format of the ColorGradientComponent.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `rgba`\n * * `hex`\n */\n this.format = DEFAULT_OUTPUT_FORMAT;\n this._tabindex = 0;\n this.listeners = [];\n this.updateValues = new Subject();\n this.notifyNgChanged = () => { };\n this.notifyNgTouched = () => { };\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * @hidden\n */\n get readonlyAttribute() {\n return this.readonly;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get hostTabindex() {\n return this.tabindex;\n }\n /**\n * @hidden\n */\n get gradientId() {\n return this.id;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Indicates whether the ColorGradient or any of its content is focused.\n */\n get isFocused() {\n if (!(isDocumentAvailable() && isPresent(this.host))) {\n return false;\n }\n return this.host.nativeElement === document.activeElement || this.host.nativeElement.contains(document.activeElement);\n }\n /**\n * @hidden\n */\n get alphaSliderValue() {\n // setting the initial value to undefined to force the slider to recalculate the height of the slider track on the next cdr run\n if (!(isPresent(this.hsva) && isPresent(this.hsva.a))) {\n return;\n }\n return this.hsva.a * 100;\n }\n get gradientRect() {\n return this.gradientWrapper.nativeElement.getBoundingClientRect();\n }\n /**\n * @hidden\n */\n get contrastToolVisible() {\n return typeof this.contrastTool === 'string' && this.contrastTool !== '';\n }\n ngAfterViewInit() {\n this.updateUI();\n this.cdr.detectChanges();\n this.addEventListeners();\n this.subscribeChanges();\n }\n ngOnChanges(changes) {\n if (isChanged('value', changes) && !this.isFocused) {\n this.updateUI();\n }\n if (isChanged('delay', changes)) {\n this.unsubscribeChanges();\n this.subscribeChanges();\n }\n }\n ngOnDestroy() {\n this.listeners.forEach(removeListener => removeListener());\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n this.unsubscribeChanges();\n }\n /**\n * Focuses the component.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n reset() {\n this.handleValueChange(undefined);\n this.updateUI();\n this.host.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleDragPress(args) {\n if (this.disabled || this.readonly || !isPresent(args.originalEvent)) {\n return;\n }\n this.focus();\n args.originalEvent.preventDefault();\n }\n /**\n * @hidden\n */\n onHandleDrag(args) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.addClass(this.gradientWrapper.nativeElement, 'k-dragging');\n this.changePosition(args);\n }\n /**\n * @hidden\n */\n onHandleRelease() {\n if (this.disabled || this.readonly) {\n return;\n }\n this.renderer.removeClass(this.gradientWrapper.nativeElement, 'k-dragging');\n this.handleValueChange(getColorFromHSV(this.hsva));\n }\n /**\n * @hidden\n */\n onKeyboardAction(args) {\n if (this.disabled || this.readonly) {\n return;\n }\n if (args.key && args.key.indexOf('Arrow') !== -1) {\n args.preventDefault();\n const dragHandleElement = this.gradientDragHandle.nativeElement;\n this.renderer.addClass(this.gradientWrapper.nativeElement, 'k-dragging');\n let keyboardMoveX = 0;\n let keyboardMoveY = 0;\n switch (args.key) {\n case 'ArrowRight':\n keyboardMoveX = DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowLeft':\n keyboardMoveX = -DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowUp':\n keyboardMoveY = -DRAGHANDLE_MOVE_SPEED;\n break;\n case 'ArrowDown':\n keyboardMoveY = DRAGHANDLE_MOVE_SPEED;\n break;\n default: break;\n }\n const newY = parseInt(dragHandleElement.style.top, 10) + keyboardMoveY;\n const newX = parseInt(dragHandleElement.style.left, 10) + keyboardMoveX;\n this.renderer.setStyle(dragHandleElement, 'top', `${newY}px`);\n this.renderer.setStyle(dragHandleElement, 'left', `${newX}px`);\n this.ngZone.run(() => this.moveDragHandle(newX, newY));\n }\n }\n /**\n * @hidden\n */\n changePosition(position) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.gradientDragHandle.nativeElement.focus();\n const newX = position.clientX - this.gradientRect.left;\n const newY = position.clientY - this.gradientRect.top;\n this.ngZone.run(() => this.moveDragHandle(newX, newY));\n }\n /**\n * @hidden\n */\n handleHueSliderChange(hue) {\n this.handleValueChange(getColorFromHSV(this.hsva));\n this.backgroundColor = getColorFromHue(hue);\n this.setAlphaSliderBackground(this.backgroundColor);\n }\n /**\n * @hidden\n */\n handleAlphaSliderChange(alpha) {\n this.hsva.a = alpha / 100;\n this.handleValueChange(getColorFromHSV(this.hsva));\n }\n /**\n * @hidden\n */\n handleInputsValueChange(color) {\n const parsed = parseColor$1(color, this.format);\n if (this.value !== parsed) {\n this.handleValueChange(parsed);\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n if (isPresent(this.gradientWrapper)) {\n this.updateUI();\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n get colorGradientHandleTitle() {\n return this.localizationService.get('colorGradientHandle');\n }\n /**\n * @hidden\n */\n get colorGradientHandleAriaLabel() {\n const parsed = parseColor$1(this.value, this.format);\n return `${this.value ? parsed : this.localizationService.get('colorGradientHandle')}`;\n }\n /**\n * @hidden\n */\n get hueSliderTitle() {\n return this.localizationService.get('hueSliderHandle');\n }\n /**\n * @hidden\n */\n get opacitySliderTitle() {\n return this.localizationService.get('opacitySliderHandle');\n }\n /**\n * @hidden\n */\n get clearButtonTitle() {\n return this.localizationService.get('clearButton');\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n moveDragHandle(positionX, positionY) {\n const top = fitIntoBounds(positionY, 0, this.gradientRect.height);\n const left = fitIntoBounds(positionX, 0, this.gradientRect.width);\n this.setDragHandleElementPosition(top, left);\n this.hsva.s = left / this.gradientRect.width;\n this.hsva.v = 1 - top / this.gradientRect.height;\n this.updateValues.next(getColorFromHSV(this.hsva));\n this.setAlphaSliderBackground(getColorFromHSV(Object.assign({}, this.hsva, { a: 1 })));\n }\n updateUI() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.hsva = this.value ? getHSV(this.value) : { h: 0, s: 0, v: 1, a: 1 };\n const top = (1 - this.hsva.v) * this.gradientRect.height;\n const left = this.hsva.s * this.gradientRect.width;\n this.setDragHandleElementPosition(top, left);\n this.backgroundColor = getColorFromHue(this.hsva.h);\n this.setAlphaSliderBackground(this.backgroundColor);\n this.setHostElementAriaLabel();\n }\n handleValueChange(color) {\n if (this.value === color) {\n return;\n }\n this.value = color;\n this.valueChange.emit(color);\n this.notifyNgChanged(color);\n this.setHostElementAriaLabel();\n }\n setDragHandleElementPosition(top, left) {\n const dragHandle = this.gradientDragHandle.nativeElement;\n this.renderer.setStyle(dragHandle, 'top', `${top}px`);\n this.renderer.setStyle(dragHandle, 'left', `${left}px`);\n }\n setAlphaSliderBackground(backgroundColor) {\n if (!isPresent(this.alphaSlider)) {\n return;\n }\n const sliderTrack = this.alphaSlider.track.nativeElement;\n this.renderer.setStyle(sliderTrack, 'background', `linear-gradient(to top, transparent, ${backgroundColor})`);\n }\n setHostElementAriaLabel() {\n const parsed = parseColor$1(this.value, this.format);\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', `${this.value ? parsed : this.localizationService.get('colorGradientNoColor')}`);\n }\n addEventListeners() {\n this.ngZone.runOutsideAngular(() => {\n const focusOutListener = this.renderer.listen(this.host.nativeElement, 'focusout', (event) => {\n if (!containsFocus(this.host.nativeElement, event.relatedTarget) && isUntouched(this.host)) {\n this.ngZone.run(() => this.notifyNgTouched());\n }\n });\n const keydownListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'keydown', (event) => {\n this.onKeyboardAction(event);\n });\n const keyupListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'keyup', () => {\n this.renderer.removeClass(this.gradientWrapper.nativeElement, 'k-dragging');\n if (!this.readonly && !this.disabled) {\n this.ngZone.run(() => this.handleValueChange(getColorFromHSV(this.hsva)));\n }\n });\n const dragHandleFocusInListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'focusin', () => {\n this.renderer.addClass(this.gradientDragHandle.nativeElement, 'k-state-focus');\n });\n const dragHandleFocusOutListener = this.renderer.listen(this.gradientDragHandle.nativeElement, 'focusout', () => {\n this.renderer.removeClass(this.gradientDragHandle.nativeElement, 'k-state-focus');\n });\n this.listeners.push(focusOutListener, keydownListener, keyupListener, dragHandleFocusInListener, dragHandleFocusOutListener);\n });\n }\n subscribeChanges() {\n this.changeRequestsSubscription = this.updateValues.pipe(throttleTime(this.delay)).subscribe(value => {\n this.handleValueChange(value);\n });\n }\n unsubscribeChanges() {\n if (this.changeRequestsSubscription) {\n this.changeRequestsSubscription.unsubscribe();\n }\n }\n};\nColorGradientComponent.ɵfac = function ColorGradientComponent_Factory(t) { return new (t || ColorGradientComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorGradientComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorGradientComponent, selectors: [[\"kendo-colorgradient\"]], viewQuery: function ColorGradientComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c48, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c49, 5);\n ɵngcc0.ɵɵviewQuery(_c50, 5);\n ɵngcc0.ɵɵviewQuery(_c51, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.gradientDragHandle = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.inputs = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.alphaSlider = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.gradientWrapper = _t.first);\n } }, hostVars: 8, hostBindings: function ColorGradientComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"aria-readonly\", ctx.readonlyAttribute)(\"tabindex\", ctx.hostTabindex)(\"id\", ctx.gradientId);\n ɵngcc0.ɵɵclassProp(\"k-colorgradient\", ctx.hostClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { id: \"id\", opacity: \"opacity\", disabled: \"disabled\", readonly: \"readonly\", clearButton: \"clearButton\", delay: \"delay\", format: \"format\", value: \"value\", tabindex: \"tabindex\", contrastTool: \"contrastTool\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent_1)\n },\n ColorGradientLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorGradientLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 29, consts: function () { let i18n_52; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The aria-label applied to the ColorGradient component when the value is empty.\n * @meaning kendo.colorgradient.colorGradientNoColor\n */\n const MSG_EXTERNAL_3796155240301823948$$DIST_FESM2015_INDEX_JS_53 = goog.getMsg(\"Colorgradient no color chosen\");\n i18n_52 = MSG_EXTERNAL_3796155240301823948$$DIST_FESM2015_INDEX_JS_53;\n }\n else {\n i18n_52 = $localize `:kendo.colorgradient.colorGradientNoColor|The aria-label applied to the ColorGradient component when the value is empty.␟136a6a537523c480df0e58c17cc6d4c2dda8e626␟3796155240301823948:Colorgradient no color chosen`;\n } let i18n_54; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the gradient color drag handle chooser.\n * @meaning kendo.colorgradient.colorGradientHandle\n */\n const MSG_EXTERNAL_8537406358423916512$$DIST_FESM2015_INDEX_JS_55 = goog.getMsg(\"Choose color\");\n i18n_54 = MSG_EXTERNAL_8537406358423916512$$DIST_FESM2015_INDEX_JS_55;\n }\n else {\n i18n_54 = $localize `:kendo.colorgradient.colorGradientHandle|The title for the gradient color drag handle chooser.␟462ab46551fd64dca63ba38254e46a52aeb05205␟8537406358423916512:Choose color`;\n } let i18n_56; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the clear button.\n * @meaning kendo.colorgradient.clearButton\n */\n const MSG_EXTERNAL_7605097752673642325$$DIST_FESM2015_INDEX_JS_57 = goog.getMsg(\"Clear value\");\n i18n_56 = MSG_EXTERNAL_7605097752673642325$$DIST_FESM2015_INDEX_JS_57;\n }\n else {\n i18n_56 = $localize `:kendo.colorgradient.clearButton|The title for the clear button.␟6dc40c4a4ff302d1fe29e7bf9eadf1440b4654cf␟7605097752673642325:Clear value`;\n } let i18n_58; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the hue slider handle.\n * @meaning kendo.colorgradient.hueSliderHandle\n */\n const MSG_EXTERNAL_8568799441668530127$$DIST_FESM2015_INDEX_JS_59 = goog.getMsg(\"Set hue\");\n i18n_58 = MSG_EXTERNAL_8568799441668530127$$DIST_FESM2015_INDEX_JS_59;\n }\n else {\n i18n_58 = $localize `:kendo.colorgradient.hueSliderHandle|The title for the hue slider handle.␟22a98afddf46223dce8a3e122f4fe84ca76488b9␟8568799441668530127:Set hue`;\n } let i18n_60; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the opacity slider handle.\n * @meaning kendo.colorgradient.opacitySliderHandle\n */\n const MSG_EXTERNAL_2665102430468067218$$DIST_FESM2015_INDEX_JS_61 = goog.getMsg(\"Set opacity\");\n i18n_60 = MSG_EXTERNAL_2665102430468067218$$DIST_FESM2015_INDEX_JS_61;\n }\n else {\n i18n_60 = $localize `:kendo.colorgradient.opacitySliderHandle|The title for the opacity slider handle.␟ad3087c7bf139a41bf6a7fc454f4e857492c9d22␟2665102430468067218:Set opacity`;\n } let i18n_62; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the HEX color input.\n * @meaning kendo.colorgradient.hexInputPlaceholder\n */\n const MSG_EXTERNAL_1551996638068326100$$DIST_FESM2015_INDEX_JS_63 = goog.getMsg(\"HEX Color\");\n i18n_62 = MSG_EXTERNAL_1551996638068326100$$DIST_FESM2015_INDEX_JS_63;\n }\n else {\n i18n_62 = $localize `:kendo.colorgradient.hexInputPlaceholder|The placeholder for the HEX color input.␟0223abe5dc060383b58df6d9f83dc98b08ba8e2b␟1551996638068326100:HEX Color`;\n } let i18n_64; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the red color input.\n * @meaning kendo.colorgradient.redInputPlaceholder\n */\n const MSG_EXTERNAL_865798719701025148$$DIST_FESM2015_INDEX_JS_65 = goog.getMsg(\"Red\");\n i18n_64 = MSG_EXTERNAL_865798719701025148$$DIST_FESM2015_INDEX_JS_65;\n }\n else {\n i18n_64 = $localize `:kendo.colorgradient.redInputPlaceholder|The placeholder for the red color input.␟ec8e6ab816ff2b3686ad6594068d26e3c72e49d3␟865798719701025148:Red`;\n } let i18n_66; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the green color input.\n * @meaning kendo.colorgradient.greenInputPlaceholder\n */\n const MSG_EXTERNAL_7119549617208224702$$DIST_FESM2015_INDEX_JS_67 = goog.getMsg(\"Green\");\n i18n_66 = MSG_EXTERNAL_7119549617208224702$$DIST_FESM2015_INDEX_JS_67;\n }\n else {\n i18n_66 = $localize `:kendo.colorgradient.greenInputPlaceholder|The placeholder for the green color input.␟50e5480cded07f92356e43143800db6b44dce024␟7119549617208224702:Green`;\n } let i18n_68; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the blue color input.\n * @meaning kendo.colorgradient.blueInputPlaceholder\n */\n const MSG_EXTERNAL_8925567330503382499$$DIST_FESM2015_INDEX_JS_69 = goog.getMsg(\"Blue\");\n i18n_68 = MSG_EXTERNAL_8925567330503382499$$DIST_FESM2015_INDEX_JS_69;\n }\n else {\n i18n_68 = $localize `:kendo.colorgradient.blueInputPlaceholder|The placeholder for the blue color input.␟f07b6e271e4cb957c512029298715c8f4970eca8␟8925567330503382499:Blue`;\n } let i18n_70; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the alpha input.\n * @meaning kendo.colorgradient.alphaInputPlaceholder\n */\n const MSG_EXTERNAL_6303797935938211585$$DIST_FESM2015_INDEX_JS_71 = goog.getMsg(\"Alpha\");\n i18n_70 = MSG_EXTERNAL_6303797935938211585$$DIST_FESM2015_INDEX_JS_71;\n }\n else {\n i18n_70 = $localize `:kendo.colorgradient.alphaInputPlaceholder|The placeholder for the alpha input.␟122a5434fa0f1ee3ef735e859c1db1606542c995␟6303797935938211585:Alpha`;\n } let i18n_72; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The pass message for the contrast tool.\n * @meaning kendo.colorgradient.passContrast\n */\n const MSG_EXTERNAL_200461871469242251$$DIST_FESM2015_INDEX_JS_73 = goog.getMsg(\"Pass\");\n i18n_72 = MSG_EXTERNAL_200461871469242251$$DIST_FESM2015_INDEX_JS_73;\n }\n else {\n i18n_72 = $localize `:kendo.colorgradient.passContrast|The pass message for the contrast tool.␟ec167f04d318f2b1f1edbca6318a74fddf436c76␟200461871469242251:Pass`;\n } let i18n_74; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The fail message for the contrast tool.\n * @meaning kendo.colorgradient.failContrast\n */\n const MSG_EXTERNAL_2780397365913372676$$DIST_FESM2015_INDEX_JS_75 = goog.getMsg(\"Fail\");\n i18n_74 = MSG_EXTERNAL_2780397365913372676$$DIST_FESM2015_INDEX_JS_75;\n }\n else {\n i18n_74 = $localize `:kendo.colorgradient.failContrast|The fail message for the contrast tool.␟79015428999551ebe50f69bb5a1ebd31de4c3bdf␟2780397365913372676:Fail`;\n } let i18n_76; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The contrast ratio message for the contrast tool.\n * @meaning kendo.colorgradient.contrastRatio\n */\n const MSG_EXTERNAL_713630549826115578$$DIST_FESM2015_INDEX_JS_77 = goog.getMsg(\"Contrast ratio\");\n i18n_76 = MSG_EXTERNAL_713630549826115578$$DIST_FESM2015_INDEX_JS_77;\n }\n else {\n i18n_76 = $localize `:kendo.colorgradient.contrastRatio|The contrast ratio message for the contrast tool.␟408650dd85473f406520edd1d60c8df0c475a8fa␟713630549826115578:Contrast ratio`;\n } return [[\"kendoColorGradientLocalizedMessages\", \"\", \"colorGradientNoColor\", i18n_52, \"colorGradientHandle\", i18n_54, \"clearButton\", i18n_56, \"hueSliderHandle\", i18n_58, \"opacitySliderHandle\", i18n_60, \"hexInputPlaceholder\", i18n_62, \"redInputPlaceholder\", i18n_64, \"greenInputPlaceholder\", i18n_66, \"blueInputPlaceholder\", i18n_68, \"alphaInputPlaceholder\", i18n_70, \"passContrast\", i18n_72, \"failContrast\", i18n_74, \"contrastRatio\", i18n_76], [1, \"k-colorgradient-canvas\", \"k-hstack\"], [1, \"k-hsv-rectangle\"], [\"kendoDraggable\", \"\", 1, \"k-hsv-gradient\", 3, \"click\", \"kendoPress\", \"kendoDrag\", \"kendoRelease\"], [\"gradientWrapper\", \"\"], [\"tabindex\", \"0\", 1, \"k-hsv-draghandle\", \"k-draghandle\"], [\"gradientDragHandle\", \"\"], [\"class\", \"k-clear-color k-button k-flat k-button-icon\", \"tabindex\", \"0\", 3, \"click\", \"keydown.enter\", \"keydown.space\", 4, \"ngIf\"], [1, \"k-hue-slider\", \"k-colorgradient-slider\", 3, \"ngClass\", \"dragHandleTitle\", \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\"], [\"class\", \"k-alpha-slider k-colorgradient-slider\", 3, \"ngClass\", \"dragHandleTitle\", \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"opacity\", \"formatView\", \"value\", \"disabled\", \"readonly\", \"valueChange\"], [\"inputs\", \"\"], [\"class\", \"k-colorgradient-color-contrast k-vbox\", \"kendoContrastTool\", \"\", 3, \"value\", \"ratio\", 4, \"ngIf\"], [\"tabindex\", \"0\", 1, \"k-clear-color\", \"k-button\", \"k-flat\", \"k-button-icon\", 3, \"click\", \"keydown.enter\", \"keydown.space\"], [1, \"k-icon\", \"k-i-reset-color\"], [1, \"k-alpha-slider\", \"k-colorgradient-slider\", 3, \"ngClass\", \"dragHandleTitle\", \"disabled\", \"readonly\", \"showButtons\", \"tickPlacement\", \"vertical\", \"min\", \"max\", \"smallStep\", \"largeStep\", \"value\", \"valueChange\"], [\"alphaSlider\", \"\"], [\"kendoContrastTool\", \"\", 1, \"k-colorgradient-color-contrast\", \"k-vbox\", 3, \"value\", \"ratio\"]]; }, template: function ColorGradientComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1)(2, \"div\", 2)(3, \"div\", 3, 4);\n ɵngcc0.ɵɵlistener(\"click\", function ColorGradientComponent_Template_div_click_3_listener($event) { return ctx.changePosition($event); })(\"kendoPress\", function ColorGradientComponent_Template_div_kendoPress_3_listener($event) { return ctx.handleDragPress($event); })(\"kendoDrag\", function ColorGradientComponent_Template_div_kendoDrag_3_listener($event) { return ctx.onHandleDrag($event); })(\"kendoRelease\", function ColorGradientComponent_Template_div_kendoRelease_3_listener() { return ctx.onHandleRelease(); });\n ɵngcc0.ɵɵelement(5, \"div\", 5, 6);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(7, \"div\");\n ɵngcc0.ɵɵtemplate(8, ColorGradientComponent_span_8_Template, 2, 2, \"span\", 7);\n ɵngcc0.ɵɵelementStart(9, \"kendo-slider\", 8);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorGradientComponent_Template_kendo_slider_valueChange_9_listener($event) { return ctx.hsva.h = $event; })(\"valueChange\", function ColorGradientComponent_Template_kendo_slider_valueChange_9_listener($event) { return ctx.handleHueSliderChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(10, ColorGradientComponent_kendo_slider_10_Template, 2, 14, \"kendo-slider\", 9);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementStart(11, \"kendo-colorinput\", 10, 11);\n ɵngcc0.ɵɵlistener(\"valueChange\", function ColorGradientComponent_Template_kendo_colorinput_valueChange_11_listener($event) { return ctx.handleInputsValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(13, ColorGradientComponent_div_13_Template, 1, 2, \"div\", 12);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"background\", ctx.backgroundColor);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵattribute(\"title\", ctx.colorGradientHandleTitle)(\"aria-label\", ctx.colorGradientHandleAriaLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassMapInterpolate1(\"k-hsv-controls k-hstack \", ctx.clearButton ? \"k-sliders-wrap-clearable\" : \"\", \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.clearButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(27, _c78, ctx.clearButton))(\"dragHandleTitle\", ctx.hueSliderTitle)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"showButtons\", false)(\"tickPlacement\", \"none\")(\"vertical\", true)(\"min\", 0)(\"max\", 360)(\"smallStep\", 5)(\"largeStep\", 10)(\"value\", ctx.hsva.h);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.opacity && ctx.format === \"rgba\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"opacity\", ctx.opacity)(\"formatView\", ctx.format)(\"value\", ctx.value)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contrastToolVisible);\n } }, directives: function () { return [LocalizedColorPickerMessagesDirective, ɵngcc2.DraggableDirective, ɵngcc3.NgIf, SliderComponent, ɵngcc3.NgClass, ColorInputComponent, ContrastComponent]; }, styles: [\".k-clear-color[_ngcontent-%COMP%] {\\n position: absolute;\\n left: 50%;\\n transform: translateX(-50%);\\n }\\n .k-align-self-end[_ngcontent-%COMP%] {\\n height: 140px;\\n }\"] });\n__decorate([\n HostBinding('class.k-colorgradient'),\n __metadata(\"design:type\", Boolean)\n], ColorGradientComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('attr.aria-readonly'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ColorGradientComponent.prototype, \"readonlyAttribute\", null);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ColorGradientComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [])\n], ColorGradientComponent.prototype, \"hostTabindex\", null);\n__decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ColorGradientComponent.prototype, \"gradientId\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorGradientComponent.prototype, \"id\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], ColorGradientComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorGradientComponent.prototype, \"opacity\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorGradientComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorGradientComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorGradientComponent.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ColorGradientComponent.prototype, \"delay\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ColorGradientComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorGradientComponent.prototype, \"contrastTool\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ColorGradientComponent.prototype, \"tabindex\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorGradientComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorGradientComponent.prototype, \"format\", void 0);\n__decorate([\n ViewChild('gradientDragHandle', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ColorGradientComponent.prototype, \"gradientDragHandle\", void 0);\n__decorate([\n ViewChild('inputs', { static: false }),\n __metadata(\"design:type\", ColorInputComponent)\n], ColorGradientComponent.prototype, \"inputs\", void 0);\n__decorate([\n ViewChild('alphaSlider', { static: false }),\n __metadata(\"design:type\", SliderComponent)\n], ColorGradientComponent.prototype, \"alphaSlider\", void 0);\n__decorate([\n ViewChild('gradientWrapper', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ColorGradientComponent.prototype, \"gradientWrapper\", void 0);\nColorGradientComponent = ColorGradientComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone,\n Renderer2,\n ChangeDetectorRef,\n LocalizationService])\n], ColorGradientComponent);\n\nvar ColorPickerComponent_1;\nconst DEFAULT_PRESET = 'office';\nconst DEFAULT_ACCESSIBLE_PRESET = 'accessible';\nlet serial$1 = 0;\n/**\n * Represents the [Kendo UI ColorPicker component for Angular]({% slug overview_colorpicker %}).\n * Designed to replace the `` HTML5 tag which is not widely supported in browsers.\n */\nlet ColorPickerComponent = ColorPickerComponent_1 = class ColorPickerComponent {\n constructor(popupService, cdr, localizationService, ngZone) {\n this.popupService = popupService;\n this.cdr = cdr;\n this.localizationService = localizationService;\n this.ngZone = ngZone;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focusableId = `k-colorpicker-${serial$1++}`;\n /**\n * Sets what view the ColorPicker will render in the popup.\n */\n this.view = 'gradient';\n /**\n * Sets the read-only state of the ColorPicker.\n */\n this.readonly = false;\n /**\n * Sets the disabled state of the ColorPicker.\n */\n this.disabled = false;\n /**\n * Specifies the output format of the ColorPicker.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * If the `gradient` view is used with the `opacity` option set to true, this setting will be ignored and `rgba` will be used instead.\n *\n * The supported values are:\n * * `rgba` (default)\n * * `hex`\n * * [name](https://www.w3.org/wiki/CSS/Properties/color/keywords)\n */\n this.format = 'rgba';\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel it, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel it, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time ColorPicker is focused.\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the ColorPicker is blurred.\n */\n this.onBlur = new EventEmitter();\n /**\n * Fires each time the left side of the ColorPicker wrapper is clicked.\n * The event is triggered regardless of whether a ColorPicker icon is set or not.\n *\n * The [ActiveColorClickEvent]({% slug api_inputs_activecolorclickevent %}) event provides the option to prevent the popup opening.\n */\n this.activeColorClick = new EventEmitter();\n this._tabindex = 0;\n this._popupSettings = { animate: true };\n this._paletteSettings = {};\n this._gradientSettings = { opacity: true, clearButton: false, delay: 0 };\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n validatePackage(packageMetadata);\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Configures the popup of the ColorPicker.\n */\n set popupSettings(value) {\n this._popupSettings = Object.assign(this._popupSettings, value);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Configures the palette that is displayed in the ColorPicker popup.\n */\n set paletteSettings(value) {\n this._paletteSettings = Object.assign(this._paletteSettings, value);\n }\n get paletteSettings() {\n return this._paletteSettings;\n }\n /**\n * Configures the gradient that is displayed in the ColorPicker popup.\n */\n set gradientSettings(value) {\n this._gradientSettings = Object.assign(this._gradientSettings, value);\n }\n get gradientSettings() {\n return this._gradientSettings;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * Indicates whether the ColorPicker popup is open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * @hidden\n */\n get iconStyles() {\n if (this.iconClass) {\n return this.iconClass;\n }\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n }\n ngOnInit() {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET : DEFAULT_ACCESSIBLE_PRESET;\n const settingsPalette = this._paletteSettings.palette;\n const presetColumns = typeof settingsPalette === 'string' && PALETTEPRESETS[settingsPalette] ?\n PALETTEPRESETS[settingsPalette].columns :\n undefined;\n this._paletteSettings = {\n palette: settingsPalette || defaultPreset,\n tileSize: this._paletteSettings.tileSize || 24,\n columns: this._paletteSettings.columns || presetColumns || 10\n };\n }\n ngOnChanges(changes) {\n if (changes.format && changes.format.currentValue === 'name') {\n this.view = 'palette';\n }\n if (this.view === 'gradient' && this.gradientSettings.opacity) {\n this.format = 'rgba';\n this.value = parseColor$1(this.value, this.format);\n }\n }\n ngOnDestroy() {\n this.closePopup();\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n handleWrapperClick() {\n this.toggleWithEvents(!this.isOpen);\n this.focus();\n }\n /**\n * @hidden\n */\n handleActiveColorClick() {\n this.focus();\n const event = new ActiveColorClickEvent(this.value);\n this.activeColorClick.emit(event);\n if (!event.isOpenPrevented() || this.isOpen) {\n this.handleWrapperClick();\n }\n }\n /**\n * Focuses the wrapper of the ColorPicker.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n this.wrapper.nativeElement.focus();\n }\n /**\n * @hidden\n */\n handleWrapperFocus() {\n if (isPresent(this.palette)) {\n this.palette.nativeElement.focus();\n }\n if (this.isFocused) {\n return;\n }\n this.isFocused = true;\n this.onFocus.emit();\n }\n /**\n * Blurs the ColorPicker.\n */\n blur() {\n this.wrapper.nativeElement.blur();\n }\n /**\n * @hidden\n */\n handleWrapperBlur() {\n if (this.isOpen) {\n return;\n }\n this.isFocused = false;\n this.onBlur.emit();\n this.notifyNgTouched();\n }\n /**\n * Clears the color value of the ColorPicker.\n */\n reset() {\n if (!isPresent(this.value)) {\n return;\n }\n this._value = undefined;\n this.notifyNgChanged(undefined);\n }\n /**\n * Toggles the popup of the ColorPicker.\n * Does not trigger the `open` and `close` events of the component.\n *\n * @param open An optional parameter. Specifies whether the popup will be opened or closed.\n */\n toggle(open) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.closePopup();\n open = isPresent(open) ? open : !this.isOpen;\n if (open) {\n this.openPopup();\n }\n }\n /**\n * @hidden\n */\n handleValueChange(color, closePopup) {\n const parsedColor = parseColor$1(color, this.format);\n const valueChange = parsedColor !== this.value;\n if (closePopup) {\n this.toggleWithEvents(false);\n this.focus();\n }\n if (valueChange) {\n this.value = parsedColor;\n this.valueChange.emit(parsedColor);\n this.notifyNgChanged(parsedColor);\n }\n }\n /**\n * @hidden\n */\n handlePopupBlur(event) {\n const focusInPopupElement = this.popupRef.popupElement.contains(event.relatedTarget);\n const wrapperClicked = event.relatedTarget === this.wrapper.nativeElement;\n if (!this.isFocused || wrapperClicked || focusInPopupElement) {\n return;\n }\n this.isFocused = false;\n this.onBlur.emit();\n this.notifyNgTouched();\n this.toggleWithEvents(false);\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n */\n handleWrapperKeyDown(event) {\n if (event.keyCode === Keys.ArrowDown || event.keyCode === Keys.Enter) {\n event.preventDefault();\n this.toggleWithEvents(true);\n }\n }\n /**\n * @hidden\n */\n handlePopupKeyDown(event) {\n if (event.keyCode === Keys.Escape) {\n this.toggleWithEvents(false);\n this.wrapper.nativeElement.focus();\n }\n if (event.keyCode === Keys.Tab) {\n const firstElement = this.colorGradient ? this.colorGradient.gradientDragHandle.nativeElement : this.palette.nativeElement;\n const lastElement = this.palette ? this.palette.nativeElement :\n this.colorGradient.inputs.opacityInput.nativeElement.childNodes[1].children[0];\n if (event.shiftKey) {\n if (event.target === firstElement) {\n event.preventDefault();\n lastElement.focus();\n return;\n }\n }\n else {\n if (event.target === lastElement) {\n event.preventDefault();\n firstElement.focus();\n return;\n }\n }\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n toggleWithEvents(open) {\n const sameState = this.isOpen === open;\n if (this.disabled || this.readonly || sameState) {\n return;\n }\n const eventArgs = new PreventableEvent();\n open ? this.open.emit(eventArgs) : this.close.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.toggle(open);\n }\n if (open) {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n if (this.colorGradient) {\n this.colorGradient.gradientDragHandle.nativeElement.focus();\n }\n });\n });\n }\n }\n openPopup() {\n const horizontalAlign = this.direction === \"rtl\" ? \"right\" : \"left\";\n const anchorPosition = { horizontal: horizontalAlign, vertical: \"bottom\" };\n const popupPosition = { horizontal: horizontalAlign, vertical: \"top\" };\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n animate: this.popupSettings.animate,\n appendTo: this.popupSettings.appendTo,\n popupAlign: popupPosition,\n anchorAlign: anchorPosition,\n popupClass: 'k-colorpicker-popup',\n content: this.popupTemplate,\n positionMode: 'absolute'\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => {\n this.toggleWithEvents(false);\n if (!this.isOpen) {\n this.wrapper.nativeElement.focus({\n preventScroll: true\n });\n }\n });\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n this.palette = null;\n }\n};\nColorPickerComponent.ɵfac = function ColorPickerComponent_Factory(t) { return new (t || ColorPickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nColorPickerComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorPickerComponent, selectors: [[\"kendo-colorpicker\"]], viewQuery: function ColorPickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c79, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c80, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c20, 7);\n ɵngcc0.ɵɵviewQuery(_c81, 7);\n ɵngcc0.ɵɵviewQuery(_c82, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.palette = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.colorGradient = _t.first);\n } }, hostVars: 5, hostBindings: function ColorPickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-colorpicker\", ctx.hostClasses);\n } }, inputs: { focusableId: \"focusableId\", view: \"view\", readonly: \"readonly\", disabled: \"disabled\", format: \"format\", value: \"value\", popupSettings: \"popupSettings\", paletteSettings: \"paletteSettings\", gradientSettings: \"gradientSettings\", tabindex: \"tabindex\", icon: \"icon\", iconClass: \"iconClass\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\", activeColorClick: \"activeColorClick\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent_1)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent_1)\n },\n ColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 11, vars: 12, consts: function () { let i18n_83; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the gradient color drag handle chooser.\n * @meaning kendo.colorpicker.colorGradientHandle\n */\n const MSG_EXTERNAL_8067778471922495440$$DIST_FESM2015_INDEX_JS_84 = goog.getMsg(\"Choose color\");\n i18n_83 = MSG_EXTERNAL_8067778471922495440$$DIST_FESM2015_INDEX_JS_84;\n }\n else {\n i18n_83 = $localize `:kendo.colorpicker.colorGradientHandle|The title for the gradient color drag handle chooser.␟8d537502a437254763c963398484bd362820af61␟8067778471922495440:Choose color`;\n } let i18n_85; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the clear button.\n * @meaning kendo.colorpicker.clearButton\n */\n const MSG_EXTERNAL_935472034136733879$$DIST_FESM2015_INDEX_JS_86 = goog.getMsg(\"Clear value\");\n i18n_85 = MSG_EXTERNAL_935472034136733879$$DIST_FESM2015_INDEX_JS_86;\n }\n else {\n i18n_85 = $localize `:kendo.colorpicker.clearButton|The title for the clear button.␟aae9caf1dbc689cd51ace5c265cbf45552a580b6␟935472034136733879:Clear value`;\n } let i18n_87; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the hue slider handle.\n * @meaning kendo.colorpicker.hueSliderHandle\n */\n const MSG_EXTERNAL_1739045502529621844$$DIST_FESM2015_INDEX_JS_88 = goog.getMsg(\"Set hue\");\n i18n_87 = MSG_EXTERNAL_1739045502529621844$$DIST_FESM2015_INDEX_JS_88;\n }\n else {\n i18n_87 = $localize `:kendo.colorpicker.hueSliderHandle|The title for the hue slider handle.␟7af8ad339d09d41bfa8fa5f4e44d16e326cafd54␟1739045502529621844:Set hue`;\n } let i18n_89; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title for the opacity slider handle.\n * @meaning kendo.colorpicker.opacitySliderHandle\n */\n const MSG_EXTERNAL_1818720388700598438$$DIST_FESM2015_INDEX_JS_90 = goog.getMsg(\"Set opacity\");\n i18n_89 = MSG_EXTERNAL_1818720388700598438$$DIST_FESM2015_INDEX_JS_90;\n }\n else {\n i18n_89 = $localize `:kendo.colorpicker.opacitySliderHandle|The title for the opacity slider handle.␟21883ee2927bd4cde8071c9cbec41901a0bc4bd2␟1818720388700598438:Set opacity`;\n } let i18n_91; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the HEX color input.\n * @meaning kendo.colorpicker.hexInputPlaceholder\n */\n const MSG_EXTERNAL_67581802130075115$$DIST_FESM2015_INDEX_JS_92 = goog.getMsg(\"HEX Color\");\n i18n_91 = MSG_EXTERNAL_67581802130075115$$DIST_FESM2015_INDEX_JS_92;\n }\n else {\n i18n_91 = $localize `:kendo.colorpicker.hexInputPlaceholder|The placeholder for the HEX color input.␟88c518588be223639d20666430d42b88990166c9␟67581802130075115:HEX Color`;\n } let i18n_93; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the red color input.\n * @meaning kendo.colorpicker.redInputPlaceholder\n */\n const MSG_EXTERNAL_1242921922786989001$$DIST_FESM2015_INDEX_JS_94 = goog.getMsg(\"Red\");\n i18n_93 = MSG_EXTERNAL_1242921922786989001$$DIST_FESM2015_INDEX_JS_94;\n }\n else {\n i18n_93 = $localize `:kendo.colorpicker.redInputPlaceholder|The placeholder for the red color input.␟60f46a6db83b89c15885de76451bb26478637d2c␟1242921922786989001:Red`;\n } let i18n_95; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the green color input.\n * @meaning kendo.colorpicker.greenInputPlaceholder\n */\n const MSG_EXTERNAL_564969508273982379$$DIST_FESM2015_INDEX_JS_96 = goog.getMsg(\"Green\");\n i18n_95 = MSG_EXTERNAL_564969508273982379$$DIST_FESM2015_INDEX_JS_96;\n }\n else {\n i18n_95 = $localize `:kendo.colorpicker.greenInputPlaceholder|The placeholder for the green color input.␟0c1eef35af82330d89cacecb2aa482d9da1e3a4b␟564969508273982379:Green`;\n } let i18n_97; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the blue color input.\n * @meaning kendo.colorpicker.blueInputPlaceholder\n */\n const MSG_EXTERNAL_2815824305218491249$$DIST_FESM2015_INDEX_JS_98 = goog.getMsg(\"Blue\");\n i18n_97 = MSG_EXTERNAL_2815824305218491249$$DIST_FESM2015_INDEX_JS_98;\n }\n else {\n i18n_97 = $localize `:kendo.colorpicker.blueInputPlaceholder|The placeholder for the blue color input.␟c8f1ad22547f56cec39eb563a9a1bfe5a85cc14a␟2815824305218491249:Blue`;\n } let i18n_99; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The placeholder for the alpha input.\n * @meaning kendo.colorpicker.alphaInputPlaceholder\n */\n const MSG_EXTERNAL_7522085117867122625$$DIST_FESM2015_INDEX_JS_100 = goog.getMsg(\"Alpha\");\n i18n_99 = MSG_EXTERNAL_7522085117867122625$$DIST_FESM2015_INDEX_JS_100;\n }\n else {\n i18n_99 = $localize `:kendo.colorpicker.alphaInputPlaceholder|The placeholder for the alpha input.␟4e4aed4804d59e87f4f96959d0113c5ca292d98c␟7522085117867122625:Alpha`;\n } return [[\"kendoColorPickerLocalizedMessages\", \"\", \"colorGradientNoColor\", \"Colorgradient no color chosen\", \"colorPaletteNoColor\", \"Colorpalette no color chosen\", \"colorGradientHandle\", i18n_83, \"clearButton\", i18n_85, \"hueSliderHandle\", i18n_87, \"opacitySliderHandle\", i18n_89, \"hexInputPlaceholder\", i18n_91, \"redInputPlaceholder\", i18n_93, \"greenInputPlaceholder\", i18n_95, \"blueInputPlaceholder\", i18n_97, \"alphaInputPlaceholder\", i18n_99], [\"role\", \"listbox\", 3, \"ngClass\", \"id\", \"focus\", \"blur\", \"mousedown\", \"keydown\"], [\"wrapper\", \"\"], [\"class\", \"k-selected-color\", 3, \"background-color\", \"click\", 4, \"ngIf\"], [\"class\", \"k-tool-icon\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [1, \"k-select\", 3, \"click\"], [1, \"k-icon\", \"k-i-arrow-s\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [1, \"k-selected-color\", 3, \"click\"], [\"class\", \"k-icon k-i-line\", 4, \"ngIf\"], [1, \"k-icon\", \"k-i-line\"], [1, \"k-tool-icon\", 3, \"ngClass\", \"click\"], [1, \"k-selected-color\"], [3, \"value\", \"format\", \"opacity\", \"clearButton\", \"delay\", \"focusout\", \"valueChange\", \"keydown\", 4, \"ngIf\"], [\"kendoFocusOnDomReady\", \"\", 3, \"palette\", \"columns\", \"tileSize\", \"format\", \"value\", \"blur\", \"cellSelection\", \"mousedown\", \"keydown\", 4, \"ngIf\"], [3, \"value\", \"format\", \"opacity\", \"clearButton\", \"delay\", \"focusout\", \"valueChange\", \"keydown\"], [\"colorGradient\", \"\"], [\"kendoFocusOnDomReady\", \"\", 3, \"palette\", \"columns\", \"tileSize\", \"format\", \"value\", \"blur\", \"cellSelection\", \"mousedown\", \"keydown\"], [\"palette\", \"\"]]; }, template: function ColorPickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 1, 2);\n ɵngcc0.ɵɵlistener(\"focus\", function ColorPickerComponent_Template_span_focus_1_listener() { return ctx.handleWrapperFocus(); })(\"blur\", function ColorPickerComponent_Template_span_blur_1_listener() { return ctx.handleWrapperBlur(); })(\"mousedown\", function ColorPickerComponent_Template_span_mousedown_1_listener($event) { return $event.preventDefault(); })(\"keydown\", function ColorPickerComponent_Template_span_keydown_1_listener($event) { return ctx.handleWrapperKeyDown($event); });\n ɵngcc0.ɵɵtemplate(3, ColorPickerComponent_span_3_Template, 2, 3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, ColorPickerComponent_span_4_Template, 2, 3, \"span\", 4);\n ɵngcc0.ɵɵelementStart(5, \"span\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function ColorPickerComponent_Template_span_click_5_listener() { return ctx.handleWrapperClick(); });\n ɵngcc0.ɵɵelement(6, \"span\", 6);\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(7, ColorPickerComponent_ng_template_7_Template, 2, 2, \"ng-template\", null, 7, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(9, null, 8);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(9, _c101, ctx.disabled, ctx.isFocused))(\"id\", ctx.focusableId);\n ɵngcc0.ɵɵattribute(\"aria-expanded\", ctx.isOpen)(\"aria-readonly\", ctx.readonly)(\"aria-disabled\", ctx.disabled)(\"aria-label\", ctx.value)(\"tabindex\", ctx.tabindex);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.iconStyles);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.iconStyles);\n } }, directives: function () { return [LocalizedColorPickerMessagesDirective, ɵngcc3.NgClass, ɵngcc3.NgIf, ColorGradientComponent, ColorPaletteComponent, FocusOnDomReadyDirective]; }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-colorpicker'),\n __metadata(\"design:type\", Boolean)\n], ColorPickerComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], ColorPickerComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerComponent.prototype, \"focusableId\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerComponent.prototype, \"view\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorPickerComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorPickerComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerComponent.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ColorPickerComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ColorPickerComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ColorPickerComponent.prototype, \"paletteSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ColorPickerComponent.prototype, \"gradientSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerComponent.prototype, \"icon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ColorPickerComponent.prototype, \"iconClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ColorPickerComponent.prototype, \"tabindex\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"close\", void 0);\n__decorate([\n Output('focus'),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"onFocus\", void 0);\n__decorate([\n Output('blur'),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"onBlur\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPickerComponent.prototype, \"activeColorClick\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], ColorPickerComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChild('wrapper', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], ColorPickerComponent.prototype, \"wrapper\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ColorPickerComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('palette', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ColorPickerComponent.prototype, \"palette\", void 0);\n__decorate([\n ViewChild('colorGradient', { static: false }),\n __metadata(\"design:type\", ColorGradientComponent)\n], ColorPickerComponent.prototype, \"colorGradient\", void 0);\nColorPickerComponent = ColorPickerComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [PopupService,\n ChangeDetectorRef,\n LocalizationService,\n NgZone])\n], ColorPickerComponent);\n\n/**\n * @hidden\n */\nlet ColorPaletteService = class ColorPaletteService {\n /**\n * @hidden\n */\n constructor() {\n this.colorRows = [];\n }\n setColorMatrix(palette, columns) {\n this.colorRows = [];\n if (!(isPresent(palette) && palette.length)) {\n return;\n }\n columns = columns || palette.length;\n for (let start = 0; start < palette.length; start += columns) {\n const row = palette.slice(start, columns + start);\n this.colorRows.push(row);\n }\n }\n getCellCoordsFor(color) {\n if (!isPresent(color)) {\n return;\n }\n for (let row = 0; row < this.colorRows.length; row++) {\n for (let col = 0; col < this.colorRows[row].length; col++) {\n if (this.colorRows[row][col] === color) {\n return { row, col };\n }\n }\n }\n }\n getColorAt(cellCoords) {\n if (!(isPresent(cellCoords) && isPresent(this.colorRows[cellCoords.row]))) {\n return;\n }\n return this.colorRows[cellCoords.row][cellCoords.col];\n }\n getNextCell(current, horizontalStep, verticalStep) {\n if (!(isPresent(current) && isPresent(current.row) && isPresent(current.col))) {\n return { row: 0, col: 0 };\n }\n const row = this.clampIndex(current.row + verticalStep, this.colorRows.length - 1);\n const col = this.clampIndex(current.col + horizontalStep, this.colorRows[row].length - 1);\n return { row, col };\n }\n clampIndex(index, max) {\n const minArrayIndex = 0;\n if (index < minArrayIndex) {\n return minArrayIndex;\n }\n if (index > max) {\n return max;\n }\n return index;\n }\n};\nColorPaletteService.ɵfac = function ColorPaletteService_Factory(t) { return new (t || ColorPaletteService)(); };\nColorPaletteService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ColorPaletteService, factory: function (t) { return ColorPaletteService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet ColorPaletteLocalizationService = class ColorPaletteLocalizationService extends LocalizationService {\n constructor(prefix, messageService, _rtl, colorPickerLocalization) {\n super(prefix, messageService, _rtl);\n this.colorPickerLocalization = colorPickerLocalization;\n }\n get(shortKey) {\n if (this.colorPickerLocalization) {\n return this.colorPickerLocalization.get(shortKey);\n }\n return super.get(shortKey);\n }\n};\nColorPaletteLocalizationService.ɵfac = function ColorPaletteLocalizationService_Factory(t) { return new (t || ColorPaletteLocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(ɵngcc1.MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8), ɵngcc0.ɵɵinject(ColorPickerLocalizationService, 8)); };\nColorPaletteLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ColorPaletteLocalizationService, factory: function (t) { return ColorPaletteLocalizationService.ɵfac(t); } });\nColorPaletteLocalizationService = __decorate([\n __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __param(3, Optional()), __param(3, Inject(ColorPickerLocalizationService)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean, ColorPickerLocalizationService])\n], ColorPaletteLocalizationService);\n\nvar ColorPaletteComponent_1;\nconst DEFAULT_TILE_SIZE = 24;\nconst DEFAULT_COLUMNS_COUNT = 10;\nconst DEFAULT_PRESET$1 = 'office';\nconst DEFAULT_ACCESSIBLE_PRESET$1 = 'accessible';\nlet serial$2 = 0;\n/**\n * The ColorPalette component provides a set of predefined palette presets and enables you to implement a custom color palette.\n * The ColorPalette is independently used by `kendo-colorpicker` and can be directly added to the page.\n */\nlet ColorPaletteComponent = ColorPaletteComponent_1 = class ColorPaletteComponent {\n constructor(host, service, cdr, renderer, localizationService) {\n this.host = host;\n this.service = service;\n this.cdr = cdr;\n this.renderer = renderer;\n this.localizationService = localizationService;\n /**\n * @hidden\n */\n this.id = `k-colorpalette-${serial$2++}`;\n /**\n * Specifies the output format of the ColorPaletteComponent.\n * The input value may be in a different format. However, it will be parsed into the output `format`\n * after the component processes it.\n *\n * The supported values are:\n * * (Default) `hex`\n * * `rgba`\n * * `name`\n */\n this.format = 'hex';\n /**\n * Sets the disabled state of the ColorPalette.\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the ColorPalette.\n */\n this.readonly = false;\n /**\n * Specifies the size of a color cell.\n *\n * The possible values are:\n * * (Default) `tileSize = 24`\n * * `{ width: number, height: number }`\n */\n this.tileSize = { width: DEFAULT_TILE_SIZE, height: DEFAULT_TILE_SIZE };\n /**\n * Fires each time the color selection is changed.\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires each time the value is changed.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user selects a cell with the mouse or presses `Enter`.\n *\n * @hidden\n */\n this.cellSelection = new EventEmitter();\n /**\n * @hidden\n */\n this.hostClasses = true;\n this._tabindex = 0;\n this.notifyNgTouched = () => { };\n this.notifyNgChanged = () => { };\n this.dynamicRTLSubscription = localizationService.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n /**\n * @hidden\n */\n get paletteId() {\n return this.id;\n }\n /**\n * Specifies the value of the initially selected color.\n */\n set value(value) {\n this._value = parseColor$1(value, this.format);\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the number of columns that will be displayed.\n * Defaults to `10`.\n */\n set columns(value) {\n const minColumnsCount = 1;\n this._columns = value > minColumnsCount ? value : minColumnsCount;\n }\n get columns() {\n return this._columns;\n }\n /**\n * The color palette that will be displayed.\n *\n * The supported values are:\n * * The name of the predefined palette preset (for example, `office`, `basic`, and `apex`).\n * * A string with comma-separated colors.\n * * A string array.\n */\n set palette(value) {\n if (!isPresent(value)) {\n value = DEFAULT_PRESET$1;\n }\n if (typeof value === 'string' && isPresent(PALETTEPRESETS[value])) {\n this.columns = this.columns || PALETTEPRESETS[value].columns;\n value = PALETTEPRESETS[value].colors;\n }\n const colors = (typeof value === 'string') ? value.split(',') : value;\n this._palette = colors.map(color => parseColor$1(color, this.format, false));\n }\n get palette() {\n return this._palette;\n }\n /**\n * Specifies the [tabindex](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return !this.disabled ? this._tabindex : undefined;\n }\n /**\n * @hidden\n */\n get tileLayout() {\n if (typeof this.tileSize !== 'number') {\n return this.tileSize;\n }\n return { width: this.tileSize, height: this.tileSize };\n }\n /**\n * @hidden\n */\n get colorRows() {\n return this.service.colorRows;\n }\n /**\n * @hidden\n */\n get hostTabindex() { return this.tabindex; }\n /**\n * @hidden\n */\n get disabledClass() { return this.disabled; }\n /**\n * @hidden\n */\n get readonlyAttribute() { return this.readonly; }\n ngOnInit() {\n if (this.colorRows.length === 0) {\n const defaultPreset = (this.format !== 'name') ? DEFAULT_PRESET$1 : DEFAULT_ACCESSIBLE_PRESET$1;\n this.palette = this.palette || defaultPreset;\n this.setRows();\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n }\n }\n ngAfterViewInit() {\n this.setHostElementAriaLabel();\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n ngOnChanges(changes) {\n if (changes.palette || changes.columns) {\n this.setRows();\n }\n if (changes.palette || changes.value || changes.columns) {\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n this.setHostElementAriaLabel();\n }\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const isRTL = this.direction === 'rtl';\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.handleCellNavigation(0, 1);\n break;\n case Keys.ArrowUp:\n this.handleCellNavigation(0, -1);\n break;\n case Keys.ArrowRight:\n this.handleCellNavigation(isRTL ? -1 : 1, 0);\n break;\n case Keys.ArrowLeft:\n this.handleCellNavigation(isRTL ? 1 : -1, 0);\n break;\n case Keys.Enter:\n this.handleEnter();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleHostBlur() {\n this.notifyNgTouched();\n this.handleCellFocusOnBlur();\n }\n /**\n * @hidden\n */\n handleCellSelection(value, cell) {\n if (this.readonly) {\n return;\n }\n this.selectedCell = cell;\n this.focusedCell = this.selectedCell;\n this.focusInComponent = true;\n const parsedColor = parseColor$1(value, this.format, false);\n this.cellSelection.emit(parsedColor);\n if (this.value !== parsedColor) {\n this.value = parsedColor;\n this.valueChange.emit(parsedColor);\n this.notifyNgChanged(parsedColor);\n this.setHostElementAriaLabel();\n }\n if (this.selection !== parsedColor) {\n this.selection = parsedColor;\n this.selectionChange.emit(parsedColor);\n }\n if (cell) {\n this.activeCellId = `${this.selectedCell.row}-${this.selectedCell.col}`;\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n this.focusedCell = this.service.getCellCoordsFor(this.value);\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.notifyNgChanged = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.notifyNgTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.cdr.markForCheck();\n this.disabled = isDisabled;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return false;\n }\n /**\n * Clears the color value of the ColorPalette.\n */\n reset() {\n this.focusedCell = null;\n if (isPresent(this.value)) {\n this._value = undefined;\n this.notifyNgChanged(undefined);\n }\n }\n handleCellFocusOnBlur() {\n this.focusInComponent = false;\n this.focusedCell = this.selectedCell;\n }\n setRows() {\n if (!isPresent(this.palette)) {\n return;\n }\n this.columns = this.columns || DEFAULT_COLUMNS_COUNT;\n this.service.setColorMatrix(this.palette, this.columns);\n }\n handleCellNavigation(horizontalStep, verticalStep) {\n if (this.readonly) {\n return;\n }\n this.focusedCell = this.service.getNextCell(this.focusedCell, horizontalStep, verticalStep);\n this.focusInComponent = true;\n }\n setHostElementAriaLabel() {\n const parsed = parseColor$1(this.value, this.format);\n this.renderer.setAttribute(this.host.nativeElement, 'aria-label', `${this.value ? parsed : this.localizationService.get('colorPaletteNoColor')}`);\n }\n handleEnter() {\n if (!isPresent(this.focusedCell)) {\n return;\n }\n const selectedColor = this.service.getColorAt(this.focusedCell);\n this.handleCellSelection(selectedColor, this.focusedCell);\n }\n};\nColorPaletteComponent.ɵfac = function ColorPaletteComponent_Factory(t) { return new (t || ColorPaletteComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColorPaletteService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorPaletteComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorPaletteComponent, selectors: [[\"kendo-colorpalette\"]], hostVars: 9, hostBindings: function ColorPaletteComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function ColorPaletteComponent_keydown_HostBindingHandler($event) { return ctx.handleKeydown($event); })(\"blur\", function ColorPaletteComponent_blur_HostBindingHandler() { return ctx.handleHostBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction)(\"id\", ctx.paletteId)(\"tabindex\", ctx.hostTabindex)(\"aria-disabled\", ctx.disabledClass)(\"aria-readonly\", ctx.readonlyAttribute);\n ɵngcc0.ɵɵclassProp(\"k-colorpalette\", ctx.hostClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { id: \"id\", format: \"format\", disabled: \"disabled\", readonly: \"readonly\", tileSize: \"tileSize\", value: \"value\", columns: \"columns\", palette: \"palette\", tabindex: \"tabindex\" }, outputs: { selectionChange: \"selectionChange\", valueChange: \"valueChange\", cellSelection: \"cellSelection\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent_1) // tslint:disable-line:no-forward-ref\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent_1)\n },\n ColorPaletteService,\n ColorPaletteLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPaletteLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 2, consts: function () { let i18n_102; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The aria-label applied to the ColorPalette component when the value is empty.\n * @meaning kendo.colorpalette.colorPaletteNoColor\n */\n const MSG_EXTERNAL_4885193165402402447$$DIST_FESM2015_INDEX_JS_103 = goog.getMsg(\"Colorpalette no color chosen\");\n i18n_102 = MSG_EXTERNAL_4885193165402402447$$DIST_FESM2015_INDEX_JS_103;\n }\n else {\n i18n_102 = $localize `:kendo.colorpalette.colorPaletteNoColor|The aria-label applied to the ColorPalette component when the value is empty.␟9828bb7d78de6289366052cdc37cf0bc74577313␟4885193165402402447:Colorpalette no color chosen`;\n } return [[\"kendoColorPaletteLocalizedMessages\", \"\", \"colorPaletteNoColor\", i18n_102], [\"role\", \"listbox\", 1, \"k-colorpalette-table-wrap\"], [1, \"k-colorpalette-table\", \"k-palette\"], [4, \"ngFor\", \"ngForOf\"], [\"role\", \"option\", \"class\", \"k-colorpalette-tile\", 3, \"k-state-selected\", \"k-state-focus\", \"id\", \"ngStyle\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"option\", 1, \"k-colorpalette-tile\", 3, \"id\", \"ngStyle\", \"click\"]]; }, template: function ColorPaletteComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1)(2, \"table\", 2)(3, \"tbody\");\n ɵngcc0.ɵɵtemplate(4, ColorPaletteComponent_tr_4_Template, 2, 1, \"tr\", 3);\n ɵngcc0.ɵɵelementEnd()()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-activedescendant\", ctx.activeCellId);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.colorRows);\n } }, directives: function () { return [LocalizedColorPickerMessagesDirective, ɵngcc3.NgForOf, ɵngcc3.NgStyle]; }, encapsulation: 2 });\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], ColorPaletteComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ColorPaletteComponent.prototype, \"paletteId\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPaletteComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPaletteComponent.prototype, \"format\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ColorPaletteComponent.prototype, \"value\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ColorPaletteComponent.prototype, \"columns\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ColorPaletteComponent.prototype, \"palette\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ColorPaletteComponent.prototype, \"tabindex\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorPaletteComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ColorPaletteComponent.prototype, \"readonly\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ColorPaletteComponent.prototype, \"tileSize\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPaletteComponent.prototype, \"selectionChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPaletteComponent.prototype, \"valueChange\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ColorPaletteComponent.prototype, \"cellSelection\", void 0);\n__decorate([\n HostBinding('attr.tabindex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [])\n], ColorPaletteComponent.prototype, \"hostTabindex\", null);\n__decorate([\n HostBinding('class.k-colorpalette'),\n __metadata(\"design:type\", Boolean)\n], ColorPaletteComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('attr.aria-disabled'),\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ColorPaletteComponent.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('attr.aria-readonly'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ColorPaletteComponent.prototype, \"readonlyAttribute\", null);\n__decorate([\n HostListener('keydown', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ColorPaletteComponent.prototype, \"handleKeydown\", null);\n__decorate([\n HostListener('blur'),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], ColorPaletteComponent.prototype, \"handleHostBlur\", null);\nColorPaletteComponent = ColorPaletteComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n ColorPaletteService,\n ChangeDetectorRef,\n Renderer2,\n LocalizationService])\n], ColorPaletteComponent);\n\n/**\n * @hidden\n */\nclass ColorPickerMessages extends ComponentMessages {\n}\nColorPickerMessages.ɵfac = /*@__PURE__*/ function () { let ɵColorPickerMessages_BaseFactory; return function ColorPickerMessages_Factory(t) { return (ɵColorPickerMessages_BaseFactory || (ɵColorPickerMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(ColorPickerMessages)))(t || ColorPickerMessages); }; }();\nColorPickerMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ColorPickerMessages, inputs: { colorPaletteNoColor: \"colorPaletteNoColor\", colorGradientNoColor: \"colorGradientNoColor\", colorGradientHandle: \"colorGradientHandle\", clearButton: \"clearButton\", hueSliderHandle: \"hueSliderHandle\", opacitySliderHandle: \"opacitySliderHandle\", hexInputPlaceholder: \"hexInputPlaceholder\", redInputPlaceholder: \"redInputPlaceholder\", greenInputPlaceholder: \"greenInputPlaceholder\", blueInputPlaceholder: \"blueInputPlaceholder\", alphaInputPlaceholder: \"alphaInputPlaceholder\", passContrast: \"passContrast\", failContrast: \"failContrast\", contrastRatio: \"contrastRatio\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"colorPaletteNoColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"colorGradientNoColor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"colorGradientHandle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"clearButton\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"hueSliderHandle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"opacitySliderHandle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"hexInputPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"redInputPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"greenInputPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"blueInputPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"alphaInputPlaceholder\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"passContrast\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"failContrast\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ColorPickerMessages.prototype, \"contrastRatio\", void 0);\n\nvar ColorPickerCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet ColorPickerCustomMessagesComponent = ColorPickerCustomMessagesComponent_1 = class ColorPickerCustomMessagesComponent extends ColorPickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nColorPickerCustomMessagesComponent.ɵfac = function ColorPickerCustomMessagesComponent_Factory(t) { return new (t || ColorPickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColorPickerCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ColorPickerCustomMessagesComponent, selectors: [[\"kendo-colorpicker-messages\"], [\"kendo-colorgradient-messages\"], [\"kendo-colorpalette-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => ColorPickerCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColorPickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nColorPickerCustomMessagesComponent = ColorPickerCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ColorPickerCustomMessagesComponent);\n\nvar LocalizedColorPickerMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedColorPickerMessagesDirective = LocalizedColorPickerMessagesDirective_1 = class LocalizedColorPickerMessagesDirective extends ColorPickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedColorPickerMessagesDirective.ɵfac = function LocalizedColorPickerMessagesDirective_Factory(t) { return new (t || LocalizedColorPickerMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedColorPickerMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedColorPickerMessagesDirective, selectors: [[\"\", \"kendoColorPickerLocalizedMessages\", \"\"], [\"\", \"kendoColorGradientLocalizedMessages\", \"\"], [\"\", \"kendoColorPaletteLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => LocalizedColorPickerMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedColorPickerMessagesDirective = LocalizedColorPickerMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedColorPickerMessagesDirective);\n\n/**\n * @hidden\n */\nlet FocusOnDomReadyDirective = class FocusOnDomReadyDirective {\n constructor(host, ngZone) {\n this.host = host;\n this.ngZone = ngZone;\n }\n ngAfterContentInit() {\n this.focusOnNextTick();\n }\n focusOnNextTick() {\n this.ngZone.runOutsideAngular(() => setTimeout(() => this.host.nativeElement.focus()));\n }\n};\nFocusOnDomReadyDirective.ɵfac = function FocusOnDomReadyDirective_Factory(t) { return new (t || FocusOnDomReadyDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nFocusOnDomReadyDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: FocusOnDomReadyDirective, selectors: [[\"\", \"kendoFocusOnDomReady\", \"\"]] });\nFocusOnDomReadyDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n NgZone])\n], FocusOnDomReadyDirective);\n\n/**\n * @hidden\n */\nlet ContrastValidationComponent = class ContrastValidationComponent {\n constructor(localization) {\n this.localization = localization;\n }\n get passMessage() {\n return this.localization.get('passContrast');\n }\n get failMessage() {\n return this.localization.get('failContrast');\n }\n get contrastText() {\n return `${this.type}: ${this.ratio.toFixed(1)}`;\n }\n};\nContrastValidationComponent.ɵfac = function ContrastValidationComponent_Factory(t) { return new (t || ContrastValidationComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nContrastValidationComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ContrastValidationComponent, selectors: [[\"\", \"kendoContrastValidation\", \"\"]], inputs: { type: \"type\", ratio: \"ratio\", pass: \"pass\" }, attrs: _c105, decls: 4, vars: 3, consts: [[\"class\", \"k-contrast-validation k-text-success\", 4, \"ngIf\"], [\"class\", \"k-contrast-validation k-text-error\", 4, \"ngIf\"], [1, \"k-contrast-validation\", \"k-text-success\"], [1, \"k-icon\", \"k-i-check\"], [1, \"k-contrast-validation\", \"k-text-error\"], [1, \"k-icon\", \"k-i-close\"]], template: function ContrastValidationComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ContrastValidationComponent_span_2_Template, 3, 1, \"span\", 0);\n ɵngcc0.ɵɵtemplate(3, ContrastValidationComponent_span_3_Template, 3, 1, \"span\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.contrastText);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.pass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.pass);\n } }, directives: [ɵngcc3.NgIf], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ContrastValidationComponent.prototype, \"type\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ContrastValidationComponent.prototype, \"ratio\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ContrastValidationComponent.prototype, \"pass\", void 0);\nContrastValidationComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ContrastValidationComponent);\n\n/**\n * @hidden\n */\nlet ContrastComponent = class ContrastComponent {\n constructor(localization) {\n this.localization = localization;\n this.aaRatio = AA_RATIO;\n this.aaaRatio = AAA_RATIO;\n }\n get formatedRatio() {\n return this.contrastRatio.toFixed(2);\n }\n get contrastRatioMessage() {\n return this.localization.get('contrastRatio');\n }\n get satisfiesAACondition() {\n return this.contrastRatio >= this.aaRatio;\n }\n get satisfiesAAACondition() {\n return this.contrastRatio >= this.aaaRatio;\n }\n get contrastRatio() {\n let contrast = getContrastFromTwoRGBAs(getRGBA(this.value), getRGBA(this.ratio));\n return contrast;\n }\n};\nContrastComponent.ɵfac = function ContrastComponent_Factory(t) { return new (t || ContrastComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nContrastComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ContrastComponent, selectors: [[\"\", \"kendoContrastTool\", \"\"]], inputs: { value: \"value\", ratio: \"ratio\" }, attrs: _c106, decls: 7, vars: 8, consts: [[1, \"k-contrast-ratio\"], [1, \"k-contrast-ratio-text\"], [\"class\", \"k-contrast-validation k-text-success\", 4, \"ngIf\"], [\"class\", \"k-contrast-validation k-text-error\", 4, \"ngIf\"], [\"kendoContrastValidation\", \"\", \"type\", \"AA\", 3, \"ratio\", \"pass\"], [\"kendoContrastValidation\", \"\", \"type\", \"AAA\", 3, \"ratio\", \"pass\"], [1, \"k-contrast-validation\", \"k-text-success\"], [1, \"k-icon\", \"k-i-check\"], [\"class\", \"k-icon k-i-check\", 4, \"ngIf\"], [1, \"k-contrast-validation\", \"k-text-error\"], [1, \"k-icon\", \"k-i-close\"]], template: function ContrastComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0)(1, \"span\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ContrastComponent_span_3_Template, 3, 1, \"span\", 2);\n ɵngcc0.ɵɵtemplate(4, ContrastComponent_span_4_Template, 2, 0, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(5, \"div\", 4)(6, \"div\", 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate2(\"\", ctx.contrastRatioMessage, \": \", ctx.formatedRatio, \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.satisfiesAACondition);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.satisfiesAACondition);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ratio\", ctx.aaaRatio)(\"pass\", ctx.satisfiesAACondition);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ratio\", ctx.aaaRatio)(\"pass\", ctx.satisfiesAAACondition);\n } }, directives: [ɵngcc3.NgIf, ContrastValidationComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ContrastComponent.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ContrastComponent.prototype, \"ratio\", void 0);\nContrastComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ContrastComponent);\n\nconst PUBLIC_DIRECTIVES = [\n ColorPickerComponent,\n ColorPaletteComponent,\n ColorGradientComponent,\n LocalizedColorPickerMessagesDirective,\n ColorPickerCustomMessagesComponent\n];\nconst INTERNAL_DIRECTIVES = [\n ColorInputComponent,\n FocusOnDomReadyDirective,\n ContrastComponent,\n ContrastValidationComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the ColorPicker.\n */\nlet ColorPickerModule = class ColorPickerModule {\n};\nColorPickerModule.ɵfac = function ColorPickerModule_Factory(t) { return new (t || ColorPickerModule)(); };\nColorPickerModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ColorPickerModule });\nColorPickerModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]] });\n\n/**\n * Represents the directive that renders the [Kendo UI CheckBox]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"checkbox\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet CheckBoxDirective = class CheckBoxDirective {\n /**\n * Represents the directive that renders the [Kendo UI CheckBox]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"checkbox\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\n constructor() {\n this.kendoClass = true;\n }\n};\nCheckBoxDirective.ɵfac = function CheckBoxDirective_Factory(t) { return new (t || CheckBoxDirective)(); };\nCheckBoxDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CheckBoxDirective, selectors: [[\"input\", \"kendoCheckBox\", \"\"]], hostVars: 2, hostBindings: function CheckBoxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-checkbox\", ctx.kendoClass);\n } } });\n__decorate([\n HostBinding('class.k-checkbox'),\n __metadata(\"design:type\", Boolean)\n], CheckBoxDirective.prototype, \"kendoClass\", void 0);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the CheckBox directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the CheckBox module\n * import { CheckBoxModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CheckBoxModule], // import CheckBox module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet CheckBoxModule = class CheckBoxModule {\n};\nCheckBoxModule.ɵfac = function CheckBoxModule_Factory(t) { return new (t || CheckBoxModule)(); };\nCheckBoxModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CheckBoxModule });\nCheckBoxModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\n/**\n * Represents the directive that renders the [Kendo UI RadioButton]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"radio\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\nlet RadioButtonDirective = class RadioButtonDirective {\n /**\n * Represents the directive that renders the [Kendo UI RadioButton]({% slug overview_checkbox %}) input component.\n * The directive is placed on input type=\"radio\" elements.\n *\n * @example\n * ```ts-no-run\n * \n * ```\n */\n constructor() {\n this.kendoClass = true;\n }\n};\nRadioButtonDirective.ɵfac = function RadioButtonDirective_Factory(t) { return new (t || RadioButtonDirective)(); };\nRadioButtonDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: RadioButtonDirective, selectors: [[\"input\", \"kendoRadioButton\", \"\"]], hostVars: 2, hostBindings: function RadioButtonDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-radio\", ctx.kendoClass);\n } } });\n__decorate([\n HostBinding('class.k-radio'),\n __metadata(\"design:type\", Boolean)\n], RadioButtonDirective.prototype, \"kendoClass\", void 0);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the RadioButton directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the RadioButton module\n * import { RadioButtonModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, RadioButtonModule], // import RadioButton module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet RadioButtonModule = class RadioButtonModule {\n};\nRadioButtonModule.ɵfac = function RadioButtonModule_Factory(t) { return new (t || RadioButtonModule)(); };\nRadioButtonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: RadioButtonModule });\nRadioButtonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\nlet serial$3 = 0;\n/**\n * Represents an error message that will be shown underneath\n * a Kendo control or native HTML form-bound component after a validation.\n */\nlet ErrorComponent = class ErrorComponent {\n /**\n * Represents an error message that will be shown underneath\n * a Kendo control or native HTML form-bound component after a validation.\n */\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the alignment of the Error message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-error-${serial$3++}`;\n this.roleAttribute = 'alert';\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n};\nErrorComponent.ɵfac = function ErrorComponent_Factory(t) { return new (t || ErrorComponent)(); };\nErrorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ErrorComponent, selectors: [[\"kendo-formerror\"]], hostVars: 8, hostBindings: function ErrorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleAttribute)(\"id\", ctx.idAttribute);\n ɵngcc0.ɵɵclassProp(\"k-form-error\", ctx.hostClass)(\"k-text-start\", ctx.startClass)(\"k-text-end\", ctx.endClass);\n } }, inputs: { align: \"align\" }, ngContentSelectors: _c26, decls: 1, vars: 0, template: function ErrorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n__decorate([\n HostBinding('class.k-form-error'),\n __metadata(\"design:type\", Boolean)\n], ErrorComponent.prototype, \"hostClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ErrorComponent.prototype, \"align\", void 0);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String)\n], ErrorComponent.prototype, \"roleAttribute\", void 0);\n__decorate([\n HostBinding('class.k-text-start'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ErrorComponent.prototype, \"startClass\", null);\n__decorate([\n HostBinding('class.k-text-end'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ErrorComponent.prototype, \"endClass\", null);\n__decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ErrorComponent.prototype, \"idAttribute\", null);\n\nlet serial$4 = 0;\n/**\n * Represents a hint message that will be shown underneath a form-bound component.\n */\nlet HintComponent = class HintComponent {\n /**\n * Represents a hint message that will be shown underneath a form-bound component.\n */\n constructor() {\n /**\n * Specifies the alignment of the Hint message.\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.align = 'start';\n /**\n * @hidden\n */\n this.id = `kendo-hint-${serial$4++}`;\n this.hostClass = true;\n }\n get startClass() {\n return this.align === 'start';\n }\n get endClass() {\n return this.align === 'end';\n }\n get idAttribute() {\n return this.id;\n }\n};\nHintComponent.ɵfac = function HintComponent_Factory(t) { return new (t || HintComponent)(); };\nHintComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: HintComponent, selectors: [[\"kendo-formhint\"]], hostVars: 7, hostBindings: function HintComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.idAttribute);\n ɵngcc0.ɵɵclassProp(\"k-form-hint\", ctx.hostClass)(\"k-text-start\", ctx.startClass)(\"k-text-end\", ctx.endClass);\n } }, inputs: { align: \"align\" }, ngContentSelectors: _c26, decls: 1, vars: 0, template: function HintComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], HintComponent.prototype, \"align\", void 0);\n__decorate([\n HostBinding('class.k-form-hint'),\n __metadata(\"design:type\", Boolean)\n], HintComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('class.k-text-start'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], HintComponent.prototype, \"startClass\", null);\n__decorate([\n HostBinding('class.k-text-end'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], HintComponent.prototype, \"endClass\", null);\n__decorate([\n HostBinding('attr.id'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], HintComponent.prototype, \"idAttribute\", null);\n\n/**\n * Specifies a container for form-bound controls (Kendo controls or native HTML controls).\n * Applies styling and behavior rules.\n */\nlet FormFieldComponent = class FormFieldComponent {\n constructor(renderer, localizationService, hostElement) {\n this.renderer = renderer;\n this.localizationService = localizationService;\n this.hostElement = hostElement;\n this.hostClass = true;\n /**\n *\n * Specifies when the Hint messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying hints when the form-bound component state is\n * `valid` or `untouched` and `pristine`.\n * * `always`—Allows full control over the visibility of the hints.\n *\n */\n this.showHints = 'initial';\n /**\n * Specifies the layout orientation of the form field.\n *\n * * The possible values are:\n *\n * * (Default) `vertical`\n * * `horizontal`\n */\n this.orientation = 'vertical';\n /**\n * Specifies when the Error messages will be shown.\n *\n * The possible values are:\n *\n * * (Default) `initial`—Allows displaying errors when the form-bound component state is\n * `invalid` and `touched` or `dirty`.\n * * `always`—Allows full control over the visibility of the errors.\n *\n */\n this.showErrors = 'initial';\n this.subscriptions = new Subscription();\n this.rtl = false;\n validatePackage(packageMetadata);\n this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n }));\n }\n get errorClass() {\n if (!this.control) {\n return false;\n }\n return this.control.invalid && (this.control.touched || this.control.dirty);\n }\n get disabledClass() {\n if (!this.control) {\n return false;\n }\n // radiobutton group\n if (this.isRadioControl(this.control)) {\n return false;\n }\n return this.disabledControl() ||\n this.disabledElement() ||\n this.disabledKendoInput();\n }\n set formControls(formControls) {\n this.validateFormControl(formControls);\n this.control = formControls.first;\n }\n /**\n * @hidden\n */\n get horizontal() {\n return this.orientation === 'horizontal';\n }\n /**\n * @hidden\n */\n get hasHints() {\n return this.showHints === 'always' ? true : this.showHintsInitial();\n }\n /**\n * @hidden\n */\n get hasErrors() {\n return this.showErrors === 'always' ? true : this.showErrorsInitial();\n }\n ngAfterViewInit() {\n this.setDescription();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n disabledKendoInput() {\n return this.kendoInput && this.kendoInput.disabled;\n }\n disabledControl() {\n return this.control.disabled;\n }\n disabledElement() {\n const elements = this.controlElementRefs.toArray();\n return elements.every(e => e.nativeElement.hasAttribute('disabled'));\n }\n validateFormControl(formControls) {\n if (isDevMode() && formControls.length !== 1 && !this.isControlGroup(formControls)) {\n throw new Error('The `kendo-formfield` component should contain ' +\n 'only one control of type NgControl with a formControlName(https://angular.io/api/forms/FormControlName)' +\n 'or an ngModel(https://angular.io/api/forms/NgModel) binding.');\n }\n }\n isControlGroup(formControls) {\n if (!formControls.length) {\n return false;\n }\n const name = formControls.first.name;\n return formControls.toArray().every(c => c.name === name && (this.isRadioControl(c)));\n }\n isRadioControl(control) {\n return control.valueAccessor instanceof RadioControlValueAccessor;\n }\n updateDescription() {\n const controls = this.findControlElements();\n if (!controls) {\n return;\n }\n controls.forEach((control) => {\n if (this.errorChildren.length > 0 || this.hintChildren.length > 0) {\n const ariaIds = this.generateDescriptionIds(control);\n this.renderer.setAttribute(control, 'aria-describedby', ariaIds);\n }\n });\n }\n findControlElements() {\n if (!this.controlElementRefs) {\n return;\n }\n // if the control is KendoInput and has focusableId - dropdowns, dateinputs\n if (this.kendoInput && this.kendoInput.focusableId && isDocumentAvailable()) {\n return [this.hostElement.nativeElement.querySelector(`#${this.kendoInput.focusableId}`)];\n }\n return this.controlElementRefs.map(el => el.nativeElement);\n }\n generateDescriptionIds(control) {\n const ids = new Set();\n if (control.hasAttribute('aria-describedby')) {\n const attributes = control.getAttribute('aria-describedby').split(' ');\n attributes.forEach((attr) => {\n if (attr.includes('kendo-hint-') || attr.includes('kendo-error-')) {\n return;\n }\n ids.add(attr);\n });\n }\n this.hintChildren.forEach((hint) => {\n ids.add(hint.id);\n });\n this.errorChildren.forEach((error) => {\n ids.add(error.id);\n });\n return Array.from(ids).join(' ');\n }\n showHintsInitial() {\n if (!this.control) {\n return true;\n }\n const { valid, untouched, pristine } = this.control;\n return valid || (untouched && pristine);\n }\n showErrorsInitial() {\n if (!this.control) {\n return false;\n }\n const { invalid, dirty, touched } = this.control;\n return invalid && (dirty || touched);\n }\n setDescription() {\n this.updateDescription();\n this.subscriptions.add(this.errorChildren.changes.subscribe(() => this.updateDescription()));\n this.subscriptions.add(this.hintChildren.changes.subscribe(() => this.updateDescription()));\n }\n};\nFormFieldComponent.ɵfac = function FormFieldComponent_Factory(t) { return new (t || FormFieldComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFormFieldComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FormFieldComponent, selectors: [[\"kendo-formfield\"]], contentQueries: function FormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, 7);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, 5, ElementRef);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ErrorComponent, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HintComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControls = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.controlElementRefs = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.errorChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.hintChildren = _t);\n } }, hostVars: 7, hostBindings: function FormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-form-field\", ctx.hostClass)(\"k-form-field-error\", ctx.errorClass)(\"k-form-field-disabled\", ctx.disabledClass);\n } }, inputs: { showHints: \"showHints\", orientation: \"orientation\", showErrors: \"showErrors\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ])], ngContentSelectors: _c108, decls: 5, vars: 4, consts: [[4, \"ngIf\"]], template: function FormFieldComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c107);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"div\");\n ɵngcc0.ɵɵprojection(2, 1);\n ɵngcc0.ɵɵtemplate(3, FormFieldComponent_ng_content_3_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵtemplate(4, FormFieldComponent_ng_content_4_Template, 1, 0, \"ng-content\", 0);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-form-field-wrap\", ctx.horizontal);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasHints);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasErrors);\n } }, directives: [ɵngcc3.NgIf], encapsulation: 2 });\n__decorate([\n HostBinding('class.k-form-field'),\n __metadata(\"design:type\", Boolean)\n], FormFieldComponent.prototype, \"hostClass\", void 0);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], FormFieldComponent.prototype, \"direction\", void 0);\n__decorate([\n HostBinding('class.k-form-field-error'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FormFieldComponent.prototype, \"errorClass\", null);\n__decorate([\n HostBinding('class.k-form-field-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FormFieldComponent.prototype, \"disabledClass\", null);\n__decorate([\n ContentChildren(NgControl, { descendants: true }),\n __metadata(\"design:type\", QueryList),\n __metadata(\"design:paramtypes\", [QueryList])\n], FormFieldComponent.prototype, \"formControls\", null);\n__decorate([\n ContentChildren(NgControl, { read: ElementRef, descendants: true }),\n __metadata(\"design:type\", QueryList)\n], FormFieldComponent.prototype, \"controlElementRefs\", void 0);\n__decorate([\n ContentChild(KendoInput, { static: true }),\n __metadata(\"design:type\", Object)\n], FormFieldComponent.prototype, \"kendoInput\", void 0);\n__decorate([\n ContentChildren(ErrorComponent, { descendants: true }),\n __metadata(\"design:type\", QueryList)\n], FormFieldComponent.prototype, \"errorChildren\", void 0);\n__decorate([\n ContentChildren(HintComponent, { descendants: true }),\n __metadata(\"design:type\", QueryList)\n], FormFieldComponent.prototype, \"hintChildren\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FormFieldComponent.prototype, \"showHints\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FormFieldComponent.prototype, \"orientation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FormFieldComponent.prototype, \"showErrors\", void 0);\nFormFieldComponent = __decorate([ __metadata(\"design:paramtypes\", [Renderer2,\n LocalizationService,\n ElementRef])\n], FormFieldComponent);\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the FormField, Error and Hint components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the FormField module\n * import { FormFieldModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FormFieldModule], // import FormField module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet FormFieldModule = class FormFieldModule {\n};\nFormFieldModule.ɵfac = function FormFieldModule_Factory(t) { return new (t || FormFieldModule)(); };\nFormFieldModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: FormFieldModule });\nFormFieldModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Inputs module\n * import { InputsModule } from '@progress/kendo-angular-inputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { BrowserAnimationsModule } from '@angular/platform-browser/animations';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, BrowserAnimationsModule, InputsModule], // import Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet InputsModule = class InputsModule {\n};\nInputsModule.ɵfac = function InputsModule_Factory(t) { return new (t || InputsModule)(); };\nInputsModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: InputsModule });\nInputsModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule], TextAreaModule, TextBoxModule, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, ColorPickerModule, CheckBoxModule, RadioButtonModule, FormFieldModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LabelTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoSliderLabelTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SliderComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSlider',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.slider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent_1) },\n { provide: KendoInput, useExisting: forwardRef(() => SliderComponent_1) }\n ],\n selector: 'kendo-slider',\n template: `\n \n
            \n \n \n \n \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Injector }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }]; }, { focusableId: [{\n type: Input\n }], animate: [{\n type: Input\n }], showButtons: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], dragHandleTitle: [{\n type: Input\n }], incrementTitle: [{\n type: Input\n }], decrementTitle: [{\n type: Input\n }], draghandle: [{\n type: ViewChild,\n args: ['draghandle', { static: true }]\n }], decreaseButton: [{\n type: ViewChild,\n args: ['decreaseButton', { static: false }]\n }], increaseButton: [{\n type: ViewChild,\n args: ['increaseButton', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RangeSliderComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoRangeSlider',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.rangeslider' },\n { multi: true, provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RangeSliderComponent_1) },\n { provide: KendoInput, useExisting: forwardRef(() => RangeSliderComponent_1) }\n ],\n selector: 'kendo-rangeslider',\n template: `\n \n\n
            \n
            \n
              \n
            \n
            \n
            \n
            \n \n \n
            \n
            \n \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Injector }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }]; }, { value: [{\n type: Input\n }], draghandleStart: [{\n type: ViewChild,\n args: ['draghandleStart', { static: true }]\n }], draghandleEnd: [{\n type: ViewChild,\n args: ['draghandleEnd', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SwitchComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSwitch',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.switch' },\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SwitchComponent_1) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => SwitchComponent_1)\n }\n ],\n selector: 'kendo-switch',\n template: `\n \n\n \n {{onLabelMessage}}\n {{offLabelMessage}}\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-switch']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], checked: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], ieClass: [{\n type: HostBinding,\n args: ['class.k-ie']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], ariaReadonly: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], onLabel: [{\n type: Input\n }], offLabel: [{\n type: Input\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextAreaDirective, [{\n type: Directive,\n args: [{\n providers: [{\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaDirective_1),\n multi: true\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => TextAreaDirective_1)\n }],\n selector: 'textarea[kendoTextArea]'\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Injector }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { elementClass: [{\n type: HostBinding,\n args: ['class.k-textarea']\n }], autofillClass: [{\n type: HostBinding,\n args: ['class.k-autofill']\n }], valueChange: [{\n type: Output\n }], autoSize: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], value: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxContainerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-textbox-container',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-textbox-container']\n }], textareaElementClass: [{\n type: HostBinding,\n args: ['class.k-textarea-wrapper']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], invalidClass: [{\n type: HostBinding,\n args: ['class.k-state-invalid']\n }], id: [{\n type: Input\n }], floatingLabel: [{\n type: Input\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: false }]\n }], textarea: [{\n type: ContentChild,\n args: [TextAreaDirective, { static: false }]\n }], formControl: [{\n type: ContentChild,\n args: [NgControl, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoTextBox]',\n providers: [{\n provide: KendoInput,\n useExisting: forwardRef(() => TextBoxDirective_1)\n }]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }], value: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NumericTextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoNumericTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.numerictextbox' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumericTextBoxComponent_1), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => NumericTextBoxComponent_1), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => NumericTextBoxComponent_1) }\n ],\n selector: 'kendo-numerictextbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc4.IntlService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.Injector }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], decimals: [{\n type: Input\n }], step: [{\n type: Input\n }], spinners: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], changeValueOnScroll: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], format: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-numerictextbox']\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], maxlength: [{\n type: Input\n }], numericInput: [{\n type: ViewChild,\n args: ['numericInput', { static: true }]\n }], numericWrap: [{\n type: ViewChild,\n args: ['numericWrap', { static: true }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NumericTextBoxCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => NumericTextBoxCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-numerictextbox-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MaskingService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MaskedTextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoMaskedTextBox',\n providers: [\n MaskingService,\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1) /* tslint:disable-line */\n },\n {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1) /* tslint:disable-line */\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => MaskedTextBoxComponent_1)\n }\n ],\n selector: 'kendo-maskedtextbox',\n template: `\n \n `\n }]\n }], function () { return [{ type: MaskingService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ChangeDetectorRef }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-maskedtextbox']\n }], prompt: [{\n type: Input\n }], promptPlaceholder: [{\n type: Input\n }], includeLiterals: [{\n type: Input\n }], maskOnFocus: [{\n type: Input\n }], maskValidation: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostDisabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], rules: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], \n /**\n * @hidden\n */\n pasteHandler: [{\n type: HostListener,\n args: ['paste', ['$event']]\n }], \n /**\n * @hidden\n */\n inputHandler: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], value: [{\n type: Input\n }], title: [{\n type: Input\n }], mask: [{\n type: Input\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SliderTicksComponent, [{\n type: Component,\n args: [{\n selector: '[kendoSliderTicks]',\n template: `\n
          • \n \n \n \n \n \n  \n \n
          • \n\n \n {{ tickTitle(value) }}\n \n `\n }]\n }], function () { return []; }, { wrapperClasses: [{\n type: HostBinding,\n args: ['class']\n }], tickTitle: [{\n type: Input\n }], vertical: [{\n type: Input\n }], step: [{\n type: Input\n }], largeStep: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], tickElements: [{\n type: ViewChildren,\n args: ['tickElement']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SlidersCommonModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SliderTicksComponent,\n LabelTemplateDirective\n ],\n exports: [\n LabelTemplateDirective,\n SliderTicksComponent,\n DraggableModule,\n EventsModule,\n ResizeSensorModule\n ],\n imports: [CommonModule, DraggableModule, EventsModule, ResizeSensorModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SlidersCommonModule, { declarations: function () { return [SliderTicksComponent, LabelTemplateDirective]; }, imports: function () { return [CommonModule, DraggableModule, EventsModule, ResizeSensorModule]; }, exports: function () { return [LabelTemplateDirective, SliderTicksComponent, DraggableModule,\n EventsModule,\n ResizeSensorModule]; } }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedSliderMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => LocalizedSliderMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SliderCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: SliderMessages,\n useExisting: forwardRef(() => SliderCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-slider-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SliderModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LocalizedSliderMessagesDirective\n ],\n exports: [\n SliderComponent,\n SliderCustomMessagesComponent,\n LabelTemplateDirective,\n LocalizedSliderMessagesDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SliderModule, { declarations: function () { return [SliderComponent, SliderCustomMessagesComponent, LocalizedSliderMessagesDirective]; }, imports: function () { return [CommonModule, SlidersCommonModule]; }, exports: function () { return [SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, LocalizedSliderMessagesDirective]; } }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedRangeSliderMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => LocalizedRangeSliderMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSliderLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RangeSliderCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: RangeSliderMessages,\n useExisting: forwardRef(() => RangeSliderCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-rangeslider-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RangeSliderModule, [{\n type: NgModule,\n args: [{\n declarations: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective\n ],\n exports: [\n RangeSliderComponent,\n RangeSliderCustomMessagesComponent,\n LocalizedRangeSliderMessagesDirective,\n LabelTemplateDirective\n ],\n imports: [CommonModule, SlidersCommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RangeSliderModule, { declarations: function () { return [RangeSliderComponent, RangeSliderCustomMessagesComponent, LocalizedRangeSliderMessagesDirective]; }, imports: function () { return [CommonModule, SlidersCommonModule]; }, exports: function () { return [RangeSliderComponent, RangeSliderCustomMessagesComponent, LocalizedRangeSliderMessagesDirective, LabelTemplateDirective]; } }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedSwitchMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedSwitchMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoSwitchLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SwitchCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => SwitchCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-switch-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SwitchModule, [{\n type: NgModule,\n args: [{\n declarations: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n exports: [\n SwitchComponent,\n SwitchCustomMessagesComponent,\n LocalizedSwitchMessagesDirective\n ],\n imports: [CommonModule, EventsModule, ResizeSensorModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SwitchModule, { declarations: function () { return [SwitchComponent, SwitchCustomMessagesComponent, LocalizedSwitchMessagesDirective]; }, imports: function () { return [CommonModule, EventsModule, ResizeSensorModule]; }, exports: function () { return [SwitchComponent, SwitchCustomMessagesComponent, LocalizedSwitchMessagesDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedNumericTextBoxMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: NumericTextBoxMessages,\n useExisting: forwardRef(() => LocalizedNumericTextBoxMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoNumericTextBoxLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NumericTextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [\n LocalizedNumericTextBoxMessagesDirective,\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n exports: [\n NumericTextBoxComponent,\n NumericTextBoxCustomMessagesComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(NumericTextBoxModule, { declarations: function () { return [LocalizedNumericTextBoxMessagesDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MaskedTextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [MaskedTextBoxComponent],\n exports: [MaskedTextBoxComponent],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MaskedTextBoxModule, { declarations: function () { return [MaskedTextBoxComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [MaskedTextBoxComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxSuffixTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxSuffixTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxPrefixTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTextBoxPrefixTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoTextBox',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textbox' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextBoxComponent_1),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextBoxComponent_1) }\n ],\n selector: 'kendo-textbox',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ElementRef }]; }, { focusableId: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], value: [{\n type: Input\n }], selectOnFocus: [{\n type: Input\n }], showSuccessIcon: [{\n type: Input\n }], showErrorIcon: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], inputFocus: [{\n type: Output\n }], inputBlur: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-textbox']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabIndex: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], clearButtonIcon: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], maxlength: [{\n type: Input\n }], input: [{\n type: ViewChild,\n args: ['input', { static: true }]\n }], suffixTemplate: [{\n type: ContentChild,\n args: [TextBoxSuffixTemplateDirective, { static: false }]\n }], prefixTemplate: [{\n type: ContentChild,\n args: [TextBoxPrefixTemplateDirective, { static: false }]\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => TextBoxCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-textbox-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedTextBoxMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TextBoxMessages,\n useExisting: forwardRef(() => LocalizedTextBoxMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTextBoxLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(InputSeparatorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-input-separator, kendo-textbox-separator',\n template: ``\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-input-separator']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: [InputSeparatorComponent, TextAreaDirective], exports: [InputSeparatorComponent, TextAreaDirective] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [\n TextBoxDirective,\n TextBoxContainerComponent,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective\n ],\n exports: [\n TextBoxDirective,\n TextBoxContainerComponent,\n TextBoxComponent,\n TextBoxSuffixTemplateDirective,\n TextBoxPrefixTemplateDirective,\n EventsModule,\n TextBoxCustomMessagesComponent,\n LocalizedTextBoxMessagesDirective,\n SHARED_DIRECTIVES\n ],\n imports: [CommonModule, EventsModule, SharedModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TextBoxModule, { declarations: function () { return [TextBoxDirective, TextBoxContainerComponent, TextBoxComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, LocalizedTextBoxMessagesDirective]; }, imports: function () { return [CommonModule, EventsModule, SharedModule]; }, exports: function () { return [TextBoxDirective, TextBoxContainerComponent, TextBoxComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, EventsModule, TextBoxCustomMessagesComponent, LocalizedTextBoxMessagesDirective, InputSeparatorComponent, TextAreaDirective]; } }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextAreaComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoTextArea',\n providers: [\n LocalizationService,\n { provide: L10N_PREFIX, useValue: 'kendo.textarea' },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextAreaComponent_1),\n multi: true\n },\n { provide: KendoInput, useExisting: forwardRef(() => TextAreaComponent_1) }\n ],\n selector: 'kendo-textarea',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ElementRef }]; }, { focusableId: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-textarea']\n }], flow: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], resizable: [{\n type: Input\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], valueChange: [{\n type: Output\n }], flowCol: [{\n type: HostBinding,\n args: ['class.k-flex-col']\n }], flowRow: [{\n type: HostBinding,\n args: ['class.k-flex-row']\n }], tabIndex: [{\n type: Input\n }], rows: [{\n type: Input\n }], cols: [{\n type: Input\n }], maxlength: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextAreaSuffixComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoTextAreaSuffix',\n selector: 'kendo-textarea-suffix',\n template: ``\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-textarea-suffix']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TextAreaModule, [{\n type: NgModule,\n args: [{\n declarations: [\n TextAreaComponent,\n TextAreaSuffixComponent\n ],\n exports: [\n TextAreaComponent,\n EventsModule,\n TextAreaSuffixComponent,\n SHARED_DIRECTIVES\n ],\n imports: [CommonModule, EventsModule, SharedModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TextAreaModule, { declarations: function () { return [TextAreaComponent, TextAreaSuffixComponent]; }, imports: function () { return [CommonModule, EventsModule, SharedModule]; }, exports: function () { return [TextAreaComponent, EventsModule, TextAreaSuffixComponent, InputSeparatorComponent, TextAreaDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorinput',\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
            \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], colorInputClass: [{\n type: HostBinding,\n args: ['class.k-colorgradient-inputs']\n }, {\n type: HostBinding,\n args: ['class.k-hstack']\n }], value: [{\n type: Input\n }], formatView: [{\n type: Input\n }], opacityInput: [{\n type: ViewChild,\n args: ['opacityInput', { read: ElementRef, static: false }]\n }], toggleFormatButton: [{\n type: ViewChild,\n args: ['toggleFormatButton', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorGradientComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorgradient',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorGradientComponent_1)\n },\n {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorGradientComponent_1)\n },\n ColorGradientLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorGradientLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorgradient'\n }\n ],\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 styles: [`\n .k-clear-color {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n }\n .k-align-self-end {\n height: 140px;\n }\n `]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-colorgradient']\n }], id: [{\n type: Input\n }], opacity: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], clearButton: [{\n type: Input\n }], delay: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], format: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], readonlyAttribute: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], gradientId: [{\n type: HostBinding,\n args: ['attr.id']\n }], value: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], contrastTool: [{\n type: Input\n }], gradientDragHandle: [{\n type: ViewChild,\n args: ['gradientDragHandle', { read: ElementRef, static: false }]\n }], inputs: [{\n type: ViewChild,\n args: ['inputs', { static: false }]\n }], alphaSlider: [{\n type: ViewChild,\n args: ['alphaSlider', { static: false }]\n }], gradientWrapper: [{\n type: ViewChild,\n args: ['gradientWrapper', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPickerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorpicker',\n providers: [{\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPickerComponent_1)\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPickerComponent_1)\n },\n ColorPickerLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPickerLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpicker'\n }\n ],\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 }], function () { return [{ type: ɵngcc5.PopupService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-colorpicker']\n }], focusableId: [{\n type: Input\n }], view: [{\n type: Input\n }], readonly: [{\n type: Input\n }], disabled: [{\n type: Input\n }], format: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], activeColorClick: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], value: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], paletteSettings: [{\n type: Input\n }], gradientSettings: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], palette: [{\n type: ViewChild,\n args: ['palette', { read: ElementRef, static: false }]\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], colorGradient: [{\n type: ViewChild,\n args: ['colorGradient', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPaletteService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPaletteComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-colorpalette',\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ColorPaletteComponent_1) // tslint:disable-line:no-forward-ref\n }, {\n provide: KendoInput,\n useExisting: forwardRef(() => ColorPaletteComponent_1)\n },\n ColorPaletteService,\n ColorPaletteLocalizationService,\n {\n provide: LocalizationService,\n useExisting: ColorPaletteLocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.colorpalette'\n }\n ],\n template: `\n \n \n
            \n \n \n \n \n \n \n
            \n
            \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ColorPaletteService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }]; }, { id: [{\n type: Input\n }], format: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], tileSize: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], cellSelection: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-colorpalette']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], paletteId: [{\n type: HostBinding,\n args: ['attr.id']\n }], value: [{\n type: Input\n }], columns: [{\n type: Input\n }], palette: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], hostTabindex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], readonlyAttribute: [{\n type: HostBinding,\n args: ['attr.aria-readonly']\n }], \n /**\n * @hidden\n */\n handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], \n /**\n * @hidden\n */\n handleHostBlur: [{\n type: HostListener,\n args: ['blur']\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => ColorPickerCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-colorpicker-messages, kendo-colorgradient-messages, kendo-colorpalette-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedColorPickerMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ColorPickerMessages,\n useExisting: forwardRef(() => LocalizedColorPickerMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoColorPickerLocalizedMessages], [kendoColorGradientLocalizedMessages], [kendoColorPaletteLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FocusOnDomReadyDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFocusOnDomReady]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ContrastValidationComponent, [{\n type: Component,\n args: [{\n selector: '[kendoContrastValidation]',\n template: `\n {{contrastText}}\n \n {{passMessage}}\n \n \n \n {{failMessage}}\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { type: [{\n type: Input\n }], ratio: [{\n type: Input\n }], pass: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ContrastComponent, [{\n type: Component,\n args: [{\n selector: '[kendoContrastTool]',\n template: `\n
            \n {{contrastRatioMessage}}: {{formatedRatio}}\n \n \n \n \n \n \n \n
            \n
            \n
            \n
            \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { value: [{\n type: Input\n }], ratio: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ColorPickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n PUBLIC_DIRECTIVES,\n INTERNAL_DIRECTIVES\n ],\n exports: [PUBLIC_DIRECTIVES],\n imports: [\n SliderModule,\n NumericTextBoxModule,\n CommonModule,\n PopupModule,\n DraggableModule\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColorPickerModule, { declarations: function () { return [ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent, LocalizedColorPickerMessagesDirective, ColorPickerCustomMessagesComponent, ColorInputComponent, FocusOnDomReadyDirective, ContrastComponent, ContrastValidationComponent]; }, imports: function () { return [SliderModule, NumericTextBoxModule, CommonModule,\n PopupModule,\n DraggableModule]; }, exports: function () { return [ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent, LocalizedColorPickerMessagesDirective, ColorPickerCustomMessagesComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckBoxDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoCheckBox]'\n }]\n }], function () { return []; }, { kendoClass: [{\n type: HostBinding,\n args: ['class.k-checkbox']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CheckBoxModule, [{\n type: NgModule,\n args: [{\n declarations: [CheckBoxDirective],\n exports: [CheckBoxDirective],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CheckBoxModule, { declarations: function () { return [CheckBoxDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [CheckBoxDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RadioButtonDirective, [{\n type: Directive,\n args: [{\n selector: 'input[kendoRadioButton]'\n }]\n }], function () { return []; }, { kendoClass: [{\n type: HostBinding,\n args: ['class.k-radio']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RadioButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [RadioButtonDirective],\n exports: [RadioButtonDirective],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RadioButtonModule, { declarations: function () { return [RadioButtonDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [RadioButtonDirective]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ErrorComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formerror',\n template: `\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-error']\n }], align: [{\n type: Input\n }], roleAttribute: [{\n type: HostBinding,\n args: ['attr.role']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(HintComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formhint',\n template: `\n \n `\n }]\n }], function () { return []; }, { align: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-form-hint']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-text-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-text-end']\n }], idAttribute: [{\n type: HostBinding,\n args: ['attr.id']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FormFieldComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-formfield',\n template: `\n \n
            \n \n \n \n
            \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.formfield'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ElementRef }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-form-field']\n }], showHints: [{\n type: Input\n }], orientation: [{\n type: Input\n }], showErrors: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], errorClass: [{\n type: HostBinding,\n args: ['class.k-form-field-error']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-form-field-disabled']\n }], formControls: [{\n type: ContentChildren,\n args: [NgControl, { descendants: true }]\n }], controlElementRefs: [{\n type: ContentChildren,\n args: [NgControl, { read: ElementRef, descendants: true }]\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: true }]\n }], errorChildren: [{\n type: ContentChildren,\n args: [ErrorComponent, { descendants: true }]\n }], hintChildren: [{\n type: ContentChildren,\n args: [HintComponent, { descendants: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FormFieldModule, [{\n type: NgModule,\n args: [{\n declarations: [HintComponent, ErrorComponent, FormFieldComponent],\n exports: [HintComponent, ErrorComponent, FormFieldComponent],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FormFieldModule, { declarations: function () { return [HintComponent, ErrorComponent, FormFieldComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [HintComponent, ErrorComponent, FormFieldComponent]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(InputsModule, [{\n type: NgModule,\n args: [{\n exports: [\n TextAreaModule,\n TextBoxModule,\n SliderModule,\n RangeSliderModule,\n SwitchModule,\n NumericTextBoxModule,\n MaskedTextBoxModule,\n ColorPickerModule,\n CheckBoxModule,\n RadioButtonModule,\n FormFieldModule\n ],\n imports: [CommonModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(InputsModule, { imports: function () { return [CommonModule]; }, exports: function () { return [TextAreaModule, TextBoxModule, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, ColorPickerModule, CheckBoxModule, RadioButtonModule, FormFieldModule]; } }); })();\n\n\n\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CheckBoxModule, ColorInputComponent, ContrastValidationComponent, ContrastComponent, FocusOnDomReadyDirective, ColorGradientLocalizationService, ColorPaletteLocalizationService, ColorPickerLocalizationService, ColorPickerCustomMessagesComponent, ColorPickerMessages, ColorPaletteService, MaskingService, NumericTextBoxMessages, RadioButtonModule, RangeSliderCustomMessagesComponent, RangeSliderMessages, SHARED_DIRECTIVES, SliderCustomMessagesComponent, SliderMessages, SliderBase, SlidersCommonModule, SwitchCustomMessagesComponent, Messages, TextFieldsBase, TextBoxCustomMessagesComponent, TextBoxMessages, SliderComponent, RangeSliderComponent, LabelTemplateDirective, SwitchComponent, TextBoxContainerComponent, TextBoxDirective, TextAreaDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, MaskedTextBoxComponent, InputsModule, SliderTicksComponent, SliderModule, RangeSliderModule, SwitchModule, NumericTextBoxModule, MaskedTextBoxModule, TextBoxModule, TextAreaModule, ColorPickerComponent, ColorPaletteComponent, ColorGradientComponent, ColorPickerModule, ActiveColorClickEvent, CheckBoxDirective, RadioButtonDirective, HintComponent, ErrorComponent, FormFieldComponent, FormFieldModule, TextBoxComponent, TextBoxPrefixTemplateDirective, TextBoxSuffixTemplateDirective, TextAreaComponent, TextAreaSuffixComponent, InputSeparatorComponent, SharedModule, LocalizedColorPickerMessagesDirective, LocalizedNumericTextBoxMessagesDirective, LocalizedTextBoxMessagesDirective, LocalizedSliderMessagesDirective, LocalizedRangeSliderMessagesDirective, LocalizedSwitchMessagesDirective };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata, __param } from 'tslib';\nimport { EventEmitter, ɵɵdefineInjectable, ɵɵinject, LOCALE_ID, Injectable, Inject, Pipe, NgModule } from '@angular/core';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { dateFormatNames, dateFieldName, firstDay, format, formatDate, formatNumber, load, numberSymbols, parseDate, parseNumber, splitDateFormat, toString, weekendRange, setData, localeInfo } from '@telerik/kendo-intl';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nconst packageMetadata = {\n name: '@progress/kendo-angular-intl',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1646219037,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nconst DOCS_URL = 'http://www.telerik.com/kendo-angular-ui/components/internationalization/troubleshooting/';\n/**\n * @hidden\n */\nconst errorSolutions = {\n 'NoCurrency': `Solution: ${DOCS_URL}#toc-no-currency`,\n 'NoCurrencyDisplay': `Solution: ${DOCS_URL}#toc-no-currency-display`,\n 'NoCurrencyRegion': `Solution: ${DOCS_URL}#toc-no-currency-region`,\n 'NoDateFieldNames': `Solution: ${DOCS_URL}#toc-no-date-filed-names`,\n 'NoFirstDay': `Solution: ${DOCS_URL}#toc-no-first-day`,\n 'NoGMTInfo': `Solution: ${DOCS_URL}#toc-no-gmt-info`,\n 'NoLocale': `Solution: ${DOCS_URL}#toc-no-locale`,\n 'NoValidCurrency': `Solution: ${DOCS_URL}#toc-no-valid-currency`,\n 'NoWeekData': `Solution: ${DOCS_URL}#toc-no-week-data`\n};\n\nfunction formatMessage(error) {\n const message = error.message;\n const errorSolution = errorSolutions[Object.keys(errorSolutions).filter(key => message.indexOf(key) === 0)[0]];\n return errorSolution ? `${message} ${errorSolution}` : message;\n}\nfunction intlMethod(fn) {\n return function (...values) {\n try {\n return fn.apply(null, values);\n }\n catch (error) {\n error.message = formatMessage(error);\n throw error;\n }\n };\n}\n/**\n * @hidden\n */\nconst dateFormatNames$1 = intlMethod(dateFormatNames);\n/**\n * @hidden\n */\nconst dateFieldName$1 = intlMethod(dateFieldName);\n/**\n * @hidden\n */\nconst firstDay$1 = intlMethod(firstDay);\n/**\n * @hidden\n */\nconst format$1 = intlMethod(format);\n/**\n * @hidden\n */\nconst formatDate$1 = intlMethod(formatDate);\n/**\n * @hidden\n */\nconst formatNumber$1 = intlMethod(formatNumber);\n/**\n * @hidden\n */\nconst load$1 = intlMethod(load);\n/**\n * @hidden\n */\nconst numberSymbols$1 = intlMethod(numberSymbols);\n/**\n * @hidden\n */\nconst parseDate$1 = intlMethod(parseDate);\n/**\n * @hidden\n */\nconst parseNumber$1 = intlMethod(parseNumber);\n/**\n * @hidden\n */\nconst splitDateFormat$1 = intlMethod(splitDateFormat);\n/**\n * @hidden\n */\nconst toString$1 = intlMethod(toString);\n/**\n * @hidden\n */\nconst weekendRange$1 = intlMethod(weekendRange);\n/**\n * Sets a pre-built locale.\n *\n * @params data - The pre-built locale data.\n */\nconst setData$1 = (data) => setData(data);\n/**\n * Retrieves the locale data for the specified locale.\n *\n * @params locale - The locale id.\n * @returns data - The locale data.\n */\nconst localeData = (locale) => {\n try {\n return localeInfo(locale);\n }\n catch (error) {\n error.message = formatMessage(error);\n throw error;\n }\n};\n\nconst LOCALE_REGEX = /_/g;\n/**\n * @hidden\n */\nfunction cldrServiceFactory(localeId) {\n return new CldrIntlService(localeId);\n}\n/**\n * An abstract base class that implements\n * the Internationalization service methods\n * for the current locale.\n */\nlet IntlService = class IntlService {\n /**\n * @hidden\n */\n constructor() {\n /**\n * @hidden\n */\n this.changes = new EventEmitter();\n validatePackage(packageMetadata);\n }\n /**\n * Notifies that the service was changed.\n */\n notify() {\n this.changes.emit();\n }\n};\nIntlService.ɵfac = function IntlService_Factory(t) { return new (t || IntlService)(); };\nIntlService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: IntlService, factory: function IntlService_Factory(t) { let r = null; if (t) {\n r = new t();\n }\n else {\n r = cldrServiceFactory(ɵngcc0.ɵɵinject(LOCALE_ID));\n } return r; }, providedIn: 'root' });\nIntlService.ngInjectableDef = ɵɵdefineInjectable({ factory: function IntlService_Factory() { return cldrServiceFactory(ɵɵinject(LOCALE_ID)); }, token: IntlService, providedIn: \"root\" });\nIntlService = __decorate([ __metadata(\"design:paramtypes\", [])\n], IntlService);\n/**\n * The Internationalization service implemented by using\n * the CLDR Database via the `@telerik/kendo-intl` package.\n */\nlet CldrIntlService = class CldrIntlService extends IntlService {\n /**\n * Creates a new instance of the service with the ID of the specified locale.\n *\n * Note that the parts of the locale ID can be separated by either `_` (underscore)\n * or `-` (dash).\n *\n * @param localeId - The default locale ID.\n */\n constructor(localeId) {\n super();\n this.localeId = localeId;\n }\n /**\n * Gets or sets the current locale ID.\n */\n get localeId() {\n return this.locale;\n }\n set localeId(value) {\n // Angular locales use underscore, for example, en_US\n // while IETF BCP-47 specifies a dash.\n // https://tools.ietf.org/html/bcp47\n const locale = value.replace(LOCALE_REGEX, '-');\n if (locale !== this.locale) {\n this.locale = locale;\n this.notify();\n }\n }\n /**\n * Formats a string with placeholders such as\n * `Total amount {0:c}`.\n *\n * @param format - The format string.\n * @param values - One or more values to output in the format string placeholders.\n * @return - The formatted string.\n */\n format(format$$1, ...values) {\n return format$1(format$$1, values, this.localeId);\n }\n /**\n * Converts an object into a string based on the specified format.\n *\n * @param value - The value to format.\n * @param format - The format to use.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted object.\n */\n toString(value, format$$1, localeId) {\n return toString$1(value, format$$1, localeId || this.localeId);\n }\n /**\n * Converts a `Date` object into a string based on the specified format.\n * If no format is provided, the default short date format is used.\n *\n * @param value - The date to format.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted date.\n */\n formatDate(value, format$$1, localeId) {\n return formatDate$1(value, format$$1, localeId || this.localeId);\n }\n /**\n * Converts a string into a `Date` object based on the specified format.\n *\n * @param value - The string to convert.\n * @param format - The format strings or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The parsed date.\n */\n parseDate(value, format$$1, localeId) {\n return parseDate$1(value, format$$1, localeId || this.localeId);\n }\n /**\n * Converts a string into a `Number`.\n *\n * @param value - The string to convert.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The parsed number.\n */\n parseNumber(value, format$$1, localeId) {\n return parseNumber$1(value, localeId || this.localeId, format$$1);\n }\n /**\n * Converts a `Number` into a string based on the specified format.\n *\n * @param value - The number to format.\n * @param format - The format string or options.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return The formatted number.\n */\n formatNumber(value, format$$1, localeId) {\n return formatNumber$1(value, format$$1, localeId || this.localeId);\n }\n /**\n * Returns the date names from the current locale based on the option.\n *\n * The available `type` values are:\n * - `era`\n * - `year`\n * - `quarter`\n * - `month`\n * - `week`\n * - `day`\n * - `dayperiod`\n * - `hour`\n * - `minute`\n * - `second`\n * - `zone`\n *\n * The available `nameType` values are:\n * - `wide`\n * - `narrow`\n * - `short`\n *\n * @param options - Detailed configuration for the desired date field name.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The day names from the current locale based on the option.\n * @returns The localized date field name from the current locale based on the option.\n *\n * @example\n * ```\n * dateFieldName({ type: 'day' }); //returns 'day';\n * dateFieldName({ type: 'day', nameType: 'wide' }); //returns 'day';\n * dateFieldName({ type: 'month', nameType: 'short' }); //returns 'mo.';\n * dateFieldName({ type: 'month', nameType: 'wide' }); //returns 'month';\n * ```\n */\n dateFieldName(options, localeId) {\n return dateFieldName$1(options, localeId || this.localeId);\n }\n /**\n * Returns a localized date field name based on specific dateFieldName options.\n *\n * The available type values are:\n * - `day`\n * - `dayperiod`\n * - `months`\n * - `quarters`\n * - `eras`\n *\n * @param options - Detailed configuration for the desired date format.\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The day names from the current locale based on the option.\n */\n dateFormatNames(options, localeId) {\n return dateFormatNames$1(localeId || this.localeId, options);\n }\n /**\n * Splits the date format into objects containing information about each part of the pattern.\n *\n * @param format The format string or options.\n * @param localeId The optional locale id. If not specified, the `\"en\"` locale id is used.\n * @returns The date format parts.\n */\n splitDateFormat(format$$1, localeId) {\n return splitDateFormat$1(format$$1, localeId || this.localeId);\n }\n /**\n * Returns the number symbols from the current locale based on the option.\n *\n * @param localeId - The locale ID to use in place of the default one. Optional.\n * @return - The number symbols from the current locale.\n */\n numberSymbols(localeId) {\n return numberSymbols$1(localeId || this.localeId);\n }\n /**\n * Returns the first day index starting from Sunday.\n *\n * @param localeId - The locale ID. Defaults to the current locale ID.\n * @return - The index of the first day of the week (0 == Sunday).\n */\n firstDay(localeId) {\n return firstDay$1(localeId || this.localeId);\n }\n /**\n * Returns the start and end index of the locale weekend starting from Sunday.\n *\n * @param localeId - The locale ID. Defaults to the current locale ID.\n * @return - The the start and end index of the locale weekend (0 == Sunday).\n */\n weekendRange(localeId) {\n return weekendRange$1(localeId || this.localeId);\n }\n};\nCldrIntlService.ɵfac = function CldrIntlService_Factory(t) { return new (t || CldrIntlService)(ɵngcc0.ɵɵinject(LOCALE_ID)); };\nCldrIntlService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CldrIntlService, factory: function (t) { return CldrIntlService.ɵfac(t); } });\nCldrIntlService = __decorate([ __param(0, Inject(LOCALE_ID)),\n __metadata(\"design:paramtypes\", [String])\n], CldrIntlService);\n\nconst isNumeric = (value) => !isNaN(value - parseFloat(value));\nconst ɵ0 = isNumeric;\n/**\n * Formats a date value to a string based on the requested format.\n * This pipe uses the [IntlService]({% slug api_intl_intlservice %}).\n *\n * @example\n * ```ng-template-no-run\n *
              \n *
            • {{date | kendoDate }}
            • \n *
            • {{milliseconds | kendoDate: 'M/dd/yyy' }}
            • \n *
            • {{stringDate | kendoDate: 'G' }}
            • \n *
            \n * ```\n */\nlet DatePipe = class DatePipe {\n /**\n * @hidden\n */\n constructor(intlService) {\n this.intlService = intlService;\n }\n /**\n * Converts a `Date` object into a string based on the specified format.\n * If no format is provided, the default short date format is used.\n *\n * @param value - The date to format.\n * @param format - The format string or options.\n * @param localeId - (Optional) The ID of the locale which will be used instead of the default one.\n * @return - The formatted date.\n */\n transform(value, format$$1 = \"\", localeId) {\n value = this.normalize(value);\n if (value) {\n return this.intlService.formatDate(value, format$$1, localeId);\n }\n return value;\n }\n normalize(value) {\n if (value && typeof value === 'string') {\n value = this.intlService.parseDate(value);\n }\n else if (value && isNumeric(value)) {\n value = new Date(parseFloat(value));\n }\n return value;\n }\n};\nDatePipe.ɵfac = function DatePipe_Factory(t) { return new (t || DatePipe)(ɵngcc0.ɵɵdirectiveInject(IntlService, 16)); };\nDatePipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"kendoDate\", type: DatePipe, pure: true });\nDatePipe = __decorate([ __metadata(\"design:paramtypes\", [IntlService])\n], DatePipe);\n\n/**\n * Formats a number value to a string based on the requested format.\n * This pipe uses the [`IntlService`]({% slug api_intl_intlservice %}).\n *\n * @example\n * ```ng-template-no-run\n *
              \n *
            • {{decimal | kendoNumber:'c' }}
            • \n *
            • {{stringNumber | kendoNumber:'p' }}
            • \n *
            • {{int | kendoNumber:'##.00' }}
            • \n *
            \n * ```\n */\nlet NumberPipe = class NumberPipe {\n /**\n * @hidden\n */\n constructor(intlService) {\n this.intlService = intlService;\n }\n /**\n * Converts a `Number` object into a string based on the specified format.\n * If no format is provided, the value is formatted as decimal number using the\n * [`\"n\"`](https://github.com/telerik/kendo-intl/blob/master/docs/num-formatting/index.md#standard) format.\n *\n * @param value - The numer that will be formatted.\n * @param format - The format string or options.\n * @param localeId - (Optional) The locale ID that will be used in place of the default one.\n * @return - The formatted number.\n */\n transform(value, format$$1, localeId) {\n if (typeof value === 'string') {\n value = this.intlService.parseNumber(value);\n }\n if (value !== null && value !== undefined) {\n return this.intlService.formatNumber(value, format$$1, localeId);\n }\n return value;\n }\n};\nNumberPipe.ɵfac = function NumberPipe_Factory(t) { return new (t || NumberPipe)(ɵngcc0.ɵɵdirectiveInject(IntlService, 16)); };\nNumberPipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"kendoNumber\", type: NumberPipe, pure: true });\nNumberPipe = __decorate([ __metadata(\"design:paramtypes\", [IntlService])\n], NumberPipe);\n\nconst pipes = [\n DatePipe,\n NumberPipe\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}docs/ts/latest/guide/ngmodule.html)\n * definition for the Intl services.\n */\nlet IntlModule = class IntlModule {\n};\nIntlModule.ɵfac = function IntlModule_Factory(t) { return new (t || IntlModule)(); };\nIntlModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: IntlModule });\nIntlModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(IntlService, [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n useFactory: cldrServiceFactory,\n deps: [LOCALE_ID]\n }]\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CldrIntlService, [{\n type: Injectable\n }], function () { return [{ type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DatePipe, [{\n type: Pipe,\n args: [{\n name: 'kendoDate'\n }]\n }], function () { return [{ type: IntlService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NumberPipe, [{\n type: Pipe,\n args: [{\n name: 'kendoNumber'\n }]\n }], function () { return [{ type: IntlService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(IntlModule, [{\n type: NgModule,\n args: [{\n declarations: [pipes],\n exports: [pipes]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(IntlModule, { declarations: [DatePipe, NumberPipe], exports: [DatePipe, NumberPipe] }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { cldrServiceFactory, IntlService, CldrIntlService, DatePipe, ɵ0, NumberPipe, IntlModule, dateFormatNames$1 as dateFormatNames, dateFieldName$1 as dateFieldName, firstDay$1 as firstDay, format$1 as format, formatDate$1 as formatDate, formatNumber$1 as formatNumber, load$1 as load, numberSymbols$1 as numberSymbols, parseDate$1 as parseDate, parseNumber$1 as parseNumber, splitDateFormat$1 as splitDateFormat, toString$1 as toString, weekendRange$1 as weekendRange, setData$1 as setData, localeData };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __param, __metadata } from 'tslib';\nimport { Injectable, InjectionToken, Inject, Optional } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { skip, map, tap } from 'rxjs/operators';\n\n/* tslint:disable:max-line-length */\n/**\n * A base class for a service that returns localized messages.\n *\n * For more information, refer to the section on [using the message service]({% slug messages_l10n %}#toc-using-the-message-service).\n */\nimport * as ɵngcc0 from '@angular/core';\nlet MessageService = class MessageService {\n /* tslint:disable:max-line-length */\n /**\n * A base class for a service that returns localized messages.\n *\n * For more information, refer to the section on [using the message service]({% slug messages_l10n %}#toc-using-the-message-service).\n */\n constructor() {\n /**\n * @hidden\n */\n this.changes = new BehaviorSubject({ rtl: undefined });\n }\n /**\n * Notifies the components that the messages were changed.\n *\n * @param rtl - (Optional) A new value for the [text direction token]({% slug api_l10n_rtl %}).\n */\n notify(rtl) {\n this.changes.next({ rtl });\n }\n /**\n * Returns a localized message for the supplied key.\n *\n * @param key - The message key. For example, `\"kendo.grid.noRecords\"`.\n * @return - The localized message for this key or `undefined` if not found.\n */\n get(key) {\n return undefined;\n }\n};\nMessageService.ɵfac = function MessageService_Factory(t) { return new (t || MessageService)(); };\nMessageService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: MessageService, factory: function (t) { return MessageService.ɵfac(t); } });\n\n/**\n * Base class that acts as a component messages container.\n *\n * For internal use.\n * @hidden\n */\nclass ComponentMessages {\n get override() {\n return false;\n }\n ngOnChanges(changes) {\n this.register(changes);\n if (Object.keys(changes).some(field => !changes[field].isFirstChange())) {\n this.service.notifyChanges();\n }\n }\n ngOnInit() {\n this.subscription = this.service.changes.pipe(skip(1)).subscribe(() => this.register(this));\n }\n register(changes) {\n const keys = Object.keys(changes);\n keys.forEach(key => this.service.register(key, this[key], this.override));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nComponentMessages.ɵfac = function ComponentMessages_Factory(t) { return new (t || ComponentMessages)(); };\nComponentMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ComponentMessages, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n\n/**\n * A token that specifies the text direction of Kendo UI for Angular components.\n *\n * @example\n * {% embed_file rtl/app.module.ts preview %}\n * {% embed_file rtl/app.component.ts %}\n * {% embed_file shared/main.ts hidden %}\n *\n */\nconst RTL = new InjectionToken(\"Kendo UI Right-to-Left token\");\n\n/**\n * Localization prefix for the component messages.\n *\n * For internal use.\n * @hidden\n */\nconst L10N_PREFIX = new InjectionToken('Localization key prefix');\n/**\n * Component localization service.\n *\n * For internal use.\n * @hidden\n */\nlet LocalizationService = class LocalizationService {\n constructor(prefix, messageService, _rtl) {\n this.prefix = prefix;\n this.messageService = messageService;\n this._rtl = _rtl;\n this.changes = new BehaviorSubject({ rtl: this._rtl });\n this.dictionary = {};\n if (messageService) {\n this.subscription = messageService.changes\n .pipe(map(({ rtl }) => rtl !== undefined ? rtl : this._rtl), tap(rtl => this._rtl = rtl))\n .subscribe(rtl => {\n this.dictionary = {};\n this.changes.next({ rtl });\n });\n }\n }\n get rtl() {\n return this._rtl;\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n get(shortKey) {\n const key = this.key(shortKey);\n return this.dictionary[key];\n }\n register(shortKey, value, override = false) {\n const key = this.key(shortKey);\n let message = value;\n if (!override) {\n if (this.dictionary.hasOwnProperty(key)) {\n return;\n }\n message = this.defaultValue(key, value);\n }\n this.dictionary[key] = message;\n }\n notifyChanges() {\n this.changes.next({ rtl: this.rtl });\n }\n key(shortKey) {\n return this.prefix + '.' + shortKey;\n }\n defaultValue(key, value) {\n if (!this.messageService) {\n return value;\n }\n const alt = this.messageService.get(key);\n return (alt === undefined) ? value : alt;\n }\n};\nLocalizationService.ɵfac = function LocalizationService_Factory(t) { return new (t || LocalizationService)(ɵngcc0.ɵɵinject(L10N_PREFIX), ɵngcc0.ɵɵinject(MessageService, 8), ɵngcc0.ɵɵinject(RTL, 8)); };\nLocalizationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: LocalizationService, factory: function (t) { return LocalizationService.ɵfac(t); } });\nLocalizationService = __decorate([ __param(0, Inject(L10N_PREFIX)),\n __param(1, Optional()),\n __param(2, Optional()), __param(2, Inject(RTL)),\n __metadata(\"design:paramtypes\", [String, MessageService, Boolean])\n], LocalizationService);\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(MessageService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizationService, [{\n type: Injectable\n }], function () { return [{ type: String, decorators: [{\n type: Inject,\n args: [L10N_PREFIX]\n }] }, { type: MessageService, decorators: [{\n type: Optional\n }] }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MessageService, ComponentMessages, L10N_PREFIX, LocalizationService, RTL };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata } from 'tslib';\nimport { Input, HostBinding, Directive, ElementRef, Renderer2, NgZone, forwardRef, Component, NgModule, EventEmitter, isDevMode, Output, ContentChild, ChangeDetectorRef, ViewChild } from '@angular/core';\nimport { isDocumentAvailable, guid, hasObservers, KendoInput } from '@progress/kendo-angular-common';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { CommonModule } from '@angular/common';\nimport { NgControl } from '@angular/forms';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\n\nfunction FloatingLabelComponent_label_2_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\"(\", ctx_r1.textFor(\"optional\"), \")\");\n} }\nfunction FloatingLabelComponent_label_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"label\", 2);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵtemplate(2, FloatingLabelComponent_label_2_span_2_Template, 2, 1, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r0.labelCssClass)(\"ngStyle\", ctx_r0.labelCssStyle)(\"for\", ctx_r0.id);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r0.labelId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.text, \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.optional);\n} }\nconst _c2 = [\"*\"];\nfunction LabelComponent_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\"(\", ctx_r0.textFor(\"optional\"), \")\");\n} }\nconst isUploadComponent = (component) => component.wrapper && (component.wrapper.tagName === 'KENDO-UPLOAD' || component.wrapper.tagName === 'KENDO-FILESELECT');\n/**\n * @hidden\n */\nconst isInputElement = (component) => component instanceof HTMLElement;\n/**\n * @hidden\n */\nconst inputElementHasAttr = (element, attribute) => element.hasAttribute(attribute);\n/**\n * @hidden\n */\nconst getWrappedNativeInput = (element) => element.querySelector('kendo-label > input, kendo-label > textarea, kendo-label > select');\n/**\n * @hidden\n */\nconst getRootElement = (element) => {\n if (!element) {\n return null;\n }\n let rootElement = element;\n while (rootElement.parentElement) {\n rootElement = rootElement.parentElement;\n }\n return rootElement;\n};\n\n/**\n * Represents the [Kendo UI Label directive for Angular]({% slug overview_label %}).\n * The Label associates a focusable Angular component or an HTML element\n * with a `label` tag by using the `[for]` property binding.\n *\n * To associate a component by using the `label` element, either:\n * * Set the `[for]` property binding to a\n * [template reference variable]({{ site.data.urls.angular['templatesyntax'] }}#template-reference-variables--var-), or\n * * Set the `[for]` property binding to an `id` HTML string value.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
            \n *
            \n * \n * \n *
            \n *\n *
            \n * \n * \n *
            \n *
            \n * `\n * })\n * class AppComponent { }\n * ```\n */\nlet LabelDirective = class LabelDirective {\n constructor(label, renderer, zone) {\n this.label = label;\n this.renderer = renderer;\n this.zone = zone;\n this.labelClass = true;\n this.handleClick = () => {\n const component = this.getFocusableComponent();\n if (!component) {\n return;\n }\n if (isUploadComponent(component)) {\n component.fileSelect.nativeElement.click();\n }\n if (component.focus) {\n component.focus();\n }\n };\n }\n get labelFor() {\n if (typeof this.for === 'string') {\n return this.for;\n }\n if (!isDocumentAvailable()) {\n return null;\n }\n const component = this.getFocusableComponent() || {};\n if (isInputElement(component) && !inputElementHasAttr(component, 'id')) {\n this.renderer.setAttribute(component, 'id', `k-${guid()}`);\n }\n return component.focusableId || component.id || null;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.setAriaLabelledby();\n this.zone.runOutsideAngular(() => this.clickListener = this.renderer.listen(this.label.nativeElement, 'click', this.handleClick));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.clickListener) {\n this.clickListener();\n }\n }\n /**\n * @hidden\n */\n setAriaLabelledby() {\n if (!isDocumentAvailable()) {\n return;\n }\n const component = this.getFocusableComponent();\n if (component && component.focusableId) {\n const rootElement = getRootElement(this.label.nativeElement);\n const labelTarget = rootElement.querySelector(`#${component.focusableId}`);\n if (!labelTarget) {\n return;\n }\n const labelElement = this.label.nativeElement;\n const id = labelElement.id || `k-${guid()}`;\n if (!labelElement.getAttribute('id')) {\n this.renderer.setAttribute(labelElement, 'id', id);\n }\n this.renderer.setAttribute(labelTarget, 'aria-labelledby', id);\n }\n }\n getFocusableComponent() {\n const target = this.for;\n return target && target.focus !== undefined ? target : null;\n }\n};\nLabelDirective.ɵfac = function LabelDirective_Factory(t) { return new (t || LabelDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nLabelDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LabelDirective, selectors: [[\"label\", \"for\", \"\"]], hostVars: 3, hostBindings: function LabelDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"for\", ctx.labelFor);\n ɵngcc0.ɵɵclassProp(\"k-label\", ctx.labelClass);\n } }, inputs: { for: \"for\" } });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LabelDirective.prototype, \"for\", void 0);\n__decorate([\n HostBinding('attr.for'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], LabelDirective.prototype, \"labelFor\", null);\n__decorate([\n HostBinding('class.k-label'),\n __metadata(\"design:type\", Boolean)\n], LabelDirective.prototype, \"labelClass\", void 0);\nLabelDirective = __decorate([ __metadata(\"design:paramtypes\", [ElementRef, Renderer2, NgZone])\n], LabelDirective);\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = /*@__PURE__*/ function () { let ɵMessages_BaseFactory; return function Messages_Factory(t) { return (ɵMessages_BaseFactory || (ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages)))(t || Messages); }; }();\nMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { optional: \"optional\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], Messages.prototype, \"optional\", void 0);\n\nvar LocalizedMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedMessagesDirective = LocalizedMessagesDirective_1 = class LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoLabelLocalizedMessages\", \"\"], [\"\", \"kendoFloatingLabelLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedMessagesDirective = LocalizedMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedMessagesDirective);\n\nvar CustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug label_globalization %}#toc-localization)).\n */\nlet CustomMessagesComponent = CustomMessagesComponent_1 = class CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-label-messages\"], [\"kendo-floatinglabel-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nCustomMessagesComponent = CustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], CustomMessagesComponent);\n\nconst SHARED_DIRECTIVES = [\n LocalizedMessagesDirective,\n CustomMessagesComponent\n];\n/**\n * @hidden\n */\nlet SharedDirectivesModule = class SharedDirectivesModule {\n};\nSharedDirectivesModule.ɵfac = function SharedDirectivesModule_Factory(t) { return new (t || SharedDirectivesModule)(); };\nSharedDirectivesModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: SharedDirectivesModule });\nSharedDirectivesModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-label',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1646219058,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nclass FloatingLabelInputAdapter {\n constructor(component, formControl) {\n this.component = component;\n const isObservableOrEventEmitter = (event) => event instanceof Observable || event instanceof EventEmitter;\n if (isObservableOrEventEmitter(component.onFocus)) {\n this.onFocus = component.onFocus;\n }\n if (isObservableOrEventEmitter(component.autoFillStart)) {\n this.autoFillStart = component.autoFillStart;\n }\n if (isObservableOrEventEmitter(component.autoFillEnd)) {\n this.autoFillEnd = component.autoFillEnd;\n }\n if (isObservableOrEventEmitter(component.onBlur)) {\n this.onBlur = component.onBlur;\n }\n if (formControl) {\n this.onValueChange = formControl.valueChanges;\n }\n else if (component.onValueChange) {\n this.onValueChange = component.onValueChange;\n }\n }\n get focusableId() {\n const component = this.component;\n if ('focusableId' in component) {\n return component.focusableId;\n }\n else if ('id' in component) {\n return component.id;\n }\n return \"\";\n }\n set focusableId(value) {\n const component = this.component;\n if ('focusableId' in component) {\n component.focusableId = value;\n }\n else if ('id' in component) {\n component.id = value;\n }\n }\n}\n\nconst isFunction = (x) => Object.prototype.toString.call(x) === '[object Function]';\n/**\n * Represents the [Kendo UI FloatingLabel component for Angular]({% slug overview_floatinglabel %}).\n * Provides floating labels to `input` elements.\n *\n * The FloatingLabel supports both Template and Reactive Forms and\n * [can contain Kendo UI for Angular Input components such as `kendo-combobox` and `kendo-numerictextbox`,\n * or HTML Input elements with the `kendoTextBox` directive applied]({% slug overview_floatinglabel %}#toc-implementing-floating-labels).\n *\n * @example\n * ```ts\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public name = 'John';\n * }\n *\n * ```\n */\nlet FloatingLabelComponent = class FloatingLabelComponent {\n constructor(elementRef, renderer, changeDetectorRef, localization) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.changeDetectorRef = changeDetectorRef;\n this.localization = localization;\n this.hostClasses = true;\n /**\n * Fires after the floating label position is changed.\n */\n this.positionChange = new EventEmitter();\n /**\n * @hidden\n */\n this.focused = false;\n /**\n * @hidden\n */\n this.empty = true;\n /**\n * @hidden\n */\n this.invalid = false;\n /**\n * @hidden\n */\n this.labelId = `k-${guid()}`;\n this.autoFillStarted = false;\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, \"id\");\n }\n /**\n * Represents the current floating label position.\n */\n get labelPosition() {\n if (!this.empty) {\n return 'Out';\n }\n return this.focused ? 'Out' : 'In';\n }\n get focusedClass() {\n return this.focused;\n }\n get invalidClass() {\n return this.invalid;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.validateSetup();\n const control = new FloatingLabelInputAdapter(this.kendoInput || this.formControl.valueAccessor, this.formControl);\n this.addHandlers(control);\n this.setLabelFor(control);\n }\n ngAfterViewInit() {\n if (this.kendoInput) {\n this.setAriaLabelledby(this.kendoInput);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n subscribe(control, eventName, handler) {\n if (control[eventName] instanceof EventEmitter) {\n const subscription = control[eventName].subscribe(handler);\n if (!this.subscription) {\n this.subscription = subscription;\n }\n else {\n this.subscription.add(subscription);\n }\n }\n }\n updateState() {\n const empty = value => {\n // zero is not an empty value (e.g., NumericTextBox)\n if (value === 0 || value === false) {\n return false;\n }\n // empty arrays are an empty value (e.g., MultiSelect)\n if (Array.isArray(value) && !value.length) {\n return true;\n }\n return !value;\n };\n const formControl = this.formControl;\n if (formControl) {\n const valueAccessor = formControl.valueAccessor;\n if (isFunction(valueAccessor.isEmpty)) {\n this.empty = valueAccessor.isEmpty();\n }\n else {\n this.empty = empty(formControl.value);\n }\n this.invalid = formControl.invalid && (formControl.touched || formControl.dirty);\n }\n else {\n this.empty = isFunction(this.kendoInput.isEmpty) ?\n this.kendoInput.isEmpty() : empty(this.kendoInput.value);\n }\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n this.changeDetectorRef.markForCheck();\n }\n setAriaLabelledby(component) {\n const componentId = component.focusableId || component.id;\n if (componentId) {\n const focusableElement = this.elementRef.nativeElement.querySelector(`#${componentId}`);\n this.renderer.setAttribute(focusableElement, 'aria-labelledby', this.labelId);\n }\n }\n setLabelFor(control) {\n const controlId = control.focusableId || control.id;\n if (this.id && controlId) {\n // input wins\n this.id = controlId;\n }\n else if (this.id) {\n control.focusableId = this.id;\n }\n else if (controlId) {\n this.id = controlId;\n }\n else {\n const id = `k-${guid()}`;\n control.focusableId = id;\n this.id = id;\n }\n }\n handleAutofill(control) {\n this.subscribe(control, 'autoFillStart', () => {\n this.autoFillStarted = true;\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n });\n this.subscribe(control, 'autoFillEnd', () => {\n if (this.autoFillStarted) {\n this.autoFillStarted = false;\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n }\n });\n }\n addHandlers(control) {\n const setFocus = (isFocused) => () => {\n this.focused = isFocused;\n this.updateState();\n if (!this.empty) {\n return;\n }\n if (hasObservers(this.positionChange)) {\n this.positionChange.emit(isFocused ? 'Out' : 'In');\n }\n };\n this.subscribe(control, 'onFocus', setFocus(true));\n this.subscribe(control, 'onBlur', setFocus(false));\n this.handleAutofill(control);\n const updateState = () => this.updateState();\n updateState();\n this.subscribe(control, 'onValueChange', updateState);\n }\n validateSetup() {\n if (!this.formControl && !this.kendoInput) {\n if (isDevMode()) {\n throw new Error(\"The FloatingLabelComponent requires a Kendo Input component\" +\n \" or a forms-bound component to function properly.\");\n }\n return;\n }\n }\n};\nFloatingLabelComponent.ɵfac = function FloatingLabelComponent_Factory(t) { return new (t || FloatingLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFloatingLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: FloatingLabelComponent, selectors: [[\"kendo-floatinglabel\"]], contentQueries: function FloatingLabelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControl = _t.first);\n } }, hostVars: 7, hostBindings: function FloatingLabelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-floating-label-container\", ctx.hostClasses)(\"k-state-focused\", ctx.focusedClass)(\"k-state-invalid\", ctx.invalidClass);\n } }, inputs: { id: \"id\", labelCssStyle: \"labelCssStyle\", labelCssClass: \"labelCssClass\", text: \"text\", optional: \"optional\" }, outputs: { positionChange: \"positionChange\" }, exportAs: [\"kendoFloatingLabel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatinglabel'\n }\n ])], ngContentSelectors: _c2, decls: 3, vars: 1, consts: function () { let i18n_0; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the optional segment of a FloatingLabel component\n * @meaning kendo.floatinglabel.optional\n */\n const MSG_EXTERNAL_356911862062553631$$DIST_FESM2015_INDEX_JS_1 = goog.getMsg(\"Optional\");\n i18n_0 = MSG_EXTERNAL_356911862062553631$$DIST_FESM2015_INDEX_JS_1;\n }\n else {\n i18n_0 = $localize `:kendo.floatinglabel.optional|The text for the optional segment of a FloatingLabel component␟d6b1dd6fb7530bd600b430042425d10b22163d1f␟356911862062553631:Optional`;\n } return [[\"kendoFloatingLabelLocalizedMessages\", \"\", \"optional\", i18n_0], [\"class\", \"k-label\", 3, \"ngClass\", \"ngStyle\", \"for\", 4, \"ngIf\"], [1, \"k-label\", 3, \"ngClass\", \"ngStyle\", \"for\"], [\"class\", \"k-label-optional\", 4, \"ngIf\"], [1, \"k-label-optional\"]]; }, template: function FloatingLabelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵtemplate(2, FloatingLabelComponent_label_2_Template, 3, 6, \"label\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.text);\n } }, directives: [LocalizedMessagesDirective, ɵngcc2.NgIf, ɵngcc2.NgClass, ɵngcc2.NgStyle], encapsulation: 2 });\n__decorate([\n HostBinding('class.k-floating-label-container'),\n __metadata(\"design:type\", Boolean)\n], FloatingLabelComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostBinding('class.k-state-focused'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FloatingLabelComponent.prototype, \"focusedClass\", null);\n__decorate([\n HostBinding('class.k-state-invalid'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], FloatingLabelComponent.prototype, \"invalidClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], FloatingLabelComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FloatingLabelComponent.prototype, \"labelCssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], FloatingLabelComponent.prototype, \"labelCssClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingLabelComponent.prototype, \"id\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], FloatingLabelComponent.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], FloatingLabelComponent.prototype, \"optional\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], FloatingLabelComponent.prototype, \"positionChange\", void 0);\n__decorate([\n ContentChild(KendoInput, { static: false }),\n __metadata(\"design:type\", Object)\n], FloatingLabelComponent.prototype, \"kendoInput\", void 0);\n__decorate([\n ContentChild(NgControl, { static: false }),\n __metadata(\"design:type\", NgControl)\n], FloatingLabelComponent.prototype, \"formControl\", void 0);\nFloatingLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n ChangeDetectorRef,\n LocalizationService])\n], FloatingLabelComponent);\n\nconst COMPONENT_DIRECTIVES = [FloatingLabelComponent];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextBox directive.\n *\n * @example\n *\n * ```ts-no-run\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FloatingLabelModule], // import FloatingLabel module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet FloatingLabelModule = class FloatingLabelModule {\n};\nFloatingLabelModule.ɵfac = function FloatingLabelModule_Factory(t) { return new (t || FloatingLabelModule)(); };\nFloatingLabelModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: FloatingLabelModule });\nFloatingLabelModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, SharedDirectivesModule], SharedDirectivesModule] });\n\n/**\n * Represents the [Kendo UI Label component for Angular]({% slug label_basic %}).\n *\n * Associates a label with input elements or components.\n *\n * @example\n * ```ts\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public name = 'John';\n * }\n *\n * ```\n */\nlet LabelComponent = class LabelComponent {\n constructor(elementRef, renderer, localization) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.localization = localization;\n this.subscriptions = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'id');\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (this.for) {\n this.control = this.for;\n return;\n }\n const wrappedNativeInput = getWrappedNativeInput(this.elementRef.nativeElement);\n if (wrappedNativeInput) {\n if (!wrappedNativeInput.hasAttribute('id')) {\n this.renderer.setAttribute(wrappedNativeInput, 'id', `k-${guid()}`);\n }\n this.control = wrappedNativeInput;\n return;\n }\n this.control = this.kendoInput;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n }));\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.labelDirective.setAriaLabelledby();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n};\nLabelComponent.ɵfac = function LabelComponent_Factory(t) { return new (t || LabelComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLabelComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: LabelComponent, selectors: [[\"kendo-label\"]], contentQueries: function LabelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n } }, viewQuery: function LabelComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(LabelDirective, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.labelDirective = _t.first);\n } }, hostVars: 1, hostBindings: function LabelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n } }, inputs: { text: \"text\", for: \"for\", optional: \"optional\" }, exportAs: [\"kendoLabel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.label'\n }\n ])], ngContentSelectors: _c2, decls: 5, vars: 5, consts: function () { let i18n_3; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the optional segment of a Label component\n * @meaning kendo.label.optional\n */\n const MSG_EXTERNAL_3476218486854814180$$DIST_FESM2015_INDEX_JS_4 = goog.getMsg(\"Optional\");\n i18n_3 = MSG_EXTERNAL_3476218486854814180$$DIST_FESM2015_INDEX_JS_4;\n }\n else {\n i18n_3 = $localize `:kendo.label.optional|The text for the optional segment of a Label component␟a1cd4a8f359a22151d7e73f2887fbb2967cd389a␟3476218486854814180:Optional`;\n } return [[\"kendoLabelLocalizedMessages\", \"\", \"optional\", i18n_3], [3, \"for\"], [\"class\", \"k-label-optional\", 4, \"ngIf\"], [1, \"k-label-optional\"]]; }, template: function LabelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵelementStart(1, \"label\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵtemplate(3, LabelComponent_span_3_Template, 2, 1, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(4);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-label-empty\", !ctx.text);\n ɵngcc0.ɵɵproperty(\"for\", ctx.control);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.optional);\n } }, directives: [LocalizedMessagesDirective, LabelDirective, ɵngcc2.NgIf], encapsulation: 2 });\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String)\n], LabelComponent.prototype, \"direction\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], LabelComponent.prototype, \"text\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], LabelComponent.prototype, \"for\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], LabelComponent.prototype, \"optional\", void 0);\n__decorate([\n ViewChild(LabelDirective, { static: true }),\n __metadata(\"design:type\", LabelDirective)\n], LabelComponent.prototype, \"labelDirective\", void 0);\n__decorate([\n ContentChild(KendoInput, { static: true }),\n __metadata(\"design:type\", Object)\n], LabelComponent.prototype, \"kendoInput\", void 0);\nLabelComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n LocalizationService])\n], LabelComponent);\n\nconst COMPONENT_DIRECTIVES$1 = [\n LabelDirective,\n LabelComponent\n];\n/**\n * The exported package module.\n *\n * The package exports:\n * - `LabelDirective`—The Label directive class.\n * - `LabelComponent`—The Label component class\n * - `FLoatingLabel`—The FloatingLabel component class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Label module\n * import { LabelModule } from '@progress/kendo-angular-label';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, LabelModule], // import Label module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet LabelModule = class LabelModule {\n};\nLabelModule.ɵfac = function LabelModule_Factory(t) { return new (t || LabelModule)(); };\nLabelModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: LabelModule });\nLabelModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, SharedDirectivesModule], FloatingLabelModule, SharedDirectivesModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LabelDirective, [{\n type: Directive,\n args: [{\n selector: 'label[for]' //tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { labelClass: [{\n type: HostBinding,\n args: ['class.k-label']\n }], labelFor: [{\n type: HostBinding,\n args: ['attr.for']\n }], for: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective_1)\n }\n ],\n selector: `\n [kendoLabelLocalizedMessages],\n [kendoFloatingLabelLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent_1)\n }\n ],\n selector: 'kendo-label-messages, kendo-floatinglabel-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(SharedDirectivesModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedDirectivesModule, { declarations: [LocalizedMessagesDirective, CustomMessagesComponent], exports: [LocalizedMessagesDirective, CustomMessagesComponent] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FloatingLabelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-floatinglabel',\n exportAs: 'kendoFloatingLabel',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatinglabel'\n }\n ],\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-floating-label-container']\n }], positionChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], invalidClass: [{\n type: HostBinding,\n args: ['class.k-state-invalid']\n }], id: [{\n type: Input\n }], labelCssStyle: [{\n type: Input\n }], labelCssClass: [{\n type: Input\n }], text: [{\n type: Input\n }], optional: [{\n type: Input\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: false }]\n }], formControl: [{\n type: ContentChild,\n args: [NgControl, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FloatingLabelModule, [{\n type: NgModule,\n args: [{\n declarations: [...COMPONENT_DIRECTIVES],\n exports: [...COMPONENT_DIRECTIVES, SharedDirectivesModule],\n imports: [CommonModule, SharedDirectivesModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FloatingLabelModule, { declarations: function () { return [FloatingLabelComponent]; }, imports: function () { return [CommonModule, SharedDirectivesModule]; }, exports: function () { return [FloatingLabelComponent, SharedDirectivesModule]; } }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LabelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-label',\n exportAs: 'kendoLabel',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.label'\n }\n ],\n template: `\n \n \n \n {{ text }}({{textFor('optional')}})\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }]; }, { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], text: [{\n type: Input\n }], for: [{\n type: Input\n }], optional: [{\n type: Input\n }], labelDirective: [{\n type: ViewChild,\n args: [LabelDirective, { static: true }]\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LabelModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, SharedDirectivesModule],\n declarations: [...COMPONENT_DIRECTIVES$1],\n exports: [...COMPONENT_DIRECTIVES$1, FloatingLabelModule, SharedDirectivesModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(LabelModule, { declarations: function () { return [LabelDirective, LabelComponent]; }, imports: function () { return [CommonModule, SharedDirectivesModule]; }, exports: function () { return [LabelDirective, LabelComponent, FloatingLabelModule, SharedDirectivesModule]; } }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { LocalizedMessagesDirective, Messages, SharedDirectivesModule, LabelDirective, LabelModule, FloatingLabelModule, FloatingLabelComponent, LabelComponent, CustomMessagesComponent };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty, yoda */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\nimport * as geo from \"../geometry\";\nimport * as PDF from \"../pdf\";\nimport { arabicToRoman, createPromise, measureText, mergeSort } from '../util';\nimport { parseColor as utils_parseColor, support, template as compileTemplate } from \"../common\";\nimport { Path, Text, Group, Image, Circle, LinearGradient } from \"../drawing\";\nimport { encodeBase64 } from \"../util\";\n\nconst browser = support.browser || {};\n/*\n\n XXX: to test:\n\n - cloneNodes function:\n - drawing document containing canvas with page breaking\n - drawing document with named radio -s (should not clear selection)\n - IE9/IE10 don't support el.dataset; do they copy user data?\n\n - repeating table headers/footers on page breaking\n\n - forceBreak, keepTogether\n\n - avoidLinks\n\n */\n\n/* -----[ local vars ]----- */\n\nfunction slice(thing) {\n return Array.prototype.slice.call(thing);\n}\n\nvar KENDO_PSEUDO_ELEMENT = \"KENDO-PSEUDO-ELEMENT\";\n\nvar IMAGE_CACHE = {};\n\nvar nodeInfo = {};\nnodeInfo._root = nodeInfo;\n\n/* -----[ Custom Text node to speed up rendering in PDF ]----- */\n\nconst inBrowser = typeof window !== 'undefined';\nconst microsoft = inBrowser ? browser.msie || browser.edge : false;\n\nclass TextRect extends Text {\n constructor(str, rect, options) {\n super(str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n rect() {\n // this is the crux of it: we can avoid a call to\n // measure(), which is what the base class does, since we\n // already know the rect. measure() is s-l-o-w.\n return this._pdfRect;\n }\n rawBBox() {\n // also let's avoid creating a new rectangle.\n return this._pdfRect;\n }\n}\n\nfunction addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += \" \" + cls;\n }\n}\n\nfunction removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function(a, word){\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(\" \");\n }\n}\n\nfunction setCSS(el, styles) {\n Object.keys(styles).forEach(function(key){\n el.style[key] = styles[key];\n });\n}\n\nvar matches = typeof Element !== \"undefined\" && Element.prototype && (function(p){\n if (p.matches) {\n return function(el, selector) { return el.matches(selector); };\n }\n if (p.webkitMatchesSelector) {\n return function(el, selector) { return el.webkitMatchesSelector(selector); };\n }\n if (p.mozMatchesSelector) {\n return function(el, selector) { return el.mozMatchesSelector(selector); };\n }\n if (p.msMatchesSelector) {\n return function(el, selector) { return el.msMatchesSelector(selector); };\n }\n return function(s) {\n\treturn [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n})(Element.prototype);\n\nfunction closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n // IE: stringifying rather than simply comparing with `document`,\n // which is not iframe-proof and fails in editor export —\n // https://github.com/telerik/kendo/issues/6721\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 /* Element */ && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n}\n\n// clone nodes ourselves, so that we redraw (DOM or\n// jQuery clone will not)\nvar cloneNodes = (function($){\n if ($) {\n // if we have Kendo and jQuery, use this version as it will\n // maintain proper links between cloned element and Kendo\n // widgets (i.e. it clones jQuery data(), which isn't the same\n // as element's data attributes).\n // https://github.com/telerik/kendo-ui-core/issues/2750\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1 /* Element */) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext(\"2d\").drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n // drop the name attributes so that we don't affect the selection of the\n // original nodes (i.e. checked status of radio buttons) when we insert our copy\n // into the DOM. https://github.com/telerik/kendo/issues/5409\n clone.removeAttribute(\"id\");\n clone.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n clone.value = el.value;\n }\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n // the no-jQuery version\n return function cloneNodes(el) {\n const clone = (function dive(node){\n const clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (let i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n })(el);\n\n // re-draw canvases - https://github.com/telerik/kendo/issues/4872\n const canvases = el.querySelectorAll(\"canvas\");\n if (canvases.length) {\n slice(clone.querySelectorAll(\"canvas\")).forEach((canvas, i) => {\n canvas.getContext(\"2d\").drawImage(canvases[i], 0, 0);\n });\n }\n\n // remove \"name\" attributes from elements -\n // https://github.com/telerik/kendo/issues/5409\n const orig = el.querySelectorAll(\"input, select, textarea, option\");\n slice(clone.querySelectorAll(\"input, select, textarea, option\")).forEach((el, i) => {\n el.removeAttribute(\"id\");\n el.removeAttribute(\"name\");\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n\n return clone;\n };\n }\n})(typeof window !== \"undefined\" && window.kendo && window.kendo.jQuery);\n\nfunction getXY(thing) {\n if (typeof thing == \"number\") {\n return { x: thing, y: thing };\n }\n if (Array.isArray(thing)) {\n return { x: thing[0], y: thing[1] };\n }\n return { x: thing.x, y: thing.y };\n}\n\nfunction drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n\n if (!element) {\n return promise.reject(\"No element to export\");\n }\n\n if (typeof window.getComputedStyle != \"function\") {\n throw new Error(\"window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.\");\n }\n\n PDF.defineFont(getFontFaces(element.ownerDocument));\n\n var scale = getXY(options.scale || 1);\n\n function doOne(element) {\n var group = new Group();\n\n // translate to start of page\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n (-pos.left * scale.x),\n (-pos.top * scale.y)\n ]);\n\n nodeInfo._clipbox = false;\n nodeInfo._matrix = geo.Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = \"a\";\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n\n addClass(element, \"k-pdf-export\");\n renderElement(element, group);\n removeClass(element, \"k-pdf-export\");\n\n return group;\n }\n\n cacheImages([ element ], function(){\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != \"auto\";\n var paperOptions = PDF.getPaperOptions(function(key, def){\n if (key == \"paperSize\") {\n // PDF.getPaperOptions croaks on \"auto\", just pass dummy A4 as we might\n // still be interested in margins.\n return hasPaperSize ? options[key] : \"A4\";\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = { left: 0, top: 0, right: 0, bottom: 0 };\n }\n\n // we want paper size and margin to be unaffected by\n // scaling in the output, so we have to reverse-scale\n // before our calculations begin.\n if (pageWidth) { pageWidth /= scale.x; }\n if (pageHeight) { pageHeight /= scale.y; }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n\n var group = new Group({\n pdf: {\n multiPage : true,\n paperSize : hasPaperSize ? paperOptions.paperSize : \"auto\",\n _ignoreMargin : hasMargin // HACK! see exportPDF in pdf/drawing.js\n }\n });\n handlePageBreaks(\n function(x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next(){\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function() {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n // XXX: should we also fail() the deferred object?\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n })();\n } else {\n x.pages.forEach(function(page){\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n },\n element,\n forceBreak,\n pageWidth ? pageWidth - margin.left - margin.right : null,\n pageHeight ? pageHeight - margin.top - margin.bottom : null,\n margin,\n options\n );\n } else {\n promise.resolve(doOne(element));\n }\n });\n\n function makeTemplate(template) {\n if (template != null) {\n if (typeof template == \"string\") {\n template = compileTemplate(template.replace(/^\\s+|\\s+$/g, \"\"));\n }\n if (typeof template == \"function\") {\n return function(data) {\n var el = template(data);\n if (el && typeof el == \"string\") {\n var div = document.createElement(\"div\");\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n // assumed DOM element\n return function() {\n return template.cloneNode(true);\n };\n }\n }\n\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement(\"KENDO-PDF-DOCUMENT\");\n var adjust = 0;\n\n // make sure elements are at the end (Grid widget\n // places TFOOT before TBODY, tricking our algorithm to\n // insert a page break right after the header).\n // https://github.com/telerik/kendo/issues/4699\n slice(copy.querySelectorAll(\"tfoot\")).forEach(function(tfoot){\n tfoot.parentNode.appendChild(tfoot);\n });\n\n // remember the index of each LI from an ordered list.\n // we'll use it to reconstruct the proper numbering.\n slice(copy.querySelectorAll(\"ol\")).forEach(function(ol){\n slice(ol.children).forEach(function(li, index){\n li.setAttribute(\"kendo-split-index\", index);\n });\n });\n\n setCSS(container, {\n display : \"block\",\n position : \"absolute\",\n boxSizing : \"content-box\",\n left : \"-10000px\",\n top : \"-10000px\"\n });\n\n if (pageWidth) {\n // subtle: if we don't set the width *and* margins here, the layout in this\n // container will be different from the one in our final page elements, and we'll\n // split at the wrong places.\n setCSS(container, {\n width : pageWidth + \"px\",\n paddingLeft : margin.left + \"px\",\n paddingRight : margin.right + \"px\"\n });\n\n // when the first element has a margin-top (i.e. a

            ) the page will be\n // inadvertently enlarged by that number (the browser will report the container's\n // bounding box top to start at the element's top, rather than including its\n // margin). Adding overflow: hidden seems to fix it.\n //\n // to understand the difference, try the following snippets in your browser:\n //\n // 1.
            \n //

            Foo

            \n //
            \n //\n // 2.
            \n //

            Foo

            \n //
            \n //\n // this detail is not important when automatic page breaking is not requested, hence\n // doing it only if pageWidth is defined.\n setCSS(copy, { overflow: \"hidden\" });\n }\n\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n\n // With cache disabled, images will still have height zero until their `complete` attribute\n // is true. `whenImagesAreActuallyLoaded` will wait for it.\n if (options.beforePageBreak) {\n whenImagesAreActuallyLoaded([ container ], function() {\n options.beforePageBreak(container, doPageBreak);\n });\n } else {\n whenImagesAreActuallyLoaded([ container ], doPageBreak);\n }\n\n function doPageBreak() {\n if (forceBreak != \"-\" || pageHeight) {\n splitElement(copy);\n }\n\n {\n let page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n\n if (template) {\n pages.forEach(function(page, i){\n const el = template({\n element : page,\n pageNum : i + 1,\n totalPages : pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n\n cacheImages(pages, callback.bind(null, { pages: pages, container: container }));\n }\n\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n\n return (el.getAttribute(\"data-kendo-chart\") ||\n /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName));\n }\n\n function splitElement(element) {\n if (element.tagName == \"TABLE\") {\n setCSS(element, { tableLayout: \"fixed\" });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n var bottomBorder = parseFloat(getPropertyValue(style, \"border-bottom-width\"));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1 /* Element */) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n // we're in \"manual breaks mode\"\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), \"position\"))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n // element starts on next page, break before anyway.\n breakAtElement(el);\n }\n else if (fall) {\n // elements ends up on next page, or possibly doesn't fit on a page at\n // all. break before it anyway if it's an or , otherwise\n // attempt to split.\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n }\n else {\n splitElement(el);\n }\n }\n else if (el.nodeType == 3 /* Text */ && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 /* comment */ ||\n first.nodeType == 8 /* processing instruction */) {\n return true;\n }\n if (first.nodeType == 3 /* text */) {\n // if whitespace only we can probably consider it's first\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, \"table\");\n colgroup = table && table.querySelector(\"colgroup\");\n if (options.repeatHeaders) {\n thead = table && table.querySelector(\"thead\");\n\n // If we break page in a Kendo Grid, repeat its header. This ugly hack is\n // necessary because a scrollable grid will keep the header in a separate\n // element from its content.\n //\n // XXX: This is likely to break as soon as the widget HTML is modified.\n grid = closest(el, \".k-grid\");\n if (grid && grid.querySelector(\".k-auto-scrollable\")) {\n gridHead = grid.querySelector(\".k-grid-header\");\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, \"table\"); // that's the
            on next page!\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, \".k-grid\");\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n\n function makePage() {\n var page = doc.createElement(\"KENDO-PDF-PAGE\");\n setCSS(page, {\n display : \"block\",\n boxSizing: \"content-box\",\n width : pageWidth ? (pageWidth + \"px\") : \"auto\",\n padding : (margin.top + \"px \" +\n margin.right + \"px \" +\n margin.bottom + \"px \" +\n margin.left + \"px\"),\n\n // allow absolutely positioned elements to be relative to current page\n position : \"relative\",\n\n // without the following we might affect layout of subsequent pages\n height : pageHeight ? (pageHeight + \"px\") : \"auto\",\n overflow : pageHeight || pageWidth ? \"hidden\" : \"visible\",\n clear : \"both\"\n });\n\n // debug\n // $(\"
            \").css({\n // position : \"absolute\",\n // left : margin.left,\n // top : margin.top,\n // width : pageWidth,\n // height : pageHeight,\n // boxSizing : \"border-box\",\n // background: \"rgba(255, 255, 0, 0.5)\"\n // //border : \"1px solid red\"\n // }).appendTo(page);\n\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n // I'd say an element with dimensions zero fits on current page.\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return (box.height > available) ? 3\n : (box.top - top > available) ? 1\n : (box.bottom - top > available) ? 2\n : 0;\n }\n\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return; // the whole text fits on current page\n }\n\n var nextnode = node;\n if (fall == 1) {\n // starts on next page, break before anyway.\n if (isFirst) {\n // avoid leaving an empty

            ,

          • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n }\n else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, (min + pos) >> 1, pos);\n } else {\n return findEOP(pos, (pos + max) >> 1, max);\n }\n })(0, len >> 1, len);\n\n if (!/\\S/.test(range.toString()) && isFirst) {\n // avoid leaving an empty

            ,

          • , etc. on previous page.\n breakAtElement(node.parentNode);\n } else {\n // This is only needed for IE, but it feels cleaner to do it anyway. Without\n // it, IE will truncate a very long text (playground/pdf-long-text-2.html).\n nextnode = node.splitText(range.endOffset);\n\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n\n splitText(nextnode);\n }\n\n function preventBulletOnListItem(el) {\n // set a hint on continued LI elements, to tell the\n // renderer not to draw the bullet again.\n // https://github.com/telerik/kendo-ui-core/issues/2732\n var li = closest(el, \"li\");\n if (li) {\n li.setAttribute(\"kendo-no-bullet\", \"1\");\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n\n return promise;\n}\n\n// This is needed for the Spreadsheet print functionality. Since\n// there we only need to draw text, this cuts through the ceremony\n// of drawDOM/renderElement and renders the text node directly.\nfunction drawText(element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = geo.Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3 /* Text */) {\n // avoid the penalty of renderElement\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n}\n\nvar parseBackgroundImage = (function(){\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n //var tok_radial_gradient = /^((-webkit-|-moz-|-o-|-ms-)?radial-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n\n var cache1 = {}, cache2 = {};\n\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n\n function read_stop() {\n var color = utils_parseColor(input, true);\n var length, percent;\n if (color) {\n let match =\n /^#[0-9a-f]+/i.exec(input) ||\n /^rgba?\\(.*?\\)/i.exec(input) ||\n /^..*?\\b/.exec(input); // maybe named color\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return { color: color, length: length, percent: percent };\n }\n }\n\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n\n if (read(tok_popen)) {\n // 1. [ || to , ]?\n angle = read(tok_angle);\n if (angle == \"0\") {\n angle = \"0deg\"; // Edge\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n }\n else {\n to1 = read(tok_keyword);\n if (to1 == \"to\") {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == \"0%\") {\n to1 = \"left\";\n } else if (x == \"100%\") {\n to1 = \"right\";\n }\n if (y == \"0%\") {\n to2 = \"top\";\n } else if (y == \"100%\") {\n to2 = \"bottom\";\n }\n read(tok_comma);\n }\n\n // 2. color stops\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n\n return {\n type : \"linear\",\n angle : angle,\n to : to1 && to2 ? to1 + \" \" + to2 : to1 ? to1 : to2 ? to2 : null,\n stops : stops,\n reverse : reverse\n };\n }\n }\n\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, \"\");\n read(tok_pclose);\n return { type: \"url\", url: url };\n }\n }\n\n var tok;\n\n if ((tok = read(tok_linear_gradient))) {\n tok = read_linear_gradient(tok);\n }\n else if ((tok = read(tok_url))) {\n tok = read_url();\n }\n\n return (cache1[orig] = tok || { type: \"none\" });\n }\n\n return function(input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return (cache2[input] = splitProperty(input).map(parse));\n };\n})();\n\nvar splitProperty = (function(){\n var cache = {};\n return function(input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n\n var cacheKey = input + separator;\n\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n\n var ret = [];\n var last = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n\n function looking_at(rx) {\n return (m = rx.exec(input.substr(pos)));\n }\n\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, \"\");\n }\n\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n }\n else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n }\n else if (in_string == \"'\" && looking_at(/^\\\\\\'/)) {\n pos += 2;\n }\n else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n }\n else if (in_string == \"'\" && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n }\n else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n }\n else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last) {\n ret.push(trim(input.substring(last, pos)));\n last = pos + m[0].length;\n }\n pos += m[0].length;\n }\n else {\n pos++;\n }\n }\n if (last < pos) {\n ret.push(trim(input.substring(last, pos)));\n }\n return (cache[cacheKey] = ret);\n };\n})();\n\nvar getFontURL = (function(cache){\n return function(el){\n // XXX: for IE we get here the whole cssText of the rule,\n // because the computedStyle.src is empty. Next time we need\n // to fix these regexps we better write a CSS parser. :-\\\n var url = cache[el];\n if (!url) {\n var m;\n if ((m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el))) {\n url = cache[el] = m[2];\n } else if ((m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el))) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n})(Object.create(null));\n\nvar getFontHeight = (function(cache){\n return function(font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = measureText(\"Mapq\", { font: font }).height;\n }\n return height;\n };\n})(Object.create(null));\n\nfunction getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {}\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, \"src\");\n if (src) {\n return splitProperty(src).reduce(function(a, el){\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n // Internet Explorer\n // XXX: this is gross. should work though for valid CSS.\n var font = getFontURL(rule.cssText);\n return font ? [ font ] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3: // CSSImportRule\n doStylesheet(r.styleSheet);\n break;\n case 5: // CSSFontFaceRule\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, \"font-family\"));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, \"font-weight\"));\n var italic = \"italic\" == getPropertyValue(style, \"font-style\");\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n // We get full resolved absolute URLs in Chrome, but sadly\n // not in Firefox.\n if (!(/^data:/i.test(url))) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, \"\") + url;\n }\n }\n names.forEach(function(name){\n name = name.replace(/^(['\"]?)(.*?)\\1$/, \"$2\"); // it's quoted\n if (bold) {\n name += \"|bold\";\n }\n if (italic) {\n name += \"|italic\";\n }\n result[name] = url;\n });\n }\n}\n\nfunction hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction getCounter(name) {\n name = \"_counter_\" + name;\n return nodeInfo[name];\n}\n\nfunction getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = \"_counter_\" + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n}\n\nfunction incCounter(name, inc) {\n var p = nodeInfo;\n name = \"_counter_\" + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n}\n\nfunction resetCounter(name, val) {\n name = \"_counter_\" + name;\n nodeInfo[name] = val == null ? 0 : val;\n}\n\nfunction doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n}\n\nfunction updateCounters(style) {\n var counterReset = getPropertyValue(style, \"counter-reset\");\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, \"counter-increment\");\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n}\n\nfunction parseColor(str, css) {\n var color = utils_parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n}\n\nfunction whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n var done = false;\n elements.forEach(function(el){\n var images = el.querySelectorAll(\"img\");\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n\n if (!pending) {\n next();\n }\n\n function next() {\n if (!done && --pending <= 0) {\n callback();\n done = true;\n }\n }\n}\n\nfunction cacheImages(elements, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n\n elements.forEach(function dive(element){\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(\n getPropertyValue(\n getComputedStyle(element), \"background-image\"\n )\n ).forEach(function(bg){\n if (bg.type == \"url\") {\n add(bg.url);\n }\n });\n\n if (element.children) {\n slice(element.children).forEach(dive);\n }\n });\n\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n // Even though we cached them, they simply won't be available immediately in the newly\n // created DOM. Previously we'd allow a 10ms timeout, but that's arbitrary and clearly\n // not working in all cases (https://github.com/telerik/kendo/issues/5399), so this\n // function will wait for their .complete attribute.\n whenImagesAreActuallyLoaded(elements, callback);\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function(url){\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!(/^data:/i.test(url))) {\n img.crossOrigin = \"Anonymous\";\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function() {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n}\n\nfunction alphaNumeral(n) {\n var result = \"\";\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n}\n\nfunction pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n let decoration = getPropertyValue(style, \"text-decoration\");\n if (decoration && decoration != \"none\") {\n let color = getPropertyValue(style, \"text-decoration-color\");\n decoration.split(/\\s+/g).forEach(function(name){\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n if (name == \"underline\") {\n let offset = getPropertyValue(style, \"text-underline-offset\");\n if (offset != \"auto\") {\n nodeInfo[\"underline-offset\"] = parseFloat(offset);\n }\n }\n }\n });\n }\n\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n}\n\nfunction popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n}\n\nfunction updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = geo.Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n}\n\nfunction emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n}\n\nfunction createsStackingContext(style) {\n function prop(name) { return getPropertyValue(style, name); }\n if (prop(\"transform\") != \"none\" ||\n prop(\"position\") != \"static\" ||\n prop(\"z-index\") != \"auto\" ||\n prop(\"opacity\") < 1) {\n return true;\n }\n}\n\nfunction getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n}\n\nfunction getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === \"\") {\n if (browser.webkit) {\n val = style.getPropertyValue(\"-webkit-\" + prop );\n } else if (browser.mozilla) {\n val = style.getPropertyValue(\"-moz-\" + prop );\n } else if (browser.opera) {\n val = style.getPropertyValue(\"-o-\" + prop);\n } else if (microsoft) {\n val = style.getPropertyValue(\"-ms-\" + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === \"\")) {\n return defa;\n } else {\n return val;\n }\n}\n\nfunction pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty(\"-webkit-\" + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty(\"-moz-\" + prop, value, important);\n } else if (browser.opera) {\n style.setProperty(\"-o-\" + prop, value, important);\n } else if (microsoft) {\n style.setProperty(\"-ms-\" + prop, value, important);\n prop = \"ms\" + prop.replace(/(^|-)([a-z])/g, function(s, p1, p2){\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n}\n\nfunction getBorder(style, side) {\n side = \"border-\" + side;\n return {\n width: parseFloat(getPropertyValue(style, side + \"-width\")),\n style: getPropertyValue(style, side + \"-style\"),\n color: parseColor(getPropertyValue(style, side + \"-color\"), true)\n };\n}\n\nfunction saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n}\n\nfunction getBorderRadius(style, side) {\n var r = getPropertyValue(style, \"border-\" + side + \"-radius\").split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({ x: r[0], y: r[1] });\n}\n\nfunction getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, \"border-*-width\", element);\n box = innerBox(box, \"padding-*\", element);\n return box;\n}\n\nfunction innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == \"string\") {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"top\")));\n wr = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"right\")));\n wb = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"bottom\")));\n wl = parseFloat(getPropertyValue(style, prop.replace(\"*\", \"left\")));\n }\n else if (typeof prop == \"number\") {\n wt = wr = wb = wl = prop;\n }\n return {\n top : box.top + wt,\n right : box.right - wr,\n bottom : box.bottom - wb,\n left : box.left + wl,\n width : box.right - box.left - wr - wl,\n height : box.bottom - box.top - wb - wt\n };\n}\n\nfunction getTransform(style) {\n var transform = getPropertyValue(style, \"transform\");\n if (transform == \"none\") {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform);\n if (matrix) {\n var origin = getPropertyValue(style, \"transform-origin\");\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n}\n\nfunction radiansToDegrees(radians) {\n return ((180 * radians) / Math.PI) % 360;\n}\n\nfunction parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n }\n else if (/rad$/.test(angle)) {\n return num;\n }\n else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n }\n else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n}\n\nfunction setTransform(shape, m) {\n m = new geo.Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n}\n\nfunction setClipping(shape, clipPath) {\n shape.clip(clipPath);\n}\n\nfunction addArcToPath(path, x, y, options) {\n var points = new geo.Arc([ x, y ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n}\n\nfunction sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n}\n\nfunction adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n // adjust border radiuses such that the sum of adjacent\n // radiuses is not bigger than the length of the side.\n // seems the correct algorithm is variant (3) from here:\n // http://www.w3.org/Style/CSS/Tracker/issues/29?changelog\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n\n var f = Math.min(\n box.width / (tl_x + tr_x),\n box.height / (tr_y + br_y),\n box.width / (br_x + bl_x),\n box.height / (bl_y + tl_y)\n );\n\n if (f < 1) {\n tl_x *= f; tl_y *= f;\n tr_x *= f; tr_y *= f;\n br_x *= f; br_y *= f;\n bl_x *= f; bl_y *= f;\n }\n\n return {\n tl: { x: tl_x, y: tl_y },\n tr: { x: tr_x, y: tr_y },\n br: { x: br_x, y: br_y },\n bl: { x: bl_x, y: bl_y }\n };\n}\n\nfunction elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n\n var rTL = getBorderRadius(style, \"top-left\");\n var rTR = getBorderRadius(style, \"top-right\");\n var rBL = getBorderRadius(style, \"bottom-left\");\n var rBR = getBorderRadius(style, \"bottom-right\");\n\n if (type == \"padding\" || type == \"content\") {\n var bt = getBorder(style, \"top\");\n var br = getBorder(style, \"right\");\n var bb = getBorder(style, \"bottom\");\n var bl = getBorder(style, \"left\");\n rTL.x -= bl.width; rTL.y -= bt.width;\n rTR.x -= br.width; rTR.y -= bt.width;\n rBR.x -= br.width; rBR.y -= bb.width;\n rBL.x -= bl.width; rBL.y -= bb.width;\n if (type == \"content\") {\n var pt = parseFloat(getPropertyValue(style, \"padding-top\"));\n var pr = parseFloat(getPropertyValue(style, \"padding-right\"));\n var pb = parseFloat(getPropertyValue(style, \"padding-bottom\"));\n var pl = parseFloat(getPropertyValue(style, \"padding-left\"));\n rTL.x -= pl; rTL.y -= pt;\n rTR.x -= pr; rTR.y -= pt;\n rBR.x -= pr; rBR.y -= pb;\n rBL.x -= pl; rBL.y -= pb;\n }\n }\n\n if (typeof type == \"number\") {\n rTL.x -= type; rTL.y -= type;\n rTR.x -= type; rTR.y -= type;\n rBR.x -= type; rBR.y -= type;\n rBL.x -= type; rBL.y -= type;\n }\n\n return roundBox(box, rTL, rTR, rBR, rBL);\n}\n\n// Create a drawing.Path for a rounded rectangle. Receives the\n// bounding box and the border-radiuses in CSS order (top-left,\n// top-right, bottom-right, bottom-left). The radiuses must be\n// objects containing x (horiz. radius) and y (vertical radius).\nfunction roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({ fill: null, stroke: null });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n}\n\nfunction formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case \"decimal-leading-zero\":\n if (str.length < 2) {\n str = \"0\" + str;\n }\n return str;\n case \"lower-roman\":\n return arabicToRoman(val).toLowerCase();\n case \"upper-roman\":\n return arabicToRoman(val).toUpperCase();\n case \"lower-latin\":\n case \"lower-alpha\":\n return alphaNumeral(val - 1);\n case \"upper-latin\":\n case \"upper-alpha\":\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n}\n\nfunction evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, \"$2\");\n return getAllCounters(name).map(function(val){\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function(el){\n var tmp;\n if ((m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el))) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function(s, p){\n return String.fromCharCode(parseInt(p, 16));\n }));\n }\n else if ((m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n }\n else if ((m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el))) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n }\n else if ((m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el))) {\n result.push(element.getAttribute(m[1]) || \"\");\n }\n else {\n result.push(el);\n }\n });\n return result.join(\"\");\n}\n\nfunction getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n // Status: NEW. Report year: 2002. Current year: 2014.\n // Nice played, Mozillians.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=137687\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + \": \" + getPropertyValue(style, style[i]));\n }\n return result.join(\";\\n\");\n}\n\nfunction _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n let fake = [];\n function pseudo(kind, place) {\n let style = getComputedStyle(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != \"normal\" && content != \"none\" && style.width != \"0px\") {\n let psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(\":before\", element.firstChild);\n pseudo(\":after\", null);\n if (fake.length > 0) {\n let saveClass = element.className;\n element.className += \" kendo-pdf-hide-pseudo-elements\";\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function(el){ element.removeChild(el); });\n } else {\n _renderElement(element, group);\n }\n}\n\nfunction _renderElement(element, group) {\n var style = getComputedStyle(element);\n\n var top = getBorder(style, \"top\");\n var right = getBorder(style, \"right\");\n var bottom = getBorder(style, \"bottom\");\n var left = getBorder(style, \"left\");\n\n var rTL0 = getBorderRadius(style, \"top-left\");\n var rTR0 = getBorderRadius(style, \"top-right\");\n var rBL0 = getBorderRadius(style, \"bottom-left\");\n var rBR0 = getBorderRadius(style, \"bottom-right\");\n\n var dir = getPropertyValue(style, \"direction\");\n\n var backgroundColor = getPropertyValue(style, \"background-color\");\n backgroundColor = parseColor(backgroundColor);\n\n var backgroundImage = parseBackgroundImage( getPropertyValue(style, \"background-image\") );\n var backgroundRepeat = splitProperty( getPropertyValue(style, \"background-repeat\") );\n var backgroundPosition = splitProperty( getPropertyValue(style, \"background-position\") );\n var backgroundOrigin = splitProperty( getPropertyValue(style, \"background-origin\") );\n var backgroundSize = splitProperty( getPropertyValue(style, \"background-size\") );\n\n // IE shrinks the text with text-overflow: ellipsis,\n // apparently because the returned bounding box for the range\n // is limited to the visible area minus space for the dots,\n // instead of being the full width of the text.\n //\n // https://github.com/telerik/kendo/issues/5232\n // https://github.com/telerik/kendo-ui-core/issues/1868\n //\n // We have to test it here rather than in renderText because\n // text-overflow: ellipsis could be set on a parent element (not\n // necessarily the one containing the text); in this case,\n // getComputedStyle(elementWithTheText) will return \"clip\", not\n // \"ellipsis\" (which is probably a bug, but oh well...)\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow; // computed style\n if (textOverflow == \"ellipsis\") {\n saveTextOverflow = element.style.textOverflow; // own style.\n element.style.textOverflow = \"clip\";\n }\n }\n\n if (browser.msie && browser.version < 10) {\n // IE9 hacks. getPropertyValue won't return the correct\n // value. Sucks that we have to do it here, I'd prefer to\n // move it in getPropertyValue, but we don't have the\n // element.\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n\n var innerbox = innerBox(element.getBoundingClientRect(), \"border-*-width\", element);\n\n // CSS \"clip\" property - if present, replace the group with a\n // new one which is clipped. This must happen before drawing\n // the borders and background.\n (function(){\n var clip = getPropertyValue(style, \"clip\");\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == \"auto\" ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == \"auto\" ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == \"auto\" ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == \"auto\" ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path()\n .moveTo(left, top)\n .lineTo(right, top)\n .lineTo(right, bottom)\n .lineTo(left, bottom)\n .close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n })();\n\n var boxes, i, cells;\n var display = getPropertyValue(style, \"display\");\n\n if (display == \"table-row\") {\n // because of rowspan/colspan, we shouldn't draw background of table row elements on the\n // box given by its getBoundingClientRect, because if we do we risk overwritting a\n // previously rendered cell. https://github.com/telerik/kendo/issues/4881\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n // Workaround the missing borders in Chrome! getClientRects() boxes contains values\n // rounded to integer. getBoundingClientRect() appears to work fine. We still need\n // getClientRects() to support cases where there are more boxes (continued inline\n // elements that might have border/background).\n boxes = [ element.getBoundingClientRect() ];\n }\n }\n\n // This function workarounds another Chrome bug, where boxes returned for a table with\n // border-collapse: collapse will overlap the table border. Our rendering is not perfect in\n // such case anyway, but with this is better than without it.\n boxes = adjustBoxes(boxes);\n\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n\n // Render links as separate groups. We can't use boxes returned by element's getClientRects\n // because if display type is \"inline\" (default for ), boxes will not include the height of\n // images inside. https://github.com/telerik/kendo-ui-core/issues/3359\n if (element.tagName == \"A\" && element.href && !/^#?$/.test(element.getAttribute(\"href\"))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n const r = document.createRange();\n r.selectNodeContents(element);\n slice(r.getClientRects()).forEach(function(box){\n const g = new Group();\n g._pdfLink = {\n url : element.href,\n top : box.top,\n right : box.right,\n bottom : box.bottom,\n left : box.left\n };\n group.append(g);\n });\n }\n }\n\n if (boxes.length > 0 && display == \"list-item\" && !element.getAttribute(\"kendo-no-bullet\")) {\n drawBullet(boxes[0]);\n }\n\n // overflow: hidden/auto - if present, replace the group with\n // a new one clipped by the inner box.\n (function(){\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, \"padding\");\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow\"))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-x\"))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, \"overflow-y\"))) {\n clipit();\n }\n })();\n\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n\n if (microsoft && textOverflow == \"ellipsis\") {\n element.style.textOverflow = saveTextOverflow;\n }\n\n return group; // only utility functions after this line.\n\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, \"border-collapse\") == \"collapse\") {\n var tableBorderLeft = getBorder(table.style, \"left\").width;\n var tableBorderTop = getBorder(table.style, \"top\").width;\n // check if we need to adjust\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes; // nope\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice(boxes).map(function(box){\n return {\n left : box.left + tableBorderLeft,\n top : box.top + tableBorderTop,\n right : box.right + tableBorderLeft,\n bottom : box.bottom + tableBorderTop,\n height : box.height,\n width : box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n\n // this function will be called to draw each border. it\n // draws starting at origin and the resulted path must be\n // translated/rotated to be placed in the proper position.\n //\n // arguments are named as if it draws the top border:\n //\n // - `len` the length of the edge\n // - `Wtop` the width of the edge (i.e. border-top-width)\n // - `Wleft` the width of the left edge (border-left-width)\n // - `Wright` the width of the right edge\n // - `rl` and `rl` -- the border radius on the left and right\n // (objects containing x and y, for horiz/vertical radius)\n // - `transform` -- transformation to apply\n //\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform) {\n if (Wtop <= 0) {\n return;\n }\n\n var path, edge = new Group();\n setTransform(edge, transform);\n group.append(edge);\n\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n\n // draw main border. this is the area without the rounded corners\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0)\n .lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0)\n .lineTo(len - Math.max(rr.x, Wright), Wtop)\n .lineTo(Math.max(rl.x, Wleft), Wtop)\n .close();\n\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [ -1, 0, 0, 1, rl.x, 0 ]);\n }\n\n if (rr.x) {\n drawRoundCorner(Wright, rr, [ 1, 0, 0, 1, len - rr.x, 0 ]);\n }\n\n // draws one round corner, starting at origin (needs to be\n // translated/rotated to be placed properly).\n function drawRoundCorner(Wright, r, transform) {\n var angle = Math.PI/2 * Wright / (Wright + Wtop);\n\n // not sanitizing this one, because negative values\n // are useful to fill the box correctly.\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n\n setTransform(path, transform);\n\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n }\n else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop)\n .lineTo(0, Wtop);\n }\n else {\n path.lineTo(ri.x, Wtop)\n .lineTo(ri.x, 0);\n }\n\n edge.append(path.close());\n }\n }\n\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top)\n .lineTo(box.right, box.top)\n .lineTo(box.right, box.bottom)\n .lineTo(box.left, box.bottom)\n .close();\n background.append(path);\n }\n\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(\n background, box,\n backgroundImage[i],\n backgroundRepeat[i % backgroundRepeat.length],\n backgroundPosition[i % backgroundPosition.length],\n backgroundOrigin[i % backgroundOrigin.length],\n backgroundSize[i % backgroundSize.length]\n );\n }\n }\n\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || (background == \"none\")) {\n return;\n }\n\n if (background.type == \"url\") {\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function(group, rect){\n group.append(new Image(background.url, rect));\n });\n }\n } else if (background.type == \"linear\") {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n\n // for background-origin: border-box the box is already appropriate\n var orgBox = box;\n if (backgroundOrigin == \"content-box\") {\n orgBox = innerBox(orgBox, \"border-*-width\", element);\n orgBox = innerBox(orgBox, \"padding-*\", element);\n } else if (backgroundOrigin == \"padding-box\") {\n orgBox = innerBox(orgBox, \"border-*-width\", element);\n }\n\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == \"contain\") {\n f = Math.min(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else if (backgroundSize == \"cover\") {\n f = Math.max(orgBox.width / img_width,\n orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n }\n else {\n var size = backgroundSize.split(/\\s+/g);\n // compute width\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n // compute height\n if (size.length == 1 || size[1] == \"auto\") {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n\n var pos = String(backgroundPosition);\n\n // IE sometimes reports single-word positions\n // https://github.com/telerik/kendo-ui-core/issues/2786\n //\n // it seems to switch to percentages when the horizontal\n // position is not \"center\", therefore we don't handle\n // multi-word cases here. All other browsers return\n // percentages or pixels instead of keywords. At least\n // for now...\n switch (pos) {\n case \"bottom\" : pos = \"50% 100%\"; break;\n case \"top\" : pos = \"50% 0\"; break;\n case \"left\" : pos = \"0 50%\"; break;\n case \"right\" : pos = \"100% 50%\"; break;\n case \"center\" : pos = \"50% 50%\"; break;\n }\n\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = \"50%\";\n }\n\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n\n var rect = new geo.Rect([ orgBox.left + pos[0], orgBox.top + pos[1] ], [ img_width, img_height ]);\n\n // XXX: background-repeat could be implemented more\n // efficiently as a fill pattern (at least for PDF\n // output, probably SVG too).\n\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n\n if (backgroundRepeat == \"no-repeat\") {\n renderBG(group, rect);\n }\n else if (backgroundRepeat == \"repeat-x\") {\n rewX();\n repeatX();\n }\n else if (backgroundRepeat == \"repeat-y\") {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n }\n else if (backgroundRepeat == \"repeat\") {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n\n function drawBullet() {\n var listStyleType = getPropertyValue(style, \"list-style-type\");\n if (listStyleType == \"none\") {\n return;\n }\n var listStylePosition = getPropertyValue(style, \"list-style-position\");\n\n function _drawBullet(f) {\n saveStyle(element, function(){\n element.style.position = \"relative\";\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = \"absolute\";\n bullet.style.boxSizing = \"border-box\";\n if (listStylePosition == \"outside\") {\n bullet.style.width = \"6em\";\n bullet.style.left = \"-6.8em\";\n bullet.style.textAlign = \"right\";\n } else {\n bullet.style.left = \"0px\";\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute(\"kendo-split-index\");\n if (k != null) {\n return f(k|0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n\n switch (listStyleType) {\n case \"circle\":\n case \"disc\":\n case \"square\":\n _drawBullet(function(bullet){\n // XXX: the science behind these values is called \"trial and error\".\n bullet.style.fontSize = \"60%\";\n bullet.style.lineHeight = \"200%\";\n bullet.style.paddingRight = \"0.5em\";\n bullet.style.fontFamily = \"DejaVu Serif\";\n bullet.innerHTML = {\n \"disc\" : \"\\u25cf\",\n \"circle\" : \"\\u25ef\",\n \"square\" : \"\\u25a0\"\n }[listStyleType];\n });\n break;\n\n case \"decimal\":\n case \"decimal-leading-zero\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n ++idx;\n if (listStyleType == \"decimal-leading-zero\" && idx < 10) {\n idx = \"0\" + idx;\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n\n case \"lower-roman\":\n case \"upper-roman\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n idx = arabicToRoman(idx + 1);\n if (listStyleType == \"upper-roman\") {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n\n case \"lower-latin\":\n case \"lower-alpha\":\n case \"upper-latin\":\n case \"upper-alpha\":\n _drawBullet(function(bullet){\n elementIndex(function(idx){\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + \".\";\n });\n });\n break;\n }\n }\n\n // draws a single border box\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n\n drawBackground(box);\n\n var shouldDrawLeft = (left.width > 0 && ((isFirst && dir == \"ltr\") || (isLast && dir == \"rtl\")));\n var shouldDrawRight = (right.width > 0 && ((isLast && dir == \"ltr\") || (isFirst && dir == \"rtl\")));\n\n // The most general case is that the 4 borders have different widths and border\n // radiuses. The way that is handled is by drawing 3 Paths for each border: the\n // straight line, and two round corners which represent half of the entire rounded\n // corner. To simplify code those shapes are drawed at origin (by the drawEdge\n // function), then translated/rotated into the right position.\n //\n // However, this leads to poor results due to rounding in the simpler cases where\n // borders are straight lines. Therefore we handle a few such cases separately with\n // straight lines. C^wC^wC^w -- nope, scratch that. poor rendering was because of a bug\n // in Chrome (getClientRects() returns rounded integer values rather than exact floats.\n // web dev is still a ghetto.)\n\n // first, just in case there is no border...\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n\n // START paint borders\n // if all borders have equal colors...\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n\n // if same widths too, we can draw the whole border by stroking a single path.\n if (top.width == right.width && top.width == bottom.width && top.width == left.width)\n {\n if (shouldDrawLeft && shouldDrawRight) {\n // reduce box by half the border width, so we can draw it by stroking.\n box = innerBox(box, top.width/2);\n\n // adjust the border radiuses, again by top.width/2, and make the path element.\n var path = elementRoundBox(element, box, top.width/2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n\n // if border radiuses are zero and widths are at most one pixel, we can again use simple\n // paths.\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n // alright, 1.9px will do as well. the difference in color blending should not be\n // noticeable.\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n // top border\n if (top.width > 0) {\n group.append(\n new Path({\n stroke: { width: top.width, color: top.color }\n })\n .moveTo(box.left, box.top + top.width/2)\n .lineTo(box.right, box.top + top.width/2)\n );\n }\n\n // bottom border\n if (bottom.width > 0) {\n group.append(\n new Path({\n stroke: { width: bottom.width, color: bottom.color }\n })\n .moveTo(box.left, box.bottom - bottom.width/2)\n .lineTo(box.right, box.bottom - bottom.width/2)\n );\n }\n\n // left border\n if (shouldDrawLeft) {\n group.append(\n new Path({\n stroke: { width: left.width, color: left.color }\n })\n .moveTo(box.left + left.width/2, box.top)\n .lineTo(box.left + left.width/2, box.bottom)\n );\n }\n\n // right border\n if (shouldDrawRight) {\n group.append(\n new Path({\n stroke: { width: right.width, color: right.color }\n })\n .moveTo(box.right - right.width/2, box.top)\n .lineTo(box.right - right.width/2, box.bottom)\n );\n }\n\n return;\n }\n }\n // END paint borders\n\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n\n // top border\n drawEdge(top.color,\n box.width, top.width, left.width, right.width,\n rTL, rTR,\n [ 1, 0, 0, 1, box.left, box.top ]);\n\n // bottom border\n drawEdge(bottom.color,\n box.width, bottom.width, right.width, left.width,\n rBR, rBL,\n [ -1, 0, 0, -1, box.right, box.bottom ]);\n\n // for left/right borders we need to invert the border-radiuses\n function inv(p) {\n return { x: p.y, y: p.x };\n }\n\n // left border\n drawEdge(left.color,\n box.height, left.width, bottom.width, top.width,\n inv(rBL), inv(rTL),\n [ 0, -1, 1, 0, box.left, box.bottom ]);\n\n // right border\n drawEdge(right.color,\n box.height, right.width, top.width, bottom.width,\n inv(rTR), inv(rBR),\n [ 0, 1, -1, 0, box.right, box.top ]);\n }\n}\n\nfunction gradientRenderer(gradient) {\n return function(group, rect) {\n var width = rect.width(), height = rect.height();\n\n switch (gradient.type) {\n case \"linear\":\n\n // figure out the angle.\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case \"top\":\n angle = 0;\n break;\n case \"left\":\n angle = -Math.PI / 2;\n break;\n case \"bottom\":\n angle = Math.PI;\n break;\n case \"right\":\n angle = Math.PI / 2;\n break;\n case \"top left\": case \"left top\":\n angle = -Math.atan2(height, width);\n break;\n case \"top right\": case \"right top\":\n angle = Math.atan2(height, width);\n break;\n case \"bottom left\": case \"left bottom\":\n angle = Math.PI + Math.atan2(height, width);\n break;\n case \"bottom right\": case \"right bottom\":\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n\n // limit the angle between 0..2PI\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n\n // compute gradient's start/end points. here len is the length of the gradient line\n // and x,y is the end point relative to the center of the rectangle in conventional\n // (math) axis direction.\n\n // this is the original (unscaled) length of the gradient line. needed to deal with\n // absolutely positioned color stops. formula from the CSS spec:\n // http://dev.w3.org/csswg/css-images-3/#linear-gradient-syntax\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n\n // The math below is pretty simple, but it took a while to figure out. We compute x\n // and y, the *end* of the gradient line. However, we want to transform them into\n // element-based coordinates (SVG's gradientUnits=\"objectBoundingBox\"). That means,\n // x=0 is the left edge, x=1 is the right edge, y=0 is the top edge and y=1 is the\n // bottom edge.\n //\n // A naive approach would use the original angle for these calculations. Say we'd\n // like to draw a gradient angled at 45deg in a 100x400 box. When we use\n // objectBoundingBox, the renderer will draw it in a 1x1 *square* box, and then\n // scale that to the desired dimensions. The 45deg angle will look more like 70deg\n // after scaling. SVG (http://www.w3.org/TR/SVG/pservers.html#LinearGradients) says\n // the following:\n //\n // When gradientUnits=\"objectBoundingBox\" and 'gradientTransform' is the\n // identity matrix, the normal of the linear gradient is perpendicular to the\n // gradient vector in object bounding box space (i.e., the abstract coordinate\n // system where (0,0) is at the top/left of the object bounding box and (1,1) is\n // at the bottom/right of the object bounding box). When the object's bounding\n // box is not square, the gradient normal which is initially perpendicular to\n // the gradient vector within object bounding box space may render\n // non-perpendicular relative to the gradient vector in user space. If the\n // gradient vector is parallel to one of the axes of the bounding box, the\n // gradient normal will remain perpendicular. This transformation is due to\n // application of the non-uniform scaling transformation from bounding box space\n // to user space.\n //\n // which is an extremely long and confusing way to tell what I just said above.\n //\n // For this reason we need to apply the reverse scaling to the original angle, so\n // that when it'll finally be rendered it'll actually be at the desired slope. Now\n // I'll let you figure out the math yourself.\n\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len/2 * sin;\n var y = len/2 * cos;\n\n // Because of the arctangent, our scaledAngle ends up between -PI/2..PI/2, possibly\n // losing the intended direction of the gradient. The following fixes it.\n if (angle > Math.PI/2 && angle <= 3*Math.PI/2) {\n x = -x;\n y = -y;\n }\n\n // compute the color stops.\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function(s, i){\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n // fix implicit offsets\n implicit.forEach(function(s, i){\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({ left: right, stop: stop });\n }\n return stop;\n });\n\n var start = [ 0.5 - x, 0.5 + y ];\n var end = [ 0.5 + x, 0.5 - y ];\n\n // finally, draw it.\n group.append(\n Path.fromRect(rect)\n .stroke(null)\n .fill(new LinearGradient({\n start : start,\n end : end,\n stops : stops,\n userSpace : false\n }))\n );\n break;\n case \"radial\":\n // XXX:\n if (window.console && window.console.log) {\n window.console.log(\"Radial gradients are not yet supported in HTML renderer\");\n }\n break;\n }\n };\n}\n\nfunction maybeRenderWidget(element, group) {\n var visual;\n\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr(\"role\"))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n\n if (!visual) {\n return false;\n }\n\n var wrap = new Group();\n wrap.children.push(visual);\n\n var bbox = element.getBoundingClientRect();\n wrap.transform(geo.transform().translate(bbox.left, bbox.top));\n\n group.append(wrap);\n\n return true;\n}\n\nfunction renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new geo.Rect([ box.left, box.top ], [ box.width, box.height ]);\n var image = new Image(url, rect);\n setClipping(image, elementRoundBox(element, box, \"content\"));\n group.append(image);\n}\n\nfunction zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, \"z-index\"));\n var zb = parseFloat(getPropertyValue(sb, \"z-index\"));\n var pa = getPropertyValue(sa, \"position\");\n var pb = getPropertyValue(sb, \"position\");\n if (isNaN(za) && isNaN(zb)) {\n if ((/static|absolute/.test(pa)) && (/static|absolute/.test(pb))) {\n return 0;\n }\n if (pa == \"static\") {\n return -1;\n }\n if (pb == \"static\") {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n}\n\nfunction isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n}\n\nfunction getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n}\n\nfunction renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, \"color\");\n var box = element.getBoundingClientRect();\n if (element.type == \"checkbox\") {\n group.append(\n Path.fromRect(\n new geo.Rect([ box.left+1, box.top+1 ],\n [ box.width-2, box.height-2 ])\n ).stroke(color, 1)\n );\n if (element.checked) {\n // fill a rectangle inside? looks kinda ugly.\n // group.append(\n // Path.fromRect(\n // new geo.Rect([ box.left+4, box.top+4 ],\n // [ box.width-8, box.height-8])\n // ).fill(color).stroke(null)\n // );\n\n // let's draw a checkmark instead. artistic, eh?\n group.append(\n new Path()\n .stroke(color, 1.2)\n .moveTo(box.left + 0.22 * box.width,\n box.top + 0.55 * box.height)\n .lineTo(box.left + 0.45 * box.width,\n box.top + 0.75 * box.height)\n .lineTo(box.left + 0.78 * box.width,\n box.top + 0.22 * box.width)\n );\n }\n } else {\n group.append(\n new Circle(\n new geo.Circle([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-2, box.height-2) / 2)\n ).stroke(color, 1)\n );\n if (element.checked) {\n group.append(\n new Circle(\n new geo.Circle([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width-8, box.height-8) / 2)\n ).fill(color).stroke(null)\n );\n }\n }\n}\n\nfunction renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == \"input\" && (element.type == \"checkbox\" || element.type == \"radio\")) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == \"input\") {\n el.style.whiteSpace = \"pre\";\n }\n if (tag == \"select\" || tag == \"textarea\") {\n el.style.overflow = \"auto\";\n }\n if (tag == \"select\") {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = \"block\"; // IE9 messes up without this\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n\n // must temporarily hide the original element, otherwise it\n // may affect layout of the fake element we want to render.\n element.style.display = \"none\";\n\n renderContents(el, group);\n element.style.display = \"\";\n p.removeChild(el);\n}\n\nfunction serializeSVG(element) {\n const serializer = new window.XMLSerializer();\n let xml = serializer.serializeToString(element);\n\n if (browser.mozilla && !(element.getAttribute(\"width\") && element.getAttribute(\"height\"))) {\n const doc = new window.DOMParser().parseFromString(xml, \"image/svg+xml\");\n const svg = doc.documentElement;\n const box = getContentBox(element);\n svg.setAttribute(\"width\", box.width);\n svg.setAttribute(\"height\", box.height);\n xml = serializer.serializeToString(svg);\n }\n\n return xml;\n}\n\nfunction renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n // the group that was set in pushNodeInfo might have\n // changed due to clipping/transforms, update it here.\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case \"img\":\n renderImage(element, element.src, group);\n break;\n\n case \"svg\":\n let xml = serializeSVG(element);\n let dataURL = `data:image/svg+xml;base64,${encodeBase64(xml)}`;\n renderImage(element, dataURL, group);\n break;\n\n case \"canvas\":\n try {\n renderImage(element, element.toDataURL(\"image/png\"), group);\n } catch (ex) {\n // tainted; can't draw it, ignore.\n }\n break;\n\n case \"textarea\":\n case \"input\":\n case \"select\":\n renderFormField(element, group);\n break;\n\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3: // Text\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1: // Element\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, \"float\");\n var position = getPropertyValue(style, \"position\");\n if (position != \"static\") {\n positioned.push(i);\n }\n else if (floating != \"none\") {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n\n mergeSort(children, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(floats, zIndexSort).forEach(function(el){ renderElement(el, group); });\n mergeSort(positioned, zIndexSort).forEach(function(el){ renderElement(el, group); });\n }\n}\n\nfunction renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n\n if (parseFloat(getPropertyValue(style, \"text-indent\")) < -500) {\n // assume it should not be displayed. the slider's\n // draggable handle displays a Drag text for some reason,\n // having text-indent: -3333px.\n return;\n }\n\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n\n if (!end) {\n return; // whitespace-only node\n }\n\n var fontSize = getPropertyValue(style, \"font-size\");\n var lineHeight = getPropertyValue(style, \"line-height\");\n\n // simply getPropertyValue(\"font\") doesn't work in Firefox :-\\\n var font = [\n getPropertyValue(style, \"font-style\"),\n getPropertyValue(style, \"font-variant\"),\n getPropertyValue(style, \"font-weight\"),\n fontSize, // no need for line height here; it breaks layout in FF\n getPropertyValue(style, \"font-family\")\n ].join(\" \");\n\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n\n if (fontSize === 0 || isNaN(fontSize)) {\n return;\n }\n\n var color = getPropertyValue(style, \"color\");\n var range = element.ownerDocument.createRange();\n var align = getPropertyValue(style, \"text-align\");\n var isJustified = align == \"justify\";\n var columnCount = getPropertyValue(style, \"column-count\", 1);\n var whiteSpace = getPropertyValue(style, \"white-space\");\n var textTransform = getPropertyValue(style, \"text-transform\");\n\n // A line of 500px, with a font of 12px, contains an average of 80 characters, but since we\n // err, we'd like to guess a bigger number rather than a smaller one. Multiplying by 5\n // seems to be a good option.\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n\n // we'll maintain this so we can workaround bugs in Chrome's Range.getClientRects\n // https://github.com/telerik/kendo/issues/5740\n var prevLineBottom = null;\n\n var underline = nodeInfo[\"underline\"];\n var lineThrough = nodeInfo[\"line-through\"];\n var overline = nodeInfo[\"overline\"];\n var underlineOffset = nodeInfo[\"underline-offset\"];\n\n if (underline) {\n forEachRect(decorateUnder);\n }\n\n // doChunk returns true when all text has been rendered\n while (!doChunk()) {}\n\n if (lineThrough || overline) {\n forEachRect(decorateOver);\n }\n\n return; // only function declarations after this line\n\n function forEachRect(callback) {\n range.selectNode(node);\n let clientRects = slice(range.getClientRects());\n\n forEachRect = (cb) => clientRects.forEach(cb);\n forEachRect(callback);\n }\n\n function actuallyGetRangeBoundingRect(range) {\n // XXX: to be revised when this Chrome bug is fixed:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=612459\n if (microsoft || browser.chrome || browser.safari) {\n // Workaround browser bugs: IE and Chrome would sometimes\n // return 0 or 1-width rectangles before or after the main\n // one. https://github.com/telerik/kendo/issues/4674\n\n // Actually Chrome 50 got worse, since the rectangles can now have the width of a\n // full character, making it hard to tell whether it's a bogus rectangle or valid\n // selection location. The workaround is to ignore rectangles that fall on the\n // previous line. https://github.com/telerik/kendo/issues/5740\n var rectangles = range.getClientRects(), box = {\n top : Infinity,\n right : -Infinity,\n bottom : -Infinity,\n left : Infinity\n }, done = false;\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue; // bogus rectangle\n }\n box.left = Math.min(b.left , box.left);\n box.top = Math.min(b.top , box.top);\n box.right = Math.max(b.right , box.right);\n box.bottom = Math.max(b.bottom , box.bottom);\n done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n\n // Render a chunk of text, typically one line (but for justified text we render each word as\n // a separate Text object, because spacing is variable). Returns true when it finished the\n // current node. After each chunk it updates `start` to just after the last rendered\n // character.\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n\n // Select a single character to determine the height of a line of text. The box.bottom\n // will be essential for us to figure out where the next line begins.\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n\n // for justified text we must split at each space, because space has variable width.\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n // we can only split there if it's on the same line, otherwise we'll fall back\n // to the default mechanism (see findEOL below).\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n\n if (!found) {\n // This code does three things: (1) it selects one line of text in `range`, (2) it\n // leaves the bounding rect of that line in `box` and (3) it returns the position\n // just after the EOL. We know where the line starts (`start`) but we don't know\n // where it ends. To figure this out, we select a piece of text and look at the\n // bottom of the bounding box. If it changes, we have more than one line selected\n // and should retry with a smaller selection.\n //\n // To speed things up, we first try to select all text in the node (`start` ->\n // `end`). If there's more than one line there, then select only half of it. And\n // so on. When we find a value for `end` that fits in one line, we try increasing\n // it (also in halves) until we get to the next line. The algorithm stops when the\n // right side of the bounding box does not change.\n //\n // One more thing to note is that everything happens in a single Text DOM node.\n // There's no other tags inside it, therefore the left/top coordinates of the\n // bounding box will not change.\n pos = (function findEOL(min, eol, max){\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, (min + eol) >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, (eol + max) >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n })(start, Math.min(end, start + estimateLineLength), end);\n\n if (pos == start) {\n // if EOL is at the start, then no more text fits on this line. Skip the\n // remainder of this node entirely to avoid a stack overflow.\n return true;\n }\n start = pos;\n\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false; // whitespace only; we should not get here.\n }\n if (pos > 0) {\n // eliminate trailing whitespace\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n\n // another workaround for IE: if we rely on getBoundingClientRect() we'll overlap with the bullet for LI\n // elements. Calling getClientRects() and using the *first* rect appears to give us the correct location.\n // Note: not to be used in Chrome as it randomly returns a zero-width rectangle from the previous line.\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n // node with non-significant space -- collapse whitespace.\n str = str.replace(/\\s+/g, \" \");\n }\n else if (/\\t/.test(str)) {\n // with significant whitespace we need to do something about literal TAB characters.\n // There's no TAB glyph in a font so they would be rendered in PDF as an empty box,\n // and the whole text will stretch to fill the original width. The core PDF lib\n // does not have sufficient context to deal with it.\n\n // calculate the starting column here, since we initially discarded any whitespace.\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n // when we meet a TAB we must round up to the next tab stop.\n // in all browsers TABs seem to be 8 characters.\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n // just in case we meet a newline we must restart.\n cc = 0;\n } else {\n // ordinary character --> advance one column\n cc++;\n }\n }\n\n // based on starting column, replace any TAB characters in the string we actually\n // have to display with spaces so that they align to columns multiple of 8.\n while ((pos = str.search(\"\\t\")) >= 0) {\n var indent = \" \".substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n\n function drawText(str, box) {\n // In IE the box height will be approximately lineHeight, while in\n // other browsers it'll (correctly) be the height of the bounding\n // box for the current text/font. Which is to say, IE sucks again.\n // The only good solution I can think of is to measure the text\n // ourselves and center the bounding box.\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top : top,\n right : box.right,\n bottom : top + height,\n left : box.left,\n height : height,\n width : box.right - box.left\n };\n }\n\n // var path = new Path({ stroke: { color: \"red\" }});\n // path.moveTo(box.left, box.top)\n // .lineTo(box.right, box.top)\n // .lineTo(box.right, box.bottom)\n // .lineTo(box.left, box.bottom)\n // .close();\n // group.append(path);\n\n switch (textTransform) {\n case \"uppercase\":\n str = str.toUpperCase();\n break;\n case \"lowercase\":\n str = str.toLowerCase();\n break;\n case \"capitalize\":\n str = str.replace(/(?:^|\\s)\\S/g, l => l.toUpperCase());\n break;\n }\n\n var text = new TextRect(\n str, new geo.Rect([ box.left, box.top ],\n [ box.width, box.height ]),\n {\n font: font,\n fill: { color: color }\n }\n );\n group.append(text);\n }\n\n function drawTextLine(lineWidth, textBox, color, ypos) {\n if (color) {\n var path = new Path({ stroke: {\n width: lineWidth,\n color: color\n }});\n\n ypos -= lineWidth;\n path.moveTo(textBox.left, ypos)\n .lineTo(textBox.right, ypos);\n group.append(path);\n }\n }\n\n function decorateOver(box) {\n let width = fontSize / 12;\n drawTextLine(width, box, lineThrough, box.bottom - box.height / 2.7);\n drawTextLine(width, box, overline, box.top);\n }\n\n function decorateUnder(box) {\n let width = fontSize / 12;\n let underlinePos = box.bottom;\n if (underlineOffset != null) {\n underlinePos += underlineOffset;\n } else {\n underlinePos += width; // for \"auto\" it seems better to add line width\n }\n drawTextLine(width, box, underline, underlinePos);\n }\n}\n\nfunction groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != \"auto\") {\n // use the current stacking context\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n // normal flow — use given container. we still have to\n // figure out where should we insert this element with the\n // assumption that its z-index is zero, as the group might\n // already contain elements with higher z-index.\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n\n if (main !== group) {\n // console.log(\"Placing\", element, \"in\", nodeInfo._stackingContext.element, \"at position\", i, \" / \", a.length);\n // console.log(a.slice(i+1));\n\n // if (nodeInfo._matrix) {\n // tmp.transform(nodeInfo._matrix);\n // }\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n // console.log(r);\n // tmp.append(Path.fromRect(r));\n // tmp.append(new Text(element.className || element.id, r.topLeft()));\n }\n }\n\n return tmp;\n}\n\nfunction renderElement(element, container) {\n var style = getComputedStyle(element);\n\n updateCounters(style);\n\n if (/^(style|script|link|meta|iframe|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n\n if (nodeInfo._clipbox == null) {\n return;\n }\n\n var opacity = parseFloat(getPropertyValue(style, \"opacity\"));\n var visibility = getPropertyValue(style, \"visibility\");\n var display = getPropertyValue(style, \"display\");\n\n if (opacity === 0 || visibility == \"hidden\" || display == \"none\") {\n return;\n }\n\n var tr = getTransform(style);\n var group;\n\n var zIndex = getPropertyValue(style, \"z-index\");\n if ((tr || opacity < 1) && zIndex == \"auto\") {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n\n // XXX: remove at some point\n // group._pdfElement = element;\n // group.options._pdfDebug = \"\";\n // if (element.id) {\n // group.options._pdfDebug = \"#\" + element.id;\n // }\n // if (element.className) {\n // group.options._pdfDebug += \".\" + element.className.split(\" \").join(\".\");\n // }\n\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n\n pushNodeInfo(element, style, group);\n\n if (!tr) {\n _renderWithPseudoElements(element, group);\n }\n else {\n saveStyle(element, function(){\n // must clear transform, so getBoundingClientRect returns correct values.\n pleaseSetPropertyValue(element.style, \"transform\", \"none\", \"important\");\n\n // must also clear transitions, so correct values are returned *immediately*\n pleaseSetPropertyValue(element.style, \"transition\", \"none\", \"important\");\n\n // the presence of any transform makes it behave like it had position: relative,\n // because why not.\n // http://meyerweb.com/eric/thoughts/2011/09/12/un-fixing-fixed-elements-with-css-transforms/\n if (getPropertyValue(style, \"position\") == \"static\") {\n // but only if it's not already positioned. :-/\n pleaseSetPropertyValue(element.style, \"position\", \"relative\", \"important\");\n }\n\n // must translate to origin before applying the CSS\n // transformation, then translate back.\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [ 1, 0, 0, 1, -x, -y ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [ 1, 0, 0, 1, x, y ]);\n m = setTransform(group, m);\n\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n\n _renderWithPseudoElements(element, group);\n });\n }\n\n popNodeInfo();\n\n //drawDebugBox(element.getBoundingClientRect(), container);\n}\n\n// function drawDebugBox(box, group, color) {\n// var path = Path.fromRect(new geo.Rect([ box.left, box.top ], [ box.width, box.height ]));\n// if (color) {\n// path.stroke(color);\n// }\n// group.append(path);\n// }\n\n// function dumpTextNode(node) {\n// var txt = node.data.replace(/^\\s+/, \"\");\n// if (txt.length < 100) {\n// console.log(node.data.length + \": |\" + txt);\n// } else {\n// console.log(node.data.length + \": |\" + txt.substr(0, 50) + \"|...|\" + txt.substr(-50));\n// }\n// }\n\nfunction mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1*a2 + b1*c2, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n}\n\nexport { drawDOM, drawText, getFontFaces };\n","export default function template() {\n throw new Error(\"Template implementation missing.\");\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __param, __metadata } from 'tslib';\nimport { Directive, Optional, TemplateRef, Input, Component, ContentChild, ElementRef, NgModule } from '@angular/core';\nimport { drawDOM, exportPDF } from '@progress/kendo-drawing';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { validatePackage } from '@progress/kendo-licensing';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\n\nconst _c0 = [\"*\"];\nconst packageMetadata = {\n name: '@progress/kendo-angular-pdf-export',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1646219273,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nlet PDFExportTemplateDirective = class PDFExportTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n};\nPDFExportTemplateDirective.ɵfac = function PDFExportTemplateDirective_Factory(t) { return new (t || PDFExportTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPDFExportTemplateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: PDFExportTemplateDirective, selectors: [[\"\", \"kendoPDFTemplate\", \"\"]] });\nPDFExportTemplateDirective = __decorate([ __param(0, Optional()),\n __metadata(\"design:paramtypes\", [TemplateRef])\n], PDFExportTemplateDirective);\n\nconst FIELDS = ['bottom', 'left', 'right', 'top'];\n/**\n * Represents the Kendo UI PDFMargin component for Angular.\n */\nlet PDFExportMarginComponent = class PDFExportMarginComponent {\n /**\n * @hidden\n */\n get options() {\n const options = {};\n for (let idx = 0; idx < FIELDS.length; idx++) {\n const field = FIELDS[idx];\n const value = this[field];\n if (typeof value !== 'undefined') {\n options[field] = value;\n }\n }\n return options;\n }\n};\nPDFExportMarginComponent.ɵfac = function PDFExportMarginComponent_Factory(t) { return new (t || PDFExportMarginComponent)(); };\nPDFExportMarginComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PDFExportMarginComponent, selectors: [[\"kendo-pdf-export-margin\"]], inputs: { left: \"left\", top: \"top\", right: \"right\", bottom: \"bottom\" }, decls: 0, vars: 0, template: function PDFExportMarginComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportMarginComponent.prototype, \"left\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportMarginComponent.prototype, \"top\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportMarginComponent.prototype, \"right\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportMarginComponent.prototype, \"bottom\", void 0);\n\n/**\n * @hidden\n */\nconst compileTemplate = (templateRef) => {\n const context = {};\n let embeddedView = templateRef.createEmbeddedView(context);\n const result = (data) => {\n Object.assign(context, data);\n embeddedView.detectChanges();\n const templateWrap = document.createElement('span');\n embeddedView.rootNodes.forEach((rootNode) => {\n templateWrap.appendChild(rootNode.cloneNode(true));\n });\n return templateWrap;\n };\n result.destroy = () => {\n embeddedView.destroy();\n embeddedView = null;\n };\n return result;\n};\n\n/**\n * Represents the [Kendo UI PDF Export component for Angular]({% slug overview_pdfexport %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
            \n * \n *
            \n *\n * \n * Content goes here\n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\nlet PDFExportComponent = class PDFExportComponent {\n constructor(element) {\n this.element = element;\n /**\n * The creator of the PDF document.\n * @default \"Kendo UI PDF Generator\"\n */\n this.creator = 'Kendo UI PDF Generator';\n /**\n * Specifies the name of the exported PDF file.\n * @default \"Export.pdf\"\n */\n this.fileName = 'export.pdf';\n validatePackage(packageMetadata);\n }\n get drawMargin() {\n const marginComponent = this.marginComponent;\n let margin = this.margin;\n if (marginComponent) {\n margin = Object.assign(margin || {}, marginComponent.options);\n }\n return margin;\n }\n /**\n * Saves the content as a PDF file with the specified name.\n * @param fileName - The name of the exported file.\n */\n saveAs(fileName = this.fileName) {\n this.save(this.element.nativeElement, fileName);\n }\n /**\n * Exports the content as a `Group` for further processing.\n *\n * @return - The root group of the exported scene.\n */\n export() {\n return this.exportElement(this.element.nativeElement);\n }\n save(element, fileName) {\n this.exportElement(element)\n .then(group => this.exportGroup(group, this.pdfOptions()))\n .then(dataUri => this.saveDataUri(dataUri, fileName, this.saveOptions()));\n }\n exportElement(element) {\n const promise = this.drawElement(element, this.drawOptions());\n const cleanup = this.cleanup.bind(this);\n promise.then(cleanup, cleanup);\n return promise;\n }\n cleanup() {\n if (this.pageTemplate) {\n this.pageTemplate.destroy();\n delete this.pageTemplate;\n }\n }\n drawOptions() {\n if (this.pageTemplateDirective) {\n this.pageTemplate = compileTemplate(this.pageTemplateDirective.templateRef);\n }\n return {\n avoidLinks: this.avoidLinks,\n forcePageBreak: this.forcePageBreak,\n keepTogether: this.keepTogether,\n margin: this.drawMargin,\n paperSize: this.paperSize,\n landscape: this.landscape,\n repeatHeaders: this.repeatHeaders,\n scale: this.scale,\n template: this.pageTemplate\n };\n }\n pdfOptions() {\n return {\n autoPrint: this.autoPrint,\n author: this.author,\n creator: this.creator,\n date: this.date,\n imgDPI: this.imageResolution,\n keywords: this.keywords,\n landscape: this.landscape,\n margin: this.drawMargin,\n multiPage: true,\n paperSize: this.paperSize,\n producer: this.producer,\n subject: this.subject,\n title: this.title\n };\n }\n saveOptions() {\n return {\n forceProxy: this.forceProxy,\n proxyData: this.proxyData,\n proxyTarget: this.proxyTarget,\n proxyURL: this.proxyURL\n };\n }\n drawElement(element, options) {\n return drawDOM(element, options);\n }\n exportGroup(group, options) {\n return exportPDF(group, options);\n }\n saveDataUri(dataUri, fileName, options) {\n saveAs(dataUri, fileName, options);\n }\n};\nPDFExportComponent.ɵfac = function PDFExportComponent_Factory(t) { return new (t || PDFExportComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nPDFExportComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PDFExportComponent, selectors: [[\"kendo-pdf-export\"]], contentQueries: function PDFExportComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFExportTemplateDirective, 5);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFExportMarginComponent, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pageTemplateDirective = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.marginComponent = _t.first);\n } }, inputs: { creator: \"creator\", fileName: \"fileName\", autoPrint: \"autoPrint\", author: \"author\", avoidLinks: \"avoidLinks\", forcePageBreak: \"forcePageBreak\", keepTogether: \"keepTogether\", date: \"date\", imageResolution: \"imageResolution\", forceProxy: \"forceProxy\", keywords: \"keywords\", landscape: \"landscape\", margin: \"margin\", paperSize: \"paperSize\", repeatHeaders: \"repeatHeaders\", scale: \"scale\", proxyData: \"proxyData\", proxyURL: \"proxyURL\", proxyTarget: \"proxyTarget\", producer: \"producer\", subject: \"subject\", title: \"title\" }, ngContentSelectors: _c0, decls: 2, vars: 0, template: function PDFExportComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\");\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n } }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PDFExportComponent.prototype, \"autoPrint\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"author\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportComponent.prototype, \"avoidLinks\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"forcePageBreak\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"keepTogether\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"creator\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Date)\n], PDFExportComponent.prototype, \"date\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], PDFExportComponent.prototype, \"imageResolution\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"fileName\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PDFExportComponent.prototype, \"forceProxy\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"keywords\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PDFExportComponent.prototype, \"landscape\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportComponent.prototype, \"margin\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportComponent.prototype, \"paperSize\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PDFExportComponent.prototype, \"repeatHeaders\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], PDFExportComponent.prototype, \"scale\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PDFExportComponent.prototype, \"proxyData\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"proxyURL\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"proxyTarget\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"producer\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"subject\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PDFExportComponent.prototype, \"title\", void 0);\n__decorate([\n ContentChild(PDFExportTemplateDirective, { static: false }),\n __metadata(\"design:type\", PDFExportTemplateDirective)\n], PDFExportComponent.prototype, \"pageTemplateDirective\", void 0);\n__decorate([\n ContentChild(PDFExportMarginComponent, { static: false }),\n __metadata(\"design:type\", PDFExportMarginComponent)\n], PDFExportComponent.prototype, \"marginComponent\", void 0);\nPDFExportComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef])\n], PDFExportComponent);\n\nconst COMPONENT_DIRECTIVES = [\n PDFExportComponent,\n PDFExportMarginComponent,\n PDFExportTemplateDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the PDF Export directive.\n */\nlet PDFExportModule = class PDFExportModule {\n};\nPDFExportModule.ɵfac = function PDFExportModule_Factory(t) { return new (t || PDFExportModule)(); };\nPDFExportModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: PDFExportModule });\nPDFExportModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PDFExportTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPDFTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PDFExportMarginComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pdf-export-margin',\n template: ``\n }]\n }], null, { left: [{\n type: Input\n }], top: [{\n type: Input\n }], right: [{\n type: Input\n }], bottom: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PDFExportComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pdf-export',\n template: `
            `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { creator: [{\n type: Input\n }], fileName: [{\n type: Input\n }], autoPrint: [{\n type: Input\n }], author: [{\n type: Input\n }], avoidLinks: [{\n type: Input\n }], forcePageBreak: [{\n type: Input\n }], keepTogether: [{\n type: Input\n }], date: [{\n type: Input\n }], imageResolution: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], keywords: [{\n type: Input\n }], landscape: [{\n type: Input\n }], margin: [{\n type: Input\n }], paperSize: [{\n type: Input\n }], repeatHeaders: [{\n type: Input\n }], scale: [{\n type: Input\n }], proxyData: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], proxyTarget: [{\n type: Input\n }], producer: [{\n type: Input\n }], subject: [{\n type: Input\n }], title: [{\n type: Input\n }], pageTemplateDirective: [{\n type: ContentChild,\n args: [PDFExportTemplateDirective, { static: false }]\n }], marginComponent: [{\n type: ContentChild,\n args: [PDFExportMarginComponent, { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PDFExportModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PDFExportModule, { declarations: [PDFExportComponent, PDFExportMarginComponent, PDFExportTemplateDirective], exports: [PDFExportComponent, PDFExportMarginComponent, PDFExportTemplateDirective] }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PDFExportComponent, PDFExportModule, PDFExportMarginComponent, PDFExportTemplateDirective, compileTemplate };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __param, __metadata } from 'tslib';\nimport { Injectable, InjectionToken, Inject, Optional, NgZone, EventEmitter, isDevMode, Input, ElementRef, Output, ViewChild, Component, Renderer2, TemplateRef, ApplicationRef, ComponentFactoryResolver, Injector, NgModule } from '@angular/core';\nimport { siblingContainer, parents, addScroll, align, boundingOffset, offset, positionWithScroll, removeScroll, restrictToView, scrollPosition, getWindowViewPort } from '@progress/kendo-popup-common';\nimport { isDocumentAvailable, hasObservers, ResizeSensorComponent, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { fromEvent, merge, from } from 'rxjs';\nimport { auditTime } from 'rxjs/operators';\nimport { style, animate, AnimationBuilder } from '@angular/animations';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/animations';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\n\nconst _c0 = [\"container\"];\nfunction PopupComponent_ng_template_3_Template(rf, ctx) { }\nconst _c1 = [\"*\"];\nconst eitherRect = (rect, offset$$1) => {\n if (!rect) {\n return { height: 0, left: offset$$1.left, top: offset$$1.top, width: 0 };\n }\n return rect;\n};\n/**\n * @hidden\n */\nconst removeStackingOffset = (rect, stackingOffset) => {\n if (!stackingOffset) {\n return rect;\n }\n const result = {\n height: rect.height,\n left: rect.left - stackingOffset.left,\n top: rect.top - stackingOffset.top,\n width: rect.width\n };\n return result;\n};\n/**\n * @hidden\n */\nconst isDifferentOffset = (oldOffset, newOffset) => {\n const { left: oldLeft, top: oldTop } = oldOffset;\n const { left: newLeft, top: newTop } = newOffset;\n return Math.abs(oldLeft - newLeft) >= 1 || Math.abs(oldTop - newTop) >= 1;\n};\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst OVERFLOW_REGEXP = /auto|scroll/;\nconst overflowElementStyle = (element) => {\n return `${element.style.overflow}${element.style.overflowX}${element.style.overflowY}`;\n};\nconst overflowComputedStyle = (element) => {\n const styles = window.getComputedStyle(element);\n return `${styles.overflow}${styles.overflowX}${styles.overflowY}`;\n};\nconst overflowStyle = (element) => {\n return overflowElementStyle(element) || overflowComputedStyle(element);\n};\n/**\n * @hidden\n */\nconst scrollableParents = (element) => {\n const parentElements = [];\n if (!isDocumentAvailable() || !isWindowAvailable()) {\n return parentElements;\n }\n let parent = element.parentElement;\n while (parent) {\n if (OVERFLOW_REGEXP.test(overflowStyle(parent)) || parent.hasAttribute('data-scrollable')) {\n parentElements.push(parent);\n }\n parent = parent.parentElement;\n }\n parentElements.push(window);\n return parentElements;\n};\n/**\n * @hidden\n */\nconst FRAME_DURATION = 1000 / 60; //1000ms divided by 60fps\nfunction memoize(fun) {\n let result;\n let called = false;\n return (...args) => {\n if (called) {\n return result;\n }\n result = fun(...args);\n called = true;\n return result;\n };\n}\nconst ɵ3 = () => {\n if (!isDocumentAvailable() && document.body !== null) {\n return false;\n }\n const top = 10;\n const parent = document.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
            child
            `;\n document.body.appendChild(parent);\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n document.body.removeChild(parent);\n return isDifferent;\n};\n/**\n * @hidden\n */\nconst hasRelativeStackingContext = memoize(ɵ3);\n/**\n * @hidden\n */\nconst zIndex = (anchor, container) => {\n if (!anchor || !isDocumentAvailable() || !isWindowAvailable()) {\n return null;\n }\n const sibling = siblingContainer(anchor, container);\n if (!sibling) {\n return null;\n }\n const result = [anchor].concat(parents(anchor, sibling)).reduce((index, p) => {\n const zIndexStyle = p.style.zIndex || window.getComputedStyle(p).zIndex;\n const current = parseInt(zIndexStyle, 10);\n return current > index ? current : index;\n }, 0);\n return result ? (result + 1) : null;\n};\n/**\n * @hidden\n */\nconst scaleRect = (rect, scale) => {\n if (!rect || scale === 1) {\n return rect;\n }\n return {\n height: rect.height / scale,\n left: rect.left / scale,\n top: rect.top / scale,\n width: rect.width / scale\n };\n};\n\nconst STYLES = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n];\n/**\n * @hidden\n */\nlet DOMService = class DOMService {\n addOffset(current, addition) {\n return {\n left: current.left + addition.left,\n top: current.top + addition.top\n };\n }\n addScroll(rect, scroll) {\n return addScroll(rect, scroll);\n }\n align(settings) {\n return align(settings);\n }\n boundingOffset(el) {\n return boundingOffset(this.nativeElement(el));\n }\n getFontStyles(el) {\n const window = this.getWindow();\n if (!window || !el) {\n return [];\n }\n const computedStyles = window.getComputedStyle(this.nativeElement(el));\n return STYLES.map(font => ({ key: font, value: computedStyles[font] }));\n }\n getWindow() {\n return isWindowAvailable() ? window : null;\n }\n hasOffsetParent(el) {\n if (!el) {\n return false;\n }\n return !!this.nativeElement(el).offsetParent;\n }\n offset(el) {\n if (!el) {\n return null;\n }\n return offset(this.nativeElement(el));\n }\n offsetAtPoint(el, currentLocation) {\n if (!el) {\n return null;\n }\n const element = this.nativeElement(el);\n const { left, top, transition } = element.style;\n element.style.transition = 'none';\n element.style.left = `${currentLocation.left}px`;\n element.style.top = `${currentLocation.top}px`;\n const currentOffset = offset(element);\n element.style.left = left;\n element.style.top = top;\n // prevents elements with transition to be animated because of the change\n // tslint:disable-next-line:no-unused-expression\n element.offsetHeight;\n element.style.transition = transition;\n return currentOffset;\n }\n nativeElement(el) {\n if (!el) {\n return null;\n }\n return el.nativeElement || el;\n }\n position(element, popup, scale = 1) {\n if (!element || !popup) {\n return null;\n }\n return positionWithScroll(this.nativeElement(element), this.nativeElement(popup), scale);\n }\n removeScroll(rect, scroll) {\n return removeScroll(rect, scroll);\n }\n restrictToView(settings) {\n return restrictToView(settings);\n }\n scrollPosition(el) {\n return scrollPosition(this.nativeElement(el));\n }\n scrollableParents(el) {\n return scrollableParents(this.nativeElement(el));\n }\n stackingElementOffset(el) {\n const relativeContextElement = this.getRelativeContextElement(el);\n if (!relativeContextElement) {\n return null;\n }\n return offset(relativeContextElement);\n }\n stackingElementScroll(el) {\n const relativeContextElement = this.getRelativeContextElement(el);\n if (!relativeContextElement) {\n return { x: 0, y: 0 };\n }\n return {\n x: relativeContextElement.scrollLeft,\n y: relativeContextElement.scrollTop\n };\n }\n getRelativeContextElement(el) {\n if (!el || !hasRelativeStackingContext()) {\n return null;\n }\n let parent = this.nativeElement(el).parentElement;\n while (parent) {\n if (window.getComputedStyle(parent).transform !== 'none') {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n useRelativePosition(el) {\n return !!this.getRelativeContextElement(el);\n }\n windowViewPort(el) {\n return getWindowViewPort(this.nativeElement(el));\n }\n zIndex(anchor, container) {\n return zIndex(this.nativeElement(anchor), this.nativeElement(container));\n }\n zoomLevel() {\n if (!isDocumentAvailable() || !isWindowAvailable()) {\n return 1;\n }\n return parseFloat((document.documentElement.clientWidth / window.innerWidth).toFixed(2)) || 1;\n }\n isZoomed() {\n return this.zoomLevel() > 1;\n }\n};\nDOMService.ɵfac = function DOMService_Factory(t) { return new (t || DOMService)(); };\nDOMService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DOMService, factory: function (t) { return DOMService.ɵfac(t); } });\n\n/**\n * Used to set the document scale when using a [scale transform](https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/scale).\n *\n * The document or container scale is required to compute the popup position correctly. Detecting the scale is not reliable and must be set by providing a value for SCALE. See [Support for Document Scale]({% slug documentscale_popup %}).\n *\n * > Using this token is not necessary for user-applied browser zoom.\n *\n * {% meta height:300 %}\n * {% embed_file scale/app.component.ts preview %}\n * {% embed_file shared/app.module.ts %}\n * {% embed_file shared/main.ts %}\n * {% endmeta %}\n *\n *\n */\nconst SCALE = new InjectionToken('Popup Document Scale');\n\n/**\n * @hidden\n */\nlet AlignService = class AlignService {\n constructor(_dom, scale = 1) {\n this._dom = _dom;\n this.scale = scale;\n }\n alignElement(settings) {\n const { anchor, element, anchorAlign, elementAlign, margin, offset: offset$$1, positionMode } = settings;\n const scale = this.scale || 1;\n const fixedMode = positionMode === 'fixed' || !this._dom.hasOffsetParent(element);\n const anchorRect = fixedMode ? this.absoluteRect(anchor, element, offset$$1, scale) : this.relativeRect(anchor, element, offset$$1, scale);\n const elementRect = scaleRect(this._dom.offset(element), scale);\n const result = this._dom.align({\n anchorAlign: anchorAlign,\n anchorRect: anchorRect,\n elementAlign: elementAlign,\n elementRect: elementRect,\n margin\n });\n return result;\n }\n absoluteRect(anchor, element, offset$$1, scale) {\n const scrollPos = this.elementScrollPosition(anchor, element);\n const rect = eitherRect(this._dom.offset(anchor), offset$$1);\n const stackScale = 2 * scale;\n const stackScroll = this._dom.stackingElementScroll(element);\n if (scale !== 1 && stackScroll) {\n stackScroll.x /= stackScale;\n stackScroll.y /= stackScale;\n }\n const stackOffset = this._dom.stackingElementOffset(element);\n if (scale !== 1 && stackOffset) {\n stackOffset.left /= stackScale;\n stackOffset.top /= stackScale;\n }\n return this._dom.removeScroll(this._dom.addScroll(removeStackingOffset(scaleRect(rect, scale), stackOffset), stackScroll), scrollPos);\n }\n elementScrollPosition(anchor, element) {\n return anchor ? { x: 0, y: 0 } : this._dom.scrollPosition(element);\n }\n relativeRect(anchor, element, offset$$1, scale) {\n const rect = eitherRect(this._dom.position(anchor, element, scale), offset$$1);\n return scaleRect(rect, scale);\n }\n};\nAlignService.ɵfac = function AlignService_Factory(t) { return new (t || AlignService)(ɵngcc0.ɵɵinject(DOMService), ɵngcc0.ɵɵinject(SCALE, 8)); };\nAlignService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: AlignService, factory: function (t) { return AlignService.ɵfac(t); } });\nAlignService = __decorate([ __param(1, Inject(SCALE)), __param(1, Optional()),\n __metadata(\"design:paramtypes\", [DOMService, Number])\n], AlignService);\n\n/**\n * @hidden\n */\nlet PositionService = class PositionService {\n constructor(_dom, scale = 1) {\n this._dom = _dom;\n this.scale = scale;\n }\n positionElement(settings) {\n const { anchor, currentLocation, element, anchorAlign, elementAlign, collisions, margin } = settings;\n const dom = this._dom;\n const scale = this.scale || 1;\n const elementOffset = dom.offsetAtPoint(element, currentLocation);\n const elementRect = scaleRect(elementOffset, scale);\n const anchorOffset = scaleRect(dom.offset(anchor), scale);\n const anchorRect = eitherRect(anchorOffset, currentLocation);\n const viewPort = settings.viewPort || dom.windowViewPort(element);\n viewPort.width = viewPort.width / scale;\n viewPort.height = viewPort.height / scale;\n const result = dom.restrictToView({\n anchorAlign,\n anchorRect,\n collisions,\n elementAlign,\n elementRect,\n margin,\n viewPort\n });\n const offset$$1 = dom.addOffset(currentLocation, result.offset);\n return {\n flip: result.flip,\n flipped: result.flipped,\n offset: offset$$1\n };\n }\n};\nPositionService.ɵfac = function PositionService_Factory(t) { return new (t || PositionService)(ɵngcc0.ɵɵinject(DOMService), ɵngcc0.ɵɵinject(SCALE, 8)); };\nPositionService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: PositionService, factory: function (t) { return PositionService.ɵfac(t); } });\nPositionService = __decorate([ __param(1, Inject(SCALE)), __param(1, Optional()),\n __metadata(\"design:paramtypes\", [DOMService, Number])\n], PositionService);\n\n/**\n * @hidden\n */\nlet ResizeService = class ResizeService {\n constructor(_dom, _zone) {\n this._dom = _dom;\n this._zone = _zone;\n }\n subscribe(callback) {\n if (!isDocumentAvailable()) {\n return;\n }\n this._zone.runOutsideAngular(() => {\n this.subscription = fromEvent(this._dom.getWindow(), \"resize\")\n .pipe(auditTime(FRAME_DURATION))\n .subscribe(() => callback());\n });\n }\n unsubscribe() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n }\n isUnsubscribed() {\n return this.subscription && this.subscription.closed;\n }\n};\nResizeService.ɵfac = function ResizeService_Factory(t) { return new (t || ResizeService)(ɵngcc0.ɵɵinject(DOMService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nResizeService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ResizeService, factory: function (t) { return ResizeService.ɵfac(t); } });\nResizeService = __decorate([ __metadata(\"design:paramtypes\", [DOMService, NgZone])\n], ResizeService);\n\n/**\n * @hidden\n */\nconst THRESHOLD_DIFF = 1;\n/**\n * @hidden\n */\nlet ScrollableService = class ScrollableService {\n constructor(_dom, _zone) {\n this._dom = _dom;\n this._zone = _zone;\n }\n forElement(element) {\n this.unsubscribe();\n this.element = element;\n return this;\n }\n subscribe(callback) {\n if (!callback || !isDocumentAvailable() || !this.element) {\n return;\n }\n const nativeElement = this._dom.nativeElement(this.element);\n const parents$$1 = this._dom.scrollableParents(this.element);\n this._zone.runOutsideAngular(() => {\n const observables = parents$$1.map(p => fromEvent(p, \"scroll\").pipe(auditTime(FRAME_DURATION)));\n const subscriber = (e) => {\n const target = e.target;\n const isParent = parents$$1.filter(p => p === target).length > 0;\n const isDocument = target === document;\n const isWindow = target === window;\n if (isParent || isDocument || isWindow) {\n callback(this.isVisible(nativeElement, target));\n }\n };\n this.subscription = merge(...observables).subscribe(subscriber);\n });\n }\n unsubscribe() {\n if (!this.subscription) {\n return;\n }\n this.subscription.unsubscribe();\n }\n isVisible(elem, container) {\n const elemRect = this._dom.boundingOffset(elem);\n const containerRect = this._dom.boundingOffset(container);\n if (THRESHOLD_DIFF < (containerRect.top - elemRect.bottom)) {\n return false;\n }\n if (THRESHOLD_DIFF < (elemRect.top - containerRect.bottom)) {\n return false;\n }\n if (THRESHOLD_DIFF < (elemRect.left - containerRect.right)) {\n return false;\n }\n if (THRESHOLD_DIFF < (containerRect.left - elemRect.right)) {\n return false;\n }\n return true;\n }\n};\nScrollableService.ɵfac = function ScrollableService_Factory(t) { return new (t || ScrollableService)(ɵngcc0.ɵɵinject(DOMService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nScrollableService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: ScrollableService, factory: function (t) { return ScrollableService.ɵfac(t); } });\nScrollableService = __decorate([ __metadata(\"design:paramtypes\", [DOMService, NgZone])\n], ScrollableService);\n\nconst LEFT = 'left';\nconst RIGHT = 'right';\nconst DOWN = 'down';\nconst UP = 'up';\nconst DEFAULT_TYPE = 'slide';\nconst DEFAULT_DURATION = 100;\nconst animationTypes = {};\n/* tslint:disable:object-literal-sort-keys */\nanimationTypes.expand = (direction) => {\n const scale = direction === UP || direction === DOWN ? 'scaleY' : 'scaleX';\n const startScale = 0;\n const endScale = 1;\n let origin;\n if (direction === DOWN) {\n origin = 'top';\n }\n else if (direction === LEFT) {\n origin = RIGHT;\n }\n else if (direction === RIGHT) {\n origin = LEFT;\n }\n else {\n origin = 'bottom';\n }\n return {\n start: { transform: `${scale}(${startScale})`, transformOrigin: origin },\n end: { transform: `${scale}(${endScale})` }\n };\n};\nanimationTypes.slide = (direction) => {\n const translate = direction === LEFT || direction === RIGHT ? 'translateX' : 'translateY';\n const start = direction === RIGHT || direction === DOWN ? -100 : 100;\n const end = 0;\n return {\n start: { transform: `${translate}(${start}%)` },\n end: { transform: `${translate}(${end}%)` }\n };\n};\nanimationTypes.fade = () => {\n return {\n start: { opacity: 0 },\n end: { opacity: 1 }\n };\n};\nanimationTypes.zoom = () => {\n const start = 0;\n const end = 1;\n return {\n start: { transform: `scale(${start})` },\n end: { transform: `scale(${end})` }\n };\n};\n/**\n * @hidden\n */\nlet AnimationService = class AnimationService {\n constructor(animationBuilder) {\n this.animationBuilder = animationBuilder;\n this.start = new EventEmitter();\n this.end = new EventEmitter();\n }\n play(element, options, flip) {\n if (!this.flip || this.flip.horizontal !== flip.horizontal ||\n this.flip.vertical !== flip.vertical) {\n this.flip = flip;\n const type = options.type || DEFAULT_TYPE;\n const statesFn = animationTypes[type];\n if (statesFn) {\n const direction = this.getDirection(flip, options);\n const states = statesFn(direction);\n this.playStates(element, states, options);\n }\n else if (isDevMode()) {\n throw new Error(`Unsupported animation type: \"${type}\". The supported types are slide, expand, fade and zoom.`);\n }\n }\n }\n ngOnDestroy() {\n this.stopPlayer();\n }\n playStates(element, states, options) {\n this.stopPlayer();\n const duration = options.duration || DEFAULT_DURATION;\n const factory = this.animationBuilder.build([\n style(states.start),\n animate(`${duration}ms ease-in`, style(states.end))\n ]);\n const player = this.player = factory.create(element);\n player.onDone(() => {\n this.end.emit();\n this.stopPlayer();\n });\n this.start.emit();\n player.play();\n }\n getDirection(flip, options) {\n let direction = options.direction || DOWN;\n if (flip.horizontal) {\n if (direction === LEFT) {\n direction = RIGHT;\n }\n else if (direction === RIGHT) {\n direction = LEFT;\n }\n }\n if (flip.vertical) {\n if (direction === DOWN) {\n direction = UP;\n }\n else if (direction === UP) {\n direction = DOWN;\n }\n }\n return direction;\n }\n stopPlayer() {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n};\nAnimationService.ɵfac = function AnimationService_Factory(t) { return new (t || AnimationService)(ɵngcc0.ɵɵinject(ɵngcc1.AnimationBuilder)); };\nAnimationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: AnimationService, factory: function (t) { return AnimationService.ɵfac(t); } });\nAnimationService = __decorate([ __metadata(\"design:paramtypes\", [AnimationBuilder])\n], AnimationService);\n\n/**\n * @hidden\n */\nconst packageMetadata = {\n name: '@progress/kendo-angular-popup',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1642583997,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\nconst DEFAULT_OFFSET = { left: -10000, top: 0 };\nconst ANIMATION_CONTAINER = 'k-animation-container';\nconst ANIMATION_CONTAINER_FIXED = 'k-animation-container-fixed';\n/**\n * Represents the [Kendo UI Popup component for Angular]({% slug overview_popup %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * Popup content!\n * \n * `\n * })\n * class AppComponent {\n * public show: boolean = false;\n * }\n * ```\n */\nlet PopupComponent = class PopupComponent {\n constructor(container, _alignService, domService, _positionService, _resizeService, _scrollableService, animationService, _renderer, _zone) {\n this.container = container;\n this._alignService = _alignService;\n this.domService = domService;\n this._positionService = _positionService;\n this._resizeService = _resizeService;\n this._scrollableService = _scrollableService;\n this.animationService = animationService;\n this._renderer = _renderer;\n this._zone = _zone;\n /**\n * Controls the Popup animation. By default, the opening and closing animations\n * are enabled ([see example]({% slug animations_popup %})).\n */\n this.animate = true;\n /**\n * Specifies the anchor pivot point\n * ([see example]({% slug alignmentpositioning_popup %}#toc-positioning)).\n */\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n /**\n * Configures the collision behavior of the Popup\n * ([see example]({% slug viewportboundarydetection_popup %})).\n */\n this.collision = { horizontal: 'fit', vertical: 'flip' };\n /**\n * Specifies the pivot point of the Popup\n * ([see example]({% slug alignmentpositioning_popup %}#toc-positioning)).\n */\n this.popupAlign = { horizontal: 'left', vertical: 'top' };\n /**\n * Controls whether the component will copy the `anchor` font styles.\n */\n this.copyAnchorStyles = false;\n /**\n * Specifies the position mode of the component. By default, the Popup uses fixed positioning.\n * To make the Popup acquire absolute positioning, set this option to `absolute`.\n *\n * > If you need to support mobile browsers with the zoom option,\n * use the `absolute` positioning of the Popup.\n *\n * @example\n * ```html\n * \n * ```\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
            \n * Position mode:\n * \n * \n *
            \n *
            \n * Append to\n * \n * \n * \n *
            \n *
            \n *
            \n *
            \n * \n * \n *
              \n *
            • Item1
            • \n *
            • Item2
            • \n *
            • Item3
            • \n *
            \n *
            \n * Bottom/Right\n *
            \n * \n *
              \n *
            • Item1
            • \n *
            • Item2
            • \n *
            • Item3
            • \n *
            \n *
            \n * Bottom/Right\n *
            \n * \n *
              \n *
            • Item1
            • \n *
            • Item2
            • \n *
            • Item3
            • \n *
            \n *
            \n *
            \n * `\n * })\n * class AppComponent {\n * public checked: number = 3;\n * public mode: string = 'absolute';\n * public show: boolean = true;\n * }\n * ```\n */\n this.positionMode = 'fixed';\n /**\n * Specifies the absolute position of the element\n * ([see example]({% slug alignmentpositioning_popup %}#toc-aligning-to-absolute-points)).\n * The Popup opens next to that point. The Popup pivot point is defined by the `popupAlign` configuration option.\n * The boundary detection is applied by using the window viewport.\n */\n this.offset = DEFAULT_OFFSET;\n /**\n * Fires when the anchor is scrolled outside the screen boundaries.\n * ([see example]({% slug closing_popup %}#toc-after-leaving-the-viewport)).\n */\n this.anchorViewportLeave = new EventEmitter();\n /**\n * Fires after the component is closed.\n */\n this.close = new EventEmitter();\n /**\n * Fires after the component is opened and the opening animation ends.\n */\n this.open = new EventEmitter();\n /**\n * Fires after the component is opened and the Popup is positioned.\n */\n this.positionChange = new EventEmitter();\n this.resolvedPromise = Promise.resolve(null);\n this.initialCheck = true;\n validatePackage(packageMetadata);\n this._renderer.addClass(container.nativeElement, ANIMATION_CONTAINER);\n this.updateFixedClass();\n }\n ngOnInit() {\n this.reposition = this.reposition.bind(this);\n this._resizeService.subscribe(this.reposition);\n this.animationSubscriptions = this.animationService.start.subscribe(this.onAnimationStart.bind(this));\n this.animationSubscriptions.add(this.animationService.end.subscribe(this.onAnimationEnd.bind(this)));\n this._scrollableService.forElement(this.anchor || this.container).subscribe(this.onScroll.bind(this));\n this.currentOffset = DEFAULT_OFFSET;\n this.setZIndex();\n this.copyFontStyles();\n this.updateFixedClass();\n this.reposition();\n }\n ngOnChanges(changes) {\n if (changes.copyAnchorStyles) {\n this.copyFontStyles();\n }\n if (changes.positionMode) {\n this.updateFixedClass();\n }\n }\n ngAfterViewInit() {\n if (!this.animate) {\n this.resolvedPromise.then(() => {\n this.onAnimationEnd();\n });\n }\n }\n ngAfterViewChecked() {\n if (this.initialCheck) {\n this.initialCheck = false;\n return;\n }\n this._zone.runOutsideAngular(() => {\n // workarounds https://github.com/angular/angular/issues/19094\n // uses promise because it is executed synchronously after the content is updated\n // does not use onStable in case the current zone is not the angular one.\n this.unsubscribeReposition();\n this.repositionSubscription = from(this.resolvedPromise)\n .subscribe(this.reposition);\n });\n }\n ngOnDestroy() {\n this.anchorViewportLeave.complete();\n this.positionChange.complete();\n this.close.emit();\n this.close.complete();\n this._resizeService.unsubscribe();\n this._scrollableService.unsubscribe();\n this.animationSubscriptions.unsubscribe();\n this.unsubscribeReposition();\n }\n /**\n * @hidden\n */\n onResize() {\n this.reposition();\n }\n onAnimationStart() {\n this._renderer.removeClass(this.container.nativeElement, 'k-animation-container-shown');\n }\n onAnimationEnd() {\n this._renderer.addClass(this.container.nativeElement, 'k-animation-container-shown');\n this.open.emit();\n this.open.complete();\n }\n get currentOffset() {\n return this._currentOffset;\n }\n set currentOffset(offset$$1) {\n this.setContainerStyle('left', `${offset$$1.left}px`);\n this.setContainerStyle('top', `${offset$$1.top}px`);\n this._currentOffset = offset$$1;\n }\n setZIndex() {\n if (this.anchor) {\n this.setContainerStyle('z-index', String(this.domService.zIndex(this.anchor, this.container)));\n }\n }\n reposition() {\n if (!isDocumentAvailable()) {\n return;\n }\n const { flip, offset: offset$$1 } = this.position();\n if (!this.currentOffset || isDifferentOffset(this.currentOffset, offset$$1)) {\n this.currentOffset = offset$$1;\n if (hasObservers(this.positionChange)) {\n this._zone.run(() => this.positionChange.emit({ offset: offset$$1, flip }));\n }\n }\n if (this.animate) {\n this.animationService.play(this.contentContainer.nativeElement, this.animate, flip);\n }\n this.resizeSensor.acceptSize();\n }\n position() {\n const alignedOffset = this._alignService.alignElement({\n anchor: this.anchor,\n anchorAlign: this.anchorAlign,\n element: this.container,\n elementAlign: this.popupAlign,\n margin: this.margin,\n offset: this.offset,\n positionMode: this.positionMode\n });\n return this._positionService.positionElement({\n anchor: this.anchor,\n anchorAlign: this.anchorAlign,\n collisions: this.collision,\n currentLocation: alignedOffset,\n element: this.container,\n elementAlign: this.popupAlign,\n margin: this.margin\n });\n }\n onScroll(isInViewPort) {\n const hasLeaveObservers = hasObservers(this.anchorViewportLeave);\n if (isInViewPort || !hasLeaveObservers) {\n this.reposition();\n }\n else if (hasLeaveObservers) {\n this._zone.run(() => {\n this.anchorViewportLeave.emit();\n });\n }\n }\n copyFontStyles() {\n if (!this.anchor || !this.copyAnchorStyles) {\n return;\n }\n this.domService.getFontStyles(this.anchor)\n .forEach(s => this.setContainerStyle(s.key, s.value));\n }\n updateFixedClass() {\n const action = this.positionMode === 'fixed' ? 'addClass' : 'removeClass';\n this._renderer[action](this.container.nativeElement, ANIMATION_CONTAINER_FIXED);\n }\n setContainerStyle(name, value) {\n this._renderer.setStyle(this.container.nativeElement, name, value);\n }\n unsubscribeReposition() {\n if (this.repositionSubscription) {\n this.repositionSubscription.unsubscribe();\n }\n }\n};\nPopupComponent.ɵfac = function PopupComponent_Factory(t) { return new (t || PopupComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(AlignService), ɵngcc0.ɵɵdirectiveInject(DOMService), ɵngcc0.ɵɵdirectiveInject(PositionService), ɵngcc0.ɵɵdirectiveInject(ResizeService), ɵngcc0.ɵɵdirectiveInject(ScrollableService), ɵngcc0.ɵɵdirectiveInject(AnimationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nPopupComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: PopupComponent, selectors: [[\"kendo-popup\"]], viewQuery: function PopupComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 7);\n ɵngcc0.ɵɵviewQuery(ResizeSensorComponent, 7);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeSensor = _t.first);\n } }, inputs: { animate: \"animate\", anchorAlign: \"anchorAlign\", collision: \"collision\", popupAlign: \"popupAlign\", copyAnchorStyles: \"copyAnchorStyles\", positionMode: \"positionMode\", offset: \"offset\", anchor: \"anchor\", popupClass: \"popupClass\", margin: \"margin\" }, outputs: { anchorViewportLeave: \"anchorViewportLeave\", close: \"close\", open: \"open\", positionChange: \"positionChange\" }, exportAs: [\"kendo-popup\"], features: [ɵngcc0.ɵɵProvidersFeature([AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 5, vars: 4, consts: [[1, \"k-popup\", 3, \"ngClass\"], [\"container\", \"\"], [3, \"ngTemplateOutlet\", \"ngIf\"], [3, \"rateLimit\", \"resize\"]], template: function PopupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0, 1);\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵtemplate(3, PopupComponent_ng_template_3_Template, 0, 0, \"ng-template\", 2);\n ɵngcc0.ɵɵelementStart(4, \"kendo-resize-sensor\", 3);\n ɵngcc0.ɵɵlistener(\"resize\", function PopupComponent_Template_kendo_resize_sensor_resize_4_listener() { return ctx.onResize(); });\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.popupClass);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.content)(\"ngIf\", ctx.content);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"rateLimit\", 100);\n } }, directives: [ɵngcc2.NgClass, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgIf, ɵngcc3.ResizeSensorComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"animate\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", ElementRef)\n], PopupComponent.prototype, \"anchor\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"anchorAlign\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"collision\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"popupAlign\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], PopupComponent.prototype, \"copyAnchorStyles\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"popupClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], PopupComponent.prototype, \"positionMode\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"offset\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], PopupComponent.prototype, \"margin\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupComponent.prototype, \"anchorViewportLeave\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupComponent.prototype, \"close\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], PopupComponent.prototype, \"positionChange\", void 0);\n__decorate([\n ViewChild('container', { static: true }),\n __metadata(\"design:type\", ElementRef)\n], PopupComponent.prototype, \"contentContainer\", void 0);\n__decorate([\n ViewChild(ResizeSensorComponent, { static: true }),\n __metadata(\"design:type\", ResizeSensorComponent)\n], PopupComponent.prototype, \"resizeSensor\", void 0);\nPopupComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n AlignService,\n DOMService,\n PositionService,\n ResizeService,\n ScrollableService,\n AnimationService,\n Renderer2,\n NgZone])\n], PopupComponent);\n\nconst removeElement = (element) => {\n if (element && element.parentNode) {\n element.parentNode.removeChild(element);\n }\n};\n/**\n * Used to inject the Popup container. If not provided, the first root component of\n * the application is used.\n *\n * > The `POPUP_CONTAINER` can be used only with the [`PopupService`]({% slug service_popup %}) class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Popup module\n * import { PopupModule, POPUP_CONTAINER } from '@progress/kendo-angular-popup';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { ElementRef, NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, PopupModule], // import Popup module\n * bootstrap: [AppComponent],\n * providers: [{\n * provide: POPUP_CONTAINER,\n * useFactory: () => {\n * //return the container ElementRef, where the popup will be injected\n * return { nativeElement: document.body } as ElementRef;\n * }\n * }]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nconst POPUP_CONTAINER = new InjectionToken('Popup Container');\n/**\n * A service for opening Popup components dynamically\n * ([see example]({% slug service_popup %})).\n *\n * @export\n * @class PopupService\n */\nlet PopupService = class PopupService {\n constructor(applicationRef, componentFactoryResolver, injector, container) {\n this.applicationRef = applicationRef;\n this.componentFactoryResolver = componentFactoryResolver;\n this.injector = injector;\n this.container = container;\n }\n /**\n * Gets the root view container into which the component will be injected.\n *\n * @returns {ComponentRef}\n */\n get rootViewContainer() {\n // https://github.com/angular/angular/blob/4.0.x/packages/core/src/application_ref.ts#L571\n const rootComponents = this.applicationRef.components || [];\n if (rootComponents[0]) {\n return rootComponents[0];\n }\n throw new Error(`\n View Container not found! Inject the POPUP_CONTAINER or define a specific ViewContainerRef via the appendTo option.\n See http://www.telerik.com/kendo-angular-ui/components/popup/api/POPUP_CONTAINER/ for more details.\n `);\n }\n /**\n * Sets or gets the HTML element of the root component container.\n *\n * @returns {HTMLElement}\n */\n get rootViewContainerNode() {\n return this.container ? this.container.nativeElement : this.getComponentRootNode(this.rootViewContainer);\n }\n /**\n * Opens a Popup component. Created Popups are mounted\n * in the DOM directly in the root application component.\n *\n * @param {PopupSettings} options - The options which define the Popup.\n * @returns {ComponentRef} - A reference to the Popup object.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Popup content\n * \n * \n * `\n * })\n * export class AppComponent {\n * public popupRef: PopupRef;\n *\n * constructor( private popupService: PopupService ) {}\n *\n * public open(anchor: ElementRef, template: TemplateRef): void {\n * if (this.popupRef) {\n * this.popupRef.close();\n * this.popupRef = null;\n * return;\n * }\n *\n * this.popupRef = this.popupService.open({\n * anchor: anchor,\n * content: template\n * });\n * }\n * }\n * ```\n */\n open(options = {}) {\n const { component, nodes } = this.contentFrom(options.content);\n const popupComponentRef = this.appendPopup(nodes, options.appendTo);\n const popupInstance = popupComponentRef.instance;\n this.projectComponentInputs(popupComponentRef, options);\n popupComponentRef.changeDetectorRef.detectChanges();\n if (component) {\n component.changeDetectorRef.detectChanges();\n }\n const popupElement = this.getComponentRootNode(popupComponentRef);\n return {\n close: () => {\n if (component) {\n component.destroy();\n }\n popupComponentRef.destroy();\n // Angular will not remove the element unless the change detection is triggered\n removeElement(popupElement);\n },\n content: component,\n popup: popupComponentRef,\n popupAnchorViewportLeave: popupInstance.anchorViewportLeave,\n popupClose: popupInstance.close,\n popupElement: popupElement,\n popupOpen: popupInstance.open,\n popupPositionChange: popupInstance.positionChange\n };\n }\n appendPopup(nodes, container) {\n const popupComponentRef = this.createComponent(PopupComponent, nodes, container);\n if (!container) {\n this.rootViewContainerNode.appendChild(this.getComponentRootNode(popupComponentRef));\n }\n return popupComponentRef;\n }\n /**\n * Gets the HTML element for a component reference.\n *\n * @param {ComponentRef} componentRef\n * @returns {HTMLElement}\n */\n getComponentRootNode(componentRef) {\n return componentRef.location.nativeElement;\n }\n /**\n * Gets the `ComponentFactory` instance by its type.\n *\n * @param {*} componentClass\n * @param {*} nodes\n * @returns {ComponentRef}\n */\n getComponentFactory(componentClass) {\n return this.componentFactoryResolver.resolveComponentFactory(componentClass);\n }\n /**\n * Creates a component reference from a `Component` type class.\n *\n * @param {*} componentClass\n * @param {*} nodes\n * @returns {ComponentRef}\n */\n createComponent(componentClass, nodes, container) {\n const factory = this.getComponentFactory(componentClass);\n if (container) {\n return container.createComponent(factory, undefined, this.injector, nodes);\n }\n else {\n const component = factory.create(this.injector, nodes);\n this.applicationRef.attachView(component.hostView);\n return component;\n }\n }\n /**\n * Projects the inputs on the component.\n *\n * @param {ComponentRef} component\n * @param {*} options\n * @returns {ComponentRef}\n */\n projectComponentInputs(component, options) {\n Object.getOwnPropertyNames(options)\n .filter(prop => prop !== 'content' || options.content instanceof TemplateRef)\n .map((prop) => {\n component.instance[prop] = options[prop];\n });\n return component;\n }\n /**\n * Gets the component and the nodes to append from the `content` option.\n *\n * @param {*} content\n * @returns {any}\n */\n contentFrom(content) {\n if (!content || content instanceof TemplateRef) {\n return { component: null, nodes: [[]] };\n }\n const component = this.createComponent(content);\n const nodes = component ? [component.location.nativeElement] : [];\n return {\n component: component,\n nodes: [\n nodes // \n ]\n };\n }\n};\nPopupService.ɵfac = function PopupService_Factory(t) { return new (t || PopupService)(ɵngcc0.ɵɵinject(ɵngcc0.ApplicationRef), ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(ɵngcc0.Injector), ɵngcc0.ɵɵinject(POPUP_CONTAINER, 8)); };\nPopupService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: PopupService, factory: function (t) { return PopupService.ɵfac(t); } });\nPopupService = __decorate([ __param(3, Inject(POPUP_CONTAINER)), __param(3, Optional()),\n __metadata(\"design:paramtypes\", [ApplicationRef,\n ComponentFactoryResolver,\n Injector,\n ElementRef])\n], PopupService);\n\nconst POPUP_DIRECTIVES = [PopupComponent];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Popup component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Popup module\n * import { PopupModule } from '@progress/kendo-angular-popup';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, PopupModule], // import Popup module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nlet PopupModule = class PopupModule {\n};\nPopupModule.ɵfac = function PopupModule_Factory(t) { return new (t || PopupModule)(); };\nPopupModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: PopupModule });\nPopupModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ providers: [PopupService], imports: [[CommonModule, ResizeSensorModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DOMService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AlignService, [{\n type: Injectable\n }], function () { return [{ type: DOMService }, { type: Number, decorators: [{\n type: Inject,\n args: [SCALE]\n }, {\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PositionService, [{\n type: Injectable\n }], function () { return [{ type: DOMService }, { type: Number, decorators: [{\n type: Inject,\n args: [SCALE]\n }, {\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeService, [{\n type: Injectable\n }], function () { return [{ type: DOMService }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ScrollableService, [{\n type: Injectable\n }], function () { return [{ type: DOMService }, { type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(AnimationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.AnimationBuilder }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PopupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendo-popup',\n providers: [AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService],\n selector: 'kendo-popup',\n template: `\n
            \n \n \n \n \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: AlignService }, { type: DOMService }, { type: PositionService }, { type: ResizeService }, { type: ScrollableService }, { type: AnimationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { animate: [{\n type: Input\n }], anchorAlign: [{\n type: Input\n }], collision: [{\n type: Input\n }], popupAlign: [{\n type: Input\n }], copyAnchorStyles: [{\n type: Input\n }], positionMode: [{\n type: Input\n }], offset: [{\n type: Input\n }], anchorViewportLeave: [{\n type: Output\n }], close: [{\n type: Output\n }], open: [{\n type: Output\n }], positionChange: [{\n type: Output\n }], anchor: [{\n type: Input\n }], popupClass: [{\n type: Input\n }], margin: [{\n type: Input\n }], contentContainer: [{\n type: ViewChild,\n args: ['container', { static: true }]\n }], resizeSensor: [{\n type: ViewChild,\n args: [ResizeSensorComponent, { static: true }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PopupService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ApplicationRef }, { type: ɵngcc0.ComponentFactoryResolver }, { type: ɵngcc0.Injector }, { type: ɵngcc0.ElementRef, decorators: [{\n type: Inject,\n args: [POPUP_CONTAINER]\n }, {\n type: Optional\n }] }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(PopupModule, [{\n type: NgModule,\n args: [{\n declarations: [POPUP_DIRECTIVES],\n entryComponents: [POPUP_DIRECTIVES],\n exports: [POPUP_DIRECTIVES],\n imports: [CommonModule, ResizeSensorModule],\n providers: [PopupService]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PopupModule, { declarations: function () { return [PopupComponent]; }, imports: function () { return [CommonModule, ResizeSensorModule]; }, exports: function () { return [PopupComponent]; } }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AlignService, AnimationService, DOMService, PositionService, ResizeService, ScrollableService, PopupService, POPUP_CONTAINER, PopupComponent, PopupModule, SCALE };\n\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2021 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata } from 'tslib';\nimport { EventEmitter, Injectable, NgZone, Input, Component, Output, ContentChildren, QueryList, ViewChild, ElementRef, TemplateRef, ViewContainerRef, ViewChildren, HostBinding, HostListener, ChangeDetectorRef, Renderer2, forwardRef, Directive, NgModule } from '@angular/core';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { Keys, isDocumentAvailable, ResizeSensorComponent, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { take, filter, takeUntil } from 'rxjs/operators';\nimport { Subject, Subscription, merge, fromEvent } from 'rxjs';\nimport { ButtonGroupComponent, DropDownButtonComponent, SplitButtonComponent, ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@progress/kendo-angular-popup';\nimport * as ɵngcc3 from '@angular/common';\nimport * as ɵngcc4 from '@progress/kendo-angular-common';\nimport * as ɵngcc5 from '@progress/kendo-angular-buttons';\n\nconst _c0 = [\"overflowButton\"];\nconst _c1 = [\"popupTemplate\"];\nconst _c2 = [\"resizeSensor\"];\nconst _c3 = [\"container\"];\nconst _c4 = [\"toolbarRenderer\"];\nconst _c5 = [\"overflowRenderer\"];\nfunction ToolBarComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-toolbar-renderer\", 6, 7);\n ɵngcc0.ɵɵlistener(\"rendererClick\", function ToolBarComponent_ng_container_1_Template_kendo_toolbar_renderer_rendererClick_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r10); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.onRendererClick($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const tool_r6 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"location\", \"toolbar\")(\"resizable\", ctx_r0.overflow)(\"tool\", tool_r6);\n} }\nfunction ToolBarComponent_button_2_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 8, 9);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarComponent_button_2_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.showPopup(); });\n ɵngcc0.ɵɵelement(2, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"visibility\", ctx_r1.displayAnchor);\n ɵngcc0.ɵɵproperty(\"title\", ctx_r1.moreToolsTitle);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r1.moreToolsTitle);\n} }\nfunction ToolBarComponent_ng_template_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n const _r19 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"li\", 12)(2, \"kendo-toolbar-renderer\", 6, 13);\n ɵngcc0.ɵɵlistener(\"rendererClick\", function ToolBarComponent_ng_template_3_ng_container_1_Template_kendo_toolbar_renderer_rendererClick_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r19); const ctx_r18 = ɵngcc0.ɵɵnextContext(2); return ctx_r18.onRendererClick($event); });\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const tool_r15 = ctx.$implicit;\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"location\", \"overflow\")(\"resizable\", ctx_r14.overflow)(\"tool\", tool_r15);\n} }\nfunction ToolBarComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 11);\n ɵngcc0.ɵɵtemplate(1, ToolBarComponent_ng_template_3_ng_container_1_Template, 4, 3, \"ng-container\", 1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.allTools);\n} }\nfunction ToolBarComponent_kendo_resize_sensor_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-resize-sensor\", 14, 15);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"rateLimit\", 1000);\n} }\nconst _c8 = [\"toolbarTemplate\"];\nconst _c9 = [\"toolbarButton\"];\nfunction ToolBarButtonComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 2, 3);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarButtonComponent_ng_template_0_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.click.emit($event); })(\"pointerdown\", function ToolBarButtonComponent_ng_template_0_Template_button_pointerdown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.pointerdown.emit($event); })(\"selectedChange\", function ToolBarButtonComponent_ng_template_0_Template_button_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.selectedChange.emit($event); })(\"blur\", function ToolBarButtonComponent_ng_template_0_Template_button_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.onBlur(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx_r1.tabIndex)(\"ngStyle\", ctx_r1.style)(\"ngClass\", ctx_r1.className)(\"disabled\", ctx_r1.disabled)(\"toggleable\", ctx_r1.toggleable)(\"primary\", ctx_r1.primary)(\"selected\", ctx_r1.selected)(\"icon\", ctx_r1.toolbarOptions.icon)(\"iconClass\", ctx_r1.toolbarOptions.iconClass)(\"imageUrl\", ctx_r1.toolbarOptions.imageUrl)(\"look\", ctx_r1.look);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r1.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.toolbarOptions.text, \" \");\n} }\nfunction ToolBarButtonComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarButtonComponent_ng_template_2_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.click.emit($event); })(\"selectedChange\", function ToolBarButtonComponent_ng_template_2_Template_button_selectedChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.selectedChange.emit($event); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r3.style)(\"ngClass\", ctx_r3.className)(\"disabled\", ctx_r3.disabled)(\"toggleable\", ctx_r3.toggleable)(\"primary\", ctx_r3.primary)(\"selected\", ctx_r3.selected)(\"icon\", ctx_r3.overflowOptions.icon)(\"iconClass\", ctx_r3.overflowOptions.iconClass)(\"imageUrl\", ctx_r3.overflowOptions.imageUrl)(\"look\", ctx_r3.look);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r3.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.overflowOptions.text, \" \");\n} }\nconst _c10 = [\"toolbarButtonGroup\"];\nconst _c11 = [\"overflowButtonGroup\"];\nfunction ToolBarButtonGroupComponent_ng_template_0_span_2_Template(rf, ctx) { if (rf & 1) {\n const _r8 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 5);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarButtonGroupComponent_ng_template_0_span_2_Template_span_click_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r8); const button_r6 = restoredCtx.$implicit; const ctx_r7 = ɵngcc0.ɵɵnextContext(2); button_r6.click.emit($event); return ctx_r7.onButtonClick($event); })(\"pointerdown\", function ToolBarButtonGroupComponent_ng_template_0_span_2_Template_span_pointerdown_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r8); const button_r6 = restoredCtx.$implicit; return button_r6.pointerdown.emit($event); })(\"selectedChange\", function ToolBarButtonGroupComponent_ng_template_0_span_2_Template_span_selectedChange_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r8); const button_r6 = restoredCtx.$implicit; const ctx_r10 = ɵngcc0.ɵɵnextContext(2); return ctx_r10.selectedChangeHandler($event, button_r6); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const button_r6 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngStyle\", button_r6.style)(\"ngClass\", button_r6.className)(\"disabled\", button_r6.disabled)(\"togglable\", button_r6.togglable)(\"primary\", button_r6.primary)(\"selected\", button_r6.selected)(\"icon\", button_r6.toolbarOptions.icon)(\"iconClass\", button_r6.toolbarOptions.iconClass)(\"imageUrl\", button_r6.toolbarOptions.imageUrl);\n ɵngcc0.ɵɵattribute(\"title\", button_r6.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", button_r6.toolbarOptions.text, \" \");\n} }\nfunction ToolBarButtonGroupComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-buttongroup\", 2, 3);\n ɵngcc0.ɵɵlistener(\"navigate\", function ToolBarButtonGroupComponent_ng_template_0_Template_kendo_buttongroup_navigate_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r11 = ɵngcc0.ɵɵnextContext(); return ctx_r11.onNavigate($event); })(\"focus\", function ToolBarButtonGroupComponent_ng_template_0_Template_kendo_buttongroup_focus_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.onFocus(); });\n ɵngcc0.ɵɵtemplate(2, ToolBarButtonGroupComponent_ng_template_0_span_2_Template, 2, 11, \"span\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tabIndex\", -1)(\"selection\", ctx_r1.selection)(\"disabled\", ctx_r1.disabled)(\"look\", ctx_r1.look)(\"width\", ctx_r1.width);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r1.buttonComponents);\n} }\nfunction ToolBarButtonGroupComponent_ng_template_2_span_2_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarButtonGroupComponent_ng_template_2_span_2_Template_span_click_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const button_r16 = restoredCtx.$implicit; const ctx_r17 = ɵngcc0.ɵɵnextContext(2); button_r16.click.emit($event); return ctx_r17.onButtonClick($event); })(\"selectedChange\", function ToolBarButtonGroupComponent_ng_template_2_span_2_Template_span_selectedChange_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const button_r16 = restoredCtx.$implicit; const ctx_r19 = ɵngcc0.ɵɵnextContext(2); return ctx_r19.selectedChangeHandler($event, button_r16); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const button_r16 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngStyle\", button_r16.style)(\"ngClass\", button_r16.className)(\"disabled\", button_r16.disabled)(\"togglable\", button_r16.togglable)(\"primary\", button_r16.primary)(\"selected\", button_r16.selected)(\"icon\", button_r16.overflowOptions.icon)(\"iconClass\", button_r16.overflowOptions.iconClass)(\"imageUrl\", button_r16.overflowOptions.imageUrl);\n ɵngcc0.ɵɵattribute(\"title\", button_r16.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", button_r16.overflowOptions.text, \" \");\n} }\nfunction ToolBarButtonGroupComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-buttongroup\", 6, 7);\n ɵngcc0.ɵɵtemplate(2, ToolBarButtonGroupComponent_ng_template_2_span_2_Template, 2, 11, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"tabIndex\", -1)(\"selection\", ctx_r3.selection)(\"disabled\", ctx_r3.disabled)(\"look\", ctx_r3.look)(\"width\", ctx_r3.width);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r3.buttonComponents);\n} }\nconst _c12 = [\"button\"];\nfunction ToolBarButtonListComponent_button_0_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 1, 2);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarButtonListComponent_button_0_Template_button_click_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r5); const item_r1 = restoredCtx.$implicit; const i_r2 = restoredCtx.index; const ctx_r4 = ɵngcc0.ɵɵnextContext(); return ctx_r4.onClick(item_r1, i_r2); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r0.disabled || item_r1.disabled)(\"icon\", item_r1.icon)(\"iconClass\", item_r1.iconClass)(\"imageUrl\", item_r1.imageUrl)(\"look\", ctx_r0.look);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r0.getText(item_r1), \" \");\n} }\nconst _c13 = [\"dropdownButton\"];\nconst _c14 = [\"toolbarDropDownButton\"];\nconst _c15 = [\"overflowDropDownButtonButtonList\"];\nfunction ToolBarDropDownButtonComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownbutton\", 2, 3);\n ɵngcc0.ɵɵlistener(\"open\", function ToolBarDropDownButtonComponent_ng_template_0_Template_kendo_dropdownbutton_open_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.open.emit($event); })(\"close\", function ToolBarDropDownButtonComponent_ng_template_0_Template_kendo_dropdownbutton_close_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.close.emit($event); })(\"itemClick\", function ToolBarDropDownButtonComponent_ng_template_0_Template_kendo_dropdownbutton_itemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.itemClick.emit($event); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"icon\", ctx_r1.toolbarOptions.icon)(\"iconClass\", ctx_r1.toolbarOptions.iconClass)(\"imageUrl\", ctx_r1.toolbarOptions.imageUrl)(\"buttonClass\", ctx_r1.buttonClass)(\"disabled\", ctx_r1.disabled)(\"tabIndex\", -1)(\"data\", ctx_r1.data)(\"textField\", ctx_r1.textField)(\"popupSettings\", ctx_r1.popupSettings)(\"look\", ctx_r1.look)(\"primary\", ctx_r1.primary);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r1.toolbarOptions.text, \" \");\n} }\nfunction ToolBarDropDownButtonComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r11 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarDropDownButtonComponent_ng_template_2_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10.itemClick.emit($event); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"kendo-toolbar-buttonlist\", 5, 6);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ToolBarDropDownButtonComponent_ng_template_2_Template_kendo_toolbar_buttonlist_itemClick_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.itemClick.emit($event); })(\"click\", function ToolBarDropDownButtonComponent_ng_template_2_Template_kendo_toolbar_buttonlist_click_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.onButtonListClick($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"disabled\", true)(\"icon\", ctx_r3.overflowOptions.icon)(\"iconClass\", ctx_r3.overflowOptions.iconClass)(\"imageUrl\", ctx_r3.overflowOptions.imageUrl)(\"ngClass\", ctx_r3.buttonClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.overflowOptions.text, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"data\", ctx_r3.data)(\"disabled\", ctx_r3.disabled)(\"textField\", ctx_r3.textField);\n} }\nconst _c16 = [\"toolbarSplitButton\"];\nconst _c17 = [\"overflowSplitButton\"];\nconst _c18 = [\"overflowSplitButtonButtonList\"];\nfunction ToolBarSplitButtonComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-splitbutton\", 2, 3);\n ɵngcc0.ɵɵlistener(\"buttonClick\", function ToolBarSplitButtonComponent_ng_template_0_Template_kendo_splitbutton_buttonClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.buttonClick.emit($event); })(\"open\", function ToolBarSplitButtonComponent_ng_template_0_Template_kendo_splitbutton_open_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r7 = ɵngcc0.ɵɵnextContext(); return ctx_r7.open.emit($event); })(\"close\", function ToolBarSplitButtonComponent_ng_template_0_Template_kendo_splitbutton_close_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r8 = ɵngcc0.ɵɵnextContext(); return ctx_r8.close.emit($event); })(\"itemClick\", function ToolBarSplitButtonComponent_ng_template_0_Template_kendo_splitbutton_itemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r6); const ctx_r9 = ɵngcc0.ɵɵnextContext(); return ctx_r9.itemClick.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r1.data)(\"text\", ctx_r1.toolbarOptions.text)(\"icon\", ctx_r1.toolbarOptions.icon)(\"iconClass\", ctx_r1.toolbarOptions.iconClass)(\"imageUrl\", ctx_r1.toolbarOptions.imageUrl)(\"buttonClass\", ctx_r1.buttonClass)(\"arrowButtonClass\", ctx_r1.arrowButtonClass)(\"arrowButtonIcon\", ctx_r1.arrowButtonIcon)(\"disabled\", ctx_r1.disabled)(\"tabIndex\", -1)(\"textField\", ctx_r1.textField)(\"popupSettings\", ctx_r1.popupSettings)(\"look\", ctx_r1.look);\n} }\nfunction ToolBarSplitButtonComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 4, 5);\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarSplitButtonComponent_ng_template_2_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.buttonClick.emit($event); })(\"click\", function ToolBarSplitButtonComponent_ng_template_2_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.onMainButtonClick($event); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"kendo-toolbar-buttonlist\", 6, 7);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ToolBarSplitButtonComponent_ng_template_2_Template_kendo_toolbar_buttonlist_itemClick_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r15 = ɵngcc0.ɵɵnextContext(); return ctx_r15.itemClick.emit($event); })(\"click\", function ToolBarSplitButtonComponent_ng_template_2_Template_kendo_toolbar_buttonlist_click_3_listener($event) { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r16 = ɵngcc0.ɵɵnextContext(); return ctx_r16.onButtonListClick($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"disabled\", ctx_r3.disabled)(\"icon\", ctx_r3.overflowOptions.icon)(\"iconClass\", ctx_r3.overflowOptions.iconClass)(\"imageUrl\", ctx_r3.overflowOptions.imageUrl)(\"look\", ctx_r3.look)(\"ngClass\", ctx_r3.buttonClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r3.overflowOptions.text, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"look\", ctx_r3.look)(\"data\", ctx_r3.data)(\"disabled\", ctx_r3.disabled)(\"textField\", ctx_r3.textField);\n} }\nconst _c19 = [\"separator\"];\nfunction ToolBarSeparatorComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 1);\n} }\nfunction ToolBarRendererComponent_ng_container_0_ng_template_1_Template(rf, ctx) { }\nfunction ToolBarRendererComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, ToolBarRendererComponent_ng_container_0_ng_template_1_Template, 0, 0, \"ng-template\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.template);\n} }\nfunction ToolBarRendererComponent_ng_container_1_ng_template_1_Template(rf, ctx) { }\nfunction ToolBarRendererComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, ToolBarRendererComponent_ng_container_1_ng_template_1_Template, 0, 0, \"ng-template\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r1.template);\n} }\nconst packageMetadata = {\n name: '@progress/kendo-angular-toolbar',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1635939564,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nlet RefreshService = class RefreshService {\n /**\n * @hidden\n */\n constructor() {\n this.onRefresh = new EventEmitter();\n }\n refresh(tool) {\n this.onRefresh.emit(tool);\n }\n};\nRefreshService.ɵfac = function RefreshService_Factory(t) { return new (t || RefreshService)(); };\nRefreshService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: RefreshService, factory: function (t) { return RefreshService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nconst focusableRegex = /^(?:a|input|select|textarea|button|object)$/i;\n/**\n * @hidden\n */\nfunction outerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width += parseFloat(style.marginLeft) || 0 + parseFloat(style.marginRight) || 0;\n return width;\n}\n/**\n * @hidden\n */\nfunction innerWidth(element) {\n var width = element.offsetWidth;\n var style = getComputedStyle(element);\n width -= parseFloat(style.paddingLeft) || 0 + parseFloat(style.borderLeftWidth) || 0;\n width -= parseFloat(style.paddingRight) || 0 + parseFloat(style.borderRightWidth) || 0;\n return width;\n}\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n const hasSize = rect.width > 0 && rect.height > 0;\n const hasPosition = rect.x !== 0 && rect.y !== 0;\n // Elements can have zero size due to styling, but they should still count as visible.\n // For example, the selection checkbox has no size, but is made visible through styling.\n return (hasSize || hasPosition) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst findElement = (node, predicate, matchSelf = true) => {\n if (!node) {\n return;\n }\n if (matchSelf && predicate(node)) {\n return node;\n }\n node = node.firstChild;\n while (node) {\n if (node.nodeType === 1) {\n const element = findElement(node, predicate);\n if (element) {\n return element;\n }\n }\n node = node.nextSibling;\n }\n};\n/**\n * @hidden\n */\nconst isFocusable = (element, checkVisibility = true) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n let focusable = tabIndex !== null;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled;\n }\n return focusable && (!checkVisibility || isVisible(element));\n }\n return false;\n};\n/**\n * @hidden\n */\nconst findFocusable = (element, checkVisibility = true) => {\n return findElement(element, node => isFocusable(node, checkVisibility));\n};\n/**\n * @hidden\n */\nconst findFocusableChild = (element, checkVisibility = true) => {\n return findElement(element, node => isFocusable(node, checkVisibility), false);\n};\n/**\n * @hidden\n */\nconst findFocusableSibling = (element, checkVisibility = true, reverse) => {\n let node = reverse ? element.prevSibling : element.nextSibling;\n while (node) {\n if (node.nodeType === 1) {\n const result = findElement(node, el => isFocusable(el, checkVisibility));\n if (result) {\n return result;\n }\n }\n node = reverse ? node.prevSibling : node.nextSibling;\n }\n};\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst makePeeker = (collection) => (index) => isPresent(collection[index]);\n/**\n * @hidden\n */\nconst getIndexOfFocused = (prevKeyCode, nextKeyCode, collection) => (ev) => {\n switch (ev.type) {\n case 'keydown':\n if (ev.keyCode === prevKeyCode) {\n return collection.length - 1;\n }\n if (ev.keyCode === nextKeyCode) {\n return 0;\n }\n break;\n case 'click':\n return collection.findIndex(be => be === ev.target || be.contains(ev.target));\n case 'focus':\n return 0;\n default:\n return 0;\n }\n};\n/**\n * @hidden\n */\nconst seekFocusedIndex = (prevKeyCode, nextKeyCode, seeker) => (startIndex, ev) => {\n switch (ev.keyCode) {\n case prevKeyCode:\n return seeker(startIndex - 1) ? startIndex - 1 : startIndex;\n case nextKeyCode:\n return seeker(startIndex + 1) ? startIndex + 1 : startIndex;\n default:\n return startIndex;\n }\n};\n/**\n * @hidden\n */\nconst areEqual = (first) => (second) => first === second;\n/**\n * @hidden\n */\nconst getNextKey = (rtl = false) => (overflows = true) => overflows ? Keys.ArrowDown : rtl ? Keys.ArrowLeft : Keys.ArrowRight;\n/**\n * @hidden\n */\nconst getPrevKey = (rtl = false) => (overflows = true) => overflows ? Keys.ArrowUp : rtl ? Keys.ArrowRight : Keys.ArrowLeft;\n/**\n * @hidden\n */\nconst getValueForLocation = (property, displayMode, overflows) => {\n switch (displayMode) {\n case 'toolbar':\n return overflows ? undefined : property;\n case 'overflow':\n return overflows ? property : undefined;\n default:\n return property;\n }\n};\n\n/**\n * @hidden\n */\nlet NavigationService = class NavigationService {\n constructor(zone) {\n this.zone = zone;\n this.focused = { renderedTool: null, index: -1 };\n this.renderedTools = [];\n this.isPopupFocused = false;\n this.isOverflowButtonFocused = false;\n }\n setRenderedTools(rts) {\n this.renderedTools = [...rts];\n }\n click({ context, event: ev }) {\n if (this.focused.renderedTool !== context && ev) {\n this.focus(context, ev);\n }\n }\n moveFocusToToolBar() {\n this.isPopupFocused = false;\n this.focusOverflowButton();\n }\n moveFocusToPopup() {\n this.isPopupFocused = true;\n this.blurOverflowButton();\n this.focus();\n }\n focusNext(ev) {\n if (!this.isOverflowButtonFocused && this.focused.renderedTool && !this.focused.renderedTool.tool.handleKey(ev)) {\n const nextRT = this.getFocusableTools().slice(this.focused.index + 1)[0];\n if (nextRT) {\n this.focus(nextRT, ev);\n }\n else {\n if (this.isOverflowButtonVisible() && !this.isPopupFocused) {\n this.focusOverflowButton();\n }\n }\n }\n }\n focusPrev(ev) {\n if (this.isOverflowButtonFocused) {\n const lastFocusableRT = this.getFocusableTools().reverse()[0];\n this.focus(lastFocusableRT, ev);\n }\n else if (this.focused.renderedTool && !this.focused.renderedTool.tool.handleKey(ev)) {\n const prevRT = this.getFocusableTools()\n .slice(0, this.focused.index)\n .reverse()[0];\n if (prevRT) {\n this.focus(prevRT, ev);\n }\n }\n }\n resetNavigation() {\n this.blurOverflowButton();\n this.focused.renderedTool = null;\n this.focused.index = -1;\n }\n focusFirst(ev) {\n const firstTool = this.getFocusableTools()[0];\n const overFlowButton = this.overflowButton;\n if (firstTool) {\n this.focused.renderedTool = firstTool;\n this.focused.index = this.getFocusableTools().findIndex(rt => rt === firstTool);\n this.focus(firstTool, ev);\n }\n else if (overFlowButton) {\n overFlowButton.nativeElement.focus();\n }\n }\n getFocusableTools() {\n return this.renderedTools.filter(rt => rt.tool.overflows === this.isPopupFocused && rt.tool.canFocus());\n }\n focus(renderedTool, ev) {\n // running the code below in onStable fixes issue #2939\n this.zone.onStable.pipe(take(1)).subscribe(() => {\n if (!renderedTool) {\n const focusableRTs = this.getFocusableTools();\n const lastFocusedRT = focusableRTs.find(rt => rt === this.focused.renderedTool) || focusableRTs[0];\n // guard against only disabled tools\n if (lastFocusedRT) {\n this.focused.renderedTool = lastFocusedRT;\n this.focused.index = this.getFocusableTools().findIndex(rt => rt === lastFocusedRT);\n // if event is undefined, then this means that the tool is the first one in the overflow popup\n lastFocusedRT.tool.focus(ev);\n }\n }\n else if (renderedTool.tool.canFocus && renderedTool.tool.canFocus()) {\n this.focused.renderedTool = renderedTool;\n this.focused.index = this.getFocusableTools().findIndex(rt => rt === renderedTool);\n renderedTool.tool.focus(ev);\n this.blurOverflowButton();\n }\n });\n }\n blurOverflowButton() {\n if (this.overflowButton) {\n this.isOverflowButtonFocused = false;\n this.overflowButton.nativeElement.tabIndex = -1;\n }\n }\n focusOverflowButton() {\n this.isOverflowButtonFocused = true;\n this.overflowButton.nativeElement.tabIndex = 0;\n this.overflowButton.nativeElement.focus();\n }\n isOverflowButtonVisible() {\n return (isPresent(this.overflowButton) &&\n window.getComputedStyle(this.overflowButton.nativeElement).getPropertyValue('visibility') === 'visible');\n }\n};\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nNavigationService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: function (t) { return NavigationService.ɵfac(t); } });\nNavigationService = __decorate([ __metadata(\"design:paramtypes\", [NgZone])\n], NavigationService);\n\n/**\n * Represents the Base ToolBar Tool component for Angular.\n * Extend this class to create custom tools.\n */\nlet ToolBarToolComponent = class ToolBarToolComponent {\n /**\n * Represents the Base ToolBar Tool component for Angular.\n * Extend this class to create custom tools.\n */\n constructor() {\n this.tabIndex = -1; //Focus movement inside the toolbar is managed using roving tabindex.\n this.overflows = true;\n // this should be replaced with showTool: DisplayMode = 'both';\n /**\n * @hidden\n */\n this.responsive = true;\n }\n get toolbarDisplay() {\n return this.overflows ? 'none' : 'inline-block';\n }\n get overflowDisplay() {\n return this.overflows ? 'block' : 'none';\n }\n /**\n * Determines if the tool can be focused.\n * If the returned value is `false`, the tool will not be part of the keyboard navigation.\n * @returns `true` if the tool should take part in keyboard navigation.\n */\n canFocus() {\n return false;\n }\n /**\n * Called when the tool is focused.\n * The method accepts as argument the original browser event, which can be a `KeyboardEvent`, `MouseEvent` or `FocusEvent`.\n * @param {Event} ev - This is the event that caused the tool to be focused.\n */\n // @ts-ignore\n focus(ev) {\n /* noop */\n }\n /**\n * Called when the tool is focused and one of the arrow keys is pressed.\n * The returned boolean value determines whether the `ToolBarComponent` will move the focus to the next/previous `ToolBarToolComponent`\n * ([see example]({% slug customcontroltypes_toolbar %}#toc-adding-keyboard-navigation)).\n * @param {KeyboardEvent} ev - The last pressed arrow key\n * @returns\n */\n // @ts-ignore\n handleKey(ev) {\n return false;\n }\n};\nToolBarToolComponent.ɵfac = function ToolBarToolComponent_Factory(t) { return new (t || ToolBarToolComponent)(); };\nToolBarToolComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarToolComponent, selectors: [[\"toolbar-tool\"]], inputs: { responsive: \"responsive\" }, decls: 0, vars: 0, template: function ToolBarToolComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarToolComponent.prototype, \"responsive\", void 0);\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst defaultPopupWidth = '150px';\n\nconst getInitialPopupSettings = (isRtl) => ({\n animate: true,\n anchorAlign: { horizontal: isRtl ? 'left' : 'right', vertical: 'bottom' },\n popupAlign: { horizontal: isRtl ? 'left' : 'right', vertical: 'top' }\n});\n/**\n * Represents the [Kendo UI ToolBar component for Angular]({% slug overview_toolbar %}).\n */\nlet ToolBarComponent = class ToolBarComponent {\n constructor(localization, popupService, refreshService, navigationService, element, cdr, zone, renderer) {\n this.localization = localization;\n this.popupService = popupService;\n this.refreshService = refreshService;\n this.navigationService = navigationService;\n this.element = element;\n this.cdr = cdr;\n this.zone = zone;\n this.renderer = renderer;\n /**\n * Hides the overflowing tools in a popup.\n */\n this.overflow = false;\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the ToolBar.\n */\n this.tabindex = 0;\n /**\n * Fires when the overflow popup of the ToolBar is opened.\n */\n this.open = new EventEmitter();\n /**\n * Fires when the overflow popup of the ToolBar is closed.\n */\n this.close = new EventEmitter();\n this.hostClasses = true;\n this.cancelRenderedToolsSubscription$ = new Subject();\n this.subscriptions = new Subscription();\n validatePackage(packageMetadata);\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n set resizable(value) {\n this.overflow = value;\n }\n get resizable() {\n return this.overflow;\n }\n /**\n * Configures the popup of the ToolBar drop-down list.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, getInitialPopupSettings(this.localization.rtl), settings);\n }\n get popupSettings() {\n return this._popupSettings || getInitialPopupSettings(this.localization.rtl);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n set popupOpen(open) {\n if (this.popupOpen === open) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this.toggle(open);\n }\n get popupOpen() {\n return this._open;\n }\n /**\n * @hidden\n */\n onFocus(ev) {\n this.navigationService.resetNavigation();\n this.navigationService.focusFirst(ev);\n // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously\n this.element.nativeElement.setAttribute('tabindex', '-1');\n }\n /**\n * @hidden\n */\n onFocusOut(event) {\n // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously\n if (closest(event.relatedTarget, (el) => el === this.element.nativeElement)) {\n this.element.nativeElement.setAttribute('tabindex', '-1');\n return;\n }\n this.element.nativeElement.setAttribute('tabindex', this.tabindex.toString());\n }\n get getRole() {\n return 'toolbar';\n }\n get getDir() {\n return this.direction;\n }\n get resizableClass() {\n return this.overflow;\n }\n ngAfterViewInit() {\n const element = this.element.nativeElement;\n if (!element.getAttribute('tabindex')) {\n this.element.nativeElement.setAttribute('tabindex', '0');\n }\n this.zone.runOutsideAngular(() => {\n this.toolbarKeydownListener = this.renderer.listen(this.element.nativeElement, 'keydown', (ev) => {\n switch (ev.keyCode) {\n case Keys.ArrowLeft:\n this.zone.run(() => {\n ev.preventDefault();\n this.direction === 'ltr' ? this.navigationService.focusPrev(ev) : this.navigationService.focusNext(ev);\n // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously\n this.element.nativeElement.setAttribute('tabindex', '-1');\n });\n break;\n case Keys.ArrowRight:\n this.zone.run(() => {\n ev.preventDefault();\n this.direction === 'ltr' ? this.navigationService.focusNext(ev) : this.navigationService.focusPrev(ev);\n // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously\n this.element.nativeElement.setAttribute('tabindex', '-1');\n });\n break;\n case Keys.Tab:\n this.zone.run(() => this.navigationService.resetNavigation());\n break;\n case Keys.Escape:\n this.zone.run(() => this.toggle(false));\n break;\n default:\n break;\n }\n });\n });\n if (this.overflow) {\n this.subscriptions.add(merge(this.resizeSensor.resize.pipe(filter(() => this.overflow)), this.renderedTools.changes).subscribe(() => this.onResize()));\n // because of https://github.com/telerik/kendo-angular-buttons/pull/276\n this.zone.runOutsideAngular(() => setTimeout(() => this.onResize()));\n this.navigationService.overflowButton = this.overflowButton;\n }\n this.navigationService.setRenderedTools(this.renderedTools.toArray());\n this.subscriptions.add(this.renderedTools.changes.subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray())));\n }\n ngOnInit() {\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n if (isDocumentAvailable()) {\n this.zone.runOutsideAngular(() => this.subscriptions.add(fromEvent(document, 'click')\n .pipe(filter(() => !!this.popupRef), filter((ev) => !this.popupRef.popup.instance.container.nativeElement.contains(ev.target)), filter((ev) => !this.overflowButton.nativeElement.contains(ev.target)))\n .subscribe(() => {\n this.zone.run(() => {\n this.popupOpen = false;\n });\n })));\n }\n }\n ngOnChanges(changes) {\n if (changes.tabindex) {\n // prevents ExpressionChangedAfterItHasBeenCheckedError when tools with popup are opened/closed asynchronously\n this.element.nativeElement.setAttribute('tabindex', changes.tabindex.currentValue.toString());\n }\n }\n ngOnDestroy() {\n if (this.popupRef) {\n this.popupRef.close();\n }\n if (this.toolbarKeydownListener) {\n this.toolbarKeydownListener();\n }\n this.cancelRenderedToolsSubscription$.next();\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n get moreToolsTitle() {\n return this.localization.get('moreToolsTitle');\n }\n /**\n * @hidden\n */\n onRendererClick(data) {\n this.navigationService.click(data);\n this.element.nativeElement.setAttribute('tabindex', '-1');\n }\n /**\n * @hidden\n */\n showPopup() {\n this.popupOpen = !this.popupOpen;\n this.navigationService.click({ context: undefined, event: undefined });\n }\n /**\n * Toggles the visibility of the overflow popup.\n */\n toggle(popupOpen) {\n this._open = popupOpen !== undefined ? popupOpen : !this.popupOpen;\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n if (this.popupOpen) {\n this.popupRef = this.popupService.open({\n anchor: this.overflowButton,\n anchorAlign: this.popupSettings.anchorAlign,\n popupAlign: this.popupSettings.popupAlign,\n content: this.popupTemplate,\n appendTo: this.appendTo,\n animate: this.popupSettings.animate,\n popupClass: this.popupSettings.popupClass,\n positionMode: 'absolute'\n });\n this.setPopupContentDimensions();\n this.popupRef.popupOpen.subscribe(this.onPopupOpen.bind(this));\n this.popupRef.popupClose.subscribe(this.onPopupClose.bind(this));\n }\n }\n /**\n * @hidden\n */\n onResize() {\n if (isDocumentAvailable()) {\n const containerWidth = innerWidth(this.element.nativeElement) - this.overflowAnchorWidth;\n this.shrink(containerWidth, this.childrenWidth);\n this.stretch(containerWidth, this.childrenWidth);\n }\n this.cdr.detectChanges();\n this.resizeSensor.acceptSize();\n }\n /**\n * @hidden\n */\n onPopupOpen() {\n this.zone.runOutsideAngular(() => {\n this.overflowKeydownListener = this.renderer.listen(this.popupRef.popupElement, 'keydown', (ev) => {\n switch (ev.keyCode) {\n case Keys.ArrowUp:\n this.zone.run(() => {\n ev.preventDefault();\n this.navigationService.focusPrev(ev);\n });\n break;\n case Keys.ArrowDown:\n this.zone.run(() => {\n ev.preventDefault();\n this.navigationService.focusNext(ev);\n });\n break;\n case Keys.Escape:\n this.zone.run(() => this.toggle(false));\n break;\n case Keys.Tab:\n this.zone.run(() => {\n this.toggle(false);\n this.navigationService.resetNavigation();\n });\n break;\n default:\n break;\n }\n });\n });\n this.cancelRenderedToolsSubscription$.next();\n this.navigationService.moveFocusToPopup();\n this.navigationService.setRenderedTools(this.overflowRenderedTools.toArray());\n this.overflowRenderedTools.changes\n .pipe(takeUntil(this.cancelRenderedToolsSubscription$))\n .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));\n }\n /**\n * @hidden\n */\n onPopupClose() {\n this.cancelRenderedToolsSubscription$.next();\n this.navigationService.setRenderedTools(this.renderedTools.toArray());\n this.renderedTools.changes\n .pipe(takeUntil(this.cancelRenderedToolsSubscription$))\n .subscribe((rts) => this.navigationService.setRenderedTools(rts.toArray()));\n this.navigationService.moveFocusToToolBar();\n if (this.overflowKeydownListener) {\n this.overflowKeydownListener();\n }\n }\n get displayAnchor() {\n return this.allTools.filter(t => t.overflows && t.responsive).length > 0 ? 'visible' : 'hidden';\n }\n get popupWidth() {\n if (!this.popupSettings || !this.popupSettings.width) {\n return defaultPopupWidth;\n }\n return isNaN(this.popupSettings.width) ? this.popupSettings.width : `${this.popupSettings.width}px`;\n }\n get popupHeight() {\n if (!this.popupSettings || !this.popupSettings.height) {\n return;\n }\n return isNaN(this.popupSettings.height) ? this.popupSettings.height : `${this.popupSettings.height}px`;\n }\n get overflowAnchorWidth() {\n if (!this.overflow) {\n return 0;\n }\n if (!this.cachedOverflowAnchorWidth) {\n this.cachedOverflowAnchorWidth = outerWidth(this.overflowButton.nativeElement);\n }\n return this.cachedOverflowAnchorWidth;\n }\n get childrenWidth() {\n const width = this.renderedTools.reduce((totalWidth, tool) => tool.width + totalWidth, 0);\n return Math.ceil(width);\n }\n get visibleTools() {\n return this.allTools.filter((tool) => {\n return tool.overflows === false;\n });\n }\n get overflowTools() {\n return this.allTools.filter((tool) => {\n return tool.overflows === true;\n });\n }\n shrink(containerWidth, childrenWidth) {\n let width;\n if (containerWidth < childrenWidth) {\n for (var i = this.visibleTools.length - 1; i >= 0; i--) {\n if (containerWidth > childrenWidth) {\n break;\n }\n else {\n width = this.hideLastVisibleTool();\n childrenWidth -= width;\n }\n }\n }\n }\n stretch(containerWidth, childrenWidth) {\n let width;\n if (containerWidth > childrenWidth) {\n for (var i = this.overflowTools.length - 1; i >= 0; i--) {\n width = this.showFirstHiddenTool(containerWidth, childrenWidth);\n if (width) {\n childrenWidth += width;\n }\n else {\n break;\n }\n }\n }\n }\n hideLastVisibleTool() {\n const tool = this.visibleTools[this.visibleTools.length - 1];\n const renderedElement = this.renderedTools.find((r) => {\n return r.tool === tool;\n });\n const width = renderedElement.width;\n tool.overflows = true;\n this.refreshService.refresh(tool);\n return width;\n }\n showFirstHiddenTool(containerWidth, childrenWidth) {\n const tool = this.overflowTools[0];\n const renderedElement = this.renderedTools.find(r => r.tool === tool);\n tool.overflows = false;\n tool.visibility = 'hidden';\n this.refreshService.refresh(tool);\n if (containerWidth > childrenWidth + renderedElement.width) {\n tool.visibility = 'visible';\n this.refreshService.refresh(tool);\n }\n else {\n tool.overflows = true;\n this.refreshService.refresh(tool);\n }\n return renderedElement.width; // returns 0 if `overflows` is true\n }\n setPopupContentDimensions() {\n const popupContentContainer = this.popupRef.popup.instance.contentContainer.nativeElement;\n popupContentContainer.style.width = this.popupWidth;\n popupContentContainer.style.height = this.popupHeight;\n popupContentContainer.style.overflow = 'auto';\n }\n};\nToolBarComponent.ɵfac = function ToolBarComponent_Factory(t) { return new (t || ToolBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.PopupService), ɵngcc0.ɵɵdirectiveInject(RefreshService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nToolBarComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarComponent, selectors: [[\"kendo-toolbar\"]], contentQueries: function ToolBarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolBarToolComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.allTools = _t);\n } }, viewQuery: function ToolBarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, 5);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c2, 5);\n ɵngcc0.ɵɵviewQuery(_c3, 7, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c4, 5);\n ɵngcc0.ɵɵviewQuery(_c5, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeSensor = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.renderedTools = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowRenderedTools = _t);\n } }, hostVars: 8, hostBindings: function ToolBarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function ToolBarComponent_focus_HostBindingHandler($event) { return ctx.onFocus($event); })(\"focusout\", function ToolBarComponent_focusout_HostBindingHandler($event) { return ctx.onFocusOut($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.getRole)(\"dir\", ctx.getDir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-toolbar\", ctx.hostClasses)(\"k-toolbar-resizable\", ctx.resizableClass);\n } }, inputs: { overflow: \"overflow\", tabindex: \"tabindex\", resizable: \"resizable\", popupSettings: \"popupSettings\", tabIndex: \"tabIndex\" }, outputs: { open: \"open\", close: \"close\" }, exportAs: [\"kendoToolBar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n RefreshService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.toolbar'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 8, vars: 3, consts: function () { let i18n_6; if (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the **more tools** button in a responsive ToolBar\n * @meaning kendo.toolbar.moreToolsTitle\n */\n const MSG_EXTERNAL_6762596725712096287$$DIST_FESM2015_INDEX_JS_7 = goog.getMsg(\"More tools\");\n i18n_6 = MSG_EXTERNAL_6762596725712096287$$DIST_FESM2015_INDEX_JS_7;\n }\n else {\n i18n_6 = $localize `:kendo.toolbar.moreToolsTitle|The title of the **more tools** button in a responsive ToolBar␟b8a8c1c9015e93172a76b7a44854e362b1fd921c␟6762596725712096287:More tools`;\n } return [[\"kendoToolbarLocalizedMessages\", \"\", \"moreToolsTitle\", i18n_6], [4, \"ngFor\", \"ngForOf\"], [\"type\", \"button\", \"tabindex\", \"-1\", \"class\", \"k-overflow-anchor k-button\", 3, \"title\", \"visibility\", \"click\", 4, \"ngIf\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"rateLimit\", 4, \"ngIf\"], [3, \"location\", \"resizable\", \"tool\", \"rendererClick\"], [\"toolbarRenderer\", \"\"], [\"type\", \"button\", \"tabindex\", \"-1\", 1, \"k-overflow-anchor\", \"k-button\", 3, \"title\", \"click\"], [\"overflowButton\", \"\"], [1, \"k-icon\", \"k-i-more-vertical\"], [1, \"k-overflow-container\", \"k-list-container\", \"k-reset\"], [1, \"k-item\"], [\"overflowRenderer\", \"\"], [3, \"rateLimit\"], [\"resizeSensor\", \"\"]]; }, template: function ToolBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 0);\n ɵngcc0.ɵɵtemplate(1, ToolBarComponent_ng_container_1_Template, 3, 3, \"ng-container\", 1);\n ɵngcc0.ɵɵtemplate(2, ToolBarComponent_button_2_Template, 3, 4, \"button\", 2);\n ɵngcc0.ɵɵtemplate(3, ToolBarComponent_ng_template_3_Template, 2, 1, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(5, null, 4);\n ɵngcc0.ɵɵtemplate(7, ToolBarComponent_kendo_resize_sensor_7_Template, 2, 1, \"kendo-resize-sensor\", 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.allTools);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.overflow);\n ɵngcc0.ɵɵadvance(5);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.overflow);\n } }, directives: function () { return [LocalizedToolbarMessagesDirective, ɵngcc3.NgForOf, ToolBarRendererComponent, ɵngcc3.NgIf, ɵngcc4.ResizeSensorComponent]; }, encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarComponent.prototype, \"overflow\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ToolBarComponent.prototype, \"resizable\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ToolBarComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ToolBarComponent.prototype, \"tabindex\", void 0);\n__decorate([\n Input('tabIndex'),\n __metadata(\"design:type\", Number),\n __metadata(\"design:paramtypes\", [Number])\n], ToolBarComponent.prototype, \"tabIndex\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarComponent.prototype, \"close\", void 0);\n__decorate([\n ContentChildren(ToolBarToolComponent),\n __metadata(\"design:type\", QueryList)\n], ToolBarComponent.prototype, \"allTools\", void 0);\n__decorate([\n ViewChild('overflowButton', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarComponent.prototype, \"overflowButton\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('resizeSensor', { static: false }),\n __metadata(\"design:type\", ResizeSensorComponent)\n], ToolBarComponent.prototype, \"resizeSensor\", void 0);\n__decorate([\n ViewChild('container', { read: ViewContainerRef, static: true }),\n __metadata(\"design:type\", ViewContainerRef)\n], ToolBarComponent.prototype, \"container\", void 0);\n__decorate([\n ViewChildren('toolbarRenderer'),\n __metadata(\"design:type\", QueryList)\n], ToolBarComponent.prototype, \"renderedTools\", void 0);\n__decorate([\n ViewChildren('overflowRenderer'),\n __metadata(\"design:type\", QueryList)\n], ToolBarComponent.prototype, \"overflowRenderedTools\", void 0);\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-toolbar'),\n __metadata(\"design:type\", Boolean)\n], ToolBarComponent.prototype, \"hostClasses\", void 0);\n__decorate([\n HostListener('focus', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ToolBarComponent.prototype, \"onFocus\", null);\n__decorate([\n HostListener('focusout', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ToolBarComponent.prototype, \"onFocusOut\", null);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ToolBarComponent.prototype, \"getRole\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ToolBarComponent.prototype, \"getDir\", null);\n__decorate([\n HostBinding('class.k-toolbar-resizable'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ToolBarComponent.prototype, \"resizableClass\", null);\nToolBarComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n PopupService,\n RefreshService,\n NavigationService,\n ElementRef,\n ChangeDetectorRef,\n NgZone,\n Renderer2])\n], ToolBarComponent);\n\nvar ToolBarButtonComponent_1;\n/**\n * Represents the [Kendo UI ToolBar Button tool for Angular]({% slug controltypes_toolbar %}#toc-buttons).\n */\nlet ToolBarButtonComponent = ToolBarButtonComponent_1 = class ToolBarButtonComponent extends ToolBarToolComponent {\n constructor() {\n super();\n // showText and showIcon showIcon should be declared first\n /**\n * Specifies where button text should be displayed\n */\n this.showText = 'both';\n /**\n * Specifies where button icon should be displayed\n */\n this.showIcon = 'both';\n /**\n * Provides visual styling that indicates if the Button is active\n * ([see example]({% slug controltypes_toolbar %}#toc-toggle-buttons)).\n * By default, `toggleable` is set to `false`.\n */\n this.toggleable = false;\n /**\n * Adds visual weight to the Button and makes it primary\n * ([see example]({% slug controltypes_toolbar %}#toc-buttons)).\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options\n * ([see example]({% slug controltypes_toolbar %}#toc-buttons)).\n *\n * The available values are:\n * * `bare`\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Sets the selected state of the Button.\n */\n this.selected = false;\n /**\n * Fires each time the Button is clicked.\n */\n this.click = new EventEmitter();\n /**\n * Fires when the Button [pointerdown](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/pointerdown_event) event is triggered.\n */\n this.pointerdown = new EventEmitter();\n /**\n * Fires each time the selected state of a Toggle Button is changed.\n * The event argument is the new selected state (Boolean).\n */\n this.selectedChange = new EventEmitter();\n this.toolbarOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n this.overflowOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n }\n /**\n * Specifies the text of the Button ([see example]({% slug controltypes_toolbar %}#toc-buttons)).\n */\n set text(text) {\n this.toolbarOptions.text = getValueForLocation(text, this.showText, false);\n this.overflowOptions.text = getValueForLocation(text, this.showText, true);\n }\n /**\n * @hidden\n */\n get togglable() {\n return this.toggleable;\n }\n set togglable(value) {\n this.toggleable = value;\n }\n /**\n * Defines the name for an existing icon in a Kendo UI theme\n * ([see example]({% slug controltypes_toolbar %}#toc-buttons)).\n * The icon is rendered inside the Button by a `span.k-icon` element.\n */\n set icon(icon) {\n this.toolbarOptions.icon = getValueForLocation(icon, this.showIcon, false);\n this.overflowOptions.icon = getValueForLocation(icon, this.showIcon, true);\n }\n /**\n * Defines a CSS class—or multiple classes separated by spaces—\n * which are applied to a `span` element inside the Button. Allows the usage of custom icons.\n */\n set iconClass(iconClass) {\n this.toolbarOptions.iconClass = getValueForLocation(iconClass, this.showIcon, false);\n this.overflowOptions.iconClass = getValueForLocation(iconClass, this.showIcon, true);\n }\n /**\n * Defines a URL which is used for an `img` element inside the Button.\n * The URL can be relative or absolute. If relative, it is evaluated with relation to the web page URL.\n */\n set imageUrl(imageUrl) {\n this.toolbarOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, false);\n this.overflowOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, true);\n }\n /**\n * @hidden\n */\n onBlur() {\n this.getButton().tabIndex = -1;\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus(ev) {\n // guard against focusing twice on mousedown.\n if (!ev || ev.type === 'focus' || ev.type === 'keydown') {\n this.getButton().focus();\n }\n this.getButton().tabIndex = 0;\n }\n /**\n * @hidden\n */\n handleKey() {\n this.getButton().tabIndex = -1;\n return false;\n }\n getButton() {\n return (this.overflows ? this.overflowButtonElement : this.toolbarButtonElement).nativeElement;\n }\n};\nToolBarButtonComponent.ɵfac = function ToolBarButtonComponent_Factory(t) { return new (t || ToolBarButtonComponent)(); };\nToolBarButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarButtonComponent, selectors: [[\"kendo-toolbar-button\"]], viewQuery: function ToolBarButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c8, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c9, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c0, 5, ElementRef);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarButtonElement = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowButtonElement = _t.first);\n } }, inputs: { showText: \"showText\", showIcon: \"showIcon\", toggleable: \"toggleable\", primary: \"primary\", look: \"look\", selected: \"selected\", text: \"text\", togglable: \"togglable\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", style: \"style\", className: \"className\", title: \"title\", disabled: \"disabled\" }, outputs: { click: \"click\", pointerdown: \"pointerdown\", selectedChange: \"selectedChange\" }, exportAs: [\"kendoToolBarButton\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [\"type\", \"button\", \"kendoButton\", \"\", 3, \"tabindex\", \"ngStyle\", \"ngClass\", \"disabled\", \"toggleable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"look\", \"click\", \"pointerdown\", \"selectedChange\", \"blur\"], [\"toolbarButton\", \"\"], [\"tabindex\", \"-1\", \"type\", \"button\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"ngStyle\", \"ngClass\", \"disabled\", \"toggleable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"look\", \"click\", \"selectedChange\"], [\"overflowButton\", \"\"]], template: function ToolBarButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarButtonComponent_ng_template_0_Template, 3, 13, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ToolBarButtonComponent_ng_template_2_Template, 3, 12, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc5.ButtonDirective, ɵngcc3.NgStyle, ɵngcc3.NgClass], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonComponent.prototype, \"showText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonComponent.prototype, \"showIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarButtonComponent.prototype, \"text\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ToolBarButtonComponent.prototype, \"style\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ToolBarButtonComponent.prototype, \"className\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonComponent.prototype, \"title\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonComponent.prototype, \"toggleable\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [Boolean])\n], ToolBarButtonComponent.prototype, \"togglable\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonComponent.prototype, \"primary\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonComponent.prototype, \"selected\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarButtonComponent.prototype, \"icon\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarButtonComponent.prototype, \"iconClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarButtonComponent.prototype, \"imageUrl\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarButtonComponent.prototype, \"click\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarButtonComponent.prototype, \"pointerdown\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarButtonComponent.prototype, \"selectedChange\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarButtonComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('toolbarButton', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarButtonComponent.prototype, \"toolbarButtonElement\", void 0);\n__decorate([\n ViewChild('overflowButton', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarButtonComponent.prototype, \"overflowButtonElement\", void 0);\nToolBarButtonComponent = ToolBarButtonComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [])\n], ToolBarButtonComponent);\n\nvar ToolBarButtonGroupComponent_1;\n/**\n * Represents the Kendo UI Toolbar ButtonGroup for Angular.\n */\nlet ToolBarButtonGroupComponent = ToolBarButtonGroupComponent_1 = class ToolBarButtonGroupComponent extends ToolBarToolComponent {\n constructor(localization) {\n super();\n this.localization = localization;\n /**\n * By default, the selection mode of the ButtonGroup is set to `multiple`.\n */\n this.selection = 'multiple';\n /**\n * Changes the visual appearance by using alternative styling options.\n * Setting the `look` property on individual buttons inside the ToolBarButtonGroupComponent is not supported.\n *\n * The available values are:\n * * `bare`\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n this.focusedIndex = -1;\n this.getNextKey = getNextKey(this.localization.rtl);\n this.getPrevKey = getPrevKey(this.localization.rtl);\n }\n get buttonElements() {\n return this.getButtonGroup()\n .buttons.filter(b => !b.isDisabled)\n .map(b => b.element);\n }\n /**\n * @hidden\n */\n onFocus() {\n // triggered on tabin\n this.focusedIndex = 0;\n }\n /**\n * @hidden\n */\n onNavigate(ev) {\n ev.preventDefault();\n }\n /**\n * @hidden\n */\n selectedChangeHandler(state, button) {\n button.selected = state;\n button.selectedChange.emit(state);\n }\n /**\n * @hidden\n */\n onButtonClick(ev) {\n this.focusedIndex = this.buttonElements.findIndex(be => be === ev.target || be.contains(ev.target));\n this.focusButton(this.focusedIndex, ev);\n }\n /**\n * @hidden\n */\n canFocus() {\n return !(this.disabled || this.buttonElements.length === 0);\n }\n /**\n * @hidden\n */\n focus(ev = {}) {\n const nextKey = this.getNextKey(this.overflows);\n const prevKey = this.getPrevKey(this.overflows);\n this.focusedIndex = getIndexOfFocused(prevKey, nextKey, this.buttonElements)(ev);\n this.focusButton(this.focusedIndex, ev);\n }\n /**\n * @hidden\n */\n handleKey(ev) {\n const nextKey = this.getNextKey(this.overflows);\n const prevKey = this.getPrevKey(this.overflows);\n const peekAtIndex = makePeeker(this.buttonElements);\n const isUnmodified = areEqual(this.focusedIndex);\n this.focusedIndex = seekFocusedIndex(prevKey, nextKey, peekAtIndex)(this.focusedIndex, ev);\n this.focusButton(this.focusedIndex, ev);\n return !isUnmodified(this.focusedIndex);\n }\n getButtonGroup() {\n return this.overflows ? this.overflowButtonGroup : this.toolbarButtonGroup;\n }\n focusButton(index, ev) {\n // Guard against focusing twice on mousedown.\n if (!ev.type || ev.type === 'focus' || ev.type === 'keydown') {\n this.buttonElements[index].focus();\n }\n }\n};\nToolBarButtonGroupComponent.ɵfac = function ToolBarButtonGroupComponent_Factory(t) { return new (t || ToolBarButtonGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nToolBarButtonGroupComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarButtonGroupComponent, selectors: [[\"kendo-toolbar-buttongroup\"]], contentQueries: function ToolBarButtonGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolBarButtonComponent, 4);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttonComponents = _t);\n } }, viewQuery: function ToolBarButtonGroupComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c8, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c10, 5);\n ɵngcc0.ɵɵviewQuery(_c11, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarButtonGroup = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowButtonGroup = _t.first);\n } }, inputs: { selection: \"selection\", look: \"look\", disabled: \"disabled\", width: \"width\" }, exportAs: [\"kendoToolBarButtonGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([LocalizationService, { provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonGroupComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"tabIndex\", \"selection\", \"disabled\", \"look\", \"width\", \"navigate\", \"focus\"], [\"toolbarButtonGroup\", \"\"], [\"kendoButton\", \"\", 3, \"ngStyle\", \"ngClass\", \"disabled\", \"togglable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"click\", \"pointerdown\", \"selectedChange\", 4, \"ngFor\", \"ngForOf\"], [\"kendoButton\", \"\", 3, \"ngStyle\", \"ngClass\", \"disabled\", \"togglable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"click\", \"pointerdown\", \"selectedChange\"], [1, \"k-overflow-button\", 3, \"tabIndex\", \"selection\", \"disabled\", \"look\", \"width\"], [\"overflowButtonGroup\", \"\"], [\"kendoButton\", \"\", \"class\", \"k-overflow-button\", 3, \"ngStyle\", \"ngClass\", \"disabled\", \"togglable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"click\", \"selectedChange\", 4, \"ngFor\", \"ngForOf\"], [\"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"ngStyle\", \"ngClass\", \"disabled\", \"togglable\", \"primary\", \"selected\", \"icon\", \"iconClass\", \"imageUrl\", \"click\", \"selectedChange\"]], template: function ToolBarButtonGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarButtonGroupComponent_ng_template_0_Template, 3, 6, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ToolBarButtonGroupComponent_ng_template_2_Template, 3, 6, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc5.ButtonGroupComponent, ɵngcc3.NgForOf, ɵngcc5.ButtonDirective, ɵngcc3.NgStyle, ɵngcc3.NgClass], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonGroupComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonGroupComponent.prototype, \"selection\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonGroupComponent.prototype, \"width\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonGroupComponent.prototype, \"look\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarButtonGroupComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarButtonGroupComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ContentChildren(forwardRef(() => ToolBarButtonComponent)),\n __metadata(\"design:type\", QueryList)\n], ToolBarButtonGroupComponent.prototype, \"buttonComponents\", void 0);\n__decorate([\n ViewChild('toolbarButtonGroup', { static: false }),\n __metadata(\"design:type\", ButtonGroupComponent)\n], ToolBarButtonGroupComponent.prototype, \"toolbarButtonGroup\", void 0);\n__decorate([\n ViewChild('overflowButtonGroup', { static: false }),\n __metadata(\"design:type\", ButtonGroupComponent)\n], ToolBarButtonGroupComponent.prototype, \"overflowButtonGroup\", void 0);\nToolBarButtonGroupComponent = ToolBarButtonGroupComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ToolBarButtonGroupComponent);\n\n/**\n * @hidden\n */\nlet ToolBarButtonListComponent = class ToolBarButtonListComponent {\n /**\n * @hidden\n */\n constructor() {\n this.disabled = false;\n this.look = 'default';\n this.itemClick = new EventEmitter();\n }\n getText(dataItem) {\n if (dataItem) {\n return this.textField ? dataItem[this.textField] : dataItem.text || dataItem;\n }\n return undefined;\n }\n onClick(item, index) {\n const dataItem = this.data[index];\n if (item.click) {\n item.click(dataItem);\n }\n this.itemClick.emit(dataItem);\n }\n};\nToolBarButtonListComponent.ɵfac = function ToolBarButtonListComponent_Factory(t) { return new (t || ToolBarButtonListComponent)(); };\nToolBarButtonListComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarButtonListComponent, selectors: [[\"kendo-toolbar-buttonlist\"]], viewQuery: function ToolBarButtonListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c12, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttons = _t);\n } }, inputs: { disabled: \"disabled\", look: \"look\", data: \"data\", textField: \"textField\" }, outputs: { itemClick: \"itemClick\" }, decls: 1, vars: 1, consts: [[\"type\", \"button\", \"tabindex\", \"-1\", \"kendoButton\", \"\", \"style\", \"padding-left: 16px\", \"class\", \"k-overflow-button\", 3, \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"look\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"type\", \"button\", \"tabindex\", \"-1\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 2, \"padding-left\", \"16px\", 3, \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"look\", \"click\"], [\"button\", \"\"]], template: function ToolBarButtonListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarButtonListComponent_button_0_Template, 3, 6, \"button\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: [ɵngcc3.NgForOf, ɵngcc5.ButtonDirective], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Array)\n], ToolBarButtonListComponent.prototype, \"data\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonListComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarButtonListComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarButtonListComponent.prototype, \"look\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarButtonListComponent.prototype, \"itemClick\", void 0);\n__decorate([\n ViewChildren('button'),\n __metadata(\"design:type\", QueryList)\n], ToolBarButtonListComponent.prototype, \"buttons\", void 0);\n\nvar ToolBarDropDownButtonComponent_1;\n/**\n * Represents the [Kendo UI ToolBar DropDownButton for Angular]({% slug controltypes_toolbar %}#toc-dropdownbuttons).\n */\nlet ToolBarDropDownButtonComponent = ToolBarDropDownButtonComponent_1 = class ToolBarDropDownButtonComponent extends ToolBarToolComponent {\n constructor() {\n super();\n // showText and showIcon showIcon should be declared first\n /**\n * Defines the location of the button text that will be displayed.\n */\n this.showText = 'both';\n /**\n * Defines the location of the button icon that will be displayed.\n */\n this.showIcon = 'both';\n /**\n * Changes the visual appearance by using alternative styling options.\n * ([see example]({% slug controltypes_toolbar %}#toc-split-buttons)).\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Adds visual weight to the default button and makes it primary.\n */\n this.primary = false;\n /**\n * Fires each time the user clicks a DropDownButton item.\n * The event data contains the data item that is bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n this.toolbarOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n this.overflowOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n this._popupSettings = { animate: true, popupClass: '' };\n this.focusedIndex = -1;\n this.getNextKey = getNextKey();\n this.getPrevKey = getPrevKey();\n }\n /**\n * Sets the text of the DropDownButton\n * ([see example]({% slug controltypes_toolbar %}#toc-dropdownbuttons).\n */\n set text(text) {\n this.toolbarOptions.text = getValueForLocation(text, this.showText, false);\n this.overflowOptions.text = getValueForLocation(text, this.showText, true);\n }\n /**\n * Defines an icon that will be rendered next to the button text.\n */\n set icon(icon) {\n this.toolbarOptions.icon = getValueForLocation(icon, this.showIcon, false);\n this.overflowOptions.icon = getValueForLocation(icon, this.showIcon, true);\n }\n /**\n * Defines an icon with a custom CSS class that will be rendered next to the button text.\n */\n set iconClass(iconClass) {\n this.toolbarOptions.iconClass = getValueForLocation(iconClass, this.showIcon, false);\n this.overflowOptions.iconClass = getValueForLocation(iconClass, this.showIcon, true);\n }\n /**\n * Defines the location of an image that will be displayed next to the button text.\n */\n set imageUrl(imageUrl) {\n this.toolbarOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, false);\n this.overflowOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, true);\n }\n /**\n * Configures the popup of the DropDownButton.\n *\n * The available options are:\n * - `animate:Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass:String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the data of the DropDownButton\n * ([see example]({% slug controltypes_toolbar %}#toc-dropdownbuttons)).\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n get overflowButtons() {\n return [...this.overflowDropDownButtonButtonList.buttons.toArray().filter(b => !b.nativeElement.disabled)];\n }\n /**\n * @hidden\n */\n onButtonListClick(ev) {\n this.focusedIndex = this.overflowDropDownButtonButtonList.buttons\n .toArray()\n .findIndex(b => b.nativeElement.contains(ev.target));\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus(ev = {}) {\n if (!this.overflows) {\n if (ev.type === 'focus' || ev.type === 'keydown') {\n this.toolbarDropDownButton.focus();\n }\n }\n else if (this.overflowButtons.length > 0) {\n this.focusedIndex = getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev);\n this.focusButton(this.focusedIndex, ev);\n }\n }\n /**\n * @hidden\n */\n handleKey(ev) {\n if (!this.overflows && (ev.keyCode === this.getPrevKey(this.overflows) || ev.keyCode === this.getNextKey(this.overflows))) {\n return false;\n }\n if (this.overflows) {\n const peekAtIndex = makePeeker(this.overflowButtons);\n const isUnmodified = areEqual(this.focusedIndex);\n this.focusedIndex = seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex, ev);\n this.focusButton(this.focusedIndex, ev);\n return !isUnmodified(this.focusedIndex);\n }\n }\n focusButton(index, ev) {\n if (!ev.type || ev.type === 'focus' || ev.type === 'keydown') {\n this.overflowButtons[index].nativeElement.focus();\n }\n }\n};\nToolBarDropDownButtonComponent.ɵfac = function ToolBarDropDownButtonComponent_Factory(t) { return new (t || ToolBarDropDownButtonComponent)(); };\nToolBarDropDownButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarDropDownButtonComponent, selectors: [[\"kendo-toolbar-dropdownbutton\"]], viewQuery: function ToolBarDropDownButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c8, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c13, 7, ElementRef);\n ɵngcc0.ɵɵviewQuery(DropDownButtonComponent, 5);\n ɵngcc0.ɵɵviewQuery(_c14, 5);\n ɵngcc0.ɵɵviewQuery(_c15, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropdownButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropDownButtonComponent = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarDropDownButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowDropDownButtonButtonList = _t.first);\n } }, inputs: { showText: \"showText\", showIcon: \"showIcon\", look: \"look\", primary: \"primary\", text: \"text\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", popupSettings: \"popupSettings\", data: \"data\", buttonClass: \"buttonClass\", textField: \"textField\", disabled: \"disabled\" }, outputs: { itemClick: \"itemClick\", open: \"open\", close: \"close\" }, exportAs: [\"kendoToolBarDropDownButton\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarDropDownButtonComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"icon\", \"iconClass\", \"imageUrl\", \"buttonClass\", \"disabled\", \"tabIndex\", \"data\", \"textField\", \"popupSettings\", \"look\", \"primary\", \"open\", \"close\", \"itemClick\"], [\"toolbarDropDownButton\", \"\"], [\"type\", \"button\", \"tabindex\", \"-1\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"click\"], [3, \"data\", \"disabled\", \"textField\", \"itemClick\", \"click\"], [\"overflowDropDownButtonButtonList\", \"\"]], template: function ToolBarDropDownButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarDropDownButtonComponent_ng_template_0_Template, 3, 12, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ToolBarDropDownButtonComponent_ng_template_2_Template, 4, 9, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc5.DropDownButtonComponent, ɵngcc5.ButtonDirective, ɵngcc3.NgClass, ToolBarButtonListComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarDropDownButtonComponent.prototype, \"showText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarDropDownButtonComponent.prototype, \"showIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarDropDownButtonComponent.prototype, \"text\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarDropDownButtonComponent.prototype, \"icon\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarDropDownButtonComponent.prototype, \"iconClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarDropDownButtonComponent.prototype, \"imageUrl\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ToolBarDropDownButtonComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarDropDownButtonComponent.prototype, \"buttonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarDropDownButtonComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarDropDownButtonComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarDropDownButtonComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], ToolBarDropDownButtonComponent.prototype, \"data\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarDropDownButtonComponent.prototype, \"primary\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarDropDownButtonComponent.prototype, \"itemClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarDropDownButtonComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarDropDownButtonComponent.prototype, \"close\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarDropDownButtonComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarDropDownButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('dropdownButton', { read: ElementRef, static: true }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarDropDownButtonComponent.prototype, \"dropdownButton\", void 0);\n__decorate([\n ViewChild(DropDownButtonComponent, { static: false }),\n __metadata(\"design:type\", DropDownButtonComponent)\n], ToolBarDropDownButtonComponent.prototype, \"dropDownButtonComponent\", void 0);\n__decorate([\n ViewChild('toolbarDropDownButton', { static: false }),\n __metadata(\"design:type\", DropDownButtonComponent)\n], ToolBarDropDownButtonComponent.prototype, \"toolbarDropDownButton\", void 0);\n__decorate([\n ViewChild('overflowDropDownButtonButtonList', { static: false }),\n __metadata(\"design:type\", ToolBarButtonListComponent)\n], ToolBarDropDownButtonComponent.prototype, \"overflowDropDownButtonButtonList\", void 0);\nToolBarDropDownButtonComponent = ToolBarDropDownButtonComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [])\n], ToolBarDropDownButtonComponent);\n\nvar ToolBarSplitButtonComponent_1;\n/**\n * Represents the [Kendo UI ToolBar SplitButton for Angular]({% slug controltypes_toolbar %}#toc-splitbuttons).\n */\nlet ToolBarSplitButtonComponent = ToolBarSplitButtonComponent_1 = class ToolBarSplitButtonComponent extends ToolBarToolComponent {\n constructor() {\n super();\n // showText and showIcon showIcon should be declared first\n /**\n * Specifies where button text should be displayed\n */\n this.showText = 'both';\n /**\n * Specifies where button icon should be displayed\n */\n this.showIcon = 'both';\n /**\n * Changes the visual appearance by using alternative styling options\n * ([see example]({% slug controltypes_toolbar %}#toc-split-buttons)).\n *\n * The available values are:\n * * `default`\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the name of the [font icon]({% slug icons %}#toc-list-of-font-icons) that will\n * be rendered for the button which opens the popup.\n */\n this.arrowButtonIcon = 'arrow-s';\n /**\n * Configures the text field of the button-list popup.\n */\n this.textField = 'text';\n /**\n * Fires each time the user clicks the main button.\n */\n this.buttonClick = new EventEmitter();\n /**\n * Fires each time the user clicks the drop-down list.\n * The event data contains the data item that is bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n this.toolbarOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n this.overflowOptions = {\n text: '',\n icon: '',\n iconClass: '',\n imageUrl: ''\n };\n this._popupSettings = { animate: true, popupClass: '' };\n this.focusedIndex = -1;\n this.getNextKey = getNextKey();\n this.getPrevKey = getPrevKey();\n }\n /**\n * Sets the text of the SplitButton ([see example]({% slug controltypes_toolbar %}#toc-splitbuttons).\n */\n set text(text) {\n this.toolbarOptions.text = getValueForLocation(text, this.showText, false);\n this.overflowOptions.text = getValueForLocation(text, this.showText, true);\n }\n /**\n * Defines the icon that will be rendered next to the button text\n * ([see example]({% slug controltypes_toolbar %}#toc-splitbuttons)).\n */\n set icon(icon) {\n this.toolbarOptions.icon = getValueForLocation(icon, this.showIcon, false);\n this.overflowOptions.icon = getValueForLocation(icon, this.showIcon, true);\n }\n /**\n * Defines an icon with a custom CSS class that will be rendered next to the button text.\n */\n set iconClass(iconClass) {\n this.toolbarOptions.iconClass = getValueForLocation(iconClass, this.showIcon, false);\n this.overflowOptions.iconClass = getValueForLocation(iconClass, this.showIcon, true);\n }\n /**\n * Defines the location of an image that will be displayed next to the button text.\n */\n set imageUrl(imageUrl) {\n this.toolbarOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, false);\n this.overflowOptions.imageUrl = getValueForLocation(imageUrl, this.showIcon, true);\n }\n /**\n * Configures the popup of the SplitButton.\n *\n * The available options are:\n * - `animate:Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass:String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(value) {\n this._popupSettings = value;\n }\n get popupSettings() {\n if (!this._popupSettings) {\n this._popupSettings = { animate: true, popupClass: '' };\n }\n return this._popupSettings;\n }\n /**\n * Sets the data of the SplitButton ([see example]({% slug controltypes_toolbar %}#toc-splitbuttons)).\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n get overflowButtons() {\n return [this.overflowSplitButton, ...this.overflowSplitButtonButtonList.buttons.toArray().filter(b => !b.nativeElement.disabled)];\n }\n /**\n * @hidden\n */\n onButtonListClick(ev) {\n this.focusedIndex = this.overflowButtons.findIndex(b => b.nativeElement.contains(ev.target));\n }\n /**\n * @hidden\n */\n onMainButtonClick(ev) {\n this.buttonClick.emit(ev);\n this.focusedIndex = 0;\n }\n /**\n * @hidden\n */\n canFocus() {\n return !this.disabled;\n }\n /**\n * @hidden\n */\n focus(ev = {}) {\n if (!this.overflows) {\n if (ev.type === 'focus' || ev.type === 'keydown') {\n this.toolbarSplitButton.focus();\n }\n }\n else if (this.overflowButtons.length > 0) {\n this.focusedIndex = getIndexOfFocused(this.getPrevKey(), this.getNextKey(), this.overflowButtons.map(ob => ob.nativeElement))(ev);\n this.focusButton(this.focusedIndex, ev);\n }\n }\n /**\n * @hidden\n */\n handleKey(ev) {\n if (!this.overflows && (ev.keyCode === this.getPrevKey(this.overflows) || ev.keyCode === this.getNextKey(this.overflows))) {\n return false;\n }\n if (this.overflows) {\n const peekAtIndex = makePeeker(this.overflowButtons);\n const isUnmodified = areEqual(this.focusedIndex);\n this.focusedIndex = seekFocusedIndex(this.getPrevKey(), this.getNextKey(), peekAtIndex)(this.focusedIndex, ev);\n this.focusButton(this.focusedIndex, ev);\n return !isUnmodified(this.focusedIndex);\n }\n }\n focusButton(index, ev) {\n if (!ev.type || ev.type === 'focus' || ev.type === 'keydown' || ev.type === 'click') {\n this.overflowButtons[index].nativeElement.focus();\n }\n }\n};\nToolBarSplitButtonComponent.ɵfac = function ToolBarSplitButtonComponent_Factory(t) { return new (t || ToolBarSplitButtonComponent)(); };\nToolBarSplitButtonComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarSplitButtonComponent, selectors: [[\"kendo-toolbar-splitbutton\"]], viewQuery: function ToolBarSplitButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c8, 7);\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c16, 5);\n ɵngcc0.ɵɵviewQuery(_c17, 5, ElementRef);\n ɵngcc0.ɵɵviewQuery(_c18, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarSplitButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowSplitButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.overflowSplitButtonButtonList = _t.first);\n } }, inputs: { showText: \"showText\", showIcon: \"showIcon\", look: \"look\", arrowButtonIcon: \"arrowButtonIcon\", textField: \"textField\", text: \"text\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", popupSettings: \"popupSettings\", data: \"data\", disabled: \"disabled\", buttonClass: \"buttonClass\", arrowButtonClass: \"arrowButtonClass\" }, outputs: { buttonClick: \"buttonClick\", itemClick: \"itemClick\", open: \"open\", close: \"close\" }, exportAs: [\"kendoToolBarSplitButton\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSplitButtonComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [\"popupTemplate\", \"\"], [3, \"data\", \"text\", \"icon\", \"iconClass\", \"imageUrl\", \"buttonClass\", \"arrowButtonClass\", \"arrowButtonIcon\", \"disabled\", \"tabIndex\", \"textField\", \"popupSettings\", \"look\", \"buttonClick\", \"open\", \"close\", \"itemClick\"], [\"toolbarSplitButton\", \"\"], [\"type\", \"button\", \"tabindex\", \"-1\", \"kendoButton\", \"\", 1, \"k-overflow-button\", 3, \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"look\", \"ngClass\", \"click\"], [\"overflowSplitButton\", \"\"], [3, \"look\", \"data\", \"disabled\", \"textField\", \"itemClick\", \"click\"], [\"overflowSplitButtonButtonList\", \"\"]], template: function ToolBarSplitButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarSplitButtonComponent_ng_template_0_Template, 2, 13, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ToolBarSplitButtonComponent_ng_template_2_Template, 5, 11, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: [ɵngcc5.SplitButtonComponent, ɵngcc5.ButtonDirective, ɵngcc3.NgClass, ToolBarButtonListComponent], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"showText\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"showIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarSplitButtonComponent.prototype, \"text\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarSplitButtonComponent.prototype, \"icon\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarSplitButtonComponent.prototype, \"iconClass\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [String])\n], ToolBarSplitButtonComponent.prototype, \"imageUrl\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarSplitButtonComponent.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"look\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [Object])\n], ToolBarSplitButtonComponent.prototype, \"popupSettings\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"buttonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ToolBarSplitButtonComponent.prototype, \"arrowButtonClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"arrowButtonIcon\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarSplitButtonComponent.prototype, \"textField\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [Array])\n], ToolBarSplitButtonComponent.prototype, \"data\", null);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarSplitButtonComponent.prototype, \"buttonClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarSplitButtonComponent.prototype, \"itemClick\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarSplitButtonComponent.prototype, \"open\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarSplitButtonComponent.prototype, \"close\", void 0);\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarSplitButtonComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarSplitButtonComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('toolbarSplitButton', { static: false }),\n __metadata(\"design:type\", SplitButtonComponent)\n], ToolBarSplitButtonComponent.prototype, \"toolbarSplitButton\", void 0);\n__decorate([\n ViewChild('overflowSplitButton', { read: ElementRef, static: false }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarSplitButtonComponent.prototype, \"overflowSplitButton\", void 0);\n__decorate([\n ViewChild('overflowSplitButtonButtonList', { static: false }),\n __metadata(\"design:type\", ToolBarButtonListComponent)\n], ToolBarSplitButtonComponent.prototype, \"overflowSplitButtonButtonList\", void 0);\nToolBarSplitButtonComponent = ToolBarSplitButtonComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [])\n], ToolBarSplitButtonComponent);\n\nvar ToolBarSeparatorComponent_1;\n/**\n * Represents the [Kendo UI ToolBar Separator for Angular]({% slug controltypes_toolbar %}#toc-separators).\n */\nlet ToolBarSeparatorComponent = ToolBarSeparatorComponent_1 = class ToolBarSeparatorComponent extends ToolBarToolComponent {\n constructor() {\n super();\n }\n /**\n * @hidden\n */\n canFocus() {\n return false;\n }\n // If this is not here, the docs display info from its parent(ToolBarToolComponent).\n /**\n * @hidden\n */\n focus() {\n /* noop */\n }\n // If this is not here, the docs display info from its parent(ToolBarToolComponent).\n /**\n * @hidden\n */\n handleKey() {\n return false;\n }\n ngAfterViewInit() {\n if (!this.popupTemplate) {\n this.popupTemplate = this.toolbarTemplate;\n }\n }\n};\nToolBarSeparatorComponent.ɵfac = function ToolBarSeparatorComponent_Factory(t) { return new (t || ToolBarSeparatorComponent)(); };\nToolBarSeparatorComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarSeparatorComponent, selectors: [[\"kendo-toolbar-separator\"]], viewQuery: function ToolBarSeparatorComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c1, 7);\n ɵngcc0.ɵɵviewQuery(_c8, 7);\n ɵngcc0.ɵɵviewQuery(_c19, 5);\n } if (rf & 2) {\n let _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.separator = _t.first);\n } }, exportAs: [\"kendoToolBarSeparator\"], features: [ɵngcc0.ɵɵProvidersFeature([{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSeparatorComponent_1) }]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 0, consts: [[\"toolbarTemplate\", \"\"], [1, \"k-separator\"]], template: function ToolBarSeparatorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarSeparatorComponent_ng_template_0_Template, 1, 0, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, encapsulation: 2 });\n__decorate([\n ViewChild('toolbarTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarSeparatorComponent.prototype, \"toolbarTemplate\", void 0);\n__decorate([\n ViewChild('popupTemplate', { static: true }),\n __metadata(\"design:type\", TemplateRef)\n], ToolBarSeparatorComponent.prototype, \"popupTemplate\", void 0);\n__decorate([\n ViewChild('separator', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ToolBarSeparatorComponent.prototype, \"separator\", void 0);\nToolBarSeparatorComponent = ToolBarSeparatorComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [])\n], ToolBarSeparatorComponent);\n\n/**\n * @hidden\n */\nlet RendererService = class RendererService {\n getElement() {\n return this.element.nativeElement;\n }\n querySelector(selector) {\n return this.element.nativeElement.querySelector(selector);\n }\n querySelectorAll(selector) {\n return this.element.nativeElement.querySelectorAll(selector);\n }\n findFocusable() {\n return findFocusable(this.element.nativeElement, false);\n }\n findFocusableChild(element) {\n if (!element) {\n element = this.findFocusable();\n }\n return findFocusableChild(element, false);\n }\n findNextFocusableSibling(element) {\n if (!element) {\n element = this.findFocusable();\n }\n return findFocusableSibling(element, false);\n }\n findPrevFocusableSibling(element) {\n if (!element) {\n element = this.findFocusable();\n }\n return findFocusableSibling(element, false, true);\n }\n setAttribute(element, attr, value) {\n this.renderer.setAttribute(element, attr, value);\n }\n};\nRendererService.ɵfac = function RendererService_Factory(t) { return new (t || RendererService)(); };\nRendererService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: RendererService, factory: function (t) { return RendererService.ɵfac(t); } });\n\n/**\n * @hidden\n */\nlet ToolBarRendererComponent = class ToolBarRendererComponent {\n constructor(element, renderer, rendererService, refreshService) {\n this.element = element;\n this.renderer = renderer;\n this.rendererService = rendererService;\n this.refreshService = refreshService;\n this.rendererClick = new EventEmitter();\n this.rendererService.element = element;\n this.rendererService.renderer = this;\n this.refreshSubscription = this.refreshService.onRefresh.subscribe((tool) => {\n if (this.tool === tool) {\n this.refresh();\n }\n });\n }\n onClick(ev) {\n this.rendererClick.emit({ context: this, event: ev });\n }\n ngOnInit() {\n if (this.resizable) {\n if (this.location === 'toolbar') {\n this.template = this.tool.toolbarTemplate;\n this.renderer.setStyle(this.element.nativeElement, 'visibility', 'hidden');\n this.renderer.setStyle(this.element.nativeElement, 'display', 'none');\n }\n else {\n this.template = this.tool.popupTemplate;\n this.renderer.setStyle(this.element.nativeElement, 'display', 'none');\n }\n }\n else {\n this.tool.overflows = false;\n this.template = this.tool.toolbarTemplate;\n this.renderer.setStyle(this.element.nativeElement, 'visibility', 'display');\n this.renderer.setStyle(this.element.nativeElement, 'display', 'inline-block');\n }\n }\n ngOnDestroy() {\n this.refreshSubscription.unsubscribe();\n }\n ngAfterViewInit() {\n if (this.resizable) {\n this.refresh();\n }\n }\n /**\n * @hidden\n */\n get width() {\n return this.tool.overflows ? 0 : outerWidth(this.element.nativeElement);\n }\n /**\n * @hidden\n */\n isDisplayed() {\n return this.element.nativeElement.style.display !== 'none';\n }\n /**\n * @hidden\n */\n refresh() {\n if (this.resizable) {\n if (this.location === 'toolbar') {\n this.renderer.setStyle(this.element.nativeElement, 'visibility', this.tool.visibility);\n this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.toolbarDisplay);\n }\n else {\n this.renderer.setStyle(this.element.nativeElement, 'display', this.tool.overflowDisplay);\n }\n }\n }\n /**\n * @hidden\n */\n setAttribute(element, attr, value) {\n this.renderer.setAttribute(element, attr, value);\n }\n};\nToolBarRendererComponent.ɵfac = function ToolBarRendererComponent_Factory(t) { return new (t || ToolBarRendererComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(RendererService), ɵngcc0.ɵɵdirectiveInject(RefreshService)); };\nToolBarRendererComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolBarRendererComponent, selectors: [[\"kendo-toolbar-renderer\"]], hostBindings: function ToolBarRendererComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ToolBarRendererComponent_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } }, inputs: { tool: \"tool\", location: \"location\", resizable: \"resizable\" }, outputs: { rendererClick: \"rendererClick\" }, exportAs: [\"kendoToolBarRenderer\"], features: [ɵngcc0.ɵɵProvidersFeature([RendererService])], decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\"]], template: function ToolBarRendererComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolBarRendererComponent_ng_container_0_Template, 2, 1, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, ToolBarRendererComponent_ng_container_1_Template, 2, 1, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.location === \"toolbar\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.location === \"overflow\" && ctx.tool.responsive);\n } }, directives: [ɵngcc3.NgIf, ɵngcc3.NgTemplateOutlet], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", ToolBarToolComponent)\n], ToolBarRendererComponent.prototype, \"tool\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolBarRendererComponent.prototype, \"location\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ToolBarRendererComponent.prototype, \"resizable\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ToolBarRendererComponent.prototype, \"rendererClick\", void 0);\n__decorate([\n HostListener('click', ['$event']),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], ToolBarRendererComponent.prototype, \"onClick\", null);\nToolBarRendererComponent = __decorate([ __metadata(\"design:paramtypes\", [ElementRef,\n Renderer2,\n RendererService,\n RefreshService])\n], ToolBarRendererComponent);\n\n/**\n * @hidden\n */\nclass ToolbarMessages extends ComponentMessages {\n}\nToolbarMessages.ɵfac = /*@__PURE__*/ function () { let ɵToolbarMessages_BaseFactory; return function ToolbarMessages_Factory(t) { return (ɵToolbarMessages_BaseFactory || (ɵToolbarMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(ToolbarMessages)))(t || ToolbarMessages); }; }();\nToolbarMessages.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ToolbarMessages, inputs: { moreToolsTitle: \"moreToolsTitle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ToolbarMessages.prototype, \"moreToolsTitle\", void 0);\n\nvar LocalizedToolbarMessagesDirective_1;\n/**\n * @hidden\n */\nlet LocalizedToolbarMessagesDirective = LocalizedToolbarMessagesDirective_1 = class LocalizedToolbarMessagesDirective extends ToolbarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n};\nLocalizedToolbarMessagesDirective.ɵfac = function LocalizedToolbarMessagesDirective_Factory(t) { return new (t || LocalizedToolbarMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedToolbarMessagesDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: LocalizedToolbarMessagesDirective, selectors: [[\"\", \"kendoToolbarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ToolbarMessages,\n useExisting: forwardRef(() => LocalizedToolbarMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\nLocalizedToolbarMessagesDirective = LocalizedToolbarMessagesDirective_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], LocalizedToolbarMessagesDirective);\n\nvar ToolbarCustomMessagesComponent_1;\n/**\n * Custom component messages override default component messages.\n */\nlet ToolbarCustomMessagesComponent = ToolbarCustomMessagesComponent_1 = class ToolbarCustomMessagesComponent extends ToolbarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n};\nToolbarCustomMessagesComponent.ɵfac = function ToolbarCustomMessagesComponent_Factory(t) { return new (t || ToolbarCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nToolbarCustomMessagesComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: ToolbarCustomMessagesComponent, selectors: [[\"kendo-toolbar-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ToolbarMessages,\n useExisting: forwardRef(() => ToolbarCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ToolbarCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\nToolbarCustomMessagesComponent = ToolbarCustomMessagesComponent_1 = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ToolbarCustomMessagesComponent);\n\nconst TOOLBAR_TOOLS = [\n ToolBarToolComponent,\n ToolBarButtonComponent,\n ToolBarButtonGroupComponent,\n ToolBarDropDownButtonComponent,\n ToolBarSplitButtonComponent,\n ToolBarSeparatorComponent\n];\nconst TOOLBAR_COMMON = [\n ToolBarRendererComponent,\n ToolBarButtonListComponent,\n ToolbarCustomMessagesComponent,\n LocalizedToolbarMessagesDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }}) definition for the ToolBar component.\n *\n * The package exports:\n * - `ToolBarComponent`—The ToolBarComponent class.\n * - `ToolBarToolComponent`—The base Tool component class.\n * - `ToolBarButtonComponent`—The Button Tool component class.\n * - `ToolBarButtonGroupComponent`—The ButtonGroup Tool component class.\n * - `ToolBarDropDownButtonComponent`—The DropDownButton Tool component class.\n * - `ToolBarSplitButtonComponent`—The SplitButton Tool component class.\n * - `ToolBarSeparatorComponent`—The Separator Tool component class.\n */\nlet ToolBarModule = class ToolBarModule {\n};\nToolBarModule.ɵfac = function ToolBarModule_Factory(t) { return new (t || ToolBarModule)(); };\nToolBarModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ToolBarModule });\nToolBarModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, ButtonsModule, PopupModule, ResizeSensorModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RefreshService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarToolComponent, [{\n type: Component,\n args: [{\n // tslint:disable-next-line:component-selector\n selector: 'toolbar-tool',\n template: ``\n }]\n }], function () { return []; }, { responsive: [{\n type: Input\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBar',\n providers: [\n RefreshService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.toolbar'\n }\n ],\n selector: 'kendo-toolbar',\n template: `\n \n \n \n \n \n \n \n \n \n
              \n \n
            • \n \n
            • \n
              \n
            \n
            \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc2.PopupService }, { type: RefreshService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { overflow: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-toolbar']\n }], resizable: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], tabIndex: [{\n type: Input,\n args: ['tabIndex']\n }], \n /**\n * @hidden\n */\n onFocus: [{\n type: HostListener,\n args: ['focus', ['$event']]\n }], \n /**\n * @hidden\n */\n onFocusOut: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }], getRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], getDir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], resizableClass: [{\n type: HostBinding,\n args: ['class.k-toolbar-resizable']\n }], allTools: [{\n type: ContentChildren,\n args: [ToolBarToolComponent]\n }], overflowButton: [{\n type: ViewChild,\n args: ['overflowButton', { static: false }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], resizeSensor: [{\n type: ViewChild,\n args: ['resizeSensor', { static: false }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }], renderedTools: [{\n type: ViewChildren,\n args: ['toolbarRenderer']\n }], overflowRenderedTools: [{\n type: ViewChildren,\n args: ['overflowRenderer']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarButton',\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonComponent_1) }],\n selector: 'kendo-toolbar-button',\n template: `\n \n \n {{ toolbarOptions.text }}\n \n \n \n \n {{ overflowOptions.text }}\n \n \n `\n }]\n }], function () { return []; }, { showText: [{\n type: Input\n }], showIcon: [{\n type: Input\n }], toggleable: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], selected: [{\n type: Input\n }], click: [{\n type: Output\n }], pointerdown: [{\n type: Output\n }], selectedChange: [{\n type: Output\n }], text: [{\n type: Input\n }], togglable: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], style: [{\n type: Input\n }], className: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], toolbarButtonElement: [{\n type: ViewChild,\n args: ['toolbarButton', { read: ElementRef, static: false }]\n }], overflowButtonElement: [{\n type: ViewChild,\n args: ['overflowButton', { read: ElementRef, static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarButtonGroupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarButtonGroup',\n // tslint:disable-next-line:no-forward-ref\n providers: [LocalizationService, { provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarButtonGroupComponent_1) }],\n selector: 'kendo-toolbar-buttongroup',\n template: `\n \n \n \n {{ button.toolbarOptions.text }}\n \n \n \n \n \n \n {{ button.overflowOptions.text }}\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { selection: [{\n type: Input\n }], look: [{\n type: Input\n }], disabled: [{\n type: Input\n }], width: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], buttonComponents: [{\n type: ContentChildren,\n args: [forwardRef(() => ToolBarButtonComponent)]\n }], toolbarButtonGroup: [{\n type: ViewChild,\n args: ['toolbarButtonGroup', { static: false }]\n }], overflowButtonGroup: [{\n type: ViewChild,\n args: ['overflowButtonGroup', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarButtonListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-toolbar-buttonlist',\n template: `\n \n {{ getText(item) }}\n \n `\n }]\n }], function () { return []; }, { disabled: [{\n type: Input\n }], look: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], data: [{\n type: Input\n }], textField: [{\n type: Input\n }], buttons: [{\n type: ViewChildren,\n args: ['button']\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarDropDownButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarDropDownButton',\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarDropDownButtonComponent_1) }],\n selector: 'kendo-toolbar-dropdownbutton',\n template: `\n \n \n {{ toolbarOptions.text }}\n \n \n \n \n {{ overflowOptions.text }}\n \n \n \n \n `\n }]\n }], function () { return []; }, { showText: [{\n type: Input\n }], showIcon: [{\n type: Input\n }], look: [{\n type: Input\n }], primary: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], textField: [{\n type: Input\n }], disabled: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], dropdownButton: [{\n type: ViewChild,\n args: ['dropdownButton', { read: ElementRef, static: true }]\n }], dropDownButtonComponent: [{\n type: ViewChild,\n args: [DropDownButtonComponent, { static: false }]\n }], toolbarDropDownButton: [{\n type: ViewChild,\n args: ['toolbarDropDownButton', { static: false }]\n }], overflowDropDownButtonButtonList: [{\n type: ViewChild,\n args: ['overflowDropDownButtonButtonList', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarSplitButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarSplitButton',\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSplitButtonComponent_1) }],\n selector: 'kendo-toolbar-splitbutton',\n template: `\n \n \n \n \n \n \n {{ overflowOptions.text }}\n \n \n \n \n `\n }]\n }], function () { return []; }, { showText: [{\n type: Input\n }], showIcon: [{\n type: Input\n }], look: [{\n type: Input\n }], arrowButtonIcon: [{\n type: Input\n }], textField: [{\n type: Input\n }], buttonClick: [{\n type: Output\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], disabled: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], arrowButtonClass: [{\n type: Input\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], toolbarSplitButton: [{\n type: ViewChild,\n args: ['toolbarSplitButton', { static: false }]\n }], overflowSplitButton: [{\n type: ViewChild,\n args: ['overflowSplitButton', { read: ElementRef, static: false }]\n }], overflowSplitButtonButtonList: [{\n type: ViewChild,\n args: ['overflowSplitButtonButtonList', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarSeparatorComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarSeparator',\n // tslint:disable-next-line:no-forward-ref\n providers: [{ provide: ToolBarToolComponent, useExisting: forwardRef(() => ToolBarSeparatorComponent_1) }],\n selector: 'kendo-toolbar-separator',\n template: `\n \n
            \n
            \n `\n }]\n }], function () { return []; }, { popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], toolbarTemplate: [{\n type: ViewChild,\n args: ['toolbarTemplate', { static: true }]\n }], separator: [{\n type: ViewChild,\n args: ['separator', { static: false }]\n }] }); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(RendererService, [{\n type: Injectable\n }], null, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarRendererComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoToolBarRenderer',\n providers: [RendererService],\n selector: 'kendo-toolbar-renderer',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: RendererService }, { type: RefreshService }]; }, { rendererClick: [{\n type: Output\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], tool: [{\n type: Input\n }], location: [{\n type: Input\n }], resizable: [{\n type: Input\n }] }); })();\n\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(LocalizedToolbarMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ToolbarMessages,\n useExisting: forwardRef(() => LocalizedToolbarMessagesDirective_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoToolbarLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolbarCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ToolbarMessages,\n useExisting: forwardRef(() => ToolbarCustomMessagesComponent_1) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-toolbar-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ToolBarModule, [{\n type: NgModule,\n args: [{\n declarations: [ToolBarComponent, TOOLBAR_TOOLS, TOOLBAR_COMMON],\n exports: [ToolBarComponent, TOOLBAR_TOOLS, ToolbarCustomMessagesComponent, LocalizedToolbarMessagesDirective],\n imports: [CommonModule, ButtonsModule, PopupModule, ResizeSensorModule]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ToolBarModule, { declarations: function () { return [ToolBarComponent, ToolBarToolComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSplitButtonComponent, ToolBarSeparatorComponent, ToolBarRendererComponent, ToolBarButtonListComponent, ToolbarCustomMessagesComponent, LocalizedToolbarMessagesDirective]; }, imports: function () { return [CommonModule, ButtonsModule, PopupModule, ResizeSensorModule]; }, exports: function () { return [ToolBarComponent, ToolBarToolComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSplitButtonComponent, ToolBarSeparatorComponent, ToolbarCustomMessagesComponent, LocalizedToolbarMessagesDirective]; } }); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ToolbarMessages, NavigationService, RefreshService, ToolBarRendererComponent, RendererService, ToolBarButtonListComponent, ToolBarComponent, ToolBarToolComponent, ToolBarButtonComponent, ToolBarButtonGroupComponent, ToolBarDropDownButtonComponent, ToolBarSplitButtonComponent, ToolBarSeparatorComponent, ToolBarModule, LocalizedToolbarMessagesDirective, ToolbarCustomMessagesComponent };\n\n","/**\n * @hidden\n */\nexport const isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n","/* tslint:disable:object-literal-sort-keys max-line-length */\nimport { isWindowAvailable } from './util';\nconst agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)(\\.(\\d+(\\.\\d+)?))?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n};\nconst osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n};\nconst desktopBrowserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\nconst mobileBrowserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n};\nconst testRx = (agent, rxs, dflt) => {\n for (let rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n};\n/**\n * A function that detects the mobile browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Linux; Android 8.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.3 Chrome/61.0.3163.81 Mobile Safari/537.36';\n * detectMobileOS(userAgent); // { android: true };\n * ```\n */\nexport const detectMobileOS = (ua) => {\n let minorVersion;\n let match = [];\n for (let agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (!match) {\n continue;\n }\n if (agent === 'windows' && 'plugins' in window.navigator) {\n return null;\n } // Break if not Metro/Mobile Windows\n const os = {};\n os.device = agent;\n os.browser = testRx(ua, mobileBrowserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3] ? match[3].replace('_', '.') : '.0';\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion +\n (new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0'));\n os.cordova = typeof window.PhoneGap !== undefined\n || typeof window.cordova !== undefined; // Use file protocol to detect appModes.\n os.appMode = window.navigator.standalone\n || (/file|local|wmapp/).test(window.location.protocol)\n || os.cordova; // Use file protocol to detect appModes.\n return os;\n }\n }\n return null;\n};\n/**\n * A function that detects the desktop browser based on the given UserAgent.\n *\n * @param ua - The user agent string.\n * @returns - A browser info object containing the browser type and version.\n *\n * @example\n * ```ts-no-run\n * const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19';\n * detectDesktopBrowser(userAgent); // { chrome: true, webkit: true };\n * ```\n */\nexport const detectDesktopBrowser = (ua) => {\n let browserInfo = null;\n let match = [];\n for (let agent in desktopBrowserRxs) {\n if (desktopBrowserRxs.hasOwnProperty(agent)) {\n match = ua.match(desktopBrowserRxs[agent]);\n if (match) {\n browserInfo = {};\n browserInfo[agent] = true;\n browserInfo[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browserInfo.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browserInfo;\n};\nconst userAgent = isWindowAvailable() && window.navigator ? window.navigator.userAgent : null;\n/**\n * A constant holding the desktop browser info. The variable persists the result of the detectDesktopBrowser(window.navigator.userAgent) call.\n * If no desktop browser is detected, the constant will be `null`.\n */\nexport const browser = userAgent ? detectDesktopBrowser(userAgent) : null;\n/**\n * A constant holding the mobile OS info. The variable persists the result of the detectMobileOS(window.navigator.userAgent) call.\n * If no mobile OS is detected, the constant will be `null`.\n */\nexport const mobileOS = userAgent ? detectMobileOS(userAgent) : null;\n/**\n * A constant reporting the browser `touch` events support.\n */\nexport const touch = isWindowAvailable() && 'ontouchstart' in window;\n/**\n * @hidden\n * A constant reporting the browser `msPointers` events support.\n */\nexport const msPointers = browser && !browser.chrome && window.MSPointerEvent;\n/**\n * A constant reporting the browser `pointers` events support.\n */\nexport const pointers = browser && !browser.chrome && window.PointerEvent;\n/**\n * A constant reporting whether the browser is touch enabled.\n */\nexport const touchEnabled = mobileOS && (touch || msPointers || pointers);\n","const FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\n/**\n * @hidden\n */\nexport function fieldList(field) {\n const fields = [];\n field.replace(FIELD_REGEX, function (_match, index, indexAccessor, fieldName) {\n fields.push(index !== undefined ? index : (indexAccessor || fieldName));\n });\n return fields;\n}\n","import { fieldList } from './field-list';\nconst getterCache = {};\n// tslint:disable-next-line:no-string-literal\ngetterCache['undefined'] = obj => obj;\n/**\n * @hidden\n */\nexport function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n const fields = fieldList(field);\n getterCache[field] = function (obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n return result;\n };\n return getterCache[field];\n}\n","import { fieldList } from './field-list';\nconst setterCache = {};\n// tslint:disable-next-line:no-string-literal\nsetterCache['undefined'] = obj => obj;\nconst defaultValue = (nextField, options) => options && options.arrays && !isNaN(Number(nextField)) ? [] : {};\n/**\n * @hidden\n */\nexport function setter(field) {\n if (setterCache[field]) {\n return setterCache[field];\n }\n const fields = fieldList(field);\n setterCache[field] = (obj, value, options) => {\n let root = obj;\n const depth = fields.length - 1;\n for (let idx = 0; idx < depth && root; idx++) {\n root = root[fields[idx]] = root[fields[idx]] || defaultValue(fields[idx + 1], options);\n }\n root[fields[depth]] = value;\n };\n return setterCache[field];\n}\n","export default class Class {\n // Empty base class needed for compatibility with Kendo UI for jQuery\n}\n","import Class from '../class';\nimport namedColors from './named-colors';\nimport { Bytes, RGB, HSV, HSL } from './parse-color';\n\nconst DARK_TRESHOLD = 180;\n\nclass Color extends Class {\n constructor(value) {\n super();\n\n if (arguments.length === 1) {\n const formats = Color.formats;\n const resolvedColor = this.resolveColor(value);\n\n for (let idx = 0; idx < formats.length; idx++) {\n const formatRegex = formats[idx].re;\n const processor = formats[idx].process;\n const parts = formatRegex.exec(resolvedColor);\n\n if (parts) {\n const channels = processor(parts);\n this.r = channels[0];\n this.g = channels[1];\n this.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n }\n\n toHex() {\n const pad = this.padDigit;\n const r = this.r.toString(16);\n const g = this.g.toString(16);\n const b = this.b.toString(16);\n\n return \"#\" + pad(r) + pad(g) + pad(b);\n }\n\n resolveColor(value) {\n let color = value || \"black\";\n\n if (color.charAt(0) === \"#\") {\n color = color.substr(1, 6);\n }\n\n color = color.replace(/ /g, \"\");\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n\n return color;\n }\n\n normalizeByte(value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n\n return value > 255 ? 255 : value;\n }\n\n padDigit(value) {\n return (value.length === 1) ? \"0\" + value : value;\n }\n\n brightness(value) {\n const round = Math.round;\n\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n\n return this;\n }\n\n percBrightness() {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n\n isDark() {\n return this.percBrightness() < DARK_TRESHOLD;\n }\n\n static fromBytes(r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n }\n\n static fromRGB(r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n }\n\n static fromHSV(h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n }\n\n static fromHSL(h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n }\n}\n\nColor.formats = [ {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function(parts) {\n return [\n parseInt(parts[1], 10), parseInt(parts[2], 10), parseInt(parts[3], 10)\n ];\n }\n}, {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function(parts) {\n return [\n parseInt(parts[1], 16), parseInt(parts[2], 16), parseInt(parts[3], 16)\n ];\n }\n}, {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function(parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n} ];\n\nColor.namedColors = namedColors;\n\nexport default Color;","const namedColors = {\n aliceblue: \"f0f8ff\", antiquewhite: \"faebd7\", aqua: \"00ffff\",\n aquamarine: \"7fffd4\", azure: \"f0ffff\", beige: \"f5f5dc\",\n bisque: \"ffe4c4\", black: \"000000\", blanchedalmond: \"ffebcd\",\n blue: \"0000ff\", blueviolet: \"8a2be2\", brown: \"a52a2a\",\n burlywood: \"deb887\", cadetblue: \"5f9ea0\", chartreuse: \"7fff00\",\n chocolate: \"d2691e\", coral: \"ff7f50\", cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\", crimson: \"dc143c\", cyan: \"00ffff\",\n darkblue: \"00008b\", darkcyan: \"008b8b\", darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\", darkgrey: \"a9a9a9\", darkgreen: \"006400\",\n darkkhaki: \"bdb76b\", darkmagenta: \"8b008b\", darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\", darkorchid: \"9932cc\", darkred: \"8b0000\",\n darksalmon: \"e9967a\", darkseagreen: \"8fbc8f\", darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\", darkslategrey: \"2f4f4f\", darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\", deeppink: \"ff1493\", deepskyblue: \"00bfff\",\n dimgray: \"696969\", dimgrey: \"696969\", dodgerblue: \"1e90ff\",\n firebrick: \"b22222\", floralwhite: \"fffaf0\", forestgreen: \"228b22\",\n fuchsia: \"ff00ff\", gainsboro: \"dcdcdc\", ghostwhite: \"f8f8ff\",\n gold: \"ffd700\", goldenrod: \"daa520\", gray: \"808080\",\n grey: \"808080\", green: \"008000\", greenyellow: \"adff2f\",\n honeydew: \"f0fff0\", hotpink: \"ff69b4\", indianred: \"cd5c5c\",\n indigo: \"4b0082\", ivory: \"fffff0\", khaki: \"f0e68c\",\n lavender: \"e6e6fa\", lavenderblush: \"fff0f5\", lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\", lightblue: \"add8e6\", lightcoral: \"f08080\",\n lightcyan: \"e0ffff\", lightgoldenrodyellow: \"fafad2\", lightgray: \"d3d3d3\",\n lightgrey: \"d3d3d3\", lightgreen: \"90ee90\", lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\", lightseagreen: \"20b2aa\", lightskyblue: \"87cefa\",\n lightslategray: \"778899\", lightslategrey: \"778899\", lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\", lime: \"00ff00\", limegreen: \"32cd32\",\n linen: \"faf0e6\", magenta: \"ff00ff\", maroon: \"800000\",\n mediumaquamarine: \"66cdaa\", mediumblue: \"0000cd\", mediumorchid: \"ba55d3\",\n mediumpurple: \"9370d8\", mediumseagreen: \"3cb371\", mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\", mediumturquoise: \"48d1cc\", mediumvioletred: \"c71585\",\n midnightblue: \"191970\", mintcream: \"f5fffa\", mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\", navajowhite: \"ffdead\", navy: \"000080\",\n oldlace: \"fdf5e6\", olive: \"808000\", olivedrab: \"6b8e23\",\n orange: \"ffa500\", orangered: \"ff4500\", orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\", palegreen: \"98fb98\", paleturquoise: \"afeeee\",\n palevioletred: \"d87093\", papayawhip: \"ffefd5\", peachpuff: \"ffdab9\",\n peru: \"cd853f\", pink: \"ffc0cb\", plum: \"dda0dd\",\n powderblue: \"b0e0e6\", purple: \"800080\", red: \"ff0000\",\n rosybrown: \"bc8f8f\", royalblue: \"4169e1\", saddlebrown: \"8b4513\",\n salmon: \"fa8072\", sandybrown: \"f4a460\", seagreen: \"2e8b57\",\n seashell: \"fff5ee\", sienna: \"a0522d\", silver: \"c0c0c0\",\n skyblue: \"87ceeb\", slateblue: \"6a5acd\", slategray: \"708090\",\n slategrey: \"708090\", snow: \"fffafa\", springgreen: \"00ff7f\",\n steelblue: \"4682b4\", tan: \"d2b48c\", teal: \"008080\",\n thistle: \"d8bfd8\", tomato: \"ff6347\", turquoise: \"40e0d0\",\n violet: \"ee82ee\", wheat: \"f5deb3\", white: \"ffffff\",\n whitesmoke: \"f5f5f5\", yellow: \"ffff00\", yellowgreen: \"9acd32\"\n};\n\nexport default namedColors;","import Class from '../class';\nimport support from '../support';\nimport namedColors from './named-colors';\n\nconst browser = support.browser;\n\nlet matchNamedColor = (color) => {\n const colorNames = Object.keys(namedColors);\n colorNames.push(\"transparent\");\n\n const regexp = new RegExp(\"^(\" + colorNames.join(\"|\") + \")(\\\\W|$)\", \"i\");\n matchNamedColor = (color) => regexp.exec(color);\n\n return regexp.exec(color);\n};\n\nclass BaseColor extends Class {\n constructor() { super(); }\n toHSV() { return this; }\n\n toRGB() { return this; }\n\n toHex(options) { return this.toBytes().toHex(options); }\n\n toBytes() { return this; }\n\n toCss(options) { return \"#\" + this.toHex(options); }\n\n toCssRgba() {\n const rgb = this.toBytes();\n return `rgba(${ rgb.r }, ${ rgb.g }, ${ rgb.b }, ${ parseFloat((Number(this.a)).toFixed(3)) })`;\n }\n\n toDisplay() {\n if (browser.msie && browser.version < 9) {\n return this.toCss(); // no RGBA support; does it support any opacity in colors?\n }\n return this.toCssRgba();\n }\n\n equals(c) {\n return c === this || ((c !== null && c !== undefined) && this.toCssRgba() === parseColor(c).toCssRgba());\n }\n\n diff(other) {\n if (other === null) {\n return NaN;\n }\n\n const c1 = this.toBytes();\n const c2 = other.toBytes();\n\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.30, 2) +\n Math.pow((c1.g - c2.g) * 0.59, 2) +\n Math.pow((c1.b - c2.b) * 0.11, 2));\n }\n\n clone() {\n let c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n\n return c;\n }\n}\n\nclass RGB extends BaseColor {\n constructor(r, g, b, a) {\n super();\n\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n\n toHSV() {\n const { r, g, b } = this;\n const min = Math.min(r, g, b);\n const max = Math.max(r, g, b);\n const delta = max - min;\n const v = max;\n let h, s;\n\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n\n return new HSV(h, s, v, this.a);\n }\n\n toHSL() {\n const { r, g, b } = this;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n default: break;\n }\n }\n\n return new HSL(h * 60, s * 100, l * 100, this.a);\n }\n\n toBytes() {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n}\n\nclass Bytes extends RGB {\n constructor(r, g, b, a) {\n super(Math.round(r), Math.round(g), Math.round(b), a);\n }\n\n toRGB() {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n }\n\n toHSV() {\n return this.toRGB().toHSV();\n }\n\n toHSL() {\n return this.toRGB().toHSL();\n }\n\n toHex(options) {\n let value = hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n\n if (options && options.alpha) {\n value += hex(Math.round(this.a * 255), 2);\n }\n\n return value;\n }\n\n toBytes() {\n return this;\n }\n}\n\nfunction hex(n, width, pad = \"0\") {\n let result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n\n return result;\n}\n\nclass HSV extends BaseColor {\n constructor(h, s, v, a) {\n super();\n\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n }\n\n toRGB() {\n let { h, s, v } = this;\n let r, g, b;\n\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n\n const i = Math.floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n default: r = v; g = p; b = q; break;\n }\n }\n\n return new RGB(r, g, b, this.a);\n }\n\n toHSL() {\n return this.toRGB().toHSL();\n }\n\n toBytes() {\n return this.toRGB().toBytes();\n }\n}\n\nclass HSL extends BaseColor {\n constructor(h, s, l, a) {\n super();\n\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n }\n\n toRGB() {\n let h = this.h / 360;\n let s = this.s / 100;\n let l = this.l / 100;\n let r, g, b;\n\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return new RGB(r, g, b, this.a);\n }\n\n toHSV() {\n return this.toRGB().toHSV();\n }\n\n toBytes() {\n return this.toRGB().toBytes();\n }\n}\n\nfunction hue2rgb(p, q, s) {\n let t = s;\n\n if (t < 0) {\n t += 1;\n }\n\n if (t > 1) {\n t -= 1;\n }\n\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n\n if (t < 1 / 2) {\n return q;\n }\n\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n\n return p;\n}\n\nfunction alphaFromHex(a) {\n return parseFloat(parseFloat(parseInt(a, 16) / 255 ).toFixed(3));\n}\n\nexport { RGB, Bytes, HSV, HSL };\n\nexport default function parseColor(value, safe) {\n let m, ret;\n\n if (value == null || value === \"none\") {\n return null;\n }\n\n if (value instanceof BaseColor) {\n return value;\n }\n\n let color = value.toLowerCase();\n if ((m = matchNamedColor(color))) {\n if (m[1] === \"transparent\") {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [ m[1] ];\n return color;\n }\n if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) {\n ret = new Bytes(parseInt(m[1], 16),\n parseInt(m[2], 16),\n parseInt(m[3], 16), 1);\n } else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) {\n ret = new Bytes(parseInt(m[1] + m[1], 16),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16), 1);\n } else if ((m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color))) { // Parse 4 digit hex color\n ret = new Bytes(parseInt(m[1] + m[1], 16),\n parseInt(m[2] + m[2], 16),\n parseInt(m[3] + m[3], 16),\n alphaFromHex(m[4] + m[4]));\n } else if ((m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color))) { // Parse 8 digit hex color\n ret = new Bytes(parseInt(m[1], 16),\n parseInt(m[2], 16),\n parseInt(m[3], 16),\n alphaFromHex(m[4]));\n } else if ((m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color))) {\n ret = new Bytes(parseInt(m[1], 10),\n parseInt(m[2], 10),\n parseInt(m[3], 10), 1);\n } else if ((m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n ret = new Bytes(parseInt(m[1], 10),\n parseInt(m[2], 10),\n parseInt(m[3], 10), parseFloat(m[4]));\n } else if ((m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color))) {\n ret = new RGB(parseFloat(m[1]) / 100,\n parseFloat(m[2]) / 100,\n parseFloat(m[3]) / 100, 1);\n } else if ((m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color))) {\n ret = new RGB(parseFloat(m[1]) / 100,\n parseFloat(m[2]) / 100,\n parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error(\"Cannot parse color: \" + color);\n }\n\n return ret;\n}\n","function matchUserAgent(userAgent) {\n const browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+))/i\n };\n\n let browser = {};\n\n for (let agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n const match = userAgent.match(browserRxs[agent]);\n if (match) {\n browser[agent] = true;\n browser[match[1].toLowerCase().split(\" \")[0].split(\"/\")[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n\n break;\n }\n }\n }\n\n return browser;\n}\n\nlet browser = null;\n\nconst support = {\n get browser() {\n if (typeof window === 'undefined' || browser) {\n return browser;\n }\n\n browser = matchUserAgent(window.navigator.userAgent);\n return browser;\n }\n};\n\nexport default support;\n","import { Class } from '../common';\n\nclass HasObservers extends Class {\n observers() {\n this._observers = this._observers || [];\n return this._observers;\n }\n\n addObserver(element) {\n if (!this._observers) {\n this._observers = [ element ];\n } else {\n this._observers.push(element);\n }\n return this;\n }\n\n removeObserver(element) {\n const observers = this.observers();\n const index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n }\n\n trigger(methodName, event) {\n const observers = this._observers;\n\n if (observers && !this._suspended) {\n for (let idx = 0; idx < observers.length; idx++) {\n let observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n }\n\n optionsChange(e = {}) {\n e.element = this;\n this.trigger(\"optionsChange\", e);\n }\n\n geometryChange() {\n this.trigger(\"geometryChange\", {\n element: this\n });\n }\n\n suspend() {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n }\n\n resume() {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n }\n\n _observerField(field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n}\n\nexport default HasObservers;\n\n","import { Class } from '../common';\nimport HasObservers from './has-observers';\nimport { defined } from '../util';\n\n\nconst toString = {}.toString;\n\nclass OptionsStore extends HasObservers {\n constructor(options, prefix = \"\") {\n super();\n\n this.prefix = prefix;\n\n for (let field in options) {\n let member = options[field];\n member = this._wrap(member, field);\n this[field] = member;\n }\n }\n\n get(field) {\n const parts = field.split(\".\");\n let result = this;\n\n while (parts.length && result) {\n let part = parts.shift();\n result = result[part];\n }\n\n return result;\n }\n\n set(field, value) {\n const current = this.get(field);\n\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n }\n\n _set(field, value) {\n const composite = field.indexOf(\".\") >= 0;\n let parentObj = this;\n let fieldName = field;\n\n if (composite) {\n const parts = fieldName.split(\".\");\n let prefix = this.prefix;\n\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + \".\";\n\n let obj = parentObj[fieldName];\n\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n }\n\n _clear(field) {\n const current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n }\n\n _wrap(object, field) {\n const type = toString.call(object);\n let wrapped = object;\n\n if (wrapped !== null && defined(wrapped) && type === \"[object Object]\") {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + \".\");\n }\n\n wrapped.addObserver(this);\n }\n\n return wrapped;\n }\n}\n\nexport default OptionsStore;\n","import close from './close';\n\nexport default function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n}","import HasObservers from '../core/has-observers';\nimport { deg, rad, round } from '../util';\nimport withAccessors from '../mixins/with-accessors';\n\nimport closeOrLess from './math/close-or-less';\nimport lineIntersection from './math/line-intersection';\nimport ellipseExtremeAngles from './math/ellipse-extreme-angles';\n\nimport { PRECISION } from './constants';\nimport Point from './point';\nimport Rect from './rect';\nimport transform from './transform';\n\n\nconst MAX_INTERVAL = 45;\nconst pow = Math.pow;\nconst accessors = [ \"radiusX\", \"radiusY\", \"startAngle\", \"endAngle\", \"anticlockwise\" ];\n\nclass Arc extends withAccessors(HasObservers, accessors) {\n constructor(center = new Point(), options = {}) {\n super();\n\n this.setCenter(center);\n\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n }\n\n clone() {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n }\n\n setCenter(value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getCenter() {\n return this.center;\n }\n\n pointAt(angle) {\n const center = this.center;\n const radian = rad(angle);\n\n return new Point(\n center.x + this.radiusX * Math.cos(radian),\n center.y + this.radiusY * Math.sin(radian)\n );\n }\n\n curvePoints() {\n const startAngle = this.startAngle;\n const dir = this.anticlockwise ? -1 : 1;\n const curvePoints = [ this.pointAt(startAngle) ];\n const interval = this._arcInterval();\n const intervalAngle = interval.endAngle - interval.startAngle;\n const subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n const subIntervalAngle = intervalAngle / subIntervalsCount;\n let currentAngle = startAngle;\n let transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n\n for (let i = 1; i <= subIntervalsCount; i++) {\n const nextAngle = currentAngle + dir * subIntervalAngle;\n const points = this._intervalCurvePoints(currentAngle, nextAngle, transformation);\n\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n\n return curvePoints;\n }\n\n bbox(matrix) {\n const interval = this._arcInterval();\n const startAngle = interval.startAngle;\n const endAngle = interval.endAngle;\n const extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n const extremeX = deg(extremeAngles.x);\n const extremeY = deg(extremeAngles.y);\n const endPoint = this.pointAt(endAngle).transformCopy(matrix);\n let currentAngleX = bboxStartAngle(extremeX, startAngle);\n let currentAngleY = bboxStartAngle(extremeY, startAngle);\n let currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n let minPoint = Point.min(currentPoint, endPoint);\n let maxPoint = Point.max(currentPoint, endPoint);\n\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n let currentPointX;\n if (currentAngleX < endAngle) {\n currentPointX = this.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n\n let currentPointY;\n if (currentAngleY < endAngle) {\n currentPointY = this.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n }\n\n _arcInterval() {\n let { startAngle, endAngle, anticlockwise } = this;\n\n if (anticlockwise) {\n let oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n\n if (startAngle > endAngle || (anticlockwise && startAngle === endAngle)) {\n endAngle += 360;\n }\n\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n }\n\n _intervalCurvePoints(startAngle, endAngle, transformation) {\n const p1 = this.pointAt(startAngle);\n const p2 = this.pointAt(endAngle);\n const p1Derivative = this._derivativeAt(startAngle);\n const p2Derivative = this._derivativeAt(endAngle);\n const t = (rad(endAngle) - rad(startAngle)) / 3;\n const cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n const cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n }\n\n _derivativeAt(angle) {\n const radian = rad(angle);\n\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n }\n\n containsPoint(point) {\n const interval = this._arcInterval();\n const intervalAngle = interval.endAngle - interval.startAngle;\n const { center, radiusX, radiusY } = this;\n const distance = center.distanceTo(point);\n const angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n const pointRadius = (radiusX * radiusY) /\n Math.sqrt(pow(radiusX, 2) * pow(Math.sin(angleRad), 2) + pow(radiusY, 2) * pow(Math.cos(angleRad), 2));\n const startPoint = this.pointAt(this.startAngle).round(PRECISION);\n const endPoint = this.pointAt(this.endAngle).round(PRECISION);\n const intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n let containsPoint;\n\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n let angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n\n let inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = (inAngleRange && closeOrLess(distance, pointRadius)) || (!inAngleRange && (!intersection || intersection.equals(point)));\n }\n return containsPoint;\n }\n\n _isOnPath(point, width) {\n const interval = this._arcInterval();\n const center = this.center;\n let angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n\n const inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n\n static fromPoints(start, end, rx, ry, largeArc, swipe, rotation) {// eslint-disable-line max-params\n const arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n\n return new Arc(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n }\n}\n\nfunction calculateAngle(cx, cy, rx, ry, x, y) {\n const cos = round((x - cx) / rx, 3);\n const sin = round((y - cy) / ry, 3);\n\n return round(deg(Math.atan2(sin, cos)));\n}\n\nfunction normalizeArcParameters(parameters) {\n let { x1, y1, x2, y2, rx, ry, largeArc, swipe, rotation = 0 } = parameters;\n\n const radians = rad(rotation);\n const cosine = Math.cos(radians);\n const sine = Math.sin(radians);\n\n const xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n const yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n\n const sign = largeArc !== swipe ? 1 : -1;\n\n const xt2 = Math.pow(xT, 2);\n const yt2 = Math.pow(yT, 2);\n let rx2 = Math.pow(rx, 2);\n let ry2 = Math.pow(ry, 2);\n\n let delta = xt2 / rx2 + yt2 / ry2;\n\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n\n let constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n // due to rounding errors the value could become NaN even after radii correction\n if (isNaN(constT)) {\n constT = 0;\n }\n\n const cxT = constT * (rx * yT) / ry;\n const cyT = - constT * (ry * xT) / rx;\n\n const cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n const cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n\n\n const uX = (xT - cxT) / rx;\n const uY = (yT - cyT) / ry;\n const vX = -(xT + cxT) / rx;\n const vY = -(yT + cyT) / ry;\n\n const startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n\n const angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n let angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n\n if (swipe && angle < 0) {\n angle += 360;\n }\n let endAngle = startAngle + angle;\n const signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = (Math.abs(endAngle) % 360) * signEndAngle;\n\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n}\n\nfunction bboxStartAngle(angle, start) {\n let startAngle = angle;\n\n while (startAngle < start) {\n startAngle += 90;\n }\n\n return startAngle;\n}\n\nexport default Arc;\n","import Point from '../point';\n\nexport default function lineIntersection(p0, p1, p2, p3) {\n const s1x = p1.x - p0.x;\n const s2x = p3.x - p2.x;\n const s1y = p1.y - p0.y;\n const s2y = p3.y - p2.y;\n const nx = p0.x - p2.x;\n const ny = p0.y - p2.y;\n const d = s1x * s2y - s2x * s1y;\n const s = (s1x * ny - s1y * nx) / d;\n const t = (s2x * ny - s2y * nx) / d;\n\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n}","import withAccessors from '../mixins/with-accessors';\nimport Point from './point';\nimport Rect from './rect';\nimport ellipseExtremeAngles from './math/ellipse-extreme-angles';\nimport HasObservers from '../core/has-observers';\nimport { rad } from '../util';\n\n\nconst PI_DIV_2 = Math.PI / 2;\n\nclass Circle extends withAccessors(HasObservers, [ \"radius\" ]) {\n constructor(center = new Point(), radius = 0) {\n super();\n\n this.setCenter(center);\n this.setRadius(radius);\n }\n\n setCenter(value) {\n this._observerField(\"center\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getCenter() {\n return this.center;\n }\n\n equals(other) {\n return other &&\n other.center.equals(this.center) &&\n other.radius === this.radius;\n }\n\n clone() {\n return new Circle(this.center.clone(), this.radius);\n }\n\n pointAt(angle) {\n return this._pointAt(rad(angle));\n }\n\n bbox(matrix) {\n const extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n let minPoint = Point.maxPoint();\n let maxPoint = Point.minPoint();\n\n for (let i = 0; i < 4; i++) {\n let currentPointX = this._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n let currentPointY = this._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n let currentPoint = new Point(currentPointX.x, currentPointY.y);\n\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n\n return Rect.fromPoints(minPoint, maxPoint);\n }\n\n _pointAt(angle) {\n const { center, radius } = this;\n\n return new Point(\n center.x + radius * Math.cos(angle),\n center.y + radius * Math.sin(angle)\n );\n }\n\n containsPoint(point) {\n const { center, radius } = this;\n const inCircle = Math.pow(point.x - center.x, 2) +\n Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n }\n\n _isOnPath(point, width) {\n const { center, radius } = this;\n const pointDistance = center.distanceTo(point);\n\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n}\n\nexport default Circle;\n","const PRECISION = 10;\n\nexport { PRECISION };","import { PRECISION } from '../constants';\n\nimport { round } from '../../util';\n\nexport default function close(a, b, tolerance = PRECISION) {\n return round(Math.abs(a - b), tolerance) === 0;\n}","export default function ellipseExtremeAngles(center, rx, ry, matrix) {\n let extremeX = 0;\n let extremeY = 0;\n\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n\n return {\n x: extremeX,\n y: extremeY\n };\n}","export default function lineIntersectionsCount(a, b, point) {\n let intersects;\n if (a.x !== b.x) {\n const minX = Math.min(a.x, b.x);\n const maxX = Math.max(a.x, b.x);\n const minY = Math.min(a.y, b.y);\n const maxY = Math.max(a.y, b.y);\n const inRange = minX <= point.x && point.x < maxX;\n\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (((maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x)) / (maxX - minX) + minY - point.y) >= 0;\n }\n }\n\n return intersects ? 1 : 0;\n}","import { Class } from '../common';\nimport defined from '../util/defined';\nimport rad from '../util/rad';\nimport round from '../util/round';\n\nclass Matrix extends Class {\n\n constructor(a = 0, b = 0, c = 0, d = 0, e = 0, f = 0) {\n super();\n\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n multiplyCopy(matrix) {\n return new Matrix(\n this.a * matrix.a + this.c * matrix.b,\n this.b * matrix.a + this.d * matrix.b,\n this.a * matrix.c + this.c * matrix.d,\n this.b * matrix.c + this.d * matrix.d,\n this.a * matrix.e + this.c * matrix.f + this.e,\n this.b * matrix.e + this.d * matrix.f + this.f\n );\n }\n\n invert() {\n const { a, b, c: d, d: e, e: g, f: h } = this;\n const det = a * e - b * d;\n\n if (det === 0) {\n return null;\n }\n\n return new Matrix(e / det, -b / det, -d / det, a / det,\n (d * h - e * g) / det, (b * g - a * h) / det);\n }\n\n clone() {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n }\n\n equals(other) {\n if (!other) {\n return false;\n }\n\n return this.a === other.a && this.b === other.b &&\n this.c === other.c && this.d === other.d &&\n this.e === other.e && this.f === other.f;\n }\n\n round(precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n\n return this;\n }\n\n toArray(precision) {\n const result = [ this.a, this.b, this.c, this.d, this.e, this.f ];\n\n if (defined(precision)) {\n for (let i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n\n return result;\n }\n\n toString(precision, separator = \",\") {\n return this.toArray(precision).join(separator);\n }\n\n static translate(x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n }\n\n static unit() {\n return new Matrix(1, 0, 0, 1, 0, 0);\n }\n\n static rotate(angle, x, y) {\n const matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = (x - x * matrix.a + y * matrix.b) || 0;\n matrix.f = (y - y * matrix.a - x * matrix.b) || 0;\n\n return matrix;\n }\n\n static scale(scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n }\n}\n\nMatrix.IDENTITY = Matrix.unit();\n\nexport default Matrix;\n","import withAccessors from '../mixins/with-accessors';\nimport HasObservers from '../core/has-observers';\nimport { defined, MIN_NUM, MAX_NUM, round } from '../util';\nimport Matrix from './matrix';\nimport toMatrix from './to-matrix';\n\n\nclass Point extends withAccessors(HasObservers, [ \"x\", \"y\" ]) {\n constructor(x, y) {\n super();\n\n this.x = x || 0;\n this.y = y || 0;\n }\n\n equals(other) {\n return other && other.x === this.x && other.y === this.y;\n }\n\n clone() {\n return new Point(this.x, this.y);\n }\n\n rotate(angle, origin) {\n const originPoint = Point.create(origin) || Point.ZERO;\n\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n }\n\n translate(x, y) {\n this.x += x;\n this.y += y;\n\n this.geometryChange();\n\n return this;\n }\n\n translateWith(point) {\n return this.translate(point.x, point.y);\n }\n\n move(x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n }\n\n scale(scaleX, scaleY = scaleX) {\n this.x *= scaleX;\n this.y *= scaleY;\n\n this.geometryChange();\n\n return this;\n }\n\n scaleCopy(scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n }\n\n transform(transformation) {\n const matrix = toMatrix(transformation);\n const { x, y } = this;\n\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n\n this.geometryChange();\n\n return this;\n }\n\n transformCopy(transformation) {\n const point = this.clone();\n\n if (transformation) {\n point.transform(transformation);\n }\n\n return point;\n }\n\n distanceTo(point) {\n const dx = this.x - point.x;\n const dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n round(digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n\n this.geometryChange();\n\n return this;\n }\n\n toArray(digits) {\n const doRound = defined(digits);\n const x = doRound ? round(this.x, digits) : this.x;\n const y = doRound ? round(this.y, digits) : this.y;\n\n return [ x, y ];\n }\n\n toString(digits, separator = \" \") {\n let { x, y } = this;\n\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n\n return x + separator + y;\n }\n\n static create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n\n return new Point(arg0, arg1);\n }\n }\n\n static min() {\n let minX = MAX_NUM;\n let minY = MAX_NUM;\n\n for (let i = 0; i < arguments.length; i++) {\n let point = arguments[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n\n return new Point(minX, minY);\n }\n\n static max() {\n let maxX = MIN_NUM;\n let maxY = MIN_NUM;\n\n for (let i = 0; i < arguments.length; i++) {\n const point = arguments[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n\n return new Point(maxX, maxY);\n }\n\n static minPoint() {\n return new Point(MIN_NUM, MIN_NUM);\n }\n\n static maxPoint() {\n return new Point(MAX_NUM, MAX_NUM);\n }\n\n static get ZERO() {\n return new Point(0, 0);\n }\n}\n\nexport default Point;\n","import HasObservers from '../core/has-observers';\nimport Point from './point';\nimport Size from './size';\n\nclass Rect extends HasObservers {\n constructor(origin = new Point(), size = new Size(), cornerRadius = 0) {\n super();\n\n this.setOrigin(origin);\n this.setSize(size);\n this.setCornerRadius(cornerRadius);\n }\n\n clone() {\n return new Rect(\n this.origin.clone(),\n this.size.clone()\n );\n }\n\n equals(other) {\n return other &&\n other.origin.equals(this.origin) &&\n other.size.equals(this.size);\n }\n\n setOrigin(value) {\n this._observerField(\"origin\", Point.create(value));\n this.geometryChange();\n return this;\n }\n\n getOrigin() {\n return this.origin;\n }\n\n setCornerRadius(radius) {\n this.cornerRadius = Array.isArray(radius) ? radius : [ radius, radius ];\n\n this.geometryChange();\n return this;\n }\n\n getCornerRadius() {\n return this.cornerRadius;\n }\n\n setSize(value) {\n this._observerField(\"size\", Size.create(value));\n this.geometryChange();\n return this;\n }\n\n getSize() {\n return this.size;\n }\n\n width() {\n return this.size.width;\n }\n\n height() {\n return this.size.height;\n }\n\n topLeft() {\n return this.origin.clone();\n }\n\n bottomRight() {\n return this.origin.clone().translate(this.width(), this.height());\n }\n\n topRight() {\n return this.origin.clone().translate(this.width(), 0);\n }\n\n bottomLeft() {\n return this.origin.clone().translate(0, this.height());\n }\n\n center() {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n }\n\n bbox(matrix) {\n const tl = this.topLeft().transformCopy(matrix);\n const tr = this.topRight().transformCopy(matrix);\n const br = this.bottomRight().transformCopy(matrix);\n const bl = this.bottomLeft().transformCopy(matrix);\n\n return Rect.fromPoints(tl, tr, br, bl);\n }\n\n transformCopy(m) {\n return Rect.fromPoints(\n this.topLeft().transform(m),\n this.bottomRight().transform(m)\n );\n }\n\n expand(x, y = x) {\n\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n\n this.origin.translate(-x, -y);\n\n return this;\n }\n\n expandCopy(x, y) {\n return this.clone().expand(x, y);\n }\n\n containsPoint(point) {\n const origin = this.origin;\n const bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n }\n\n _isOnPath(point, width) {\n const rectOuter = this.expandCopy(width, width);\n const rectInner = this.expandCopy(-width, -width);\n\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n\n static fromPoints() {\n const topLeft = Point.min.apply(null, arguments);\n const bottomRight = Point.max.apply(null, arguments);\n const size = new Size(\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y\n );\n\n return new Rect(topLeft, size);\n }\n\n static union(a, b) {\n return Rect.fromPoints(\n Point.min(a.topLeft(), b.topLeft()),\n Point.max(a.bottomRight(), b.bottomRight())\n );\n }\n\n static intersect(a, b) {\n const rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n\n const rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n\n if (rect1.left <= rect2.right &&\n rect2.left <= rect1.right &&\n rect1.top <= rect2.bottom &&\n rect2.top <= rect1.bottom) {\n return Rect.fromPoints(\n new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)),\n new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom))\n );\n }\n }\n}\n\nexport default Rect;\n","import { deg } from '../../util';\nimport transform from '../transform';\n\nexport default function isOutOfEndPoint(endPoint, controlPoint, point) {\n const angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n const rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n\n return rotatedPoint.x < endPoint.x;\n}","export default function calculateCurveAt(t, field, points) {\n const t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] +\n 3 * Math.pow(t1, 2) * t * points[1][field] +\n 3 * Math.pow(t, 2) * t1 * points[2][field] +\n Math.pow(t, 3) * points[3][field];\n}","export default function toCubicPolynomial(points, field) {\n return [ -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n}","import { PRECISION } from '../constants';\nimport { Class } from '../../common';\nimport { round } from '../../util';\n\nclass ComplexNumber extends Class {\n\n constructor(real = 0, img = 0) {\n super();\n\n this.real = real;\n this.img = img;\n }\n\n add(cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n }\n\n addConstant(value) {\n return new ComplexNumber(this.real + value, this.img);\n }\n\n negate() {\n return new ComplexNumber(-this.real, -this.img);\n }\n\n multiply(cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img,\n this.real * cNumber.img + this.img * cNumber.real);\n }\n\n multiplyConstant(value) {\n return new ComplexNumber(this.real * value, this.img * value);\n }\n\n nthRoot(n) {\n const rad = Math.atan2(this.img, this.real);\n const r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n const nthR = Math.pow(r, 1 / n);\n\n return new ComplexNumber(nthR * Math.cos(rad / n), nthR * Math.sin(rad / n)); //Moivre's formula\n }\n\n equals(cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n }\n\n isReal() {\n return this.img === 0;\n }\n}\n\nexport default ComplexNumber;","import ComplexNumber from './complex-number';\nimport { PRECISION } from '../constants';\nimport { round } from '../../util';\n\nfunction numberSign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction solveQuadraticEquation(a, b, c) {\n const squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n}\n\n//Cardano's formula\nexport default function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n\n const p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n const q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n const Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n const i = new ComplexNumber(0,1);\n const b3a = -b / (3 * a);\n let x1, x2, y1, y2, y3, z1, z2;\n\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, - Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n\n y1 = x1.add(x2);\n\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n\n const result = [];\n\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n\n return result;\n}","import toCubicPolynomial from './to-cubic-polynomial';\nimport solveCubicEquation from './solve-cubic-equation';\nimport calculateCurveAt from './calculate-curve-at';\n\nexport default function hasRootsInRange(points, point, field, rootField, range) {\n const polynomial = toCubicPolynomial(points, rootField);\n const roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n let intersection;\n\n for (let idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n}","import HasObservers from '../core/has-observers';\nimport Rect from './rect';\nimport Point from './point';\nimport transform from './transform';\nimport { deg, MIN_NUM, MAX_NUM } from '../util';\nimport isOutOfEndPoint from './math/is-out-of-end-point';\nimport calculateCurveAt from './math/calculate-curve-at';\nimport hasRootsInRange from './math/has-roots-in-range';\nimport curveIntersectionsCount from './math/curve-intersections-count';\nimport lineIntersectionsCount from './math/line-intersections-count';\nimport withPoints from '../mixins/with-points';\n\n\nconst points = [ \"anchor\", \"controlIn\", \"controlOut\" ];\n\nclass Segment extends withPoints(HasObservers, points) {\n constructor(anchor, controlIn, controlOut) {\n super();\n\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n\n bboxTo(toSegment, matrix) {\n const segmentAnchor = this.anchor().transformCopy(matrix);\n const toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n let rect;\n\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(\n segmentAnchor, this.controlOut().transformCopy(matrix),\n toSegment.controlIn().transformCopy(matrix), toSegmentAnchor\n );\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n\n return rect;\n }\n\n _lineBoundingBox(p1, p2) {\n return Rect.fromPoints(p1, p2);\n }\n\n _curveBoundingBox(p1, cp1, cp2, p2) {\n const points = [ p1, cp1, cp2, p2 ];\n const extremesX = this._curveExtremesFor(points, \"x\");\n const extremesY = this._curveExtremesFor(points, \"y\");\n const xLimits = arrayLimits([ extremesX.min, extremesX.max, p1.x, p2.x ]);\n const yLimits = arrayLimits([ extremesY.min, extremesY.max, p1.y, p2.y ]);\n\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n }\n\n _curveExtremesFor(points, field) {\n const extremes = this._curveExtremes(\n points[0][field], points[1][field],\n points[2][field], points[3][field]\n );\n\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n }\n\n _curveExtremes(x1, x2, x3, x4) {\n const a = x1 - 3 * x2 + 3 * x3 - x4;\n const b = - 2 * (x1 - 2 * x2 + x3);\n const c = x1 - x2;\n const sqrt = Math.sqrt(b * b - 4 * a * c);\n let t1 = 0;\n let t2 = 1;\n\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (- b + sqrt) / (2 * a);\n t2 = (- b - sqrt) / (2 * a);\n }\n\n let min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n\n let max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n _intersectionsTo(segment, point) {\n let intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([ this.anchor(), this.controlOut(), segment.controlIn(), segment.anchor() ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n }\n\n _isOnCurveTo(segment, point, width, endSegment) {\n const bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n const p1 = this.anchor();\n const p2 = this.controlOut();\n const p3 = segment.controlIn();\n const p4 = segment.anchor();\n\n if (endSegment === \"start\" && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === \"end\" && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n\n //the approach is not entirely correct but is close and the alternatives are solving a 6th degree polynomial or testing the segment points\n const points = [ p1, p2, p3, p4 ];\n if (hasRootsInRange(points, point, \"x\", \"y\", width) || hasRootsInRange(points, point, \"y\", \"x\", width)) {\n return true;\n }\n const rotation = transform().rotate(45, point);\n const rotatedPoints = [ p1.transformCopy(rotation), p2.transformCopy(rotation), p3.transformCopy(rotation), p4.transformCopy(rotation) ];\n return hasRootsInRange(rotatedPoints, point, \"x\", \"y\", width) || hasRootsInRange(rotatedPoints, point, \"y\", \"x\", width);\n }\n }\n\n _isOnLineTo(segment, point, width) {\n const p1 = this.anchor();\n const p2 = segment.anchor();\n const angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n const rect = new Rect([ p1.x, p1.y - width / 2 ], [ p1.distanceTo(p2), width ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n }\n\n _isOnPathTo(segment, point, width, endSegment) {\n let isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n}\n\nfunction arrayLimits(arr) {\n let length = arr.length;\n let min = MAX_NUM;\n let max = MIN_NUM;\n\n for (let i = 0; i < length; i ++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n\n return {\n min: min,\n max: max\n };\n}\n\nexport default Segment;\n","import toCubicPolynomial from './to-cubic-polynomial';\nimport solveCubicEquation from './solve-cubic-equation';\nimport calculateCurveAt from './calculate-curve-at';\nimport close from './close';\n\nexport default function curveIntersectionsCount(points, point, bbox) {\n const polynomial = toCubicPolynomial(points, \"x\");\n const roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n let rayIntersection, intersectsRay;\n let count = 0;\n for (let i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], \"y\", points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && (((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x) || (0 < roots[i] && roots[i] < 1))) {\n count++;\n }\n }\n\n return count;\n}","import HasObservers from '../core/has-observers';\nimport withAccessors from '../mixins/with-accessors';\nimport { defined, round } from '../util';\n\n\nclass Size extends withAccessors(HasObservers, [ \"width\", \"height\" ]) {\n constructor(width, height) {\n super();\n\n this.width = width || 0;\n this.height = height || 0;\n }\n\n equals(other) {\n return other && other.width === this.width && other.height === this.height;\n }\n\n clone() {\n return new Size(this.width, this.height);\n }\n\n toArray(digits) {\n const doRound = defined(digits);\n const width = doRound ? round(this.width, digits) : this.width;\n const height = doRound ? round(this.height, digits) : this.height;\n\n return [ width, height ];\n }\n\n static create(arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n\n return new Size(arg0, arg1);\n }\n }\n\n static get ZERO() {\n return new Size(0, 0);\n }\n}\n\nexport default Size;\n","export default function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === \"function\") {\n return transformation.matrix();\n }\n\n return transformation;\n}","import HasObservers from '../core/has-observers';\nimport toMatrix from './to-matrix';\nimport Matrix from './matrix';\nimport Point from './point';\n\nclass Transformation extends HasObservers {\n constructor(matrix = Matrix.unit()) {\n super();\n\n this._matrix = matrix;\n }\n\n clone() {\n return new Transformation(\n this._matrix.clone()\n );\n }\n\n equals(other) {\n return other &&\n other._matrix.equals(this._matrix);\n }\n\n translate(x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n\n this._optionsChange();\n return this;\n }\n\n scale(scaleX, scaleY = scaleX, origin = null) {\n let originPoint = origin;\n\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n\n this._optionsChange();\n return this;\n }\n\n rotate(angle, origin) {\n const originPoint = Point.create(origin) || Point.ZERO;\n\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n\n this._optionsChange();\n return this;\n }\n\n multiply(transformation) {\n const matrix = toMatrix(transformation);\n\n this._matrix = this._matrix.multiplyCopy(matrix);\n\n this._optionsChange();\n return this;\n }\n\n matrix(value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n\n return this._matrix;\n }\n\n _optionsChange() {\n this.optionsChange({\n field: \"transform\",\n value: this\n });\n }\n}\n\nexport default Transformation;\n","import Transformation from './transformation';\n\nexport default function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n\n if (matrix instanceof Transformation) {\n return matrix;\n }\n\n return new Transformation(matrix);\n}","import { defined } from '../util';\n\nfunction optionsAccessor(name) {\n return function(value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n\n return this.options.get(name);\n };\n}\n\nfunction defineOptionsAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n}\n\nconst withOptions = (TBase, names) => {\n const result = class extends TBase {};\n defineOptionsAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withOptions;\n","import OptionsStore from '../core/options-store';\nimport withOptions from '../mixins/with-options';\nimport HasObservers from '../core/has-observers';\nimport { defined } from '../util';\n\n\nconst options = [ \"offset\", \"color\", \"opacity\" ];\n\nclass GradientStop extends withOptions(HasObservers, options) {\n constructor(offset, color, opacity) {\n super();\n\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n\n this.options.addObserver(this);\n }\n\n static create(arg) {\n if (defined(arg)) {\n let stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n\n return stop;\n }\n }\n}\n\nexport default GradientStop;\n","import ElementsArray from '../shapes/elements-array';\n\nclass StopsArray extends ElementsArray {\n _change() {\n this.optionsChange({\n field: \"stops\"\n });\n }\n}\n\nexport default StopsArray;","import StopsArray from './stops-array';\nimport GradientStop from './gradient-stop';\nimport HasObservers from '../core/has-observers';\nimport { defined, definitionId } from '../util';\n\nclass Gradient extends HasObservers {\n get nodeType() {\n return \"Gradient\";\n }\n\n constructor(options = {}) {\n super();\n\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n }\n\n userSpace(value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n\n return this._userSpace;\n }\n\n _createStops(stops = []) {\n const result = [];\n for (let idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n\n return result;\n }\n\n addStop(offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n }\n\n removeStop(stop) {\n const index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n\n optionsChange(e) {\n this.trigger(\"optionsChange\", {\n field: \"gradient\" + (e ? \".\" + e.field : \"\"),\n value: this\n });\n }\n\n geometryChange() {\n this.optionsChange();\n }\n}\n\nexport default Gradient;\n","import withPoints from '../mixins/with-points';\nimport Point from '../geometry/point';\nimport Gradient from './gradient';\n\n\nconst points = [ \"start\", \"end\" ];\n\nclass LinearGradient extends withPoints(Gradient, points) {\n constructor(options = {}) {\n super(options);\n\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n}\n\nexport default LinearGradient;\n","import withPoints from '../mixins/with-points';\nimport Point from '../geometry/point';\nimport Gradient from './gradient';\nimport { defined } from '../util';\n\n\nclass RadialGradient extends withPoints(Gradient, [ \"center\" ]) {\n constructor(options = {}) {\n super(options);\n\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n }\n\n radius(value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n\n return this._radius;\n }\n\n fallbackFill(value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n\n return this._fallbackFill;\n }\n}\n\nexport default RadialGradient;\n","import Matrix from '../geometry/matrix';\nimport toMatrix from '../geometry/to-matrix';\n\nconst IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n\nconst measurable = TBase => (\n class extends TBase {\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n const matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n let bbox;\n\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n\n const strokeWidth = this.options.get(\"stroke.width\");\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n\n return bbox;\n }\n\n geometryChange() {\n delete this._bboxCache;\n this.trigger(\"geometryChange\", {\n element: this\n });\n }\n }\n);\n\nexport default measurable;","import { defined } from '../util';\n\nconst GRADIENT = \"Gradient\";\n\nconst paintable = TBase => (\n class extends TBase {\n fill(color, opacity) {\n const options = this.options;\n\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n const newFill = {\n color: color\n };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set(\"fill\", newFill);\n } else {\n options.set(\"fill\", color);\n }\n\n return this;\n }\n\n return options.get(\"fill\");\n }\n\n stroke(color, width, opacity) {\n if (defined(color)) {\n this.options.set(\"stroke.color\", color);\n\n if (defined(width)) {\n this.options.set(\"stroke.width\", width);\n }\n\n if (defined(opacity)) {\n this.options.set(\"stroke.opacity\", opacity);\n }\n\n return this;\n }\n\n return this.options.get(\"stroke\");\n }\n }\n);\n\nexport default paintable;\n","const traversable = (TBase, childrenField) => (\n class extends TBase {\n traverse(callback) {\n const children = this[childrenField];\n\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n\n return this;\n }\n }\n);\n\nexport default traversable;\n","function setAccessor(field) {\n return function(value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n\n return this;\n };\n}\n\nfunction getAccessor(field) {\n return function() {\n return this[field];\n };\n}\n\nfunction defineAccessors(fn, fields) {\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i];\n let capitalized = name.charAt(0).toUpperCase() +\n name.substring(1, name.length);\n\n fn[\"set\" + capitalized] = setAccessor(name);\n fn[\"get\" + capitalized] = getAccessor(name);\n }\n}\n\nconst withAccessors = (TBase, names) => {\n const result = class extends TBase {};\n defineAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withAccessors;\n","import { defined } from '../util';\n\nfunction geometryAccessor(name) {\n const fieldName = \"_\" + name;\n return function(value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n\n return this[fieldName];\n };\n}\n\nfunction defineGeometryAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n}\n\nconst withGeometry = (TBase, names = [ \"geometry\" ]) => {\n const result = class extends TBase {};\n defineGeometryAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withGeometry;\n","import { defined } from '../util';\nimport Point from '../geometry/point';\n\nfunction pointAccessor(name) {\n const fieldName = \"_\" + name;\n return function(value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n\n return this[fieldName];\n };\n}\n\nfunction definePointAccessors(fn, names) {\n for (let i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n}\n\nconst withPoints = (TBase, names) => {\n const result = class extends TBase {};\n definePointAccessors(result.prototype, names);\n\n return result;\n};\n\nexport default withPoints;\n","import Point from '../geometry/point';\nimport { last } from '../util';\n\nconst ShapeMap = {\n l: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 2) {\n let point = new Point(parameters[i], parameters[i + 1]);\n\n if (options.isRelative) {\n point.translateWith(position);\n }\n\n path.lineTo(point.x, point.y);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n c: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 6) {\n let controlOut = new Point(parameters[i], parameters[i + 1]);\n let controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n let point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n\n path.curveTo(controlOut, controlIn, point);\n\n position.x = point.x;\n position.y = point.y;\n }\n },\n\n v: function(path, options) {\n const value = options.isRelative ? 0 : options.position.x;\n\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n\n h: function(path, options) {\n const value = options.isRelative ? 0 : options.position.y;\n\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n\n a: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 7) {\n const radiusX = parameters[i];\n const radiusY = parameters[i + 1];\n const rotation = parameters[i + 2];\n const largeArc = parameters[i + 3];\n const swipe = parameters[i + 4];\n const endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n\n s: function(path, options) {\n const { parameters, position, previousCommand } = options;\n let lastControlIn;\n\n if (previousCommand === \"s\" || previousCommand === \"c\") {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n\n for (let i = 0; i < parameters.length; i += 4) {\n let controlIn = new Point(parameters[i], parameters[i + 1]);\n let endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n let controlOut;\n\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n\n lastControlIn = controlIn;\n\n path.curveTo(controlOut, controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n q: function(path, options) {\n const { parameters, position } = options;\n\n for (let i = 0; i < parameters.length; i += 4) {\n let controlPoint = new Point(parameters[i], parameters[i + 1]);\n let endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n\n let cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n\n t: function(path, options) {\n const { parameters, position, previousCommand } = options;\n let controlPoint;\n\n if (previousCommand === \"q\" || previousCommand === \"t\") {\n let lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone()\n .translateWith(position.scaleCopy(-1 / 3))\n .scale(3 / 2);\n }\n\n for (let i = 0; i < parameters.length; i += 2) {\n let endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n\n let cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n};\n\nfunction toLineParamaters(parameters, isVertical, value) {\n const insertPosition = isVertical ? 0 : 1;\n\n for (let i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n}\n\nfunction reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n}\n\nconst third = 1 / 3;\n\nfunction quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n const scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n}\n\nexport default ShapeMap;","import Point from '../geometry/point';\nimport ShapeMap from './shape-map';\n\nconst SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\nconst SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\nconst MOVE = \"m\";\nconst CLOSE = \"z\";\n\nfunction parseParameters(str) {\n const parameters = [];\n str.replace(SPLIT_REGEX, function(match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n}\n\nfunction parsePath(pathInstance, str) {\n const position = new Point();\n let previousCommand;\n\n str.replace(SEGMENT_REGEX, (match, element, params, closePath) => {\n let command = element.toLowerCase();\n const isRelative = command === element;\n const parameters = parseParameters(params.trim());\n\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n\n pathInstance.moveTo(position.x, position.y);\n\n if (parameters.length > 2) {\n command = \"l\";\n parameters.splice(0, 2);\n }\n }\n\n if (ShapeMap[command]) {\n ShapeMap[command](\n pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n }\n );\n\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.close();\n }\n } else if (command !== MOVE) {\n throw new Error(\"Error while parsing SVG path. Unsupported command: \" + command);\n }\n\n previousCommand = command;\n });\n\n return pathInstance;\n}\n\nexport default parsePath;\n\n","import { support } from '../common';\n\n/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n// XXX: remove this junk (assume `true`) when we no longer have to support IE < 10\n// IE 9 (at least compatibility) reports having Uint8Array but the request response does not contain ArrayBuffer which results in missing table head error\nconst HAS_TYPED_ARRAYS = typeof Uint8Array !== 'undefined' && support.browser && (!support.browser.msie || support.browser.version > 9);\n\nconst BASE64 = (function(){\n var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return {\n decode: function(str) {\n var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"), i = 0, n = input.length, output = [];\n\n while (i < n) {\n var enc1 = keyStr.indexOf(input.charAt(i++));\n var enc2 = keyStr.indexOf(input.charAt(i++));\n var enc3 = keyStr.indexOf(input.charAt(i++));\n var enc4 = keyStr.indexOf(input.charAt(i++));\n\n var chr1 = (enc1 << 2) | (enc2 >>> 4);\n var chr2 = ((enc2 & 15) << 4) | (enc3 >>> 2);\n var chr3 = ((enc3 & 3) << 6) | enc4;\n\n output.push(chr1);\n if (enc3 != 64) {\n output.push(chr2);\n }\n if (enc4 != 64) {\n output.push(chr3);\n }\n }\n\n return output;\n },\n encode: function(bytes) {\n var i = 0, n = bytes.length;\n var output = \"\";\n\n while (i < n) {\n var chr1 = bytes[i++];\n var chr2 = bytes[i++];\n var chr3 = bytes[i++];\n\n var enc1 = chr1 >>> 2;\n var enc2 = ((chr1 & 3) << 4) | (chr2 >>> 4);\n var enc3 = ((chr2 & 15) << 2) | (chr3 >>> 6);\n var enc4 = chr3 & 63;\n\n if (i - n == 2) {\n enc3 = enc4 = 64;\n } else if (i - n == 1) {\n enc4 = 64;\n }\n\n output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n }\n return output;\n }\n };\n}());\n\nfunction BinaryStream(data) {\n var offset = 0, length = 0;\n if (data == null) {\n data = HAS_TYPED_ARRAYS ? new Uint8Array(256) : [];\n } else {\n length = data.length;\n }\n\n var ensure = HAS_TYPED_ARRAYS ? function(len) {\n if (len >= data.length) {\n var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n tmp.set(data, 0);\n data = tmp;\n }\n } : function() {};\n\n var get = HAS_TYPED_ARRAYS ? function() {\n return new Uint8Array(data.buffer, 0, length);\n } : function() {\n return data;\n };\n\n var write = HAS_TYPED_ARRAYS ? function(bytes) {\n if (typeof bytes == \"string\") {\n return writeString(bytes);\n }\n var len = bytes.length;\n ensure(offset + len);\n data.set(bytes, offset);\n offset += len;\n if (offset > length) {\n length = offset;\n }\n } : function(bytes) {\n if (typeof bytes == \"string\") {\n return writeString(bytes);\n }\n for (var i = 0; i < bytes.length; ++i) {\n writeByte(bytes[i]);\n }\n };\n\n var slice = HAS_TYPED_ARRAYS ? function(start, length) {\n if (data.buffer.slice) {\n return new Uint8Array(data.buffer.slice(start, start + length));\n } else {\n // IE10\n var x = new Uint8Array(length);\n x.set(new Uint8Array(data.buffer, start, length));\n return x;\n }\n } : function(start, length) {\n return data.slice(start, start + length);\n };\n\n function eof() {\n return offset >= length;\n }\n function readByte() {\n return offset < length ? data[offset++] : 0;\n }\n function writeByte(b) {\n ensure(offset);\n data[offset++] = b & 0xFF;\n if (offset > length) {\n length = offset;\n }\n }\n function readShort() {\n return (readByte() << 8) | readByte();\n }\n function writeShort(w) {\n writeByte(w >> 8);\n writeByte(w);\n }\n function readShort_() {\n var w = readShort();\n return w >= 0x8000 ? w - 0x10000 : w;\n }\n function writeShort_(w) {\n writeShort(w < 0 ? w + 0x10000 : w);\n }\n function readLong() {\n return (readShort() * 0x10000) + readShort();\n }\n function writeLong(w) {\n writeShort((w >>> 16) & 0xFFFF);\n writeShort(w & 0xFFFF);\n }\n function readLong_() {\n var w = readLong();\n return w >= 0x80000000 ? w - 0x100000000 : w;\n }\n function writeLong_(w) {\n writeLong(w < 0 ? w + 0x100000000 : w);\n }\n function readFixed() {\n return readLong() / 0x10000;\n }\n function writeFixed(f) {\n writeLong(Math.round(f * 0x10000));\n }\n function readFixed_() {\n return readLong_() / 0x10000;\n }\n function writeFixed_(f) {\n writeLong_(Math.round(f * 0x10000));\n }\n function read(len) {\n return times(len, readByte);\n }\n function readString(len) {\n return String.fromCharCode.apply(String, read(len));\n }\n function writeString(str) {\n for (var i = 0; i < str.length; ++i) {\n writeByte(str.charCodeAt(i));\n }\n }\n function times(n, reader) {\n for (var ret = new Array(n), i = 0; i < n; ++i) {\n ret[i] = reader();\n }\n return ret;\n }\n\n var stream = {\n eof : eof,\n readByte : readByte,\n writeByte : writeByte,\n readShort : readShort,\n writeShort : writeShort,\n readLong : readLong,\n writeLong : writeLong,\n readFixed : readFixed,\n writeFixed : writeFixed,\n\n // signed numbers.\n readShort_ : readShort_,\n writeShort_ : writeShort_,\n readLong_ : readLong_,\n writeLong_ : writeLong_,\n readFixed_ : readFixed_,\n writeFixed_ : writeFixed_,\n\n read : read,\n write : write,\n readString : readString,\n writeString : writeString,\n\n times : times,\n get : get,\n slice : slice,\n\n offset: function(pos) {\n if (pos != null) {\n offset = pos;\n return stream;\n }\n return offset;\n },\n\n skip: function(nbytes) {\n offset += nbytes;\n },\n\n toString: function() {\n throw new Error(\"FIX CALLER. BinaryStream is no longer convertible to string!\");\n },\n\n length: function() { return length; },\n\n saveExcursion: function(f) {\n var pos = offset;\n try {\n return f();\n } finally {\n offset = pos;\n }\n },\n\n writeBase64: function(base64) {\n if (window.atob) {\n writeString(window.atob(base64));\n } else {\n write(BASE64.decode(base64));\n }\n },\n base64: function() {\n return BASE64.encode(get());\n }\n };\n\n return stream;\n}\n\nfunction ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\n\nfunction ucs2encode(array) {\n return array.map(function(value){\n var output = \"\";\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += String.fromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n output += String.fromCharCode(value);\n return output;\n }).join(\"\");\n}\n\nfunction atobUint8Array(base64) {\n const data = window.atob(base64);\n const result = new Uint8Array(data.length);\n\n for (let idx = 0; idx < data.length; idx++) {\n result[idx] = data.charCodeAt(idx);\n }\n\n return result;\n}\n\nfunction createUint8Array(data) {\n const result = new Uint8Array(data.length);\n\n for (let idx = 0; idx < data.length; idx++) {\n result[idx] = data[idx];\n }\n\n return result;\n}\n\nfunction base64ToUint8Array(base64) {\n if (window.atob) {\n return atobUint8Array(base64);\n }\n\n return createUint8Array(BASE64.decode(base64));\n}\n\nexport {\n HAS_TYPED_ARRAYS,\n BASE64,\n BinaryStream,\n ucs2decode,\n ucs2encode,\n base64ToUint8Array\n};\n","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n/*****************************************************************************\\\n *\n * The code in this file, although written from scratch, is influenced by the\n * TrueType parser/encoder in PDFKit -- http://pdfkit.org/ (a CoffeeScript\n * library for producing PDF files).\n *\n * PDFKit is (c) Devon Govett 2014 and released under the MIT License.\n *\n\\*****************************************************************************/\n\nimport { BinaryStream, ucs2decode } from \"./utils\";\n\nfunction hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction sortedKeys(obj) {\n return Object.keys(obj).sort(function(a, b){ return a - b; }).map(parseFloat);\n}\n\n///\nclass Directory {\n constructor(data) {\n this.raw = data;\n this.scalerType = data.readLong();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n\n var tables = this.tables = {};\n for (var i = 0; i < this.tableCount; ++i) {\n var entry = {\n tag : data.readString(4),\n checksum : data.readLong(),\n offset : data.readLong(),\n length : data.readLong()\n };\n tables[entry.tag] = entry;\n }\n }\n\n readTable(name, Ctor) {\n var def = this.tables[name];\n if (!def) {\n throw new Error(\"Table \" + name + \" not found in directory\");\n }\n return (this[name] = def.table = new Ctor(this, def));\n }\n\n render(tables) {\n var tableCount = Object.keys(tables).length;\n\n var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n var searchRange = maxpow2 * 16;\n var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n var rangeShift = tableCount * 16 - searchRange;\n\n var out = BinaryStream();\n out.writeLong(this.scalerType);\n out.writeShort(tableCount);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n\n var directoryLength = tableCount * 16;\n var offset = out.offset() + directoryLength;\n var headOffset = null;\n var tableData = BinaryStream();\n\n for (var tag in tables) {\n if (hasOwnProperty(tables, tag)) {\n var table = tables[tag];\n\n out.writeString(tag);\n out.writeLong(this.checksum(table));\n out.writeLong(offset);\n out.writeLong(table.length);\n\n tableData.write(table);\n if (tag == \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n\n while (offset % 4) {\n tableData.writeByte(0);\n offset++;\n }\n }\n }\n\n out.write(tableData.get());\n var sum = this.checksum(out.get());\n var adjustment = 0xB1B0AFBA - sum;\n\n out.offset(headOffset + 8);\n out.writeLong(adjustment);\n return out.get();\n }\n\n checksum(data) {\n data = BinaryStream(data);\n var sum = 0;\n while (!data.eof()) {\n sum += data.readLong();\n }\n return sum & 0xFFFFFFFF;\n }\n}\n\nclass Table {\n constructor(file, def) {\n this.definition = def;\n this.length = def.length;\n this.offset = def.offset;\n this.file = file;\n this.rawData = file.raw;\n this.parse(file.raw);\n }\n\n raw() {\n return this.rawData.slice(this.offset, this.length);\n }\n\n parse() {} // abstract\n}\n\nclass HeadTable extends Table {\n parse(data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.revision = data.readLong();\n this.checkSumAdjustment = data.readLong();\n this.magicNumber = data.readLong();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.read(8);\n this.modified = data.read(8);\n\n this.xMin = data.readShort_();\n this.yMin = data.readShort_();\n this.xMax = data.readShort_();\n this.yMax = data.readShort_();\n\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort_();\n this.indexToLocFormat = data.readShort_();\n this.glyphDataFormat = data.readShort_();\n }\n\n render(indexToLocFormat) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeLong(this.revision);\n out.writeLong(0); // checksum adjustment; shall be computed later\n out.writeLong(this.magicNumber);\n out.writeShort(this.flags);\n out.writeShort(this.unitsPerEm);\n out.write(this.created);\n out.write(this.modified);\n out.writeShort_(this.xMin);\n out.writeShort_(this.yMin);\n out.writeShort_(this.xMax);\n out.writeShort_(this.yMax);\n out.writeShort(this.macStyle);\n out.writeShort(this.lowestRecPPEM);\n out.writeShort_(this.fontDirectionHint);\n out.writeShort_(indexToLocFormat); // this will depend on the `loca` table\n out.writeShort_(this.glyphDataFormat);\n return out.get();\n }\n}\n\nclass LocaTable extends Table {\n parse(data) {\n data.offset(this.offset);\n var format = this.file.head.indexToLocFormat;\n if (format === 0) {\n this.offsets = data.times(this.length / 2, function(){\n return 2 * data.readShort();\n });\n } else {\n this.offsets = data.times(this.length / 4, data.readLong);\n }\n }\n\n offsetOf(id) {\n return this.offsets[id];\n }\n\n lengthOf(id) {\n return this.offsets[id + 1] - this.offsets[id];\n }\n\n render(offsets) {\n var out = BinaryStream();\n var needsLongFormat = offsets[offsets.length - 1] > 0xFFFF;\n for (var i = 0; i < offsets.length; ++i) {\n if (needsLongFormat) {\n out.writeLong(offsets[i]);\n } else {\n out.writeShort(offsets[i] / 2);\n }\n }\n return {\n format: needsLongFormat ? 1 : 0,\n table: out.get()\n };\n }\n}\n\nclass HheaTable extends Table {\n parse(data) {\n data.offset(this.offset);\n\n this.version = data.readLong();\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort_();\n this.minRightSideBearing = data.readShort_();\n this.xMaxExtent = data.readShort_();\n this.caretSlopeRise = data.readShort_();\n this.caretSlopeRun = data.readShort_();\n this.caretOffset = data.readShort_();\n\n data.skip(4 * 2); // reserved\n\n this.metricDataFormat = data.readShort_();\n this.numOfLongHorMetrics = data.readShort();\n }\n\n render(ids) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort_(this.ascent);\n out.writeShort_(this.descent);\n out.writeShort_(this.lineGap);\n out.writeShort(this.advanceWidthMax);\n out.writeShort_(this.minLeftSideBearing);\n out.writeShort_(this.minRightSideBearing);\n out.writeShort_(this.xMaxExtent);\n out.writeShort_(this.caretSlopeRise);\n out.writeShort_(this.caretSlopeRun);\n out.writeShort_(this.caretOffset);\n\n out.write([ 0, 0, 0, 0, 0, 0, 0, 0 ]); // reserved bytes\n\n out.writeShort_(this.metricDataFormat);\n out.writeShort(ids.length);\n return out.get();\n }\n}\n\nclass MaxpTable extends Table {\n parse(data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.numGlyphs = data.readShort();\n this.maxPoints = data.readShort();\n this.maxContours = data.readShort();\n this.maxComponentPoints = data.readShort();\n this.maxComponentContours = data.readShort();\n this.maxZones = data.readShort();\n this.maxTwilightPoints = data.readShort();\n this.maxStorage = data.readShort();\n this.maxFunctionDefs = data.readShort();\n this.maxInstructionDefs = data.readShort();\n this.maxStackElements = data.readShort();\n this.maxSizeOfInstructions = data.readShort();\n this.maxComponentElements = data.readShort();\n this.maxComponentDepth = data.readShort();\n }\n\n render(glyphIds) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort(glyphIds.length);\n out.writeShort(this.maxPoints);\n out.writeShort(this.maxContours);\n out.writeShort(this.maxComponentPoints);\n out.writeShort(this.maxComponentContours);\n out.writeShort(this.maxZones);\n out.writeShort(this.maxTwilightPoints);\n out.writeShort(this.maxStorage);\n out.writeShort(this.maxFunctionDefs);\n out.writeShort(this.maxInstructionDefs);\n out.writeShort(this.maxStackElements);\n out.writeShort(this.maxSizeOfInstructions);\n out.writeShort(this.maxComponentElements);\n out.writeShort(this.maxComponentDepth);\n return out.get();\n }\n}\n\nclass HmtxTable extends Table {\n parse(data) {\n data.offset(this.offset);\n var dir = this.file, hhea = dir.hhea;\n this.metrics = data.times(hhea.numOfLongHorMetrics, function(){\n return {\n advance: data.readShort(),\n lsb: data.readShort_()\n };\n });\n var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n this.leftSideBearings = data.times(lsbCount, data.readShort_);\n }\n\n forGlyph(id) {\n var metrics = this.metrics;\n var n = metrics.length;\n if (id < n) {\n return metrics[id];\n }\n return {\n advance: metrics[n - 1].advance,\n lsb: this.leftSideBearings[id - n]\n };\n }\n\n render(glyphIds) {\n var out = BinaryStream();\n for (var i = 0; i < glyphIds.length; ++i) {\n var m = this.forGlyph(glyphIds[i]);\n out.writeShort(m.advance);\n out.writeShort_(m.lsb);\n }\n return out.get();\n }\n}\n\nvar GlyfTable = (function(){\n class SimpleGlyph {\n get compound() {\n return false;\n }\n\n constructor(raw) {\n this.raw = raw;\n }\n\n render() {\n return this.raw.get();\n }\n }\n\n var ARG_1_AND_2_ARE_WORDS = 0x0001;\n var WE_HAVE_A_SCALE = 0x0008;\n var MORE_COMPONENTS = 0x0020;\n var WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n var WE_HAVE_A_TWO_BY_TWO = 0x0080;\n //var WE_HAVE_INSTRUCTIONS = 0x0100;\n\n class CompoundGlyph {\n get compound() {\n return true;\n }\n\n constructor(data) {\n this.raw = data;\n var ids = this.glyphIds = [];\n var offsets = this.idOffsets = [];\n while (true) { // eslint-disable-line no-constant-condition\n var flags = data.readShort();\n offsets.push(data.offset());\n ids.push(data.readShort());\n\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n\n data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.skip(8);\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.skip(4);\n } else if (flags & WE_HAVE_A_SCALE) {\n data.skip(2);\n }\n }\n }\n\n render(old2new) {\n var out = BinaryStream(this.raw.get());\n for (var i = 0; i < this.glyphIds.length; ++i) {\n var id = this.glyphIds[i];\n out.offset(this.idOffsets[i]);\n out.writeShort(old2new[id]);\n }\n return out.get();\n }\n }\n\n return class extends Table {\n parse() {\n this.cache = {};\n }\n\n glyphFor(id) {\n var cache = this.cache;\n if (hasOwnProperty(cache, id)) {\n return cache[id];\n }\n\n var loca = this.file.loca;\n var length = loca.lengthOf(id);\n\n if (length === 0) {\n return (cache[id] = null);\n }\n\n var data = this.rawData;\n var offset = this.offset + loca.offsetOf(id);\n var raw = BinaryStream(data.slice(offset, length));\n\n var numberOfContours = raw.readShort_();\n var xMin = raw.readShort_();\n var yMin = raw.readShort_();\n var xMax = raw.readShort_();\n var yMax = raw.readShort_();\n\n var glyph = cache[id] = numberOfContours < 0 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n\n glyph.numberOfContours = numberOfContours;\n glyph.xMin = xMin;\n glyph.yMin = yMin;\n glyph.xMax = xMax;\n glyph.yMax = yMax;\n\n return glyph;\n }\n\n render(glyphs, oldIds, old2new) {\n var out = BinaryStream(), offsets = [];\n for (var i = 0; i < oldIds.length; ++i) {\n var id = oldIds[i];\n var glyph = glyphs[id];\n if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n if (glyph) {\n out.write(glyph.render(old2new));\n }\n }\n if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n return {\n table: out.get(),\n offsets: offsets\n };\n }\n };\n}());\n\nvar NameTable = (function(){\n class NameEntry {\n constructor(text, entry) {\n this.text = text;\n this.length = text.length;\n this.platformID = entry.platformID;\n this.platformSpecificID = entry.platformSpecificID;\n this.languageID = entry.languageID;\n this.nameID = entry.nameID;\n }\n }\n\n return class extends Table {\n parse(data) {\n data.offset(this.offset);\n data.readShort(); // format\n var count = data.readShort();\n var stringOffset = this.offset + data.readShort();\n var nameRecords = data.times(count, function(){\n return {\n platformID : data.readShort(),\n platformSpecificID : data.readShort(),\n languageID : data.readShort(),\n nameID : data.readShort(),\n length : data.readShort(),\n offset : data.readShort() + stringOffset\n };\n });\n var strings = this.strings = {};\n for (var i = 0; i < nameRecords.length; ++i) {\n var rec = nameRecords[i];\n data.offset(rec.offset);\n var text = data.readString(rec.length);\n if (!strings[rec.nameID]) {\n strings[rec.nameID] = [];\n }\n strings[rec.nameID].push(new NameEntry(text, rec));\n }\n this.postscriptEntry = strings[6][0];\n this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, \"\");\n }\n\n render(psName) {\n var strings = this.strings;\n var strCount = 0;\n for (var i in strings) {\n if (hasOwnProperty(strings, i)) {\n strCount += strings[i].length;\n }\n }\n var out = BinaryStream();\n var strTable = BinaryStream();\n\n out.writeShort(0); // format\n out.writeShort(strCount);\n out.writeShort(6 + 12 * strCount); // stringOffset\n\n for (i in strings) {\n if (hasOwnProperty(strings, i)) {\n var list = i == 6 ? [\n new NameEntry(psName, this.postscriptEntry)\n ] : strings[i];\n for (var j = 0; j < list.length; ++j) {\n var str = list[j];\n out.writeShort(str.platformID);\n out.writeShort(str.platformSpecificID);\n out.writeShort(str.languageID);\n out.writeShort(str.nameID);\n out.writeShort(str.length);\n out.writeShort(strTable.offset());\n\n strTable.writeString(str.text);\n }\n }\n }\n\n out.write(strTable.get());\n\n return out.get();\n }\n };\n})();\n\nvar PostTable = (function(){\n var POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat\".split(/\\s+/g);\n\n return class extends Table {\n parse(data) {\n data.offset(this.offset);\n\n this.format = data.readLong();\n this.italicAngle = data.readFixed_();\n this.underlinePosition = data.readShort_();\n this.underlineThickness = data.readShort_();\n this.isFixedPitch = data.readLong();\n this.minMemType42 = data.readLong();\n this.maxMemType42 = data.readLong();\n this.minMemType1 = data.readLong();\n this.maxMemType1 = data.readLong();\n\n var numberOfGlyphs;\n\n switch (this.format) {\n case 0x00010000:\n case 0x00030000:\n break;\n\n case 0x00020000:\n numberOfGlyphs = data.readShort();\n this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n this.names = [];\n var limit = this.offset + this.length;\n while (data.offset() < limit) {\n this.names.push(data.readString(data.readByte()));\n }\n break;\n\n case 0x00025000:\n numberOfGlyphs = data.readShort();\n this.offsets = data.read(numberOfGlyphs);\n break;\n\n case 0x00040000:\n this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n break;\n }\n }\n\n glyphFor(code) {\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || \".notdef\";\n\n case 0x00020000:\n var index = this.glyphNameIndex[code];\n if (index < POSTSCRIPT_GLYPHS.length) {\n return POSTSCRIPT_GLYPHS[index];\n }\n return this.names[index - POSTSCRIPT_GLYPHS.length] || \".notdef\";\n\n case 0x00025000:\n\n case 0x00030000:\n return \".notdef\";\n\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n }\n\n render(mapping) {\n if (this.format == 0x00030000) {\n return this.raw();\n }\n\n // keep original header, but set format to 2.0\n var out = BinaryStream(this.rawData.slice(this.offset, 32));\n out.writeLong(0x00020000);\n out.offset(32);\n\n var indexes = [];\n var strings = [];\n\n for (var i = 0; i < mapping.length; ++i) {\n var id = mapping[i];\n var post = this.glyphFor(id);\n var index = POSTSCRIPT_GLYPHS.indexOf(post);\n if (index >= 0) {\n indexes.push(index);\n } else {\n indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n strings.push(post);\n }\n }\n\n out.writeShort(mapping.length);\n\n for (i = 0; i < indexes.length; ++i) {\n out.writeShort(indexes[i]);\n }\n\n for (i = 0; i < strings.length; ++i) {\n out.writeByte(strings[i].length);\n out.writeString(strings[i]);\n }\n\n return out.get();\n }\n };\n})();\n\nvar CmapTable = (function(){\n class CmapEntry {\n constructor(data, offset, codeMap) {\n var self = this;\n self.platformID = data.readShort();\n self.platformSpecificID = data.readShort();\n self.offset = offset + data.readLong();\n\n data.saveExcursion(function(){\n var code;\n data.offset(self.offset);\n self.format = data.readShort();\n\n switch (self.format) {\n case 0:\n self.length = data.readShort();\n self.language = data.readShort();\n for (var i = 0; i < 256; ++i) {\n codeMap[i] = data.readByte();\n }\n break;\n\n case 4:\n self.length = data.readShort();\n self.language = data.readShort();\n var segCount = data.readShort() / 2;\n\n data.skip(6); // searchRange, entrySelector, rangeShift\n var endCode = data.times(segCount, data.readShort);\n data.skip(2); // reserved pad\n var startCode = data.times(segCount, data.readShort);\n var idDelta = data.times(segCount, data.readShort_);\n var idRangeOffset = data.times(segCount, data.readShort);\n\n var count = (self.length + self.offset - data.offset()) / 2;\n var glyphIds = data.times(count, data.readShort);\n\n for (i = 0; i < segCount; ++i) {\n var start = startCode[i], end = endCode[i];\n for (code = start; code <= end; ++code) {\n var glyphId;\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n ///\n // When non-zero, idRangeOffset contains for each segment the byte offset of the Glyph ID\n // into the glyphIds table, from the *current* `i` cell of idRangeOffset. In other words,\n // this offset spans from the first into the second array. This works, because the arrays\n // are consecutive in the TTF file:\n //\n // [ ...idRangeOffset... ][ ...glyphIds... ]\n // ...... 48 ...... .... ID ....\n // ^----- 48 bytes -----^\n //\n // (but I can't stop wondering why is it not just a plain index, possibly incremented by 1\n // so that we can have that special `zero` value.)\n //\n // The elements of idRangeOffset are even numbers, because both arrays contain 16-bit words,\n // yet the offset is in bytes. That is why we divide it by 2. Then we subtract the\n // remaining segments (segCount-i), and add the code-start offset, to which we need to add\n // the corresponding delta to get the actual glyph ID.\n ///\n var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n codeMap[code] = glyphId & 0xFFFF;\n }\n }\n break;\n\n case 6:\n self.length = data.readShort();\n self.language = data.readShort();\n code = data.readShort();\n var length = data.readShort();\n while (length-- > 0) {\n codeMap[code++] = data.readShort();\n }\n break;\n\n case 12:\n data.readShort(); // reserved\n self.length = data.readLong();\n self.language = data.readLong();\n var ngroups = data.readLong();\n while (ngroups-- > 0) {\n code = data.readLong();\n var endCharCode = data.readLong();\n var glyphCode = data.readLong();\n while (code <= endCharCode) {\n codeMap[code++] = glyphCode++;\n }\n }\n break;\n\n default:\n if (window.console) {\n window.console.error(\"Unhandled CMAP format: \" + self.format);\n }\n }\n });\n }\n }\n\n function renderCharmap(ncid2ogid, ogid2ngid) {\n var codes = sortedKeys(ncid2ogid);\n var startCodes = [];\n var endCodes = [];\n var last = null;\n var diff = null;\n\n function new_gid(charcode) {\n return ogid2ngid[ncid2ogid[charcode]];\n }\n\n for (var i = 0; i < codes.length; ++i) {\n var code = codes[i];\n var gid = new_gid(code);\n var delta = gid - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xFFFF);\n startCodes.push(0xFFFF);\n\n var segCount = startCodes.length;\n var segCountX2 = segCount * 2;\n var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n var rangeShift = segCountX2 - searchRange;\n\n var deltas = [];\n var rangeOffsets = [];\n var glyphIds = [];\n\n for (i = 0; i < segCount; ++i) {\n var startCode = startCodes[i];\n var endCode = endCodes[i];\n if (startCode == 0xFFFF) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n var startGlyph = new_gid(startCode);\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n for (var j = startCode; j <= endCode; ++j) {\n glyphIds.push(new_gid(j));\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n\n var out = BinaryStream();\n\n out.writeShort(3); // platformID\n out.writeShort(1); // platformSpecificID\n out.writeLong(12); // offset\n out.writeShort(4); // format\n out.writeShort(16 + segCount * 8 + glyphIds.length * 2); // length\n out.writeShort(0); // language\n out.writeShort(segCountX2);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n\n endCodes.forEach(out.writeShort);\n out.writeShort(0); // reserved pad\n startCodes.forEach(out.writeShort);\n deltas.forEach(out.writeShort_);\n rangeOffsets.forEach(out.writeShort);\n glyphIds.forEach(out.writeShort);\n\n return out.get();\n }\n\n return class extends Table {\n parse(data) {\n var self = this;\n var offset = self.offset;\n data.offset(offset);\n self.codeMap = {};\n self.version = data.readShort();\n var tableCount = data.readShort();\n self.tables = data.times(tableCount, function(){\n return new CmapEntry(data, offset, self.codeMap);\n });\n }\n\n static render(ncid2ogid, ogid2ngid) {\n var out = BinaryStream();\n out.writeShort(0); // version\n out.writeShort(1); // tableCount\n out.write(renderCharmap(ncid2ogid, ogid2ngid));\n return out.get();\n }\n };\n\n})();\n\nclass OS2Table extends Table {\n parse(data) {\n data.offset(this.offset);\n this.version = data.readShort();\n this.averageCharWidth = data.readShort_();\n this.weightClass = data.readShort();\n this.widthClass = data.readShort();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort_();\n this.ySubscriptYSize = data.readShort_();\n this.ySubscriptXOffset = data.readShort_();\n this.ySubscriptYOffset = data.readShort_();\n this.ySuperscriptXSize = data.readShort_();\n this.ySuperscriptYSize = data.readShort_();\n this.ySuperscriptXOffset = data.readShort_();\n this.ySuperscriptYOffset = data.readShort_();\n this.yStrikeoutSize = data.readShort_();\n this.yStrikeoutPosition = data.readShort_();\n this.familyClass = data.readShort_();\n\n this.panose = data.times(10, data.readByte);\n this.charRange = data.times(4, data.readLong);\n\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n\n if (this.version > 0) {\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = data.times(2, data.readLong);\n\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n this.maxContext = data.readShort();\n }\n }\n }\n\n render() {\n return this.raw();\n }\n}\n\nvar subsetTag = 100000;\n\nfunction nextSubsetTag() {\n var ret = \"\", n = String(subsetTag);\n for (var i = 0; i < n.length; ++i) {\n ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n }\n ++subsetTag;\n return ret;\n}\n\nclass Subfont {\n constructor(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.ogid2ngid = { 0: 0 };\n this.ngid2ogid = { 0: 0 };\n this.ncid2ogid = {};\n this.next = this.firstChar = 1;\n this.nextGid = 1;\n this.psName = nextSubsetTag() + \"+\" + this.font.psName;\n }\n\n use(ch) {\n var self = this;\n if (typeof ch == \"string\") {\n return ucs2decode(ch).reduce(function(ret, code){\n return ret + String.fromCharCode(self.use(code));\n }, \"\");\n }\n var code = self.unicodes[ch];\n if (!code) {\n code = self.next++;\n self.subset[code] = ch;\n self.unicodes[ch] = code;\n\n // generate new GID (glyph ID) and maintain newGID ->\n // oldGID and back mappings\n var old_gid = self.font.cmap.codeMap[ch];\n if (old_gid) {\n self.ncid2ogid[code] = old_gid;\n if (self.ogid2ngid[old_gid] == null) {\n var new_gid = self.nextGid++;\n self.ogid2ngid[old_gid] = new_gid;\n self.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n return code;\n }\n\n encodeText(text) {\n return this.use(text);\n }\n\n glyphIds() {\n return sortedKeys(this.ogid2ngid);\n }\n\n glyphsFor(glyphIds, result) {\n if (!result) {\n result = {};\n }\n for (var i = 0; i < glyphIds.length; ++i) {\n var id = glyphIds[i];\n if (!result[id]) {\n var glyph = result[id] = this.font.glyf.glyphFor(id);\n if (glyph && glyph.compound) {\n this.glyphsFor(glyph.glyphIds, result);\n }\n }\n }\n return result;\n }\n\n render() {\n var glyphs = this.glyphsFor(this.glyphIds());\n\n // add missing sub-glyphs\n for (var old_gid in glyphs) {\n if (hasOwnProperty(glyphs, old_gid)) {\n old_gid = parseInt(old_gid, 10);\n if (this.ogid2ngid[old_gid] == null) {\n var new_gid = this.nextGid++;\n this.ogid2ngid[old_gid] = new_gid;\n this.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n\n // must obtain old_gid_ids in an order matching sorted\n // new_gid_ids\n var new_gid_ids = sortedKeys(this.ngid2ogid);\n var old_gid_ids = new_gid_ids.map(function(id){\n return this.ngid2ogid[id];\n }, this);\n\n var font = this.font;\n var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n var loca = font.loca.render(glyf.offsets);\n\n this.lastChar = this.next - 1;\n\n var tables = {\n \"cmap\" : CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n \"glyf\" : glyf.table,\n \"loca\" : loca.table,\n \"hmtx\" : font.hmtx.render(old_gid_ids),\n \"hhea\" : font.hhea.render(old_gid_ids),\n \"maxp\" : font.maxp.render(old_gid_ids),\n \"post\" : font.post.render(old_gid_ids),\n \"name\" : font.name.render(this.psName),\n \"head\" : font.head.render(loca.format),\n \"OS/2\" : font.os2.render()\n };\n\n return this.font.directory.render(tables);\n }\n\n cidToGidMap() {\n var out = BinaryStream(), len = 0;\n for (var cid = this.firstChar; cid < this.next; ++cid) {\n while (len < cid) {\n out.writeShort(0);\n len++;\n }\n var old_gid = this.ncid2ogid[cid];\n if (old_gid) {\n var new_gid = this.ogid2ngid[old_gid];\n out.writeShort(new_gid);\n } else {\n out.writeShort(0);\n }\n len++;\n }\n return out.get();\n }\n}\n\nclass TTFFont {\n constructor(rawData, name) {\n var self = this;\n var data = self.contents = BinaryStream(rawData);\n if (data.readString(4) == \"ttcf\") {\n var offset;\n const parse = function() {\n data.offset(offset);\n self.parse();\n };\n if (!name) {\n throw new Error(\"Must specify a name for TTC files\");\n }\n data.readLong(); // version\n var numFonts = data.readLong();\n for (var i = 0; i < numFonts; ++i) {\n offset = data.readLong();\n data.saveExcursion(parse);\n if (self.psName == name) {\n return;\n }\n }\n throw new Error(\"Font \" + name + \" not found in collection\");\n } else {\n data.offset(0);\n self.parse();\n }\n }\n\n parse() {\n var dir = this.directory = new Directory(this.contents);\n\n this.head = dir.readTable(\"head\", HeadTable);\n this.loca = dir.readTable(\"loca\", LocaTable);\n this.hhea = dir.readTable(\"hhea\", HheaTable);\n this.maxp = dir.readTable(\"maxp\", MaxpTable);\n this.hmtx = dir.readTable(\"hmtx\", HmtxTable);\n this.glyf = dir.readTable(\"glyf\", GlyfTable);\n this.name = dir.readTable(\"name\", NameTable);\n this.post = dir.readTable(\"post\", PostTable);\n this.cmap = dir.readTable(\"cmap\", CmapTable);\n this.os2 = dir.readTable(\"OS/2\", OS2Table);\n\n this.psName = this.name.postscriptName;\n this.ascent = this.os2.ascent || this.hhea.ascent;\n this.descent = this.os2.descent || this.hhea.descent;\n this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n this.scale = 1000 / this.head.unitsPerEm;\n }\n\n widthOfGlyph(glyph) {\n return this.hmtx.forGlyph(glyph).advance * this.scale;\n }\n\n makeSubset() {\n return new Subfont(this);\n }\n}\n\nexport { TTFFont };\n","import { deflate as pakoDeflate } from '@progress/pako-esm';\n\nexport const deflate = pakoDeflate;\n\nexport function supportsDeflate() {\n return true;\n}\n\n","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\nimport { BinaryStream, ucs2encode, base64ToUint8Array, HAS_TYPED_ARRAYS } from \"./utils\";\nimport { support } from '../common';\nimport { TTFFont } from \"./ttf\";\nimport { deflate, supportsDeflate } from './deflate';\nimport { encodeUTF16BE, BOM } from \"../util/encode-utf\";\nimport { encodeBase64 } from \"../util\";\n\nconst browser = support.browser;\nconst NL = \"\\n\";\n\nvar RESOURCE_COUNTER = 0;\n\nconst PAPER_SIZE = {\n a0 : [ 2383.94 , 3370.39 ],\n a1 : [ 1683.78 , 2383.94 ],\n a2 : [ 1190.55 , 1683.78 ],\n a3 : [ 841.89 , 1190.55 ],\n a4 : [ 595.28 , 841.89 ],\n a5 : [ 419.53 , 595.28 ],\n a6 : [ 297.64 , 419.53 ],\n a7 : [ 209.76 , 297.64 ],\n a8 : [ 147.40 , 209.76 ],\n a9 : [ 104.88 , 147.40 ],\n a10 : [ 73.70 , 104.88 ],\n b0 : [ 2834.65 , 4008.19 ],\n b1 : [ 2004.09 , 2834.65 ],\n b2 : [ 1417.32 , 2004.09 ],\n b3 : [ 1000.63 , 1417.32 ],\n b4 : [ 708.66 , 1000.63 ],\n b5 : [ 498.90 , 708.66 ],\n b6 : [ 354.33 , 498.90 ],\n b7 : [ 249.45 , 354.33 ],\n b8 : [ 175.75 , 249.45 ],\n b9 : [ 124.72 , 175.75 ],\n b10 : [ 87.87 , 124.72 ],\n c0 : [ 2599.37 , 3676.54 ],\n c1 : [ 1836.85 , 2599.37 ],\n c2 : [ 1298.27 , 1836.85 ],\n c3 : [ 918.43 , 1298.27 ],\n c4 : [ 649.13 , 918.43 ],\n c5 : [ 459.21 , 649.13 ],\n c6 : [ 323.15 , 459.21 ],\n c7 : [ 229.61 , 323.15 ],\n c8 : [ 161.57 , 229.61 ],\n c9 : [ 113.39 , 161.57 ],\n c10 : [ 79.37 , 113.39 ],\n executive : [ 521.86 , 756.00 ],\n folio : [ 612.00 , 936.00 ],\n legal : [ 612.00 , 1008.00 ],\n letter : [ 612.00 , 792.00 ],\n tabloid : [ 792.00 , 1224.00 ]\n};\n\nfunction makeOutput() {\n var indentLevel = 0, output = BinaryStream();\n function out() {\n for (var i = 0; i < arguments.length; ++i) {\n var x = arguments[i];\n if (x === undefined) {\n throw new Error(\"Cannot output undefined to PDF\");\n }\n else if (x instanceof PDFValue) {\n x.beforeRender(out);\n x.render(out);\n }\n else if (isArray(x)) {\n renderArray(x, out);\n }\n else if (isDate(x)) {\n renderDate(x, out);\n }\n else if (typeof x == \"number\") {\n if (isNaN(x)) {\n throw new Error(\"Cannot output NaN to PDF\");\n }\n // make sure it doesn't end up in exponent notation\n var num = x.toFixed(7);\n if (num.indexOf(\".\") >= 0) {\n num = num.replace(/\\.?0+$/, \"\");\n }\n if (num == \"-0\") {\n num = \"0\";\n }\n output.writeString(num);\n }\n else if (/string|boolean/.test(typeof x)) {\n output.writeString(String(x));\n }\n else if (typeof x.get == \"function\") {\n output.write(x.get());\n }\n else if (typeof x == \"object\") {\n if (!x) {\n output.writeString(\"null\");\n } else {\n out(new PDFDictionary(x));\n }\n }\n }\n }\n out.writeData = function(data) {\n output.write(data);\n };\n out.withIndent = function(f) {\n ++indentLevel;\n f(out);\n --indentLevel;\n };\n out.indent = function() {\n out(NL, pad(\"\", indentLevel * 2, \" \"));\n out.apply(null, arguments);\n };\n out.offset = function() {\n return output.offset();\n };\n out.toString = function() {\n throw new Error(\"FIX CALLER\");\n };\n out.get = function() {\n return output.get();\n };\n out.stream = function() {\n return output;\n };\n return out;\n}\n\nfunction wrapObject(value, id) {\n var beforeRender = value.beforeRender;\n var renderValue = value.render;\n\n value.beforeRender = function(){};\n\n value.render = function(out) {\n out(id, \" 0 R\");\n };\n\n value.renderFull = function(out) {\n value._offset = out.offset();\n out(id, \" 0 obj \");\n beforeRender.call(value, out);\n renderValue.call(value, out);\n out(\" endobj\");\n };\n}\n\nfunction getPaperOptions(getOption) {\n if (typeof getOption != \"function\") {\n var options = getOption;\n getOption = function(key, def) {\n return key in options ? options[key] : def;\n };\n }\n var paperSize = getOption(\"paperSize\", PAPER_SIZE.a4);\n if (!paperSize) {\n return {};\n }\n if (typeof paperSize == \"string\") {\n paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n if (paperSize == null) {\n throw new Error(\"Unknown paper size\");\n }\n }\n\n paperSize[0] = unitsToPoints(paperSize[0]);\n paperSize[1] = unitsToPoints(paperSize[1]);\n\n if (getOption(\"landscape\", false)) {\n paperSize = [\n Math.max(paperSize[0], paperSize[1]),\n Math.min(paperSize[0], paperSize[1])\n ];\n }\n\n var margin = getOption(\"margin\");\n if (margin) {\n if (typeof margin == \"string\" || typeof margin == \"number\") {\n margin = unitsToPoints(margin, 0);\n margin = { left: margin, top: margin, right: margin, bottom: margin };\n } else {\n margin = {\n left : unitsToPoints(margin.left, 0),\n top : unitsToPoints(margin.top, 0),\n right : unitsToPoints(margin.right, 0),\n bottom : unitsToPoints(margin.bottom, 0)\n };\n }\n if (getOption(\"addMargin\")) {\n paperSize[0] += margin.left + margin.right;\n paperSize[1] += margin.top + margin.bottom;\n }\n }\n return { paperSize: paperSize, margin: margin };\n}\n\nvar FONT_CACHE = {\n \"Times-Roman\" : true,\n \"Times-Bold\" : true,\n \"Times-Italic\" : true,\n \"Times-BoldItalic\" : true,\n \"Helvetica\" : true,\n \"Helvetica-Bold\" : true,\n \"Helvetica-Oblique\" : true,\n \"Helvetica-BoldOblique\" : true,\n \"Courier\" : true,\n \"Courier-Bold\" : true,\n \"Courier-Oblique\" : true,\n \"Courier-BoldOblique\" : true,\n \"Symbol\" : true,\n \"ZapfDingbats\" : true\n};\n\nfunction loadBinary(url, cont) {\n // IE throws Accesss denied error for Data URIs\n let m;\n if (browser.msie && (m = /^data:.*?;base64,/i.exec(url))) {\n cont(base64ToUint8Array(url.substr(m[0].length)));\n return;\n }\n\n function error() {\n if (window.console) {\n if (window.console.error) {\n window.console.error(\"Cannot load URL: %s\", url);\n } else {\n window.console.log(\"Cannot load URL: %s\", url);\n }\n }\n cont(null);\n }\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n if (HAS_TYPED_ARRAYS) {\n req.responseType = \"arraybuffer\";\n }\n req.onload = function() {\n if (req.status == 200 || req.status == 304) {\n if (HAS_TYPED_ARRAYS) {\n cont(new Uint8Array(req.response));\n } else {\n cont(new window.VBArray(req.responseBody).toArray()); // IE9 only\n }\n } else {\n error();\n }\n };\n req.onerror = error;\n req.send(null);\n}\n\nfunction loadFont(url, cont) {\n var font = FONT_CACHE[url];\n if (font) {\n cont(font);\n } else {\n loadBinary(url, function(data){\n if (data == null) {\n throw new Error(\"Cannot load font from \" + url);\n } else {\n var font = new TTFFont(data);\n FONT_CACHE[url] = font;\n cont(font);\n }\n });\n }\n}\n\nvar IMAGE_CACHE = {};\n\nfunction clearImageCache() {\n IMAGE_CACHE = {};\n}\n\nfunction loadImage(url, size, cont, options) {\n var img = IMAGE_CACHE[url], bloburl, blob;\n if (img) {\n cont(img);\n } else {\n img = new Image();\n if (!(/^data:/i.test(url))) {\n img.crossOrigin = \"Anonymous\";\n }\n if (HAS_TYPED_ARRAYS && !(/^data:/i.test(url))) {\n // IE10 fails to load images from another domain even when the server sends the\n // proper CORS headers. a XHR, however, will be able to load the data.\n // http://stackoverflow.com/a/19734516/154985\n //\n // On the other hand, it's worth doing it this way for all browsers which support\n // responseType = \"blob\" (HAS_TYPED_ARRAYS will be true), because we can inspect the\n // mime type and if it's a JPEG (very common case) we can save a lot of time in\n // _load below.\n var xhr = new XMLHttpRequest();\n xhr.onload = function() {\n blob = xhr.response;\n if (browser.mozilla && blob.type == \"image/svg+xml\") {\n // Firefox won't render SVGs that don't contain width and height attributes.\n let reader = new FileReader();\n reader.onload = function() {\n let doc = new window.DOMParser().parseFromString(this.result, \"image/svg+xml\");\n let svg = doc.documentElement;\n if (svg.getAttribute(\"width\") && svg.getAttribute(\"height\")) {\n // we're good, continue with the existing blob.\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n } else {\n svg.setAttribute(\"width\", size.width);\n svg.setAttribute(\"height\", size.height);\n let xml = new window.XMLSerializer().serializeToString(svg);\n let dataURL = `data:image/svg+xml;base64,${encodeBase64(xml)}`;\n _load(dataURL);\n }\n };\n reader.readAsText(blob);\n } else {\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n }\n };\n xhr.onerror = _onerror;\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n _load(url);\n }\n }\n\n function _load(url) {\n img.src = url;\n if (img.complete && !browser.msie) {\n // IE, bless its little heart, says img.complete == true even though the image is\n // not loaded (width=0), therefore we must go the onload route (ticket 929635).\n _onload.call(img);\n } else {\n img.onload = _onload;\n img.onerror = _onerror;\n }\n }\n\n function _trycanvas() {\n if (!size) {\n size = { width: img.width, height: img.height };\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = size.width;\n canvas.height = size.height;\n\n var ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0, size.width, size.height);\n\n var imgdata;\n try {\n imgdata = ctx.getImageData(0, 0, size.width, size.height);\n } catch (ex) {\n // it tainted the canvas -- can't draw it.\n _onerror();\n return;\n } finally {\n if (bloburl) {\n URL.revokeObjectURL(bloburl);\n }\n }\n\n // in case it contains transparency, we must separate rgb data from the alpha\n // channel and create a PDFRawImage image with opacity. otherwise we can use a\n // PDFJpegImage.\n //\n // to do this in one step, we create the rgb and alpha streams anyway, even if\n // we might end up not using them if hasAlpha remains false.\n\n var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n var rawbytes = imgdata.data;\n var i = 0;\n while (i < rawbytes.length) {\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n var a = rawbytes[i++];\n if (a < 255) {\n hasAlpha = true;\n }\n alpha.writeByte(a);\n }\n\n if (hasAlpha || options.keepPNG) {\n img = new PDFRawImage(size.width, size.height, rgb, alpha);\n } else {\n // no transparency, encode as JPEG.\n var data = canvas.toDataURL(\"image/jpeg\", options.jpegQuality);\n data = data.substr(data.indexOf(\";base64,\") + 8);\n\n var stream = BinaryStream();\n stream.writeBase64(data);\n img = new PDFJpegImage(stream);\n }\n\n cont(IMAGE_CACHE[url] = img);\n }\n\n function _onerror() {\n cont(IMAGE_CACHE[url] = \"ERROR\");\n }\n\n function _onload() {\n if (size) {\n const svg = (blob && blob.type === 'image/svg+xml') || (\n /^data:image\\/svg\\+xml;/i.test(this.src.substring(0, 19))\n );\n\n const upscale = size.width >= img.width || size.height >= img.height;\n\n // Use the original image if requested size is bigger than the source,\n // unless it's an SVG that can be upscaled.\n if (!svg && upscale) {\n size = null;\n }\n }\n if (!size && blob && /^image\\/jpe?g$/i.test(blob.type)) {\n // If we know we got a JPEG, we can skip the process of rendering it to a\n // canvas, getting the pixel data, searching for transparency we know we won't\n // find, getting back a data URI and then decoding the BASE64 to finally get the\n // binary we already have. Also, we avoid downgrading the image quality, with\n // the possible drawback of making a bigger PDF; still, seems legit.\n //\n // Besides saving a lot of work, this also reuses the buffer memory\n // (BinaryStream does not create a copy), potentially saving some GC cycles.\n let reader = new FileReader();\n reader.onload = function() {\n try {\n let img = new PDFJpegImage(BinaryStream(new Uint8Array(this.result)));\n URL.revokeObjectURL(bloburl);\n cont(IMAGE_CACHE[url] = img);\n } catch (ex) {\n // if there's an error parsing the JPEG stream, it could be due to a\n // misconfigured server (improper content-type:\n // https://github.com/telerik/kendo-ui-core/issues/4184). If that's the case,\n // the canvas will still be able to draw it.\n _trycanvas();\n }\n };\n reader.readAsArrayBuffer(blob);\n } else {\n _trycanvas();\n }\n }\n}\n\nfunction manyLoader(loadOne) {\n return function(urls, callback) {\n var n = urls.length, i = n;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n while (i-- > 0) {\n loadOne(urls[i], next);\n }\n };\n}\n\nvar loadFonts = manyLoader(loadFont);\nvar loadImages = function(images, callback, options) {\n options = Object.assign({\n jpegQuality : 0.92,\n keepPNG : false\n }, options);\n var urls = Object.keys(images), n = urls.length;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n urls.forEach(function(url){\n loadImage(url, images[url], next, options);\n });\n};\n\nclass PDFDocument {\n constructor (options) {\n var self = this;\n var out = makeOutput();\n var objcount = 0;\n var objects = [];\n\n function getOption(name, defval) {\n return (options && options[name] != null) ? options[name] : defval;\n }\n\n self.getOption = getOption;\n\n self.attach = function(value) {\n if (objects.indexOf(value) < 0) {\n wrapObject(value, ++objcount);\n objects.push(value);\n }\n return value;\n };\n\n self.pages = [];\n\n self.FONTS = {};\n self.IMAGES = {};\n self.GRAD_COL_FUNCTIONS = {}; // cache for color gradient functions\n self.GRAD_OPC_FUNCTIONS = {}; // cache for opacity gradient functions\n self.GRAD_COL = {}; // cache for whole color gradient objects\n self.GRAD_OPC = {}; // cache for whole opacity gradient objects\n\n var catalog = self.attach(new PDFCatalog());\n var pageTree = self.attach(new PDFPageTree());\n\n if (getOption(\"autoPrint\")) {\n let nameTree = {};\n nameTree.JavaScript = new PDFDictionary({ Names: [\n new PDFString(\"JS\"), self.attach(new PDFDictionary({\n S: _(\"JavaScript\"),\n JS: new PDFString(\"print(true);\")\n }))\n ] });\n catalog.props.Names = new PDFDictionary(nameTree);\n }\n\n catalog.setPages(pageTree);\n\n var info = self.attach(new PDFDictionary({\n Producer : new PDFString(getOption(\"producer\", \"Kendo UI PDF Generator\"), true), // XXX: kendo.version?\n Title : new PDFString(getOption(\"title\", \"\"), true),\n Author : new PDFString(getOption(\"author\", \"\"), true),\n Subject : new PDFString(getOption(\"subject\", \"\"), true),\n Keywords : new PDFString(getOption(\"keywords\", \"\"), true),\n Creator : new PDFString(getOption(\"creator\", \"Kendo UI PDF Generator\"), true),\n CreationDate : getOption(\"date\", new Date())\n }));\n\n self.addPage = function(options) {\n var paperOptions = getPaperOptions(function(name, defval){\n return (options && options[name] != null) ? options[name] : defval;\n });\n var paperSize = paperOptions.paperSize;\n var margin = paperOptions.margin;\n var contentWidth = paperSize[0];\n var contentHeight = paperSize[1];\n if (margin) {\n contentWidth -= margin.left + margin.right;\n contentHeight -= margin.top + margin.bottom;\n }\n var content = new PDFStream(makeOutput(), null, true);\n var props = {\n Contents : self.attach(content),\n Parent : pageTree,\n MediaBox : [ 0, 0, paperSize[0], paperSize[1] ]\n };\n var page = new PDFPage(self, props);\n page._content = content;\n pageTree.addPage(self.attach(page));\n\n // canvas-like coord. system. (0,0) is upper-left.\n // text must be vertically mirorred before drawing.\n page.transform(1, 0, 0, -1, 0, paperSize[1]);\n\n if (margin) {\n page.translate(margin.left, margin.top);\n // XXX: clip to right/bottom margin. Make this optional?\n page.rect(0, 0, contentWidth, contentHeight);\n page.clip();\n }\n\n self.pages.push(page);\n return page;\n };\n\n self.render = function() {\n var i;\n /// file header\n out(\"%PDF-1.4\", NL, \"%\\xc2\\xc1\\xda\\xcf\\xce\", NL, NL);\n\n /// file body\n for (i = 0; i < objects.length; ++i) {\n objects[i].renderFull(out);\n out(NL, NL);\n }\n\n /// cross-reference table\n var xrefOffset = out.offset();\n out(\"xref\", NL, 0, \" \", objects.length + 1, NL);\n out(\"0000000000 65535 f \", NL);\n for (i = 0; i < objects.length; ++i) {\n out(zeropad(objects[i]._offset, 10), \" 00000 n \", NL);\n }\n out(NL);\n\n /// trailer\n out(\"trailer\", NL);\n out(new PDFDictionary({\n Size: objects.length + 1,\n Root: catalog,\n Info: info\n }), NL, NL);\n\n /// end\n out(\"startxref\", NL, xrefOffset, NL);\n out(\"%%EOF\", NL);\n\n return out.stream().offset(0);\n };\n\n self.loadFonts = loadFonts;\n self.loadImages = loadImages;\n }\n\n getFont(url) {\n var font = this.FONTS[url];\n if (!font) {\n font = FONT_CACHE[url];\n if (!font) {\n throw new Error(\"Font \" + url + \" has not been loaded\");\n }\n if (font === true) {\n font = this.attach(new PDFStandardFont(url));\n } else {\n font = this.attach(new PDFFont(this, font));\n }\n this.FONTS[url] = font;\n }\n return font;\n }\n\n getImage(url) {\n var img = this.IMAGES[url];\n if (!img) {\n img = IMAGE_CACHE[url];\n if (!img) {\n throw new Error(\"Image \" + url + \" has not been loaded\");\n }\n if (img === \"ERROR\") {\n return null;\n }\n img = this.IMAGES[url] = this.attach(img.asStream(this));\n }\n return img;\n }\n\n getOpacityGS(opacity, forStroke) {\n var id = parseFloat(opacity).toFixed(3);\n opacity = parseFloat(id);\n id += forStroke ? \"S\" : \"F\";\n var cache = this._opacityGSCache || (this._opacityGSCache = {});\n var gs = cache[id];\n if (!gs) {\n var props = {\n Type: _(\"ExtGState\")\n };\n if (forStroke) {\n props.CA = opacity;\n } else {\n props.ca = opacity;\n }\n gs = this.attach(new PDFDictionary(props));\n gs._resourceName = _(\"GS\" + (++RESOURCE_COUNTER));\n cache[id] = gs;\n }\n return gs;\n }\n\n dict(props) {\n return new PDFDictionary(props);\n }\n\n name(str) {\n return _(str);\n }\n\n stream(props, content) {\n return new PDFStream(content, props);\n }\n}\n\n/* -----[ utils ]----- */\n\nfunction pad(str, len, ch) {\n while (str.length < len) {\n str = ch + str;\n }\n return str;\n}\n\nfunction zeropad(n, len) {\n return pad(String(n), len, \"0\");\n}\n\nfunction hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nvar isArray = Array.isArray || function(obj) {\n return obj instanceof Array;\n};\n\nfunction isDate(obj) {\n return obj instanceof Date;\n}\n\nfunction renderArray(a, out) {\n out(\"[\");\n if (a.length > 0) {\n out.withIndent(function(){\n for (var i = 0; i < a.length; ++i) {\n if (i > 0 && i % 8 === 0) {\n out.indent(a[i]);\n } else {\n out(\" \", a[i]);\n }\n }\n });\n //out.indent();\n }\n out(\" ]\");\n}\n\nfunction renderDate(date, out) {\n out(\"(D:\",\n zeropad(date.getUTCFullYear(), 4),\n zeropad(date.getUTCMonth() + 1, 2),\n zeropad(date.getUTCDate(), 2),\n zeropad(date.getUTCHours(), 2),\n zeropad(date.getUTCMinutes(), 2),\n zeropad(date.getUTCSeconds(), 2),\n \"Z)\");\n}\n\nfunction mm2pt(mm) {\n return mm * (72/25.4);\n}\n\nfunction cm2pt(cm) {\n return mm2pt(cm * 10);\n}\n\nfunction in2pt(inch) {\n return inch * 72;\n}\n\n\nfunction unitsToPoints(x, def) {\n if (typeof x == \"number\") {\n return x;\n }\n if (typeof x == \"string\") {\n var m;\n m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n if (m) {\n var num = parseFloat(m[1]);\n if (!isNaN(num)) {\n if (m[2] == \"pt\") {\n return num;\n }\n return {\n \"mm\": mm2pt,\n \"cm\": cm2pt,\n \"in\": in2pt\n }[m[2]](num);\n }\n }\n }\n if (def != null) {\n return def;\n }\n throw new Error(\"Can't parse unit: \" + x);\n}\n\n/* -----[ PDF basic objects ]----- */\n\nclass PDFValue {\n beforeRender() {}\n}\n\nclass PDFString extends PDFValue {\n constructor(value, utf16be) {\n super();\n this.value = value;\n this.utf16be = Boolean(utf16be);\n }\n\n render(out) {\n let txt = this.value;\n if (this.utf16be) {\n txt = BOM + encodeUTF16BE(txt);\n txt = txt.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n out(\"(\", txt, \")\");\n } else {\n // out.writeString truncates charcodes to 8 bits and\n // 0x128 & 0xFF is 40, the code for open paren.\n // therefore we need to do the chopping here to make\n // sure we backslash all cases.\n let data = [ 40 ]; // open PDF string '('\n for (var i = 0; i < txt.length; ++i) {\n let code = txt.charCodeAt(i) & 0xFF;\n if (code == 40 || code == 41 || code == 92) {\n // backslash before (, ) and \\\n data.push(92);\n }\n data.push(code);\n }\n data.push(41); // ')' close PDF string\n out.writeData(data);\n }\n }\n\n toString() {\n return this.value;\n }\n}\n\nclass PDFHexString extends PDFString {\n constructor(value) {\n super(value);\n this.value = value;\n }\n\n render(out) {\n out(\"<\");\n for (var i = 0; i < this.value.length; ++i) {\n out(zeropad(this.value.charCodeAt(i).toString(16), 4));\n }\n out(\">\");\n }\n}\n\n/// names\nclass PDFName extends PDFValue {\n static get(name) {\n return _(name);\n }\n\n constructor(name) {\n super();\n this.name = name;\n }\n\n render(out) {\n out(\"/\" + this.escape());\n }\n\n escape() {\n return this.name.replace(/[^\\x21-\\x7E]/g, function(c){\n return \"#\" + zeropad(c.charCodeAt(0).toString(16), 2);\n });\n }\n\n toString() {\n return this.name;\n }\n}\n\nvar PDFName_cache = {};\n\nfunction _(name) {\n if (hasOwnProperty(PDFName_cache, name)) {\n return PDFName_cache[name];\n }\n return (PDFName_cache[name] = new PDFName(name));\n}\n\n/// dictionary\n\nclass PDFDictionary extends PDFValue {\n constructor(props) {\n super();\n this.props = props;\n }\n\n render(out) {\n var props = this.props, empty = true;\n out(\"<<\");\n out.withIndent(function(){\n for (var i in props) {\n if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n empty = false;\n out.indent(_(i), \" \", props[i]);\n }\n }\n });\n if (!empty) {\n out.indent();\n }\n out(\">>\");\n }\n}\n\n/// streams\n\nclass PDFStream extends PDFValue {\n constructor(data, props, compress) {\n super();\n if (typeof data == \"string\") {\n var tmp = BinaryStream();\n tmp.write(data);\n data = tmp;\n }\n this.data = data;\n this.props = props || {};\n this.compress = compress;\n }\n\n render(out) {\n var data = this.data.get(), props = this.props;\n if (this.compress && supportsDeflate()) {\n if (!props.Filter) {\n props.Filter = [];\n } else if (!(props.Filter instanceof Array)) {\n props.Filter = [ props.Filter ];\n }\n props.Filter.unshift(_(\"FlateDecode\"));\n data = deflate(data);\n }\n props.Length = data.length;\n out(new PDFDictionary(props), \" stream\", NL);\n out.writeData(data);\n out(NL, \"endstream\");\n }\n}\n\n/// catalog\n\nclass PDFCatalog extends PDFDictionary {\n constructor() {\n super({\n Type: _(\"Catalog\")\n });\n }\n\n setPages(pagesObj) {\n this.props.Pages = pagesObj;\n }\n}\n\n/// page tree\n\nclass PDFPageTree extends PDFDictionary {\n constructor() {\n super({\n Type : _(\"Pages\"),\n Kids : [],\n Count : 0\n });\n }\n\n addPage(pageObj) {\n this.props.Kids.push(pageObj);\n this.props.Count++;\n }\n}\n\n/// images\n\n// JPEG\n\nvar SOF_CODES = [0xc0, 0xc1, 0xc2, 0xc3, 0xc5, 0xc6, 0xc7, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf];\n\nclass PDFJpegImage {\n constructor(data) {\n // we must determine the correct color space. we'll parse a bit\n // of the JPEG stream for this, it's still better than going\n // through the canvas.\n // https://github.com/telerik/kendo-ui-core/issues/2845\n data.offset(0);\n var width, height, colorSpace, bitsPerComponent;\n var soi = data.readShort();\n if (soi != 0xFFD8) {\n // XXX: do we have some better options here?\n throw new Error(\"Invalid JPEG image\");\n }\n while (!data.eof()) {\n var ff = data.readByte();\n if (ff != 0xFF) {\n throw new Error(\"Invalid JPEG image\");\n }\n var marker = data.readByte();\n var length = data.readShort();\n if (SOF_CODES.indexOf(marker) >= 0) {\n // \"start of frame\" marker\n bitsPerComponent = data.readByte();\n height = data.readShort();\n width = data.readShort();\n colorSpace = data.readByte();\n break;\n }\n data.skip(length - 2);\n }\n\n if (colorSpace == null) {\n throw new Error(\"Invalid JPEG image\");\n }\n\n var props = {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : bitsPerComponent,\n Filter : _(\"DCTDecode\")\n };\n\n switch (colorSpace) {\n case 1:\n props.ColorSpace = _(\"DeviceGray\");\n break;\n case 3:\n props.ColorSpace = _(\"DeviceRGB\");\n break;\n case 4:\n props.ColorSpace = _(\"DeviceCMYK\");\n props.Decode = [ 1, 0, 1, 0, 1, 0, 1, 0 ]; // invert colors\n break;\n }\n\n this.asStream = function() {\n data.offset(0);\n var stream = new PDFStream(data, props);\n stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n return stream;\n };\n }\n}\n\n// PDFRawImage will be used for images with transparency (PNG)\n\nclass PDFRawImage {\n constructor(width, height, rgb, alpha) {\n this.asStream = function(pdf) {\n var mask = new PDFStream(alpha, {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : 8,\n ColorSpace : _(\"DeviceGray\")\n }, true);\n var stream = new PDFStream(rgb, {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : 8,\n ColorSpace : _(\"DeviceRGB\"),\n SMask : pdf.attach(mask)\n }, true);\n stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n return stream;\n };\n }\n}\n\n/// standard fonts\n\nclass PDFStandardFont extends PDFDictionary {\n constructor(name){\n super({\n Type : _(\"Font\"),\n Subtype : _(\"Type1\"),\n BaseFont : _(name)\n });\n\n this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n }\n\n encodeText(str) {\n return new PDFString(String(str));\n }\n}\n\n/// TTF fonts\n\nclass PDFFont extends PDFDictionary {\n constructor(pdf, font, props){\n super({});\n\n props = this.props;\n props.Type = _(\"Font\");\n props.Subtype = _(\"Type0\");\n props.Encoding = _(\"Identity-H\");\n\n this._pdf = pdf;\n this._font = font;\n this._sub = font.makeSubset();\n this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n\n var head = font.head;\n\n this.name = font.psName;\n var scale = this.scale = font.scale;\n this.bbox = [\n head.xMin * scale,\n head.yMin * scale,\n head.xMax * scale,\n head.yMax * scale\n ];\n\n this.italicAngle = font.post.italicAngle;\n this.ascent = font.ascent * scale;\n this.descent = font.descent * scale;\n this.lineGap = font.lineGap * scale;\n this.capHeight = font.os2.capHeight || this.ascent;\n this.xHeight = font.os2.xHeight || 0;\n this.stemV = 0;\n\n this.familyClass = (font.os2.familyClass || 0) >> 8;\n this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n this.isScript = this.familyClass == 10;\n\n this.flags = ((font.post.isFixedPitch ? 1 : 0) |\n (this.isSerif ? 1 << 1 : 0) |\n (this.isScript ? 1 << 3 : 0) |\n (this.italicAngle !== 0 ? 1 << 6 : 0) |\n (1 << 5));\n }\n\n encodeText(text) {\n return new PDFHexString(this._sub.encodeText(String(text)));\n }\n\n getTextWidth(fontSize, text) {\n var width = 0, codeMap = this._font.cmap.codeMap;\n for (var i = 0; i < text.length; ++i) {\n var glyphId = codeMap[text.charCodeAt(i)];\n width += this._font.widthOfGlyph(glyphId || 0);\n }\n return width * fontSize / 1000;\n }\n\n beforeRender() {\n var self = this;\n var sub = self._sub;\n\n // write the TTF data\n var data = sub.render();\n var fontStream = new PDFStream(BinaryStream(data), {\n Length1: data.length\n }, true);\n\n var descriptor = self._pdf.attach(new PDFDictionary({\n Type : _(\"FontDescriptor\"),\n FontName : _(self._sub.psName),\n FontBBox : self.bbox,\n Flags : self.flags,\n StemV : self.stemV,\n ItalicAngle : self.italicAngle,\n Ascent : self.ascent,\n Descent : self.descent,\n CapHeight : self.capHeight,\n XHeight : self.xHeight,\n FontFile2 : self._pdf.attach(fontStream)\n }));\n\n var cmap = sub.ncid2ogid;\n var firstChar = sub.firstChar;\n var lastChar = sub.lastChar;\n var charWidths = [];\n (function loop(i, chunk){\n if (i <= lastChar) {\n var gid = cmap[i];\n if (gid == null) {\n loop(i + 1);\n } else {\n if (!chunk) {\n charWidths.push(i, chunk = []);\n }\n chunk.push(self._font.widthOfGlyph(gid));\n loop(i + 1, chunk);\n }\n }\n })(firstChar);\n\n // As if two dictionaries weren't enough, we need another\n // one, the \"descendant font\". Only that one can be of\n // Subtype CIDFontType2. PDF is the X11 of document\n // formats: portable but full of legacy that nobody cares\n // about anymore.\n\n var descendant = new PDFDictionary({\n Type: _(\"Font\"),\n Subtype: _(\"CIDFontType2\"),\n BaseFont: _(self._sub.psName),\n CIDSystemInfo: new PDFDictionary({\n Registry : new PDFString(\"Adobe\"),\n Ordering : new PDFString(\"Identity\"),\n Supplement : 0\n }),\n FontDescriptor: descriptor,\n FirstChar: firstChar,\n LastChar: lastChar,\n DW: Math.round(self._font.widthOfGlyph(0)),\n W: charWidths,\n CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n });\n\n var dict = self.props;\n dict.BaseFont = _(self._sub.psName);\n dict.DescendantFonts = [ self._pdf.attach(descendant) ];\n\n // Compute the ToUnicode map so that apps can extract\n // meaningful text from the PDF.\n var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n var unimapStream = new PDFStream(makeOutput(), null, true);\n unimapStream.data(unimap);\n dict.ToUnicode = self._pdf.attach(unimapStream);\n }\n\n _makeCidToGidMap() {\n return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n }\n}\n\nclass PDFToUnicodeCmap extends PDFValue {\n constructor(firstChar, lastChar, map){\n super();\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.map = map;\n }\n\n render(out) {\n out.indent(\"/CIDInit /ProcSet findresource begin\");\n out.indent(\"12 dict begin\");\n out.indent(\"begincmap\");\n out.indent(\"/CIDSystemInfo <<\");\n out.indent(\" /Registry (Adobe)\");\n out.indent(\" /Ordering (UCS)\");\n out.indent(\" /Supplement 0\");\n out.indent(\">> def\");\n out.indent(\"/CMapName /Adobe-Identity-UCS def\");\n out.indent(\"/CMapType 2 def\");\n out.indent(\"1 begincodespacerange\");\n out.indent(\" <0000>\");\n out.indent(\"endcodespacerange\");\n\n var self = this;\n out.indent(self.lastChar - self.firstChar + 1, \" beginbfchar\");\n out.withIndent(function(){\n for (var code = self.firstChar; code <= self.lastChar; ++code) {\n var unicode = self.map[code];\n var str = ucs2encode([ unicode ]);\n out.indent(\"<\", zeropad(code.toString(16), 4), \">\", \"<\");\n for (var i = 0; i < str.length; ++i) {\n out(zeropad(str.charCodeAt(i).toString(16), 4));\n }\n out(\">\");\n }\n });\n out.indent(\"endbfchar\");\n\n out.indent(\"endcmap\");\n out.indent(\"CMapName currentdict /CMap defineresource pop\");\n out.indent(\"end\");\n out.indent(\"end\");\n }\n}\n\n/// gradients\n\nfunction makeHash(a) {\n return a.map(function(x){\n return isArray(x) ? makeHash(x)\n : typeof x == \"number\" ? (Math.round(x * 1000) / 1000).toFixed(3)\n : x;\n }).join(\" \");\n}\n\nfunction cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n var hash = makeHash([ r1, g1, b1, r2, g2, b2 ]);\n var func = pdf.GRAD_COL_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [ 0, 1 ],\n Range: [ 0, 1, 0, 1, 0, 1 ],\n N: 1,\n C0: [ r1 , g1 , b1 ],\n C1: [ r2 , g2 , b2 ]\n }));\n }\n return func;\n}\n\nfunction cacheOpacityGradientFunction(pdf, a1, a2) {\n var hash = makeHash([ a1, a2 ]);\n var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [ 0, 1 ],\n Range: [ 0, 1 ],\n N: 1,\n C0: [ a1 ],\n C1: [ a2 ]\n }));\n }\n return func;\n}\n\nfunction makeGradientFunctions(pdf, stops) {\n var hasAlpha = false;\n var opacities = [];\n var colors = [];\n var offsets = [];\n var encode = [];\n var i, prev, cur, prevColor, curColor;\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n colors.push(cacheColorGradientFunction(\n pdf,\n prevColor.r, prevColor.g, prevColor.b,\n curColor.r, curColor.g, curColor.b\n ));\n if (prevColor.a < 1 || curColor.a < 1) {\n hasAlpha = true;\n }\n offsets.push(cur.offset);\n encode.push(0, 1);\n }\n if (hasAlpha) {\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n opacities.push(cacheOpacityGradientFunction(\n pdf, prevColor.a, curColor.a\n ));\n }\n }\n offsets.pop();\n return {\n hasAlpha : hasAlpha,\n colors : assemble(colors),\n opacities : hasAlpha ? assemble(opacities) : null\n };\n function assemble(funcs) {\n if (funcs.length == 1) {\n return funcs[0];\n }\n return {\n FunctionType: 3,\n Functions: funcs,\n Domain: [ 0, 1 ],\n Bounds: offsets,\n Encode: encode\n };\n }\n}\n\nfunction cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n var shading, hash;\n // if box is given then we have user-space coordinates, which\n // means the gradient is designed for a certain position/size\n // on page. caching won't do any good.\n if (!box) {\n var a = [ isRadial ].concat(coords);\n stops.forEach(function(x){\n a.push(x.offset, x.color.r, x.color.g, x.color.b);\n });\n hash = makeHash(a);\n shading = pdf.GRAD_COL[hash];\n }\n if (!shading) {\n shading = new PDFDictionary({\n Type: _(\"Shading\"),\n ShadingType: isRadial ? 3 : 2,\n ColorSpace: _(\"DeviceRGB\"),\n Coords: coords,\n Domain: [ 0, 1 ],\n Function: funcs,\n Extend: [ true, true ]\n });\n pdf.attach(shading);\n shading._resourceName = \"S\" + (++RESOURCE_COUNTER);\n if (hash) {\n pdf.GRAD_COL[hash] = shading;\n }\n }\n return shading;\n}\n\nfunction cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n var opacity, hash;\n // if box is given then we have user-space coordinates, which\n // means the gradient is designed for a certain position/size\n // on page. caching won't do any good.\n if (!box) {\n var a = [ isRadial ].concat(coords);\n stops.forEach(function(x){\n a.push(x.offset, x.color.a);\n });\n hash = makeHash(a);\n opacity = pdf.GRAD_OPC[hash];\n }\n if (!opacity) {\n opacity = new PDFDictionary({\n Type: _(\"ExtGState\"),\n AIS: false,\n CA: 1,\n ca: 1,\n SMask: {\n Type: _(\"Mask\"),\n S: _(\"Luminosity\"),\n G: pdf.attach(new PDFStream(\"/a0 gs /s0 sh\", {\n Type: _(\"XObject\"),\n Subtype: _(\"Form\"),\n FormType: 1,\n BBox: (box ? [\n box.left, box.top + box.height, box.left + box.width, box.top\n ] : [ 0, 1, 1, 0 ]),\n Group: {\n Type: _(\"Group\"),\n S: _(\"Transparency\"),\n CS: _(\"DeviceGray\"),\n I: true\n },\n Resources: {\n ExtGState: {\n a0: { CA: 1, ca: 1 }\n },\n Shading: {\n s0: {\n ColorSpace: _(\"DeviceGray\"),\n Coords: coords,\n Domain: [ 0, 1 ],\n ShadingType: isRadial ? 3 : 2,\n Function: funcs,\n Extend: [ true, true ]\n }\n }\n }\n }))\n }\n });\n pdf.attach(opacity);\n opacity._resourceName = \"O\" + (++RESOURCE_COUNTER);\n if (hash) {\n pdf.GRAD_OPC[hash] = opacity;\n }\n }\n return opacity;\n}\n\nfunction cacheGradient(pdf, gradient, box) {\n var isRadial = gradient.type == \"radial\";\n var funcs = makeGradientFunctions(pdf, gradient.stops);\n var coords = isRadial ? [\n gradient.start.x , gradient.start.y , gradient.start.r,\n gradient.end.x , gradient.end.y , gradient.end.r\n ] : [\n gradient.start.x , gradient.start.y,\n gradient.end.x , gradient.end.y\n ];\n var shading = cacheColorGradient(\n pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box\n );\n var opacity = funcs.hasAlpha ? cacheOpacityGradient(\n pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box\n ) : null;\n return {\n hasAlpha: funcs.hasAlpha,\n shading: shading,\n opacity: opacity\n };\n}\n\n/// page object\n\nclass PDFPage extends PDFDictionary {\n constructor(pdf, props){\n super(props);\n\n this._pdf = pdf;\n this._rcount = 0;\n this._textMode = false;\n this._fontResources = {};\n this._gsResources = {};\n this._xResources = {};\n this._patResources = {};\n this._shResources = {};\n this._opacity = 1;\n this._matrix = [ 1, 0, 0, 1, 0, 0 ];\n this._annotations = [];\n\n this._font = null;\n this._fontSize = null;\n\n this._contextStack = [];\n\n props = this.props;\n props.Type = _(\"Page\");\n props.ProcSet = [\n _(\"PDF\"),\n _(\"Text\"),\n _(\"ImageB\"),\n _(\"ImageC\"),\n _(\"ImageI\")\n ];\n props.Resources = new PDFDictionary({\n Font : new PDFDictionary(this._fontResources),\n ExtGState : new PDFDictionary(this._gsResources),\n XObject : new PDFDictionary(this._xResources),\n Pattern : new PDFDictionary(this._patResources),\n Shading : new PDFDictionary(this._shResources)\n });\n props.Annots = this._annotations;\n }\n\n _out() {\n this._content.data.apply(null, arguments);\n }\n\n transform(a, b, c, d, e, f) {\n if (!isIdentityMatrix(arguments)) {\n this._matrix = mmul(arguments, this._matrix);\n this._out(a, \" \", b, \" \", c, \" \", d, \" \", e, \" \", f, \" cm\");\n // XXX: debug\n // this._out(\" % current matrix: \", this._matrix);\n this._out(NL);\n }\n }\n\n translate(dx, dy) {\n this.transform(1, 0, 0, 1, dx, dy);\n }\n\n scale(sx, sy) {\n this.transform(sx, 0, 0, sy, 0, 0);\n }\n\n rotate(angle) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n this.transform(cos, sin, -sin, cos, 0, 0);\n }\n\n beginText() {\n this._textMode = true;\n this._out(\"BT\", NL);\n }\n\n endText() {\n this._textMode = false;\n this._out(\"ET\", NL);\n }\n\n _requireTextMode() {\n if (!this._textMode) {\n throw new Error(\"Text mode required; call page.beginText() first\");\n }\n }\n\n _requireFont() {\n if (!this._font) {\n throw new Error(\"No font selected; call page.setFont() first\");\n }\n }\n\n setFont(font, size) {\n this._requireTextMode();\n if (font == null) {\n font = this._font;\n } else if (!(font instanceof PDFFont)) {\n font = this._pdf.getFont(font);\n }\n if (size == null) {\n size = this._fontSize;\n }\n this._fontResources[font._resourceName] = font;\n this._font = font;\n this._fontSize = size;\n this._out(font._resourceName, \" \", size, \" Tf\", NL);\n }\n\n setTextLeading(size) {\n this._requireTextMode();\n this._out(size, \" TL\", NL);\n }\n\n setTextRenderingMode(mode) {\n this._requireTextMode();\n this._out(mode, \" Tr\", NL);\n }\n\n showText(text, requestedWidth) {\n this._requireFont();\n if (text.length > 1 && requestedWidth && this._font instanceof PDFFont) {\n var outputWidth = this._font.getTextWidth(this._fontSize, text);\n var scale = requestedWidth / outputWidth * 100;\n this._out(scale, \" Tz \");\n }\n this._out(this._font.encodeText(text), \" Tj\", NL);\n }\n\n showTextNL(text) {\n this._requireFont();\n this._out(this._font.encodeText(text), \" '\", NL);\n }\n\n addLink(uri, box) {\n var ll = this._toPage({ x: box.left, y: box.bottom });\n var ur = this._toPage({ x: box.right, y: box.top });\n this._annotations.push(new PDFDictionary({\n Type : _(\"Annot\"),\n Subtype : _(\"Link\"),\n Rect : [ ll.x, ll.y, ur.x, ur.y ],\n Border : [ 0, 0, 0 ],\n A : new PDFDictionary({\n Type : _(\"Action\"),\n S : _(\"URI\"),\n URI : new PDFString(uri)\n })\n }));\n }\n\n setStrokeColor(r, g, b) {\n this._out(r, \" \", g, \" \", b, \" RG\", NL);\n }\n\n setOpacity(opacity) {\n this.setFillOpacity(opacity);\n this.setStrokeOpacity(opacity);\n this._opacity *= opacity;\n }\n\n setStrokeOpacity(opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, \" gs\", NL);\n }\n }\n\n setFillColor(r, g, b) {\n this._out(r, \" \", g, \" \", b, \" rg\", NL);\n }\n\n setFillOpacity(opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, \" gs\", NL);\n }\n }\n\n gradient(gradient, box) {\n this.save();\n this.rect(box.left, box.top, box.width, box.height);\n this.clip();\n if (!gradient.userSpace) {\n this.transform(box.width, 0, 0, box.height, box.left, box.top);\n }\n var g = cacheGradient(this._pdf, gradient, box);\n var sname = g.shading._resourceName, oname;\n this._shResources[sname] = g.shading;\n if (g.hasAlpha) {\n oname = g.opacity._resourceName;\n this._gsResources[oname] = g.opacity;\n this._out(\"/\" + oname + \" gs \");\n }\n this._out(\"/\" + sname + \" sh\", NL);\n this.restore();\n }\n\n setDashPattern(dashArray, dashPhase) {\n this._out(dashArray, \" \", dashPhase, \" d\", NL);\n }\n\n setLineWidth(width) {\n this._out(width, \" w\", NL);\n }\n\n setLineCap(lineCap) {\n this._out(lineCap, \" J\", NL);\n }\n\n setLineJoin(lineJoin) {\n this._out(lineJoin, \" j\", NL);\n }\n\n setMitterLimit(mitterLimit) {\n this._out(mitterLimit, \" M\", NL);\n }\n\n save() {\n this._contextStack.push(this._context());\n this._out(\"q\", NL);\n }\n\n restore() {\n this._out(\"Q\", NL);\n this._context(this._contextStack.pop());\n }\n\n\n // paths\n moveTo(x, y) {\n this._out(x, \" \", y, \" m\", NL);\n }\n\n lineTo(x, y) {\n this._out(x, \" \", y, \" l\", NL);\n }\n\n bezier(x1, y1, x2, y2, x3, y3) {\n this._out(x1, \" \", y1, \" \", x2, \" \", y2, \" \", x3, \" \", y3, \" c\", NL);\n }\n\n bezier1(x1, y1, x3, y3) {\n this._out(x1, \" \", y1, \" \", x3, \" \", y3, \" y\", NL);\n }\n\n bezier2(x2, y2, x3, y3) {\n this._out(x2, \" \", y2, \" \", x3, \" \", y3, \" v\", NL);\n }\n\n close() {\n this._out(\"h\", NL);\n }\n\n rect(x, y, w, h) {\n this._out(x, \" \", y, \" \", w, \" \", h, \" re\", NL);\n }\n\n ellipse(x, y, rx, ry) {\n function _X(v) { return x + v; }\n function _Y(v) { return y + v; }\n\n // how to get to the \"magic number\" is explained here:\n // http://www.whizkidtech.redprince.net/bezier/circle/kappa/\n var k = 0.5522847498307936;\n\n this.moveTo(_X(0), _Y(ry));\n this.bezier(\n _X(rx * k) , _Y(ry),\n _X(rx) , _Y(ry * k),\n _X(rx) , _Y(0)\n );\n this.bezier(\n _X(rx) , _Y(-ry * k),\n _X(rx * k) , _Y(-ry),\n _X(0) , _Y(-ry)\n );\n this.bezier(\n _X(-rx * k) , _Y(-ry),\n _X(-rx) , _Y(-ry * k),\n _X(-rx) , _Y(0)\n );\n this.bezier(\n _X(-rx) , _Y(ry * k),\n _X(-rx * k) , _Y(ry),\n _X(0) , _Y(ry)\n );\n }\n\n circle(x, y, r) {\n this.ellipse(x, y, r, r);\n }\n\n stroke() {\n this._out(\"S\", NL);\n }\n\n nop() {\n this._out(\"n\", NL);\n }\n\n clip() {\n this._out(\"W n\", NL);\n }\n\n clipStroke() {\n this._out(\"W S\", NL);\n }\n\n closeStroke() {\n this._out(\"s\", NL);\n }\n\n fill() {\n this._out(\"f\", NL);\n }\n\n fillStroke() {\n this._out(\"B\", NL);\n }\n\n drawImage(url) {\n var img = this._pdf.getImage(url);\n if (img) { // the result can be null for a cross-domain image\n this._xResources[img._resourceName] = img;\n this._out(img._resourceName, \" Do\", NL);\n }\n }\n\n comment(txt) {\n var self = this;\n txt.split(/\\r?\\n/g).forEach(function(line){\n self._out(\"% \", line, NL);\n });\n }\n\n // internal\n _context(val) {\n if (val != null) {\n this._opacity = val.opacity;\n this._matrix = val.matrix;\n } else {\n return {\n opacity: this._opacity,\n matrix: this._matrix\n };\n }\n }\n\n _toPage(p) {\n var m = this._matrix;\n var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n return {\n x: a*p.x + c*p.y + e,\n y: b*p.x + d*p.y + f\n };\n }\n}\n\nfunction unquote(str) {\n return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, \"$2\");\n}\n\nfunction parseFontDef(fontdef) {\n // XXX: this is very crude for now and buggy. Proper parsing is quite involved.\n var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n var m = rx.exec(fontdef);\n if (!m) {\n return { fontSize: 12, fontFamily: \"sans-serif\" };\n }\n var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n return {\n italic : m[2] && m[2].toLowerCase() == \"italic\",\n variant : m[4],\n bold : m[6] && /bold|700/i.test(m[6]),\n fontSize : fontSize,\n lineHeight : m[12] ? m[12] == \"normal\" ? fontSize : parseInt(m[12], 10) : null,\n fontFamily : m[14].split(/\\s*,\\s*/g).map(unquote)\n };\n}\n\nfunction getFontURL(style) {\n function mkFamily(name) {\n if (style.bold) {\n name += \"|bold\";\n }\n if (style.italic) {\n name += \"|italic\";\n }\n return name.toLowerCase();\n }\n var fontFamily = style.fontFamily;\n var name, url;\n if (fontFamily instanceof Array) {\n for (var i = 0; i < fontFamily.length; ++i) {\n name = mkFamily(fontFamily[i]);\n url = FONT_MAPPINGS[name];\n if (url) {\n break;\n }\n }\n } else {\n url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n }\n while (typeof url == \"function\") {\n url = url();\n }\n if (!url) {\n url = \"Times-Roman\";\n }\n return url;\n}\n\nvar FONT_MAPPINGS = {\n \"serif\" : \"Times-Roman\",\n \"serif|bold\" : \"Times-Bold\",\n \"serif|italic\" : \"Times-Italic\",\n \"serif|bold|italic\" : \"Times-BoldItalic\",\n \"sans-serif\" : \"Helvetica\",\n \"sans-serif|bold\" : \"Helvetica-Bold\",\n \"sans-serif|italic\" : \"Helvetica-Oblique\",\n \"sans-serif|bold|italic\" : \"Helvetica-BoldOblique\",\n \"monospace\" : \"Courier\",\n \"monospace|bold\" : \"Courier-Bold\",\n \"monospace|italic\" : \"Courier-Oblique\",\n \"monospace|bold|italic\" : \"Courier-BoldOblique\",\n \"zapfdingbats\" : \"ZapfDingbats\",\n \"zapfdingbats|bold\" : \"ZapfDingbats\",\n \"zapfdingbats|italic\" : \"ZapfDingbats\",\n \"zapfdingbats|bold|italic\" : \"ZapfDingbats\"\n};\n\nfunction fontAlias(alias, name) {\n alias = alias.toLowerCase();\n FONT_MAPPINGS[alias] = function() {\n return FONT_MAPPINGS[name];\n };\n FONT_MAPPINGS[alias + \"|bold\"] = function() {\n return FONT_MAPPINGS[name + \"|bold\"];\n };\n FONT_MAPPINGS[alias + \"|italic\"] = function() {\n return FONT_MAPPINGS[name + \"|italic\"];\n };\n FONT_MAPPINGS[alias + \"|bold|italic\"] = function() {\n return FONT_MAPPINGS[name + \"|bold|italic\"];\n };\n}\n\n// Let's define some common names to an appropriate replacement.\n// These are overridable via pdf.defineFont, should the user want to\n// include the proper versions.\n\nfontAlias(\"Times New Roman\" , \"serif\");\nfontAlias(\"Courier New\" , \"monospace\");\nfontAlias(\"Arial\" , \"sans-serif\");\nfontAlias(\"Helvetica\" , \"sans-serif\");\nfontAlias(\"Verdana\" , \"sans-serif\");\nfontAlias(\"Tahoma\" , \"sans-serif\");\nfontAlias(\"Georgia\" , \"sans-serif\");\nfontAlias(\"Monaco\" , \"monospace\");\nfontAlias(\"Andale Mono\" , \"monospace\");\n\nfunction defineFont(name, url) {\n if (arguments.length == 1) {\n for (var i in name) {\n if (hasOwnProperty(name, i)) {\n defineFont(i, name[i]);\n }\n }\n } else {\n name = name.toLowerCase();\n FONT_MAPPINGS[name] = url;\n\n // special handling for DejaVu fonts: if they get defined,\n // let them also replace the default families, for good\n // Unicode support out of the box.\n switch (name) {\n case \"dejavu sans\" : FONT_MAPPINGS[\"sans-serif\"] = url; break;\n case \"dejavu sans|bold\" : FONT_MAPPINGS[\"sans-serif|bold\"] = url; break;\n case \"dejavu sans|italic\" : FONT_MAPPINGS[\"sans-serif|italic\"] = url; break;\n case \"dejavu sans|bold|italic\" : FONT_MAPPINGS[\"sans-serif|bold|italic\"] = url; break;\n case \"dejavu serif\" : FONT_MAPPINGS[\"serif\"] = url; break;\n case \"dejavu serif|bold\" : FONT_MAPPINGS[\"serif|bold\"] = url; break;\n case \"dejavu serif|italic\" : FONT_MAPPINGS[\"serif|italic\"] = url; break;\n case \"dejavu serif|bold|italic\" : FONT_MAPPINGS[\"serif|bold|italic\"] = url; break;\n case \"dejavu mono\" : FONT_MAPPINGS[\"monospace\"] = url; break;\n case \"dejavu mono|bold\" : FONT_MAPPINGS[\"monospace|bold\"] = url; break;\n case \"dejavu mono|italic\" : FONT_MAPPINGS[\"monospace|italic\"] = url; break;\n case \"dejavu mono|bold|italic\" : FONT_MAPPINGS[\"monospace|bold|italic\"] = url; break;\n }\n }\n}\n\nfunction mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1*a2 + b1*c2, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n}\n\nfunction isIdentityMatrix(m) {\n return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n}\n\nconst TEXT_RENDERING_MODE = {\n fill : 0,\n stroke : 1,\n fillAndStroke : 2,\n invisible : 3,\n fillAndClip : 4,\n strokeAndClip : 5,\n fillStrokeClip : 6,\n clip : 7\n};\n\nexport {\n PDFDocument as Document,\n BinaryStream,\n defineFont,\n parseFontDef,\n getFontURL,\n loadFonts,\n loadImages,\n getPaperOptions,\n clearImageCache,\n TEXT_RENDERING_MODE\n};\n","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\nimport { createPromise } from \"../util\";\nimport { parseColor as utils_parseColor, saveAs as util_saveAs, support } from \"../common\";\nimport * as PDF from \"./core\";\nimport { Group, Path, MultiPath, Gradient, RadialGradient } from '../drawing';\nimport * as geo from \"../geometry\";\n\nconst DEFAULT_IMAGE_DPI = 300;\nconst TEXT_RENDERING_MODE = PDF.TEXT_RENDERING_MODE;\n\nconst DASH_PATTERNS = {\n dash : [ 4 ],\n dashDot : [ 4, 2, 1, 2 ],\n dot : [ 1, 2 ],\n longDash : [ 8, 2 ],\n longDashDot : [ 8, 2, 1, 2 ],\n longDashDotDot : [ 8, 2, 1, 2, 1, 2 ],\n solid : []\n};\n\nconst LINE_CAP = {\n butt : 0,\n round : 1,\n square : 2\n};\n\nconst LINE_JOIN = {\n miter : 0,\n round : 1,\n bevel : 2\n};\n\nfunction render(group, callback) {\n var fonts = [], images = {}, options = group.options;\n\n function getOption(name, defval, hash) {\n if (!hash) {\n hash = options;\n }\n if (hash.pdf && hash.pdf[name] != null) {\n return hash.pdf[name];\n }\n return defval;\n }\n\n var multiPage = getOption(\"multiPage\");\n var imgDPI = getOption(\"imgDPI\", DEFAULT_IMAGE_DPI);\n\n PDF.clearImageCache();\n\n group.traverse(function(element){\n dispatch({\n Image: function(element) {\n var url = element.src();\n var size = element.bbox().size;\n if (imgDPI) {\n var prev = images[url];\n size = {\n width: Math.ceil(size.width * imgDPI / 72),\n height: Math.ceil(size.height * imgDPI / 72)\n };\n\n if (prev) {\n size.width = Math.max(prev.width, size.width);\n size.height = Math.max(prev.height, size.height);\n }\n }\n\n images[url] = size;\n },\n Text: function(element) {\n var style = PDF.parseFontDef(element.options.font);\n var url = PDF.getFontURL(style);\n if (fonts.indexOf(url) < 0) {\n fonts.push(url);\n }\n }\n }, element);\n });\n\n function doIt() {\n if (--count > 0) {\n return;\n }\n\n var pdf = new (PDF.Document)({\n producer : getOption(\"producer\"),\n title : getOption(\"title\"),\n author : getOption(\"author\"),\n subject : getOption(\"subject\"),\n keywords : getOption(\"keywords\"),\n creator : getOption(\"creator\"),\n date : getOption(\"date\"),\n\n autoPrint : getOption(\"autoPrint\")\n });\n\n function drawPage(group) {\n var options = group.options;\n\n var tmp = optimize(group);\n var bbox = tmp.bbox;\n group = tmp.root;\n // var tmp, bbox;\n\n var paperSize = getOption(\"paperSize\", getOption(\"paperSize\", \"auto\"), options), addMargin = false;\n if (paperSize == \"auto\") {\n if (bbox) {\n var size = bbox.getSize();\n paperSize = [ size.width, size.height ];\n addMargin = true;\n var origin = bbox.getOrigin();\n tmp = new Group();\n tmp.transform(new geo.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n tmp.append(group);\n group = tmp;\n }\n else {\n paperSize = \"A4\";\n }\n }\n\n var page;\n page = pdf.addPage({\n paperSize : paperSize,\n margin : getOption(\"margin\", getOption(\"margin\"), options),\n addMargin : addMargin,\n landscape : getOption(\"landscape\", getOption(\"landscape\", false), options)\n });\n drawElement(group, page, pdf);\n }\n\n if (multiPage) {\n group.children.forEach(drawPage);\n } else {\n drawPage(group);\n }\n\n callback(pdf.render(), pdf);\n }\n\n var count = 2;\n PDF.loadFonts(fonts, doIt);\n PDF.loadImages(images, doIt, {\n jpegQuality : getOption(\"jpegQuality\", 0.92),\n keepPNG : getOption(\"keepPNG\", false)\n });\n}\n\nfunction toDataURL(group, callback) {\n render(group, function(data){\n callback(\"data:application/pdf;base64,\" + data.base64());\n });\n}\n\nfunction toBlob(group, callback) {\n render(group, function(data){\n callback(new window.Blob([ data.get() ], { type: \"application/pdf\" }));\n });\n}\n\nfunction saveAs(group, filename, proxy, callback) {\n // XXX: Safari has Blob, but does not support the download attribute\n // so we'd end up converting to dataURL and using the proxy anyway.\n if (window.Blob && !support.browser.safari) {\n toBlob(group, function(blob){\n util_saveAs({ dataURI: blob, fileName: filename });\n if (callback) {\n callback(blob);\n }\n });\n } else {\n toDataURL(group, function(dataURL){\n util_saveAs({ dataURI: dataURL, fileName: filename, proxyURL: proxy });\n if (callback) {\n callback(dataURL);\n }\n });\n }\n}\n\nfunction dispatch(handlers, element) {\n var handler = handlers[element.nodeType];\n if (handler) {\n return handler.call.apply(handler, arguments);\n }\n return element;\n}\n\nfunction drawElement(element, page, pdf) {\n if (element.options._pdfDebug) {\n page.comment(\"BEGIN: \" + element.options._pdfDebug);\n }\n\n var transform = element.transform();\n var opacity = element.opacity();\n\n page.save();\n\n if (opacity != null && opacity < 1) {\n page.setOpacity(opacity);\n }\n\n setStrokeOptions(element, page, pdf);\n setFillOptions(element, page, pdf);\n\n if (transform) {\n var m = transform.matrix();\n page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n\n setClipping(element, page, pdf);\n\n dispatch({\n Path : drawPath,\n MultiPath : drawMultiPath,\n Circle : drawCircle,\n Arc : drawArc,\n Text : drawText,\n Image : drawImage,\n Group : drawGroup,\n Rect : drawRect\n }, element, page, pdf);\n\n page.restore();\n\n if (element.options._pdfDebug) {\n page.comment(\"END: \" + element.options._pdfDebug);\n }\n}\n\nfunction setStrokeOptions(element, page) {\n var stroke = element.stroke && element.stroke();\n if (!stroke) {\n return;\n }\n\n var color = stroke.color;\n if (color) {\n color = parseColor(color);\n if (color == null) {\n return; // no stroke\n }\n page.setStrokeColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setStrokeOpacity(color.a);\n }\n }\n\n var width = stroke.width;\n if (width != null) {\n if (width === 0) {\n return; // no stroke\n }\n page.setLineWidth(width);\n }\n\n var dashType = stroke.dashType;\n if (dashType) {\n page.setDashPattern(DASH_PATTERNS[dashType], 0);\n }\n\n var lineCap = stroke.lineCap;\n if (lineCap) {\n page.setLineCap(LINE_CAP[lineCap]);\n }\n\n var lineJoin = stroke.lineJoin;\n if (lineJoin) {\n page.setLineJoin(LINE_JOIN[lineJoin]);\n }\n\n var opacity = stroke.opacity;\n if (opacity != null) {\n page.setStrokeOpacity(opacity);\n }\n}\n\nfunction setFillOptions(element, page) {\n var fill = element.fill && element.fill();\n if (!fill) {\n return;\n }\n\n if (fill instanceof Gradient) {\n return;\n }\n\n var color = fill.color;\n if (color) {\n color = parseColor(color);\n if (color == null) {\n return; // no fill\n }\n page.setFillColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setFillOpacity(color.a);\n }\n }\n\n var opacity = fill.opacity;\n if (opacity != null) {\n page.setFillOpacity(opacity);\n }\n}\n\nfunction setClipping(element, page, pdf) {\n // XXX: only Path supported at the moment.\n var clip = element.clip();\n if (clip) {\n _drawPath(clip, page, pdf);\n page.clip();\n // page.setStrokeColor(Math.random(), Math.random(), Math.random());\n // page.setLineWidth(1);\n // page.stroke();\n }\n}\n\nfunction shouldDraw(thing) {\n return (thing &&\n (thing instanceof Gradient ||\n (thing.color && !/^(none|transparent)$/i.test(thing.color) &&\n (thing.width == null || thing.width > 0) &&\n (thing.opacity == null || thing.opacity > 0))));\n}\n\nfunction maybeGradient(element, page, pdf, stroke) {\n var fill = element.fill();\n if (fill instanceof Gradient) {\n if (stroke) {\n page.clipStroke();\n } else {\n page.clip();\n }\n var isRadial = fill instanceof RadialGradient;\n var start, end;\n if (isRadial) {\n start = { x: fill.center().x , y: fill.center().y , r: 0 };\n end = { x: fill.center().x , y: fill.center().y , r: fill.radius() };\n } else {\n start = { x: fill.start().x , y: fill.start().y };\n end = { x: fill.end().x , y: fill.end().y };\n }\n\n var stops = fill.stops.elements().map(function(stop){\n var offset = stop.offset();\n if (/%$/.test(offset)) {\n offset = parseFloat(offset) / 100;\n } else {\n offset = parseFloat(offset);\n }\n var color = parseColor(stop.color());\n color.a *= stop.opacity();\n return {\n offset: offset,\n color: color\n };\n });\n\n // Duplicats first and last stop to fix\n // https://github.com/telerik/kendo-ui-core/issues/1782\n stops.unshift(stops[0]);\n stops.push(stops[stops.length - 1]);\n\n var gradient = {\n userSpace : fill.userSpace(),\n type : isRadial ? \"radial\" : \"linear\",\n start : start,\n end : end,\n stops : stops\n };\n var box = element.rawBBox();\n var tl = box.topLeft(), size = box.getSize();\n box = {\n left : tl.x,\n top : tl.y,\n width : size.width,\n height : size.height\n };\n page.gradient(gradient, box);\n return true;\n }\n}\n\nfunction maybeFillStroke(element, page, pdf) {\n if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n if (!maybeGradient(element, page, pdf, true)) {\n page.fillStroke();\n }\n } else if (shouldDraw(element.fill())) {\n if (!maybeGradient(element, page, pdf, false)) {\n page.fill();\n }\n } else if (shouldDraw(element.stroke())) {\n page.stroke();\n } else {\n // we should not get here; the path should have been\n // optimized away. but let's be prepared.\n page.nop();\n }\n}\n\nfunction maybeDrawRect(path, page) {\n var segments = path.segments;\n if (segments.length == 4 && path.options.closed) {\n // detect if this path looks like a rectangle parallel to the axis\n var a = [];\n for (var i = 0; i < segments.length; ++i) {\n if (segments[i].controlIn()) { // has curve?\n return false;\n }\n a[i] = segments[i].anchor();\n }\n // it's a rectangle if the y/x/y/x or x/y/x/y coords of\n // consecutive points are the same.\n var isRect = (\n a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x\n ) || (\n a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y\n );\n if (isRect) {\n // this saves a bunch of instructions in PDF:\n // moveTo, lineTo, lineTo, lineTo, close -> rect.\n page.rect(a[0].x, a[0].y,\n a[2].x - a[0].x /*width*/,\n a[2].y - a[0].y /*height*/);\n return true;\n }\n }\n}\n\nfunction _drawPath(element, page, pdf) {\n var segments = element.segments;\n if (segments.length === 0) {\n return;\n }\n if (!maybeDrawRect(element, page, pdf)) {\n for (var prev, i = 0; i < segments.length; ++i) {\n var seg = segments[i];\n var anchor = seg.anchor();\n if (!prev) {\n page.moveTo(anchor.x, anchor.y);\n } else {\n var prevOut = prev.controlOut();\n var controlIn = seg.controlIn();\n if (prevOut && controlIn) {\n page.bezier(\n prevOut.x , prevOut.y,\n controlIn.x , controlIn.y,\n anchor.x , anchor.y\n );\n } else {\n page.lineTo(anchor.x, anchor.y);\n }\n }\n prev = seg;\n }\n if (element.options.closed) {\n page.close();\n }\n }\n}\n\nfunction drawPath(element, page, pdf) {\n _drawPath(element, page, pdf);\n maybeFillStroke(element, page, pdf);\n}\n\nfunction drawMultiPath(element, page, pdf) {\n var paths = element.paths;\n for (var i = 0; i < paths.length; ++i) {\n _drawPath(paths[i], page, pdf);\n }\n maybeFillStroke(element, page, pdf);\n}\n\nfunction drawCircle(element, page, pdf) {\n var g = element.geometry();\n page.circle(g.center.x, g.center.y, g.radius);\n maybeFillStroke(element, page, pdf);\n}\n\nfunction drawArc(element, page, pdf) {\n var points = element.geometry().curvePoints();\n page.moveTo(points[0].x, points[0].y);\n for (var i = 1; i < points.length;) {\n page.bezier(\n points[i].x, points[i++].y,\n points[i].x, points[i++].y,\n points[i].x, points[i++].y\n );\n }\n maybeFillStroke(element, page, pdf);\n}\n\nfunction drawText(element, page) {\n var style = PDF.parseFontDef(element.options.font);\n var pos = element._position;\n var mode;\n if (element.fill() && element.stroke()) {\n mode = TEXT_RENDERING_MODE.fillAndStroke;\n } else if (element.fill()) {\n mode = TEXT_RENDERING_MODE.fill;\n } else if (element.stroke()) {\n mode = TEXT_RENDERING_MODE.stroke;\n }\n\n page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n page.beginText();\n page.setFont(PDF.getFontURL(style), style.fontSize);\n page.setTextRenderingMode(mode);\n page.showText(element.content(), element._pdfRect ? element._pdfRect.width() : null);\n page.endText();\n}\n\nfunction drawGroup(element, page, pdf) {\n if (element._pdfLink) {\n page.addLink(element._pdfLink.url, element._pdfLink);\n }\n var children = element.children;\n for (var i = 0; i < children.length; ++i) {\n drawElement(children[i], page, pdf);\n }\n}\n\nfunction drawImage(element, page) {\n var url = element.src();\n if (!url) {\n return;\n }\n\n var rect = element.rect();\n var tl = rect.getOrigin();\n var sz = rect.getSize();\n page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n page.drawImage(url);\n}\n\nfunction drawRect(element, page, pdf) {\n var geometry = element.geometry();\n const [ rx, ry ] = geometry.cornerRadius;\n if (rx === 0 && ry === 0) {\n page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n maybeFillStroke(element, page, pdf);\n } else {\n drawPath(Path.fromRect(geometry, element.options), page, pdf);\n }\n}\n\nfunction parseColor(value) {\n var color = utils_parseColor(value, true);\n return color ? color.toRGB() : null;\n}\n\nfunction optimize(root) {\n var clipbox = false;\n var matrix = geo.Matrix.unit();\n var currentBox = null;\n var changed;\n do {\n changed = false;\n root = opt(root);\n } while (root && changed);\n return { root: root, bbox: currentBox };\n\n function change(newShape) {\n changed = true;\n return newShape;\n }\n\n function visible(shape) {\n return (shape.visible() && shape.opacity() > 0 &&\n ( shouldDraw(shape.fill()) ||\n shouldDraw(shape.stroke()) ));\n }\n\n function optArray(a) {\n var b = [];\n for (var i = 0; i < a.length; ++i) {\n var el = opt(a[i]);\n if (el != null) {\n b.push(el);\n }\n }\n return b;\n }\n\n function withClipping(shape, f) {\n var saveclipbox = clipbox;\n var savematrix = matrix;\n\n if (shape.transform()) {\n matrix = matrix.multiplyCopy(shape.transform().matrix());\n }\n\n var clip = shape.clip();\n if (clip) {\n clip = clip.bbox();\n if (clip) {\n clip = clip.bbox(matrix);\n clipbox = clipbox ? geo.Rect.intersect(clipbox, clip) : clip;\n }\n }\n\n try {\n return f();\n }\n finally {\n clipbox = saveclipbox;\n matrix = savematrix;\n }\n }\n\n function inClipbox(shape) {\n if (clipbox == null) {\n return false;\n }\n var box = shape.rawBBox().bbox(matrix);\n if (clipbox && box) {\n box = geo.Rect.intersect(box, clipbox);\n }\n return box;\n }\n\n function opt(shape) {\n return withClipping(shape, function(){\n if (!(shape instanceof Group || shape instanceof MultiPath)) {\n var box = inClipbox(shape);\n if (!box) {\n return change(null);\n }\n currentBox = currentBox ? geo.Rect.union(currentBox, box) : box;\n }\n return dispatch({\n Path: function(shape) {\n if (shape.segments.length === 0 || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n MultiPath: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n var el = new MultiPath(shape.options);\n el.paths = optArray(shape.paths);\n if (el.paths.length === 0) {\n return change(null);\n }\n return el;\n },\n Circle: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Arc: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Text: function(shape) {\n if (!/\\S/.test(shape.content()) || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Image: function(shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n return shape;\n },\n Group: function(shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n var el = new Group(shape.options);\n el.children = optArray(shape.children);\n el._pdfLink = shape._pdfLink;\n if (shape !== root && el.children.length === 0 && !shape._pdfLink) {\n return change(null);\n }\n return el;\n },\n Rect: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n }\n }, shape);\n });\n }\n}\n\nfunction exportPDF(group, options) {\n var promise = createPromise();\n\n for (var i in options) {\n if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n // This hackish option is set by the page breaking code in drawDOM. The idea is\n // that margin is already taken into account there (that's required to do proper\n // page breaking) and we don't want to set it again here, as it would double the\n // top-left margin, and truncate the content on bottom/right.\n continue;\n }\n group.options.set(\"pdf.\" + i, options[i]);\n }\n\n toDataURL(group, promise.resolve);\n\n return promise;\n}\n\n// XXX: the duplication is in order to keep exportPDF return a data\n// URI, which is what previous versions do. Currently only IE9 does\n// not support Blob, IMO we should switch to Blob by default\n// everywhere.\nfunction exportPDFToBlob(group, options) {\n var promise = createPromise();\n\n for (var i in options) {\n if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n // This hackish option is set by the page breaking code in drawDOM. The idea is\n // that margin is already taken into account there (that's required to do proper\n // page breaking) and we don't want to set it again here, as it would double the\n // top-left margin, and truncate the content on bottom/right.\n continue;\n }\n group.options.set(\"pdf.\" + i, options[i]);\n }\n\n if (window.Blob && !support.browser.safari) {\n toBlob(group, promise.resolve);\n } else {\n toDataURL(group, promise.resolve);\n }\n\n return promise;\n}\n\n\nexport { exportPDF, exportPDFToBlob, saveAs, toDataURL, toBlob, render };\n","import GeometryCircle from '../geometry/circle';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport { defined } from '../util';\n\nconst DEFAULT_STROKE = \"#000\";\n\nclass Circle extends paintable(measurable(withGeometry(Element))) {\n get nodeType() {\n return \"Circle\";\n }\n\n constructor(geometry = new GeometryCircle(), options = {}) {\n super(options);\n\n this.geometry(geometry);\n\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n\n rawBBox() {\n return this._geometry.bbox();\n }\n\n _bbox(matrix) {\n return this._geometry.bbox(matrix);\n }\n\n _containsPoint(point) {\n return this.geometry().containsPoint(point);\n }\n\n _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n}\n\nexport default Circle;\n","import OptionsStore from '../core/options-store';\nimport Rect from '../geometry/rect';\nimport Matrix from '../geometry/matrix';\nimport createTransform from '../geometry/transform';\nimport toMatrix from '../geometry/to-matrix';\nimport HasObservers from '../core/has-observers';\nimport { defined, definitionId, isTransparent, valueOrDefault } from '../util';\n\nclass Element extends HasObservers {\n get nodeType() {\n return \"Rect\";\n }\n\n constructor(options) {\n super();\n\n this._initOptions(options);\n }\n\n _initOptions(options = {}) {\n const { clip, transform } = options;\n\n if (transform) {\n options.transform = createTransform(transform);\n }\n\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n }\n\n transform(value) {\n if (defined(value)) {\n this.options.set(\"transform\", createTransform(value));\n } else {\n return this.options.get(\"transform\");\n }\n }\n\n parentTransform() {\n let element = this;\n let parentMatrix;\n\n while (element.parent) {\n element = element.parent;\n let transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n\n if (parentMatrix) {\n return createTransform(parentMatrix);\n }\n }\n\n currentTransform(parentTransform = this.parentTransform()) {\n const elementTransform = this.transform();\n const elementMatrix = toMatrix(elementTransform);\n\n let parentMatrix = toMatrix(parentTransform);\n let combinedMatrix;\n\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n\n if (combinedMatrix) {\n return createTransform(combinedMatrix);\n }\n }\n\n visible(value) {\n if (defined(value)) {\n this.options.set(\"visible\", value);\n return this;\n }\n\n return this.options.get(\"visible\") !== false;\n }\n\n clip(value) {\n const options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set(\"clip\", value);\n return this;\n }\n\n return options.get(\"clip\");\n }\n\n opacity(value) {\n if (defined(value)) {\n this.options.set(\"opacity\", value);\n return this;\n }\n\n return valueOrDefault(this.options.get(\"opacity\"), 1);\n }\n\n className(value) {\n if (defined(value)) {\n this.options.set(\"className\", value);\n return this;\n }\n\n return this.options.get(\"className\");\n }\n\n clippedBBox(transformation) {\n const bbox = this._clippedBBox(transformation);\n if (bbox) {\n const clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n }\n\n containsPoint(point, parentTransform) {\n if (this.visible()) {\n const transform = this.currentTransform(parentTransform);\n let transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return (this._hasFill() && this._containsPoint(transformedPoint)) || (this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint));\n }\n return false;\n }\n\n _hasFill() {\n const fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n }\n\n _hasStroke() {\n const stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n }\n\n _clippedBBox(transformation) {\n return this.bbox(transformation);\n }\n}\n\nexport default Element;\n","import HasObservers from '../core/has-observers';\n\nconst push = [].push;\nconst pop = [].pop;\nconst splice = [].splice;\nconst shift = [].shift;\nconst slice = [].slice;\nconst unshift = [].unshift;\n\nclass ElementsArray extends HasObservers {\n constructor(array = []) {\n super();\n\n this.length = 0;\n this._splice(0, array.length, array);\n }\n\n elements(value) {\n if (value) {\n this._splice(0, this.length, value);\n\n this._change();\n return this;\n }\n\n return this.slice(0);\n }\n\n push() {\n const elements = arguments;\n const result = push.apply(this, elements);\n\n this._add(elements);\n\n return result;\n }\n\n slice() {\n return slice.call(this);\n }\n\n pop() {\n const length = this.length;\n const result = pop.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n }\n\n splice(index, howMany) {\n const elements = slice.call(arguments, 2);\n const result = this._splice(index, howMany, elements);\n\n this._change();\n\n return result;\n }\n\n shift() {\n const length = this.length;\n const result = shift.apply(this);\n\n if (length) {\n this._remove([ result ]);\n }\n\n return result;\n }\n\n unshift() {\n const elements = arguments;\n const result = unshift.apply(this, elements);\n\n this._add(elements);\n\n return result;\n }\n\n indexOf(element) {\n const length = this.length;\n\n for (let idx = 0; idx < length; idx++) {\n if (this[idx] === element) {\n return idx;\n }\n }\n return -1;\n }\n\n _splice(index, howMany, elements) {\n const result = splice.apply(this, [ index, howMany ].concat(elements));\n\n this._clearObserver(result);\n this._setObserver(elements);\n\n return result;\n }\n\n _add(elements) {\n this._setObserver(elements);\n this._change();\n }\n\n _remove(elements) {\n this._clearObserver(elements);\n this._change();\n }\n\n _setObserver(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this);\n }\n }\n\n _clearObserver(elements) {\n for (let idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this);\n }\n }\n\n _change() {}\n}\n\nexport default ElementsArray;\n","import Element from './element';\nimport traversable from '../mixins/traversable';\nimport { append } from '../util';\nimport elementsBoundingBox from './utils/elements-bounding-box';\nimport elementsClippedBoundingBox from './utils/elements-clippend-bounding-box';\n\n\nclass Group extends traversable(Element, \"children\") {\n get nodeType() {\n return \"Group\";\n }\n\n constructor(options) {\n super(options);\n this.children = [];\n }\n\n childrenChange(action, items, index) {\n this.trigger(\"childrenChange\",{\n action: action,\n items: items,\n index: index\n });\n }\n\n append() {\n append(this.children, arguments);\n this._reparent(arguments, this);\n\n this.childrenChange(\"add\", arguments);\n\n return this;\n }\n\n insert(index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n\n this.childrenChange(\"add\", [ element ], index);\n\n return this;\n }\n\n insertAt(element, index) {\n return this.insert(index, element);\n }\n\n remove(element) {\n const index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n }\n\n removeAt(index) {\n if (0 <= index && index < this.children.length) {\n let element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange(\"remove\", [ element ], index);\n }\n\n return this;\n }\n\n clear() {\n const items = this.children;\n this.children = [];\n this._reparent(items, null);\n\n this.childrenChange(\"remove\", items, 0);\n\n return this;\n }\n\n bbox(transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n }\n\n rawBBox() {\n return elementsBoundingBox(this.children, false);\n }\n\n _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n }\n\n currentTransform(transformation) {\n return Element.prototype.currentTransform.call(this, transformation) || null;\n }\n\n containsPoint(point, parentTransform) {\n if (this.visible()) {\n const children = this.children;\n const transform = this.currentTransform(parentTransform);\n for (let idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n }\n\n _reparent(elements, newParent) {\n for (let i = 0; i < elements.length; i++) {\n const child = elements[i];\n const parent = child.parent;\n if (parent && parent !== this && parent.remove) {\n parent.remove(child);\n }\n\n child.parent = newParent;\n }\n }\n}\n\nexport default Group;","import withGeometry from '../mixins/with-geometry';\nimport Element from './element';\nimport Rect from '../geometry/rect';\nimport toMatrix from '../geometry/to-matrix';\nimport { defined } from '../util';\n\n\nclass Image extends withGeometry(Element, [ \"rect\" ]) {\n get nodeType() {\n return \"Image\";\n }\n\n constructor(src, rect = new Rect(), options = {}) {\n super(options);\n\n this.src(src);\n this.rect(rect);\n }\n\n src(value) {\n if (defined(value)) {\n this.options.set(\"src\", value);\n return this;\n }\n\n return this.options.get(\"src\");\n }\n\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n }\n\n rawBBox() {\n return this._rect.bbox();\n }\n\n _containsPoint(point) {\n return this._rect.containsPoint(point);\n }\n\n _hasFill() {\n return this.src();\n }\n}\n\nexport default Image;","import ElementsArray from './elements-array';\n\nclass GeometryElementsArray extends ElementsArray {\n _change() {\n this.geometryChange();\n }\n}\n\nexport default GeometryElementsArray;","import { Point, Segment } from '../../geometry';\nimport { last, round } from '../../util';\n\nconst WEIGHT = 0.333;\nconst EXTREMUM_ALLOWED_DEVIATION = 0.01;\nconst X = \"x\";\nconst Y = \"y\";\n\nexport function pointsToCurve(pointsIn, closed) {\n const points = pointsIn.slice(0);\n const segments = [];\n let length = points.length;\n\n if (length > 2) {\n removeDuplicates(0, points);\n length = points.length;\n }\n\n if (length < 2 || (length === 2 && points[0].equals(points[1]))) {\n return segments;\n }\n\n let p0 = points[0];\n let p1 = points[1];\n let p2 = points[2];\n\n segments.push(new Segment(p0));\n\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n\n if (length === 2) {\n const tangent = getTangent(p0,p1, X, Y);\n\n last(segments).controlOut(\n firstControlPoint(tangent, p0, p1, X, Y)\n );\n\n segments.push(new Segment(\n p1,\n secondControlPoint(tangent, p0, p1, X, Y)\n ));\n\n return segments;\n }\n\n let initialControlPoint, lastControlPoint;\n\n if (closed) {\n p0 = points[length - 1]; p1 = points[0]; p2 = points[1];\n const controlPoints = getControlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n const tangent = getTangent(p0, p1, X,Y);\n initialControlPoint = firstControlPoint(tangent, p0, p1, X, Y);\n }\n\n let cp0 = initialControlPoint;\n for (let idx = 0; idx <= length - 3; idx++) {\n removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx]; p1 = points[idx + 1]; p2 = points[idx + 2];\n const controlPoints = getControlPoints(p0,p1,p2);\n\n last(segments).controlOut(cp0);\n cp0 = controlPoints[1];\n\n const cp1 = controlPoints[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n\n if (closed) {\n p0 = points[length - 2]; p1 = points[length - 1]; p2 = points[0];\n const controlPoints = getControlPoints(p0, p1, p2);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p1,\n controlPoints[0]\n ));\n\n last(segments).controlOut(controlPoints[1]);\n segments.push(new Segment(\n p2,\n lastControlPoint\n ));\n } else {\n const tangent = getTangent(p1, p2, X, Y);\n\n last(segments).controlOut(cp0);\n segments.push(new Segment(\n p2,\n secondControlPoint(tangent, p1, p2, X, Y)\n ));\n }\n\n return segments;\n}\n\nexport function pointsToClosedCurve(pointsIn) {\n return pointsToCurve(pointsIn, true);\n}\n\nexport function removeDuplicates(idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n}\n\nexport function invertAxis(p0, p1, p2) {\n let invertAxis = false;\n\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if ((p1.y < p2.y && p0.y <= p1.y) || (p2.y < p1.y && p1.y <= p0.y)) {\n invertAxis = true;\n }\n } else {\n const fn = lineFunction(p0,p1);\n const y2 = calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) &&\n !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n\n return invertAxis;\n}\n\nexport function isLine(p0, p1, p2) {\n const fn = lineFunction(p0, p1);\n const y2 = calculateFunction(fn, p2.x);\n\n return (p0.x === p1.x && p1.x === p2.x) || round(y2, 1) === round(p2.y, 1);\n}\n\nexport function lineFunction(p1, p2) {\n const a = (p2.y - p1.y) / (p2.x - p1.x);\n const b = p1.y - a * p1.x;\n\n return [ b, a ];\n}\n\nexport function getControlPoints(p0, p1, p2) {\n let xField = X;\n let yField = Y;\n let restrict = false;\n let switchOrientation = false;\n let tangent;\n\n if (isLine(p0, p1, p2)) {\n tangent = getTangent(p0, p1, X, Y);\n } else {\n const monotonic = {\n x: isMonotonicByField(p0, p1, p2, X),\n y: isMonotonicByField(p0, p1, p2, Y)\n };\n\n if (monotonic.x && monotonic.y) {\n tangent = getTangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n let sign;\n if ((p2[yField] < p0[yField] && p0[yField] <= p1[yField]) ||\n (p0[yField] < p2[yField] && p1[yField] <= p0[yField])) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n\n const secondCP = secondControlPoint(tangent, p0, p1, xField, yField);\n\n if (switchOrientation) {\n const oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n\n const firstCP = firstControlPoint(tangent, p1, p2, xField, yField);\n\n if (restrict) {\n restrictControlPoint(p0, p1, secondCP, tangent);\n restrictControlPoint(p1, p2, firstCP, tangent);\n }\n\n return [ secondCP, firstCP ];\n}\n\nexport function restrictControlPoint(p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n}\n\nexport function getTangent(p0, p1, xField, yField) {\n const x = p1[xField] - p0[xField];\n const y = p1[yField] - p0[yField];\n let tangent;\n\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n\n return tangent;\n}\n\nexport function isMonotonicByField(p0, p1, p2, field) {\n return (p2[field] > p1[field] && p1[field] > p0[field]) ||\n (p2[field] < p1[field] && p1[field] < p0[field]);\n}\n\nexport function firstControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n}\n\nexport function secondControlPoint(tangent, p0, p3, xField, yField) {\n const t1 = p0[xField];\n const t2 = p3[xField];\n const distance = (t2 - t1) * WEIGHT;\n\n return point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n}\n\nexport function point(xValue, yValue, xField, yField) {\n const controlPoint = new Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n\n return controlPoint;\n}\n\nexport function calculateFunction(fn, x) {\n const length = fn.length;\n let result = 0;\n\n for (let i = 0; i < length; i++) {\n result += Math.pow(x,i) * fn[i];\n }\n return result;\n}\n\nexport function numberSign(value) {\n return value <= 0 ? -1 : 1;\n}\n","import GeometryElementsArray from './geometry-elements-array';\nimport Element from './element';\nimport { pointsToCurve } from './utils/points-to-curve';\nimport paintable from '../mixins/paintable';\nimport measurable from '../mixins/measurable';\nimport Arc from '../geometry/arc';\nimport Rect from '../geometry/rect';\nimport Segment from '../geometry/segment';\nimport Point from '../geometry/point';\nimport Size from '../geometry/size';\nimport lineIntersectionsCount from '../geometry/math/line-intersections-count';\nimport { defined, last, rad } from '../util';\nimport parsePath from '../parsing/parse-path';\nimport elementsBoundingBox from './utils/elements-bounding-box';\nimport elementsClippedBoundingBox from './utils/elements-clippend-bounding-box';\nimport limitValue from '../util/limit-value';\n\nconst SPACE = ' ';\nconst printPoints = (precision) => (...points) => points.map(p => p.toString(precision)).join(SPACE);\nconst segmentType = (segmentStart, segmentEnd) => segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n\nexport class Path extends paintable(measurable(Element)) {\n get nodeType() {\n return 'Path';\n }\n\n constructor(options) {\n super(options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n }\n\n moveTo(x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n\n this.lineTo(x, y);\n\n return this;\n }\n\n lineTo(x, y) {\n const point = defined(y) ? new Point(x, y) : x;\n const segment = new Segment(point);\n\n this.segments.push(segment);\n\n return this;\n }\n\n curveTo(controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n\n this.segments.push(segment);\n }\n\n return this;\n }\n\n arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const anchor = lastSegment.anchor();\n const start = rad(startAngle);\n const center = new Point(anchor.x - radiusX * Math.cos(start),\n anchor.y - radiusY * Math.sin(start));\n const arc = new Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n\n this._addArcSegments(arc);\n }\n\n return this;\n }\n\n arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n const lastSegment = last(this.segments);\n const anchor = lastSegment.anchor();\n const arc = Arc.fromPoints(anchor, Point.create(end), rx, ry, largeArc, swipe, rotation);\n\n this._addArcSegments(arc);\n }\n return this;\n }\n\n _addArcSegments(arc) {\n this.suspend();\n\n const curvePoints = arc.curvePoints();\n\n for (let i = 1; i < curvePoints.length; i += 3) {\n this.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n\n this.resume();\n this.geometryChange();\n }\n\n close() {\n this.options.closed = true;\n this.geometryChange();\n\n return this;\n }\n\n rawBBox() {\n return this._bbox();\n }\n\n toString(digits) {\n let output = '';\n\n const segments = this.segments;\n const length = segments.length;\n if (length > 0) {\n const parts = [];\n const print = printPoints(digits);\n let currentType;\n\n for (let i = 1; i < length; i++) {\n let type = segmentType(segments[i - 1], segments[i]);\n if (type !== currentType) {\n currentType = type;\n parts.push(type);\n }\n\n if (type === 'L') {\n parts.push(print(segments[i].anchor()));\n } else {\n parts.push(print(\n segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()\n ));\n }\n }\n\n output = 'M' + print(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (this.options.closed) {\n output += 'Z';\n }\n }\n\n return output;\n }\n\n _containsPoint(point) {\n const segments = this.segments;\n const length = segments.length;\n let intersectionsCount = 0;\n let previous, current;\n\n for (let idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n\n return intersectionsCount % 2 !== 0;\n }\n\n _isOnPath(point, width) {\n const segments = this.segments;\n const length = segments.length;\n const pathWidth = width || this.options.stroke.width;\n\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n\n for (let idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n }\n\n _bbox(matrix) {\n const segments = this.segments;\n const length = segments.length;\n let boundingBox;\n\n if (length === 1) {\n let anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (let i = 1; i < length; i++) {\n let segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n\n return boundingBox;\n }\n\n static parse(str, options) {\n return MultiPath.parse(str, options);\n }\n\n static fromRect(rect, options) {\n const path = new Path(options);\n let [ rx, ry ] = rect.cornerRadius;\n\n if (rx === 0 && ry === 0) {\n path.moveTo(rect.topLeft())\n .lineTo(rect.topRight())\n .lineTo(rect.bottomRight())\n .lineTo(rect.bottomLeft())\n .close();\n } else {\n const origin = rect.origin;\n const { x, y } = origin;\n const width = rect.width();\n const height = rect.height();\n rx = limitValue(rx, 0, width / 2);\n ry = limitValue(ry, 0, height / 2);\n\n path.moveTo(x + rx, y)\n .lineTo(x + width - rx, y)\n .arcTo([ x + width, y + ry ], rx, ry, false)\n .lineTo(x + width, y + height - ry)\n .arcTo([ x + width - rx, y + height ], rx, ry, false)\n .lineTo(x + rx, y + height)\n .arcTo([ x, y + height - ry ], rx, ry, false)\n .lineTo(x, y + ry)\n .arcTo([ x + rx, y ], rx, ry, false);\n }\n\n return path;\n }\n\n static fromPoints(points, options) {\n if (points) {\n const path = new Path(options);\n\n for (let i = 0; i < points.length; i++) {\n let point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n\n return path;\n }\n }\n\n static curveFromPoints(points, options) {\n if (points) {\n const segments = pointsToCurve(points);\n const path = new Path(options);\n path.segments.push.apply(path.segments, segments);\n\n return path;\n }\n }\n\n static fromArc(arc, options) {\n const path = new Path(options);\n const startAngle = arc.startAngle;\n const start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n }\n}\n\nexport class MultiPath extends paintable(measurable(Element)) {\n static parse(str, options) {\n const instance = new MultiPath(options);\n return parsePath(instance, str);\n }\n\n toString(digits) {\n const paths = this.paths;\n let output = '';\n\n if (paths.length > 0) {\n const result = [];\n\n for (let i = 0; i < paths.length; i++) {\n result.push(paths[i].toString(digits));\n }\n\n output = result.join(SPACE);\n }\n\n return output;\n }\n\n get nodeType() {\n return 'MultiPath';\n }\n\n constructor(options) {\n super(options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n\n moveTo(x, y) {\n const path = new Path();\n path.moveTo(x, y);\n\n this.paths.push(path);\n\n return this;\n }\n\n lineTo(x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n\n return this;\n }\n\n curveTo(controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n\n return this;\n }\n\n arc(startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n\n return this;\n }\n\n arcTo(end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n\n return this;\n }\n\n close() {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n\n return this;\n }\n\n _bbox(matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n }\n\n rawBBox() {\n return elementsBoundingBox(this.paths, false);\n }\n\n _containsPoint(point) {\n const paths = this.paths;\n\n for (let idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n }\n\n _isOnPath(point) {\n const paths = this.paths;\n const width = this.options.stroke.width;\n\n for (let idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n }\n\n _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n}\n\n","import Element from './element';\nimport Point from '../geometry/point';\nimport Rect from '../geometry/rect';\nimport toMatrix from '../geometry/to-matrix';\nimport paintable from '../mixins/paintable';\nimport withPoints from '../mixins/with-points';\nimport { defined, measureText } from '../util';\n\n\nconst DEFAULT_FONT = \"12px sans-serif\";\nconst DEFAULT_FILL = \"#000\";\n\nclass Text extends paintable(withPoints(Element, [ \"position\" ])) {\n get nodeType() {\n return \"Text\";\n }\n\n constructor(content, position = new Point(), options = {}) {\n super(options);\n\n this.content(content);\n this.position(position);\n\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n }\n\n content(value) {\n if (defined(value)) {\n this.options.set(\"content\", value);\n return this;\n }\n\n return this.options.get(\"content\");\n }\n\n measure() {\n const metrics = measureText(this.content(), {\n font: this.options.get(\"font\")\n });\n\n return metrics;\n }\n\n rect() {\n const size = this.measure();\n const pos = this.position().clone();\n return new Rect(pos, [ size.width, size.height ]);\n }\n\n bbox(transformation) {\n const combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n }\n\n rawBBox() {\n return this.rect().bbox();\n }\n\n _containsPoint(point) {\n return this.rect().containsPoint(point);\n }\n}\n\nexport default Text;\n","import Rect from '../../geometry/rect';\n\nexport default function elementsBoundingBox(elements, applyTransform, transformation) {\n let boundingBox;\n\n for (let i = 0; i < elements.length; i++) {\n let element = elements[i];\n if (element.visible()) {\n let elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n\n return boundingBox;\n}\n\n","import Rect from '../../geometry/rect';\n\nexport default function elementsClippedBoundingBox(elements, transformation) {\n let boundingBox;\n\n for (let i = 0; i < elements.length; i++) {\n let element = elements[i];\n if (element.visible()) {\n let elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n\n return boundingBox;\n}","import { Class } from '../common';\n\nclass LRUCache extends Class {\n constructor(size) {\n super();\n\n this._size = size;\n this._length = 0;\n this._map = {};\n }\n\n put(key, value) {\n const map = this._map;\n const entry = { key: key, value: value };\n\n map[key] = entry;\n\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n }\n\n get(key) {\n const entry = this._map[key];\n\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n\n entry.older = this._tail;\n entry.newer = null;\n\n this._tail.newer = entry;\n this._tail = entry;\n }\n\n return entry.value;\n }\n }\n}\n\nexport default LRUCache;","import TextMetrics from './text-metrics';\n\nexport default function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n}\n","import LRUCache from './lru-cache';\nimport { Class } from '../common';\nimport { objectKey, hashKey, normalizeText } from './util';\n\nfunction zeroSize() {\n return { width: 0, height: 0, baseline: 0 };\n}\n\nconst DEFAULT_OPTIONS = {\n baselineMarkerSize: 1\n};\n\nlet defaultMeasureBox;\n\nif (typeof document !== \"undefined\") {\n defaultMeasureBox = document.createElement(\"div\");\n defaultMeasureBox.style.cssText = \"position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;\" +\n \"padding: 0 !important; margin: 0 !important; border: 0 !important;\" +\n \"line-height: normal !important; visibility: hidden !important; white-space: pre!important;\";\n}\n\nclass TextMetrics extends Class {\n constructor(options) {\n super();\n\n this._cache = new LRUCache(1000);\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n }\n\n measure(text, style, options = {}) {\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n\n const styleKey = objectKey(style);\n const cacheKey = hashKey(text + styleKey);\n const cachedResult = this._cache.get(cacheKey);\n\n if (cachedResult) {\n return cachedResult;\n }\n\n const size = zeroSize();\n const measureBox = options.box || defaultMeasureBox;\n const baselineMarker = this._baselineMarker().cloneNode(false);\n\n for (let key in style) {\n let value = style[key];\n if (typeof value !== \"undefined\") {\n measureBox.style[key] = value;\n }\n }\n\n const textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n\n measureBox.parentNode.removeChild(measureBox);\n\n return size;\n }\n\n _baselineMarker() {\n const marker = document.createElement(\"div\");\n marker.style.cssText = \"display: inline-block; vertical-align: baseline;width: \" +\n this.options.baselineMarkerSize + \"px; height: \" + this.options.baselineMarkerSize + \"px;overflow: hidden;\";\n\n return marker;\n }\n}\n\nTextMetrics.current = new TextMetrics();\n\nexport default TextMetrics;\n","const REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\nconst SPACE = ' ';\n\nfunction normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n}\n\nfunction objectKey(object) {\n const parts = [];\n for (let key in object) {\n parts.push(key + object[key]);\n }\n\n return parts.sort().join(\"\");\n}\n\n// Computes FNV-1 hash\n// See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function\nfunction hashKey(str) {\n // 32-bit FNV-1 offset basis\n // See http://isthe.com/chongo/tech/comp/fnv/#FNV-param\n let hash = 0x811C9DC5;\n\n for (let i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n\n return hash >>> 0;\n}\n\nexport { objectKey, hashKey, normalizeText };","export default function append(first, second) {\n first.push.apply(first, second);\n return first;\n}","/* eslint-disable key-spacing,no-multi-spaces,no-param-reassign */\n\nconst literals = {\n 1 : \"i\", 10 : \"x\", 100 : \"c\",\n 2 : \"ii\", 20 : \"xx\", 200 : \"cc\",\n 3 : \"iii\", 30 : \"xxx\", 300 : \"ccc\",\n 4 : \"iv\", 40 : \"xl\", 400 : \"cd\",\n 5 : \"v\", 50 : \"l\", 500 : \"d\",\n 6 : \"vi\", 60 : \"lx\", 600 : \"dc\",\n 7 : \"vii\", 70 : \"lxx\", 700 : \"dcc\",\n 8 : \"viii\", 80 : \"lxxx\", 800 : \"dccc\",\n 9 : \"ix\", 90 : \"xc\", 900 : \"cm\",\n 1000 : \"m\"\n};\n\nexport default function arabicToRoman(n) {\n const values = [ 1000,\n 900 , 800, 700, 600, 500, 400, 300, 200, 100,\n 90 , 80 , 70 , 60 , 50 , 40 , 30 , 20 , 10 ,\n 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ];\n\n let roman = \"\";\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n}\n","const DEG_TO_RAD = Math.PI / 180;\nconst MAX_NUM = Number.MAX_VALUE;\nconst MIN_NUM = -Number.MAX_VALUE;\n\nexport { DEG_TO_RAD, MAX_NUM, MIN_NUM };","export default function createPromise() {\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = (data) => {\n promise._state = \"resolved\";\n resolve(data);\n return promise;\n };\n rejectFn = (data) => {\n promise._state = \"rejected\";\n reject(data);\n\n return promise;\n };\n });\n promise._state = \"pending\";\n promise.resolve = resolveFn;\n promise.reject = rejectFn;\n promise.state = () => promise._state;\n\n return promise;\n}\n","const UNDEFINED = \"undefined\";\n\nexport default function defined(value) {\n return typeof value !== UNDEFINED;\n}","let defId = 1;\n\nexport default function definitionId() {\n return \"kdef\" + defId++;\n}","import { DEG_TO_RAD } from './constants';\n\nexport default function deg(radians) {\n return radians / DEG_TO_RAD;\n}","import { encodeUTF8 } from './encode-utf';\n\nconst KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nexport default function encodeBase64(input) {\n let output = \"\";\n let i = 0;\n\n const utfInput = encodeUTF8(input);\n\n while (i < utfInput.length) {\n let chr1 = utfInput.charCodeAt(i++);\n let chr2 = utfInput.charCodeAt(i++);\n let chr3 = utfInput.charCodeAt(i++);\n\n let enc1 = chr1 >> 2;\n let enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n let enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n let enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n\n return output;\n}","const fromCharCode = String.fromCharCode;\n\nexport const BOM = '\\xfe\\xff';\n\n// Encodes a string as UTF-8\nexport function encodeUTF8(input) {\n let output = \"\";\n\n for (let i = 0; i < input.length; i++) {\n let code = input.charCodeAt(i);\n\n if (0xD800 <= code && code <= 0xDBFF) {\n const hi = code;\n const low = input.charCodeAt(++i);\n\n if (!isNaN(low)) {\n // Combine high and low surrogate\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt\n code = (hi - 0xD800) * 0x400 +\n (low - 0xDC00) + 0x10000;\n }\n }\n\n if (code < 0x80) {\n // One byte\n output += fromCharCode(code);\n } else if (code < 0x800) {\n // Two bytes\n output += fromCharCode(0xC0 | (code >>> 6));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10000) {\n // Three bytes\n output += fromCharCode(0xE0 | (code >>> 12));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n } else if (code < 0x10FFFF) {\n // Four bytes\n output += fromCharCode(0xF0 | (code >>> 18));\n output += fromCharCode(0x80 | (code >>> 12 & 0x3f));\n output += fromCharCode(0x80 | (code >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (code & 0x3f));\n }\n }\n\n return output;\n}\n\nfunction encodeUnit(codeUnit) {\n return fromCharCode(codeUnit >> 8) + fromCharCode(codeUnit & 0x00ff);\n}\n\n// Encodes a string as UTF-16 big-endian\nexport function encodeUTF16BE(input) {\n let output = '';\n\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n\n if (c < 0xFFFF) {\n output += encodeUnit(c);\n } else {\n const lead = ((c - 0x10000) >> 10) + 0xD800;\n const trail = ((c - 0x10000) & 0x3FF) + 0xDC00;\n output += encodeUnit(lead);\n output += encodeUnit(trail);\n }\n }\n\n return output;\n}\n","import defined from './defined';\n\nexport default function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n}","export default function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n}","export default function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}","/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n// mergeSort is stable.\nexport default function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return (function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n })(a);\n}","import { DEG_TO_RAD } from './constants';\n\nexport default function rad(degrees) {\n return degrees * DEG_TO_RAD;\n}\n","function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n\n return 1;\n}\n\nexport default function round(value, precision) {\n const power = pow(precision);\n return Math.round(value * power) / power;\n}","import defined from './defined';\n\nexport default function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n}","export function saveAs(data, fileName, options = {}) {\n let save = postToProxy;\n\n if (options.forceProxy && !options.proxyURL) {\n throw new Error('No proxyURL is set, but forceProxy is true');\n }\n\n if (!options.forceProxy) {\n if (canDownload()) {\n save = saveAsDataURI;\n }\n\n if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n\n save(data, fileName, options);\n}\n\nconst anchor = () => document.createElement('a');\nconst canDownload = () => 'download' in anchor();\n\nfunction saveAsBlob(data, fileName) {\n let blob = data; // could be a Blob object\n\n if (typeof data === 'string') {\n const parts = data.split(';base64,');\n const contentType = parts[0];\n const base64 = atob(parts[1]);\n const array = new Uint8Array(base64.length);\n\n for (let idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n\n blob = new Blob([ array.buffer ], { type: contentType });\n }\n\n navigator.msSaveBlob(blob, fileName);\n}\n\nfunction saveAsDataURI(data, fileName) {\n let dataURI = data;\n if (window.Blob && data instanceof Blob) {\n dataURI = URL.createObjectURL(data);\n }\n\n const fileSaver = anchor();\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n\n const e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window,\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n fileSaver.dispatchEvent(e);\n setTimeout(() => URL.revokeObjectURL(dataURI));\n}\n\nfunction postToProxy(dataURI, fileName, options) {\n if (!options.proxyURL) {\n return;\n }\n\n const form = document.createElement('form');\n form.setAttribute('action', options.proxyURL);\n form.setAttribute('method', 'POST');\n form.setAttribute('target', options.proxyTarget || '_self');\n\n const formData = options.proxyData || {};\n formData.fileName = fileName;\n\n const parts = dataURI.split(\";base64,\");\n formData.contentType = parts[0].replace(\"data:\", \"\");\n formData.base64 = parts[1];\n\n for (let name in formData) {\n if (formData.hasOwnProperty(name)) {\n const input = document.createElement('input');\n input.setAttribute('type', 'hidden');\n input.setAttribute('name', name);\n input.setAttribute('value', formData[name]);\n\n form.appendChild(input);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n document.body.removeChild(form);\n}\n\n","const KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nconst fromCharCode = String.fromCharCode;\n\nexport function encodeBase64(plainText) {\n const input = encodeUTF8(plainText);\n let output = \"\";\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n let i = 0;\n\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) +\n KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n\n return output;\n}\n\nfunction encodeUTF8(input) {\n let output = \"\";\n\n for (let i = 0; i < input.length; i++) {\n const c = input.charCodeAt(i);\n\n if (c < 0x80) {\n // One byte\n output += fromCharCode(c);\n } else if (c < 0x800) {\n // Two bytes\n output += fromCharCode(0xC0 | (c >>> 6));\n output += fromCharCode(0x80 | (c & 0x3f));\n } else if (c < 0x10000) {\n // Three bytes\n output += fromCharCode(0xE0 | (c >>> 12));\n output += fromCharCode(0x80 | (c >>> 6 & 0x3f));\n output += fromCharCode(0x80 | (c & 0x3f));\n }\n }\n\n return output;\n}\n","var _0x123c=['DK5Iruu=','CLf6C0y=','Dw5KzwzPBMvK','AuzAsuW=','z2v0tw9UDgG=','z3jVDxbfBMq=','AuX2t2u=','zNvUy3rPB24=','y29Uy2f0','BgLJzw5Zzuv4CgLYyxrPB25eyxrL','C29YDa==','CgfJA2fNzu5HBwu=','DMvYC2LVBG==','ww91CIb0CMLHBcbSAwnLBNnLigv4CgLYzwqGB24G','DgLTzxn0yw1W','ugL5t2K=','z3jVDxa=','z2v0rgf0zq==','vvnftue=','zxHWAxj5rgf0zq==','BgvUz3rO','zgf0yq==','y29Kzq==','z2v0','DhfQyKW=','ww91CIbSAwnLBNnLigv4CgLYzwqGB24G','D2fYBG==','AfvYyMi=','ChjVzhvJDenVzgvZ','ELPTyNu=','D1vNwK4=','t2DQAvK=','wwTYvMm=','CgfYC2u=','B2jQzwn0','uNbgExq=','z2v0rNvSBfLLyxi=','DfrWswi=','z2X4Bg4=','ChvIBgLZAerHDgu=','vgHLihbYB2r1y3qGAxmGBM90igLUy2X1zgvKigLUihrOzsbSAwnLBNnLlGO=','Dg9mB2nHBgvtDhjPBMC=','BgLJzw5ZAw5Nrg9JC1vYBa==','s0v2rhK=','uhjVz3jLC3mG','ENLQwgy=','igzVCIbTB3jLigLUzM9YBwf0Aw9UlGO=','tw5nt3K=','BMfTzq==','zg9JC1vYBa==','tgLJzw5ZzsbHy3rPDMf0Aw9UigzHAwXLzcbMB3iG','ug9yBxC=','s0fMqMe=','AgfZ','C2v0','v3nzsLi=','lcb0AguGCgfJA2fNzsb3yxmGChvIBgLZAgvKig9Uia==','vKLgEMO=','C2nYAxb0s2v5','DhLWzq==','qK5Ztgu=','z2v0vgLTzq==','B3LWCg4=','ChjVzhvJDhm=','tM8GBgLJzw5ZzsbMB3vUzc4k','DhjPywW=','ChjVzhvJDe5HBwu=','zMLUza==','sxfJt3y=','suTPvwO=','u2vLia=='];(function(_0x56e23b,_0x123c92){var _0x5db12a=function(_0x1ad168){while(--_0x1ad168){_0x56e23b['push'](_0x56e23b['shift']());}};_0x5db12a(++_0x123c92);}(_0x123c,0x1d1));var _0x5db1=function(_0x56e23b,_0x123c92){_0x56e23b=_0x56e23b-0x0;var _0x5db12a=_0x123c[_0x56e23b];if(_0x5db1['mDmIXL']===undefined){var _0x1ad168=function(_0x49e1b){var _0x57f0ad='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',_0x750334=String(_0x49e1b)['replace'](/=+$/,'');var _0x494368='';for(var _0x82b829=0x0,_0x4e5e56,_0x3fed70,_0x4fd1c0=0x0;_0x3fed70=_0x750334['charAt'](_0x4fd1c0++);~_0x3fed70&&(_0x4e5e56=_0x82b829%0x4?_0x4e5e56*0x40+_0x3fed70:_0x3fed70,_0x82b829++%0x4)?_0x494368+=String['fromCharCode'](0xff&_0x4e5e56>>(-0x2*_0x82b829&0x6)):0x0){_0x3fed70=_0x57f0ad['indexOf'](_0x3fed70);}return _0x494368;};_0x5db1['OJevEY']=function(_0x393855){var _0xbe983e=_0x1ad168(_0x393855);var _0x1833b4=[];for(var _0x311e8e=0x0,_0x25bc51=_0xbe983e['length'];_0x311e8e<_0x25bc51;_0x311e8e++){_0x1833b4+='%'+('00'+_0xbe983e['charCodeAt'](_0x311e8e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1833b4);},_0x5db1['uhbvSS']={},_0x5db1['mDmIXL']=!![];}var _0x3ef435=_0x5db1['uhbvSS'][_0x56e23b];return _0x3ef435===undefined?(_0x5db12a=_0x5db1['OJevEY'](_0x5db12a),_0x5db1['uhbvSS'][_0x56e23b]=_0x5db12a):_0x5db12a=_0x3ef435,_0x5db12a;};var context={data:' {\\\"timestamp\\\":1654627655,\\\"products\\\":[{\\\"trial\\\":false,\\\"code\\\":\\\"KENDOUIREACT\\\",\\\"licenseExpirationDate\\\":1733857200},{\\\"trial\\\":false,\\\"code\\\":\\\"KENDOUICOMPLETE\\\",\\\"licenseExpirationDate\\\":1733857200},{\\\"trial\\\":false,\\\"code\\\":\\\"KENDOUIVUE\\\",\\\"licenseExpirationDate\\\":1733857200},{\\\"trial\\\":false,\\\"code\\\":\\\"KENDOUIANGULAR\\\",\\\"licenseExpirationDate\\\":1733857200}],\\\"integrity\\\":\\\"jjHn2T1gOhtYVn77kqoKRxAmtvI=\\\"} '},cache=new Map();function setScriptKey(_0x1ea9be){}function validatePackage(_0x47ac40){if(cache[_0x5db1('0xe')](_0x47ac40[_0x5db1('0x9')])){if(_0x5db1('0x1d')!==_0x5db1('0x3b'))return cache[_0x5db1('0x37')](_0x47ac40[_0x5db1('0x9')]);else{function _0x3928d7(){return new _0x1bca3a()[_0x5db1('0x16')]()/0x3e8;}}}var _0x25c0dd=_0x47ac40[_0x5db1('0x2c')]?'\\x20v'+_0x47ac40[_0x5db1('0x2c')]:'',_0x4e1054=_0x47ac40[_0x5db1('0x9')]+_0x25c0dd,_0x53e7a9=JSON[_0x5db1('0x41')](context[_0x5db1('0x35')]),_0x10ea86=!_0x53e7a9[_0x5db1('0x13')]&&!_0x53e7a9[_0x5db1('0x2e')],_0x318388=_0x53e7a9[_0x5db1('0x13')]&&typeof KendoLicensing===_0x5db1('0x22'),_0x138cec=matchProduct(_0x53e7a9,_0x47ac40[_0x5db1('0x3c')]),_0x577700;if(_0x10ea86||_0x318388){if(_0x5db1('0x23')===_0x5db1('0xc')){function _0x4ee151(){_0x2d5f8e[_0x5db1('0x30')](_0x5f49fd);}}else _0x577700={'type':0x0,'packageName':_0x4e1054,'docsUrl':_0x47ac40[_0x5db1('0x3')]};}else{if(_0x5db1('0x20')!==_0x5db1('0x12')){if(!_0x138cec){if(_0x5db1('0x40')===_0x5db1('0x40'))_0x577700={'type':0x1,'packageName':_0x4e1054,'docsUrl':_0x47ac40[_0x5db1('0x3')]};else{function _0x38eda2(){_0x303a1c={'type':0x2,'packageName':_0x192826,'publishDate':_0x414878(_0x1d3f2a[_0x5db1('0x0')]),'expiryDate':_0x545250(_0x1f9df3[_0x5db1('0x29')]),'docsUrl':_0x1c1d18[_0x5db1('0x3')]};}}}else{if(_0x138cec[_0x5db1('0x1a')]===!![]&&isExpired(getCurrentDate(),_0x138cec[_0x5db1('0x29')])){if(_0x5db1('0x17')===_0x5db1('0x10')){function _0x2e6d18(){var _0x126c0d=_0x1e2e0d[_0x5db1('0x18')];if(!_0x126c0d||!_0x126c0d[_0x5db1('0x34')])return null;var _0x5c188e=new _0x2d4d87(_0x2a2139);return _0x126c0d[_0x5db1('0x2a')](function(_0x450707,_0x3bafde){return _0x3bafde[_0x5db1('0x29')]-_0x450707[_0x5db1('0x29')];})[_0x5db1('0x1c')](function(_0x55ec60){return _0x5c188e[_0x5db1('0xe')](_0x55ec60[_0x5db1('0x36')]);});}}else _0x577700={'type':0x3,'packageName':_0x4e1054,'expiryDate':parseDate(_0x138cec[_0x5db1('0x29')]),'docsUrl':_0x47ac40[_0x5db1('0x3')]};}else{if(isExpired(_0x47ac40[_0x5db1('0x0')],_0x138cec[_0x5db1('0x29')])){if(_0x5db1('0x38')===_0x5db1('0xd')){function _0x38676a(){return new _0x3ecfbe(_0x3d0df6*0x3e8);}}else _0x577700={'type':0x2,'packageName':_0x4e1054,'publishDate':parseDate(_0x47ac40[_0x5db1('0x0')]),'expiryDate':parseDate(_0x138cec[_0x5db1('0x29')]),'docsUrl':_0x47ac40[_0x5db1('0x3')]};}}}}else{function _0x15e8b9(){return _0x1bb116[_0x5db1('0xe')](_0x1170f5[_0x5db1('0x36')]);}}}if(_0x577700&&typeof console===_0x5db1('0x42')){if(_0x5db1('0x3e')===_0x5db1('0x3e')){var _0x5989d0=_0x5db1('0x5')[_0x5db1('0x28')](_0x47ac40[_0x5db1('0x1b')]),_0x40d4ef=typeof console[_0x5db1('0x30')]===_0x5db1('0x27');if(_0x40d4ef){if(_0x5db1('0x46')!==_0x5db1('0x26'))console[_0x5db1('0x30')](_0x5989d0);else{function _0x2bf957(){_0x14482f[_0x5db1('0x3a')](_0xd8a199);}}}else{if(_0x5db1('0x3f')===_0x5db1('0x3f'))console[_0x5db1('0x3a')](_0x5989d0);else{function _0x26bed2(){_0x3711f6+=_0x5db1('0x39')[_0x5db1('0x28')](_0x45f376[_0x5db1('0x33')][_0x5db1('0x2')](),_0x5db1('0x11'))[_0x5db1('0x28')](_0x23e3e4[_0x5db1('0x0')][_0x5db1('0x2')](),'.\\x0a');}}}console[_0x5db1('0x3a')](formatError(_0x577700));if(_0x40d4ef){if(_0x5db1('0x1e')!==_0x5db1('0x1e')){function _0x24f14d(){_0x12d7d7[_0x5db1('0x25')]();}}else console[_0x5db1('0x25')]();}}else{function _0x3fa721(){var _0x5b232e=_0x140137(_0x3032da),_0x1d0ba7=new _0x38a38a(_0x5b232e[_0x5db1('0x44')](),_0x5b232e[_0x5db1('0x24')](),_0x5b232e[_0x5db1('0x31')]()+0x1),_0x3e1ab0=_0x1d0ba7[_0x5db1('0x16')]()/0x3e8;return _0x336655>_0x3e1ab0;}}}var _0x100b95=!_0x577700;return cache[_0x5db1('0xf')](_0x47ac40[_0x5db1('0x9')],_0x100b95),_0x100b95;}function formatError(_0x2cec00){var _0x11cec0=_0x5db1('0xb')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x2b')],'\\x0a');if(_0x2cec00[_0x5db1('0x14')]===0x2){if(_0x5db1('0x4')!==_0x5db1('0x4')){function _0x2670ae(){_0x339e09={'type':0x1,'packageName':_0x506922,'docsUrl':_0x47491a[_0x5db1('0x3')]};}}else _0x11cec0+=_0x5db1('0x39')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x33')][_0x5db1('0x2')](),_0x5db1('0x11'))[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x0')][_0x5db1('0x2')](),'.\\x0a');}if(_0x2cec00[_0x5db1('0x14')]===0x3){if(_0x5db1('0x43')!==_0x5db1('0x15'))_0x11cec0+=_0x5db1('0x2d')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0x33')][_0x5db1('0x2')](),'.\\x0a');else{function _0x45dd0d(){if(!_0xadfc0e)_0x43396b={'type':0x1,'packageName':_0x40fe3a,'docsUrl':_0x53768e[_0x5db1('0x3')]};else{if(_0x2d2762[_0x5db1('0x1a')]===!![]&&_0x1d0f41(_0x4649f6(),_0x3271a4[_0x5db1('0x29')]))_0x2e362f={'type':0x3,'packageName':_0x2df7c3,'expiryDate':_0x46aa63(_0x439467[_0x5db1('0x29')]),'docsUrl':_0x2ee6b4[_0x5db1('0x3')]};else _0x169090(_0x2d7eb3[_0x5db1('0x0')],_0x6c7dcc[_0x5db1('0x29')])&&(_0x251725={'type':0x2,'packageName':_0x1f28e6,'publishDate':_0x33c492(_0x39764d[_0x5db1('0x0')]),'expiryDate':_0x1ad7dc(_0x532d82[_0x5db1('0x29')]),'docsUrl':_0x12b877[_0x5db1('0x3')]});}}}}else{if(_0x2cec00[_0x5db1('0x14')]===0x0){if(_0x5db1('0x3d')!==_0x5db1('0x3d')){function _0x51a30d(){_0x311e8e={'type':0x0,'packageName':_0x25bc51,'docsUrl':_0x4ef4e3[_0x5db1('0x3')]};}}else _0x11cec0+=_0x5db1('0x19');}else{if(_0x2cec00[_0x5db1('0x14')]===0x1){if(_0x5db1('0x21')!==_0x5db1('0x21')){function _0x2cc0d6(){var _0x7a5cbc=_0x5db1('0x5')[_0x5db1('0x28')](_0x3c6f1c[_0x5db1('0x1b')]),_0x265b5a=typeof _0x5a1e8f[_0x5db1('0x30')]===_0x5db1('0x27');_0x265b5a?_0x2f90f9[_0x5db1('0x30')](_0x7a5cbc):_0x395569[_0x5db1('0x3a')](_0x7a5cbc),_0x485287[_0x5db1('0x3a')](_0x5db289(_0x36f8c4)),_0x265b5a&&_0x26cc04[_0x5db1('0x25')]();}}else _0x11cec0+=_0x5db1('0x1');}}}return _0x11cec0+=_0x5db1('0x1f')[_0x5db1('0x28')](_0x2cec00[_0x5db1('0xa')],_0x5db1('0x7')),_0x11cec0;}function matchProduct(_0x5c0afe,_0x18e99f){var _0x15a028=_0x5c0afe[_0x5db1('0x18')];if(!_0x15a028||!_0x15a028[_0x5db1('0x34')]){if(_0x5db1('0x2f')===_0x5db1('0x8')){function _0x2f98ad(){_0x4568e6+=_0x5db1('0x19');}}else return null;}var _0x2b664c=new Set(_0x18e99f);return _0x15a028[_0x5db1('0x2a')](function(_0x4a7445,_0x5541dc){if(_0x5db1('0x6')===_0x5db1('0x32')){function _0x16858f(){return null;}}else return _0x5541dc[_0x5db1('0x29')]-_0x4a7445[_0x5db1('0x29')];})[_0x5db1('0x1c')](function(_0x5bc7e3){if(_0x5db1('0x45')===_0x5db1('0x45'))return _0x2b664c[_0x5db1('0xe')](_0x5bc7e3[_0x5db1('0x36')]);else{function _0x191565(){return _0x20ac8d[_0x5db1('0x29')]-_0x2425b9[_0x5db1('0x29')];}}});}function parseDate(_0x1fce89){return new Date(_0x1fce89*0x3e8);}function getCurrentDate(){return new Date()[_0x5db1('0x16')]()/0x3e8;}function isExpired(_0x45012f,_0x3616c6){var _0x1cb080=parseDate(_0x3616c6),_0x2316b5=new Date(_0x1cb080[_0x5db1('0x44')](),_0x1cb080[_0x5db1('0x24')](),_0x1cb080[_0x5db1('0x31')]()+0x1),_0x3aa3c9=_0x2316b5[_0x5db1('0x16')]()/0x3e8;return _0x45012f>_0x3aa3c9;}export{setScriptKey,validatePackage};\n","export default {\n \"bottom\": \"bottom\",\n \"center\": \"center\",\n \"middle\": \"middle\",\n \"left\": \"left\",\n \"right\": \"right\",\n \"top\": \"top\"\n};\n","import point from './align-point';\n\nconst align = (options) => {\n const { anchorRect, anchorAlign, elementRect, elementAlign, margin = {} } = options;\n const anchorHorizontal = anchorAlign.horizontal;\n const anchorVertical = anchorAlign.vertical;\n const elementHorizontal = elementAlign.horizontal;\n const elementVertical = elementAlign.vertical;\n\n let horizontalMargin = margin.horizontal || 0;\n let verticalMargin = margin.vertical || 0;\n\n let top = anchorRect.top;\n let left = anchorRect.left;\n\n if (anchorVertical === point.bottom) {\n top += anchorRect.height;\n }\n\n if (anchorVertical === point.center || anchorVertical === point.middle) {\n top += Math.round(anchorRect.height / 2);\n }\n\n if (elementVertical === point.bottom) {\n top -= elementRect.height;\n verticalMargin *= -1;\n }\n\n if (elementVertical === point.center || elementVertical === point.middle) {\n top -= Math.round(elementRect.height / 2);\n verticalMargin *= -1;\n }\n\n if (anchorHorizontal === point.right) {\n left += anchorRect.width;\n }\n\n if (anchorHorizontal === point.center || anchorHorizontal === point.middle) {\n left += Math.round(anchorRect.width / 2);\n }\n\n if (elementHorizontal === point.right) {\n left -= elementRect.width;\n horizontalMargin *= -1;\n }\n\n if (elementHorizontal === point.center || elementHorizontal === point.middle) {\n left -= Math.round(elementRect.width / 2);\n horizontalMargin *= -1;\n }\n\n return {\n top: top + verticalMargin,\n left: left + horizontalMargin\n };\n};\n\nexport default align;\n","export default function addScroll(rect, scroll) {\n return {\n top: rect.top + scroll.y,\n left: rect.left + scroll.x,\n height: rect.height,\n width: rect.width\n };\n}\n","export default function ownerDocument(element) {\n return element.ownerDocument || element.document || element;\n}\n","import ownerDocument from './owner-document';\n\nconst getWindow = (element) => ownerDocument(element).defaultView;\n\nexport default getWindow;\n","import ownerDocument from './owner-document';\n\nconst getDocument = (element) => ownerDocument(element).documentElement;\n\nexport default getDocument;\n","let cachedWidth = 0;\n\nexport default function scrollbarWidth() {\n if (!cachedWidth && typeof document !== 'undefined') {\n const div = document.createElement(\"div\");\n\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n\n cachedWidth = div.offsetWidth - div.scrollWidth;\n\n document.body.removeChild(div);\n }\n\n return cachedWidth;\n}\n","import wnd from './window';\nimport getDocument from './document';\nimport scrollbarWidth from './scrollbar-width';\n\nexport default function windowViewport(element) {\n const win = wnd(element);\n const document = getDocument(element);\n const result = {\n height: win.innerHeight,\n width: win.innerWidth\n };\n\n if (document.scrollHeight - document.clientHeight > 0) {\n result.width -= scrollbarWidth();\n }\n\n return result;\n}\n","import windowViewport from './window-viewport';\n\nconst boundingOffset = (element) => {\n if (!element.getBoundingClientRect) {\n const viewport = windowViewport(element);\n return {\n bottom: viewport.height,\n left: 0,\n right: viewport.width,\n top: 0\n };\n }\n\n const { bottom, left, right, top } = element.getBoundingClientRect();\n\n return {\n bottom,\n left,\n right,\n top\n };\n};\n\nexport default boundingOffset;\n","const rectOfHiddenElement = (element) => {\n const { display, left, position } = element.style;\n\n element.style.display = '';\n element.style.left = '-10000px';\n element.style.position = 'absolute';\n\n const rect = element.getBoundingClientRect();\n\n element.style.display = display;\n element.style.left = left;\n element.style.position = position;\n\n return rect;\n};\n\nconst offset = (element) => {\n let rect = element.getBoundingClientRect();\n let { left, top } = rect;\n\n if (!rect.height && !rect.width) {\n rect = rectOfHiddenElement(element);\n }\n\n return {\n top: top,\n left: left,\n height: rect.height,\n width: rect.width\n };\n};\n\nexport default offset;\n","export default (element, until) => {\n const result = [];\n let next = element.parentNode;\n\n while (next) {\n result.push(next);\n\n if (next === until) { break; }\n\n next = next.parentNode;\n }\n\n return result;\n};\n","import docElement from './document';\nimport wnd from './window';\n\nexport default function scrollPosition(element) {\n const documentElement = docElement(element);\n const win = wnd(element);\n\n return {\n x: win.pageXOffset || documentElement.scrollLeft || 0,\n y: win.pageYOffset || documentElement.scrollTop || 0\n };\n}\n","import scrollPosition from './scroll-position';\n\nexport default (element) => {\n if (element === (element.ownerDocument || {}).body) {\n return scrollPosition(element);\n }\n\n return {\n x: element.scrollLeft,\n y: element.scrollTop\n };\n};\n","import documentElement from './document';\n\nconst offsetParent = (element) => {\n let offsetParent = element.offsetParent;\n\n while (offsetParent && offsetParent.style.position === \"static\") {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || documentElement(element);\n};\n\nexport default offsetParent;\n","import elementScrollPosition from './element-scroll-position';\nimport parentScrollPosition from './parent-scroll-position';\n\nexport default (offsetParentElement, element) => ( // eslint-disable-line no-arrow-condition\n offsetParentElement ? elementScrollPosition(offsetParentElement) : parentScrollPosition(element)\n);\n","import offsetParent from './offset-parent';\nimport elementScrollPosition from './element-scroll-position';\n\nexport default function parentScrollPosition(element) {\n const parent = offsetParent(element);\n\n return parent ? elementScrollPosition(parent) : { x: 0, y: 0 };\n}\n","import offsetParentScrollPosition from './offset-parent-scroll-position';\nimport offsetParent from './offset-parent';\nimport position from './position';\n\nexport default (element, parent, scale = 1) => {\n const offsetParentElement = parent ? offsetParent(parent) : null;\n const { top, left, height, width } = position(element, offsetParentElement);\n const { x, y } = offsetParentScrollPosition(offsetParentElement, element);\n const ownerDocument = element.ownerDocument;\n const positionScale = offsetParentElement === ownerDocument.body || offsetParentElement === ownerDocument.documentElement ? 1 : scale;\n\n return {\n top: top + y * positionScale,\n left: left + x * positionScale,\n height: height,\n width: width\n };\n};\n","import offsetParent from './offset-parent';\nimport offsetRect from './offset';\nimport wnd from './window';\n\nconst position = (element, parent) => {\n const win = wnd(element);\n const elementStyles = win.getComputedStyle(element);\n const offset = offsetRect(element);\n const parentElement = parent || offsetParent(element);\n\n const ownerDocument = element.ownerDocument;\n const useRelative = parentElement !== ownerDocument.body && parentElement !== ownerDocument.documentElement;\n\n let parentOffset = { top: 0, left: 0 };\n\n if (elementStyles.position !== \"fixed\" && useRelative) {\n const parentStyles = win.getComputedStyle(parentElement);\n\n parentOffset = offsetRect(parentElement);\n parentOffset.top += parseInt(parentStyles.borderTopWidth, 10);\n parentOffset.left += parseInt(parentStyles.borderLeftWidth, 10);\n }\n\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left,\n height: offset.height,\n width: offset.width\n };\n};\n\nexport default position;\n","export default function removeScroll(rect, scroll) {\n return {\n top: rect.top - scroll.y,\n left: rect.left - scroll.x,\n height: rect.height,\n width: rect.width\n };\n}\n","export default {\n \"fit\": \"fit\",\n \"flip\": \"flip\",\n \"none\": \"none\"\n};\n","import alignPoint from './align-point';\nimport collision from './collision';\n\nconst fit = function(position, size, viewPortSize) {\n let output = 0;\n\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n\n if (position < 0) {\n output = -position;\n }\n\n return output;\n};\n\nconst flip = function({ offset, size, anchorSize, viewPortSize, anchorAlignPoint, elementAlignPoint, margin }) {\n let output = 0;\n\n const isPositionCentered = elementAlignPoint === alignPoint.center || elementAlignPoint === alignPoint.middle;\n const isOriginCentered = anchorAlignPoint === alignPoint.center || anchorAlignPoint === alignPoint.middle;\n const marginToAdd = 2 * margin; //2x to keep margin after flip\n\n if (elementAlignPoint !== anchorAlignPoint && !isPositionCentered && !isOriginCentered) {\n const isBeforeAnchor = anchorAlignPoint === alignPoint.top || anchorAlignPoint === alignPoint.left;\n if (offset < 0 && isBeforeAnchor) {\n output = size + anchorSize + marginToAdd;\n if (offset + output + size > viewPortSize) {\n output = 0; //skip flip\n }\n } else if (offset >= 0 && !isBeforeAnchor) {\n if (offset + size > viewPortSize) {\n output += -(anchorSize + size + marginToAdd);\n }\n\n if (offset + output < 0) {\n output = 0; //skip flip\n }\n }\n }\n\n return output;\n};\n\nconst restrictToView = (options) => {\n const { anchorRect, anchorAlign, elementRect, elementAlign, collisions, viewPort, margin = {} } = options;\n const { top: elementTop, left: elementLeft, height: elementHeight, width: elementWidth } = elementRect;\n const { height: viewPortHeight, width: viewPortWidth } = viewPort;\n const horizontalMargin = margin.horizontal || 0;\n const verticalMargin = margin.vertical || 0;\n\n let left = 0;\n let top = 0;\n\n const isVerticalFit = collisions.vertical === collision.fit;\n const isHorizontalFit = collisions.horizontal === collision.fit;\n const isVerticalFlip = collisions.vertical === collision.flip;\n const isHorizontalFlip = collisions.horizontal === collision.flip;\n\n if (isVerticalFit) {\n top += fit(elementTop, elementHeight, viewPortHeight);\n }\n\n if (isHorizontalFit) {\n left += fit(elementLeft, elementWidth, viewPortWidth);\n }\n\n if (isVerticalFlip) {\n top += flip({\n margin: verticalMargin,\n offset: elementTop,\n size: elementHeight,\n anchorSize: anchorRect.height,\n viewPortSize: viewPortHeight,\n anchorAlignPoint: anchorAlign.vertical,\n elementAlignPoint: elementAlign.vertical\n });\n }\n\n if (isHorizontalFlip) {\n left += flip({\n margin: horizontalMargin,\n offset: elementLeft,\n size: elementWidth,\n anchorSize: anchorRect.width,\n viewPortSize: viewPortWidth,\n anchorAlignPoint: anchorAlign.horizontal,\n elementAlignPoint: elementAlign.horizontal\n });\n }\n\n const flippedVertical = isVerticalFlip && top !== 0;\n const flippedHorizontal = isHorizontalFlip && left !== 0;\n const fittedVertical = isVerticalFit && top !== 0;\n const fittedHorizontal = isHorizontalFit && left !== 0;\n\n return {\n flipped: flippedHorizontal || flippedVertical,\n fitted: fittedVertical || fittedHorizontal,\n flip: {\n horizontal: flippedHorizontal,\n vertical: flippedVertical\n },\n fit: {\n horizontal: fittedHorizontal,\n vertical: fittedVertical\n },\n offset: {\n left: left,\n top: top\n }\n };\n};\n\nexport default restrictToView;\n","export default (element) => {\n const result = [];\n\n let sibling = element.parentNode.firstElementChild;\n\n while (sibling) {\n if (sibling !== element) {\n result.push(sibling);\n }\n\n sibling = sibling.nextElementSibling;\n }\n return result;\n};\n","/* eslint-disable no-loop-func */\n\nimport parents from './parents';\nimport siblings from './siblings';\n\nexport default (anchor, container) => {\n const parentElements = parents(anchor);\n let containerElement = container;\n let siblingElements;\n let result;\n\n while (containerElement) {\n siblingElements = siblings(containerElement);\n\n result = parentElements.reduce(\n (list, p) => list.concat(siblingElements.filter(s => s === p)),\n []\n )[0];\n\n if (result) { break; }\n\n containerElement = containerElement.parentElement;\n }\n\n return result;\n};\n\n","\nconst eitherRect = (rect, offset) => {\n if (!rect) {\n return { height: 0, left: offset.left, top: offset.top, width: 0 };\n }\n\n return rect;\n};\n\nconst scaleRect = (rect, scale) => {\n if (!rect || scale === 1) {\n return rect;\n }\n\n return {\n height: rect.height / scale,\n left: rect.left / scale,\n top: rect.top / scale,\n width: rect.width / scale\n };\n};\n\nconst removeStackingOffset = (rect, stackingOffset) => {\n if (!stackingOffset) { return rect; }\n\n const result = {\n height: rect.height,\n left: rect.left - stackingOffset.left,\n top: rect.top - stackingOffset.top,\n width: rect.width\n };\n\n return result;\n};\n\nfunction memoize(fun) {\n let result;\n let called = false;\n\n return (...args) => {\n if (called) {\n return result;\n }\n\n result = fun(...args);\n called = true;\n return result;\n };\n}\n\nconst hasRelativeStackingContext = memoize((elementSource) => {\n if (!canUseDOM()) { return false; }\n\n // Component need to pass element to make sure document owner is correct.\n // This however might be performance hit if checked for example on each drag event.\n const currentDocument = elementSource ? elementSource.ownerDocument : document;\n\n if (!currentDocument || !currentDocument.body) { return false; }\n\n const top = 10;\n const parent = currentDocument.createElement(\"div\");\n parent.style.transform = \"matrix(10, 0, 0, 10, 0, 0)\";\n parent.innerHTML = `
            child
            `;\n\n currentDocument.body.appendChild(parent);\n\n const isDifferent = parent.children[0].getBoundingClientRect().top !== top;\n\n currentDocument.body.removeChild(parent);\n\n return isDifferent;\n});\n\nconst canUseDOM = () => Boolean(\n // from fbjs\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nconst utils = {\n eitherRect,\n scaleRect,\n removeStackingOffset,\n hasRelativeStackingContext,\n canUseDOM\n};\n\nexport default utils;","import utils from \"./utils\";\nimport domUtils from \"./dom-utils\";\n\nconst positionElement = (settings) => {\n const {\n anchor,\n currentLocation,\n element,\n anchorAlign,\n elementAlign,\n collisions,\n margin,\n scale\n } = settings;\n\n const currentScale = scale || 1;\n const elementOffset = domUtils.offsetAtPoint(element, currentLocation);\n const elementRect = utils.scaleRect(elementOffset, currentScale);\n const anchorOffset = utils.scaleRect(domUtils.offset(anchor), currentScale);\n const anchorRect = utils.eitherRect(anchorOffset, currentLocation);\n\n const viewPort = settings.viewPort || domUtils.windowViewPort(element);\n viewPort.width = viewPort.width / currentScale;\n viewPort.height = viewPort.height / currentScale;\n\n const result = domUtils.restrictToView({\n anchorAlign,\n anchorRect,\n collisions,\n elementAlign,\n elementRect,\n margin,\n viewPort\n });\n\n const offset = domUtils.addOffset(currentLocation, result.offset);\n\n return {\n flip: result.flip,\n flipped: result.flipped,\n fit: result.fit,\n fitted: result.fitted,\n offset: offset\n };\n};\n\nexport default positionElement;","/* eslint-disable */\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\nvar Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n/* Return codes for the compression/decompression functions. Negative values\n* are errors, positive values are used for special but normal events.\n*/\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\nvar Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//export var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//export var Z_VERSION_ERROR = -6;\n\n/* compression levels */\nvar Z_NO_COMPRESSION = 0;\nvar Z_BEST_SPEED = 1;\nvar Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//export var Z_ASCII = 1; // = Z_TEXT (deprecated)\nvar Z_UNKNOWN = 2;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n//export var Z_NULL = null // Use -1 or null inline; depending on var type\n\n/* eslint-disable */\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n}\n\n\n// reduce buffer size, avoiding mem copy\nfunction shrinkBuf(buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n}\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n },\n Buf8: function(size) {\n return new Uint8Array(size);\n },\n Buf16: function(size) {\n return new Uint16Array(size);\n },\n Buf32: function(size) {\n return new Int32Array(size);\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n },\n Buf8: function(size) {\n return new Array(size);\n },\n Buf16: function(size) {\n return new Array(size);\n },\n Buf32: function(size) {\n return new Array(size);\n }\n};\n\nlet typedOK = () => {\n const supported =\n (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\n typedOK = () => supported;\n return supported;\n};\n\nlet arraySet = (dest, src, src_offs, len, dest_offs) => {\n arraySet = typedOK() ?\n fnTyped.arraySet : fnUntyped.arraySet;\n\n return arraySet(dest, src, src_offs, len, dest_offs);\n};\n\nlet flattenChunks = (chunks) => {\n flattenChunks = typedOK() ?\n fnTyped.flattenChunks : fnUntyped.flattenChunks;\n\n return flattenChunks(chunks);\n};\n\nlet Buf8 = (size) => {\n Buf8 = typedOK() ? fnTyped.Buf8 : fnUntyped.Buf8;\n return Buf8(size);\n};\n\nlet Buf16 = (size) => {\n Buf16 = typedOK() ? fnTyped.Buf16 : fnUntyped.Buf16;\n return Buf16(size);\n};\n\nlet Buf32 = (size) => {\n Buf32 = typedOK() ? fnTyped.Buf32 : fnUntyped.Buf32;\n return Buf32(size);\n};\n\n/* eslint-disable */\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\nlet strApplyOK = function() {\n let result = true;\n try {\n String.fromCharCode.apply(null, [ 0 ]);\n } catch (_) {\n result = false;\n }\n\n strApplyOK = () => result;\n return result;\n};\n\nlet strApplyUintOK = function() {\n let result = true;\n try {\n String.fromCharCode.apply(null, new Uint8Array(1));\n } catch (_) {\n result = false;\n }\n\n strApplyUintOK = () => result;\n return result;\n};\n\nlet utf8len = function(c) {\n // Table with utf8 lengths (calculated by first byte of sequence)\n // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n // because max possible codepoint is 0x10ffff\n var table = Buf8(256);\n for (var q = 0; q < 256; q++) {\n table[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n }\n table[254] = table[254] = 1; // Invalid sequence start\n\n utf8len = arg => table[arg];\n return table[c];\n};\n\n// convert string to array (typed, when possible)\nfunction string2buf(str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n}\n\n// Helper (used in 2 places)\nfunction _buf2binstring(buf, len) {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if ((buf.subarray && strApplyUintOK()) || (!buf.subarray && strApplyOK())) {\n return String.fromCharCode.apply(null, shrinkBuf(buf, len));\n }\n }\n\n var result = '';\n for (var i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n}\n\n\n// Convert byte array to binary string\nfunction buf2binstring(buf) {\n return _buf2binstring(buf, buf.length);\n}\n\n\n// Convert binary string (typed, when possible)\nfunction binstring2buf(str) {\n var buf = new Uint8Array(str.length);\n for (var i = 0, len = buf.length; i < len; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n}\n\n\n// convert array to string\nfunction buf2string(buf, max) {\n var i, out, c, c_len;\n var len = max || buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n c_len = utf8len(c);\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return _buf2binstring(utf16buf, out);\n}\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nfunction utf8border(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + utf8len(buf[pos]) > max) ? pos : max;\n}\n\n/* eslint-disable */\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n/* eslint-disable */\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\nlet crcTable = function() {\n const table = makeTable();\n crcTable = () => table;\n return table;\n};\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable(),\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n/* eslint-disable */\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nfunction inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n}\n\n/* eslint-disable */\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nfunction inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n}\n\n/* eslint-disable */\n\nvar CODES$1 = 0;\nvar LENS$1 = 1;\nvar DISTS$1 = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH$1 = 4;\nvar Z_BLOCK$1 = 5;\nvar Z_TREES$1 = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK$1 = 0;\nvar Z_STREAM_END$1 = 1;\nvar Z_NEED_DICT$1 = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR$1 = -2;\nvar Z_DATA_ERROR$1 = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR$1 = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED$1 = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD$1 = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS$1 = 852;\nvar ENOUGH_DISTS$1 = 592;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = Buf16(320); /* temporary storage for code lengths */\n this.work = Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = Buf32(ENOUGH_LENS$1);\n state.distcode = state.distdyn = Buf32(ENOUGH_DISTS$1);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = Buf32(512);\n distfix = Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS$1, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS$1, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE$1) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD$1;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED$1) {\n strm.msg = 'unknown compression method';\n state.mode = BAD$1;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD$1;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE$1;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED$1) {\n strm.msg = 'unknown compression method';\n state.mode = BAD$1;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD$1;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD$1;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE$1;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE$1;\n /* falls through */\n case TYPE$1:\n if (flush === Z_BLOCK$1 || flush === Z_TREES$1) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES$1) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD$1;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD$1;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES$1) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE$1;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD$1;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES$1, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD$1;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD$1;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD$1;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD$1) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD$1;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS$1, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD$1;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS$1, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD$1;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES$1) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE$1) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE$1;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD$1;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD$1;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD$1:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD$1 &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE$1 ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR$1;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR$1;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n}\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n\n/* eslint-disable */\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar msg = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n/* eslint-disable */\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\n/* eslint-disable */\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\n/* eslint-disable */\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nclass Inflate {\n constructor(options) {\n if (!(this instanceof Inflate)) return new Inflate(options);\n\n this.options = assign({\n chunkSize: 16384,\n windowBits: 0,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n }\n\n /**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\n push(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var dictionary = this.options.dictionary;\n var status, _mode;\n var next_out_utf8, tail, utf8str;\n var dict;\n\n // Flag to properly process Z_BUF_ERROR on testing inflate call\n // when we check that all output data was flushed.\n var allowBufError = false;\n\n if (this.ended) { return false; }\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // Only binary strings can be decompressed on practice\n strm.input = binstring2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate(strm, Z_NO_FLUSH); /* no bad return value */\n\n if (status === Z_NEED_DICT && dictionary) {\n // Convert data if needed\n if (typeof dictionary === 'string') {\n dict = string2buf(dictionary);\n } else if (toString.call(dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(dictionary);\n } else {\n dict = dictionary;\n }\n\n status = inflateSetDictionary(this.strm, dict);\n\n }\n\n if (status === Z_BUF_ERROR && allowBufError === true) {\n status = Z_OK;\n allowBufError = false;\n }\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n\n if (this.options.to === 'string') {\n\n next_out_utf8 = utf8border(strm.output, strm.next_out);\n\n tail = strm.next_out - next_out_utf8;\n utf8str = buf2string(strm.output, next_out_utf8);\n\n // move tail\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) { arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n this.onData(utf8str);\n\n } else {\n this.onData(shrinkBuf(strm.output, strm.next_out));\n }\n }\n }\n\n // When no more input data, we should check that internal inflate buffers\n // are flushed. The only way to do it when avail_out = 0 - run one more\n // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n // Here we set flag to process this error properly.\n //\n // NOTE. Deflate does not return error in this case and does not needs such\n // logic.\n if (strm.avail_in === 0 && strm.avail_out === 0) {\n allowBufError = true;\n }\n\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n if (status === Z_STREAM_END) {\n _mode = Z_FINISH;\n }\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n }\n\n\n /**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n onData(chunk) {\n this.chunks.push(chunk);\n }\n\n\n /**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n onEnd(status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n // Glue & convert here, until we teach pako to send\n // utf8 aligned strings to onData\n this.result = this.chunks.join('');\n } else {\n this.result = flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n }\n}\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n * , output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err)\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n var inflator = new Inflate(options);\n\n inflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\nvar ungzip = inflate$1;\n\n/* eslint-disable */\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits = /* extra bits for each distance code */\n [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree;\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree;\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code;\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code;\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length;\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist;\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s) {\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last) {\n //DeflateState *s;\n //charf *buf; /* input block */\n //ulg stored_len; /* length of input block */\n //int last; /* one if this is the last block for a file */\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last) {\n //DeflateState *s;\n //charf *buf; /* input block, or NULL if too old */\n //ulg stored_len; /* length of input block */\n //int last; /* one if this is the last block for a file */\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc) {\n // deflate_state *s;\n // unsigned dist; /* distance of matched string */\n // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\n/* eslint-disable */\n\nvar MAX_MEM_LEVEL = 9;\n\n\nvar LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES$1 = 30;\n/* number of distance codes */\nvar BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\nvar MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH$1 = 3;\nvar MAX_MATCH$1 = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH$1 + MIN_MATCH$1 + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero$1(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH$1;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH$1 - (strend - scan);\n scan = strend - MAX_MATCH$1;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH$1) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH$1) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH$1) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH$1) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH$1);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH$1) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH$1 - 1)) ? s.strstart : MIN_MATCH$1 - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH$1) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH$1 - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH$1 && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH$1 - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH$1 && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH$1;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH$1);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH$1 - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH$1 - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH$1 - 1 ? s.strstart : MIN_MATCH$1 - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH$1) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH$1 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH$1 && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH$1;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH$1 - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH$1) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH$1);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nlet configurationTable = function() {\n const table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n \n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n ];\n\n configurationTable = () => table;\n return table;\n};\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero$1(s.head); // Fill with NIL (= 0);\n\n const table = configurationTable();\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = table[s.level].max_lazy;\n s.good_match = table[s.level].good_length;\n s.nice_match = table[s.level].nice_length;\n s.max_chain_length = table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH$1 - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = Buf16(HEAP_SIZE$1 * 2);\n this.dyn_dtree = Buf16((2 * D_CODES$1 + 1) * 2);\n this.bl_tree = Buf16((2 * BL_CODES$1 + 1) * 2);\n zero$1(this.dyn_ltree);\n zero$1(this.dyn_dtree);\n zero$1(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = Buf16(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = Buf16(2 * L_CODES$1 + 1); /* heap used to build the Huffman trees */\n zero$1(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = Buf16(2 * L_CODES$1 + 1); //uch depth[2*L_CODES+1];\n zero$1(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n _tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH$1 - 1) / MIN_MATCH$1);\n\n s.window = Buf8(s.w_size * 2);\n s.head = Buf16(s.hash_size);\n s.prev = Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configurationTable()[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero$1(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero$1(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = Buf8(s.w_size);\n arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH$1) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH$1 - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH$1 - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH$1 - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH$1 - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n\n/* eslint-disable */\n\nvar toString$1 = Object.prototype.toString;\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nclass Deflate {\n constructor(options) {\n this.options = assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY,\n to: ''\n }, options || {});\n\n var opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n var status = deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n var dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n }\n\n /**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\n push(data, mode) {\n var strm = this.strm;\n var chunkSize = this.options.chunkSize;\n var status, _mode;\n\n if (this.ended) { return false; }\n\n _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n do {\n if (strm.avail_out === 0) {\n strm.output = Buf8(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n status = deflate(strm, _mode); /* no bad return value */\n\n if (status !== Z_STREAM_END && status !== Z_OK) {\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n if (this.options.to === 'string') {\n this.onData(buf2binstring(shrinkBuf(strm.output, strm.next_out)));\n } else {\n this.onData(shrinkBuf(strm.output, strm.next_out));\n }\n }\n } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n // Finalize on the last chunk.\n if (_mode === Z_FINISH) {\n status = deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // callback interim results if Z_SYNC_FLUSH.\n if (_mode === Z_SYNC_FLUSH) {\n this.onEnd(Z_OK);\n strm.avail_out = 0;\n return true;\n }\n\n return true;\n }\n\n\n /**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n * on js engine support. When string output requested, each chunk\n * will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n onData(chunk) {\n this.chunks.push(chunk);\n }\n\n\n /**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n onEnd(status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n }\n}\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n * (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n * , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n var deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\nexport { Deflate, Inflate, Z_BEST_COMPRESSION, Z_BEST_SPEED, Z_BINARY, Z_BLOCK, Z_BUF_ERROR, Z_DATA_ERROR, Z_DEFAULT_COMPRESSION, Z_DEFAULT_STRATEGY, Z_DEFLATED, Z_ERRNO, Z_FILTERED, Z_FINISH, Z_FIXED, Z_FULL_FLUSH, Z_HUFFMAN_ONLY, Z_NEED_DICT, Z_NO_COMPRESSION, Z_NO_FLUSH, Z_OK, Z_PARTIAL_FLUSH, Z_RLE, Z_STREAM_END, Z_STREAM_ERROR, Z_SYNC_FLUSH, Z_TEXT, Z_TREES, Z_UNKNOWN, deflate$1 as deflate, deflateRaw, gzip, inflate$1 as inflate, inflateRaw, ungzip };\n","const proxy = (a, b) => (e) => b(a(e));\n\nconst bind = (el, event, callback) =>\n el.addEventListener && el.addEventListener(event, callback);\n\nconst unbind = (el, event, callback) =>\n el && el.removeEventListener && el.removeEventListener(event, callback);\n\nconst noop = () => { /* empty */ };\n\nconst preventDefault = e => e.preventDefault();\n\nconst touchRegExp = /touch/;\n\n// 300ms is the usual mouse interval;\n// // However, an underpowered mobile device under a heavy load may queue mouse events for a longer period.\nconst IGNORE_MOUSE_TIMEOUT = 2000;\n\nfunction normalizeEvent(e) {\n if (e.type.match(touchRegExp)) {\n return {\n pageX: e.changedTouches[0].pageX,\n pageY: e.changedTouches[0].pageY,\n clientX: e.changedTouches[0].clientX,\n clientY: e.changedTouches[0].clientY,\n type: e.type,\n originalEvent: e,\n isTouch: true\n };\n }\n\n return {\n pageX: e.pageX,\n pageY: e.pageY,\n clientX: e.clientX,\n clientY: e.clientY,\n offsetX: e.offsetX,\n offsetY: e.offsetY,\n type: e.type,\n ctrlKey: e.ctrlKey,\n shiftKey: e.shiftKey,\n altKey: e.altKey,\n originalEvent: e\n };\n}\n\nexport class Draggable {\n static supportPointerEvent() {\n return (typeof window !== 'undefined') && window.PointerEvent;\n }\n\n get document() {\n return this._element\n ? this._element.ownerDocument\n : document;\n }\n\n constructor({ press = noop, drag = noop, release = noop, mouseOnly = false }) {\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._ignoreMouse = false;\n this._mouseOnly = mouseOnly;\n\n this._touchstart = (e) => {\n if (e.touches.length === 1) {\n this._pressHandler(e);\n }\n };\n\n this._touchmove = (e) => {\n if (e.touches.length === 1) {\n this._dragHandler(e);\n }\n };\n\n this._touchend = (e) => {\n // the last finger has been lifted, and the user is not doing gesture.\n // there might be a better way to handle this.\n if (e.touches.length === 0 && e.changedTouches.length === 1) {\n this._releaseHandler(e);\n this._ignoreMouse = true;\n setTimeout(this._restoreMouse, IGNORE_MOUSE_TIMEOUT);\n }\n };\n\n this._restoreMouse = () => {\n this._ignoreMouse = false;\n };\n\n this._mousedown = (e) => {\n const { which } = e;\n\n if ((which && which > 1) || this._ignoreMouse) {\n return;\n }\n\n bind(this.document, \"mousemove\", this._mousemove);\n bind(this.document, \"mouseup\", this._mouseup);\n this._pressHandler(e);\n };\n\n this._mousemove = (e) => {\n this._dragHandler(e);\n };\n\n this._mouseup = (e) => {\n unbind(this.document, \"mousemove\", this._mousemove);\n unbind(this.document, \"mouseup\", this._mouseup);\n this._releaseHandler(e);\n };\n\n this._pointerdown = (e) => {\n if (e.isPrimary && e.button === 0) {\n bind(this.document, \"pointermove\", this._pointermove);\n bind(this.document, \"pointerup\", this._pointerup);\n bind(this.document, \"pointercancel\", this._pointerup);\n bind(this.document, \"contextmenu\", preventDefault);\n\n this._pressHandler(e);\n }\n };\n\n this._pointermove = (e) => {\n if (e.isPrimary) {\n this._dragHandler(e);\n }\n };\n\n this._pointerup = (e) => {\n if (e.isPrimary) {\n unbind(this.document, \"pointermove\", this._pointermove);\n unbind(this.document, \"pointerup\", this._pointerup);\n unbind(this.document, \"pointercancel\", this._pointerup);\n unbind(this.document, \"contextmenu\", preventDefault);\n\n this._releaseHandler(e);\n }\n };\n }\n\n bindTo(element) {\n if (element === this._element) {\n return;\n }\n\n if (this._element) {\n this._unbindFromCurrent();\n }\n\n this._element = element;\n this._bindToCurrent();\n }\n\n _bindToCurrent() {\n const element = this._element;\n\n if (this._usePointers()) {\n bind(element, \"pointerdown\", this._pointerdown);\n return;\n }\n\n bind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n bind(element, \"touchstart\", this._touchstart);\n bind(element, \"touchmove\", this._touchmove);\n bind(element, \"touchend\", this._touchend);\n }\n }\n\n _unbindFromCurrent() {\n const element = this._element;\n\n if (this._usePointers()) {\n unbind(element, \"pointerdown\", this._pointerdown);\n unbind(this.document, \"pointermove\", this._pointermove);\n unbind(this.document, \"pointerup\", this._pointerup);\n unbind(this.document, \"contextmenu\", preventDefault);\n unbind(this.document, \"pointercancel\", this._pointerup);\n return;\n }\n\n unbind(element, \"mousedown\", this._mousedown);\n\n if (!this._mouseOnly) {\n unbind(element, \"touchstart\", this._touchstart);\n unbind(element, \"touchmove\", this._touchmove);\n unbind(element, \"touchend\", this._touchend);\n }\n }\n\n _usePointers() {\n return !this._mouseOnly && Draggable.supportPointerEvent();\n }\n\n update({ press = noop, drag = noop, release = noop, mouseOnly = false }) {\n this._pressHandler = proxy(normalizeEvent, press);\n this._dragHandler = proxy(normalizeEvent, drag);\n this._releaseHandler = proxy(normalizeEvent, release);\n this._mouseOnly = mouseOnly;\n }\n\n destroy() {\n this._unbindFromCurrent();\n this._element = null;\n }\n}\n\n// Re-export as \"default\" field to address a bug\n// where the ES Module is imported by CommonJS code.\n//\n// See https://github.com/telerik/kendo-angular/issues/1314\nDraggable.default = Draggable;\n\n// Rollup won't output exports['default'] otherwise\nexport default Draggable;\n\n","export default function isString(value) {\n return typeof value === \"string\";\n}","//The error is represented by unique name and corresponding message\n//The message can contain placeholders with index, e.g. {0}, {1}\n\nexport default {\n \"NoLocale\": \"Missing locale info for '{0}'\",\n \"NoCurrency\": \"Cannot determine currency information. Please load the locale currencies data.\",\n \"NoSupplementalCurrency\": \"Cannot determine currency. Please load the supplemental currencyData.\",\n \"NoCurrencyRegion\": \"No currency data for region '{0}'\",\n \"NoCurrencyDisplay\": \"Cannot determine currency display information. Please load the locale currencies data. The default culture does not include the all currencies data.\",\n \"NoGMTInfo\": \"Cannot determine locale GMT format. Please load the locale timeZoneNames data.\",\n \"NoWeekData\": \"Cannot determine locale first day of week. Please load the supplemental weekData.\",\n \"NoFirstDay\": \"Cannot determine locale first day of week. Please load the supplemental weekData. The default culture includes only the 'en-US' first day info.\",\n \"NoValidCurrency\": \"Cannot determine a default currency for the {0} locale. Please specify explicitly the currency with the format options.\",\n \"NoDateFieldNames\": \"Cannot determine the locale date field names. Please load the locale dateFields data.\"\n};\n","import errorDetails from './error-details';\n\nconst formatRegExp = /\\{(\\d+)}?\\}/g;\n\nclass IntlError {\n constructor({ name, message }) {\n if (!name || !message) {\n throw new Error(\"{ name: string, message: string } object is required!\");\n }\n\n this.name = name;\n this.message = message;\n }\n\n formatMessage(...values) {\n const flattenValues = flatten(values);\n\n const formattedMessage = this.message.replace(formatRegExp, function(match, index) {\n return flattenValues[parseInt(index, 10)];\n });\n\n return `${this.name}: ${formattedMessage}`;\n }\n\n error(...values) {\n return new Error(this.formatMessage(values));\n }\n}\n\nconst flatten = function(arr) {\n return arr.reduce((a, b) => a.concat(b), []);\n};\n\nconst toIntlErrors = function(errors) {\n const predicate = function(prev, name) {\n prev[name] = new IntlError({ name, message: errors[name] });\n return prev;\n };\n\n return Object.keys(errors).reduce(predicate, {});\n};\n\nconst errors = toIntlErrors(errorDetails);\n\nexport {\n errors,\n IntlError,\n toIntlErrors\n};\n","import defaultData from './default-data';\nimport isString from '../common/is-string';\nimport { errors } from '../errors';\n\nfunction availableLocaleInfo(fullName, suffixes) {\n const parts = fullName.split(\"-\");\n const language = parts[0];\n const script = parts[1];\n const territory = parts[2];\n\n return cldr[fullName] || (suffixes.indexOf(territory) !== -1 && cldr[language + \"-\" + territory]) || (suffixes.indexOf(script) !== -1 && cldr[language + \"-\" + script]) || cldr[language];\n}\n\nfunction localeFullName(language, suffixes) {\n const likelySubtags = cldr.supplemental.likelySubtags;\n\n for (let idx = 0; idx < suffixes.length; idx++) {\n let name = likelySubtags[language + \"-\" + suffixes[idx ]];\n if (name) {\n return name;\n }\n }\n\n if (likelySubtags[language]) {\n return likelySubtags[language];\n }\n}\n\nexport const cldr = defaultData;\n\nexport function getLocaleInfo(locale) {\n let info;\n if (isString(locale)) {\n info = localeInfo(locale);\n } else {\n info = locale;\n }\n return info;\n}\n\nexport function localeInfo(locale) {\n if (cldr[locale]) {\n return cldr[locale];\n }\n\n const likelySubtags = cldr.supplemental.likelySubtags;\n if (likelySubtags) {\n const parts = locale.split(\"-\");\n const language = parts[0];\n const suffixes = parts.slice(1);\n const fullName = localeFullName(language, suffixes);\n const info = fullName ? availableLocaleInfo(fullName, suffixes) : null;\n if (info) {\n return info;\n }\n }\n\n throw errors.NoLocale.error(locale);\n}\n","const defaultData = {\n en: {\n name: \"en\",\n identity: {\n version: {\n _number: \"$Revision: 12418 $\",\n _cldrVersion: \"29\"\n },\n language: \"en\"\n },\n territory: \"US\",\n numbers: {\n symbols: {\n decimal: \".\",\n group: \",\",\n list: \";\",\n percentSign: \"%\",\n plusSign: \"+\",\n minusSign: \"-\",\n exponential: \"E\",\n superscriptingExponent: \"×\",\n perMille: \"‰\",\n infinity: \"∞\",\n nan: \"NaN\",\n timeSeparator: \":\"\n },\n decimal: {\n patterns: [\n \"n\"\n ],\n groupSize: [\n 3\n ]\n },\n scientific: {\n patterns: [\n \"nEn\"\n ],\n groupSize: []\n },\n percent: {\n patterns: [\n \"n%\"\n ],\n groupSize: [\n 3\n ]\n },\n currency: {\n patterns: [\n \"$n\"\n ],\n groupSize: [\n 3\n ],\n \"unitPattern-count-one\": \"n $\",\n \"unitPattern-count-other\": \"n $\"\n },\n currencies: {\n BGN: {\n displayName: \"Bulgarian Lev\",\n \"displayName-count-one\": \"Bulgarian lev\",\n \"displayName-count-other\": \"Bulgarian leva\",\n symbol: \"BGN\"\n },\n EUR: {\n displayName: \"Euro\",\n \"displayName-count-one\": \"euro\",\n \"displayName-count-other\": \"euros\",\n symbol: \"€\",\n \"symbol-alt-narrow\": \"€\"\n },\n USD: {\n displayName: \"US Dollar\",\n \"displayName-count-one\": \"US dollar\",\n \"displayName-count-other\": \"US dollars\",\n symbol: \"$\",\n \"symbol-alt-narrow\": \"$\"\n }\n },\n localeCurrency: \"USD\",\n accounting: {\n patterns: [\n \"$n\",\n \"($n)\"\n ],\n groupSize: [\n 3\n ]\n }\n },\n calendar: {\n gmtFormat: \"GMT{0}\",\n gmtZeroFormat: \"GMT\",\n patterns: {\n d: \"M/d/y\",\n D: \"EEEE, MMMM d, y\",\n m: \"MMM d\",\n M: \"MMMM d\",\n y: \"MMM y\",\n Y: \"MMMM y\",\n F: \"EEEE, MMMM d, y h:mm:ss a\",\n g: \"M/d/y h:mm a\",\n G: \"M/d/y h:mm:ss a\",\n t: \"h:mm a\",\n T: \"h:mm:ss a\",\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n },\n dateTimeFormats: {\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\",\n availableFormats: {\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n d: \"d\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n Ed: \"d E\",\n Ehm: \"E h:mm a\",\n EHm: \"E HH:mm\",\n Ehms: \"E h:mm:ss a\",\n EHms: \"E HH:mm:ss\",\n Gy: \"y G\",\n GyMMM: \"MMM y G\",\n GyMMMd: \"MMM d, y G\",\n GyMMMEd: \"E, MMM d, y G\",\n h: \"h a\",\n H: \"HH\",\n hm: \"h:mm a\",\n Hm: \"HH:mm\",\n hms: \"h:mm:ss a\",\n Hms: \"HH:mm:ss\",\n hmsv: \"h:mm:ss a v\",\n Hmsv: \"HH:mm:ss v\",\n hmv: \"h:mm a v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n Md: \"M/d\",\n MEd: \"E, M/d\",\n MMM: \"LLL\",\n MMMd: \"MMM d\",\n MMMEd: \"E, MMM d\",\n MMMMd: \"MMMM d\",\n \"MMMMW-count-one\": \"'week' W 'of' MMMM\",\n \"MMMMW-count-other\": \"'week' W 'of' MMMM\",\n ms: \"mm:ss\",\n y: \"y\",\n yM: \"M/y\",\n yMd: \"M/d/y\",\n yMEd: \"E, M/d/y\",\n yMMM: \"MMM y\",\n yMMMd: \"MMM d, y\",\n yMMMEd: \"E, MMM d, y\",\n yMMMM: \"MMMM y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\",\n \"yw-count-one\": \"'week' w 'of' Y\",\n \"yw-count-other\": \"'week' w 'of' Y\"\n }\n },\n timeFormats: {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n },\n dateFormats: {\n full: \"EEEE, MMMM d, y\",\n long: \"MMMM d, y\",\n medium: \"MMM d, y\",\n short: \"M/d/yy\"\n },\n days: {\n format: {\n abbreviated: [\n \"Sun\",\n \"Mon\",\n \"Tue\",\n \"Wed\",\n \"Thu\",\n \"Fri\",\n \"Sat\"\n ],\n narrow: [\n \"S\",\n \"M\",\n \"T\",\n \"W\",\n \"T\",\n \"F\",\n \"S\"\n ],\n short: [\n \"Su\",\n \"Mo\",\n \"Tu\",\n \"We\",\n \"Th\",\n \"Fr\",\n \"Sa\"\n ],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Sun\",\n \"Mon\",\n \"Tue\",\n \"Wed\",\n \"Thu\",\n \"Fri\",\n \"Sat\"\n ],\n narrow: [\n \"S\",\n \"M\",\n \"T\",\n \"W\",\n \"T\",\n \"F\",\n \"S\"\n ],\n short: [\n \"Su\",\n \"Mo\",\n \"Tu\",\n \"We\",\n \"Th\",\n \"Fr\",\n \"Sa\"\n ],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n ]\n }\n },\n months: {\n format: {\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ],\n narrow: [\n \"J\",\n \"F\",\n \"M\",\n \"A\",\n \"M\",\n \"J\",\n \"J\",\n \"A\",\n \"S\",\n \"O\",\n \"N\",\n \"D\"\n ],\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ],\n narrow: [\n \"J\",\n \"F\",\n \"M\",\n \"A\",\n \"M\",\n \"J\",\n \"J\",\n \"A\",\n \"S\",\n \"O\",\n \"N\",\n \"D\"\n ],\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n }\n },\n quarters: {\n format: {\n abbreviated: [\n \"Q1\",\n \"Q2\",\n \"Q3\",\n \"Q4\"\n ],\n narrow: [\n \"1\",\n \"2\",\n \"3\",\n \"4\"\n ],\n wide: [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\"\n ]\n },\n \"stand-alone\": {\n abbreviated: [\n \"Q1\",\n \"Q2\",\n \"Q3\",\n \"Q4\"\n ],\n narrow: [\n \"1\",\n \"2\",\n \"3\",\n \"4\"\n ],\n wide: [\n \"1st quarter\",\n \"2nd quarter\",\n \"3rd quarter\",\n \"4th quarter\"\n ]\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n narrow: {\n midnight: \"mi\",\n am: \"a\",\n \"am-alt-variant\": \"am\",\n noon: \"n\",\n pm: \"p\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n }\n },\n \"stand-alone\": {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n narrow: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n }\n }\n },\n eras: {\n format: {\n wide: {\n \"0\": \"Before Christ\",\n \"1\": \"Anno Domini\",\n \"0-alt-variant\": \"Before Common Era\",\n \"1-alt-variant\": \"Common Era\"\n },\n abbreviated: {\n \"0\": \"BC\",\n \"1\": \"AD\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n },\n narrow: {\n \"0\": \"B\",\n \"1\": \"A\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n }\n }\n },\n dateFields: {\n era: {\n wide: \"era\"\n },\n year: {\n wide: \"year\",\n short: \"yr.\",\n narrow: \"yr.\"\n },\n quarter: {\n wide: \"quarter\",\n short: \"qtr.\",\n narrow: \"qtr.\"\n },\n month: {\n wide: \"month\",\n short: \"mo.\",\n narrow: \"mo.\"\n },\n week: {\n wide: \"week\",\n short: \"wk.\",\n narrow: \"wk.\"\n },\n day: {\n wide: \"day\",\n short: \"day\",\n narrow: \"day\"\n },\n weekday: {\n wide: \"day of the week\"\n },\n dayperiod: {\n wide: \"AM/PM\"\n },\n hour: {\n wide: \"hour\",\n short: \"hr.\",\n narrow: \"hr.\"\n },\n minute: {\n wide: \"minute\",\n short: \"min.\",\n narrow: \"min.\"\n },\n second: {\n wide: \"second\",\n short: \"sec.\",\n narrow: \"sec.\"\n },\n millisecond: {\n wide: \"millisecond\",\n short: \"ms\",\n narrow: \"ms\"\n },\n zone: {\n wide: \"time zone\"\n }\n }\n }\n },\n supplemental: {\n likelySubtags: {\n en: \"en-Latn-US\"\n },\n currencyData: {\n region: {\n US: [\n {\n USD: {\n _from: \"1792-01-01\"\n }\n }\n ]\n }\n },\n weekData: {\n firstDay: {\n US: \"sun\"\n },\n weekendStart: {\n \"001\": \"sat\"\n },\n weekendEnd: {\n \"001\": \"sun\"\n }\n }\n }\n};\nexport default defaultData;","export const DECIMAL = \"decimal\";\nexport const CURRENCY = \"currency\";\nexport const ACCOUNTING = \"accounting\";\nexport const PERCENT = \"percent\";\nexport const SCIENTIFIC = \"scientific\";\n\nexport const CURRENCY_PLACEHOLDER = \"$\";\nexport const PERCENT_PLACEHOLDER = \"%\";\nexport const NUMBER_PLACEHOLDER = \"n\";\n\nexport const LIST_SEPARATOR = \";\";\nexport const GROUP_SEPARATOR = \",\";\n\nexport const POINT = \".\";\nexport const EMPTY = \"\";\n\nexport const DEFAULT_LOCALE = \"en\";\n\n","import { cldr } from './info';\nimport { CURRENCY, ACCOUNTING, DECIMAL, CURRENCY_PLACEHOLDER, NUMBER_PLACEHOLDER, LIST_SEPARATOR, GROUP_SEPARATOR, POINT } from '../common/constants';\n\nconst LATIN_NUMBER_FORMATS = \"Formats-numberSystem-latn\";\nconst LATIN_NUMBER_SYMBOLS = \"symbols-numberSystem-latn\";\n\nconst patternRegExp = /([#,0.]+)/g;\nconst cldrCurrencyRegExp = /¤/g;\n\nfunction getPatterns(pattern) {\n patternRegExp.lastIndex = 0;\n\n return pattern.replace(cldrCurrencyRegExp, CURRENCY_PLACEHOLDER).replace(patternRegExp, NUMBER_PLACEHOLDER).split(LIST_SEPARATOR);\n}\n\nfunction getGroupSize(pattern) {\n patternRegExp.lastIndex = 0;\n\n const numberPatterns = patternRegExp.exec(pattern.split(LIST_SEPARATOR)[0])[0].split(POINT);\n const integer = numberPatterns[0];\n\n const groupSize = integer.split(GROUP_SEPARATOR).slice(1).map(function(group) {\n return group.length;\n }).reverse();\n\n return groupSize;\n}\n\nfunction loadCurrencyUnitPatterns(currencyInfo, currencyFormats) {\n for (let field in currencyFormats) {\n if (field.startsWith(\"unitPattern\")) {\n currencyInfo[field] = currencyFormats[field].replace(\"{0}\", NUMBER_PLACEHOLDER).replace(\"{1}\", CURRENCY_PLACEHOLDER);\n }\n }\n}\n\nexport default function loadNumbersInfo(locale, info) {\n const localeInfo = cldr[locale];\n const numbers = localeInfo.numbers = localeInfo.numbers || {};\n numbers.symbols = numbers.symbols || {};\n for (let field in info) {\n if (field === LATIN_NUMBER_SYMBOLS) {\n Object.assign(numbers.symbols, info[field]);\n } else if (field.includes(LATIN_NUMBER_FORMATS)) {\n const style = field.substr(0, field.indexOf(LATIN_NUMBER_FORMATS));\n const pattern = info[field].standard;\n numbers[style] = {\n patterns: getPatterns(pattern)\n };\n if (style === CURRENCY) {\n numbers[style].groupSize = getGroupSize((info[DECIMAL + LATIN_NUMBER_FORMATS] || info[field]).standard);\n loadCurrencyUnitPatterns(numbers[style], info[field]);\n numbers[ACCOUNTING] = {\n patterns: getPatterns(info[field][ACCOUNTING]),\n groupSize: numbers[style].groupSize\n };\n } else {\n numbers[style].groupSize = getGroupSize(pattern);\n }\n } else if (field === \"currencies\") {\n numbers.currencies = info[field];\n }\n }\n}","import { cldr } from './info';\n\nconst predefinedDatePatterns = {\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n};\n\nconst YEAR_REGEX = /y+/g;\nconst SHORT_DATE = [ [ \"dateFormats\", \"short\" ] ];\n\nconst datePatterns = {\n D: [ [ \"dateFormats\", \"full\" ] ],\n m: [ [ \"dateTimeFormats\", \"availableFormats\", \"MMMd\" ] ],\n M: [ [ \"dateTimeFormats\", \"availableFormats\", \"MMMMd\" ] ],\n y: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMMM\" ] ],\n Y: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMMMM\" ] ],\n F: [ [ \"dateFormats\", \"full\" ], [ \"timeFormats\", \"medium\" ] ],\n g: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMd\" ], [ \"timeFormats\", \"short\" ] ],\n G: [ [ \"dateTimeFormats\", \"availableFormats\", \"yMd\" ], [ \"timeFormats\", \"medium\" ] ],\n t: [ [ \"timeFormats\", \"short\" ] ],\n T: [ [ \"timeFormats\", \"medium\" ] ]\n};\n\nfunction toArray(obj) {\n let result = [];\n let names = Object.getOwnPropertyNames(obj);\n for (let idx = 0; idx < names.length; idx++) {\n let value = obj[names[idx]];\n result.push(value);\n }\n return result;\n}\n\nfunction getCalendarNames(info, isObj) {\n const result = {};\n for (let formatType in info) {\n let names = result[formatType] = {};\n for (let format in info[formatType]) {\n let formats = info[formatType][format];\n names[format] = isObj ? formats : toArray(formats);\n }\n }\n return result;\n}\n\nfunction getEraNames(eras) {\n const result = {};\n const format = result.format = {};\n const eraNameMap = {\n eraAbbr: \"abbreviated\",\n eraNames: \"wide\",\n eraNarrow: \"narrow\"\n };\n\n for (let eraFormatName in eras) {\n let formatName = eraNameMap[eraFormatName];\n format[formatName] = eras[eraFormatName];\n }\n\n return result;\n}\n\nfunction loadCalendarNames(locale, calendar) {\n const localeCalendar = cldr[locale].calendar;\n localeCalendar.days = getCalendarNames(calendar.days);\n localeCalendar.months = getCalendarNames(calendar.months);\n localeCalendar.quarters = getCalendarNames(calendar.quarters);\n localeCalendar.dayPeriods = getCalendarNames(calendar.dayPeriods, true);\n\n localeCalendar.eras = getEraNames(calendar.eras);\n}\n\nfunction loadCalendarDateFields(locale, fields) {\n const localeCalendar = cldr[locale].calendar;\n const dateFields = {};\n\n for (let field in fields) {\n const [ fieldName, formatType = 'wide' ] = field.split('-');\n const fieldInfo = dateFields[fieldName] || {};\n const displayName = fields[field].displayName;\n\n if (!displayName) { continue; }\n\n fieldInfo[formatType] = displayName;\n dateFields[fieldName] = fieldInfo;\n }\n\n localeCalendar.dateFields = dateFields;\n}\n\nfunction getPredefinedFormat(paths, calendar) {\n const result = [];\n\n for (let pathIdx = 0; pathIdx < paths.length; pathIdx++) {\n let fields = paths[ pathIdx ];\n let pattern = calendar;\n for (let idx = 0; idx < fields.length; idx++) {\n pattern = pattern[fields[idx]];\n }\n result.push(pattern);\n }\n\n return result.join(\" \");\n}\n\nfunction loadCalendarPatterns(locale, calendar) {\n const cldrCalendar = cldr[locale].calendar;\n const patterns = cldrCalendar.patterns = {};\n\n patterns.d = getPredefinedFormat(SHORT_DATE, calendar).replace(YEAR_REGEX, 'y');\n\n for (let pattern in datePatterns) {\n patterns[pattern] = getPredefinedFormat(datePatterns[pattern], calendar);\n }\n\n for (let pattern in predefinedDatePatterns) {\n patterns[pattern] = predefinedDatePatterns[pattern];\n }\n\n const dateTimeFormats = calendar.dateTimeFormats;\n cldrCalendar.dateTimeFormats = {\n full: dateTimeFormats.full,\n long: dateTimeFormats.long,\n medium: dateTimeFormats.medium,\n short: dateTimeFormats.short,\n availableFormats: dateTimeFormats.availableFormats\n };\n cldrCalendar.timeFormats = calendar.timeFormats;\n cldrCalendar.dateFormats = calendar.dateFormats;\n}\n\n\nexport default function loadCalendarInfo(locale, info) {\n const calendar = cldr[locale].calendar = cldr[locale].calendar || {};\n for (let field in info) {\n if (field === \"timeZoneNames\") {\n calendar.gmtFormat = info[field].gmtFormat;\n calendar.gmtZeroFormat = info[field].gmtZeroFormat;\n } else if (field === \"calendars\" && info[field].gregorian) {\n loadCalendarPatterns(locale, info[field].gregorian);\n loadCalendarNames(locale, info[field].gregorian);\n } else if (field === \"fields\") {\n loadCalendarDateFields(locale, info.fields);\n }\n }\n}\n","import { cldr } from './info';\n\nfunction territoryFromName(name, identity) {\n const likelySubtags = cldr.supplemental.likelySubtags;\n let parts = name.split(\"-\");\n if (likelySubtags) {\n const likelyName = likelySubtags[name] || likelySubtags[parts[0]];\n if (likelyName) {\n parts = likelyName.split(\"-\");\n }\n }\n\n if (identity) {\n for (let idx = parts.length - 1; idx >= 1; idx--) {\n const part = parts[idx];\n if (part === identity.variant || part === identity.script) {\n parts.splice(idx, 1);\n }\n }\n }\n\n const length = parts.length;\n\n if (length > 1) {\n const territory = parts[length - 1];\n return territory.toUpperCase();\n }\n}\n\nexport default function localeTerritory(info) {\n if (info.territory) {\n return info.territory;\n }\n\n const name = info.name;\n const identity = info.identity;\n let territory;\n\n if (identity && identity.territory) {\n territory = identity.territory;\n } else {\n territory = territoryFromName(name, identity);\n }\n\n info.territory = territory;\n\n return territory;\n}\n","import { cldr } from './info';\nimport loadNumbersInfo from './load-numbers';\nimport loadCalendarInfo from './load-dates';\nimport localeTerritory from './territory';\n\nfunction loadLocale(locale, info) {\n for (let field in info) {\n if (field === \"numbers\") {\n loadNumbersInfo(locale, info[field]);\n } else if (field === \"dates\") {\n loadCalendarInfo(locale, info[field]);\n }\n }\n}\n\nexport default function load() {\n const length = arguments.length;\n for (let idx = 0; idx < length; idx++) {\n let entry = arguments[idx];\n if (entry.main) {\n let locale = Object.keys(entry.main)[0];\n let info = entry.main[locale];\n let localeInfo = cldr[locale] = cldr[locale] || {};\n\n localeInfo.name = localeInfo.name || locale;\n localeInfo.identity = localeInfo.identity || info.identity;\n\n localeTerritory(localeInfo);\n loadLocale(locale, info);\n } else if (entry.supplemental) {\n if (entry.supplemental.weekData) {\n cldr.supplemental.weekData = {\n firstDay: entry.supplemental.weekData.firstDay,\n weekendStart: entry.supplemental.weekData.weekendStart,\n weekendEnd: entry.supplemental.weekData.weekendEnd\n };\n } else if (entry.supplemental.likelySubtags) {\n cldr.supplemental.likelySubtags = Object.assign(cldr.supplemental.likelySubtags, entry.supplemental.likelySubtags);\n } else if (entry.supplemental.currencyData) {\n const currencyData = cldr.supplemental.currencyData;\n currencyData.region = Object.assign(currencyData.region || {}, entry.supplemental.currencyData.region);\n currencyData.fractions = Object.assign(currencyData.fractions || {}, entry.supplemental.currencyData.fractions);\n }\n }\n }\n}\n","import { localeInfo } from './info';\nimport { errors } from '../errors';\nimport { DEFAULT_LOCALE } from '../common/constants';\n\nexport default function dateFieldName(options, locale = DEFAULT_LOCALE) {\n const info = localeInfo(locale);\n const dateFields = info.calendar.dateFields;\n if (!dateFields) {\n throw errors.NoDateFieldNames.error();\n }\n\n const fieldNameInfo = dateFields[options.type] || {};\n\n return fieldNameInfo[options.nameType] || fieldNameInfo['wide'];\n}\n","import { getLocaleInfo } from './info';\nimport { EMPTY } from '../common/constants';\n\nfunction lowerArray(arr) {\n const result = [];\n for (let idx = 0; idx < arr.length; idx++) {\n result.push(arr[idx].toLowerCase());\n }\n return result;\n}\n\nfunction lowerObject(obj) {\n const result = {};\n for (let field in obj) {\n result[field] = obj[field].toLowerCase();\n }\n return result;\n}\n\nfunction cloneLower(obj) {\n let result = Array.isArray(obj) ? lowerArray(obj) : lowerObject(obj);\n return result;\n}\n\nexport default function dateFormatNames(locale, options) {\n const { type, nameType, standAlone, lower } = options;\n const info = getLocaleInfo(locale);\n const formatType = standAlone ? \"stand-alone\" : \"format\";\n const lowerNameType = (lower ? \"lower-\" : EMPTY) + nameType;\n const formatNames = info.calendar[type][formatType];\n let result = formatNames[lowerNameType];\n if (!result && lower) {\n result = formatNames[lowerNameType] = cloneLower(formatNames[nameType]);\n }\n return result;\n}","export default function parseRangeDate(value) {\n const parts = value.split('-');\n const year = parseInt(parts[0], 10);\n const month = parseInt(parts[1], 10) - 1;\n const day = parseInt(parts[2], 10);\n\n return new Date(year, month, day);\n}\n","import { cldr, getLocaleInfo } from './info';\nimport { errors } from '../errors';\nimport localeTerritory from './territory';\nimport parseRangeDate from './parse-range-date';\n\n/* eslint-disable consistent-return */\n\nconst {\n NoCurrency,\n NoCurrencyDisplay,\n NoSupplementalCurrency,\n NoCurrencyRegion,\n NoValidCurrency\n} = errors;\n\nconst DEFAULT_CURRENCY_FRACTIONS = 2;\nconst SYMBOL = \"symbol\";\nconst INVALID_CURRENCY_CODE = 'XXX';\n\nconst GLOBAL_CURRENCIES = {\n '001': 'USD', // 001 refers to world. not sure if it is correct to assume USD but seems better than throw an error\n '150': 'EUR' // 150 territory for Europe\n\n};\n\nfunction getCurrencyInfo(locale, currency, throwIfNoValid) {\n const info = getLocaleInfo(locale);\n const currencies = info.numbers.currencies;\n if (!currencies) {\n if (throwIfNoValid) {\n throw NoCurrency.error();\n }\n\n return;\n }\n\n const currencyDisplayInfo = currencies[currency];\n\n if (!currencyDisplayInfo) {\n if (throwIfNoValid) {\n throw NoCurrencyDisplay.error();\n }\n\n return;\n }\n\n return currencyDisplayInfo;\n}\n\nfunction lengthComparer(a, b) {\n return b.length - a.length;\n}\n\nfunction regionCurrency(regionCurrencies) {\n let latestValidUntil, latestValidUntilRange;\n let latestStillValid, latestStillValidDate;\n\n for (let idx = 0; idx < regionCurrencies.length; idx++) {\n const currency = regionCurrencies[idx];\n const code = Object.keys(currency)[0];\n const info = currency[code];\n if (code !== INVALID_CURRENCY_CODE && info._tender !== 'false' && info._from) {\n if (!info._to) {\n const stillValidDate = parseRangeDate(info._from);\n if (!latestStillValidDate || latestStillValidDate < stillValidDate) {\n latestStillValid = code;\n latestStillValidDate = stillValidDate;\n }\n } else if (!latestStillValid) {\n const validFrom = parseRangeDate(info._from);\n const validTo = parseRangeDate(info._to);\n if (!latestValidUntilRange || latestValidUntilRange.to < validTo || latestValidUntilRange.from < validFrom) {\n latestValidUntil = code;\n latestValidUntilRange = {\n from: validFrom,\n to: validTo\n };\n }\n }\n }\n }\n\n return latestStillValid || latestValidUntil;\n}\n\nexport function currencyDisplays(locale, currency, throwIfNoValid = true) {\n const currencyInfo = getCurrencyInfo(locale, currency, throwIfNoValid);\n if (!currencyInfo) {\n return;\n }\n\n if (!currencyInfo.displays) {\n const displays = [ currency ];\n for (let field in currencyInfo) {\n displays.push(currencyInfo[field]);\n }\n displays.sort(lengthComparer);\n currencyInfo.displays = displays;\n }\n\n return currencyInfo.displays;\n}\n\nexport function currencyDisplay(locale, options) {\n const { value, currency, currencyDisplay = SYMBOL } = options;\n\n if (currencyDisplay === \"code\") {\n return currency;\n }\n\n const currencyInfo = getCurrencyInfo(locale, currency, true);\n let result;\n\n if (currencyDisplay === SYMBOL) {\n result = currencyInfo[\"symbol-alt-narrow\"] || currencyInfo[SYMBOL];\n } else {\n if (typeof value === undefined || value !== 1) {\n result = currencyInfo[\"displayName-count-other\"];\n } else {\n result = currencyInfo[\"displayName-count-one\"];\n }\n }\n\n return result;\n}\n\nexport function currencyFractionOptions(code) {\n let minimumFractionDigits = DEFAULT_CURRENCY_FRACTIONS;\n let maximumFractionDigits = DEFAULT_CURRENCY_FRACTIONS;\n\n const fractions = ((cldr.supplemental.currencyData || {}).fractions || {})[code];\n\n if (fractions && fractions._digits) {\n maximumFractionDigits = minimumFractionDigits = parseInt(fractions._digits, 10);\n }\n\n return {\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits\n };\n}\n\nexport function territoryCurrencyCode(territory, throwIfNoValid = true) {\n if (GLOBAL_CURRENCIES[territory]) {\n return GLOBAL_CURRENCIES[territory];\n }\n\n const currencyData = cldr.supplemental.currencyData;\n if (!currencyData) {\n if (throwIfNoValid) {\n throw NoSupplementalCurrency.error();\n }\n\n return;\n }\n\n const regionCurrencies = currencyData.region[territory];\n\n if (!regionCurrencies) {\n if (throwIfNoValid) {\n throw NoCurrencyRegion.error(territory);\n }\n\n return;\n }\n\n const currencyCode = regionCurrency(regionCurrencies);\n\n return currencyCode;\n}\n\nexport function localeCurrency(locale, throwIfNoValid) {\n const info = getLocaleInfo(locale);\n const numbers = info.numbers;\n\n if (!numbers.localeCurrency) {\n const currency = territoryCurrencyCode(localeTerritory(info), throwIfNoValid);\n\n if (!currency && throwIfNoValid) {\n throw NoValidCurrency.error(info.name);\n }\n\n numbers.localeCurrency = currency;\n }\n\n return numbers.localeCurrency;\n}\n","\nexport const DAYS_OF_WEEK = [ \"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\" ];\n\nexport const DEFAULT_TERRITORY = '001';\n","import { cldr, getLocaleInfo } from './info';\nimport localeTerritory from './territory';\n\nimport { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';\nimport { errors } from '../errors';\n\nconst { NoWeekData, NoFirstDay } = errors;\n\nexport default function firstDay(locale) {\n const info = getLocaleInfo(locale);\n\n if (!isNaN(info.firstDay)) {\n return info.firstDay;\n }\n\n const weekData = cldr.supplemental.weekData;\n if (!weekData) {\n throw NoWeekData.error();\n }\n\n const firstDay = weekData.firstDay[localeTerritory(info)] || weekData.firstDay[DEFAULT_TERRITORY];\n\n if (!firstDay) {\n throw NoFirstDay.error();\n }\n\n info.firstDay = DAYS_OF_WEEK.indexOf(firstDay);\n\n return info.firstDay;\n}\n","import { cldr, getLocaleInfo } from './info';\nimport localeTerritory from './territory';\n\nimport { DAYS_OF_WEEK, DEFAULT_TERRITORY } from './constants';\nimport { errors } from '../errors';\n\nconst { NoWeekData } = errors;\n\nexport default function weekendRange(locale) {\n const info = getLocaleInfo(locale);\n\n if (info.weekendRange) {\n return info.weekendRange;\n }\n\n const weekData = cldr.supplemental.weekData;\n if (!weekData) {\n throw NoWeekData.error();\n }\n\n const territory = localeTerritory(info);\n const start = weekData.weekendStart[territory] || weekData.weekendStart[DEFAULT_TERRITORY];\n const end = weekData.weekendEnd[territory] || weekData.weekendEnd[DEFAULT_TERRITORY];\n\n info.weekendRange = {\n start: DAYS_OF_WEEK.indexOf(start),\n end: DAYS_OF_WEEK.indexOf(end)\n };\n\n return info.weekendRange;\n}\n","import { getLocaleInfo } from './info';\n\nexport default function numberSymbols(locale) {\n const info = getLocaleInfo(locale);\n\n return info.numbers.symbols;\n}","export default function isNegativeZero(value) {\n return (1 / value === -Infinity);\n}\n","import { currencyDisplay, localeCurrency } from '../cldr';\n\nexport default function formatCurrencySymbol(info, options = {}) {\n if (!options.currency) {\n options.currency = localeCurrency(info, true);\n }\n\n const display = currencyDisplay(info, options);\n\n return display;\n}\n","export default function groupInteger(number, start, end, options, info) {\n const symbols = info.numbers.symbols;\n const decimalIndex = number.indexOf(symbols.decimal);\n const groupSizes = options.groupSize.slice();\n let groupSize = groupSizes.shift();\n\n let integerEnd = decimalIndex !== -1 ? decimalIndex : end + 1;\n\n let integer = number.substring(start, integerEnd);\n let result = number;\n const integerLength = integer.length;\n\n if (integerLength >= groupSize) {\n let idx = integerLength;\n let parts = [];\n\n while (idx > -1) {\n let value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n let newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n\n if (groupSize === 0) {\n value = integer.substring(0, idx);\n if (value) {\n parts.push(value);\n }\n break;\n }\n }\n\n integer = parts.reverse().join(symbols.group);\n result = number.substring(0, start) + integer + number.substring(integerEnd);\n }\n\n return result;\n}","import { CURRENCY, ACCOUNTING } from '../common/constants';\n\nexport default function isCurrencyStyle(style) {\n return style === CURRENCY || style === ACCOUNTING;\n}","export default function pad(number, digits = 2, right = false) {\n const count = digits - String(number).length;\n let result = number;\n\n if (count > 0) {\n const padString = new Array(count + 1).join(\"0\");\n result = right ? number + padString : padString + number;\n }\n\n return result;\n}","const MAX_PRECISION = 20;\n\nexport default function round(value, precision) {\n let result = value;\n let decimals = precision || 0;\n\n result = result.toString().split('e');\n result = Math.round(Number(result[0] + 'e' + (result[1] ? (Number(result[1]) + decimals) : decimals)));\n\n result = result.toString().split('e');\n result = Number(result[0] + 'e' + (result[1] ? (Number(result[1]) - decimals) : -decimals));\n\n return result.toFixed(Math.min(decimals, MAX_PRECISION));\n}","import { PERCENT, SCIENTIFIC, NUMBER_PLACEHOLDER, CURRENCY_PLACEHOLDER, PERCENT_PLACEHOLDER, EMPTY, POINT } from '../common/constants';\nimport isNegativeZero from '../common/is-negative-zero';\nimport formatCurrencySymbol from './format-currency-symbol';\nimport groupInteger from './group-integer';\nimport isCurrencyStyle from './is-currency-style';\nimport pad from '../common/pad';\nimport round from '../common/round';\nimport { currencyFractionOptions } from '../cldr';\n\nconst DEFAULT_DECIMAL_ROUNDING = 3;\nconst DEFAULT_PERCENT_ROUNDING = 0;\n\nconst trailingZeroRegex = /0+$/;\n\nfunction fractionOptions(options) {\n let { minimumFractionDigits, maximumFractionDigits, style } = options;\n const isCurrency = isCurrencyStyle(style);\n let currencyFractions;\n if (isCurrency) {\n currencyFractions = currencyFractionOptions(options.currency);\n }\n\n if (minimumFractionDigits === undefined) {\n minimumFractionDigits = isCurrency ? currencyFractions.minimumFractionDigits : 0;\n }\n\n if (maximumFractionDigits === undefined) {\n if (style === PERCENT) {\n maximumFractionDigits = Math.max(minimumFractionDigits, DEFAULT_PERCENT_ROUNDING);\n } else if (isCurrency) {\n maximumFractionDigits = Math.max(minimumFractionDigits, currencyFractions.maximumFractionDigits);\n } else {\n maximumFractionDigits = Math.max(minimumFractionDigits, DEFAULT_DECIMAL_ROUNDING);\n }\n }\n\n return {\n minimumFractionDigits: minimumFractionDigits,\n maximumFractionDigits: maximumFractionDigits\n };\n}\n\nfunction applyPattern(value, pattern, symbol) {\n let result = EMPTY;\n for (let idx = 0, length = pattern.length; idx < length; idx++) {\n let ch = pattern.charAt(idx);\n\n if (ch === NUMBER_PLACEHOLDER) {\n result += value;\n } else if (ch === CURRENCY_PLACEHOLDER || ch === PERCENT_PLACEHOLDER) {\n result += symbol;\n } else {\n result += ch;\n }\n }\n return result;\n}\n\nfunction currencyUnitPattern(info, value) {\n const currencyInfo = info.numbers.currency;\n let pattern = value !== 1 ? currencyInfo[\"unitPattern-count-other\"] : currencyInfo[\"unitPattern-count-one\"];\n if (value < 0) {\n pattern = pattern.replace(NUMBER_PLACEHOLDER, `-${ NUMBER_PLACEHOLDER }`);\n }\n\n return pattern;\n}\n\n\nexport default function standardNumberFormat(number, options, info) {\n const symbols = info.numbers.symbols;\n const { style } = options;\n const isCurrency = isCurrencyStyle(style);\n\n //return number in exponential format\n if (style === SCIENTIFIC) {\n let exponential = options.minimumFractionDigits !== undefined ? number.toExponential(options.minimumFractionDigits) : number.toExponential();\n return exponential.replace(POINT, symbols.decimal);\n }\n\n let value = number;\n let symbol;\n\n if (isCurrency) {\n options.value = value;\n symbol = formatCurrencySymbol(info, options);\n }\n\n if (style === PERCENT) {\n value *= 100;\n symbol = symbols.percentSign;\n }\n\n const { minimumFractionDigits, maximumFractionDigits } = fractionOptions(options);\n\n value = round(value, maximumFractionDigits);\n\n const negative = value < 0;\n const negativeZero = isNegativeZero(number);\n\n const parts = value.split(POINT);\n\n let integer = parts[0];\n let fraction = pad(parts[1] ? parts[1].replace(trailingZeroRegex, EMPTY) : EMPTY, minimumFractionDigits, true);\n\n //exclude \"-\" if number is negative.\n if (negative) {\n integer = integer.substring(1);\n }\n\n if (options.minimumIntegerDigits) {\n integer = pad(integer, options.minimumIntegerDigits);\n }\n\n let formattedValue = options.useGrouping !== false ? groupInteger(integer, 0, integer.length, options, info) : integer;\n\n if (fraction) {\n formattedValue += symbols.decimal + fraction;\n }\n\n let pattern;\n\n if (isCurrency && options.currencyDisplay === \"name\") {\n pattern = currencyUnitPattern(info, number);\n } else {\n const patterns = options.patterns;\n pattern = (negative || negativeZero) ? patterns[1] || (\"-\" + patterns[0]) : patterns[0];\n }\n\n if (pattern === NUMBER_PLACEHOLDER && !negative) {\n return formattedValue;\n }\n\n const result = applyPattern(formattedValue, pattern, symbol);\n\n return result;\n}","import { PERCENT_PLACEHOLDER, CURRENCY_PLACEHOLDER, CURRENCY, PERCENT, EMPTY } from '../common/constants';\nimport formatCurrencySymbol from './format-currency-symbol';\n\nconst literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g;\nconst PLACEHOLDER = \"__??__\";\n\nexport function setStyleOptions(formatOptions, info) {\n const format = formatOptions.format;\n\n //multiply number if the format has percent\n if (format.indexOf(PERCENT_PLACEHOLDER) !== -1) {\n formatOptions.style = PERCENT;\n formatOptions.symbol = info.numbers.symbols.percentSign;\n formatOptions.number *= 100;\n }\n\n if (format.indexOf(CURRENCY_PLACEHOLDER) !== -1) {\n formatOptions.style = CURRENCY;\n formatOptions.symbol = formatCurrencySymbol(info);\n }\n}\n\nexport function setFormatLiterals(formatOptions) {\n let format = formatOptions.format;\n if (format.indexOf(\"'\") > -1 || format.indexOf(\"\\\"\") > -1 || format.indexOf(\"\\\\\") > -1) {\n const literals = formatOptions.literals = [];\n formatOptions.format = format.replace(literalRegExp, function(match) {\n const quoteChar = match.charAt(0).replace(\"\\\\\", EMPTY);\n const literal = match.slice(1).replace(quoteChar, EMPTY);\n\n literals.push(literal);\n\n return PLACEHOLDER;\n });\n }\n}\n\nexport function replaceLiterals(number, literals) {\n let result = number;\n if (literals) {\n const length = literals.length;\n for (let idx = 0; idx < length; idx++) {\n result = result.replace(PLACEHOLDER, literals[idx]);\n }\n }\n return result;\n}","import { CURRENCY, PERCENT, LIST_SEPARATOR, GROUP_SEPARATOR, CURRENCY_PLACEHOLDER, PERCENT_PLACEHOLDER, POINT, EMPTY } from '../common/constants';\nimport isNegativeZero from '../common/is-negative-zero';\nimport groupInteger from './group-integer';\nimport round from '../common/round';\nimport { setStyleOptions, setFormatLiterals, replaceLiterals } from './utils';\n\nconst SHARP = \"#\";\nconst ZERO = \"0\";\n\nconst trailingZerosRegExp = /(\\.(?:[0-9]*[1-9])?)0+$/g;\nconst trailingPointRegExp = /\\.$/;\nconst commaRegExp = /\\,/g;\n\nfunction trimTrailingZeros(value, lastZero) {\n let trimRegex;\n\n if (lastZero === 0) {\n trimRegex = trailingZerosRegExp;\n } else {\n trimRegex = new RegExp(`(\\\\.[0-9]{${ lastZero }}[1-9]*)0+$`, 'g');\n }\n\n return value.replace(trimRegex, '$1').replace(trailingPointRegExp, EMPTY);\n}\n\nfunction roundNumber(formatOptions) {\n let { number, format } = formatOptions;\n let decimalIndex = format.indexOf(POINT);\n\n if (decimalIndex !== -1) {\n const zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n const sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n const hasZero = zeroIndex > -1;\n const hasSharp = sharpIndex > -1;\n let fraction = number.toString().split(\"e\");\n\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n\n let precision = fraction.length;\n let trailingZeros = -1;\n\n if (!hasZero && !hasSharp) {\n formatOptions.format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n decimalIndex = -1;\n precision = 0;\n } else if (hasZero && zeroIndex > sharpIndex) {\n precision = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && precision > sharpIndex) {\n precision = sharpIndex;\n } else if (hasZero && precision < zeroIndex) {\n precision = zeroIndex;\n }\n\n trailingZeros = hasZero ? zeroIndex : 0;\n }\n\n if (precision > -1) {\n number = round(number, precision);\n if (trailingZeros > -1) {\n number = trimTrailingZeros(number, trailingZeros);\n }\n }\n } else {\n number = round(number);\n }\n\n if (formatOptions.negative && (number * -1) >= 0 && !formatOptions.negativeZero) {\n formatOptions.negative = false;\n }\n\n formatOptions.number = number;\n formatOptions.decimalIndex = decimalIndex;\n}\n\nfunction isConstantFormat(format) {\n return format.indexOf(SHARP) === -1 && format.indexOf(ZERO) === -1;\n}\n\nfunction setValueSpecificFormat(formatOptions) {\n let { number, format } = formatOptions;\n format = format.split(LIST_SEPARATOR);\n if ((formatOptions.negative || formatOptions.negativeZero) && format[1]) {\n format = format[1];\n formatOptions.hasNegativeFormat = true;\n } else if (number === 0) {\n const zeroFormat = format[2];\n format = zeroFormat || format[0];\n if (zeroFormat && isConstantFormat(zeroFormat)) {\n formatOptions.constant = zeroFormat;\n }\n } else {\n format = format[0];\n }\n\n formatOptions.format = format;\n}\n\nfunction setGroupOptions(formatOptions) {\n formatOptions.hasGroup = formatOptions.format.indexOf(GROUP_SEPARATOR) > -1;\n if (formatOptions.hasGroup) {\n formatOptions.format = formatOptions.format.replace(commaRegExp, EMPTY);\n }\n}\n\nfunction placeholderIndex(index1, index2, start) {\n let index;\n if (index1 === -1 && index2 !== -1) {\n index = index2;\n } else if (index1 !== -1 && index2 === -1) {\n index = index1;\n } else {\n index = start ? Math.min(index1, index2) : Math.max(index1, index2);\n }\n return index;\n}\n\nfunction setPlaceholderIndices(formatOptions) {\n const format = formatOptions.format;\n let sharpIndex = format.indexOf(SHARP);\n let zeroIndex = format.indexOf(ZERO);\n\n let start = placeholderIndex(sharpIndex, zeroIndex, true);\n\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n\n let end = placeholderIndex(sharpIndex, zeroIndex);\n\n if (start === format.length) {\n end = start;\n }\n\n formatOptions.start = start;\n formatOptions.end = end;\n formatOptions.lastZeroIndex = zeroIndex;\n}\n\nfunction replaceStyleSymbols(number, style, symbol) {\n let result = number;\n if (style === CURRENCY || style === PERCENT) {\n result = EMPTY;\n for (let idx = 0, length = number.length; idx < length; idx++) {\n let ch = number.charAt(idx);\n result += (ch === CURRENCY_PLACEHOLDER || ch === PERCENT_PLACEHOLDER) ? symbol : ch;\n }\n }\n return result;\n}\n\nfunction replacePlaceHolders(formatOptions, info) {\n const { start, end, negative, negativeZero, format, decimalIndex, lastZeroIndex, hasNegativeFormat, hasGroup } = formatOptions;\n let number = formatOptions.number;\n const value = number.toString().split(POINT);\n const length = format.length;\n const integer = value[0];\n const fraction = value[1] || EMPTY;\n const integerLength = integer.length;\n let replacement = EMPTY;\n\n number = format.substring(0, start);\n\n if ((negative || negativeZero) && !hasNegativeFormat) {\n number += \"-\";\n }\n\n for (let idx = start; idx < length; idx++) {\n let ch = format.charAt(idx);\n\n if (decimalIndex === -1) {\n if (end - idx < integerLength) {\n\n number += integer;\n break;\n }\n } else {\n if (lastZeroIndex !== -1 && lastZeroIndex < idx) {\n replacement = EMPTY;\n }\n\n if ((decimalIndex - idx) <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n\n if (decimalIndex === idx) {\n number += (fraction ? info.numbers.symbols.decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, (integerLength + start)), info.numbers.decimal, info);\n }\n\n if (end >= start) {\n number += format.substring(end + 1);\n }\n\n return number;\n}\n\nfunction applyCustomFormat(formatOptions, info) {\n let number = formatOptions.number;\n if (formatOptions.start !== -1) {\n number = replacePlaceHolders(formatOptions, info);\n number = replaceStyleSymbols(number, formatOptions.style, formatOptions.symbol);\n number = replaceLiterals(number, formatOptions.literals);\n }\n\n return number;\n}\n\nexport default function customNumberFormat(number, format, info) {\n const formatOptions = {\n negative: number < 0,\n number: Math.abs(number),\n negativeZero: isNegativeZero(number),\n format: format\n };\n\n setValueSpecificFormat(formatOptions);\n\n if (formatOptions.constant) {\n return formatOptions.constant;\n }\n\n setFormatLiterals(formatOptions);\n setStyleOptions(formatOptions, info);\n setGroupOptions(formatOptions);\n roundNumber(formatOptions);\n setPlaceholderIndices(formatOptions);\n\n return applyCustomFormat(formatOptions, info);\n}","import { CURRENCY, ACCOUNTING, DECIMAL, PERCENT, SCIENTIFIC } from '../common/constants';\nimport isString from '../common/is-string';\n\nconst standardFormatRegExp = /^(n|c|p|e|a)(\\d*)$/i;\n\nfunction standardFormatOptions(format) {\n const formatAndPrecision = standardFormatRegExp.exec(format);\n\n if (formatAndPrecision) {\n const options = {\n style: DECIMAL\n };\n\n let style = formatAndPrecision[1].toLowerCase();\n\n if (style === \"c\") {\n options.style = CURRENCY;\n } else if (style === \"a\") {\n options.style = ACCOUNTING;\n } else if (style === \"p\") {\n options.style = PERCENT;\n } else if (style === \"e\") {\n options.style = SCIENTIFIC;\n }\n\n if (formatAndPrecision[2]) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseInt(formatAndPrecision[2], 10);\n }\n\n return options;\n }\n}\n\nexport default function formatOptions(format) {\n let options;\n if (isString(format)) {\n options = standardFormatOptions(format);\n } else {\n options = format;\n }\n\n return options;\n}","import { localeInfo } from '../cldr';\nimport { DECIMAL, DEFAULT_LOCALE, NUMBER_PLACEHOLDER, EMPTY } from '../common/constants';\nimport standardNumberFormat from './standard-number-format';\nimport customNumberFormat from './custom-number-format';\nimport formatOptions from './format-options';\n\nexport default function formatNumber(number, format = NUMBER_PLACEHOLDER, locale = DEFAULT_LOCALE) {\n if (number === undefined || number === null) {\n return EMPTY;\n }\n\n if (!isFinite(number)) {\n return String(number);\n }\n\n const info = localeInfo(locale);\n const options = formatOptions(format);\n\n let result;\n if (options) {\n const style = options.style || DECIMAL;\n result = standardNumberFormat(number, Object.assign({}, info.numbers[style], options), info);\n } else {\n result = customNumberFormat(number, format, info);\n }\n\n return result;\n}\n","export default function isNumber(value) {\n return typeof value === \"number\";\n}","import { localeInfo, localeCurrency, currencyDisplays } from '../cldr';\nimport { PERCENT, NUMBER_PLACEHOLDER, CURRENCY_PLACEHOLDER, DEFAULT_LOCALE, EMPTY, POINT } from '../common/constants';\nimport { setStyleOptions, setFormatLiterals } from './utils';\nimport isNumber from '../common/is-number';\nimport isCurrencyStyle from './is-currency-style';\nimport formatOptions from './format-options';\nimport isString from '../common/is-string';\n\nconst exponentRegExp = /[eE][\\-+]?[0-9]+/;\nconst nonBreakingSpaceRegExp = /\\u00A0/g;\n\nfunction cleanNegativePattern(number, patterns) {\n if (patterns.length > 1) {\n const parts = (patterns[1] || EMPTY).replace(CURRENCY_PLACEHOLDER, EMPTY).split(NUMBER_PLACEHOLDER);\n if (number.indexOf(parts[0]) > -1 && number.indexOf(parts[1]) > -1) {\n return number.replace(parts[0], EMPTY).replace(parts[1], EMPTY);\n }\n }\n}\n\nfunction cleanCurrencyNumber(value, info, format) {\n const options = formatOptions(format) || {};\n let isCurrency = isCurrencyStyle(options.style);\n let number = value;\n let negative;\n\n const currency = options.currency || localeCurrency(info, isCurrency);\n\n if (currency) {\n const displays = currencyDisplays(info, currency, isCurrency);\n if (displays) {\n for (let idx = 0; idx < displays.length; idx++) {\n let display = displays[idx];\n if (number.includes(display)) {\n number = number.replace(display, EMPTY);\n isCurrency = true;\n break;\n }\n }\n }\n\n if (isCurrency) {\n const cleanNumber = cleanNegativePattern(number, info.numbers.currency.patterns) ||\n cleanNegativePattern(number, info.numbers.accounting.patterns);\n\n if (cleanNumber) {\n negative = true;\n number = cleanNumber;\n }\n\n }\n }\n\n return {\n number: number,\n negative: negative\n };\n}\n\nfunction cleanLiterals(number, formatOptions) {\n const literals = formatOptions.literals;\n let result = number;\n\n if (literals) {\n for (let idx = 0; idx < literals.length; idx++) {\n result = result.replace(literals[idx], EMPTY);\n }\n }\n\n return result;\n}\n\nexport default function parseNumber(value, locale = DEFAULT_LOCALE, format = {}) {\n if (!value && value !== 0) {\n return null;\n }\n\n if (isNumber(value)) {\n return value;\n }\n\n const info = localeInfo(locale);\n const symbols = info.numbers.symbols;\n\n let number = value.toString();\n let formatOptions = format || {};\n let isPercent;\n\n if (isString(format)) {\n formatOptions = { format: format };\n setFormatLiterals(formatOptions);\n number = cleanLiterals(number, formatOptions);\n\n setStyleOptions(formatOptions, info);\n }\n\n if (formatOptions.style === PERCENT || number.indexOf(symbols.percentSign) > -1) {\n number = number.replace(symbols.percentSign, EMPTY);\n isPercent = true;\n }\n\n if (exponentRegExp.test(number)) {\n number = parseFloat(number.replace(symbols.decimal, POINT));\n return isNaN(number) ? null : number;\n }\n\n const { negative: negativeCurrency, number: currencyNumber } = cleanCurrencyNumber(number, info, formatOptions);\n number = String(currencyNumber).trim();\n\n const negativeSignIndex = number.indexOf(\"-\");\n if (negativeSignIndex > 0) {\n return null;\n }\n\n let isNegative = negativeSignIndex > -1;\n\n isNegative = negativeCurrency !== undefined ? negativeCurrency : isNegative;\n\n number = number.replace(\"-\", EMPTY)\n .replace(nonBreakingSpaceRegExp, \" \")\n .split(symbols.group.replace(nonBreakingSpaceRegExp, \" \")).join(EMPTY)\n .replace(symbols.decimal, POINT);\n\n number = parseFloat(number);\n\n if (isNaN(number)) {\n number = null;\n } else if (isNegative) {\n number *= -1;\n }\n\n if (number && isPercent) {\n number /= 100;\n }\n\n return number;\n}\n","const formatRegExp = /\\{(\\d+)}/g;\n\nexport default function formatString(format) {\n const values = arguments;\n\n return format.replace(formatRegExp, (match, index) => {\n const value = values[parseInt(index, 10) + 1];\n\n return value;\n });\n}","import formatString from '../common/format-string';\nimport isString from '../common/is-string';\nimport { EMPTY } from '../common/constants';\n\nconst REMOVAL_PENALTY = 120;\nconst ADDITION_PENALTY = 20;\nconst LENGHT_DELTA = [ 2, 1, 5, 3, 4 ];\nconst LONG_LESS_PENALTY_DELTA = -2;\nconst SHORT_LESS_PENALTY_DELTA = -1;\nconst SHORT_MORE_PENALTY_DELTA = 1;\nconst LONG_MORE_PENALTY_DELTA = 2;\n\nconst PENALTIES = {\n [LONG_LESS_PENALTY_DELTA.toString()]: 8,\n [SHORT_LESS_PENALTY_DELTA.toString()]: 6,\n [LONG_MORE_PENALTY_DELTA.toString()]: 6,\n [SHORT_MORE_PENALTY_DELTA.toString()]: 3\n};\n\nconst VALUE_FORMAT_LENGTH = {\n numeric: 1,\n \"2-digit\": 2,\n short: 3,\n long: 4,\n narrow: 5\n};\n\nconst TIME_SPECIFIERS_REGEX = /[hHmsSzZoOvVxX]/;\n\nfunction getHourSpecifier(options) {\n return options.hour12 ? \"h\" : \"H\";\n}\n\nconst DATE_OPTIONS_MAP = [ {\n key: \"era\",\n specifier: \"G\"\n}, {\n key: \"year\",\n specifier: \"y\"\n}, {\n key: \"month\",\n specifier: \"M\"\n}, {\n key: \"day\",\n specifier: \"d\"\n}, {\n key: \"weekday\",\n specifier: \"E\"\n}, {\n key: \"hour\",\n getSpecifier: getHourSpecifier\n}, {\n key: \"minute\",\n specifier: \"m\"\n}, {\n key: \"second\",\n specifier: \"s\"\n}, {\n key: \"timeZoneName\",\n specifier: \"z\"\n} ];\n\nconst STAND_ALONE_SPECIFIERS = {\n e: 'c',\n E: 'c',\n M: 'L',\n Q: 'q'\n};\n\nconst specifiersRegex = {};\nconst resolvedFormats = {};\n\nfunction getSpecifierRegex(specifier) {\n if (!specifiersRegex[specifier]) {\n specifiersRegex[specifier] = new RegExp(specifier + \"+\");\n }\n return specifiersRegex[specifier];\n}\n\nfunction skeletonSpecifiers(skeleton) {\n const result = [];\n let current = skeleton.charAt(0);\n let specifier = current;\n for (let idx = 1; idx < skeleton.length; idx++) {\n let character = skeleton.charAt(idx);\n if (character === specifier) {\n current += character;\n } else {\n result.push(current);\n current = specifier = character;\n }\n }\n\n result.push(current);\n\n return result;\n}\n\nfunction findBestMatch(specifiers, availableFormats) {\n const specifiersLength = specifiers.length;\n let maxScore = -Number.MAX_VALUE;\n let bestMatches, result;\n for (let format in availableFormats) {\n const matches = [];\n let currentFormat = format.replace(\"v\", \"z\");\n let score = 0;\n for (let idx = 0; idx < specifiersLength; idx++) {\n const specifier = specifiers[idx];\n let specifierRegex = getSpecifierRegex(specifier[0]);\n let match = (specifierRegex.exec(currentFormat) || [])[0];\n\n if (!match) {\n score -= REMOVAL_PENALTY;\n } else {\n currentFormat = currentFormat.replace(match, EMPTY);\n if (match.length !== specifier.length) {\n let delta = Math.max(Math.min(LENGHT_DELTA[match.length] - LENGHT_DELTA[specifier.length], 2), -2);\n score -= PENALTIES[delta];\n }\n }\n\n matches.push(match);\n\n if (score < maxScore) {\n break;\n }\n }\n\n if (currentFormat.length) {\n score -= skeletonSpecifiers(currentFormat).length * ADDITION_PENALTY;\n }\n\n if (score > maxScore) {\n maxScore = score;\n bestMatches = matches;\n result = availableFormats[format];\n }\n }\n\n result = result.replace(\"v\", \"z\");\n\n for (let idx = 0; idx < specifiersLength; idx++) {\n const bestMatch = bestMatches[idx];\n if (bestMatch && bestMatch !== specifiers[idx]) {\n const matchSpecifier = bestMatches[idx][0];\n result = result.replace(getSpecifierRegex(matchSpecifier), specifiers[idx]);\n if (STAND_ALONE_SPECIFIERS[matchSpecifier]) {\n result = result.replace(getSpecifierRegex(STAND_ALONE_SPECIFIERS[matchSpecifier]), specifiers[idx]);\n }\n }\n }\n\n return result;\n}\n\nfunction cacheFormat(skeleton, format, locale) {\n if (!resolvedFormats[locale]) {\n resolvedFormats[locale] = {};\n }\n resolvedFormats[locale][skeleton] = format;\n}\n\n\nfunction skeletonFormat(skeleton, info) {\n const availableFormats = info.calendar.dateTimeFormats.availableFormats;\n if (availableFormats[skeleton]) {\n return availableFormats[skeleton];\n }\n if (resolvedFormats[info.name] && resolvedFormats[info.name][skeleton]) {\n return resolvedFormats[info.name][skeleton];\n }\n const timeStartIndex = skeleton.search(TIME_SPECIFIERS_REGEX);\n let result;\n if (timeStartIndex > 0) {\n const dateSkeleton = skeleton.substr(0, timeStartIndex);\n const timeSkeleton = skeleton.substr(timeStartIndex);\n\n result = formatString(info.calendar.dateTimeFormats.short, //should be deterimed based on specifiers\n availableFormats[timeSkeleton] || findBestMatch(skeletonSpecifiers(timeSkeleton), availableFormats),\n availableFormats[dateSkeleton] || findBestMatch(skeletonSpecifiers(dateSkeleton), availableFormats));\n } else {\n result = findBestMatch(skeletonSpecifiers(skeleton), availableFormats);\n }\n\n cacheFormat(skeleton, result, info.name);\n return result;\n}\n\nfunction skeletonFromOptions(options) {\n let result = [];\n for (let idx = 0; idx < DATE_OPTIONS_MAP.length; idx++) {\n let option = DATE_OPTIONS_MAP[idx];\n let field = option.key;\n let value = options[field];\n if (value) {\n let spcifier = option.specifier || option.getSpecifier(options);\n result.push(spcifier.repeat(VALUE_FORMAT_LENGTH[value]));\n }\n }\n\n return result.join(EMPTY);\n}\n\nexport default function datePattern(format, info) {\n const calendar = info.calendar;\n let result;\n if (isString(format)) {\n if (calendar.patterns[format]) {\n result = calendar.patterns[format];\n } else {\n result = format;\n }\n } else if (format) {\n if (format.pattern) {\n return format.pattern;\n }\n\n let skeleton = format.skeleton;\n if (!skeleton) {\n if (format.datetime) {\n result = formatString(calendar.dateTimeFormats[format.datetime], calendar.timeFormats[format.datetime], calendar.dateFormats[format.datetime]);\n } else if (format.date) {\n result = calendar.dateFormats[format.date];\n } else if (format.time) {\n result = calendar.timeFormats[format.time];\n } else {\n skeleton = skeletonFromOptions(format);\n }\n }\n\n if (skeleton) {\n result = skeletonFormat(skeleton, info);\n }\n }\n\n if (!result) {\n result = calendar.patterns.d;\n }\n\n return result;\n}\n","export default function dateNameType(formatLength) {\n let nameType;\n if (formatLength <= 3) {\n nameType = \"abbreviated\";\n } else if (formatLength === 4) {\n nameType = \"wide\";\n } else if (formatLength === 5) {\n nameType = \"narrow\";\n } else if (formatLength === 6) {\n nameType = \"short\";\n }\n\n return nameType;\n}","import dateFormatNames from '../cldr/date-format-names';\nimport dateNameType from './date-name-type';\n\nexport default function formatNames(locale, type, formatLength, standAlone, lower) {\n return dateFormatNames(locale, {\n type: type,\n nameType: dateNameType(formatLength),\n standAlone: standAlone,\n lower: lower\n });\n}","function isFunction(fun) {\n return typeof(fun) === 'function';\n}\n\nexport default function isDate(value) {\n return Boolean(value) && isFunction(value.getTime) && isFunction(value.getMonth);\n}\n","const MONTH = 'month';\nconst HOUR = 'hour';\nconst ZONE = 'zone';\nconst WEEKDAY = 'weekday';\nconst QUARTER = 'quarter';\n\nconst DATE_FIELD_MAP = {\n 'G': 'era',\n 'y': 'year',\n 'q': QUARTER,\n 'Q': QUARTER,\n 'M': MONTH,\n 'L': MONTH,\n 'd': 'day',\n 'E': WEEKDAY,\n 'c': WEEKDAY,\n 'e': WEEKDAY,\n 'h': HOUR,\n 'H': HOUR,\n 'k': HOUR,\n 'K': HOUR,\n 'm': 'minute',\n 's': 'second',\n 'S': 'millisecond',\n 'a': 'dayperiod',\n 'x': ZONE,\n 'X': ZONE,\n 'z': ZONE,\n 'Z': ZONE\n};\n\nconst dateFormatRegExp = /d{1,2}|E{1,6}|e{1,6}|c{3,6}|c{1}|M{1,5}|L{1,5}|y{1,4}|H{1,2}|h{1,2}|k{1,2}|K{1,2}|m{1,2}|a{1,5}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|x{1,5}|X{1,5}|G{1,5}|q{1,5}|Q{1,5}|\"[^\"]*\"|'[^']*'/g;\n\nexport { dateFormatRegExp, DATE_FIELD_MAP };","import { localeInfo, firstDay } from '../cldr';\nimport { DEFAULT_LOCALE, EMPTY } from '../common/constants';\nimport formatString from '../common/format-string';\nimport datePattern from './date-pattern';\nimport formatNames from './format-names';\nimport pad from '../common/pad';\nimport isDate from '../common/is-date';\nimport { dateFormatRegExp } from './constants';\n\nfunction formatDayOfWeekIndex(day, formatLength, localeInfo) {\n const firstDayIndex = firstDay(localeInfo);\n let dayIndex;\n if (day < firstDayIndex) {\n dayIndex = 7 - firstDayIndex + day;\n } else {\n dayIndex = day - firstDayIndex;\n }\n\n return dayIndex + 1;\n}\n\nfunction formatMonth(month, formatLength, info, standAlone) {\n if (formatLength <= 2) {\n return pad(month + 1, formatLength);\n }\n return formatNames(info, \"months\", formatLength, standAlone)[month];\n}\n\nfunction formatQuarter(date, formatLength, info, standAlone) {\n const quarter = Math.floor(date.getMonth() / 3);\n if (formatLength < 3) {\n return quarter + 1;\n }\n\n return formatNames(info, \"quarters\", formatLength, standAlone)[quarter];\n}\n\n\nfunction formatTimeZone(date, info, options) {\n const { shortHours, optionalMinutes, separator, localizedName, zZeroOffset } = options;\n const offset = date.getTimezoneOffset() / 60;\n if (offset === 0 && zZeroOffset) {\n return \"Z\";\n }\n const sign = offset <= 0 ? \"+\" : \"-\";\n const hoursMinutes = Math.abs(offset).toString().split(\".\");\n const minutes = hoursMinutes[1] || 0;\n let result = sign + (shortHours ? hoursMinutes[0] : pad(hoursMinutes[0], 2));\n if (minutes || !optionalMinutes) {\n result += (separator ? \":\" : EMPTY) + pad(minutes, 2);\n }\n\n if (localizedName) {\n const localizedFormat = offset === 0 ? info.calendar.gmtZeroFormat : info.calendar.gmtFormat;\n result = formatString(localizedFormat, result);\n }\n\n return result;\n}\n\nfunction formatDayOfWeek(date, formatLength, info, standAlone) {\n let result;\n if (formatLength < 3) {\n result = formatDayOfWeekIndex(date.getDay(), formatLength, info);\n } else {\n result = formatNames(info, \"days\", formatLength, standAlone)[date.getDay()];\n }\n return result;\n}\n\nconst formatters = {};\n\nformatters.d = function(date, formatLength) {\n return pad(date.getDate(), formatLength);\n};\n\nformatters.E = function(date, formatLength, info) {\n return formatNames(info, \"days\", formatLength)[date.getDay()];\n};\n\nformatters.M = function(date, formatLength, info) {\n return formatMonth(date.getMonth(), formatLength, info, false);\n};\n\nformatters.L = function(date, formatLength, info) {\n return formatMonth(date.getMonth(), formatLength, info, true);\n};\n\nformatters.y = function(date, formatLength) {\n let year = date.getFullYear();\n if (formatLength === 2) {\n year = year % 100;\n }\n return pad(year, formatLength);\n};\n\nformatters.h = function(date, formatLength) {\n const hours = date.getHours() % 12 || 12;\n return pad(hours, formatLength);\n};\n\nformatters.H = function(date, formatLength) {\n return pad(date.getHours(), formatLength);\n};\n\nformatters.k = function(date, formatLength) {\n return pad(date.getHours() || 24, formatLength);\n};\n\nformatters.K = function(date, formatLength) {\n return pad(date.getHours() % 12, formatLength);\n};\n\nformatters.m = function(date, formatLength) {\n return pad(date.getMinutes(), formatLength);\n};\n\nformatters.s = function(date, formatLength) {\n return pad(date.getSeconds(), formatLength);\n};\n\nformatters.S = function(date, formatLength) {\n const milliseconds = date.getMilliseconds();\n let result;\n if (milliseconds !== 0) {\n result = pad(String(milliseconds / 1000).split(\".\")[1].substr(0, formatLength), formatLength, true);\n } else {\n result = pad(EMPTY, formatLength);\n }\n return result;\n};\n\nformatters.a = function(date, formatLength, info) {\n return formatNames(info, \"dayPeriods\", formatLength)[date.getHours() < 12 ? \"am\" : \"pm\"];\n};\n\nformatters.z = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n shortHours: formatLength < 4,\n optionalMinutes: formatLength < 4,\n separator: true,\n localizedName: true\n });\n};\n\nformatters.Z = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n separator: formatLength > 3,\n localizedName: formatLength === 4,\n zZeroOffset: formatLength === 5\n });\n};\n\nformatters.x = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n optionalMinutes: formatLength === 1,\n separator: formatLength === 3 || formatLength === 5\n });\n};\n\nformatters.X = function(date, formatLength, info) {\n return formatTimeZone(date, info, {\n optionalMinutes: formatLength === 1,\n separator: formatLength === 3 || formatLength === 5,\n zZeroOffset: true\n });\n};\n\nformatters.G = function(date, formatLength, info) {\n let era = date.getFullYear() >= 0 ? 1 : 0;\n return formatNames(info, \"eras\", formatLength)[era];\n};\n\nformatters.e = formatDayOfWeek;\n\nformatters.c = function(date, formatLength, info) {\n return formatDayOfWeek(date, formatLength, info, true);\n};\n\nformatters.q = function(date, formatLength, info) {\n return formatQuarter(date, formatLength, info, true);\n};\n\nformatters.Q = formatQuarter;\n\nexport default function formatDate(date, format, locale = DEFAULT_LOCALE) {\n if (!isDate(date)) {\n if (date === undefined || date === null) {\n return EMPTY;\n }\n return date;\n }\n\n const info = localeInfo(locale);\n const pattern = datePattern(format, info);\n\n return pattern.replace(dateFormatRegExp, function(match) {\n let formatLength = match.length;\n let result;\n\n if (match.includes(\"'\") || match.includes(\"\\\"\")) {\n result = match.slice(1, formatLength - 1);\n } else {\n result = formatters[match[0]](date, formatLength, info);\n }\n\n return result;\n });\n}\n","export function convertTimeZone(date, fromOffset, toOffset) {\n const fromLocalOffset = date.getTimezoneOffset();\n\n const offsetDate = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n\n const toLocalOffset = offsetDate.getTimezoneOffset();\n\n return new Date(offsetDate.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n}\n\nexport function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n}","import { adjustDST, convertTimeZone } from './time-utils';\nimport { localeInfo } from '../cldr';\nimport { DEFAULT_LOCALE, EMPTY } from '../common/constants';\nimport { errors } from '../errors';\nimport formatNames from './format-names';\nimport datePattern from './date-pattern';\nimport round from '../common/round';\nimport isDate from '../common/is-date';\n\nconst timeZoneOffsetRegExp = /([+|\\-]\\d{1,2})(:?)(\\d{2})?/;\nconst dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\nconst offsetRegExp = /[+-]\\d*/;\nconst numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n};\nconst numberRegex = /\\d+/;\nconst PLACEHOLDER = \"{0}\";\n\nconst leadingSpacesRegex = /^ */;\nconst trailingSpacesRegex = / *$/;\n\nconst standardDateFormats = [\n \"yyyy/MM/dd HH:mm:ss\",\n \"yyyy/MM/dd HH:mm\",\n \"yyyy/MM/dd\",\n \"E MMM dd yyyy HH:mm:ss\",\n \"yyyy-MM-ddTHH:mm:ss.SSSSSSSXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSSXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSXXX\",\n \"yyyy-MM-ddTHH:mm:ssXXX\",\n \"yyyy-MM-ddTHH:mm:ss.SSSSSSS\",\n \"yyyy-MM-ddTHH:mm:ss.SSS\",\n \"yyyy-MM-ddTHH:mmXXX\",\n \"yyyy-MM-ddTHH:mmX\",\n \"yyyy-MM-ddTHH:mm:ss\",\n \"yyyy-MM-ddTHH:mm\",\n \"yyyy-MM-dd HH:mm:ss\",\n \"yyyy-MM-dd HH:mm\",\n \"yyyy-MM-dd\",\n \"HH:mm:ss\",\n \"HH:mm\"\n];\nconst FORMATS_SEQUENCE = [ \"G\", \"g\", \"F\", \"Y\", \"y\", \"M\", \"m\", \"D\", \"d\", \"y\", \"T\", \"t\" ];\nconst TWO_DIGIT_YEAR_MAX = 2029;\n\nfunction outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n}\n\nfunction lookAhead(match, state) {\n let { format, idx } = state;\n let i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n state.idx = idx;\n return i;\n}\n\nfunction getNumber(size, state) {\n let regex = size ? (numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}')) : numberRegex,\n match = state.value.substr(state.valueIdx, size).match(regex);\n\n if (match) {\n match = match[0];\n state.valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n}\n\nfunction getIndexByName(names, state, lower) {\n let i = 0,\n length = names.length,\n name, nameLength,\n matchLength = 0,\n matchIdx = 0,\n subValue;\n\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = state.value.substr(state.valueIdx, nameLength);\n\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n\n if (subValue === name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n\n if (matchLength) {\n state.valueIdx += matchLength;\n return matchIdx + 1;\n }\n\n return null;\n}\n\nfunction checkLiteral(state) {\n let result = false;\n if (state.value.charAt(state.valueIdx) === state.format[state.idx]) {\n state.valueIdx++;\n result = true;\n }\n return result;\n}\n\nfunction calendarGmtFormats(calendar) {\n const { gmtFormat, gmtZeroFormat } = calendar;\n if (!gmtFormat) {\n throw errors.NoGMTInfo.error();\n }\n\n return [ gmtFormat.replace(PLACEHOLDER, EMPTY).toLowerCase(), gmtZeroFormat.replace(PLACEHOLDER, EMPTY).toLowerCase() ];\n}\n\nfunction parseTimeZoneOffset(state, info, options) {\n const { shortHours, noSeparator, optionalMinutes, localizedName, zLiteral } = options;\n state.UTC = true;\n\n if (zLiteral && state.value.charAt(state.valueIdx) === \"Z\") {\n state.valueIdx++;\n return false;\n }\n\n if (localizedName && !getIndexByName(calendarGmtFormats(info.calendar), state, true)) {\n return true;\n }\n\n const matches = timeZoneOffsetRegExp.exec(state.value.substr(state.valueIdx, 6));\n if (!matches) {\n return !localizedName;\n }\n\n const hoursMatch = matches[1];\n const minutesMatch = matches[3];\n const hoursOffset = parseInt(hoursMatch, 10);\n const separator = matches[2];\n let minutesOffset = parseInt(minutesMatch, 10);\n\n if (isNaN(hoursOffset) || (!shortHours && hoursMatch.length !== 3) || (!optionalMinutes && isNaN(minutesOffset)) || (noSeparator && separator)) {\n return true;\n }\n\n if (isNaN(minutesOffset)) {\n minutesOffset = null;\n }\n\n if (outOfRange(hoursOffset, -12, 13) || (minutesOffset && outOfRange(minutesOffset, 0, 59))) {\n return true;\n }\n\n state.valueIdx += matches[0].length;\n state.hoursOffset = hoursOffset;\n state.minutesOffset = minutesOffset;\n}\n\nfunction parseMonth(ch, state, info) {\n const count = lookAhead(ch, state);\n const names = formatNames(info, \"months\", count, ch === \"L\", true);\n\n const month = count < 3 ? getNumber(2, state) : getIndexByName(names, state, true);\n\n if (month === null || outOfRange(month, 1, 12)) {\n return true;\n }\n state.month = month - 1;\n}\n\nfunction parseDayOfWeek(ch, state, info) {\n const count = lookAhead(ch, state);\n const names = formatNames(info, \"days\", count, ch === \"c\", true);\n let dayOfWeek = count < 3 ? getNumber(1, state) : getIndexByName(names, state, true);\n if ((!dayOfWeek && dayOfWeek !== 0) || outOfRange(dayOfWeek, 1, 7)) {\n return true;\n }\n}\n\nconst parsers = {};\n\nparsers.d = function(state) {\n lookAhead(\"d\", state);\n const day = getNumber(2, state);\n\n if (day === null || outOfRange(day, 1, 31)) {\n return true;\n }\n\n if (state.day === null) {\n state.day = day;\n }\n};\n\nparsers.E = function(state, info) {\n const count = lookAhead(\"E\", state);\n //validate if it matches the day?\n let dayOfWeek = getIndexByName(formatNames(info, \"days\", count, false, true), state, true);\n if (dayOfWeek === null) {\n return true;\n }\n};\n\nparsers.M = function(state, info) {\n return parseMonth(\"M\", state, info);\n};\n\nparsers.L = function(state, info) {\n return parseMonth(\"L\", state, info);\n};\n\nparsers.y = function(state) {\n const count = lookAhead(\"y\", state);\n let year = getNumber(count === 1 ? undefined : count, state);\n\n if (year === null) {\n return true;\n }\n\n if (count === 2) {\n const currentYear = new Date().getFullYear();\n year = (currentYear - currentYear % 100) + year;\n if (year > TWO_DIGIT_YEAR_MAX) {\n year -= 100;\n }\n }\n\n state.year = year;\n};\n\nparsers.h = function(state) {\n lookAhead(\"h\", state);\n\n let hours = getNumber(2, state);\n if (hours === 12) {\n hours = 0;\n }\n\n if (hours === null || outOfRange(hours, 0, 11)) {\n return true;\n }\n\n state.hours = hours;\n};\n\nparsers.K = function(state) {\n lookAhead(\"K\", state);\n\n let hours = getNumber(2, state);\n\n if (hours === null || outOfRange(hours, 0, 11)) {\n return true;\n }\n\n state.hours = hours;\n};\n\nparsers.a = function(state, info) {\n const count = lookAhead(\"a\", state);\n let periodFormats = formatNames(info, \"dayPeriods\", count, false, true);\n\n const pmHour = getIndexByName([ periodFormats.pm ], state, true);\n if (!pmHour && !getIndexByName([ periodFormats.am ], state, true)) {\n return true;\n }\n\n state.pmHour = pmHour;\n};\n\nparsers.H = function(state) {\n lookAhead(\"H\", state);\n const hours = getNumber(2, state);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return true;\n }\n state.hours = hours;\n};\n\nparsers.k = function(state) {\n lookAhead(\"k\", state);\n\n let hours = getNumber(2, state);\n\n if (hours === null || outOfRange(hours, 1, 24)) {\n return true;\n }\n\n state.hours = hours === 24 ? 0 : hours;\n};\n\nparsers.m = function(state) {\n lookAhead(\"m\", state);\n const minutes = getNumber(2, state);\n\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return true;\n }\n\n state.minutes = minutes;\n};\n\nparsers.s = function(state) {\n lookAhead(\"s\", state);\n const seconds = getNumber(2, state);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return true;\n }\n state.seconds = seconds;\n};\n\nparsers.S = function(state) {\n const count = lookAhead(\"S\", state);\n const match = state.value.substr(state.valueIdx, count);\n let milliseconds = null;\n\n if (!isNaN(parseInt(match, 10))) {\n milliseconds = parseFloat(\"0.\" + match, 10);\n milliseconds = round(milliseconds, 3);\n milliseconds *= 1000;\n state.valueIdx += count;\n }\n\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return true;\n }\n\n state.milliseconds = milliseconds;\n};\n\nparsers.z = function(state, info) {\n const count = lookAhead(\"z\", state);\n\n const shortFormat = count < 4;\n\n const invalid = parseTimeZoneOffset(state, info, {\n shortHours: shortFormat,\n optionalMinutes: shortFormat,\n localizedName: true\n });\n\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.Z = function(state, info) {\n const count = lookAhead(\"Z\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count < 4,\n zLiteral: count === 5,\n localizedName: count === 4\n });\n\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.x = function(state, info) {\n const count = lookAhead(\"x\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count !== 3 && count !== 5,\n optionalMinutes: count === 1\n });\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.X = function(state, info) {\n const count = lookAhead(\"X\", state);\n\n const invalid = parseTimeZoneOffset(state, info, {\n noSeparator: count !== 3 && count !== 5,\n optionalMinutes: count === 1,\n zLiteral: true\n });\n if (invalid) {\n return invalid;\n }\n};\n\nparsers.G = function(state, info) {\n const count = lookAhead(\"G\", state);\n const eras = formatNames(info, \"eras\", count, false, true);\n const era = getIndexByName([ eras[0], eras[1] ], state, true);\n\n if (era === null) {\n return true;\n }\n};\n\nparsers.e = function(state, info) {\n return parseDayOfWeek(\"e\", state, info);\n};\n\nparsers.c = function(state, info) {\n return parseDayOfWeek(\"c\", state, info);\n};\n\nfunction createDate(state) {\n let { year, month, day, hours, minutes, seconds, milliseconds, pmHour, UTC, hoursOffset, minutesOffset } = state;\n const hasTime = hours !== null || minutes !== null || seconds || null;\n const date = new Date();\n let result;\n\n if (year === null && month === null && day === null && hasTime) {\n year = date.getFullYear();\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = date.getFullYear();\n }\n\n if (day === null) {\n day = 1;\n }\n }\n\n if (pmHour && hours < 12) {\n hours += 12;\n }\n\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n\n if (minutesOffset) {\n minutes += -minutesOffset * (hoursOffset < 0 ? -1 : 1);\n }\n\n result = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n result = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(result, hours);\n }\n\n if (year < 100) {\n result.setFullYear(year);\n }\n\n if (result.getDate() !== day && UTC === undefined) {\n return null;\n }\n\n return result;\n}\n\nfunction addFormatSpaces(value, format) {\n const leadingSpaces = leadingSpacesRegex.exec(format)[0];\n const trailingSpaces = trailingSpacesRegex.exec(format)[0];\n\n return `${ leadingSpaces }${ value }${ trailingSpaces }`;\n}\n\nfunction parseExact(value, format, info) {\n let pattern = datePattern(format, info).split(EMPTY);\n\n const state = {\n format: pattern,\n idx: 0,\n value: addFormatSpaces(value, format),\n valueIdx: 0,\n year: null,\n month: null,\n day: null,\n hours: null,\n minutes: null,\n seconds: null,\n milliseconds: null\n };\n const length = pattern.length;\n let literal = false;\n\n for (; state.idx < length; state.idx++) {\n let ch = pattern[state.idx];\n\n if (literal) {\n if (ch === \"'\") {\n literal = false;\n }\n\n checkLiteral(state);\n } else {\n if (parsers[ch]) {\n let invalid = parsers[ch](state, info);\n if (invalid) {\n return null;\n }\n } else if (ch === \"'\") {\n literal = true;\n checkLiteral(state);\n } else if (!checkLiteral(state)) {\n return null;\n }\n }\n }\n\n if (state.valueIdx < value.length) {\n return null;\n }\n\n return createDate(state) || null;\n}\n\nfunction parseMicrosoftDateOffset(offset) {\n const sign = offset.substr(0, 1) === \"-\" ? -1 : 1;\n\n let result = offset.substring(1);\n result = (parseInt(result.substr(0, 2), 10) * 60) + parseInt(result.substring(2), 10);\n\n return sign * result;\n}\n\nfunction parseMicrosoftDateFormat(value) {\n if (value && value.indexOf(\"/D\") === 0) {\n let date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n let tzoffset = offsetRegExp.exec(date.substring(1));\n\n date = new Date(parseInt(date, 10));\n\n if (tzoffset) {\n tzoffset = parseMicrosoftDateOffset(tzoffset[0]);\n date = convertTimeZone(date, date.getTimezoneOffset(), 0);\n date = convertTimeZone(date, 0, -1 * tzoffset);\n }\n\n return date;\n }\n }\n}\n\nfunction defaultFormats(calendar) {\n const formats = [];\n const patterns = calendar.patterns;\n const length = FORMATS_SEQUENCE.length;\n\n for (let idx = 0; idx < length; idx++) {\n formats.push(patterns[FORMATS_SEQUENCE[idx]]);\n }\n\n return formats.concat(standardDateFormats);\n}\n\nexport default function parseDate(value, formats, locale = DEFAULT_LOCALE) {\n if (!value) {\n return null;\n }\n\n if (isDate(value)) {\n return value;\n }\n\n let parseValue = String(value).trim();\n let date = parseMicrosoftDateFormat(parseValue);\n if (date) {\n return date;\n }\n\n const info = localeInfo(locale);\n let parseFormats = formats || defaultFormats(info.calendar);\n parseFormats = Array.isArray(parseFormats) ? parseFormats : [ parseFormats ];\n\n const length = parseFormats.length;\n\n for (let idx = 0; idx < length; idx++) {\n date = parseExact(parseValue, parseFormats[idx], info);\n if (date) {\n return date;\n }\n }\n\n return date;\n}\n","import { DEFAULT_LOCALE } from '../common/constants';\nimport isNumber from '../common/is-number';\nimport datePattern from './date-pattern';\nimport dateNameType from './date-name-type';\nimport { dateFormatRegExp, DATE_FIELD_MAP } from './constants';\nimport { localeInfo } from '../cldr';\n\nconst NAME_TYPES = {\n month: {\n type: 'months',\n minLength: 3,\n standAlone: 'L'\n },\n\n quarter: {\n type: 'quarters',\n minLength: 3,\n standAlone: 'q'\n },\n\n weekday: {\n type: 'days',\n minLength: {\n E: 0,\n c: 3,\n e: 3\n },\n standAlone: 'c'\n },\n\n dayperiod: {\n type: 'dayPeriods',\n minLength: 0\n },\n\n era: {\n type: 'eras',\n minLength: 0\n }\n};\n\nconst LITERAL = 'literal';\n\nfunction addLiteral(parts, value) {\n const lastPart = parts[parts.length - 1];\n if (lastPart && lastPart.type === LITERAL) {\n lastPart.pattern += value;\n } else {\n parts.push({\n type: LITERAL,\n pattern: value\n });\n }\n}\n\nfunction isHour12(pattern) {\n return pattern === 'h' || pattern === 'K';\n}\n\nexport default function splitDateFormat(format, locale = DEFAULT_LOCALE) {\n const info = localeInfo(locale);\n const pattern = datePattern(format, info);\n const parts = [];\n let lastIndex = dateFormatRegExp.lastIndex = 0;\n let match = dateFormatRegExp.exec(pattern);\n\n while (match) {\n let value = match[0];\n\n if (lastIndex < match.index) {\n addLiteral(parts, pattern.substring(lastIndex, match.index));\n }\n\n if (value.startsWith('\"') || value.startsWith(\"'\")) {\n addLiteral(parts, value);\n } else {\n const specifier = value[0];\n const type = DATE_FIELD_MAP[specifier];\n const part = {\n type: type,\n pattern: value\n };\n\n if (type === 'hour') {\n part.hour12 = isHour12(value);\n }\n\n const names = NAME_TYPES[type];\n\n if (names) {\n const minLength = isNumber(names.minLength) ? names.minLength : names.minLength[specifier];\n const patternLength = value.length;\n\n if (patternLength >= minLength) {\n part.names = {\n type: names.type,\n nameType: dateNameType(patternLength),\n standAlone: names.standAlone === specifier\n };\n }\n }\n\n parts.push(part);\n }\n\n lastIndex = dateFormatRegExp.lastIndex;\n match = dateFormatRegExp.exec(pattern);\n }\n\n if (lastIndex < pattern.length) {\n addLiteral(parts, pattern.substring(lastIndex));\n }\n\n return parts;\n}\n","import { formatDate } from './dates';\nimport { formatNumber } from './numbers';\nimport { EMPTY } from './common/constants';\nimport isDate from './common/is-date';\nimport isNumber from './common/is-number';\n\nconst formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n\nexport function toString(value, format, locale) {\n if (format) {\n if (isDate(value)) {\n return formatDate(value, format, locale);\n } else if (isNumber(value)) {\n return formatNumber(value, format, locale);\n }\n }\n\n return value !== undefined && value !== null ? value : EMPTY;\n}\n\nexport function format(format, values, locale) {\n return format.replace(formatRegExp, function(match, index, placeholderFormat) {\n let value = values[parseInt(index, 10)];\n\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : EMPTY, locale);\n });\n}\n","// previous version:\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\nvar Positioning = (function () {\n function Positioning() {\n }\n Positioning.prototype.getAllStyles = function (element) { return window.getComputedStyle(element); };\n Positioning.prototype.getStyle = function (element, prop) { return this.getAllStyles(element)[prop]; };\n Positioning.prototype.isStaticPositioned = function (element) {\n return (this.getStyle(element, 'position') || 'static') === 'static';\n };\n Positioning.prototype.offsetParent = function (element) {\n var offsetParentEl = element.offsetParent || document.documentElement;\n while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n offsetParentEl = offsetParentEl.offsetParent;\n }\n return offsetParentEl || document.documentElement;\n };\n Positioning.prototype.position = function (element, round) {\n if (round === void 0) { round = true; }\n var elPosition;\n var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };\n if (this.getStyle(element, 'position') === 'fixed') {\n elPosition = element.getBoundingClientRect();\n }\n else {\n var offsetParentEl = this.offsetParent(element);\n elPosition = this.offset(element, false);\n if (offsetParentEl !== document.documentElement) {\n parentOffset = this.offset(offsetParentEl, false);\n }\n parentOffset.top += offsetParentEl.clientTop;\n parentOffset.left += offsetParentEl.clientLeft;\n }\n elPosition.top -= parentOffset.top;\n elPosition.bottom -= parentOffset.top;\n elPosition.left -= parentOffset.left;\n elPosition.right -= parentOffset.left;\n if (round) {\n elPosition.top = Math.round(elPosition.top);\n elPosition.bottom = Math.round(elPosition.bottom);\n elPosition.left = Math.round(elPosition.left);\n elPosition.right = Math.round(elPosition.right);\n }\n return elPosition;\n };\n Positioning.prototype.offset = function (element, round) {\n if (round === void 0) { round = true; }\n var elBcr = element.getBoundingClientRect();\n var viewportOffset = {\n top: window.pageYOffset - document.documentElement.clientTop,\n left: window.pageXOffset - document.documentElement.clientLeft\n };\n var elOffset = {\n height: elBcr.height || element.offsetHeight,\n width: elBcr.width || element.offsetWidth,\n top: elBcr.top + viewportOffset.top,\n bottom: elBcr.bottom + viewportOffset.top,\n left: elBcr.left + viewportOffset.left,\n right: elBcr.right + viewportOffset.left\n };\n if (round) {\n elOffset.height = Math.round(elOffset.height);\n elOffset.width = Math.round(elOffset.width);\n elOffset.top = Math.round(elOffset.top);\n elOffset.bottom = Math.round(elOffset.bottom);\n elOffset.left = Math.round(elOffset.left);\n elOffset.right = Math.round(elOffset.right);\n }\n return elOffset;\n };\n Positioning.prototype.positionElements = function (hostElement, targetElement, placement, appendToBody) {\n var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n var targetElStyles = this.getAllStyles(targetElement);\n var targetElBCR = targetElement.getBoundingClientRect();\n var placementPrimary = placement.split('-')[0] || 'top';\n var placementSecondary = placement.split('-')[1] || 'center';\n var targetElPosition = {\n 'height': targetElBCR.height || targetElement.offsetHeight,\n 'width': targetElBCR.width || targetElement.offsetWidth,\n 'top': 0,\n 'bottom': targetElBCR.height || targetElement.offsetHeight,\n 'left': 0,\n 'right': targetElBCR.width || targetElement.offsetWidth\n };\n switch (placementPrimary) {\n case 'top':\n targetElPosition.top =\n hostElPosition.top - (targetElement.offsetHeight + parseFloat(targetElStyles.marginBottom));\n break;\n case 'bottom':\n targetElPosition.top = hostElPosition.top + hostElPosition.height;\n break;\n case 'left':\n targetElPosition.left =\n hostElPosition.left - (targetElement.offsetWidth + parseFloat(targetElStyles.marginRight));\n break;\n case 'right':\n targetElPosition.left = hostElPosition.left + hostElPosition.width;\n break;\n }\n switch (placementSecondary) {\n case 'top':\n targetElPosition.top = hostElPosition.top;\n break;\n case 'bottom':\n targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n break;\n case 'left':\n targetElPosition.left = hostElPosition.left;\n break;\n case 'right':\n targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n break;\n case 'center':\n if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;\n }\n else {\n targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;\n }\n break;\n }\n targetElPosition.top = Math.round(targetElPosition.top);\n targetElPosition.bottom = Math.round(targetElPosition.bottom);\n targetElPosition.left = Math.round(targetElPosition.left);\n targetElPosition.right = Math.round(targetElPosition.right);\n return targetElPosition;\n };\n // get the availble placements of the target element in the viewport dependeing on the host element\n Positioning.prototype.getAvailablePlacements = function (hostElement, targetElement) {\n var availablePlacements = [];\n var hostElemClientRect = hostElement.getBoundingClientRect();\n var targetElemClientRect = targetElement.getBoundingClientRect();\n var html = document.documentElement;\n var windowHeight = window.innerHeight || html.clientHeight;\n var windowWidth = window.innerWidth || html.clientWidth;\n var hostElemClientRectHorCenter = hostElemClientRect.left + hostElemClientRect.width / 2;\n var hostElemClientRectVerCenter = hostElemClientRect.top + hostElemClientRect.height / 2;\n // left: check if target width can be placed between host left and viewport start and also height of target is\n // inside viewport\n if (targetElemClientRect.width < hostElemClientRect.left) {\n // check for left only\n if (hostElemClientRectVerCenter > targetElemClientRect.height / 2 &&\n windowHeight - hostElemClientRectVerCenter > targetElemClientRect.height / 2) {\n availablePlacements.splice(availablePlacements.length, 1, 'left');\n }\n // check for left-top and left-bottom\n this.setSecondaryPlacementForLeftRight(hostElemClientRect, targetElemClientRect, 'left', availablePlacements);\n }\n // top: target height is less than host top\n if (targetElemClientRect.height < hostElemClientRect.top) {\n if (hostElemClientRectHorCenter > targetElemClientRect.width / 2 &&\n windowWidth - hostElemClientRectHorCenter > targetElemClientRect.width / 2) {\n availablePlacements.splice(availablePlacements.length, 1, 'top');\n }\n this.setSecondaryPlacementForTopBottom(hostElemClientRect, targetElemClientRect, 'top', availablePlacements);\n }\n // right: check if target width can be placed between host right and viewport end and also height of target is\n // inside viewport\n if (windowWidth - hostElemClientRect.right > targetElemClientRect.width) {\n // check for right only\n if (hostElemClientRectVerCenter > targetElemClientRect.height / 2 &&\n windowHeight - hostElemClientRectVerCenter > targetElemClientRect.height / 2) {\n availablePlacements.splice(availablePlacements.length, 1, 'right');\n }\n // check for right-top and right-bottom\n this.setSecondaryPlacementForLeftRight(hostElemClientRect, targetElemClientRect, 'right', availablePlacements);\n }\n // bottom: check if there is enough space between host bottom and viewport end for target height\n if (windowHeight - hostElemClientRect.bottom > targetElemClientRect.height) {\n if (hostElemClientRectHorCenter > targetElemClientRect.width / 2 &&\n windowWidth - hostElemClientRectHorCenter > targetElemClientRect.width / 2) {\n availablePlacements.splice(availablePlacements.length, 1, 'bottom');\n }\n this.setSecondaryPlacementForTopBottom(hostElemClientRect, targetElemClientRect, 'bottom', availablePlacements);\n }\n return availablePlacements;\n };\n /**\n * check if secondary placement for left and right are available i.e. left-top, left-bottom, right-top, right-bottom\n * primaryplacement: left|right\n * availablePlacementArr: array in which available placemets to be set\n */\n Positioning.prototype.setSecondaryPlacementForLeftRight = function (hostElemClientRect, targetElemClientRect, primaryPlacement, availablePlacementArr) {\n var html = document.documentElement;\n // check for left-bottom\n if (targetElemClientRect.height <= hostElemClientRect.bottom) {\n availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-bottom');\n }\n if ((window.innerHeight || html.clientHeight) - hostElemClientRect.top >= targetElemClientRect.height) {\n availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-top');\n }\n };\n /**\n * check if secondary placement for top and bottom are available i.e. top-left, top-right, bottom-left, bottom-right\n * primaryplacement: top|bottom\n * availablePlacementArr: array in which available placemets to be set\n */\n Positioning.prototype.setSecondaryPlacementForTopBottom = function (hostElemClientRect, targetElemClientRect, primaryPlacement, availablePlacementArr) {\n var html = document.documentElement;\n // check for left-bottom\n if ((window.innerWidth || html.clientWidth) - hostElemClientRect.left >= targetElemClientRect.width) {\n availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-left');\n }\n if (targetElemClientRect.width <= hostElemClientRect.right) {\n availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-right');\n }\n };\n return Positioning;\n}());\nexport { Positioning };\nvar positionService = new Positioning();\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n * 'top', 'bottom', 'left', 'right',\n * 'top-left', 'top-right',\n * 'bottom-left', 'bottom-right',\n * 'left-top', 'left-bottom',\n * 'right-top', 'right-bottom'.\n * */\nexport function positionElements(hostElement, targetElement, placement, appendToBody) {\n var placementVals = Array.isArray(placement) ? placement : [placement];\n // replace auto placement with other placements\n var hasAuto = placementVals.findIndex(function (val) { return val === 'auto'; });\n if (hasAuto >= 0) {\n ['top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top',\n 'left-bottom', 'right-top', 'right-bottom',\n ].forEach(function (obj) {\n if (placementVals.find(function (val) { return val.search('^' + obj) !== -1; }) == null) {\n placementVals.splice(hasAuto++, 1, obj);\n }\n });\n }\n // coordinates where to position\n var topVal = 0, leftVal = 0;\n var appliedPlacement;\n // get available placements\n var availablePlacements = positionService.getAvailablePlacements(hostElement, targetElement);\n var _loop_1 = function (item, index) {\n // check if passed placement is present in the available placement or otherwise apply the last placement in the\n // passed placement list\n if ((availablePlacements.find(function (val) { return val === item; }) != null) || (placementVals.length === index + 1)) {\n appliedPlacement = item;\n var pos = positionService.positionElements(hostElement, targetElement, item, appendToBody);\n topVal = pos.top;\n leftVal = pos.left;\n return \"break\";\n }\n };\n // iterate over all the passed placements\n for (var _i = 0, _a = toItemIndexes(placementVals); _i < _a.length; _i++) {\n var _b = _a[_i], item = _b.item, index = _b.index;\n var state_1 = _loop_1(item, index);\n if (state_1 === \"break\")\n break;\n }\n targetElement.style.top = topVal + \"px\";\n targetElement.style.left = leftVal + \"px\";\n return appliedPlacement;\n}\n// function to get index and item of an array\nfunction toItemIndexes(a) {\n return a.map(function (item, index) { return ({ item: item, index: index }); });\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nexport var DAYS_OF_WEEK;\n(function (DAYS_OF_WEEK) {\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"SUNDAY\"] = 0] = \"SUNDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"MONDAY\"] = 1] = \"MONDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"TUESDAY\"] = 2] = \"TUESDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"WEDNESDAY\"] = 3] = \"WEDNESDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"THURSDAY\"] = 4] = \"THURSDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"FRIDAY\"] = 5] = \"FRIDAY\";\n DAYS_OF_WEEK[DAYS_OF_WEEK[\"SATURDAY\"] = 6] = \"SATURDAY\";\n})(DAYS_OF_WEEK || (DAYS_OF_WEEK = {}));\nvar DEFAULT_WEEKEND_DAYS = [\n DAYS_OF_WEEK.SUNDAY,\n DAYS_OF_WEEK.SATURDAY\n];\nvar DAYS_IN_WEEK = 7;\nvar HOURS_IN_DAY = 24;\nvar MINUTES_IN_HOUR = 60;\nexport var SECONDS_IN_DAY = 60 * 60 * 24;\nfunction getExcludedSeconds(dateAdapter, _a) {\n var startDate = _a.startDate, seconds = _a.seconds, excluded = _a.excluded, _b = _a.precision, precision = _b === void 0 ? 'days' : _b;\n if (excluded.length < 1) {\n return 0;\n }\n var addSeconds = dateAdapter.addSeconds, getDay = dateAdapter.getDay, addDays = dateAdapter.addDays;\n var endDate = addSeconds(startDate, seconds - 1);\n var dayStart = getDay(startDate);\n var dayEnd = getDay(endDate);\n var result = 0; // Calculated in seconds\n var current = startDate;\n var _loop_1 = function () {\n var day = getDay(current);\n if (excluded.some(function (excludedDay) { return excludedDay === day; })) {\n result += calculateExcludedSeconds(dateAdapter, {\n dayStart: dayStart,\n dayEnd: dayEnd,\n day: day,\n precision: precision,\n startDate: startDate,\n endDate: endDate\n });\n }\n current = addDays(current, 1);\n };\n while (current < endDate) {\n _loop_1();\n }\n return result;\n}\nfunction calculateExcludedSeconds(dateAdapter, _a) {\n var precision = _a.precision, day = _a.day, dayStart = _a.dayStart, dayEnd = _a.dayEnd, startDate = _a.startDate, endDate = _a.endDate;\n var differenceInSeconds = dateAdapter.differenceInSeconds, endOfDay = dateAdapter.endOfDay, startOfDay = dateAdapter.startOfDay;\n if (precision === 'minutes') {\n if (day === dayStart) {\n return differenceInSeconds(endOfDay(startDate), startDate) + 1;\n }\n else if (day === dayEnd) {\n return differenceInSeconds(endDate, startOfDay(endDate)) + 1;\n }\n }\n return SECONDS_IN_DAY;\n}\nfunction getWeekViewEventSpan(dateAdapter, _a) {\n var event = _a.event, offset = _a.offset, startOfWeekDate = _a.startOfWeekDate, excluded = _a.excluded, _b = _a.precision, precision = _b === void 0 ? 'days' : _b, totalDaysInView = _a.totalDaysInView;\n var max = dateAdapter.max, differenceInSeconds = dateAdapter.differenceInSeconds, addDays = dateAdapter.addDays, endOfDay = dateAdapter.endOfDay, differenceInDays = dateAdapter.differenceInDays;\n var span = SECONDS_IN_DAY;\n var begin = max(event.start, startOfWeekDate);\n if (event.end) {\n switch (precision) {\n case 'minutes':\n span = differenceInSeconds(event.end, begin);\n break;\n default:\n span =\n differenceInDays(addDays(endOfDay(event.end), 1), begin) *\n SECONDS_IN_DAY;\n break;\n }\n }\n var offsetSeconds = offset * SECONDS_IN_DAY;\n var totalLength = offsetSeconds + span;\n // the best way to detect if an event is outside the week-view\n // is to check if the total span beginning (from startOfWeekDay or event start) exceeds the total days in the view\n var secondsInView = totalDaysInView * SECONDS_IN_DAY;\n if (totalLength > secondsInView) {\n span = secondsInView - offsetSeconds;\n }\n span -= getExcludedSeconds(dateAdapter, {\n startDate: begin,\n seconds: span,\n excluded: excluded,\n precision: precision\n });\n return span / SECONDS_IN_DAY;\n}\nexport function getWeekViewEventOffset(dateAdapter, _a) {\n var event = _a.event, startOfWeekDate = _a.startOfWeek, _b = _a.excluded, excluded = _b === void 0 ? [] : _b, _c = _a.precision, precision = _c === void 0 ? 'days' : _c;\n var differenceInDays = dateAdapter.differenceInDays, startOfDay = dateAdapter.startOfDay, differenceInSeconds = dateAdapter.differenceInSeconds;\n if (event.start < startOfWeekDate) {\n return 0;\n }\n var offset = 0;\n switch (precision) {\n case 'days':\n offset =\n differenceInDays(startOfDay(event.start), startOfWeekDate) *\n SECONDS_IN_DAY;\n break;\n case 'minutes':\n offset = differenceInSeconds(event.start, startOfWeekDate);\n break;\n }\n offset -= getExcludedSeconds(dateAdapter, {\n startDate: startOfWeekDate,\n seconds: offset,\n excluded: excluded,\n precision: precision\n });\n return Math.abs(offset / SECONDS_IN_DAY);\n}\nfunction isEventIsPeriod(dateAdapter, _a) {\n var event = _a.event, periodStart = _a.periodStart, periodEnd = _a.periodEnd;\n var isSameSecond = dateAdapter.isSameSecond;\n var eventStart = event.start;\n var eventEnd = event.end || event.start;\n if (eventStart > periodStart && eventStart < periodEnd) {\n return true;\n }\n if (eventEnd > periodStart && eventEnd < periodEnd) {\n return true;\n }\n if (eventStart < periodStart && eventEnd > periodEnd) {\n return true;\n }\n if (isSameSecond(eventStart, periodStart) ||\n isSameSecond(eventStart, periodEnd)) {\n return true;\n }\n if (isSameSecond(eventEnd, periodStart) ||\n isSameSecond(eventEnd, periodEnd)) {\n return true;\n }\n return false;\n}\nexport function getEventsInPeriod(dateAdapter, _a) {\n var events = _a.events, periodStart = _a.periodStart, periodEnd = _a.periodEnd;\n return events.filter(function (event) {\n return isEventIsPeriod(dateAdapter, { event: event, periodStart: periodStart, periodEnd: periodEnd });\n });\n}\nfunction getWeekDay(dateAdapter, _a) {\n var date = _a.date, _b = _a.weekendDays, weekendDays = _b === void 0 ? DEFAULT_WEEKEND_DAYS : _b;\n var startOfDay = dateAdapter.startOfDay, isSameDay = dateAdapter.isSameDay, getDay = dateAdapter.getDay;\n var today = startOfDay(new Date());\n return {\n date: date,\n isPast: date < today,\n isToday: isSameDay(date, today),\n isFuture: date > today,\n isWeekend: weekendDays.indexOf(getDay(date)) > -1\n };\n}\nexport function getWeekViewHeader(dateAdapter, _a) {\n var viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _b = _a.excluded, excluded = _b === void 0 ? [] : _b, weekendDays = _a.weekendDays, _c = _a.viewStart, viewStart = _c === void 0 ? dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _c, _d = _a.viewEnd, viewEnd = _d === void 0 ? dateAdapter.addDays(viewStart, DAYS_IN_WEEK) : _d;\n var addDays = dateAdapter.addDays, getDay = dateAdapter.getDay;\n var days = [];\n var date = viewStart;\n while (date < viewEnd) {\n if (!excluded.some(function (e) { return getDay(date) === e; })) {\n days.push(getWeekDay(dateAdapter, { date: date, weekendDays: weekendDays }));\n }\n date = addDays(date, 1);\n }\n return days;\n}\nexport function getDifferenceInDaysWithExclusions(dateAdapter, _a) {\n var date1 = _a.date1, date2 = _a.date2, excluded = _a.excluded;\n var date = date1;\n var diff = 0;\n while (date < date2) {\n if (excluded.indexOf(dateAdapter.getDay(date)) === -1) {\n diff++;\n }\n date = dateAdapter.addDays(date, 1);\n }\n return diff;\n}\nfunction getAllDayWeekEvents(dateAdapter, _a) {\n var events = _a.events, excluded = _a.excluded, precision = _a.precision, absolutePositionedEvents = _a.absolutePositionedEvents, viewStart = _a.viewStart, viewEnd = _a.viewEnd, eventsInPeriod = _a.eventsInPeriod;\n var differenceInSeconds = dateAdapter.differenceInSeconds, differenceInDays = dateAdapter.differenceInDays;\n var maxRange = getDifferenceInDaysWithExclusions(dateAdapter, {\n date1: viewStart,\n date2: viewEnd,\n excluded: excluded\n });\n var totalDaysInView = differenceInDays(viewEnd, viewStart) + 1;\n var eventsMapped = eventsInPeriod\n .filter(function (event) { return event.allDay; })\n .map(function (event) {\n var offset = getWeekViewEventOffset(dateAdapter, {\n event: event,\n startOfWeek: viewStart,\n excluded: excluded,\n precision: precision\n });\n var span = getWeekViewEventSpan(dateAdapter, {\n event: event,\n offset: offset,\n startOfWeekDate: viewStart,\n excluded: excluded,\n precision: precision,\n totalDaysInView: totalDaysInView\n });\n return { event: event, offset: offset, span: span };\n })\n .filter(function (e) { return e.offset < maxRange; })\n .filter(function (e) { return e.span > 0; })\n .map(function (entry) { return ({\n event: entry.event,\n offset: entry.offset,\n span: entry.span,\n startsBeforeWeek: entry.event.start < viewStart,\n endsAfterWeek: (entry.event.end || entry.event.start) > viewEnd\n }); })\n .sort(function (itemA, itemB) {\n var startSecondsDiff = differenceInSeconds(itemA.event.start, itemB.event.start);\n if (startSecondsDiff === 0) {\n return differenceInSeconds(itemB.event.end || itemB.event.start, itemA.event.end || itemA.event.start);\n }\n return startSecondsDiff;\n });\n var allDayEventRows = [];\n var allocatedEvents = [];\n eventsMapped.forEach(function (event, index) {\n if (allocatedEvents.indexOf(event) === -1) {\n allocatedEvents.push(event);\n var rowSpan_1 = event.span + event.offset;\n var otherRowEvents = eventsMapped\n .slice(index + 1)\n .filter(function (nextEvent) {\n if (nextEvent.offset >= rowSpan_1 &&\n rowSpan_1 + nextEvent.span <= totalDaysInView &&\n allocatedEvents.indexOf(nextEvent) === -1) {\n var nextEventOffset = nextEvent.offset - rowSpan_1;\n if (!absolutePositionedEvents) {\n nextEvent.offset = nextEventOffset;\n }\n rowSpan_1 += nextEvent.span + nextEventOffset;\n allocatedEvents.push(nextEvent);\n return true;\n }\n });\n allDayEventRows.push({\n row: [event].concat(otherRowEvents)\n });\n }\n });\n return allDayEventRows;\n}\nfunction getWeekViewHourGrid(dateAdapter, _a) {\n var events = _a.events, viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, weekStartsOn = _a.weekStartsOn, excluded = _a.excluded, weekendDays = _a.weekendDays, segmentHeight = _a.segmentHeight, viewStart = _a.viewStart, viewEnd = _a.viewEnd;\n var dayViewHourGrid = getDayViewHourGrid(dateAdapter, {\n viewDate: viewDate,\n hourSegments: hourSegments,\n dayStart: dayStart,\n dayEnd: dayEnd\n });\n var weekDays = getWeekViewHeader(dateAdapter, {\n viewDate: viewDate,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n viewStart: viewStart,\n viewEnd: viewEnd\n });\n var setHours = dateAdapter.setHours, setMinutes = dateAdapter.setMinutes, getHours = dateAdapter.getHours, getMinutes = dateAdapter.getMinutes;\n return weekDays.map(function (day) {\n var dayView = getDayView(dateAdapter, {\n events: events,\n viewDate: day.date,\n hourSegments: hourSegments,\n dayStart: dayStart,\n dayEnd: dayEnd,\n segmentHeight: segmentHeight,\n eventWidth: 1\n });\n var hours = dayViewHourGrid.map(function (hour) {\n var segments = hour.segments.map(function (segment) {\n var date = setMinutes(setHours(day.date, getHours(segment.date)), getMinutes(segment.date));\n return __assign({}, segment, { date: date });\n });\n return __assign({}, hour, { segments: segments });\n });\n function getColumnCount(allEvents, prevOverlappingEvents) {\n var columnCount = Math.max.apply(Math, prevOverlappingEvents.map(function (iEvent) { return iEvent.left + 1; }));\n var nextOverlappingEvents = allEvents\n .filter(function (iEvent) { return iEvent.left >= columnCount; })\n .filter(function (iEvent) {\n return (getOverLappingDayViewEvents(prevOverlappingEvents, iEvent.top, iEvent.top + iEvent.height).length > 0);\n });\n if (nextOverlappingEvents.length > 0) {\n return getColumnCount(allEvents, nextOverlappingEvents);\n }\n else {\n return columnCount;\n }\n }\n return {\n hours: hours,\n date: day.date,\n events: dayView.events.map(function (event) {\n var columnCount = getColumnCount(dayView.events, getOverLappingDayViewEvents(dayView.events, event.top, event.top + event.height));\n var width = 100 / columnCount;\n return __assign({}, event, { left: event.left * width, width: width });\n })\n };\n });\n}\nexport function getWeekView(dateAdapter, _a) {\n var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.precision, precision = _d === void 0 ? 'days' : _d, _e = _a.absolutePositionedEvents, absolutePositionedEvents = _e === void 0 ? false : _e, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, weekendDays = _a.weekendDays, segmentHeight = _a.segmentHeight, _f = _a.viewStart, viewStart = _f === void 0 ? dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _f, _g = _a.viewEnd, viewEnd = _g === void 0 ? dateAdapter.endOfWeek(viewDate, { weekStartsOn: weekStartsOn }) : _g;\n if (!events) {\n events = [];\n }\n var startOfDay = dateAdapter.startOfDay, endOfDay = dateAdapter.endOfDay;\n viewStart = startOfDay(viewStart);\n viewEnd = endOfDay(viewEnd);\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: events,\n periodStart: viewStart,\n periodEnd: viewEnd\n });\n var header = getWeekViewHeader(dateAdapter, {\n viewDate: viewDate,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n viewStart: viewStart,\n viewEnd: viewEnd\n });\n return {\n allDayEventRows: getAllDayWeekEvents(dateAdapter, {\n events: events,\n excluded: excluded,\n precision: precision,\n absolutePositionedEvents: absolutePositionedEvents,\n viewStart: viewStart,\n viewEnd: viewEnd,\n eventsInPeriod: eventsInPeriod\n }),\n period: {\n events: eventsInPeriod,\n start: header[0].date,\n end: endOfDay(header[header.length - 1].date)\n },\n hourColumns: getWeekViewHourGrid(dateAdapter, {\n events: events,\n viewDate: viewDate,\n hourSegments: hourSegments,\n dayStart: dayStart,\n dayEnd: dayEnd,\n weekStartsOn: weekStartsOn,\n excluded: excluded,\n weekendDays: weekendDays,\n segmentHeight: segmentHeight,\n viewStart: viewStart,\n viewEnd: viewEnd\n })\n };\n}\nexport function getMonthView(dateAdapter, _a) {\n var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, weekStartsOn = _a.weekStartsOn, _c = _a.excluded, excluded = _c === void 0 ? [] : _c, _d = _a.viewStart, viewStart = _d === void 0 ? dateAdapter.startOfMonth(viewDate) : _d, _e = _a.viewEnd, viewEnd = _e === void 0 ? dateAdapter.endOfMonth(viewDate) : _e, weekendDays = _a.weekendDays;\n if (!events) {\n events = [];\n }\n var startOfWeek = dateAdapter.startOfWeek, endOfWeek = dateAdapter.endOfWeek, differenceInDays = dateAdapter.differenceInDays, startOfDay = dateAdapter.startOfDay, addHours = dateAdapter.addHours, endOfDay = dateAdapter.endOfDay, isSameMonth = dateAdapter.isSameMonth, getDay = dateAdapter.getDay, getMonth = dateAdapter.getMonth;\n var start = startOfWeek(viewStart, { weekStartsOn: weekStartsOn });\n var end = endOfWeek(viewEnd, { weekStartsOn: weekStartsOn });\n var eventsInMonth = getEventsInPeriod(dateAdapter, {\n events: events,\n periodStart: start,\n periodEnd: end\n });\n var initialViewDays = [];\n var previousDate;\n var _loop_2 = function (i) {\n // hacky fix for https://github.com/mattlewis92/angular-calendar/issues/173\n var date;\n if (previousDate) {\n date = startOfDay(addHours(previousDate, HOURS_IN_DAY));\n if (previousDate.getTime() === date.getTime()) {\n // DST change, so need to add 25 hours\n /* istanbul ignore next */\n date = startOfDay(addHours(previousDate, HOURS_IN_DAY + 1));\n }\n previousDate = date;\n }\n else {\n date = previousDate = start;\n }\n if (!excluded.some(function (e) { return getDay(date) === e; })) {\n var day = getWeekDay(dateAdapter, {\n date: date,\n weekendDays: weekendDays\n });\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: eventsInMonth,\n periodStart: startOfDay(date),\n periodEnd: endOfDay(date)\n });\n day.inMonth = isSameMonth(date, viewDate);\n day.events = eventsInPeriod;\n day.badgeTotal = eventsInPeriod.length;\n initialViewDays.push(day);\n }\n };\n for (var i = 0; i < differenceInDays(end, start) + 1; i++) {\n _loop_2(i);\n }\n var days = [];\n var totalDaysVisibleInWeek = DAYS_IN_WEEK - excluded.length;\n if (totalDaysVisibleInWeek < DAYS_IN_WEEK) {\n for (var i = 0; i < initialViewDays.length; i += totalDaysVisibleInWeek) {\n var row = initialViewDays.slice(i, i + totalDaysVisibleInWeek);\n var isRowInMonth = row.some(function (day) { return getMonth(day.date) === getMonth(viewDate); });\n if (isRowInMonth) {\n days = days.concat(row);\n }\n }\n }\n else {\n days = initialViewDays;\n }\n var rows = Math.floor(days.length / totalDaysVisibleInWeek);\n var rowOffsets = [];\n for (var i = 0; i < rows; i++) {\n rowOffsets.push(i * totalDaysVisibleInWeek);\n }\n return {\n rowOffsets: rowOffsets,\n totalDaysVisibleInWeek: totalDaysVisibleInWeek,\n days: days,\n period: {\n start: days[0].date,\n end: endOfDay(days[days.length - 1].date),\n events: eventsInMonth\n }\n };\n}\nfunction getOverLappingDayViewEvents(events, top, bottom) {\n return events.filter(function (previousEvent) {\n var previousEventTop = previousEvent.top;\n var previousEventBottom = previousEvent.top + previousEvent.height;\n if (top < previousEventBottom && previousEventBottom < bottom) {\n return true;\n }\n else if (top < previousEventTop && previousEventTop < bottom) {\n return true;\n }\n else if (previousEventTop <= top && bottom <= previousEventBottom) {\n return true;\n }\n return false;\n });\n}\nexport function getDayView(dateAdapter, _a) {\n var _b = _a.events, events = _b === void 0 ? [] : _b, viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd, eventWidth = _a.eventWidth, segmentHeight = _a.segmentHeight;\n if (!events) {\n events = [];\n }\n var setMinutes = dateAdapter.setMinutes, setHours = dateAdapter.setHours, startOfDay = dateAdapter.startOfDay, startOfMinute = dateAdapter.startOfMinute, endOfDay = dateAdapter.endOfDay, differenceInMinutes = dateAdapter.differenceInMinutes;\n var startOfView = setMinutes(setHours(startOfDay(viewDate), dayStart.hour), dayStart.minute);\n var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), dayEnd.hour), dayEnd.minute);\n var previousDayEvents = [];\n var eventsInPeriod = getEventsInPeriod(dateAdapter, {\n events: events.filter(function (event) { return !event.allDay; }),\n periodStart: startOfView,\n periodEnd: endOfView\n });\n var dayViewEvents = eventsInPeriod\n .sort(function (eventA, eventB) {\n return eventA.start.valueOf() - eventB.start.valueOf();\n })\n .map(function (event) {\n var eventStart = event.start;\n var eventEnd = event.end || eventStart;\n var startsBeforeDay = eventStart < startOfView;\n var endsAfterDay = eventEnd > endOfView;\n var hourHeightModifier = (hourSegments * segmentHeight) / MINUTES_IN_HOUR;\n var top = 0;\n if (eventStart > startOfView) {\n top += differenceInMinutes(eventStart, startOfView);\n }\n top *= hourHeightModifier;\n var startDate = startsBeforeDay ? startOfView : eventStart;\n var endDate = endsAfterDay ? endOfView : eventEnd;\n var height = differenceInMinutes(endDate, startDate);\n if (!event.end) {\n height = segmentHeight;\n }\n else {\n height *= hourHeightModifier;\n }\n var bottom = top + height;\n var overlappingPreviousEvents = getOverLappingDayViewEvents(previousDayEvents, top, bottom);\n var left = 0;\n while (overlappingPreviousEvents.some(function (previousEvent) { return previousEvent.left === left; })) {\n left += eventWidth;\n }\n var dayEvent = {\n event: event,\n height: height,\n width: eventWidth,\n top: top,\n left: left,\n startsBeforeDay: startsBeforeDay,\n endsAfterDay: endsAfterDay\n };\n previousDayEvents.push(dayEvent);\n return dayEvent;\n });\n var width = Math.max.apply(Math, dayViewEvents.map(function (event) { return event.left + event.width; }));\n var allDayEvents = getEventsInPeriod(dateAdapter, {\n events: events.filter(function (event) { return event.allDay; }),\n periodStart: startOfDay(startOfView),\n periodEnd: endOfDay(endOfView)\n });\n return {\n events: dayViewEvents,\n width: width,\n allDayEvents: allDayEvents,\n period: {\n events: eventsInPeriod,\n start: startOfView,\n end: endOfView\n }\n };\n}\nexport function getDayViewHourGrid(dateAdapter, _a) {\n var viewDate = _a.viewDate, hourSegments = _a.hourSegments, dayStart = _a.dayStart, dayEnd = _a.dayEnd;\n var setMinutes = dateAdapter.setMinutes, setHours = dateAdapter.setHours, startOfDay = dateAdapter.startOfDay, startOfMinute = dateAdapter.startOfMinute, endOfDay = dateAdapter.endOfDay, addMinutes = dateAdapter.addMinutes, addHours = dateAdapter.addHours;\n var hours = [];\n var startOfView = setMinutes(setHours(startOfDay(viewDate), dayStart.hour), dayStart.minute);\n var endOfView = setMinutes(setHours(startOfMinute(endOfDay(viewDate)), dayEnd.hour), dayEnd.minute);\n var segmentDuration = MINUTES_IN_HOUR / hourSegments;\n var startOfViewDay = startOfDay(viewDate);\n for (var i = 0; i < HOURS_IN_DAY; i++) {\n var segments = [];\n for (var j = 0; j < hourSegments; j++) {\n var date = addMinutes(addHours(startOfViewDay, i), j * segmentDuration);\n if (date >= startOfView && date < endOfView) {\n segments.push({\n date: date,\n isStart: j === 0\n });\n }\n }\n if (segments.length > 0) {\n hours.push({ segments: segments });\n }\n }\n return hours;\n}\nexport var EventValidationErrorMessage;\n(function (EventValidationErrorMessage) {\n EventValidationErrorMessage[\"NotArray\"] = \"Events must be an array\";\n EventValidationErrorMessage[\"StartPropertyMissing\"] = \"Event is missing the `start` property\";\n EventValidationErrorMessage[\"StartPropertyNotDate\"] = \"Event `start` property should be a javascript date object. Do `new Date(event.start)` to fix it.\";\n EventValidationErrorMessage[\"EndPropertyNotDate\"] = \"Event `end` property should be a javascript date object. Do `new Date(event.end)` to fix it.\";\n EventValidationErrorMessage[\"EndsBeforeStart\"] = \"Event `start` property occurs after the `end`\";\n})(EventValidationErrorMessage || (EventValidationErrorMessage = {}));\nexport function validateEvents(events, log) {\n var isValid = true;\n function isError(msg, event) {\n log(msg, event);\n isValid = false;\n }\n if (!Array.isArray(events)) {\n log(EventValidationErrorMessage.NotArray, events);\n return false;\n }\n events.forEach(function (event) {\n if (!event.start) {\n isError(EventValidationErrorMessage.StartPropertyMissing, event);\n }\n else if (!(event.start instanceof Date)) {\n isError(EventValidationErrorMessage.StartPropertyNotDate, event);\n }\n if (event.end) {\n if (!(event.end instanceof Date)) {\n isError(EventValidationErrorMessage.EndPropertyNotDate, event);\n }\n if (event.start > event.end) {\n isError(EventValidationErrorMessage.EndsBeforeStart, event);\n }\n }\n });\n return isValid;\n}\n","function getDef(f, d) {\n if (typeof f === 'undefined') {\n return typeof d === 'undefined' ? f : d;\n }\n\n return f;\n}\nfunction boolean(func, def) {\n\n func = getDef(func, def);\n\n if (typeof func === 'function') {\n return function f() {\n var arguments$1 = arguments;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments$1[_key];\n }\n\n return !!func.apply(this, args);\n };\n }\n\n return !!func ? function () {\n return true;\n } : function () {\n return false;\n };\n}\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 ? \"symbol\" : typeof obj; };\n\n/**\n * Returns `true` if provided input is Element.\n * @name isElement\n * @param {*} [input]\n * @returns {boolean}\n */\nvar isElement$1 = function (input) {\n return input != null && (typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input.nodeType === 1 && _typeof(input.style) === 'object' && _typeof(input.ownerDocument) === 'object';\n};\n\nfunction indexOfElement(elements, element){\n element = resolveElement(element, true);\n if(!isElement$1(element)) { return -1; }\n for(var i=0; i 0 ) { toAdd[ len ] = arguments$1[ len + 1 ]; }\n\n toAdd = toAdd.map(resolveElement);\n return pushElements(elements, toAdd);\n}\n\nfunction removeElements(elements){\n var arguments$1 = arguments;\n\n var toRemove = [], len = arguments.length - 1;\n while ( len-- > 0 ) { toRemove[ len ] = arguments$1[ len + 1 ]; }\n\n return toRemove.map(resolveElement).reduce(function (last, e){\n\n var index = indexOfElement(elements, e);\n\n if(index !== -1)\n { return last.concat(elements.splice(index, 1)); }\n return last;\n }, []);\n}\n\nfunction resolveElement(element, noThrow){\n if(typeof element === 'string'){\n try{\n return document.querySelector(element);\n }catch(e){\n throw e;\n }\n\n }\n\n if(!isElement$1(element) && !noThrow){\n throw new TypeError((element + \" is not a DOM element.\"));\n }\n return element;\n}\n\nfunction createPointCB(object, options) {\n\n // A persistent object (as opposed to returned object) is used to save memory\n // This is good to prevent layout thrashing, or for games, and such\n\n // NOTE\n // This uses IE fixes which should be OK to remove some day. :)\n // Some speed will be gained by removal of these.\n\n // pointCB should be saved in a variable on return\n // This allows the usage of element.removeEventListener\n\n options = options || {};\n\n var allowUpdate = boolean(options.allowUpdate, true);\n\n /*if(typeof options.allowUpdate === 'function'){\n allowUpdate = options.allowUpdate;\n }else{\n allowUpdate = function(){return true;};\n }*/\n\n return function pointCB(event) {\n\n event = event || window.event; // IE-ism\n object.target = event.target || event.srcElement || event.originalTarget;\n object.element = this;\n object.type = event.type;\n\n if (!allowUpdate(event)) {\n return;\n }\n\n // Support touch\n // http://www.creativebloq.com/javascript/make-your-site-work-touch-devices-51411644\n\n if (event.targetTouches) {\n object.x = event.targetTouches[0].clientX;\n object.y = event.targetTouches[0].clientY;\n object.pageX = event.targetTouches[0].pageX;\n object.pageY = event.targetTouches[0].pageY;\n object.screenX = event.targetTouches[0].screenX;\n object.screenY = event.targetTouches[0].screenY;\n } else {\n\n // If pageX/Y aren't available and clientX/Y are,\n // calculate pageX/Y - logic taken from jQuery.\n // (This is to support old IE)\n // NOTE Hopefully this can be removed soon.\n\n if (event.pageX === null && event.clientX !== null) {\n var eventDoc = event.target && event.target.ownerDocument || document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n\n object.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n object.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n } else {\n object.pageX = event.pageX;\n object.pageY = event.pageY;\n }\n\n // pageX, and pageY change with page scroll\n // so we're not going to use those for x, and y.\n // NOTE Most browsers also alias clientX/Y with x/y\n // so that's something to consider down the road.\n\n object.x = event.clientX;\n object.y = event.clientY;\n\n object.screenX = event.screenX;\n object.screenY = event.screenY;\n }\n\n object.clientX = object.x;\n object.clientY = object.y;\n };\n\n //NOTE Remember accessibility, Aria roles, and labels.\n}\n\nfunction createWindowRect() {\n var props = {\n top: { value: 0, enumerable: true },\n left: { value: 0, enumerable: true },\n right: { value: window.innerWidth, enumerable: true },\n bottom: { value: window.innerHeight, enumerable: true },\n width: { value: window.innerWidth, enumerable: true },\n height: { value: window.innerHeight, enumerable: true },\n x: { value: 0, enumerable: true },\n y: { value: 0, enumerable: true }\n };\n\n if (Object.create) {\n return Object.create({}, props);\n } else {\n var rect = {};\n Object.defineProperties(rect, props);\n return rect;\n }\n}\n\nfunction getClientRect(el) {\n if (el === window) {\n return createWindowRect();\n } else {\n try {\n var rect = el.getBoundingClientRect();\n if (rect.x === undefined) {\n rect.x = rect.left;\n rect.y = rect.top;\n }\n return rect;\n } catch (e) {\n throw new TypeError(\"Can't call getBoundingClientRect on \" + el);\n }\n }\n}\n\nfunction pointInside(point, el) {\n var rect = getClientRect(el);\n return point.y > rect.top && point.y < rect.bottom && point.x > rect.left && point.x < rect.right;\n}\n\nvar objectCreate = void 0;\nif (typeof Object.create != 'function') {\n objectCreate = function (undefined$1) {\n var Temp = function Temp() {};\n return function (prototype, propertiesObject) {\n if (prototype !== Object(prototype) && prototype !== null) {\n throw TypeError('Argument must be an object, or null');\n }\n Temp.prototype = prototype || {};\n var result = new Temp();\n Temp.prototype = null;\n if (propertiesObject !== undefined$1) {\n Object.defineProperties(result, propertiesObject);\n }\n\n // to imitate the case of Object.create(null)\n if (prototype === null) {\n result.__proto__ = null;\n }\n return result;\n };\n }();\n} else {\n objectCreate = Object.create;\n}\n\nvar objectCreate$1 = objectCreate;\n\nvar mouseEventProps = ['altKey', 'button', 'buttons', 'clientX', 'clientY', 'ctrlKey', 'metaKey', 'movementX', 'movementY', 'offsetX', 'offsetY', 'pageX', 'pageY', 'region', 'relatedTarget', 'screenX', 'screenY', 'shiftKey', 'which', 'x', 'y'];\n\nfunction createDispatcher(element) {\n\n var defaultSettings = {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n shiftKey: false,\n altKey: false,\n metaKey: false,\n button: 0,\n buttons: 1,\n relatedTarget: null,\n region: null\n };\n\n if (element !== undefined) {\n element.addEventListener('mousemove', onMove);\n }\n\n function onMove(e) {\n for (var i = 0; i < mouseEventProps.length; i++) {\n defaultSettings[mouseEventProps[i]] = e[mouseEventProps[i]];\n }\n }\n\n var dispatch = function () {\n if (MouseEvent) {\n return function m1(element, initMove, data) {\n var evt = new MouseEvent('mousemove', createMoveInit(defaultSettings, initMove));\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n\n return element.dispatchEvent(evt);\n };\n } else if (typeof document.createEvent === 'function') {\n return function m2(element, initMove, data) {\n var settings = createMoveInit(defaultSettings, initMove);\n var evt = document.createEvent('MouseEvents');\n\n evt.initMouseEvent(\"mousemove\", true, //can bubble\n true, //cancelable\n window, //view\n 0, //detail\n settings.screenX, //0, //screenX\n settings.screenY, //0, //screenY\n settings.clientX, //80, //clientX\n settings.clientY, //20, //clientY\n settings.ctrlKey, //false, //ctrlKey\n settings.altKey, //false, //altKey\n settings.shiftKey, //false, //shiftKey\n settings.metaKey, //false, //metaKey\n settings.button, //0, //button\n settings.relatedTarget //null //relatedTarget\n );\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n\n return element.dispatchEvent(evt);\n };\n } else if (typeof document.createEventObject === 'function') {\n return function m3(element, initMove, data) {\n var evt = document.createEventObject();\n var settings = createMoveInit(defaultSettings, initMove);\n for (var name in settings) {\n evt[name] = settings[name];\n }\n\n //evt.dispatched = 'mousemove';\n setSpecial(evt, data);\n\n return element.dispatchEvent(evt);\n };\n }\n }();\n\n function destroy() {\n if (element) { element.removeEventListener('mousemove', onMove, false); }\n defaultSettings = null;\n }\n\n return {\n destroy: destroy,\n dispatch: dispatch\n };\n}\n\nfunction createMoveInit(defaultSettings, initMove) {\n initMove = initMove || {};\n var settings = objectCreate$1(defaultSettings);\n for (var i = 0; i < mouseEventProps.length; i++) {\n if (initMove[mouseEventProps[i]] !== undefined) { settings[mouseEventProps[i]] = initMove[mouseEventProps[i]]; }\n }\n\n return settings;\n}\n\nfunction setSpecial(e, data) {\n console.log('data ', data);\n e.data = data || {};\n e.dispatched = 'mousemove';\n}\n\nvar prefix = [ 'webkit', 'moz', 'ms', 'o' ];\n\nvar requestFrame = (function () {\n\n if (typeof window === \"undefined\") {\n return function () {};\n }\n\n for ( var i = 0, limit = prefix.length ; i < limit && ! window.requestAnimationFrame ; ++i ) {\n window.requestAnimationFrame = window[ prefix[ i ] + 'RequestAnimationFrame' ];\n }\n\n if ( ! window.requestAnimationFrame ) {\n var lastTime = 0;\n\n window.requestAnimationFrame = function (callback) {\n var now = new Date().getTime();\n var ttc = Math.max( 0, 16 - now - lastTime );\n var timer = window.setTimeout( function () { return callback( now + ttc ); }, ttc );\n\n lastTime = now + ttc;\n\n return timer;\n };\n }\n\n return window.requestAnimationFrame.bind( window );\n})();\n\nvar cancelFrame = (function () {\n\n if (typeof window === \"undefined\") {\n return function () {};\n }\n\n for ( var i = 0, limit = prefix.length ; i < limit && ! window.cancelAnimationFrame ; ++i ) {\n window.cancelAnimationFrame = window[ prefix[ i ] + 'CancelAnimationFrame' ] || window[ prefix[ i ] + 'CancelRequestAnimationFrame' ];\n }\n\n if ( ! window.cancelAnimationFrame ) {\n window.cancelAnimationFrame = function (timer) {\n window.clearTimeout( timer );\n };\n }\n\n return window.cancelAnimationFrame.bind( window );\n})();\n\nfunction AutoScroller(elements, options){\n if ( options === void 0 ) options = {};\n\n var self = this;\n var maxSpeed = 4, scrolling = false;\n\n if (typeof options.margin !== 'object') {\n var margin = options.margin || -1;\n\n this.margin = {\n left: margin,\n right: margin,\n top: margin,\n bottom: margin\n };\n } else {\n this.margin = options.margin;\n }\n\n //this.scrolling = false;\n this.scrollWhenOutside = options.scrollWhenOutside || false;\n\n var point = {},\n pointCB = createPointCB(point),\n dispatcher = createDispatcher(),\n down = false;\n\n window.addEventListener('mousemove', pointCB, false);\n window.addEventListener('touchmove', pointCB, false);\n\n if(!isNaN(options.maxSpeed)){\n maxSpeed = options.maxSpeed;\n }\n\n if (typeof maxSpeed !== 'object') {\n maxSpeed = {\n left: maxSpeed,\n right: maxSpeed,\n top: maxSpeed,\n bottom: maxSpeed\n };\n }\n\n this.autoScroll = boolean(options.autoScroll);\n this.syncMove = boolean(options.syncMove, false);\n\n this.destroy = function(forceCleanAnimation) {\n window.removeEventListener('mousemove', pointCB, false);\n window.removeEventListener('touchmove', pointCB, false);\n window.removeEventListener('mousedown', onDown, false);\n window.removeEventListener('touchstart', onDown, false);\n window.removeEventListener('mouseup', onUp, false);\n window.removeEventListener('touchend', onUp, false);\n window.removeEventListener('pointerup', onUp, false);\n window.removeEventListener('mouseleave', onMouseOut, false);\n\n window.removeEventListener('mousemove', onMove, false);\n window.removeEventListener('touchmove', onMove, false);\n\n window.removeEventListener('scroll', setScroll, true);\n elements = [];\n if(forceCleanAnimation){\n cleanAnimation();\n }\n };\n\n this.add = function(){\n var element = [], len = arguments.length;\n while ( len-- ) element[ len ] = arguments[ len ];\n\n addElements.apply(void 0, [ elements ].concat( element ));\n return this;\n };\n\n this.remove = function(){\n var element = [], len = arguments.length;\n while ( len-- ) element[ len ] = arguments[ len ];\n\n return removeElements.apply(void 0, [ elements ].concat( element ));\n };\n\n var hasWindow = null, windowAnimationFrame;\n\n if(Object.prototype.toString.call(elements) !== '[object Array]'){\n elements = [elements];\n }\n\n (function(temp){\n elements = [];\n temp.forEach(function(element){\n if(element === window){\n hasWindow = window;\n }else {\n self.add(element);\n }\n });\n }(elements));\n\n Object.defineProperties(this, {\n down: {\n get: function(){ return down; }\n },\n maxSpeed: {\n get: function(){ return maxSpeed; }\n },\n point: {\n get: function(){ return point; }\n },\n scrolling: {\n get: function(){ return scrolling; }\n }\n });\n\n var current = null, animationFrame;\n\n window.addEventListener('mousedown', onDown, false);\n window.addEventListener('touchstart', onDown, false);\n window.addEventListener('mouseup', onUp, false);\n window.addEventListener('touchend', onUp, false);\n\n /*\n IE does not trigger mouseup event when scrolling.\n It is a known issue that Microsoft won't fix.\n https://connect.microsoft.com/IE/feedback/details/783058/scrollbar-trigger-mousedown-but-not-mouseup\n IE supports pointer events instead\n */\n window.addEventListener('pointerup', onUp, false);\n\n window.addEventListener('mousemove', onMove, false);\n window.addEventListener('touchmove', onMove, false);\n\n window.addEventListener('mouseleave', onMouseOut, false);\n\n window.addEventListener('scroll', setScroll, true);\n\n function setScroll(e){\n\n for(var i=0; i rect.right - self.margin.right){\n scrollx = Math.ceil(\n Math.min(1, (point.x - rect.right) / self.margin.right + 1) * self.maxSpeed.right\n );\n }else {\n scrollx = 0;\n }\n\n if(point.y < rect.top + self.margin.top){\n scrolly = Math.floor(\n Math.max(-1, (point.y - rect.top) / self.margin.top - 1) * self.maxSpeed.top\n );\n }else if(point.y > rect.bottom - self.margin.bottom){\n scrolly = Math.ceil(\n Math.min(1, (point.y - rect.bottom) / self.margin.bottom + 1) * self.maxSpeed.bottom\n );\n }else {\n scrolly = 0;\n }\n\n if(self.syncMove()){\n /*\n Notes about mousemove event dispatch.\n screen(X/Y) should need to be updated.\n Some other properties might need to be set.\n Keep the syncMove option default false until all inconsistencies are taken care of.\n */\n dispatcher.dispatch(el, {\n pageX: point.pageX + scrollx,\n pageY: point.pageY + scrolly,\n clientX: point.x + scrollx,\n clientY: point.y + scrolly\n });\n }\n\n setTimeout(function (){\n\n if(scrolly){\n scrollY(el, scrolly);\n }\n\n if(scrollx){\n scrollX(el, scrollx);\n }\n\n });\n }\n\n function scrollY(el, amount){\n if(el === window){\n window.scrollTo(el.pageXOffset, el.pageYOffset + amount);\n }else {\n el.scrollTop += amount;\n }\n }\n\n function scrollX(el, amount){\n if(el === window){\n window.scrollTo(el.pageXOffset + amount, el.pageYOffset);\n }else {\n el.scrollLeft += amount;\n }\n }\n\n}\n\nfunction AutoScrollerFactory(element, options){\n return new AutoScroller(element, options);\n}\n\nfunction inside(point, el, rect){\n if(!rect){\n return pointInside(point, el);\n }else {\n return (point.y > rect.top && point.y < rect.bottom &&\n point.x > rect.left && point.x < rect.right);\n }\n}\n\n/*\ngit remote add origin https://github.com/hollowdoor/dom_autoscroller.git\ngit push -u origin master\n*/\n\nexport default AutoScrollerFactory;\n","import { Subscriber } from '../Subscriber';\nexport function count(predicate) {\n return (source) => source.lift(new CountOperator(predicate, source));\n}\nclass CountOperator {\n constructor(predicate, source) {\n this.predicate = predicate;\n this.source = source;\n }\n call(subscriber, source) {\n return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));\n }\n}\nclass CountSubscriber extends Subscriber {\n constructor(destination, predicate, source) {\n super(destination);\n this.predicate = predicate;\n this.source = source;\n this.count = 0;\n this.index = 0;\n }\n _next(value) {\n if (this.predicate) {\n this._tryPredicate(value);\n }\n else {\n this.count++;\n }\n }\n _tryPredicate(value) {\n let result;\n try {\n result = this.predicate(value, this.index++, this.source);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n if (result) {\n this.count++;\n }\n }\n _complete() {\n this.destination.next(this.count);\n this.destination.complete();\n }\n}\n","import { Subject, Observable, merge, ReplaySubject, combineLatest, fromEvent } from 'rxjs';\nimport { DOCUMENT } from '@angular/common';\nimport autoScroll from '@mattlewis92/dom-autoscroller';\nimport { Injectable, Directive, ElementRef, Input, Renderer2, Output, EventEmitter, NgZone, Inject, ViewContainerRef, Optional, NgModule, defineInjectable } from '@angular/core';\nimport { map, mergeMap, takeUntil, take, takeLast, pairwise, share, filter, count, startWith, distinctUntilChanged } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nimport * as ɵngcc0 from '@angular/core';\nclass DraggableHelper {\n constructor() {\n this.currentDrag = new Subject();\n }\n}\nDraggableHelper.ɵfac = function DraggableHelper_Factory(t) { return new (t || DraggableHelper)(); };\nDraggableHelper.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: DraggableHelper, factory: DraggableHelper.ɵfac, providedIn: 'root' });\n/** @nocollapse */ DraggableHelper.ngInjectableDef = defineInjectable({ factory: function DraggableHelper_Factory() { return new DraggableHelper(); }, token: DraggableHelper, providedIn: \"root\" });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DraggableHelper, [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], function () { return []; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * If the window isn't scrollable, then place this on the scrollable container that draggable elements are inside. e.g.\n * ```html\n *
            \n *
            Drag me!
            \n *
            \n * ```\n */\nclass DraggableScrollContainerDirective {\n /**\n * @hidden\n * @param {?} elementRef\n */\n constructor(elementRef) {\n this.elementRef = elementRef;\n /**\n * Trigger the DragStart after a long touch in scrollable container when true\n * @deprecated will be removed in v5 (use [touchStartLongPress]=\"{delay: 300, delta: 30}\" on the mwlDraggable element instead)\n */\n this.activeLongPressDrag = false;\n /**\n * Configuration of a long touch\n * Duration in ms of a long touch before activating DragStart\n * Delta of the\n * @deprecated will be removed in v5 (use [touchStartLongPress]=\"{delay: 300, delta: 30}\" on the mwlDraggable element instead)\n */\n this.longPressConfig = { duration: 300, delta: 30 };\n }\n}\nDraggableScrollContainerDirective.ɵfac = function DraggableScrollContainerDirective_Factory(t) { return new (t || DraggableScrollContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nDraggableScrollContainerDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DraggableScrollContainerDirective, selectors: [[\"\", \"mwlDraggableScrollContainer\", \"\"]], inputs: { activeLongPressDrag: \"activeLongPressDrag\", longPressConfig: \"longPressConfig\" } });\n/** @nocollapse */\nDraggableScrollContainerDirective.ctorParameters = () => [\n { type: ElementRef }\n];\nDraggableScrollContainerDirective.propDecorators = {\n activeLongPressDrag: [{ type: Input }],\n longPressConfig: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DraggableScrollContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlDraggableScrollContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { activeLongPressDrag: [{\n type: Input\n }], longPressConfig: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} renderer\n * @param {?} element\n * @param {?} classToAdd\n * @return {?}\n */\nfunction addClass(renderer, element, classToAdd) {\n if (classToAdd) {\n classToAdd\n .split(' ')\n .forEach((/**\n * @param {?} className\n * @return {?}\n */\n (className) => renderer.addClass(element.nativeElement, className)));\n }\n}\n/**\n * @param {?} renderer\n * @param {?} element\n * @param {?} classToRemove\n * @return {?}\n */\nfunction removeClass(renderer, element, classToRemove) {\n if (classToRemove) {\n classToRemove\n .split(' ')\n .forEach((/**\n * @param {?} className\n * @return {?}\n */\n (className) => renderer.removeClass(element.nativeElement, className)));\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass DraggableDirective {\n /**\n * @hidden\n * @param {?} element\n * @param {?} renderer\n * @param {?} draggableHelper\n * @param {?} zone\n * @param {?} vcr\n * @param {?} scrollContainer\n * @param {?} document\n */\n constructor(element, renderer, draggableHelper, zone, vcr, scrollContainer, document) {\n this.element = element;\n this.renderer = renderer;\n this.draggableHelper = draggableHelper;\n this.zone = zone;\n this.vcr = vcr;\n this.scrollContainer = scrollContainer;\n this.document = document;\n /**\n * The axis along which the element is draggable\n */\n this.dragAxis = { x: true, y: true };\n /**\n * Snap all drags to an x / y grid\n */\n this.dragSnapGrid = {};\n /**\n * Show a ghost element that shows the drag when dragging\n */\n this.ghostDragEnabled = true;\n /**\n * Show the original element when ghostDragEnabled is true\n */\n this.showOriginalElementWhileDragging = false;\n /**\n * The cursor to use when hovering over a draggable element\n */\n this.dragCursor = '';\n /*\n * Options used to control the behaviour of auto scrolling: https://www.npmjs.com/package/dom-autoscroller\n */\n this.autoScroll = {\n margin: 20,\n };\n /**\n * Called when the element can be dragged along one axis and has the mouse or pointer device pressed on it\n */\n this.dragPointerDown = new EventEmitter();\n /**\n * Called when the element has started to be dragged.\n * Only called after at least one mouse or touch move event.\n * If you call $event.cancelDrag$.emit() it will cancel the current drag\n */\n this.dragStart = new EventEmitter();\n /**\n * Called after the ghost element has been created\n */\n this.ghostElementCreated = new EventEmitter();\n /**\n * Called when the element is being dragged\n */\n this.dragging = new EventEmitter();\n /**\n * Called after the element is dragged\n */\n this.dragEnd = new EventEmitter();\n /**\n * @hidden\n */\n this.pointerDown$ = new Subject();\n /**\n * @hidden\n */\n this.pointerMove$ = new Subject();\n /**\n * @hidden\n */\n this.pointerUp$ = new Subject();\n this.eventListenerSubscriptions = {};\n this.destroy$ = new Subject();\n this.timeLongPress = { timerBegin: 0, timerEnd: 0 };\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this.checkEventListeners();\n /** @type {?} */\n const pointerDragged$ = this.pointerDown$.pipe(filter((/**\n * @return {?}\n */\n () => this.canDrag())), mergeMap((/**\n * @param {?} pointerDownEvent\n * @return {?}\n */\n (pointerDownEvent) => {\n // fix for https://github.com/mattlewis92/angular-draggable-droppable/issues/61\n // stop mouse events propagating up the chain\n if (pointerDownEvent.event.stopPropagation && !this.scrollContainer) {\n pointerDownEvent.event.stopPropagation();\n }\n // hack to prevent text getting selected in safari while dragging\n /** @type {?} */\n const globalDragStyle = this.renderer.createElement('style');\n this.renderer.setAttribute(globalDragStyle, 'type', 'text/css');\n this.renderer.appendChild(globalDragStyle, this.renderer.createText(`\n body * {\n -moz-user-select: none;\n -ms-user-select: none;\n -webkit-user-select: none;\n user-select: none;\n }\n `));\n requestAnimationFrame((/**\n * @return {?}\n */\n () => {\n this.document.head.appendChild(globalDragStyle);\n }));\n /** @type {?} */\n const startScrollPosition = this.getScrollPosition();\n /** @type {?} */\n const scrollContainerScroll$ = new Observable((/**\n * @param {?} observer\n * @return {?}\n */\n (observer) => {\n /** @type {?} */\n const scrollContainer = this.scrollContainer\n ? this.scrollContainer.elementRef.nativeElement\n : 'window';\n return this.renderer.listen(scrollContainer, 'scroll', (/**\n * @param {?} e\n * @return {?}\n */\n (e) => observer.next(e)));\n })).pipe(startWith(startScrollPosition), map((/**\n * @return {?}\n */\n () => this.getScrollPosition())));\n /** @type {?} */\n const currentDrag$ = new Subject();\n /** @type {?} */\n const cancelDrag$ = new ReplaySubject();\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragPointerDown.next({ x: 0, y: 0 });\n }));\n /** @type {?} */\n const dragComplete$ = merge(this.pointerUp$, this.pointerDown$, cancelDrag$, this.destroy$).pipe(share());\n /** @type {?} */\n const pointerMove = combineLatest([\n this.pointerMove$,\n scrollContainerScroll$,\n ]).pipe(map((/**\n * @param {?} __0\n * @return {?}\n */\n ([pointerMoveEvent, scroll]) => {\n return {\n currentDrag$,\n transformX: pointerMoveEvent.clientX - pointerDownEvent.clientX,\n transformY: pointerMoveEvent.clientY - pointerDownEvent.clientY,\n clientX: pointerMoveEvent.clientX,\n clientY: pointerMoveEvent.clientY,\n scrollLeft: scroll.left,\n scrollTop: scroll.top,\n target: pointerMoveEvent.event.target,\n };\n })), map((/**\n * @param {?} moveData\n * @return {?}\n */\n (moveData) => {\n if (this.dragSnapGrid.x) {\n moveData.transformX =\n Math.round(moveData.transformX / this.dragSnapGrid.x) *\n this.dragSnapGrid.x;\n }\n if (this.dragSnapGrid.y) {\n moveData.transformY =\n Math.round(moveData.transformY / this.dragSnapGrid.y) *\n this.dragSnapGrid.y;\n }\n return moveData;\n })), map((/**\n * @param {?} moveData\n * @return {?}\n */\n (moveData) => {\n if (!this.dragAxis.x) {\n moveData.transformX = 0;\n }\n if (!this.dragAxis.y) {\n moveData.transformY = 0;\n }\n return moveData;\n })), map((/**\n * @param {?} moveData\n * @return {?}\n */\n (moveData) => {\n /** @type {?} */\n const scrollX = moveData.scrollLeft - startScrollPosition.left;\n /** @type {?} */\n const scrollY = moveData.scrollTop - startScrollPosition.top;\n return Object.assign({}, moveData, { x: moveData.transformX + scrollX, y: moveData.transformY + scrollY });\n })), filter((/**\n * @param {?} __0\n * @return {?}\n */\n ({ x, y, transformX, transformY }) => !this.validateDrag ||\n this.validateDrag({\n x,\n y,\n transform: { x: transformX, y: transformY },\n }))), takeUntil(dragComplete$), share());\n /** @type {?} */\n const dragStarted$ = pointerMove.pipe(take(1), share());\n /** @type {?} */\n const dragEnded$ = pointerMove.pipe(takeLast(1), share());\n dragStarted$.subscribe((/**\n * @param {?} __0\n * @return {?}\n */\n ({ clientX, clientY, x, y }) => {\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragStart.next({ cancelDrag$ });\n }));\n this.scroller = autoScroll([\n this.scrollContainer\n ? this.scrollContainer.elementRef.nativeElement\n : this.document.defaultView,\n ], Object.assign({}, this.autoScroll, { /**\n * @return {?}\n */\n autoScroll() {\n return true;\n } }));\n addClass(this.renderer, this.element, this.dragActiveClass);\n if (this.ghostDragEnabled) {\n /** @type {?} */\n const rect = this.element.nativeElement.getBoundingClientRect();\n /** @type {?} */\n const clone = (/** @type {?} */ (this.element.nativeElement.cloneNode(true)));\n if (!this.showOriginalElementWhileDragging) {\n this.renderer.setStyle(this.element.nativeElement, 'visibility', 'hidden');\n }\n if (this.ghostElementAppendTo) {\n this.ghostElementAppendTo.appendChild(clone);\n }\n else {\n (/** @type {?} */ (this.element.nativeElement.parentNode)).insertBefore(clone, this.element.nativeElement.nextSibling);\n }\n this.ghostElement = clone;\n this.document.body.style.cursor = this.dragCursor;\n this.setElementStyles(clone, {\n position: 'fixed',\n top: `${rect.top}px`,\n left: `${rect.left}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n cursor: this.dragCursor,\n margin: '0',\n willChange: 'transform',\n pointerEvents: 'none',\n });\n if (this.ghostElementTemplate) {\n /** @type {?} */\n const viewRef = this.vcr.createEmbeddedView(this.ghostElementTemplate);\n clone.innerHTML = '';\n viewRef.rootNodes\n .filter((/**\n * @param {?} node\n * @return {?}\n */\n (node) => node instanceof Node))\n .forEach((/**\n * @param {?} node\n * @return {?}\n */\n (node) => {\n clone.appendChild(node);\n }));\n dragEnded$.subscribe((/**\n * @return {?}\n */\n () => {\n this.vcr.remove(this.vcr.indexOf(viewRef));\n }));\n }\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.ghostElementCreated.emit({\n clientX: clientX - x,\n clientY: clientY - y,\n element: clone,\n });\n }));\n dragEnded$.subscribe((/**\n * @return {?}\n */\n () => {\n (/** @type {?} */ (clone.parentElement)).removeChild(clone);\n this.ghostElement = null;\n this.renderer.setStyle(this.element.nativeElement, 'visibility', '');\n }));\n }\n this.draggableHelper.currentDrag.next(currentDrag$);\n }));\n dragEnded$\n .pipe(mergeMap((/**\n * @param {?} dragEndData\n * @return {?}\n */\n (dragEndData) => {\n /** @type {?} */\n const dragEndData$ = cancelDrag$.pipe(count(), take(1), map((/**\n * @param {?} calledCount\n * @return {?}\n */\n (calledCount) => (Object.assign({}, dragEndData, { dragCancelled: calledCount > 0 })))));\n cancelDrag$.complete();\n return dragEndData$;\n })))\n .subscribe((/**\n * @param {?} __0\n * @return {?}\n */\n ({ x, y, dragCancelled }) => {\n this.scroller.destroy();\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragEnd.next({ x, y, dragCancelled });\n }));\n removeClass(this.renderer, this.element, this.dragActiveClass);\n currentDrag$.complete();\n }));\n merge(dragComplete$, dragEnded$)\n .pipe(take(1))\n .subscribe((/**\n * @return {?}\n */\n () => {\n requestAnimationFrame((/**\n * @return {?}\n */\n () => {\n this.document.head.removeChild(globalDragStyle);\n }));\n }));\n return pointerMove;\n })), share());\n merge(pointerDragged$.pipe(take(1), map((/**\n * @param {?} value\n * @return {?}\n */\n (value) => [, value]))), pointerDragged$.pipe(pairwise()))\n .pipe(filter((/**\n * @param {?} __0\n * @return {?}\n */\n ([previous, next]) => {\n if (!previous) {\n return true;\n }\n return previous.x !== next.x || previous.y !== next.y;\n })), map((/**\n * @param {?} __0\n * @return {?}\n */\n ([previous, next]) => next)))\n .subscribe((/**\n * @param {?} __0\n * @return {?}\n */\n ({ x, y, currentDrag$, clientX, clientY, transformX, transformY, target, }) => {\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragging.next({ x, y });\n }));\n requestAnimationFrame((/**\n * @return {?}\n */\n () => {\n if (this.ghostElement) {\n /** @type {?} */\n const transform = `translate3d(${transformX}px, ${transformY}px, 0px)`;\n this.setElementStyles(this.ghostElement, {\n transform,\n '-webkit-transform': transform,\n '-ms-transform': transform,\n '-moz-transform': transform,\n '-o-transform': transform,\n });\n }\n }));\n currentDrag$.next({\n clientX,\n clientY,\n dropData: this.dropData,\n target,\n });\n }));\n }\n /**\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.dragAxis) {\n this.checkEventListeners();\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this.unsubscribeEventListeners();\n this.pointerDown$.complete();\n this.pointerMove$.complete();\n this.pointerUp$.complete();\n this.destroy$.next();\n }\n /**\n * @private\n * @return {?}\n */\n checkEventListeners() {\n /** @type {?} */\n const canDrag = this.canDrag();\n /** @type {?} */\n const hasEventListeners = Object.keys(this.eventListenerSubscriptions).length > 0;\n if (canDrag && !hasEventListeners) {\n this.zone.runOutsideAngular((/**\n * @return {?}\n */\n () => {\n this.eventListenerSubscriptions.mousedown = this.renderer.listen(this.element.nativeElement, 'mousedown', (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.onMouseDown(event);\n }));\n this.eventListenerSubscriptions.mouseup = this.renderer.listen('document', 'mouseup', (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.onMouseUp(event);\n }));\n this.eventListenerSubscriptions.touchstart = this.renderer.listen(this.element.nativeElement, 'touchstart', (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.onTouchStart(event);\n }));\n this.eventListenerSubscriptions.touchend = this.renderer.listen('document', 'touchend', (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.onTouchEnd(event);\n }));\n this.eventListenerSubscriptions.touchcancel = this.renderer.listen('document', 'touchcancel', (/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.onTouchEnd(event);\n }));\n this.eventListenerSubscriptions.mouseenter = this.renderer.listen(this.element.nativeElement, 'mouseenter', (/**\n * @return {?}\n */\n () => {\n this.onMouseEnter();\n }));\n this.eventListenerSubscriptions.mouseleave = this.renderer.listen(this.element.nativeElement, 'mouseleave', (/**\n * @return {?}\n */\n () => {\n this.onMouseLeave();\n }));\n }));\n }\n else if (!canDrag && hasEventListeners) {\n this.unsubscribeEventListeners();\n }\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n onMouseDown(event) {\n if (event.button === 0) {\n if (!this.eventListenerSubscriptions.mousemove) {\n this.eventListenerSubscriptions.mousemove = this.renderer.listen('document', 'mousemove', (/**\n * @param {?} mouseMoveEvent\n * @return {?}\n */\n (mouseMoveEvent) => {\n this.pointerMove$.next({\n event: mouseMoveEvent,\n clientX: mouseMoveEvent.clientX,\n clientY: mouseMoveEvent.clientY,\n });\n }));\n }\n this.pointerDown$.next({\n event,\n clientX: event.clientX,\n clientY: event.clientY,\n });\n }\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n onMouseUp(event) {\n if (event.button === 0) {\n if (this.eventListenerSubscriptions.mousemove) {\n this.eventListenerSubscriptions.mousemove();\n delete this.eventListenerSubscriptions.mousemove;\n }\n this.pointerUp$.next({\n event,\n clientX: event.clientX,\n clientY: event.clientY,\n });\n }\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n onTouchStart(event) {\n /** @type {?} */\n let startScrollPosition;\n /** @type {?} */\n let isDragActivated;\n /** @type {?} */\n let hasContainerScrollbar;\n if ((this.scrollContainer && this.scrollContainer.activeLongPressDrag) ||\n this.touchStartLongPress) {\n this.timeLongPress.timerBegin = Date.now();\n isDragActivated = false;\n hasContainerScrollbar = this.hasScrollbar();\n startScrollPosition = this.getScrollPosition();\n }\n if (!this.eventListenerSubscriptions.touchmove) {\n /** @type {?} */\n const contextMenuListener = fromEvent(this.document, 'contextmenu').subscribe((/**\n * @param {?} e\n * @return {?}\n */\n (e) => {\n e.preventDefault();\n }));\n /** @type {?} */\n const touchMoveListener = fromEvent(this.document, 'touchmove', {\n passive: false,\n }).subscribe((/**\n * @param {?} touchMoveEvent\n * @return {?}\n */\n (touchMoveEvent) => {\n if (((this.scrollContainer && this.scrollContainer.activeLongPressDrag) ||\n this.touchStartLongPress) &&\n !isDragActivated &&\n hasContainerScrollbar) {\n isDragActivated = this.shouldBeginDrag(event, touchMoveEvent, startScrollPosition);\n }\n if (((!this.scrollContainer ||\n !this.scrollContainer.activeLongPressDrag) &&\n !this.touchStartLongPress) ||\n !hasContainerScrollbar ||\n isDragActivated) {\n touchMoveEvent.preventDefault();\n this.pointerMove$.next({\n event: touchMoveEvent,\n clientX: touchMoveEvent.targetTouches[0].clientX,\n clientY: touchMoveEvent.targetTouches[0].clientY,\n });\n }\n }));\n this.eventListenerSubscriptions.touchmove = (/**\n * @return {?}\n */\n () => {\n contextMenuListener.unsubscribe();\n touchMoveListener.unsubscribe();\n });\n }\n this.pointerDown$.next({\n event,\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n });\n }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n onTouchEnd(event) {\n if (this.eventListenerSubscriptions.touchmove) {\n this.eventListenerSubscriptions.touchmove();\n delete this.eventListenerSubscriptions.touchmove;\n if ((this.scrollContainer && this.scrollContainer.activeLongPressDrag) ||\n this.touchStartLongPress) {\n this.enableScroll();\n }\n }\n this.pointerUp$.next({\n event,\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n });\n }\n /**\n * @private\n * @return {?}\n */\n onMouseEnter() {\n this.setCursor(this.dragCursor);\n }\n /**\n * @private\n * @return {?}\n */\n onMouseLeave() {\n this.setCursor('');\n }\n /**\n * @private\n * @return {?}\n */\n canDrag() {\n return this.dragAxis.x || this.dragAxis.y;\n }\n /**\n * @private\n * @param {?} value\n * @return {?}\n */\n setCursor(value) {\n if (!this.eventListenerSubscriptions.mousemove) {\n this.renderer.setStyle(this.element.nativeElement, 'cursor', value);\n }\n }\n /**\n * @private\n * @return {?}\n */\n unsubscribeEventListeners() {\n Object.keys(this.eventListenerSubscriptions).forEach((/**\n * @param {?} type\n * @return {?}\n */\n (type) => {\n ((/** @type {?} */ (this))).eventListenerSubscriptions[type]();\n delete ((/** @type {?} */ (this))).eventListenerSubscriptions[type];\n }));\n }\n /**\n * @private\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\n setElementStyles(element, styles) {\n Object.keys(styles).forEach((/**\n * @param {?} key\n * @return {?}\n */\n (key) => {\n this.renderer.setStyle(element, key, styles[key]);\n }));\n }\n /**\n * @private\n * @return {?}\n */\n getScrollElement() {\n if (this.scrollContainer) {\n return this.scrollContainer.elementRef.nativeElement;\n }\n else {\n return this.document.body;\n }\n }\n /**\n * @private\n * @return {?}\n */\n getScrollPosition() {\n if (this.scrollContainer) {\n return {\n top: this.scrollContainer.elementRef.nativeElement.scrollTop,\n left: this.scrollContainer.elementRef.nativeElement.scrollLeft,\n };\n }\n else {\n return {\n top: window.pageYOffset || this.document.documentElement.scrollTop,\n left: window.pageXOffset || this.document.documentElement.scrollLeft,\n };\n }\n }\n /**\n * @private\n * @param {?} event\n * @param {?} touchMoveEvent\n * @param {?} startScrollPosition\n * @return {?}\n */\n shouldBeginDrag(event, touchMoveEvent, startScrollPosition) {\n /** @type {?} */\n const moveScrollPosition = this.getScrollPosition();\n /** @type {?} */\n const deltaScroll = {\n top: Math.abs(moveScrollPosition.top - startScrollPosition.top),\n left: Math.abs(moveScrollPosition.left - startScrollPosition.left),\n };\n /** @type {?} */\n const deltaX = Math.abs(touchMoveEvent.targetTouches[0].clientX - event.touches[0].clientX) - deltaScroll.left;\n /** @type {?} */\n const deltaY = Math.abs(touchMoveEvent.targetTouches[0].clientY - event.touches[0].clientY) - deltaScroll.top;\n /** @type {?} */\n const deltaTotal = deltaX + deltaY;\n /** @type {?} */\n const longPressConfig = this.touchStartLongPress\n ? this.touchStartLongPress\n : /* istanbul ignore next */\n {\n delta: this.scrollContainer.longPressConfig.delta,\n delay: this.scrollContainer.longPressConfig.duration,\n };\n if (deltaTotal > longPressConfig.delta ||\n deltaScroll.top > 0 ||\n deltaScroll.left > 0) {\n this.timeLongPress.timerBegin = Date.now();\n }\n this.timeLongPress.timerEnd = Date.now();\n /** @type {?} */\n const duration = this.timeLongPress.timerEnd - this.timeLongPress.timerBegin;\n if (duration >= longPressConfig.delay) {\n this.disableScroll();\n return true;\n }\n return false;\n }\n /**\n * @private\n * @return {?}\n */\n enableScroll() {\n if (this.scrollContainer) {\n this.renderer.setStyle(this.scrollContainer.elementRef.nativeElement, 'overflow', '');\n }\n this.renderer.setStyle(this.document.body, 'overflow', '');\n }\n /**\n * @private\n * @return {?}\n */\n disableScroll() {\n /* istanbul ignore next */\n if (this.scrollContainer) {\n this.renderer.setStyle(this.scrollContainer.elementRef.nativeElement, 'overflow', 'hidden');\n }\n this.renderer.setStyle(this.document.body, 'overflow', 'hidden');\n }\n /**\n * @private\n * @return {?}\n */\n hasScrollbar() {\n /** @type {?} */\n const scrollContainer = this.getScrollElement();\n /** @type {?} */\n const containerHasHorizontalScroll = scrollContainer.scrollWidth > scrollContainer.clientWidth;\n /** @type {?} */\n const containerHasVerticalScroll = scrollContainer.scrollHeight > scrollContainer.clientHeight;\n return containerHasHorizontalScroll || containerHasVerticalScroll;\n }\n}\nDraggableDirective.ɵfac = function DraggableDirective_Factory(t) { return new (t || DraggableDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DraggableHelper), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DraggableScrollContainerDirective, 8), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };\nDraggableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DraggableDirective, selectors: [[\"\", \"mwlDraggable\", \"\"]], inputs: { dragAxis: \"dragAxis\", dragSnapGrid: \"dragSnapGrid\", ghostDragEnabled: \"ghostDragEnabled\", showOriginalElementWhileDragging: \"showOriginalElementWhileDragging\", dragCursor: \"dragCursor\", autoScroll: \"autoScroll\", dropData: \"dropData\", validateDrag: \"validateDrag\", dragActiveClass: \"dragActiveClass\", ghostElementAppendTo: \"ghostElementAppendTo\", ghostElementTemplate: \"ghostElementTemplate\", touchStartLongPress: \"touchStartLongPress\" }, outputs: { dragPointerDown: \"dragPointerDown\", dragStart: \"dragStart\", ghostElementCreated: \"ghostElementCreated\", dragging: \"dragging\", dragEnd: \"dragEnd\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nDraggableDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DraggableHelper },\n { type: NgZone },\n { type: ViewContainerRef },\n { type: DraggableScrollContainerDirective, decorators: [{ type: Optional }] },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\nDraggableDirective.propDecorators = {\n dropData: [{ type: Input }],\n dragAxis: [{ type: Input }],\n dragSnapGrid: [{ type: Input }],\n ghostDragEnabled: [{ type: Input }],\n showOriginalElementWhileDragging: [{ type: Input }],\n validateDrag: [{ type: Input }],\n dragCursor: [{ type: Input }],\n dragActiveClass: [{ type: Input }],\n ghostElementAppendTo: [{ type: Input }],\n ghostElementTemplate: [{ type: Input }],\n touchStartLongPress: [{ type: Input }],\n autoScroll: [{ type: Input }],\n dragPointerDown: [{ type: Output }],\n dragStart: [{ type: Output }],\n ghostElementCreated: [{ type: Output }],\n dragging: [{ type: Output }],\n dragEnd: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DraggableDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlDraggable]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DraggableHelper }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ViewContainerRef }, { type: DraggableScrollContainerDirective, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { dragAxis: [{\n type: Input\n }], dragSnapGrid: [{\n type: Input\n }], ghostDragEnabled: [{\n type: Input\n }], showOriginalElementWhileDragging: [{\n type: Input\n }], dragCursor: [{\n type: Input\n }], autoScroll: [{\n type: Input\n }], dragPointerDown: [{\n type: Output\n }], dragStart: [{\n type: Output\n }], ghostElementCreated: [{\n type: Output\n }], dragging: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], dropData: [{\n type: Input\n }], validateDrag: [{\n type: Input\n }], dragActiveClass: [{\n type: Input\n }], ghostElementAppendTo: [{\n type: Input\n }], ghostElementTemplate: [{\n type: Input\n }], touchStartLongPress: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} clientX\n * @param {?} clientY\n * @param {?} rect\n * @return {?}\n */\nfunction isCoordinateWithinRectangle(clientX, clientY, rect) {\n return (clientX >= rect.left &&\n clientX <= rect.right &&\n clientY >= rect.top &&\n clientY <= rect.bottom);\n}\nclass DroppableDirective {\n /**\n * @param {?} element\n * @param {?} draggableHelper\n * @param {?} zone\n * @param {?} renderer\n * @param {?} scrollContainer\n */\n constructor(element, draggableHelper, zone, renderer, scrollContainer) {\n this.element = element;\n this.draggableHelper = draggableHelper;\n this.zone = zone;\n this.renderer = renderer;\n this.scrollContainer = scrollContainer;\n /**\n * Called when a draggable element starts overlapping the element\n */\n this.dragEnter = new EventEmitter();\n /**\n * Called when a draggable element stops overlapping the element\n */\n this.dragLeave = new EventEmitter();\n /**\n * Called when a draggable element is moved over the element\n */\n this.dragOver = new EventEmitter();\n /**\n * Called when a draggable element is dropped on this element\n */\n this.drop = new EventEmitter(); // tslint:disable-line no-output-named-after-standard-event\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this.currentDragSubscription = this.draggableHelper.currentDrag.subscribe((/**\n * @param {?} drag$\n * @return {?}\n */\n (drag$) => {\n addClass(this.renderer, this.element, this.dragActiveClass);\n /** @type {?} */\n const droppableElement = {\n updateCache: true,\n };\n /** @type {?} */\n const deregisterScrollListener = this.renderer.listen(this.scrollContainer\n ? this.scrollContainer.elementRef.nativeElement\n : 'window', 'scroll', (/**\n * @return {?}\n */\n () => {\n droppableElement.updateCache = true;\n }));\n /** @type {?} */\n let currentDragDropData;\n /** @type {?} */\n const overlaps$ = drag$.pipe(map((/**\n * @param {?} __0\n * @return {?}\n */\n ({ clientX, clientY, dropData, target }) => {\n currentDragDropData = dropData;\n if (droppableElement.updateCache) {\n droppableElement.rect = this.element.nativeElement.getBoundingClientRect();\n if (this.scrollContainer) {\n droppableElement.scrollContainerRect = this.scrollContainer.elementRef.nativeElement.getBoundingClientRect();\n }\n droppableElement.updateCache = false;\n }\n /** @type {?} */\n const isWithinElement = isCoordinateWithinRectangle(clientX, clientY, (/** @type {?} */ (droppableElement.rect)));\n /** @type {?} */\n const isDropAllowed = !this.validateDrop ||\n this.validateDrop({ clientX, clientY, target });\n if (droppableElement.scrollContainerRect) {\n return (isWithinElement &&\n isDropAllowed &&\n isCoordinateWithinRectangle(clientX, clientY, (/** @type {?} */ (droppableElement.scrollContainerRect))));\n }\n else {\n return isWithinElement && isDropAllowed;\n }\n })));\n /** @type {?} */\n const overlapsChanged$ = overlaps$.pipe(distinctUntilChanged());\n /** @type {?} */\n let dragOverActive;\n overlapsChanged$\n .pipe(filter((/**\n * @param {?} overlapsNow\n * @return {?}\n */\n (overlapsNow) => overlapsNow)))\n .subscribe((/**\n * @return {?}\n */\n () => {\n dragOverActive = true;\n addClass(this.renderer, this.element, this.dragOverClass);\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragEnter.next({\n dropData: currentDragDropData,\n });\n }));\n }));\n overlaps$.pipe(filter((/**\n * @param {?} overlapsNow\n * @return {?}\n */\n (overlapsNow) => overlapsNow))).subscribe((/**\n * @return {?}\n */\n () => {\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragOver.next({\n dropData: currentDragDropData,\n });\n }));\n }));\n overlapsChanged$\n .pipe(pairwise(), filter((/**\n * @param {?} __0\n * @return {?}\n */\n ([didOverlap, overlapsNow]) => didOverlap && !overlapsNow)))\n .subscribe((/**\n * @return {?}\n */\n () => {\n dragOverActive = false;\n removeClass(this.renderer, this.element, this.dragOverClass);\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.dragLeave.next({\n dropData: currentDragDropData,\n });\n }));\n }));\n drag$.subscribe({\n complete: (/**\n * @return {?}\n */\n () => {\n deregisterScrollListener();\n removeClass(this.renderer, this.element, this.dragActiveClass);\n if (dragOverActive) {\n removeClass(this.renderer, this.element, this.dragOverClass);\n this.zone.run((/**\n * @return {?}\n */\n () => {\n this.drop.next({\n dropData: currentDragDropData,\n });\n }));\n }\n }),\n });\n }));\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.currentDragSubscription) {\n this.currentDragSubscription.unsubscribe();\n }\n }\n}\nDroppableDirective.ɵfac = function DroppableDirective_Factory(t) { return new (t || DroppableDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DraggableHelper), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DraggableScrollContainerDirective, 8)); };\nDroppableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: DroppableDirective, selectors: [[\"\", \"mwlDroppable\", \"\"]], inputs: { dragOverClass: \"dragOverClass\", dragActiveClass: \"dragActiveClass\", validateDrop: \"validateDrop\" }, outputs: { dragEnter: \"dragEnter\", dragLeave: \"dragLeave\", dragOver: \"dragOver\", drop: \"drop\" } });\n/** @nocollapse */\nDroppableDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: DraggableHelper },\n { type: NgZone },\n { type: Renderer2 },\n { type: DraggableScrollContainerDirective, decorators: [{ type: Optional }] }\n];\nDroppableDirective.propDecorators = {\n dragOverClass: [{ type: Input }],\n dragActiveClass: [{ type: Input }],\n validateDrop: [{ type: Input }],\n dragEnter: [{ type: Output }],\n dragLeave: [{ type: Output }],\n dragOver: [{ type: Output }],\n drop: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DroppableDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlDroppable]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DraggableHelper }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: DraggableScrollContainerDirective, decorators: [{\n type: Optional\n }] }]; }, { dragEnter: [{\n type: Output\n }], dragLeave: [{\n type: Output\n }], dragOver: [{\n type: Output\n }], drop: [{\n type: Output\n }], dragOverClass: [{\n type: Input\n }], dragActiveClass: [{\n type: Input\n }], validateDrop: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass DragAndDropModule {\n}\nDragAndDropModule.ɵfac = function DragAndDropModule_Factory(t) { return new (t || DragAndDropModule)(); };\nDragAndDropModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: DragAndDropModule });\nDragAndDropModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(DragAndDropModule, [{\n type: NgModule,\n args: [{\n declarations: [\n DraggableDirective,\n DroppableDirective,\n DraggableScrollContainerDirective,\n ],\n exports: [\n DraggableDirective,\n DroppableDirective,\n DraggableScrollContainerDirective,\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragAndDropModule, { declarations: [DraggableDirective, DroppableDirective, DraggableScrollContainerDirective], exports: [DraggableDirective, DroppableDirective, DraggableScrollContainerDirective] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { DragAndDropModule, DraggableHelper as ɵc, DraggableScrollContainerDirective as ɵd, DraggableDirective as ɵb, DroppableDirective as ɵa };\n\n","import { isPlatformBrowser } from '@angular/common';\nimport { Directive, Renderer2, ElementRef, Output, Input, EventEmitter, NgZone, Inject, PLATFORM_ID, Optional, NgModule } from '@angular/core';\nimport { Subject, Observable, merge, EMPTY, fromEvent } from 'rxjs';\nimport { map, mergeMap, takeUntil, filter, pairwise, take, share, auditTime, switchMap, startWith, tap } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @hidden\n * @type {?}\n */\nimport * as ɵngcc0 from '@angular/core';\nconst IS_TOUCH_DEVICE = (() => {\n // In case we're in Node.js environment.\n if (typeof window === 'undefined') {\n return false;\n }\n else {\n return ('ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n navigator.msMaxTouchPoints > 0);\n }\n})();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @param {?} value1\n * @param {?} value2\n * @param {?=} precision\n * @return {?}\n */\nfunction isNumberCloseTo(value1, value2, precision = 3) {\n /** @type {?} */\n const diff = Math.abs(value1 - value2);\n return diff < precision;\n}\n/**\n * @param {?} startingRect\n * @param {?} edges\n * @param {?} clientX\n * @param {?} clientY\n * @return {?}\n */\nfunction getNewBoundingRectangle(startingRect, edges, clientX, clientY) {\n /** @type {?} */\n const newBoundingRect = {\n top: startingRect.top,\n bottom: startingRect.bottom,\n left: startingRect.left,\n right: startingRect.right\n };\n if (edges.top) {\n newBoundingRect.top += clientY;\n }\n if (edges.bottom) {\n newBoundingRect.bottom += clientY;\n }\n if (edges.left) {\n newBoundingRect.left += clientX;\n }\n if (edges.right) {\n newBoundingRect.right += clientX;\n }\n newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;\n newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;\n return newBoundingRect;\n}\n/**\n * @param {?} element\n * @param {?} ghostElementPositioning\n * @return {?}\n */\nfunction getElementRect(element, ghostElementPositioning) {\n /** @type {?} */\n let translateX = 0;\n /** @type {?} */\n let translateY = 0;\n /** @type {?} */\n const style = element.nativeElement.style;\n /** @type {?} */\n const transformProperties = [\n 'transform',\n '-ms-transform',\n '-moz-transform',\n '-o-transform'\n ];\n /** @type {?} */\n const transform = transformProperties\n .map(property => style[property])\n .find(value => !!value);\n if (transform && transform.includes('translate')) {\n translateX = transform.replace(/.*translate3?d?\\((-?[0-9]*)px, (-?[0-9]*)px.*/, '$1');\n translateY = transform.replace(/.*translate3?d?\\((-?[0-9]*)px, (-?[0-9]*)px.*/, '$2');\n }\n if (ghostElementPositioning === 'absolute') {\n return {\n height: element.nativeElement.offsetHeight,\n width: element.nativeElement.offsetWidth,\n top: element.nativeElement.offsetTop - translateY,\n bottom: element.nativeElement.offsetHeight +\n element.nativeElement.offsetTop -\n translateY,\n left: element.nativeElement.offsetLeft - translateX,\n right: element.nativeElement.offsetWidth +\n element.nativeElement.offsetLeft -\n translateX\n };\n }\n else {\n /** @type {?} */\n const boundingRect = element.nativeElement.getBoundingClientRect();\n return {\n height: boundingRect.height,\n width: boundingRect.width,\n top: boundingRect.top - translateY,\n bottom: boundingRect.bottom - translateY,\n left: boundingRect.left - translateX,\n right: boundingRect.right - translateX,\n scrollTop: element.nativeElement.scrollTop,\n scrollLeft: element.nativeElement.scrollLeft\n };\n }\n}\n/**\n * @param {?} __0\n * @return {?}\n */\nfunction isWithinBoundingY({ clientY, rect }) {\n return clientY >= rect.top && clientY <= rect.bottom;\n}\n/**\n * @param {?} __0\n * @return {?}\n */\nfunction isWithinBoundingX({ clientX, rect }) {\n return clientX >= rect.left && clientX <= rect.right;\n}\n/**\n * @param {?} __0\n * @return {?}\n */\nfunction getResizeEdges({ clientX, clientY, elm, allowedEdges, cursorPrecision }) {\n /** @type {?} */\n const elmPosition = elm.nativeElement.getBoundingClientRect();\n /** @type {?} */\n const edges = {};\n if (allowedEdges.left &&\n isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })) {\n edges.left = true;\n }\n if (allowedEdges.right &&\n isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })) {\n edges.right = true;\n }\n if (allowedEdges.top &&\n isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })) {\n edges.top = true;\n }\n if (allowedEdges.bottom &&\n isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })) {\n edges.bottom = true;\n }\n return edges;\n}\n/** @type {?} */\nconst DEFAULT_RESIZE_CURSORS = Object.freeze({\n topLeft: 'nw-resize',\n topRight: 'ne-resize',\n bottomLeft: 'sw-resize',\n bottomRight: 'se-resize',\n leftOrRight: 'col-resize',\n topOrBottom: 'row-resize'\n});\n/**\n * @param {?} edges\n * @param {?} cursors\n * @return {?}\n */\nfunction getResizeCursor(edges, cursors) {\n if (edges.left && edges.top) {\n return cursors.topLeft;\n }\n else if (edges.right && edges.top) {\n return cursors.topRight;\n }\n else if (edges.left && edges.bottom) {\n return cursors.bottomLeft;\n }\n else if (edges.right && edges.bottom) {\n return cursors.bottomRight;\n }\n else if (edges.left || edges.right) {\n return cursors.leftOrRight;\n }\n else if (edges.top || edges.bottom) {\n return cursors.topOrBottom;\n }\n else {\n return '';\n }\n}\n/**\n * @param {?} __0\n * @return {?}\n */\nfunction getEdgesDiff({ edges, initialRectangle, newRectangle }) {\n /** @type {?} */\n const edgesDiff = {};\n Object.keys(edges).forEach(edge => {\n edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0);\n });\n return edgesDiff;\n}\n/** @type {?} */\nconst RESIZE_ACTIVE_CLASS = 'resize-active';\n/** @type {?} */\nconst RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover';\n/** @type {?} */\nconst RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover';\n/** @type {?} */\nconst RESIZE_TOP_HOVER_CLASS = 'resize-top-hover';\n/** @type {?} */\nconst RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover';\n/** @type {?} */\nconst RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element';\n/** @type {?} */\nconst MOUSE_MOVE_THROTTLE_MS = 50;\n/**\n * Place this on an element to make it resizable. For example:\n *\n * ```html\n * \n *
          • \n * ```\n * Or in case they are sibling elements:\n * ```html\n *
            \n *
            \n * ```\n */\nclass ResizableDirective {\n /**\n * @hidden\n * @param {?} platformId\n * @param {?} renderer\n * @param {?} elm\n * @param {?} zone\n */\n constructor(platformId, renderer, elm, zone) {\n this.platformId = platformId;\n this.renderer = renderer;\n this.elm = elm;\n this.zone = zone;\n /**\n * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.\n * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize\n */\n this.resizeEdges = {};\n /**\n * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.\n */\n this.enableGhostResize = false;\n /**\n * A snap grid that resize events will be locked to.\n *\n * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`\n */\n this.resizeSnapGrid = {};\n /**\n * The mouse cursors that will be set on the resize edges\n */\n this.resizeCursors = DEFAULT_RESIZE_CURSORS;\n /**\n * Mouse over thickness to active cursor.\n * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element\n */\n this.resizeCursorPrecision = 3;\n /**\n * Define the positioning of the ghost element (can be fixed or absolute)\n */\n this.ghostElementPositioning = 'fixed';\n /**\n * Allow elements to be resized to negative dimensions\n */\n this.allowNegativeResizes = false;\n /**\n * The mouse move throttle in milliseconds, default: 50 ms\n */\n this.mouseMoveThrottleMS = MOUSE_MOVE_THROTTLE_MS;\n /**\n * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.\n */\n this.resizeStart = new EventEmitter();\n /**\n * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.\n */\n this.resizing = new EventEmitter();\n /**\n * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.\n */\n this.resizeEnd = new EventEmitter();\n /**\n * @hidden\n */\n this.mouseup = new Subject();\n /**\n * @hidden\n */\n this.mousedown = new Subject();\n /**\n * @hidden\n */\n this.mousemove = new Subject();\n this.destroy$ = new Subject();\n this.resizeEdges$ = new Subject();\n this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone);\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnInit() {\n /** @type {?} */\n const mousedown$ = merge(this.pointerEventListeners.pointerDown, this.mousedown);\n /** @type {?} */\n const mousemove$ = merge(this.pointerEventListeners.pointerMove, this.mousemove).pipe(tap(({ event }) => {\n if (currentResize) {\n try {\n event.preventDefault();\n }\n catch (e) {\n // just adding try-catch not to see errors in console if there is a passive listener for same event somewhere\n // browser does nothing except of writing errors to console\n }\n }\n }), share());\n /** @type {?} */\n const mouseup$ = merge(this.pointerEventListeners.pointerUp, this.mouseup);\n /** @type {?} */\n let currentResize;\n /** @type {?} */\n const removeGhostElement = () => {\n if (currentResize && currentResize.clonedNode) {\n this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode);\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit');\n }\n };\n /** @type {?} */\n const getResizeCursors = () => {\n return Object.assign({}, DEFAULT_RESIZE_CURSORS, this.resizeCursors);\n };\n this.resizeEdges$\n .pipe(startWith(this.resizeEdges), map(() => {\n return (this.resizeEdges &&\n Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge]));\n }), switchMap(legacyResizeEdgesEnabled => legacyResizeEdgesEnabled ? mousemove$ : EMPTY), auditTime(this.mouseMoveThrottleMS), takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n /** @type {?} */\n const resizeEdges = getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n });\n /** @type {?} */\n const resizeCursors = getResizeCursors();\n if (!currentResize) {\n /** @type {?} */\n const cursor = getResizeCursor(resizeEdges, resizeCursors);\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor);\n }\n this.setElementClass(this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true);\n this.setElementClass(this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true);\n this.setElementClass(this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true);\n this.setElementClass(this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true);\n });\n /** @type {?} */\n const mousedrag = mousedown$\n .pipe(mergeMap(startCoords => {\n /**\n * @param {?} moveCoords\n * @return {?}\n */\n function getDiff(moveCoords) {\n return {\n clientX: moveCoords.clientX - startCoords.clientX,\n clientY: moveCoords.clientY - startCoords.clientY\n };\n }\n /** @type {?} */\n const getSnapGrid = () => {\n /** @type {?} */\n const snapGrid = { x: 1, y: 1 };\n if (currentResize) {\n if (this.resizeSnapGrid.left && currentResize.edges.left) {\n snapGrid.x = +this.resizeSnapGrid.left;\n }\n else if (this.resizeSnapGrid.right &&\n currentResize.edges.right) {\n snapGrid.x = +this.resizeSnapGrid.right;\n }\n if (this.resizeSnapGrid.top && currentResize.edges.top) {\n snapGrid.y = +this.resizeSnapGrid.top;\n }\n else if (this.resizeSnapGrid.bottom &&\n currentResize.edges.bottom) {\n snapGrid.y = +this.resizeSnapGrid.bottom;\n }\n }\n return snapGrid;\n };\n /**\n * @param {?} coords\n * @param {?} snapGrid\n * @return {?}\n */\n function getGrid(coords, snapGrid) {\n return {\n x: Math.ceil(coords.clientX / snapGrid.x),\n y: Math.ceil(coords.clientY / snapGrid.y)\n };\n }\n return ((/** @type {?} */ (merge(mousemove$.pipe(take(1)).pipe(map(coords => [, coords])), mousemove$.pipe(pairwise())))))\n .pipe(map(([previousCoords, newCoords]) => {\n return [\n previousCoords ? getDiff(previousCoords) : previousCoords,\n getDiff(newCoords)\n ];\n }))\n .pipe(filter(([previousCoords, newCoords]) => {\n if (!previousCoords) {\n return true;\n }\n /** @type {?} */\n const snapGrid = getSnapGrid();\n /** @type {?} */\n const previousGrid = getGrid(previousCoords, snapGrid);\n /** @type {?} */\n const newGrid = getGrid(newCoords, snapGrid);\n return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y);\n }))\n .pipe(map(([, newCoords]) => {\n /** @type {?} */\n const snapGrid = getSnapGrid();\n return {\n clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,\n clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y\n };\n }))\n .pipe(takeUntil(merge(mouseup$, mousedown$)));\n }))\n .pipe(filter(() => !!currentResize));\n mousedrag\n .pipe(map(({ clientX, clientY }) => {\n return getNewBoundingRectangle((/** @type {?} */ (currentResize)).startingRect, (/** @type {?} */ (currentResize)).edges, clientX, clientY);\n }))\n .pipe(filter((newBoundingRect) => {\n return (this.allowNegativeResizes ||\n !!(newBoundingRect.height &&\n newBoundingRect.width &&\n newBoundingRect.height > 0 &&\n newBoundingRect.width > 0));\n }))\n .pipe(filter((newBoundingRect) => {\n return this.validateResize\n ? this.validateResize({\n rectangle: newBoundingRect,\n edges: getEdgesDiff({\n edges: (/** @type {?} */ (currentResize)).edges,\n initialRectangle: (/** @type {?} */ (currentResize)).startingRect,\n newRectangle: newBoundingRect\n })\n })\n : true;\n }), takeUntil(this.destroy$))\n .subscribe((newBoundingRect) => {\n if (currentResize && currentResize.clonedNode) {\n this.renderer.setStyle(currentResize.clonedNode, 'height', `${newBoundingRect.height}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'width', `${newBoundingRect.width}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'top', `${newBoundingRect.top}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'left', `${newBoundingRect.left}px`);\n }\n if (this.resizing.observers.length > 0) {\n this.zone.run(() => {\n this.resizing.emit({\n edges: getEdgesDiff({\n edges: (/** @type {?} */ (currentResize)).edges,\n initialRectangle: (/** @type {?} */ (currentResize)).startingRect,\n newRectangle: newBoundingRect\n }),\n rectangle: newBoundingRect\n });\n });\n }\n (/** @type {?} */ (currentResize)).currentRect = newBoundingRect;\n });\n mousedown$\n .pipe(map(({ clientX, clientY, edges }) => {\n return (edges ||\n getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n }));\n }))\n .pipe(filter((edges) => {\n return Object.keys(edges).length > 0;\n }), takeUntil(this.destroy$))\n .subscribe((edges) => {\n if (currentResize) {\n removeGhostElement();\n }\n /** @type {?} */\n const startingRect = getElementRect(this.elm, this.ghostElementPositioning);\n currentResize = {\n edges,\n startingRect,\n currentRect: startingRect\n };\n /** @type {?} */\n const resizeCursors = getResizeCursors();\n /** @type {?} */\n const cursor = getResizeCursor(currentResize.edges, resizeCursors);\n this.renderer.setStyle(document.body, 'cursor', cursor);\n this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true);\n if (this.enableGhostResize) {\n currentResize.clonedNode = this.elm.nativeElement.cloneNode(true);\n this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode);\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'hidden');\n this.renderer.setStyle(currentResize.clonedNode, 'position', this.ghostElementPositioning);\n this.renderer.setStyle(currentResize.clonedNode, 'left', `${currentResize.startingRect.left}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'top', `${currentResize.startingRect.top}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'height', `${currentResize.startingRect.height}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'width', `${currentResize.startingRect.width}px`);\n this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors));\n this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS);\n (/** @type {?} */ (currentResize.clonedNode)).scrollTop = (/** @type {?} */ (currentResize.startingRect\n .scrollTop));\n (/** @type {?} */ (currentResize.clonedNode)).scrollLeft = (/** @type {?} */ (currentResize.startingRect\n .scrollLeft));\n }\n if (this.resizeStart.observers.length > 0) {\n this.zone.run(() => {\n this.resizeStart.emit({\n edges: getEdgesDiff({\n edges,\n initialRectangle: startingRect,\n newRectangle: startingRect\n }),\n rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)\n });\n });\n }\n });\n mouseup$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n if (currentResize) {\n this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS);\n this.renderer.setStyle(document.body, 'cursor', '');\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', '');\n if (this.resizeEnd.observers.length > 0) {\n this.zone.run(() => {\n this.resizeEnd.emit({\n edges: getEdgesDiff({\n edges: (/** @type {?} */ (currentResize)).edges,\n initialRectangle: (/** @type {?} */ (currentResize)).startingRect,\n newRectangle: (/** @type {?} */ (currentResize)).currentRect\n }),\n rectangle: (/** @type {?} */ (currentResize)).currentRect\n });\n });\n }\n removeGhostElement();\n currentResize = null;\n }\n });\n }\n /**\n * @hidden\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.resizeEdges) {\n this.resizeEdges$.next(this.resizeEdges);\n }\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnDestroy() {\n // browser check for angular universal, because it doesn't know what document is\n if (isPlatformBrowser(this.platformId)) {\n this.renderer.setStyle(document.body, 'cursor', '');\n }\n this.mousedown.complete();\n this.mouseup.complete();\n this.mousemove.complete();\n this.resizeEdges$.complete();\n this.destroy$.next();\n }\n /**\n * @private\n * @param {?} elm\n * @param {?} name\n * @param {?} add\n * @return {?}\n */\n setElementClass(elm, name, add) {\n if (add) {\n this.renderer.addClass(elm.nativeElement, name);\n }\n else {\n this.renderer.removeClass(elm.nativeElement, name);\n }\n }\n}\nResizableDirective.ɵfac = function ResizableDirective_Factory(t) { return new (t || ResizableDirective)(ɵngcc0.ɵɵdirectiveInject(PLATFORM_ID), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nResizableDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ResizableDirective, selectors: [[\"\", \"mwlResizable\", \"\"]], inputs: { resizeEdges: \"resizeEdges\", enableGhostResize: \"enableGhostResize\", resizeSnapGrid: \"resizeSnapGrid\", resizeCursors: \"resizeCursors\", resizeCursorPrecision: \"resizeCursorPrecision\", ghostElementPositioning: \"ghostElementPositioning\", allowNegativeResizes: \"allowNegativeResizes\", mouseMoveThrottleMS: \"mouseMoveThrottleMS\", validateResize: \"validateResize\" }, outputs: { resizeStart: \"resizeStart\", resizing: \"resizing\", resizeEnd: \"resizeEnd\" }, exportAs: [\"mwlResizable\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nResizableDirective.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone }\n];\nResizableDirective.propDecorators = {\n validateResize: [{ type: Input }],\n resizeEdges: [{ type: Input }],\n enableGhostResize: [{ type: Input }],\n resizeSnapGrid: [{ type: Input }],\n resizeCursors: [{ type: Input }],\n resizeCursorPrecision: [{ type: Input }],\n ghostElementPositioning: [{ type: Input }],\n allowNegativeResizes: [{ type: Input }],\n mouseMoveThrottleMS: [{ type: Input }],\n resizeStart: [{ type: Output }],\n resizing: [{ type: Output }],\n resizeEnd: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizableDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlResizable]',\n exportAs: 'mwlResizable'\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }]; }, { resizeEdges: [{\n type: Input\n }], enableGhostResize: [{\n type: Input\n }], resizeSnapGrid: [{\n type: Input\n }], resizeCursors: [{\n type: Input\n }], resizeCursorPrecision: [{\n type: Input\n }], ghostElementPositioning: [{\n type: Input\n }], allowNegativeResizes: [{\n type: Input\n }], mouseMoveThrottleMS: [{\n type: Input\n }], resizeStart: [{\n type: Output\n }], resizing: [{\n type: Output\n }], resizeEnd: [{\n type: Output\n }], validateResize: [{\n type: Input\n }] }); })();\nclass PointerEventListeners {\n // tslint:disable-line\n /**\n * @param {?} renderer\n * @param {?} zone\n * @return {?}\n */\n static getInstance(renderer, zone) {\n if (!PointerEventListeners.instance) {\n PointerEventListeners.instance = new PointerEventListeners(renderer, zone);\n }\n return PointerEventListeners.instance;\n }\n /**\n * @param {?} renderer\n * @param {?} zone\n */\n constructor(renderer, zone) {\n this.pointerDown = new Observable((observer) => {\n /** @type {?} */\n let unsubscribeMouseDown;\n /** @type {?} */\n let unsubscribeTouchStart;\n zone.runOutsideAngular(() => {\n unsubscribeMouseDown = renderer.listen('document', 'mousedown', (event) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n });\n if (IS_TOUCH_DEVICE) {\n unsubscribeTouchStart = renderer.listen('document', 'touchstart', (event) => {\n observer.next({\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n event\n });\n });\n }\n });\n return () => {\n unsubscribeMouseDown();\n if (IS_TOUCH_DEVICE) {\n (/** @type {?} */ (unsubscribeTouchStart))();\n }\n };\n }).pipe(share());\n this.pointerMove = new Observable((observer) => {\n /** @type {?} */\n let unsubscribeMouseMove;\n /** @type {?} */\n let unsubscribeTouchMove;\n zone.runOutsideAngular(() => {\n unsubscribeMouseMove = renderer.listen('document', 'mousemove', (event) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n });\n if (IS_TOUCH_DEVICE) {\n unsubscribeTouchMove = renderer.listen('document', 'touchmove', (event) => {\n observer.next({\n clientX: event.targetTouches[0].clientX,\n clientY: event.targetTouches[0].clientY,\n event\n });\n });\n }\n });\n return () => {\n unsubscribeMouseMove();\n if (IS_TOUCH_DEVICE) {\n (/** @type {?} */ (unsubscribeTouchMove))();\n }\n };\n }).pipe(share());\n this.pointerUp = new Observable((observer) => {\n /** @type {?} */\n let unsubscribeMouseUp;\n /** @type {?} */\n let unsubscribeTouchEnd;\n /** @type {?} */\n let unsubscribeTouchCancel;\n zone.runOutsideAngular(() => {\n unsubscribeMouseUp = renderer.listen('document', 'mouseup', (event) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n });\n if (IS_TOUCH_DEVICE) {\n unsubscribeTouchEnd = renderer.listen('document', 'touchend', (event) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n });\n unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', (event) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n });\n }\n });\n return () => {\n unsubscribeMouseUp();\n if (IS_TOUCH_DEVICE) {\n (/** @type {?} */ (unsubscribeTouchEnd))();\n (/** @type {?} */ (unsubscribeTouchCancel))();\n }\n };\n }).pipe(share());\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle\n *\n * For example\n *\n * ```html\n *
            \n *
            \n *
            \n * ```\n * Or in case they are sibling elements:\n * ```html\n *
            \n *
            \n * ```\n */\nclass ResizeHandleDirective {\n /**\n * @param {?} renderer\n * @param {?} element\n * @param {?} zone\n * @param {?} resizableDirective\n */\n constructor(renderer, element, zone, resizableDirective) {\n this.renderer = renderer;\n this.element = element;\n this.zone = zone;\n this.resizableDirective = resizableDirective;\n /**\n * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on\n */\n this.resizeEdges = {};\n this.eventListeners = {};\n this.destroy$ = new Subject();\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this.zone.runOutsideAngular(() => {\n this.listenOnTheHost('mousedown').subscribe(event => {\n this.onMousedown(event, event.clientX, event.clientY);\n });\n this.listenOnTheHost('mouseup').subscribe(event => {\n this.onMouseup(event.clientX, event.clientY);\n });\n if (IS_TOUCH_DEVICE) {\n this.listenOnTheHost('touchstart').subscribe(event => {\n this.onMousedown(event, event.touches[0].clientX, event.touches[0].clientY);\n });\n merge(this.listenOnTheHost('touchend'), this.listenOnTheHost('touchcancel')).subscribe(event => {\n this.onMouseup(event.changedTouches[0].clientX, event.changedTouches[0].clientY);\n });\n }\n });\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this.destroy$.next();\n this.unsubscribeEventListeners();\n }\n /**\n * @hidden\n * @param {?} event\n * @param {?} clientX\n * @param {?} clientY\n * @return {?}\n */\n onMousedown(event, clientX, clientY) {\n event.preventDefault();\n if (!this.eventListeners.touchmove) {\n this.eventListeners.touchmove = this.renderer.listen(this.element.nativeElement, 'touchmove', (touchMoveEvent) => {\n this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY);\n });\n }\n if (!this.eventListeners.mousemove) {\n this.eventListeners.mousemove = this.renderer.listen(this.element.nativeElement, 'mousemove', (mouseMoveEvent) => {\n this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY);\n });\n }\n this.resizable.mousedown.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n }\n /**\n * @hidden\n * @param {?} clientX\n * @param {?} clientY\n * @return {?}\n */\n onMouseup(clientX, clientY) {\n this.unsubscribeEventListeners();\n this.resizable.mouseup.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n }\n // directive might be passed from DI or as an input\n /**\n * @private\n * @return {?}\n */\n get resizable() {\n return this.resizableDirective || this.resizableContainer;\n }\n /**\n * @private\n * @param {?} event\n * @param {?} clientX\n * @param {?} clientY\n * @return {?}\n */\n onMousemove(event, clientX, clientY) {\n this.resizable.mousemove.next({\n clientX,\n clientY,\n edges: this.resizeEdges,\n event\n });\n }\n /**\n * @private\n * @return {?}\n */\n unsubscribeEventListeners() {\n Object.keys(this.eventListeners).forEach(type => {\n ((/** @type {?} */ (this))).eventListeners[type]();\n delete this.eventListeners[type];\n });\n }\n /**\n * @private\n * @template T\n * @param {?} eventName\n * @return {?}\n */\n listenOnTheHost(eventName) {\n return fromEvent(this.element.nativeElement, eventName).pipe(takeUntil(this.destroy$));\n }\n}\nResizeHandleDirective.ɵfac = function ResizeHandleDirective_Factory(t) { return new (t || ResizeHandleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ResizableDirective, 8)); };\nResizeHandleDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ResizeHandleDirective, selectors: [[\"\", \"mwlResizeHandle\", \"\"]], inputs: { resizeEdges: \"resizeEdges\", resizableContainer: \"resizableContainer\" } });\n/** @nocollapse */\nResizeHandleDirective.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone },\n { type: ResizableDirective, decorators: [{ type: Optional }] }\n];\nResizeHandleDirective.propDecorators = {\n resizeEdges: [{ type: Input }],\n resizableContainer: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizeHandleDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlResizeHandle]'\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ResizableDirective, decorators: [{\n type: Optional\n }] }]; }, { resizeEdges: [{\n type: Input\n }], resizableContainer: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ResizableModule {\n}\nResizableModule.ɵfac = function ResizableModule_Factory(t) { return new (t || ResizableModule)(); };\nResizableModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: ResizableModule });\nResizableModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ResizableModule, [{\n type: NgModule,\n args: [{\n declarations: [ResizableDirective, ResizeHandleDirective],\n exports: [ResizableDirective, ResizeHandleDirective]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ResizableModule, { declarations: [ResizableDirective, ResizeHandleDirective], exports: [ResizableDirective, ResizeHandleDirective] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { ResizableDirective, ResizeHandleDirective, ResizableModule };\n\n","import { positionElements } from 'positioning';\nimport { validateEvents, getDayView, getDayViewHourGrid, getMonthView, getWeekViewHeader, getWeekView } from 'calendar-utils';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from 'angular-draggable-droppable';\nimport * as ɵngcc3 from 'angular-resizable-element';\n\nfunction CalendarEventActionsComponent_ng_template_0_span_0_a_1_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 5);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarEventActionsComponent_ng_template_0_span_0_a_1_Template_a_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r9); const action_r6 = restoredCtx.$implicit; const event_r3 = ɵngcc0.ɵɵnextContext(2).event; return action_r6.onClick({ event: event_r3 }); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const action_r6 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngClass\", action_r6.cssClass)(\"innerHtml\", action_r6.label, ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction CalendarEventActionsComponent_ng_template_0_span_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 3);\n ɵngcc0.ɵɵtemplate(1, CalendarEventActionsComponent_ng_template_0_span_0_a_1_Template, 1, 2, \"a\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const event_r3 = ɵngcc0.ɵɵnextContext().event;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", event_r3.actions)(\"ngForTrackBy\", ctx_r4.trackByIndex);\n} }\nfunction CalendarEventActionsComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarEventActionsComponent_ng_template_0_span_0_Template, 2, 2, \"span\", 2);\n} if (rf & 2) {\n const event_r3 = ctx.event;\n ɵngcc0.ɵɵproperty(\"ngIf\", event_r3.actions);\n} }\nfunction CalendarEventActionsComponent_ng_template_2_Template(rf, ctx) { }\nconst _c0 = function (a0) { return { event: a0 }; };\nfunction CalendarEventTitleComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 2);\n ɵngcc0.ɵɵpipe(1, \"calendarEventTitle\");\n} if (rf & 2) {\n const event_r3 = ctx.event;\n const view_r4 = ctx.view;\n ɵngcc0.ɵɵproperty(\"innerHTML\", ɵngcc0.ɵɵpipeBind3(1, 1, event_r3.title, view_r4, event_r3), ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction CalendarEventTitleComponent_ng_template_2_Template(rf, ctx) { }\nconst _c1 = function (a0, a1) { return { event: a0, view: a1 }; };\nfunction CalendarTooltipWindowComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵelement(1, \"div\", 3)(2, \"div\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const contents_r3 = ctx.contents;\n const placement_r4 = ctx.placement;\n ɵngcc0.ɵɵproperty(\"ngClass\", \"cal-tooltip-\" + placement_r4);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"innerHtml\", contents_r3, ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction CalendarTooltipWindowComponent_ng_template_2_Template(rf, ctx) { }\nconst _c2 = function (a0, a1, a2) { return { contents: a0, placement: a1, event: a2 }; };\nfunction CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template(rf, ctx) { if (rf & 1) {\n const _r5 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mwl-calendar-month-cell\", 7);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template_mwl_calendar_month_cell_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r5); const day_r3 = restoredCtx.$implicit; const ctx_r4 = ɵngcc0.ɵɵnextContext(2); return ctx_r4.dayClicked.emit({ day: day_r3 }); })(\"highlightDay\", function CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template_mwl_calendar_month_cell_highlightDay_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r6 = ɵngcc0.ɵɵnextContext(2); return ctx_r6.toggleDayHighlight($event.event, true); })(\"unhighlightDay\", function CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template_mwl_calendar_month_cell_unhighlightDay_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r7 = ɵngcc0.ɵɵnextContext(2); return ctx_r7.toggleDayHighlight($event.event, false); })(\"drop\", function CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template_mwl_calendar_month_cell_drop_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r5); const day_r3 = restoredCtx.$implicit; const ctx_r8 = ɵngcc0.ɵɵnextContext(2); return ctx_r8.eventDropped(day_r3, $event.dropData.event, $event.dropData.draggedFrom); })(\"eventClicked\", function CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template_mwl_calendar_month_cell_eventClicked_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r5); const ctx_r9 = ɵngcc0.ɵɵnextContext(2); return ctx_r9.eventClicked.emit({ event: $event.event }); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const day_r3 = ctx.$implicit;\n const ctx_r2 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", day_r3 == null ? null : day_r3.cssClass)(\"day\", day_r3)(\"openDay\", ctx_r2.openDay)(\"locale\", ctx_r2.locale)(\"tooltipPlacement\", ctx_r2.tooltipPlacement)(\"tooltipAppendToBody\", ctx_r2.tooltipAppendToBody)(\"tooltipTemplate\", ctx_r2.tooltipTemplate)(\"customTemplate\", ctx_r2.cellTemplate);\n} }\nfunction CalendarMonthViewComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n const _r11 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\")(1, \"div\", 4);\n ɵngcc0.ɵɵtemplate(2, CalendarMonthViewComponent_div_3_mwl_calendar_month_cell_2_Template, 1, 8, \"mwl-calendar-month-cell\", 5);\n ɵngcc0.ɵɵpipe(3, \"slice\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"mwl-calendar-open-day-events\", 6);\n ɵngcc0.ɵɵlistener(\"eventClicked\", function CalendarMonthViewComponent_div_3_Template_mwl_calendar_open_day_events_eventClicked_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r10 = ɵngcc0.ɵɵnextContext(); return ctx_r10.eventClicked.emit({ event: $event.event }); })(\"drop\", function CalendarMonthViewComponent_div_3_Template_mwl_calendar_open_day_events_drop_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r11); const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.eventDropped(ctx_r12.openDay, $event.dropData.event, $event.dropData.draggedFrom); });\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const rowIndex_r1 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ɵngcc0.ɵɵpipeBind3(3, 7, ctx_r0.view.days, rowIndex_r1, rowIndex_r1 + ctx_r0.view.totalDaysVisibleInWeek))(\"ngForTrackBy\", ctx_r0.trackByDate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"isOpen\", ctx_r0.openRowIndex === rowIndex_r1)(\"events\", ctx_r0.openDay == null ? null : ctx_r0.openDay.events)(\"customTemplate\", ctx_r0.openDayEventsTemplate)(\"eventTitleTemplate\", ctx_r0.eventTitleTemplate)(\"eventActionsTemplate\", ctx_r0.eventActionsTemplate);\n} }\nfunction CalendarMonthViewHeaderComponent_ng_template_0_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵpipe(2, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const day_r6 = ctx.$implicit;\n const locale_r4 = ɵngcc0.ɵɵnextContext().locale;\n ɵngcc0.ɵɵclassProp(\"cal-past\", day_r6.isPast)(\"cal-today\", day_r6.isToday)(\"cal-future\", day_r6.isFuture)(\"cal-weekend\", day_r6.isWeekend);\n ɵngcc0.ɵɵproperty(\"ngClass\", day_r6.cssClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ɵngcc0.ɵɵpipeBind3(2, 10, day_r6.date, \"monthViewColumnHeader\", locale_r4), \" \");\n} }\nfunction CalendarMonthViewHeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵtemplate(1, CalendarMonthViewHeaderComponent_ng_template_0_div_1_Template, 3, 14, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const days_r3 = ctx.days;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", days_r3)(\"ngForTrackBy\", ctx_r1.trackByWeekDayHeaderDate);\n} }\nfunction CalendarMonthViewHeaderComponent_ng_template_2_Template(rf, ctx) { }\nconst _c3 = function (a0, a1) { return { days: a0, locale: a1 }; };\nfunction CalendarMonthCellComponent_ng_template_0_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const day_r3 = ɵngcc0.ɵɵnextContext().day;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(day_r3.badgeTotal);\n} }\nconst _c4 = function (a0, a1) { return { event: a0, draggedFrom: a1 }; };\nconst _c5 = function (a0, a1) { return { x: a0, y: a1 }; };\nfunction CalendarMonthCellComponent_ng_template_0_div_5_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 9);\n ɵngcc0.ɵɵlistener(\"mouseenter\", function CalendarMonthCellComponent_ng_template_0_div_5_div_1_Template_div_mouseenter_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const event_r16 = restoredCtx.$implicit; const highlightDay_r7 = ɵngcc0.ɵɵnextContext(2).highlightDay; return highlightDay_r7.emit({ event: event_r16 }); })(\"mouseleave\", function CalendarMonthCellComponent_ng_template_0_div_5_div_1_Template_div_mouseleave_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const event_r16 = restoredCtx.$implicit; const unhighlightDay_r8 = ɵngcc0.ɵɵnextContext(2).unhighlightDay; return unhighlightDay_r8.emit({ event: event_r16 }); })(\"mwlClick\", function CalendarMonthCellComponent_ng_template_0_div_5_div_1_Template_div_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const event_r16 = restoredCtx.$implicit; const eventClicked_r9 = ɵngcc0.ɵɵnextContext(2).eventClicked; return eventClicked_r9.emit({ event: event_r16 }); });\n ɵngcc0.ɵɵpipe(1, \"calendarEventTitle\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const event_r16 = ctx.$implicit;\n const ctx_r24 = ɵngcc0.ɵɵnextContext(2);\n const tooltipPlacement_r6 = ctx_r24.tooltipPlacement;\n const tooltipTemplate_r10 = ctx_r24.tooltipTemplate;\n const tooltipAppendToBody_r11 = ctx_r24.tooltipAppendToBody;\n const day_r3 = ctx_r24.day;\n ɵngcc0.ɵɵstyleProp(\"background-color\", event_r16.color == null ? null : event_r16.color.primary);\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", event_r16.draggable);\n ɵngcc0.ɵɵproperty(\"ngClass\", event_r16 == null ? null : event_r16.cssClass)(\"mwlCalendarTooltip\", ɵngcc0.ɵɵpipeBind3(1, 12, event_r16.title, \"monthTooltip\", event_r16))(\"tooltipPlacement\", tooltipPlacement_r6)(\"tooltipEvent\", event_r16)(\"tooltipTemplate\", tooltipTemplate_r10)(\"tooltipAppendToBody\", tooltipAppendToBody_r11)(\"dropData\", ɵngcc0.ɵɵpureFunction2(16, _c4, event_r16, day_r3))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(19, _c5, event_r16.draggable, event_r16.draggable));\n} }\nfunction CalendarMonthCellComponent_ng_template_0_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 7);\n ɵngcc0.ɵɵtemplate(1, CalendarMonthCellComponent_ng_template_0_div_5_div_1_Template, 2, 22, \"div\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const day_r3 = ɵngcc0.ɵɵnextContext().day;\n const ctx_r13 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", day_r3.events)(\"ngForTrackBy\", ctx_r13.trackByEventId);\n} }\nfunction CalendarMonthCellComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵtemplate(1, CalendarMonthCellComponent_ng_template_0_span_1_Template, 2, 1, \"span\", 3);\n ɵngcc0.ɵɵelementStart(2, \"span\", 4);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵpipe(4, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd()();\n ɵngcc0.ɵɵtemplate(5, CalendarMonthCellComponent_ng_template_0_div_5_Template, 2, 2, \"div\", 5);\n} if (rf & 2) {\n const day_r3 = ctx.day;\n const locale_r5 = ctx.locale;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", day_r3.badgeTotal > 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ɵngcc0.ɵɵpipeBind3(4, 3, day_r3.date, \"monthViewDayNumber\", locale_r5));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", day_r3.events.length > 0);\n} }\nfunction CalendarMonthCellComponent_ng_template_2_Template(rf, ctx) { }\nconst _c6 = function (a0, a1, a2, a3, a4, a5, a6, a7, a8) { return { day: a0, openDay: a1, locale: a2, tooltipPlacement: a3, highlightDay: a4, unhighlightDay: a5, eventClicked: a6, tooltipTemplate: a7, tooltipAppendToBody: a8 }; };\nfunction CalendarOpenDayEventsComponent_ng_template_0_div_0_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 5);\n ɵngcc0.ɵɵelement(1, \"span\", 6);\n ɵngcc0.ɵɵtext(2, \" \");\n ɵngcc0.ɵɵelementStart(3, \"mwl-calendar-event-title\", 7);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarOpenDayEventsComponent_ng_template_0_div_0_div_1_Template_mwl_calendar_event_title_mwlClick_3_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r10); const event_r8 = restoredCtx.$implicit; const eventClicked_r4 = ɵngcc0.ɵɵnextContext(2).eventClicked; return eventClicked_r4.emit({ event: event_r8 }); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtext(4, \" \");\n ɵngcc0.ɵɵelement(5, \"mwl-calendar-event-actions\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const event_r8 = ctx.$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", event_r8.draggable);\n ɵngcc0.ɵɵproperty(\"ngClass\", event_r8 == null ? null : event_r8.cssClass)(\"dropData\", ɵngcc0.ɵɵpureFunction1(11, _c0, event_r8))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(13, _c5, event_r8.draggable, event_r8.draggable));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"background-color\", event_r8.color == null ? null : event_r8.color.primary);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", event_r8)(\"customTemplate\", ctx_r7.eventTitleTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", event_r8)(\"customTemplate\", ctx_r7.eventActionsTemplate);\n} }\nfunction CalendarOpenDayEventsComponent_ng_template_0_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtemplate(1, CalendarOpenDayEventsComponent_ng_template_0_div_0_div_1_Template, 6, 16, \"div\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const events_r3 = ɵngcc0.ɵɵnextContext().events;\n const ctx_r6 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@collapse\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", events_r3)(\"ngForTrackBy\", ctx_r6.trackByEventId);\n} }\nfunction CalendarOpenDayEventsComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarOpenDayEventsComponent_ng_template_0_div_0_Template, 2, 3, \"div\", 2);\n} if (rf & 2) {\n const isOpen_r5 = ctx.isOpen;\n ɵngcc0.ɵɵproperty(\"ngIf\", isOpen_r5);\n} }\nfunction CalendarOpenDayEventsComponent_ng_template_2_Template(rf, ctx) { }\nconst _c7 = function (a0, a1, a2) { return { events: a0, eventClicked: a1, isOpen: a2 }; };\nfunction CalendarWeekViewComponent_div_2_div_4_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵlistener(\"drop\", function CalendarWeekViewComponent_div_2_div_4_Template_div_drop_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r9); const day_r7 = restoredCtx.$implicit; const ctx_r8 = ɵngcc0.ɵɵnextContext(2); return ctx_r8.eventDropped($event, day_r7.date, true); });\n ɵngcc0.ɵɵelementEnd();\n} }\nconst _c8 = function () { return { left: true }; };\nfunction CalendarWeekViewComponent_div_2_div_5_div_2_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 22);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c8));\n} }\nconst _c9 = function () { return { right: true }; };\nfunction CalendarWeekViewComponent_div_2_div_5_div_2_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 23);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c9));\n} }\nconst _c10 = function (a0, a1) { return { left: a0, right: a1 }; };\nconst _c11 = function (a0, a1) { return { event: a0, calendarId: a1 }; };\nconst _c12 = function (a0) { return { x: a0 }; };\nconst _c13 = function () { return {}; };\nfunction CalendarWeekViewComponent_div_2_div_5_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r18 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 17, 18);\n ɵngcc0.ɵɵlistener(\"resizeStart\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_resizeStart_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const allDayEvent_r13 = restoredCtx.$implicit; ɵngcc0.ɵɵnextContext(); const _r11 = ɵngcc0.ɵɵreference(1); const ctx_r17 = ɵngcc0.ɵɵnextContext(2); return ctx_r17.allDayEventResizeStarted(_r11, allDayEvent_r13, $event); })(\"resizing\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_resizing_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const allDayEvent_r13 = restoredCtx.$implicit; const ctx_r19 = ɵngcc0.ɵɵnextContext(3); return ctx_r19.allDayEventResizing(allDayEvent_r13, $event, ctx_r19.dayColumnWidth); })(\"resizeEnd\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_resizeEnd_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const allDayEvent_r13 = restoredCtx.$implicit; const ctx_r20 = ɵngcc0.ɵɵnextContext(3); return ctx_r20.allDayEventResizeEnded(allDayEvent_r13); })(\"dragStart\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_dragStart_0_listener() { ɵngcc0.ɵɵrestoreView(_r18); const _r14 = ɵngcc0.ɵɵreference(1); ɵngcc0.ɵɵnextContext(); const _r11 = ɵngcc0.ɵɵreference(1); const ctx_r21 = ɵngcc0.ɵɵnextContext(2); return ctx_r21.dragStarted(_r11, _r14); })(\"dragging\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_dragging_0_listener() { ɵngcc0.ɵɵrestoreView(_r18); const ctx_r22 = ɵngcc0.ɵɵnextContext(3); return ctx_r22.allDayEventDragMove(); })(\"dragEnd\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_div_dragEnd_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const allDayEvent_r13 = restoredCtx.$implicit; const ctx_r23 = ɵngcc0.ɵɵnextContext(3); return ctx_r23.dragEnded(allDayEvent_r13, $event, ctx_r23.dayColumnWidth); });\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewComponent_div_2_div_5_div_2_div_2_Template, 1, 2, \"div\", 19);\n ɵngcc0.ɵɵelementStart(3, \"mwl-calendar-week-view-event\", 20);\n ɵngcc0.ɵɵlistener(\"eventClicked\", function CalendarWeekViewComponent_div_2_div_5_div_2_Template_mwl_calendar_week_view_event_eventClicked_3_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r18); const allDayEvent_r13 = restoredCtx.$implicit; const ctx_r24 = ɵngcc0.ɵɵnextContext(3); return ctx_r24.eventClicked.emit({ event: allDayEvent_r13.event }); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, CalendarWeekViewComponent_div_2_div_5_div_2_div_4_Template, 1, 2, \"div\", 21);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const allDayEvent_r13 = ctx.$implicit;\n const ctx_r12 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"width\", 100 / ctx_r12.days.length * allDayEvent_r13.span, \"%\")(\"margin-left\", 100 / ctx_r12.days.length * allDayEvent_r13.offset, \"%\");\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", allDayEvent_r13.event.draggable && ctx_r12.allDayEventResizes.size === 0)(\"cal-starts-within-week\", !allDayEvent_r13.startsBeforeWeek)(\"cal-ends-within-week\", !allDayEvent_r13.endsAfterWeek);\n ɵngcc0.ɵɵproperty(\"ngClass\", allDayEvent_r13.event == null ? null : allDayEvent_r13.event.cssClass)(\"resizeSnapGrid\", ɵngcc0.ɵɵpureFunction2(26, _c10, ctx_r12.dayColumnWidth, ctx_r12.dayColumnWidth))(\"validateResize\", ctx_r12.validateResize)(\"dropData\", ɵngcc0.ɵɵpureFunction2(29, _c11, allDayEvent_r13.event, ctx_r12.calendarId))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(32, _c5, allDayEvent_r13.event.draggable && ctx_r12.allDayEventResizes.size === 0, !ctx_r12.snapDraggedEvents && allDayEvent_r13.event.draggable && ctx_r12.allDayEventResizes.size === 0))(\"dragSnapGrid\", ctx_r12.snapDraggedEvents ? ɵngcc0.ɵɵpureFunction1(35, _c12, ctx_r12.dayColumnWidth) : ɵngcc0.ɵɵpureFunction0(37, _c13))(\"validateDrag\", ctx_r12.validateDrag);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", (allDayEvent_r13.event == null ? null : allDayEvent_r13.event.resizable == null ? null : allDayEvent_r13.event.resizable.beforeStart) && !allDayEvent_r13.startsBeforeWeek);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"weekEvent\", allDayEvent_r13)(\"tooltipPlacement\", ctx_r12.tooltipPlacement)(\"tooltipTemplate\", ctx_r12.tooltipTemplate)(\"tooltipAppendToBody\", ctx_r12.tooltipAppendToBody)(\"customTemplate\", ctx_r12.eventTemplate)(\"eventTitleTemplate\", ctx_r12.eventTitleTemplate)(\"eventActionsTemplate\", ctx_r12.eventActionsTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (allDayEvent_r13.event == null ? null : allDayEvent_r13.event.resizable == null ? null : allDayEvent_r13.event.resizable.afterEnd) && !allDayEvent_r13.endsAfterWeek);\n} }\nfunction CalendarWeekViewComponent_div_2_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 14, 15);\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewComponent_div_2_div_5_div_2_Template, 5, 38, \"div\", 16);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const eventRow_r10 = ctx.$implicit;\n const ctx_r6 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", eventRow_r10.row)(\"ngForTrackBy\", ctx_r6.trackByDayOrWeekEvent);\n} }\nfunction CalendarWeekViewComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r26 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 8, 9);\n ɵngcc0.ɵɵlistener(\"dragEnter\", function CalendarWeekViewComponent_div_2_Template_div_dragEnter_0_listener() { ɵngcc0.ɵɵrestoreView(_r26); const ctx_r25 = ɵngcc0.ɵɵnextContext(); return ctx_r25.eventDragEnter = ctx_r25.eventDragEnter + 1; })(\"dragLeave\", function CalendarWeekViewComponent_div_2_Template_div_dragLeave_0_listener() { ɵngcc0.ɵɵrestoreView(_r26); const ctx_r27 = ɵngcc0.ɵɵnextContext(); return ctx_r27.eventDragEnter = ctx_r27.eventDragEnter - 1; });\n ɵngcc0.ɵɵelementStart(2, \"div\", 5);\n ɵngcc0.ɵɵelement(3, \"div\", 10);\n ɵngcc0.ɵɵtemplate(4, CalendarWeekViewComponent_div_2_div_4_Template, 1, 0, \"div\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, CalendarWeekViewComponent_div_2_div_5_Template, 3, 2, \"div\", 12);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r0.allDayEventsLabelTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.days)(\"ngForTrackBy\", ctx_r0.trackByWeekDayHeaderDate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r0.view.allDayEventRows)(\"ngForTrackBy\", ctx_r0.trackByIndex);\n} }\nfunction CalendarWeekViewComponent_div_4_div_1_mwl_calendar_week_view_hour_segment_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"mwl-calendar-week-view-hour-segment\", 28);\n} if (rf & 2) {\n const segment_r32 = ctx.$implicit;\n const ctx_r31 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r31.hourSegmentHeight, \"px\");\n ɵngcc0.ɵɵproperty(\"segment\", segment_r32)(\"segmentHeight\", ctx_r31.hourSegmentHeight)(\"locale\", ctx_r31.locale)(\"customTemplate\", ctx_r31.hourSegmentTemplate)(\"isTimeLabel\", true);\n} }\nfunction CalendarWeekViewComponent_div_4_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 26);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewComponent_div_4_div_1_mwl_calendar_week_view_hour_segment_1_Template, 1, 7, \"mwl-calendar-week-view-hour-segment\", 27);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const hour_r29 = ctx.$implicit;\n const odd_r30 = ctx.odd;\n const ctx_r28 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"cal-hour-odd\", odd_r30);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", hour_r29.segments)(\"ngForTrackBy\", ctx_r28.trackByHourSegment);\n} }\nfunction CalendarWeekViewComponent_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 24);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewComponent_div_4_div_1_Template, 2, 4, \"div\", 25);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r1.view.hourColumns[0].hours)(\"ngForTrackBy\", ctx_r1.trackByHour);\n} }\nconst _c14 = function () { return { left: true, top: true }; };\nfunction CalendarWeekViewComponent_div_7_div_1_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 22);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c14));\n} }\nconst _c15 = function () { return { right: true, bottom: true }; };\nfunction CalendarWeekViewComponent_div_7_div_1_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 23);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c15));\n} }\nconst _c16 = function (a0, a1, a2, a3) { return { left: a0, right: a1, top: a2, bottom: a3 }; };\nfunction CalendarWeekViewComponent_div_7_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r41 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 31, 18);\n ɵngcc0.ɵɵlistener(\"resizeStart\", function CalendarWeekViewComponent_div_7_div_1_Template_div_resizeStart_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r40 = ɵngcc0.ɵɵnextContext(2); const _r2 = ɵngcc0.ɵɵreference(6); return ctx_r40.timeEventResizeStarted(_r2, timeEvent_r36, $event); })(\"resizing\", function CalendarWeekViewComponent_div_7_div_1_Template_div_resizing_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r42 = ɵngcc0.ɵɵnextContext(2); return ctx_r42.timeEventResizing(timeEvent_r36, $event); })(\"resizeEnd\", function CalendarWeekViewComponent_div_7_div_1_Template_div_resizeEnd_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r43 = ɵngcc0.ɵɵnextContext(2); return ctx_r43.timeEventResizeEnded(timeEvent_r36); })(\"dragStart\", function CalendarWeekViewComponent_div_7_div_1_Template_div_dragStart_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const _r37 = ɵngcc0.ɵɵreference(1); const ctx_r44 = ɵngcc0.ɵɵnextContext(2); const _r2 = ɵngcc0.ɵɵreference(6); return ctx_r44.dragStarted(_r2, _r37, timeEvent_r36); })(\"dragging\", function CalendarWeekViewComponent_div_7_div_1_Template_div_dragging_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r45 = ɵngcc0.ɵɵnextContext(2); return ctx_r45.dragMove(timeEvent_r36, $event); })(\"dragEnd\", function CalendarWeekViewComponent_div_7_div_1_Template_div_dragEnd_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r46 = ɵngcc0.ɵɵnextContext(2); return ctx_r46.dragEnded(timeEvent_r36, $event, ctx_r46.dayColumnWidth, true); });\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewComponent_div_7_div_1_div_2_Template, 1, 2, \"div\", 19);\n ɵngcc0.ɵɵelementStart(3, \"mwl-calendar-week-view-event\", 32);\n ɵngcc0.ɵɵlistener(\"eventClicked\", function CalendarWeekViewComponent_div_7_div_1_Template_mwl_calendar_week_view_event_eventClicked_3_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r41); const timeEvent_r36 = restoredCtx.$implicit; const ctx_r47 = ɵngcc0.ɵɵnextContext(2); return ctx_r47.eventClicked.emit({ event: timeEvent_r36.event }); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, CalendarWeekViewComponent_div_7_div_1_div_4_Template, 1, 2, \"div\", 21);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const timeEvent_r36 = ctx.$implicit;\n const ctx_r34 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"top\", timeEvent_r36.top, \"px\")(\"height\", timeEvent_r36.height, \"px\")(\"left\", timeEvent_r36.left, \"%\")(\"width\", timeEvent_r36.width, \"%\");\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", timeEvent_r36.event.draggable && ctx_r34.timeEventResizes.size === 0)(\"cal-starts-within-day\", !timeEvent_r36.startsBeforeDay)(\"cal-ends-within-day\", !timeEvent_r36.endsAfterDay);\n ɵngcc0.ɵɵproperty(\"ngClass\", timeEvent_r36.event.cssClass)(\"hidden\", timeEvent_r36.height === 0 && timeEvent_r36.width === 0)(\"resizeSnapGrid\", ɵngcc0.ɵɵpureFunction4(34, _c16, ctx_r34.dayColumnWidth, ctx_r34.dayColumnWidth, ctx_r34.eventSnapSize || ctx_r34.hourSegmentHeight, ctx_r34.eventSnapSize || ctx_r34.hourSegmentHeight))(\"validateResize\", ctx_r34.validateResize)(\"allowNegativeResizes\", true)(\"dropData\", ɵngcc0.ɵɵpureFunction2(39, _c11, timeEvent_r36.event, ctx_r34.calendarId))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(42, _c5, timeEvent_r36.event.draggable && ctx_r34.timeEventResizes.size === 0, timeEvent_r36.event.draggable && ctx_r34.timeEventResizes.size === 0))(\"dragSnapGrid\", ctx_r34.snapDraggedEvents ? ɵngcc0.ɵɵpureFunction2(45, _c5, ctx_r34.dayColumnWidth, ctx_r34.eventSnapSize || ctx_r34.hourSegmentHeight) : ɵngcc0.ɵɵpureFunction0(48, _c13))(\"ghostDragEnabled\", !ctx_r34.snapDraggedEvents)(\"validateDrag\", ctx_r34.validateDrag);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", (timeEvent_r36.event == null ? null : timeEvent_r36.event.resizable == null ? null : timeEvent_r36.event.resizable.beforeStart) && !timeEvent_r36.startsBeforeDay);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"weekEvent\", timeEvent_r36)(\"tooltipPlacement\", ctx_r34.tooltipPlacement)(\"tooltipTemplate\", ctx_r34.tooltipTemplate)(\"tooltipAppendToBody\", ctx_r34.tooltipAppendToBody)(\"tooltipDisabled\", ctx_r34.dragActive || ctx_r34.timeEventResizes.size > 0)(\"customTemplate\", ctx_r34.eventTemplate)(\"eventTitleTemplate\", ctx_r34.eventTitleTemplate)(\"eventActionsTemplate\", ctx_r34.eventActionsTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (timeEvent_r36.event == null ? null : timeEvent_r36.event.resizable == null ? null : timeEvent_r36.event.resizable.afterEnd) && !timeEvent_r36.endsAfterDay);\n} }\nfunction CalendarWeekViewComponent_div_7_div_2_mwl_calendar_week_view_hour_segment_1_Template(rf, ctx) { if (rf & 1) {\n const _r53 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mwl-calendar-week-view-hour-segment\", 34);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarWeekViewComponent_div_7_div_2_mwl_calendar_week_view_hour_segment_1_Template_mwl_calendar_week_view_hour_segment_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r53); const segment_r51 = restoredCtx.$implicit; const ctx_r52 = ɵngcc0.ɵɵnextContext(3); return ctx_r52.hourSegmentClicked.emit({ date: segment_r51.date }); })(\"drop\", function CalendarWeekViewComponent_div_7_div_2_mwl_calendar_week_view_hour_segment_1_Template_mwl_calendar_week_view_hour_segment_drop_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r53); const segment_r51 = restoredCtx.$implicit; const ctx_r54 = ɵngcc0.ɵɵnextContext(3); return ctx_r54.eventDropped($event, segment_r51.date, false); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const segment_r51 = ctx.$implicit;\n const ctx_r50 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r50.hourSegmentHeight, \"px\");\n ɵngcc0.ɵɵproperty(\"segment\", segment_r51)(\"segmentHeight\", ctx_r50.hourSegmentHeight)(\"locale\", ctx_r50.locale)(\"customTemplate\", ctx_r50.hourSegmentTemplate)(\"dragOverClass\", !ctx_r50.dragActive || !ctx_r50.snapDraggedEvents ? \"cal-drag-over\" : null);\n} }\nfunction CalendarWeekViewComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 26);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewComponent_div_7_div_2_mwl_calendar_week_view_hour_segment_1_Template, 1, 7, \"mwl-calendar-week-view-hour-segment\", 33);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const hour_r48 = ctx.$implicit;\n const odd_r49 = ctx.odd;\n const ctx_r35 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"cal-hour-odd\", odd_r49);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", hour_r48.segments)(\"ngForTrackBy\", ctx_r35.trackByHourSegment);\n} }\nfunction CalendarWeekViewComponent_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 29);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewComponent_div_7_div_1_Template, 5, 49, \"div\", 30);\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewComponent_div_7_div_2_Template, 2, 4, \"div\", 25);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r33 = ctx.$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", column_r33.events)(\"ngForTrackBy\", ctx_r3.trackByDayOrWeekEvent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", column_r33.hours)(\"ngForTrackBy\", ctx_r3.trackByHour);\n} }\nfunction CalendarWeekViewHeaderComponent_ng_template_0_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarWeekViewHeaderComponent_ng_template_0_div_1_Template_div_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r10); const day_r8 = restoredCtx.$implicit; const dayHeaderClicked_r5 = ɵngcc0.ɵɵnextContext().dayHeaderClicked; return dayHeaderClicked_r5.emit({ day: day_r8 }); })(\"drop\", function CalendarWeekViewHeaderComponent_ng_template_0_div_1_Template_div_drop_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r10); const day_r8 = restoredCtx.$implicit; const eventDropped_r6 = ɵngcc0.ɵɵnextContext().eventDropped; return eventDropped_r6.emit({ event: $event.dropData.event, newStart: day_r8.date }); });\n ɵngcc0.ɵɵelementStart(1, \"b\");\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵpipe(3, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(4, \"br\");\n ɵngcc0.ɵɵelementStart(5, \"span\");\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵpipe(7, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const day_r8 = ctx.$implicit;\n const locale_r4 = ɵngcc0.ɵɵnextContext().locale;\n ɵngcc0.ɵɵclassProp(\"cal-past\", day_r8.isPast)(\"cal-today\", day_r8.isToday)(\"cal-future\", day_r8.isFuture)(\"cal-weekend\", day_r8.isWeekend);\n ɵngcc0.ɵɵproperty(\"ngClass\", day_r8.cssClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ɵngcc0.ɵɵpipeBind3(3, 11, day_r8.date, \"weekViewColumnHeader\", locale_r4));\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate(ɵngcc0.ɵɵpipeBind3(7, 15, day_r8.date, \"weekViewColumnSubHeader\", locale_r4));\n} }\nfunction CalendarWeekViewHeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewHeaderComponent_ng_template_0_div_1_Template, 8, 19, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const days_r3 = ctx.days;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", days_r3)(\"ngForTrackBy\", ctx_r1.trackByWeekDayHeaderDate);\n} }\nfunction CalendarWeekViewHeaderComponent_ng_template_2_Template(rf, ctx) { }\nconst _c17 = function (a0, a1, a2, a3) { return { days: a0, locale: a1, dayHeaderClicked: a2, eventDropped: a3 }; };\nfunction CalendarWeekViewEventComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r10 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarWeekViewEventComponent_ng_template_0_Template_div_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r10); const eventClicked_r5 = restoredCtx.eventClicked; return eventClicked_r5.emit(); });\n ɵngcc0.ɵɵpipe(1, \"calendarEventTitle\");\n ɵngcc0.ɵɵelement(2, \"mwl-calendar-event-actions\", 3);\n ɵngcc0.ɵɵtext(3, \" \");\n ɵngcc0.ɵɵelement(4, \"mwl-calendar-event-title\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const weekEvent_r3 = ctx.weekEvent;\n const tooltipPlacement_r4 = ctx.tooltipPlacement;\n const tooltipTemplate_r6 = ctx.tooltipTemplate;\n const tooltipAppendToBody_r7 = ctx.tooltipAppendToBody;\n const tooltipDisabled_r8 = ctx.tooltipDisabled;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"background-color\", weekEvent_r3.event.color == null ? null : weekEvent_r3.event.color.secondary)(\"border-color\", weekEvent_r3.event.color == null ? null : weekEvent_r3.event.color.primary);\n ɵngcc0.ɵɵproperty(\"mwlCalendarTooltip\", !tooltipDisabled_r8 ? ɵngcc0.ɵɵpipeBind3(1, 13, weekEvent_r3.event.title, \"weekTooltip\", weekEvent_r3.event) : \"\")(\"tooltipPlacement\", tooltipPlacement_r4)(\"tooltipEvent\", weekEvent_r3.event)(\"tooltipTemplate\", tooltipTemplate_r6)(\"tooltipAppendToBody\", tooltipAppendToBody_r7);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", weekEvent_r3.event)(\"customTemplate\", ctx_r1.eventActionsTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", weekEvent_r3.event)(\"customTemplate\", ctx_r1.eventTitleTemplate);\n} }\nfunction CalendarWeekViewEventComponent_ng_template_2_Template(rf, ctx) { }\nconst _c18 = function (a0, a1, a2, a3, a4, a5) { return { weekEvent: a0, tooltipPlacement: a1, eventClicked: a2, tooltipTemplate: a3, tooltipAppendToBody: a4, tooltipDisabled: a5 }; };\nfunction CalendarWeekViewHourSegmentComponent_ng_template_0_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵpipe(2, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext();\n const segment_r3 = ctx_r8.segment;\n const locale_r4 = ctx_r8.locale;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ɵngcc0.ɵɵpipeBind3(2, 1, segment_r3.date, \"weekViewHour\", locale_r4), \" \");\n} }\nfunction CalendarWeekViewHourSegmentComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵtemplate(1, CalendarWeekViewHourSegmentComponent_ng_template_0_div_1_Template, 3, 5, \"div\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const segment_r3 = ctx.segment;\n const segmentHeight_r5 = ctx.segmentHeight;\n const isTimeLabel_r6 = ctx.isTimeLabel;\n ɵngcc0.ɵɵstyleProp(\"height\", segmentHeight_r5, \"px\");\n ɵngcc0.ɵɵclassProp(\"cal-hour-start\", segment_r3.isStart)(\"cal-after-hour-start\", !segment_r3.isStart);\n ɵngcc0.ɵɵproperty(\"ngClass\", segment_r3.cssClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", isTimeLabel_r6);\n} }\nfunction CalendarWeekViewHourSegmentComponent_ng_template_2_Template(rf, ctx) { }\nconst _c19 = function (a0, a1, a2, a3) { return { segment: a0, locale: a1, segmentHeight: a2, isTimeLabel: a3 }; };\nfunction CalendarDayViewComponent_mwl_calendar_day_view_event_2_Template(rf, ctx) { if (rf & 1) {\n const _r6 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mwl-calendar-day-view-event\", 8);\n ɵngcc0.ɵɵlistener(\"eventClicked\", function CalendarDayViewComponent_mwl_calendar_day_view_event_2_Template_mwl_calendar_day_view_event_eventClicked_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r6); const event_r4 = restoredCtx.$implicit; const ctx_r5 = ɵngcc0.ɵɵnextContext(); return ctx_r5.eventClicked.emit({ event: event_r4 }); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const event_r4 = ctx.$implicit;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", !ctx_r0.snapDraggedEvents && event_r4.draggable);\n ɵngcc0.ɵɵproperty(\"ngClass\", event_r4.cssClass)(\"dayEvent\", ɵngcc0.ɵɵpureFunction1(12, _c0, event_r4))(\"tooltipPlacement\", ctx_r0.tooltipPlacement)(\"tooltipTemplate\", ctx_r0.tooltipTemplate)(\"tooltipAppendToBody\", ctx_r0.tooltipAppendToBody)(\"customTemplate\", ctx_r0.eventTemplate)(\"eventTitleTemplate\", ctx_r0.eventTitleTemplate)(\"eventActionsTemplate\", ctx_r0.eventActionsTemplate)(\"dropData\", ɵngcc0.ɵɵpureFunction2(14, _c11, event_r4, ctx_r0.calendarId))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(17, _c5, !ctx_r0.snapDraggedEvents && event_r4.draggable, !ctx_r0.snapDraggedEvents && event_r4.draggable));\n} }\nconst _c20 = function () { return { top: true }; };\nfunction CalendarDayViewComponent_div_6_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 14);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c20));\n} }\nconst _c21 = function () { return { bottom: true }; };\nfunction CalendarDayViewComponent_div_6_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 15);\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"resizeEdges\", ɵngcc0.ɵɵpureFunction0(1, _c21));\n} }\nconst _c22 = function (a0, a1) { return { top: a0, bottom: a1 }; };\nconst _c23 = function (a0) { return { y: a0 }; };\nfunction CalendarDayViewComponent_div_6_Template(rf, ctx) { if (rf & 1) {\n const _r12 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 9, 10);\n ɵngcc0.ɵɵlistener(\"resizeStart\", function CalendarDayViewComponent_div_6_Template_div_resizeStart_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r12); const dayEvent_r7 = restoredCtx.$implicit; const ctx_r11 = ɵngcc0.ɵɵnextContext(); const _r1 = ɵngcc0.ɵɵreference(4); return ctx_r11.resizeStarted(dayEvent_r7, $event, _r1); })(\"resizing\", function CalendarDayViewComponent_div_6_Template_div_resizing_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r12); const dayEvent_r7 = restoredCtx.$implicit; const ctx_r13 = ɵngcc0.ɵɵnextContext(); return ctx_r13.resizing(dayEvent_r7, $event); })(\"resizeEnd\", function CalendarDayViewComponent_div_6_Template_div_resizeEnd_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r12); const dayEvent_r7 = restoredCtx.$implicit; const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.resizeEnded(dayEvent_r7); })(\"dragStart\", function CalendarDayViewComponent_div_6_Template_div_dragStart_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const _r8 = ɵngcc0.ɵɵreference(1); const ctx_r15 = ɵngcc0.ɵɵnextContext(); const _r1 = ɵngcc0.ɵɵreference(4); return ctx_r15.dragStarted(_r8, _r1); })(\"dragging\", function CalendarDayViewComponent_div_6_Template_div_dragging_0_listener() { ɵngcc0.ɵɵrestoreView(_r12); const ctx_r16 = ɵngcc0.ɵɵnextContext(); return ctx_r16.dragMove(); })(\"dragEnd\", function CalendarDayViewComponent_div_6_Template_div_dragEnd_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r12); const dayEvent_r7 = restoredCtx.$implicit; const ctx_r17 = ɵngcc0.ɵɵnextContext(); return ctx_r17.dragEnded(dayEvent_r7, $event); });\n ɵngcc0.ɵɵtemplate(2, CalendarDayViewComponent_div_6_div_2_Template, 1, 2, \"div\", 11);\n ɵngcc0.ɵɵelementStart(3, \"mwl-calendar-day-view-event\", 12);\n ɵngcc0.ɵɵlistener(\"eventClicked\", function CalendarDayViewComponent_div_6_Template_mwl_calendar_day_view_event_eventClicked_3_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r12); const dayEvent_r7 = restoredCtx.$implicit; const ctx_r18 = ɵngcc0.ɵɵnextContext(); return ctx_r18.eventClicked.emit({ event: dayEvent_r7.event }); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(4, CalendarDayViewComponent_div_6_div_4_Template, 1, 2, \"div\", 13);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dayEvent_r7 = ctx.$implicit;\n const ctx_r2 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"margin-top\", dayEvent_r7.top, \"px\")(\"height\", dayEvent_r7.height, \"px\")(\"margin-left\", dayEvent_r7.left + 70, \"px\")(\"width\", dayEvent_r7.width - 1, \"px\");\n ɵngcc0.ɵɵclassProp(\"cal-draggable\", dayEvent_r7.event.draggable)(\"cal-starts-within-day\", !dayEvent_r7.startsBeforeDay)(\"cal-ends-within-day\", !dayEvent_r7.endsAfterDay);\n ɵngcc0.ɵɵproperty(\"ngClass\", dayEvent_r7.event.cssClass)(\"resizeSnapGrid\", ɵngcc0.ɵɵpureFunction2(30, _c22, ctx_r2.eventSnapSize || ctx_r2.hourSegmentHeight, ctx_r2.eventSnapSize || ctx_r2.hourSegmentHeight))(\"validateResize\", ctx_r2.validateResize)(\"dropData\", ɵngcc0.ɵɵpureFunction2(33, _c11, dayEvent_r7.event, ctx_r2.calendarId))(\"dragAxis\", ɵngcc0.ɵɵpureFunction2(36, _c5, !ctx_r2.snapDraggedEvents && dayEvent_r7.event.draggable && ctx_r2.currentResizes.size === 0, dayEvent_r7.event.draggable && ctx_r2.currentResizes.size === 0))(\"dragSnapGrid\", ctx_r2.snapDraggedEvents ? ɵngcc0.ɵɵpureFunction1(39, _c23, ctx_r2.eventSnapSize || ctx_r2.hourSegmentHeight) : ɵngcc0.ɵɵpureFunction0(41, _c13))(\"validateDrag\", ctx_r2.validateDrag);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", (dayEvent_r7.event == null ? null : dayEvent_r7.event.resizable == null ? null : dayEvent_r7.event.resizable.beforeStart) && !dayEvent_r7.startsBeforeDay);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"dayEvent\", dayEvent_r7)(\"tooltipPlacement\", ctx_r2.tooltipPlacement)(\"tooltipTemplate\", ctx_r2.tooltipTemplate)(\"tooltipAppendToBody\", ctx_r2.tooltipAppendToBody)(\"customTemplate\", ctx_r2.eventTemplate)(\"eventTitleTemplate\", ctx_r2.eventTitleTemplate)(\"eventActionsTemplate\", ctx_r2.eventActionsTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (dayEvent_r7.event == null ? null : dayEvent_r7.event.resizable == null ? null : dayEvent_r7.event.resizable.afterEnd) && !dayEvent_r7.endsAfterDay);\n} }\nfunction CalendarDayViewComponent_div_7_mwl_calendar_day_view_hour_segment_1_Template(rf, ctx) { if (rf & 1) {\n const _r23 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"mwl-calendar-day-view-hour-segment\", 18);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarDayViewComponent_div_7_mwl_calendar_day_view_hour_segment_1_Template_mwl_calendar_day_view_hour_segment_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r23); const segment_r21 = restoredCtx.$implicit; const ctx_r22 = ɵngcc0.ɵɵnextContext(2); return ctx_r22.hourSegmentClicked.emit({ date: segment_r21.date }); })(\"drop\", function CalendarDayViewComponent_div_7_mwl_calendar_day_view_hour_segment_1_Template_mwl_calendar_day_view_hour_segment_drop_0_listener($event) { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r23); const segment_r21 = restoredCtx.$implicit; const ctx_r24 = ɵngcc0.ɵɵnextContext(2); return ctx_r24.eventDropped($event, segment_r21.date, false); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const segment_r21 = ctx.$implicit;\n const ctx_r20 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r20.hourSegmentHeight, \"px\");\n ɵngcc0.ɵɵproperty(\"segment\", segment_r21)(\"segmentHeight\", ctx_r20.hourSegmentHeight)(\"locale\", ctx_r20.locale)(\"customTemplate\", ctx_r20.hourSegmentTemplate);\n} }\nfunction CalendarDayViewComponent_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 16);\n ɵngcc0.ɵɵtemplate(1, CalendarDayViewComponent_div_7_mwl_calendar_day_view_hour_segment_1_Template, 1, 6, \"mwl-calendar-day-view-hour-segment\", 17);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const hour_r19 = ctx.$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"min-width\", (ctx_r3.view == null ? null : ctx_r3.view.width) + 70, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", hour_r19.segments)(\"ngForTrackBy\", ctx_r3.trackByHourSegment);\n} }\nfunction CalendarDayViewHourSegmentComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 2)(1, \"div\", 3);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵpipe(3, \"calendarDate\");\n ɵngcc0.ɵɵelementEnd()();\n} if (rf & 2) {\n const segment_r3 = ctx.segment;\n const locale_r4 = ctx.locale;\n const segmentHeight_r5 = ctx.segmentHeight;\n ɵngcc0.ɵɵstyleProp(\"height\", segmentHeight_r5, \"px\");\n ɵngcc0.ɵɵclassProp(\"cal-hour-start\", segment_r3.isStart)(\"cal-after-hour-start\", !segment_r3.isStart);\n ɵngcc0.ɵɵproperty(\"ngClass\", segment_r3.cssClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ɵngcc0.ɵɵpipeBind3(3, 8, segment_r3.date, \"dayViewHour\", locale_r4), \" \");\n} }\nfunction CalendarDayViewHourSegmentComponent_ng_template_2_Template(rf, ctx) { }\nconst _c24 = function (a0, a1, a2) { return { segment: a0, locale: a1, segmentHeight: a2 }; };\nfunction CalendarDayViewEventComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n const _r9 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 2);\n ɵngcc0.ɵɵlistener(\"mwlClick\", function CalendarDayViewEventComponent_ng_template_0_Template_div_mwlClick_0_listener() { const restoredCtx = ɵngcc0.ɵɵrestoreView(_r9); const eventClicked_r5 = restoredCtx.eventClicked; return eventClicked_r5.emit(); });\n ɵngcc0.ɵɵpipe(1, \"calendarEventTitle\");\n ɵngcc0.ɵɵelement(2, \"mwl-calendar-event-actions\", 3);\n ɵngcc0.ɵɵtext(3, \" \");\n ɵngcc0.ɵɵelement(4, \"mwl-calendar-event-title\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dayEvent_r3 = ctx.dayEvent;\n const tooltipPlacement_r4 = ctx.tooltipPlacement;\n const tooltipTemplate_r6 = ctx.tooltipTemplate;\n const tooltipAppendToBody_r7 = ctx.tooltipAppendToBody;\n const ctx_r1 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"background-color\", dayEvent_r3.event.color == null ? null : dayEvent_r3.event.color.secondary)(\"border-color\", dayEvent_r3.event.color == null ? null : dayEvent_r3.event.color.primary);\n ɵngcc0.ɵɵproperty(\"mwlCalendarTooltip\", ɵngcc0.ɵɵpipeBind3(1, 13, dayEvent_r3.event.title, \"dayTooltip\", dayEvent_r3.event))(\"tooltipPlacement\", tooltipPlacement_r4)(\"tooltipEvent\", dayEvent_r3.event)(\"tooltipTemplate\", tooltipTemplate_r6)(\"tooltipAppendToBody\", tooltipAppendToBody_r7);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", dayEvent_r3.event)(\"customTemplate\", ctx_r1.eventActionsTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"event\", dayEvent_r3.event)(\"customTemplate\", ctx_r1.eventTitleTemplate);\n} }\nfunction CalendarDayViewEventComponent_ng_template_2_Template(rf, ctx) { }\nconst _c25 = function (a0, a1, a2, a3, a4) { return { dayEvent: a0, tooltipPlacement: a1, eventClicked: a2, tooltipTemplate: a3, tooltipAppendToBody: a4 }; };\nexport { DAYS_OF_WEEK } from 'calendar-utils';\nimport { trigger, style, transition, animate } from '@angular/animations';\nimport { __rest } from 'tslib';\nimport { DOCUMENT, formatDate, CommonModule } from '@angular/common';\nimport { ResizableModule } from 'angular-resizable-element';\nimport { DragAndDropModule } from 'angular-draggable-droppable';\nimport 'rxjs';\nimport { Component, Input, Directive, HostListener, Injector, ComponentFactoryResolver, ViewContainerRef, ElementRef, Inject, Renderer2, Output, EventEmitter, Injectable, Pipe, LOCALE_ID, InjectionToken, NgModule, ChangeDetectorRef } from '@angular/core';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst validateEvents$1 = (events) => {\n /** @type {?} */\n const warn = (...args) => console.warn('angular-calendar', ...args);\n return validateEvents(events, warn);\n};\n/**\n * @param {?} outer\n * @param {?} inner\n * @return {?}\n */\nfunction isInside(outer, inner) {\n return (Math.floor(outer.left) <= Math.ceil(inner.left) &&\n Math.floor(inner.left) <= Math.ceil(outer.right) &&\n Math.floor(outer.left) <= Math.ceil(inner.right) &&\n Math.floor(inner.right) <= Math.ceil(outer.right) &&\n Math.floor(outer.top) <= Math.ceil(inner.top) &&\n Math.floor(inner.top) <= Math.ceil(outer.bottom) &&\n Math.floor(outer.top) <= Math.ceil(inner.bottom) &&\n Math.floor(inner.bottom) <= Math.ceil(outer.bottom));\n}\n/**\n * @param {?} amount\n * @param {?} precision\n * @return {?}\n */\nfunction roundToNearest(amount, precision) {\n return Math.round(amount / precision) * precision;\n}\n/** @type {?} */\nconst trackByEventId = (index, event) => event.id ? event.id : event;\n/** @type {?} */\nconst trackByWeekDayHeaderDate = (index, day) => day.date.toISOString();\n/** @type {?} */\nconst trackByIndex = (index) => index;\n/** @type {?} */\nconst trackByHourSegment = (index, segment) => segment.date.toISOString();\n/** @type {?} */\nconst trackByHour = (index, hour) => hour.segments[0].date.toISOString();\n/** @type {?} */\nconst trackByDayOrWeekEvent = (index, weekEvent) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\n/** @type {?} */\nconst MINUTES_IN_HOUR = 60;\n/**\n * @param {?} movedY\n * @param {?} hourSegments\n * @param {?} hourSegmentHeight\n * @param {?} eventSnapSize\n * @return {?}\n */\nfunction getMinutesMoved(movedY, hourSegments, hourSegmentHeight, eventSnapSize) {\n /** @type {?} */\n const draggedInPixelsSnapSize = roundToNearest(movedY, eventSnapSize || hourSegmentHeight);\n /** @type {?} */\n const pixelAmountInMinutes = MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight);\n return draggedInPixelsSnapSize * pixelAmountInMinutes;\n}\n/**\n * @param {?} hourSegments\n * @param {?} hourSegmentHeight\n * @return {?}\n */\nfunction getMinimumEventHeightInMinutes(hourSegments, hourSegmentHeight) {\n return (MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight)) * 30;\n}\n/**\n * @param {?} dateAdapter\n * @param {?} event\n * @param {?} minimumMinutes\n * @return {?}\n */\nfunction getDefaultEventEnd(dateAdapter, event, minimumMinutes) {\n if (event.end) {\n return event.end;\n }\n else {\n return dateAdapter.addMinutes(event.start, minimumMinutes);\n }\n}\n/**\n * @param {?} dateAdapter\n * @param {?} date\n * @param {?} days\n * @param {?} excluded\n * @return {?}\n */\nfunction addDaysWithExclusions(dateAdapter, date, days, excluded) {\n /** @type {?} */\n let daysCounter = 0;\n /** @type {?} */\n let daysToAdd = 0;\n /** @type {?} */\n const changeDays = days < 0 ? dateAdapter.subDays : dateAdapter.addDays;\n /** @type {?} */\n let result = date;\n while (daysToAdd <= Math.abs(days)) {\n result = changeDays(date, daysCounter);\n /** @type {?} */\n const day = dateAdapter.getDay(result);\n if (excluded.indexOf(day) === -1) {\n daysToAdd++;\n }\n daysCounter++;\n }\n return result;\n}\n/**\n * @param {?} newStart\n * @param {?} newEnd\n * @param {?} period\n * @return {?}\n */\nfunction isDraggedWithinPeriod(newStart, newEnd, period) {\n /** @type {?} */\n const end = newEnd || newStart;\n return ((period.start <= newStart && newStart <= period.end) ||\n (period.start <= end && end <= period.end));\n}\n/**\n * @param {?} dropEvent\n * @param {?} date\n * @param {?} allDay\n * @param {?} calendarId\n * @return {?}\n */\nfunction shouldFireDroppedEvent(dropEvent, date, allDay, calendarId) {\n return (dropEvent.dropData &&\n dropEvent.dropData.event &&\n (dropEvent.dropData.calendarId !== calendarId ||\n (dropEvent.dropData.event.allDay && !allDay) ||\n (!dropEvent.dropData.event.allDay && allDay)));\n}\n/**\n * @param {?} dateAdapter\n * @param {?} viewDate\n * @param {?} weekStartsOn\n * @param {?=} excluded\n * @param {?=} daysInWeek\n * @return {?}\n */\nfunction getWeekViewPeriod(dateAdapter, viewDate, weekStartsOn, excluded = [], daysInWeek) {\n /** @type {?} */\n let viewStart = daysInWeek\n ? dateAdapter.startOfDay(viewDate)\n : dateAdapter.startOfWeek(viewDate, { weekStartsOn });\n if (excluded.indexOf(dateAdapter.getDay(viewStart)) > -1) {\n viewStart = dateAdapter.subDays(addDaysWithExclusions(dateAdapter, viewStart, 1, excluded), 1);\n }\n if (daysInWeek) {\n /** @type {?} */\n const viewEnd = dateAdapter.endOfDay(addDaysWithExclusions(dateAdapter, viewStart, daysInWeek - 1, excluded));\n return { viewStart, viewEnd };\n }\n else {\n /** @type {?} */\n let viewEnd = dateAdapter.endOfWeek(viewDate, { weekStartsOn });\n if (excluded.indexOf(dateAdapter.getDay(viewEnd)) > -1) {\n viewEnd = dateAdapter.addDays(addDaysWithExclusions(dateAdapter, viewEnd, -1, excluded), 1);\n }\n return { viewStart, viewEnd };\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarEventActionsComponent {\n constructor() {\n this.trackByIndex = trackByIndex;\n }\n}\nCalendarEventActionsComponent.ɵfac = function CalendarEventActionsComponent_Factory(t) { return new (t || CalendarEventActionsComponent)(); };\nCalendarEventActionsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarEventActionsComponent, selectors: [[\"mwl-calendar-event-actions\"]], inputs: { event: \"event\", customTemplate: \"customTemplate\" }, decls: 3, vars: 4, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"class\", \"cal-event-actions\", 4, \"ngIf\"], [1, \"cal-event-actions\"], [\"class\", \"cal-event-action\", \"href\", \"javascript:;\", 3, \"ngClass\", \"innerHtml\", \"mwlClick\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"href\", \"javascript:;\", 1, \"cal-event-action\", 3, \"ngClass\", \"innerHtml\", \"mwlClick\"]], template: function CalendarEventActionsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarEventActionsComponent_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarEventActionsComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(2, _c0, ctx.event));\n } }, directives: function () { return [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc1.NgClass, ClickDirective, ɵngcc1.NgTemplateOutlet]; }, encapsulation: 2 });\nCalendarEventActionsComponent.propDecorators = {\n event: [{ type: Input }],\n customTemplate: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarEventActionsComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-event-actions',\n template: `\n \n \n \n
            \n \n \n \n \n `\n }]\n }], function () { return []; }, { event: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarEventTitleComponent {\n}\nCalendarEventTitleComponent.ɵfac = function CalendarEventTitleComponent_Factory(t) { return new (t || CalendarEventTitleComponent)(); };\nCalendarEventTitleComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarEventTitleComponent, selectors: [[\"mwl-calendar-event-title\"]], inputs: { event: \"event\", customTemplate: \"customTemplate\", view: \"view\" }, decls: 3, vars: 5, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-event-title\", 3, \"innerHTML\"]], template: function CalendarEventTitleComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarEventTitleComponent_ng_template_0_Template, 2, 5, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarEventTitleComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c1, ctx.event, ctx.view));\n } }, directives: function () { return [ɵngcc1.NgTemplateOutlet]; }, pipes: function () { return [CalendarEventTitlePipe]; }, encapsulation: 2 });\nCalendarEventTitleComponent.propDecorators = {\n event: [{ type: Input }],\n customTemplate: [{ type: Input }],\n view: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarEventTitleComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-event-title',\n template: `\n \n \n \n \n \n \n `\n }]\n }], null, { event: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }], view: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarTooltipWindowComponent {\n}\nCalendarTooltipWindowComponent.ɵfac = function CalendarTooltipWindowComponent_Factory(t) { return new (t || CalendarTooltipWindowComponent)(); };\nCalendarTooltipWindowComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarTooltipWindowComponent, selectors: [[\"mwl-calendar-tooltip-window\"]], inputs: { contents: \"contents\", placement: \"placement\", event: \"event\", customTemplate: \"customTemplate\" }, decls: 3, vars: 6, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-tooltip\", 3, \"ngClass\"], [1, \"cal-tooltip-arrow\"], [1, \"cal-tooltip-inner\", 3, \"innerHtml\"]], template: function CalendarTooltipWindowComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarTooltipWindowComponent_ng_template_0_Template, 3, 2, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarTooltipWindowComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(2, _c2, ctx.contents, ctx.placement, ctx.event));\n } }, directives: [ɵngcc1.NgClass, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\nCalendarTooltipWindowComponent.propDecorators = {\n contents: [{ type: Input }],\n placement: [{ type: Input }],\n event: [{ type: Input }],\n customTemplate: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarTooltipWindowComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-tooltip-window',\n template: `\n \n
            \n
            \n
            \n
            \n \n \n \n `\n }]\n }], null, { contents: [{\n type: Input\n }], placement: [{\n type: Input\n }], event: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\nclass CalendarTooltipDirective {\n /**\n * @param {?} elementRef\n * @param {?} injector\n * @param {?} renderer\n * @param {?} componentFactoryResolver\n * @param {?} viewContainerRef\n * @param {?} document\n */\n constructor(elementRef, injector, renderer, componentFactoryResolver, viewContainerRef, document //tslint:disable-line\n //tslint:disable-line\n ) {\n this.elementRef = elementRef;\n this.injector = injector;\n this.renderer = renderer;\n this.viewContainerRef = viewContainerRef;\n this.document //tslint:disable-line\n = document;\n this.placement = 'auto';\n this.tooltipFactory = componentFactoryResolver.resolveComponentFactory(CalendarTooltipWindowComponent);\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this.hide();\n }\n /**\n * @return {?}\n */\n onMouseOver() {\n this.show();\n }\n /**\n * @return {?}\n */\n onMouseOut() {\n this.hide();\n }\n /**\n * @return {?}\n */\n show() {\n if (!this.tooltipRef && this.contents) {\n this.tooltipRef = this.viewContainerRef.createComponent(this.tooltipFactory, 0, this.injector, []);\n this.tooltipRef.instance.contents = this.contents;\n this.tooltipRef.instance.customTemplate = this.customTemplate;\n this.tooltipRef.instance.event = this.event;\n if (this.appendToBody) {\n this.document.body.appendChild(this.tooltipRef.location.nativeElement);\n }\n requestAnimationFrame(() => {\n this.positionTooltip();\n });\n }\n }\n /**\n * @return {?}\n */\n hide() {\n if (this.tooltipRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.tooltipRef.hostView));\n this.tooltipRef = null;\n }\n }\n /**\n * @param {?=} previousPosition\n * @return {?}\n */\n positionTooltip(previousPosition) {\n if (this.tooltipRef) {\n this.tooltipRef.changeDetectorRef.detectChanges();\n this.tooltipRef.instance.placement = positionElements(this.elementRef.nativeElement, this.tooltipRef.location.nativeElement.children[0], this.placement, this.appendToBody);\n // keep re-positioning the tooltip until the arrow position doesn't make a difference\n if (previousPosition !== this.tooltipRef.instance.placement) {\n this.positionTooltip(this.tooltipRef.instance.placement);\n }\n }\n }\n}\nCalendarTooltipDirective.ɵfac = function CalendarTooltipDirective_Factory(t) { return new (t || CalendarTooltipDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };\nCalendarTooltipDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CalendarTooltipDirective, selectors: [[\"\", \"mwlCalendarTooltip\", \"\"]], hostBindings: function CalendarTooltipDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"mouseenter\", function CalendarTooltipDirective_mouseenter_HostBindingHandler() { return ctx.onMouseOver(); })(\"mouseleave\", function CalendarTooltipDirective_mouseleave_HostBindingHandler() { return ctx.onMouseOut(); });\n } }, inputs: { placement: [\"tooltipPlacement\", \"placement\"], contents: [\"mwlCalendarTooltip\", \"contents\"], customTemplate: [\"tooltipTemplate\", \"customTemplate\"], event: [\"tooltipEvent\", \"event\"], appendToBody: [\"tooltipAppendToBody\", \"appendToBody\"] } });\n/** @nocollapse */\nCalendarTooltipDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Injector },\n { type: Renderer2 },\n { type: ComponentFactoryResolver },\n { type: ViewContainerRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\nCalendarTooltipDirective.propDecorators = {\n contents: [{ type: Input, args: ['mwlCalendarTooltip',] }],\n placement: [{ type: Input, args: ['tooltipPlacement',] }],\n customTemplate: [{ type: Input, args: ['tooltipTemplate',] }],\n event: [{ type: Input, args: ['tooltipEvent',] }],\n appendToBody: [{ type: Input, args: ['tooltipAppendToBody',] }],\n onMouseOver: [{ type: HostListener, args: ['mouseenter',] }],\n onMouseOut: [{ type: HostListener, args: ['mouseleave',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarTooltipDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlCalendarTooltip]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Injector }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ComponentFactoryResolver }, { type: ɵngcc0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { placement: [{\n type: Input,\n args: ['tooltipPlacement']\n }], \n /**\n * @return {?}\n */\n onMouseOver: [{\n type: HostListener,\n args: ['mouseenter']\n }], \n /**\n * @return {?}\n */\n onMouseOut: [{\n type: HostListener,\n args: ['mouseleave']\n }], contents: [{\n type: Input,\n args: ['mwlCalendarTooltip']\n }], customTemplate: [{\n type: Input,\n args: ['tooltipTemplate']\n }], event: [{\n type: Input,\n args: ['tooltipEvent']\n }], appendToBody: [{\n type: Input,\n args: ['tooltipAppendToBody']\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nclass DateAdapter {\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @enum {string} */\nconst CalendarView = {\n Month: 'month',\n Week: 'week',\n Day: 'day',\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Change the view date to the previous view. For example:\n *\n * ```typescript\n * \n * Previous\n * \n * ```\n */\nclass CalendarPreviousViewDirective {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n /**\n * Days to skip when going back by 1 day\n */\n this.excludeDays = [];\n /**\n * Called when the view date is changed\n */\n this.viewDateChange = new EventEmitter();\n }\n /**\n * @hidden\n * @return {?}\n */\n onClick() {\n /** @type {?} */\n const subFn = {\n day: this.dateAdapter.subDays,\n week: this.dateAdapter.subWeeks,\n month: this.dateAdapter.subMonths\n }[this.view];\n if (this.view === CalendarView.Day) {\n this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, -1, this.excludeDays));\n }\n else if (this.view === CalendarView.Week && this.daysInWeek) {\n this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, -this.daysInWeek, this.excludeDays));\n }\n else {\n this.viewDateChange.emit(subFn(this.viewDate, 1));\n }\n }\n}\nCalendarPreviousViewDirective.ɵfac = function CalendarPreviousViewDirective_Factory(t) { return new (t || CalendarPreviousViewDirective)(ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarPreviousViewDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CalendarPreviousViewDirective, selectors: [[\"\", \"mwlCalendarPreviousView\", \"\"]], hostBindings: function CalendarPreviousViewDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CalendarPreviousViewDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } }, inputs: { excludeDays: \"excludeDays\", view: \"view\", viewDate: \"viewDate\", daysInWeek: \"daysInWeek\" }, outputs: { viewDateChange: \"viewDateChange\" } });\n/** @nocollapse */\nCalendarPreviousViewDirective.ctorParameters = () => [\n { type: DateAdapter }\n];\nCalendarPreviousViewDirective.propDecorators = {\n view: [{ type: Input }],\n viewDate: [{ type: Input }],\n excludeDays: [{ type: Input }],\n daysInWeek: [{ type: Input }],\n viewDateChange: [{ type: Output }],\n onClick: [{ type: HostListener, args: ['click',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarPreviousViewDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlCalendarPreviousView]'\n }]\n }], function () { return [{ type: DateAdapter }]; }, { excludeDays: [{\n type: Input\n }], viewDateChange: [{\n type: Output\n }], \n /**\n * @hidden\n * @return {?}\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], view: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], daysInWeek: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Change the view date to the next view. For example:\n *\n * ```typescript\n * \n * Next\n * \n * ```\n */\nclass CalendarNextViewDirective {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n /**\n * Days to skip when going forward by 1 day\n */\n this.excludeDays = [];\n /**\n * Called when the view date is changed\n */\n this.viewDateChange = new EventEmitter();\n }\n /**\n * @hidden\n * @return {?}\n */\n onClick() {\n /** @type {?} */\n const addFn = {\n day: this.dateAdapter.addDays,\n week: this.dateAdapter.addWeeks,\n month: this.dateAdapter.addMonths\n }[this.view];\n if (this.view === CalendarView.Day) {\n this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, 1, this.excludeDays));\n }\n else if (this.view === CalendarView.Week && this.daysInWeek) {\n this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, this.daysInWeek, this.excludeDays));\n }\n else {\n this.viewDateChange.emit(addFn(this.viewDate, 1));\n }\n }\n}\nCalendarNextViewDirective.ɵfac = function CalendarNextViewDirective_Factory(t) { return new (t || CalendarNextViewDirective)(ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarNextViewDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CalendarNextViewDirective, selectors: [[\"\", \"mwlCalendarNextView\", \"\"]], hostBindings: function CalendarNextViewDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CalendarNextViewDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } }, inputs: { excludeDays: \"excludeDays\", view: \"view\", viewDate: \"viewDate\", daysInWeek: \"daysInWeek\" }, outputs: { viewDateChange: \"viewDateChange\" } });\n/** @nocollapse */\nCalendarNextViewDirective.ctorParameters = () => [\n { type: DateAdapter }\n];\nCalendarNextViewDirective.propDecorators = {\n view: [{ type: Input }],\n viewDate: [{ type: Input }],\n excludeDays: [{ type: Input }],\n daysInWeek: [{ type: Input }],\n viewDateChange: [{ type: Output }],\n onClick: [{ type: HostListener, args: ['click',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarNextViewDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlCalendarNextView]'\n }]\n }], function () { return [{ type: DateAdapter }]; }, { excludeDays: [{\n type: Input\n }], viewDateChange: [{\n type: Output\n }], \n /**\n * @hidden\n * @return {?}\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], view: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], daysInWeek: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Change the view date to the current day. For example:\n *\n * ```typescript\n * \n * Today\n * \n * ```\n */\nclass CalendarTodayDirective {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n /**\n * Called when the view date is changed\n */\n this.viewDateChange = new EventEmitter();\n }\n /**\n * @hidden\n * @return {?}\n */\n onClick() {\n this.viewDateChange.emit(this.dateAdapter.startOfDay(new Date()));\n }\n}\nCalendarTodayDirective.ɵfac = function CalendarTodayDirective_Factory(t) { return new (t || CalendarTodayDirective)(ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarTodayDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: CalendarTodayDirective, selectors: [[\"\", \"mwlCalendarToday\", \"\"]], hostBindings: function CalendarTodayDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CalendarTodayDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } }, inputs: { viewDate: \"viewDate\" }, outputs: { viewDateChange: \"viewDateChange\" } });\n/** @nocollapse */\nCalendarTodayDirective.ctorParameters = () => [\n { type: DateAdapter }\n];\nCalendarTodayDirective.propDecorators = {\n viewDate: [{ type: Input }],\n viewDateChange: [{ type: Output }],\n onClick: [{ type: HostListener, args: ['click',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarTodayDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlCalendarToday]'\n }]\n }], function () { return [{ type: DateAdapter }]; }, { viewDateChange: [{\n type: Output\n }], \n /**\n * @hidden\n * @return {?}\n */\n onClick: [{\n type: HostListener,\n args: ['click']\n }], viewDate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * This will use the angular date pipe to do all date formatting. It is the default date formatter used by the calendar.\n */\nclass CalendarAngularDateFormatter {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n }\n /**\n * The month view header week day labels\n * @param {?} __0\n * @return {?}\n */\n monthViewColumnHeader({ date, locale }) {\n return formatDate(date, 'EEEE', locale);\n }\n /**\n * The month view cell day number\n * @param {?} __0\n * @return {?}\n */\n monthViewDayNumber({ date, locale }) {\n return formatDate(date, 'd', locale);\n }\n /**\n * The month view title\n * @param {?} __0\n * @return {?}\n */\n monthViewTitle({ date, locale }) {\n return formatDate(date, 'LLLL y', locale);\n }\n /**\n * The week view header week day labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnHeader({ date, locale }) {\n return formatDate(date, 'EEEE', locale);\n }\n /**\n * The week view sub header day and month labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnSubHeader({ date, locale }) {\n return formatDate(date, 'MMM d', locale);\n }\n /**\n * The week view title\n * @param {?} __0\n * @return {?}\n */\n weekViewTitle({ date, locale, weekStartsOn, excludeDays, daysInWeek }) {\n const { viewStart, viewEnd } = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek);\n /** @type {?} */\n const format = (dateToFormat, showYear) => formatDate(dateToFormat, 'MMM d' + (showYear ? ', yyyy' : ''), locale);\n return `${format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear())} - ${format(viewEnd, true)}`;\n }\n /**\n * The time formatting down the left hand side of the week view\n * @param {?} __0\n * @return {?}\n */\n weekViewHour({ date, locale }) {\n return formatDate(date, 'h a', locale);\n }\n /**\n * The time formatting down the left hand side of the day view\n * @param {?} __0\n * @return {?}\n */\n dayViewHour({ date, locale }) {\n return formatDate(date, 'h a', locale);\n }\n /**\n * The day view title\n * @param {?} __0\n * @return {?}\n */\n dayViewTitle({ date, locale }) {\n return formatDate(date, 'EEEE, MMMM d, y', locale);\n }\n}\nCalendarAngularDateFormatter.ɵfac = function CalendarAngularDateFormatter_Factory(t) { return new (t || CalendarAngularDateFormatter)(ɵngcc0.ɵɵinject(DateAdapter)); };\nCalendarAngularDateFormatter.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CalendarAngularDateFormatter, factory: CalendarAngularDateFormatter.ɵfac });\n/** @nocollapse */\nCalendarAngularDateFormatter.ctorParameters = () => [\n { type: DateAdapter }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarAngularDateFormatter, [{\n type: Injectable\n }], function () { return [{ type: DateAdapter }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * This class is responsible for all formatting of dates. There are 3 implementations available, the `CalendarAngularDateFormatter` (default) which uses the angular date pipe to format dates, the `CalendarNativeDateFormatter` which will use the Intl API to format dates, or there is the `CalendarMomentDateFormatter` which uses moment.\n *\n * If you wish, you may override any of the defaults via angulars DI. For example:\n *\n * ```typescript\n * import { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n * import { formatDate } from '\\@angular/common';\n *\n * class CustomDateFormatter extends CalendarDateFormatter {\n *\n * public monthViewColumnHeader({date, locale}: DateFormatterParams): string {\n * return formatDate(date, 'EEE', locale); // use short week days\n * }\n *\n * }\n *\n * // in your component that uses the calendar\n * providers: [{\n * provide: CalendarDateFormatter,\n * useClass: CustomDateFormatter\n * }]\n * ```\n */\nclass CalendarDateFormatter extends CalendarAngularDateFormatter {\n}\nCalendarDateFormatter.ɵfac = /*@__PURE__*/ function () { let ɵCalendarDateFormatter_BaseFactory; return function CalendarDateFormatter_Factory(t) { return (ɵCalendarDateFormatter_BaseFactory || (ɵCalendarDateFormatter_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(CalendarDateFormatter)))(t || CalendarDateFormatter); }; }();\nCalendarDateFormatter.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CalendarDateFormatter, factory: CalendarDateFormatter.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDateFormatter, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * This pipe is primarily for rendering the current view title. Example usage:\n * ```typescript\n * // where `viewDate` is a `Date` and view is `'month' | 'week' | 'day'`\n * {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}\n * ```\n */\nclass CalendarDatePipe {\n /**\n * @param {?} dateFormatter\n * @param {?} locale\n */\n constructor(dateFormatter, locale) {\n this.dateFormatter = dateFormatter;\n this.locale = locale;\n }\n /**\n * @param {?} date\n * @param {?} method\n * @param {?=} locale\n * @param {?=} weekStartsOn\n * @param {?=} excludeDays\n * @param {?=} daysInWeek\n * @return {?}\n */\n transform(date, method, locale = this.locale, weekStartsOn = 0, excludeDays = [], daysInWeek) {\n if (typeof this.dateFormatter[method] === 'undefined') {\n /** @type {?} */\n const allowedMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(CalendarDateFormatter.prototype)).filter(iMethod => iMethod !== 'constructor');\n throw new Error(`${method} is not a valid date formatter. Can only be one of ${allowedMethods.join(', ')}`);\n }\n return this.dateFormatter[method]({\n date,\n locale,\n weekStartsOn,\n excludeDays,\n daysInWeek\n });\n }\n}\nCalendarDatePipe.ɵfac = function CalendarDatePipe_Factory(t) { return new (t || CalendarDatePipe)(ɵngcc0.ɵɵdirectiveInject(CalendarDateFormatter, 16), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID, 16)); };\nCalendarDatePipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"calendarDate\", type: CalendarDatePipe, pure: true });\n/** @nocollapse */\nCalendarDatePipe.ctorParameters = () => [\n { type: CalendarDateFormatter },\n { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDatePipe, [{\n type: Pipe,\n args: [{\n name: 'calendarDate'\n }]\n }], function () { return [{ type: CalendarDateFormatter }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * This class is responsible for displaying all event titles within the calendar. You may override any of its methods via angulars DI to suit your requirements. For example:\n *\n * ```typescript\n * import { CalendarEventTitleFormatter, CalendarEvent } from 'angular-calendar';\n *\n * class CustomEventTitleFormatter extends CalendarEventTitleFormatter {\n *\n * month(event: CalendarEvent): string {\n * return `Custom prefix: ${event.title}`;\n * }\n *\n * }\n *\n * // in your component\n * providers: [{\n * provide: CalendarEventTitleFormatter,\n * useClass: CustomEventTitleFormatter\n * }]\n * ```\n */\nclass CalendarEventTitleFormatter {\n /**\n * The month view event title.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n month(event, title) {\n return event.title;\n }\n /**\n * The month view event tooltip. Return a falsey value from this to disable the tooltip.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n monthTooltip(event, title) {\n return event.title;\n }\n /**\n * The week view event title.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n week(event, title) {\n return event.title;\n }\n /**\n * The week view event tooltip. Return a falsey value from this to disable the tooltip.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n weekTooltip(event, title) {\n return event.title;\n }\n /**\n * The day view event title.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n day(event, title) {\n return event.title;\n }\n /**\n * The day view event tooltip. Return a falsey value from this to disable the tooltip.\n * @param {?} event\n * @param {?} title\n * @return {?}\n */\n dayTooltip(event, title) {\n return event.title;\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarEventTitlePipe {\n /**\n * @param {?} calendarEventTitle\n */\n constructor(calendarEventTitle) {\n this.calendarEventTitle = calendarEventTitle;\n }\n /**\n * @param {?} title\n * @param {?} titleType\n * @param {?} event\n * @return {?}\n */\n transform(title, titleType, event) {\n return this.calendarEventTitle[titleType](event, title);\n }\n}\nCalendarEventTitlePipe.ɵfac = function CalendarEventTitlePipe_Factory(t) { return new (t || CalendarEventTitlePipe)(ɵngcc0.ɵɵdirectiveInject(CalendarEventTitleFormatter, 16)); };\nCalendarEventTitlePipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"calendarEventTitle\", type: CalendarEventTitlePipe, pure: true });\n/** @nocollapse */\nCalendarEventTitlePipe.ctorParameters = () => [\n { type: CalendarEventTitleFormatter }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarEventTitlePipe, [{\n type: Pipe,\n args: [{\n name: 'calendarEventTitle'\n }]\n }], function () { return [{ type: CalendarEventTitleFormatter }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst clickElements = new Set();\nclass ClickDirective {\n /**\n * @param {?} renderer\n * @param {?} elm\n * @param {?} document\n */\n constructor(renderer, elm, document) {\n this.renderer = renderer;\n this.elm = elm;\n this.document = document;\n this.click = new EventEmitter();\n }\n /**\n * @return {?}\n */\n ngOnInit() {\n this.renderer.setAttribute(this.elm.nativeElement, 'data-calendar-clickable', 'true');\n clickElements.add(this.elm.nativeElement);\n /** @type {?} */\n const eventName = typeof window !== 'undefined' && typeof window['Hammer'] !== 'undefined'\n ? 'tap'\n : 'click';\n this.removeListener = this.renderer.listen(this.elm.nativeElement, eventName, event => {\n /** @type {?} */\n let nearestClickableParent = event.target;\n while (!clickElements.has(nearestClickableParent) &&\n nearestClickableParent !== this.document.body) {\n nearestClickableParent = nearestClickableParent.parentElement;\n }\n /** @type {?} */\n const isThisClickableElement = this.elm.nativeElement === nearestClickableParent;\n if (isThisClickableElement) {\n this.click.next(event);\n }\n });\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this.removeListener();\n clickElements.delete(this.elm.nativeElement);\n }\n}\nClickDirective.ɵfac = function ClickDirective_Factory(t) { return new (t || ClickDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DOCUMENT)); };\nClickDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: ClickDirective, selectors: [[\"\", \"mwlClick\", \"\"]], outputs: { click: \"mwlClick\" } });\n/** @nocollapse */\nClickDirective.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\nClickDirective.propDecorators = {\n click: [{ type: Output, args: ['mwlClick',] }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(ClickDirective, [{\n type: Directive,\n args: [{\n selector: '[mwlClick]'\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, { click: [{\n type: Output,\n args: ['mwlClick']\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarUtils {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n }\n /**\n * @param {?} args\n * @return {?}\n */\n getMonthView(args) {\n return getMonthView(this.dateAdapter, args);\n }\n /**\n * @param {?} args\n * @return {?}\n */\n getWeekViewHeader(args) {\n return getWeekViewHeader(this.dateAdapter, args);\n }\n /**\n * @param {?} args\n * @return {?}\n */\n getWeekView(args) {\n return getWeekView(this.dateAdapter, args);\n }\n /**\n * @param {?} args\n * @return {?}\n */\n getDayView(args) {\n return getDayView(this.dateAdapter, args);\n }\n /**\n * @param {?} args\n * @return {?}\n */\n getDayViewHourGrid(args) {\n return getDayViewHourGrid(this.dateAdapter, args);\n }\n}\nCalendarUtils.ɵfac = function CalendarUtils_Factory(t) { return new (t || CalendarUtils)(ɵngcc0.ɵɵinject(DateAdapter)); };\nCalendarUtils.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CalendarUtils, factory: CalendarUtils.ɵfac });\n/** @nocollapse */\nCalendarUtils.ctorParameters = () => [\n { type: DateAdapter }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarUtils, [{\n type: Injectable\n }], function () { return [{ type: DateAdapter }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst MOMENT = new InjectionToken('Moment');\n/**\n * This will use moment to do all date formatting. To use this class:\n *\n * ```typescript\n * import { CalendarDateFormatter, CalendarMomentDateFormatter, MOMENT } from 'angular-calendar';\n * import moment from 'moment';\n *\n * // in your component\n * provide: [{\n * provide: MOMENT, useValue: moment\n * }, {\n * provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter\n * }]\n *\n * ```\n */\nclass CalendarMomentDateFormatter {\n /**\n * @hidden\n * @param {?} moment\n * @param {?} dateAdapter\n */\n constructor(moment, dateAdapter) {\n this.moment = moment;\n this.dateAdapter = dateAdapter;\n }\n /**\n * The month view header week day labels\n * @param {?} __0\n * @return {?}\n */\n monthViewColumnHeader({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('dddd');\n }\n /**\n * The month view cell day number\n * @param {?} __0\n * @return {?}\n */\n monthViewDayNumber({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('D');\n }\n /**\n * The month view title\n * @param {?} __0\n * @return {?}\n */\n monthViewTitle({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('MMMM YYYY');\n }\n /**\n * The week view header week day labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnHeader({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('dddd');\n }\n /**\n * The week view sub header day and month labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnSubHeader({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('MMM D');\n }\n /**\n * The week view title\n * @param {?} __0\n * @return {?}\n */\n weekViewTitle({ date, locale, weekStartsOn, excludeDays, daysInWeek }) {\n const { viewStart, viewEnd } = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek);\n /** @type {?} */\n const format = (dateToFormat, showYear) => this.moment(dateToFormat)\n .locale(locale)\n .format('MMM D' + (showYear ? ', YYYY' : ''));\n return `${format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear())} - ${format(viewEnd, true)}`;\n }\n /**\n * The time formatting down the left hand side of the week view\n * @param {?} __0\n * @return {?}\n */\n weekViewHour({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('ha');\n }\n /**\n * The time formatting down the left hand side of the day view\n * @param {?} __0\n * @return {?}\n */\n dayViewHour({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('ha');\n }\n /**\n * The day view title\n * @param {?} __0\n * @return {?}\n */\n dayViewTitle({ date, locale }) {\n return this.moment(date)\n .locale(locale)\n .format('dddd, D MMMM, YYYY');\n }\n}\nCalendarMomentDateFormatter.ɵfac = function CalendarMomentDateFormatter_Factory(t) { return new (t || CalendarMomentDateFormatter)(ɵngcc0.ɵɵinject(MOMENT), ɵngcc0.ɵɵinject(DateAdapter)); };\nCalendarMomentDateFormatter.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CalendarMomentDateFormatter, factory: CalendarMomentDateFormatter.ɵfac });\n/** @nocollapse */\nCalendarMomentDateFormatter.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [MOMENT,] }] },\n { type: DateAdapter }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarMomentDateFormatter, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MOMENT]\n }] }, { type: DateAdapter }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * This will use Intl API to do all date formatting.\n *\n * You will need to include a polyfill for older browsers.\n */\nclass CalendarNativeDateFormatter {\n /**\n * @param {?} dateAdapter\n */\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n }\n /**\n * The month view header week day labels\n * @param {?} __0\n * @return {?}\n */\n monthViewColumnHeader({ date, locale }) {\n return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\n }\n /**\n * The month view cell day number\n * @param {?} __0\n * @return {?}\n */\n monthViewDayNumber({ date, locale }) {\n return new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(date);\n }\n /**\n * The month view title\n * @param {?} __0\n * @return {?}\n */\n monthViewTitle({ date, locale }) {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long'\n }).format(date);\n }\n /**\n * The week view header week day labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnHeader({ date, locale }) {\n return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\n }\n /**\n * The week view sub header day and month labels\n * @param {?} __0\n * @return {?}\n */\n weekViewColumnSubHeader({ date, locale }) {\n return new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short'\n }).format(date);\n }\n /**\n * The week view title\n * @param {?} __0\n * @return {?}\n */\n weekViewTitle({ date, locale, weekStartsOn, excludeDays, daysInWeek }) {\n const { viewStart, viewEnd } = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek);\n /** @type {?} */\n const format = (dateToFormat, showYear) => new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n year: showYear ? 'numeric' : undefined\n }).format(dateToFormat);\n return `${format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear())} - ${format(viewEnd, true)}`;\n }\n /**\n * The time formatting down the left hand side of the week view\n * @param {?} __0\n * @return {?}\n */\n weekViewHour({ date, locale }) {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\n }\n /**\n * The time formatting down the left hand side of the day view\n * @param {?} __0\n * @return {?}\n */\n dayViewHour({ date, locale }) {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\n }\n /**\n * The day view title\n * @param {?} __0\n * @return {?}\n */\n dayViewTitle({ date, locale }) {\n return new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n weekday: 'long'\n }).format(date);\n }\n}\nCalendarNativeDateFormatter.ɵfac = function CalendarNativeDateFormatter_Factory(t) { return new (t || CalendarNativeDateFormatter)(ɵngcc0.ɵɵinject(DateAdapter)); };\nCalendarNativeDateFormatter.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: CalendarNativeDateFormatter, factory: CalendarNativeDateFormatter.ɵfac });\n/** @nocollapse */\nCalendarNativeDateFormatter.ctorParameters = () => [\n { type: DateAdapter }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarNativeDateFormatter, [{\n type: Injectable\n }], function () { return [{ type: DateAdapter }]; }, null); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @enum {string} */\nconst CalendarEventTimesChangedEventType = {\n Drag: 'drag',\n Drop: 'drop',\n Resize: 'resize',\n};\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Import this module to if you're just using a singular view and want to save on bundle size. Example usage:\n *\n * ```typescript\n * import { CalendarCommonModule, CalendarMonthModule } from 'angular-calendar';\n *\n * \\@NgModule({\n * imports: [\n * CalendarCommonModule.forRoot(),\n * CalendarMonthModule\n * ]\n * })\n * class MyModule {}\n * ```\n *\n */\nclass CalendarCommonModule {\n /**\n * @param {?} dateAdapter\n * @param {?=} config\n * @return {?}\n */\n static forRoot(dateAdapter, config = {}) {\n return {\n ngModule: CalendarCommonModule,\n providers: [\n dateAdapter,\n config.eventTitleFormatter || CalendarEventTitleFormatter,\n config.dateFormatter || CalendarDateFormatter,\n config.utils || CalendarUtils\n ]\n };\n }\n}\nCalendarCommonModule.ɵfac = function CalendarCommonModule_Factory(t) { return new (t || CalendarCommonModule)(); };\nCalendarCommonModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CalendarCommonModule });\nCalendarCommonModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarCommonModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CalendarEventActionsComponent,\n CalendarEventTitleComponent,\n CalendarTooltipWindowComponent,\n CalendarTooltipDirective,\n CalendarPreviousViewDirective,\n CalendarNextViewDirective,\n CalendarTodayDirective,\n CalendarDatePipe,\n CalendarEventTitlePipe,\n ClickDirective\n ],\n imports: [CommonModule],\n exports: [\n CalendarEventActionsComponent,\n CalendarEventTitleComponent,\n CalendarTooltipWindowComponent,\n CalendarTooltipDirective,\n CalendarPreviousViewDirective,\n CalendarNextViewDirective,\n CalendarTodayDirective,\n CalendarDatePipe,\n CalendarEventTitlePipe,\n ClickDirective\n ],\n entryComponents: [CalendarTooltipWindowComponent]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarCommonModule, { declarations: function () { return [CalendarEventActionsComponent, CalendarEventTitleComponent, CalendarTooltipWindowComponent, CalendarTooltipDirective, CalendarPreviousViewDirective, CalendarNextViewDirective, CalendarTodayDirective, CalendarDatePipe, CalendarEventTitlePipe, ClickDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [CalendarEventActionsComponent, CalendarEventTitleComponent, CalendarTooltipWindowComponent, CalendarTooltipDirective, CalendarPreviousViewDirective, CalendarNextViewDirective, CalendarTodayDirective, CalendarDatePipe, CalendarEventTitlePipe, ClickDirective]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Shows all events on a given month. Example usage:\n *\n * ```typescript\n * \n * \n * ```\n */\nclass CalendarMonthViewComponent {\n /**\n * @hidden\n * @param {?} cdr\n * @param {?} utils\n * @param {?} locale\n * @param {?} dateAdapter\n */\n constructor(cdr, utils, locale, dateAdapter) {\n this.cdr = cdr;\n this.utils = utils;\n this.dateAdapter = dateAdapter;\n /**\n * An array of events to display on view.\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n this.events = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view\n */\n this.excludeDays = [];\n /**\n * Whether the events list for the day of the `viewDate` option is visible or not\n */\n this.activeDayIsOpen = false;\n /**\n * The placement of the event tooltip\n */\n this.tooltipPlacement = 'auto';\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n this.tooltipAppendToBody = true;\n /**\n * An output that will be called before the view is rendered for the current month.\n * If you add the `cssClass` property to a day in the body it will add that class to the cell element in the template\n */\n this.beforeViewRender = new EventEmitter();\n /**\n * Called when the day cell is clicked\n */\n this.dayClicked = new EventEmitter();\n /**\n * Called when the event title is clicked\n */\n this.eventClicked = new EventEmitter();\n /**\n * Called when an event is dragged and dropped\n */\n this.eventTimesChanged = new EventEmitter();\n /**\n * @hidden\n */\n this.trackByIndex = trackByIndex;\n /**\n * @hidden\n */\n this.trackByDate = (index, day) => day.date.toISOString();\n this.locale = locale;\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnInit() {\n if (this.refresh) {\n this.refreshSubscription = this.refresh.subscribe(() => {\n this.refreshAll();\n this.cdr.markForCheck();\n });\n }\n }\n /**\n * @hidden\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.viewDate || changes.excludeDays || changes.weekendDays) {\n this.refreshHeader();\n }\n if (changes.events) {\n validateEvents$1(this.events);\n }\n if (changes.viewDate ||\n changes.events ||\n changes.excludeDays ||\n changes.weekendDays) {\n this.refreshBody();\n }\n if (changes.activeDayIsOpen ||\n changes.viewDate ||\n changes.events ||\n changes.excludeDays) {\n this.checkActiveDayIsOpen();\n }\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnDestroy() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n * @param {?} event\n * @param {?} isHighlighted\n * @return {?}\n */\n toggleDayHighlight(event, isHighlighted) {\n this.view.days.forEach(day => {\n if (isHighlighted && day.events.indexOf(event) > -1) {\n day.backgroundColor =\n (event.color && event.color.secondary) || '#D1E8FF';\n }\n else {\n delete day.backgroundColor;\n }\n });\n }\n /**\n * @hidden\n * @param {?} droppedOn\n * @param {?} event\n * @param {?=} draggedFrom\n * @return {?}\n */\n eventDropped(droppedOn, event, draggedFrom) {\n if (droppedOn !== draggedFrom) {\n /** @type {?} */\n const year = this.dateAdapter.getYear(droppedOn.date);\n /** @type {?} */\n const month = this.dateAdapter.getMonth(droppedOn.date);\n /** @type {?} */\n const date = this.dateAdapter.getDate(droppedOn.date);\n /** @type {?} */\n const newStart = this.dateAdapter.setDate(this.dateAdapter.setMonth(this.dateAdapter.setYear(event.start, year), month), date);\n /** @type {?} */\n let newEnd;\n if (event.end) {\n /** @type {?} */\n const secondsDiff = this.dateAdapter.differenceInSeconds(newStart, event.start);\n newEnd = this.dateAdapter.addSeconds(event.end, secondsDiff);\n }\n this.eventTimesChanged.emit({\n event,\n newStart,\n newEnd,\n day: droppedOn,\n type: CalendarEventTimesChangedEventType.Drop\n });\n }\n }\n /**\n * @return {?}\n */\n refreshHeader() {\n this.columnHeaders = this.utils.getWeekViewHeader({\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n weekendDays: this.weekendDays\n });\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n refreshBody() {\n this.view = this.utils.getMonthView({\n events: this.events,\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n weekendDays: this.weekendDays\n });\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n checkActiveDayIsOpen() {\n if (this.activeDayIsOpen === true) {\n this.openDay = this.view.days.find(day => this.dateAdapter.isSameDay(day.date, this.viewDate));\n /** @type {?} */\n const index = this.view.days.indexOf(this.openDay);\n this.openRowIndex =\n Math.floor(index / this.view.totalDaysVisibleInWeek) *\n this.view.totalDaysVisibleInWeek;\n }\n else {\n this.openRowIndex = null;\n this.openDay = null;\n }\n }\n /**\n * @return {?}\n */\n refreshAll() {\n this.columnHeaders = null;\n this.view = null;\n this.refreshHeader();\n this.refreshBody();\n this.checkActiveDayIsOpen();\n }\n /**\n * @return {?}\n */\n emitBeforeViewRender() {\n if (this.columnHeaders && this.view) {\n this.beforeViewRender.emit({\n header: this.columnHeaders,\n body: this.view.days,\n period: this.view.period\n });\n }\n }\n}\nCalendarMonthViewComponent.ɵfac = function CalendarMonthViewComponent_Factory(t) { return new (t || CalendarMonthViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CalendarUtils), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID), ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarMonthViewComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarMonthViewComponent, selectors: [[\"mwl-calendar-month-view\"]], inputs: { events: \"events\", excludeDays: \"excludeDays\", activeDayIsOpen: \"activeDayIsOpen\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", locale: \"locale\", viewDate: \"viewDate\", refresh: \"refresh\", tooltipTemplate: \"tooltipTemplate\", weekStartsOn: \"weekStartsOn\", headerTemplate: \"headerTemplate\", cellTemplate: \"cellTemplate\", openDayEventsTemplate: \"openDayEventsTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\", weekendDays: \"weekendDays\" }, outputs: { beforeViewRender: \"beforeViewRender\", dayClicked: \"dayClicked\", eventClicked: \"eventClicked\", eventTimesChanged: \"eventTimesChanged\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 4, consts: [[1, \"cal-month-view\"], [3, \"days\", \"locale\", \"customTemplate\"], [1, \"cal-days\"], [4, \"ngFor\", \"ngForTrackByIndex\", \"ngForOf\"], [1, \"cal-cell-row\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 3, \"ngClass\", \"day\", \"openDay\", \"locale\", \"tooltipPlacement\", \"tooltipAppendToBody\", \"tooltipTemplate\", \"customTemplate\", \"mwlClick\", \"highlightDay\", \"unhighlightDay\", \"drop\", \"eventClicked\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 3, \"isOpen\", \"events\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"eventClicked\", \"drop\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 3, \"ngClass\", \"day\", \"openDay\", \"locale\", \"tooltipPlacement\", \"tooltipAppendToBody\", \"tooltipTemplate\", \"customTemplate\", \"mwlClick\", \"highlightDay\", \"unhighlightDay\", \"drop\", \"eventClicked\"]], template: function CalendarMonthViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵelement(1, \"mwl-calendar-month-view-header\", 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 2);\n ɵngcc0.ɵɵtemplate(3, CalendarMonthViewComponent_div_3_Template, 5, 11, \"div\", 3);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"days\", ctx.columnHeaders)(\"locale\", ctx.locale)(\"customTemplate\", ctx.headerTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.view.rowOffsets);\n } }, directives: function () { return [CalendarMonthViewHeaderComponent, ɵngcc1.NgForOf, CalendarMonthCellComponent, ɵngcc2.ɵa, ɵngcc1.NgClass, ClickDirective, CalendarOpenDayEventsComponent]; }, pipes: function () { return [ɵngcc1.SlicePipe]; }, encapsulation: 2 });\n/** @nocollapse */\nCalendarMonthViewComponent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: CalendarUtils },\n { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },\n { type: DateAdapter }\n];\nCalendarMonthViewComponent.propDecorators = {\n viewDate: [{ type: Input }],\n events: [{ type: Input }],\n excludeDays: [{ type: Input }],\n activeDayIsOpen: [{ type: Input }],\n refresh: [{ type: Input }],\n locale: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n weekStartsOn: [{ type: Input }],\n headerTemplate: [{ type: Input }],\n cellTemplate: [{ type: Input }],\n openDayEventsTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n weekendDays: [{ type: Input }],\n beforeViewRender: [{ type: Output }],\n dayClicked: [{ type: Output }],\n eventClicked: [{ type: Output }],\n eventTimesChanged: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarMonthViewComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-month-view',\n template: `\n
            \n \n \n
            \n
            \n
            \n \n \n
            \n \n \n
            \n
            \n
            \n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: CalendarUtils }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: DateAdapter }]; }, { events: [{\n type: Input\n }], excludeDays: [{\n type: Input\n }], activeDayIsOpen: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], beforeViewRender: [{\n type: Output\n }], dayClicked: [{\n type: Output\n }], eventClicked: [{\n type: Output\n }], eventTimesChanged: [{\n type: Output\n }], locale: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], refresh: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }], weekStartsOn: [{\n type: Input\n }], headerTemplate: [{\n type: Input\n }], cellTemplate: [{\n type: Input\n }], openDayEventsTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }], weekendDays: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarMonthViewHeaderComponent {\n constructor() {\n this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n }\n}\nCalendarMonthViewHeaderComponent.ɵfac = function CalendarMonthViewHeaderComponent_Factory(t) { return new (t || CalendarMonthViewHeaderComponent)(); };\nCalendarMonthViewHeaderComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarMonthViewHeaderComponent, selectors: [[\"mwl-calendar-month-view-header\"]], inputs: { days: \"days\", locale: \"locale\", customTemplate: \"customTemplate\" }, decls: 3, vars: 5, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-cell-row\", \"cal-header\"], [\"class\", \"cal-cell\", 3, \"cal-past\", \"cal-today\", \"cal-future\", \"cal-weekend\", \"ngClass\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [1, \"cal-cell\", 3, \"ngClass\"]], template: function CalendarMonthViewHeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarMonthViewHeaderComponent_ng_template_0_Template, 2, 2, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarMonthViewHeaderComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c3, ctx.days, ctx.locale));\n } }, directives: [ɵngcc1.NgForOf, ɵngcc1.NgClass, ɵngcc1.NgTemplateOutlet], pipes: [CalendarDatePipe], encapsulation: 2 });\nCalendarMonthViewHeaderComponent.propDecorators = {\n days: [{ type: Input }],\n locale: [{ type: Input }],\n customTemplate: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarMonthViewHeaderComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-month-view-header',\n template: `\n \n
            \n \n {{ day.date | calendarDate: 'monthViewColumnHeader':locale }}\n
            \n \n
            \n \n \n `\n }]\n }], function () { return []; }, { days: [{\n type: Input\n }], locale: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarMonthCellComponent {\n constructor() {\n this.highlightDay = new EventEmitter();\n this.unhighlightDay = new EventEmitter();\n this.eventClicked = new EventEmitter();\n this.trackByEventId = trackByEventId;\n }\n}\nCalendarMonthCellComponent.ɵfac = function CalendarMonthCellComponent_Factory(t) { return new (t || CalendarMonthCellComponent)(); };\nCalendarMonthCellComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarMonthCellComponent, selectors: [[\"mwl-calendar-month-cell\"]], hostAttrs: [1, \"cal-cell\", \"cal-day-cell\"], hostVars: 20, hostBindings: function CalendarMonthCellComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"background-color\", ctx.day.backgroundColor);\n ɵngcc0.ɵɵclassProp(\"cal-past\", ctx.day.isPast)(\"cal-today\", ctx.day.isToday)(\"cal-future\", ctx.day.isFuture)(\"cal-weekend\", ctx.day.isWeekend)(\"cal-in-month\", ctx.day.inMonth)(\"cal-out-month\", !ctx.day.inMonth)(\"cal-has-events\", ctx.day.events.length > 0)(\"cal-open\", ctx.day === ctx.openDay)(\"cal-event-highlight\", !!ctx.day.backgroundColor);\n } }, inputs: { day: \"day\", openDay: \"openDay\", locale: \"locale\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", customTemplate: \"customTemplate\", tooltipTemplate: \"tooltipTemplate\" }, outputs: { highlightDay: \"highlightDay\", unhighlightDay: \"unhighlightDay\", eventClicked: \"eventClicked\" }, decls: 3, vars: 12, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-cell-top\"], [\"class\", \"cal-day-badge\", 4, \"ngIf\"], [1, \"cal-day-number\"], [\"class\", \"cal-events\", 4, \"ngIf\"], [1, \"cal-day-badge\"], [1, \"cal-events\"], [\"class\", \"cal-event\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"backgroundColor\", \"ngClass\", \"mwlCalendarTooltip\", \"tooltipPlacement\", \"tooltipEvent\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"cal-draggable\", \"dropData\", \"dragAxis\", \"mouseenter\", \"mouseleave\", \"mwlClick\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 1, \"cal-event\", 3, \"ngClass\", \"mwlCalendarTooltip\", \"tooltipPlacement\", \"tooltipEvent\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"dropData\", \"dragAxis\", \"mouseenter\", \"mouseleave\", \"mwlClick\"]], template: function CalendarMonthCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarMonthCellComponent_ng_template_0_Template, 6, 7, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarMonthCellComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunctionV(2, _c6, [ctx.day, ctx.openDay, ctx.locale, ctx.tooltipPlacement, ctx.highlightDay, ctx.unhighlightDay, ctx.eventClicked, ctx.tooltipTemplate, ctx.tooltipAppendToBody]));\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc2.ɵb, ɵngcc1.NgClass, CalendarTooltipDirective, ClickDirective, ɵngcc1.NgTemplateOutlet], pipes: [CalendarDatePipe, CalendarEventTitlePipe], encapsulation: 2 });\nCalendarMonthCellComponent.propDecorators = {\n day: [{ type: Input }],\n openDay: [{ type: Input }],\n locale: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n customTemplate: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n highlightDay: [{ type: Output }],\n unhighlightDay: [{ type: Output }],\n eventClicked: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarMonthCellComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-month-cell',\n template: `\n \n
            \n 0\">{{\n day.badgeTotal\n }}\n {{\n day.date | calendarDate: 'monthViewDayNumber':locale\n }}\n
            \n
            0\">\n
            \n \n \n \n \n `,\n host: {\n class: 'cal-cell cal-day-cell',\n '[class.cal-past]': 'day.isPast',\n '[class.cal-today]': 'day.isToday',\n '[class.cal-future]': 'day.isFuture',\n '[class.cal-weekend]': 'day.isWeekend',\n '[class.cal-in-month]': 'day.inMonth',\n '[class.cal-out-month]': '!day.inMonth',\n '[class.cal-has-events]': 'day.events.length > 0',\n '[class.cal-open]': 'day === openDay',\n '[class.cal-event-highlight]': '!!day.backgroundColor',\n '[style.backgroundColor]': 'day.backgroundColor'\n }\n }]\n }], function () { return []; }, { highlightDay: [{\n type: Output\n }], unhighlightDay: [{\n type: Output\n }], eventClicked: [{\n type: Output\n }], day: [{\n type: Input\n }], openDay: [{\n type: Input\n }], locale: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst collapseAnimation = trigger('collapse', [\n transition('void => *', [\n style({ height: 0, overflow: 'hidden' }),\n animate('150ms', style({ height: '*' }))\n ]),\n transition('* => void', [\n style({ height: '*', overflow: 'hidden' }),\n animate('150ms', style({ height: 0 }))\n ])\n]);\nclass CalendarOpenDayEventsComponent {\n constructor() {\n this.isOpen = false;\n this.eventClicked = new EventEmitter();\n this.trackByEventId = trackByEventId;\n }\n}\nCalendarOpenDayEventsComponent.ɵfac = function CalendarOpenDayEventsComponent_Factory(t) { return new (t || CalendarOpenDayEventsComponent)(); };\nCalendarOpenDayEventsComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarOpenDayEventsComponent, selectors: [[\"mwl-calendar-open-day-events\"]], inputs: { isOpen: \"isOpen\", events: \"events\", customTemplate: \"customTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\" }, outputs: { eventClicked: \"eventClicked\" }, decls: 3, vars: 6, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"class\", \"cal-open-day-events\", 4, \"ngIf\"], [1, \"cal-open-day-events\"], [\"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"ngClass\", \"cal-draggable\", \"dropData\", \"dragAxis\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"ngClass\", \"dropData\", \"dragAxis\"], [1, \"cal-event\"], [\"view\", \"month\", 3, \"event\", \"customTemplate\", \"mwlClick\"], [3, \"event\", \"customTemplate\"]], template: function CalendarOpenDayEventsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarOpenDayEventsComponent_ng_template_0_Template, 1, 1, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarOpenDayEventsComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(2, _c7, ctx.events, ctx.eventClicked, ctx.isOpen));\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc2.ɵb, ɵngcc1.NgClass, CalendarEventTitleComponent, ClickDirective, CalendarEventActionsComponent, ɵngcc1.NgTemplateOutlet], encapsulation: 2, data: { animation: [collapseAnimation] } });\nCalendarOpenDayEventsComponent.propDecorators = {\n isOpen: [{ type: Input }],\n events: [{ type: Input }],\n customTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n eventClicked: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarOpenDayEventsComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-open-day-events',\n template: `\n \n
            \n \n \n \n &ngsp;\n \n \n &ngsp;\n \n \n
            \n \n \n \n \n `,\n animations: [collapseAnimation]\n }]\n }], function () { return []; }, { isOpen: [{\n type: Input\n }], eventClicked: [{\n type: Output\n }], events: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarMonthModule {\n}\nCalendarMonthModule.ɵfac = function CalendarMonthModule_Factory(t) { return new (t || CalendarMonthModule)(); };\nCalendarMonthModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CalendarMonthModule });\nCalendarMonthModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[CommonModule, DragAndDropModule, CalendarCommonModule], DragAndDropModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarMonthModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, DragAndDropModule, CalendarCommonModule],\n declarations: [\n CalendarMonthViewComponent,\n CalendarMonthCellComponent,\n CalendarOpenDayEventsComponent,\n CalendarMonthViewHeaderComponent\n ],\n exports: [\n DragAndDropModule,\n CalendarMonthViewComponent,\n CalendarMonthCellComponent,\n CalendarOpenDayEventsComponent,\n CalendarMonthViewHeaderComponent\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarMonthModule, { declarations: function () { return [CalendarMonthViewComponent, CalendarMonthCellComponent, CalendarOpenDayEventsComponent, CalendarMonthViewHeaderComponent]; }, imports: function () { return [CommonModule, DragAndDropModule, CalendarCommonModule]; }, exports: function () { return [DragAndDropModule, CalendarMonthViewComponent, CalendarMonthCellComponent, CalendarOpenDayEventsComponent, CalendarMonthViewHeaderComponent]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DRAG_THRESHOLD = 1;\nclass CalendarDragHelper {\n /**\n * @param {?} dragContainerElement\n * @param {?} draggableElement\n */\n constructor(dragContainerElement, draggableElement) {\n this.dragContainerElement = dragContainerElement;\n this.startPosition = draggableElement.getBoundingClientRect();\n }\n /**\n * @param {?} __0\n * @return {?}\n */\n validateDrag({ x, y, snapDraggedEvents, dragAlreadyMoved }) {\n /** @type {?} */\n const isWithinThreshold = Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;\n if (snapDraggedEvents) {\n /** @type {?} */\n const newRect = Object.assign({}, this.startPosition, {\n left: this.startPosition.left + x,\n right: this.startPosition.right + x,\n top: this.startPosition.top + y,\n bottom: this.startPosition.bottom + y\n });\n return ((isWithinThreshold || dragAlreadyMoved) &&\n isInside(this.dragContainerElement.getBoundingClientRect(), newRect));\n }\n else {\n return isWithinThreshold || dragAlreadyMoved;\n }\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarResizeHelper {\n /**\n * @param {?} resizeContainerElement\n * @param {?=} minWidth\n */\n constructor(resizeContainerElement, minWidth) {\n this.resizeContainerElement = resizeContainerElement;\n this.minWidth = minWidth;\n }\n /**\n * @param {?} __0\n * @return {?}\n */\n validateResize({ rectangle }) {\n if (this.minWidth &&\n Math.ceil(rectangle.width) < Math.ceil(this.minWidth)) {\n return false;\n }\n return isInside(this.resizeContainerElement.getBoundingClientRect(), rectangle);\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Shows all events on a given week. Example usage:\n *\n * ```typescript\n * \n * \n * ```\n */\nclass CalendarWeekViewComponent {\n /**\n * @hidden\n * @param {?} cdr\n * @param {?} utils\n * @param {?} locale\n * @param {?} dateAdapter\n */\n constructor(cdr, utils, locale, dateAdapter) {\n this.cdr = cdr;\n this.utils = utils;\n this.dateAdapter = dateAdapter;\n /**\n * An array of events to display on view\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n this.events = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view\n */\n this.excludeDays = [];\n /**\n * The placement of the event tooltip\n */\n this.tooltipPlacement = 'auto';\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n this.tooltipAppendToBody = true;\n /**\n * The precision to display events.\n * `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding\n */\n this.precision = 'days';\n /**\n * Whether to snap events to a grid when dragging\n */\n this.snapDraggedEvents = true;\n /**\n * The number of segments in an hour. Must be <= 6\n */\n this.hourSegments = 2;\n /**\n * The height in pixels of each hour segment\n */\n this.hourSegmentHeight = 30;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n this.dayStartHour = 0;\n /**\n * The day start minutes. Must be 0-59\n */\n this.dayStartMinute = 0;\n /**\n * The day end hours in 24 hour time. Must be 0-23\n */\n this.dayEndHour = 23;\n /**\n * The day end minutes. Must be 0-59\n */\n this.dayEndMinute = 59;\n /**\n * Called when a header week day is clicked. Adding a `cssClass` property on `$event.day` will add that class to the header element\n */\n this.dayHeaderClicked = new EventEmitter();\n /**\n * Called when the event title is clicked\n */\n this.eventClicked = new EventEmitter();\n /**\n * Called when an event is resized or dragged and dropped\n */\n this.eventTimesChanged = new EventEmitter();\n /**\n * An output that will be called before the view is rendered for the current week.\n * If you add the `cssClass` property to a day in the header it will add that class to the cell element in the template\n */\n this.beforeViewRender = new EventEmitter();\n /**\n * Called when an hour segment is clicked\n */\n this.hourSegmentClicked = new EventEmitter();\n /**\n * @hidden\n */\n this.allDayEventResizes = new Map();\n /**\n * @hidden\n */\n this.timeEventResizes = new Map();\n /**\n * @hidden\n */\n this.eventDragEnter = 0;\n /**\n * @hidden\n */\n this.dragActive = false;\n /**\n * @hidden\n */\n this.dragAlreadyMoved = false;\n /**\n * @hidden\n */\n this.calendarId = Symbol('angular calendar week view id');\n /**\n * @hidden\n */\n this.trackByIndex = trackByIndex;\n /**\n * @hidden\n */\n this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n /**\n * @hidden\n */\n this.trackByHourSegment = trackByHourSegment;\n /**\n * @hidden\n */\n this.trackByHour = trackByHour;\n /**\n * @hidden\n */\n this.trackByDayOrWeekEvent = trackByDayOrWeekEvent;\n /**\n * @hidden\n */\n this.trackByHourColumn = (index, column) => column.hours[0] ? column.hours[0].segments[0].date.toISOString() : column;\n this.locale = locale;\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnInit() {\n if (this.refresh) {\n this.refreshSubscription = this.refresh.subscribe(() => {\n this.refreshAll();\n this.cdr.markForCheck();\n });\n }\n }\n /**\n * @hidden\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.viewDate ||\n changes.excludeDays ||\n changes.weekendDays ||\n changes.daysInWeek ||\n changes.weekStartsOn) {\n this.refreshHeader();\n }\n if (changes.events) {\n validateEvents$1(this.events);\n }\n if (changes.viewDate ||\n changes.dayStartHour ||\n changes.dayStartMinute ||\n changes.dayEndHour ||\n changes.dayEndMinute ||\n changes.hourSegments ||\n changes.weekStartsOn ||\n changes.weekendDays ||\n changes.excludeDays ||\n changes.hourSegmentHeight ||\n changes.events ||\n changes.daysInWeek) {\n this.refreshBody();\n }\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnDestroy() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n }\n /**\n * @param {?} eventsContainer\n * @param {?=} minWidth\n * @return {?}\n */\n resizeStarted(eventsContainer, minWidth) {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);\n /** @type {?} */\n const resizeHelper = new CalendarResizeHelper(eventsContainer, minWidth);\n this.validateResize = ({ rectangle }) => resizeHelper.validateResize({ rectangle });\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n * @param {?} eventsContainer\n * @param {?} timeEvent\n * @param {?} resizeEvent\n * @return {?}\n */\n timeEventResizeStarted(eventsContainer, timeEvent, resizeEvent) {\n this.timeEventResizes.set(timeEvent.event, resizeEvent);\n this.resizeStarted(eventsContainer);\n }\n /**\n * @hidden\n * @param {?} timeEvent\n * @param {?} resizeEvent\n * @return {?}\n */\n timeEventResizing(timeEvent, resizeEvent) {\n this.timeEventResizes.set(timeEvent.event, resizeEvent);\n /** @type {?} */\n const adjustedEvents = new Map();\n /** @type {?} */\n const tempEvents = [...this.events];\n this.timeEventResizes.forEach((lastResizeEvent, event) => {\n /** @type {?} */\n const newEventDates = this.getTimeEventResizedDates(event, lastResizeEvent);\n /** @type {?} */\n const adjustedEvent = Object.assign({}, event, newEventDates);\n adjustedEvents.set(adjustedEvent, event);\n /** @type {?} */\n const eventIndex = tempEvents.indexOf(event);\n tempEvents[eventIndex] = adjustedEvent;\n });\n this.restoreOriginalEvents(tempEvents, adjustedEvents);\n }\n /**\n * @hidden\n * @param {?} timeEvent\n * @return {?}\n */\n timeEventResizeEnded(timeEvent) {\n this.view = this.getWeekView(this.events);\n /** @type {?} */\n const lastResizeEvent = this.timeEventResizes.get(timeEvent.event);\n if (lastResizeEvent) {\n this.timeEventResizes.delete(timeEvent.event);\n /** @type {?} */\n const newEventDates = this.getTimeEventResizedDates(timeEvent.event, lastResizeEvent);\n this.eventTimesChanged.emit({\n newStart: newEventDates.start,\n newEnd: newEventDates.end,\n event: timeEvent.event,\n type: CalendarEventTimesChangedEventType.Resize\n });\n }\n }\n /**\n * @hidden\n * @param {?} allDayEventsContainer\n * @param {?} allDayEvent\n * @param {?} resizeEvent\n * @return {?}\n */\n allDayEventResizeStarted(allDayEventsContainer, allDayEvent, resizeEvent) {\n this.allDayEventResizes.set(allDayEvent, {\n originalOffset: allDayEvent.offset,\n originalSpan: allDayEvent.span,\n edge: typeof resizeEvent.edges.left !== 'undefined' ? 'left' : 'right'\n });\n this.resizeStarted(allDayEventsContainer, this.getDayColumnWidth(allDayEventsContainer));\n }\n /**\n * @hidden\n * @param {?} allDayEvent\n * @param {?} resizeEvent\n * @param {?} dayWidth\n * @return {?}\n */\n allDayEventResizing(allDayEvent, resizeEvent, dayWidth) {\n /** @type {?} */\n const currentResize = this.allDayEventResizes.get(allDayEvent);\n if (typeof resizeEvent.edges.left !== 'undefined') {\n /** @type {?} */\n const diff = Math.round(+resizeEvent.edges.left / dayWidth);\n allDayEvent.offset = currentResize.originalOffset + diff;\n allDayEvent.span = currentResize.originalSpan - diff;\n }\n else if (typeof resizeEvent.edges.right !== 'undefined') {\n /** @type {?} */\n const diff = Math.round(+resizeEvent.edges.right / dayWidth);\n allDayEvent.span = currentResize.originalSpan + diff;\n }\n }\n /**\n * @hidden\n * @param {?} allDayEvent\n * @return {?}\n */\n allDayEventResizeEnded(allDayEvent) {\n /** @type {?} */\n const currentResize = this.allDayEventResizes.get(allDayEvent);\n if (currentResize) {\n /** @type {?} */\n const allDayEventResizingBeforeStart = currentResize.edge === 'left';\n /** @type {?} */\n let daysDiff;\n if (allDayEventResizingBeforeStart) {\n daysDiff = allDayEvent.offset - currentResize.originalOffset;\n }\n else {\n daysDiff = allDayEvent.span - currentResize.originalSpan;\n }\n allDayEvent.offset = currentResize.originalOffset;\n allDayEvent.span = currentResize.originalSpan;\n /** @type {?} */\n let newStart = allDayEvent.event.start;\n /** @type {?} */\n let newEnd = allDayEvent.event.end || allDayEvent.event.start;\n if (allDayEventResizingBeforeStart) {\n newStart = this.dateAdapter.addDays(newStart, daysDiff);\n }\n else {\n newEnd = this.dateAdapter.addDays(newEnd, daysDiff);\n }\n this.eventTimesChanged.emit({\n newStart,\n newEnd,\n event: allDayEvent.event,\n type: CalendarEventTimesChangedEventType.Resize\n });\n this.allDayEventResizes.delete(allDayEvent);\n }\n }\n /**\n * @hidden\n * @param {?} eventRowContainer\n * @return {?}\n */\n getDayColumnWidth(eventRowContainer) {\n return Math.floor(eventRowContainer.offsetWidth / this.days.length);\n }\n /**\n * @hidden\n * @param {?} dropEvent\n * @param {?} date\n * @param {?} allDay\n * @return {?}\n */\n eventDropped(dropEvent, date, allDay) {\n if (shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId)) {\n this.eventTimesChanged.emit({\n type: CalendarEventTimesChangedEventType.Drop,\n event: dropEvent.dropData.event,\n newStart: date,\n allDay\n });\n }\n }\n /**\n * @hidden\n * @param {?} eventsContainer\n * @param {?} event\n * @param {?=} dayEvent\n * @return {?}\n */\n dragStarted(eventsContainer, event, dayEvent) {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);\n /** @type {?} */\n const dragHelper = new CalendarDragHelper(eventsContainer, event);\n this.validateDrag = ({ x, y }) => this.allDayEventResizes.size === 0 &&\n this.timeEventResizes.size === 0 &&\n dragHelper.validateDrag({\n x,\n y,\n snapDraggedEvents: this.snapDraggedEvents,\n dragAlreadyMoved: this.dragAlreadyMoved\n });\n this.dragActive = true;\n this.dragAlreadyMoved = false;\n this.eventDragEnter = 0;\n if (!this.snapDraggedEvents && dayEvent) {\n this.view.hourColumns.forEach(column => {\n /** @type {?} */\n const linkedEvent = column.events.find(columnEvent => columnEvent.event === dayEvent.event && columnEvent !== dayEvent);\n // hide any linked events while dragging\n if (linkedEvent) {\n linkedEvent.width = 0;\n linkedEvent.height = 0;\n }\n });\n }\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n * @param {?} dayEvent\n * @param {?} dragEvent\n * @return {?}\n */\n dragMove(dayEvent, dragEvent) {\n if (this.snapDraggedEvents) {\n /** @type {?} */\n const newEventTimes = this.getDragMovedEventTimes(dayEvent, dragEvent, this.dayColumnWidth, true);\n /** @type {?} */\n const originalEvent = dayEvent.event;\n /** @type {?} */\n const adjustedEvent = Object.assign({}, originalEvent, newEventTimes);\n /** @type {?} */\n const tempEvents = this.events.map(event => {\n if (event === originalEvent) {\n return adjustedEvent;\n }\n return event;\n });\n this.restoreOriginalEvents(tempEvents, new Map([[adjustedEvent, originalEvent]]));\n }\n this.dragAlreadyMoved = true;\n }\n /**\n * @hidden\n * @return {?}\n */\n allDayEventDragMove() {\n this.dragAlreadyMoved = true;\n }\n /**\n * @hidden\n * @param {?} weekEvent\n * @param {?} dragEndEvent\n * @param {?} dayWidth\n * @param {?=} useY\n * @return {?}\n */\n dragEnded(weekEvent, dragEndEvent, dayWidth, useY = false) {\n this.view = this.getWeekView(this.events);\n this.dragActive = false;\n const { start, end } = this.getDragMovedEventTimes(weekEvent, dragEndEvent, dayWidth, useY);\n if (this.eventDragEnter > 0 &&\n isDraggedWithinPeriod(start, end, this.view.period)) {\n this.eventTimesChanged.emit({\n newStart: start,\n newEnd: end,\n event: weekEvent.event,\n type: CalendarEventTimesChangedEventType.Drag,\n allDay: !useY\n });\n }\n }\n /**\n * @return {?}\n */\n refreshHeader() {\n this.days = this.utils.getWeekViewHeader(Object.assign({ viewDate: this.viewDate, weekStartsOn: this.weekStartsOn, excluded: this.excludeDays, weekendDays: this.weekendDays }, getWeekViewPeriod(this.dateAdapter, this.viewDate, this.weekStartsOn, this.excludeDays, this.daysInWeek)));\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n refreshBody() {\n this.view = this.getWeekView(this.events);\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n refreshAll() {\n this.refreshHeader();\n this.refreshBody();\n }\n /**\n * @return {?}\n */\n emitBeforeViewRender() {\n if (this.days && this.view) {\n this.beforeViewRender.emit(Object.assign({ header: this.days }, this.view));\n }\n }\n /**\n * @param {?} events\n * @return {?}\n */\n getWeekView(events) {\n return this.utils.getWeekView(Object.assign({ events, viewDate: this.viewDate, weekStartsOn: this.weekStartsOn, excluded: this.excludeDays, precision: this.precision, absolutePositionedEvents: true, hourSegments: this.hourSegments, dayStart: {\n hour: this.dayStartHour,\n minute: this.dayStartMinute\n }, dayEnd: {\n hour: this.dayEndHour,\n minute: this.dayEndMinute\n }, segmentHeight: this.hourSegmentHeight, weekendDays: this.weekendDays }, getWeekViewPeriod(this.dateAdapter, this.viewDate, this.weekStartsOn, this.excludeDays, this.daysInWeek)));\n }\n /**\n * @param {?} weekEvent\n * @param {?} dragEndEvent\n * @param {?} dayWidth\n * @param {?} useY\n * @return {?}\n */\n getDragMovedEventTimes(weekEvent, dragEndEvent, dayWidth, useY) {\n /** @type {?} */\n const daysDragged = roundToNearest(dragEndEvent.x, dayWidth) / dayWidth;\n /** @type {?} */\n const minutesMoved = useY\n ? getMinutesMoved(dragEndEvent.y, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize)\n : 0;\n /** @type {?} */\n const start = this.dateAdapter.addMinutes(this.dateAdapter.addDays(weekEvent.event.start, daysDragged), minutesMoved);\n /** @type {?} */\n let end;\n if (weekEvent.event.end) {\n end = this.dateAdapter.addMinutes(this.dateAdapter.addDays(weekEvent.event.end, daysDragged), minutesMoved);\n }\n return { start, end };\n }\n /**\n * @param {?} tempEvents\n * @param {?} adjustedEvents\n * @return {?}\n */\n restoreOriginalEvents(tempEvents, adjustedEvents) {\n /** @type {?} */\n const previousView = this.view;\n this.view = this.getWeekView(tempEvents);\n /** @type {?} */\n const adjustedEventsArray = tempEvents.filter(event => adjustedEvents.has(event));\n this.view.hourColumns.forEach((column, columnIndex) => {\n previousView.hourColumns[columnIndex].hours.forEach((hour, hourIndex) => {\n hour.segments.forEach((segment, segmentIndex) => {\n column.hours[hourIndex].segments[segmentIndex].cssClass =\n segment.cssClass;\n });\n });\n adjustedEventsArray.forEach(adjustedEvent => {\n /** @type {?} */\n const originalEvent = adjustedEvents.get(adjustedEvent);\n /** @type {?} */\n const existingColumnEvent = column.events.find(columnEvent => columnEvent.event === adjustedEvent);\n if (existingColumnEvent) {\n // restore the original event so trackBy kicks in and the dom isn't changed\n existingColumnEvent.event = originalEvent;\n }\n else {\n // add a dummy event to the drop so if the event was removed from the original column the drag doesn't end early\n column.events.push({\n event: originalEvent,\n left: 0,\n top: 0,\n height: 0,\n width: 0,\n startsBeforeDay: false,\n endsAfterDay: false\n });\n }\n });\n });\n adjustedEvents.clear();\n }\n /**\n * @param {?} calendarEvent\n * @param {?} resizeEvent\n * @return {?}\n */\n getTimeEventResizedDates(calendarEvent, resizeEvent) {\n /** @type {?} */\n const minimumEventHeight = getMinimumEventHeightInMinutes(this.hourSegments, this.hourSegmentHeight);\n /** @type {?} */\n const newEventDates = {\n start: calendarEvent.start,\n end: getDefaultEventEnd(this.dateAdapter, calendarEvent, minimumEventHeight)\n };\n const eventWithoutEnd = __rest(calendarEvent, [\"end\"]);\n /** @type {?} */\n const smallestResizes = {\n start: this.dateAdapter.addMinutes(newEventDates.end, minimumEventHeight * -1),\n end: getDefaultEventEnd(this.dateAdapter, eventWithoutEnd, minimumEventHeight)\n };\n if (typeof resizeEvent.edges.left !== 'undefined') {\n /** @type {?} */\n const daysDiff = Math.round(+resizeEvent.edges.left / this.dayColumnWidth);\n /** @type {?} */\n const newStart = this.dateAdapter.addDays(newEventDates.start, daysDiff);\n if (newStart < smallestResizes.start) {\n newEventDates.start = newStart;\n }\n else {\n newEventDates.start = smallestResizes.start;\n }\n }\n else if (typeof resizeEvent.edges.right !== 'undefined') {\n /** @type {?} */\n const daysDiff = Math.round(+resizeEvent.edges.right / this.dayColumnWidth);\n /** @type {?} */\n const newEnd = this.dateAdapter.addDays(newEventDates.end, daysDiff);\n if (newEnd > smallestResizes.end) {\n newEventDates.end = newEnd;\n }\n else {\n newEventDates.end = smallestResizes.end;\n }\n }\n if (typeof resizeEvent.edges.top !== 'undefined') {\n /** @type {?} */\n const minutesMoved = getMinutesMoved(/** @type {?} */ (resizeEvent.edges.top), this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);\n /** @type {?} */\n const newStart = this.dateAdapter.addMinutes(newEventDates.start, minutesMoved);\n if (newStart < smallestResizes.start) {\n newEventDates.start = newStart;\n }\n else {\n newEventDates.start = smallestResizes.start;\n }\n }\n else if (typeof resizeEvent.edges.bottom !== 'undefined') {\n /** @type {?} */\n const minutesMoved = getMinutesMoved(/** @type {?} */ (resizeEvent.edges.bottom), this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);\n /** @type {?} */\n const newEnd = this.dateAdapter.addMinutes(newEventDates.end, minutesMoved);\n if (newEnd > smallestResizes.end) {\n newEventDates.end = newEnd;\n }\n else {\n newEventDates.end = smallestResizes.end;\n }\n }\n return newEventDates;\n }\n}\nCalendarWeekViewComponent.ɵfac = function CalendarWeekViewComponent_Factory(t) { return new (t || CalendarWeekViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CalendarUtils), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID), ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarWeekViewComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarWeekViewComponent, selectors: [[\"mwl-calendar-week-view\"]], inputs: { events: \"events\", excludeDays: \"excludeDays\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", precision: \"precision\", snapDraggedEvents: \"snapDraggedEvents\", hourSegments: \"hourSegments\", hourSegmentHeight: \"hourSegmentHeight\", dayStartHour: \"dayStartHour\", dayStartMinute: \"dayStartMinute\", dayEndHour: \"dayEndHour\", dayEndMinute: \"dayEndMinute\", locale: \"locale\", viewDate: \"viewDate\", refresh: \"refresh\", tooltipTemplate: \"tooltipTemplate\", weekStartsOn: \"weekStartsOn\", headerTemplate: \"headerTemplate\", eventTemplate: \"eventTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\", weekendDays: \"weekendDays\", hourSegmentTemplate: \"hourSegmentTemplate\", eventSnapSize: \"eventSnapSize\", allDayEventsLabelTemplate: \"allDayEventsLabelTemplate\", daysInWeek: \"daysInWeek\" }, outputs: { dayHeaderClicked: \"dayHeaderClicked\", eventClicked: \"eventClicked\", eventTimesChanged: \"eventTimesChanged\", beforeViewRender: \"beforeViewRender\", hourSegmentClicked: \"hourSegmentClicked\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 8, vars: 9, consts: [[1, \"cal-week-view\"], [3, \"days\", \"locale\", \"customTemplate\", \"dayHeaderClicked\", \"eventDropped\"], [\"class\", \"cal-all-day-events\", \"mwlDroppable\", \"\", 3, \"dragEnter\", \"dragLeave\", 4, \"ngIf\"], [\"mwlDroppable\", \"\", 1, \"cal-time-events\", 3, \"dragEnter\", \"dragLeave\"], [\"class\", \"cal-time-label-column\", 4, \"ngIf\"], [1, \"cal-day-columns\"], [\"dayColumns\", \"\"], [\"class\", \"cal-day-column\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", 1, \"cal-all-day-events\", 3, \"dragEnter\", \"dragLeave\"], [\"allDayEventsContainer\", \"\"], [1, \"cal-time-label-column\", 3, \"ngTemplateOutlet\"], [\"class\", \"cal-day-column\", \"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 3, \"drop\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"class\", \"cal-events-row\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 1, \"cal-day-column\", 3, \"drop\"], [1, \"cal-events-row\"], [\"eventRowContainer\", \"\"], [\"class\", \"cal-event-container\", \"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"cal-draggable\", \"cal-starts-within-week\", \"cal-ends-within-week\", \"ngClass\", \"width\", \"marginLeft\", \"resizeSnapGrid\", \"validateResize\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"validateDrag\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 1, \"cal-event-container\", 3, \"ngClass\", \"resizeSnapGrid\", \"validateResize\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"validateDrag\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\"], [\"event\", \"\"], [\"class\", \"cal-resize-handle cal-resize-handle-before-start\", \"mwlResizeHandle\", \"\", 3, \"resizeEdges\", 4, \"ngIf\"], [3, \"weekEvent\", \"tooltipPlacement\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"eventClicked\"], [\"class\", \"cal-resize-handle cal-resize-handle-after-end\", \"mwlResizeHandle\", \"\", 3, \"resizeEdges\", 4, \"ngIf\"], [\"mwlResizeHandle\", \"\", 1, \"cal-resize-handle\", \"cal-resize-handle-before-start\", 3, \"resizeEdges\"], [\"mwlResizeHandle\", \"\", 1, \"cal-resize-handle\", \"cal-resize-handle-after-end\", 3, \"resizeEdges\"], [1, \"cal-time-label-column\"], [\"class\", \"cal-hour\", 3, \"cal-hour-odd\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [1, \"cal-hour\"], [3, \"height\", \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"isTimeLabel\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [3, \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"isTimeLabel\"], [1, \"cal-day-column\"], [\"class\", \"cal-event-container\", \"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"cal-draggable\", \"cal-starts-within-day\", \"cal-ends-within-day\", \"ngClass\", \"hidden\", \"top\", \"height\", \"left\", \"width\", \"resizeSnapGrid\", \"validateResize\", \"allowNegativeResizes\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"ghostDragEnabled\", \"validateDrag\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 1, \"cal-event-container\", 3, \"ngClass\", \"hidden\", \"resizeSnapGrid\", \"validateResize\", \"allowNegativeResizes\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"ghostDragEnabled\", \"validateDrag\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\"], [3, \"weekEvent\", \"tooltipPlacement\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"tooltipDisabled\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"eventClicked\"], [\"mwlDroppable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"height\", \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"dragOverClass\", \"mwlClick\", \"drop\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"dragOverClass\", \"mwlClick\", \"drop\"]], template: function CalendarWeekViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0)(1, \"mwl-calendar-week-view-header\", 1);\n ɵngcc0.ɵɵlistener(\"dayHeaderClicked\", function CalendarWeekViewComponent_Template_mwl_calendar_week_view_header_dayHeaderClicked_1_listener($event) { return ctx.dayHeaderClicked.emit($event); })(\"eventDropped\", function CalendarWeekViewComponent_Template_mwl_calendar_week_view_header_eventDropped_1_listener($event) { return ctx.eventDropped({ dropData: $event }, $event.newStart, true); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewComponent_div_2_Template, 6, 5, \"div\", 2);\n ɵngcc0.ɵɵelementStart(3, \"div\", 3);\n ɵngcc0.ɵɵlistener(\"dragEnter\", function CalendarWeekViewComponent_Template_div_dragEnter_3_listener() { return ctx.eventDragEnter = ctx.eventDragEnter + 1; })(\"dragLeave\", function CalendarWeekViewComponent_Template_div_dragLeave_3_listener() { return ctx.eventDragEnter = ctx.eventDragEnter - 1; });\n ɵngcc0.ɵɵtemplate(4, CalendarWeekViewComponent_div_4_Template, 2, 2, \"div\", 4);\n ɵngcc0.ɵɵelementStart(5, \"div\", 5, 6);\n ɵngcc0.ɵɵtemplate(7, CalendarWeekViewComponent_div_7_Template, 3, 4, \"div\", 7);\n ɵngcc0.ɵɵelementEnd()()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"days\", ctx.days)(\"locale\", ctx.locale)(\"customTemplate\", ctx.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.view.allDayEventRows.length > 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.view.hourColumns.length > 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"cal-resize-active\", ctx.timeEventResizes.size > 0);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.view.hourColumns)(\"ngForTrackBy\", ctx.trackByHourColumn);\n } }, directives: function () { return [CalendarWeekViewHeaderComponent, ɵngcc1.NgIf, ɵngcc2.ɵa, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgForOf, ɵngcc3.ResizableDirective, ɵngcc2.ɵb, ɵngcc1.NgClass, ɵngcc3.ResizeHandleDirective, CalendarWeekViewEventComponent, CalendarWeekViewHourSegmentComponent, ClickDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nCalendarWeekViewComponent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: CalendarUtils },\n { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },\n { type: DateAdapter }\n];\nCalendarWeekViewComponent.propDecorators = {\n viewDate: [{ type: Input }],\n events: [{ type: Input }],\n excludeDays: [{ type: Input }],\n refresh: [{ type: Input }],\n locale: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n weekStartsOn: [{ type: Input }],\n headerTemplate: [{ type: Input }],\n eventTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n precision: [{ type: Input }],\n weekendDays: [{ type: Input }],\n snapDraggedEvents: [{ type: Input }],\n hourSegments: [{ type: Input }],\n hourSegmentHeight: [{ type: Input }],\n dayStartHour: [{ type: Input }],\n dayStartMinute: [{ type: Input }],\n dayEndHour: [{ type: Input }],\n dayEndMinute: [{ type: Input }],\n hourSegmentTemplate: [{ type: Input }],\n eventSnapSize: [{ type: Input }],\n allDayEventsLabelTemplate: [{ type: Input }],\n daysInWeek: [{ type: Input }],\n dayHeaderClicked: [{ type: Output }],\n eventClicked: [{ type: Output }],\n eventTimesChanged: [{ type: Output }],\n beforeViewRender: [{ type: Output }],\n hourSegmentClicked: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarWeekViewComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-week-view',\n template: `\n
            \n \n \n 0\"\n mwlDroppable\n (dragEnter)=\"eventDragEnter = eventDragEnter + 1\"\n (dragLeave)=\"eventDragEnter = eventDragEnter - 1\"\n >\n
            \n
            \n
            \n \n \n \n \n \n \n \n \n \n \n \n
            0\">\n \n \n \n
            \n \n 0\"\n #dayColumns\n >\n \n \n \n 0\"\n [customTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n (eventClicked)=\"eventClicked.emit({ event: timeEvent.event })\"\n >\n \n \n \n\n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: CalendarUtils }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: DateAdapter }]; }, { events: [{\n type: Input\n }], excludeDays: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], precision: [{\n type: Input\n }], snapDraggedEvents: [{\n type: Input\n }], hourSegments: [{\n type: Input\n }], hourSegmentHeight: [{\n type: Input\n }], dayStartHour: [{\n type: Input\n }], dayStartMinute: [{\n type: Input\n }], dayEndHour: [{\n type: Input\n }], dayEndMinute: [{\n type: Input\n }], dayHeaderClicked: [{\n type: Output\n }], eventClicked: [{\n type: Output\n }], eventTimesChanged: [{\n type: Output\n }], beforeViewRender: [{\n type: Output\n }], hourSegmentClicked: [{\n type: Output\n }], locale: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], refresh: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }], weekStartsOn: [{\n type: Input\n }], headerTemplate: [{\n type: Input\n }], eventTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }], weekendDays: [{\n type: Input\n }], hourSegmentTemplate: [{\n type: Input\n }], eventSnapSize: [{\n type: Input\n }], allDayEventsLabelTemplate: [{\n type: Input\n }], daysInWeek: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarWeekViewHeaderComponent {\n constructor() {\n this.dayHeaderClicked = new EventEmitter();\n this.eventDropped = new EventEmitter();\n this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n }\n}\nCalendarWeekViewHeaderComponent.ɵfac = function CalendarWeekViewHeaderComponent_Factory(t) { return new (t || CalendarWeekViewHeaderComponent)(); };\nCalendarWeekViewHeaderComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarWeekViewHeaderComponent, selectors: [[\"mwl-calendar-week-view-header\"]], inputs: { days: \"days\", locale: \"locale\", customTemplate: \"customTemplate\" }, outputs: { dayHeaderClicked: \"dayHeaderClicked\", eventDropped: \"eventDropped\" }, decls: 3, vars: 7, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-day-headers\"], [\"class\", \"cal-header\", \"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 3, \"cal-past\", \"cal-today\", \"cal-future\", \"cal-weekend\", \"ngClass\", \"mwlClick\", \"drop\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", 1, \"cal-header\", 3, \"ngClass\", \"mwlClick\", \"drop\"]], template: function CalendarWeekViewHeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarWeekViewHeaderComponent_ng_template_0_Template, 2, 2, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewHeaderComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction4(2, _c17, ctx.days, ctx.locale, ctx.dayHeaderClicked, ctx.eventDropped));\n } }, directives: [ɵngcc1.NgForOf, ɵngcc2.ɵa, ɵngcc1.NgClass, ClickDirective, ɵngcc1.NgTemplateOutlet], pipes: [CalendarDatePipe], encapsulation: 2 });\nCalendarWeekViewHeaderComponent.propDecorators = {\n days: [{ type: Input }],\n locale: [{ type: Input }],\n customTemplate: [{ type: Input }],\n dayHeaderClicked: [{ type: Output }],\n eventDropped: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarWeekViewHeaderComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-week-view-header',\n template: `\n \n
            \n \n {{ day.date | calendarDate: 'weekViewColumnHeader':locale }}
            \n {{\n day.date | calendarDate: 'weekViewColumnSubHeader':locale\n }}\n
            \n \n \n \n \n `\n }]\n }], function () { return []; }, { dayHeaderClicked: [{\n type: Output\n }], eventDropped: [{\n type: Output\n }], days: [{\n type: Input\n }], locale: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarWeekViewEventComponent {\n constructor() {\n this.eventClicked = new EventEmitter();\n }\n}\nCalendarWeekViewEventComponent.ɵfac = function CalendarWeekViewEventComponent_Factory(t) { return new (t || CalendarWeekViewEventComponent)(); };\nCalendarWeekViewEventComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarWeekViewEventComponent, selectors: [[\"mwl-calendar-week-view-event\"]], inputs: { weekEvent: \"weekEvent\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", tooltipDisabled: \"tooltipDisabled\", customTemplate: \"customTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\", tooltipTemplate: \"tooltipTemplate\" }, outputs: { eventClicked: \"eventClicked\" }, decls: 3, vars: 9, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-event\", 3, \"mwlCalendarTooltip\", \"tooltipPlacement\", \"tooltipEvent\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"mwlClick\"], [3, \"event\", \"customTemplate\"], [\"view\", \"week\", 3, \"event\", \"customTemplate\"]], template: function CalendarWeekViewEventComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarWeekViewEventComponent_ng_template_0_Template, 5, 17, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewEventComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction6(2, _c18, ctx.weekEvent, ctx.tooltipPlacement, ctx.eventClicked, ctx.tooltipTemplate, ctx.tooltipAppendToBody, ctx.tooltipDisabled));\n } }, directives: [CalendarTooltipDirective, ClickDirective, CalendarEventActionsComponent, CalendarEventTitleComponent, ɵngcc1.NgTemplateOutlet], pipes: [CalendarEventTitlePipe], encapsulation: 2 });\nCalendarWeekViewEventComponent.propDecorators = {\n weekEvent: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n tooltipDisabled: [{ type: Input }],\n customTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n eventClicked: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarWeekViewEventComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-week-view-event',\n template: `\n \n \n \n \n &ngsp;\n \n \n \n \n \n \n `\n }]\n }], function () { return []; }, { eventClicked: [{\n type: Output\n }], weekEvent: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], tooltipDisabled: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarWeekViewHourSegmentComponent {\n}\nCalendarWeekViewHourSegmentComponent.ɵfac = function CalendarWeekViewHourSegmentComponent_Factory(t) { return new (t || CalendarWeekViewHourSegmentComponent)(); };\nCalendarWeekViewHourSegmentComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarWeekViewHourSegmentComponent, selectors: [[\"mwl-calendar-week-view-hour-segment\"]], inputs: { segment: \"segment\", segmentHeight: \"segmentHeight\", locale: \"locale\", isTimeLabel: \"isTimeLabel\", customTemplate: \"customTemplate\" }, decls: 3, vars: 7, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-hour-segment\", 3, \"ngClass\"], [\"class\", \"cal-time\", 4, \"ngIf\"], [1, \"cal-time\"]], template: function CalendarWeekViewHourSegmentComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarWeekViewHourSegmentComponent_ng_template_0_Template, 2, 8, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarWeekViewHourSegmentComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction4(2, _c19, ctx.segment, ctx.locale, ctx.segmentHeight, ctx.isTimeLabel));\n } }, directives: [ɵngcc1.NgClass, ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet], pipes: [CalendarDatePipe], encapsulation: 2 });\nCalendarWeekViewHourSegmentComponent.propDecorators = {\n segment: [{ type: Input }],\n segmentHeight: [{ type: Input }],\n locale: [{ type: Input }],\n isTimeLabel: [{ type: Input }],\n customTemplate: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarWeekViewHourSegmentComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-week-view-hour-segment',\n template: `\n \n \n
            \n {{ segment.date | calendarDate: 'weekViewHour':locale }}\n
            \n \n \n \n \n `\n }]\n }], null, { segment: [{\n type: Input\n }], segmentHeight: [{\n type: Input\n }], locale: [{\n type: Input\n }], isTimeLabel: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarWeekModule {\n}\nCalendarWeekModule.ɵfac = function CalendarWeekModule_Factory(t) { return new (t || CalendarWeekModule)(); };\nCalendarWeekModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CalendarWeekModule });\nCalendarWeekModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n ResizableModule,\n DragAndDropModule,\n CalendarCommonModule\n ], ResizableModule,\n DragAndDropModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarWeekModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n ResizableModule,\n DragAndDropModule,\n CalendarCommonModule\n ],\n declarations: [\n CalendarWeekViewComponent,\n CalendarWeekViewHeaderComponent,\n CalendarWeekViewEventComponent,\n CalendarWeekViewHourSegmentComponent\n ],\n exports: [\n ResizableModule,\n DragAndDropModule,\n CalendarWeekViewComponent,\n CalendarWeekViewHeaderComponent,\n CalendarWeekViewEventComponent,\n CalendarWeekViewHourSegmentComponent\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarWeekModule, { declarations: function () { return [CalendarWeekViewComponent, CalendarWeekViewHeaderComponent, CalendarWeekViewEventComponent, CalendarWeekViewHourSegmentComponent]; }, imports: function () { return [CommonModule,\n ResizableModule,\n DragAndDropModule, CalendarCommonModule]; }, exports: function () { return [ResizableModule,\n DragAndDropModule, CalendarWeekViewComponent, CalendarWeekViewHeaderComponent, CalendarWeekViewEventComponent, CalendarWeekViewHourSegmentComponent]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Shows all events on a given day. Example usage:\n *\n * ```typescript\n * \n * \n * ```\n */\nclass CalendarDayViewComponent {\n /**\n * @hidden\n * @param {?} cdr\n * @param {?} utils\n * @param {?} locale\n * @param {?} dateAdapter\n */\n constructor(cdr, utils, locale, dateAdapter) {\n this.cdr = cdr;\n this.utils = utils;\n this.dateAdapter = dateAdapter;\n /**\n * An array of events to display on view\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n this.events = [];\n /**\n * The number of segments in an hour. Must be <= 6\n */\n this.hourSegments = 2;\n /**\n * The height in pixels of each hour segment\n */\n this.hourSegmentHeight = 30;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n this.dayStartHour = 0;\n /**\n * The day start minutes. Must be 0-59\n */\n this.dayStartMinute = 0;\n /**\n * The day end hours in 24 hour time. Must be 0-23\n */\n this.dayEndHour = 23;\n /**\n * The day end minutes. Must be 0-59\n */\n this.dayEndMinute = 59;\n /**\n * The width in pixels of each event on the view\n */\n this.eventWidth = 150;\n /**\n * The placement of the event tooltip\n */\n this.tooltipPlacement = 'auto';\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n this.tooltipAppendToBody = true;\n /**\n * Whether to snap events to a grid when dragging\n */\n this.snapDraggedEvents = true;\n /**\n * Called when an event title is clicked\n */\n this.eventClicked = new EventEmitter();\n /**\n * Called when an hour segment is clicked\n */\n this.hourSegmentClicked = new EventEmitter();\n /**\n * Called when an event is resized or dragged and dropped\n */\n this.eventTimesChanged = new EventEmitter();\n /**\n * An output that will be called before the view is rendered for the current day.\n * If you add the `cssClass` property to an hour grid segment it will add that class to the hour segment in the template\n */\n this.beforeViewRender = new EventEmitter();\n /**\n * @hidden\n */\n this.hours = [];\n /**\n * @hidden\n */\n this.width = 0;\n /**\n * @hidden\n */\n this.currentResizes = new Map();\n /**\n * @hidden\n */\n this.eventDragEnter = 0;\n /**\n * @hidden\n */\n this.calendarId = Symbol('angular calendar day view id');\n /**\n * @hidden\n */\n this.dragAlreadyMoved = false;\n /**\n * @hidden\n */\n this.trackByEventId = trackByEventId;\n /**\n * @hidden\n */\n this.trackByHour = trackByHour;\n /**\n * @hidden\n */\n this.trackByHourSegment = trackByHourSegment;\n /**\n * @hidden\n */\n this.trackByDayEvent = trackByDayOrWeekEvent;\n this.locale = locale;\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnInit() {\n if (this.refresh) {\n this.refreshSubscription = this.refresh.subscribe(() => {\n this.refreshAll();\n this.cdr.markForCheck();\n });\n }\n }\n /**\n * @hidden\n * @return {?}\n */\n ngOnDestroy() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n * @param {?} changes\n * @return {?}\n */\n ngOnChanges(changes) {\n if (changes.viewDate ||\n changes.dayStartHour ||\n changes.dayStartMinute ||\n changes.dayEndHour ||\n changes.dayEndMinute ||\n changes.hourSegments) {\n this.refreshHourGrid();\n }\n if (changes.events) {\n validateEvents$1(this.events);\n }\n if (changes.viewDate ||\n changes.events ||\n changes.dayStartHour ||\n changes.dayStartMinute ||\n changes.dayEndHour ||\n changes.dayEndMinute ||\n changes.eventWidth) {\n this.refreshView();\n }\n }\n /**\n * @param {?} dropEvent\n * @param {?} date\n * @param {?} allDay\n * @return {?}\n */\n eventDropped(dropEvent, date, allDay) {\n if (shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId)) {\n this.eventTimesChanged.emit({\n type: CalendarEventTimesChangedEventType.Drop,\n event: dropEvent.dropData.event,\n newStart: date,\n allDay\n });\n }\n }\n /**\n * @param {?} event\n * @param {?} resizeEvent\n * @param {?} dayEventsContainer\n * @return {?}\n */\n resizeStarted(event, resizeEvent, dayEventsContainer) {\n this.currentResizes.set(event, {\n originalTop: event.top,\n originalHeight: event.height,\n edge: typeof resizeEvent.edges.top !== 'undefined' ? 'top' : 'bottom'\n });\n /** @type {?} */\n const resizeHelper = new CalendarResizeHelper(dayEventsContainer);\n this.validateResize = ({ rectangle }) => resizeHelper.validateResize({ rectangle });\n this.cdr.markForCheck();\n }\n /**\n * @param {?} event\n * @param {?} resizeEvent\n * @return {?}\n */\n resizing(event, resizeEvent) {\n /** @type {?} */\n const currentResize = this.currentResizes.get(event);\n if (typeof resizeEvent.edges.top !== 'undefined') {\n event.top = currentResize.originalTop + +resizeEvent.edges.top;\n event.height = currentResize.originalHeight - +resizeEvent.edges.top;\n }\n else if (typeof resizeEvent.edges.bottom !== 'undefined') {\n event.height = currentResize.originalHeight + +resizeEvent.edges.bottom;\n }\n }\n /**\n * @param {?} dayEvent\n * @return {?}\n */\n resizeEnded(dayEvent) {\n /** @type {?} */\n const currentResize = this.currentResizes.get(dayEvent);\n /** @type {?} */\n const resizingBeforeStart = currentResize.edge === 'top';\n /** @type {?} */\n let pixelsMoved;\n if (resizingBeforeStart) {\n pixelsMoved = dayEvent.top - currentResize.originalTop;\n }\n else {\n pixelsMoved = dayEvent.height - currentResize.originalHeight;\n }\n dayEvent.top = currentResize.originalTop;\n dayEvent.height = currentResize.originalHeight;\n /** @type {?} */\n const minutesMoved = getMinutesMoved(pixelsMoved, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);\n /** @type {?} */\n let newStart = dayEvent.event.start;\n /** @type {?} */\n let newEnd = getDefaultEventEnd(this.dateAdapter, dayEvent.event, getMinimumEventHeightInMinutes(this.hourSegments, this.hourSegmentHeight));\n if (resizingBeforeStart) {\n newStart = this.dateAdapter.addMinutes(newStart, minutesMoved);\n }\n else {\n newEnd = this.dateAdapter.addMinutes(newEnd, minutesMoved);\n }\n this.eventTimesChanged.emit({\n newStart,\n newEnd,\n event: dayEvent.event,\n type: CalendarEventTimesChangedEventType.Resize\n });\n this.currentResizes.delete(dayEvent);\n }\n /**\n * @param {?} event\n * @param {?} dayEventsContainer\n * @return {?}\n */\n dragStarted(event, dayEventsContainer) {\n /** @type {?} */\n const dragHelper = new CalendarDragHelper(dayEventsContainer, event);\n this.validateDrag = ({ x, y }) => this.currentResizes.size === 0 &&\n dragHelper.validateDrag({\n x,\n y,\n snapDraggedEvents: this.snapDraggedEvents,\n dragAlreadyMoved: this.dragAlreadyMoved\n });\n this.eventDragEnter = 0;\n this.dragAlreadyMoved = false;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n * @return {?}\n */\n dragMove() {\n this.dragAlreadyMoved = true;\n }\n /**\n * @param {?} dayEvent\n * @param {?} dragEndEvent\n * @return {?}\n */\n dragEnded(dayEvent, dragEndEvent) {\n if (this.eventDragEnter > 0) {\n /** @type {?} */\n let minutesMoved = getMinutesMoved(dragEndEvent.y, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);\n /** @type {?} */\n let newStart = this.dateAdapter.addMinutes(dayEvent.event.start, minutesMoved);\n if (dragEndEvent.y < 0 && newStart < this.view.period.start) {\n minutesMoved += this.dateAdapter.differenceInMinutes(this.view.period.start, newStart);\n newStart = this.view.period.start;\n }\n /** @type {?} */\n let newEnd;\n if (dayEvent.event.end) {\n newEnd = this.dateAdapter.addMinutes(dayEvent.event.end, minutesMoved);\n }\n if (isDraggedWithinPeriod(newStart, newEnd, this.view.period)) {\n this.eventTimesChanged.emit({\n newStart,\n newEnd,\n event: dayEvent.event,\n type: CalendarEventTimesChangedEventType.Drag,\n allDay: false\n });\n }\n }\n }\n /**\n * @return {?}\n */\n refreshHourGrid() {\n this.hours = this.utils.getDayViewHourGrid({\n viewDate: this.viewDate,\n hourSegments: this.hourSegments,\n dayStart: {\n hour: this.dayStartHour,\n minute: this.dayStartMinute\n },\n dayEnd: {\n hour: this.dayEndHour,\n minute: this.dayEndMinute\n }\n });\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n refreshView() {\n this.view = this.utils.getDayView({\n events: this.events,\n viewDate: this.viewDate,\n hourSegments: this.hourSegments,\n dayStart: {\n hour: this.dayStartHour,\n minute: this.dayStartMinute\n },\n dayEnd: {\n hour: this.dayEndHour,\n minute: this.dayEndMinute\n },\n eventWidth: this.eventWidth,\n segmentHeight: this.hourSegmentHeight\n });\n this.emitBeforeViewRender();\n }\n /**\n * @return {?}\n */\n refreshAll() {\n this.refreshHourGrid();\n this.refreshView();\n }\n /**\n * @return {?}\n */\n emitBeforeViewRender() {\n if (this.hours && this.view) {\n this.beforeViewRender.emit({\n body: {\n hourGrid: this.hours,\n allDayEvents: this.view.allDayEvents\n },\n period: this.view.period\n });\n }\n }\n}\nCalendarDayViewComponent.ɵfac = function CalendarDayViewComponent_Factory(t) { return new (t || CalendarDayViewComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(CalendarUtils), ɵngcc0.ɵɵdirectiveInject(LOCALE_ID), ɵngcc0.ɵɵdirectiveInject(DateAdapter)); };\nCalendarDayViewComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarDayViewComponent, selectors: [[\"mwl-calendar-day-view\"]], inputs: { events: \"events\", hourSegments: \"hourSegments\", hourSegmentHeight: \"hourSegmentHeight\", dayStartHour: \"dayStartHour\", dayStartMinute: \"dayStartMinute\", dayEndHour: \"dayEndHour\", dayEndMinute: \"dayEndMinute\", eventWidth: \"eventWidth\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", snapDraggedEvents: \"snapDraggedEvents\", locale: \"locale\", viewDate: \"viewDate\", refresh: \"refresh\", eventSnapSize: \"eventSnapSize\", tooltipTemplate: \"tooltipTemplate\", hourSegmentTemplate: \"hourSegmentTemplate\", eventTemplate: \"eventTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\" }, outputs: { eventClicked: \"eventClicked\", hourSegmentClicked: \"hourSegmentClicked\", eventTimesChanged: \"eventTimesChanged\", beforeViewRender: \"beforeViewRender\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 8, vars: 6, consts: [[1, \"cal-day-view\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", \"dragActiveClass\", \"cal-drag-active\", 1, \"cal-all-day-events\", 3, \"drop\"], [\"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"ngClass\", \"dayEvent\", \"tooltipPlacement\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"cal-draggable\", \"dropData\", \"dragAxis\", \"eventClicked\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", 1, \"cal-hour-rows\", 3, \"dragEnter\", \"dragLeave\"], [\"dayEventsContainer\", \"\"], [1, \"cal-events\"], [\"class\", \"cal-event-container\", \"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"cal-draggable\", \"cal-starts-within-day\", \"cal-ends-within-day\", \"ngClass\", \"resizeSnapGrid\", \"validateResize\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"validateDrag\", \"marginTop\", \"height\", \"marginLeft\", \"width\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"class\", \"cal-hour\", 3, \"minWidth\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 3, \"ngClass\", \"dayEvent\", \"tooltipPlacement\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"dropData\", \"dragAxis\", \"eventClicked\"], [\"mwlResizable\", \"\", \"mwlDraggable\", \"\", \"dragActiveClass\", \"cal-drag-active\", 1, \"cal-event-container\", 3, \"ngClass\", \"resizeSnapGrid\", \"validateResize\", \"dropData\", \"dragAxis\", \"dragSnapGrid\", \"validateDrag\", \"resizeStart\", \"resizing\", \"resizeEnd\", \"dragStart\", \"dragging\", \"dragEnd\"], [\"event\", \"\"], [\"class\", \"cal-resize-handle cal-resize-handle-before-start\", \"mwlResizeHandle\", \"\", 3, \"resizeEdges\", 4, \"ngIf\"], [3, \"dayEvent\", \"tooltipPlacement\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"customTemplate\", \"eventTitleTemplate\", \"eventActionsTemplate\", \"eventClicked\"], [\"class\", \"cal-resize-handle cal-resize-handle-after-end\", \"mwlResizeHandle\", \"\", 3, \"resizeEdges\", 4, \"ngIf\"], [\"mwlResizeHandle\", \"\", 1, \"cal-resize-handle\", \"cal-resize-handle-before-start\", 3, \"resizeEdges\"], [\"mwlResizeHandle\", \"\", 1, \"cal-resize-handle\", \"cal-resize-handle-after-end\", 3, \"resizeEdges\"], [1, \"cal-hour\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", \"dragActiveClass\", \"cal-drag-active\", 3, \"height\", \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"mwlClick\", \"drop\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"mwlDroppable\", \"\", \"dragOverClass\", \"cal-drag-over\", \"dragActiveClass\", \"cal-drag-active\", 3, \"segment\", \"segmentHeight\", \"locale\", \"customTemplate\", \"mwlClick\", \"drop\"]], template: function CalendarDayViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0)(1, \"div\", 1);\n ɵngcc0.ɵɵlistener(\"drop\", function CalendarDayViewComponent_Template_div_drop_1_listener($event) { return ctx.eventDropped($event, ctx.view.period.start, true); });\n ɵngcc0.ɵɵtemplate(2, CalendarDayViewComponent_mwl_calendar_day_view_event_2_Template, 1, 20, \"mwl-calendar-day-view-event\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"div\", 3, 4);\n ɵngcc0.ɵɵlistener(\"dragEnter\", function CalendarDayViewComponent_Template_div_dragEnter_3_listener() { return ctx.eventDragEnter = ctx.eventDragEnter + 1; })(\"dragLeave\", function CalendarDayViewComponent_Template_div_dragLeave_3_listener() { return ctx.eventDragEnter = ctx.eventDragEnter - 1; });\n ɵngcc0.ɵɵelementStart(5, \"div\", 5);\n ɵngcc0.ɵɵtemplate(6, CalendarDayViewComponent_div_6_Template, 5, 42, \"div\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, CalendarDayViewComponent_div_7_Template, 2, 4, \"div\", 7);\n ɵngcc0.ɵɵelementEnd()();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.view.allDayEvents)(\"ngForTrackBy\", ctx.trackByEventId);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.view == null ? null : ctx.view.events)(\"ngForTrackBy\", ctx.trackByDayEvent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.hours)(\"ngForTrackBy\", ctx.trackByHour);\n } }, directives: function () { return [ɵngcc2.ɵa, ɵngcc1.NgForOf, CalendarDayViewEventComponent, ɵngcc2.ɵb, ɵngcc1.NgClass, ɵngcc3.ResizableDirective, ɵngcc1.NgIf, ɵngcc3.ResizeHandleDirective, CalendarDayViewHourSegmentComponent, ClickDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nCalendarDayViewComponent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: CalendarUtils },\n { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },\n { type: DateAdapter }\n];\nCalendarDayViewComponent.propDecorators = {\n viewDate: [{ type: Input }],\n events: [{ type: Input }],\n hourSegments: [{ type: Input }],\n hourSegmentHeight: [{ type: Input }],\n dayStartHour: [{ type: Input }],\n dayStartMinute: [{ type: Input }],\n dayEndHour: [{ type: Input }],\n dayEndMinute: [{ type: Input }],\n eventWidth: [{ type: Input }],\n refresh: [{ type: Input }],\n locale: [{ type: Input }],\n eventSnapSize: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n hourSegmentTemplate: [{ type: Input }],\n eventTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n snapDraggedEvents: [{ type: Input }],\n eventClicked: [{ type: Output }],\n hourSegmentClicked: [{ type: Output }],\n eventTimesChanged: [{ type: Output }],\n beforeViewRender: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDayViewComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-day-view',\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 }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: CalendarUtils }, { type: String, decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }] }, { type: DateAdapter }]; }, { events: [{\n type: Input\n }], hourSegments: [{\n type: Input\n }], hourSegmentHeight: [{\n type: Input\n }], dayStartHour: [{\n type: Input\n }], dayStartMinute: [{\n type: Input\n }], dayEndHour: [{\n type: Input\n }], dayEndMinute: [{\n type: Input\n }], eventWidth: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], snapDraggedEvents: [{\n type: Input\n }], eventClicked: [{\n type: Output\n }], hourSegmentClicked: [{\n type: Output\n }], eventTimesChanged: [{\n type: Output\n }], beforeViewRender: [{\n type: Output\n }], locale: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], refresh: [{\n type: Input\n }], eventSnapSize: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }], hourSegmentTemplate: [{\n type: Input\n }], eventTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarDayViewHourSegmentComponent {\n}\nCalendarDayViewHourSegmentComponent.ɵfac = function CalendarDayViewHourSegmentComponent_Factory(t) { return new (t || CalendarDayViewHourSegmentComponent)(); };\nCalendarDayViewHourSegmentComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarDayViewHourSegmentComponent, selectors: [[\"mwl-calendar-day-view-hour-segment\"]], inputs: { segment: \"segment\", segmentHeight: \"segmentHeight\", locale: \"locale\", customTemplate: \"customTemplate\" }, decls: 3, vars: 6, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-hour-segment\", 3, \"ngClass\"], [1, \"cal-time\"]], template: function CalendarDayViewHourSegmentComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarDayViewHourSegmentComponent_ng_template_0_Template, 4, 12, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarDayViewHourSegmentComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(2, _c24, ctx.segment, ctx.locale, ctx.segmentHeight));\n } }, directives: [ɵngcc1.NgClass, ɵngcc1.NgTemplateOutlet], pipes: [CalendarDatePipe], encapsulation: 2 });\nCalendarDayViewHourSegmentComponent.propDecorators = {\n segment: [{ type: Input }],\n segmentHeight: [{ type: Input }],\n locale: [{ type: Input }],\n customTemplate: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDayViewHourSegmentComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-day-view-hour-segment',\n template: `\n \n \n
            \n {{ segment.date | calendarDate: 'dayViewHour':locale }}\n
            \n \n \n \n \n `\n }]\n }], null, { segment: [{\n type: Input\n }], segmentHeight: [{\n type: Input\n }], locale: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarDayViewEventComponent {\n constructor() {\n this.eventClicked = new EventEmitter();\n }\n}\nCalendarDayViewEventComponent.ɵfac = function CalendarDayViewEventComponent_Factory(t) { return new (t || CalendarDayViewEventComponent)(); };\nCalendarDayViewEventComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CalendarDayViewEventComponent, selectors: [[\"mwl-calendar-day-view-event\"]], inputs: { dayEvent: \"dayEvent\", tooltipPlacement: \"tooltipPlacement\", tooltipAppendToBody: \"tooltipAppendToBody\", customTemplate: \"customTemplate\", eventTitleTemplate: \"eventTitleTemplate\", eventActionsTemplate: \"eventActionsTemplate\", tooltipTemplate: \"tooltipTemplate\" }, outputs: { eventClicked: \"eventClicked\" }, decls: 3, vars: 8, consts: [[\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"cal-event\", 3, \"mwlCalendarTooltip\", \"tooltipPlacement\", \"tooltipEvent\", \"tooltipTemplate\", \"tooltipAppendToBody\", \"mwlClick\"], [3, \"event\", \"customTemplate\"], [\"view\", \"day\", 3, \"event\", \"customTemplate\"]], template: function CalendarDayViewEventComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CalendarDayViewEventComponent_ng_template_0_Template, 5, 17, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, CalendarDayViewEventComponent_ng_template_2_Template, 0, 0, \"ng-template\", 1);\n } if (rf & 2) {\n const _r0 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.customTemplate || _r0)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction5(2, _c25, ctx.dayEvent, ctx.tooltipPlacement, ctx.eventClicked, ctx.tooltipTemplate, ctx.tooltipAppendToBody));\n } }, directives: [CalendarTooltipDirective, ClickDirective, CalendarEventActionsComponent, CalendarEventTitleComponent, ɵngcc1.NgTemplateOutlet], pipes: [CalendarEventTitlePipe], encapsulation: 2 });\nCalendarDayViewEventComponent.propDecorators = {\n dayEvent: [{ type: Input }],\n tooltipPlacement: [{ type: Input }],\n tooltipAppendToBody: [{ type: Input }],\n customTemplate: [{ type: Input }],\n eventTitleTemplate: [{ type: Input }],\n eventActionsTemplate: [{ type: Input }],\n tooltipTemplate: [{ type: Input }],\n eventClicked: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDayViewEventComponent, [{\n type: Component,\n args: [{\n selector: 'mwl-calendar-day-view-event',\n template: `\n \n \n \n \n &ngsp;\n \n \n \n \n \n \n `\n }]\n }], function () { return []; }, { eventClicked: [{\n type: Output\n }], dayEvent: [{\n type: Input\n }], tooltipPlacement: [{\n type: Input\n }], tooltipAppendToBody: [{\n type: Input\n }], customTemplate: [{\n type: Input\n }], eventTitleTemplate: [{\n type: Input\n }], eventActionsTemplate: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nclass CalendarDayModule {\n}\nCalendarDayModule.ɵfac = function CalendarDayModule_Factory(t) { return new (t || CalendarDayModule)(); };\nCalendarDayModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CalendarDayModule });\nCalendarDayModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CommonModule,\n ResizableModule,\n DragAndDropModule,\n CalendarCommonModule\n ], ResizableModule,\n DragAndDropModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarDayModule, [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule,\n ResizableModule,\n DragAndDropModule,\n CalendarCommonModule\n ],\n declarations: [\n CalendarDayViewComponent,\n CalendarDayViewHourSegmentComponent,\n CalendarDayViewEventComponent\n ],\n exports: [\n ResizableModule,\n DragAndDropModule,\n CalendarDayViewComponent,\n CalendarDayViewHourSegmentComponent,\n CalendarDayViewEventComponent\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarDayModule, { declarations: function () { return [CalendarDayViewComponent, CalendarDayViewHourSegmentComponent, CalendarDayViewEventComponent]; }, imports: function () { return [CommonModule,\n ResizableModule,\n DragAndDropModule, CalendarCommonModule]; }, exports: function () { return [ResizableModule,\n DragAndDropModule, CalendarDayViewComponent, CalendarDayViewHourSegmentComponent, CalendarDayViewEventComponent]; } }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * The main module of this library. Example usage:\n *\n * ```typescript\n * import { CalenderModule } from 'angular-calendar';\n *\n * \\@NgModule({\n * imports: [\n * CalenderModule.forRoot()\n * ]\n * })\n * class MyModule {}\n * ```\n *\n */\nclass CalendarModule {\n /**\n * @param {?} dateAdapter\n * @param {?=} config\n * @return {?}\n */\n static forRoot(dateAdapter, config = {}) {\n return {\n ngModule: CalendarModule,\n providers: [\n dateAdapter,\n config.eventTitleFormatter || CalendarEventTitleFormatter,\n config.dateFormatter || CalendarDateFormatter,\n config.utils || CalendarUtils\n ]\n };\n }\n}\nCalendarModule.ɵfac = function CalendarModule_Factory(t) { return new (t || CalendarModule)(); };\nCalendarModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CalendarModule });\nCalendarModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[\n CalendarCommonModule,\n CalendarMonthModule,\n CalendarWeekModule,\n CalendarDayModule\n ], CalendarCommonModule, CalendarMonthModule, CalendarWeekModule, CalendarDayModule] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CalendarModule, [{\n type: NgModule,\n args: [{\n imports: [\n CalendarCommonModule,\n CalendarMonthModule,\n CalendarWeekModule,\n CalendarDayModule\n ],\n exports: [\n CalendarCommonModule,\n CalendarMonthModule,\n CalendarWeekModule,\n CalendarDayModule\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarModule, { imports: [CalendarCommonModule, CalendarMonthModule, CalendarWeekModule, CalendarDayModule], exports: [CalendarCommonModule, CalendarMonthModule, CalendarWeekModule, CalendarDayModule] }); })();\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\nexport { CalendarModule, CalendarCommonModule, CalendarEventTitleFormatter, MOMENT, CalendarMomentDateFormatter, CalendarNativeDateFormatter, CalendarAngularDateFormatter, CalendarDateFormatter, CalendarUtils, CalendarEventTimesChangedEventType, DateAdapter, CalendarView, CalendarMonthViewComponent, collapseAnimation, CalendarMonthModule, CalendarWeekViewComponent, getWeekViewPeriod, CalendarWeekModule, CalendarDayViewComponent, CalendarDayModule, CalendarDatePipe as ɵi, CalendarEventActionsComponent as ɵb, CalendarEventTitleComponent as ɵc, CalendarEventTitlePipe as ɵj, CalendarNextViewDirective as ɵg, CalendarPreviousViewDirective as ɵf, CalendarTodayDirective as ɵh, CalendarTooltipDirective as ɵe, CalendarTooltipWindowComponent as ɵd, ClickDirective as ɵk, CalendarDayViewEventComponent as ɵr, CalendarDayViewHourSegmentComponent as ɵq, CalendarMonthCellComponent as ɵl, CalendarMonthViewHeaderComponent as ɵm, CalendarOpenDayEventsComponent as ɵa, CalendarWeekViewEventComponent as ɵo, CalendarWeekViewHeaderComponent as ɵn, CalendarWeekViewHourSegmentComponent as ɵp };\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\";\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n// THIS FILE WAS AUTOGENERATED\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var Telemetry;\r\n (function (Telemetry) {\r\n \"use strict\";\r\n /**\r\n * Data struct to contain only C section with custom fields.\r\n */\r\n var Base = /** @class */ (function () {\r\n function Base() {\r\n }\r\n return Base;\r\n }());\r\n Telemetry.Base = Base;\r\n })(Telemetry = Microsoft.Telemetry || (Microsoft.Telemetry = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n// THIS FILE WAS AUTOGENERATED\r\n/// \r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var Telemetry;\r\n (function (Telemetry) {\r\n \"use strict\";\r\n /**\r\n * System variables for a telemetry item.\r\n */\r\n var Envelope = /** @class */ (function () {\r\n function Envelope() {\r\n this.ver = 1;\r\n this.sampleRate = 100.0;\r\n this.tags = {};\r\n }\r\n return Envelope;\r\n }());\r\n Telemetry.Envelope = Envelope;\r\n })(Telemetry = Microsoft.Telemetry || (Microsoft.Telemetry = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n var Context;\r\n (function (Context) {\r\n \"use strict\";\r\n })(Context = ApplicationInsights.Context || (ApplicationInsights.Context = {}));\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n/// \r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\n/// \r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n// THIS FILE WAS AUTOGENERATED\r\nvar AI;\r\n(function (AI) {\r\n \"use strict\";\r\n /**\r\n * Defines the level of severity for the event.\r\n */\r\n var SeverityLevel;\r\n (function (SeverityLevel) {\r\n SeverityLevel[SeverityLevel[\"Verbose\"] = 0] = \"Verbose\";\r\n SeverityLevel[SeverityLevel[\"Information\"] = 1] = \"Information\";\r\n SeverityLevel[SeverityLevel[\"Warning\"] = 2] = \"Warning\";\r\n SeverityLevel[SeverityLevel[\"Error\"] = 3] = \"Error\";\r\n SeverityLevel[SeverityLevel[\"Critical\"] = 4] = \"Critical\";\r\n })(SeverityLevel = AI.SeverityLevel || (AI.SeverityLevel = {}));\r\n})(AI || (AI = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n/// \r\n/// \r\n/// \r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nvar Microsoft;\r\n(function (Microsoft) {\r\n var ApplicationInsights;\r\n (function (ApplicationInsights) {\r\n \"use strict\";\r\n var UtilHelpers = /** @class */ (function () {\r\n function UtilHelpers() {\r\n }\r\n /**\r\n * generate random id string\r\n */\r\n UtilHelpers.newId = function () {\r\n var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n var result = \"\";\r\n // tslint:disable-next-line:insecure-random\r\n var random = Math.random() * 1073741824; //5 symbols in base64, almost maxint\r\n while (random > 0) {\r\n var char = base64chars.charAt(random % 64);\r\n result += char;\r\n random = Math.floor(random / 64);\r\n }\r\n return result;\r\n };\r\n return UtilHelpers;\r\n }());\r\n ApplicationInsights.UtilHelpers = UtilHelpers;\r\n })(ApplicationInsights = Microsoft.ApplicationInsights || (Microsoft.ApplicationInsights = {}));\r\n})(Microsoft || (Microsoft = {}));\r\n// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\ndefine(\"JavaScriptSDK.Module/AppInsightsModule\", [\"require\", \"exports\"], function (require, exports) {\r\n /// \r\n /// \r\n /// \r\n \"use strict\";\r\n Object.defineProperty(exports, \"__esModule\", { value: true });\r\n var AppInsightsModule = /** @class */ (function () {\r\n function AppInsightsModule() {\r\n }\r\n AppInsightsModule._createLazyMethod = function (name) {\r\n var aiObject = window[AppInsightsModule.appInsightsName];\r\n // Define a temporary method that queues-up a the real method call\r\n aiObject[name] = function () {\r\n // Capture the original arguments passed to the method\r\n var originalArguments = arguments;\r\n // If the queue is available, it means that the function wasn't yet replaced with actual function value\r\n if (aiObject.queue) {\r\n aiObject.queue.push(function () { return aiObject[name].apply(aiObject, originalArguments); });\r\n }\r\n else {\r\n // otherwise execute the function\r\n aiObject[name].apply(aiObject, originalArguments);\r\n }\r\n };\r\n };\r\n ;\r\n AppInsightsModule._defineLazyMethods = function () {\r\n var aiObject = window[AppInsightsModule.appInsightsName];\r\n // capture initial cookie if possible\r\n try {\r\n aiObject.cookie = document.cookie;\r\n }\r\n catch (e) {\r\n }\r\n aiObject.queue = [];\r\n var method = [\r\n \"clearAuthenticatedUserContext\",\r\n \"flush\",\r\n \"setAuthenticatedUserContext\",\r\n \"startTrackEvent\",\r\n \"startTrackPage\",\r\n \"stopTrackEvent\",\r\n \"stopTrackPage\",\r\n \"trackDependency\",\r\n \"trackEvent\",\r\n \"trackException\",\r\n \"trackMetric\",\r\n \"trackPageView\",\r\n \"trackTrace\"\r\n ];\r\n while (method.length) {\r\n AppInsightsModule._createLazyMethod(method.pop());\r\n }\r\n };\r\n AppInsightsModule._download = function (aiConfig) {\r\n AppInsightsModule.getAppInsightsInstance().config = aiConfig;\r\n var aiObject = window[AppInsightsModule.appInsightsName];\r\n // if script was previously downloaded and initialized, queue will be deleted, reinitialize it\r\n if (!aiObject.queue) {\r\n aiObject.queue = [];\r\n }\r\n setTimeout(function () {\r\n var scriptElement = document.createElement(\"script\");\r\n scriptElement.src = aiConfig.url || \"https://az416426.vo.msecnd.net/scripts/a/ai.0.js\";\r\n document.head.appendChild(scriptElement);\r\n });\r\n // collect global errors by wrapping the window.onerror method\r\n if (!aiConfig.disableExceptionTracking) {\r\n var method_1 = \"onerror\";\r\n AppInsightsModule._createLazyMethod(\"_\" + method_1);\r\n var originalOnError = window[method_1];\r\n window[method_1] = function (message, url, lineNumber, columnNumber, error) {\r\n var handled = originalOnError && originalOnError(message, url, lineNumber, columnNumber, error);\r\n if (handled !== true) {\r\n aiObject[\"_\" + method_1](message, url, lineNumber, columnNumber, error);\r\n }\r\n return handled;\r\n };\r\n }\r\n };\r\n AppInsightsModule.getAppInsightsInstance = function () {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n if (!window[AppInsightsModule.appInsightsName]) {\r\n window[AppInsightsModule.appInsightsName] = {\r\n downloadAndSetup: AppInsightsModule._download,\r\n // exposing it for unit tests only, not part of interface\r\n _defineLazyMethods: AppInsightsModule._defineLazyMethods\r\n };\r\n AppInsightsModule._defineLazyMethods();\r\n }\r\n return window[AppInsightsModule.appInsightsName];\r\n };\r\n AppInsightsModule.appInsightsInitialized = false;\r\n AppInsightsModule.appInsightsName = \"appInsights\";\r\n /**\r\n * Static constructor, attempt to ES5 get accessor\r\n */\r\n AppInsightsModule._staticInit = (function () {\r\n // Dynamically create get/set property accessors\r\n var defineProp = Object[\"defineProperty\"];\r\n try {\r\n defineProp && defineProp(AppInsightsModule.prototype, \"appInsightsInstance\", {\r\n get: AppInsightsModule.getAppInsightsInstance,\r\n enumerable: true,\r\n configurable: true\r\n });\r\n }\r\n catch (e) {\r\n // IE8 Defines a defineProperty on Object but it's only supported for DOM elements so it will throw\r\n // We will just ignore this here.\r\n }\r\n })();\r\n return AppInsightsModule;\r\n }());\r\n exports.AppInsights = AppInsightsModule.getAppInsightsInstance();\r\n});\r\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(function(){\n \"use strict\";\n\n var chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n // Use a lookup table to find the index.\n var lookup = new Uint8Array(256);\n for (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n }\n\n exports.encode = function(arraybuffer) {\n var bytes = new Uint8Array(arraybuffer),\n i, len = bytes.length, base64 = \"\";\n\n for (i = 0; i < len; i+=3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if ((len % 3) === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n\n return base64;\n };\n\n exports.decode = function(base64) {\n var bufferLength = base64.length * 0.75,\n len = base64.length, i, p = 0,\n encoded1, encoded2, encoded3, encoded4;\n\n if (base64[base64.length - 1] === \"=\") {\n bufferLength--;\n if (base64[base64.length - 2] === \"=\") {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i+=4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i+1)];\n encoded3 = lookup[base64.charCodeAt(i+2)];\n encoded4 = lookup[base64.charCodeAt(i+3)];\n\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\n return arraybuffer;\n };\n})();\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n","!function(t){\"function\"==typeof define&&define.amd?define(t):t()}(function(){\"use strict\";\n/** @license\n * jsPDF - PDF Document creation from JavaScript\n * Version 1.5.3 Built on 2018-12-27T14:11:42.696Z\n * CommitID d93d28db14\n *\n * Copyright (c) 2010-2016 James Hall , https://github.com/MrRio/jsPDF\n * 2010 Aaron Spike, https://github.com/acspike\n * 2012 Willow Systems Corporation, willow-systems.com\n * 2012 Pablo Hess, https://github.com/pablohess\n * 2012 Florian Jenett, https://github.com/fjenett\n * 2013 Warren Weckesser, https://github.com/warrenweckesser\n * 2013 Youssef Beddad, https://github.com/lifof\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2013 Stefan Slonevskiy, https://github.com/stefslon\n * 2013 Jeremy Morel, https://github.com/jmorel\n * 2013 Christoph Hartmann, https://github.com/chris-rock\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Makes, https://github.com/dollaruw\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Steven Spungin, https://github.com/Flamenco\n * 2014 Kenneth Glassey, https://github.com/Gavvers\n *\n * Licensed under the MIT License\n *\n * Contributor(s):\n * siefkenj, ahwolf, rickygu, Midnith, saintclair, eaparango,\n * kim3er, mfo, alnorth, Flamenco\n */function se(t){return(se=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}!function(t){if(\"object\"!==se(t.console)){t.console={};for(var e,n,r=t.console,i=function(){},o=[\"memory\"],a=\"assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn\".split(\",\");e=o.pop();)r[e]||(r[e]={});for(;n=a.pop();)r[n]||(r[n]=i)}var s,l,h,u,c=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";void 0===t.btoa&&(t.btoa=function(t){var e,n,r,i,o,a=0,s=0,l=\"\",h=[];if(!t)return t;for(;e=(o=t.charCodeAt(a++)<<16|t.charCodeAt(a++)<<8|t.charCodeAt(a++))>>18&63,n=o>>12&63,r=o>>6&63,i=63&o,h[s++]=c.charAt(e)+c.charAt(n)+c.charAt(r)+c.charAt(i),a>16&255,n=a>>8&255,r=255&a,h[l++]=64==i?String.fromCharCode(e):64==o?String.fromCharCode(e,n):String.fromCharCode(e,n,r),s>>0,r=new Array(n),i=1>>0,i=0;i>>0;if(\"function\"!=typeof t)throw new TypeError(\"predicate must be a function\");for(var r=arguments[1],i=0;i>16&255,r=l>>8&255,i=255&l}if(void 0===r||void 0===o&&n===r&&r===i)if(\"string\"==typeof n)e=n+\" \"+a[0];else switch(t.precision){case 2:e=Z(n/255)+\" \"+a[0];break;case 3:default:e=Q(n/255)+\" \"+a[0]}else if(void 0===o||\"object\"===se(o)){if(o&&!isNaN(o.a)&&0===o.a)return e=[\"1.000\",\"1.000\",\"1.000\",a[1]].join(\" \");if(\"string\"==typeof n)e=[n,r,i,a[1]].join(\" \");else switch(t.precision){case 2:e=[Z(n/255),Z(r/255),Z(i/255),a[1]].join(\" \");break;default:case 3:e=[Q(n/255),Q(r/255),Q(i/255),a[1]].join(\" \")}}else if(\"string\"==typeof n)e=[n,r,i,o,a[2]].join(\" \");else switch(t.precision){case 2:e=[Z(n/255),Z(r/255),Z(i/255),Z(o/255),a[2]].join(\" \");break;case 3:default:e=[Q(n/255),Q(r/255),Q(i/255),Q(o/255),a[2]].join(\" \")}return e},ct=l.__private__.getFilters=function(){return o},ft=l.__private__.putStream=function(t){var e=(t=t||{}).data||\"\",n=t.filters||ct(),r=t.alreadyAppliedFilters||[],i=t.addLength1||!1,o=e.length,a={};!0===n&&(n=[\"FlateEncode\"]);var s=t.additionalKeyValues||[],l=(a=void 0!==ae.API.processDataByFilters?ae.API.processDataByFilters(e,n):{data:e,reverseChain:[]}).reverseChain+(Array.isArray(r)?r.join(\" \"):r.toString());0!==a.data.length&&(s.push({key:\"Length\",value:a.data.length}),!0===i&&s.push({key:\"Length1\",value:o})),0!=l.length&&(l.split(\"/\").length-1==1?s.push({key:\"Filter\",value:l}):s.push({key:\"Filter\",value:\"[\"+l+\"]\"})),tt(\"<<\");for(var h=0;h>\"),0!==a.data.length&&(tt(\"stream\"),tt(a.data),tt(\"endstream\"))},pt=l.__private__.putPage=function(t){t.mediaBox;var e=t.number,n=t.data,r=t.objId,i=t.contentsObjId;ot(r,!0);V[x].mediaBox.topRightX,V[x].mediaBox.bottomLeftX,V[x].mediaBox.topRightY,V[x].mediaBox.bottomLeftY;tt(\"<>\"),tt(\"endobj\");var o=n.join(\"\\n\");return ot(i,!0),ft({data:o,filters:ct()}),tt(\"endobj\"),r},dt=l.__private__.putPages=function(){var t,e,n=[];for(t=1;t<=W;t++)V[t].objId=X(),V[t].contentsObjId=X();for(t=1;t<=W;t++)n.push(pt({number:t,data:I[t],objId:V[t].objId,contentsObjId:V[t].contentsObjId,mediaBox:V[t].mediaBox,cropBox:V[t].cropBox,bleedBox:V[t].bleedBox,trimBox:V[t].trimBox,artBox:V[t].artBox,userUnit:V[t].userUnit,rootDictionaryObjId:st,resourceDictionaryObjId:lt}));ot(st,!0),tt(\"<>\"),tt(\"endobj\"),it.publish(\"postPutPages\")},gt=function(){!function(){for(var t in rt)rt.hasOwnProperty(t)&&(!1===s||!0===s&&K.hasOwnProperty(t))&&(e=rt[t],it.publish(\"putFont\",{font:e,out:tt,newObject:J,putStream:ft}),!0!==e.isAlreadyPutted&&(e.objectNumber=J(),tt(\"<<\"),tt(\"/Type /Font\"),tt(\"/BaseFont /\"+e.postScriptName),tt(\"/Subtype /Type1\"),\"string\"==typeof e.encoding&&tt(\"/Encoding /\"+e.encoding),tt(\"/FirstChar 32\"),tt(\"/LastChar 255\"),tt(\">>\"),tt(\"endobj\")));var e}(),it.publish(\"putResources\"),ot(lt,!0),tt(\"<<\"),function(){for(var t in tt(\"/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]\"),tt(\"/Font <<\"),rt)rt.hasOwnProperty(t)&&(!1===s||!0===s&&K.hasOwnProperty(t))&&tt(\"/\"+t+\" \"+rt[t].objectNumber+\" 0 R\");tt(\">>\"),tt(\"/XObject <<\"),it.publish(\"putXobjectDict\"),tt(\">>\")}(),tt(\">>\"),tt(\"endobj\"),it.publish(\"postPutResources\")},mt=function(t,e,n){H.hasOwnProperty(e)||(H[e]={}),H[e][n]=t},yt=function(t,e,n,r,i){i=i||!1;var o=\"F\"+(Object.keys(rt).length+1).toString(10),a={id:o,postScriptName:t,fontName:e,fontStyle:n,encoding:r,isStandardFont:i,metadata:{}};return it.publish(\"addFont\",{font:a,instance:this}),void 0!==o&&(rt[o]=a,mt(o,e,n)),o},vt=l.__private__.pdfEscape=l.pdfEscape=function(t,e){return function(t,e){var n,r,i,o,a,s,l,h,u;if(i=(e=e||{}).sourceEncoding||\"Unicode\",a=e.outputEncoding,(e.autoencode||a)&&rt[$].metadata&&rt[$].metadata[i]&&rt[$].metadata[i].encoding&&(o=rt[$].metadata[i].encoding,!a&&rt[$].encoding&&(a=rt[$].encoding),!a&&o.codePages&&(a=o.codePages[0]),\"string\"==typeof a&&(a=o[a]),a)){for(l=!1,s=[],n=0,r=t.length;n>8&&(l=!0);t=s.join(\"\")}for(n=t.length;void 0===l&&0!==n;)t.charCodeAt(n-1)>>8&&(l=!0),n--;if(!l)return t;for(s=e.noBOM?[]:[254,255],n=0,r=t.length;n>8)>>8)throw new Error(\"Character at position \"+n+\" of string '\"+t+\"' exceeds 16bits. Cannot be encoded into UCS-2 BE\");s.push(u),s.push(h-(u<<8))}return String.fromCharCode.apply(void 0,s)}(t,e).replace(/\\\\/g,\"\\\\\\\\\").replace(/\\(/g,\"\\\\(\").replace(/\\)/g,\"\\\\)\")},wt=l.__private__.beginPage=function(t,e){var n,r=\"string\"==typeof e&&e.toLowerCase();if(\"string\"==typeof t&&(n=f(t.toLowerCase()))&&(t=n[0],e=n[1]),Array.isArray(t)&&(e=t[1],t=t[0]),(isNaN(t)||isNaN(e))&&(t=i[0],e=i[1]),r){switch(r.substr(0,1)){case\"l\":t>\"),tt(\"endobj\")},St=l.__private__.putCatalog=function(t){var e=(t=t||{}).rootDictionaryObjId||st;switch(J(),tt(\"<<\"),tt(\"/Type /Catalog\"),tt(\"/Pages \"+e+\" 0 R\"),L||(L=\"fullwidth\"),L){case\"fullwidth\":tt(\"/OpenAction [3 0 R /FitH null]\");break;case\"fullheight\":tt(\"/OpenAction [3 0 R /FitV null]\");break;case\"fullpage\":tt(\"/OpenAction [3 0 R /Fit]\");break;case\"original\":tt(\"/OpenAction [3 0 R /XYZ null null 1]\");break;default:var n=\"\"+L;\"%\"===n.substr(n.length-1)&&(L=parseInt(L)/100),\"number\"==typeof L&&tt(\"/OpenAction [3 0 R /XYZ null null \"+Z(L)+\"]\")}switch(S||(S=\"continuous\"),S){case\"continuous\":tt(\"/PageLayout /OneColumn\");break;case\"single\":tt(\"/PageLayout /SinglePage\");break;case\"two\":case\"twoleft\":tt(\"/PageLayout /TwoColumnLeft\");break;case\"tworight\":tt(\"/PageLayout /TwoColumnRight\")}A&&tt(\"/PageMode /\"+A),it.publish(\"putCatalog\"),tt(\">>\"),tt(\"endobj\")},_t=l.__private__.putTrailer=function(){tt(\"trailer\"),tt(\"<<\"),tt(\"/Size \"+(U+1)),tt(\"/Root \"+U+\" 0 R\"),tt(\"/Info \"+(U-1)+\" 0 R\"),tt(\"/ID [ <\"+d+\"> <\"+d+\"> ]\"),tt(\">>\")},Ft=l.__private__.putHeader=function(){tt(\"%PDF-\"+h),tt(\"%ºß¬à\")},Pt=l.__private__.putXRef=function(){var t=1,e=\"0000000000\";for(tt(\"xref\"),tt(\"0 \"+(U+1)),tt(\"0000000000 65535 f \"),t=1;t<=U;t++){\"function\"==typeof z[t]?tt((e+z[t]()).slice(-10)+\" 00000 n \"):void 0!==z[t]?tt((e+z[t]).slice(-10)+\" 00000 n \"):tt(\"0000000000 00000 n \")}},kt=l.__private__.buildDocument=function(){k=!1,B=U=0,C=[],z=[],G=[],st=X(),lt=X(),it.publish(\"buildDocument\"),Ft(),dt(),function(){it.publish(\"putAdditionalObjects\");for(var t=0;t',i=ie.open();if(null!==i&&i.document.write(r),i||\"undefined\"==typeof safari)return i;case\"datauri\":case\"dataurl\":return ie.document.location.href=\"data:application/pdf;filename=\"+e.filename+\";base64,\"+btoa(n);default:return null}}).foo=function(){try{return F.apply(this,arguments)}catch(t){var e=t.stack||\"\";~e.indexOf(\" at \")&&(e=e.split(\" at \")[1]);var n=\"Error in function \"+e.split(\"\\n\")[0].split(\"<\")[0]+\": \"+t.message;if(!ie.console)throw new Error(n);ie.console.error(n,t),ie.alert&&alert(n)}},(F.foo.bar=F).foo),Bt=function(t){return!0===Array.isArray(Y)&&-1\":\")\"),Y=1):(W=Wt(e),V=Vt(n),G=(l?\"<\":\"(\")+v[H]+(l?\">\":\")\")),void 0!==q&&void 0!==q[H]&&(J=q[H]+\" Tw\\n\"),0!==S.length&&0===H?t.push(J+S.join(\" \")+\" \"+W.toFixed(2)+\" \"+V.toFixed(2)+\" Tm\\n\"+G):1===Y||0===Y&&0===H?t.push(J+W.toFixed(2)+\" \"+V.toFixed(2)+\" Td\\n\"+G):t.push(J+G);t=0===Y?t.join(\" Tj\\nT* \"):t.join(\" Tj\\n\"),t+=\" Tj\\n\";var X=\"BT\\n/\"+$+\" \"+et+\" Tf\\n\"+(et*u).toFixed(2)+\" TL\\n\"+Kt+\"\\n\";return X+=h,X+=t,tt(X+=\"ET\"),K[$]=!0,c},l.__private__.lstext=l.lstext=function(t,e,n,r){return console.warn(\"jsPDF.lstext is deprecated\"),this.text(t,e,n,{charSpace:r})},l.__private__.clip=l.clip=function(t){tt(\"evenodd\"===t?\"W*\":\"W\"),tt(\"n\")},l.__private__.clip_fixed=l.clip_fixed=function(t){console.log(\"clip_fixed is deprecated\"),l.clip(t)};var Ot=l.__private__.isValidStyle=function(t){var e=!1;return-1!==[void 0,null,\"S\",\"F\",\"DF\",\"FD\",\"f\",\"f*\",\"B\",\"B*\"].indexOf(t)&&(e=!0),e},qt=l.__private__.getStyle=function(t){var e=\"S\";return\"F\"===t?e=\"f\":\"FD\"===t||\"DF\"===t?e=\"B\":\"f\"!==t&&\"f*\"!==t&&\"B\"!==t&&\"B*\"!==t||(e=t),e};l.__private__.line=l.line=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw new Error(\"Invalid arguments passed to jsPDF.line\");return this.lines([[n-t,r-e]],t,e)},l.__private__.lines=l.lines=function(t,e,n,r,i,o){var a,s,l,h,u,c,f,p,d,g,m,y;if(\"number\"==typeof t&&(y=n,n=e,e=t,t=y),r=r||[1,1],o=o||!1,isNaN(e)||isNaN(n)||!Array.isArray(t)||!Array.isArray(r)||!Ot(i)||\"boolean\"!=typeof o)throw new Error(\"Invalid arguments passed to jsPDF.lines\");for(tt(Q(Wt(e))+\" \"+Q(Vt(n))+\" m \"),a=r[0],s=r[1],h=t.length,g=e,m=n,l=0;l=o.length-1;if(b&&!x){m+=\" \";continue}if(b||x){if(x)d=w;else if(i.multiline&&a<(h+2)*(y+2)+2)continue t}else{if(!i.multiline)continue t;if(a<(h+2)*(y+2)+2)continue t;d=w}for(var N=\"\",L=p;L<=d;L++)N+=o[L]+\" \";switch(N=\" \"==N.substr(N.length-1)?N.substr(0,N.length-1):N,g=F(N,i,r).width,i.textAlign){case\"right\":c=s-g-2;break;case\"center\":c=(s-g)/2;break;case\"left\":default:c=2}t+=_(c)+\" \"+_(f)+\" Td\\n\",t+=\"(\"+S(N)+\") Tj\\n\",t+=-_(c)+\" 0 Td\\n\",f=-(r+2),g=0,p=d+1,y++,m=\"\"}else;break}return n.text=t,n.fontSize=r,n},F=function(t,e,n){var r=A.internal.getFont(e.fontName,e.fontStyle),i=A.getStringUnitWidth(t,{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n);return{height:A.getStringUnitWidth(\"3\",{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n)*1.5,width:i}},u={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},p=function(){A.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var t=A.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var e in t)if(t.hasOwnProperty(e)){var n=t[e];n.objId=void 0,n.hasAnnotation&&d.call(A,n)}},d=function(t){var e={type:\"reference\",object:t};void 0===A.internal.getPageInfo(t.page).pageContext.annotations.find(function(t){return t.type===e.type&&t.object===e.object})&&A.internal.getPageInfo(t.page).pageContext.annotations.push(e)},g=function(){if(void 0===A.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"putCatalogCallback: Root missing.\");A.internal.write(\"/AcroForm \"+A.internal.acroformPlugin.acroFormDictionaryRoot.objId+\" 0 R\")},m=function(){A.internal.events.unsubscribe(A.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete A.internal.acroformPlugin.acroFormDictionaryRoot._eventID,A.internal.acroformPlugin.printedOut=!0},L=function(t){var e=!t;t||(A.internal.newObjectDeferredBegin(A.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),A.internal.acroformPlugin.acroFormDictionaryRoot.putStream());t=t||A.internal.acroformPlugin.acroFormDictionaryRoot.Kids;for(var n in t)if(t.hasOwnProperty(n)){var r=t[n],i=[],o=r.Rect;if(r.Rect&&(r.Rect=c.call(this,r.Rect)),A.internal.newObjectDeferredBegin(r.objId,!0),r.DA=Y.createDefaultAppearanceStream(r),\"object\"===se(r)&&\"function\"==typeof r.getKeyValueListForStream&&(i=r.getKeyValueListForStream()),r.Rect=o,r.hasAppearanceStream&&!r.appearanceStreamContent){var a=f.call(this,r);i.push({key:\"AP\",value:\"<>\"}),A.internal.acroformPlugin.xForms.push(a)}if(r.appearanceStreamContent){var s=\"\";for(var l in r.appearanceStreamContent)if(r.appearanceStreamContent.hasOwnProperty(l)){var h=r.appearanceStreamContent[l];if(s+=\"/\"+l+\" \",s+=\"<<\",1<=Object.keys(h).length||Array.isArray(h))for(var n in h){var u;if(h.hasOwnProperty(n))\"function\"==typeof(u=h[n])&&(u=u.call(this,r)),s+=\"/\"+n+\" \"+u+\" \",0<=A.internal.acroformPlugin.xForms.indexOf(u)||A.internal.acroformPlugin.xForms.push(u)}else\"function\"==typeof(u=h)&&(u=u.call(this,r)),s+=\"/\"+n+\" \"+u,0<=A.internal.acroformPlugin.xForms.indexOf(u)||A.internal.acroformPlugin.xForms.push(u);s+=\">>\"}i.push({key:\"AP\",value:\"<<\\n\"+s+\">>\"})}A.internal.putStream({additionalKeyValues:i}),A.internal.out(\"endobj\")}e&&P.call(this,A.internal.acroformPlugin.xForms)},P=function(t){for(var e in t)if(t.hasOwnProperty(e)){var n=e,r=t[e];A.internal.newObjectDeferredBegin(r&&r.objId,!0),\"object\"===se(r)&&\"function\"==typeof r.putStream&&r.putStream(),delete t[n]}},k=function(){if(void 0!==this.internal&&(void 0===this.internal.acroformPlugin||!1===this.internal.acroformPlugin.isInitialized)){if(A=this,M.FieldNum=0,this.internal.acroformPlugin=JSON.parse(JSON.stringify(u)),this.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error(\"Exception while creating AcroformDictionary\");n=A.internal.scaleFactor,A.internal.acroformPlugin.acroFormDictionaryRoot=new E,A.internal.acroformPlugin.acroFormDictionaryRoot._eventID=A.internal.events.subscribe(\"postPutResources\",m),A.internal.events.subscribe(\"buildDocument\",p),A.internal.events.subscribe(\"putCatalog\",g),A.internal.events.subscribe(\"postPutPages\",L),A.internal.acroformPlugin.isInitialized=!0}},I=t.__acroform__.arrayToPdfArray=function(t){if(Array.isArray(t)){for(var e=\"[\",n=0;n>\"),e.join(\"\\n\")}},set:function(t){\"object\"===se(t)&&(n=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return n.CA||\"\"},set:function(t){\"string\"==typeof t&&(n.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=\"/\"+t}})};r(D,M);var U=function(){D.call(this),this.pushButton=!0};r(U,D);var z=function(){D.call(this),this.radio=!0,this.pushButton=!1;var e=[];Object.defineProperty(this,\"Kids\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=void 0!==t?t:[]}})};r(z,D);var H=function(){var e,n;M.call(this),Object.defineProperty(this,\"Parent\",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"optionName\",{enumerable:!1,configurable:!0,get:function(){return n},set:function(t){n=t}});var r,i={};Object.defineProperty(this,\"MK\",{enumerable:!1,configurable:!1,get:function(){var t,e=[];for(t in e.push(\"<<\"),i)e.push(\"/\"+t+\" (\"+i[t]+\")\");return e.push(\">>\"),e.join(\"\\n\")},set:function(t){\"object\"===se(t)&&(i=t)}}),Object.defineProperty(this,\"caption\",{enumerable:!0,configurable:!0,get:function(){return i.CA||\"\"},set:function(t){\"string\"==typeof t&&(i.CA=t)}}),Object.defineProperty(this,\"AS\",{enumerable:!1,configurable:!1,get:function(){return r},set:function(t){r=t}}),Object.defineProperty(this,\"appearanceState\",{enumerable:!0,configurable:!0,get:function(){return r.substr(1,r.length-1)},set:function(t){r=\"/\"+t}}),this.optionName=name,this.caption=\"l\",this.appearanceState=\"Off\",this._AppearanceType=Y.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(name)};r(H,M),z.prototype.setAppearance=function(t){if(!(\"createAppearanceStream\"in t&&\"getCA\"in t))throw new Error(\"Couldn't assign Appearance to RadioButton. Appearance was Invalid!\");for(var e in this.Kids)if(this.Kids.hasOwnProperty(e)){var n=this.Kids[e];n.appearanceStreamContent=t.createAppearanceStream(n.optionName),n.caption=t.getCA()}},z.prototype.createOption=function(t){this.Kids.length;var e=new H;return e.Parent=this,e.optionName=t,this.Kids.push(e),J.call(this,e),e};var W=function(){D.call(this),this.fontName=\"zapfdingbats\",this.caption=\"3\",this.appearanceState=\"On\",this.value=\"On\",this.textAlign=\"center\",this.appearanceStreamContent=Y.CheckBox.createAppearanceStream()};r(W,D);var V=function(){M.call(this),this.FT=\"/Tx\",Object.defineProperty(this,\"multiline\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,13))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,13):this.Ff=N(this.Ff,13)}}),Object.defineProperty(this,\"fileSelect\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,21))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,21):this.Ff=N(this.Ff,21)}}),Object.defineProperty(this,\"doNotSpellCheck\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,23))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,23):this.Ff=N(this.Ff,23)}}),Object.defineProperty(this,\"doNotScroll\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,24))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,24):this.Ff=N(this.Ff,24)}}),Object.defineProperty(this,\"comb\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,25))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,25):this.Ff=N(this.Ff,25)}}),Object.defineProperty(this,\"richText\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,26))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,26):this.Ff=N(this.Ff,26)}});var e=null;Object.defineProperty(this,\"MaxLen\",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,\"maxLength\",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){Number.isInteger(t)&&(e=t)}}),Object.defineProperty(this,\"hasAppearanceStream\",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};r(V,M);var G=function(){V.call(this),Object.defineProperty(this,\"password\",{enumerable:!0,configurable:!0,get:function(){return Boolean(b(this.Ff,14))},set:function(t){!0===Boolean(t)?this.Ff=x(this.Ff,14):this.Ff=N(this.Ff,14)}}),this.password=!0};r(G,V);var Y={CheckBox:{createAppearanceStream:function(){return{N:{On:Y.CheckBox.YesNormal},D:{On:Y.CheckBox.YesPushDown,Off:Y.CheckBox.OffPushDown}}},YesPushDown:function(t){var e=l(t),n=[],r=A.internal.getFont(t.fontName,t.fontStyle).id,i=A.__private__.encodeColorString(t.color),o=h(t,t.caption);return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),n.push(\"BMC\"),n.push(\"q\"),n.push(\"0 0 1 rg\"),n.push(\"/\"+r+\" \"+_(o.fontSize)+\" Tf \"+i),n.push(\"BT\"),n.push(o.text),n.push(\"ET\"),n.push(\"Q\"),n.push(\"EMC\"),e.stream=n.join(\"\\n\"),e},YesNormal:function(t){var e=l(t),n=A.internal.getFont(t.fontName,t.fontStyle).id,r=A.__private__.encodeColorString(t.color),i=[],o=Y.internal.getHeight(t),a=Y.internal.getWidth(t),s=h(t,t.caption);return i.push(\"1 g\"),i.push(\"0 0 \"+_(a)+\" \"+_(o)+\" re\"),i.push(\"f\"),i.push(\"q\"),i.push(\"0 0 1 rg\"),i.push(\"0 0 \"+_(a-1)+\" \"+_(o-1)+\" re\"),i.push(\"W\"),i.push(\"n\"),i.push(\"0 g\"),i.push(\"BT\"),i.push(\"/\"+n+\" \"+_(s.fontSize)+\" Tf \"+r),i.push(s.text),i.push(\"ET\"),i.push(\"Q\"),e.stream=i.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),e.stream=n.join(\"\\n\"),e}},RadioButton:{Circle:{createAppearanceStream:function(t){var e={D:{Off:Y.RadioButton.Circle.OffPushDown},N:{}};return e.N[t]=Y.RadioButton.Circle.YesNormal,e.D[t]=Y.RadioButton.Circle.YesPushDown,e},getCA:function(){return\"l\"},YesNormal:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4;r=Number((.9*r).toFixed(5));var i=Y.internal.Bezier_C,o=Number((r*i).toFixed(5));return n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(r+\" 0 m\"),n.push(r+\" \"+o+\" \"+o+\" \"+r+\" 0 \"+r+\" c\"),n.push(\"-\"+o+\" \"+r+\" -\"+r+\" \"+o+\" -\"+r+\" 0 c\"),n.push(\"-\"+r+\" -\"+o+\" -\"+o+\" -\"+r+\" 0 -\"+r+\" c\"),n.push(o+\" -\"+r+\" \"+r+\" -\"+o+\" \"+r+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},YesPushDown:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4,i=(r=Number((.9*r).toFixed(5)),Number((2*r).toFixed(5))),o=Number((i*Y.internal.Bezier_C).toFixed(5)),a=Number((r*Y.internal.Bezier_C).toFixed(5));return n.push(\"0.749023 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(i+\" 0 m\"),n.push(i+\" \"+o+\" \"+o+\" \"+i+\" 0 \"+i+\" c\"),n.push(\"-\"+o+\" \"+i+\" -\"+i+\" \"+o+\" -\"+i+\" 0 c\"),n.push(\"-\"+i+\" -\"+o+\" -\"+o+\" -\"+i+\" 0 -\"+i+\" c\"),n.push(o+\" -\"+i+\" \"+i+\" -\"+o+\" \"+i+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),n.push(\"0 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(r+\" 0 m\"),n.push(r+\" \"+a+\" \"+a+\" \"+r+\" 0 \"+r+\" c\"),n.push(\"-\"+a+\" \"+r+\" -\"+r+\" \"+a+\" -\"+r+\" 0 c\"),n.push(\"-\"+r+\" -\"+a+\" -\"+a+\" -\"+r+\" 0 -\"+r+\" c\"),n.push(a+\" -\"+r+\" \"+r+\" -\"+a+\" \"+r+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[],r=Y.internal.getWidth(t)<=Y.internal.getHeight(t)?Y.internal.getWidth(t)/4:Y.internal.getHeight(t)/4,i=(r=Number((.9*r).toFixed(5)),Number((2*r).toFixed(5))),o=Number((i*Y.internal.Bezier_C).toFixed(5));return n.push(\"0.749023 g\"),n.push(\"q\"),n.push(\"1 0 0 1 \"+s(Y.internal.getWidth(t)/2)+\" \"+s(Y.internal.getHeight(t)/2)+\" cm\"),n.push(i+\" 0 m\"),n.push(i+\" \"+o+\" \"+o+\" \"+i+\" 0 \"+i+\" c\"),n.push(\"-\"+o+\" \"+i+\" -\"+i+\" \"+o+\" -\"+i+\" 0 c\"),n.push(\"-\"+i+\" -\"+o+\" -\"+o+\" -\"+i+\" 0 -\"+i+\" c\"),n.push(o+\" -\"+i+\" \"+i+\" -\"+o+\" \"+i+\" 0 c\"),n.push(\"f\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e}},Cross:{createAppearanceStream:function(t){var e={D:{Off:Y.RadioButton.Cross.OffPushDown},N:{}};return e.N[t]=Y.RadioButton.Cross.YesNormal,e.D[t]=Y.RadioButton.Cross.YesPushDown,e},getCA:function(){return\"8\"},YesNormal:function(t){var e=l(t),n=[],r=Y.internal.calculateCross(t);return n.push(\"q\"),n.push(\"1 1 \"+_(Y.internal.getWidth(t)-2)+\" \"+_(Y.internal.getHeight(t)-2)+\" re\"),n.push(\"W\"),n.push(\"n\"),n.push(_(r.x1.x)+\" \"+_(r.x1.y)+\" m\"),n.push(_(r.x2.x)+\" \"+_(r.x2.y)+\" l\"),n.push(_(r.x4.x)+\" \"+_(r.x4.y)+\" m\"),n.push(_(r.x3.x)+\" \"+_(r.x3.y)+\" l\"),n.push(\"s\"),n.push(\"Q\"),e.stream=n.join(\"\\n\"),e},YesPushDown:function(t){var e=l(t),n=Y.internal.calculateCross(t),r=[];return r.push(\"0.749023 g\"),r.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),r.push(\"f\"),r.push(\"q\"),r.push(\"1 1 \"+_(Y.internal.getWidth(t)-2)+\" \"+_(Y.internal.getHeight(t)-2)+\" re\"),r.push(\"W\"),r.push(\"n\"),r.push(_(n.x1.x)+\" \"+_(n.x1.y)+\" m\"),r.push(_(n.x2.x)+\" \"+_(n.x2.y)+\" l\"),r.push(_(n.x4.x)+\" \"+_(n.x4.y)+\" m\"),r.push(_(n.x3.x)+\" \"+_(n.x3.y)+\" l\"),r.push(\"s\"),r.push(\"Q\"),e.stream=r.join(\"\\n\"),e},OffPushDown:function(t){var e=l(t),n=[];return n.push(\"0.749023 g\"),n.push(\"0 0 \"+_(Y.internal.getWidth(t))+\" \"+_(Y.internal.getHeight(t))+\" re\"),n.push(\"f\"),e.stream=n.join(\"\\n\"),e}}},createDefaultAppearanceStream:function(t){var e=A.internal.getFont(t.fontName,t.fontStyle).id,n=A.__private__.encodeColorString(t.color);return\"/\"+e+\" \"+t.fontSize+\" Tf \"+n}};Y.internal={Bezier_C:.551915024494,calculateCross:function(t){var e=Y.internal.getWidth(t),n=Y.internal.getHeight(t),r=Math.min(e,n);return{x1:{x:(e-r)/2,y:(n-r)/2+r},x2:{x:(e-r)/2+r,y:(n-r)/2},x3:{x:(e-r)/2,y:(n-r)/2},x4:{x:(e-r)/2+r,y:(n-r)/2+r}}}},Y.internal.getWidth=function(t){var e=0;return\"object\"===se(t)&&(e=v(t.Rect[2])),e},Y.internal.getHeight=function(t){var e=0;return\"object\"===se(t)&&(e=v(t.Rect[3])),e};var J=t.addField=function(t){if(k.call(this),!(t instanceof M))throw new Error(\"Invalid argument passed to jsPDF.addField.\");return function(t){A.internal.acroformPlugin.printedOut&&(A.internal.acroformPlugin.printedOut=!1,A.internal.acroformPlugin.acroFormDictionaryRoot=null),A.internal.acroformPlugin.acroFormDictionaryRoot||k.call(A),A.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t)}.call(this,t),t.page=A.internal.getCurrentPageInfo().pageNumber,this};t.addButton=function(t){if(t instanceof D==!1)throw new Error(\"Invalid argument passed to jsPDF.addButton.\");return J.call(this,t)},t.addTextField=function(t){if(t instanceof V==!1)throw new Error(\"Invalid argument passed to jsPDF.addTextField.\");return J.call(this,t)},t.addChoiceField=function(t){if(t instanceof O==!1)throw new Error(\"Invalid argument passed to jsPDF.addChoiceField.\");return J.call(this,t)};\"object\"==se(e)&&void 0===e.ChoiceField&&void 0===e.ListBox&&void 0===e.ComboBox&&void 0===e.EditBox&&void 0===e.Button&&void 0===e.PushButton&&void 0===e.RadioButton&&void 0===e.CheckBox&&void 0===e.TextField&&void 0===e.PasswordField?(e.ChoiceField=O,e.ListBox=q,e.ComboBox=T,e.EditBox=R,e.Button=D,e.PushButton=U,e.RadioButton=z,e.CheckBox=W,e.TextField=V,e.PasswordField=G,e.AcroForm={Appearance:Y}):console.warn(\"AcroForm-Classes are not populated into global-namespace, because the class-Names exist already.\"),t.AcroFormChoiceField=O,t.AcroFormListBox=q,t.AcroFormComboBox=T,t.AcroFormEditBox=R,t.AcroFormButton=D,t.AcroFormPushButton=U,t.AcroFormRadioButton=z,t.AcroFormCheckBox=W,t.AcroFormTextField=V,t.AcroFormPasswordField=G,t.AcroFormAppearance=Y,t.AcroForm={ChoiceField:O,ListBox:q,ComboBox:T,EditBox:R,Button:D,PushButton:U,RadioButton:z,CheckBox:W,TextField:V,PasswordField:G,Appearance:Y}})((window.tmp=lt).API,\"undefined\"!=typeof window&&window||\"undefined\"!=typeof global&&global),\n/** @license\n * jsPDF addImage plugin\n * Copyright (c) 2012 Jason Siefken, https://github.com/siefkenj/\n * 2013 Chris Dowling, https://github.com/gingerchris\n * 2013 Trinh Ho, https://github.com/ineedfat\n * 2013 Edwin Alejandro Perez, https://github.com/eaparango\n * 2013 Norah Smith, https://github.com/burnburnrocket\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 James Robb, https://github.com/jamesbrobb\n *\n * \n */\nfunction(x){var N=\"addImage_\",l={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},h=x.getImageFileTypeByImageData=function(t,e){var n,r;e=e||\"UNKNOWN\";var i,o,a,s=\"UNKNOWN\";for(a in x.isArrayBufferView(t)&&(t=x.arrayBufferToBinaryString(t)),l)for(i=l[a],n=0;n>\"}),\"trns\"in e&&e.trns.constructor==Array){for(var s=\"\",l=0,h=e.trns.length;l>18]+r[(258048&e)>>12]+r[(4032&e)>>6]+r[63&e];return 1==a?n+=r[(252&(e=i[s]))>>2]+r[(3&e)<<4]+\"==\":2==a&&(n+=r[(64512&(e=i[s]<<8|i[s+1]))>>10]+r[(1008&e)>>4]+r[(15&e)<<2]+\"=\"),n},x.createImageInfo=function(t,e,n,r,i,o,a,s,l,h,u,c,f){var p={alias:s,w:e,h:n,cs:r,bpc:i,i:a,data:t};return o&&(p.f=o),l&&(p.dp=l),h&&(p.trns=h),u&&(p.pal=u),c&&(p.smask=c),f&&(p.p=f),p},x.addImage=function(t,e,n,r,i,o,a,s,l){var h=\"\";if(\"string\"!=typeof e){var u=o;o=i,i=r,r=n,n=e,e=u}if(\"object\"===se(t)&&!_(t)&&\"imageData\"in t){var c=t;t=c.imageData,e=c.format||e||\"UNKNOWN\",n=c.x||n||0,r=c.y||r||0,i=c.w||i,o=c.h||o,a=c.alias||a,s=c.compression||s,l=c.rotation||c.angle||l}var f=this.internal.getFilters();if(void 0===s&&-1!==f.indexOf(\"FlateEncode\")&&(s=\"SLOW\"),\"string\"==typeof t&&(t=unescape(t)),isNaN(n)||isNaN(r))throw console.error(\"jsPDF.addImage: Invalid coordinates\",arguments),new Error(\"Invalid coordinates passed to jsPDF.addImage\");var p,d,g,m,y,v,w,b=function(){var t=this.internal.collections[N+\"images\"];return t||(this.internal.collections[N+\"images\"]=t={},this.internal.events.subscribe(\"putResources\",L),this.internal.events.subscribe(\"putXobjectDict\",A)),t}.call(this);if(!((p=P(t,b))||(_(t)&&(t=F(t,e)),(null==(w=a)||0===w.length)&&(a=\"string\"==typeof(v=t)?x.sHashCode(v):x.isArrayBufferView(v)?x.sHashCode(x.arrayBufferToBinaryString(v)):null),p=P(a,b)))){if(this.isString(t)&&(\"\"!==(h=this.convertStringToImageData(t))?t=h:void 0!==(h=x.loadFile(t))&&(t=h)),e=this.getImageFileTypeByImageData(t,e),!S(e))throw new Error(\"addImage does not support files of type '\"+e+\"', please ensure that a plugin for '\"+e+\"' support is added.\");if(this.supportsArrayBuffer()&&(t instanceof Uint8Array||(d=t,t=this.binaryStringToUint8Array(t))),!(p=this[\"process\"+e.toUpperCase()](t,(y=0,(m=b)&&(y=Object.keys?Object.keys(m).length:function(t){var e=0;for(var n in t)t.hasOwnProperty(n)&&e++;return e}(m)),y),a,((g=s)&&\"string\"==typeof g&&(g=g.toUpperCase()),g in x.image_compression?g:x.image_compression.NONE),d)))throw new Error(\"An unknown error occurred whilst processing the image\")}return function(t,e,n,r,i,o,a,s){var l=function(t,e,n){return t||e||(e=t=-96),t<0&&(t=-1*n.w*72/t/this.internal.scaleFactor),e<0&&(e=-1*n.h*72/e/this.internal.scaleFactor),0===t&&(t=e*n.w/n.h),0===e&&(e=t*n.h/n.w),[t,e]}.call(this,n,r,i),h=this.internal.getCoordinateString,u=this.internal.getVerticalCoordinateString;if(n=l[0],r=l[1],a[o]=i,s){s*=Math.PI/180;var c=Math.cos(s),f=Math.sin(s),p=function(t){return t.toFixed(4)},d=[p(c),p(f),p(-1*f),p(c),0,0,\"cm\"]}this.internal.write(\"q\"),s?(this.internal.write([1,\"0\",\"0\",1,h(t),u(e+r),\"cm\"].join(\" \")),this.internal.write(d.join(\" \")),this.internal.write([h(n),\"0\",\"0\",h(r),\"0\",\"0\",\"cm\"].join(\" \"))):this.internal.write([h(n),\"0\",\"0\",h(r),h(t),u(e+r),\"cm\"].join(\" \")),this.internal.write(\"/I\"+i.i+\" Do\"),this.internal.write(\"Q\")}.call(this,n,r,i,o,p,p.i,b,l),this},x.convertStringToImageData=function(t){var e,n=\"\";if(this.isString(t)){var r;e=null!==(r=this.extractImageFromDataUrl(t))?r.data:t;try{n=atob(e)}catch(t){throw x.validateStringAsBase64(e)?new Error(\"atob-Error in jsPDF.convertStringToImageData \"+t.message):new Error(\"Supplied Data is not a valid base64-String jsPDF.convertStringToImageData \")}}return n};var u=function(t,e){return t.subarray(e,e+5)};x.processJPEG=function(t,e,n,r,i,o){var a,s=this.decode.DCT_DECODE;if(!this.isString(t)&&!this.isArrayBuffer(t)&&!this.isArrayBufferView(t))return null;if(this.isString(t)&&(a=function(t){var e;if(\"JPEG\"!==h(t))throw new Error(\"getJpegSize requires a binary string jpeg file\");for(var n=256*t.charCodeAt(4)+t.charCodeAt(5),r=4,i=t.length;r>\",h.content=m;var f=h.objId+\" 0 R\";m=\"<>\",u.content=m,this.internal.write(h.objId,\"0 R\",u.objId,\"0 R\");break;case\"freetext\":var p=\"/Rect [\"+a(l.bounds.x)+\" \"+s(l.bounds.y)+\" \"+a(l.bounds.x+l.bounds.w)+\" \"+s(l.bounds.y+l.bounds.h)+\"] \",d=l.color||\"#000000\";m=\"<>\",this.internal.write(m);break;case\"link\":if(l.options.name){var g=this.annotations._nameMap[l.options.name];l.options.pageNumber=g.page,l.options.top=g.y}else l.options.top||(l.options.top=0);p=\"/Rect [\"+a(l.x)+\" \"+s(l.y)+\" \"+a(l.x+l.w)+\" \"+s(l.y+l.h)+\"] \";var m=\"\";if(l.options.url)m=\"<>\";else if(l.options.pageNumber)switch(m=\"<>\",this.internal.write(m))}}this.internal.write(\"]\")}}]),t.createAnnotation=function(t){var e=this.internal.getCurrentPageInfo();switch(t.type){case\"link\":this.link(t.bounds.x,t.bounds.y,t.bounds.w,t.bounds.h,t);break;case\"text\":case\"freetext\":e.pageContext.annotations.push(t)}},t.link=function(t,e,n,r,i){this.internal.getCurrentPageInfo().pageContext.annotations.push({x:t,y:e,w:n,h:r,options:i,type:\"link\"})},t.textWithLink=function(t,e,n,r){var i=this.getTextWidth(t),o=this.internal.getLineHeight()/this.internal.scaleFactor;return this.text(t,e,n),n+=.2*o,this.link(e,n-o,i,o,r),i},t.getTextWidth=function(t){var e=this.internal.getFontSize();return this.getStringUnitWidth(t)*e/this.internal.scaleFactor},\n/**\n * @license\n * Copyright (c) 2017 Aras Abbasi \n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nfunction(t){var h={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},a={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},e={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},n=[1570,1571,1573,1575];t.__arabicParser__={};var r=t.__arabicParser__.isInArabicSubstitutionA=function(t){return void 0!==h[t.charCodeAt(0)]},u=t.__arabicParser__.isArabicLetter=function(t){return\"string\"==typeof t&&/^[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]+$/.test(t)},i=t.__arabicParser__.isArabicEndLetter=function(t){return u(t)&&r(t)&&h[t.charCodeAt(0)].length<=2},o=t.__arabicParser__.isArabicAlfLetter=function(t){return u(t)&&0<=n.indexOf(t.charCodeAt(0))},s=(t.__arabicParser__.arabicLetterHasIsolatedForm=function(t){return u(t)&&r(t)&&1<=h[t.charCodeAt(0)].length},t.__arabicParser__.arabicLetterHasFinalForm=function(t){return u(t)&&r(t)&&2<=h[t.charCodeAt(0)].length}),l=(t.__arabicParser__.arabicLetterHasInitialForm=function(t){return u(t)&&r(t)&&3<=h[t.charCodeAt(0)].length},t.__arabicParser__.arabicLetterHasMedialForm=function(t){return u(t)&&r(t)&&4==h[t.charCodeAt(0)].length}),c=t.__arabicParser__.resolveLigatures=function(t){var e=0,n=a,r=0,i=\"\",o=0;for(e=0;e>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){this.internal.out(\"/OpenAction \"+e+\" 0 R\")})}return this},\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\ne=lt.API,(n=function(){var e=void 0;Object.defineProperty(this,\"pdf\",{get:function(){return e},set:function(t){e=t}});var n=150;Object.defineProperty(this,\"width\",{get:function(){return n},set:function(t){n=isNaN(t)||!1===Number.isInteger(t)||t<0?150:t,this.getContext(\"2d\").pageWrapXEnabled&&(this.getContext(\"2d\").pageWrapX=n+1)}});var r=300;Object.defineProperty(this,\"height\",{get:function(){return r},set:function(t){r=isNaN(t)||!1===Number.isInteger(t)||t<0?300:t,this.getContext(\"2d\").pageWrapYEnabled&&(this.getContext(\"2d\").pageWrapY=r+1)}});var i=[];Object.defineProperty(this,\"childNodes\",{get:function(){return i},set:function(t){i=t}});var o={};Object.defineProperty(this,\"style\",{get:function(){return o},set:function(t){o=t}}),Object.defineProperty(this,\"parentNode\",{get:function(){return!1}})}).prototype.getContext=function(t,e){var n;if(\"2d\"!==(t=t||\"2d\"))return null;for(n in e)this.pdf.context2d.hasOwnProperty(n)&&(this.pdf.context2d[n]=e[n]);return(this.pdf.context2d._canvas=this).pdf.context2d},n.prototype.toDataURL=function(){throw new Error(\"toDataURL is not implemented.\")},e.events.push([\"initialized\",function(){this.canvas=new n,this.canvas.pdf=this}]),\n/** \n * @license\n * ====================================================================\n * Copyright (c) 2013 Youssef Beddad, youssef.beddad@gmail.com\n * 2013 Eduardo Menezes de Morais, eduardo.morais@usp.br\n * 2013 Lee Driscoll, https://github.com/lsdriscoll\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 James Hall, james@parall.ax\n * 2014 Diego Casorran, https://github.com/diegocr\n *\n * \n * ====================================================================\n */\n_=lt.API,F={x:void 0,y:void 0,w:void 0,h:void 0,ln:void 0},P=1,p=function(t,e,n,r,i){F={x:t,y:e,w:n,h:r,ln:i}},d=function(){return F},k={left:0,top:0,bottom:0},_.setHeaderFunction=function(t){l=t},_.getTextDimensions=function(t,e){var n=this.table_font_size||this.internal.getFontSize(),r=(this.internal.getFont().fontStyle,(e=e||{}).scaleFactor||this.internal.scaleFactor),i=0,o=0,a=0;if(\"string\"==typeof t)0!=(i=this.getStringUnitWidth(t)*n)&&(o=1);else{if(\"[object Array]\"!==Object.prototype.toString.call(t))throw new Error(\"getTextDimensions expects text-parameter to be of type String or an Array of Strings.\");for(var s=0;s=this.internal.pageSize.getHeight()-h.bottom&&(this.cellAddPage(),l=!0,this.printHeaders&&this.tableHeaderRow&&this.printHeaderRow(o,!0)),e=d().y+d().h,l&&(e=23)}if(void 0!==i[0])if(this.printingHeaderRow?this.rect(t,e,n,r,\"FD\"):this.rect(t,e,n,r),\"right\"===a){i instanceof Array||(i=[i]);for(var u=0;u=2*Math.PI&&(r=0,i=2*Math.PI),this.path.push({type:\"arc\",x:t,y:e,radius:n,startAngle:r,endAngle:i,counterclockwise:o})},n.prototype.arcTo=function(t,e,n,r,i){throw new Error(\"arcTo not implemented.\")},n.prototype.rect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.rect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.rect\");this.moveTo(t,e),this.lineTo(t+n,e),this.lineTo(t+n,e+r),this.lineTo(t,e+r),this.lineTo(t,e),this.lineTo(t+n,e),this.lineTo(t,e)},n.prototype.fillRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.fillRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.fillRect\");if(!N.call(this)){var i={};\"butt\"!==this.lineCap&&(i.lineCap=this.lineCap,this.lineCap=\"butt\"),\"miter\"!==this.lineJoin&&(i.lineJoin=this.lineJoin,this.lineJoin=\"miter\"),this.beginPath(),this.rect(t,e,n,r),this.fill(),i.hasOwnProperty(\"lineCap\")&&(this.lineCap=i.lineCap),i.hasOwnProperty(\"lineJoin\")&&(this.lineJoin=i.lineJoin)}},n.prototype.strokeRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.strokeRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.strokeRect\");L.call(this)||(this.beginPath(),this.rect(t,e,n,r),this.stroke())},n.prototype.clearRect=function(t,e,n,r){if(isNaN(t)||isNaN(e)||isNaN(n)||isNaN(r))throw console.error(\"jsPDF.context2d.clearRect: Invalid arguments\",arguments),new Error(\"Invalid arguments passed to jsPDF.context2d.clearRect\");this.ignoreClearRect||(this.fillStyle=\"#ffffff\",this.fillRect(t,e,n,r))},n.prototype.save=function(t){t=\"boolean\"!=typeof t||t;for(var e=this.pdf.internal.getCurrentPageInfo().pageNumber,n=0;n\"},s=function(t){var r,e,n,i,o,a=String,s=\"length\",l=\"charCodeAt\",h=\"slice\",u=\"replace\";for(t[h](-2),t=t[h](0,-2)[u](/\\s/g,\"\")[u](\"z\",\"!!!!!\"),n=[],i=0,o=(t+=r=\"uuuuu\"[h](t[s]%5||5))[s];i>24,255&e>>16,255&e>>8,255&e);return function(t,e){for(var n=r[s];0\"},u=function(t){var e=new RegExp(/^([0-9A-Fa-f]{2})+$/);if(-1!==(t=t.replace(/\\s/g,\"\")).indexOf(\">\")&&(t=t.substr(0,t.indexOf(\">\"))),t.length%2&&(t+=\"0\"),!1===e.test(t))return\"\";for(var n=\"\",r=0;r>8&255,n>>16&255,n>>24&255]),t.length+2),t=String.fromCharCode.apply(null,i)},a.processDataByFilters=function(t,e){var n=0,r=t||\"\",i=[];for(\"string\"==typeof(e=e||[])&&(e=[e]),n=0;n>\"),this.internal.out(\"endobj\"),w=this.internal.newObject(),this.internal.out(\"<<\"),this.internal.out(\"/S /JavaScript\"),this.internal.out(\"/JS (\"+b+\")\"),this.internal.out(\">>\"),this.internal.out(\"endobj\")}),this.internal.events.subscribe(\"putCatalog\",function(){void 0!==v&&void 0!==w&&this.internal.out(\"/Names <>\")}),this},(\n/**\n * @license\n * Copyright (c) 2014 Steven Spungin (TwelveTone LLC) steven@twelvetone.tv\n *\n * Licensed under the MIT License.\n * http://opensource.org/licenses/mit-license\n */\nx=lt.API).events.push([\"postPutResources\",function(){var t=this,e=/^(\\d+) 0 obj$/;if(0> endobj\")}var c=t.internal.newObject();for(t.internal.write(\"<< /Names [ \"),r=0;r>\",\"endobj\"),t.internal.newObject(),t.internal.write(\"<< /Dests \"+c+\" 0 R\"),t.internal.write(\">>\",\"endobj\")}}]),x.events.push([\"putCatalog\",function(){0> \\r\\nendobj\\r\\n\"},a.outline.count_r=function(t,e){for(var n=0;n>>24&255,f[c++]=s>>>16&255,f[c++]=s>>>8&255,f[c++]=255&s,I.arrayBufferToBinaryString(f)},N=function(t,e){var n=Math.LOG2E*Math.log(32768)-8<<4|8,r=n<<8;return r|=Math.min(3,(e-1&255)>>1)<<6,r|=0,[n,255&(r+=31-r%31)]},L=function(t,e){for(var n,r=1,i=0,o=t.length,a=0;0>>0},A=function(t,e,n,r){for(var i,o,a,s=t.length/e,l=new Uint8Array(t.length+s),h=T(),u=0;u>>1)&255;return o},O=function(t,e,n){var r,i,o,a,s=[],l=0,h=t.length;for(s[0]=4;l>>d&255,d+=o.bits;y[w]=x>>>d&255}if(16===o.bits){g=(_=new Uint32Array(o.decodePixels().buffer)).length,m=new Uint8Array(g*(32/o.pixelBitlength)*o.colors),y=new Uint8Array(g*(32/o.pixelBitlength));for(var x,N=1>>0&255,N&&(m[b++]=x>>>16&255,x=_[w++],m[b++]=x>>>0&255),y[L++]=x>>>16&255;p=8}r!==I.image_compression.NONE&&C()?(t=B(m,o.width*o.colors,o.colors,r),u=B(y,o.width,1,r)):(t=m,u=y,f=null)}if(3===o.colorType&&(c=this.color_spaces.INDEXED,h=o.palette,o.transparency.indexed)){var A=o.transparency.indexed,S=0;for(w=0,g=A.length;wr&&(i.push(t.slice(l,o)),s=0,l=o),s+=e[o],o++;return l!==o&&i.push(t.slice(l,o)),i},J=function(t,e,n){n||(n={});var r,i,o,a,s,l,h=[],u=[h],c=n.textIndent||0,f=0,p=0,d=t.split(\" \"),g=W.apply(this,[\" \",n])[0];if(l=-1===n.lineIndent?d[0].length+2:n.lineIndent||0){var m=Array(l).join(\" \"),y=[];d.map(function(t){1<(t=t.split(/\\s*\\n/)).length?y=y.concat(t.map(function(t,e){return(e&&t.length?\"\\n\":\"\")+t})):y.push(t[0])}),d=y,l=G.apply(this,[m,n])}for(o=0,a=d.length;o>\")}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},\n/** ==================================================================== \n * jsPDF XMP metadata plugin\n * Copyright (c) 2016 Jussi Utunen, u-jussi@suomi24.fi\n * \n * \n * ====================================================================\n */\nnt=lt.API,ot=it=rt=\"\",nt.addMetadata=function(t,e){return it=e||\"http://jspdf.default.namespaceuri/\",rt=t,this.internal.events.subscribe(\"postPutResources\",function(){if(rt){var t='',e=unescape(encodeURIComponent('')),n=unescape(encodeURIComponent(t)),r=unescape(encodeURIComponent(rt)),i=unescape(encodeURIComponent(\"\")),o=unescape(encodeURIComponent(\"\")),a=n.length+r.length+i.length+e.length+o.length;ot=this.internal.newObject(),this.internal.write(\"<< /Type /Metadata /Subtype /XML /Length \"+a+\" >>\"),this.internal.write(\"stream\"),this.internal.write(e+n+r+i+o),this.internal.write(\"endstream\"),this.internal.write(\"endobj\")}else ot=\"\"}),this.internal.events.subscribe(\"putCatalog\",function(){ot&&this.internal.write(\"/Metadata \"+ot+\" 0 R\")}),this},function(f,t){var e=f.API;var m=e.pdfEscape16=function(t,e){for(var n,r=e.metadata.Unicode.widths,i=[\"\",\"0\",\"00\",\"000\",\"0000\"],o=[\"\"],a=0,s=t.length;a> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000>\\nendcodespacerange\",r=[],a=0,s=(n=Object.keys(t).sort(function(t,e){return t-e})).length;a<\"+i+\">\");return r.length&&(o+=\"\\n\"+r.length+\" beginbfchar\\n\"+r.join(\"\\n\")+\"\\nendbfchar\\n\"),o+=\"endcmap\\nCMapName currentdict /CMap defineresource pop\\nend\\nend\"};e.events.push([\"putFont\",function(t){!function(t,e,n,r){if(t.metadata instanceof f.API.TTFFont&&\"Identity-H\"===t.encoding){for(var i=t.metadata.Unicode.widths,o=t.metadata.subset.encode(t.metadata.glyIdsUsed,1),a=\"\",s=0;s>\"),e(\"endobj\");var c=n();e(\"<<\"),e(\"/Type /Font\"),e(\"/BaseFont /\"+t.fontName),e(\"/FontDescriptor \"+u+\" 0 R\"),e(\"/W \"+f.API.PDFObject.convert(i)),e(\"/CIDToGIDMap /Identity\"),e(\"/DW 1000\"),e(\"/Subtype /CIDFontType2\"),e(\"/CIDSystemInfo\"),e(\"<<\"),e(\"/Supplement 0\"),e(\"/Registry (Adobe)\"),e(\"/Ordering (\"+t.encoding+\")\"),e(\">>\"),e(\">>\"),e(\"endobj\"),t.objectNumber=n(),e(\"<<\"),e(\"/Type /Font\"),e(\"/Subtype /Type0\"),e(\"/ToUnicode \"+h+\" 0 R\"),e(\"/BaseFont /\"+t.fontName),e(\"/Encoding /\"+t.encoding),e(\"/DescendantFonts [\"+c+\" 0 R]\"),e(\">>\"),e(\"endobj\"),t.isAlreadyPutted=!0}}(t.font,t.out,t.newObject,t.putStream)}]);e.events.push([\"putFont\",function(t){!function(t,e,n,r){if(t.metadata instanceof f.API.TTFFont&&\"WinAnsiEncoding\"===t.encoding){t.metadata.Unicode.widths;for(var i=t.metadata.rawData,o=\"\",a=0;a>\"),e(\"endobj\"),t.objectNumber=n(),a=0;a>\"),e(\"endobj\"),t.isAlreadyPutted=!0}}(t.font,t.out,t.newObject,t.putStream)}]);var h=function(t){var e,n,r=t.text||\"\",i=t.x,o=t.y,a=t.options||{},s=t.mutex||{},l=s.pdfEscape,h=s.activeFontKey,u=s.fonts,c=(s.activeFontSize,\"\"),f=0,p=\"\",d=u[n=h].encoding;if(\"Identity-H\"!==u[n].encoding)return{text:r,x:i,y:o,options:a,mutex:s};for(p=r,n=h,\"[object Array]\"===Object.prototype.toString.call(r)&&(p=r[0]),f=0;fw-h.top-h.bottom&&s.pagesplit){var p=function(t,e,n,r,i){var o=document.createElement(\"canvas\");o.height=i,o.width=r;var a=o.getContext(\"2d\");return a.mozImageSmoothingEnabled=!1,a.webkitImageSmoothingEnabled=!1,a.msImageSmoothingEnabled=!1,a.imageSmoothingEnabled=!1,a.fillStyle=s.backgroundColor||\"#ffffff\",a.fillRect(0,0,r,i),a.drawImage(t,e,n,r,i,0,0,r,i),o},n=function(){for(var t,e,n=0,r=0,i={},o=!1;;){var a;if(r=0,i.top=0!==n?h.top:g,i.left=0!==n?h.left:d,o=(v-h.left-h.right)*y=l.width)break;this.addPage()}else s=[a=p(l,0,n,t,e),i.left,i.top,a.width/y,a.height/y,c,null,f],this.addImage.apply(this,s);if((n+=e)>=l.height)break;this.addPage()}m(u,n,null,s)}.bind(this);if(\"CANVAS\"===l.nodeName){var r=new Image;r.onload=n,r.src=l.toDataURL(\"image/png\"),l=r}else n()}else{var i=Math.random().toString(35),o=[l,d,g,u,e,c,i,f];this.addImage.apply(this,o),m(u,e,i,o)}}.bind(this),\"undefined\"!=typeof html2canvas&&!s.rstz)return html2canvas(t,s);if(\"undefined\"==typeof rasterizeHTML)return null;var n=\"drawDocument\";return\"string\"==typeof t&&(n=/^http/.test(t)?\"drawURL\":\"drawHTML\"),s.width=s.width||v*y,rasterizeHTML[n](t,void 0,s).then(function(t){s.onrendered(t.image)},function(t){m(null,t)})},\n/**\n * jsPDF fromHTML plugin. BETA stage. API subject to change. Needs browser\n * Copyright (c) 2012 Willow Systems Corporation, willow-systems.com\n * 2014 Juan Pablo Gaviria, https://github.com/juanpgaviria\n * 2014 Diego Casorran, https://github.com/diegocr\n * 2014 Daniel Husar, https://github.com/danielhusar\n * 2014 Wolfgang Gassler, https://github.com/woolfg\n * 2014 Steven Spungin, https://github.com/flamenco\n *\n * @license\n * \n * ====================================================================\n */\nfunction(t){var P,k,i,a,s,l,h,u,I,w,f,c,p,n,C,B,d,g,m,j;P=function(){return function(t){return e.prototype=t,new e};function e(){}}(),w=function(t){var e,n,r,i,o,a,s;for(n=0,r=t.length,e=void 0,a=i=!1;!i&&n!==r;)(e=t[n]=t[n].trimLeft())&&(i=!0),n++;for(n=r-1;r&&!a&&-1!==n;)(e=t[n]=t[n].trimRight())&&(a=!0),n--;for(o=/\\s+$/g,s=!0,n=0;n!==r;)\"\\u2028\"!=t[n]&&(e=t[n].replace(/\\s+/g,\" \"),s&&(e=e.trimLeft()),e&&(s=o.test(e)),t[n]=e),n++;return t},c=function(t){var e,n,r;for(e=void 0,n=(r=t.split(\",\")).shift();!e&&n;)e=i[n.trim().toLowerCase()],n=r.shift();return e},p=function(t){var e;return-1<(t=\"auto\"===t?\"0px\":t).indexOf(\"em\")&&!isNaN(Number(t.replace(\"em\",\"\")))&&(t=18.719*Number(t.replace(\"em\",\"\"))+\"px\"),-1i.pdf.margins_doc.top&&(i.pdf.addPage(),i.y=i.pdf.margins_doc.top,i.executeWatchFunctions(n));var b=I(n),x=i.x,N=12/i.pdf.internal.scaleFactor,L=(b[\"margin-left\"]+b[\"padding-left\"])*N,A=(b[\"margin-right\"]+b[\"padding-right\"])*N,S=(b[\"margin-top\"]+b[\"padding-top\"])*N,_=(b[\"margin-bottom\"]+b[\"padding-bottom\"])*N;void 0!==b.float&&\"right\"===b.float?x+=i.settings.width-n.width-A:x+=L,i.pdf.addImage(v,x,i.y+S,n.width,n.height),v=void 0,\"right\"===b.float||\"left\"===b.float?(i.watchFunctions.push(function(t,e,n,r){return i.y>=e?(i.x+=t,i.settings.width+=n,!0):!!(r&&1===r.nodeType&&!E[r.nodeName]&&i.x+r.width>i.pdf.margins_doc.left+i.pdf.margins_doc.width)&&(i.x+=t,i.y=e,i.settings.width+=n,!0)}.bind(this,\"left\"===b.float?-n.width-L-A:0,i.y+n.height+S+_,n.width)),i.watchFunctions.push(function(t,e,n){return!(i.y]*?>/gi,\"\"),h=\"jsPDFhtmlText\"+Date.now().toString()+(1e3*Math.random()).toFixed(0),(l=document.createElement(\"div\")).style.cssText=\"position: absolute !important;clip: rect(1px 1px 1px 1px); /* IE6, IE7 */clip: rect(1px, 1px, 1px, 1px);padding:0 !important;border:0 !important;height: 1px !important;width: 1px !important; top:auto;left:-100px;overflow: hidden;\",l.innerHTML='